occam-dom 5.0.14 → 5.1.1

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.
@@ -0,0 +1,195 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: all[name]
9
+ });
10
+ }
11
+ _export(exports, {
12
+ addNodeAfter: function() {
13
+ return addNodeAfter;
14
+ },
15
+ addNodesAfter: function() {
16
+ return addNodesAfter;
17
+ },
18
+ addTokensAfter: function() {
19
+ return addTokensAfter;
20
+ },
21
+ appendNode: function() {
22
+ return appendNode;
23
+ },
24
+ appendTokens: function() {
25
+ return appendTokens;
26
+ },
27
+ clonedTokensFromNodeAndTokens: function() {
28
+ return clonedTokensFromNodeAndTokens;
29
+ },
30
+ overwriteClonedNodeTokens: function() {
31
+ return overwriteClonedNodeTokens;
32
+ },
33
+ prependNode: function() {
34
+ return prependNode;
35
+ },
36
+ prependTokens: function() {
37
+ return prependTokens;
38
+ },
39
+ removeNode: function() {
40
+ return removeNode;
41
+ },
42
+ removeNodes: function() {
43
+ return removeNodes;
44
+ },
45
+ removeTokens: function() {
46
+ return removeTokens;
47
+ },
48
+ replaceNode: function() {
49
+ return replaceNode;
50
+ },
51
+ replaceNodes: function() {
52
+ return replaceNodes;
53
+ },
54
+ replaceTokens: function() {
55
+ return replaceTokens;
56
+ }
57
+ });
58
+ function _array_like_to_array(arr, len) {
59
+ if (len == null || len > arr.length) len = arr.length;
60
+ for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
61
+ return arr2;
62
+ }
63
+ function _array_without_holes(arr) {
64
+ if (Array.isArray(arr)) return _array_like_to_array(arr);
65
+ }
66
+ function _iterable_to_array(iter) {
67
+ if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
68
+ }
69
+ function _non_iterable_spread() {
70
+ throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
71
+ }
72
+ function _to_consumable_array(arr) {
73
+ return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread();
74
+ }
75
+ function _unsupported_iterable_to_array(o, minLen) {
76
+ if (!o) return;
77
+ if (typeof o === "string") return _array_like_to_array(o, minLen);
78
+ var n = Object.prototype.toString.call(o).slice(8, -1);
79
+ if (n === "Object" && o.constructor) n = o.constructor.name;
80
+ if (n === "Map" || n === "Set") return Array.from(n);
81
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
82
+ }
83
+ function appendNode(appendedNode, parentNode) {
84
+ var appendedChildNode = appendedNode; ///
85
+ parentNode.appendChildNode(appendedChildNode);
86
+ }
87
+ function prependNode(prependedNode, parentNode) {
88
+ var prependedChildNode = prependedNode; ///
89
+ parentNode.prependChildNode(prependedChildNode);
90
+ }
91
+ function removeNode(removedNode, parentNode) {
92
+ var removedChildNode = removedNode; ///
93
+ parentNode.removeChildNode(removedChildNode);
94
+ }
95
+ function removeNodes(removedNodes, parentNode) {
96
+ var removedChildNodes = removedNodes; ///
97
+ parentNode.removeChildNodes(removedChildNodes);
98
+ }
99
+ function replaceNode(replacementNode, replacedNode, parentNode) {
100
+ var replacedChildNode = replacedNode, replacementChildNode = replacementNode, replacementChildNodes = [
101
+ replacementChildNode
102
+ ];
103
+ parentNode.replaceChildNode(replacedChildNode, replacementChildNodes);
104
+ }
105
+ function replaceNodes(replacementNodes, replacedNode, parentNode) {
106
+ var replacedChildNode = replacedNode, replacementChildNodes = replacementNodes; ///
107
+ parentNode.replaceChildNodes(replacedChildNode, replacementChildNodes);
108
+ }
109
+ function addNodeAfter(existingNode, addedNode, parentNode) {
110
+ var childNode = existingNode, index = parentNode.indexOfChildNode(childNode), addedChildNode = addedNode, startIndex = index + 1;
111
+ parentNode.addChildNode(addedChildNode, startIndex);
112
+ }
113
+ function addNodesAfter(existingNode, addedNodes, parentNode) {
114
+ var childNode = existingNode, index = parentNode.indexOfChildNode(childNode), addedChildNodes = addedNodes, startIndex = index + 1;
115
+ parentNode.addChildNodes(addedChildNodes, startIndex);
116
+ }
117
+ function appendTokens(appendedTokens, parentNode, tokens) {
118
+ var _tokens;
119
+ var node = parentNode, lastSignificantTokenIndex = node.getLastSignificantTokenIndex(tokens), start = lastSignificantTokenIndex + 1, deleteCount = 0;
120
+ (_tokens = tokens).splice.apply(_tokens, [
121
+ start,
122
+ deleteCount
123
+ ].concat(_to_consumable_array(appendedTokens)));
124
+ }
125
+ function prependTokens(prependedTokens, parentNode, tokens) {
126
+ var _tokens;
127
+ var node = parentNode, firstSignificantTokenIndex = node.getFirstSignificantTokenIndex(tokens), start = firstSignificantTokenIndex, deleteCount = 0;
128
+ (_tokens = tokens).splice.apply(_tokens, [
129
+ start,
130
+ deleteCount
131
+ ].concat(_to_consumable_array(prependedTokens)));
132
+ }
133
+ function removeTokens(removedNode, tokens) {
134
+ var node = removedNode, firstSignificantTokenIndex = node.getFirstSignificantTokenIndex(tokens), lastSignificantTokenIndex = node.getLastSignificantTokenIndex(tokens), start = firstSignificantTokenIndex, end = lastSignificantTokenIndex + 1, deleteCount = end - start;
135
+ tokens.splice(start, deleteCount);
136
+ }
137
+ function replaceTokens(replacementTokens, replacedNode, tokens) {
138
+ var _tokens;
139
+ var node = replacedNode, firstSignificantTokenIndex = node.getFirstSignificantTokenIndex(tokens), lastSignificantTokenIndex = node.getLastSignificantTokenIndex(tokens), start = firstSignificantTokenIndex, end = lastSignificantTokenIndex + 1, deleteCount = end - start;
140
+ (_tokens = tokens).splice.apply(_tokens, [
141
+ start,
142
+ deleteCount
143
+ ].concat(_to_consumable_array(replacementTokens)));
144
+ }
145
+ function addTokensAfter(existingNode, addedTokens, tokens) {
146
+ var _tokens;
147
+ var node = existingNode, lastSignificantTokenIndex = node.getLastSignificantTokenIndex(tokens), start = lastSignificantTokenIndex + 1, deleteCount = 0;
148
+ (_tokens = tokens).splice.apply(_tokens, [
149
+ start,
150
+ deleteCount
151
+ ].concat(_to_consumable_array(addedTokens)));
152
+ }
153
+ function overwriteClonedNodeTokens(clonedNode, clonedTokens, tokens) {
154
+ var offset = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : 0;
155
+ var node = clonedNode; ///
156
+ overwriteNodeTokens(node, clonedTokens, tokens, offset);
157
+ }
158
+ function clonedTokensFromNodeAndTokens(node, tokens) {
159
+ var firstSignificantTokenIndex = node.getFirstSignificantTokenIndex(tokens), lastSignificantTokenIndex = node.getLastSignificantTokenIndex(tokens), start = firstSignificantTokenIndex, end = lastSignificantTokenIndex + 1;
160
+ tokens = tokens.slice(start, end); ///
161
+ var clonedTokens = tokens.map(function(token) {
162
+ var clonedToken = token.clone();
163
+ return clonedToken;
164
+ });
165
+ return clonedTokens;
166
+ }
167
+ function overwriteNodeTokens(node, clonedTokens, tokens, offset) {
168
+ var nodeTerminalNode = node.isTerminalNode();
169
+ if (nodeTerminalNode) {
170
+ var terminalNode = node; ///
171
+ overwriteTerminalNodeTokens(terminalNode, clonedTokens, tokens, offset);
172
+ } else {
173
+ var nonTerminalNode = node; ///
174
+ overwriteNonTerminalNodeTokens(nonTerminalNode, clonedTokens, tokens, offset);
175
+ }
176
+ }
177
+ function overwriteTerminalNodeTokens(terminalNode, clonedTokens, tokens, offset) {
178
+ var index, significantToken;
179
+ significantToken = terminalNode.getSignificantToken();
180
+ if (significantToken !== null) {
181
+ index = tokens.indexOf(significantToken);
182
+ index -= offset;
183
+ var clonedToken = clonedTokens[index];
184
+ significantToken = clonedToken; ///
185
+ terminalNode.setSignificantToken(significantToken);
186
+ }
187
+ }
188
+ function overwriteNonTerminalNodeTokens(nonTerminalNode, clonedTokens, tokens, offset) {
189
+ nonTerminalNode.forEachChildNode(function(childNode) {
190
+ var clonedNode = childNode; ///
191
+ overwriteNodeTokens(clonedNode, clonedTokens, tokens, offset);
192
+ });
193
+ }
194
+
195
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvdHJhbnNmb3JtLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kTm9kZShhcHBlbmRlZE5vZGUsIHBhcmVudE5vZGUpIHtcbiAgY29uc3QgYXBwZW5kZWRDaGlsZE5vZGUgPSBhcHBlbmRlZE5vZGU7ICAvLy9cblxuICBwYXJlbnROb2RlLmFwcGVuZENoaWxkTm9kZShhcHBlbmRlZENoaWxkTm9kZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVwZW5kTm9kZShwcmVwZW5kZWROb2RlLCBwYXJlbnROb2RlKSB7XG4gIGNvbnN0IHByZXBlbmRlZENoaWxkTm9kZSA9IHByZXBlbmRlZE5vZGU7ICAvLy9cblxuICBwYXJlbnROb2RlLnByZXBlbmRDaGlsZE5vZGUocHJlcGVuZGVkQ2hpbGROb2RlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZU5vZGUocmVtb3ZlZE5vZGUsIHBhcmVudE5vZGUpIHtcbiAgY29uc3QgcmVtb3ZlZENoaWxkTm9kZSA9IHJlbW92ZWROb2RlOyAvLy9cblxuICBwYXJlbnROb2RlLnJlbW92ZUNoaWxkTm9kZShyZW1vdmVkQ2hpbGROb2RlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZU5vZGVzKHJlbW92ZWROb2RlcywgcGFyZW50Tm9kZSkge1xuICBjb25zdCByZW1vdmVkQ2hpbGROb2RlcyA9IHJlbW92ZWROb2RlczsgLy8vXG5cbiAgcGFyZW50Tm9kZS5yZW1vdmVDaGlsZE5vZGVzKHJlbW92ZWRDaGlsZE5vZGVzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VOb2RlKHJlcGxhY2VtZW50Tm9kZSwgcmVwbGFjZWROb2RlLCBwYXJlbnROb2RlKSB7XG4gIGNvbnN0IHJlcGxhY2VkQ2hpbGROb2RlID0gcmVwbGFjZWROb2RlLCAgLy8vXG4gICAgICAgIHJlcGxhY2VtZW50Q2hpbGROb2RlID0gcmVwbGFjZW1lbnROb2RlLCAvLy9cbiAgICAgICAgcmVwbGFjZW1lbnRDaGlsZE5vZGVzID0gW1xuICAgICAgICAgIHJlcGxhY2VtZW50Q2hpbGROb2RlXG4gICAgICAgIF07XG5cbiAgcGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGROb2RlKHJlcGxhY2VkQ2hpbGROb2RlLCByZXBsYWNlbWVudENoaWxkTm9kZXMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZU5vZGVzKHJlcGxhY2VtZW50Tm9kZXMsIHJlcGxhY2VkTm9kZSwgcGFyZW50Tm9kZSkge1xuICBjb25zdCByZXBsYWNlZENoaWxkTm9kZSA9IHJlcGxhY2VkTm9kZSwgIC8vL1xuICAgICAgICByZXBsYWNlbWVudENoaWxkTm9kZXMgPSByZXBsYWNlbWVudE5vZGVzOyAvLy9cblxuICBwYXJlbnROb2RlLnJlcGxhY2VDaGlsZE5vZGVzKHJlcGxhY2VkQ2hpbGROb2RlLCByZXBsYWNlbWVudENoaWxkTm9kZXMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWRkTm9kZUFmdGVyKGV4aXN0aW5nTm9kZSwgYWRkZWROb2RlLCBwYXJlbnROb2RlKSB7XG4gIGNvbnN0IGNoaWxkTm9kZSA9IGV4aXN0aW5nTm9kZSwgLy8vXG4gICAgICAgIGluZGV4ID0gcGFyZW50Tm9kZS5pbmRleE9mQ2hpbGROb2RlKGNoaWxkTm9kZSksXG4gICAgICAgIGFkZGVkQ2hpbGROb2RlID0gYWRkZWROb2RlLCAvLy9cbiAgICAgICAgc3RhcnRJbmRleCA9IGluZGV4ICsgMTtcblxuICBwYXJlbnROb2RlLmFkZENoaWxkTm9kZShhZGRlZENoaWxkTm9kZSwgc3RhcnRJbmRleCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGROb2Rlc0FmdGVyKGV4aXN0aW5nTm9kZSwgYWRkZWROb2RlcywgcGFyZW50Tm9kZSkge1xuICBjb25zdCBjaGlsZE5vZGUgPSBleGlzdGluZ05vZGUsIC8vL1xuICAgICAgICBpbmRleCA9IHBhcmVudE5vZGUuaW5kZXhPZkNoaWxkTm9kZShjaGlsZE5vZGUpLFxuICAgICAgICBhZGRlZENoaWxkTm9kZXMgPSBhZGRlZE5vZGVzLCAvLy9cbiAgICAgICAgc3RhcnRJbmRleCA9IGluZGV4ICsgMTtcblxuICBwYXJlbnROb2RlLmFkZENoaWxkTm9kZXMoYWRkZWRDaGlsZE5vZGVzLCBzdGFydEluZGV4KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGVuZFRva2VucyhhcHBlbmRlZFRva2VucywgcGFyZW50Tm9kZSwgdG9rZW5zKSB7XG4gIGNvbnN0IG5vZGUgPSBwYXJlbnROb2RlLCAvLy9cbiAgICAgICAgbGFzdFNpZ25pZmljYW50VG9rZW5JbmRleCA9IG5vZGUuZ2V0TGFzdFNpZ25pZmljYW50VG9rZW5JbmRleCh0b2tlbnMpLFxuICAgICAgICBzdGFydCA9IGxhc3RTaWduaWZpY2FudFRva2VuSW5kZXggKyAxLFxuICAgICAgICBkZWxldGVDb3VudCA9IDA7XG5cbiAgdG9rZW5zLnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQsIC4uLmFwcGVuZGVkVG9rZW5zKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBlbmRUb2tlbnMocHJlcGVuZGVkVG9rZW5zLCBwYXJlbnROb2RlLCB0b2tlbnMpIHtcbiAgY29uc3Qgbm9kZSA9IHBhcmVudE5vZGUsIC8vL1xuICAgICAgICBmaXJzdFNpZ25pZmljYW50VG9rZW5JbmRleCA9IG5vZGUuZ2V0Rmlyc3RTaWduaWZpY2FudFRva2VuSW5kZXgodG9rZW5zKSxcbiAgICAgICAgc3RhcnQgPSBmaXJzdFNpZ25pZmljYW50VG9rZW5JbmRleCxcbiAgICAgICAgZGVsZXRlQ291bnQgPSAwO1xuXG4gIHRva2Vucy5zcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50LCAuLi5wcmVwZW5kZWRUb2tlbnMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlVG9rZW5zKHJlbW92ZWROb2RlLCB0b2tlbnMpIHtcbiAgY29uc3Qgbm9kZSA9IHJlbW92ZWROb2RlLCAgLy8vXG4gICAgICAgIGZpcnN0U2lnbmlmaWNhbnRUb2tlbkluZGV4ID0gbm9kZS5nZXRGaXJzdFNpZ25pZmljYW50VG9rZW5JbmRleCh0b2tlbnMpLFxuICAgICAgICBsYXN0U2lnbmlmaWNhbnRUb2tlbkluZGV4ID0gbm9kZS5nZXRMYXN0U2lnbmlmaWNhbnRUb2tlbkluZGV4KHRva2VucyksXG4gICAgICAgIHN0YXJ0ID0gZmlyc3RTaWduaWZpY2FudFRva2VuSW5kZXgsIC8vL1xuICAgICAgICBlbmQgPSBsYXN0U2lnbmlmaWNhbnRUb2tlbkluZGV4ICsgMSxcbiAgICAgICAgZGVsZXRlQ291bnQgPSBlbmQgLSBzdGFydDtcblxuICB0b2tlbnMuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlVG9rZW5zKHJlcGxhY2VtZW50VG9rZW5zLCByZXBsYWNlZE5vZGUsIHRva2Vucykge1xuICBjb25zdCBub2RlID0gcmVwbGFjZWROb2RlLCAgLy8vXG4gICAgICAgIGZpcnN0U2lnbmlmaWNhbnRUb2tlbkluZGV4ID0gbm9kZS5nZXRGaXJzdFNpZ25pZmljYW50VG9rZW5JbmRleCh0b2tlbnMpLFxuICAgICAgICBsYXN0U2lnbmlmaWNhbnRUb2tlbkluZGV4ID0gbm9kZS5nZXRMYXN0U2lnbmlmaWNhbnRUb2tlbkluZGV4KHRva2VucyksXG4gICAgICAgIHN0YXJ0ID0gZmlyc3RTaWduaWZpY2FudFRva2VuSW5kZXgsIC8vL1xuICAgICAgICBlbmQgPSBsYXN0U2lnbmlmaWNhbnRUb2tlbkluZGV4ICsgMSxcbiAgICAgICAgZGVsZXRlQ291bnQgPSBlbmQgLSBzdGFydDtcblxuICB0b2tlbnMuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCwgLi4ucmVwbGFjZW1lbnRUb2tlbnMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWRkVG9rZW5zQWZ0ZXIoZXhpc3RpbmdOb2RlLCBhZGRlZFRva2VucywgdG9rZW5zKSB7XG4gIGNvbnN0IG5vZGUgPSBleGlzdGluZ05vZGUsICAvLy9cbiAgICAgICAgbGFzdFNpZ25pZmljYW50VG9rZW5JbmRleCA9IG5vZGUuZ2V0TGFzdFNpZ25pZmljYW50VG9rZW5JbmRleCh0b2tlbnMpLFxuICAgICAgICBzdGFydCA9IGxhc3RTaWduaWZpY2FudFRva2VuSW5kZXggKyAxLFxuICAgICAgICBkZWxldGVDb3VudCA9IDA7XG5cbiAgdG9rZW5zLnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQsIC4uLmFkZGVkVG9rZW5zKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG92ZXJ3cml0ZUNsb25lZE5vZGVUb2tlbnMoY2xvbmVkTm9kZSwgY2xvbmVkVG9rZW5zLCB0b2tlbnMsIG9mZnNldCA9IDApIHtcbiAgY29uc3Qgbm9kZSA9IGNsb25lZE5vZGU7ICAvLy9cblxuICBvdmVyd3JpdGVOb2RlVG9rZW5zKG5vZGUsIGNsb25lZFRva2VucywgdG9rZW5zLCBvZmZzZXQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xvbmVkVG9rZW5zRnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gIGNvbnN0IGZpcnN0U2lnbmlmaWNhbnRUb2tlbkluZGV4ID0gbm9kZS5nZXRGaXJzdFNpZ25pZmljYW50VG9rZW5JbmRleCh0b2tlbnMpLFxuICAgICAgICBsYXN0U2lnbmlmaWNhbnRUb2tlbkluZGV4ID0gbm9kZS5nZXRMYXN0U2lnbmlmaWNhbnRUb2tlbkluZGV4KHRva2VucyksXG4gICAgICAgIHN0YXJ0ID0gZmlyc3RTaWduaWZpY2FudFRva2VuSW5kZXgsICAvLy9cbiAgICAgICAgZW5kID0gbGFzdFNpZ25pZmljYW50VG9rZW5JbmRleCArIDE7XG5cbiAgdG9rZW5zID0gdG9rZW5zLnNsaWNlKHN0YXJ0LCBlbmQpOyAgLy8vXG5cbiAgY29uc3QgY2xvbmVkVG9rZW5zID0gdG9rZW5zLm1hcCgodG9rZW4pID0+IHsgIC8vL1xuICAgIGNvbnN0IGNsb25lZFRva2VuID0gdG9rZW4uY2xvbmUoKTtcblxuICAgIHJldHVybiBjbG9uZWRUb2tlbjtcbiAgfSk7XG5cbiAgcmV0dXJuIGNsb25lZFRva2Vucztcbn1cblxuZnVuY3Rpb24gb3ZlcndyaXRlTm9kZVRva2Vucyhub2RlLCBjbG9uZWRUb2tlbnMsIHRva2Vucywgb2Zmc2V0KSB7XG4gIGNvbnN0IG5vZGVUZXJtaW5hbE5vZGUgPSBub2RlLmlzVGVybWluYWxOb2RlKCk7XG5cbiAgaWYgKG5vZGVUZXJtaW5hbE5vZGUpIHtcbiAgICBjb25zdCB0ZXJtaW5hbE5vZGUgPSBub2RlOyAgLy8vXG5cbiAgICBvdmVyd3JpdGVUZXJtaW5hbE5vZGVUb2tlbnModGVybWluYWxOb2RlLCBjbG9uZWRUb2tlbnMsIHRva2Vucywgb2Zmc2V0KTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBub2RlOyAgLy8vXG5cbiAgICBvdmVyd3JpdGVOb25UZXJtaW5hbE5vZGVUb2tlbnMobm9uVGVybWluYWxOb2RlLCBjbG9uZWRUb2tlbnMsIHRva2Vucywgb2Zmc2V0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBvdmVyd3JpdGVUZXJtaW5hbE5vZGVUb2tlbnModGVybWluYWxOb2RlLCBjbG9uZWRUb2tlbnMsIHRva2Vucywgb2Zmc2V0KSB7XG4gIGxldCBpbmRleCxcbiAgICAgIHNpZ25pZmljYW50VG9rZW47XG5cbiAgc2lnbmlmaWNhbnRUb2tlbiA9IHRlcm1pbmFsTm9kZS5nZXRTaWduaWZpY2FudFRva2VuKCk7XG5cbiAgaWYgKHNpZ25pZmljYW50VG9rZW4gIT09IG51bGwpIHtcbiAgICBpbmRleCA9IHRva2Vucy5pbmRleE9mKHNpZ25pZmljYW50VG9rZW4pO1xuXG4gICAgaW5kZXggLT0gb2Zmc2V0O1xuXG4gICAgY29uc3QgY2xvbmVkVG9rZW4gPSBjbG9uZWRUb2tlbnNbaW5kZXhdO1xuXG4gICAgc2lnbmlmaWNhbnRUb2tlbiA9IGNsb25lZFRva2VuOyAgLy8vXG5cbiAgICB0ZXJtaW5hbE5vZGUuc2V0U2lnbmlmaWNhbnRUb2tlbihzaWduaWZpY2FudFRva2VuKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBvdmVyd3JpdGVOb25UZXJtaW5hbE5vZGVUb2tlbnMobm9uVGVybWluYWxOb2RlLCBjbG9uZWRUb2tlbnMsIHRva2Vucywgb2Zmc2V0KSB7XG4gIG5vblRlcm1pbmFsTm9kZS5mb3JFYWNoQ2hpbGROb2RlKChjaGlsZE5vZGUpID0+IHtcbiAgICBjb25zdCBjbG9uZWROb2RlID0gY2hpbGROb2RlOyAvLy9cblxuICAgIG92ZXJ3cml0ZU5vZGVUb2tlbnMoY2xvbmVkTm9kZSwgY2xvbmVkVG9rZW5zLCB0b2tlbnMsIG9mZnNldCk7XG4gIH0pO1xufVxuIl0sIm5hbWVzIjpbImFkZE5vZGVBZnRlciIsImFkZE5vZGVzQWZ0ZXIiLCJhZGRUb2tlbnNBZnRlciIsImFwcGVuZE5vZGUiLCJhcHBlbmRUb2tlbnMiLCJjbG9uZWRUb2tlbnNGcm9tTm9kZUFuZFRva2VucyIsIm92ZXJ3cml0ZUNsb25lZE5vZGVUb2tlbnMiLCJwcmVwZW5kTm9kZSIsInByZXBlbmRUb2tlbnMiLCJyZW1vdmVOb2RlIiwicmVtb3ZlTm9kZXMiLCJyZW1vdmVUb2tlbnMiLCJyZXBsYWNlTm9kZSIsInJlcGxhY2VOb2RlcyIsInJlcGxhY2VUb2tlbnMiLCJhcHBlbmRlZE5vZGUiLCJwYXJlbnROb2RlIiwiYXBwZW5kZWRDaGlsZE5vZGUiLCJhcHBlbmRDaGlsZE5vZGUiLCJwcmVwZW5kZWROb2RlIiwicHJlcGVuZGVkQ2hpbGROb2RlIiwicHJlcGVuZENoaWxkTm9kZSIsInJlbW92ZWROb2RlIiwicmVtb3ZlZENoaWxkTm9kZSIsInJlbW92ZUNoaWxkTm9kZSIsInJlbW92ZWROb2RlcyIsInJlbW92ZWRDaGlsZE5vZGVzIiwicmVtb3ZlQ2hpbGROb2RlcyIsInJlcGxhY2VtZW50Tm9kZSIsInJlcGxhY2VkTm9kZSIsInJlcGxhY2VkQ2hpbGROb2RlIiwicmVwbGFjZW1lbnRDaGlsZE5vZGUiLCJyZXBsYWNlbWVudENoaWxkTm9kZXMiLCJyZXBsYWNlQ2hpbGROb2RlIiwicmVwbGFjZW1lbnROb2RlcyIsInJlcGxhY2VDaGlsZE5vZGVzIiwiZXhpc3RpbmdOb2RlIiwiYWRkZWROb2RlIiwiY2hpbGROb2RlIiwiaW5kZXgiLCJpbmRleE9mQ2hpbGROb2RlIiwiYWRkZWRDaGlsZE5vZGUiLCJzdGFydEluZGV4IiwiYWRkQ2hpbGROb2RlIiwiYWRkZWROb2RlcyIsImFkZGVkQ2hpbGROb2RlcyIsImFkZENoaWxkTm9kZXMiLCJhcHBlbmRlZFRva2VucyIsInRva2VucyIsIm5vZGUiLCJsYXN0U2lnbmlmaWNhbnRUb2tlbkluZGV4IiwiZ2V0TGFzdFNpZ25pZmljYW50VG9rZW5JbmRleCIsInN0YXJ0IiwiZGVsZXRlQ291bnQiLCJzcGxpY2UiLCJwcmVwZW5kZWRUb2tlbnMiLCJmaXJzdFNpZ25pZmljYW50VG9rZW5JbmRleCIsImdldEZpcnN0U2lnbmlmaWNhbnRUb2tlbkluZGV4IiwiZW5kIiwicmVwbGFjZW1lbnRUb2tlbnMiLCJhZGRlZFRva2VucyIsImNsb25lZE5vZGUiLCJjbG9uZWRUb2tlbnMiLCJvZmZzZXQiLCJvdmVyd3JpdGVOb2RlVG9rZW5zIiwic2xpY2UiLCJtYXAiLCJ0b2tlbiIsImNsb25lZFRva2VuIiwiY2xvbmUiLCJub2RlVGVybWluYWxOb2RlIiwiaXNUZXJtaW5hbE5vZGUiLCJ0ZXJtaW5hbE5vZGUiLCJvdmVyd3JpdGVUZXJtaW5hbE5vZGVUb2tlbnMiLCJub25UZXJtaW5hbE5vZGUiLCJvdmVyd3JpdGVOb25UZXJtaW5hbE5vZGVUb2tlbnMiLCJzaWduaWZpY2FudFRva2VuIiwiZ2V0U2lnbmlmaWNhbnRUb2tlbiIsImluZGV4T2YiLCJzZXRTaWduaWZpY2FudFRva2VuIiwiZm9yRWFjaENoaWxkTm9kZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O0lBMkNnQkEsWUFBWTtlQUFaQTs7SUFTQUMsYUFBYTtlQUFiQTs7SUFpREFDLGNBQWM7ZUFBZEE7O0lBbkdBQyxVQUFVO2VBQVZBOztJQTJEQUMsWUFBWTtlQUFaQTs7SUF1REFDLDZCQUE2QjtlQUE3QkE7O0lBTkFDLHlCQUF5QjtlQUF6QkE7O0lBdEdBQyxXQUFX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
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "occam-dom",
3
3
  "author": "James Smith",
