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
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