@evlop/commons 1.0.256 → 1.0.257
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/dist/src/edl/parser.d.ts.map +1 -1
- package/dist/src/edl/parser.js +43 -9
- package/dist/src/edl/parser.js.map +1 -1
- package/dist/src/edl/parser.test.d.ts +2 -0
- package/dist/src/edl/parser.test.d.ts.map +1 -0
- package/dist/src/edl/parser.test.js +222 -0
- package/dist/src/edl/parser.test.js.map +1 -0
- package/dist/src/helpers/pathHelper.d.ts.map +1 -1
- package/dist/src/helpers/pathHelper.js +7 -7
- package/dist/src/helpers/pathHelper.js.map +1 -1
- package/dist/src/helpers/pathhelper.test.js +6 -6
- package/dist/src/helpers/pathhelper.test.js.map +1 -1
- package/package.json +2 -1
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../src/edl/parser.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../src/edl/parser.ts"],"names":[],"mappings":"AAqHA,iBAAS,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,mBAAmB,EAAE,GAAG,CAAC,MAAM,CAAC,SAiIlE;AAGD,eAAe,QAAQ,CAAC"}
|
package/dist/src/edl/parser.js
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
const lodash_1 = require("lodash");
|
4
|
+
const he_1 = require("he");
|
4
5
|
const inbuiltVariables = ['context', 'data', 'setRuntimeData', 'setState', 'setStates', 'state', 'dispatchAction', 'createAction'];
|
5
6
|
// Regex to match expressions in EDL
|
6
7
|
const expressionRegex = /{(\((?:(?!\)\}).)*\)|[^{}]*)}/g;
|
@@ -13,12 +14,33 @@ const attributeRegex = /([a-zA-Z0-9_\-\.\:]+)=("[^"]*"|'[^']*'|`[^`]*`|\{\{(?:(?
|
|
13
14
|
// Regex to split the JSX string into tokens using opening or closing tag regex pattern
|
14
15
|
const openingOrClosingTagRegex = /(<(?:\/)?(?:[a-zA-Z0-9_]+)(?:(?:\s+[a-zA-Z0-9_\-\.\:]+=(?:"[^"]*"|'[^']*'|`[^`]*`|\{\{(?:(?!\}\}).)*\}\}|\{\[(?:(?!\]\}).)*\]\}|\{\((?:(?!\)\}).)*\)\}|\{[^\}]*\}))*)\s*(?:\/)?>)/s;
|
15
16
|
const TemplateCompiler = {
|
17
|
+
breakTemplateStringToExpressionsAndStaticString: (templateString) => {
|
18
|
+
const parts = [];
|
19
|
+
const regex = new RegExp(expressionRegex);
|
20
|
+
let match;
|
21
|
+
let lastIndex = 0;
|
22
|
+
while ((match = regex.exec(templateString)) !== null) {
|
23
|
+
const startIndex = match.index;
|
24
|
+
const endIndex = startIndex + match[0].length;
|
25
|
+
if (startIndex > lastIndex) {
|
26
|
+
parts.push({ startIndex, endIndex, type: 'string', value: templateString.slice(lastIndex, startIndex) });
|
27
|
+
}
|
28
|
+
parts.push({ startIndex, endIndex, type: 'expression', value: match[1] });
|
29
|
+
lastIndex = endIndex;
|
30
|
+
}
|
31
|
+
if (lastIndex < templateString.length) {
|
32
|
+
parts.push({ startIndex: lastIndex, endIndex: templateString.length, type: 'string', value: templateString.slice(lastIndex) });
|
33
|
+
}
|
34
|
+
return parts;
|
35
|
+
},
|
16
36
|
compileStringTemplate: (variables) => {
|
17
37
|
const variableNamesString = `{ ${variables.join(', ')} }`;
|
18
|
-
return templateString => {
|
38
|
+
return (templateString) => {
|
19
39
|
try {
|
20
40
|
// replace all the {expression} with ${ expression } and wrap the whole template in a function
|
21
41
|
const processedTemplate = templateString.replace(expressionRegex, "${ $1 }");
|
42
|
+
if (processedTemplate === templateString)
|
43
|
+
return templateString;
|
22
44
|
return new Function(variableNamesString, `return \`${processedTemplate}\`;`);
|
23
45
|
}
|
24
46
|
catch (e) { }
|
@@ -37,6 +59,13 @@ const TemplateCompiler = {
|
|
37
59
|
function generateUniqueId() {
|
38
60
|
return lodash_1.random(1000, 9999999999).toString(36);
|
39
61
|
}
|
62
|
+
function removeUnnecessaryWhitespace(htmlString) {
|
63
|
+
return htmlString
|
64
|
+
.replace(/>\s*\n\s*/g, '>') // Remove whitespace/newline between closing bracket and content
|
65
|
+
.replace(/\s*\n\s*</g, '<') // Remove whitespace/newline between opening bracket and content
|
66
|
+
.replace(/\s*\n\s*/g, ' ') // Remove whitespace from start and end of each line
|
67
|
+
.trim(); // Trim leading and trailing whitespaces
|
68
|
+
}
|
40
69
|
const scriptTagRegex = /<(Script)([^>]*?)>(.*?)<\/\1>/gs;
|
41
70
|
const variableDeclarationRegex = /(const|var|let)\s+(\$[a-zA-Z0-9_]+)/g;
|
42
71
|
function extractScriptsAndVariables(inputString) {
|
@@ -66,17 +95,20 @@ function extractAsVariables(inputString) {
|
|
66
95
|
// This function takes a JSX string as input and returns an array of objects representing the parsed JSX structure.
|
67
96
|
function parseEDL(edlString, additionalVariables) {
|
68
97
|
// separate the scripts and extract variables from the edl string
|
69
|
-
const { cleanedString:
|
98
|
+
const { cleanedString: edlStringWithCodeRemovedFromScript, scriptsById, variables: scriptVariables } = extractScriptsAndVariables(edlString);
|
99
|
+
// remove unnecessary whitespace from the edl string, after code has been removed from the script tags
|
100
|
+
const edlStringWithCodeRemovedFromScriptAndWhitespaceRemoved = removeUnnecessaryWhitespace(edlStringWithCodeRemovedFromScript);
|
70
101
|
// Extract :as variables and include them in the union
|
71
|
-
const asVariables = extractAsVariables(
|
102
|
+
const asVariables = extractAsVariables(edlStringWithCodeRemovedFromScriptAndWhitespaceRemoved);
|
72
103
|
const variables = lodash_1.union(inbuiltVariables, Array.from(additionalVariables), scriptVariables, asVariables);
|
73
104
|
const compileStringTemplate = TemplateCompiler.compileStringTemplate(variables);
|
74
105
|
const compileExpression = TemplateCompiler.compileExpression(variables);
|
106
|
+
const breakTemplateStringToExpressionsAndStaticString = TemplateCompiler.breakTemplateStringToExpressionsAndStaticString;
|
75
107
|
// Initialize an empty array to store the final JSX objects
|
76
108
|
const jsxObjects = [];
|
77
109
|
// Initialize an empty stack to keep track of the nested JSX elements
|
78
110
|
const jsxStack = [];
|
79
|
-
String(
|
111
|
+
String(edlStringWithCodeRemovedFromScript).split(openingOrClosingTagRegex).forEach(token => {
|
80
112
|
// If the token is an empty string, skip it
|
81
113
|
if (token.trim() === '') {
|
82
114
|
return;
|
@@ -84,12 +116,12 @@ function parseEDL(edlString, additionalVariables) {
|
|
84
116
|
// If the token is not an opening or closing JSX tag, treat it as plain text
|
85
117
|
if (token[0] !== '<') {
|
86
118
|
const parentNode = jsxStack[jsxStack.length - 1];
|
87
|
-
const
|
119
|
+
const parts = breakTemplateStringToExpressionsAndStaticString(he_1.decode(token)).map(({ type, value }) => type == 'expression' ? compileExpression(value) : value);
|
88
120
|
if (parentNode) {
|
89
|
-
parentNode.children.push(
|
121
|
+
parentNode.children.push(...parts);
|
90
122
|
}
|
91
123
|
else {
|
92
|
-
jsxObjects.push(
|
124
|
+
jsxObjects.push(...parts);
|
93
125
|
}
|
94
126
|
return;
|
95
127
|
}
|
@@ -137,8 +169,10 @@ function parseEDL(edlString, additionalVariables) {
|
|
137
169
|
lodash_1.set(staticProps, attributeName, value);
|
138
170
|
}
|
139
171
|
}
|
140
|
-
// Get the shared prop names between static and variable props
|
141
|
-
const sharedPropNames =
|
172
|
+
// Get the shared prop names between static and variable props, ensuring uniqueness
|
173
|
+
const sharedPropNames = Array.from(new Set(Object.keys(variableProps)
|
174
|
+
.map(key => lodash_1.toPath(key)[0])
|
175
|
+
.filter(key => staticProps[key])));
|
142
176
|
// Create a new JSX element object with the tag name, properties, and an empty children array
|
143
177
|
const newElement = { _id: generateUniqueId(), tag: tagName, staticProps, variableProps, children: [], sharedPropNames };
|
144
178
|
// If the tag is a Script tag, replace it with a UseEffect tag, and convert code to UseEffect function
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../src/edl/parser.ts"],"names":[],"mappings":";;AAAA,
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../src/edl/parser.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"parser.test.d.ts","sourceRoot":"","sources":["../../../src/edl/parser.test.ts"],"names":[],"mappings":""}
|
@@ -0,0 +1,222 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
const parser_1 = __importDefault(require("./parser"));
|
7
|
+
const chai_1 = require("chai");
|
8
|
+
describe('parseEDL', () => {
|
9
|
+
it('should parse an EDL string with a single tag and no props', () => {
|
10
|
+
const edlString = '<div></div>';
|
11
|
+
const result = parser_1.default(edlString, new Set());
|
12
|
+
chai_1.expect(result).to.be.an('array').with.lengthOf(1);
|
13
|
+
chai_1.expect(result[0].tag).to.equal('div');
|
14
|
+
chai_1.expect(result[0].staticProps).to.deep.equal({});
|
15
|
+
chai_1.expect(result[0].variableProps).to.deep.equal({});
|
16
|
+
chai_1.expect(result[0].children).to.deep.equal([]);
|
17
|
+
});
|
18
|
+
it('should parse an EDL string with a single tag and static props', () => {
|
19
|
+
const edlString = '<div class="container" id="main"></div>';
|
20
|
+
const result = parser_1.default(edlString, new Set());
|
21
|
+
chai_1.expect(result).to.be.an('array').with.lengthOf(1);
|
22
|
+
chai_1.expect(result[0].tag).to.equal('div');
|
23
|
+
chai_1.expect(result[0].staticProps).to.deep.equal({ className: 'container', id: 'main' });
|
24
|
+
chai_1.expect(result[0].variableProps).to.deep.equal({});
|
25
|
+
chai_1.expect(result[0].children).to.deep.equal([]);
|
26
|
+
});
|
27
|
+
it('should parse an EDL string with inline expression interpolation', () => {
|
28
|
+
const edlString = '<Text>Hello {user.name}!</Text>';
|
29
|
+
const result = parser_1.default(edlString, new Set(['user']));
|
30
|
+
chai_1.expect(result).to.be.an('array').with.lengthOf(1);
|
31
|
+
chai_1.expect(result[0].tag).to.equal('Text');
|
32
|
+
chai_1.expect(result[0].children).to.be.an('array').with.lengthOf(3);
|
33
|
+
chai_1.expect(result[0].children[0]).to.equal('Hello ');
|
34
|
+
chai_1.expect(result[0].children[1]).to.be.a('function'); // The interpolated expression
|
35
|
+
chai_1.expect(result[0].children[2]).to.equal('!');
|
36
|
+
});
|
37
|
+
it('should parse an EDL string with nested tags', () => {
|
38
|
+
const edlString = '<div><span>Hello World</span></div>';
|
39
|
+
const result = parser_1.default(edlString, new Set());
|
40
|
+
chai_1.expect(result).to.be.an('array').with.lengthOf(1);
|
41
|
+
chai_1.expect(result[0].tag).to.equal('div');
|
42
|
+
chai_1.expect(result[0].children).to.be.an('array').with.lengthOf(1);
|
43
|
+
chai_1.expect(result[0].children[0].tag).to.equal('span');
|
44
|
+
chai_1.expect(result[0].children[0].children).to.deep.equal(['Hello World']);
|
45
|
+
});
|
46
|
+
it('should parse an EDL string with dynamic props', () => {
|
47
|
+
const edlString = '<input type="text" value={state.value} />';
|
48
|
+
const additionalVariables = new Set(['state']);
|
49
|
+
const result = parser_1.default(edlString, additionalVariables);
|
50
|
+
chai_1.expect(result).to.be.an('array').with.lengthOf(1);
|
51
|
+
chai_1.expect(result[0].tag).to.equal('input');
|
52
|
+
chai_1.expect(result[0].staticProps).to.deep.equal({ type: 'text' });
|
53
|
+
chai_1.expect(result[0].variableProps).to.have.property('value');
|
54
|
+
chai_1.expect(result[0].variableProps.value).to.be.a('function');
|
55
|
+
});
|
56
|
+
it('should parse an EDL string with a script tag and extract variables', () => {
|
57
|
+
const edlString = `<Script>
|
58
|
+
const $var1 = 42;
|
59
|
+
let $var2 = "";
|
60
|
+
</Script>`;
|
61
|
+
const result = parser_1.default(edlString, new Set());
|
62
|
+
console.log(result);
|
63
|
+
chai_1.expect(result).to.be.an('array').with.lengthOf(1);
|
64
|
+
chai_1.expect(result[0].tag).to.equal('Script');
|
65
|
+
chai_1.expect(result[0].variableProps).to.have.property(':function');
|
66
|
+
chai_1.expect(result[0].variableProps[':function']).to.be.a('function');
|
67
|
+
});
|
68
|
+
it('should handle self-closing tags', () => {
|
69
|
+
const edlString = '<img src="image.png" />';
|
70
|
+
const result = parser_1.default(edlString, new Set());
|
71
|
+
chai_1.expect(result).to.be.an('array').with.lengthOf(1);
|
72
|
+
chai_1.expect(result[0].tag).to.equal('img');
|
73
|
+
chai_1.expect(result[0].staticProps).to.deep.equal({ src: 'image.png' });
|
74
|
+
});
|
75
|
+
it('should parse an EDL string with both static and dynamic props', () => {
|
76
|
+
const edlString = '<button class="btn" onClick={handleClick}>Click Me</button>';
|
77
|
+
const additionalVariables = new Set(['handleClick']);
|
78
|
+
const result = parser_1.default(edlString, additionalVariables);
|
79
|
+
chai_1.expect(result).to.be.an('array').with.lengthOf(1);
|
80
|
+
chai_1.expect(result[0].tag).to.equal('button');
|
81
|
+
chai_1.expect(result[0].staticProps).to.deep.equal({ className: 'btn' });
|
82
|
+
chai_1.expect(result[0].variableProps).to.have.property('onClick');
|
83
|
+
chai_1.expect(result[0].variableProps.onClick).to.be.a('function');
|
84
|
+
chai_1.expect(result[0].children).to.deep.equal(['Click Me']);
|
85
|
+
});
|
86
|
+
it('should parse an EDL string with mixed content (text and elements)', () => {
|
87
|
+
const edlString = '<div>Text before <span>inline text</span> and after</div>';
|
88
|
+
const result = parser_1.default(edlString, new Set());
|
89
|
+
chai_1.expect(result).to.be.an('array').with.lengthOf(1);
|
90
|
+
chai_1.expect(result[0].tag).to.equal('div');
|
91
|
+
chai_1.expect(result[0].children).to.be.an('array').with.lengthOf(3);
|
92
|
+
chai_1.expect(result[0].children[0]).to.equal('Text before ');
|
93
|
+
chai_1.expect(result[0].children[1].tag).to.equal('span');
|
94
|
+
chai_1.expect(result[0].children[1].children).to.deep.equal(['inline text']);
|
95
|
+
chai_1.expect(result[0].children[2]).to.equal(' and after');
|
96
|
+
});
|
97
|
+
it('should identify shared props when they modify different object properties', () => {
|
98
|
+
const edlString = '<div style.color="red" style.width={width}></div>';
|
99
|
+
const result = parser_1.default(edlString, new Set(['width']));
|
100
|
+
chai_1.expect(result).to.be.an('array').with.lengthOf(1);
|
101
|
+
chai_1.expect(result[0].tag).to.equal('div');
|
102
|
+
chai_1.expect(result[0].staticProps).to.deep.equal({
|
103
|
+
style: { color: 'red' }
|
104
|
+
});
|
105
|
+
chai_1.expect(result[0].variableProps).to.have.property('style.width');
|
106
|
+
chai_1.expect(result[0].sharedPropNames).to.deep.equal(['style']);
|
107
|
+
});
|
108
|
+
it('should handle multiple shared object properties', () => {
|
109
|
+
const edlString = '<div style.color="red" style.width={width} style.height="100px" style.margin={margin}></div>';
|
110
|
+
const result = parser_1.default(edlString, new Set(['width', 'margin']));
|
111
|
+
chai_1.expect(result).to.be.an('array').with.lengthOf(1);
|
112
|
+
chai_1.expect(result[0].tag).to.equal('div');
|
113
|
+
chai_1.expect(result[0].staticProps).to.deep.equal({
|
114
|
+
style: {
|
115
|
+
color: 'red',
|
116
|
+
height: '100px'
|
117
|
+
}
|
118
|
+
});
|
119
|
+
chai_1.expect(result[0].variableProps).to.have.keys('style.width', 'style.margin');
|
120
|
+
chai_1.expect(result[0].sharedPropNames).to.deep.equal(['style']);
|
121
|
+
});
|
122
|
+
it('should handle mixed shared object properties and regular props', () => {
|
123
|
+
const edlString = '<div class="container" style.color="red" style.width={width} onClick={handleClick}></div>';
|
124
|
+
const result = parser_1.default(edlString, new Set(['width', 'handleClick']));
|
125
|
+
chai_1.expect(result).to.be.an('array').with.lengthOf(1);
|
126
|
+
chai_1.expect(result[0].tag).to.equal('div');
|
127
|
+
chai_1.expect(result[0].staticProps).to.deep.equal({
|
128
|
+
className: 'container',
|
129
|
+
style: { color: 'red' }
|
130
|
+
});
|
131
|
+
chai_1.expect(result[0].variableProps).to.have.keys('style.width', 'onClick');
|
132
|
+
console.log(result[0].sharedPropNames);
|
133
|
+
chai_1.expect(result[0].sharedPropNames).to.deep.equal(['style']);
|
134
|
+
});
|
135
|
+
it('should not mark props as shared when only static object properties exist', () => {
|
136
|
+
const edlString = '<div style.color="red" style.width="100px"></div>';
|
137
|
+
const result = parser_1.default(edlString, new Set());
|
138
|
+
chai_1.expect(result).to.be.an('array').with.lengthOf(1);
|
139
|
+
chai_1.expect(result[0].tag).to.equal('div');
|
140
|
+
chai_1.expect(result[0].staticProps).to.deep.equal({
|
141
|
+
style: {
|
142
|
+
color: 'red',
|
143
|
+
width: '100px'
|
144
|
+
}
|
145
|
+
});
|
146
|
+
chai_1.expect(result[0].variableProps).to.deep.equal({});
|
147
|
+
chai_1.expect(result[0].sharedPropNames).to.deep.equal([]);
|
148
|
+
});
|
149
|
+
it('should not mark props as shared when only dynamic object properties exist', () => {
|
150
|
+
const edlString = '<div style.color={color} style.width={width}></div>';
|
151
|
+
const result = parser_1.default(edlString, new Set(['color', 'width']));
|
152
|
+
chai_1.expect(result).to.be.an('array').with.lengthOf(1);
|
153
|
+
chai_1.expect(result[0].tag).to.equal('div');
|
154
|
+
chai_1.expect(result[0].staticProps).to.deep.equal({});
|
155
|
+
chai_1.expect(result[0].variableProps).to.have.keys('style.color', 'style.width');
|
156
|
+
chai_1.expect(result[0].sharedPropNames).to.deep.equal([]);
|
157
|
+
});
|
158
|
+
it('should parse an EDL string with static props only', () => {
|
159
|
+
const edlString = '<div class="container" id="main"></div>';
|
160
|
+
const result = parser_1.default(edlString, new Set());
|
161
|
+
chai_1.expect(result).to.be.an('array').with.lengthOf(1);
|
162
|
+
chai_1.expect(result[0].tag).to.equal('div');
|
163
|
+
chai_1.expect(result[0].staticProps).to.deep.equal({ className: 'container', id: 'main' });
|
164
|
+
chai_1.expect(result[0].variableProps).to.deep.equal({});
|
165
|
+
chai_1.expect(result[0].sharedPropNames).to.deep.equal([]);
|
166
|
+
});
|
167
|
+
it('should parse an EDL string with dynamic props only', () => {
|
168
|
+
const edlString = '<input value={state.value} onChange={handleChange} />';
|
169
|
+
const additionalVariables = new Set(['state', 'handleChange']);
|
170
|
+
const result = parser_1.default(edlString, additionalVariables);
|
171
|
+
chai_1.expect(result).to.be.an('array').with.lengthOf(1);
|
172
|
+
chai_1.expect(result[0].tag).to.equal('input');
|
173
|
+
chai_1.expect(result[0].staticProps).to.deep.equal({});
|
174
|
+
chai_1.expect(result[0].variableProps).to.have.all.keys('value', 'onChange');
|
175
|
+
chai_1.expect(result[0].sharedPropNames).to.deep.equal([]);
|
176
|
+
});
|
177
|
+
it('should parse an EDL string with both static and dynamic props (not shared)', () => {
|
178
|
+
const edlString = '<button class="btn" onClick={handleClick}>Click Me</button>';
|
179
|
+
const additionalVariables = new Set(['handleClick']);
|
180
|
+
const result = parser_1.default(edlString, additionalVariables);
|
181
|
+
chai_1.expect(result).to.be.an('array').with.lengthOf(1);
|
182
|
+
chai_1.expect(result[0].tag).to.equal('button');
|
183
|
+
chai_1.expect(result[0].staticProps).to.deep.equal({ className: 'btn' });
|
184
|
+
chai_1.expect(result[0].variableProps).to.have.property('onClick');
|
185
|
+
chai_1.expect(result[0].sharedPropNames).to.deep.equal([]);
|
186
|
+
chai_1.expect(result[0].children).to.deep.equal(['Click Me']);
|
187
|
+
});
|
188
|
+
it('should identify single shared prop correctly', () => {
|
189
|
+
const edlString = '<div class="static-class" class={dynamicClass}></div>';
|
190
|
+
const result = parser_1.default(edlString, new Set(['dynamicClass']));
|
191
|
+
chai_1.expect(result).to.be.an('array').with.lengthOf(1);
|
192
|
+
chai_1.expect(result[0].tag).to.equal('div');
|
193
|
+
chai_1.expect(result[0].staticProps).to.deep.equal({ className: 'static-class' });
|
194
|
+
chai_1.expect(result[0].variableProps).to.have.property('className');
|
195
|
+
chai_1.expect(result[0].sharedPropNames).to.deep.equal(['className']);
|
196
|
+
});
|
197
|
+
it('should handle multiple shared props correctly', () => {
|
198
|
+
const edlString = '<div id="static-id" class="static-class" id={dynamicId} class={dynamicClass}></div>';
|
199
|
+
const result = parser_1.default(edlString, new Set(['dynamicId', 'dynamicClass']));
|
200
|
+
chai_1.expect(result).to.be.an('array').with.lengthOf(1);
|
201
|
+
chai_1.expect(result[0].tag).to.equal('div');
|
202
|
+
chai_1.expect(result[0].staticProps).to.deep.equal({
|
203
|
+
id: 'static-id',
|
204
|
+
className: 'static-class'
|
205
|
+
});
|
206
|
+
chai_1.expect(result[0].variableProps).to.have.keys('id', 'className');
|
207
|
+
chai_1.expect(result[0].sharedPropNames).to.have.members(['id', 'className']);
|
208
|
+
});
|
209
|
+
it('should handle mixed shared and non-shared props', () => {
|
210
|
+
const edlString = '<div id="static-id" class="static-class" id={dynamicId} onClick={handleClick}></div>';
|
211
|
+
const result = parser_1.default(edlString, new Set(['dynamicId', 'handleClick']));
|
212
|
+
chai_1.expect(result).to.be.an('array').with.lengthOf(1);
|
213
|
+
chai_1.expect(result[0].tag).to.equal('div');
|
214
|
+
chai_1.expect(result[0].staticProps).to.deep.equal({
|
215
|
+
id: 'static-id',
|
216
|
+
className: 'static-class'
|
217
|
+
});
|
218
|
+
chai_1.expect(result[0].variableProps).to.have.keys('id', 'onClick');
|
219
|
+
chai_1.expect(result[0].sharedPropNames).to.deep.equal(['id']);
|
220
|
+
});
|
221
|
+
});
|
222
|
+
//# sourceMappingURL=parser.test.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"parser.test.js","sourceRoot":"","sources":["../../../src/edl/parser.test.ts"],"names":[],"mappings":"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"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"pathHelper.d.ts","sourceRoot":"","sources":["../../../src/helpers/pathHelper.ts"],"names":[],"mappings":"AAEA,wBAAgB,YAAY,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,
|
1
|
+
{"version":3,"file":"pathHelper.d.ts","sourceRoot":"","sources":["../../../src/helpers/pathHelper.ts"],"names":[],"mappings":"AAEA,wBAAgB,YAAY,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,UA2B7D"}
|
@@ -9,16 +9,16 @@ function generatePath(pathTemplate, params) {
|
|
9
9
|
if (!pathTemplate || !params)
|
10
10
|
return pathTemplate;
|
11
11
|
const paramsCopy = { ...params };
|
12
|
-
// Replace placeholders in the path
|
13
|
-
let path = String(pathTemplate).replace(
|
14
|
-
const paramKey = match.substring(
|
12
|
+
// Replace placeholders in the path, now handling optional params (with ?)
|
13
|
+
let path = String(pathTemplate).replace(/\/:\w+\??/g, (match) => {
|
14
|
+
const paramKey = match.substring(2).replace('?', ''); // Remove '/:' prefix and optional '?'
|
15
15
|
if (paramsCopy[paramKey] !== undefined) {
|
16
16
|
const value = paramsCopy[paramKey];
|
17
|
-
delete paramsCopy[paramKey];
|
18
|
-
return encodeURIComponent(value);
|
17
|
+
delete paramsCopy[paramKey];
|
18
|
+
return '/' + encodeURIComponent(value);
|
19
19
|
}
|
20
|
-
return match;
|
21
|
-
});
|
20
|
+
return match.endsWith('?') ? '' : match; // Remove optional params if not provided
|
21
|
+
}) || '/';
|
22
22
|
// Use query-string to stringify the remaining params from the copy
|
23
23
|
const query = query_string_1.default.stringify(paramsCopy);
|
24
24
|
// Append query string if it's not empty
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"pathHelper.js","sourceRoot":"","sources":["../../../src/helpers/pathHelper.ts"],"names":[],"mappings":";;;;;;AAAA,gEAAuC;AAEvC,SAAgB,YAAY,CAAC,YAAoB,EAAE,MAAW;IAE1D,IAAI,CAAC,YAAY,IAAI,CAAC,MAAM;QAAE,OAAO,YAAY,CAAC;IAElD,MAAM,UAAU,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;IAEjC,
|
1
|
+
{"version":3,"file":"pathHelper.js","sourceRoot":"","sources":["../../../src/helpers/pathHelper.ts"],"names":[],"mappings":";;;;;;AAAA,gEAAuC;AAEvC,SAAgB,YAAY,CAAC,YAAoB,EAAE,MAAW;IAE1D,IAAI,CAAC,YAAY,IAAI,CAAC,MAAM;QAAE,OAAO,YAAY,CAAC;IAElD,MAAM,UAAU,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;IAEjC,0EAA0E;IAC1E,IAAI,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,KAAK,EAAE,EAAE;QAC5D,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,sCAAsC;QAC5F,IAAI,UAAU,CAAC,QAAQ,CAAC,KAAK,SAAS,EAAE;YACpC,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;YACnC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC;YAC5B,OAAO,GAAG,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;SAC1C;QACD,OAAO,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,yCAAyC;IACtF,CAAC,CAAC,IAAI,GAAG,CAAC;IAGV,mEAAmE;IACnE,MAAM,KAAK,GAAG,sBAAW,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IAEhD,wCAAwC;IACxC,IAAI,KAAK,EAAE;QACP,IAAI,IAAI,IAAI,KAAK,EAAE,CAAC;KACvB;IAED,OAAO,IAAI,CAAC;AAChB,CAAC;AA3BD,oCA2BC"}
|
@@ -2,25 +2,25 @@
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
const chai_1 = require("chai");
|
4
4
|
const pathHelper_1 = require("./pathHelper");
|
5
|
-
describe('Test
|
5
|
+
describe('Test path generator', function () {
|
6
6
|
it('should replace params and append query string', () => {
|
7
|
-
const result = pathHelper_1.generatePath("/users/:id?/edit
|
7
|
+
const result = pathHelper_1.generatePath("/users/:id?/edit", { id: "42", a: 1 });
|
8
8
|
chai_1.expect(result).to.equal("/users/42/edit?a=1");
|
9
9
|
});
|
10
10
|
it('should handle optional path segments', () => {
|
11
|
-
const result = pathHelper_1.generatePath("/users/:id?/edit
|
11
|
+
const result = pathHelper_1.generatePath("/users/:id?/edit", { a: 1 });
|
12
12
|
chai_1.expect(result).to.equal("/users/edit?a=1");
|
13
13
|
});
|
14
14
|
it('should handle missing optional params', () => {
|
15
|
-
const result = pathHelper_1.generatePath("/users/:id?/edit
|
15
|
+
const result = pathHelper_1.generatePath("/users/:id?/edit", {});
|
16
16
|
chai_1.expect(result).to.equal("/users/edit");
|
17
17
|
});
|
18
18
|
it('should URL encode params', () => {
|
19
|
-
const result = pathHelper_1.generatePath("/users/:id
|
19
|
+
const result = pathHelper_1.generatePath("/users/:id", { id: "hello world" });
|
20
20
|
chai_1.expect(result).to.equal("/users/hello%20world");
|
21
21
|
});
|
22
22
|
it('should URL encode query string', () => {
|
23
|
-
const result = pathHelper_1.generatePath("/users/:id
|
23
|
+
const result = pathHelper_1.generatePath("/users/:id", { id: "42", a: "hello world" });
|
24
24
|
chai_1.expect(result).to.equal("/users/42?a=hello%20world");
|
25
25
|
});
|
26
26
|
it('should return root path when all path segments are optional and missing', () => {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"pathhelper.test.js","sourceRoot":"","sources":["../../../src/helpers/pathhelper.test.ts"],"names":[],"mappings":";;AAAA,+BAA8B;AAC9B,6CAA4C;AAE5C,QAAQ,CAAC,
|
1
|
+
{"version":3,"file":"pathhelper.test.js","sourceRoot":"","sources":["../../../src/helpers/pathhelper.test.ts"],"names":[],"mappings":";;AAAA,+BAA8B;AAC9B,6CAA4C;AAE5C,QAAQ,CAAC,qBAAqB,EAAE;IAC5B,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACrD,MAAM,MAAM,GAAG,yBAAY,CAAC,kBAAkB,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACpE,aAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC5C,MAAM,MAAM,GAAG,yBAAY,CAAC,kBAAkB,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAC1D,aAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC7C,MAAM,MAAM,GAAG,yBAAY,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;QACpD,aAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAChC,MAAM,MAAM,GAAG,yBAAY,CAAC,YAAY,EAAE,EAAE,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC;QACjE,aAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACtC,MAAM,MAAM,GAAG,yBAAY,CAAC,YAAY,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC;QAC1E,aAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yEAAyE,EAAE,GAAG,EAAE;QAC/E,MAAM,MAAM,GAAG,yBAAY,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;QAChD,aAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;QACrE,MAAM,MAAM,GAAG,yBAAY,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;QACnD,aAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAA"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@evlop/commons",
|
3
|
-
"version": "1.0.
|
3
|
+
"version": "1.0.257",
|
4
4
|
"description": "",
|
5
5
|
"main": "dist/main.js",
|
6
6
|
"peerDependencies": {
|
@@ -16,6 +16,7 @@
|
|
16
16
|
"dependencies": {
|
17
17
|
"axios-retry": "^3.3.1",
|
18
18
|
"events": "^3.3.0",
|
19
|
+
"he": "^1.2.0",
|
19
20
|
"moment": "^2.29.1"
|
20
21
|
},
|
21
22
|
"scripts": {
|