occam-dom 4.0.16 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/bin/main.js +15 -0
  2. package/example.js +37842 -0
  3. package/index.html +47 -0
  4. package/lib/constants.js +13 -0
  5. package/lib/example/utilities/token.js +28 -0
  6. package/lib/example/view/div/sizeable.js +39 -0
  7. package/lib/example/view/input/expressionString.js +142 -0
  8. package/lib/example/view/input/maximumDepth.js +143 -0
  9. package/lib/example/view/input.js +39 -0
  10. package/lib/example/view/subHeading.js +39 -0
  11. package/lib/example/view/textarea/content.js +142 -0
  12. package/lib/example/view/textarea/nodes.js +155 -0
  13. package/lib/example/view/textarea/parseTree.js +166 -0
  14. package/lib/example/view/textarea.js +39 -0
  15. package/lib/example/view.js +239 -0
  16. package/lib/example.js +19 -0
  17. package/lib/expression/bnf.js +14 -0
  18. package/lib/expression/entries.js +27 -0
  19. package/lib/expression/lexer.js +145 -0
  20. package/lib/expression/parser.js +134 -0
  21. package/lib/expression.js +113 -0
  22. package/lib/index.js +39 -0
  23. package/lib/path.js +69 -0
  24. package/lib/query.js +216 -0
  25. package/lib/ruleNames.js +54 -0
  26. package/lib/spread.js +113 -0
  27. package/lib/subExpression.js +101 -0
  28. package/lib/utilities/array.js +67 -0
  29. package/lib/utilities/node.js +334 -0
  30. package/lib/utilities/query.js +39 -0
  31. package/package.json +1 -1
  32. package/src/constants.js +3 -0
  33. package/src/example/utilities/token.js +19 -0
  34. package/src/example/view/div/sizeable.js +12 -0
  35. package/src/example/view/input/expressionString.js +33 -0
  36. package/src/example/view/input/maximumDepth.js +35 -0
  37. package/src/example/view/input.js +14 -0
  38. package/src/example/view/subHeading.js +16 -0
  39. package/src/example/view/textarea/content.js +33 -0
  40. package/src/example/view/textarea/nodes.js +55 -0
  41. package/src/example/view/textarea/parseTree.js +46 -0
  42. package/src/example/view/textarea.js +18 -0
  43. package/src/example/view.js +125 -0
  44. package/src/example.js +21 -0
  45. package/src/expression/bnf.js +63 -0
  46. package/src/expression/entries.js +18 -0
  47. package/src/expression/lexer.js +35 -0
  48. package/src/expression/parser.js +15 -0
  49. package/src/expression.js +82 -0
  50. package/src/index.js +7 -0
  51. package/src/path.js +32 -0
  52. package/src/query.js +207 -0
  53. package/src/ruleNames.js +12 -0
  54. package/src/spread.js +104 -0
  55. package/src/subExpression.js +52 -0
  56. package/src/utilities/array.js +30 -0
  57. package/src/utilities/node.js +454 -0
  58. package/src/utilities/query.js +22 -0
