This is the Stubber Interpolation Package, used by services to interpolate a field
, specified as a string, from data
, which is generally an object.
The package exports a function called Plugin
. The Plugin
function returns an object that contains a function called process
. This process
function takes two parameters, field
and data
. It then extract variables specified in field
from data
. See usage example in the Usage section
When releasing a new version of the package, update the package.json file's version.
Ex.: "version": "1.5.5"
-> "version": "1.5.6"
Take a look at npm's semantic versioning to decide what the new version should be.
Now run the following commands to publish a new version of the package to npm:
npm version patch
npm publish
Import the Plugin
function, and then call it with the sref_co_host
and sref_cc_host
values to ensure that stublinks
and stuburls
point to live/dev.
import { Plugin } from "stubber-interpolation-pkg"
let interpolation = Plugin({
sref_co_host: config.sref_co?.host, // "http://sref.co" or http://dev.sref.co",
sref_cc_host: config.sref_cc?.host, // "http://sref.cc" or http://dev.sref.cc",
stub_by_host: config.stub_by?.host, // "http://stub.by" or http://dev.stub.by",
stub_by_security_token: config.stub_by?.security_token,
});
This interpolation can then be exported to use everywhere in the code. This is generally done as a plugin, which can be seen in the stubber-core
project.
To use it:
interpolation.process(field, data)
The steps below walk through how you would add a new helper.
- Open the initHandlebars.js file
- Add a new file in the helpers directory
- Use an existing helper as a starting point
- Open the interpolation.test.js file and add at least one test for your helper
- Run
npm run test
from the project directory to run the tests.- Ensure all tests pass
- Remember to run
npm install
first if the run command fails.
eg:
"~~stub.number" -> "2022-12-07-1123"
"Hello {{name}}" -> "Hello Abrie"
Various field types are handled as follows:
- Pure strings - eg.
"some string"
Returned unchanged - Strings starting with
~~
- eg"~~stub.data.value"
,value
are extracted from data asstub.data.value
. This handles bracket notation as well, so the same value could also have been specified as"~~stub[data][value]"
- Integers and floats - eg
2
or3.14
become strings"2"
and"3.14"
. - Arrays - eg
["~~stub.data.value", "~~post.uuid"]
are run recursively, each element executesinterpolate
with the element asfield
and the same data asdata
. It then returns an array with each element interpolated[stub_data_value, post_uuid]
- Objects - eg
{stubnumber: "~~stub.number", d1:{d2:{d3:'~~d1.d2.d3'}}}
also run recursively, each nested value is interpolated and the result is returned as an object.{stubnumber: "2022-12-07-1123", d1:{d2:{d3:'d3_value'}}}
The package uses the function handleTildeNotation
to handle fields
that starts with a double tilde ("~~
").
The handleHandlebarsTemplate
(lol) function is used to handle fields
that contain plain strings or strings that contain handlebar templates
, ie. anything with {{}}
type syntax.
Handlebar
helpers
or partials
are defined in the src/initHandlebars.js
file.