UNPKG

1.52 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.preparseMergeArgsExpr = exports.EXPANSION_PREFIX = exports.KEY_DELIMITER = void 0;
4exports.KEY_DELIMITER = '__dot__';
5exports.EXPANSION_PREFIX = '__exp';
6function preparseMergeArgsExpr(mergeArgsExpr) {
7 const variableRegex = /\$[_A-Za-z][_A-Za-z0-9.]*/g;
8 const dotRegex = /\./g;
9 mergeArgsExpr = mergeArgsExpr.replace(variableRegex, variable => variable.replace(dotRegex, exports.KEY_DELIMITER));
10 const segments = mergeArgsExpr.split('[[');
11 const expansionExpressions = Object.create(null);
12 if (segments.length === 1) {
13 return { mergeArgsExpr, expansionExpressions };
14 }
15 let finalSegments = [segments[0]];
16 for (let i = 1; i < segments.length; i++) {
17 const additionalSegments = segments[i].split(']]');
18 if (additionalSegments.length !== 2) {
19 throw new Error(`Each opening "[[" must be matched by a closing "]]" without nesting.`);
20 }
21 finalSegments = finalSegments.concat(additionalSegments);
22 }
23 let finalMergeArgsExpr = finalSegments[0];
24 for (let i = 1; i < finalSegments.length - 1; i += 2) {
25 const variableName = `${exports.EXPANSION_PREFIX}${(i - 1) / 2 + 1}`;
26 expansionExpressions[variableName] = finalSegments[i];
27 finalMergeArgsExpr += `\$${variableName}${finalSegments[i + 1]}`;
28 }
29 return { mergeArgsExpr: finalMergeArgsExpr, expansionExpressions };
30}
31exports.preparseMergeArgsExpr = preparseMergeArgsExpr;