occam-dom 4.0.15 → 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 +3 -3
  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.15",
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.",
@@ -15,8 +15,8 @@
15
15
  "devDependencies": {
16
16
  "@swc/core": "^1.5.6",
17
17
  "easy": "^23.0.1",
18
- "easy-layout": "^6.0.232",
19
- "easy-with-style": "^3.0.468",
18
+ "easy-layout": "^6.0.233",
19
+ "easy-with-style": "^3.0.470",
20
20
  "esbuild": "^0.9.2",
21
21
  "express": "^4.17.1",
22
22
  "juxtapose": "^4.0.117",
@@ -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
+ }