json-to-spec 19.1.0

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 (217) hide show
  1. package/README.md +118 -0
  2. package/docs/demo.html +426 -0
  3. package/docs/dist/min.js +164 -0
  4. package/docs/dist/v1/min.js +124 -0
  5. package/docs/dist/v17/min.js +355 -0
  6. package/docs/dist/v18/min.js +160 -0
  7. package/docs/dist/v19/min.js +164 -0
  8. package/docs/dist/v2/min.js +129 -0
  9. package/docs/dist/v3/min.js +201 -0
  10. package/docs/index.html +248 -0
  11. package/docs/pages/architecture.html +115 -0
  12. package/docs/pages/how-it-works.html +125 -0
  13. package/docs/pages/what-not.html +100 -0
  14. package/docs/pages/what.html +105 -0
  15. package/docs/pages/why.html +88 -0
  16. package/docs/samples/form.html +265 -0
  17. package/docs/samples/index.html +112 -0
  18. package/docs/samples/table.html +306 -0
  19. package/index.js +2 -0
  20. package/package.json +50 -0
  21. package/samples/dataList/index.html +31 -0
  22. package/samples/dataList/index.js +62 -0
  23. package/samples/dataList/input/data.json +5043 -0
  24. package/samples/dataList/input/structure.json +38 -0
  25. package/samples/dataList copy/index.html +30 -0
  26. package/samples/dataList copy/index.js +61 -0
  27. package/samples/dataList copy/input/data.json +35307 -0
  28. package/samples/dataList copy/input/structure.json +18 -0
  29. package/samples/form/index.html +29 -0
  30. package/samples/form/index.js +64 -0
  31. package/samples/form/input/data.json +9 -0
  32. package/samples/form/input/structure.json +192 -0
  33. package/samples/form-/data.json +42 -0
  34. package/samples/form-/structure.json +110 -0
  35. package/samples/select/index.html +31 -0
  36. package/samples/select/index.js +61 -0
  37. package/samples/select/input/data.json +35287 -0
  38. package/samples/select/input/select.json +18 -0
  39. package/samples/select/input/structure.json +47 -0
  40. package/samples/table/index.html +29 -0
  41. package/samples/table/index.js +61 -0
  42. package/samples/table/input/data.json +35287 -0
  43. package/samples/table/input/structure copy.json +47 -0
  44. package/samples/table/input/structure.json +86 -0
  45. package/samples/table/input/table.json +135 -0
  46. package/samples/table-/data.json +68 -0
  47. package/samples/table-/structure.json +235 -0
  48. package/src/index.js +2 -0
  49. package/src/v10/index.js +96 -0
  50. package/src/v10/instructionEngine/compile/compileTree.js +191 -0
  51. package/src/v10/instructionEngine/compileTree.js +1 -0
  52. package/src/v10/instructionEngine/expandIteration.js +1 -0
  53. package/src/v10/instructionEngine/index.js +29 -0
  54. package/src/v10/instructionEngine/interpolate.js +2 -0
  55. package/src/v10/instructionEngine/iteration/expandIteration.js +95 -0
  56. package/src/v10/instructionEngine/operation/operation.js +237 -0
  57. package/src/v10/instructionEngine/other/other.js +150 -0
  58. package/src/v10/instructionEngine/pipeline/pipeline.js +47 -0
  59. package/src/v10/instructionEngine/replace/replace.js +173 -0
  60. package/src/v10/instructionEngine/resolve/resolvePath.js +18 -0
  61. package/src/v10/instructionEngine/resolve/resolveTokenValue.js +22 -0
  62. package/src/v10/instructionEngine/resolvePath.js +1 -0
  63. package/src/v10/instructionEngine/resolveTokenValue.js +1 -0
  64. package/src/v10/instructionEngine/story/storyInjector.js +50 -0
  65. package/src/v10/instructionEngine/storyInjector.js +1 -0
  66. package/src/v10/instructionEngine/value/interpolate.js +38 -0
  67. package/src/v11/index.js +116 -0
  68. package/src/v11/iterate.js +270 -0
  69. package/src/v11/replace.js +169 -0
  70. package/src/v11/resolvePath.js +29 -0
  71. package/src/v12/index.js +122 -0
  72. package/src/v12/iterate/bindFormValues.js +74 -0
  73. package/src/v12/iterate/expandIteration.js +181 -0
  74. package/src/v12/iterate/index.js +10 -0
  75. package/src/v12/iterate/iterate.js +56 -0
  76. package/src/v12/iterate/iterateNode.js +86 -0
  77. package/src/v12/iterate/resolveCollection.js +37 -0
  78. package/src/v12/iterate.js +270 -0
  79. package/src/v12/replace.js +169 -0
  80. package/src/v12/resolvePath.js +29 -0
  81. package/src/v13/index.js +110 -0
  82. package/src/v13/iterate/bindFormValues.js +74 -0
  83. package/src/v13/iterate/expandIteration.js +188 -0
  84. package/src/v13/iterate/index.js +9 -0
  85. package/src/v13/iterate/iterate.js +32 -0
  86. package/src/v13/iterate/iterateNode.js +86 -0
  87. package/src/v13/iterate/resolveCollection.js +37 -0
  88. package/src/v13/iterate/walk.js +90 -0
  89. package/src/v13/iterate.js +270 -0
  90. package/src/v13/replace.js +169 -0
  91. package/src/v13/resolvePath.js +29 -0
  92. package/src/v14/index.js +112 -0
  93. package/src/v14/iterate/bindFormValues.js +74 -0
  94. package/src/v14/iterate/expandIteration.js +188 -0
  95. package/src/v14/iterate/index.js +9 -0
  96. package/src/v14/iterate/iterate.js +32 -0
  97. package/src/v14/iterate/resolveCollection.js +37 -0
  98. package/src/v14/iterate/walk/walk copy 2.js +114 -0
  99. package/src/v14/iterate/walk/walk copy.js +90 -0
  100. package/src/v14/iterate/walk/walk.js +98 -0
  101. package/src/v14/iterate.js +270 -0
  102. package/src/v14/replace/index.js +16 -0
  103. package/src/v14/replace/walk.js +90 -0
  104. package/src/v14/replace.js +153 -0
  105. package/src/v14/resolvePath.js +29 -0
  106. package/src/v15/index.js +123 -0
  107. package/src/v15/iterate/bindFormValues.js +74 -0
  108. package/src/v15/iterate/expandIteration.js +188 -0
  109. package/src/v15/iterate/index.js +9 -0
  110. package/src/v15/iterate/iterate.js +32 -0
  111. package/src/v15/iterate/resolveCollection.js +37 -0
  112. package/src/v15/iterate/walk/walk copy 2.js +114 -0
  113. package/src/v15/iterate/walk/walk copy.js +90 -0
  114. package/src/v15/iterate/walk/walk.js +195 -0
  115. package/src/v15/iterate.js +270 -0
  116. package/src/v15/replace/index.js +16 -0
  117. package/src/v15/replace/walk.js +90 -0
  118. package/src/v15/replace.js +155 -0
  119. package/src/v15/resolvePath.js +29 -0
  120. package/src/v16/index.js +129 -0
  121. package/src/v16/iterate/bindFormValues.js +74 -0
  122. package/src/v16/iterate/expandIteration.js +188 -0
  123. package/src/v16/iterate/index.js +9 -0
  124. package/src/v16/iterate/iterate.js +32 -0
  125. package/src/v16/iterate/resolveCollection.js +37 -0
  126. package/src/v16/iterate/walk/walk copy 2.js +114 -0
  127. package/src/v16/iterate/walk/walk copy.js +90 -0
  128. package/src/v16/iterate/walk/walk.js +196 -0
  129. package/src/v16/iterate.js +270 -0
  130. package/src/v16/replace/index.js +16 -0
  131. package/src/v16/replace/walk.js +90 -0
  132. package/src/v16/replace.js +155 -0
  133. package/src/v16/resolvePath.js +29 -0
  134. package/src/v17/index.js +119 -0
  135. package/src/v17/iterate/bindFormValues.js +74 -0
  136. package/src/v17/iterate/expandIteration.js +188 -0
  137. package/src/v17/iterate/index.js +9 -0
  138. package/src/v17/iterate/iterate.js +32 -0
  139. package/src/v17/iterate/resolveCollection.js +37 -0
  140. package/src/v17/iterate/walk/iterateDo.js +42 -0
  141. package/src/v17/iterate/walk/replaceWithData.js +60 -0
  142. package/src/v17/iterate/walk/walk.js +94 -0
  143. package/src/v17/iterate.js +270 -0
  144. package/src/v17/replace/index.js +16 -0
  145. package/src/v17/replace/walk.js +90 -0
  146. package/src/v17/replace.js +160 -0
  147. package/src/v17/resolvePath.js +29 -0
  148. package/src/v18/index.js +66 -0
  149. package/src/v18/meta.js +7 -0
  150. package/src/v18/registerGlobal.js +17 -0
  151. package/src/v18/replace.js +18 -0
  152. package/src/v18/resolvePath.js +29 -0
  153. package/src/v18/walk/iterate/v1/index.js +42 -0
  154. package/src/v18/walk/iterate/v2/index.js +32 -0
  155. package/src/v18/walk/iterate/v3/index.js +46 -0
  156. package/src/v18/walk/iterate/v4/createChildren.js +24 -0
  157. package/src/v18/walk/iterate/v4/index.js +25 -0
  158. package/src/v18/walk/replaceWithData/v1/index.js +42 -0
  159. package/src/v18/walk/replaceWithData/v1/replaceCommon.js +21 -0
  160. package/src/v18/walk/replaceWithData/v2/index.js +105 -0
  161. package/src/v18/walk/replaceWithData/v2/replaceCommon.js +21 -0
  162. package/src/v18/walk/replaceWithData/v3/index.js +15 -0
  163. package/src/v18/walk/replaceWithData/v3/replaceAttributes.js +29 -0
  164. package/src/v18/walk/replaceWithData/v3/replaceCommon.js +23 -0
  165. package/src/v18/walk/replaceWithData/v3/replaceNodeValue.js +27 -0
  166. package/src/v18/walk/walk.js +94 -0
  167. package/src/v19/index.js +55 -0
  168. package/src/v19/meta.js +7 -0
  169. package/src/v19/registerGlobal.js +17 -0
  170. package/src/v19/replace.js +18 -0
  171. package/src/v19/resolvePath.js +29 -0
  172. package/src/v19/walk/iterate/v1/index.js +42 -0
  173. package/src/v19/walk/iterate/v2/index.js +32 -0
  174. package/src/v19/walk/iterate/v3/index.js +46 -0
  175. package/src/v19/walk/iterate/v4/createChildren.js +27 -0
  176. package/src/v19/walk/iterate/v4/index.js +25 -0
  177. package/src/v19/walk/replaceWithData/v1/index.js +42 -0
  178. package/src/v19/walk/replaceWithData/v1/replaceCommon.js +21 -0
  179. package/src/v19/walk/replaceWithData/v2/index.js +105 -0
  180. package/src/v19/walk/replaceWithData/v2/replaceCommon.js +21 -0
  181. package/src/v19/walk/replaceWithData/v3/index.js +15 -0
  182. package/src/v19/walk/replaceWithData/v3/replaceAttributes.js +29 -0
  183. package/src/v19/walk/replaceWithData/v3/replaceCommon.js +23 -0
  184. package/src/v19/walk/replaceWithData/v3/replaceNodeValue.js +27 -0
  185. package/src/v19/walk/walk.js +97 -0
  186. package/src/v8/index.js +69 -0
  187. package/src/v8/instructionEngine/compile/compileTree.js +191 -0
  188. package/src/v8/instructionEngine/compileTree.js +1 -0
  189. package/src/v8/instructionEngine/expandIteration.js +1 -0
  190. package/src/v8/instructionEngine/index.js +16 -0
  191. package/src/v8/instructionEngine/interpolate.js +2 -0
  192. package/src/v8/instructionEngine/iteration/expandIteration.js +95 -0
  193. package/src/v8/instructionEngine/resolve/resolvePath.js +18 -0
  194. package/src/v8/instructionEngine/resolve/resolveTokenValue.js +22 -0
  195. package/src/v8/instructionEngine/resolvePath.js +1 -0
  196. package/src/v8/instructionEngine/resolveTokenValue.js +1 -0
  197. package/src/v8/instructionEngine/story/storyInjector.js +50 -0
  198. package/src/v8/instructionEngine/storyInjector.js +1 -0
  199. package/src/v8/instructionEngine/value/interpolate.js +38 -0
  200. package/src/v9/index.js +96 -0
  201. package/src/v9/instructionEngine/compile/compileTree.js +191 -0
  202. package/src/v9/instructionEngine/compileTree.js +1 -0
  203. package/src/v9/instructionEngine/expandIteration.js +1 -0
  204. package/src/v9/instructionEngine/index.js +29 -0
  205. package/src/v9/instructionEngine/interpolate.js +2 -0
  206. package/src/v9/instructionEngine/iteration/expandIteration.js +95 -0
  207. package/src/v9/instructionEngine/operation/operation.js +237 -0
  208. package/src/v9/instructionEngine/other/other.js +150 -0
  209. package/src/v9/instructionEngine/pipeline/pipeline.js +47 -0
  210. package/src/v9/instructionEngine/replace/replace.js +173 -0
  211. package/src/v9/instructionEngine/resolve/resolvePath.js +18 -0
  212. package/src/v9/instructionEngine/resolve/resolveTokenValue.js +22 -0
  213. package/src/v9/instructionEngine/resolvePath.js +1 -0
  214. package/src/v9/instructionEngine/resolveTokenValue.js +1 -0
  215. package/src/v9/instructionEngine/story/storyInjector.js +50 -0
  216. package/src/v9/instructionEngine/storyInjector.js +1 -0
  217. package/src/v9/instructionEngine/value/interpolate.js +38 -0
