@design-edito/tools 0.1.36 → 0.1.38

Sign up to get free protection for your applications and to get access to all the features.
Files changed (63) hide show
  1. package/agnostic/css/index.js +11 -11
  2. package/agnostic/errors/index.js +2 -2
  3. package/agnostic/html/hyper-json/cast/index.js +2 -2
  4. package/agnostic/html/hyper-json/index.js +3 -3
  5. package/agnostic/html/hyper-json/transformers/append/index.js +2 -2
  6. package/agnostic/html/hyper-json/transformers/classList/index.js +2 -2
  7. package/agnostic/html/hyper-json/transformers/index.js +2 -2
  8. package/agnostic/html/hyper-json/transformers/join/index.js +2 -2
  9. package/agnostic/html/hyper-json/transformers/length/index.js +2 -2
  10. package/agnostic/html/hyper-json/transformers/print/index.js +2 -2
  11. package/agnostic/html/hyper-json/transformers/push/index.js +2 -2
  12. package/agnostic/html/hyper-json/transformers/querySelector/index.js +2 -2
  13. package/agnostic/html/hyper-json/transformers/ref/index.js +2 -2
  14. package/agnostic/html/hyper-json/transformers/replace/index.js +2 -2
  15. package/agnostic/html/hyper-json/transformers/split/index.js +2 -2
  16. package/agnostic/html/hyper-json/transformers/toArray/index.js +2 -2
  17. package/agnostic/html/hyper-json/transformers/toBoolean/index.js +2 -2
  18. package/agnostic/html/hyper-json/transformers/toElement/index.js +2 -2
  19. package/agnostic/html/hyper-json/transformers/toNodeList/index.js +2 -2
  20. package/agnostic/html/hyper-json/transformers/toNull/index.js +2 -2
  21. package/agnostic/html/hyper-json/transformers/toNumber/index.js +2 -2
  22. package/agnostic/html/hyper-json/transformers/toRecord/index.js +2 -2
  23. package/agnostic/html/hyper-json/transformers/toRef/index.js +2 -2
  24. package/agnostic/html/hyper-json/transformers/toString/index.js +2 -2
  25. package/agnostic/html/hyper-json/transformers/toText/index.js +2 -2
  26. package/agnostic/html/hyper-json/transformers/toTransformer/index.js +2 -2
  27. package/agnostic/html/hyper-json/transformers/transformSelected/index.js +2 -2
  28. package/agnostic/html/hyper-json/transformers/trim/index.js +2 -2
  29. package/agnostic/html/hyper-json/tree/index.js +2 -2
  30. package/agnostic/html/hyper-json/utils/index.js +2 -2
  31. package/agnostic/html/index.js +17 -17
  32. package/agnostic/html/replace-in-element/index.d.ts +1 -1
  33. package/agnostic/html/replace-in-element/index.js +1 -1
  34. package/agnostic/html/sanitize/index.js +6 -6
  35. package/agnostic/html/selector-to-element/index.js +6 -6
  36. package/agnostic/html/string-to-nodes/index.js +7 -7
  37. package/agnostic/misc/crossenv/index.js +2 -2
  38. package/agnostic/misc/elo/index.d.ts +31 -0
  39. package/agnostic/misc/elo/index.js +32 -0
  40. package/agnostic/misc/index.js +8 -8
  41. package/agnostic/misc/logs/index.js +2 -2
  42. package/agnostic/misc/logs/logger/index.d.ts +3 -0
  43. package/agnostic/misc/logs/logger/index.js +1 -1
  44. package/agnostic/misc/lorem-ipsum/index.js +4 -4
  45. package/agnostic/numbers/index.js +3 -3
  46. package/agnostic/objects/index.js +7 -7
  47. package/agnostic/optim/index.js +3 -3
  48. package/agnostic/random/index.js +2 -2
  49. package/agnostic/regexps/index.d.ts +1 -0
  50. package/agnostic/regexps/index.js +1 -0
  51. package/agnostic/strings/index.js +6 -6
  52. package/agnostic/time/index.js +3 -3
  53. package/chunks/chunk-6JRUZYTL.js +211 -0
  54. package/chunks/chunk-7YW5HL6N.js +168 -0
  55. package/chunks/chunk-BPOJYE4X.js +1108 -0
  56. package/chunks/chunk-DCKTGQOX.js +29 -0
  57. package/chunks/chunk-MJQF3YZO.js +21 -0
  58. package/chunks/chunk-R57V5HA7.js +211 -0
  59. package/chunks/chunk-RASMASS4.js +111 -0
  60. package/chunks/chunk-TLTLM47Y.js +27 -0
  61. package/chunks/chunk-XWLQR4UY.js +25 -0
  62. package/node/files/index.js +3 -3
  63. package/package.json +1 -1
