lang-json 1.0.0 → 1.0.2

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.
Files changed (45) hide show
  1. package/README.md +0 -0
  2. package/babel.config.js +8 -0
  3. package/coverage/clover.xml +6 -0
  4. package/coverage/coverage-final.json +1 -0
  5. package/coverage/lcov-report/base.css +224 -0
  6. package/coverage/lcov-report/block-navigation.js +87 -0
  7. package/coverage/lcov-report/favicon.png +0 -0
  8. package/coverage/lcov-report/index.html +101 -0
  9. package/coverage/lcov-report/prettify.css +1 -0
  10. package/coverage/lcov-report/prettify.js +2 -0
  11. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  12. package/coverage/lcov-report/sorter.js +196 -0
  13. package/dist/esm/src/index.d.ts +18 -0
  14. package/dist/esm/src/index.js +369 -0
  15. package/dist/esm/src/index.js.map +1 -0
  16. package/dist/esm/src/modules/is-this/index.d.ts +136 -0
  17. package/dist/esm/src/modules/is-this/index.js +484 -0
  18. package/dist/esm/src/modules/is-this/index.js.map +1 -0
  19. package/dist/esm/tests/helpers.test.d.ts +1 -0
  20. package/dist/esm/tests/helpers.test.js +284 -0
  21. package/dist/esm/tests/helpers.test.js.map +1 -0
  22. package/dist/esm/tests/index.test.d.ts +1 -0
  23. package/dist/esm/tests/index.test.js +537 -0
  24. package/dist/esm/tests/index.test.js.map +1 -0
  25. package/dist/esm/tests/readme.test.d.ts +1 -0
  26. package/dist/esm/tests/readme.test.js +73 -0
  27. package/dist/esm/tests/readme.test.js.map +1 -0
  28. package/jest.config.ts +212 -0
  29. package/package.json +40 -12
  30. package/src/index.ts +404 -295
  31. package/src/modules/is-this/index.ts +682 -0
  32. package/tests/helpers.test.ts +331 -0
  33. package/tests/index.test.ts +681 -0
  34. package/tests/readme.test.ts +78 -0
  35. package/tsconfig.json +15 -16
  36. package/dist/esm/dump.js +0 -2
  37. package/dist/esm/dump.js.map +0 -1
  38. package/dist/esm/example.d.ts +0 -13
  39. package/dist/esm/example.js +0 -93
  40. package/dist/esm/example.js.map +0 -1
  41. package/dist/esm/index.d.ts +0 -36
  42. package/dist/esm/index.js +0 -326
  43. package/dist/esm/index.js.map +0 -1
  44. package/src/example.ts +0 -116
  45. /package/{dist/esm/dump.d.ts → coverage/lcov.info} +0 -0