@@ -0,0 +1,334 @@
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
+ endIndexFromSpreadNode: function() {
13
+ return endIndexFromSpreadNode;
14
+ },
15
+ errorNodesFromExpressionNode: function() {
16
+ return errorNodesFromExpressionNode;
17
+ },
18
+ indexFromIndexNode: function() {
19
+ return indexFromIndexNode;
20
+ },
21
+ indexFromSpreadNode: function() {
22
+ return indexFromSpreadNode;
23
+ },
24
+ infiniteDescentFromPathNode: function() {
25
+ return infiniteDescentFromPathNode;
26
+ },
27
+ pathNodeFromExpressionNode: function() {
28
+ return pathNodeFromExpressionNode;
29
+ },
30
+ pathNodeFromSubExpressionNode: function() {
31
+ return pathNodeFromSubExpressionNode;
32
+ },
33
+ ruleNamesFromPathNode: function() {
34
+ return ruleNamesFromPathNode;
35
+ },
36
+ selectorNodesFromPathNode: function() {
37
+ return selectorNodesFromPathNode;
38
+ },
39
+ spreadNodeFromExpressionNode: function() {
40
+ return spreadNodeFromExpressionNode;
41
+ },
42
+ spreadNodeFromSubExpressionNode: function() {
43
+ return spreadNodeFromSubExpressionNode;
44
+ },
45
+ startIndexFromSpreadNode: function() {
46
+ return startIndexFromSpreadNode;
47
+ },
48
+ subExpressionNodeFromExpressionNode: function() {
49
+ return subExpressionNodeFromExpressionNode;
50
+ },
51
+ subExpressionNodeFromSubExpressionNode: function() {
52
+ return subExpressionNodeFromSubExpressionNode;
53
+ },
54
+ tokenTypesFromPathNode: function() {
55
+ return tokenTypesFromPathNode;
56
+ },
57
+ uniqueFromSpreadNode: function() {
58
+ return uniqueFromSpreadNode;
59
+ }
60
+ });
61
+ var _ruleNames = require("../ruleNames");
62
+ function indexFromIndexNode(indexNode) {
63
+ var nonTerminalNode = indexNode, index = fromFirstChildNode(nonTerminalNode, function(firstChildNode) {
64
+ var terminalNode = firstChildNode, content = terminalNode.getContent(), index = Number(content);
65
+ return index;
66
+ });
67
+ return index;
68
+ }
69
+ function ruleNamesFromPathNode(pathNode) {
70
+ var selectorNodes = selectorNodesFromPathNode(pathNode), ruleNameNodes = selectorNodes.reduce(function(ruleNameNodes, selectorNode) {
71
+ var nonTerminalNode = selectorNode, ruleNameNode = fromFirstChildNode(nonTerminalNode, function(firstChildNode) {
72
+ var ruleNameNode = null;
73
+ var nonTerminalNode = firstChildNode, ruleName = nonTerminalNode.getRuleName(), ruleNameRuleNameRuleName = ruleName === _ruleNames.RULE_NAME_RULE_NAME;
74
+ if (ruleNameRuleNameRuleName) {
75
+ ruleNameNode = nonTerminalNode; ///
76
+ }
77
+ return ruleNameNode;
78
+ });
79
+ if (ruleNameNode !== null) {
80
+ ruleNameNodes.push(ruleNameNode);
81
+ }
82
+ return ruleNameNodes;
83
+ }, []), ruleNames = ruleNameNodes.map(function(ruleNameNode) {
84
+ var nonTerminalNode = ruleNameNode, ruleName = fromFirstChildNode(nonTerminalNode, function(firstChildNode) {
85
+ var terminalNode = firstChildNode, content = terminalNode.getContent(), ruleName = content; ///
86
+ return ruleName;
87
+ });
88
+ return ruleName;
89
+ });
90
+ return ruleNames;
91
+ }
92
+ function tokenTypesFromPathNode(pathNode) {
93
+ var selectorNodes = selectorNodesFromPathNode(pathNode), tokenTypeNodes = selectorNodes.reduce(function(tokenTypeNodes, selectorNode) {
94
+ var nonTerminalNode = selectorNode, tokenTypeNode = fromFirstChildNode(nonTerminalNode, function(firstChildNode) {
95
+ var tokenTypeNode = null;
96
+ var nonTerminalNode = firstChildNode, ruleName = nonTerminalNode.getRuleName(), ruleNameTokenTypeRuleName = ruleName === _ruleNames.TOKEN_TYPE_RULE_NAME;
97
+ if (ruleNameTokenTypeRuleName) {
98
+ tokenTypeNode = nonTerminalNode; ///
99
+ }
100
+ return tokenTypeNode;
101
+ });
102
+ if (tokenTypeNode !== null) {
103
+ tokenTypeNodes.push(tokenTypeNode);
104
+ }
105
+ return tokenTypeNodes;
106
+ }, []), tokenTypes = tokenTypeNodes.map(function(tokenTypeNode) {
107
+ var nonTerminalNode = tokenTypeNode, tokenType = fromThirdChildNode(nonTerminalNode, function(thirdChildNode) {
108
+ var terminalNode = thirdChildNode, content = terminalNode.getContent(), tokenType = content; ///
109
+ return tokenType;
110
+ });
111
+ return tokenType;
112
+ });
113
+ return tokenTypes;
114
+ }
115
+ function selectorNodesFromPathNode(pathNode) {
116
+ var nonTerminalNode;
117
+ nonTerminalNode = pathNode; ///
118
+ var selectorsNode = fromLastChildNode(nonTerminalNode, function(lastChildNode) {
119
+ var selectorsNode = lastChildNode; ///
120
+ return selectorsNode;
121
+ });
122
+ nonTerminalNode = selectorsNode; ///
123
+ var selectorNodes = nonTerminalNode.filterChildNode(function(childNode) {
124
+ var childNodeNonTerminalNode = childNode.isNonTerminalNode();
125
+ if (childNodeNonTerminalNode) {
126
+ return true;
127
+ }
128
+ });
129
+ return selectorNodes;
130
+ }
131
+ function infiniteDescentFromPathNode(pathNode) {
132
+ var nonTerminalNode = pathNode, infiniteDescent = fromSecondChildNode(nonTerminalNode, function(secondChildNode) {
133
+ var nonTerminalNode = secondChildNode, ruleName = nonTerminalNode.getRuleName(), ruleNameInfiniteDescentRuleName = ruleName === _ruleNames.INFINITE_DESCENT_RULE_NAME, infiniteDescent = ruleNameInfiniteDescentRuleName; ///
134
+ return infiniteDescent;
135
+ }) || false;
136
+ return infiniteDescent;
137
+ }
138
+ function uniqueFromSpreadNode(spreadNode) {
139
+ var nonTerminalNode = spreadNode, unique = fromFirstChildNode(nonTerminalNode, function(firstChildNode) {
140
+ var unique = false;
141
+ var firstChildNodeNonTerminalNode = firstChildNode.isNonTerminalNode();
142
+ if (firstChildNodeNonTerminalNode) {
143
+ var nonTerminalNode = firstChildNode, ruleName = nonTerminalNode.getRuleName(), ruleNameUniqueRuleName = ruleName === _ruleNames.UNIQUE_RULE_NAME;
144
+ if (ruleNameUniqueRuleName) {
145
+ unique = true;
146
+ }
147
+ }
148
+ return unique;
149
+ });
150
+ return unique;
151
+ }
152
+ function indexFromSpreadNode(spreadNode) {
153
+ var index = null;
154
+ var nonTerminalNode = spreadNode, indexNode = nonTerminalNode.findChildNode(function(childNode) {
155
+ var childNodeNonTerminalNode = childNode.isNonTerminalNode();
156
+ if (childNodeNonTerminalNode) {
157
+ var nonTerminalNode = childNode, ruleName = nonTerminalNode.getRuleName(), ruleNameIndexRuleName = ruleName === _ruleNames.INDEX_RULE_NAME;
158
+ if (ruleNameIndexRuleName) {
159
+ return true;
160
+ }
161
+ }
162
+ }) || null;
163
+ if (indexNode !== null) {
164
+ index = indexFromIndexNode(indexNode);
165
+ }
166
+ return index;
167
+ }
168
+ function endIndexFromSpreadNode(spreadNode) {
169
+ var endIndex = Infinity;
170
+ var nonTerminalNode = spreadNode, endIndexNode = nonTerminalNode.findChildNode(function(childNode) {
171
+ var childNodeNonTerminalNode = childNode.isNonTerminalNode();
172
+ if (childNodeNonTerminalNode) {
173
+ var nonTerminalNode = childNode, ruleName = nonTerminalNode.getRuleName(), ruleNameEndIndexRuleName = ruleName === _ruleNames.END_INDEX_RULE_NAME;
174
+ if (ruleNameEndIndexRuleName) {
175
+ return true;
176
+ }
177
+ }
178
+ }) || null;
179
+ if (endIndexNode !== null) {
180
+ endIndex = indexFromIndexNode(endIndexNode);
181
+ }
182
+ return endIndex;
183
+ }
184
+ function startIndexFromSpreadNode(spreadNode) {
185
+ var startIndex = 0;
186
+ var nonTerminalNode = spreadNode, startIndexNode = nonTerminalNode.findChildNode(function(childNode) {
187
+ var childNodeNonTerminalNode = childNode.isNonTerminalNode();
188
+ if (childNodeNonTerminalNode) {
189
+ var nonTerminalNode = childNode, ruleName = nonTerminalNode.getRuleName(), ruleNameStartIndexRuleName = ruleName === _ruleNames.START_INDEX_RULE_NAME;
190
+ if (ruleNameStartIndexRuleName) {
191
+ return true;
192
+ }
193
+ }
194
+ }) || null;
195
+ if (startIndexNode !== null) {
196
+ startIndex = indexFromIndexNode(startIndexNode);
197
+ }
198
+ return startIndex;
199
+ }
200
+ function pathNodeFromExpressionNode(expressionNode) {
201
+ var nonTerminalNode = expressionNode, pathNode = fromFirstChildNode(nonTerminalNode, function(firstChildNode) {
202
+ var pathNode = firstChildNode; ///
203
+ return pathNode;
204
+ });
205
+ return pathNode;
206
+ }
207
+ function spreadNodeFromExpressionNode(expressionNode) {
208
+ var nonTerminalNode = expressionNode, spreadNode = fromSecondChildNode(nonTerminalNode, function(secondChildNode) {
209
+ var spreadNode = null;
210
+ var nonTerminalNode = secondChildNode, ruleName = nonTerminalNode.getRuleName(), ruleNameSpreadRuleName = ruleName === _ruleNames.SPREAD_RULE_NAME;
211
+ if (ruleNameSpreadRuleName) {
212
+ spreadNode = secondChildNode; ///
213
+ }
214
+ return spreadNode;
215
+ }) || null;
216
+ return spreadNode;
217
+ }
218
+ function errorNodesFromExpressionNode(expressionNode) {
219
+ var nonTerminalNode = expressionNode, errorNodes = nonTerminalNode.reduceChildNode(function(errorNodes, childNode) {
220
+ var childNodeNonTerminalNode = childNode.isNonTerminalNode();
221
+ if (childNodeNonTerminalNode) {
222
+ var nonTerminalNode = childNode, ruleName = nonTerminalNode.getRuleName(), ruleNameErrorRuleName = ruleName === _ruleNames.ERROR_RULE_NAME;
223
+ if (ruleNameErrorRuleName) {
224
+ var errorNode = nonTerminalNode; ///
225
+ errorNodes.push(errorNode);
226
+ }
227
+ }
228
+ return errorNodes;
229
+ }, []);
230
+ return errorNodes;
231
+ }
232
+ function subExpressionNodeFromExpressionNode(expressionNode) {
233
+ var subExpressionNode = null;
234
+ var nonTerminalNode = expressionNode, multiplicity = nonTerminalNode.getMultiplicity();
235
+ if (multiplicity > 1) {
236
+ subExpressionNode = fromLastChildNode(nonTerminalNode, function(lastChildNode) {
237
+ var subExpressionNode = null;
238
+ var nonTerminalNode = lastChildNode, ruleName = nonTerminalNode.getRuleName(), ruleNameSubExpressionRuleName = ruleName === _ruleNames.SUB_EXPRESSION_RULE_NAME;
239
+ if (ruleNameSubExpressionRuleName) {
240
+ subExpressionNode = lastChildNode; ///
241
+ }
242
+ return subExpressionNode;
243
+ });
244
+ }
245
+ return subExpressionNode;
246
+ }
247
+ function pathNodeFromSubExpressionNode(subExpressionNode) {
248
+ var nonTerminalNode = subExpressionNode, pathNode = fromFirstChildNode(nonTerminalNode, function(firstChildNode) {
249
+ var pathNode = firstChildNode; ///
250
+ return pathNode;
251
+ });
252
+ return pathNode;
253
+ }
254
+ function spreadNodeFromSubExpressionNode(subExpressionNode) {
255
+ var spreadNode = null;
256
+ var nonTerminalNode = subExpressionNode, multiplicity = nonTerminalNode.getMultiplicity();
257
+ if (multiplicity > 1) {
258
+ spreadNode = fromSecondChildNode(nonTerminalNode, function(secondChildNode) {
259
+ var spreadNode = null;
260
+ var nonTerminalNode = secondChildNode, ruleName = nonTerminalNode.getRuleName(), ruleNameSpreadRuleName = ruleName === _ruleNames.SPREAD_RULE_NAME;
261
+ if (ruleNameSpreadRuleName) {
262
+ spreadNode = secondChildNode; ///
263
+ }
264
+ return spreadNode;
265
+ }) || null;
266
+ }
267
+ return spreadNode;
268
+ }
269
+ function subExpressionNodeFromSubExpressionNode(subExpressionNode) {
270
+ var nonTerminalNode = subExpressionNode; ///
271
+ subExpressionNode = null;
272
+ var multiplicity = nonTerminalNode.getMultiplicity();
273
+ if (multiplicity > 1) {
274
+ subExpressionNode = fromLastChildNode(nonTerminalNode, function(lastChildNode) {
275
+ var _$subExpressionNode = null;
276
+ var nonTerminalNoe = lastChildNode, ruleName = nonTerminalNoe.getRuleName(), ruleNameSubExpressionRuleName = ruleName === _ruleNames.SUB_EXPRESSION_RULE_NAME;
277
+ if (ruleNameSubExpressionRuleName) {
278
+ _$subExpressionNode = lastChildNode; ///
279
+ }
280
+ return _$subExpressionNode;
281
+ });
282
+ }
283
+ return subExpressionNode;
284
+ }
285
+ function fromFirstChildNode(nonTerminalNode, callback) {
286
+ var result;
287
+ var firstIndex = 0;
288
+ nonTerminalNode.forwardsSomeChildNode(function(childNode, index) {
289
+ if (index === firstIndex) {
290
+ var firstChildNode = childNode; ///
291
+ result = callback(firstChildNode);
292
+ return true;
293
+ }
294
+ });
295
+ return result;
296
+ }
297
+ function fromSecondChildNode(nonTerminalNode, callback) {
298
+ var result;
299
+ var secondIndex = 1;
300
+ nonTerminalNode.forwardsSomeChildNode(function(childNode, index) {
301
+ if (index === secondIndex) {
302
+ var firstChildNode = childNode; ///
303
+ result = callback(firstChildNode);
304
+ return true;
305
+ }
306
+ });
307
+ return result;
308
+ }
309
+ function fromThirdChildNode(nonTerminalNode, callback) {
310
+ var result;
311
+ var thirdIndex = 2;
312
+ nonTerminalNode.forwardsSomeChildNode(function(childNode, index) {
313
+ if (index === thirdIndex) {
314
+ var thirdChildNode = childNode; ///
315
+ result = callback(thirdChildNode);
316
+ return true;
317
+ }
318
+ });
319
+ return result;
320
+ }
321
+ function fromLastChildNode(nonTerminalNode, callback) {
322
+ var result;
323
+ var multiplicity = nonTerminalNode.getMultiplicity(), lastIndex = multiplicity - 1;
324
+ nonTerminalNode.backwardsSomeChildNode(function(childNode, index) {
325
+ if (index === lastIndex) {
326
+ var thirdChildNode = childNode; ///
327
+ result = callback(thirdChildNode);
328
+ return true;
329
+ }
330
+ });
331
+ return result;
332
+ }
333
+
334
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvbm9kZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgRVJST1JfUlVMRV9OQU1FLFxuICAgICAgICAgSU5ERVhfUlVMRV9OQU1FLFxuICAgICAgICAgVU5JUVVFX1JVTEVfTkFNRSxcbiAgICAgICAgIFNQUkVBRF9SVUxFX05BTUUsXG4gICAgICAgICBFTkRfSU5ERVhfUlVMRV9OQU1FLFxuICAgICAgICAgUlVMRV9OQU1FX1JVTEVfTkFNRSxcbiAgICAgICAgIFRPS0VOX1RZUEVfUlVMRV9OQU1FLFxuICAgICAgICAgU1RBUlRfSU5ERVhfUlVMRV9OQU1FLFxuICAgICAgICAgU1VCX0VYUFJFU1NJT05fUlVMRV9OQU1FLFxuICAgICAgICAgSU5GSU5JVEVfREVTQ0VOVF9SVUxFX05BTUUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmRleEZyb21JbmRleE5vZGUoaW5kZXhOb2RlKSB7XG4gIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IGluZGV4Tm9kZSwgLy8vXG4gICAgICAgIGluZGV4ID0gZnJvbUZpcnN0Q2hpbGROb2RlKG5vblRlcm1pbmFsTm9kZSwgKGZpcnN0Q2hpbGROb2RlKSA9PiB7XG4gICAgICAgICAgY29uc3QgdGVybWluYWxOb2RlID0gZmlyc3RDaGlsZE5vZGUsICAvLy9cbiAgICAgICAgICAgICAgICBjb250ZW50ID0gdGVybWluYWxOb2RlLmdldENvbnRlbnQoKSxcbiAgICAgICAgICAgICAgICBpbmRleCA9IE51bWJlcihjb250ZW50KTtcblxuICAgICAgICAgIHJldHVybiBpbmRleDtcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIGluZGV4O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcnVsZU5hbWVzRnJvbVBhdGhOb2RlKHBhdGhOb2RlKSB7XG4gIGNvbnN0IHNlbGVjdG9yTm9kZXMgPSBzZWxlY3Rvck5vZGVzRnJvbVBhdGhOb2RlKHBhdGhOb2RlKSxcbiAgICAgICAgcnVsZU5hbWVOb2RlcyA9IHNlbGVjdG9yTm9kZXMucmVkdWNlKChydWxlTmFtZU5vZGVzLCBzZWxlY3Rvck5vZGUpID0+IHtcbiAgICAgICAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBzZWxlY3Rvck5vZGUsIC8vL1xuICAgICAgICAgICAgICAgIHJ1bGVOYW1lTm9kZSA9IGZyb21GaXJzdENoaWxkTm9kZShub25UZXJtaW5hbE5vZGUsIChmaXJzdENoaWxkTm9kZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgbGV0IHJ1bGVOYW1lTm9kZSA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IGZpcnN0Q2hpbGROb2RlLCAvLy9cbiAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGVOYW1lID0gbm9uVGVybWluYWxOb2RlLmdldFJ1bGVOYW1lKCksXG4gICAgICAgICAgICAgICAgICAgICAgICBydWxlTmFtZVJ1bGVOYW1lUnVsZU5hbWUgPSAocnVsZU5hbWUgPT09IFJVTEVfTkFNRV9SVUxFX05BTUUpO1xuXG4gICAgICAgICAgICAgICAgICBpZiAocnVsZU5hbWVSdWxlTmFtZVJ1bGVOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHJ1bGVOYW1lTm9kZSA9IG5vblRlcm1pbmFsTm9kZTsgLy8vXG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiBydWxlTmFtZU5vZGU7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpZiAocnVsZU5hbWVOb2RlICE9PSBudWxsKSB7XG4gICAgICAgICAgICBydWxlTmFtZU5vZGVzLnB1c2gocnVsZU5hbWVOb2RlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gcnVsZU5hbWVOb2RlcztcbiAgICAgICAgfSwgW10pLFxuICAgICAgICBydWxlTmFtZXMgPSBydWxlTmFtZU5vZGVzLm1hcCgocnVsZU5hbWVOb2RlKSA9PiB7XG4gICAgICAgICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gcnVsZU5hbWVOb2RlLCAvLy9cbiAgICAgICAgICAgICAgICBydWxlTmFtZSA9IGZyb21GaXJzdENoaWxkTm9kZShub25UZXJtaW5hbE5vZGUsIChmaXJzdENoaWxkTm9kZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3QgdGVybWluYWxOb2RlID0gZmlyc3RDaGlsZE5vZGUsICAvLy9cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQgPSB0ZXJtaW5hbE5vZGUuZ2V0Q29udGVudCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgcnVsZU5hbWUgPSBjb250ZW50OyAvLy9cblxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHJ1bGVOYW1lO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcmV0dXJuIHJ1bGVOYW1lO1xuICAgICAgICB9KTtcblxuICByZXR1cm4gcnVsZU5hbWVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9rZW5UeXBlc0Zyb21QYXRoTm9kZShwYXRoTm9kZSkge1xuICBjb25zdCBzZWxlY3Rvck5vZGVzID0gc2VsZWN0b3JOb2Rlc0Zyb21QYXRoTm9kZShwYXRoTm9kZSksXG4gICAgICAgIHRva2VuVHlwZU5vZGVzID0gc2VsZWN0b3JOb2Rlcy5yZWR1Y2UoKHRva2VuVHlwZU5vZGVzLCBzZWxlY3Rvck5vZGUpID0+IHtcbiAgICAgICAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBzZWxlY3Rvck5vZGUsIC8vL1xuICAgICAgICAgICAgICAgIHRva2VuVHlwZU5vZGUgPSBmcm9tRmlyc3RDaGlsZE5vZGUobm9uVGVybWluYWxOb2RlLCAoZmlyc3RDaGlsZE5vZGUpID0+IHtcbiAgICAgICAgICAgICAgICAgIGxldCB0b2tlblR5cGVOb2RlID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gZmlyc3RDaGlsZE5vZGUsIC8vL1xuICAgICAgICAgICAgICAgICAgICAgICAgcnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGVOYW1lVG9rZW5UeXBlUnVsZU5hbWUgPSAocnVsZU5hbWUgPT09IFRPS0VOX1RZUEVfUlVMRV9OQU1FKTtcblxuICAgICAgICAgICAgICAgICAgaWYgKHJ1bGVOYW1lVG9rZW5UeXBlUnVsZU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9rZW5UeXBlTm9kZSA9IG5vblRlcm1pbmFsTm9kZTsgLy8vXG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiB0b2tlblR5cGVOb2RlO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaWYgKHRva2VuVHlwZU5vZGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHRva2VuVHlwZU5vZGVzLnB1c2godG9rZW5UeXBlTm9kZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHRva2VuVHlwZU5vZGVzO1xuICAgICAgICB9LCBbXSksXG4gICAgICAgIHRva2VuVHlwZXMgPSB0b2tlblR5cGVOb2Rlcy5tYXAoKHRva2VuVHlwZU5vZGUpID0+IHtcbiAgICAgICAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSB0b2tlblR5cGVOb2RlLCAgLy8vXG4gICAgICAgICAgICAgICAgdG9rZW5UeXBlID0gZnJvbVRoaXJkQ2hpbGROb2RlKG5vblRlcm1pbmFsTm9kZSwgKHRoaXJkQ2hpbGROb2RlKSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCB0ZXJtaW5hbE5vZGUgPSB0aGlyZENoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudCA9IHRlcm1pbmFsTm9kZS5nZXRDb250ZW50KCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0b2tlblR5cGUgPSBjb250ZW50OyAgLy8vXG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiB0b2tlblR5cGU7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICByZXR1cm4gdG9rZW5UeXBlO1xuICAgICAgICB9KTtcblxuICByZXR1cm4gdG9rZW5UeXBlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlbGVjdG9yTm9kZXNGcm9tUGF0aE5vZGUocGF0aE5vZGUpIHtcbiAgbGV0IG5vblRlcm1pbmFsTm9kZTtcblxuICBub25UZXJtaW5hbE5vZGUgPSBwYXRoTm9kZTsgLy8vXG5cbiAgY29uc3Qgc2VsZWN0b3JzTm9kZSA9IGZyb21MYXN0Q2hpbGROb2RlKG5vblRlcm1pbmFsTm9kZSwgKGxhc3RDaGlsZE5vZGUpID0+IHtcbiAgICBjb25zdCBzZWxlY3RvcnNOb2RlID0gbGFzdENoaWxkTm9kZTsgIC8vL1xuXG4gICAgcmV0dXJuIHNlbGVjdG9yc05vZGU7XG4gIH0pO1xuXG4gIG5vblRlcm1pbmFsTm9kZSA9IHNlbGVjdG9yc05vZGU7ICAvLy9cblxuICBjb25zdCBzZWxlY3Rvck5vZGVzID0gbm9uVGVybWluYWxOb2RlLmZpbHRlckNoaWxkTm9kZSgoY2hpbGROb2RlKSA9PiB7XG4gICAgY29uc3QgY2hpbGROb2RlTm9uVGVybWluYWxOb2RlID0gY2hpbGROb2RlLmlzTm9uVGVybWluYWxOb2RlKCk7XG5cbiAgICBpZiAoY2hpbGROb2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBzZWxlY3Rvck5vZGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5maW5pdGVEZXNjZW50RnJvbVBhdGhOb2RlKHBhdGhOb2RlKSB7XG4gIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IHBhdGhOb2RlLCAvLy9cbiAgICAgICAgaW5maW5pdGVEZXNjZW50ID0gZnJvbVNlY29uZENoaWxkTm9kZShub25UZXJtaW5hbE5vZGUsIChzZWNvbmRDaGlsZE5vZGUpID0+IHtcbiAgICAgICAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBzZWNvbmRDaGlsZE5vZGUsICAvLy9cbiAgICAgICAgICAgICAgICBydWxlTmFtZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpLFxuICAgICAgICAgICAgICAgIHJ1bGVOYW1lSW5maW5pdGVEZXNjZW50UnVsZU5hbWUgPSAocnVsZU5hbWUgPT09IElORklOSVRFX0RFU0NFTlRfUlVMRV9OQU1FKSxcbiAgICAgICAgICAgICAgICBpbmZpbml0ZURlc2NlbnQgPSBydWxlTmFtZUluZmluaXRlRGVzY2VudFJ1bGVOYW1lOyAgLy8vXG5cbiAgICAgICAgICByZXR1cm4gaW5maW5pdGVEZXNjZW50O1xuICAgICAgICB9KSB8fCBmYWxzZTtcblxuICByZXR1cm4gaW5maW5pdGVEZXNjZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdW5pcXVlRnJvbVNwcmVhZE5vZGUoc3ByZWFkTm9kZSkge1xuICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBzcHJlYWROb2RlLFxuICAgICAgICB1bmlxdWUgPSBmcm9tRmlyc3RDaGlsZE5vZGUobm9uVGVybWluYWxOb2RlLCAoZmlyc3RDaGlsZE5vZGUpID0+IHtcbiAgICAgICAgICBsZXQgdW5pcXVlID0gZmFsc2U7XG5cbiAgICAgICAgICBjb25zdCBmaXJzdENoaWxkTm9kZU5vblRlcm1pbmFsTm9kZSA9IGZpcnN0Q2hpbGROb2RlLmlzTm9uVGVybWluYWxOb2RlKCk7XG5cbiAgICAgICAgICBpZiAoZmlyc3RDaGlsZE5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IGZpcnN0Q2hpbGROb2RlLCAvLy9cbiAgICAgICAgICAgICAgICAgIHJ1bGVOYW1lID0gbm9uVGVybWluYWxOb2RlLmdldFJ1bGVOYW1lKCksXG4gICAgICAgICAgICAgICAgICBydWxlTmFtZVVuaXF1ZVJ1bGVOYW1lID0gKHJ1bGVOYW1lID09PSBVTklRVUVfUlVMRV9OQU1FKTtcblxuICAgICAgICAgICAgaWYgKHJ1bGVOYW1lVW5pcXVlUnVsZU5hbWUpIHtcbiAgICAgICAgICAgICAgdW5pcXVlID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdW5pcXVlO1xuICAgICAgICB9KTtcblxuICByZXR1cm4gdW5pcXVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5kZXhGcm9tU3ByZWFkTm9kZShzcHJlYWROb2RlKSB7XG4gIGxldCBpbmRleCA9IG51bGw7XG5cbiAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gc3ByZWFkTm9kZSwgLy8vXG4gICAgICAgIGluZGV4Tm9kZSA9IG5vblRlcm1pbmFsTm9kZS5maW5kQ2hpbGROb2RlKChjaGlsZE5vZGUpID0+IHtcbiAgICAgICAgICBjb25zdCBjaGlsZE5vZGVOb25UZXJtaW5hbE5vZGUgPSBjaGlsZE5vZGUuaXNOb25UZXJtaW5hbE5vZGUoKTtcblxuICAgICAgICAgIGlmIChjaGlsZE5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IGNoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgICAgICAgICAgcnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKSxcbiAgICAgICAgICAgICAgICAgIHJ1bGVOYW1lSW5kZXhSdWxlTmFtZSA9IChydWxlTmFtZSA9PT0gSU5ERVhfUlVMRV9OQU1FKTtcblxuICAgICAgICAgICAgaWYgKHJ1bGVOYW1lSW5kZXhSdWxlTmFtZSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pIHx8IG51bGw7XG5cbiAgaWYgKGluZGV4Tm9kZSAhPT0gbnVsbCkge1xuICAgIGluZGV4ID0gaW5kZXhGcm9tSW5kZXhOb2RlKGluZGV4Tm9kZSk7XG4gIH1cblxuICByZXR1cm4gaW5kZXg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbmRJbmRleEZyb21TcHJlYWROb2RlKHNwcmVhZE5vZGUpIHtcbiAgbGV0IGVuZEluZGV4ID0gSW5maW5pdHk7XG5cbiAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gc3ByZWFkTm9kZSwgLy8vXG4gICAgICAgIGVuZEluZGV4Tm9kZSA9IG5vblRlcm1pbmFsTm9kZS5maW5kQ2hpbGROb2RlKChjaGlsZE5vZGUpID0+IHtcbiAgICAgICAgICBjb25zdCBjaGlsZE5vZGVOb25UZXJtaW5hbE5vZGUgPSBjaGlsZE5vZGUuaXNOb25UZXJtaW5hbE5vZGUoKTtcblxuICAgICAgICAgIGlmIChjaGlsZE5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IGNoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgICAgICAgICAgcnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKSxcbiAgICAgICAgICAgICAgICAgIHJ1bGVOYW1lRW5kSW5kZXhSdWxlTmFtZSA9IChydWxlTmFtZSA9PT0gRU5EX0lOREVYX1JVTEVfTkFNRSk7XG5cbiAgICAgICAgICAgIGlmIChydWxlTmFtZUVuZEluZGV4UnVsZU5hbWUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KSB8fCBudWxsO1xuXG4gIGlmIChlbmRJbmRleE5vZGUgIT09IG51bGwpIHtcbiAgICBlbmRJbmRleCA9IGluZGV4RnJvbUluZGV4Tm9kZShlbmRJbmRleE5vZGUpO1xuICB9XG5cbiAgcmV0dXJuIGVuZEluZGV4O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRJbmRleEZyb21TcHJlYWROb2RlKHNwcmVhZE5vZGUpIHtcbiAgbGV0IHN0YXJ0SW5kZXggPSAwO1xuXG4gIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IHNwcmVhZE5vZGUsIC8vL1xuICAgICAgICBzdGFydEluZGV4Tm9kZSA9IG5vblRlcm1pbmFsTm9kZS5maW5kQ2hpbGROb2RlKChjaGlsZE5vZGUpID0+IHtcbiAgICAgICAgICBjb25zdCBjaGlsZE5vZGVOb25UZXJtaW5hbE5vZGUgPSBjaGlsZE5vZGUuaXNOb25UZXJtaW5hbE5vZGUoKTtcblxuICAgICAgICAgIGlmIChjaGlsZE5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IGNoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgICAgICAgICAgcnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKSxcbiAgICAgICAgICAgICAgICAgIHJ1bGVOYW1lU3RhcnRJbmRleFJ1bGVOYW1lID0gKHJ1bGVOYW1lID09PSBTVEFSVF9JTkRFWF9SVUxFX05BTUUpO1xuXG4gICAgICAgICAgICBpZiAocnVsZU5hbWVTdGFydEluZGV4UnVsZU5hbWUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KSB8fCBudWxsO1xuXG4gIGlmIChzdGFydEluZGV4Tm9kZSAhPT0gbnVsbCkge1xuICAgIHN0YXJ0SW5kZXggPSBpbmRleEZyb21JbmRleE5vZGUoc3RhcnRJbmRleE5vZGUpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXJ0SW5kZXg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXRoTm9kZUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSkge1xuICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBleHByZXNzaW9uTm9kZSwgLy8vXG4gICAgICAgIHBhdGhOb2RlID0gZnJvbUZpcnN0Q2hpbGROb2RlKG5vblRlcm1pbmFsTm9kZSwgKGZpcnN0Q2hpbGROb2RlKSA9PiB7XG4gICAgICAgICAgY29uc3QgcGF0aE5vZGUgPSBmaXJzdENoaWxkTm9kZTsgIC8vL1xuXG4gICAgICAgICAgcmV0dXJuIHBhdGhOb2RlO1xuICAgICAgICB9KTtcblxuICByZXR1cm4gcGF0aE5vZGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzcHJlYWROb2RlRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlKSB7XG4gIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IGV4cHJlc3Npb25Ob2RlLCAvLy9cbiAgICAgICAgc3ByZWFkTm9kZSA9IGZyb21TZWNvbmRDaGlsZE5vZGUobm9uVGVybWluYWxOb2RlLCAoc2Vjb25kQ2hpbGROb2RlKSA9PiB7XG4gICAgICAgICAgbGV0IHNwcmVhZE5vZGUgPSBudWxsO1xuXG4gICAgICAgICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gc2Vjb25kQ2hpbGROb2RlLCAgLy8vXG4gICAgICAgICAgICAgICAgcnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKSxcbiAgICAgICAgICAgICAgICBydWxlTmFtZVNwcmVhZFJ1bGVOYW1lID0gKHJ1bGVOYW1lID09PSBTUFJFQURfUlVMRV9OQU1FKTtcblxuICAgICAgICAgIGlmIChydWxlTmFtZVNwcmVhZFJ1bGVOYW1lKSB7XG4gICAgICAgICAgICBzcHJlYWROb2RlID0gc2Vjb25kQ2hpbGROb2RlOyAgLy8vXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHNwcmVhZE5vZGU7XG4gICAgICAgIH0pIHx8IG51bGw7XG5cbiAgcmV0dXJuIHNwcmVhZE5vZGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlcnJvck5vZGVzRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlKSB7XG4gIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IGV4cHJlc3Npb25Ob2RlLCAvLy9cbiAgICAgICAgZXJyb3JOb2RlcyA9IG5vblRlcm1pbmFsTm9kZS5yZWR1Y2VDaGlsZE5vZGUoKGVycm9yTm9kZXMsIGNoaWxkTm9kZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZU5vblRlcm1pbmFsTm9kZSA9IGNoaWxkTm9kZS5pc05vblRlcm1pbmFsTm9kZSgpO1xuXG4gICAgICAgICAgaWYgKGNoaWxkTm9kZU5vblRlcm1pbmFsTm9kZSkge1xuICAgICAgICAgICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gY2hpbGROb2RlLCAgLy8vXG4gICAgICAgICAgICAgICAgICBydWxlTmFtZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpLFxuICAgICAgICAgICAgICAgICAgcnVsZU5hbWVFcnJvclJ1bGVOYW1lID0gKHJ1bGVOYW1lID09PSBFUlJPUl9SVUxFX05BTUUpO1xuXG4gICAgICAgICAgICBpZiAocnVsZU5hbWVFcnJvclJ1bGVOYW1lKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGVycm9yTm9kZSA9IG5vblRlcm1pbmFsTm9kZTsgIC8vL1xuXG4gICAgICAgICAgICAgIGVycm9yTm9kZXMucHVzaChlcnJvck5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBlcnJvck5vZGVzO1xuICAgICAgICB9LCBbXSk7XG5cbiAgcmV0dXJuIGVycm9yTm9kZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJFeHByZXNzaW9uTm9kZUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSkge1xuICBsZXQgc3ViRXhwcmVzc2lvbk5vZGUgPSBudWxsO1xuXG4gIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IGV4cHJlc3Npb25Ob2RlLCAvLy9cbiAgICAgICAgbXVsdGlwbGljaXR5ID0gbm9uVGVybWluYWxOb2RlLmdldE11bHRpcGxpY2l0eSgpO1xuXG4gIGlmIChtdWx0aXBsaWNpdHkgPiAxKSB7XG4gICAgc3ViRXhwcmVzc2lvbk5vZGUgPSBmcm9tTGFzdENoaWxkTm9kZShub25UZXJtaW5hbE5vZGUsIChsYXN0Q2hpbGROb2RlKSA9PiB7XG4gICAgICBsZXQgc3ViRXhwcmVzc2lvbk5vZGUgPSBudWxsO1xuXG4gICAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBsYXN0Q2hpbGROb2RlLCAgLy8vXG4gICAgICAgICAgICBydWxlTmFtZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpLFxuICAgICAgICAgICAgcnVsZU5hbWVTdWJFeHByZXNzaW9uUnVsZU5hbWUgPSAocnVsZU5hbWUgPT09IFNVQl9FWFBSRVNTSU9OX1JVTEVfTkFNRSk7XG5cbiAgICAgIGlmIChydWxlTmFtZVN1YkV4cHJlc3Npb25SdWxlTmFtZSkge1xuICAgICAgICBzdWJFeHByZXNzaW9uTm9kZSA9IGxhc3RDaGlsZE5vZGU7ICAvLy9cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHN1YkV4cHJlc3Npb25Ob2RlO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHN1YkV4cHJlc3Npb25Ob2RlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0aE5vZGVGcm9tU3ViRXhwcmVzc2lvbk5vZGUoc3ViRXhwcmVzc2lvbk5vZGUpIHtcbiAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gc3ViRXhwcmVzc2lvbk5vZGUsIC8vL1xuICAgICAgICBwYXRoTm9kZSA9IGZyb21GaXJzdENoaWxkTm9kZShub25UZXJtaW5hbE5vZGUsIChmaXJzdENoaWxkTm9kZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHBhdGhOb2RlID0gZmlyc3RDaGlsZE5vZGU7ICAvLy9cblxuICAgICAgICAgIHJldHVybiBwYXRoTm9kZTtcbiAgICAgICAgfSlcblxuICByZXR1cm4gcGF0aE5vZGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzcHJlYWROb2RlRnJvbVN1YkV4cHJlc3Npb25Ob2RlKHN1YkV4cHJlc3Npb25Ob2RlKSB7XG4gIGxldCBzcHJlYWROb2RlID0gbnVsbDtcblxuICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBzdWJFeHByZXNzaW9uTm9kZSwgLy8vXG4gICAgICAgIG11bHRpcGxpY2l0eSA9IG5vblRlcm1pbmFsTm9kZS5nZXRNdWx0aXBsaWNpdHkoKTtcblxuICBpZiAobXVsdGlwbGljaXR5ID4gMSkge1xuICAgIHNwcmVhZE5vZGUgPSBmcm9tU2Vjb25kQ2hpbGROb2RlKG5vblRlcm1pbmFsTm9kZSwgKHNlY29uZENoaWxkTm9kZSkgPT4ge1xuICAgICAgbGV0IHNwcmVhZE5vZGUgPSBudWxsO1xuXG4gICAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBzZWNvbmRDaGlsZE5vZGUsICAvLy9cbiAgICAgICAgICAgIHJ1bGVOYW1lID0gbm9uVGVybWluYWxOb2RlLmdldFJ1bGVOYW1lKCksXG4gICAgICAgICAgICBydWxlTmFtZVNwcmVhZFJ1bGVOYW1lID0gKHJ1bGVOYW1lID09PSBTUFJFQURfUlVMRV9OQU1FKTtcblxuICAgICAgaWYgKHJ1bGVOYW1lU3ByZWFkUnVsZU5hbWUpIHtcbiAgICAgICAgc3ByZWFkTm9kZSA9IHNlY29uZENoaWxkTm9kZTsgIC8vL1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3ByZWFkTm9kZTtcbiAgICB9KSB8fCBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHNwcmVhZE5vZGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJFeHByZXNzaW9uTm9kZUZyb21TdWJFeHByZXNzaW9uTm9kZShzdWJFeHByZXNzaW9uTm9kZSkge1xuICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBzdWJFeHByZXNzaW9uTm9kZTsgLy8vXG5cbiAgc3ViRXhwcmVzc2lvbk5vZGUgPSBudWxsO1xuXG4gIGNvbnN0IG11bHRpcGxpY2l0eSA9IG5vblRlcm1pbmFsTm9kZS5nZXRNdWx0aXBsaWNpdHkoKTtcblxuICBpZiAobXVsdGlwbGljaXR5ID4gMSkge1xuICAgIHN1YkV4cHJlc3Npb25Ob2RlID0gZnJvbUxhc3RDaGlsZE5vZGUobm9uVGVybWluYWxOb2RlLCAobGFzdENoaWxkTm9kZSkgPT4ge1xuICAgICAgbGV0IHN1YkV4cHJlc3Npb25Ob2RlID0gbnVsbDtcblxuICAgICAgY29uc3Qgbm9uVGVybWluYWxOb2UgPSBsYXN0Q2hpbGROb2RlLCAvLy9cbiAgICAgICAgICAgIHJ1bGVOYW1lID0gbm9uVGVybWluYWxOb2UuZ2V0UnVsZU5hbWUoKSxcbiAgICAgICAgICAgIHJ1bGVOYW1lU3ViRXhwcmVzc2lvblJ1bGVOYW1lID0gKHJ1bGVOYW1lID09PSBTVUJfRVhQUkVTU0lPTl9SVUxFX05BTUUpO1xuXG4gICAgICBpZiAocnVsZU5hbWVTdWJFeHByZXNzaW9uUnVsZU5hbWUpIHtcbiAgICAgICAgc3ViRXhwcmVzc2lvbk5vZGUgPSBsYXN0Q2hpbGROb2RlOyAgLy8vXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzdWJFeHByZXNzaW9uTm9kZTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBzdWJFeHByZXNzaW9uTm9kZTtcbn1cblxuZnVuY3Rpb24gZnJvbUZpcnN0Q2hpbGROb2RlKG5vblRlcm1pbmFsTm9kZSwgY2FsbGJhY2spIHtcbiAgbGV0IHJlc3VsdDtcblxuICBjb25zdCBmaXJzdEluZGV4ID0gMDtcblxuICBub25UZXJtaW5hbE5vZGUuZm9yd2FyZHNTb21lQ2hpbGROb2RlKChjaGlsZE5vZGUsIGluZGV4KSA9PiB7XG4gICAgaWYgKGluZGV4ID09PSBmaXJzdEluZGV4KSB7XG4gICAgICBjb25zdCBmaXJzdENoaWxkTm9kZSA9IGNoaWxkTm9kZTsgLy8vXG5cbiAgICAgIHJlc3VsdCA9IGNhbGxiYWNrKGZpcnN0Q2hpbGROb2RlKTtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBmcm9tU2Vjb25kQ2hpbGROb2RlKG5vblRlcm1pbmFsTm9kZSwgY2FsbGJhY2spIHtcbiAgbGV0IHJlc3VsdDtcblxuICBjb25zdCBzZWNvbmRJbmRleCA9IDE7XG5cbiAgbm9uVGVybWluYWxOb2RlLmZvcndhcmRzU29tZUNoaWxkTm9kZSgoY2hpbGROb2RlLCBpbmRleCkgPT4ge1xuICAgIGlmIChpbmRleCA9PT0gc2Vjb25kSW5kZXgpIHtcbiAgICAgIGNvbnN0IGZpcnN0Q2hpbGROb2RlID0gY2hpbGROb2RlOyAvLy9cblxuICAgICAgcmVzdWx0ID0gY2FsbGJhY2soZmlyc3RDaGlsZE5vZGUpO1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGZyb21UaGlyZENoaWxkTm9kZShub25UZXJtaW5hbE5vZGUsIGNhbGxiYWNrKSB7XG4gIGxldCByZXN1bHQ7XG5cbiAgY29uc3QgdGhpcmRJbmRleCA9IDI7XG5cbiAgbm9uVGVybWluYWxOb2RlLmZvcndhcmRzU29tZUNoaWxkTm9kZSgoY2hpbGROb2RlLCBpbmRleCkgPT4ge1xuICAgIGlmIChpbmRleCA9PT0gdGhpcmRJbmRleCkge1xuICAgICAgY29uc3QgdGhpcmRDaGlsZE5vZGUgPSBjaGlsZE5vZGU7IC8vL1xuXG4gICAgICByZXN1bHQgPSBjYWxsYmFjayh0aGlyZENoaWxkTm9kZSk7XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gZnJvbUxhc3RDaGlsZE5vZGUobm9uVGVybWluYWxOb2RlLCBjYWxsYmFjaykge1xuICBsZXQgcmVzdWx0O1xuXG4gIGNvbnN0IG11bHRpcGxpY2l0eSA9IG5vblRlcm1pbmFsTm9kZS5nZXRNdWx0aXBsaWNpdHkoKSxcbiAgICAgICAgbGFzdEluZGV4ID0gbXVsdGlwbGljaXR5IC0gMTtcblxuICBub25UZXJtaW5hbE5vZGUuYmFja3dhcmRzU29tZUNoaWxkTm9kZSgoY2hpbGROb2RlLCBpbmRleCkgPT4ge1xuICAgIGlmIChpbmRleCA9PT0gbGFzdEluZGV4KSB7XG4gICAgICBjb25zdCB0aGlyZENoaWxkTm9kZSA9IGNoaWxkTm9kZTsgLy8vXG5cbiAgICAgIHJlc3VsdCA9IGNhbGxiYWNrKHRoaXJkQ2hpbGROb2RlKTtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuIl0sIm5hbWVzIjpbImVuZEluZGV4RnJvbVNwcmVhZE5vZGUiLCJlcnJvck5vZGVzRnJvbUV4cHJlc3Npb25Ob2RlIiwiaW5kZXhGcm9tSW5kZXhOb2RlIiwiaW5kZXhGcm9tU3ByZWFkTm9kZSIsImluZmluaXRlRGVzY2VudEZyb21QYXRoTm9kZSIsInBhdGhOb2RlRnJvbUV4cHJlc3Npb25Ob2RlIiwicGF0aE5vZGVGcm9tU3ViRXhwcmVzc2lvbk5vZGUiLCJydWxlTmFtZXNGcm9tUGF0aE5vZGUiLCJzZWxlY3Rvck5vZGVzRnJvbVBhdGhOb2RlIiwic3ByZWFkTm9kZUZyb21FeHByZXNzaW9uTm9kZSIsInNwcmVhZE5vZGVGcm9tU3ViRXhwcmVzc2lvbk5vZGUiLCJzdGFydEluZGV4RnJvbVNwcmVhZE5vZGUiLCJzdWJFeHByZXNzaW9uTm9kZUZyb21FeHByZXNzaW9uTm9kZSIsInN1YkV4cHJlc3Npb25Ob2RlRnJvbVN1YkV4cHJlc3Npb25Ob2RlIiwidG9rZW5UeXBlc0Zyb21QYXRoTm9kZSIsInVuaXF1ZUZyb21TcHJlYWROb2RlIiwiaW5kZXhOb2RlIiwibm9uVGVybWluYWxOb2RlIiwiaW5kZXgiLCJmcm9tRmlyc3RDaGlsZE5vZGUiLCJmaXJzdENoaWxkTm9kZSIsInRlcm1pbmFsTm9kZSIsImNvbnRlbnQiLCJnZXRDb250ZW50IiwiTnVtYmVyIiwicGF0aE5vZGUiLCJzZWxlY3Rvck5vZGVzIiwicnVsZU5hbWVOb2RlcyIsInJlZHVjZSIsInNlbGVjdG9yTm9kZSIsInJ1bGVOYW1lTm9kZSIsInJ1bGVOYW1lIiwiZ2V0UnVsZU5hbWUiLCJydWxlTmFtZVJ1bGVOYW1lUnVsZU5hbWUiLCJSVUxFX05BTUVfUlVMRV9OQU1FIiwicHVzaCIsInJ1bGVOYW1lcyIsIm1hcCIsInRva2VuVHlwZU5vZGVzIiwidG9rZW5UeXBlTm9kZSIsInJ1bGVOYW1lVG9rZW5UeXBlUnVsZU5hbWUiLCJUT0tFTl9UWVBFX1JVTEVfTkFNRSIsInRva2VuVHlwZXMiLCJ0b2tlblR5cGUiLCJmcm9tVGhpcmRDaGlsZE5vZGUiLCJ0aGlyZENoaWxkTm9kZSIsInNlbGVjdG9yc05vZGUiLCJmcm9tTGFzdENoaWxkTm9kZSIsImxhc3RDaGlsZE5vZGUiLCJmaWx0ZXJDaGlsZE5vZGUiLCJjaGlsZE5vZGUiLCJjaGlsZE5vZGVOb25UZXJtaW5hbE5vZGUiLCJpc05vblRlcm1pbmFsTm9kZSIsImluZmluaXRlRGVzY2VudCIsImZyb21TZWNvbmRDaGlsZE5vZGUiLCJzZWNvbmRDaGlsZE5vZGUiLCJydWxlTmFtZUluZmluaXRlRGVzY2VudFJ1bGVOYW1lIiwiSU5GSU5JVEVfREVTQ0VOVF9SVUxFX05BTUUiLCJzcHJlYWROb2RlIiwidW5pcXVlIiwiZmlyc3RDaGlsZE5vZGVOb25UZXJtaW5hbE5vZGUiLCJydWxlTmFtZVVuaXF1ZVJ1bGVOYW1lIiwiVU5JUVVFX1JVTEVfTkFNRSIsImZpbmRDaGlsZE5vZGUiLCJydWxlTmFtZUluZGV4UnVsZU5hbWUiLCJJTkRFWF9SVUxFX05BTUUiLCJlbmRJbmRleCIsIkluZmluaXR5IiwiZW5kSW5kZXhOb2RlIiwicnVsZU5hbWVFbmRJbmRleFJ1bGVOYW1lIiwiRU5EX0lOREVYX1JVTEVfTkFNRSIsInN0YXJ0SW5kZXgiLCJzdGFydEluZGV4Tm9kZSIsInJ1bGVOYW1lU3RhcnRJbmRleFJ1bGVOYW1lIiwiU1RBUlRfSU5ERVhfUlVMRV9OQU1FIiwiZXhwcmVzc2lvbk5vZGUiLCJydWxlTmFtZVNwcmVhZFJ1bGVOYW1lIiwiU1BSRUFEX1JVTEVfTkFNRSIsImVycm9yTm9kZXMiLCJyZWR1Y2VDaGlsZE5vZGUiLCJydWxlTmFtZUVycm9yUnVsZU5hbWUiLCJFUlJPUl9SVUxFX05BTUUiLCJlcnJvck5vZGUiLCJzdWJFeHByZXNzaW9uTm9kZSIsIm11bHRpcGxpY2l0eSIsImdldE11bHRpcGxpY2l0eSIsInJ1bGVOYW1lU3ViRXhwcmVzc2lvblJ1bGVOYW1lIiwiU1VCX0VYUFJFU1NJT05fUlVMRV9OQU1FIiwibm9uVGVybWluYWxOb2UiLCJjYWxsYmFjayIsInJlc3VsdCIsImZpcnN0SW5kZXgiLCJmb3J3YXJkc1NvbWVDaGlsZE5vZGUiLCJzZWNvbmRJbmRleCIsInRoaXJkSW5kZXgi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
@@ -0,0 +1,39 @@
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
+ default: function() {
13
+ return _default;
14
+ },
15
+ queryByExpressionString: function() {
16
+ return queryByExpressionString;
17
+ }
18
+ });
19
+ var _query = /*#__PURE__*/ _interop_require_default(require("../query"));
20
+ var _expression = /*#__PURE__*/ _interop_require_default(require("../expression"));
21
+ function _interop_require_default(obj) {
22
+ return obj && obj.__esModule ? obj : {
23
+ default: obj
24
+ };
25
+ }
26
+ function queryByExpressionString(node, expressionString, maximumDepth) {
27
+ var nodes = null;
28
+ var expression = _expression.default.fromExpressionString(expressionString);
29
+ if (expression !== null) {
30
+ var query = _query.default.fromExpression(expression, maximumDepth);
31
+ nodes = query.execute(node);
32
+ }
33
+ return nodes;
34
+ }
35
+ var _default = {
36
+ queryByExpressionString: queryByExpressionString
37
+ };
38
+
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvcXVlcnkuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBRdWVyeSBmcm9tIFwiLi4vcXVlcnlcIjtcbmltcG9ydCBFeHByZXNzaW9uIGZyb20gXCIuLi9leHByZXNzaW9uXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBxdWVyeUJ5RXhwcmVzc2lvblN0cmluZyhub2RlLCBleHByZXNzaW9uU3RyaW5nLCBtYXhpbXVtRGVwdGgpIHtcbiAgbGV0IG5vZGVzID0gbnVsbDtcblxuICBjb25zdCBleHByZXNzaW9uID0gRXhwcmVzc2lvbi5mcm9tRXhwcmVzc2lvblN0cmluZyhleHByZXNzaW9uU3RyaW5nKTtcblxuICBpZiAoZXhwcmVzc2lvbiAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHF1ZXJ5ID0gUXVlcnkuZnJvbUV4cHJlc3Npb24oZXhwcmVzc2lvbiwgbWF4aW11bURlcHRoKTtcblxuICAgIG5vZGVzID0gcXVlcnkuZXhlY3V0ZShub2RlKTtcbiAgfVxuXG4gIHJldHVybiBub2Rlcztcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBxdWVyeUJ5RXhwcmVzc2lvblN0cmluZ1xufTtcbiJdLCJuYW1lcyI6WyJxdWVyeUJ5RXhwcmVzc2lvblN0cmluZyIsIm5vZGUiLCJleHByZXNzaW9uU3RyaW5nIiwibWF4aW11bURlcHRoIiwibm9kZXMiLCJleHByZXNzaW9uIiwiRXhwcmVzc2lvbiIsImZyb21FeHByZXNzaW9uU3RyaW5nIiwicXVlcnkiLCJRdWVyeSIsImZyb21FeHByZXNzaW9uIiwiZXhlY3V0ZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O0lBbUJBLE9BRUU7ZUFGRjs7SUFkZ0JBLHVCQUF1QjtlQUF2QkE7Ozs0REFIRTtpRUFDSzs7Ozs7O0FBRWhCLFNBQVNBLHdCQUF3QkMsSUFBSSxFQUFFQyxnQkFBZ0IsRUFBRUMsWUFBWTtJQUMxRSxJQUFJQyxRQUFRO0lBRVosSUFBTUMsYUFBYUMsbUJBQVUsQ0FBQ0Msb0JBQW9CLENBQUNMO0lBRW5ELElBQUlHLGVBQWUsTUFBTTtRQUN2QixJQUFNRyxRQUFRQyxjQUFLLENBQUNDLGNBQWMsQ0FBQ0wsWUFBWUY7UUFFL0NDLFFBQVFJLE1BQU1HLE9BQU8sQ0FBQ1Y7SUFDeEI7SUFFQSxPQUFPRztBQUNUO0lBRUEsV0FBZTtJQUNiSix5QkFBQUE7QUFDRiJ9
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "occam-dom",
3
3
  "author": "James Smith",