@@ -0,0 +1,160 @@
1
+ import resolvePath from "./resolvePath.js";
2
+ import walk from "./iterate/walk/walk.js";
3
+
4
+ /**
5
+ * Resolves a token expression path against local context first, then root data.
6
+ */
7
+ const resolveTokenValue = ({ inPath, inContext, inData }) => {
8
+ const localPath = inPath;
9
+ const localContext = inContext;
10
+ const localData = inData;
11
+
12
+ let value = resolvePath({ inData: localContext, inPath: localPath });
13
+
14
+ if (value === undefined && localContext && typeof localContext === "object") {
15
+ if (localContext.item && typeof localContext.item === "object") {
16
+ value = resolvePath({ inData: localContext.item, inPath: localPath });
17
+ }
18
+ if (value === undefined && localContext.row && typeof localContext.row === "object") {
19
+ value = resolvePath({ inData: localContext.row, inPath: localPath });
20
+ }
21
+ }
22
+
23
+ if (value === undefined && localData) {
24
+ value = resolvePath({ inData: localData, inPath: localPath });
25
+ }
26
+
27
+ return value;
28
+ };
29
+
30
+ /**
31
+ * Replaces ${path} tokens in a string value.
32
+ */
33
+ const replaceValue = ({ inValue, inContext, inData }) => {
34
+ const localValue = inValue;
35
+ const localContext = inContext;
36
+ const localData = inData;
37
+
38
+ if (typeof localValue !== "string" || !localValue.includes("${")) {
39
+ return localValue;
40
+ }
41
+
42
+ const hasItemContext = Boolean(localContext && (localContext.item || Object.keys(localContext).length > 0));
43
+
44
+ // Exact match: "${path}" -> preserve primitive types (boolean, number, object)
45
+ const exactMatch = localValue.match(/^\$\{([^}]+)\}$/);
46
+ if (exactMatch) {
47
+ const token = resolveTokenValue({
48
+ inPath: exactMatch[1].trim(),
49
+ inContext: localContext,
50
+ inData: localData
51
+ });
52
+ return token !== undefined && token !== null ? token : (hasItemContext ? "" : localValue);
53
+ }
54
+
55
+ // Substring interpolation: "Hello ${name}" -> string replacement
56
+ return localValue.replace(/\$\{([^}]+)\}/g, (fullMatch, expr) => {
57
+ const token = resolveTokenValue({
58
+ inPath: expr.trim(),
59
+ inContext: localContext,
60
+ inData: localData
61
+ });
62
+ return token !== undefined && token !== null ? String(token) : (hasItemContext ? "" : fullMatch);
63
+ });
64
+ };
65
+
66
+ /**
67
+ * Recursively walks a JSON tree and replaces all ${...} tokens against data.
68
+ */
69
+ export const replaceNode = ({ inNode, inContext = {}, inData = {} } = {}) => {
70
+ const localNode = inNode;
71
+ const localContext = inContext;
72
+ const localData = inData;
73
+
74
+ if (localNode === null || localNode === undefined) return localNode;
75
+
76
+ if (Array.isArray(localNode)) {
77
+ return localNode.map(child => replaceNode({
78
+ inNode: child,
79
+ inContext: localContext,
80
+ inData: localData
81
+ }));
82
+ }
83
+
84
+ if (typeof localNode === "string") {
85
+ return replaceValue({
86
+ inValue: localNode,
87
+ inContext: localContext,
88
+ inData: localData
89
+ });
90
+ }
91
+
92
+ if (typeof localNode !== "object") {
93
+ return localNode;
94
+ }
95
+
96
+ const clone = { ...localNode };
97
+
98
+ if (clone.textContent && typeof clone.textContent === "string") {
99
+ clone.textContent = replaceValue({
100
+ inValue: clone.textContent,
101
+ inContext: localContext,
102
+ inData: localData
103
+ });
104
+ }
105
+
106
+ if (clone.attributes) {
107
+ clone.attributes = { ...clone.attributes };
108
+ for (const [name, val] of Object.entries(clone.attributes)) {
109
+ if (typeof val === "string") {
110
+ clone.attributes[name] = replaceValue({
111
+ inValue: val,
112
+ inContext: localContext,
113
+ inData: localData
114
+ });
115
+ }
116
+ }
117
+ }
118
+
119
+ if (clone.properties) {
120
+ clone.properties = { ...clone.properties };
121
+ for (const [name, val] of Object.entries(clone.properties)) {
122
+ if (typeof val === "string") {
123
+ clone.properties[name] = replaceValue({
124
+ inValue: val,
125
+ inContext: localContext,
126
+ inData: localData
127
+ });
128
+ }
129
+ }
130
+ }
131
+
132
+ if (Array.isArray(clone.children)) {
133
+ clone.children = clone.children.map(child => replaceNode({
134
+ inNode: child,
135
+ inContext: localContext,
136
+ inData: localData
137
+ }));
138
+ }
139
+
140
+ return clone;
141
+ };
142
+
143
+ /**
144
+ * Main replace function: (structure, data) -> replaced JSON structure
145
+ */
146
+ export const replace = ({ inStructureAsJson, inDataAsJson, inOperation }) => {
147
+ // console.log("inDataAsJson-------- : ", inDataAsJson);
148
+
149
+ try {
150
+ return walk({
151
+ inNode: inStructureAsJson,
152
+ inData: inDataAsJson, inOperation
153
+ });
154
+ } catch (err) {
155
+ console.error("[json-to-spec/v17] replace error:", err);
156
+ throw err;
157
+ }
158
+ };
159
+
160
+ export default replace;
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Resolves a dot-delimited path or array of keys from a data object.
3
+ *
4
+ * @param {Object} inArgs
5
+ * @param {Object} inArgs.inData - Target object to resolve from
6
+ * @param {string|Array} inArgs.inPath - Key or dot-path (e.g. "meta.formTitle", "columns")
7
+ * @returns {*} Resolved value or undefined
8
+ */
9
+ export const resolvePath = ({ inData, inPath }) => {
10
+ const localData = inData;
11
+ const localPath = inPath;
12
+
13
+ if (localData === null || localData === undefined) return undefined;
14
+ if (localPath === undefined || localPath === null || localPath === "" || localPath === ".") {
15
+ return localData;
16
+ }
17
+
18
+ const segments = Array.isArray(localPath) ? localPath : String(localPath).split(".");
19
+ let current = localData;
20
+
21
+ for (const segment of segments) {
22
+ if (current === null || current === undefined) return undefined;
23
+ current = current[segment];
24
+ }
25
+
26
+ return current;
27
+ };
28
+
29
+ export default resolvePath;
@@ -0,0 +1,66 @@
1
+ import registerGlobal from "./registerGlobal.js";
2
+ /**
3
+ * json-to-spec v11
4
+ *
5
+ * Minimalist 2-Layer Specification Compiler:
6
+ * 1. replace: Pure ${...} token replacement across JSON structures.
7
+ * 2. iterate: Evaluates jsonToSpec operations, expanding collections into clean children.
8
+ */
9
+
10
+ import { replace } from "./replace.js";
11
+
12
+ export const meta = {
13
+ version: "18.0.0",
14
+ name: "json-to-spec/v18",
15
+ description: "Minimalist 2-layer compiler: pure value replace + jsonToSpec iterate"
16
+ };
17
+
18
+ /**
19
+ * Main compiler entry point:
20
+ * 1. Replace values: replace(structure, data)
21
+ * 2. Iterate/Operate: iterate(replacedStructure, data)
22
+ */
23
+ export const compile = (inStructureOrOptions, inData = {}, inShowLog = false) => {
24
+ let localStructure = inStructureOrOptions;
25
+ let localData = inData;
26
+
27
+ if (inShowLog) console.log(meta.name, localStructure, localData);
28
+
29
+ try {
30
+ const iteratedData = replace({
31
+ inStructureAsJson: localStructure,
32
+ inDataAsJson: localData,
33
+ inOperation: "iterateDo"
34
+ });
35
+
36
+ const replacedData = replace({
37
+ inStructureAsJson: iteratedData,
38
+ inDataAsJson: localData,
39
+ inOperation: "replace"
40
+ });
41
+
42
+ console.log("iteratedData : ", iteratedData, replacedData);
43
+
44
+ // const spec = iterate({
45
+ // inStructure: replaced,
46
+ // inData: localData
47
+ // });
48
+
49
+ return replacedData;
50
+ } catch (err) {
51
+ console.error("[json-to-spec/v17] compile error:", err);
52
+ throw err;
53
+ }
54
+ };
55
+
56
+ // if (typeof globalThis !== "undefined") {
57
+ // globalThis.ks ??= {};
58
+ // globalThis.ks["json-to-spec"] = {
59
+ // meta,
60
+ // compile
61
+ // };
62
+ // };
63
+
64
+ registerGlobal(compile);
65
+
66
+ export default compile;
@@ -0,0 +1,7 @@
1
+ export const meta = {
2
+ version: "18.0.0",
3
+ name: "json-to-spec/v18",
4
+ description: "Minimalist 2-layer compiler: pure value replace + jsonToSpec iterate"
5
+ };
6
+
7
+ export default meta;
@@ -0,0 +1,17 @@
1
+ import meta from "./meta.js";
2
+
3
+ /**
4
+ * 3. registerGlobal - Orchestration Step 3
5
+ * Safely registers the json-to-dom public API onto globalThis.ks in browser / SSR environments.
6
+ */
7
+ export const registerGlobal = (inFuncDefinition) => {
8
+ if (typeof globalThis === "undefined" || !inFuncDefinition) return;
9
+
10
+ globalThis.ks ??= {};
11
+ globalThis.ks["json-to-spec"] = {
12
+ meta,
13
+ compile: inFuncDefinition
14
+ };
15
+ };
16
+
17
+ export default registerGlobal;
@@ -0,0 +1,18 @@
1
+ import walk from "./walk/walk.js";
2
+
3
+ /**
4
+ * Main replace function: (structure, data) -> replaced JSON structure
5
+ */
6
+ export const replace = ({ inStructureAsJson, inDataAsJson, inOperation }) => {
7
+ try {
8
+ return walk({
9
+ inNode: inStructureAsJson,
10
+ inData: inDataAsJson, inOperation
11
+ });
12
+ } catch (err) {
13
+ console.error("[json-to-spec/v17] replace error:", err);
14
+ throw err;
15
+ };
16
+ };
17
+
18
+ export default replace;
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Resolves a dot-delimited path or array of keys from a data object.
3
+ *
4
+ * @param {Object} inArgs
5
+ * @param {Object} inArgs.inData - Target object to resolve from
6
+ * @param {string|Array} inArgs.inPath - Key or dot-path (e.g. "meta.formTitle", "columns")
7
+ * @returns {*} Resolved value or undefined
8
+ */
9
+ export const resolvePath = ({ inData, inPath }) => {
10
+ const localData = inData;
11
+ const localPath = inPath;
12
+
13
+ if (localData === null || localData === undefined) return undefined;
14
+ if (localPath === undefined || localPath === null || localPath === "" || localPath === ".") {
15
+ return localData;
16
+ }
17
+
18
+ const segments = Array.isArray(localPath) ? localPath : String(localPath).split(".");
19
+ let current = localData;
20
+
21
+ for (const segment of segments) {
22
+ if (current === null || current === undefined) return undefined;
23
+ current = current[segment];
24
+ }
25
+
26
+ return current;
27
+ };
28
+
29
+ export default resolvePath;
@@ -0,0 +1,42 @@
1
+ import walk from "../../walk.js";
2
+
3
+ const startFunc = ({
4
+ inNode,
5
+ inData,
6
+ } = {}) => {
7
+ const localNode = inNode;
8
+ const localData = inData;
9
+
10
+ if ("jsonToSpec" in localNode) {
11
+
12
+ if ("operation" in localNode?.jsonToSpec) {
13
+ if (localNode?.jsonToSpec?.operation === "iterate") {
14
+
15
+ if ("source" in localNode?.jsonToSpec) {
16
+ const sourceValues = inData[localNode?.jsonToSpec?.source];
17
+
18
+ const newChildren = sourceValues.map(loopColumn => {
19
+ const clone = structuredClone(localNode?.jsonToSpec?.template);
20
+
21
+ const k1 = walk({
22
+ inNode: clone,
23
+ inData: loopColumn,
24
+ inOperation: "replace"
25
+ });
26
+
27
+ return k1
28
+ });
29
+
30
+ localNode.children = newChildren;
31
+
32
+ };
33
+
34
+ };
35
+ };
36
+ };
37
+
38
+ // console.log("localNode : ", localNode);
39
+
40
+ };
41
+
42
+ export default startFunc;
@@ -0,0 +1,32 @@
1
+ import walk from "../../walk.js";
2
+
3
+ const startFunc = ({
4
+ inNode,
5
+ inData,
6
+ } = {}) => {
7
+ const localNode = inNode;
8
+ const localData = inData;
9
+
10
+ if (!("jsonToSpec" in localNode)) return;
11
+ if (!("operation" in localNode.jsonToSpec)) return;
12
+ if (localNode.jsonToSpec.operation !== "iterate") return;
13
+ if (!("source" in localNode.jsonToSpec)) return;
14
+
15
+ const sourceValues = localData[localNode.jsonToSpec.source];
16
+
17
+ const newChildren = sourceValues.map(loopColumn => {
18
+ const clone = structuredClone(localNode.jsonToSpec.template);
19
+
20
+ const k1 = walk({
21
+ inNode: clone,
22
+ inData: loopColumn,
23
+ inOperation: "replace"
24
+ });
25
+
26
+ return k1;
27
+ });
28
+
29
+ localNode.children = newChildren;
30
+ };
31
+
32
+ export default startFunc;
@@ -0,0 +1,46 @@
1
+ import walk from "../../walk.js";
2
+
3
+ const createChildren = ({
4
+ inTemplate,
5
+ inSourceValues,
6
+ } = {}) => {
7
+ const sourceValues = inSourceValues;
8
+
9
+ const newChildren = sourceValues.map(loopColumn => {
10
+ const clone = structuredClone(inTemplate);
11
+
12
+ const walkResult = walk({
13
+ inNode: clone,
14
+ inData: loopColumn,
15
+ inOperation: "replace"
16
+ });
17
+
18
+ return walkResult;
19
+ });
20
+
21
+ return newChildren;
22
+ };
23
+
24
+ const startFunc = ({
25
+ inNode,
26
+ inData,
27
+ } = {}) => {
28
+ const localNode = inNode;
29
+ const localData = inData;
30
+
31
+ if (!("jsonToSpec" in localNode)) return;
32
+ if (!("operation" in localNode.jsonToSpec)) return;
33
+ if (localNode.jsonToSpec.operation !== "iterate") return;
34
+ if (!("source" in localNode.jsonToSpec)) return;
35
+
36
+ const sourceValues = localData[localNode.jsonToSpec.source];
37
+
38
+ const newChildren = createChildren({
39
+ inTemplate: localNode.jsonToSpec.template,
40
+ inSourceValues: sourceValues,
41
+ });
42
+
43
+ localNode.children = newChildren;
44
+ };
45
+
46
+ export default startFunc;
@@ -0,0 +1,24 @@
1
+ import walk from "../../walk.js";
2
+
3
+ const startFunc = ({
4
+ inTemplate,
5
+ inSourceValues,
6
+ } = {}) => {
7
+ const sourceValues = inSourceValues;
8
+
9
+ const newChildren = sourceValues.map(loopColumn => {
10
+ const clone = structuredClone(inTemplate);
11
+
12
+ const walkResult = walk({
13
+ inNode: clone,
14
+ inData: loopColumn,
15
+ inOperation: "replace"
16
+ });
17
+
18
+ return walkResult;
19
+ });
20
+
21
+ return newChildren;
22
+ };
23
+
24
+ export default startFunc;
@@ -0,0 +1,25 @@
1
+ import createChildren from "./createChildren.js";
2
+
3
+ const startFunc = ({
4
+ inNode,
5
+ inData,
6
+ } = {}) => {
7
+ const localNode = inNode;
8
+ const localData = inData;
9
+
10
+ if (!("jsonToSpec" in localNode)) return;
11
+ if (!("operation" in localNode.jsonToSpec)) return;
12
+ if (localNode.jsonToSpec.operation !== "iterate") return;
13
+ if (!("source" in localNode.jsonToSpec)) return;
14
+
15
+ const sourceValues = localData[localNode.jsonToSpec.source];
16
+
17
+ const newChildren = createChildren({
18
+ inTemplate: localNode.jsonToSpec.template,
19
+ inSourceValues: sourceValues,
20
+ });
21
+
22
+ localNode.children = newChildren;
23
+ };
24
+
25
+ export default startFunc;
@@ -0,0 +1,42 @@
1
+ import replaceCommonFunc from "./replaceCommon.js";
2
+
3
+ const startFunc = ({
4
+ inNode,
5
+ inData,
6
+ } = {}) => {
7
+ const localNode = inNode;
8
+ const localData = inData;
9
+
10
+ if ("textContent" in inNode) {
11
+ if (inNode.textContent.includes("${")) {
12
+ const dataKey = inNode.textContent
13
+ .replace(/^\$\{/, "")
14
+ .replace(/\}$/, "");
15
+
16
+ inNode.textContent = replaceCommonFunc({ inData, inDataKey: dataKey });
17
+
18
+ };
19
+ };
20
+
21
+ if ("attributes" in inNode) {
22
+ const attributes = Object.fromEntries(
23
+ Object.entries(inNode.attributes || {}).map(([key, value]) => [
24
+ key,
25
+ typeof value === "string" && value.includes("${")
26
+ ? replaceCommonFunc({
27
+ inData,
28
+ inDataKey: value
29
+ .replace(/^\$\{/, "")
30
+ .replace(/\}$/, "")
31
+ })
32
+ : value
33
+ ])
34
+ );
35
+
36
+ // console.log("attributes----- : ", inNode, attributes);
37
+
38
+ inNode.attributes = { ...attributes };
39
+ };
40
+ };
41
+
42
+ export default startFunc;
@@ -0,0 +1,21 @@
1
+ const startFunc = ({ inData, inDataKey }) => {
2
+ const dataKey = inDataKey;
3
+ // console.log("dataKey : ", dataKey, inData);
4
+
5
+ let valueToReturn = inData[dataKey];
6
+
7
+ if (dataKey.includes(".")) {
8
+ const keysOfArray = dataKey.split(".");
9
+
10
+ const value = keysOfArray.reduce(
11
+ (current, key) => current?.[key],
12
+ inData
13
+ );
14
+
15
+ valueToReturn = value;
16
+ };
17
+
18
+ return valueToReturn;
19
+ };
20
+
21
+ export default startFunc;
@@ -0,0 +1,105 @@
1
+ import replaceCommonFunc from "./replaceCommon.js";
2
+
3
+ const replaceNodeValue = ({
4
+ inNode,
5
+ inData,
6
+ } = {}) => {
7
+ const localNode = inNode;
8
+ const localData = inData;
9
+
10
+ if (localNode?.textContent) {
11
+ if (localNode.textContent.includes("${")) {
12
+ const dataKey = localNode.textContent
13
+ .replace(/^\$\{/, "")
14
+ .replace(/\}$/, "");
15
+
16
+ localNode.textContent = replaceCommonFunc({
17
+ inData: localData,
18
+ inDataKey: dataKey
19
+ });
20
+ };
21
+ };
22
+
23
+ };
24
+
25
+ const startFunc1 = ({
26
+ inNode,
27
+ inData,
28
+ } = {}) => {
29
+ const localNode = inNode;
30
+ const localData = inData;
31
+
32
+ replaceNodeValue({ inNode: localNode, inData: localData });
33
+
34
+ // if ("textContent" in localNode) {
35
+ // console.log("localNode : ", localNode);
36
+
37
+ // if (localNode.textContent.includes("${")) {
38
+ // const dataKey = localNode.textContent
39
+ // .replace(/^\$\{/, "")
40
+ // .replace(/\}$/, "");
41
+
42
+ // localNode.textContent = replaceCommonFunc({
43
+ // inData: localData,
44
+ // inDataKey: dataKey
45
+ // });
46
+ // };
47
+ // };
48
+
49
+ if ("attributes" in localNode) {
50
+ const attributes = Object.fromEntries(
51
+ Object.entries(localNode.attributes || {}).map(([key, value]) => [
52
+ key,
53
+ typeof value === "string" && value.includes("${")
54
+ ? replaceCommonFunc({
55
+ inData,
56
+ inDataKey: value
57
+ .replace(/^\$\{/, "")
58
+ .replace(/\}$/, "")
59
+ })
60
+ : value
61
+ ])
62
+ );
63
+
64
+ inNode.attributes = { ...attributes };
65
+ };
66
+ };
67
+
68
+ const replaceAttributes = ({
69
+ inNode,
70
+ inData,
71
+ } = {}) => {
72
+ const localNode = inNode;
73
+ const localData = inData;
74
+
75
+ if ("attributes" in localNode) {
76
+ const attributes = Object.fromEntries(
77
+ Object.entries(localNode.attributes || {}).map(([key, value]) => [
78
+ key,
79
+ typeof value === "string" && value.includes("${")
80
+ ? replaceCommonFunc({
81
+ inData: localData,
82
+ inDataKey: value
83
+ .replace(/^\$\{/, "")
84
+ .replace(/\}$/, "")
85
+ })
86
+ : value
87
+ ])
88
+ );
89
+
90
+ localNode.attributes = { ...attributes };
91
+ };
92
+ };
93
+
94
+ const startFunc = ({
95
+ inNode,
96
+ inData,
97
+ } = {}) => {
98
+ const localNode = inNode;
99
+ const localData = inData;
100
+
101
+ replaceNodeValue({ inNode: localNode, inData: localData });
102
+ replaceAttributes({ inNode: localNode, inData: localData });
103
+ };
104
+
105
+ export default startFunc;