4
- "version": "5.0.14",
4
+ "version": "5.1.1",
5
5
  "license": "MIT, Anti-996",
6
6
  "homepage": "https://github.com/djalbat/occam-dom",
7
7
  "description": "Occam's DOM related functionality.",
package/src/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  "use strict";
2
2
 
3
3
  export { default as Node } from "./node";
4
+ export { default as Transform } from "./transform";
4
5
  export { default as nodeUtilities } from "./utilities/node";
package/src/node.js CHANGED
@@ -78,7 +78,7 @@ export default class Node {
78
78
  return parseTree;
79
79
  }
80
80
 
81
- static fromNothing(Class) {
81
+ static fromNothing(Class, ...remainingArguments) {
82
82
  if (Class === undefined) {
83
83
  Class = Node; ///
84
84
  }
@@ -86,12 +86,12 @@ export default class Node {
86
86
  const outerNode = null,
87
87
  parentNode = null,
88
88
  childNodes = [],
89
- node = new Class(outerNode, parentNode, childNodes);
89
+ node = new Class(outerNode, parentNode, childNodes, ...remainingArguments);
90
90
 
91
91
  return node;
92
92
  }
93
93
 
94
- static fromOuterNode(Class, outerNode) {
94
+ static fromOuterNode(Class, outerNode, ...remainingArguments) {
95
95
  if (outerNode === undefined) {
96
96
  outerNode = Class; ///
97
97
 
@@ -100,7 +100,7 @@ export default class Node {
100
100
 
101
101
  const parentNode = null,
102
102
  childNodes = [],
103
- node = new Class(outerNode, parentNode, childNodes);
103
+ node = new Class(outerNode, parentNode, childNodes, ...remainingArguments);
104
104
 
105
105
  return node;
106
106
  }
@@ -0,0 +1,184 @@
1
+ "use strict";
2
+
3
+ import { arrayUtilities } from "necessary";
4
+
5
+ import { appendNode,
6
+ removeNode,
7
+ prependNode,
8
+ replaceNode,
9
+ appendTokens,
10
+ removeTokens,
11
+ replaceTokens,
12
+ addNodesAfter,
13
+ prependTokens,
14
+ addTokensAfter,
15
+ overwriteClonedNodeTokens,
16
+ clonedTokensFromNodeAndTokens, } from "./utilities/transform";
17
+
18
+ const { push } = arrayUtilities;
19
+
20
+ export default class Transform {
21
+ constructor(node, tokens) {
22
+ this.node = node;
23
+ this.tokens = tokens;
24
+ }
25
+
26
+ getNode() {
27
+ return this.node;
28
+ }
29
+
30
+ getTokens(tokens = []) {
31
+ push(tokens, this.tokens);
32
+
33
+ return this.tokens;
34
+ }
35
+
36
+ contract(Class, descendentNode, ...remainingArguments) {
37
+ if (descendentNode === undefined) {
38
+ descendentNode = Class; ///
39
+
40
+ Class = Transform; ///
41
+ }
42
+
43
+ const node = descendentNode, ///
44
+ tokens = this.tokens, ///
45
+ context = { ///
46
+ tokens
47
+ },
48
+ transform = Class.fromNode(node, ...remainingArguments, context);
49
+
50
+ return transform;
51
+ }
52
+
53
+ expand(Class, ascendantNode, ...remainingArguments) {
54
+ if (ascendantNode === undefined) {
55
+ ascendantNode = Class;
56
+
57
+ Class = Transform; ///
58
+ }
59
+
60
+ const node = ascendantNode, ///
61
+ tokens = this.tokens, ///
62
+ context = {
63
+ tokens
64
+ },
65
+ transform = Class.fromNode(node, ...remainingArguments, context);
66
+
67
+ return transform;
68
+ }
69
+
70
+ appendTo(parentNode, context) {
71
+ const { tokens } = context,
72
+ appendedNode = this.node, ///
73
+ appendedTokens = this.tokens; ///
74
+
75
+ appendNode(appendedNode, parentNode);
76
+
77
+ appendTokens(appendedTokens, parentNode, tokens);
78
+ }
79
+
80
+ prependTo(parentNode, context) {
81
+ const { tokens } = context,
82
+ prependedNode = this.node, ///
83
+ prependedTokens = this.tokens; ///
84
+
85
+ prependNode(prependedNode, parentNode);
86
+
87
+ prependTokens(prependedTokens, parentNode, tokens);
88
+ }
89
+
90
+ addAfter(existingNode, parentNode, context) {
91
+ const { tokens } = context,
92
+ markdownNode = this.node, ///
93
+ removedChildNodes = markdownNode.removeChildNodes(),
94
+ addedTokens = this.tokens, ///
95
+ addedNodes = removedChildNodes; ///
96
+
97
+ addNodesAfter(existingNode, addedNodes, parentNode);
98
+
99
+ addTokensAfter(existingNode, addedTokens, tokens);
100
+ }
101
+
102
+ replace(replacedNode, parentNode, context) {
103
+ const { tokens } = context,
104
+ replacementNode = this.node, ///
105
+ replacementTokens = this.tokens; ///
106
+
107
+ replaceNode(replacementNode, replacedNode, parentNode);
108
+
109
+ replaceTokens(replacementTokens, replacedNode, tokens);
110
+ }
111
+
112
+ removeFrom(removedNode, parentNode, context) {
113
+ const { tokens } = context;
114
+
115
+ removeTokens(removedNode, tokens);
116
+
117
+ removeNode(removedNode, parentNode);
118
+ }
119
+
120
+ clone(...remainingArguments) {
121
+ const clonedNode = this.node.clone(),
122
+ clonedTokens = clonedTokensFromNodeAndTokens(this.node, this.tokens);
123
+
124
+ overwriteClonedNodeTokens(clonedNode, clonedTokens, this.tokens);
125
+
126
+ const Class = this.constructor, ///
127
+ node = clonedNode, ///
128
+ tokens = clonedTokens, ///
129
+ transform = new Class(node, tokens, ...remainingArguments);
130
+
131
+ return transform
132
+ }
133
+
134
+ static fromNode(Class, node, ...remainingArguments) {
135
+ let context = remainingArguments.pop();
136
+
137
+ if (context === undefined) {
138
+ context = node; ///
139
+
140
+ node = Class; ///
141
+
142
+ Class = Transform; ///
143
+ }
144
+
145
+ let { tokens } = context;
146
+
147
+ const firstSignificantTokenIndex = node.getFirstSignificantTokenIndex(tokens),
148
+ clonedNode = node.clone();
149
+
150
+ let clonedTokens;
151
+
152
+ if (firstSignificantTokenIndex === null) {
153
+ clonedTokens = [];
154
+ } else {
155
+ const offset = firstSignificantTokenIndex; ///
156
+
157
+ clonedTokens = clonedTokensFromNodeAndTokens(node, tokens);
158
+
159
+ overwriteClonedNodeTokens(clonedNode, clonedTokens, tokens, offset);
160
+ }
161
+
162
+ node = clonedNode; ///
163
+
164
+ tokens = clonedTokens; ///
165
+
166
+ const transform = new Class(node, tokens, ...remainingArguments);
167
+
168
+ return transform;
169
+ }
170
+
171
+ static fromNodeAndTokens(Class, node, tokens, ...remainingArguments) {
172
+ if (tokens === undefined) {
173
+ tokens = node; ///
174
+
175
+ node = Class; ///
176
+
177
+ Class = Transform; ///
178
+ }
179
+
180
+ const transform = new Class(node, tokens, ...remainingArguments);
181
+
182
+ return transform;
183
+ }
184
+ }
@@ -0,0 +1,173 @@
1
+ "use strict";
2
+
3
+ export function appendNode(appendedNode, parentNode) {
4
+ const appendedChildNode = appendedNode; ///
5
+
6
+ parentNode.appendChildNode(appendedChildNode);
7
+ }
8
+
9
+ export function prependNode(prependedNode, parentNode) {
10
+ const prependedChildNode = prependedNode; ///
11
+
12
+ parentNode.prependChildNode(prependedChildNode);
13
+ }
14
+
15
+ export function removeNode(removedNode, parentNode) {
16
+ const removedChildNode = removedNode; ///
17
+
18
+ parentNode.removeChildNode(removedChildNode);
19
+ }
20
+
21
+ export function removeNodes(removedNodes, parentNode) {
22
+ const removedChildNodes = removedNodes; ///
23
+
24
+ parentNode.removeChildNodes(removedChildNodes);
25
+ }
26
+
27
+ export function replaceNode(replacementNode, replacedNode, parentNode) {
28
+ const replacedChildNode = replacedNode, ///
29
+ replacementChildNode = replacementNode, ///
30
+ replacementChildNodes = [
31
+ replacementChildNode
32
+ ];
33
+
34
+ parentNode.replaceChildNode(replacedChildNode, replacementChildNodes);
35
+ }
36
+
37
+ export function replaceNodes(replacementNodes, replacedNode, parentNode) {
38
+ const replacedChildNode = replacedNode, ///
39
+ replacementChildNodes = replacementNodes; ///
40
+
41
+ parentNode.replaceChildNodes(replacedChildNode, replacementChildNodes);
42
+ }
43
+
44
+ export function addNodeAfter(existingNode, addedNode, parentNode) {
45
+ const childNode = existingNode, ///
46
+ index = parentNode.indexOfChildNode(childNode),
47
+ addedChildNode = addedNode, ///
48
+ startIndex = index + 1;
49
+
50
+ parentNode.addChildNode(addedChildNode, startIndex);
51
+ }
52
+
53
+ export function addNodesAfter(existingNode, addedNodes, parentNode) {
54
+ const childNode = existingNode, ///
55
+ index = parentNode.indexOfChildNode(childNode),
56
+ addedChildNodes = addedNodes, ///
57
+ startIndex = index + 1;
58
+
59
+ parentNode.addChildNodes(addedChildNodes, startIndex);
60
+ }
61
+
62
+ export function appendTokens(appendedTokens, parentNode, tokens) {
63
+ const node = parentNode, ///
64
+ lastSignificantTokenIndex = node.getLastSignificantTokenIndex(tokens),
65
+ start = lastSignificantTokenIndex + 1,
66
+ deleteCount = 0;
67
+
68
+ tokens.splice(start, deleteCount, ...appendedTokens);
69
+ }
70
+
71
+ export function prependTokens(prependedTokens, parentNode, tokens) {
72
+ const node = parentNode, ///
73
+ firstSignificantTokenIndex = node.getFirstSignificantTokenIndex(tokens),
74
+ start = firstSignificantTokenIndex,
75
+ deleteCount = 0;
76
+
77
+ tokens.splice(start, deleteCount, ...prependedTokens);
78
+ }
79
+
80
+ export function removeTokens(removedNode, tokens) {
81
+ const node = removedNode, ///
82
+ firstSignificantTokenIndex = node.getFirstSignificantTokenIndex(tokens),
83
+ lastSignificantTokenIndex = node.getLastSignificantTokenIndex(tokens),
84
+ start = firstSignificantTokenIndex, ///
85
+ end = lastSignificantTokenIndex + 1,
86
+ deleteCount = end - start;
87
+
88
+ tokens.splice(start, deleteCount);
89
+ }
90
+
91
+ export function replaceTokens(replacementTokens, replacedNode, tokens) {
92
+ const node = replacedNode, ///
93
+ firstSignificantTokenIndex = node.getFirstSignificantTokenIndex(tokens),
94
+ lastSignificantTokenIndex = node.getLastSignificantTokenIndex(tokens),
95
+ start = firstSignificantTokenIndex, ///
96
+ end = lastSignificantTokenIndex + 1,
97
+ deleteCount = end - start;
98
+
99
+ tokens.splice(start, deleteCount, ...replacementTokens);
100
+ }
101
+
102
+ export function addTokensAfter(existingNode, addedTokens, tokens) {
103
+ const node = existingNode, ///
104
+ lastSignificantTokenIndex = node.getLastSignificantTokenIndex(tokens),
105
+ start = lastSignificantTokenIndex + 1,
106
+ deleteCount = 0;
107
+
108
+ tokens.splice(start, deleteCount, ...addedTokens);
109
+ }
110
+
111
+ export function overwriteClonedNodeTokens(clonedNode, clonedTokens, tokens, offset = 0) {
112
+ const node = clonedNode; ///
113
+
114
+ overwriteNodeTokens(node, clonedTokens, tokens, offset);
115
+ }
116
+
117
+ export function clonedTokensFromNodeAndTokens(node, tokens) {
118
+ const firstSignificantTokenIndex = node.getFirstSignificantTokenIndex(tokens),
119
+ lastSignificantTokenIndex = node.getLastSignificantTokenIndex(tokens),
120
+ start = firstSignificantTokenIndex, ///
121
+ end = lastSignificantTokenIndex + 1;
122
+
123
+ tokens = tokens.slice(start, end); ///
124
+
125
+ const clonedTokens = tokens.map((token) => { ///
126
+ const clonedToken = token.clone();
127
+
128
+ return clonedToken;
129
+ });
130
+
131
+ return clonedTokens;
132
+ }
133
+
134
+ function overwriteNodeTokens(node, clonedTokens, tokens, offset) {
135
+ const nodeTerminalNode = node.isTerminalNode();
136
+
137
+ if (nodeTerminalNode) {
138
+ const terminalNode = node; ///
139
+
140
+ overwriteTerminalNodeTokens(terminalNode, clonedTokens, tokens, offset);
141
+ } else {
142
+ const nonTerminalNode = node; ///
143
+
144
+ overwriteNonTerminalNodeTokens(nonTerminalNode, clonedTokens, tokens, offset);
145
+ }
146
+ }
147
+
148
+ function overwriteTerminalNodeTokens(terminalNode, clonedTokens, tokens, offset) {
149
+ let index,
150
+ significantToken;
151
+
152
+ significantToken = terminalNode.getSignificantToken();
153
+
154
+ if (significantToken !== null) {
155
+ index = tokens.indexOf(significantToken);
156
+
157
+ index -= offset;
158
+
159
+ const clonedToken = clonedTokens[index];
160
+
161
+ significantToken = clonedToken; ///
162
+
163
+ terminalNode.setSignificantToken(significantToken);
164
+ }
165
+ }
166
+
167
+ function overwriteNonTerminalNodeTokens(nonTerminalNode, clonedTokens, tokens, offset) {
168
+ nonTerminalNode.forEachChildNode((childNode) => {
169
+ const clonedNode = childNode; ///
170
+
171
+ overwriteNodeTokens(clonedNode, clonedTokens, tokens, offset);
172
+ });
173
+ }