lang-json 1.0.0 → 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
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
package/src/example.ts DELETED
@@ -1,116 +0,0 @@
1
- type HelperFunction = (
2
- context: any,
3
- data: any,
4
- engine: JsonTemplateEngine
5
- ) => any;
6
-
7
- export class JsonTemplateEngine {
8
- private helpers: Record<string, HelperFunction> = {};
9
-
10
- constructor() {
11
- console.log("registering helpers");
12
- this.registerHelper("each", this.eachHelper.bind(this));
13
- this.registerHelper("if", this.ifHelper.bind(this));
14
- this.registerHelper("var", this.varHelper.bind(this));
15
- }
16
-
17
- // Register a custom helper
18
- registerHelper(name: string, fn: HelperFunction) {
19
- this.helpers[name] = fn;
20
- }
21
-
22
- // Core function to parse and apply template (now fully recursive)
23
- applyTemplate(template: any, data: any): any {
24
- console.log("template : ", template);
25
-
26
- if (typeof template === "string") {
27
- console.log("string template");
28
- return this.replaceVars(template, data); // Replace string variables (dynamic)
29
- } else if (Array.isArray(template)) {
30
- console.log("Array template");
31
- return template.map((item) => this.applyTemplate(item, data)); // Handle arrays recursively
32
- } else if (typeof template === "object") {
33
- console.log("object template");
34
- const result: any = {};
35
- for (const key in template) {
36
- if (key.startsWith("{{#")) {
37
- const helperName = key.slice(3, key.indexOf("}}"));
38
- const helperArg = key.slice(key.indexOf(" ") + 1, -2).trim();
39
-
40
- if (this.helpers[helperName]) {
41
- const helperFn = this.helpers[helperName];
42
- console.log("applying helper", helperName);
43
- const helperResult = helperFn(
44
- template[key],
45
- { ...data, helperArg },
46
- this
47
- );
48
- console.log("helperRe", helperResult);
49
- }
50
- } else if (key.includes("{{else}}")) {
51
- const elseKey = key.replace("{{else}}", "").trim();
52
- result[elseKey] = this.applyTemplate(template[key], data);
53
- } else {
54
- console.log("going deep down");
55
- result[key] = this.applyTemplate(template[key], data);
56
- }
57
- }
58
- return result;
59
- }
60
- return template;
61
- }
62
-
63
- // Helper function to replace {{var}} with values from data
64
- private replaceVars(template: any, data: any): any {
65
- if (typeof template === "string") {
66
- return template.replace(/{{\s*([\w.]+)\s*}}/g, (match, varPath) => {
67
- return this.lookup(varPath, data) || "";
68
- });
69
- }
70
- return template;
71
- }
72
-
73
- // Lookup a variable in data (supports nested keys like 'menu.name')
74
- private lookup(varPath: string, data: any): any {
75
- console.log("looking up", varPath, data);
76
- return varPath.split(".").reduce((acc, part) => acc?.[part], data);
77
- }
78
-
79
- // Each helper {{#each}}
80
- private eachHelper(context: any, data: any, engine: JsonTemplateEngine): any {
81
- const array = engine.lookup(data.helperArg, data);
82
- if (!Array.isArray(array)) {
83
- throw new Error(`${data.helperArg} is not an array`);
84
- }
85
-
86
- // Recursively apply template for each item in the array
87
- return array.map((item: any) =>
88
- engine.applyTemplate(context, { ...data, ...item })
89
- );
90
- }
91
-
92
- // If/else helper {{#if}}
93
- private ifHelper(context: any, data: any, engine: JsonTemplateEngine): any {
94
- const condition = engine.lookup(data.helperArg, data);
95
-
96
- if (condition) {
97
- return engine.applyTemplate(context, data);
98
- } else {
99
- const elseKey = Object.keys(context).find((key) =>
100
- key.includes("{{else}}")
101
- );
102
- if (elseKey) {
103
- return engine.applyTemplate(
104
- context[elseKey.replace("{{else}}", "").trim()],
105
- data
106
- );
107
- }
108
- }
109
- return null;
110
- }
111
-
112
- // Variable helper {{var}}
113
- private varHelper(context: any, data: any): any {
114
- return this.lookup(data.helperArg, data);
115
- }
116
- }
File without changes