occam-grammar-utilities 8.0.430 → 8.0.431
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/constants.js +13 -0
- package/lib/createDirectlyRepeatedRules.js +26 -0
- package/lib/createIndirectlyRepeatedRules.js +35 -0
- package/lib/createReducedRules.js +29 -0
- package/lib/cycle.js +79 -0
- package/lib/definition/epsilon.js +22 -0
- package/lib/definition/repeated/directly.js +56 -0
- package/lib/definition/rewritten.js +63 -0
- package/lib/directedGraph.js +190 -0
- package/lib/edge.js +56 -0
- package/lib/eliminateLeftRecursion.js +68 -0
- package/lib/example/constants.js +13 -0
- package/lib/example/lexer/example.js +28 -0
- package/lib/example/parser/example.js +22 -0
- package/lib/example/parser/nonTerminalNodeMap.js +76 -0
- package/lib/example/view/div/sizeable.js +25 -0
- package/lib/example/view/heading.js +27 -0
- package/lib/example/view/input/startRuleName.js +39 -0
- package/lib/example/view/input.js +28 -0
- package/lib/example/view/subHeading.js +29 -0
- package/lib/example/view/textarea/adjustedBNF.js +46 -0
- package/lib/example/view/textarea/bnf.js +45 -0
- package/lib/example/view/textarea/content.js +45 -0
- package/lib/example/view/textarea/lexicalEntries.js +51 -0
- package/lib/example/view/textarea/parseTree.js +52 -0
- package/lib/example/view/textarea.js +30 -0
- package/lib/example/view.js +118 -0
- package/lib/example.js +19 -0
- package/lib/index.js +31 -0
- package/lib/labels.js +22 -0
- package/lib/node/reduced.js +18 -0
- package/lib/node/repeated/directly.js +24 -0
- package/lib/node/repeated/indirectly.js +30 -0
- package/lib/node/rewritten.js +38 -0
- package/lib/rewriteLeftRecursiveRules.js +61 -0
- package/lib/rule/reduced.js +64 -0
- package/lib/rule/repeated/directly.js +39 -0
- package/lib/rule/repeated/indirectly.js +108 -0
- package/lib/rule/rewritten.js +39 -0
- package/lib/utilities/callAhead.js +30 -0
- package/lib/utilities/complex.js +58 -0
- package/lib/utilities/cycle.js +66 -0
- package/lib/utilities/directedGraph.js +70 -0
- package/lib/utilities/leftRecursive.js +107 -0
- package/lib/utilities/nonConsuming.js +136 -0
- package/lib/utilities/nonProducing.js +112 -0
- package/lib/utilities/occluded.js +19 -0
- package/lib/utilities/part.js +30 -0
- package/lib/utilities/parts.js +23 -0
- package/lib/utilities/path.js +112 -0
- package/lib/utilities/precedence.js +39 -0
- package/lib/utilities/qualified.js +45 -0
- package/lib/utilities/recursive.js +83 -0
- package/lib/utilities/rewrite.js +154 -0
- package/lib/utilities/ruleName.js +57 -0
- package/lib/utilities/ruleNames.js +40 -0
- package/package.json +2 -2
package/lib/constants.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "EMPTY_STRING", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return EMPTY_STRING;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const EMPTY_STRING = "";
|
|
12
|
+
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jb25zdGFudHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBFTVBUWV9TVFJJTkcgPSBcIlwiO1xuIl0sIm5hbWVzIjpbIkVNUFRZX1NUUklORyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBRWFBOzs7ZUFBQUE7OztBQUFOLE1BQU1BLGVBQWUifQ==
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "default", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return createDirectlyRepeatedRules;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _directly = /*#__PURE__*/ _interop_require_default(require("./rule/repeated/directly"));
|
|
12
|
+
const _cycle = require("./utilities/cycle");
|
|
13
|
+
function _interop_require_default(obj) {
|
|
14
|
+
return obj && obj.__esModule ? obj : {
|
|
15
|
+
default: obj
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
function createDirectlyRepeatedRules(cycles, ruleMap) {
|
|
19
|
+
const ruleNames = (0, _cycle.ruleNamesFromCycles)(cycles);
|
|
20
|
+
ruleNames.forEach((ruleName)=>{
|
|
21
|
+
const rule = ruleMap[ruleName], directlyRepeatedRule = _directly.default.fromRuleAndCycles(rule, cycles, ruleMap), directlyRepeatedRuleName = directlyRepeatedRule.getName();
|
|
22
|
+
ruleMap[directlyRepeatedRuleName] = directlyRepeatedRule;
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jcmVhdGVEaXJlY3RseVJlcGVhdGVkUnVsZXMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBEaXJlY3RseVJlcGVhdGVkUnVsZSBmcm9tIFwiLi9ydWxlL3JlcGVhdGVkL2RpcmVjdGx5XCI7XG5cbmltcG9ydCB7IHJ1bGVOYW1lc0Zyb21DeWNsZXMgfSBmcm9tIFwiLi91dGlsaXRpZXMvY3ljbGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlRGlyZWN0bHlSZXBlYXRlZFJ1bGVzKGN5Y2xlcywgcnVsZU1hcCkge1xuICBjb25zdCBydWxlTmFtZXMgPSBydWxlTmFtZXNGcm9tQ3ljbGVzKGN5Y2xlcyk7XG5cbiAgcnVsZU5hbWVzLmZvckVhY2goKHJ1bGVOYW1lKSA9PiB7XG4gICAgY29uc3QgcnVsZSA9IHJ1bGVNYXBbcnVsZU5hbWVdLFxuICAgICAgICAgIGRpcmVjdGx5UmVwZWF0ZWRSdWxlID0gRGlyZWN0bHlSZXBlYXRlZFJ1bGUuZnJvbVJ1bGVBbmRDeWNsZXMocnVsZSwgY3ljbGVzLCBydWxlTWFwKSxcbiAgICAgICAgICBkaXJlY3RseVJlcGVhdGVkUnVsZU5hbWUgPSBkaXJlY3RseVJlcGVhdGVkUnVsZS5nZXROYW1lKCk7XG5cbiAgICBydWxlTWFwW2RpcmVjdGx5UmVwZWF0ZWRSdWxlTmFtZV0gPSBkaXJlY3RseVJlcGVhdGVkUnVsZTtcbiAgfSk7XG59XG4iXSwibmFtZXMiOlsiY3JlYXRlRGlyZWN0bHlSZXBlYXRlZFJ1bGVzIiwiY3ljbGVzIiwicnVsZU1hcCIsInJ1bGVOYW1lcyIsInJ1bGVOYW1lc0Zyb21DeWNsZXMiLCJmb3JFYWNoIiwicnVsZU5hbWUiLCJydWxlIiwiZGlyZWN0bHlSZXBlYXRlZFJ1bGUiLCJEaXJlY3RseVJlcGVhdGVkUnVsZSIsImZyb21SdWxlQW5kQ3ljbGVzIiwiZGlyZWN0bHlSZXBlYXRlZFJ1bGVOYW1lIiwiZ2V0TmFtZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBTUE7OztlQUF3QkE7OztpRUFKUzt1QkFFRzs7Ozs7O0FBRXJCLFNBQVNBLDRCQUE0QkMsTUFBTSxFQUFFQyxPQUFPO0lBQ2pFLE1BQU1DLFlBQVlDLElBQUFBLDBCQUFtQixFQUFDSDtJQUV0Q0UsVUFBVUUsT0FBTyxDQUFDLENBQUNDO1FBQ2pCLE1BQU1DLE9BQU9MLE9BQU8sQ0FBQ0ksU0FBUyxFQUN4QkUsdUJBQXVCQyxpQkFBb0IsQ0FBQ0MsaUJBQWlCLENBQUNILE1BQU1OLFFBQVFDLFVBQzVFUywyQkFBMkJILHFCQUFxQkksT0FBTztRQUU3RFYsT0FBTyxDQUFDUyx5QkFBeUIsR0FBR0g7SUFDdEM7QUFDRiJ9
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "default", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return createIndirectlyRepeatedRules;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _indirectly = /*#__PURE__*/ _interop_require_default(require("./rule/repeated/indirectly"));
|
|
12
|
+
const _cycle = require("./utilities/cycle");
|
|
13
|
+
const _ruleNames = require("./utilities/ruleNames");
|
|
14
|
+
const _ruleName = require("./utilities/ruleName");
|
|
15
|
+
function _interop_require_default(obj) {
|
|
16
|
+
return obj && obj.__esModule ? obj : {
|
|
17
|
+
default: obj
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
function createIndirectlyRepeatedRules(cycles, ruleMap) {
|
|
21
|
+
cycles.forEach((cycle)=>{
|
|
22
|
+
const ruleNames = (0, _cycle.ruleNamesFromCycle)(cycle);
|
|
23
|
+
(0, _ruleNames.forEachRuleNameAndLeftRecursiveRuleName)(ruleNames, (ruleName, leftRecursiveRuleName)=>{
|
|
24
|
+
const indirectlyRepeatedRuleName = (0, _ruleName.indirectlyRepeatedRuleNameFromRuleNameAndLeftRecursiveRuleName)(ruleName, leftRecursiveRuleName);
|
|
25
|
+
let indirectlyRepeatedRule = ruleMap[indirectlyRepeatedRuleName] || null;
|
|
26
|
+
if (indirectlyRepeatedRule === null) {
|
|
27
|
+
const rule = ruleMap[ruleName], leftRecursiveRule = ruleMap[leftRecursiveRuleName];
|
|
28
|
+
indirectlyRepeatedRule = _indirectly.default.fromRuleAndLeftRecursiveRule(rule, leftRecursiveRule, ruleMap);
|
|
29
|
+
ruleMap[indirectlyRepeatedRuleName] = indirectlyRepeatedRule;
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jcmVhdGVJbmRpcmVjdGx5UmVwZWF0ZWRSdWxlcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IEluZGlyZWN0bHlSZXBlYXRlZFJ1bGUgZnJvbSBcIi4vcnVsZS9yZXBlYXRlZC9pbmRpcmVjdGx5XCI7XG5cbmltcG9ydCB7IHJ1bGVOYW1lc0Zyb21DeWNsZSB9IGZyb20gXCIuL3V0aWxpdGllcy9jeWNsZVwiO1xuaW1wb3J0IHsgZm9yRWFjaFJ1bGVOYW1lQW5kTGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lIH0gZnJvbSBcIi4vdXRpbGl0aWVzL3J1bGVOYW1lc1wiO1xuaW1wb3J0IHsgaW5kaXJlY3RseVJlcGVhdGVkUnVsZU5hbWVGcm9tUnVsZU5hbWVBbmRMZWZ0UmVjdXJzaXZlUnVsZU5hbWUgfSBmcm9tIFwiLi91dGlsaXRpZXMvcnVsZU5hbWVcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlSW5kaXJlY3RseVJlcGVhdGVkUnVsZXMoY3ljbGVzLCBydWxlTWFwKSB7XG4gIGN5Y2xlcy5mb3JFYWNoKChjeWNsZSkgPT4ge1xuICAgIGNvbnN0IHJ1bGVOYW1lcyA9IHJ1bGVOYW1lc0Zyb21DeWNsZShjeWNsZSk7XG5cbiAgICBmb3JFYWNoUnVsZU5hbWVBbmRMZWZ0UmVjdXJzaXZlUnVsZU5hbWUocnVsZU5hbWVzLCAocnVsZU5hbWUsIGxlZnRSZWN1cnNpdmVSdWxlTmFtZSkgPT4ge1xuICAgICAgY29uc3QgaW5kaXJlY3RseVJlcGVhdGVkUnVsZU5hbWUgPSBpbmRpcmVjdGx5UmVwZWF0ZWRSdWxlTmFtZUZyb21SdWxlTmFtZUFuZExlZnRSZWN1cnNpdmVSdWxlTmFtZShydWxlTmFtZSwgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lKTtcblxuICAgICAgbGV0IGluZGlyZWN0bHlSZXBlYXRlZFJ1bGUgPSBydWxlTWFwW2luZGlyZWN0bHlSZXBlYXRlZFJ1bGVOYW1lXSB8fCBudWxsO1xuXG4gICAgICBpZiAoaW5kaXJlY3RseVJlcGVhdGVkUnVsZSA9PT0gbnVsbCkge1xuICAgICAgICBjb25zdCBydWxlID0gcnVsZU1hcFtydWxlTmFtZV0sXG4gICAgICAgICAgICAgIGxlZnRSZWN1cnNpdmVSdWxlID0gcnVsZU1hcFtsZWZ0UmVjdXJzaXZlUnVsZU5hbWVdO1xuXG4gICAgICAgIGluZGlyZWN0bHlSZXBlYXRlZFJ1bGUgPSBJbmRpcmVjdGx5UmVwZWF0ZWRSdWxlLmZyb21SdWxlQW5kTGVmdFJlY3Vyc2l2ZVJ1bGUocnVsZSwgbGVmdFJlY3Vyc2l2ZVJ1bGUsIHJ1bGVNYXApO1xuXG4gICAgICAgIHJ1bGVNYXBbaW5kaXJlY3RseVJlcGVhdGVkUnVsZU5hbWVdID0gaW5kaXJlY3RseVJlcGVhdGVkUnVsZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG4iXSwibmFtZXMiOlsiY3JlYXRlSW5kaXJlY3RseVJlcGVhdGVkUnVsZXMiLCJjeWNsZXMiLCJydWxlTWFwIiwiZm9yRWFjaCIsImN5Y2xlIiwicnVsZU5hbWVzIiwicnVsZU5hbWVzRnJvbUN5Y2xlIiwiZm9yRWFjaFJ1bGVOYW1lQW5kTGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lIiwicnVsZU5hbWUiLCJsZWZ0UmVjdXJzaXZlUnVsZU5hbWUiLCJpbmRpcmVjdGx5UmVwZWF0ZWRSdWxlTmFtZSIsImluZGlyZWN0bHlSZXBlYXRlZFJ1bGVOYW1lRnJvbVJ1bGVOYW1lQW5kTGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lIiwiaW5kaXJlY3RseVJlcGVhdGVkUnVsZSIsInJ1bGUiLCJsZWZ0UmVjdXJzaXZlUnVsZSIsIkluZGlyZWN0bHlSZXBlYXRlZFJ1bGUiLCJmcm9tUnVsZUFuZExlZnRSZWN1cnNpdmVSdWxlIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFRQTs7O2VBQXdCQTs7O21FQU5XO3VCQUVBOzJCQUNxQjswQkFDdUI7Ozs7OztBQUVoRSxTQUFTQSw4QkFBOEJDLE1BQU0sRUFBRUMsT0FBTztJQUNuRUQsT0FBT0UsT0FBTyxDQUFDLENBQUNDO1FBQ2QsTUFBTUMsWUFBWUMsSUFBQUEseUJBQWtCLEVBQUNGO1FBRXJDRyxJQUFBQSxrREFBdUMsRUFBQ0YsV0FBVyxDQUFDRyxVQUFVQztZQUM1RCxNQUFNQyw2QkFBNkJDLElBQUFBLHdFQUE4RCxFQUFDSCxVQUFVQztZQUU1RyxJQUFJRyx5QkFBeUJWLE9BQU8sQ0FBQ1EsMkJBQTJCLElBQUk7WUFFcEUsSUFBSUUsMkJBQTJCLE1BQU07Z0JBQ25DLE1BQU1DLE9BQU9YLE9BQU8sQ0FBQ00sU0FBUyxFQUN4Qk0sb0JBQW9CWixPQUFPLENBQUNPLHNCQUFzQjtnQkFFeERHLHlCQUF5QkcsbUJBQXNCLENBQUNDLDRCQUE0QixDQUFDSCxNQUFNQyxtQkFBbUJaO2dCQUV0R0EsT0FBTyxDQUFDUSwyQkFBMkIsR0FBR0U7WUFDeEM7UUFDRjtJQUNGO0FBQ0YifQ==
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "default", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return createReducedRules;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _reduced = /*#__PURE__*/ _interop_require_default(require("./rule/reduced"));
|
|
12
|
+
const _cycle = require("./utilities/cycle");
|
|
13
|
+
function _interop_require_default(obj) {
|
|
14
|
+
return obj && obj.__esModule ? obj : {
|
|
15
|
+
default: obj
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
function createReducedRules(cycles, ruleMap) {
|
|
19
|
+
const ruleNames = (0, _cycle.ruleNamesFromCycles)(cycles);
|
|
20
|
+
ruleNames.forEach((ruleName)=>{
|
|
21
|
+
const rule = ruleMap[ruleName], reducedRule = _reduced.default.fromRuleAndCycles(rule, cycles, ruleMap);
|
|
22
|
+
if (reducedRule !== null) {
|
|
23
|
+
const reducedRuleName = reducedRule.getName();
|
|
24
|
+
ruleMap[reducedRuleName] = reducedRule;
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jcmVhdGVSZWR1Y2VkUnVsZXMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSZWR1Y2VkUnVsZSBmcm9tIFwiLi9ydWxlL3JlZHVjZWRcIjtcblxuaW1wb3J0IHsgcnVsZU5hbWVzRnJvbUN5Y2xlcyB9IGZyb20gXCIuL3V0aWxpdGllcy9jeWNsZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVSZWR1Y2VkUnVsZXMoY3ljbGVzLCBydWxlTWFwKSB7XG4gIGNvbnN0IHJ1bGVOYW1lcyA9IHJ1bGVOYW1lc0Zyb21DeWNsZXMoY3ljbGVzKTtcblxuICBydWxlTmFtZXMuZm9yRWFjaCgocnVsZU5hbWUpID0+IHtcbiAgICBjb25zdCBydWxlID0gcnVsZU1hcFtydWxlTmFtZV0sXG4gICAgICAgICAgcmVkdWNlZFJ1bGUgPSBSZWR1Y2VkUnVsZS5mcm9tUnVsZUFuZEN5Y2xlcyhydWxlLCBjeWNsZXMsIHJ1bGVNYXApO1xuXG4gICAgaWYgKHJlZHVjZWRSdWxlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCByZWR1Y2VkUnVsZU5hbWUgPSByZWR1Y2VkUnVsZS5nZXROYW1lKCk7XG5cbiAgICAgIHJ1bGVNYXBbcmVkdWNlZFJ1bGVOYW1lXSA9IHJlZHVjZWRSdWxlO1xuICAgIH1cbiAgfSk7XG59XG4iXSwibmFtZXMiOlsiY3JlYXRlUmVkdWNlZFJ1bGVzIiwiY3ljbGVzIiwicnVsZU1hcCIsInJ1bGVOYW1lcyIsInJ1bGVOYW1lc0Zyb21DeWNsZXMiLCJmb3JFYWNoIiwicnVsZU5hbWUiLCJydWxlIiwicmVkdWNlZFJ1bGUiLCJSZWR1Y2VkUnVsZSIsImZyb21SdWxlQW5kQ3ljbGVzIiwicmVkdWNlZFJ1bGVOYW1lIiwiZ2V0TmFtZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBTUE7OztlQUF3QkE7OztnRUFKQTt1QkFFWTs7Ozs7O0FBRXJCLFNBQVNBLG1CQUFtQkMsTUFBTSxFQUFFQyxPQUFPO0lBQ3hELE1BQU1DLFlBQVlDLElBQUFBLDBCQUFtQixFQUFDSDtJQUV0Q0UsVUFBVUUsT0FBTyxDQUFDLENBQUNDO1FBQ2pCLE1BQU1DLE9BQU9MLE9BQU8sQ0FBQ0ksU0FBUyxFQUN4QkUsY0FBY0MsZ0JBQVcsQ0FBQ0MsaUJBQWlCLENBQUNILE1BQU1OLFFBQVFDO1FBRWhFLElBQUlNLGdCQUFnQixNQUFNO1lBQ3hCLE1BQU1HLGtCQUFrQkgsWUFBWUksT0FBTztZQUUzQ1YsT0FBTyxDQUFDUyxnQkFBZ0IsR0FBR0g7UUFDN0I7SUFDRjtBQUNGIn0=
|
package/lib/cycle.js
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "default", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return Cycle;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _necessary = require("necessary");
|
|
12
|
+
const { COMMA_CHARACTER } = _necessary.characters;
|
|
13
|
+
class Cycle {
|
|
14
|
+
constructor(edges){
|
|
15
|
+
this.edges = edges;
|
|
16
|
+
}
|
|
17
|
+
getEdges() {
|
|
18
|
+
return this.edges;
|
|
19
|
+
}
|
|
20
|
+
getLength() {
|
|
21
|
+
const length = this.edges.length;
|
|
22
|
+
return length;
|
|
23
|
+
}
|
|
24
|
+
getEdge(index) {
|
|
25
|
+
const edge = this.edges[index];
|
|
26
|
+
return edge;
|
|
27
|
+
}
|
|
28
|
+
getVertexes() {
|
|
29
|
+
const vertexes = this.mapEdge((edge)=>{
|
|
30
|
+
const sourceVertex = edge.getSourceVertex(), vertex = sourceVertex; ///
|
|
31
|
+
return vertex;
|
|
32
|
+
});
|
|
33
|
+
return vertexes;
|
|
34
|
+
}
|
|
35
|
+
mapEdge(callback) {
|
|
36
|
+
return this.edges.map(callback);
|
|
37
|
+
}
|
|
38
|
+
everyEdge(callback) {
|
|
39
|
+
return this.edges.every(callback);
|
|
40
|
+
}
|
|
41
|
+
forEachEdge(callback) {
|
|
42
|
+
return this.edges.forEach(callback);
|
|
43
|
+
}
|
|
44
|
+
isEqualTo(cycle) {
|
|
45
|
+
let equalTo = false;
|
|
46
|
+
const cycleA = this, cycleB = cycle, cycleALength = cycleA.getLength(), cycleBLength = cycleB.getLength();
|
|
47
|
+
if (cycleALength === cycleBLength) {
|
|
48
|
+
equalTo = cycleA.everyEdge((edgeA, index)=>{
|
|
49
|
+
const edgeB = cycleB.getEdge(index), matches = edgeA.match(edgeB);
|
|
50
|
+
if (matches) {
|
|
51
|
+
return true;
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
return equalTo;
|
|
56
|
+
}
|
|
57
|
+
permuted() {
|
|
58
|
+
const edges = this.edges.slice(), edge = edges.pop();
|
|
59
|
+
edges.unshift(edge);
|
|
60
|
+
const cycle = new Cycle(edges);
|
|
61
|
+
return cycle;
|
|
62
|
+
}
|
|
63
|
+
asString() {
|
|
64
|
+
const vertexes = this.getVertexes(), string = vertexes.join(COMMA_CHARACTER);
|
|
65
|
+
return string;
|
|
66
|
+
}
|
|
67
|
+
static fromEdge(edge) {
|
|
68
|
+
const edges = [
|
|
69
|
+
edge
|
|
70
|
+
], cycle = new Cycle(edges);
|
|
71
|
+
return cycle;
|
|
72
|
+
}
|
|
73
|
+
static fromEdges(edges) {
|
|
74
|
+
const cycle = new Cycle(edges);
|
|
75
|
+
return cycle;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jeWNsZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgY2hhcmFjdGVycyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuY29uc3QgeyBDT01NQV9DSEFSQUNURVIgfSA9IGNoYXJhY3RlcnM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEN5Y2xlIHtcbiAgY29uc3RydWN0b3IoZWRnZXMpIHtcbiAgICB0aGlzLmVkZ2VzID0gZWRnZXM7XG4gIH1cblxuICBnZXRFZGdlcygpIHtcbiAgICByZXR1cm4gdGhpcy5lZGdlcztcbiAgfVxuXG4gIGdldExlbmd0aCgpIHtcbiAgICBjb25zdCBsZW5ndGggPSB0aGlzLmVkZ2VzLmxlbmd0aDtcblxuICAgIHJldHVybiBsZW5ndGg7XG4gIH1cblxuICBnZXRFZGdlKGluZGV4KSB7XG4gICAgY29uc3QgZWRnZSA9IHRoaXMuZWRnZXNbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGVkZ2U7XG4gIH1cblxuICBnZXRWZXJ0ZXhlcygpIHtcbiAgICBjb25zdCB2ZXJ0ZXhlcyA9IHRoaXMubWFwRWRnZSgoZWRnZSkgPT4ge1xuICAgICAgY29uc3Qgc291cmNlVmVydGV4ID0gZWRnZS5nZXRTb3VyY2VWZXJ0ZXgoKSxcbiAgICAgICAgICAgIHZlcnRleCA9IHNvdXJjZVZlcnRleDsgIC8vL1xuXG4gICAgICByZXR1cm4gdmVydGV4O1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHZlcnRleGVzO1xuICB9XG5cbiAgbWFwRWRnZShjYWxsYmFjaykgeyByZXR1cm4gdGhpcy5lZGdlcy5tYXAoY2FsbGJhY2spOyB9XG5cbiAgZXZlcnlFZGdlKGNhbGxiYWNrKSB7IHJldHVybiB0aGlzLmVkZ2VzLmV2ZXJ5KGNhbGxiYWNrKTsgfVxuXG4gIGZvckVhY2hFZGdlKGNhbGxiYWNrKSB7IHJldHVybiB0aGlzLmVkZ2VzLmZvckVhY2goY2FsbGJhY2spOyB9XG5cbiAgaXNFcXVhbFRvKGN5Y2xlKSB7XG4gICAgbGV0IGVxdWFsVG8gPSBmYWxzZTtcblxuICAgIGNvbnN0IGN5Y2xlQSA9IHRoaXMsICAvLy9cbiAgICAgICAgICBjeWNsZUIgPSBjeWNsZSwgIC8vL1xuICAgICAgICAgIGN5Y2xlQUxlbmd0aCA9IGN5Y2xlQS5nZXRMZW5ndGgoKSxcbiAgICAgICAgICBjeWNsZUJMZW5ndGggPSBjeWNsZUIuZ2V0TGVuZ3RoKCk7XG5cbiAgICBpZiAoY3ljbGVBTGVuZ3RoID09PSBjeWNsZUJMZW5ndGgpIHtcbiAgICAgIGVxdWFsVG8gPSBjeWNsZUEuZXZlcnlFZGdlKChlZGdlQSwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgZWRnZUIgPSBjeWNsZUIuZ2V0RWRnZShpbmRleCksXG4gICAgICAgICAgICAgIG1hdGNoZXMgPSBlZGdlQS5tYXRjaChlZGdlQik7XG5cbiAgICAgICAgaWYgKG1hdGNoZXMpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVxdWFsVG87XG4gIH1cblxuICBwZXJtdXRlZCgpIHtcbiAgICBjb25zdCBlZGdlcyA9IHRoaXMuZWRnZXMuc2xpY2UoKSwgLy8vXG4gICAgICAgICAgZWRnZSA9IGVkZ2VzLnBvcCgpO1xuXG4gICAgZWRnZXMudW5zaGlmdChlZGdlKTtcblxuICAgIGNvbnN0IGN5Y2xlID0gbmV3IEN5Y2xlKGVkZ2VzKTtcblxuICAgIHJldHVybiBjeWNsZTtcbiAgfVxuXG4gIGFzU3RyaW5nKCkge1xuICAgIGNvbnN0IHZlcnRleGVzID0gdGhpcy5nZXRWZXJ0ZXhlcygpLFxuICAgICAgICAgIHN0cmluZyA9IHZlcnRleGVzLmpvaW4oQ09NTUFfQ0hBUkFDVEVSKTtcblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBzdGF0aWMgZnJvbUVkZ2UoZWRnZSkge1xuICAgIGNvbnN0IGVkZ2VzID0gW1xuICAgICAgICAgICAgZWRnZVxuICAgICAgICAgIF0sXG4gICAgICAgICAgY3ljbGUgPSBuZXcgQ3ljbGUoZWRnZXMpO1xuXG4gICAgcmV0dXJuIGN5Y2xlO1xuICB9XG5cbiAgc3RhdGljIGZyb21FZGdlcyhlZGdlcykge1xuICAgIGNvbnN0IGN5Y2xlID0gbmV3IEN5Y2xlKGVkZ2VzKTtcblxuICAgIHJldHVybiBjeWNsZTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbIkN5Y2xlIiwiQ09NTUFfQ0hBUkFDVEVSIiwiY2hhcmFjdGVycyIsImVkZ2VzIiwiZ2V0RWRnZXMiLCJnZXRMZW5ndGgiLCJsZW5ndGgiLCJnZXRFZGdlIiwiaW5kZXgiLCJlZGdlIiwiZ2V0VmVydGV4ZXMiLCJ2ZXJ0ZXhlcyIsIm1hcEVkZ2UiLCJzb3VyY2VWZXJ0ZXgiLCJnZXRTb3VyY2VWZXJ0ZXgiLCJ2ZXJ0ZXgiLCJjYWxsYmFjayIsIm1hcCIsImV2ZXJ5RWRnZSIsImV2ZXJ5IiwiZm9yRWFjaEVkZ2UiLCJmb3JFYWNoIiwiaXNFcXVhbFRvIiwiY3ljbGUiLCJlcXVhbFRvIiwiY3ljbGVBIiwiY3ljbGVCIiwiY3ljbGVBTGVuZ3RoIiwiY3ljbGVCTGVuZ3RoIiwiZWRnZUEiLCJlZGdlQiIsIm1hdGNoZXMiLCJtYXRjaCIsInBlcm11dGVkIiwic2xpY2UiLCJwb3AiLCJ1bnNoaWZ0IiwiYXNTdHJpbmciLCJzdHJpbmciLCJqb2luIiwiZnJvbUVkZ2UiLCJmcm9tRWRnZXMiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQU1BOzs7ZUFBcUJBOzs7MkJBSk07QUFFM0IsTUFBTSxFQUFFQyxlQUFlLEVBQUUsR0FBR0MscUJBQVU7QUFFdkIsTUFBTUY7SUFDbkIsWUFBWUcsS0FBSyxDQUFFO1FBQ2pCLElBQUksQ0FBQ0EsS0FBSyxHQUFHQTtJQUNmO0lBRUFDLFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQ0QsS0FBSztJQUNuQjtJQUVBRSxZQUFZO1FBQ1YsTUFBTUMsU0FBUyxJQUFJLENBQUNILEtBQUssQ0FBQ0csTUFBTTtRQUVoQyxPQUFPQTtJQUNUO0lBRUFDLFFBQVFDLEtBQUssRUFBRTtRQUNiLE1BQU1DLE9BQU8sSUFBSSxDQUFDTixLQUFLLENBQUNLLE1BQU07UUFFOUIsT0FBT0M7SUFDVDtJQUVBQyxjQUFjO1FBQ1osTUFBTUMsV0FBVyxJQUFJLENBQUNDLE9BQU8sQ0FBQyxDQUFDSDtZQUM3QixNQUFNSSxlQUFlSixLQUFLSyxlQUFlLElBQ25DQyxTQUFTRixjQUFlLEdBQUc7WUFFakMsT0FBT0U7UUFDVDtRQUVBLE9BQU9KO0lBQ1Q7SUFFQUMsUUFBUUksUUFBUSxFQUFFO1FBQUUsT0FBTyxJQUFJLENBQUNiLEtBQUssQ0FBQ2MsR0FBRyxDQUFDRDtJQUFXO0lBRXJERSxVQUFVRixRQUFRLEVBQUU7UUFBRSxPQUFPLElBQUksQ0FBQ2IsS0FBSyxDQUFDZ0IsS0FBSyxDQUFDSDtJQUFXO0lBRXpESSxZQUFZSixRQUFRLEVBQUU7UUFBRSxPQUFPLElBQUksQ0FBQ2IsS0FBSyxDQUFDa0IsT0FBTyxDQUFDTDtJQUFXO0lBRTdETSxVQUFVQyxLQUFLLEVBQUU7UUFDZixJQUFJQyxVQUFVO1FBRWQsTUFBTUMsU0FBUyxJQUFJLEVBQ2JDLFNBQVNILE9BQ1RJLGVBQWVGLE9BQU9wQixTQUFTLElBQy9CdUIsZUFBZUYsT0FBT3JCLFNBQVM7UUFFckMsSUFBSXNCLGlCQUFpQkMsY0FBYztZQUNqQ0osVUFBVUMsT0FBT1AsU0FBUyxDQUFDLENBQUNXLE9BQU9yQjtnQkFDakMsTUFBTXNCLFFBQVFKLE9BQU9uQixPQUFPLENBQUNDLFFBQ3ZCdUIsVUFBVUYsTUFBTUcsS0FBSyxDQUFDRjtnQkFFNUIsSUFBSUMsU0FBUztvQkFDWCxPQUFPO2dCQUNUO1lBQ0Y7UUFDRjtRQUVBLE9BQU9QO0lBQ1Q7SUFFQVMsV0FBVztRQUNULE1BQU05QixRQUFRLElBQUksQ0FBQ0EsS0FBSyxDQUFDK0IsS0FBSyxJQUN4QnpCLE9BQU9OLE1BQU1nQyxHQUFHO1FBRXRCaEMsTUFBTWlDLE9BQU8sQ0FBQzNCO1FBRWQsTUFBTWMsUUFBUSxJQUFJdkIsTUFBTUc7UUFFeEIsT0FBT29CO0lBQ1Q7SUFFQWMsV0FBVztRQUNULE1BQU0xQixXQUFXLElBQUksQ0FBQ0QsV0FBVyxJQUMzQjRCLFNBQVMzQixTQUFTNEIsSUFBSSxDQUFDdEM7UUFFN0IsT0FBT3FDO0lBQ1Q7SUFFQSxPQUFPRSxTQUFTL0IsSUFBSSxFQUFFO1FBQ3BCLE1BQU1OLFFBQVE7WUFDTk07U0FDRCxFQUNEYyxRQUFRLElBQUl2QixNQUFNRztRQUV4QixPQUFPb0I7SUFDVDtJQUVBLE9BQU9rQixVQUFVdEMsS0FBSyxFQUFFO1FBQ3RCLE1BQU1vQixRQUFRLElBQUl2QixNQUFNRztRQUV4QixPQUFPb0I7SUFDVDtBQUNGIn0=
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "default", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return EpsilonDefinition;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _occamparsers = require("occam-parsers");
|
|
12
|
+
const { EpsilonPart } = _occamparsers.Parts;
|
|
13
|
+
class EpsilonDefinition extends _occamparsers.Definition {
|
|
14
|
+
static fromPrecedence(precedence) {
|
|
15
|
+
const epsilonPart = EpsilonPart.fromNothing(), parts = [
|
|
16
|
+
epsilonPart
|
|
17
|
+
], epsilonDefinition = EpsilonDefinition.fromPartsAndPrecedence(parts, precedence);
|
|
18
|
+
return epsilonDefinition;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kZWZpbml0aW9uL2Vwc2lsb24uanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFBhcnRzLCBEZWZpbml0aW9uIH0gZnJvbSBcIm9jY2FtLXBhcnNlcnNcIjtcblxuY29uc3QgeyBFcHNpbG9uUGFydCB9ID0gUGFydHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVwc2lsb25EZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIHN0YXRpYyBmcm9tUHJlY2VkZW5jZShwcmVjZWRlbmNlKSB7XG4gICAgY29uc3QgZXBzaWxvblBhcnQgPSBFcHNpbG9uUGFydC5mcm9tTm90aGluZygpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgZXBzaWxvblBhcnRcbiAgICAgICAgICBdLFxuICAgICAgICAgIGVwc2lsb25EZWZpbml0aW9uID0gRXBzaWxvbkRlZmluaXRpb24uZnJvbVBhcnRzQW5kUHJlY2VkZW5jZShwYXJ0cywgcHJlY2VkZW5jZSk7XG5cbiAgICByZXR1cm4gZXBzaWxvbkRlZmluaXRpb247XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJFcHNpbG9uRGVmaW5pdGlvbiIsIkVwc2lsb25QYXJ0IiwiUGFydHMiLCJEZWZpbml0aW9uIiwiZnJvbVByZWNlZGVuY2UiLCJwcmVjZWRlbmNlIiwiZXBzaWxvblBhcnQiLCJmcm9tTm90aGluZyIsInBhcnRzIiwiZXBzaWxvbkRlZmluaXRpb24iLCJmcm9tUGFydHNBbmRQcmVjZWRlbmNlIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFNQTs7O2VBQXFCQTs7OzhCQUphO0FBRWxDLE1BQU0sRUFBRUMsV0FBVyxFQUFFLEdBQUdDLG1CQUFLO0FBRWQsTUFBTUYsMEJBQTBCRyx3QkFBVTtJQUN2RCxPQUFPQyxlQUFlQyxVQUFVLEVBQUU7UUFDaEMsTUFBTUMsY0FBY0wsWUFBWU0sV0FBVyxJQUNyQ0MsUUFBUTtZQUNORjtTQUNELEVBQ0RHLG9CQUFvQlQsa0JBQWtCVSxzQkFBc0IsQ0FBQ0YsT0FBT0g7UUFFMUUsT0FBT0k7SUFDVDtBQUNGIn0=
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "default", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return DirectlyRepeatedDefinition;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _occamparsers = require("occam-parsers");
|
|
12
|
+
const _cycle = require("../../utilities/cycle");
|
|
13
|
+
const _ruleNames = require("../../utilities/ruleNames");
|
|
14
|
+
const _part = require("../../utilities/part");
|
|
15
|
+
const _ruleName = require("../../utilities/ruleName");
|
|
16
|
+
class DirectlyRepeatedDefinition extends _occamparsers.Definition {
|
|
17
|
+
static fromRuleAndCycle(rule, cycle) {
|
|
18
|
+
let directlyRepeatedDefinition = null;
|
|
19
|
+
const ruleName = rule.getName(), ruleNames = (0, _cycle.ruleNamesFromCycle)(cycle), ruleNameIncludesRuleName = ruleNames.includes(ruleName);
|
|
20
|
+
if (ruleNameIncludesRuleName) {
|
|
21
|
+
const permutedRuleNames = (0, _ruleNames.permuteRuleNames)(ruleNames, ruleName), path = permutedRuleNames, parts = partsFromPath(path), precedence = null;
|
|
22
|
+
directlyRepeatedDefinition = new DirectlyRepeatedDefinition(parts, precedence);
|
|
23
|
+
}
|
|
24
|
+
return directlyRepeatedDefinition;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
function permutePath(path) {
|
|
28
|
+
const permutedPath = path.slice(); ///
|
|
29
|
+
permutedPath.reverse();
|
|
30
|
+
const ruleName = permutedPath.pop();
|
|
31
|
+
permutedPath.unshift(ruleName);
|
|
32
|
+
return permutedPath;
|
|
33
|
+
}
|
|
34
|
+
function partsFromPath(path) {
|
|
35
|
+
const permutedPath = permutePath(path), ruleNames = permutedPath, parts = [];
|
|
36
|
+
(0, _ruleNames.forEachRuleNameAndLeftRecursiveRuleName)(ruleNames, (ruleName, leftRecursiveRuleName)=>{
|
|
37
|
+
const temporaryRuleName = leftRecursiveRuleName; ///
|
|
38
|
+
leftRecursiveRuleName = ruleName; ///
|
|
39
|
+
ruleName = temporaryRuleName; ///
|
|
40
|
+
const indirectlyRepeatedPart = indirectlyRepeatedPartFromRuleNameAndLeftReucrsiveRuleName(ruleName, leftRecursiveRuleName), directlyRepeatedPart = directlyRepeatedPartFromRuleName(ruleName);
|
|
41
|
+
parts.push(indirectlyRepeatedPart);
|
|
42
|
+
parts.push(directlyRepeatedPart);
|
|
43
|
+
});
|
|
44
|
+
parts.pop();
|
|
45
|
+
return parts;
|
|
46
|
+
}
|
|
47
|
+
function directlyRepeatedPartFromRuleName(ruleName) {
|
|
48
|
+
const directlyRepeatedRuleName = (0, _ruleName.directlyRepeatedRuleNameFromRuleName)(ruleName), directlyRepeatedRuleNamePart = (0, _part.ruleNamePartFromRuleName)(directlyRepeatedRuleName), zeroOrMoreDirectlyRepeatedRuleNamePartsPart = (0, _part.zeroOrMorePartsPartFromPart)(directlyRepeatedRuleNamePart), directlyRepeatedPart = zeroOrMoreDirectlyRepeatedRuleNamePartsPart; ///
|
|
49
|
+
return directlyRepeatedPart;
|
|
50
|
+
}
|
|
51
|
+
function indirectlyRepeatedPartFromRuleNameAndLeftReucrsiveRuleName(ruleName, leftRecursiveRuleName) {
|
|
52
|
+
const indirectlyRepeatedRuleName = (0, _ruleName.indirectlyRepeatedRuleNameFromRuleNameAndLeftRecursiveRuleName)(ruleName, leftRecursiveRuleName), indirectlyRepeatedRuleNamePart = (0, _part.ruleNamePartFromRuleName)(indirectlyRepeatedRuleName), indirectlyRepeatedPart = indirectlyRepeatedRuleNamePart; ///
|
|
53
|
+
return indirectlyRepeatedPart;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kZWZpbml0aW9uL3JlcGVhdGVkL2RpcmVjdGx5LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBEZWZpbml0aW9uIH0gZnJvbSBcIm9jY2FtLXBhcnNlcnNcIjtcbmltcG9ydCB7IHJ1bGVOYW1lc0Zyb21DeWNsZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvY3ljbGVcIjtcbmltcG9ydCB7IHBlcm11dGVSdWxlTmFtZXMsIGZvckVhY2hSdWxlTmFtZUFuZExlZnRSZWN1cnNpdmVSdWxlTmFtZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvcnVsZU5hbWVzXCI7XG5pbXBvcnQgeyBydWxlTmFtZVBhcnRGcm9tUnVsZU5hbWUsIHplcm9Pck1vcmVQYXJ0c1BhcnRGcm9tUGFydCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvcGFydFwiO1xuaW1wb3J0IHsgZGlyZWN0bHlSZXBlYXRlZFJ1bGVOYW1lRnJvbVJ1bGVOYW1lLCBpbmRpcmVjdGx5UmVwZWF0ZWRSdWxlTmFtZUZyb21SdWxlTmFtZUFuZExlZnRSZWN1cnNpdmVSdWxlTmFtZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvcnVsZU5hbWVcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlyZWN0bHlSZXBlYXRlZERlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgc3RhdGljIGZyb21SdWxlQW5kQ3ljbGUocnVsZSwgY3ljbGUpIHtcbiAgICBsZXQgZGlyZWN0bHlSZXBlYXRlZERlZmluaXRpb24gPSBudWxsO1xuXG4gICAgY29uc3QgcnVsZU5hbWUgPSBydWxlLmdldE5hbWUoKSxcbiAgICAgICAgICBydWxlTmFtZXMgPSBydWxlTmFtZXNGcm9tQ3ljbGUoY3ljbGUpLFxuICAgICAgICAgIHJ1bGVOYW1lSW5jbHVkZXNSdWxlTmFtZSA9IHJ1bGVOYW1lcy5pbmNsdWRlcyhydWxlTmFtZSk7XG5cbiAgICBpZiAocnVsZU5hbWVJbmNsdWRlc1J1bGVOYW1lKSB7XG4gICAgICBjb25zdCBwZXJtdXRlZFJ1bGVOYW1lcyA9IHBlcm11dGVSdWxlTmFtZXMocnVsZU5hbWVzLCBydWxlTmFtZSksXG4gICAgICAgICAgICBwYXRoID0gcGVybXV0ZWRSdWxlTmFtZXMsIC8vL1xuICAgICAgICAgICAgcGFydHMgPSBwYXJ0c0Zyb21QYXRoKHBhdGgpLFxuICAgICAgICAgICAgcHJlY2VkZW5jZSA9IG51bGw7XG5cbiAgICAgIGRpcmVjdGx5UmVwZWF0ZWREZWZpbml0aW9uID0gbmV3IERpcmVjdGx5UmVwZWF0ZWREZWZpbml0aW9uKHBhcnRzLCBwcmVjZWRlbmNlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGlyZWN0bHlSZXBlYXRlZERlZmluaXRpb247XG4gIH1cbn1cblxuZnVuY3Rpb24gcGVybXV0ZVBhdGgocGF0aCkge1xuICBjb25zdCBwZXJtdXRlZFBhdGggPSBwYXRoLnNsaWNlKCk7ICAvLy9cblxuICBwZXJtdXRlZFBhdGgucmV2ZXJzZSgpO1xuXG4gIGNvbnN0IHJ1bGVOYW1lID0gcGVybXV0ZWRQYXRoLnBvcCgpO1xuXG4gIHBlcm11dGVkUGF0aC51bnNoaWZ0KHJ1bGVOYW1lKTtcblxuICByZXR1cm4gcGVybXV0ZWRQYXRoO1xufVxuXG5mdW5jdGlvbiBwYXJ0c0Zyb21QYXRoKHBhdGgpIHtcbiAgY29uc3QgcGVybXV0ZWRQYXRoID0gcGVybXV0ZVBhdGgocGF0aCksXG4gICAgICAgIHJ1bGVOYW1lcyA9IHBlcm11dGVkUGF0aCwgLy8vXG4gICAgICAgIHBhcnRzID0gW107XG5cbiAgZm9yRWFjaFJ1bGVOYW1lQW5kTGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lKHJ1bGVOYW1lcywgKHJ1bGVOYW1lLCBsZWZ0UmVjdXJzaXZlUnVsZU5hbWUpID0+IHtcbiAgICBjb25zdCB0ZW1wb3JhcnlSdWxlTmFtZSA9IGxlZnRSZWN1cnNpdmVSdWxlTmFtZTsgLy8vXG5cbiAgICBsZWZ0UmVjdXJzaXZlUnVsZU5hbWUgPSBydWxlTmFtZTsgLy8vXG5cbiAgICBydWxlTmFtZSA9IHRlbXBvcmFyeVJ1bGVOYW1lOyAgLy8vXG5cbiAgICBjb25zdCBpbmRpcmVjdGx5UmVwZWF0ZWRQYXJ0ID0gaW5kaXJlY3RseVJlcGVhdGVkUGFydEZyb21SdWxlTmFtZUFuZExlZnRSZXVjcnNpdmVSdWxlTmFtZShydWxlTmFtZSwgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lKSxcbiAgICAgICAgICBkaXJlY3RseVJlcGVhdGVkUGFydCA9IGRpcmVjdGx5UmVwZWF0ZWRQYXJ0RnJvbVJ1bGVOYW1lKHJ1bGVOYW1lKTtcblxuICAgIHBhcnRzLnB1c2goaW5kaXJlY3RseVJlcGVhdGVkUGFydCk7XG5cbiAgICBwYXJ0cy5wdXNoKGRpcmVjdGx5UmVwZWF0ZWRQYXJ0KTtcbiAgfSk7XG5cbiAgcGFydHMucG9wKCk7XG5cbiAgcmV0dXJuIHBhcnRzO1xufVxuXG5mdW5jdGlvbiBkaXJlY3RseVJlcGVhdGVkUGFydEZyb21SdWxlTmFtZShydWxlTmFtZSkge1xuICBjb25zdCBkaXJlY3RseVJlcGVhdGVkUnVsZU5hbWUgPSBkaXJlY3RseVJlcGVhdGVkUnVsZU5hbWVGcm9tUnVsZU5hbWUocnVsZU5hbWUpLFxuICAgICAgICBkaXJlY3RseVJlcGVhdGVkUnVsZU5hbWVQYXJ0ID0gcnVsZU5hbWVQYXJ0RnJvbVJ1bGVOYW1lKGRpcmVjdGx5UmVwZWF0ZWRSdWxlTmFtZSksXG4gICAgICAgIHplcm9Pck1vcmVEaXJlY3RseVJlcGVhdGVkUnVsZU5hbWVQYXJ0c1BhcnQgPSB6ZXJvT3JNb3JlUGFydHNQYXJ0RnJvbVBhcnQoZGlyZWN0bHlSZXBlYXRlZFJ1bGVOYW1lUGFydCksXG4gICAgICAgIGRpcmVjdGx5UmVwZWF0ZWRQYXJ0ID0gemVyb09yTW9yZURpcmVjdGx5UmVwZWF0ZWRSdWxlTmFtZVBhcnRzUGFydDsgLy8vXG5cbiAgcmV0dXJuIGRpcmVjdGx5UmVwZWF0ZWRQYXJ0O1xufVxuXG5mdW5jdGlvbiBpbmRpcmVjdGx5UmVwZWF0ZWRQYXJ0RnJvbVJ1bGVOYW1lQW5kTGVmdFJldWNyc2l2ZVJ1bGVOYW1lKHJ1bGVOYW1lLCBsZWZ0UmVjdXJzaXZlUnVsZU5hbWUpIHtcbiAgY29uc3QgaW5kaXJlY3RseVJlcGVhdGVkUnVsZU5hbWUgPSBpbmRpcmVjdGx5UmVwZWF0ZWRSdWxlTmFtZUZyb21SdWxlTmFtZUFuZExlZnRSZWN1cnNpdmVSdWxlTmFtZShydWxlTmFtZSwgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lKSxcbiAgICAgICAgaW5kaXJlY3RseVJlcGVhdGVkUnVsZU5hbWVQYXJ0ID0gcnVsZU5hbWVQYXJ0RnJvbVJ1bGVOYW1lKGluZGlyZWN0bHlSZXBlYXRlZFJ1bGVOYW1lKSxcbiAgICAgICAgaW5kaXJlY3RseVJlcGVhdGVkUGFydCA9IGluZGlyZWN0bHlSZXBlYXRlZFJ1bGVOYW1lUGFydDsgIC8vL1xuXG4gIHJldHVybiBpbmRpcmVjdGx5UmVwZWF0ZWRQYXJ0O1xufVxuIl0sIm5hbWVzIjpbIkRpcmVjdGx5UmVwZWF0ZWREZWZpbml0aW9uIiwiRGVmaW5pdGlvbiIsImZyb21SdWxlQW5kQ3ljbGUiLCJydWxlIiwiY3ljbGUiLCJkaXJlY3RseVJlcGVhdGVkRGVmaW5pdGlvbiIsInJ1bGVOYW1lIiwiZ2V0TmFtZSIsInJ1bGVOYW1lcyIsInJ1bGVOYW1lc0Zyb21DeWNsZSIsInJ1bGVOYW1lSW5jbHVkZXNSdWxlTmFtZSIsImluY2x1ZGVzIiwicGVybXV0ZWRSdWxlTmFtZXMiLCJwZXJtdXRlUnVsZU5hbWVzIiwicGF0aCIsInBhcnRzIiwicGFydHNGcm9tUGF0aCIsInByZWNlZGVuY2UiLCJwZXJtdXRlUGF0aCIsInBlcm11dGVkUGF0aCIsInNsaWNlIiwicmV2ZXJzZSIsInBvcCIsInVuc2hpZnQiLCJmb3JFYWNoUnVsZU5hbWVBbmRMZWZ0UmVjdXJzaXZlUnVsZU5hbWUiLCJsZWZ0UmVjdXJzaXZlUnVsZU5hbWUiLCJ0ZW1wb3JhcnlSdWxlTmFtZSIsImluZGlyZWN0bHlSZXBlYXRlZFBhcnQiLCJpbmRpcmVjdGx5UmVwZWF0ZWRQYXJ0RnJvbVJ1bGVOYW1lQW5kTGVmdFJldWNyc2l2ZVJ1bGVOYW1lIiwiZGlyZWN0bHlSZXBlYXRlZFBhcnQiLCJkaXJlY3RseVJlcGVhdGVkUGFydEZyb21SdWxlTmFtZSIsInB1c2giLCJkaXJlY3RseVJlcGVhdGVkUnVsZU5hbWUiLCJkaXJlY3RseVJlcGVhdGVkUnVsZU5hbWVGcm9tUnVsZU5hbWUiLCJkaXJlY3RseVJlcGVhdGVkUnVsZU5hbWVQYXJ0IiwicnVsZU5hbWVQYXJ0RnJvbVJ1bGVOYW1lIiwiemVyb09yTW9yZURpcmVjdGx5UmVwZWF0ZWRSdWxlTmFtZVBhcnRzUGFydCIsInplcm9Pck1vcmVQYXJ0c1BhcnRGcm9tUGFydCIsImluZGlyZWN0bHlSZXBlYXRlZFJ1bGVOYW1lIiwiaW5kaXJlY3RseVJlcGVhdGVkUnVsZU5hbWVGcm9tUnVsZU5hbWVBbmRMZWZ0UmVjdXJzaXZlUnVsZU5hbWUiLCJpbmRpcmVjdGx5UmVwZWF0ZWRSdWxlTmFtZVBhcnQiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQVFBOzs7ZUFBcUJBOzs7OEJBTk07dUJBQ1E7MkJBQ3VDO3NCQUNKOzBCQUMrQztBQUV0RyxNQUFNQSxtQ0FBbUNDLHdCQUFVO0lBQ2hFLE9BQU9DLGlCQUFpQkMsSUFBSSxFQUFFQyxLQUFLLEVBQUU7UUFDbkMsSUFBSUMsNkJBQTZCO1FBRWpDLE1BQU1DLFdBQVdILEtBQUtJLE9BQU8sSUFDdkJDLFlBQVlDLElBQUFBLHlCQUFrQixFQUFDTCxRQUMvQk0sMkJBQTJCRixVQUFVRyxRQUFRLENBQUNMO1FBRXBELElBQUlJLDBCQUEwQjtZQUM1QixNQUFNRSxvQkFBb0JDLElBQUFBLDJCQUFnQixFQUFDTCxXQUFXRixXQUNoRFEsT0FBT0YsbUJBQ1BHLFFBQVFDLGNBQWNGLE9BQ3RCRyxhQUFhO1lBRW5CWiw2QkFBNkIsSUFBSUwsMkJBQTJCZSxPQUFPRTtRQUNyRTtRQUVBLE9BQU9aO0lBQ1Q7QUFDRjtBQUVBLFNBQVNhLFlBQVlKLElBQUk7SUFDdkIsTUFBTUssZUFBZUwsS0FBS00sS0FBSyxJQUFLLEdBQUc7SUFFdkNELGFBQWFFLE9BQU87SUFFcEIsTUFBTWYsV0FBV2EsYUFBYUcsR0FBRztJQUVqQ0gsYUFBYUksT0FBTyxDQUFDakI7SUFFckIsT0FBT2E7QUFDVDtBQUVBLFNBQVNILGNBQWNGLElBQUk7SUFDekIsTUFBTUssZUFBZUQsWUFBWUosT0FDM0JOLFlBQVlXLGNBQ1pKLFFBQVEsRUFBRTtJQUVoQlMsSUFBQUEsa0RBQXVDLEVBQUNoQixXQUFXLENBQUNGLFVBQVVtQjtRQUM1RCxNQUFNQyxvQkFBb0JELHVCQUF1QixHQUFHO1FBRXBEQSx3QkFBd0JuQixVQUFVLEdBQUc7UUFFckNBLFdBQVdvQixtQkFBb0IsR0FBRztRQUVsQyxNQUFNQyx5QkFBeUJDLDJEQUEyRHRCLFVBQVVtQix3QkFDOUZJLHVCQUF1QkMsaUNBQWlDeEI7UUFFOURTLE1BQU1nQixJQUFJLENBQUNKO1FBRVhaLE1BQU1nQixJQUFJLENBQUNGO0lBQ2I7SUFFQWQsTUFBTU8sR0FBRztJQUVULE9BQU9QO0FBQ1Q7QUFFQSxTQUFTZSxpQ0FBaUN4QixRQUFRO0lBQ2hELE1BQU0wQiwyQkFBMkJDLElBQUFBLDhDQUFvQyxFQUFDM0IsV0FDaEU0QiwrQkFBK0JDLElBQUFBLDhCQUF3QixFQUFDSCwyQkFDeERJLDhDQUE4Q0MsSUFBQUEsaUNBQTJCLEVBQUNILCtCQUMxRUwsdUJBQXVCTyw2Q0FBNkMsR0FBRztJQUU3RSxPQUFPUDtBQUNUO0FBRUEsU0FBU0QsMkRBQTJEdEIsUUFBUSxFQUFFbUIscUJBQXFCO0lBQ2pHLE1BQU1hLDZCQUE2QkMsSUFBQUEsd0VBQThELEVBQUNqQyxVQUFVbUIsd0JBQ3RHZSxpQ0FBaUNMLElBQUFBLDhCQUF3QixFQUFDRyw2QkFDMURYLHlCQUF5QmEsZ0NBQWlDLEdBQUc7SUFFbkUsT0FBT2I7QUFDVCJ9
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "default", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return RewrittenDefinition;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _occamparsers = require("occam-parsers");
|
|
12
|
+
const _necessary = require("necessary");
|
|
13
|
+
const _ruleNames = require("../utilities/ruleNames");
|
|
14
|
+
const _path = require("../utilities/path");
|
|
15
|
+
const _part = require("../utilities/part");
|
|
16
|
+
const _ruleName = require("../utilities/ruleName");
|
|
17
|
+
const { first } = _necessary.arrayUtilities;
|
|
18
|
+
class RewrittenDefinition extends _occamparsers.Definition {
|
|
19
|
+
static fromPath(path, ruleMap) {
|
|
20
|
+
let rewrittenDefinition = null;
|
|
21
|
+
const reducedRuleName = (0, _path.reducedRuleNameFromPath)(path), reducedRule = ruleMap[reducedRuleName] || null;
|
|
22
|
+
if (reducedRule !== null) {
|
|
23
|
+
rewrittenDefinition = rewrittenDefinitionFromPath(path);
|
|
24
|
+
}
|
|
25
|
+
return rewrittenDefinition;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
function reversePath(path) {
|
|
29
|
+
const reversedPath = path.slice();
|
|
30
|
+
reversedPath.reverse();
|
|
31
|
+
return reversedPath;
|
|
32
|
+
}
|
|
33
|
+
function rewrittenDefinitionFromPath(path) {
|
|
34
|
+
const reducedRuleNamePart = (0, _path.reducedRuleNamePartFromPath)(path), reversedPath = reversePath(path), ruleNames = reversedPath, ruleNamesLength = ruleNames.length, lastIndex = ruleNamesLength - 1, parts = []; ///
|
|
35
|
+
parts.push(reducedRuleNamePart);
|
|
36
|
+
(0, _ruleNames.forEachRuleNameAndLeftRecursiveRuleName)(ruleNames, (ruleName, leftRecursiveRuleName, index)=>{
|
|
37
|
+
if (index < lastIndex) {
|
|
38
|
+
const directlyRepeatedPart = directlyRepeatedPartFromRuleName(ruleName);
|
|
39
|
+
parts.push(directlyRepeatedPart);
|
|
40
|
+
const temporaryRuleName = leftRecursiveRuleName; ///
|
|
41
|
+
leftRecursiveRuleName = ruleName; ///
|
|
42
|
+
ruleName = temporaryRuleName; ///
|
|
43
|
+
const indirectlyRepeatedPart = indirectlyRepeatedPartFromRuleNameAndLeftRecursiveRuleName(ruleName, leftRecursiveRuleName);
|
|
44
|
+
parts.push(indirectlyRepeatedPart);
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
if (ruleNamesLength === 1) {
|
|
48
|
+
const firstRuleName = first(ruleNames), ruleName = firstRuleName, directlyRepeatedPart = directlyRepeatedPartFromRuleName(ruleName);
|
|
49
|
+
parts.push(directlyRepeatedPart);
|
|
50
|
+
}
|
|
51
|
+
const precedence = null, rewrittenDefinition = new RewrittenDefinition(parts, precedence);
|
|
52
|
+
return rewrittenDefinition;
|
|
53
|
+
}
|
|
54
|
+
function directlyRepeatedPartFromRuleName(ruleName) {
|
|
55
|
+
const directlyRepeatedRuleName = (0, _ruleName.directlyRepeatedRuleNameFromRuleName)(ruleName), directlyRepeatedRuleNamePart = (0, _part.ruleNamePartFromRuleName)(directlyRepeatedRuleName), zeroOrMoreDirectlyRepeatedRuleNamePartsPart = (0, _part.zeroOrMorePartsPartFromPart)(directlyRepeatedRuleNamePart), directlyRepeatedPart = zeroOrMoreDirectlyRepeatedRuleNamePartsPart; ///
|
|
56
|
+
return directlyRepeatedPart;
|
|
57
|
+
}
|
|
58
|
+
function indirectlyRepeatedPartFromRuleNameAndLeftRecursiveRuleName(ruleName, leftRecursiveRuleName) {
|
|
59
|
+
const indirectlyRepeatedRuleName = (0, _ruleName.indirectlyRepeatedRuleNameFromRuleNameAndLeftRecursiveRuleName)(ruleName, leftRecursiveRuleName), indirectlyRepeatedRuleNamePart = (0, _part.ruleNamePartFromRuleName)(indirectlyRepeatedRuleName), indirectlyRepeatedPart = indirectlyRepeatedRuleNamePart; ///
|
|
60
|
+
return indirectlyRepeatedPart;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kZWZpbml0aW9uL3Jld3JpdHRlbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgRGVmaW5pdGlvbiB9IGZyb20gXCJvY2NhbS1wYXJzZXJzXCI7XG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IHsgZm9yRWFjaFJ1bGVOYW1lQW5kTGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9ydWxlTmFtZXNcIjtcbmltcG9ydCB7IHJlZHVjZWRSdWxlTmFtZUZyb21QYXRoLCByZWR1Y2VkUnVsZU5hbWVQYXJ0RnJvbVBhdGggfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3BhdGhcIjtcbmltcG9ydCB7IHJ1bGVOYW1lUGFydEZyb21SdWxlTmFtZSwgemVyb09yTW9yZVBhcnRzUGFydEZyb21QYXJ0IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9wYXJ0XCI7XG5pbXBvcnQgeyBkaXJlY3RseVJlcGVhdGVkUnVsZU5hbWVGcm9tUnVsZU5hbWUsIGluZGlyZWN0bHlSZXBlYXRlZFJ1bGVOYW1lRnJvbVJ1bGVOYW1lQW5kTGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9ydWxlTmFtZVwiO1xuXG5jb25zdCB7IGZpcnN0IH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmV3cml0dGVuRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBzdGF0aWMgZnJvbVBhdGgocGF0aCwgcnVsZU1hcCkge1xuICAgIGxldCByZXdyaXR0ZW5EZWZpbml0aW9uID0gbnVsbDtcblxuICAgIGNvbnN0IHJlZHVjZWRSdWxlTmFtZSA9IHJlZHVjZWRSdWxlTmFtZUZyb21QYXRoKHBhdGgpLFxuICAgICAgICAgIHJlZHVjZWRSdWxlID0gcnVsZU1hcFtyZWR1Y2VkUnVsZU5hbWVdIHx8IG51bGw7XG5cbiAgICBpZiAocmVkdWNlZFJ1bGUgIT09IG51bGwpIHtcbiAgICAgIHJld3JpdHRlbkRlZmluaXRpb24gPSByZXdyaXR0ZW5EZWZpbml0aW9uRnJvbVBhdGgocGF0aCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJld3JpdHRlbkRlZmluaXRpb247XG4gIH1cbn1cblxuZnVuY3Rpb24gcmV2ZXJzZVBhdGgocGF0aCkge1xuICBjb25zdCByZXZlcnNlZFBhdGggPSBwYXRoLnNsaWNlKCk7XG5cbiAgcmV2ZXJzZWRQYXRoLnJldmVyc2UoKTtcblxuICByZXR1cm4gcmV2ZXJzZWRQYXRoO1xufVxuXG5mdW5jdGlvbiByZXdyaXR0ZW5EZWZpbml0aW9uRnJvbVBhdGgocGF0aCkge1xuICBjb25zdCByZWR1Y2VkUnVsZU5hbWVQYXJ0ID0gcmVkdWNlZFJ1bGVOYW1lUGFydEZyb21QYXRoKHBhdGgpLFxuICAgICAgICByZXZlcnNlZFBhdGggPSByZXZlcnNlUGF0aChwYXRoKSxcbiAgICAgICAgcnVsZU5hbWVzID0gcmV2ZXJzZWRQYXRoLCAvLy9cbiAgICAgICAgcnVsZU5hbWVzTGVuZ3RoID0gcnVsZU5hbWVzLmxlbmd0aCxcbiAgICAgICAgbGFzdEluZGV4ID0gcnVsZU5hbWVzTGVuZ3RoIC0gMSxcbiAgICAgICAgcGFydHMgPSBbXTsgLy8vXG5cbiAgcGFydHMucHVzaChyZWR1Y2VkUnVsZU5hbWVQYXJ0KTtcblxuICBmb3JFYWNoUnVsZU5hbWVBbmRMZWZ0UmVjdXJzaXZlUnVsZU5hbWUocnVsZU5hbWVzLCAocnVsZU5hbWUsIGxlZnRSZWN1cnNpdmVSdWxlTmFtZSwgaW5kZXgpID0+IHtcbiAgICBpZiAoaW5kZXggPCBsYXN0SW5kZXgpIHtcbiAgICAgIGNvbnN0IGRpcmVjdGx5UmVwZWF0ZWRQYXJ0ID0gZGlyZWN0bHlSZXBlYXRlZFBhcnRGcm9tUnVsZU5hbWUocnVsZU5hbWUpO1xuXG4gICAgICBwYXJ0cy5wdXNoKGRpcmVjdGx5UmVwZWF0ZWRQYXJ0KTtcblxuICAgICAgY29uc3QgdGVtcG9yYXJ5UnVsZU5hbWUgPSBsZWZ0UmVjdXJzaXZlUnVsZU5hbWU7IC8vL1xuXG4gICAgICBsZWZ0UmVjdXJzaXZlUnVsZU5hbWUgPSBydWxlTmFtZTsgLy8vXG5cbiAgICAgIHJ1bGVOYW1lID0gdGVtcG9yYXJ5UnVsZU5hbWU7ICAvLy9cblxuICAgICAgY29uc3QgaW5kaXJlY3RseVJlcGVhdGVkUGFydCA9IGluZGlyZWN0bHlSZXBlYXRlZFBhcnRGcm9tUnVsZU5hbWVBbmRMZWZ0UmVjdXJzaXZlUnVsZU5hbWUocnVsZU5hbWUsIGxlZnRSZWN1cnNpdmVSdWxlTmFtZSk7XG5cbiAgICAgIHBhcnRzLnB1c2goaW5kaXJlY3RseVJlcGVhdGVkUGFydCk7XG4gICAgfVxuICB9KTtcblxuICBpZiAocnVsZU5hbWVzTGVuZ3RoID09PSAxKSB7XG4gICAgY29uc3QgZmlyc3RSdWxlTmFtZSA9IGZpcnN0KHJ1bGVOYW1lcyksXG4gICAgICAgICAgcnVsZU5hbWUgPSBmaXJzdFJ1bGVOYW1lLFxuICAgICAgICAgIGRpcmVjdGx5UmVwZWF0ZWRQYXJ0ID0gZGlyZWN0bHlSZXBlYXRlZFBhcnRGcm9tUnVsZU5hbWUocnVsZU5hbWUpO1xuXG4gICAgcGFydHMucHVzaChkaXJlY3RseVJlcGVhdGVkUGFydCk7XG4gIH1cblxuICBjb25zdCBwcmVjZWRlbmNlID0gbnVsbCxcbiAgICAgICAgcmV3cml0dGVuRGVmaW5pdGlvbiA9IG5ldyBSZXdyaXR0ZW5EZWZpbml0aW9uKHBhcnRzLCBwcmVjZWRlbmNlKTtcblxuICByZXR1cm4gcmV3cml0dGVuRGVmaW5pdGlvbjtcbn1cblxuZnVuY3Rpb24gZGlyZWN0bHlSZXBlYXRlZFBhcnRGcm9tUnVsZU5hbWUocnVsZU5hbWUpIHtcbiAgY29uc3QgZGlyZWN0bHlSZXBlYXRlZFJ1bGVOYW1lID0gZGlyZWN0bHlSZXBlYXRlZFJ1bGVOYW1lRnJvbVJ1bGVOYW1lKHJ1bGVOYW1lKSxcbiAgICAgICAgZGlyZWN0bHlSZXBlYXRlZFJ1bGVOYW1lUGFydCA9IHJ1bGVOYW1lUGFydEZyb21SdWxlTmFtZShkaXJlY3RseVJlcGVhdGVkUnVsZU5hbWUpLFxuICAgICAgICB6ZXJvT3JNb3JlRGlyZWN0bHlSZXBlYXRlZFJ1bGVOYW1lUGFydHNQYXJ0ID0gemVyb09yTW9yZVBhcnRzUGFydEZyb21QYXJ0KGRpcmVjdGx5UmVwZWF0ZWRSdWxlTmFtZVBhcnQpLFxuICAgICAgICBkaXJlY3RseVJlcGVhdGVkUGFydCA9IHplcm9Pck1vcmVEaXJlY3RseVJlcGVhdGVkUnVsZU5hbWVQYXJ0c1BhcnQ7IC8vL1xuXG4gIHJldHVybiBkaXJlY3RseVJlcGVhdGVkUGFydDtcbn1cblxuZnVuY3Rpb24gaW5kaXJlY3RseVJlcGVhdGVkUGFydEZyb21SdWxlTmFtZUFuZExlZnRSZWN1cnNpdmVSdWxlTmFtZShydWxlTmFtZSwgbGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lKSB7XG4gIGNvbnN0IGluZGlyZWN0bHlSZXBlYXRlZFJ1bGVOYW1lID0gaW5kaXJlY3RseVJlcGVhdGVkUnVsZU5hbWVGcm9tUnVsZU5hbWVBbmRMZWZ0UmVjdXJzaXZlUnVsZU5hbWUocnVsZU5hbWUsIGxlZnRSZWN1cnNpdmVSdWxlTmFtZSksXG4gICAgICAgIGluZGlyZWN0bHlSZXBlYXRlZFJ1bGVOYW1lUGFydCA9IHJ1bGVOYW1lUGFydEZyb21SdWxlTmFtZShpbmRpcmVjdGx5UmVwZWF0ZWRSdWxlTmFtZSksXG4gICAgICAgIGluZGlyZWN0bHlSZXBlYXRlZFBhcnQgPSBpbmRpcmVjdGx5UmVwZWF0ZWRSdWxlTmFtZVBhcnQ7ICAvLy9cblxuICByZXR1cm4gaW5kaXJlY3RseVJlcGVhdGVkUGFydDtcbn1cblxuIl0sIm5hbWVzIjpbIlJld3JpdHRlbkRlZmluaXRpb24iLCJmaXJzdCIsImFycmF5VXRpbGl0aWVzIiwiRGVmaW5pdGlvbiIsImZyb21QYXRoIiwicGF0aCIsInJ1bGVNYXAiLCJyZXdyaXR0ZW5EZWZpbml0aW9uIiwicmVkdWNlZFJ1bGVOYW1lIiwicmVkdWNlZFJ1bGVOYW1lRnJvbVBhdGgiLCJyZWR1Y2VkUnVsZSIsInJld3JpdHRlbkRlZmluaXRpb25Gcm9tUGF0aCIsInJldmVyc2VQYXRoIiwicmV2ZXJzZWRQYXRoIiwic2xpY2UiLCJyZXZlcnNlIiwicmVkdWNlZFJ1bGVOYW1lUGFydCIsInJlZHVjZWRSdWxlTmFtZVBhcnRGcm9tUGF0aCIsInJ1bGVOYW1lcyIsInJ1bGVOYW1lc0xlbmd0aCIsImxlbmd0aCIsImxhc3RJbmRleCIsInBhcnRzIiwicHVzaCIsImZvckVhY2hSdWxlTmFtZUFuZExlZnRSZWN1cnNpdmVSdWxlTmFtZSIsInJ1bGVOYW1lIiwibGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lIiwiaW5kZXgiLCJkaXJlY3RseVJlcGVhdGVkUGFydCIsImRpcmVjdGx5UmVwZWF0ZWRQYXJ0RnJvbVJ1bGVOYW1lIiwidGVtcG9yYXJ5UnVsZU5hbWUiLCJpbmRpcmVjdGx5UmVwZWF0ZWRQYXJ0IiwiaW5kaXJlY3RseVJlcGVhdGVkUGFydEZyb21SdWxlTmFtZUFuZExlZnRSZWN1cnNpdmVSdWxlTmFtZSIsImZpcnN0UnVsZU5hbWUiLCJwcmVjZWRlbmNlIiwiZGlyZWN0bHlSZXBlYXRlZFJ1bGVOYW1lIiwiZGlyZWN0bHlSZXBlYXRlZFJ1bGVOYW1lRnJvbVJ1bGVOYW1lIiwiZGlyZWN0bHlSZXBlYXRlZFJ1bGVOYW1lUGFydCIsInJ1bGVOYW1lUGFydEZyb21SdWxlTmFtZSIsInplcm9Pck1vcmVEaXJlY3RseVJlcGVhdGVkUnVsZU5hbWVQYXJ0c1BhcnQiLCJ6ZXJvT3JNb3JlUGFydHNQYXJ0RnJvbVBhcnQiLCJpbmRpcmVjdGx5UmVwZWF0ZWRSdWxlTmFtZSIsImluZGlyZWN0bHlSZXBlYXRlZFJ1bGVOYW1lRnJvbVJ1bGVOYW1lQW5kTGVmdFJlY3Vyc2l2ZVJ1bGVOYW1lIiwiaW5kaXJlY3RseVJlcGVhdGVkUnVsZU5hbWVQYXJ0Il0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFZQTs7O2VBQXFCQTs7OzhCQVZNOzJCQUNJOzJCQUV5QjtzQkFDYTtzQkFDQzswQkFDK0M7QUFFckgsTUFBTSxFQUFFQyxLQUFLLEVBQUUsR0FBR0MseUJBQWM7QUFFakIsTUFBTUYsNEJBQTRCRyx3QkFBVTtJQUN6RCxPQUFPQyxTQUFTQyxJQUFJLEVBQUVDLE9BQU8sRUFBRTtRQUM3QixJQUFJQyxzQkFBc0I7UUFFMUIsTUFBTUMsa0JBQWtCQyxJQUFBQSw2QkFBdUIsRUFBQ0osT0FDMUNLLGNBQWNKLE9BQU8sQ0FBQ0UsZ0JBQWdCLElBQUk7UUFFaEQsSUFBSUUsZ0JBQWdCLE1BQU07WUFDeEJILHNCQUFzQkksNEJBQTRCTjtRQUNwRDtRQUVBLE9BQU9FO0lBQ1Q7QUFDRjtBQUVBLFNBQVNLLFlBQVlQLElBQUk7SUFDdkIsTUFBTVEsZUFBZVIsS0FBS1MsS0FBSztJQUUvQkQsYUFBYUUsT0FBTztJQUVwQixPQUFPRjtBQUNUO0FBRUEsU0FBU0YsNEJBQTRCTixJQUFJO0lBQ3ZDLE1BQU1XLHNCQUFzQkMsSUFBQUEsaUNBQTJCLEVBQUNaLE9BQ2xEUSxlQUFlRCxZQUFZUCxPQUMzQmEsWUFBWUwsY0FDWk0sa0JBQWtCRCxVQUFVRSxNQUFNLEVBQ2xDQyxZQUFZRixrQkFBa0IsR0FDOUJHLFFBQVEsRUFBRSxFQUFFLEdBQUc7SUFFckJBLE1BQU1DLElBQUksQ0FBQ1A7SUFFWFEsSUFBQUEsa0RBQXVDLEVBQUNOLFdBQVcsQ0FBQ08sVUFBVUMsdUJBQXVCQztRQUNuRixJQUFJQSxRQUFRTixXQUFXO1lBQ3JCLE1BQU1PLHVCQUF1QkMsaUNBQWlDSjtZQUU5REgsTUFBTUMsSUFBSSxDQUFDSztZQUVYLE1BQU1FLG9CQUFvQkosdUJBQXVCLEdBQUc7WUFFcERBLHdCQUF3QkQsVUFBVSxHQUFHO1lBRXJDQSxXQUFXSyxtQkFBb0IsR0FBRztZQUVsQyxNQUFNQyx5QkFBeUJDLDJEQUEyRFAsVUFBVUM7WUFFcEdKLE1BQU1DLElBQUksQ0FBQ1E7UUFDYjtJQUNGO0lBRUEsSUFBSVosb0JBQW9CLEdBQUc7UUFDekIsTUFBTWMsZ0JBQWdCaEMsTUFBTWlCLFlBQ3RCTyxXQUFXUSxlQUNYTCx1QkFBdUJDLGlDQUFpQ0o7UUFFOURILE1BQU1DLElBQUksQ0FBQ0s7SUFDYjtJQUVBLE1BQU1NLGFBQWEsTUFDYjNCLHNCQUFzQixJQUFJUCxvQkFBb0JzQixPQUFPWTtJQUUzRCxPQUFPM0I7QUFDVDtBQUVBLFNBQVNzQixpQ0FBaUNKLFFBQVE7SUFDaEQsTUFBTVUsMkJBQTJCQyxJQUFBQSw4Q0FBb0MsRUFBQ1gsV0FDaEVZLCtCQUErQkMsSUFBQUEsOEJBQXdCLEVBQUNILDJCQUN4REksOENBQThDQyxJQUFBQSxpQ0FBMkIsRUFBQ0gsK0JBQzFFVCx1QkFBdUJXLDZDQUE2QyxHQUFHO0lBRTdFLE9BQU9YO0FBQ1Q7QUFFQSxTQUFTSSwyREFBMkRQLFFBQVEsRUFBRUMscUJBQXFCO0lBQ2pHLE1BQU1lLDZCQUE2QkMsSUFBQUEsd0VBQThELEVBQUNqQixVQUFVQyx3QkFDdEdpQixpQ0FBaUNMLElBQUFBLDhCQUF3QixFQUFDRyw2QkFDMURWLHlCQUF5QlksZ0NBQWlDLEdBQUc7SUFFbkUsT0FBT1o7QUFDVCJ9
|
|
@@ -0,0 +1,190 @@
|
|
|
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: Object.getOwnPropertyDescriptor(all, name).get
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
_export(exports, {
|
|
12
|
+
get default () {
|
|
13
|
+
return DirectedGraph;
|
|
14
|
+
},
|
|
15
|
+
get edgesMatchEdge () {
|
|
16
|
+
return edgesMatchEdge;
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
const _necessary = require("necessary");
|
|
20
|
+
const _cycle = /*#__PURE__*/ _interop_require_default(require("./cycle"));
|
|
21
|
+
function _interop_require_default(obj) {
|
|
22
|
+
return obj && obj.__esModule ? obj : {
|
|
23
|
+
default: obj
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
const { last, find, compress } = _necessary.arrayUtilities;
|
|
27
|
+
class DirectedGraph {
|
|
28
|
+
constructor(edges, startVertex){
|
|
29
|
+
this.edges = edges;
|
|
30
|
+
this.startVertex = startVertex;
|
|
31
|
+
}
|
|
32
|
+
getEdges() {
|
|
33
|
+
return this.edges;
|
|
34
|
+
}
|
|
35
|
+
getStartVertex() {
|
|
36
|
+
return this.startVertex;
|
|
37
|
+
}
|
|
38
|
+
addEdge(edge) {
|
|
39
|
+
const matches = edgesMatchEdge(this.edges, edge);
|
|
40
|
+
if (!matches) {
|
|
41
|
+
this.edges.push(edge);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
addEdges(edges) {
|
|
45
|
+
edges.forEach((edge)=>{
|
|
46
|
+
this.addEdge(edge);
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
removeEdge(edge) {
|
|
50
|
+
const index = this.edges.indexOf(edge), start = index, deleteCount = 1;
|
|
51
|
+
this.edges.splice(start, deleteCount);
|
|
52
|
+
}
|
|
53
|
+
depthFirstSearch(vertex, vertexes, callback) {
|
|
54
|
+
const previousVertexes = vertexes, successorVertexes = this.findSuccessorVertexes(vertex);
|
|
55
|
+
successorVertexes.forEach((successorVertex)=>{
|
|
56
|
+
const previousVertexesIncludesSuccessorVertex = previousVertexes.includes(successorVertex), vertexes = [
|
|
57
|
+
...previousVertexes,
|
|
58
|
+
successorVertex
|
|
59
|
+
], vertex = successorVertex; ///
|
|
60
|
+
if (previousVertexesIncludesSuccessorVertex) {
|
|
61
|
+
callback(vertexes);
|
|
62
|
+
} else {
|
|
63
|
+
this.depthFirstSearch(vertex, vertexes, callback);
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
findCycles() {
|
|
68
|
+
const trivialCycles = this.findTrivialCycles(), nonTrivialCycles = this.findNonTrivialCycles(), cycles = [
|
|
69
|
+
...trivialCycles,
|
|
70
|
+
...nonTrivialCycles
|
|
71
|
+
];
|
|
72
|
+
compress(cycles, (cycleA, cycleB)=>{
|
|
73
|
+
const cyclesCoincident = areCyclesCoincident(cycleA, cycleB);
|
|
74
|
+
if (!cyclesCoincident) {
|
|
75
|
+
return true;
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
return cycles;
|
|
79
|
+
}
|
|
80
|
+
findTrivialCycles() {
|
|
81
|
+
const triviallyCyclicEdges = this.findTriviallyCyclicEdges(), trivialCycles = triviallyCyclicEdges.map((triviallyCyclicEdge)=>{
|
|
82
|
+
const edge = triviallyCyclicEdge, cycle = _cycle.default.fromEdge(edge), trivialCycle = cycle; ///
|
|
83
|
+
return trivialCycle;
|
|
84
|
+
});
|
|
85
|
+
return trivialCycles;
|
|
86
|
+
}
|
|
87
|
+
findNonTrivialCycles() {
|
|
88
|
+
const nonTrivialCycles = [], directedGraph = this, vertex = this.startVertex, vertexes = [
|
|
89
|
+
vertex
|
|
90
|
+
];
|
|
91
|
+
this.depthFirstSearch(vertex, vertexes, (vertexes)=>{
|
|
92
|
+
const nonTrivialCycle = nonTrivialCycleFromVertexes(vertexes, directedGraph);
|
|
93
|
+
nonTrivialCycles.push(nonTrivialCycle);
|
|
94
|
+
});
|
|
95
|
+
return nonTrivialCycles;
|
|
96
|
+
}
|
|
97
|
+
findSuccessorEdges(vertex) {
|
|
98
|
+
const sourceVertex = vertex, edges = this.findEdgesBySourceVertex(sourceVertex), successorEdges = edges.filter((edge)=>{
|
|
99
|
+
const targetVertex = edge.getTargetVertex();
|
|
100
|
+
if (targetVertex !== sourceVertex) {
|
|
101
|
+
return true;
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
return successorEdges;
|
|
105
|
+
}
|
|
106
|
+
findSuccessorVertexes(vertex) {
|
|
107
|
+
const successorEdges = this.findSuccessorEdges(vertex), successorVertexes = successorEdges.map((successorEdge)=>{
|
|
108
|
+
const successorEdgeTargetVertex = successorEdge.getTargetVertex(), successorVertex = successorEdgeTargetVertex; ///
|
|
109
|
+
return successorVertex;
|
|
110
|
+
});
|
|
111
|
+
return successorVertexes;
|
|
112
|
+
}
|
|
113
|
+
findEdgesBySourceVertex(sourceVertex) {
|
|
114
|
+
const edges = find(this.edges, (edge)=>{
|
|
115
|
+
const edgeMatchesSourceVertex = edge.matchSourceVertex(sourceVertex);
|
|
116
|
+
if (edgeMatchesSourceVertex) {
|
|
117
|
+
return true;
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
return edges;
|
|
121
|
+
}
|
|
122
|
+
findTriviallyCyclicEdges() {
|
|
123
|
+
const triviallyCyclicEdges = find(this.edges, (edge)=>{
|
|
124
|
+
const edgeTriviallyCyclic = edge.isTriviallyCyclic();
|
|
125
|
+
if (edgeTriviallyCyclic) {
|
|
126
|
+
return true;
|
|
127
|
+
}
|
|
128
|
+
});
|
|
129
|
+
return triviallyCyclicEdges;
|
|
130
|
+
}
|
|
131
|
+
findEdgeBySourceVertexAndTargetVertex(sourceVertex, targetVertex) {
|
|
132
|
+
const edge = this.edges.find((edge)=>{
|
|
133
|
+
const matches = edge.matchSourceVertexAndTargetVertex(sourceVertex, targetVertex);
|
|
134
|
+
if (matches) {
|
|
135
|
+
return true;
|
|
136
|
+
}
|
|
137
|
+
}) || null;
|
|
138
|
+
return edge;
|
|
139
|
+
}
|
|
140
|
+
static fromEdgesAndStartVertex(edges, startVertex) {
|
|
141
|
+
const directedGraph = new DirectedGraph(edges, startVertex);
|
|
142
|
+
return directedGraph;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
function edgesMatchEdge(edges, edge) {
|
|
146
|
+
const edgeA = edge, matches = edges.some((edge)=>{
|
|
147
|
+
const edgeB = edge, edgeAMatchesEdgeB = edgeA.match(edgeB);
|
|
148
|
+
if (edgeAMatchesEdgeB) {
|
|
149
|
+
return true;
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
return matches;
|
|
153
|
+
}
|
|
154
|
+
function nonTrivialCycleFromVertexes(vertexes, directedGraph) {
|
|
155
|
+
const lastVertex = last(vertexes), index = vertexes.indexOf(lastVertex), start = index; ///
|
|
156
|
+
vertexes = vertexes.slice(start); ///
|
|
157
|
+
vertexes.pop();
|
|
158
|
+
const length = vertexes.length, edges = vertexes.map((vertex, index)=>{
|
|
159
|
+
const nextIndex = (index + 1) % length, nextVertex = vertexes[nextIndex], sourceVertex = vertex, targetVertex = nextVertex, edge = directedGraph.findEdgeBySourceVertexAndTargetVertex(sourceVertex, targetVertex);
|
|
160
|
+
return edge;
|
|
161
|
+
}), cycle = _cycle.default.fromEdges(edges);
|
|
162
|
+
return cycle;
|
|
163
|
+
}
|
|
164
|
+
function someCyclePermutation(cycle, callback) {
|
|
165
|
+
let result = false;
|
|
166
|
+
const length = cycle.getLength();
|
|
167
|
+
for(let offset = 0; offset < length; offset++){
|
|
168
|
+
result = callback(cycle);
|
|
169
|
+
if (result) {
|
|
170
|
+
break;
|
|
171
|
+
}
|
|
172
|
+
cycle = cycle.permuted();
|
|
173
|
+
}
|
|
174
|
+
return result;
|
|
175
|
+
}
|
|
176
|
+
function areCyclesCoincident(cycleA, cycleB) {
|
|
177
|
+
let cyclesCoincident = false;
|
|
178
|
+
const cycleALength = cycleA.getLength(), cycleBLength = cycleB.getLength();
|
|
179
|
+
if (cycleALength === cycleBLength) {
|
|
180
|
+
cyclesCoincident = someCyclePermutation(cycleA, (cycleA)=>{
|
|
181
|
+
const cycleAEqualTo = cycleA.isEqualTo(cycleB);
|
|
182
|
+
if (cycleAEqualTo) {
|
|
183
|
+
return true;
|
|
184
|
+
}
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
return cyclesCoincident;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9kaXJlY3RlZEdyYXBoLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IEN5Y2xlIGZyb20gXCIuL2N5Y2xlXCI7XG5cbmNvbnN0IHsgbGFzdCwgZmluZCwgY29tcHJlc3MgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXJlY3RlZEdyYXBoIHtcbiAgY29uc3RydWN0b3IoZWRnZXMsIHN0YXJ0VmVydGV4KSB7XG4gICAgdGhpcy5lZGdlcyA9IGVkZ2VzO1xuICAgIHRoaXMuc3RhcnRWZXJ0ZXggPSBzdGFydFZlcnRleDtcbiAgfVxuXG4gIGdldEVkZ2VzKCkge1xuICAgIHJldHVybiB0aGlzLmVkZ2VzO1xuICB9XG5cbiAgZ2V0U3RhcnRWZXJ0ZXgoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRWZXJ0ZXg7XG4gIH1cblxuICBhZGRFZGdlKGVkZ2UpIHtcbiAgICBjb25zdCBtYXRjaGVzID0gZWRnZXNNYXRjaEVkZ2UodGhpcy5lZGdlcywgZWRnZSk7XG5cbiAgICBpZiAoIW1hdGNoZXMpIHtcbiAgICAgIHRoaXMuZWRnZXMucHVzaChlZGdlKTtcbiAgICB9XG4gIH1cblxuICBhZGRFZGdlcyhlZGdlcykge1xuICAgIGVkZ2VzLmZvckVhY2goKGVkZ2UpID0+IHtcbiAgICAgIHRoaXMuYWRkRWRnZShlZGdlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlbW92ZUVkZ2UoZWRnZSkge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5lZGdlcy5pbmRleE9mKGVkZ2UpLFxuICAgICAgICAgIHN0YXJ0ID0gaW5kZXgsICAvLy9cbiAgICAgICAgICBkZWxldGVDb3VudCA9IDE7XG5cbiAgICB0aGlzLmVkZ2VzLnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQpO1xuICB9XG5cbiAgZGVwdGhGaXJzdFNlYXJjaCh2ZXJ0ZXgsIHZlcnRleGVzLCBjYWxsYmFjaykge1xuICAgIGNvbnN0IHByZXZpb3VzVmVydGV4ZXMgPSB2ZXJ0ZXhlcywgIC8vL1xuICAgICAgICAgIHN1Y2Nlc3NvclZlcnRleGVzID0gdGhpcy5maW5kU3VjY2Vzc29yVmVydGV4ZXModmVydGV4KTtcblxuICAgIHN1Y2Nlc3NvclZlcnRleGVzLmZvckVhY2goKHN1Y2Nlc3NvclZlcnRleCkgPT4ge1xuICAgICAgY29uc3QgcHJldmlvdXNWZXJ0ZXhlc0luY2x1ZGVzU3VjY2Vzc29yVmVydGV4ID0gcHJldmlvdXNWZXJ0ZXhlcy5pbmNsdWRlcyhzdWNjZXNzb3JWZXJ0ZXgpLFxuICAgICAgICAgICAgdmVydGV4ZXMgPSBbXG4gICAgICAgICAgICAgIC4uLnByZXZpb3VzVmVydGV4ZXMsXG4gICAgICAgICAgICAgIHN1Y2Nlc3NvclZlcnRleFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHZlcnRleCA9IHN1Y2Nlc3NvclZlcnRleDsgIC8vL1xuXG4gICAgICBpZiAocHJldmlvdXNWZXJ0ZXhlc0luY2x1ZGVzU3VjY2Vzc29yVmVydGV4KSB7XG4gICAgICAgIGNhbGxiYWNrKHZlcnRleGVzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZGVwdGhGaXJzdFNlYXJjaCh2ZXJ0ZXgsIHZlcnRleGVzLCBjYWxsYmFjayk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBmaW5kQ3ljbGVzKCkge1xuICAgIGNvbnN0IHRyaXZpYWxDeWNsZXMgPSB0aGlzLmZpbmRUcml2aWFsQ3ljbGVzKCksXG4gICAgICAgICAgbm9uVHJpdmlhbEN5Y2xlcyA9IHRoaXMuZmluZE5vblRyaXZpYWxDeWNsZXMoKSxcbiAgICAgICAgICBjeWNsZXMgPSBbXG4gICAgICAgICAgICAuLi50cml2aWFsQ3ljbGVzLFxuICAgICAgICAgICAgLi4ubm9uVHJpdmlhbEN5Y2xlc1xuICAgICAgICAgIF07XG5cbiAgICBjb21wcmVzcyhjeWNsZXMsIChjeWNsZUEsIGN5Y2xlQikgPT4ge1xuICAgICAgY29uc3QgY3ljbGVzQ29pbmNpZGVudCA9IGFyZUN5Y2xlc0NvaW5jaWRlbnQoY3ljbGVBLCBjeWNsZUIpO1xuXG4gICAgICBpZiAoIWN5Y2xlc0NvaW5jaWRlbnQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gY3ljbGVzO1xuICB9XG5cbiAgZmluZFRyaXZpYWxDeWNsZXMoKSB7XG4gICAgY29uc3QgdHJpdmlhbGx5Q3ljbGljRWRnZXMgPSB0aGlzLmZpbmRUcml2aWFsbHlDeWNsaWNFZGdlcygpLFxuICAgICAgICAgIHRyaXZpYWxDeWNsZXMgPSB0cml2aWFsbHlDeWNsaWNFZGdlcy5tYXAoKHRyaXZpYWxseUN5Y2xpY0VkZ2UpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVkZ2UgPSB0cml2aWFsbHlDeWNsaWNFZGdlLCAgLy8vXG4gICAgICAgICAgICAgICAgICBjeWNsZSA9IEN5Y2xlLmZyb21FZGdlKGVkZ2UpLFxuICAgICAgICAgICAgICAgICAgdHJpdmlhbEN5Y2xlID0gY3ljbGU7IC8vL1xuXG4gICAgICAgICAgICByZXR1cm4gdHJpdmlhbEN5Y2xlO1xuICAgICAgICAgIH0pO1xuXG4gICAgcmV0dXJuIHRyaXZpYWxDeWNsZXM7XG4gIH1cblxuICBmaW5kTm9uVHJpdmlhbEN5Y2xlcygpIHtcbiAgICBjb25zdCBub25Ucml2aWFsQ3ljbGVzID0gW10sXG4gICAgICAgICAgZGlyZWN0ZWRHcmFwaCA9IHRoaXMsIC8vL1xuICAgICAgICAgIHZlcnRleCA9IHRoaXMuc3RhcnRWZXJ0ZXgsIC8vL1xuICAgICAgICAgIHZlcnRleGVzID0gW1xuICAgICAgICAgICAgdmVydGV4XG4gICAgICAgICAgXTtcblxuICAgIHRoaXMuZGVwdGhGaXJzdFNlYXJjaCh2ZXJ0ZXgsIHZlcnRleGVzLCAodmVydGV4ZXMpID0+IHtcbiAgICAgIGNvbnN0IG5vblRyaXZpYWxDeWNsZSA9IG5vblRyaXZpYWxDeWNsZUZyb21WZXJ0ZXhlcyh2ZXJ0ZXhlcywgZGlyZWN0ZWRHcmFwaCk7XG5cbiAgICAgIG5vblRyaXZpYWxDeWNsZXMucHVzaChub25Ucml2aWFsQ3ljbGUpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5vblRyaXZpYWxDeWNsZXM7XG4gIH1cblxuICBmaW5kU3VjY2Vzc29yRWRnZXModmVydGV4KSB7XG4gICAgY29uc3Qgc291cmNlVmVydGV4ID0gdmVydGV4LCAgLy8vXG4gICAgICAgICAgZWRnZXMgPSB0aGlzLmZpbmRFZGdlc0J5U291cmNlVmVydGV4KHNvdXJjZVZlcnRleCksXG4gICAgICAgICAgc3VjY2Vzc29yRWRnZXMgPSBlZGdlcy5maWx0ZXIoKGVkZ2UpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldFZlcnRleCA9IGVkZ2UuZ2V0VGFyZ2V0VmVydGV4KCk7XG5cbiAgICAgICAgICAgIGlmICh0YXJnZXRWZXJ0ZXggIT09IHNvdXJjZVZlcnRleCkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgIHJldHVybiBzdWNjZXNzb3JFZGdlcztcbiAgfVxuXG4gIGZpbmRTdWNjZXNzb3JWZXJ0ZXhlcyh2ZXJ0ZXgpIHtcbiAgICBjb25zdCBzdWNjZXNzb3JFZGdlcyA9IHRoaXMuZmluZFN1Y2Nlc3NvckVkZ2VzKHZlcnRleCksXG4gICAgICAgICAgc3VjY2Vzc29yVmVydGV4ZXMgPSBzdWNjZXNzb3JFZGdlcy5tYXAoKHN1Y2Nlc3NvckVkZ2UpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN1Y2Nlc3NvckVkZ2VUYXJnZXRWZXJ0ZXggPSBzdWNjZXNzb3JFZGdlLmdldFRhcmdldFZlcnRleCgpLFxuICAgICAgICAgICAgICAgICAgc3VjY2Vzc29yVmVydGV4ID0gc3VjY2Vzc29yRWRnZVRhcmdldFZlcnRleDsgIC8vL1xuXG4gICAgICAgICAgICByZXR1cm4gc3VjY2Vzc29yVmVydGV4O1xuICAgICAgICAgIH0pO1xuXG4gICAgcmV0dXJuIHN1Y2Nlc3NvclZlcnRleGVzO1xuICB9XG5cbiAgZmluZEVkZ2VzQnlTb3VyY2VWZXJ0ZXgoc291cmNlVmVydGV4KSB7XG4gICAgY29uc3QgZWRnZXMgPSBmaW5kKHRoaXMuZWRnZXMsIChlZGdlKSA9PiB7IC8vL1xuICAgICAgY29uc3QgZWRnZU1hdGNoZXNTb3VyY2VWZXJ0ZXggPSBlZGdlLm1hdGNoU291cmNlVmVydGV4KHNvdXJjZVZlcnRleCk7XG5cbiAgICAgIGlmIChlZGdlTWF0Y2hlc1NvdXJjZVZlcnRleCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBlZGdlcztcbiAgfVxuXG4gIGZpbmRUcml2aWFsbHlDeWNsaWNFZGdlcygpIHtcbiAgICBjb25zdCB0cml2aWFsbHlDeWNsaWNFZGdlcyA9IGZpbmQodGhpcy5lZGdlcywgKGVkZ2UpID0+IHtcbiAgICAgIGNvbnN0IGVkZ2VUcml2aWFsbHlDeWNsaWMgPSBlZGdlLmlzVHJpdmlhbGx5Q3ljbGljKCk7XG5cbiAgICAgIGlmIChlZGdlVHJpdmlhbGx5Q3ljbGljKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRyaXZpYWxseUN5Y2xpY0VkZ2VzO1xuICB9XG5cbiAgZmluZEVkZ2VCeVNvdXJjZVZlcnRleEFuZFRhcmdldFZlcnRleChzb3VyY2VWZXJ0ZXgsIHRhcmdldFZlcnRleCkge1xuICAgIGNvbnN0IGVkZ2UgPSB0aGlzLmVkZ2VzLmZpbmQoKGVkZ2UpID0+IHtcbiAgICAgIGNvbnN0IG1hdGNoZXMgPSBlZGdlLm1hdGNoU291cmNlVmVydGV4QW5kVGFyZ2V0VmVydGV4KHNvdXJjZVZlcnRleCwgdGFyZ2V0VmVydGV4KTtcblxuICAgICAgaWYgKG1hdGNoZXMpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBlZGdlO1xuICB9XG5cbiAgc3RhdGljIGZyb21FZGdlc0FuZFN0YXJ0VmVydGV4KGVkZ2VzLCBzdGFydFZlcnRleCkge1xuICAgIGNvbnN0IGRpcmVjdGVkR3JhcGggPSBuZXcgRGlyZWN0ZWRHcmFwaChlZGdlcywgc3RhcnRWZXJ0ZXgpO1xuXG4gICAgcmV0dXJuIGRpcmVjdGVkR3JhcGg7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVkZ2VzTWF0Y2hFZGdlKGVkZ2VzLCBlZGdlKSB7XG4gIGNvbnN0IGVkZ2VBID0gZWRnZSwgLy8vXG4gICAgICAgIG1hdGNoZXMgPSBlZGdlcy5zb21lKChlZGdlKSA9PiB7XG4gICAgICAgICAgY29uc3QgZWRnZUIgPSBlZGdlLCAvLy9cbiAgICAgICAgICAgICAgICBlZGdlQU1hdGNoZXNFZGdlQiA9IGVkZ2VBLm1hdGNoKGVkZ2VCKTtcblxuICAgICAgICAgIGlmIChlZGdlQU1hdGNoZXNFZGdlQikge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICByZXR1cm4gbWF0Y2hlcztcbn1cblxuZnVuY3Rpb24gbm9uVHJpdmlhbEN5Y2xlRnJvbVZlcnRleGVzKHZlcnRleGVzLCBkaXJlY3RlZEdyYXBoKSB7XG4gIGNvbnN0IGxhc3RWZXJ0ZXggPSBsYXN0KHZlcnRleGVzKSxcbiAgICAgICAgaW5kZXggPSB2ZXJ0ZXhlcy5pbmRleE9mKGxhc3RWZXJ0ZXgpLFxuICAgICAgICBzdGFydCA9IGluZGV4OyAgLy8vXG5cbiAgdmVydGV4ZXMgPSB2ZXJ0ZXhlcy5zbGljZShzdGFydCk7IC8vL1xuXG4gIHZlcnRleGVzLnBvcCgpO1xuXG4gIGNvbnN0IGxlbmd0aCA9IHZlcnRleGVzLmxlbmd0aCxcbiAgICAgICAgZWRnZXMgPSB2ZXJ0ZXhlcy5tYXAoKHZlcnRleCwgaW5kZXgpID0+IHtcbiAgICAgICAgICBjb25zdCBuZXh0SW5kZXggPSAoaW5kZXggKyAxKSAlIGxlbmd0aCxcbiAgICAgICAgICAgICAgICBuZXh0VmVydGV4ID0gdmVydGV4ZXNbbmV4dEluZGV4XSxcbiAgICAgICAgICAgICAgICBzb3VyY2VWZXJ0ZXggPSB2ZXJ0ZXgsICAvLy9cbiAgICAgICAgICAgICAgICB0YXJnZXRWZXJ0ZXggPSBuZXh0VmVydGV4LCAvLy9cbiAgICAgICAgICAgICAgICBlZGdlID0gZGlyZWN0ZWRHcmFwaC5maW5kRWRnZUJ5U291cmNlVmVydGV4QW5kVGFyZ2V0VmVydGV4KHNvdXJjZVZlcnRleCwgdGFyZ2V0VmVydGV4KTtcblxuICAgICAgICAgIHJldHVybiBlZGdlO1xuICAgICAgICB9KSxcbiAgICAgICAgY3ljbGUgPSBDeWNsZS5mcm9tRWRnZXMoZWRnZXMpO1xuXG4gIHJldHVybiBjeWNsZTtcbn1cblxuZnVuY3Rpb24gc29tZUN5Y2xlUGVybXV0YXRpb24oY3ljbGUsIGNhbGxiYWNrKSB7XG4gIGxldCByZXN1bHQgPSBmYWxzZTtcblxuICBjb25zdCBsZW5ndGggPSBjeWNsZS5nZXRMZW5ndGgoKTtcblxuICBmb3IgKGxldCBvZmZzZXQgPSAwOyBvZmZzZXQgPCBsZW5ndGg7IG9mZnNldCsrKSB7XG4gICAgcmVzdWx0ID0gY2FsbGJhY2soY3ljbGUpO1xuXG4gICAgaWYgKHJlc3VsdCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY3ljbGUgPSBjeWNsZS5wZXJtdXRlZCgpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gYXJlQ3ljbGVzQ29pbmNpZGVudChjeWNsZUEsIGN5Y2xlQikge1xuICBsZXQgY3ljbGVzQ29pbmNpZGVudCA9IGZhbHNlO1xuXG4gIGNvbnN0IGN5Y2xlQUxlbmd0aCA9IGN5Y2xlQS5nZXRMZW5ndGgoKSxcbiAgICAgICAgY3ljbGVCTGVuZ3RoID0gY3ljbGVCLmdldExlbmd0aCgpO1xuXG4gIGlmIChjeWNsZUFMZW5ndGggPT09IGN5Y2xlQkxlbmd0aCkge1xuICAgIGN5Y2xlc0NvaW5jaWRlbnQgPSBzb21lQ3ljbGVQZXJtdXRhdGlvbihjeWNsZUEsIChjeWNsZUEpID0+IHtcbiAgICAgIGNvbnN0IGN5Y2xlQUVxdWFsVG8gPSBjeWNsZUEuaXNFcXVhbFRvKGN5Y2xlQik7XG5cbiAgICAgIGlmIChjeWNsZUFFcXVhbFRvKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGN5Y2xlc0NvaW5jaWRlbnQ7XG59XG4iXSwibmFtZXMiOlsiRGlyZWN0ZWRHcmFwaCIsImVkZ2VzTWF0Y2hFZGdlIiwibGFzdCIsImZpbmQiLCJjb21wcmVzcyIsImFycmF5VXRpbGl0aWVzIiwiZWRnZXMiLCJzdGFydFZlcnRleCIsImdldEVkZ2VzIiwiZ2V0U3RhcnRWZXJ0ZXgiLCJhZGRFZGdlIiwiZWRnZSIsIm1hdGNoZXMiLCJwdXNoIiwiYWRkRWRnZXMiLCJmb3JFYWNoIiwicmVtb3ZlRWRnZSIsImluZGV4IiwiaW5kZXhPZiIsInN0YXJ0IiwiZGVsZXRlQ291bnQiLCJzcGxpY2UiLCJkZXB0aEZpcnN0U2VhcmNoIiwidmVydGV4IiwidmVydGV4ZXMiLCJjYWxsYmFjayIsInByZXZpb3VzVmVydGV4ZXMiLCJzdWNjZXNzb3JWZXJ0ZXhlcyIsImZpbmRTdWNjZXNzb3JWZXJ0ZXhlcyIsInN1Y2Nlc3NvclZlcnRleCIsInByZXZpb3VzVmVydGV4ZXNJbmNsdWRlc1N1Y2Nlc3NvclZlcnRleCIsImluY2x1ZGVzIiwiZmluZEN5Y2xlcyIsInRyaXZpYWxDeWNsZXMiLCJmaW5kVHJpdmlhbEN5Y2xlcyIsIm5vblRyaXZpYWxDeWNsZXMiLCJmaW5kTm9uVHJpdmlhbEN5Y2xlcyIsImN5Y2xlcyIsImN5Y2xlQSIsImN5Y2xlQiIsImN5Y2xlc0NvaW5jaWRlbnQiLCJhcmVDeWNsZXNDb2luY2lkZW50IiwidHJpdmlhbGx5Q3ljbGljRWRnZXMiLCJmaW5kVHJpdmlhbGx5Q3ljbGljRWRnZXMiLCJtYXAiLCJ0cml2aWFsbHlDeWNsaWNFZGdlIiwiY3ljbGUiLCJDeWNsZSIsImZyb21FZGdlIiwidHJpdmlhbEN5Y2xlIiwiZGlyZWN0ZWRHcmFwaCIsIm5vblRyaXZpYWxDeWNsZSIsIm5vblRyaXZpYWxDeWNsZUZyb21WZXJ0ZXhlcyIsImZpbmRTdWNjZXNzb3JFZGdlcyIsInNvdXJjZVZlcnRleCIsImZpbmRFZGdlc0J5U291cmNlVmVydGV4Iiwic3VjY2Vzc29yRWRnZXMiLCJmaWx0ZXIiLCJ0YXJnZXRWZXJ0ZXgiLCJnZXRUYXJnZXRWZXJ0ZXgiLCJzdWNjZXNzb3JFZGdlIiwic3VjY2Vzc29yRWRnZVRhcmdldFZlcnRleCIsImVkZ2VNYXRjaGVzU291cmNlVmVydGV4IiwibWF0Y2hTb3VyY2VWZXJ0ZXgiLCJlZGdlVHJpdmlhbGx5Q3ljbGljIiwiaXNUcml2aWFsbHlDeWNsaWMiLCJmaW5kRWRnZUJ5U291cmNlVmVydGV4QW5kVGFyZ2V0VmVydGV4IiwibWF0Y2hTb3VyY2VWZXJ0ZXhBbmRUYXJnZXRWZXJ0ZXgiLCJmcm9tRWRnZXNBbmRTdGFydFZlcnRleCIsImVkZ2VBIiwic29tZSIsImVkZ2VCIiwiZWRnZUFNYXRjaGVzRWRnZUIiLCJtYXRjaCIsImxhc3RWZXJ0ZXgiLCJzbGljZSIsInBvcCIsImxlbmd0aCIsIm5leHRJbmRleCIsIm5leHRWZXJ0ZXgiLCJmcm9tRWRnZXMiLCJzb21lQ3ljbGVQZXJtdXRhdGlvbiIsInJlc3VsdCIsImdldExlbmd0aCIsIm9mZnNldCIsInBlcm11dGVkIiwiY3ljbGVBTGVuZ3RoIiwiY3ljbGVCTGVuZ3RoIiwiY3ljbGVBRXF1YWxUbyIsImlzRXF1YWxUbyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O1FBUUE7ZUFBcUJBOztRQThLTEM7ZUFBQUE7OzsyQkFwTGU7OERBRWI7Ozs7OztBQUVsQixNQUFNLEVBQUVDLElBQUksRUFBRUMsSUFBSSxFQUFFQyxRQUFRLEVBQUUsR0FBR0MseUJBQWM7QUFFaEMsTUFBTUw7SUFDbkIsWUFBWU0sS0FBSyxFQUFFQyxXQUFXLENBQUU7UUFDOUIsSUFBSSxDQUFDRCxLQUFLLEdBQUdBO1FBQ2IsSUFBSSxDQUFDQyxXQUFXLEdBQUdBO0lBQ3JCO0lBRUFDLFdB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
|