@voiceflow/common 8.9.3 → 8.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/cjs/utils/variables.d.ts +9 -3
- package/build/cjs/utils/variables.d.ts.map +1 -1
- package/build/cjs/utils/variables.js +14 -13
- package/build/esm/utils/variables.d.ts +9 -3
- package/build/esm/utils/variables.d.ts.map +1 -1
- package/build/esm/utils/variables.js +14 -13
- package/package.json +2 -2
|
@@ -5,15 +5,21 @@ export declare const splitVariableName: (inner: string, options?: {
|
|
|
5
5
|
id: string;
|
|
6
6
|
path: string;
|
|
7
7
|
};
|
|
8
|
-
export declare function replaceVariables(phrase: string | undefined | null, variables: Record<string, unknown>,
|
|
8
|
+
export declare function replaceVariables(phrase: string | undefined | null, variables: Record<string, unknown>, options?: {
|
|
9
|
+
modifier?: (variable: unknown) => unknown;
|
|
9
10
|
trim?: boolean;
|
|
10
11
|
keepTypeIfOnlyVariable?: false;
|
|
11
12
|
}): string;
|
|
12
|
-
export declare function replaceVariables(phrase: string | undefined | null, variables: Record<string, unknown>,
|
|
13
|
+
export declare function replaceVariables(phrase: string | undefined | null, variables: Record<string, unknown>, options: {
|
|
14
|
+
modifier?: (variable: unknown) => unknown;
|
|
13
15
|
trim?: boolean;
|
|
14
16
|
keepTypeIfOnlyVariable: true;
|
|
15
17
|
}): unknown;
|
|
16
18
|
export declare const sanitizeVariables: (variables: Record<string, unknown>) => Record<string, unknown>;
|
|
17
19
|
export declare const transformStringVariableToNumber: (str: string | number | null) => number | string | null;
|
|
18
|
-
export declare const deepVariableSubstitution: <T>(bodyData: T, variableMap: Record<string, unknown
|
|
20
|
+
export declare const deepVariableSubstitution: <T>(bodyData: T, variableMap: Record<string, unknown>, options?: {
|
|
21
|
+
trim?: boolean;
|
|
22
|
+
modifier?: (variable: unknown) => unknown;
|
|
23
|
+
keepTypeIfOnlyVariable?: boolean;
|
|
24
|
+
}) => T;
|
|
19
25
|
//# sourceMappingURL=variables.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"variables.d.ts","sourceRoot":"","sources":["../../../src/utils/variables.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,gBAAgB,UACpB,MAAM,SACN,MAAM,aACF,OAAO,MAAM,EAAE,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"variables.d.ts","sourceRoot":"","sources":["../../../src/utils/variables.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,gBAAgB,UACpB,MAAM,SACN,MAAM,aACF,OAAO,MAAM,EAAE,OAAO,CAAC,aACxB,CAAC,QAAQ,EAAE,OAAO,KAAK,OAAO,KACvC,OAoBF,CAAC;AAEF,eAAO,MAAM,iBAAiB,UACrB,MAAM,YACJ;IAAE,iBAAiB,EAAE,OAAO,CAAA;CAAE;;;CAiCxC,CAAC;AAEF,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,EACjC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,sBAAsB,CAAC,EAAE,KAAK,CAAA;CAAE,GACtG,MAAM,CAAC;AACV,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,EACjC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,OAAO,EAAE;IAAE,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,sBAAsB,EAAE,IAAI,CAAA;CAAE,GACnG,OAAO,CAAC;AA6BX,eAAO,MAAM,iBAAiB,cAAe,OAAO,MAAM,EAAE,OAAO,CAAC,KAAG,OAAO,MAAM,EAAE,OAAO,CASrF,CAAC;AAET,eAAO,MAAM,+BAA+B,QAAS,MAAM,GAAG,MAAM,GAAG,IAAI,KAAG,MAAM,GAAG,MAAM,GAAG,IAY/F,CAAC;AAEF,eAAO,MAAM,wBAAwB,gBACzB,CAAC,eACE,OAAO,MAAM,EAAE,OAAO,CAAC,YAC1B;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,OAAO,CAAC;IAAC,sBAAsB,CAAC,EAAE,OAAO,CAAA;CAAE,KACxG,CA2BF,CAAC"}
|
|
@@ -6,17 +6,17 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.deepVariableSubstitution = exports.transformStringVariableToNumber = exports.sanitizeVariables = exports.replaceVariables = exports.splitVariableName = exports.variableReplacer = void 0;
|
|
7
7
|
const constants_1 = require("../constants");
|
|
8
8
|
const get_js_1 = __importDefault(require("lodash/get.js"));
|
|
9
|
-
const variableReplacer = (match, inner, variables, modifier) => {
|
|
9
|
+
const variableReplacer = (match, inner, variables, modifier = (val) => val) => {
|
|
10
10
|
const { id, path } = (0, exports.splitVariableName)(inner);
|
|
11
11
|
if (!(id in variables)) {
|
|
12
12
|
return match;
|
|
13
13
|
}
|
|
14
14
|
if (!path) {
|
|
15
|
-
return
|
|
15
|
+
return modifier(variables[id]);
|
|
16
16
|
}
|
|
17
17
|
try {
|
|
18
18
|
const variable = typeof variables[id] === 'string' ? JSON.parse(variables[id]) : variables[id];
|
|
19
|
-
return
|
|
19
|
+
return modifier((0, get_js_1.default)(variable, path, 0));
|
|
20
20
|
}
|
|
21
21
|
catch (err) {
|
|
22
22
|
if (err?.message.includes('is not valid JSON')) {
|
|
@@ -56,16 +56,17 @@ const splitVariableName = (inner, options = { pathWithDotPrefix: false }) => {
|
|
|
56
56
|
};
|
|
57
57
|
};
|
|
58
58
|
exports.splitVariableName = splitVariableName;
|
|
59
|
-
function replaceVariables(phrase, variables,
|
|
60
|
-
|
|
59
|
+
function replaceVariables(phrase, variables, { trim = true, modifier, keepTypeIfOnlyVariable = false, } = {}) {
|
|
60
|
+
const formattedPhrase = trim ? phrase?.trim() : phrase;
|
|
61
|
+
if (!formattedPhrase) {
|
|
61
62
|
return '';
|
|
62
63
|
}
|
|
63
|
-
if (keepTypeIfOnlyVariable &&
|
|
64
|
+
if (keepTypeIfOnlyVariable && formattedPhrase.match(constants_1.VARIABLE_ONLY_REGEXP)) {
|
|
64
65
|
// remove the curly braces {} from phrase to get the inner
|
|
65
|
-
const inner =
|
|
66
|
-
return (0, exports.variableReplacer)(
|
|
66
|
+
const inner = formattedPhrase.slice(1, -1);
|
|
67
|
+
return (0, exports.variableReplacer)(formattedPhrase, inner, variables, modifier);
|
|
67
68
|
}
|
|
68
|
-
return
|
|
69
|
+
return formattedPhrase.replace(constants_1.READABLE_VARIABLE_REGEXP, (match, inner) => String((0, exports.variableReplacer)(match, inner, variables, modifier)));
|
|
69
70
|
}
|
|
70
71
|
exports.replaceVariables = replaceVariables;
|
|
71
72
|
// turn float variables to 4 decimal places
|
|
@@ -90,16 +91,16 @@ const transformStringVariableToNumber = (str) => {
|
|
|
90
91
|
return Number.isNaN(number) ? str : number;
|
|
91
92
|
};
|
|
92
93
|
exports.transformStringVariableToNumber = transformStringVariableToNumber;
|
|
93
|
-
const deepVariableSubstitution = (bodyData, variableMap) => {
|
|
94
|
-
const _recurse = (subCollection
|
|
94
|
+
const deepVariableSubstitution = (bodyData, variableMap, options) => {
|
|
95
|
+
const _recurse = (subCollection) => {
|
|
95
96
|
if (!subCollection) {
|
|
96
97
|
return subCollection;
|
|
97
98
|
}
|
|
98
99
|
if (typeof subCollection === 'string') {
|
|
99
|
-
return replaceVariables(subCollection, variableMap,
|
|
100
|
+
return replaceVariables(subCollection, variableMap, options);
|
|
100
101
|
}
|
|
101
102
|
if (Array.isArray(subCollection)) {
|
|
102
|
-
return subCollection.map((v) => _recurse(v
|
|
103
|
+
return subCollection.map((v) => _recurse(v));
|
|
103
104
|
}
|
|
104
105
|
if (typeof subCollection === 'object') {
|
|
105
106
|
Object.keys(subCollection).forEach((key) => {
|
|
@@ -5,15 +5,21 @@ export declare const splitVariableName: (inner: string, options?: {
|
|
|
5
5
|
id: string;
|
|
6
6
|
path: string;
|
|
7
7
|
};
|
|
8
|
-
export declare function replaceVariables(phrase: string | undefined | null, variables: Record<string, unknown>,
|
|
8
|
+
export declare function replaceVariables(phrase: string | undefined | null, variables: Record<string, unknown>, options?: {
|
|
9
|
+
modifier?: (variable: unknown) => unknown;
|
|
9
10
|
trim?: boolean;
|
|
10
11
|
keepTypeIfOnlyVariable?: false;
|
|
11
12
|
}): string;
|
|
12
|
-
export declare function replaceVariables(phrase: string | undefined | null, variables: Record<string, unknown>,
|
|
13
|
+
export declare function replaceVariables(phrase: string | undefined | null, variables: Record<string, unknown>, options: {
|
|
14
|
+
modifier?: (variable: unknown) => unknown;
|
|
13
15
|
trim?: boolean;
|
|
14
16
|
keepTypeIfOnlyVariable: true;
|
|
15
17
|
}): unknown;
|
|
16
18
|
export declare const sanitizeVariables: (variables: Record<string, unknown>) => Record<string, unknown>;
|
|
17
19
|
export declare const transformStringVariableToNumber: (str: string | number | null) => number | string | null;
|
|
18
|
-
export declare const deepVariableSubstitution: <T>(bodyData: T, variableMap: Record<string, unknown
|
|
20
|
+
export declare const deepVariableSubstitution: <T>(bodyData: T, variableMap: Record<string, unknown>, options?: {
|
|
21
|
+
trim?: boolean;
|
|
22
|
+
modifier?: (variable: unknown) => unknown;
|
|
23
|
+
keepTypeIfOnlyVariable?: boolean;
|
|
24
|
+
}) => T;
|
|
19
25
|
//# sourceMappingURL=variables.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"variables.d.ts","sourceRoot":"","sources":["../../../src/utils/variables.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,gBAAgB,UACpB,MAAM,SACN,MAAM,aACF,OAAO,MAAM,EAAE,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"variables.d.ts","sourceRoot":"","sources":["../../../src/utils/variables.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,gBAAgB,UACpB,MAAM,SACN,MAAM,aACF,OAAO,MAAM,EAAE,OAAO,CAAC,aACxB,CAAC,QAAQ,EAAE,OAAO,KAAK,OAAO,KACvC,OAoBF,CAAC;AAEF,eAAO,MAAM,iBAAiB,UACrB,MAAM,YACJ;IAAE,iBAAiB,EAAE,OAAO,CAAA;CAAE;;;CAiCxC,CAAC;AAEF,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,EACjC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,sBAAsB,CAAC,EAAE,KAAK,CAAA;CAAE,GACtG,MAAM,CAAC;AACV,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,EACjC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,OAAO,EAAE;IAAE,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,sBAAsB,EAAE,IAAI,CAAA;CAAE,GACnG,OAAO,CAAC;AA6BX,eAAO,MAAM,iBAAiB,cAAe,OAAO,MAAM,EAAE,OAAO,CAAC,KAAG,OAAO,MAAM,EAAE,OAAO,CASrF,CAAC;AAET,eAAO,MAAM,+BAA+B,QAAS,MAAM,GAAG,MAAM,GAAG,IAAI,KAAG,MAAM,GAAG,MAAM,GAAG,IAY/F,CAAC;AAEF,eAAO,MAAM,wBAAwB,gBACzB,CAAC,eACE,OAAO,MAAM,EAAE,OAAO,CAAC,YAC1B;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,OAAO,CAAC;IAAC,sBAAsB,CAAC,EAAE,OAAO,CAAA;CAAE,KACxG,CA2BF,CAAC"}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import { READABLE_VARIABLE_REGEXP, VARIABLE_ONLY_REGEXP } from '../constants/index.js';
|
|
2
2
|
import _get from 'lodash/get.js';
|
|
3
|
-
export const variableReplacer = (match, inner, variables, modifier) => {
|
|
3
|
+
export const variableReplacer = (match, inner, variables, modifier = (val) => val) => {
|
|
4
4
|
const { id, path } = splitVariableName(inner);
|
|
5
5
|
if (!(id in variables)) {
|
|
6
6
|
return match;
|
|
7
7
|
}
|
|
8
8
|
if (!path) {
|
|
9
|
-
return
|
|
9
|
+
return modifier(variables[id]);
|
|
10
10
|
}
|
|
11
11
|
try {
|
|
12
12
|
const variable = typeof variables[id] === 'string' ? JSON.parse(variables[id]) : variables[id];
|
|
13
|
-
return
|
|
13
|
+
return modifier(_get(variable, path, 0));
|
|
14
14
|
}
|
|
15
15
|
catch (err) {
|
|
16
16
|
if (err?.message.includes('is not valid JSON')) {
|
|
@@ -48,16 +48,17 @@ export const splitVariableName = (inner, options = { pathWithDotPrefix: false })
|
|
|
48
48
|
path: inner.slice(firstSquareBracketIndex),
|
|
49
49
|
};
|
|
50
50
|
};
|
|
51
|
-
export function replaceVariables(phrase, variables,
|
|
52
|
-
|
|
51
|
+
export function replaceVariables(phrase, variables, { trim = true, modifier, keepTypeIfOnlyVariable = false, } = {}) {
|
|
52
|
+
const formattedPhrase = trim ? phrase?.trim() : phrase;
|
|
53
|
+
if (!formattedPhrase) {
|
|
53
54
|
return '';
|
|
54
55
|
}
|
|
55
|
-
if (keepTypeIfOnlyVariable &&
|
|
56
|
+
if (keepTypeIfOnlyVariable && formattedPhrase.match(VARIABLE_ONLY_REGEXP)) {
|
|
56
57
|
// remove the curly braces {} from phrase to get the inner
|
|
57
|
-
const inner =
|
|
58
|
-
return variableReplacer(
|
|
58
|
+
const inner = formattedPhrase.slice(1, -1);
|
|
59
|
+
return variableReplacer(formattedPhrase, inner, variables, modifier);
|
|
59
60
|
}
|
|
60
|
-
return
|
|
61
|
+
return formattedPhrase.replace(READABLE_VARIABLE_REGEXP, (match, inner) => String(variableReplacer(match, inner, variables, modifier)));
|
|
61
62
|
}
|
|
62
63
|
// turn float variables to 4 decimal places
|
|
63
64
|
export const sanitizeVariables = (variables) => Object.entries(variables).reduce((acc, [key, value]) => {
|
|
@@ -79,16 +80,16 @@ export const transformStringVariableToNumber = (str) => {
|
|
|
79
80
|
const number = Number(str);
|
|
80
81
|
return Number.isNaN(number) ? str : number;
|
|
81
82
|
};
|
|
82
|
-
export const deepVariableSubstitution = (bodyData, variableMap) => {
|
|
83
|
-
const _recurse = (subCollection
|
|
83
|
+
export const deepVariableSubstitution = (bodyData, variableMap, options) => {
|
|
84
|
+
const _recurse = (subCollection) => {
|
|
84
85
|
if (!subCollection) {
|
|
85
86
|
return subCollection;
|
|
86
87
|
}
|
|
87
88
|
if (typeof subCollection === 'string') {
|
|
88
|
-
return replaceVariables(subCollection, variableMap,
|
|
89
|
+
return replaceVariables(subCollection, variableMap, options);
|
|
89
90
|
}
|
|
90
91
|
if (Array.isArray(subCollection)) {
|
|
91
|
-
return subCollection.map((v) => _recurse(v
|
|
92
|
+
return subCollection.map((v) => _recurse(v));
|
|
92
93
|
}
|
|
93
94
|
if (typeof subCollection === 'object') {
|
|
94
95
|
Object.keys(subCollection).forEach((key) => {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@voiceflow/common",
|
|
3
|
-
"version": "8.
|
|
3
|
+
"version": "8.11.0",
|
|
4
4
|
"description": "Junk drawer of utility functions",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"voiceflow"
|
|
@@ -88,5 +88,5 @@
|
|
|
88
88
|
"publishConfig": {
|
|
89
89
|
"access": "public"
|
|
90
90
|
},
|
|
91
|
-
"gitHead": "
|
|
91
|
+
"gitHead": "f36349e81e2cc0cdee06b6c74d68f41116a7072e"
|
|
92
92
|
}
|