@@ -0,0 +1,1108 @@
1
+ import {
2
+ Serialize
3
+ } from "./chunk-ZCPGE7H7.js";
4
+ import {
5
+ Types
6
+ } from "./chunk-5GI5G45R.js";
7
+ import {
8
+ replaceInElement
9
+ } from "./chunk-XWLQR4UY.js";
10
+ import {
11
+ isRecord
12
+ } from "./chunk-YDIBNEGA.js";
13
+ import {
14
+ isInEnum
15
+ } from "./chunk-E6MSDKON.js";
16
+ import {
17
+ replaceAll
18
+ } from "./chunk-MF56TTC5.js";
19
+ import {
20
+ Window
21
+ } from "./chunk-RLJOYG64.js";
22
+ import {
23
+ isFalsy
24
+ } from "./chunk-QXAJXTXV.js";
25
+
26
+ // src/agnostic/html/hyper-json/cast/index.ts
27
+ var getWindow = Window.get;
28
+ var Cast;
29
+ ((Cast2) => {
30
+ Cast2.toNull = () => null;
31
+ Cast2.toBoolean = (input) => !isFalsy(input);
32
+ Cast2.toNumber = (input) => {
33
+ const { Text } = getWindow();
34
+ if (typeof input === "number") return input;
35
+ if (typeof input === "string") return parseFloat(`${input}`);
36
+ if (input instanceof Text) return parseFloat(`${input.textContent}`);
37
+ return 0;
38
+ };
39
+ Cast2.toString = (input) => {
40
+ if (typeof input === "string") return input;
41
+ if (typeof input === "number" || typeof input === "boolean" || input === null) return `${input}`;
42
+ const { Element, Text, NodeList } = getWindow();
43
+ if (input instanceof Element) return input.outerHTML;
44
+ if (input instanceof Text) return input.textContent ?? "";
45
+ if (input instanceof NodeList) return Array.from(input).map((e) => {
46
+ if (e instanceof Element) return e.outerHTML;
47
+ return e.textContent;
48
+ }).join("");
49
+ return input.toString();
50
+ };
51
+ Cast2.toText = (input) => {
52
+ const { Text, document } = getWindow();
53
+ if (input instanceof Text) return input.cloneNode(true);
54
+ return document.createTextNode((0, Cast2.toString)(input));
55
+ };
56
+ Cast2.toElement = (input) => {
57
+ const { Element, Text, NodeList, document } = getWindow();
58
+ if (input instanceof Element) return input.cloneNode(true);
59
+ const elt = document.createElement("div");
60
+ if (input instanceof Text) {
61
+ elt.append(input.cloneNode(true));
62
+ return elt;
63
+ }
64
+ if (input instanceof NodeList) {
65
+ elt.append(...Array.from(input).map((e) => e.cloneNode(true)));
66
+ return elt;
67
+ }
68
+ if (Array.isArray(input)) return elt;
69
+ if (isRecord(input)) return elt;
70
+ elt.append(`${input}`);
71
+ return elt;
72
+ };
73
+ Cast2.toNodeList = (input) => {
74
+ const { Element, Text, NodeList, document } = getWindow();
75
+ const elt = document.createElement("div");
76
+ if (input instanceof NodeList) {
77
+ elt.append(...Array.from(input).map((i) => i.cloneNode(true)));
78
+ return elt.childNodes;
79
+ }
80
+ if (input instanceof Element || input instanceof Text) {
81
+ elt.append(input.cloneNode(true));
82
+ return elt.childNodes;
83
+ }
84
+ if (Array.isArray(input)) return elt.childNodes;
85
+ if (isRecord(input)) return elt.childNodes;
86
+ elt.innerHTML = `${input}`;
87
+ return elt.childNodes;
88
+ };
89
+ Cast2.toArray = (input) => {
90
+ const { NodeList } = getWindow();
91
+ if (Array.isArray(input)) return [...input];
92
+ if (input instanceof NodeList) return Array.from(input);
93
+ return [input];
94
+ };
95
+ Cast2.toRecord = (input) => {
96
+ if (isRecord(input)) return { ...input };
97
+ return {};
98
+ };
99
+ Cast2.toTransformer = (input) => {
100
+ return Utils.toNamedTransformer("utils/Cast.toTransformer", [], () => ({
101
+ action: "REPLACE",
102
+ value: input
103
+ }));
104
+ };
105
+ })(Cast || (Cast = {}));
106
+
107
+ // src/agnostic/html/hyper-json/transformers/classList/index.ts
108
+ var classList = (callerTagName, ...args) => {
109
+ return Utils.toNamedTransformer(callerTagName, args, (currentValue) => {
110
+ const { Element } = Window.get();
111
+ if (!(currentValue instanceof Element)) return Utils.makeTransformerError("Current value must be an Element");
112
+ const [actionArg, classNameArg] = args;
113
+ if (actionArg === void 0 || classNameArg === void 0) return Utils.makeTransformerError(`Expecting 2 arguments: (action: 'add' | 'remove' | 'toggle', classList: string)`);
114
+ const action = Cast.toString(actionArg);
115
+ const className = Cast.toString(actionArg).trim();
116
+ if (action === "add" /* ADD */) {
117
+ const outputValue = currentValue.cloneNode(true);
118
+ outputValue.classList.add(className);
119
+ return { action: "REPLACE", value: outputValue };
120
+ } else if (action === "remove" /* REMOVE */) {
121
+ const outputValue = currentValue.cloneNode(true);
122
+ outputValue.classList.remove(className);
123
+ return { action: "REPLACE", value: outputValue };
124
+ } else if (action === "toggle" /* TOGGLE */) {
125
+ const outputValue = currentValue.cloneNode(true);
126
+ outputValue.classList.toggle(className);
127
+ return { action: "REPLACE", value: outputValue };
128
+ }
129
+ return Utils.makeTransformerError(`Unknown action: ${action}`);
130
+ });
131
+ };
132
+
133
+ // src/agnostic/html/hyper-json/transformers/join/index.ts
134
+ var join = (callerTagName, ...args) => {
135
+ return Utils.toNamedTransformer(callerTagName, args, (currentValue) => {
136
+ const joiner = Cast.toString(args.at(0) ?? ",");
137
+ if (!Array.isArray(currentValue)) return Utils.makeTransformerError({
138
+ message: `Current value must be an array`,
139
+ input: currentValue
140
+ });
141
+ return {
142
+ action: "REPLACE",
143
+ value: currentValue.join(joiner)
144
+ };
145
+ });
146
+ };
147
+
148
+ // src/agnostic/html/hyper-json/transformers/length/index.ts
149
+ var length = (callerTagName, ...args) => {
150
+ return Utils.toNamedTransformer(callerTagName, args, (currentValue) => {
151
+ const { Element, NodeList, Text } = Window.get();
152
+ if (typeof currentValue === "string" || Array.isArray(currentValue) || currentValue instanceof NodeList) return {
153
+ action: "REPLACE",
154
+ value: currentValue.length
155
+ };
156
+ if (currentValue instanceof Element) return {
157
+ action: "REPLACE",
158
+ value: Array.from(currentValue.childNodes).length
159
+ };
160
+ if (currentValue instanceof Text) return {
161
+ action: "REPLACE",
162
+ value: currentValue.data.length
163
+ };
164
+ return Utils.makeTransformerError(`Current value must be of type string, Array, NodeList, Element or Text`);
165
+ });
166
+ };
167
+
168
+ // src/agnostic/html/hyper-json/transformers/print/index.ts
169
+ var print = (callerTagName, ...args) => {
170
+ return Utils.toNamedTransformer(callerTagName, args, (currentValue) => {
171
+ if (args.length === 0) console.log(currentValue);
172
+ else console.log(...args);
173
+ return { action: null };
174
+ });
175
+ };
176
+
177
+ // src/agnostic/html/hyper-json/transformers/push/index.ts
178
+ var push = (callerTagName, ...args) => {
179
+ return Utils.toNamedTransformer(callerTagName, args, (currentValue) => {
180
+ if (!Array.isArray(currentValue)) return Utils.makeTransformerError({
181
+ message: "Current value must be an array",
182
+ input: currentValue
183
+ });
184
+ const outputValue = [...currentValue, ...args];
185
+ return {
186
+ action: "REPLACE",
187
+ value: outputValue
188
+ };
189
+ });
190
+ };
191
+
192
+ // src/agnostic/html/hyper-json/transformers/querySelector/index.ts
193
+ var querySelector = (callerTagName, ...args) => {
194
+ return Utils.toNamedTransformer(callerTagName, args, (currentValue) => {
195
+ const { document, Element, NodeList } = Window.get();
196
+ const [selectorRaw] = args;
197
+ if (selectorRaw === void 0) return Utils.makeTransformerError("Selector argument expected.");
198
+ const selector = Cast.toString(selectorRaw);
199
+ let toQuery;
200
+ if (currentValue instanceof Element) {
201
+ toQuery = currentValue.cloneNode(true);
202
+ } else if (currentValue instanceof NodeList) {
203
+ toQuery = document.createElement("div");
204
+ toQuery.append(...Array.from(currentValue).map((e) => e.cloneNode(true)));
205
+ } else return Utils.makeTransformerError("Current value must be an Element or a NodeList");
206
+ const found = toQuery.querySelectorAll(selector);
207
+ return {
208
+ action: "REPLACE",
209
+ value: found
210
+ };
211
+ });
212
+ };
213
+
214
+ // src/agnostic/html/hyper-json/transformers/ref/index.ts
215
+ var ref = (callerTagName, ...args) => {
216
+ return Utils.toNamedTransformer(callerTagName, args, (_, callerTree) => {
217
+ const [refPathStrRaw] = args;
218
+ const { Text } = Window.get();
219
+ if (typeof refPathStrRaw !== "string" && !(refPathStrRaw instanceof Text)) return Utils.makeTransformerError({
220
+ message: "PathString must be of type string or Text",
221
+ input: refPathStrRaw !== void 0 ? refPathStrRaw : "<undefined>"
222
+ });
223
+ const refPathStr = Cast.toString(refPathStrRaw);
224
+ const refPath = Utils.pathStringToPath(Cast.toString(refPathStrRaw));
225
+ const foundTree = callerTree.resolve(refPath);
226
+ if (foundTree === void 0) return Utils.makeTransformerError({
227
+ message: "Referenced value has not been found",
228
+ input: refPathStr
229
+ });
230
+ const evaluated = foundTree.evaluate();
231
+ return {
232
+ action: "MERGE",
233
+ value: evaluated
234
+ };
235
+ });
236
+ };
237
+
238
+ // src/agnostic/html/hyper-json/transformers/replace/index.ts
239
+ var replace = (callerTagName, ...args) => {
240
+ return Utils.toNamedTransformer(callerTagName, args, (currentValue) => {
241
+ const { Text, NodeList, Element } = Window.get();
242
+ if (typeof currentValue !== "string" && !(currentValue instanceof Text) && !(currentValue instanceof Element) && !(currentValue instanceof NodeList)) return Utils.makeTransformerError("Current value must be string, Text, Element or NodeList");
243
+ if (args.some((arg) => typeof arg !== "string" && !(arg instanceof Text) && !(arg instanceof Element) && !(arg instanceof NodeList))) return Utils.makeTransformerError("Arguments must be of type string, Text, Element or NodeList");
244
+ const [first, second] = args;
245
+ if (first === void 0 || second === void 0) return Utils.makeTransformerError(`Expecting at least 2 arguments. Found only ${args.length}`);
246
+ const replacer = args.at(-1);
247
+ const strReplacer = Cast.toString(replacer);
248
+ const toReplace = args.slice(0, -1);
249
+ const strToReplace = toReplace.map(Cast.toString);
250
+ const strInput = Cast.toString(currentValue);
251
+ const strOutput = strToReplace.reduce((str, torpl) => replaceAll(str, torpl, strReplacer), strInput);
252
+ if (typeof currentValue === "string") return { action: "REPLACE", value: strOutput };
253
+ if (currentValue instanceof Text) return { action: "REPLACE", value: Cast.toText(strOutput) };
254
+ if (currentValue instanceof Element) return { action: "REPLACE", value: Cast.toElement(strOutput) };
255
+ if (currentValue instanceof NodeList) return { action: "REPLACE", value: Cast.toNodeList(strOutput) };
256
+ return { action: null };
257
+ });
258
+ };
259
+
260
+ // src/agnostic/html/hyper-json/transformers/split/index.ts
261
+ var split = (callerTagName, ...args) => {
262
+ return Utils.toNamedTransformer(callerTagName, args, (currentValue) => {
263
+ const { Text } = Window.get();
264
+ const [splitter] = args;
265
+ if (typeof currentValue !== "string" && !(currentValue instanceof Text)) return Utils.makeTransformerError({
266
+ message: "Current value must be string or Text",
267
+ input: currentValue
268
+ });
269
+ if (typeof splitter !== "string") return Utils.makeTransformerError({
270
+ message: "Splitter argument must be string",
271
+ input: splitter !== void 0 ? splitter : "<undefined>"
272
+ });
273
+ const strCurrentValue = Cast.toString(currentValue);
274
+ const splitted = strCurrentValue.split(splitter).map((e) => typeof currentValue === "string" ? Cast.toString(e) : Cast.toText(e));
275
+ return {
276
+ action: "REPLACE",
277
+ value: splitted
278
+ };
279
+ });
280
+ };
281
+
282
+ // src/agnostic/html/hyper-json/transformers/toArray/index.ts
283
+ var toArray = (callerTagName, ...args) => {
284
+ return Utils.toNamedTransformer(callerTagName, args, (currentValue) => ({
285
+ action: "REPLACE",
286
+ value: Cast.toArray(currentValue)
287
+ }));
288
+ };
289
+
290
+ // src/agnostic/html/hyper-json/transformers/toBoolean/index.ts
291
+ var toBoolean = (callerTagName, ...args) => {
292
+ return Utils.toNamedTransformer(callerTagName, args, (currentValue) => ({
293
+ action: "REPLACE",
294
+ value: Cast.toBoolean(currentValue)
295
+ }));
296
+ };
297
+
298
+ // src/agnostic/html/hyper-json/transformers/toElement/index.ts
299
+ var toElement = (callerTagName, ...args) => {
300
+ return Utils.toNamedTransformer(callerTagName, args, (currentValue) => ({
301
+ action: "REPLACE",
302
+ value: Cast.toElement(currentValue)
303
+ }));
304
+ };
305
+
306
+ // src/agnostic/html/hyper-json/transformers/toNodeList/index.ts
307
+ var toNodeList = (callerTagName, ...args) => {
308
+ return Utils.toNamedTransformer(callerTagName, args, (currentValue) => ({
309
+ action: "REPLACE",
310
+ value: Cast.toNodeList(currentValue)
311
+ }));
312
+ };
313
+
314
+ // src/agnostic/html/hyper-json/transformers/toNull/index.ts
315
+ var toNull = (callerTagName, ...args) => {
316
+ return Utils.toNamedTransformer(callerTagName, args, (currentValue) => ({
317
+ action: "REPLACE",
318
+ value: null
319
+ }));
320
+ };
321
+
322
+ // src/agnostic/html/hyper-json/transformers/toNumber/index.ts
323
+ var toNumber = (callerTagName, ...args) => {
324
+ return Utils.toNamedTransformer(callerTagName, args, (currentValue) => ({
325
+ action: "REPLACE",
326
+ value: Cast.toNumber(currentValue)
327
+ }));
328
+ };
329
+
330
+ // src/agnostic/html/hyper-json/transformers/toRecord/index.ts
331
+ var toRecord = (callerTagName, ...args) => {
332
+ return Utils.toNamedTransformer(callerTagName, args, (currentValue) => ({
333
+ action: "REPLACE",
334
+ value: Cast.toRecord(currentValue)
335
+ }));
336
+ };
337
+
338
+ // src/agnostic/html/hyper-json/transformers/toRef/index.ts
339
+ var toRef = (callerTagName, ...args) => {
340
+ return Utils.toNamedTransformer(callerTagName, args, (currentValue, callerTree) => {
341
+ const { Text } = Window.get();
342
+ if (typeof currentValue !== "string" && !(currentValue instanceof Text)) return Utils.makeTransformerError({
343
+ message: "Current value must be string or Text",
344
+ input: currentValue
345
+ });
346
+ const refPathStr = Cast.toString(currentValue);
347
+ const refPath = Utils.pathStringToPath(refPathStr);
348
+ const foundTree = callerTree.resolve(refPath);
349
+ if (foundTree === void 0) return Utils.makeTransformerError({
350
+ message: "Referenced value has not been found",
351
+ input: refPathStr
352
+ });
353
+ const evaluated = foundTree.evaluate();
354
+ return {
355
+ action: "REPLACE",
356
+ value: evaluated
357
+ };
358
+ });
359
+ };
360
+
361
+ // src/agnostic/html/hyper-json/transformers/toString/index.ts
362
+ var toString = (callerTagName, ...args) => {
363
+ return Utils.toNamedTransformer(callerTagName, args, (currentValue) => ({
364
+ action: "REPLACE",
365
+ value: Cast.toString(currentValue)
366
+ }));
367
+ };
368
+
369
+ // src/agnostic/html/hyper-json/transformers/toText/index.ts
370
+ var toText = (callerTagName, ...args) => {
371
+ return Utils.toNamedTransformer(callerTagName, args, (currentValue) => ({
372
+ action: "REPLACE",
373
+ value: Cast.toText(currentValue)
374
+ }));
375
+ };
376
+
377
+ // src/agnostic/html/hyper-json/transformers/toTransformer/index.ts
378
+ var toTransformer = (callerTagName, ...args) => {
379
+ return Utils.toNamedTransformer(callerTagName, args, (currentValue) => ({
380
+ action: "REPLACE",
381
+ value: Cast.toTransformer(currentValue)
382
+ }));
383
+ };
384
+
385
+ // src/agnostic/html/hyper-json/transformers/transformSelected/index.ts
386
+ var transformSelected = (callerTagName, ...args) => {
387
+ return Utils.toNamedTransformer(callerTagName, args, (currentValue, callerTree) => {
388
+ const { NodeList, Element, Text } = Window.get();
389
+ if (!(currentValue instanceof Element) && !(currentValue instanceof NodeList)) return Utils.makeTransformerError({
390
+ message: "Current value must be Element or NodeList",
391
+ input: currentValue
392
+ });
393
+ const [selector, ...transformerDescriptors] = args;
394
+ if (typeof selector !== "string" && !(selector instanceof Text)) return Utils.makeTransformerError({
395
+ message: "Selector argument must be string or text",
396
+ input: selector !== void 0 ? selector : "<undefined>"
397
+ });
398
+ if (transformerDescriptors.length === 0) return Utils.makeTransformerError("No transformer descriptor provided");
399
+ let transformers = [];
400
+ for (const descriptor of transformerDescriptors) {
401
+ const errorResponse = Utils.makeTransformerError({
402
+ message: "Transformer descriptors must be of shape { name: string, arguments: Value[] }",
403
+ input: descriptor
404
+ });
405
+ if (!isRecord(descriptor)) return errorResponse;
406
+ if (!("name" in descriptor) || typeof descriptor.name !== "string") return errorResponse;
407
+ if (!("arguments" in descriptor) || !Array.isArray(descriptor.arguments)) return errorResponse;
408
+ const { name, arguments: args2 } = descriptor;
409
+ const generator = callerTree.getGenerator(name);
410
+ if (generator === void 0) return Utils.makeTransformerError(`No transformer found under the name ${name}`);
411
+ transformers.push(generator(name, ...args2));
412
+ }
413
+ const elementInput = Cast.toElement(currentValue);
414
+ const strSelector = Cast.toString(selector);
415
+ const selected = Array.from(elementInput.querySelectorAll(strSelector));
416
+ const transformationErrors = [];
417
+ const transformed = selected.map((input) => {
418
+ const output = transformers.reduce((reduced, transformer, transformerPos) => {
419
+ const result = transformer(reduced, callerTree);
420
+ if (result.action === "REPLACE") return result.value;
421
+ else if (result.action === "MERGE") {
422
+ const merged = Tree.mergeValues(
423
+ reduced,
424
+ result.value,
425
+ transformerPos,
426
+ callerTree
427
+ );
428
+ return merged;
429
+ }
430
+ if (result.action === "ERROR") transformationErrors.push({
431
+ message: result.value,
432
+ transformerName: transformer.transformerName,
433
+ transformerPos,
434
+ transforming: reduced
435
+ });
436
+ return reduced;
437
+ }, input);
438
+ return { input, output };
439
+ });
440
+ if (transformationErrors.length !== 0) return Utils.makeTransformerError({
441
+ message: "Some nested transformers returned an error",
442
+ errors: transformationErrors
443
+ });
444
+ const nonElementTransformResult = transformed.find((item) => !(item.output instanceof Element));
445
+ if (nonElementTransformResult !== void 0) return Utils.makeTransformerError({
446
+ message: "Some transformations resulted in a non Element output",
447
+ inputElement: nonElementTransformResult.input,
448
+ outputValue: nonElementTransformResult.output
449
+ });
450
+ const transformMap = new Map(transformed.map((e) => [e.input, e.output]));
451
+ const elementOutput = replaceInElement(elementInput, transformMap);
452
+ return {
453
+ action: "REPLACE",
454
+ value: elementOutput
455
+ };
456
+ });
457
+ };
458
+
459
+ // src/agnostic/html/hyper-json/transformers/trim/index.ts
460
+ var trim = (callerTagName, ...args) => {
461
+ return Utils.toNamedTransformer(callerTagName, args, (currentValue) => {
462
+ const { Text } = Window.get();
463
+ if (typeof currentValue !== "string" && !(currentValue instanceof Text)) return Utils.makeTransformerError({
464
+ message: "Current value must be of type string or Text",
465
+ input: currentValue
466
+ });
467
+ const inputStr = Cast.toString(currentValue);
468
+ const trimmed = inputStr.trim();
469
+ return {
470
+ action: "REPLACE",
471
+ value: currentValue instanceof Text ? Cast.toText(trimmed) : trimmed
472
+ };
473
+ });
474
+ };
475
+
476
+ // src/agnostic/html/hyper-json/transformers/index.ts
477
+ var Transformers;
478
+ ((Transformers2) => {
479
+ Transformers2.defaultGeneratorsMap = /* @__PURE__ */ new Map([
480
+ ["append".toLowerCase(), append],
481
+ ["classList".toLowerCase(), classList],
482
+ ["join".toLowerCase(), join],
483
+ ["length".toLowerCase(), length],
484
+ ["print".toLowerCase(), print],
485
+ ["push".toLowerCase(), push],
486
+ ["querySelector".toLowerCase(), querySelector],
487
+ ["ref".toLowerCase(), ref],
488
+ ["replace".toLowerCase(), replace],
489
+ ["split".toLowerCase(), split],
490
+ ["toArray".toLowerCase(), toArray],
491
+ ["toBoolean".toLowerCase(), toBoolean],
492
+ ["toElement".toLowerCase(), toElement],
493
+ ["toNodeList".toLowerCase(), toNodeList],
494
+ ["toNull".toLowerCase(), toNull],
495
+ ["toNumber".toLowerCase(), toNumber],
496
+ ["toRecord".toLowerCase(), toRecord],
497
+ ["toRef".toLowerCase(), toRef],
498
+ ["toString".toLowerCase(), toString],
499
+ ["toText".toLowerCase(), toText],
500
+ ["toTransformer".toLowerCase(), toTransformer],
501
+ ["transformSelected".toLowerCase(), transformSelected],
502
+ ["trim".toLowerCase(), trim]
503
+ ]);
504
+ })(Transformers || (Transformers = {}));
505
+
506
+ // src/agnostic/html/hyper-json/tree/index.ts
507
+ var getWindow2 = Window.get;
508
+ var isElement = (node) => node.nodeType === getWindow2().Node.ELEMENT_NODE;
509
+ var isText = (node) => node.nodeType === getWindow2().Node.TEXT_NODE;
510
+ var Tree;
511
+ ((_Tree) => {
512
+ _Tree.defaultKeyAttribute = "_key";
513
+ _Tree.defaultActionAttribute = "_action";
514
+ _Tree.defaultRootKey = "_ROOT_";
515
+ function mergeValues(currentValue, incomingValue, mergeKey, initiatorTree) {
516
+ const { Element, Text, NodeList, document } = getWindow2();
517
+ if (typeof incomingValue === "function") {
518
+ const evaluated = incomingValue(currentValue, initiatorTree);
519
+ if (evaluated.action === null) return currentValue;
520
+ if (evaluated.action === "REPLACE") return evaluated.value;
521
+ if (evaluated.action === "ERROR") {
522
+ const errorMessage = `Tranformer error:
523
+ from: ${incomingValue.transformerName}
524
+ at: ${initiatorTree.pathString.slice(1)}/${mergeKey}
525
+ message:`;
526
+ console.warn(errorMessage, evaluated.value);
527
+ return currentValue;
528
+ }
529
+ return mergeValues(
530
+ currentValue,
531
+ evaluated.value,
532
+ mergeKey,
533
+ initiatorTree
534
+ );
535
+ }
536
+ if (Array.isArray(currentValue)) {
537
+ if (typeof mergeKey === "string") return currentValue;
538
+ return [...currentValue, incomingValue];
539
+ }
540
+ if (currentValue === null || typeof currentValue === "boolean" || typeof currentValue === "number" || typeof currentValue === "string" || typeof currentValue === "function" || currentValue instanceof Text || currentValue instanceof Element) {
541
+ if (incomingValue === null || typeof incomingValue === "boolean" || typeof incomingValue === "number" || typeof incomingValue === "string" || Array.isArray(incomingValue) || isRecord(incomingValue)) {
542
+ return incomingValue;
543
+ }
544
+ const frag = document.createDocumentFragment();
545
+ if (currentValue instanceof Element || currentValue instanceof Text) frag.append(currentValue.cloneNode(true));
546
+ else frag.append(`${currentValue}`);
547
+ if (incomingValue instanceof Element || incomingValue instanceof Text) {
548
+ frag.append(incomingValue.cloneNode(true));
549
+ return frag.childNodes;
550
+ }
551
+ frag.append(...Array.from(incomingValue).map((e) => e.cloneNode(true)));
552
+ return frag.childNodes;
553
+ }
554
+ if (currentValue instanceof NodeList) {
555
+ if (incomingValue instanceof Element || incomingValue instanceof Text) {
556
+ const frag = document.createDocumentFragment();
557
+ frag.append(...Array.from(currentValue).map((e) => e.cloneNode(true)), incomingValue);
558
+ return frag.childNodes;
559
+ }
560
+ if (incomingValue instanceof NodeList) {
561
+ const frag = document.createDocumentFragment();
562
+ frag.append(
563
+ ...Array.from(currentValue).map((e) => e.cloneNode(true)),
564
+ ...Array.from(incomingValue).map((e) => e.cloneNode(true))
565
+ );
566
+ return frag.childNodes;
567
+ }
568
+ if (incomingValue === null || typeof incomingValue === "string" || typeof incomingValue === "number" || typeof incomingValue === "boolean") {
569
+ const frag = document.createDocumentFragment();
570
+ frag.append(...Array.from(currentValue).map((e) => e.cloneNode(true)), `${incomingValue}`);
571
+ return frag.childNodes;
572
+ }
573
+ if (Array.isArray(incomingValue)) return [
574
+ ...Array.from(currentValue),
575
+ ...incomingValue
576
+ ];
577
+ return { ...incomingValue };
578
+ }
579
+ if (typeof mergeKey === "number") return currentValue;
580
+ return {
581
+ ...currentValue,
582
+ [mergeKey]: incomingValue
583
+ };
584
+ }
585
+ _Tree.mergeValues = mergeValues;
586
+ function mergeNodes(nodes, options = {}) {
587
+ const [first, ...rest] = nodes;
588
+ const actionAttribute = options?.actionAttribute ?? _Tree.defaultActionAttribute;
589
+ const keyAttribute = options?.keyAttribute ?? _Tree.defaultKeyAttribute;
590
+ if (first === void 0) throw new Error("Expecting at least one node");
591
+ const { Text, Element, document } = getWindow2();
592
+ function isTextOrElement(node) {
593
+ return node instanceof Text || node instanceof Element;
594
+ }
595
+ let CURRENT = first;
596
+ rest.forEach((node) => {
597
+ if (node instanceof Text) {
598
+ CURRENT.remove();
599
+ CURRENT = node;
600
+ return;
601
+ }
602
+ const actionRaw = node.getAttribute(actionAttribute);
603
+ const action = isInEnum(Types.ReductionAction, actionRaw) ? actionRaw : Types.ReductionAction.REPLACE;
604
+ if (action === Types.ReductionAction.REPLACE) {
605
+ CURRENT.remove();
606
+ CURRENT = node;
607
+ return;
608
+ }
609
+ if (CURRENT instanceof Text) {
610
+ if (node instanceof Text) {
611
+ const appended = action === Types.ReductionAction.APPEND ? document.createTextNode(`${CURRENT.textContent}${node.textContent}`) : document.createTextNode(`${node.textContent}${CURRENT.textContent}`);
612
+ CURRENT.remove();
613
+ node.remove();
614
+ CURRENT = appended;
615
+ return;
616
+ }
617
+ CURRENT.remove();
618
+ CURRENT = node;
619
+ return;
620
+ }
621
+ if (node instanceof Text) {
622
+ CURRENT.remove();
623
+ CURRENT = node;
624
+ return;
625
+ }
626
+ const currentAttributes = Array.from(CURRENT.attributes);
627
+ const nodeAttributes = Array.from(node.attributes);
628
+ const nodeChildren = Array.from(node.childNodes).filter(isTextOrElement);
629
+ const outputAttributes = action === Types.ReductionAction.APPEND ? [...currentAttributes, ...nodeAttributes] : [...nodeAttributes, ...currentAttributes];
630
+ if (action === Types.ReductionAction.APPEND) CURRENT.append(...nodeChildren);
631
+ else CURRENT.prepend(...nodeChildren);
632
+ outputAttributes.forEach((attr) => CURRENT.setAttribute(attr.name, attr.value));
633
+ node.remove();
634
+ return;
635
+ });
636
+ const wrapperChildren = Array.from(CURRENT.childNodes).filter(isTextOrElement);
637
+ const subpaths = /* @__PURE__ */ new Map();
638
+ let positionnedChildrenCount = 0;
639
+ wrapperChildren.forEach((child) => {
640
+ if (child instanceof Text) {
641
+ const childKey = positionnedChildrenCount;
642
+ const found = subpaths.get(childKey) ?? [];
643
+ found.push(child);
644
+ subpaths.set(childKey, found);
645
+ positionnedChildrenCount += 1;
646
+ } else {
647
+ const rawChildKey = child.getAttribute(keyAttribute);
648
+ const childKey = rawChildKey ?? positionnedChildrenCount;
649
+ const found = subpaths.get(childKey) ?? [];
650
+ found.push(child);
651
+ subpaths.set(childKey, found);
652
+ if (rawChildKey === null) {
653
+ positionnedChildrenCount += 1;
654
+ }
655
+ }
656
+ });
657
+ subpaths.forEach((nodes2, subpath) => {
658
+ if (nodes2.length < 2) return;
659
+ return mergeNodes(nodes2, {
660
+ actionAttribute,
661
+ keyAttribute
662
+ });
663
+ });
664
+ return CURRENT;
665
+ }
666
+ _Tree.mergeNodes = mergeNodes;
667
+ function mergeRootNodes(...args) {
668
+ const [nodes, options] = args;
669
+ const actionAttribute = options?.actionAttribute ?? _Tree.defaultActionAttribute;
670
+ const keyAttribute = options?.keyAttribute ?? _Tree.defaultKeyAttribute;
671
+ const rootKey = options?.rootKey ?? _Tree.defaultRootKey;
672
+ const { Element } = getWindow2();
673
+ const elements = nodes.filter((e) => e instanceof Element);
674
+ elements.forEach((element) => {
675
+ element.setAttribute(keyAttribute, rootKey);
676
+ const elementAction = element.getAttribute(actionAttribute) ?? Types.ReductionAction.APPEND;
677
+ element.setAttribute(actionAttribute, elementAction);
678
+ });
679
+ const merged = mergeNodes(elements, options);
680
+ return merged;
681
+ }
682
+ _Tree.mergeRootNodes = mergeRootNodes;
683
+ function from(nodes, options) {
684
+ const merged = mergeRootNodes(nodes, options);
685
+ return new Tree2(merged, options);
686
+ }
687
+ _Tree.from = from;
688
+ class Tree2 {
689
+ node;
690
+ name;
691
+ parent;
692
+ root;
693
+ isRoot;
694
+ path;
695
+ pathString;
696
+ tagName;
697
+ attributes;
698
+ subtrees = /* @__PURE__ */ new Map();
699
+ children;
700
+ type;
701
+ generators;
702
+ keyAttribute;
703
+ actionAttribute;
704
+ static fillOptions(options) {
705
+ const defaultOptions = {
706
+ generatorsMap: Transformers.defaultGeneratorsMap,
707
+ keyAttribute: _Tree.defaultKeyAttribute,
708
+ actionAttribute: _Tree.defaultActionAttribute
709
+ };
710
+ return {
711
+ ...defaultOptions,
712
+ ...options
713
+ };
714
+ }
715
+ constructor(node, parentOrOptions, pathFromParent, options) {
716
+ this.resolve = this.resolve.bind(this);
717
+ this.getGenerator = this.getGenerator.bind(this);
718
+ this.initValue = this.initValue.bind(this);
719
+ this.getInnerValue = this.getInnerValue.bind(this);
720
+ this.wrapInnerValue = this.wrapInnerValue.bind(this);
721
+ this.setCache = this.setCache.bind(this);
722
+ this.getPerfCounters = this.getPerfCounters.bind(this);
723
+ this.printPerfCounters = this.printPerfCounters.bind(this);
724
+ this.pushToEvalCallStack = this.pushToEvalCallStack.bind(this);
725
+ this.flushEvalCallStack = this.flushEvalCallStack.bind(this);
726
+ this.evaluate = this.evaluate.bind(this);
727
+ const { Element, Text, document } = getWindow2();
728
+ const _node = node;
729
+ const _parent = parentOrOptions instanceof Tree2 ? parentOrOptions : void 0;
730
+ this.node = _node;
731
+ this.parent = _parent ?? null;
732
+ this.root = this.parent === null ? this : this.parent.root;
733
+ this.isRoot = this.root === this;
734
+ let _options;
735
+ if (options !== void 0) {
736
+ _options = Tree2.fillOptions(options);
737
+ } else if (parentOrOptions instanceof Tree2 || parentOrOptions === void 0) {
738
+ _options = Tree2.fillOptions({});
739
+ } else {
740
+ _options = Tree2.fillOptions(parentOrOptions);
741
+ }
742
+ this.keyAttribute = _options.keyAttribute;
743
+ this.actionAttribute = _options.actionAttribute;
744
+ this.generators = this.isRoot ? _options.generatorsMap : this.root.generators;
745
+ this.name = this.node instanceof Element ? this.node.getAttribute(this.keyAttribute) : null;
746
+ const _pathFromParent = pathFromParent !== void 0 ? pathFromParent : void 0;
747
+ if (this.parent === null) this.path = [];
748
+ else if (_pathFromParent === void 0) {
749
+ this.path = [...this.parent.path, 0];
750
+ } else {
751
+ this.path = [...this.parent.path, _pathFromParent];
752
+ }
753
+ this.pathString = `/${this.path.join("/")}`;
754
+ this.tagName = node instanceof Element ? node.tagName.toLowerCase() : null;
755
+ this.attributes = isElement(node) ? Array.from(node.attributes) : null;
756
+ if (this.tagName === null) {
757
+ this.type = "text";
758
+ } else if (this.tagName === Types.TyperTagName.ANY) {
759
+ this.type = "any";
760
+ } else if (this.tagName === Types.TyperTagName.NULL) {
761
+ this.type = "null";
762
+ } else if (this.tagName === Types.TyperTagName.BOOLEAN) {
763
+ this.type = "boolean";
764
+ } else if (this.tagName === Types.TyperTagName.NUMBER) {
765
+ this.type = "number";
766
+ } else if (this.tagName === Types.TyperTagName.STRING) {
767
+ this.type = "string";
768
+ } else if (this.tagName === Types.TyperTagName.TEXT) {
769
+ this.type = "text";
770
+ } else if (this.tagName === Types.TyperTagName.NODELIST) {
771
+ this.type = "nodelist";
772
+ } else if (this.tagName === Types.TyperTagName.ARRAY) {
773
+ this.type = "array";
774
+ } else if (this.tagName === Types.TyperTagName.RECORD) {
775
+ this.type = "record";
776
+ } else if (this.tagName === Types.TyperTagName.LITERAL) {
777
+ this.type = "literal";
778
+ } else if (this.generators.get(this.tagName) !== void 0) {
779
+ this.type = "transformer";
780
+ } else {
781
+ this.type = "element";
782
+ }
783
+ const { childNodes } = node;
784
+ let positionnedChildrenCount = 0;
785
+ const mutableSubtrees = /* @__PURE__ */ new Map();
786
+ Array.from(childNodes).map((e) => {
787
+ if (!(e instanceof Text)) return e;
788
+ const trimmedTextNode = document.createTextNode(e.textContent?.trim() ?? "");
789
+ return trimmedTextNode;
790
+ }).filter((node2, _, nodes) => {
791
+ if (isElement(node2)) return true;
792
+ if (isText(node2)) {
793
+ const hasContent = (node2.textContent ?? "").trim() !== "";
794
+ if (hasContent) return true;
795
+ if (nodes.some((n) => n instanceof Element)) return false;
796
+ return true;
797
+ }
798
+ return false;
799
+ }).forEach((childNode) => {
800
+ if (childNode instanceof Text) {
801
+ childNode.textContent = childNode.textContent?.trim() ?? "";
802
+ mutableSubtrees.set(
803
+ positionnedChildrenCount,
804
+ new Tree2(childNode, this, positionnedChildrenCount, _options)
805
+ );
806
+ positionnedChildrenCount += 1;
807
+ } else {
808
+ const propertyName = childNode.getAttribute(this.keyAttribute);
809
+ if (propertyName === null) {
810
+ mutableSubtrees.set(
811
+ positionnedChildrenCount,
812
+ new Tree2(childNode, this, positionnedChildrenCount, _options)
813
+ );
814
+ positionnedChildrenCount += 1;
815
+ } else {
816
+ mutableSubtrees.set(
817
+ propertyName,
818
+ new Tree2(childNode, this, propertyName, _options)
819
+ );
820
+ }
821
+ }
822
+ });
823
+ this.subtrees = mutableSubtrees;
824
+ this.children = Array.from(this.subtrees.values());
825
+ }
826
+ resolve = function(path) {
827
+ let currentTree = this.root;
828
+ for (const chunk of path) {
829
+ const { subtrees } = currentTree;
830
+ const foundSubtree = subtrees.get(chunk);
831
+ if (foundSubtree === void 0) return void 0;
832
+ currentTree = foundSubtree;
833
+ }
834
+ return currentTree;
835
+ };
836
+ getGenerator(name) {
837
+ return this.generators.get(name);
838
+ }
839
+ initValue() {
840
+ const { type } = this;
841
+ let initialValue;
842
+ const { document } = getWindow2();
843
+ if (type === "any") {
844
+ initialValue = "";
845
+ } else if (type === "null") {
846
+ initialValue = null;
847
+ } else if (type === "boolean") {
848
+ initialValue = false;
849
+ } else if (type === "number") {
850
+ initialValue = 0;
851
+ } else if (type === "string") {
852
+ initialValue = "";
853
+ } else if (type === "text") {
854
+ initialValue = this.node.textContent;
855
+ } else if (type === "element") {
856
+ initialValue = document.createDocumentFragment().childNodes;
857
+ } else if (type === "nodelist") {
858
+ initialValue = document.createDocumentFragment().childNodes;
859
+ } else if (type === "array") {
860
+ initialValue = [];
861
+ } else if (type === "record") {
862
+ initialValue = {};
863
+ } else if (type === "transformer") {
864
+ initialValue = [];
865
+ } else if (type === "literal") {
866
+ initialValue = {};
867
+ } else {
868
+ initialValue = null;
869
+ }
870
+ return initialValue;
871
+ }
872
+ getInnerValue(initialValue) {
873
+ const { subtrees } = this;
874
+ const innerValue = Array.from(subtrees.entries()).reduce((currentValue, [subpath, subtree]) => mergeValues(
875
+ currentValue,
876
+ subtree.evaluate(),
877
+ subpath,
878
+ this
879
+ ), initialValue);
880
+ return innerValue;
881
+ }
882
+ wrapInnerValue(innerValue) {
883
+ const { type } = this;
884
+ const { document } = getWindow2();
885
+ if (type === "transformer") {
886
+ const transformerName = this.tagName;
887
+ if (transformerName === null) return innerValue;
888
+ const generator = this.getGenerator(transformerName);
889
+ if (generator === void 0) return innerValue;
890
+ const transformer = Array.isArray(innerValue) ? generator(transformerName, ...innerValue) : generator(transformerName, innerValue);
891
+ return transformer;
892
+ }
893
+ if (type === "any") return innerValue;
894
+ if (type === "null") return null;
895
+ if (type === "boolean") return Cast.toBoolean(innerValue);
896
+ if (type === "number") return Cast.toNumber(innerValue);
897
+ if (type === "string") return Cast.toString(innerValue);
898
+ if (type === "array") return Cast.toArray(innerValue);
899
+ if (type === "record") return Cast.toRecord(innerValue);
900
+ if (type === "text") return Cast.toText(innerValue);
901
+ if (type === "element") {
902
+ const returnedElt = this.node.cloneNode();
903
+ const innerNodelist = Cast.toNodeList(innerValue);
904
+ returnedElt.append(...Array.from(innerNodelist));
905
+ return returnedElt;
906
+ }
907
+ if (type === "nodelist") return Cast.toNodeList(innerValue);
908
+ if (type === "literal") {
909
+ const val = Utils.toHyperJson(innerValue, this.keyAttribute);
910
+ const valChildren = val.childNodes;
911
+ const literal = document.createElement("literal");
912
+ literal.append(...Array.from(valChildren));
913
+ const thisElement = this.node;
914
+ Array.from(thisElement.attributes).forEach((attr) => literal.setAttribute(attr.name, attr.value));
915
+ return literal;
916
+ }
917
+ return null;
918
+ }
919
+ cache = void 0;
920
+ setCache(value) {
921
+ this.cache = Serialize.serialize(value);
922
+ }
923
+ perfCounters = {
924
+ computed: 0,
925
+ computeTime: 0,
926
+ computeTimeAvg: 0,
927
+ cached: 0,
928
+ cacheTime: 0,
929
+ cacheTimeAvg: 0,
930
+ totalTime: 0
931
+ };
932
+ getPerfCounters() {
933
+ const { subtrees } = this;
934
+ const subCounters = [];
935
+ subCounters.push([this.pathString, this.perfCounters]);
936
+ subtrees.forEach((subtree) => subCounters.push(...subtree.getPerfCounters()));
937
+ return subCounters;
938
+ }
939
+ printPerfCounters() {
940
+ const perfCounters = this.getPerfCounters().sort((a, b) => b[1].totalTime - a[1].totalTime).map((e) => ({
941
+ path: e[0],
942
+ totalMs: e[1].totalTime,
943
+ computeMs: e[1].computeTime,
944
+ cacheMs: e[1].cacheTime,
945
+ ops: `${e[1].computed}/${e[1].cached}`
946
+ }));
947
+ console.table(perfCounters);
948
+ }
949
+ callstack = [];
950
+ pushToEvalCallStack(path) {
951
+ this.callstack.push(path);
952
+ this.parent?.pushToEvalCallStack(path);
953
+ }
954
+ flushEvalCallStack() {
955
+ this.callstack.length = 0;
956
+ }
957
+ evaluate() {
958
+ const start = Date.now();
959
+ const circularPatternDetected = this.callstack.some((p) => p.startsWith(this.pathString));
960
+ if (circularPatternDetected) throw new Error(`Circular reference pattern detected @ ${this.pathString}`);
961
+ this.pushToEvalCallStack(this.pathString);
962
+ const { perfCounters, cache } = this;
963
+ if (cache !== void 0) {
964
+ const deserialized = Serialize.deserialize(cache);
965
+ const end2 = Date.now();
966
+ const time2 = end2 - start;
967
+ perfCounters.cached++;
968
+ perfCounters.cacheTime += time2;
969
+ perfCounters.cacheTimeAvg = perfCounters.cacheTime / perfCounters.cached;
970
+ perfCounters.totalTime = perfCounters.computeTime + perfCounters.cacheTime;
971
+ return deserialized;
972
+ }
973
+ const init = this.initValue();
974
+ const inner = this.getInnerValue(init);
975
+ const wrapped = this.wrapInnerValue(inner);
976
+ this.setCache(wrapped);
977
+ const end = Date.now();
978
+ const time = end - start;
979
+ perfCounters.computed++;
980
+ perfCounters.computeTime += time;
981
+ perfCounters.computeTimeAvg = perfCounters.computeTime / perfCounters.computed;
982
+ perfCounters.totalTime = perfCounters.computeTime + perfCounters.cacheTime;
983
+ this.flushEvalCallStack();
984
+ return wrapped;
985
+ }
986
+ }
987
+ _Tree.Tree = Tree2;
988
+ })(Tree || (Tree = {}));
989
+
990
+ // src/agnostic/html/hyper-json/utils/index.ts
991
+ var Utils;
992
+ ((Utils2) => {
993
+ Utils2.pathStringToPath = (pathString) => {
994
+ let cleanPathString = pathString;
995
+ while (cleanPathString.startsWith("/")) {
996
+ cleanPathString = cleanPathString.slice(1);
997
+ }
998
+ while (cleanPathString.endsWith("/")) {
999
+ cleanPathString = cleanPathString.slice(0, -1);
1000
+ }
1001
+ return cleanPathString.split("/").map((e) => {
1002
+ const parsed = parseInt(e);
1003
+ if (Number.isNaN(parsed)) return e;
1004
+ return parsed;
1005
+ });
1006
+ };
1007
+ Utils2.pathToPathString = (path) => `/${path.map((e) => `${e}`).join("/")}`;
1008
+ Utils2.makeTransformerError = (value) => ({
1009
+ action: "ERROR",
1010
+ value
1011
+ });
1012
+ Utils2.toNamedTransformer = (name, args, anonymous) => {
1013
+ const named = anonymous;
1014
+ named.transformerName = name;
1015
+ named.args = args;
1016
+ return named;
1017
+ };
1018
+ Utils2.toHyperJson = (value, keyAttribute = Tree.defaultKeyAttribute) => {
1019
+ const { document, Element, Text, NodeList } = Window.get();
1020
+ if (value instanceof Text) {
1021
+ const elt2 = document.createElement("text");
1022
+ elt2.innerHTML = value.textContent ?? "";
1023
+ return elt2;
1024
+ }
1025
+ if (value instanceof Element) return value.cloneNode(true);
1026
+ if (value instanceof NodeList) {
1027
+ const elt2 = document.createElement("nodelist");
1028
+ elt2.append(...Array.from(value).map((e) => e.cloneNode(true)));
1029
+ return elt2;
1030
+ }
1031
+ if (value === null) return document.createElement("null");
1032
+ if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
1033
+ const elt2 = document.createElement(typeof value);
1034
+ elt2.innerHTML = `${value}`;
1035
+ return elt2;
1036
+ }
1037
+ if (typeof value === "function") {
1038
+ const name = value.transformerName;
1039
+ const args = value.args;
1040
+ const elt2 = document.createElement(name);
1041
+ const hyperJsonArgs = args.map((arg) => (0, Utils2.toHyperJson)(arg, keyAttribute));
1042
+ elt2.append(...hyperJsonArgs);
1043
+ return elt2;
1044
+ }
1045
+ if (Array.isArray(value)) {
1046
+ const elt2 = document.createElement("array");
1047
+ elt2.append(...value.map((e) => (0, Utils2.toHyperJson)(e, keyAttribute)));
1048
+ return elt2;
1049
+ }
1050
+ const elt = document.createElement("record");
1051
+ Object.entries(value).forEach(([key, val]) => {
1052
+ const hjVal = (0, Utils2.toHyperJson)(val);
1053
+ hjVal.setAttribute(keyAttribute, key);
1054
+ elt.append(hjVal);
1055
+ });
1056
+ return elt;
1057
+ };
1058
+ })(Utils || (Utils = {}));
1059
+
1060
+ // src/agnostic/html/hyper-json/transformers/append/index.ts
1061
+ var append = (callerTagName, ...args) => {
1062
+ return Utils.toNamedTransformer(callerTagName, args, (currentValue) => {
1063
+ const { document, Element, Text, NodeList } = Window.get();
1064
+ const [...toAppend] = args;
1065
+ const frag = document.createDocumentFragment();
1066
+ frag.append(...Array.from(Cast.toNodeList(currentValue)).map((e) => e.cloneNode(true)));
1067
+ toAppend.forEach((item) => {
1068
+ if (item instanceof Element) frag.append(item.cloneNode(true));
1069
+ else if (item instanceof Text) frag.append(item.cloneNode(true));
1070
+ else if (item instanceof NodeList) frag.append(...Array.from(item).map((e) => e.cloneNode(true)));
1071
+ else frag.append(Cast.toString(item));
1072
+ });
1073
+ return {
1074
+ action: "REPLACE",
1075
+ value: frag.childNodes
1076
+ };
1077
+ });
1078
+ };
1079
+
1080
+ export {
1081
+ append,
1082
+ classList,
1083
+ join,
1084
+ length,
1085
+ print,
1086
+ push,
1087
+ querySelector,
1088
+ ref,
1089
+ replace,
1090
+ split,
1091
+ toArray,
1092
+ toBoolean,
1093
+ toElement,
1094
+ toNodeList,
1095
+ toNull,
1096
+ toNumber,
1097
+ toRecord,
1098
+ toRef,
1099
+ toString,
1100
+ toText,
1101
+ toTransformer,
1102
+ transformSelected,
1103
+ trim,
1104
+ Transformers,
1105
+ Tree,
1106
+ Utils,
1107
+ Cast
1108
+ };