4
- "version": "4.0.16",
4
+ "version": "5.0.0",
5
5
  "license": "MIT, Anti-996",
6
6
  "homepage": "https://github.com/djalbat/occam-dom",
7
7
  "description": "Occam's DOM related functionality.",
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+
3
+ export const EMPTY_STRING = "";
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+
3
+ export function tokenIndexFromTerminalNodeAndTokens(terminalNode, tokens) {
4
+ const significantToken = terminalNode.getSignificantToken(),
5
+ significantTokenIndex = tokens.indexOf(significantToken),
6
+ tokenIndex = `(${significantTokenIndex})`;
7
+
8
+ return tokenIndex;
9
+ }
10
+
11
+ export function tokenIndexesFromNonTerminalNodeAndTokens(nonTerminalNode, tokens) {
12
+ const firstSignificantTokenIndex = nonTerminalNode.getFirstSignificantTokenIndex(tokens),
13
+ lastSignificantTokenIndex = nonTerminalNode.getLastSignificantTokenIndex(tokens),
14
+ tokenIndexes = (firstSignificantTokenIndex !== lastSignificantTokenIndex) ?
15
+ `(${firstSignificantTokenIndex}-${lastSignificantTokenIndex})` :
16
+ `(${firstSignificantTokenIndex})`;
17
+
18
+ return tokenIndexes;
19
+ }
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+
3
+ import withStyle from "easy-with-style"; ///
4
+
5
+ import { SizeableDiv } from "easy-layout";
6
+
7
+ export default withStyle(SizeableDiv)`
8
+
9
+ width: 64rem;
10
+ min-width: 24rem;
11
+
12
+ `;
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+
3
+ import Input from "../input";
4
+
5
+ export default class ExpressionStringInput extends Input {
6
+ getExpressionString() {
7
+ const value = this.getValue(),
8
+ expression = value; ///
9
+
10
+ return expression;
11
+ }
12
+
13
+ setExpressionString(expressionString) {
14
+ const value = expressionString; ///
15
+
16
+ this.setValue(value);
17
+ }
18
+
19
+ parentContext() {
20
+ const getExpressionString = this.getExpressionString.bind(this),
21
+ setExpressionString = this.setExpressionString.bind(this); ///;
22
+
23
+ return ({
24
+ getExpressionString,
25
+ setExpressionString
26
+ });
27
+ }
28
+
29
+ static defaultProperties = {
30
+ className: "expression-string",
31
+ spellCheck: "false"
32
+ };
33
+ }
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+
3
+ import Input from "../input";
4
+
5
+ export default class MaximumDepthInput extends Input {
6
+ getMaximumDepth() {
7
+ const value = this.getValue(),
8
+ maximumDepth = Number(value);
9
+
10
+ return maximumDepth;
11
+ }
12
+
13
+ setMaximumDepth(maximumDepth) {
14
+ const value = maximumDepth; ///
15
+
16
+ this.setValue(value);
17
+ }
18
+
19
+ parentContext() {
20
+ const getMaximumDepth = this.getMaximumDepth.bind(this),
21
+ setMaximumDepth = this.setMaximumDepth.bind(this),
22
+ setMaximumDepthReadOnly = this.setReadOnly.bind(this); ///;
23
+
24
+ return ({
25
+ getMaximumDepth,
26
+ setMaximumDepth,
27
+ setMaximumDepthReadOnly
28
+ });
29
+ }
30
+
31
+ static defaultProperties = {
32
+ className: "maximum-depth",
33
+ spellCheck: "false"
34
+ };
35
+ }
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+
3
+ import withStyle from "easy-with-style"; ///
4
+
5
+ import { Input } from "easy";
6
+
7
+ export default withStyle(Input)`
8
+
9
+ border: 1px solid darkgrey;
10
+ padding: 0.25rem;
11
+ font-size: 1.2rem;
12
+ font-family: monospace;
13
+
14
+ `;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+
3
+ import withStyle from "easy-with-style"; ///
4
+
5
+ const SubHeading = withStyle.h2`
6
+
7
+ margin: 1rem 0 0.5rem 0;
8
+ font-size: 2rem;
9
+
10
+ :first-of-type {
11
+ margin-top: 0;
12
+ }
13
+
14
+ `;
15
+
16
+ export default SubHeading;
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+
3
+ import Textarea from "../textarea";
4
+
5
+ export default class ContentTextarea extends Textarea {
6
+ getContent() {
7
+ const value = this.getValue(),
8
+ content = value; ///
9
+
10
+ return content;
11
+ }
12
+
13
+ setContent(content) {
14
+ const value = content;
15
+
16
+ this.setValue(value);
17
+ }
18
+
19
+ parentContext() {
20
+ const getContent = this.getContent.bind(this),
21
+ setContent = this.setContent.bind(this);
22
+
23
+ return ({
24
+ getContent,
25
+ setContent
26
+ });
27
+ }
28
+
29
+ static defaultProperties = {
30
+ className: "content",
31
+ spellCheck: "false"
32
+ };
33
+ }
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+
3
+ import Textarea from "../textarea";
4
+
5
+ import { EMPTY_STRING } from "../../../constants";
6
+ import { tokenIndexFromTerminalNodeAndTokens, tokenIndexesFromNonTerminalNodeAndTokens } from "../../utilities/token"
7
+
8
+ export default class NodesTextarea extends Textarea {
9
+ setNodes(nodes, tokens) { ///
10
+ const value = nodes.reduce((value, node) => {
11
+ const nodeTerminalNode = node.isTerminalNode();
12
+
13
+ if (nodeTerminalNode) {
14
+ const terminalNode = node, ///
15
+ significantToken = terminalNode.getSignificantToken(),
16
+ significantTokenType = significantToken.getType(),
17
+ tokenIndex = tokenIndexFromTerminalNodeAndTokens(terminalNode, tokens);
18
+
19
+ value = `${value}[${significantTokenType}]${tokenIndex}\n`;
20
+ } else {
21
+ const nonTerminalNode = node, ///
22
+ ruleName = nonTerminalNode.getRuleName(),
23
+ tokenIndexes = tokenIndexesFromNonTerminalNodeAndTokens(nonTerminalNode, tokens);
24
+
25
+ value = `${value}${ruleName}${tokenIndexes}\n`;
26
+ }
27
+
28
+ return value;
29
+ }, EMPTY_STRING);
30
+
31
+ this.setValue(value);
32
+ }
33
+
34
+ clearNodes() {
35
+ const value = EMPTY_STRING;
36
+
37
+ this.setValue(value);
38
+ }
39
+
40
+ parentContext() {
41
+ const setNodes = this.setNodes.bind(this),
42
+ clearNodes = this.clearNodes.bind(this);
43
+
44
+ return ({
45
+ setNodes,
46
+ clearNodes
47
+ });
48
+ }
49
+
50
+ static defaultProperties = {
51
+ className: "nodes",
52
+ spellCheck: "false",
53
+ readOnly: true
54
+ };
55
+ }