UNPKG

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