@design-edito/tools 0.1.21 → 0.1.22
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.
- package/agnostic/arrays/find-duplicates/index.d.ts +1 -0
- package/agnostic/arrays/find-duplicates/index.js +6 -0
- package/agnostic/arrays/index.d.ts +8 -7
- package/agnostic/arrays/make/index.d.ts +3 -0
- package/agnostic/arrays/make/index.js +6 -0
- package/agnostic/arrays/random-pick/index.d.ts +2 -0
- package/agnostic/arrays/random-pick/index.js +8 -0
- package/agnostic/css/index.js +10 -10
- package/agnostic/errors/index.js +2 -2
- package/agnostic/html/hyper-json/cast/index.d.ts +18 -0
- package/agnostic/html/hyper-json/cast/index.js +11 -0
- package/agnostic/html/hyper-json/crossenv/index.d.ts +13 -0
- package/agnostic/html/hyper-json/crossenv/index.js +6 -0
- package/agnostic/html/hyper-json/index.d.ts +14 -43
- package/agnostic/html/hyper-json/index.js +32 -2
- package/agnostic/html/hyper-json/serialize/index.d.ts +5 -0
- package/agnostic/html/hyper-json/serialize/index.js +7 -0
- package/agnostic/html/hyper-json/transformers/append/index.d.ts +2 -0
- package/agnostic/html/hyper-json/transformers/append/index.js +12 -0
- package/agnostic/html/hyper-json/transformers/classList/index.d.ts +2 -0
- package/agnostic/html/hyper-json/transformers/classList/index.js +12 -0
- package/agnostic/html/hyper-json/transformers/index.d.ts +4 -0
- package/agnostic/html/hyper-json/transformers/index.js +39 -0
- package/agnostic/html/hyper-json/transformers/join/index.d.ts +2 -0
- package/agnostic/html/hyper-json/transformers/join/index.js +12 -0
- package/agnostic/html/hyper-json/transformers/length/index.d.ts +2 -0
- package/agnostic/html/hyper-json/transformers/length/index.js +8 -0
- package/agnostic/html/hyper-json/transformers/print/index.d.ts +2 -0
- package/agnostic/html/hyper-json/transformers/print/index.js +7 -0
- package/agnostic/html/hyper-json/transformers/push/index.d.ts +2 -0
- package/agnostic/html/hyper-json/transformers/push/index.js +7 -0
- package/agnostic/html/hyper-json/transformers/querySelector/index.d.ts +2 -0
- package/agnostic/html/hyper-json/transformers/querySelector/index.js +12 -0
- package/agnostic/html/hyper-json/transformers/ref/index.d.ts +2 -0
- package/agnostic/html/hyper-json/transformers/ref/index.js +12 -0
- package/agnostic/html/hyper-json/transformers/replace/index.d.ts +2 -0
- package/agnostic/html/hyper-json/transformers/replace/index.js +13 -0
- package/agnostic/html/hyper-json/transformers/split/index.d.ts +2 -0
- package/agnostic/html/hyper-json/transformers/split/index.js +12 -0
- package/agnostic/html/hyper-json/transformers/toArray/index.d.ts +2 -0
- package/agnostic/html/hyper-json/transformers/toArray/index.js +12 -0
- package/agnostic/html/hyper-json/transformers/toBoolean/index.d.ts +2 -0
- package/agnostic/html/hyper-json/transformers/toBoolean/index.js +12 -0
- package/agnostic/html/hyper-json/transformers/toElement/index.d.ts +2 -0
- package/agnostic/html/hyper-json/transformers/toElement/index.js +12 -0
- package/agnostic/html/hyper-json/transformers/toNodeList/index.d.ts +2 -0
- package/agnostic/html/hyper-json/transformers/toNodeList/index.js +12 -0
- package/agnostic/html/hyper-json/transformers/toNull/index.d.ts +2 -0
- package/agnostic/html/hyper-json/transformers/toNull/index.js +7 -0
- package/agnostic/html/hyper-json/transformers/toNumber/index.d.ts +2 -0
- package/agnostic/html/hyper-json/transformers/toNumber/index.js +12 -0
- package/agnostic/html/hyper-json/transformers/toRecord/index.d.ts +2 -0
- package/agnostic/html/hyper-json/transformers/toRecord/index.js +12 -0
- package/agnostic/html/hyper-json/transformers/toRef/index.d.ts +2 -0
- package/agnostic/html/hyper-json/transformers/toRef/index.js +12 -0
- package/agnostic/html/hyper-json/transformers/toString/index.d.ts +2 -0
- package/agnostic/html/hyper-json/transformers/toString/index.js +12 -0
- package/agnostic/html/hyper-json/transformers/toText/index.d.ts +2 -0
- package/agnostic/html/hyper-json/transformers/toText/index.js +12 -0
- package/agnostic/html/hyper-json/transformers/toTransformer/index.d.ts +2 -0
- package/agnostic/html/hyper-json/transformers/toTransformer/index.js +12 -0
- package/agnostic/html/hyper-json/transformers/transformSelected/index.d.ts +2 -0
- package/agnostic/html/hyper-json/transformers/transformSelected/index.js +39 -0
- package/agnostic/html/hyper-json/transformers/trim/index.d.ts +2 -0
- package/agnostic/html/hyper-json/transformers/trim/index.js +12 -0
- package/agnostic/html/hyper-json/tree/index.d.ts +56 -0
- package/agnostic/html/hyper-json/tree/index.js +39 -0
- package/agnostic/html/hyper-json/types/index.d.ts +86 -0
- package/agnostic/html/hyper-json/types/index.js +6 -0
- package/agnostic/html/hyper-json/utils/index.d.ts +10 -0
- package/agnostic/html/hyper-json/utils/index.js +6 -0
- package/agnostic/html/index.js +51 -19
- package/agnostic/html/replace-in-element/index.d.ts +1 -0
- package/agnostic/html/replace-in-element/index.js +6 -0
- package/agnostic/html/sanitize/index.js +7 -5
- package/agnostic/html/selector-to-element/index.js +7 -5
- package/agnostic/html/string-to-nodes/index.js +8 -6
- package/agnostic/index.d.ts +0 -2
- package/agnostic/misc/{web-crawler → crawler}/index.d.ts +1 -1
- package/agnostic/misc/crawler/index.js +7 -0
- package/agnostic/misc/crossenv/get-document/index.d.ts +2 -0
- package/agnostic/misc/crossenv/get-document/index.js +7 -0
- package/agnostic/misc/crossenv/get-window/browser.d.ts +2 -0
- package/agnostic/misc/crossenv/get-window/index.d.ts +2 -0
- package/agnostic/misc/crossenv/get-window/index.js +6 -0
- package/agnostic/misc/crossenv/index.d.ts +4 -1
- package/agnostic/misc/crossenv/index.js +3 -1
- package/agnostic/misc/crossenv/types.d.ts +3 -0
- package/agnostic/misc/index.d.ts +3 -1
- package/agnostic/misc/index.js +24 -14
- package/agnostic/misc/lorem-ipsum/index.js +5 -2
- package/agnostic/numbers/index.js +3 -3
- package/agnostic/objects/index.js +10 -10
- package/agnostic/optim/index.js +3 -3
- package/agnostic/random/index.js +6 -0
- package/agnostic/strings/index.js +9 -9
- package/agnostic/time/duration/index.d.ts +26 -0
- package/agnostic/time/duration/index.js +6 -0
- package/agnostic/time/index.d.ts +8 -7
- package/agnostic/time/index.js +17 -28
- package/agnostic/time/timeout/index.d.ts +1 -0
- package/agnostic/time/timeout/index.js +6 -0
- package/agnostic/time/transitions/index.js +7 -0
- package/agnostic/time/wait/index.js +6 -0
- package/chunks/chunk-2DMWYLFG.js +16 -0
- package/chunks/chunk-2KT7AKRW.js +17 -0
- package/chunks/{chunk-UCV2AZZV.js → chunk-2PI5AZIL.js} +14 -25
- package/chunks/chunk-3KQRMKQJ.js +27 -0
- package/chunks/chunk-3LVR6KZH.js +22 -0
- package/chunks/chunk-3PHPA25U.js +18 -0
- package/chunks/chunk-3PM7GZ6B.js +33 -0
- package/chunks/chunk-3SQJEEBK.js +642 -0
- package/chunks/chunk-3UURICGY.js +211 -0
- package/chunks/chunk-3X6RXJBR.js +37 -0
- package/chunks/{chunk-DQNJQBC6.js → chunk-4CIS3R7T.js} +1 -1
- package/chunks/chunk-4F7ZVE7T.js +332 -0
- package/chunks/chunk-4GUDL44X.js +13 -0
- package/chunks/chunk-4RDW62CU.js +36 -0
- package/chunks/chunk-5IR2PWO6.js +211 -0
- package/chunks/chunk-6CM2SWSX.js +35 -0
- package/chunks/chunk-6EYBQHJS.js +33 -0
- package/chunks/chunk-6NYUQXJT.js +109 -0
- package/chunks/chunk-6NZCBAT4.js +19 -0
- package/chunks/chunk-6V23XMYE.js +982 -0
- package/chunks/chunk-73V5RDSG.js +13 -0
- package/chunks/chunk-7IGZP4TV.js +30 -0
- package/chunks/chunk-7QMAYGNV.js +25 -0
- package/chunks/chunk-7YW5HL6N.js +168 -0
- package/chunks/chunk-AFFLZUW5.js +33 -0
- package/chunks/chunk-AMS3FB24.js +85 -0
- package/chunks/chunk-AXMPRLPI.js +35 -0
- package/chunks/chunk-B6CSCX7J.js +278 -0
- package/chunks/chunk-BDHNULU7.js +211 -0
- package/chunks/chunk-BNB7LEMQ.js +35 -0
- package/chunks/chunk-CECF6UZV.js +29 -0
- package/chunks/chunk-DBAJ66BR.js +18 -0
- package/chunks/chunk-DGQLPQS2.js +33 -0
- package/chunks/chunk-DLLTITVO.js +33 -0
- package/chunks/chunk-DMDOCC72.js +18 -0
- package/chunks/{chunk-IFT6HLDW.js → chunk-DRH7Q4FL.js} +3 -6
- package/chunks/chunk-DRNK3RLE.js +64 -0
- package/chunks/chunk-EAY65ZP6.js +22 -0
- package/chunks/{chunk-4GDNHUCZ.js → chunk-ENMBK6H7.js} +2 -2
- package/chunks/chunk-F5YMP5WU.js +18 -0
- package/chunks/chunk-F7EVMWVG.js +27 -0
- package/chunks/chunk-F7XWUG2V.js +18 -0
- package/chunks/chunk-FCU6IHKD.js +15 -0
- package/chunks/chunk-FFOATPL4.js +211 -0
- package/chunks/chunk-FWHUASVA.js +22 -0
- package/chunks/chunk-GBMHGF7P.js +20 -0
- package/chunks/{chunk-GJOU3UAL.js → chunk-GDYVCEWA.js} +8 -6
- package/chunks/chunk-GNBIAWSY.js +278 -0
- package/chunks/chunk-GQSPY2CV.js +19 -0
- package/chunks/chunk-HDALT7XM.js +620 -0
- package/chunks/chunk-HUKHWFVL.js +19 -0
- package/chunks/chunk-IGD53YL5.js +870 -0
- package/chunks/chunk-ILEM73XB.js +981 -0
- package/chunks/{chunk-DMGR57KA.js → chunk-IPB3U2PD.js} +20 -18
- package/chunks/chunk-JY3QZ2YO.js +211 -0
- package/chunks/chunk-K3OQEJI3.js +33 -0
- package/chunks/chunk-KXBKJ3GS.js +642 -0
- package/chunks/chunk-LCFDDWJR.js +278 -0
- package/chunks/chunk-LGECI2WL.js +306 -0
- package/chunks/chunk-LGUEB5L5.js +211 -0
- package/chunks/chunk-LI6QDZCA.js +211 -0
- package/chunks/{chunk-ZMHKLIP2.js → chunk-LYMZZ4BB.js} +1 -1
- package/chunks/chunk-MDEDNPU5.js +38 -0
- package/chunks/chunk-MQHKEGP4.js +33 -0
- package/chunks/chunk-NF5ACCXZ.js +211 -0
- package/chunks/chunk-NK557MKV.js +35 -0
- package/chunks/chunk-NWMEWFTK.js +33 -0
- package/chunks/chunk-O5OTBN22.js +35 -0
- package/chunks/chunk-O7MDUYEF.js +211 -0
- package/chunks/{chunk-LI5KVXAJ.js → chunk-OO5SJJDW.js} +2 -5
- package/chunks/chunk-Q52UJOBC.js +18 -0
- package/chunks/chunk-QFEF4EET.js +211 -0
- package/chunks/chunk-QHSVCGLD.js +280 -0
- package/chunks/chunk-QO64L4KB.js +97 -0
- package/chunks/{chunk-WLL3FNVL.js → chunk-R6KCN6CK.js} +1 -1
- package/chunks/chunk-RJ5E22H5.js +15 -0
- package/chunks/chunk-RLAZR3NL.js +8 -0
- package/chunks/chunk-RWUPHV54.js +25 -0
- package/chunks/chunk-S2757FI3.js +36 -0
- package/chunks/chunk-S42P73SC.js +30 -0
- package/chunks/chunk-S5XDYLJH.js +18 -0
- package/chunks/chunk-SCM6NACT.js +15 -0
- package/chunks/chunk-SH3Y2I5P.js +18 -0
- package/chunks/chunk-SMLKMOAX.js +18 -0
- package/chunks/chunk-TATRVKBS.js +211 -0
- package/chunks/chunk-UODQZRY2.js +620 -0
- package/chunks/chunk-UOULDS6J.js +33 -0
- package/chunks/chunk-UUDXUSI5.js +211 -0
- package/chunks/{chunk-GL23YDEH.js → chunk-UWAMSJ2X.js} +3 -6
- package/chunks/chunk-UZUXLD2Q.js +35 -0
- package/chunks/chunk-VA6HXRX4.js +211 -0
- package/chunks/chunk-VRUJR6WR.js +39 -0
- package/chunks/chunk-W6YBEEZM.js +211 -0
- package/chunks/chunk-WECTUHS5.js +127 -0
- package/chunks/chunk-YE5HI3RK.js +211 -0
- package/chunks/chunk-YEBOL67V.js +32 -0
- package/chunks/chunk-YS6WMSWC.js +15 -0
- package/{agnostic/misc/web-crawler/index.js → chunks/chunk-YUP434IY.js} +8 -7
- package/chunks/chunk-YYE2MVZO.js +211 -0
- package/chunks/chunk-Z7ZDDBV5.js +18 -0
- package/chunks/chunk-ZB73RE7P.js +35 -0
- package/chunks/chunk-ZONKYNKA.js +28 -0
- package/node/files/index.js +3 -3
- package/package.json +4 -1
- package/agnostic/async/index.d.ts +0 -8
- package/agnostic/async/index.js +0 -20
- package/agnostic/async/timeout-call/index.d.ts +0 -1
- package/agnostic/async/timeout-call/index.js +0 -6
- package/agnostic/async/transitions/index.js +0 -7
- package/agnostic/async/wait/index.js +0 -6
- package/agnostic/misc/random/index.js +0 -6
- package/chunks/chunk-4VC5PT5T.js +0 -13
- /package/agnostic/{misc/random → random}/index.d.ts +0 -0
- /package/agnostic/{async → time}/transitions/index.d.ts +0 -0
- /package/agnostic/{async → time}/wait/index.d.ts +0 -0
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
import {
|
|
2
|
+
isRecord
|
|
3
|
+
} from "./chunk-YDIBNEGA.js";
|
|
4
|
+
import {
|
|
5
|
+
isInEnum
|
|
6
|
+
} from "./chunk-E6MSDKON.js";
|
|
7
|
+
import {
|
|
8
|
+
isFalsy
|
|
9
|
+
} from "./chunk-QXAJXTXV.js";
|
|
10
|
+
|
|
11
|
+
// src/agnostic/html/hyper-json/index.ts
|
|
12
|
+
var HyperJson;
|
|
13
|
+
((HyperJson2) => {
|
|
14
|
+
const crossenvWindow = window;
|
|
15
|
+
const document = crossenvWindow.document;
|
|
16
|
+
const Element = crossenvWindow.Element;
|
|
17
|
+
const Text = crossenvWindow.Text;
|
|
18
|
+
const Node = crossenvWindow.Node;
|
|
19
|
+
const isElement = (node) => node.nodeType === Node.ELEMENT_NODE;
|
|
20
|
+
const isText = (node) => node.nodeType === Node.TEXT_NODE;
|
|
21
|
+
let TyperTagName;
|
|
22
|
+
((TyperTagName2) => {
|
|
23
|
+
TyperTagName2["NULL"] = "null";
|
|
24
|
+
TyperTagName2["BOOLEAN"] = "boolean";
|
|
25
|
+
TyperTagName2["NUMBER"] = "number";
|
|
26
|
+
TyperTagName2["STRING"] = "string";
|
|
27
|
+
TyperTagName2["TEXT"] = "text";
|
|
28
|
+
TyperTagName2["NODELIST"] = "nodelist";
|
|
29
|
+
TyperTagName2["ARRAY"] = "array";
|
|
30
|
+
TyperTagName2["RECORD"] = "record";
|
|
31
|
+
})(TyperTagName = HyperJson2.TyperTagName || (HyperJson2.TyperTagName = {}));
|
|
32
|
+
let TransformerTagName;
|
|
33
|
+
((TransformerTagName2) => {
|
|
34
|
+
TransformerTagName2["MAP"] = "map";
|
|
35
|
+
TransformerTagName2["REF"] = "ref";
|
|
36
|
+
TransformerTagName2["ADD"] = "add";
|
|
37
|
+
TransformerTagName2["MULT"] = "mult";
|
|
38
|
+
TransformerTagName2["APPEND"] = "append";
|
|
39
|
+
})(TransformerTagName = HyperJson2.TransformerTagName || (HyperJson2.TransformerTagName = {}));
|
|
40
|
+
class Tree {
|
|
41
|
+
node;
|
|
42
|
+
name;
|
|
43
|
+
parent;
|
|
44
|
+
root;
|
|
45
|
+
path;
|
|
46
|
+
pathString;
|
|
47
|
+
tagName;
|
|
48
|
+
attributes;
|
|
49
|
+
subtrees = /* @__PURE__ */ new Map();
|
|
50
|
+
children;
|
|
51
|
+
type;
|
|
52
|
+
constructor(node, parent, pathFromParent) {
|
|
53
|
+
this.initValue = this.initValue.bind(this);
|
|
54
|
+
this.getInnerValue = this.getInnerValue.bind(this);
|
|
55
|
+
this.wrapInnerValue = this.wrapInnerValue.bind(this);
|
|
56
|
+
this.evaluate = this.evaluate.bind(this);
|
|
57
|
+
this.node = node;
|
|
58
|
+
this.name = this.node instanceof Element ? this.node.getAttribute("_name") : null;
|
|
59
|
+
this.parent = parent ?? null;
|
|
60
|
+
this.root = this.parent === null ? this : this.parent.root;
|
|
61
|
+
if (this.parent === null) this.path = [];
|
|
62
|
+
else if (pathFromParent === void 0) {
|
|
63
|
+
this.path = [...this.parent.path, 0];
|
|
64
|
+
} else {
|
|
65
|
+
this.path = [...this.parent.path, pathFromParent];
|
|
66
|
+
}
|
|
67
|
+
this.pathString = `/${this.path.join("/")}`;
|
|
68
|
+
this.tagName = node instanceof Element ? node.tagName.toLowerCase() : null;
|
|
69
|
+
this.attributes = isElement(node) ? Array.from(node.attributes) : null;
|
|
70
|
+
const { childNodes } = node;
|
|
71
|
+
let positionnedChildrenCount = 0;
|
|
72
|
+
const mutableSubtrees = /* @__PURE__ */ new Map();
|
|
73
|
+
Array.from(childNodes).filter((node2) => {
|
|
74
|
+
if (isElement(node2)) return true;
|
|
75
|
+
if (isText(node2)) return true;
|
|
76
|
+
return false;
|
|
77
|
+
}).forEach((childNode) => {
|
|
78
|
+
if (childNode instanceof Text) {
|
|
79
|
+
mutableSubtrees.set(
|
|
80
|
+
positionnedChildrenCount,
|
|
81
|
+
new Tree(childNode, this, positionnedChildrenCount)
|
|
82
|
+
);
|
|
83
|
+
positionnedChildrenCount += 1;
|
|
84
|
+
} else {
|
|
85
|
+
const propertyName = childNode.getAttribute("_name");
|
|
86
|
+
if (propertyName === null) {
|
|
87
|
+
mutableSubtrees.set(
|
|
88
|
+
positionnedChildrenCount,
|
|
89
|
+
new Tree(childNode, this, positionnedChildrenCount)
|
|
90
|
+
);
|
|
91
|
+
positionnedChildrenCount += 1;
|
|
92
|
+
} else {
|
|
93
|
+
mutableSubtrees.set(
|
|
94
|
+
propertyName,
|
|
95
|
+
new Tree(childNode, this, propertyName)
|
|
96
|
+
);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
this.subtrees = mutableSubtrees;
|
|
101
|
+
this.children = Array.from(this.subtrees.values());
|
|
102
|
+
if (this.tagName === null) {
|
|
103
|
+
this.type = "text";
|
|
104
|
+
} else if (this.tagName === "null" /* NULL */) {
|
|
105
|
+
this.type = "null";
|
|
106
|
+
} else if (this.tagName === "boolean" /* BOOLEAN */) {
|
|
107
|
+
this.type = "boolean";
|
|
108
|
+
} else if (this.tagName === "number" /* NUMBER */) {
|
|
109
|
+
this.type = "number";
|
|
110
|
+
} else if (this.tagName === "string" /* STRING */) {
|
|
111
|
+
this.type = "string";
|
|
112
|
+
} else if (this.tagName === "text" /* TEXT */) {
|
|
113
|
+
this.type = "text";
|
|
114
|
+
} else if (this.tagName === "nodelist" /* NODELIST */) {
|
|
115
|
+
this.type = "nodelist";
|
|
116
|
+
} else if (this.tagName === "array" /* ARRAY */) {
|
|
117
|
+
this.type = "array";
|
|
118
|
+
} else if (this.tagName === "record" /* RECORD */) {
|
|
119
|
+
this.type = "record";
|
|
120
|
+
} else if (isInEnum(TransformerTagName, this.tagName)) {
|
|
121
|
+
this.type = "transformer";
|
|
122
|
+
} else {
|
|
123
|
+
this.type = "element";
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
initValue() {
|
|
127
|
+
const { type } = this;
|
|
128
|
+
let currentValue;
|
|
129
|
+
if (type === "null") {
|
|
130
|
+
currentValue = null;
|
|
131
|
+
} else if (type === "boolean") {
|
|
132
|
+
currentValue = false;
|
|
133
|
+
} else if (type === "number") {
|
|
134
|
+
currentValue = 0;
|
|
135
|
+
} else if (type === "string") {
|
|
136
|
+
currentValue = "";
|
|
137
|
+
} else if (type === "text") {
|
|
138
|
+
currentValue = this.node.textContent;
|
|
139
|
+
} else if (type === "element") {
|
|
140
|
+
currentValue = document.createDocumentFragment().childNodes;
|
|
141
|
+
} else if (type === "nodelist") {
|
|
142
|
+
currentValue = document.createDocumentFragment().childNodes;
|
|
143
|
+
} else if (type === "array") {
|
|
144
|
+
currentValue = [];
|
|
145
|
+
} else if (type === "record") {
|
|
146
|
+
currentValue = {};
|
|
147
|
+
} else if (type === "transformer") {
|
|
148
|
+
currentValue = [];
|
|
149
|
+
} else {
|
|
150
|
+
currentValue = null;
|
|
151
|
+
}
|
|
152
|
+
return currentValue;
|
|
153
|
+
}
|
|
154
|
+
getInnerValue(initialValue) {
|
|
155
|
+
const { subtrees } = this;
|
|
156
|
+
const innerValue = Array.from(subtrees.entries()).reduce((currentValue, [subpath, subTree]) => {
|
|
157
|
+
if (subTree.type === "transformer") {
|
|
158
|
+
const evaluated = subTree.evaluate();
|
|
159
|
+
return evaluated(currentValue);
|
|
160
|
+
}
|
|
161
|
+
if (currentValue === null || typeof currentValue === "boolean" || typeof currentValue === "number" || typeof currentValue === "string" || currentValue instanceof Text || currentValue instanceof Element) {
|
|
162
|
+
const evaluated = subTree.evaluate();
|
|
163
|
+
if (evaluated === null || typeof evaluated === "boolean" || typeof evaluated === "number" || typeof evaluated === "string" || Array.isArray(evaluated) || isRecord(evaluated)) {
|
|
164
|
+
return evaluated;
|
|
165
|
+
}
|
|
166
|
+
const frag = document.createDocumentFragment();
|
|
167
|
+
frag.append(`${currentValue}`);
|
|
168
|
+
if (evaluated instanceof Element || evaluated instanceof Text) {
|
|
169
|
+
frag.append(evaluated);
|
|
170
|
+
return frag.childNodes;
|
|
171
|
+
}
|
|
172
|
+
frag.append(...Array.from(evaluated));
|
|
173
|
+
return frag.childNodes;
|
|
174
|
+
}
|
|
175
|
+
if (Array.isArray(currentValue)) {
|
|
176
|
+
if (typeof subpath === "string") return currentValue;
|
|
177
|
+
return [...currentValue, subTree.evaluate()];
|
|
178
|
+
}
|
|
179
|
+
if (currentValue instanceof NodeList) {
|
|
180
|
+
const evaluated = subTree.evaluate();
|
|
181
|
+
if (evaluated instanceof Element || evaluated instanceof Text) {
|
|
182
|
+
const frag = document.createDocumentFragment();
|
|
183
|
+
frag.append(...Array.from(currentValue), evaluated);
|
|
184
|
+
return frag.childNodes;
|
|
185
|
+
}
|
|
186
|
+
if (evaluated instanceof NodeList) {
|
|
187
|
+
const frag = document.createDocumentFragment();
|
|
188
|
+
frag.append(
|
|
189
|
+
...Array.from(currentValue),
|
|
190
|
+
...Array.from(evaluated)
|
|
191
|
+
);
|
|
192
|
+
return frag.childNodes;
|
|
193
|
+
}
|
|
194
|
+
if (evaluated === null || typeof evaluated === "string" || typeof evaluated === "number" || typeof evaluated === "boolean") {
|
|
195
|
+
const frag = document.createDocumentFragment();
|
|
196
|
+
frag.append(...Array.from(currentValue), `${evaluated}`);
|
|
197
|
+
return frag.childNodes;
|
|
198
|
+
}
|
|
199
|
+
if (Array.isArray(evaluated)) return [...Array.from(currentValue), ...evaluated];
|
|
200
|
+
return { ...evaluated };
|
|
201
|
+
}
|
|
202
|
+
if (typeof subpath === "number") return currentValue;
|
|
203
|
+
return {
|
|
204
|
+
...currentValue,
|
|
205
|
+
[subpath]: subTree.evaluate()
|
|
206
|
+
};
|
|
207
|
+
}, initialValue);
|
|
208
|
+
return innerValue;
|
|
209
|
+
}
|
|
210
|
+
wrapInnerValue(innerValue) {
|
|
211
|
+
const { type, node } = this;
|
|
212
|
+
if (type === "transformer") return (contextValue) => {
|
|
213
|
+
console.log(`I am a transformer. My name is ${this.tagName}.`);
|
|
214
|
+
console.log("I have this innerValue (these are my params):");
|
|
215
|
+
console.log(innerValue);
|
|
216
|
+
console.log("And this context value:");
|
|
217
|
+
console.log(contextValue);
|
|
218
|
+
return contextValue;
|
|
219
|
+
};
|
|
220
|
+
if (type === "null") return null;
|
|
221
|
+
if (type === "boolean") return !isFalsy(innerValue);
|
|
222
|
+
if (type === "number") return parseFloat(`${innerValue}`);
|
|
223
|
+
if (type === "string") return `${innerValue}`;
|
|
224
|
+
if (type === "array") {
|
|
225
|
+
if (Array.isArray(innerValue)) return innerValue;
|
|
226
|
+
if (innerValue instanceof NodeList) {
|
|
227
|
+
return [...Array.from(innerValue)];
|
|
228
|
+
}
|
|
229
|
+
return [innerValue];
|
|
230
|
+
}
|
|
231
|
+
if (type === "record") {
|
|
232
|
+
if (isRecord(innerValue)) return innerValue;
|
|
233
|
+
return {};
|
|
234
|
+
}
|
|
235
|
+
if (type === "text") return document.createTextNode(`${innerValue}`);
|
|
236
|
+
if (type === "element") {
|
|
237
|
+
const wrapper = node.cloneNode();
|
|
238
|
+
if (innerValue instanceof NodeList) {
|
|
239
|
+
wrapper.append(...Array.from(innerValue));
|
|
240
|
+
return wrapper;
|
|
241
|
+
}
|
|
242
|
+
if (innerValue instanceof Element || innerValue instanceof Text || typeof innerValue === "string") {
|
|
243
|
+
wrapper.append(innerValue);
|
|
244
|
+
return wrapper;
|
|
245
|
+
}
|
|
246
|
+
if (innerValue === null || typeof innerValue === "number" || typeof innerValue === "boolean") {
|
|
247
|
+
wrapper.append(`${innerValue}`);
|
|
248
|
+
return wrapper;
|
|
249
|
+
}
|
|
250
|
+
return wrapper;
|
|
251
|
+
}
|
|
252
|
+
if (innerValue instanceof NodeList) return innerValue;
|
|
253
|
+
if (innerValue instanceof Element || innerValue instanceof Text || typeof innerValue === "string") {
|
|
254
|
+
const frag2 = document.createDocumentFragment();
|
|
255
|
+
frag2.append(innerValue);
|
|
256
|
+
return frag2.childNodes;
|
|
257
|
+
}
|
|
258
|
+
if (innerValue === null || typeof innerValue === "string" || typeof innerValue === "number" || typeof innerValue === "boolean") {
|
|
259
|
+
const frag2 = document.createDocumentFragment();
|
|
260
|
+
frag2.append(`${innerValue}`);
|
|
261
|
+
return frag2.childNodes;
|
|
262
|
+
}
|
|
263
|
+
const frag = document.createDocumentFragment();
|
|
264
|
+
return frag.childNodes;
|
|
265
|
+
}
|
|
266
|
+
evaluate() {
|
|
267
|
+
const init = this.initValue();
|
|
268
|
+
const inner = this.getInnerValue(init);
|
|
269
|
+
const wrapped = this.wrapInnerValue(inner);
|
|
270
|
+
return wrapped;
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
HyperJson2.Tree = Tree;
|
|
274
|
+
})(HyperJson || (HyperJson = {}));
|
|
275
|
+
|
|
276
|
+
export {
|
|
277
|
+
HyperJson
|
|
278
|
+
};
|
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Serialize
|
|
3
|
+
} from "./chunk-DRNK3RLE.js";
|
|
4
|
+
import {
|
|
5
|
+
Transformers
|
|
6
|
+
} from "./chunk-GQSPY2CV.js";
|
|
7
|
+
import {
|
|
8
|
+
Types
|
|
9
|
+
} from "./chunk-3KQRMKQJ.js";
|
|
10
|
+
import {
|
|
11
|
+
Cast
|
|
12
|
+
} from "./chunk-AMS3FB24.js";
|
|
13
|
+
import {
|
|
14
|
+
Crossenv
|
|
15
|
+
} from "./chunk-3LVR6KZH.js";
|
|
16
|
+
import {
|
|
17
|
+
isRecord
|
|
18
|
+
} from "./chunk-YDIBNEGA.js";
|
|
19
|
+
import {
|
|
20
|
+
isInEnum
|
|
21
|
+
} from "./chunk-E6MSDKON.js";
|
|
22
|
+
|
|
23
|
+
// src/agnostic/html/hyper-json/tree/index.ts
|
|
24
|
+
var getWindow = Crossenv.getWindow;
|
|
25
|
+
var isElement = (node) => node.nodeType === getWindow().Node.ELEMENT_NODE;
|
|
26
|
+
var isText = (node) => node.nodeType === getWindow().Node.TEXT_NODE;
|
|
27
|
+
var Tree = class _Tree {
|
|
28
|
+
node;
|
|
29
|
+
name;
|
|
30
|
+
parent;
|
|
31
|
+
root;
|
|
32
|
+
path;
|
|
33
|
+
pathString;
|
|
34
|
+
tagName;
|
|
35
|
+
attributes;
|
|
36
|
+
subtrees = /* @__PURE__ */ new Map();
|
|
37
|
+
children;
|
|
38
|
+
type;
|
|
39
|
+
constructor(node, parent, pathFromParent) {
|
|
40
|
+
this.resolve = this.resolve.bind(this);
|
|
41
|
+
this.initValue = this.initValue.bind(this);
|
|
42
|
+
this.mergeValues = this.mergeValues.bind(this);
|
|
43
|
+
this.getInnerValue = this.getInnerValue.bind(this);
|
|
44
|
+
this.wrapInnerValue = this.wrapInnerValue.bind(this);
|
|
45
|
+
this.setCache = this.setCache.bind(this);
|
|
46
|
+
this.getPerfCounters = this.getPerfCounters.bind(this);
|
|
47
|
+
this.printPerfCounters = this.printPerfCounters.bind(this);
|
|
48
|
+
this.evaluate = this.evaluate.bind(this);
|
|
49
|
+
this.node = node;
|
|
50
|
+
this.name = this.node instanceof getWindow().Element ? this.node.getAttribute("_name") : null;
|
|
51
|
+
this.parent = parent ?? null;
|
|
52
|
+
this.root = this.parent === null ? this : this.parent.root;
|
|
53
|
+
if (this.parent === null) this.path = [];
|
|
54
|
+
else if (pathFromParent === void 0) {
|
|
55
|
+
this.path = [...this.parent.path, 0];
|
|
56
|
+
} else {
|
|
57
|
+
this.path = [...this.parent.path, pathFromParent];
|
|
58
|
+
}
|
|
59
|
+
this.pathString = `/${this.path.join("/")}`;
|
|
60
|
+
this.tagName = node instanceof getWindow().Element ? node.tagName.toLowerCase() : null;
|
|
61
|
+
this.attributes = isElement(node) ? Array.from(node.attributes) : null;
|
|
62
|
+
const { childNodes } = node;
|
|
63
|
+
let positionnedChildrenCount = 0;
|
|
64
|
+
const mutableSubtrees = /* @__PURE__ */ new Map();
|
|
65
|
+
Array.from(childNodes).filter((node2, _, nodes) => {
|
|
66
|
+
if (isElement(node2)) return true;
|
|
67
|
+
if (isText(node2)) {
|
|
68
|
+
const hasContent = (node2.textContent ?? "").trim() !== "";
|
|
69
|
+
if (hasContent) return true;
|
|
70
|
+
if (nodes.some((n) => n instanceof getWindow().Element)) return false;
|
|
71
|
+
return true;
|
|
72
|
+
}
|
|
73
|
+
return false;
|
|
74
|
+
}).forEach((childNode) => {
|
|
75
|
+
if (childNode instanceof getWindow().Text) {
|
|
76
|
+
mutableSubtrees.set(
|
|
77
|
+
positionnedChildrenCount,
|
|
78
|
+
new _Tree(childNode, this, positionnedChildrenCount)
|
|
79
|
+
);
|
|
80
|
+
positionnedChildrenCount += 1;
|
|
81
|
+
} else {
|
|
82
|
+
const propertyName = childNode.getAttribute("_name");
|
|
83
|
+
if (propertyName === null) {
|
|
84
|
+
mutableSubtrees.set(
|
|
85
|
+
positionnedChildrenCount,
|
|
86
|
+
new _Tree(childNode, this, positionnedChildrenCount)
|
|
87
|
+
);
|
|
88
|
+
positionnedChildrenCount += 1;
|
|
89
|
+
} else {
|
|
90
|
+
mutableSubtrees.set(
|
|
91
|
+
propertyName,
|
|
92
|
+
new _Tree(childNode, this, propertyName)
|
|
93
|
+
);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
this.subtrees = mutableSubtrees;
|
|
98
|
+
this.children = Array.from(this.subtrees.values());
|
|
99
|
+
if (this.tagName === null) {
|
|
100
|
+
this.type = "text";
|
|
101
|
+
} else if (this.tagName === Types.TyperTagName.NULL) {
|
|
102
|
+
this.type = "null";
|
|
103
|
+
} else if (this.tagName === Types.TyperTagName.BOOLEAN) {
|
|
104
|
+
this.type = "boolean";
|
|
105
|
+
} else if (this.tagName === Types.TyperTagName.NUMBER) {
|
|
106
|
+
this.type = "number";
|
|
107
|
+
} else if (this.tagName === Types.TyperTagName.STRING) {
|
|
108
|
+
this.type = "string";
|
|
109
|
+
} else if (this.tagName === Types.TyperTagName.TEXT) {
|
|
110
|
+
this.type = "text";
|
|
111
|
+
} else if (this.tagName === Types.TyperTagName.NODELIST) {
|
|
112
|
+
this.type = "nodelist";
|
|
113
|
+
} else if (this.tagName === Types.TyperTagName.ARRAY) {
|
|
114
|
+
this.type = "array";
|
|
115
|
+
} else if (this.tagName === Types.TyperTagName.RECORD) {
|
|
116
|
+
this.type = "record";
|
|
117
|
+
} else if (isInEnum(Types.TransformerTagName, this.tagName)) {
|
|
118
|
+
this.type = "transformer";
|
|
119
|
+
} else {
|
|
120
|
+
this.type = "element";
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
resolve = function(path) {
|
|
124
|
+
let currentTree = this.root;
|
|
125
|
+
for (const chunk of path) {
|
|
126
|
+
const { subtrees } = currentTree;
|
|
127
|
+
const foundSubtree = subtrees.get(chunk);
|
|
128
|
+
if (foundSubtree === void 0) return void 0;
|
|
129
|
+
currentTree = foundSubtree;
|
|
130
|
+
}
|
|
131
|
+
return currentTree;
|
|
132
|
+
};
|
|
133
|
+
initValue() {
|
|
134
|
+
const { type } = this;
|
|
135
|
+
let currentValue;
|
|
136
|
+
if (type === "null") {
|
|
137
|
+
currentValue = null;
|
|
138
|
+
} else if (type === "boolean") {
|
|
139
|
+
currentValue = false;
|
|
140
|
+
} else if (type === "number") {
|
|
141
|
+
currentValue = 0;
|
|
142
|
+
} else if (type === "string") {
|
|
143
|
+
currentValue = "";
|
|
144
|
+
} else if (type === "text") {
|
|
145
|
+
currentValue = this.node.textContent;
|
|
146
|
+
} else if (type === "element") {
|
|
147
|
+
currentValue = getWindow().document.createDocumentFragment().childNodes;
|
|
148
|
+
} else if (type === "nodelist") {
|
|
149
|
+
currentValue = getWindow().document.createDocumentFragment().childNodes;
|
|
150
|
+
} else if (type === "array") {
|
|
151
|
+
currentValue = [];
|
|
152
|
+
} else if (type === "record") {
|
|
153
|
+
currentValue = {};
|
|
154
|
+
} else if (type === "transformer") {
|
|
155
|
+
currentValue = [];
|
|
156
|
+
} else {
|
|
157
|
+
currentValue = null;
|
|
158
|
+
}
|
|
159
|
+
return currentValue;
|
|
160
|
+
}
|
|
161
|
+
mergeValues(currentValue, incomingValue, mergeKey) {
|
|
162
|
+
const { Element, Text, NodeList, document } = getWindow();
|
|
163
|
+
if (typeof incomingValue === "function") {
|
|
164
|
+
const evaluated = incomingValue(currentValue, { resolver: this.resolve });
|
|
165
|
+
if (evaluated.action === null) return currentValue;
|
|
166
|
+
if (evaluated.action === "REPLACE") return evaluated.value;
|
|
167
|
+
return this.mergeValues(currentValue, evaluated.value, mergeKey);
|
|
168
|
+
}
|
|
169
|
+
if (Array.isArray(currentValue)) {
|
|
170
|
+
if (typeof mergeKey === "string") return currentValue;
|
|
171
|
+
return [...currentValue, incomingValue];
|
|
172
|
+
}
|
|
173
|
+
if (currentValue === null || typeof currentValue === "boolean" || typeof currentValue === "number" || typeof currentValue === "string" || typeof currentValue === "function" || currentValue instanceof Text || currentValue instanceof Element) {
|
|
174
|
+
if (incomingValue === null || typeof incomingValue === "boolean" || typeof incomingValue === "number" || typeof incomingValue === "string" || Array.isArray(incomingValue) || isRecord(incomingValue)) {
|
|
175
|
+
return incomingValue;
|
|
176
|
+
}
|
|
177
|
+
const frag = document.createDocumentFragment();
|
|
178
|
+
if (currentValue instanceof Element || currentValue instanceof Text) frag.append(currentValue.cloneNode(true));
|
|
179
|
+
else frag.append(`${currentValue}`);
|
|
180
|
+
if (incomingValue instanceof Element || incomingValue instanceof Text) {
|
|
181
|
+
frag.append(incomingValue.cloneNode(true));
|
|
182
|
+
return frag.childNodes;
|
|
183
|
+
}
|
|
184
|
+
frag.append(...Array.from(incomingValue).map((e) => e.cloneNode(true)));
|
|
185
|
+
return frag.childNodes;
|
|
186
|
+
}
|
|
187
|
+
if (currentValue instanceof NodeList) {
|
|
188
|
+
if (incomingValue instanceof Element || incomingValue instanceof Text) {
|
|
189
|
+
const frag = document.createDocumentFragment();
|
|
190
|
+
frag.append(...Array.from(currentValue).map((e) => e.cloneNode(true)), incomingValue);
|
|
191
|
+
return frag.childNodes;
|
|
192
|
+
}
|
|
193
|
+
if (incomingValue instanceof NodeList) {
|
|
194
|
+
const frag = document.createDocumentFragment();
|
|
195
|
+
frag.append(
|
|
196
|
+
...Array.from(currentValue).map((e) => e.cloneNode(true)),
|
|
197
|
+
...Array.from(incomingValue).map((e) => e.cloneNode(true))
|
|
198
|
+
);
|
|
199
|
+
return frag.childNodes;
|
|
200
|
+
}
|
|
201
|
+
if (incomingValue === null || typeof incomingValue === "string" || typeof incomingValue === "number" || typeof incomingValue === "boolean") {
|
|
202
|
+
const frag = document.createDocumentFragment();
|
|
203
|
+
frag.append(...Array.from(currentValue).map((e) => e.cloneNode(true)), `${incomingValue}`);
|
|
204
|
+
return frag.childNodes;
|
|
205
|
+
}
|
|
206
|
+
if (Array.isArray(incomingValue)) return [
|
|
207
|
+
...Array.from(currentValue),
|
|
208
|
+
...incomingValue
|
|
209
|
+
];
|
|
210
|
+
return { ...incomingValue };
|
|
211
|
+
}
|
|
212
|
+
if (typeof mergeKey === "number") return currentValue;
|
|
213
|
+
return {
|
|
214
|
+
...currentValue,
|
|
215
|
+
[mergeKey]: incomingValue
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
getInnerValue(initialValue) {
|
|
219
|
+
const { subtrees } = this;
|
|
220
|
+
const innerValue = Array.from(subtrees.entries()).reduce((currentValue, [subpath, subtree]) => this.mergeValues(
|
|
221
|
+
currentValue,
|
|
222
|
+
subtree.evaluate(),
|
|
223
|
+
subpath
|
|
224
|
+
), initialValue);
|
|
225
|
+
return innerValue;
|
|
226
|
+
}
|
|
227
|
+
wrapInnerValue(innerValue) {
|
|
228
|
+
const { type } = this;
|
|
229
|
+
if (type === "transformer") {
|
|
230
|
+
const transformerName = this.tagName;
|
|
231
|
+
const generator = Transformers.get(transformerName);
|
|
232
|
+
if (generator === void 0) return innerValue;
|
|
233
|
+
const transformer = Array.isArray(innerValue) ? generator(...innerValue) : generator(innerValue);
|
|
234
|
+
return transformer;
|
|
235
|
+
}
|
|
236
|
+
if (type === "null") return Cast.toNull();
|
|
237
|
+
if (type === "boolean") return Cast.toBoolean(innerValue);
|
|
238
|
+
if (type === "number") return Cast.toNumber(innerValue);
|
|
239
|
+
if (type === "string") return Cast.toString(innerValue);
|
|
240
|
+
if (type === "array") return Cast.toArray(innerValue);
|
|
241
|
+
if (type === "record") return Cast.toRecord(innerValue);
|
|
242
|
+
if (type === "text") return Cast.toText(innerValue);
|
|
243
|
+
if (type === "element") return Cast.toElement(innerValue);
|
|
244
|
+
if (type === "nodelist") return Cast.toNodeList(innerValue);
|
|
245
|
+
return Cast.toNull();
|
|
246
|
+
}
|
|
247
|
+
cache = void 0;
|
|
248
|
+
setCache(value) {
|
|
249
|
+
this.cache = Serialize.serialize(value);
|
|
250
|
+
}
|
|
251
|
+
perfCounters = {
|
|
252
|
+
computed: 0,
|
|
253
|
+
computeTime: 0,
|
|
254
|
+
computeTimeAvg: 0,
|
|
255
|
+
cached: 0,
|
|
256
|
+
cacheTime: 0,
|
|
257
|
+
cacheTimeAvg: 0,
|
|
258
|
+
totalTime: 0
|
|
259
|
+
};
|
|
260
|
+
getPerfCounters() {
|
|
261
|
+
const { subtrees } = this;
|
|
262
|
+
const subCounters = [];
|
|
263
|
+
subCounters.push([this.pathString, this.perfCounters]);
|
|
264
|
+
subtrees.forEach((subtree) => subCounters.push(...subtree.getPerfCounters()));
|
|
265
|
+
return subCounters;
|
|
266
|
+
}
|
|
267
|
+
printPerfCounters() {
|
|
268
|
+
const perfCounters = this.getPerfCounters().sort((a, b) => b[1].totalTime - a[1].totalTime).map((e) => ({
|
|
269
|
+
path: e[0],
|
|
270
|
+
totalMs: e[1].totalTime,
|
|
271
|
+
computeMs: e[1].computeTime,
|
|
272
|
+
cacheMs: e[1].cacheTime,
|
|
273
|
+
ops: `${e[1].computed}/${e[1].cached}`
|
|
274
|
+
}));
|
|
275
|
+
console.table(perfCounters);
|
|
276
|
+
}
|
|
277
|
+
evaluate() {
|
|
278
|
+
const start = Date.now();
|
|
279
|
+
const { perfCounters, cache } = this;
|
|
280
|
+
if (cache !== void 0) {
|
|
281
|
+
const deserialized = Serialize.deserialize(cache);
|
|
282
|
+
const end2 = Date.now();
|
|
283
|
+
const time2 = end2 - start;
|
|
284
|
+
perfCounters.cached++;
|
|
285
|
+
perfCounters.cacheTime += time2;
|
|
286
|
+
perfCounters.cacheTimeAvg = perfCounters.cacheTime / perfCounters.cached;
|
|
287
|
+
perfCounters.totalTime = perfCounters.computeTime + perfCounters.cacheTime;
|
|
288
|
+
return deserialized;
|
|
289
|
+
}
|
|
290
|
+
const init = this.initValue();
|
|
291
|
+
const inner = this.getInnerValue(init);
|
|
292
|
+
const wrapped = this.wrapInnerValue(inner);
|
|
293
|
+
this.setCache(wrapped);
|
|
294
|
+
const end = Date.now();
|
|
295
|
+
const time = end - start;
|
|
296
|
+
perfCounters.computed++;
|
|
297
|
+
perfCounters.computeTime += time;
|
|
298
|
+
perfCounters.computeTimeAvg = perfCounters.computeTime / perfCounters.computed;
|
|
299
|
+
perfCounters.totalTime = perfCounters.computeTime + perfCounters.cacheTime;
|
|
300
|
+
return wrapped;
|
|
301
|
+
}
|
|
302
|
+
};
|
|
303
|
+
|
|
304
|
+
export {
|
|
305
|
+
Tree
|
|
306
|
+
};
|