lang-json 1.0.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (40) hide show
  1. package/babel.config.js +8 -0
  2. package/coverage/clover.xml +6 -0
  3. package/coverage/coverage-final.json +1 -0
  4. package/coverage/lcov-report/base.css +224 -0
  5. package/coverage/lcov-report/block-navigation.js +87 -0
  6. package/coverage/lcov-report/favicon.png +0 -0
  7. package/coverage/lcov-report/index.html +101 -0
  8. package/coverage/lcov-report/prettify.css +1 -0
  9. package/coverage/lcov-report/prettify.js +2 -0
  10. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  11. package/coverage/lcov-report/sorter.js +196 -0
  12. package/dist/esm/src/index.d.ts +18 -0
  13. package/dist/esm/src/index.js +415 -0
  14. package/dist/esm/src/index.js.map +1 -0
  15. package/dist/esm/src/modules/is-this/index.d.ts +136 -0
  16. package/dist/esm/src/modules/is-this/index.js +484 -0
  17. package/dist/esm/src/modules/is-this/index.js.map +1 -0
  18. package/dist/esm/tests/helpers.test.d.ts +1 -0
  19. package/dist/esm/tests/helpers.test.js +220 -0
  20. package/dist/esm/tests/helpers.test.js.map +1 -0
  21. package/dist/esm/tests/index.test.d.ts +1 -0
  22. package/dist/esm/tests/index.test.js +537 -0
  23. package/dist/esm/tests/index.test.js.map +1 -0
  24. package/jest.config.ts +212 -0
  25. package/package.json +19 -9
  26. package/src/index.ts +450 -296
  27. package/src/modules/is-this/index.ts +682 -0
  28. package/tests/helpers.test.ts +259 -0
  29. package/tests/index.test.ts +681 -0
  30. package/tsconfig.json +15 -16
  31. package/dist/esm/dump.js +0 -2
  32. package/dist/esm/dump.js.map +0 -1
  33. package/dist/esm/example.d.ts +0 -13
  34. package/dist/esm/example.js +0 -93
  35. package/dist/esm/example.js.map +0 -1
  36. package/dist/esm/index.d.ts +0 -36
  37. package/dist/esm/index.js +0 -326
  38. package/dist/esm/index.js.map +0 -1
  39. package/src/example.ts +0 -116
  40. /package/{dist/esm/dump.d.ts → coverage/lcov.info} +0 -0