@@ -0,0 +1,78 @@
1
+ import LangJSON from "../src/index";
2
+
3
+ // Create an instance of LangJSON
4
+ const langJSON = new LangJSON();
5
+
6
+ describe("LangJSON Templating Tests", () => {
7
+ test("String Manipulation - Uppercase", () => {
8
+ const template = {
9
+ greeting: "{{#uppercase 'hello'}} world",
10
+ };
11
+ const data = {};
12
+ const result = langJSON.applyTemplate(template, data);
13
+ expect(result).toEqual({ greeting: "HELLO world" });
14
+ });
15
+
16
+ test("Conditional Statements - Active Status", () => {
17
+ const template = {
18
+ status: "{{#if isActive 'Active' 'Inactive'}}",
19
+ };
20
+ const data = { isActive: true };
21
+ const result = langJSON.applyTemplate(template, data);
22
+ expect(result).toEqual({ status: "Active" });
23
+ });
24
+
25
+ test("Looping Through Arrays - Users List", () => {
26
+ const template = {
27
+ users: {
28
+ "{{#each users}}": {
29
+ name: "{{#var item.name}}",
30
+ age: "{{#var item.age}}",
31
+ },
32
+ },
33
+ };
34
+ const data = {
35
+ users: [
36
+ { name: "John", age: 30 },
37
+ { name: "Jane", age: 25 },
38
+ { name: "Doe", age: 40 },
39
+ ],
40
+ };
41
+ const result = langJSON.applyTemplate(template, data);
42
+ expect(result).toEqual({
43
+ users: [
44
+ { name: "John", age: 30 },
45
+ { name: "Jane", age: 25 },
46
+ { name: "Doe", age: 40 },
47
+ ],
48
+ });
49
+ });
50
+
51
+ test("Chaining Helpers - Concatenation and Uppercase", () => {
52
+ const template = {
53
+ message: "{{#uppercase (concat 'hello' ', world')}}",
54
+ };
55
+ const data = {};
56
+ const result = langJSON.applyTemplate(template, data);
57
+ expect(result).toEqual({ message: "HELLO, WORLD" });
58
+ });
59
+
60
+ test("Performance Tips - Large Data", () => {
61
+ const largeData = {
62
+ users: Array.from({ length: 1000 }, (_, index) => ({
63
+ name: `User${index + 1}`,
64
+ age: 20 + (index % 50),
65
+ })),
66
+ };
67
+ const template = {
68
+ users: {
69
+ "{{#each users}}": {
70
+ name: "{{#var item.name}}",
71
+ age: "{{#var item.age}}",
72
+ },
73
+ },
74
+ };
75
+ const result = langJSON.applyTemplate(template, largeData);
76
+ expect(result.users.length).toBe(1000);
77
+ });
78
+ });
package/tsconfig.json CHANGED
@@ -1,17 +1,16 @@
1
1
  {
2
- "compilerOptions": {
3
- "target": "ESNext",
4
- "module": "ESNext",
5
- "lib": ["DOM", "ESNext"],
6
- "outDir": "./dist",
7
- "declaration": true,
8
- "sourceMap": true,
9
- "strict": true,
10
- "esModuleInterop": true,
11
- "skipLibCheck": true,
12
- "moduleResolution": "node"
13
- },
14
- "include": ["src/**/*"],
15
- "exclude": ["node_modules", "dist"]
16
- }
17
-
2
+ "compilerOptions": {
3
+ "target": "ESNext",
4
+ "module": "ESNext",
5
+ "lib": ["DOM", "ESNext"],
6
+ "outDir": "./dist",
7
+ "declaration": true,
8
+ "sourceMap": true,
9
+ "strict": true,
10
+ "esModuleInterop": true,
11
+ "skipLibCheck": true,
12
+ "moduleResolution": "node"
13
+ },
14
+ "include": ["src/**/*", "tests/**/*"],
15
+ "exclude": ["node_modules", "dist"]
16
+ }
package/dist/esm/dump.js DELETED
@@ -1,2 +0,0 @@
1
- "use strict";
2
- //# sourceMappingURL=dump.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dump.js","sourceRoot":"","sources":["../../src/dump.ts"],"names":[],"mappings":""}
@@ -1,13 +0,0 @@
1
- type HelperFunction = (context: any, data: any, engine: JsonTemplateEngine) => any;
2
- export declare class JsonTemplateEngine {
3
- private helpers;
4
- constructor();
5
- registerHelper(name: string, fn: HelperFunction): void;
6
- applyTemplate(template: any, data: any): any;
7
- private replaceVars;
8
- private lookup;
9
- private eachHelper;
10
- private ifHelper;
11
- private varHelper;
12
- }
13
- export {};
@@ -1,93 +0,0 @@
1
- export class JsonTemplateEngine {
2
- helpers = {};
3
- constructor() {
4
- console.log("registering helpers");
5
- this.registerHelper("each", this.eachHelper.bind(this));
6
- this.registerHelper("if", this.ifHelper.bind(this));
7
- this.registerHelper("var", this.varHelper.bind(this));
8
- }
9
- // Register a custom helper
10
- registerHelper(name, fn) {
11
- this.helpers[name] = fn;
12
- }
13
- // Core function to parse and apply template (now fully recursive)
14
- applyTemplate(template, data) {
15
- console.log("template : ", template);
16
- if (typeof template === "string") {
17
- console.log("string template");
18
- return this.replaceVars(template, data); // Replace string variables (dynamic)
19
- }
20
- else if (Array.isArray(template)) {
21
- console.log("Array template");
22
- return template.map((item) => this.applyTemplate(item, data)); // Handle arrays recursively
23
- }
24
- else if (typeof template === "object") {
25
- console.log("object template");
26
- const result = {};
27
- for (const key in template) {
28
- if (key.startsWith("{{#")) {
29
- const helperName = key.slice(3, key.indexOf("}}"));
30
- const helperArg = key.slice(key.indexOf(" ") + 1, -2).trim();
31
- if (this.helpers[helperName]) {
32
- const helperFn = this.helpers[helperName];
33
- console.log("applying helper", helperName);
34
- const helperResult = helperFn(template[key], { ...data, helperArg }, this);
35
- console.log("helperRe", helperResult);
36
- }
37
- }
38
- else if (key.includes("{{else}}")) {
39
- const elseKey = key.replace("{{else}}", "").trim();
40
- result[elseKey] = this.applyTemplate(template[key], data);
41
- }
42
- else {
43
- console.log("going deep down");
44
- result[key] = this.applyTemplate(template[key], data);
45
- }
46
- }
47
- return result;
48
- }
49
- return template;
50
- }
51
- // Helper function to replace {{var}} with values from data
52
- replaceVars(template, data) {
53
- if (typeof template === "string") {
54
- return template.replace(/{{\s*([\w.]+)\s*}}/g, (match, varPath) => {
55
- return this.lookup(varPath, data) || "";
56
- });
57
- }
58
- return template;
59
- }
60
- // Lookup a variable in data (supports nested keys like 'menu.name')
61
- lookup(varPath, data) {
62
- console.log("looking up", varPath, data);
63
- return varPath.split(".").reduce((acc, part) => acc?.[part], data);
64
- }
65
- // Each helper {{#each}}
66
- eachHelper(context, data, engine) {
67
- const array = engine.lookup(data.helperArg, data);
68
- if (!Array.isArray(array)) {
69
- throw new Error(`${data.helperArg} is not an array`);
70
- }
71
- // Recursively apply template for each item in the array
72
- return array.map((item) => engine.applyTemplate(context, { ...data, ...item }));
73
- }
74
- // If/else helper {{#if}}
75
- ifHelper(context, data, engine) {
76
- const condition = engine.lookup(data.helperArg, data);
77
- if (condition) {
78
- return engine.applyTemplate(context, data);
79
- }
80
- else {
81
- const elseKey = Object.keys(context).find((key) => key.includes("{{else}}"));
82
- if (elseKey) {
83
- return engine.applyTemplate(context[elseKey.replace("{{else}}", "").trim()], data);
84
- }
85
- }
86
- return null;
87
- }
88
- // Variable helper {{var}}
89
- varHelper(context, data) {
90
- return this.lookup(data.helperArg, data);
91
- }
92
- }
93
- //# sourceMappingURL=example.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"example.js","sourceRoot":"","sources":["../../src/example.ts"],"names":[],"mappings":"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"}
@@ -1,36 +0,0 @@
1
- type HelperFunction = (context: any, data: any, innerTemplate: any) => any;
2
- export declare class JsonTemplateEngine {
3
- helpers: Record<string, HelperFunction>;
4
- constructor();
5
- registerHelper(name: string, fn: HelperFunction): void;
6
- applyTemplate(template: any, data: any): any;
7
- lookup(varPath: string, data: any): any;
8
- proccessHelper(string: string, data: any, innerTemplate?: any): any;
9
- logHelper(varPath: string, data: any, innerTemplate: any): any;
10
- varHelper(string: any, data: any): any;
11
- lengthHelper(varPath: string, data: any): any;
12
- eachHelper(string: any, data: any, innerTemplate: any): any;
13
- loopHelper(string: any, data: any, innerTemplate: any): any;
14
- ifHelper(condition: string, data: any, innerTemplate: any): boolean;
15
- unlessHelper(condition: string, data: any, innerTemplate: any): boolean;
16
- withHelper(scopePath: string, data: any, innerTemplate: any): any;
17
- setHelper(varName: string, data: any, innerTemplate: any): any;
18
- concatHelper(args: string, data: any): any;
19
- mathHelper(expression: string, data: any): any;
20
- compareHelper(expression: string, data: any): boolean;
21
- upperCaseHelper(varPath: string, data: any): any;
22
- lowerCaseHelper(varPath: string, data: any): any;
23
- jsonStringifyHelper(varPath: string, data: any): any;
24
- jsonParseHelper(varPath: string, data: any): any;
25
- dateHelper(varPath: string, data: any): any;
26
- repeatHelper(args: string, data: any): any;
27
- sliceHelper(args: string, data: any): any;
28
- joinHelper(args: string, data: any): any;
29
- findHelper(args: string, data: any): any;
30
- mapHelper(args: string, data: any, innerTemplate: any): any;
31
- uniqueHelper(varPath: string, data: any): any;
32
- randomHelper(varPath: string, data: any): any;
33
- reverseHelper(varPath: string, data: any): any;
34
- existsHelper(varPath: string, data: any): boolean;
35
- }
36
- export {};
package/dist/esm/index.js DELETED
@@ -1,326 +0,0 @@
1
- export class JsonTemplateEngine {
2
- helpers = {};
3
- constructor() {
4
- this.registerHelper("each", this.eachHelper.bind(this));
5
- this.registerHelper("loop", this.loopHelper.bind(this));
6
- this.registerHelper("if", this.ifHelper.bind(this));
7
- this.registerHelper("with", this.withHelper.bind(this));
8
- this.registerHelper("set", this.setHelper.bind(this));
9
- this.registerHelper("unless", this.unlessHelper.bind(this));
10
- this.registerHelper("log", this.logHelper.bind(this));
11
- this.registerHelper("concat", this.concatHelper.bind(this));
12
- this.registerHelper("length", this.lengthHelper.bind(this));
13
- this.registerHelper("math", this.mathHelper.bind(this));
14
- this.registerHelper("var", this.varHelper.bind(this));
15
- this.registerHelper("compare", this.compareHelper.bind(this));
16
- this.registerHelper("upperCase", this.upperCaseHelper.bind(this));
17
- this.registerHelper("lowerCase", this.lowerCaseHelper.bind(this));
18
- this.registerHelper("jsonStringify", this.jsonStringifyHelper.bind(this));
19
- this.registerHelper("jsonParse", this.jsonParseHelper.bind(this));
20
- this.registerHelper("date", this.dateHelper.bind(this));
21
- this.registerHelper("repeat", this.repeatHelper.bind(this));
22
- this.registerHelper("slice", this.sliceHelper.bind(this));
23
- this.registerHelper("join", this.joinHelper.bind(this));
24
- this.registerHelper("find", this.findHelper.bind(this));
25
- this.registerHelper("map", this.mapHelper.bind(this));
26
- this.registerHelper("unique", this.uniqueHelper.bind(this));
27
- this.registerHelper("random", this.randomHelper.bind(this));
28
- this.registerHelper("reverse", this.reverseHelper.bind(this));
29
- this.registerHelper("exists", this.existsHelper.bind(this));
30
- }
31
- // Register a custom helper
32
- registerHelper(name, fn) {
33
- this.helpers[name] = fn;
34
- }
35
- applyTemplate(template, data) {
36
- if (typeof template === "string") {
37
- return this.proccessHelper(template, data);
38
- }
39
- else if (Array.isArray(template)) {
40
- return template.map((item, index) => this.applyTemplate(item, { ...data, currentItem: item, index }));
41
- }
42
- else if (typeof template === "object") {
43
- let result = {};
44
- for (const key in template) {
45
- if (Object.prototype.hasOwnProperty.call(template, key)) {
46
- const value = template[key];
47
- const currentKeyResult = this.proccessHelper(key, data, value);
48
- if (typeof currentKeyResult === "string") {
49
- if (value) {
50
- result[currentKeyResult] = this.applyTemplate(value, data);
51
- }
52
- else {
53
- result = currentKeyResult;
54
- }
55
- }
56
- else if (Array.isArray(currentKeyResult)) {
57
- result = this.applyTemplate(currentKeyResult, data);
58
- }
59
- else if (typeof currentKeyResult === "object") {
60
- result = this.applyTemplate(currentKeyResult, data);
61
- }
62
- else if (typeof currentKeyResult === "boolean") {
63
- if (currentKeyResult) {
64
- result = this.applyTemplate(value, data);
65
- }
66
- }
67
- }
68
- }
69
- return result;
70
- }
71
- return template;
72
- }
73
- lookup(varPath, data) {
74
- if (typeof varPath !== "string")
75
- return varPath;
76
- let normalizedPath = varPath.replace(/\[(\d+)\]/g, ".$1");
77
- if (normalizedPath.startsWith(".")) {
78
- normalizedPath = normalizedPath.slice(1);
79
- }
80
- const returnValue = normalizedPath.split(".").reduce((acc, part) => {
81
- return acc?.[part];
82
- }, data);
83
- if (returnValue) {
84
- return returnValue;
85
- }
86
- else {
87
- return varPath;
88
- }
89
- }
90
- proccessHelper(string, data, innerTemplate) {
91
- const helperMatch = string.match(/{{#(\w+)\s+(.*?)}}/);
92
- if (helperMatch) {
93
- const [helperString, helperName, helperArg] = helperMatch;
94
- const helperFn = this.helpers[helperName];
95
- if (helperFn) {
96
- // Check if there's an inner expression (e.g., compare user.age 30)
97
- const innerExpressionMatch = helperArg.match(/\((.*?)\)/);
98
- if (innerExpressionMatch) {
99
- const innerExpression = innerExpressionMatch[1]; // e.g., 'compare user.age 30'
100
- const [innerHelperName, ...innerArgs] = innerExpression.split(" "); // ['compare', 'user.age', '30']
101
- const innerHelperFn = this.helpers[innerHelperName];
102
- if (innerHelperFn) {
103
- // Look up values for arguments, treat them as variables
104
- const evaluatedArgs = innerArgs.map((arg) => this.lookup(arg, data) || arg);
105
- console.log(evaluatedArgs);
106
- // Ensure innerHelperFn can handle an array directly or accept rest parameters
107
- const innerResult = innerHelperFn(evaluatedArgs.join(" "), data, innerTemplate);
108
- // Apply the outer helper (e.g., ifHelper) with the result of the inner expression
109
- const outerResult = helperFn(innerResult, data, innerTemplate);
110
- if (typeof outerResult === "string" ||
111
- typeof outerResult === "number") {
112
- return string.replace(helperString, `${outerResult}`);
113
- }
114
- else {
115
- return outerResult;
116
- }
117
- }
118
- }
119
- else {
120
- // Handle the normal case where there is no inner expression
121
- const result = helperFn(helperArg, data, innerTemplate);
122
- if (typeof result === "string" || typeof result === "number") {
123
- return string.replace(helperString, `${result}`);
124
- }
125
- else {
126
- return result;
127
- }
128
- }
129
- }
130
- }
131
- else {
132
- return string;
133
- }
134
- }
135
- // helpers
136
- logHelper(varPath, data, innerTemplate) {
137
- const value = this.lookup(varPath, data);
138
- console.log(value);
139
- return innerTemplate;
140
- }
141
- varHelper(string, data) {
142
- return this.lookup(string, data);
143
- }
144
- lengthHelper(varPath, data) {
145
- const value = this.lookup(varPath, data);
146
- return Array.isArray(value) || typeof value === "string" ? value.length : 0;
147
- }
148
- eachHelper(string, data, innerTemplate) {
149
- const array = this.lookup(string, data);
150
- if (!Array.isArray(array)) {
151
- throw new Error(`${data.helperArg} is not an array`);
152
- }
153
- return array.map((item) => this.applyTemplate(innerTemplate, { ...data, item }));
154
- }
155
- loopHelper(string, data, innerTemplate) {
156
- const count = this.lookup(string, data);
157
- return Array(+count)
158
- .fill(null)
159
- .map((item) => this.applyTemplate(innerTemplate, { ...data, item }));
160
- }
161
- ifHelper(condition, data, innerTemplate) {
162
- console.log(condition, data);
163
- return !!this.lookup(condition, data);
164
- }
165
- unlessHelper(condition, data, innerTemplate) {
166
- return !!this.lookup(condition, data);
167
- }
168
- withHelper(scopePath, data, innerTemplate) {
169
- const newContext = this.lookup(scopePath, data);
170
- return this.applyTemplate(innerTemplate, { ...data, ...newContext });
171
- }
172
- setHelper(varName, data, innerTemplate) {
173
- const [key, valuePath] = varName.split(" ");
174
- const value = this.lookup(valuePath, data);
175
- return this.applyTemplate(innerTemplate, { ...data, [key]: value });
176
- }
177
- concatHelper(args, data) {
178
- const values = args.split(" ").map((arg) => this.lookup(arg, data) || arg);
179
- return values.join(" ");
180
- }
181
- mathHelper(expression, data) {
182
- const [left, operator, right] = expression.split(" ");
183
- const leftValue = parseFloat(this.lookup(left, data));
184
- const rightValue = parseFloat(this.lookup(right, data));
185
- switch (operator) {
186
- case "+":
187
- return leftValue + rightValue;
188
- case "-":
189
- return leftValue - rightValue;
190
- case "*":
191
- return leftValue * rightValue;
192
- case "/":
193
- return leftValue / rightValue;
194
- default:
195
- return 0;
196
- }
197
- }
198
- compareHelper(expression, data) {
199
- const [left, operator, right] = expression.split(" ");
200
- const leftValue = this.lookup(left, data);
201
- const rightValue = this.lookup(right, data);
202
- switch (operator) {
203
- case "==":
204
- return leftValue == rightValue;
205
- case "===":
206
- return leftValue === rightValue;
207
- case "!=":
208
- return leftValue != rightValue;
209
- case "!==":
210
- return leftValue !== rightValue;
211
- case ">":
212
- return leftValue > rightValue;
213
- case "<":
214
- return leftValue < rightValue;
215
- case ">=":
216
- return leftValue >= rightValue;
217
- case "<=":
218
- return leftValue <= rightValue;
219
- default:
220
- throw new Error(`Unknown operator: ${operator}`);
221
- }
222
- }
223
- upperCaseHelper(varPath, data) {
224
- const value = this.lookup(varPath, data);
225
- return typeof value === "string" ? value.toUpperCase() : value;
226
- }
227
- lowerCaseHelper(varPath, data) {
228
- const value = this.lookup(varPath, data);
229
- return typeof value === "string" ? value.toLowerCase() : value;
230
- }
231
- jsonStringifyHelper(varPath, data) {
232
- const value = this.lookup(varPath, data);
233
- return JSON.stringify(value);
234
- }
235
- jsonParseHelper(varPath, data) {
236
- const value = this.lookup(varPath, data);
237
- return typeof value === "string" ? JSON.parse(value) : value;
238
- }
239
- dateHelper(varPath, data) {
240
- const dateString = varPath.split(" ");
241
- const date = new Date(dateString[0]);
242
- return date.toISOString(); // Default format YYYY-MM-DD
243
- }
244
- repeatHelper(args, data) {
245
- const [str, count] = args.split(" ");
246
- const repeatData = this.lookup(str, data) || str;
247
- const repeatCount = parseInt(count);
248
- console.log(repeatCount, repeatData);
249
- if (typeof repeatData === "string") {
250
- return repeatData.repeat(repeatCount);
251
- }
252
- else if (typeof repeatData === "object") {
253
- return Array(repeatCount).fill(repeatData);
254
- }
255
- }
256
- sliceHelper(args, data) {
257
- console.log(args);
258
- const [varPath, start, end] = args
259
- .split(" ")
260
- .map((arg) => this.lookup(arg, data));
261
- const value = this.lookup(varPath, data);
262
- console.log(start, end, value);
263
- if (Array.isArray(value)) {
264
- return value.slice(start, end);
265
- }
266
- else if (typeof value === "string") {
267
- return value.slice(start, end);
268
- }
269
- return value;
270
- }
271
- joinHelper(args, data) {
272
- const [varPath, separator] = args.split(" ");
273
- const value = this.lookup(varPath, data);
274
- if (Array.isArray(value)) {
275
- return value.join(separator);
276
- }
277
- return value;
278
- }
279
- findHelper(args, data) {
280
- const [arrayPath, property, value] = args.split(" ");
281
- const array = this.lookup(arrayPath, data);
282
- if (Array.isArray(array)) {
283
- return array.find((item) => this.lookup(property, item) === value);
284
- }
285
- return null;
286
- }
287
- mapHelper(args, data, innerTemplate) {
288
- const [arrayPath] = args.split(" ");
289
- const array = this.lookup(arrayPath, data);
290
- if (!Array.isArray(array)) {
291
- throw new Error(`${arrayPath} is not an array`);
292
- }
293
- console.log(innerTemplate);
294
- return array.map((item) => this.applyTemplate(innerTemplate, { ...data, item }));
295
- }
296
- uniqueHelper(varPath, data) {
297
- const value = this.lookup(varPath, data);
298
- if (Array.isArray(value)) {
299
- return Array.from(new Set(value));
300
- }
301
- return value;
302
- }
303
- randomHelper(varPath, data) {
304
- const array = this.lookup(varPath, data);
305
- if (Array.isArray(array)) {
306
- const randomIndex = Math.floor(Math.random() * array.length);
307
- return array[randomIndex];
308
- }
309
- return null;
310
- }
311
- reverseHelper(varPath, data) {
312
- const value = this.lookup(varPath, data);
313
- if (Array.isArray(value)) {
314
- return value.reverse();
315
- }
316
- else if (typeof value === "string") {
317
- return value.split("").reverse().join("");
318
- }
319
- return value;
320
- }
321
- existsHelper(varPath, data) {
322
- const value = this.lookup(varPath, data);
323
- return value !== undefined && value !== null;
324
- }
325
- }
326
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,MAAM,OAAO,kBAAkB;IAC7B,OAAO,GAAmC,EAAE,CAAC;IAE7C;QACE,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACxD,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACxD,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACpD,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACxD,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACtD,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5D,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACtD,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5D,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5D,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACxD,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACtD,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9D,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAClE,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAClE,IAAI,CAAC,cAAc,CAAC,eAAe,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1E,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAClE,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACxD,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5D,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1D,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACxD,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACxD,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACtD,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5D,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5D,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9D,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,2BAA2B;IAC3B,cAAc,CAAC,IAAY,EAAE,EAAkB;QAC7C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;IAC1B,CAAC;IAED,aAAa,CAAC,QAAa,EAAE,IAAS;QACpC,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACjC,OAAO,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC7C,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YACnC,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAClC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAChE,CAAC;QACJ,CAAC;aAAM,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACxC,IAAI,MAAM,GAAQ,EAAE,CAAC;YACrB,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;gBAC3B,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC;oBACxD,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;oBAE5B,MAAM,gBAAgB,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;oBAE/D,IAAI,OAAO,gBAAgB,KAAK,QAAQ,EAAE,CAAC;wBACzC,IAAI,KAAK,EAAE,CAAC;4BACV,MAAM,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;wBAC7D,CAAC;6BAAM,CAAC;4BACN,MAAM,GAAG,gBAAgB,CAAC;wBAC5B,CAAC;oBACH,CAAC;yBAAM,IAAI,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC;wBAC3C,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;oBACtD,CAAC;yBAAM,IAAI,OAAO,gBAAgB,KAAK,QAAQ,EAAE,CAAC;wBAChD,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;oBACtD,CAAC;yBAAM,IAAI,OAAO,gBAAgB,KAAK,SAAS,EAAE,CAAC;wBACjD,IAAI,gBAAgB,EAAE,CAAC;4BACrB,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;wBAC3C,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,MAAM,CAAC,OAAe,EAAE,IAAS;QAC/B,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,OAAO,OAAO,CAAC;QAChD,IAAI,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QAC1D,IAAI,cAAc,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACnC,cAAc,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC3C,CAAC;QACD,MAAM,WAAW,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;YACjE,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC,EAAE,IAAI,CAAC,CAAC;QACT,IAAI,WAAW,EAAE,CAAC;YAChB,OAAO,WAAW,CAAC;QACrB,CAAC;aAAM,CAAC;YACN,OAAO,OAAO,CAAC;QACjB,CAAC;IACH,CAAC;IAED,cAAc,CAAC,MAAc,EAAE,IAAS,EAAE,aAAmB;QAC3D,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;QACvD,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,CAAC,YAAY,EAAE,UAAU,EAAE,SAAS,CAAC,GAAG,WAAW,CAAC;YAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAC1C,IAAI,QAAQ,EAAE,CAAC;gBACb,mEAAmE;gBACnE,MAAM,oBAAoB,GAAG,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;gBAC1D,IAAI,oBAAoB,EAAE,CAAC;oBACzB,MAAM,eAAe,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,8BAA8B;oBAC/E,MAAM,CAAC,eAAe,EAAE,GAAG,SAAS,CAAC,GAAG,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,gCAAgC;oBACpG,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;oBAEpD,IAAI,aAAa,EAAE,CAAC;wBAClB,wDAAwD;wBACxD,MAAM,aAAa,GAAG,SAAS,CAAC,GAAG,CACjC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,GAAG,CACvC,CAAC;wBACF,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;wBAE3B,8EAA8E;wBAC9E,MAAM,WAAW,GAAG,aAAa,CAC/B,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,EACvB,IAAI,EACJ,aAAa,CACd,CAAC;wBAEF,kFAAkF;wBAClF,MAAM,WAAW,GAAG,QAAQ,CAAC,WAAW,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;wBAE/D,IACE,OAAO,WAAW,KAAK,QAAQ;4BAC/B,OAAO,WAAW,KAAK,QAAQ,EAC/B,CAAC;4BACD,OAAO,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,GAAG,WAAW,EAAE,CAAC,CAAC;wBACxD,CAAC;6BAAM,CAAC;4BACN,OAAO,WAAW,CAAC;wBACrB,CAAC;oBACH,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,4DAA4D;oBAC5D,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;oBACxD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;wBAC7D,OAAO,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;oBACnD,CAAC;yBAAM,CAAC;wBACN,OAAO,MAAM,CAAC;oBAChB,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,MAAM,CAAC;QAChB,CAAC;IACH,CAAC;IAED,UAAU;IACV,SAAS,CAAC,OAAe,EAAE,IAAS,EAAE,aAAkB;QACtD,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACzC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAEnB,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,SAAS,CAAC,MAAW,EAAE,IAAS;QAC9B,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACnC,CAAC;IACD,YAAY,CAAC,OAAe,EAAE,IAAS;QACrC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACzC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9E,CAAC;IAED,UAAU,CAAC,MAAW,EAAE,IAAS,EAAE,aAAkB;QACnD,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACxC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,kBAAkB,CAAC,CAAC;QACvD,CAAC;QAED,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAS,EAAE,EAAE,CAC7B,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,CAAC,CACrD,CAAC;IACJ,CAAC;IACD,UAAU,CAAC,MAAW,EAAE,IAAS,EAAE,aAAkB;QACnD,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAExC,OAAO,KAAK,CAAC,CAAC,KAAK,CAAC;aACjB,IAAI,CAAC,IAAI,CAAC;aACV,GAAG,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC9E,CAAC;IAED,QAAQ,CAAC,SAAiB,EAAE,IAAS,EAAE,aAAkB;QACvD,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAE7B,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IACxC,CAAC;IACD,YAAY,CAAC,SAAiB,EAAE,IAAS,EAAE,aAAkB;QAC3D,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IACxC,CAAC;IAED,UAAU,CAAC,SAAiB,EAAE,IAAS,EAAE,aAAkB;QACzD,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,EAAE,GAAG,IAAI,EAAE,GAAG,UAAU,EAAE,CAAC,CAAC;IACvE,CAAC;IACD,SAAS,CAAC,OAAe,EAAE,IAAS,EAAE,aAAkB;QACtD,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAE5C,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAE3C,OAAO,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IACtE,CAAC;IACD,YAAY,CAAC,IAAY,EAAE,IAAS;QAClC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;QAC3E,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IACD,UAAU,CAAC,UAAkB,EAAE,IAAS;QACtC,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACtD,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QACtD,MAAM,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;QACxD,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,GAAG;gBACN,OAAO,SAAS,GAAG,UAAU,CAAC;YAChC,KAAK,GAAG;gBACN,OAAO,SAAS,GAAG,UAAU,CAAC;YAChC,KAAK,GAAG;gBACN,OAAO,SAAS,GAAG,UAAU,CAAC;YAChC,KAAK,GAAG;gBACN,OAAO,SAAS,GAAG,UAAU,CAAC;YAChC;gBACE,OAAO,CAAC,CAAC;QACb,CAAC;IACH,CAAC;IACD,aAAa,CAAC,UAAkB,EAAE,IAAS;QACzC,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACtD,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAE5C,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,IAAI;gBACP,OAAO,SAAS,IAAI,UAAU,CAAC;YACjC,KAAK,KAAK;gBACR,OAAO,SAAS,KAAK,UAAU,CAAC;YAClC,KAAK,IAAI;gBACP,OAAO,SAAS,IAAI,UAAU,CAAC;YACjC,KAAK,KAAK;gBACR,OAAO,SAAS,KAAK,UAAU,CAAC;YAClC,KAAK,GAAG;gBACN,OAAO,SAAS,GAAG,UAAU,CAAC;YAChC,KAAK,GAAG;gBACN,OAAO,SAAS,GAAG,UAAU,CAAC;YAChC,KAAK,IAAI;gBACP,OAAO,SAAS,IAAI,UAAU,CAAC;YACjC,KAAK,IAAI;gBACP,OAAO,SAAS,IAAI,UAAU,CAAC;YACjC;gBACE,MAAM,IAAI,KAAK,CAAC,qBAAqB,QAAQ,EAAE,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IACD,eAAe,CAAC,OAAe,EAAE,IAAS;QACxC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACzC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;IACjE,CAAC;IACD,eAAe,CAAC,OAAe,EAAE,IAAS;QACxC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACzC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;IACjE,CAAC;IACD,mBAAmB,CAAC,OAAe,EAAE,IAAS;QAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACzC,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IACD,eAAe,CAAC,OAAe,EAAE,IAAS;QACxC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACzC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAC/D,CAAC;IACD,UAAU,CAAC,OAAe,EAAE,IAAS;QACnC,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACtC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QACrC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,4BAA4B;IACzD,CAAC;IACD,YAAY,CAAC,IAAY,EAAE,IAAS;QAClC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACrC,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,GAAG,CAAC;QACjD,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QAErC,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;YACnC,OAAO,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QACxC,CAAC;aAAM,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;YAC1C,OAAO,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IACD,WAAW,CAAC,IAAY,EAAE,IAAS;QACjC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAElB,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,GAAG,IAAI;aAC/B,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;QACxC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACzC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QAE/B,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACjC,CAAC;aAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACrC,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACjC,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,UAAU,CAAC,IAAY,EAAE,IAAS;QAChC,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAEzC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC/B,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,UAAU,CAAC,IAAY,EAAE,IAAS;QAChC,MAAM,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACrD,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAE3C,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC;QACrE,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,SAAS,CAAC,IAAY,EAAE,IAAS,EAAE,aAAkB;QACnD,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACpC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAE3C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,GAAG,SAAS,kBAAkB,CAAC,CAAC;QAClD,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAE3B,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACxB,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,CAAC,CACrD,CAAC;IACJ,CAAC;IACD,YAAY,CAAC,OAAe,EAAE,IAAS;QACrC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAEzC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;QACpC,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,YAAY,CAAC,OAAe,EAAE,IAAS;QACrC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAEzC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;YAC7D,OAAO,KAAK,CAAC,WAAW,CAAC,CAAC;QAC5B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,aAAa,CAAC,OAAe,EAAE,IAAS;QACtC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAEzC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,KAAK,CAAC,OAAO,EAAE,CAAC;QACzB,CAAC;aAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACrC,OAAO,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,YAAY,CAAC,OAAe,EAAE,IAAS;QACrC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACzC,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC;IAC/C,CAAC;CACF"}