@@ -0,0 +1,537 @@
1
+ import LangJSON from "../src/index";
2
+ const langJson = new LangJSON();
3
+ describe("LangJSON Test Suite", () => {
4
+ /**
5
+ * -------------------------
6
+ * Test: lookup method
7
+ * -------------------------
8
+ */
9
+ test("Basic lookup", () => {
10
+ expect(langJson.lookup("key", { key: "value" })).toBe("value");
11
+ });
12
+ test("Nested lookup", () => {
13
+ const data = { nested: { key: "value" } };
14
+ expect(langJson.lookup("nested.key", data)).toBe("value");
15
+ });
16
+ test("Non-existent key in lookup", () => {
17
+ expect(langJson.lookup("missingKey", { key: "value" })).toBe(undefined);
18
+ });
19
+ test("Lookup with array index access", () => {
20
+ const data = { items: ["first", "second", "third"] };
21
+ expect(langJson.lookup("items[1]", data)).toBe("second");
22
+ });
23
+ test("Lookup for deeply nested paths", () => {
24
+ const data = { a: { b: { c: { d: "deepValue" } } } };
25
+ expect(langJson.lookup("a.b.c.d", data)).toBe("deepValue");
26
+ });
27
+ test("Lookup with array and non-existent index", () => {
28
+ const data = { items: ["first", "second", "third"] };
29
+ expect(langJson.lookup("items[10]", data)).toBe(undefined);
30
+ });
31
+ test("Lookup with non-string keys", () => {
32
+ const data = { 1: "one", 2: "two" };
33
+ expect(langJson.lookup("1", data)).toBe("one");
34
+ });
35
+ test("Lookup with undefined or null values", () => {
36
+ const data = { key: null, anotherKey: undefined };
37
+ expect(langJson.lookup("key", data)).toBe(null);
38
+ expect(langJson.lookup("anotherKey", data)).toBe(undefined);
39
+ });
40
+ test("Lookup with nested key and array mix", () => {
41
+ const data = { items: [{ name: "first" }, { name: "second" }] };
42
+ expect(langJson.lookup("items[1].name", data)).toBe("second");
43
+ });
44
+ test("Lookup with complex keys containing spaces", () => {
45
+ const data = { "key with spaces": { "another key": "value" } };
46
+ expect(langJson.lookup("key with spaces.another key", data)).toBe("value");
47
+ });
48
+ test("Lookup with deeply nested array of objects", () => {
49
+ const data = {
50
+ level1: [{ level2: [{ level3: { key: "deepValue" } }] }],
51
+ };
52
+ expect(langJson.lookup("level1[0].level2[0].level3.key", data)).toBe("deepValue");
53
+ });
54
+ test("Lookup with special characters and symbols in the key", () => {
55
+ const data = { "key@#": "specialValue" };
56
+ expect(langJson.lookup("key@#", data)).toBe("specialValue");
57
+ });
58
+ test("Lookup with circular reference in data", () => {
59
+ const data = {};
60
+ data.self = data; // Circular reference
61
+ expect(langJson.lookup("self.self.self", data)).toBe(data);
62
+ });
63
+ test("Lookup with an empty string as key", () => {
64
+ const data = { "": "emptyKey" };
65
+ expect(langJson.lookup("", data)).toBe("emptyKey");
66
+ });
67
+ test("Lookup with mixed object and array access in key", () => {
68
+ const data = {
69
+ list: [{ nested: { key: "arrayObjectValue" } }],
70
+ };
71
+ expect(langJson.lookup("list[0].nested.key", data)).toBe("arrayObjectValue");
72
+ });
73
+ /**
74
+ * -------------------------
75
+ * Test: processHelper method
76
+ * -------------------------
77
+ */
78
+ test("processHelper with zero arguments", () => {
79
+ langJson.registerHelper("returnHello", () => "Hello");
80
+ expect(langJson.processHelper("{{#returnHello}}", { key: "value" })).toBe("Hello");
81
+ });
82
+ test("processHelper with valid var key", () => {
83
+ expect(langJson.processHelper("{{#var key}}", { key: "value" })).toBe("value");
84
+ });
85
+ test("processHelper with missing key in data", () => {
86
+ expect(langJson.processHelper("{{#var missingKey}}", { key: "value" })).toBe(undefined);
87
+ });
88
+ test("processHelper with missing helper", () => {
89
+ expect(() => {
90
+ langJson.processHelper("{{#unknown key}}", { key: "value" });
91
+ }).toThrow("Missing helper : unknown"); // Or you can specify the error message with toThrow("error message")
92
+ });
93
+ test("processHelper with nested helper call", () => {
94
+ expect(langJson.processHelper("{{#var (var key)}}", {
95
+ key: "nestedKey",
96
+ nestedKey: "result",
97
+ })).toBe("result");
98
+ });
99
+ test("processHelper with escaped variable", () => {
100
+ expect(langJson.processHelper("This is {{#var key}}!", { key: "value" })).toBe("This is value!");
101
+ });
102
+ test("processHelper with escaping inside helper", () => {
103
+ expect(langJson.processHelper("{{#var key}} is {{#var anotherKey}}", {
104
+ key: "value",
105
+ anotherKey: "escapedValue",
106
+ })).toBe("value is escapedValue");
107
+ });
108
+ test("processHelper with boolean handling", () => {
109
+ const data = { isTrue: true, isFalse: false };
110
+ expect(langJson.processHelper("{{#var isTrue}}", data)).toBe(true);
111
+ expect(langJson.processHelper("{{#var isFalse}}", data)).toBe(false);
112
+ });
113
+ test("processHelper with multiple variables in one template", () => {
114
+ const template = "Hello, {{#var firstName}} {{#var lastName}}!";
115
+ const data = { firstName: "John", lastName: "Doe" };
116
+ expect(langJson.processHelper(template, data)).toBe("Hello, John Doe!");
117
+ });
118
+ test("processHelper with nested variable in object", () => {
119
+ const template = "{{#var user.details.name}}";
120
+ const data = { user: { details: { name: "Jane" } } };
121
+ expect(langJson.processHelper(template, data)).toBe("Jane");
122
+ });
123
+ test("processHelper with array passed as argument", () => {
124
+ langJson.registerHelper("join", ([arr]) => arr.join(", "));
125
+ expect(langJson.processHelper("{{#join items}}", {
126
+ items: ["apple", "banana", "cherry"],
127
+ })).toBe("apple, banana, cherry");
128
+ });
129
+ // test("processHelper with complex nesting of helpers", () => {
130
+ // langJson.registerHelper("outer", ([arg]) => `outer(${arg})`);
131
+ // langJson.registerHelper("inner", ([arg]) => `inner(${arg})`);
132
+ // expect(
133
+ // langJson.processHelper("{{#outer (inner key)}}", { key: "value" })
134
+ // ).toBe("outer(inner(value))");
135
+ // });
136
+ test("processHelper with variable inside a helper argument", () => {
137
+ langJson.registerHelper("wrap", (arg) => `[${arg}]`);
138
+ expect(langJson.processHelper("{{#wrap (var key)}}", { key: "content" })).toBe("[content]");
139
+ });
140
+ // test("processHelper with escaped special characters", () => {
141
+ // expect(
142
+ // langJson.processHelper("Use \\{{#var key}} to access value", {
143
+ // key: "data",
144
+ // })
145
+ // ).toBe("Use {{#var key}} to access value");
146
+ // });
147
+ test("processHelper with an empty helper name", () => {
148
+ expect(langJson.processHelper("{{# key}}", { key: "value" })).toBe("{{# key}}");
149
+ });
150
+ test("processHelper with incorrect data types for variables", () => {
151
+ expect(langJson.processHelper("{{#var key}}", { key: 123 })).toBe(123);
152
+ expect(langJson.processHelper("{{#var key}}", { key: true })).toBe(true);
153
+ expect(langJson.processHelper("{{#var key}}", { key: null })).toBe(null);
154
+ });
155
+ test("processHelper with non-terminating helper expressions", () => {
156
+ expect(langJson.processHelper("{{#var key", { key: "value" })).toBe("{{#var key");
157
+ });
158
+ test("processHelper with special characters in variable names", () => {
159
+ const data = {
160
+ "key-with-dash": "valueWithDash",
161
+ "key@symbol": "valueWithSymbol",
162
+ };
163
+ expect(langJson.processHelper("{{#var key-with-dash}}", data)).toBe("valueWithDash");
164
+ expect(langJson.processHelper("{{#var key@symbol}}", data)).toBe("valueWithSymbol");
165
+ });
166
+ test("processHelper with helper functions throwing errors", () => {
167
+ langJson.registerHelper("errorHelper", () => {
168
+ throw new Error("Helper error");
169
+ });
170
+ expect(() => langJson.processHelper("{{#errorHelper}}", {})).toThrow("Helper error");
171
+ });
172
+ /**
173
+ * -------------------------
174
+ * Test: applyTemplate method
175
+ * -------------------------
176
+ */
177
+ test("applyTemplate with object template", () => {
178
+ const template = { "{{#var firstName}}": "{{#var lastName}}" };
179
+ const data = { firstName: "John", lastName: "Doe" };
180
+ expect(langJson.applyTemplate(template, data)).toEqual({ John: "Doe" });
181
+ });
182
+ test("applyTemplate with array of strings", () => {
183
+ const template = ["{{#var key}}", "{{#var value}}"];
184
+ const data = { key: "first", value: "second" };
185
+ expect(langJson.applyTemplate(template, data)).toEqual(["first", "second"]);
186
+ });
187
+ test("applyTemplate with nested objects", () => {
188
+ const template = {
189
+ "{{#var user.name}}": { age: "{{#var user.age}}" },
190
+ };
191
+ const data = { user: { name: "Alice", age: 30 } };
192
+ expect(langJson.applyTemplate(template, data)).toEqual({
193
+ Alice: { age: 30 },
194
+ });
195
+ });
196
+ test("applyTemplate with array of objects", () => {
197
+ const template = [
198
+ { "{{#var firstName}}": "{{#var lastName}}" },
199
+ { "{{#var firstName}}": "{{#var age}}" },
200
+ ];
201
+ const data = { firstName: "John", lastName: "Doe", age: 30 };
202
+ expect(langJson.applyTemplate(template, data)).toEqual([
203
+ { John: "Doe" },
204
+ { John: 30 },
205
+ ]);
206
+ });
207
+ test("applyTemplate with boolean values", () => {
208
+ const template = { "{{#var isActive}}": "Active" };
209
+ const data = { isActive: true };
210
+ expect(langJson.applyTemplate(template, data)).toEqual({ true: "Active" });
211
+ });
212
+ test("applyTemplate with deeply nested object structures", () => {
213
+ const template = {
214
+ "{{#var user.name}}": {
215
+ "{{#var user.details.age}}": "{{#var user.details.address}}",
216
+ },
217
+ };
218
+ const data = {
219
+ user: { name: "John", details: { age: 30, address: "NY" } },
220
+ };
221
+ expect(langJson.applyTemplate(template, data)).toEqual({
222
+ John: { 30: "NY" },
223
+ });
224
+ });
225
+ test("applyTemplate with mixed arrays and objects", () => {
226
+ const template = [
227
+ { "{{#var firstName}}": "{{#var lastName}}" },
228
+ "{{#var age}}",
229
+ ["{{#var city}}", "{{#var country}}"],
230
+ ];
231
+ const data = {
232
+ firstName: "John",
233
+ lastName: "Doe",
234
+ age: 30,
235
+ city: "New York",
236
+ country: "USA",
237
+ };
238
+ expect(langJson.applyTemplate(template, data)).toEqual([
239
+ { John: "Doe" },
240
+ 30,
241
+ ["New York", "USA"],
242
+ ]);
243
+ });
244
+ test("applyTemplate with missing keys in template", () => {
245
+ const template = { "{{#var firstName}}": "{{#var lastName}}" };
246
+ const data = { firstName: "John" }; // missing lastName
247
+ expect(langJson.applyTemplate(template, data)).toEqual({
248
+ John: undefined,
249
+ });
250
+ });
251
+ test("applyTemplate with escaping in template", () => {
252
+ const template = { escapedVar: "{{#var key}}" };
253
+ const data = { key: "value" };
254
+ expect(langJson.applyTemplate(template, data)).toEqual({
255
+ escapedVar: "value",
256
+ });
257
+ });
258
+ test("applyTemplate with undefined data values", () => {
259
+ const template = { "{{#var key}}": "value" };
260
+ const data = { key: undefined };
261
+ expect(langJson.applyTemplate(template, data)).toEqual({
262
+ undefined: "value",
263
+ });
264
+ });
265
+ test("applyTemplate with conditional logic in templates", () => {
266
+ langJson.registerHelper("ifEquals", ([a, b]) => (a === b ? "Yes" : "No"));
267
+ const template = { "{{#ifEquals user.role 'admin'}}": "Is Admin" };
268
+ expect(langJson.applyTemplate(template, { user: { role: "admin" } })).toEqual({
269
+ Yes: "Is Admin",
270
+ });
271
+ expect(langJson.applyTemplate(template, { user: { role: "user" } })).toEqual({
272
+ No: "Is Admin",
273
+ });
274
+ });
275
+ test("applyTemplate with circular references in data", () => {
276
+ const data = { key: "value" };
277
+ data.self = data; // Create circular reference
278
+ const template = { "{{#var key}}": "{{#var self.key}}" };
279
+ expect(langJson.applyTemplate(template, data)).toEqual({ value: "value" });
280
+ });
281
+ test("applyTemplate with keys that are numbers", () => {
282
+ const template = { "{{#var 1}}": "{{#var 2}}" };
283
+ const data = { 1: "one", 2: "two" };
284
+ expect(langJson.applyTemplate(template, data)).toEqual({ one: "two" });
285
+ });
286
+ test("applyTemplate with deeply nested structures and template resolution", () => {
287
+ const template = {
288
+ "{{#var user.name}}": {
289
+ "{{#var user.job.title}}": {
290
+ "{{#var user.job.department}}": "{{#var user.job.level}}",
291
+ },
292
+ },
293
+ };
294
+ const data = {
295
+ user: {
296
+ name: "John",
297
+ job: {
298
+ title: "Manager",
299
+ department: "Sales",
300
+ level: "Senior",
301
+ },
302
+ },
303
+ };
304
+ expect(langJson.applyTemplate(template, data)).toEqual({
305
+ John: { Manager: { Sales: "Senior" } },
306
+ });
307
+ });
308
+ /**
309
+ * -------------------------
310
+ * Test: Registering custom helper functions
311
+ * -------------------------
312
+ */
313
+ test("registerHelper with custom helper", () => {
314
+ langJson.registerHelper("custom", ([arg]) => arg.toUpperCase());
315
+ expect(langJson.processHelper("{{#custom key}}", { key: "value" })).toBe("VALUE");
316
+ });
317
+ test("registerHelpers with multiple custom helpers", () => {
318
+ langJson.registerHelpers({
319
+ upper: ([arg]) => arg.toUpperCase(),
320
+ lower: ([arg]) => arg.toLowerCase(),
321
+ });
322
+ expect(langJson.processHelper("{{#upper key}}", { key: "Value" })).toBe("VALUE");
323
+ expect(langJson.processHelper("{{#lower key}}", { key: "VALUE" })).toBe("value");
324
+ });
325
+ test("registerHelper with no arguments", () => {
326
+ langJson.registerHelper("noArgs", () => "No Args!");
327
+ expect(langJson.processHelper("{{#noArgs}}", {})).toBe("No Args!");
328
+ });
329
+ test("registerHelper with multiple arguments", () => {
330
+ langJson.registerHelper("concat", ([arg1, arg2]) => arg1 + arg2);
331
+ expect(langJson.processHelper("{{#concat first second}}", {
332
+ first: "Hello",
333
+ second: "World",
334
+ })).toBe("HelloWorld");
335
+ });
336
+ test("registerHelper for formatting or computation", () => {
337
+ langJson.registerHelper("add", ([a, b]) => a + b);
338
+ expect(langJson.processHelper("{{#add 5 10}}", {})).toBe(15);
339
+ });
340
+ test("registerHelper with string manipulation", () => {
341
+ langJson.registerHelper("reverse", ([arg]) => arg.split("").reverse().join(""));
342
+ expect(langJson.processHelper("{{#reverse word}}", { word: "hello" })).toBe("olleh");
343
+ });
344
+ });
345
+ test("registerHelper for conditional formatting", () => {
346
+ langJson.registerHelper("isAdult", ([age]) => age >= 18 ? "Adult" : "Minor");
347
+ expect(langJson.processHelper("{{#isAdult age}}", { age: 20 })).toBe("Adult");
348
+ expect(langJson.processHelper("{{#isAdult age}}", { age: 15 })).toBe("Minor");
349
+ });
350
+ test("registerHelper with arguments having special characters", () => {
351
+ langJson.registerHelper("sanitize", ([str]) => str.replace(/[^a-zA-Z ]/g, ""));
352
+ expect(langJson.processHelper("{{#sanitize key}}", { key: "Hello@World!" })).toBe("HelloWorld");
353
+ });
354
+ test("registerHelper for handling empty input", () => {
355
+ langJson.registerHelper("isEmpty", ([str]) => str === "" ? "Empty" : "Not Empty");
356
+ expect(langJson.processHelper("{{#isEmpty key}}", { key: "" })).toBe("Empty");
357
+ expect(langJson.processHelper("{{#isEmpty key}}", { key: "Value" })).toBe("Not Empty");
358
+ });
359
+ test("registerHelper that throws an error", () => {
360
+ langJson.registerHelper("throwError", () => {
361
+ throw new Error("Something went wrong!");
362
+ });
363
+ expect(() => langJson.processHelper("{{#throwError}}", {})).toThrow("Something went wrong!");
364
+ });
365
+ test("registerHelper with default values for missing arguments", () => {
366
+ langJson.registerHelper("defaultArg", ([arg = "default"]) => arg);
367
+ expect(langJson.processHelper("{{#defaultArg}}", {})).toBe("default");
368
+ expect(langJson.processHelper("{{#defaultArg key}}", { key: "provided" })).toBe("provided");
369
+ });
370
+ test("registerHelper with multiple arguments passed dynamically", () => {
371
+ langJson.registerHelper("concat", ([...args]) => args.join("-"));
372
+ expect(langJson.processHelper("{{#concat key1 key2 key3}}", {
373
+ key1: "first",
374
+ key2: "second",
375
+ key3: "third",
376
+ })).toBe("first-second-third");
377
+ });
378
+ test("registerHelper that returns an object instead of a string", () => {
379
+ langJson.registerHelper("createUser", ([name, age]) => ({ name, age }));
380
+ expect(langJson.processHelper("{{#createUser name age}}", {
381
+ name: "Alice",
382
+ age: 30,
383
+ })).toEqual({
384
+ name: "Alice",
385
+ age: 30,
386
+ });
387
+ });
388
+ // test("registerHelper with asynchronous operation (promise)", async () => {
389
+ // langJson.registerHelper("fetchData", async () => {
390
+ // return new Promise((resolve) => setTimeout(() => resolve("data"), 100));
391
+ // });
392
+ // const result = await langJson.processHelper("{{#fetchData}}", {});
393
+ // expect(result).toBe("data");
394
+ // });
395
+ test("registerHelper with fallback value if input is missing", () => {
396
+ langJson.registerHelper("default", ([value, fallback]) => value || fallback);
397
+ expect(langJson.processHelper("{{#default key 'defaultValue'}}", { key: null })).toBe("defaultValue");
398
+ });
399
+ test("registerHelper with helpers that modify objects", () => {
400
+ langJson.registerHelper("addProperty", ([obj, key, value]) => {
401
+ obj[key] = value;
402
+ return obj;
403
+ });
404
+ expect(langJson.processHelper("{{#addProperty obj key value}}", {
405
+ obj: {},
406
+ key: "newKey",
407
+ value: "newValue",
408
+ })).toEqual({
409
+ newKey: "newValue",
410
+ });
411
+ });
412
+ test("registerHelper that uses an internal state", () => {
413
+ let state = 0;
414
+ langJson.registerHelper("increment", () => {
415
+ state += 1;
416
+ return state;
417
+ });
418
+ expect(langJson.processHelper("{{#increment}}", {})).toBe(1);
419
+ expect(langJson.processHelper("{{#increment}}", {})).toBe(2);
420
+ expect(langJson.processHelper("{{#increment}}", {})).toBe(3);
421
+ });
422
+ test("registerHelper for formatting dates", () => {
423
+ langJson.registerHelper("formatDate", ([date, format]) => {
424
+ const d = new Date(date);
425
+ return `${d.getFullYear()}-${(d.getMonth() + 1)
426
+ .toString()
427
+ .padStart(2, "0")}-${d.getDate().toString().padStart(2, "0")}`;
428
+ });
429
+ expect(langJson.processHelper("{{#formatDate date 'YYYY-MM-DD'}}", {
430
+ date: "2023-01-01",
431
+ })).toBe("2023-01-01");
432
+ });
433
+ test("registerHelper that accepts multiple arguments and returns an object", () => {
434
+ langJson.registerHelper("createUser", ([name, age, role]) => ({
435
+ name,
436
+ age,
437
+ role,
438
+ }));
439
+ expect(langJson.processHelper("{{#createUser name age role}}", {
440
+ name: "Alice",
441
+ age: 30,
442
+ role: "Engineer",
443
+ })).toEqual({
444
+ name: "Alice",
445
+ age: 30,
446
+ role: "Engineer",
447
+ });
448
+ });
449
+ test("Complex integration test for LangJSON functionality", () => {
450
+ // Register multiple helpers
451
+ langJson.registerHelpers({
452
+ upper: ([str]) => str.toUpperCase(),
453
+ lower: ([str]) => str.toLowerCase(),
454
+ concat: ([arg1, arg2]) => `${arg1} ${arg2}`,
455
+ isTrue: ([arg]) => arg === "true",
456
+ getLength: ([arr]) => arr.length,
457
+ repeat: ([str, times]) => str.repeat(times),
458
+ });
459
+ // Define a complex data structure
460
+ const data = {
461
+ user: {
462
+ name: "Alice",
463
+ age: 30,
464
+ roles: ["admin", "editor"],
465
+ address: {
466
+ city: "Wonderland",
467
+ zip: "12345",
468
+ coordinates: { lat: 51.5074, long: -0.1278 },
469
+ },
470
+ preferences: {
471
+ notifications: { email: true, sms: false },
472
+ theme: "dark",
473
+ },
474
+ },
475
+ isActive: "true",
476
+ items: [
477
+ { id: 1, name: "Item1", description: "First Item" },
478
+ { id: 2, name: "Item2", description: "Second Item" },
479
+ { id: 3, name: "Item3", description: "Third Item" },
480
+ ],
481
+ };
482
+ // Define a complex template
483
+ const template = {
484
+ "{{#upper user.name}}": {
485
+ age: "{{#var user.age}}",
486
+ active: "{{#isTrue isActive}}",
487
+ address: {
488
+ city: "{{#var user.address.city}}",
489
+ zip: "{{#var user.address.zip}}",
490
+ coordinates: "{{#var user.address.coordinates.lat}}, {{#var user.address.coordinates.long}}",
491
+ },
492
+ roles: {
493
+ "{{#arrayJoin (var user.roles) ', '}}": {
494
+ roleCount: "{{#getLength user.roles}}",
495
+ roleList: "{{#var user.roles[0]}} and {{#var user.roles[1]}}",
496
+ },
497
+ },
498
+ items: "{{#repeat (concat 'Item: ' (var items[0].name)) 3}}",
499
+ preferences: {
500
+ theme: "{{#var user.preferences.theme}}",
501
+ notificationStatus: {
502
+ email: "{{#var user.preferences.notifications.email}}",
503
+ sms: "{{#var user.preferences.notifications.sms}}",
504
+ },
505
+ },
506
+ },
507
+ };
508
+ // Apply the template with the complex data
509
+ const result = langJson.applyTemplate(template, data);
510
+ // Validate the output
511
+ expect(result).toEqual({
512
+ ALICE: {
513
+ age: 30,
514
+ active: true,
515
+ address: {
516
+ city: "Wonderland",
517
+ zip: "12345",
518
+ coordinates: "51.5074, -0.1278",
519
+ },
520
+ roles: {
521
+ "admin, editor": {
522
+ roleCount: 2,
523
+ roleList: "admin and editor",
524
+ },
525
+ },
526
+ items: "Item: Item1Item: Item1Item: Item1",
527
+ preferences: {
528
+ theme: "dark",
529
+ notificationStatus: {
530
+ email: true,
531
+ sms: false,
532
+ },
533
+ },
534
+ },
535
+ });
536
+ });
537
+ //# sourceMappingURL=index.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../../tests/index.test.ts"],"names":[],"mappings":"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"}