occam-languages 3.0.29 → 3.0.30
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/context/file.js +7 -7
- package/lib/context/release.js +7 -7
- package/lib/context.js +3 -3
- package/lib/element.js +5 -5
- package/lib/pass/continuation.js +14 -14
- package/lib/pass/continuationZip.js +15 -15
- package/lib/utilities/breakPoint.js +4 -4
- package/lib/utilities/continuation.js +120 -94
- package/lib/utilities/verification.js +24 -21
- package/lib/utilities/verify.js +5 -5
- package/package.json +1 -1
- package/src/context/file.js +6 -6
- package/src/context/release.js +6 -6
- package/src/context.js +1 -1
- package/src/element.js +4 -4
- package/src/pass/continuation.js +17 -17
- package/src/pass/continuationZip.js +20 -20
- package/src/utilities/breakPoint.js +3 -3
- package/src/utilities/continuation.js +162 -118
- package/src/utilities/verification.js +24 -22
- package/src/utilities/verify.js +4 -4
|
@@ -27,15 +27,15 @@ const _necessary = require("necessary");
|
|
|
27
27
|
const _continuation = require("../utilities/continuation");
|
|
28
28
|
const _constants = require("../constants");
|
|
29
29
|
const { last } = _necessary.arrayUtilities;
|
|
30
|
-
function createReleaseContexts(dependencyName, context,
|
|
30
|
+
function createReleaseContexts(dependencyName, context, succeed, fail) {
|
|
31
31
|
const name = dependencyName, dependency = _occammodel.Dependency.fromName(name), dependentNames = [], dependentReleased = false;
|
|
32
|
-
return createReleaseContext(dependency, dependentNames, dependentReleased, context,
|
|
32
|
+
return createReleaseContext(dependency, dependentNames, dependentReleased, context, (releaseContextCreated)=>{
|
|
33
33
|
let releaseContextsCreated = false;
|
|
34
34
|
if (releaseContextCreated) {
|
|
35
35
|
releaseContextsCreated = true;
|
|
36
36
|
}
|
|
37
37
|
return succeed(releaseContextsCreated);
|
|
38
|
-
});
|
|
38
|
+
}, fail);
|
|
39
39
|
}
|
|
40
40
|
function initialiseReleaseContexts(context) {
|
|
41
41
|
const { releaseContexts } = context;
|
|
@@ -43,28 +43,28 @@ function initialiseReleaseContexts(context) {
|
|
|
43
43
|
initialiseReleaseContext(releaseContext, context);
|
|
44
44
|
});
|
|
45
45
|
}
|
|
46
|
-
function verifyReleaseContexts(context,
|
|
46
|
+
function verifyReleaseContexts(context, forward, back) {
|
|
47
47
|
const { releaseContexts } = context;
|
|
48
|
-
return (0, _continuation.every)(releaseContexts, verifyReleaseContext, context,
|
|
48
|
+
return (0, _continuation.every)(releaseContexts, verifyReleaseContext, context, forward, back);
|
|
49
49
|
}
|
|
50
50
|
const _default = {
|
|
51
51
|
createReleaseContexts,
|
|
52
52
|
initialiseReleaseContexts,
|
|
53
53
|
verifyReleaseContexts
|
|
54
54
|
};
|
|
55
|
-
function verifyReleaseContext(releaseContext, context,
|
|
55
|
+
function verifyReleaseContext(releaseContext, context, forward, back) {
|
|
56
56
|
const released = releaseContext.isReleased(), verified = releaseContext.hasVerified();
|
|
57
57
|
if (released || verified) {
|
|
58
|
-
return forward();
|
|
58
|
+
return forward(back);
|
|
59
59
|
}
|
|
60
60
|
const { log } = context, name = releaseContext.getName(), releaseName = name; ///
|
|
61
61
|
log.info(`Verifying the '${releaseName}' project...`);
|
|
62
|
-
return releaseContext.verify(back
|
|
62
|
+
return releaseContext.verify((back)=>{
|
|
63
63
|
log.info(`...verified the '${releaseName}' project.`);
|
|
64
|
-
return forward(context);
|
|
65
|
-
});
|
|
64
|
+
return forward(context, back);
|
|
65
|
+
}, back);
|
|
66
66
|
}
|
|
67
|
-
function createReleaseContext(dependency, dependentNames, dependentReleased, context,
|
|
67
|
+
function createReleaseContext(dependency, dependentNames, dependentReleased, context, succeed, fail) {
|
|
68
68
|
const { log } = context, releaseContext = findReleaseContext(dependency, context);
|
|
69
69
|
if (releaseContext !== null) {
|
|
70
70
|
const releaseContextCreated = true;
|
|
@@ -78,7 +78,7 @@ function createReleaseContext(dependency, dependentNames, dependentReleased, con
|
|
|
78
78
|
log.info(`Creating the '${dependencyName}' package context given the '${dependentName}' dependant's '${dependencyString}' dependency...`);
|
|
79
79
|
}
|
|
80
80
|
const { releaseContextFromDependency } = context;
|
|
81
|
-
return releaseContextFromDependency(dependency, context,
|
|
81
|
+
return releaseContextFromDependency(dependency, context, (releaseContext)=>{
|
|
82
82
|
let releaseContextCreated = false;
|
|
83
83
|
const releatePresent = checkReleasePresent(releaseContext, dependencyName, context);
|
|
84
84
|
if (!releatePresent) {
|
|
@@ -92,7 +92,7 @@ function createReleaseContext(dependency, dependentNames, dependentReleased, con
|
|
|
92
92
|
if (!releaseMatchesDependency) {
|
|
93
93
|
return succeed(releaseContextCreated);
|
|
94
94
|
}
|
|
95
|
-
return createDependencyReleaseContexts(releaseContext, dependency, dependentNames, context,
|
|
95
|
+
return createDependencyReleaseContexts(releaseContext, dependency, dependentNames, context, (dependencyReleaseContextsCreated)=>{
|
|
96
96
|
if (dependencyReleaseContextsCreated) {
|
|
97
97
|
releaseContextCreated = true;
|
|
98
98
|
}
|
|
@@ -101,24 +101,27 @@ function createReleaseContext(dependency, dependentNames, dependentReleased, con
|
|
|
101
101
|
}
|
|
102
102
|
releaseContextCreated ? log.debug(`...created the '${dependencyName}' package context.`) : log.warning(`...unable to create the '${dependencyName}' package context.`);
|
|
103
103
|
return succeed(releaseContextCreated);
|
|
104
|
-
});
|
|
105
|
-
});
|
|
104
|
+
}, fail);
|
|
105
|
+
}, fail);
|
|
106
106
|
}
|
|
107
|
-
function createDependencyReleaseContexts(releaseContext, dependency, dependentNames, context,
|
|
107
|
+
function createDependencyReleaseContexts(releaseContext, dependency, dependentNames, context, succeed, fail) {
|
|
108
108
|
const name = releaseContext.getName(), released = releaseContext.isReleased(), dependencies = releaseContext.getDependencies(), dependentName = name, dependentReleased = released; ///
|
|
109
109
|
dependentNames = [
|
|
110
110
|
...dependentNames,
|
|
111
111
|
dependentName
|
|
112
112
|
]; ///
|
|
113
113
|
const array = dependencies.getArray();
|
|
114
|
-
return (0, _continuation.every)(array, (dependency,
|
|
114
|
+
return (0, _continuation.every)(array, (dependency, forward, back)=>{
|
|
115
115
|
const cyclicDependencyPresent = checkCyclicDependencyPresent(dependency, dependentNames, context);
|
|
116
116
|
if (cyclicDependencyPresent) {
|
|
117
117
|
return back();
|
|
118
118
|
}
|
|
119
|
-
return createReleaseContext(dependency, dependentNames, dependentReleased, context,
|
|
120
|
-
|
|
121
|
-
|
|
119
|
+
return createReleaseContext(dependency, dependentNames, dependentReleased, context, (releaseContextCreated)=>{
|
|
120
|
+
if (!releaseContextCreated) {
|
|
121
|
+
return back();
|
|
122
|
+
}
|
|
123
|
+
return forward(back);
|
|
124
|
+
}, fail);
|
|
122
125
|
}, ()=>succeed(false), ()=>succeed(true));
|
|
123
126
|
}
|
|
124
127
|
function addReleaseContext(releaseContext, context) {
|
|
@@ -201,4 +204,4 @@ function checkProjectDependencyOfPackage(releaseContext, dependentReleased, depe
|
|
|
201
204
|
return projectDependencyOfPackage;
|
|
202
205
|
}
|
|
203
206
|
|
|
204
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvdmVyaWZpY2F0aW9uLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBEZXBlbmRlbmN5IH0gZnJvbSBcIm9jY2FtLW1vZGVsXCI7XG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IHsgZXZlcnkgIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250aW51YXRpb25cIjtcbmltcG9ydCB7IFNJTkdMRV9TUEFDRSB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxuY29uc3QgeyBsYXN0IH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlbGVhc2VDb250ZXh0cyhkZXBlbmRlbmN5TmFtZSwgY29udGV4dCwgZmFpbCwgc3VjY2VlZCkge1xuICBjb25zdCBuYW1lID0gZGVwZW5kZW5jeU5hbWUsICAvLy9cbiAgICAgICAgZGVwZW5kZW5jeSA9IERlcGVuZGVuY3kuZnJvbU5hbWUobmFtZSksXG4gICAgICAgIGRlcGVuZGVudE5hbWVzID0gW10sXG4gICAgICAgIGRlcGVuZGVudFJlbGVhc2VkID0gZmFsc2U7XG5cbiAgcmV0dXJuIGNyZWF0ZVJlbGVhc2VDb250ZXh0KGRlcGVuZGVuY3ksIGRlcGVuZGVudE5hbWVzLCBkZXBlbmRlbnRSZWxlYXNlZCwgY29udGV4dCwgZmFpbCwgKHJlbGVhc2VDb250ZXh0Q3JlYXRlZCkgPT4ge1xuICAgIGxldCByZWxlYXNlQ29udGV4dHNDcmVhdGVkID0gZmFsc2U7XG5cbiAgICBpZiAocmVsZWFzZUNvbnRleHRDcmVhdGVkKSB7XG4gICAgICByZWxlYXNlQ29udGV4dHNDcmVhdGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3VjY2VlZChyZWxlYXNlQ29udGV4dHNDcmVhdGVkKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0aWFsaXNlUmVsZWFzZUNvbnRleHRzKGNvbnRleHQpIHtcbiAgY29uc3QgeyByZWxlYXNlQ29udGV4dHMgfSA9IGNvbnRleHQ7XG5cbiAgcmVsZWFzZUNvbnRleHRzLmZvckVhY2goKHJlbGVhc2VDb250ZXh0KSA9PiB7XG4gICAgaW5pdGlhbGlzZVJlbGVhc2VDb250ZXh0KHJlbGVhc2VDb250ZXh0LCBjb250ZXh0KTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2ZXJpZnlSZWxlYXNlQ29udGV4dHMoY29udGV4dCwgYmFjaywgZm9yd2FyZCkge1xuICBjb25zdCB7IHJlbGVhc2VDb250ZXh0cyB9ID0gY29udGV4dDtcblxuICByZXR1cm4gZXZlcnkocmVsZWFzZUNvbnRleHRzLCB2ZXJpZnlSZWxlYXNlQ29udGV4dCwgY29udGV4dCwgYmFjaywgZm9yd2FyZCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY3JlYXRlUmVsZWFzZUNvbnRleHRzLFxuICBpbml0aWFsaXNlUmVsZWFzZUNvbnRleHRzLFxuICB2ZXJpZnlSZWxlYXNlQ29udGV4dHNcbn07XG5cbmZ1bmN0aW9uIHZlcmlmeVJlbGVhc2VDb250ZXh0KHJlbGVhc2VDb250ZXh0LCBjb250ZXh0LCBiYWNrLCBmb3J3YXJkKSB7XG4gIGNvbnN0IHJlbGVhc2VkID0gcmVsZWFzZUNvbnRleHQuaXNSZWxlYXNlZCgpLFxuICAgICAgICB2ZXJpZmllZCA9IHJlbGVhc2VDb250ZXh0Lmhhc1ZlcmlmaWVkKCk7XG5cbiAgaWYgKHJlbGVhc2VkIHx8IHZlcmlmaWVkKSB7XG4gICAgcmV0dXJuIGZvcndhcmQoKTtcbiAgfVxuXG4gIGNvbnN0IHsgbG9nIH0gPSBjb250ZXh0LFxuICAgICAgICBuYW1lID0gcmVsZWFzZUNvbnRleHQuZ2V0TmFtZSgpLFxuICAgICAgICByZWxlYXNlTmFtZSA9IG5hbWU7IC8vL1xuXG4gIGxvZy5pbmZvKGBWZXJpZnlpbmcgdGhlICcke3JlbGVhc2VOYW1lfScgcHJvamVjdC4uLmApO1xuXG4gIHJldHVybiByZWxlYXNlQ29udGV4dC52ZXJpZnkoYmFjaywgKCkgPT4ge1xuICAgIGxvZy5pbmZvKGAuLi52ZXJpZmllZCB0aGUgJyR7cmVsZWFzZU5hbWV9JyBwcm9qZWN0LmApO1xuXG4gICAgcmV0dXJuIGZvcndhcmQoY29udGV4dCk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVSZWxlYXNlQ29udGV4dChkZXBlbmRlbmN5LCBkZXBlbmRlbnROYW1lcywgZGVwZW5kZW50UmVsZWFzZWQsIGNvbnRleHQsIGZhaWwsIHN1Y2NlZWQpIHtcbiAgY29uc3QgeyBsb2cgfSA9IGNvbnRleHQsXG4gICAgICAgIHJlbGVhc2VDb250ZXh0ID0gZmluZFJlbGVhc2VDb250ZXh0KGRlcGVuZGVuY3ksIGNvbnRleHQpO1xuXG4gIGlmIChyZWxlYXNlQ29udGV4dCAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHJlbGVhc2VDb250ZXh0Q3JlYXRlZCA9IHRydWU7XG5cbiAgICByZXR1cm4gc3VjY2VlZChyZWxlYXNlQ29udGV4dENyZWF0ZWQpO1xuICB9XG5cbiAgY29uc3QgZGVwZW5kZW5jeU5hbWUgPSBkZXBlbmRlbmN5LmdldE5hbWUoKSxcbiAgICAgICAgZGVwZW5kZW50TmFtZXNMZW5ndGggPSBkZXBlbmRlbnROYW1lcy5sZW5ndGg7XG5cbiAgaWYgKGRlcGVuZGVudE5hbWVzTGVuZ3RoID09PSAwKSB7XG4gICAgbG9nLmluZm8oYENyZWF0aW5nIHRoZSAnJHtkZXBlbmRlbmN5TmFtZX0nIHBhY2thZ2UgY29udGV4dC4uLmApO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGxhc3REZXBlbmRlbnROYW1lID0gbGFzdChkZXBlbmRlbnROYW1lcyksXG4gICAgICAgICAgZGVwZW5kZW50TmFtZSA9IGxhc3REZXBlbmRlbnROYW1lLCAgLy8vXG4gICAgICAgICAgZGVwZW5kZW5jeVN0cmluZyA9IGRlcGVuZGVuY3kuYXNTdHJpbmcoKTtcblxuICAgIGxvZy5pbmZvKGBDcmVhdGluZyB0aGUgJyR7ZGVwZW5kZW5jeU5hbWV9JyBwYWNrYWdlIGNvbnRleHQgZ2l2ZW4gdGhlICcke2RlcGVuZGVudE5hbWV9JyBkZXBlbmRhbnQncyAnJHtkZXBlbmRlbmN5U3RyaW5nfScgZGVwZW5kZW5jeS4uLmApO1xuICB9XG5cbiAgY29uc3QgeyByZWxlYXNlQ29udGV4dEZyb21EZXBlbmRlbmN5IH0gPSBjb250ZXh0O1xuXG4gIHJldHVybiByZWxlYXNlQ29udGV4dEZyb21EZXBlbmRlbmN5KGRlcGVuZGVuY3ksIGNvbnRleHQsIGZhaWwsIChyZWxlYXNlQ29udGV4dCkgPT4ge1xuICAgIGxldCByZWxlYXNlQ29udGV4dENyZWF0ZWQgPSBmYWxzZTtcblxuICAgIGNvbnN0IHJlbGVhdGVQcmVzZW50ID0gY2hlY2tSZWxlYXNlUHJlc2VudChyZWxlYXNlQ29udGV4dCwgZGVwZW5kZW5jeU5hbWUsIGNvbnRleHQpO1xuXG4gICAgaWYgKCFyZWxlYXRlUHJlc2VudCkge1xuICAgICAgcmV0dXJuIHN1Y2NlZWQocmVsZWFzZUNvbnRleHRDcmVhdGVkKTtcbiAgICB9XG5cbiAgICBjb25zdCBwcm9qZWN0RGVwZW5kZW5jeU9mUGFja2FnZSA9IGNoZWNrUHJvamVjdERlcGVuZGVuY3lPZlBhY2thZ2UocmVsZWFzZUNvbnRleHQsIGRlcGVuZGVudFJlbGVhc2VkLCBkZXBlbmRlbnROYW1lcywgY29udGV4dCk7XG5cbiAgICBpZiAocHJvamVjdERlcGVuZGVuY3lPZlBhY2thZ2UpIHtcbiAgICAgIHJldHVybiBzdWNjZWVkKHJlbGVhc2VDb250ZXh0Q3JlYXRlZCk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVsZWFzZU1hdGNoZXNEZXBlbmRlbmN5ID0gY2hlY2tSZWxlYXNlTWF0Y2hlc0RlcGVuZGVuY3kocmVsZWFzZUNvbnRleHQsIGRlcGVuZGVuY3ksIGRlcGVuZGVudE5hbWVzLCBjb250ZXh0KTtcblxuICAgIGlmICghcmVsZWFzZU1hdGNoZXNEZXBlbmRlbmN5KSB7XG4gICAgICByZXR1cm4gc3VjY2VlZChyZWxlYXNlQ29udGV4dENyZWF0ZWQpO1xuICAgIH1cblxuICAgIHJldHVybiBjcmVhdGVEZXBlbmRlbmN5UmVsZWFzZUNvbnRleHRzKHJlbGVhc2VDb250ZXh0LCBkZXBlbmRlbmN5LCBkZXBlbmRlbnROYW1lcywgY29udGV4dCwgZmFpbCwgKGRlcGVuZGVuY3lSZWxlYXNlQ29udGV4dHNDcmVhdGVkKSA9PiB7XG4gICAgICBpZiAoZGVwZW5kZW5jeVJlbGVhc2VDb250ZXh0c0NyZWF0ZWQpIHtcbiAgICAgICAgcmVsZWFzZUNvbnRleHRDcmVhdGVkID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlbGVhc2VDb250ZXh0Q3JlYXRlZCkge1xuICAgICAgICBhZGRSZWxlYXNlQ29udGV4dChyZWxlYXNlQ29udGV4dCwgY29udGV4dCk7XG4gICAgICB9XG5cbiAgICAgIHJlbGVhc2VDb250ZXh0Q3JlYXRlZCA/XG4gICAgICAgIGxvZy5kZWJ1ZyhgLi4uY3JlYXRlZCB0aGUgJyR7ZGVwZW5kZW5jeU5hbWV9JyBwYWNrYWdlIGNvbnRleHQuYCkgOlxuICAgICAgICAgIGxvZy53YXJuaW5nKGAuLi51bmFibGUgdG8gY3JlYXRlIHRoZSAnJHtkZXBlbmRlbmN5TmFtZX0nIHBhY2thZ2UgY29udGV4dC5gKTtcblxuICAgICAgcmV0dXJuIHN1Y2NlZWQocmVsZWFzZUNvbnRleHRDcmVhdGVkKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZURlcGVuZGVuY3lSZWxlYXNlQ29udGV4dHMocmVsZWFzZUNvbnRleHQsIGRlcGVuZGVuY3ksIGRlcGVuZGVudE5hbWVzLCBjb250ZXh0LCBmYWlsLCBzdWNjZWVkKSB7XG4gIGNvbnN0IG5hbWUgPSByZWxlYXNlQ29udGV4dC5nZXROYW1lKCksXG4gICAgICAgIHJlbGVhc2VkID0gcmVsZWFzZUNvbnRleHQuaXNSZWxlYXNlZCgpLFxuICAgICAgICBkZXBlbmRlbmNpZXMgPSByZWxlYXNlQ29udGV4dC5nZXREZXBlbmRlbmNpZXMoKSxcbiAgICAgICAgZGVwZW5kZW50TmFtZSA9IG5hbWUsICAvLy9cbiAgICAgICAgZGVwZW5kZW50UmVsZWFzZWQgPSByZWxlYXNlZDsgIC8vL1xuXG4gIGRlcGVuZGVudE5hbWVzID0gWyAuLi5kZXBlbmRlbnROYW1lcywgZGVwZW5kZW50TmFtZSBdOyAgLy8vXG5cbiAgY29uc3QgYXJyYXkgPSBkZXBlbmRlbmNpZXMuZ2V0QXJyYXkoKTtcblxuICByZXR1cm4gZXZlcnkoYXJyYXksIChkZXBlbmRlbmN5LCBiYWNrLCBmb3J3YXJkKSA9PiB7XG4gICAgY29uc3QgY3ljbGljRGVwZW5kZW5jeVByZXNlbnQgPSBjaGVja0N5Y2xpY0RlcGVuZGVuY3lQcmVzZW50KGRlcGVuZGVuY3ksIGRlcGVuZGVudE5hbWVzLCBjb250ZXh0KTtcblxuICAgIGlmIChjeWNsaWNEZXBlbmRlbmN5UHJlc2VudCkge1xuICAgICAgcmV0dXJuIGJhY2soKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY3JlYXRlUmVsZWFzZUNvbnRleHQoZGVwZW5kZW5jeSwgZGVwZW5kZW50TmFtZXMsIGRlcGVuZGVudFJlbGVhc2VkLCBjb250ZXh0LCBmYWlsLCAocmVsZWFzZUNvbnRleHRDcmVhdGVkKSA9PiB7XG4gICAgICByZXR1cm4gKHJlbGVhc2VDb250ZXh0Q3JlYXRlZCkgP1xuICAgICAgICAgICAgICAgIGZvcndhcmQoKSA6XG4gICAgICAgICAgICAgICAgICBiYWNrKCk7XG4gICAgfSk7XG4gIH0sICgpID0+IHN1Y2NlZWQoZmFsc2UpLCAoKSA9PiBzdWNjZWVkKHRydWUpKTtcbn1cblxuZnVuY3Rpb24gYWRkUmVsZWFzZUNvbnRleHQocmVsZWFzZUNvbnRleHQsIGNvbnRleHQpIHtcbiAgY29uc3QgeyByZWxlYXNlQ29udGV4dHMgfSA9IGNvbnRleHQ7XG5cbiAgcmVsZWFzZUNvbnRleHRzLnB1c2gocmVsZWFzZUNvbnRleHQpO1xufVxuXG5mdW5jdGlvbiBmaW5kUmVsZWFzZUNvbnRleHQoZGVwZW5kZW5jeSwgY29udGV4dCkge1xuICBjb25zdCB7IHJlbGVhc2VDb250ZXh0cyB9ID0gY29udGV4dCxcbiAgICAgICAgZGVwZW5kZW5jeU5hbWUgPSBkZXBlbmRlbmN5LmdldE5hbWUoKSxcbiAgICAgICAgcmVsZWFzZUNvbnRleHQgPSByZWxlYXNlQ29udGV4dHMuZmluZCgocmVsZWFzZUNvbnRleHQpID0+IHtcbiAgICAgICAgICBjb25zdCBkZXBlbmRlbmN5TmFtZU1hdGNoZXMgPSByZWxlYXNlQ29udGV4dC5tYXRjaERlcGVuZGVuY3lOYW1lKGRlcGVuZGVuY3lOYW1lKTtcblxuICAgICAgICAgIGlmIChkZXBlbmRlbmN5TmFtZU1hdGNoZXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSkgfHwgbnVsbDtcblxuICByZXR1cm4gcmVsZWFzZUNvbnRleHQ7XG59XG5cbmZ1bmN0aW9uIGNoZWNrUmVsZWFzZVByZXNlbnQocmVsZWFzZUNvbnRleHQsIGRlcGVuZGVuY3lOYW1lLCBjb250ZXh0KSB7XG4gIGxldCByZWxlYXNlUHJlc2VudCA9IHRydWU7XG5cbiAgaWYgKHJlbGVhc2VDb250ZXh0ID09PSBudWxsKSB7XG4gICAgY29uc3QgeyBsb2cgfSA9IGNvbnRleHQ7XG5cbiAgICBsb2cud2FybmluZyhgVGhlICcke2RlcGVuZGVuY3lOYW1lfScgcGFja2FnZSBjb250ZXh0IGNvdWxkIG5vdCBiZSBjcmVhdGVkLiBQZXJoYXBzIHRoZSAnbWV0YS5qc29uJyBmaWxlIGlzIG1pc3Npbmcgb3IgaW52YWxpZC5gKTtcblxuICAgIHJlbGVhc2VQcmVzZW50ID0gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gcmVsZWFzZVByZXNlbnQ7XG59XG5cbmZ1bmN0aW9uIHJldHJpZXZlUmVsZWFzZUNvbnRleHRzKHJlbGVhc2VDb250ZXh0LCBjb250ZXh0LCByZWxlYXNlQ29udGV4dHMgPSBbXSkge1xuICBjb25zdCByZWxlYXNlQ29udGV4dHNJbmNsdWRlc1JlbGVhc2VDb250ZXh0ID0gcmVsZWFzZUNvbnRleHRzLmluY2x1ZGVzKHJlbGVhc2VDb250ZXh0KTtcblxuICBpZiAoIXJlbGVhc2VDb250ZXh0c0luY2x1ZGVzUmVsZWFzZUNvbnRleHQpIHtcbiAgICBjb25zdCBkZXBlbmRlbmNpZXMgPSByZWxlYXNlQ29udGV4dC5nZXREZXBlbmRlbmNpZXMoKTtcblxuICAgIGRlcGVuZGVuY2llcy5mb3JFYWNoRGVwZW5kZW5jeSgoZGVwZW5kZW5jeSkgPT4ge1xuICAgICAgY29uc3QgcmVsZWFzZUNvbnRleHQgPSBmaW5kUmVsZWFzZUNvbnRleHQoZGVwZW5kZW5jeSwgY29udGV4dCk7XG5cbiAgICAgIHJldHJpZXZlUmVsZWFzZUNvbnRleHRzKHJlbGVhc2VDb250ZXh0LCBjb250ZXh0LCByZWxlYXNlQ29udGV4dHMpO1xuICAgIH0pO1xuXG4gICAgcmVsZWFzZUNvbnRleHRzLnVuc2hpZnQocmVsZWFzZUNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHJlbGVhc2VDb250ZXh0cztcbn1cblxuZnVuY3Rpb24gaW5pdGlhbGlzZVJlbGVhc2VDb250ZXh0KHJlbGVhc2VDb250ZXh0LCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgbG9nIH0gPSBjb250ZXh0LFxuICAgICAgICBuYW1lID0gcmVsZWFzZUNvbnRleHQuZ2V0TmFtZSgpLFxuICAgICAgICByZWxlYXNlTmFtZSA9IG5hbWUsIC8vL1xuICAgICAgICByZWxlYXNlQ29udGV4dHMgPSByZXRyaWV2ZVJlbGVhc2VDb250ZXh0cyhyZWxlYXNlQ29udGV4dCwgY29udGV4dCk7XG5cbiAgbG9nLmluZm8oYEluaXRpYWxpc2luZyB0aGUgJyR7cmVsZWFzZU5hbWV9JyBwYWNrYWdlIGNvbnRleHQuLi5gKTtcblxuICBjb25zdCB7IEZpbGVDb250ZXh0RnJvbUZpbGVQYXRoIH0gPSBjb250ZXh0O1xuXG4gIHJlbGVhc2VDb250ZXh0LmluaXRpYWxpc2UocmVsZWFzZUNvbnRleHRzLCBGaWxlQ29udGV4dEZyb21GaWxlUGF0aCk7XG5cbiAgbG9nLmRlYnVnKGAuLi5pbml0aWFsaXNlZCB0aGUgJyR7cmVsZWFzZU5hbWV9JyBwYWNrYWdlIGNvbnRleHQuYCk7XG59XG5cbmZ1bmN0aW9uIGNoZWNrQ3ljbGljRGVwZW5kZW5jeVByZXNlbnQoZGVwZW5kZW5jeSwgZGVwZW5kZW50TmFtZXMsIGNvbnRleHQpIHtcbiAgbGV0IGN5Y2xpY0RlcGVuZGVuY3lQcmVzZW50ID0gZmFsc2U7XG5cbiAgY29uc3QgZGVwZW5kZW5jeU5hbWUgPSBkZXBlbmRlbmN5LmdldE5hbWUoKSxcbiAgICAgICAgaW5kZXggPSBkZXBlbmRlbnROYW1lcy5pbmRleE9mKGRlcGVuZGVuY3lOYW1lKTtcblxuICBpZiAoaW5kZXggPiAtMSkge1xuICAgIGNvbnN0IHsgbG9nIH0gPSBjb250ZXh0LFxuICAgICAgICAgIGNpcmN1bGFyRGVwZW5kZW50TmFtZXMgPSBkZXBlbmRlbnROYW1lcy5zbGljZShpbmRleCksXG4gICAgICAgICAgY2lyY3VsYXJEZXBlbmRlbmN5TmFtZXMgPSBbXG4gICAgICAgICAgICAuLi5jaXJjdWxhckRlcGVuZGVudE5hbWVzLFxuICAgICAgICAgICAgZGVwZW5kZW5jeU5hbWVcbiAgICAgICAgICBdLFxuICAgICAgICAgIGNpcmN1bGFyRGVwZW5kZW5jeU5hbWVzU3RyaW5nID0gY2lyY3VsYXJEZXBlbmRlbmN5TmFtZXMuam9pbihTSU5HTEVfU1BBQ0UpO1xuXG4gICAgbG9nLndhcm5pbmcoYFRoZXJlIGlzIGEgY3ljbGljIGRlcGVuZGVuY3ksICcke2NpcmN1bGFyRGVwZW5kZW5jeU5hbWVzU3RyaW5nfScuYCk7XG5cbiAgICBjeWNsaWNEZXBlbmRlbmN5UHJlc2VudCA9IHRydWU7XG4gIH1cblxuICByZXR1cm4gY3ljbGljRGVwZW5kZW5jeVByZXNlbnQ7XG59XG5cbmZ1bmN0aW9uIGNoZWNrUmVsZWFzZU1hdGNoZXNEZXBlbmRlbmN5KHJlbGVhc2VDb250ZXh0LCBkZXBlbmRlbmN5LCBkZXBlbmRlbnROYW1lcywgY29udGV4dCkge1xuICBsZXQgcmVsZWFzZU1hdGNoZXNEZXBlbmRlbmN5ID0gdHJ1ZTtcblxuICBjb25zdCBzaG9ydGVuZWRWZXJzaW9uID0gZGVwZW5kZW5jeS5nZXRTaG9ydGVuZWRWZXJzaW9uKCk7XG5cbiAgaWYgKHNob3J0ZW5lZFZlcnNpb24gIT09IG51bGwpIHtcbiAgICBjb25zdCBlbnRyaWVzTWF0Y2hTaG9ydGVuZWRWZXJzaW9uID0gcmVsZWFzZUNvbnRleHQubWF0Y2hTaG9ydGVuZWRWZXJzaW9uKHNob3J0ZW5lZFZlcnNpb24pO1xuXG4gICAgaWYgKCFlbnRyaWVzTWF0Y2hTaG9ydGVuZWRWZXJzaW9uKSB7XG4gICAgICBjb25zdCB7IGxvZyB9ID0gY29udGV4dCxcbiAgICAgICAgICAgIHZlcnNpb24gPSByZWxlYXNlQ29udGV4dC5nZXRWZXJzaW9uKCksXG4gICAgICAgICAgICBsYXN0RGVwZW5kZW50TmFtZSA9IGxhc3QoZGVwZW5kZW50TmFtZXMpLFxuICAgICAgICAgICAgZGVwZW5kZW50TmFtZSA9IGxhc3REZXBlbmRlbnROYW1lLCAgLy8vXG4gICAgICAgICAgICB2ZXJzaW9uU3RyaW5nID0gdmVyc2lvbi50b1N0cmluZygpLFxuICAgICAgICAgICAgZGVwZW5kZW5jeVN0cmluZyA9IGRlcGVuZGVuY3kuYXNTdHJpbmcoKTtcblxuICAgICAgbG9nLndhcm5pbmcoYFRoZSAnJHtkZXBlbmRlbnROYW1lfScgZGVwZW5kZW50IHJlcXVpcmVzIHRoZSAnJHtkZXBlbmRlbmN5U3RyaW5nfScgZGVwZW5kZW5jeSBidXQgYSBjb250ZXh0IHdpdGggdmVyc2lvbiAnJHt2ZXJzaW9uU3RyaW5nfScgd2FzIHByb3ZpZGVkLmApO1xuXG4gICAgICByZWxlYXNlTWF0Y2hlc0RlcGVuZGVuY3kgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVsZWFzZU1hdGNoZXNEZXBlbmRlbmN5O1xufVxuXG5mdW5jdGlvbiBjaGVja1Byb2plY3REZXBlbmRlbmN5T2ZQYWNrYWdlKHJlbGVhc2VDb250ZXh0LCBkZXBlbmRlbnRSZWxlYXNlZCwgZGVwZW5kZW50TmFtZXMsIGNvbnRleHQpIHtcbiAgbGV0IHByb2plY3REZXBlbmRlbmN5T2ZQYWNrYWdlID0gZmFsc2U7XG5cbiAgaWYgKGRlcGVuZGVudFJlbGVhc2VkKSB7XG4gICAgY29uc3QgdW5yZWxlYXNlZCA9IHJlbGVhc2VDb250ZXh0LmlzVW5yZWxlYXNlZCgpO1xuXG4gICAgaWYgKHVucmVsZWFzZWQpIHtcbiAgICAgIGNvbnN0IHsgbG9nIH0gPSBjb250ZXh0LFxuICAgICAgICAgICAgbmFtZSA9IHJlbGVhc2VDb250ZXh0LmdldE5hbWUoKSxcbiAgICAgICAgICAgIGxhc3REZXBlbmRlbnROYW1lID0gbGFzdChkZXBlbmRlbnROYW1lcyksXG4gICAgICAgICAgICBkZXBlbmRlbmN5TmFtZSA9IG5hbWUsLy8vXG4gICAgICAgICAgICBkZXBlbmRlbnROYW1lID0gbGFzdERlcGVuZGVudE5hbWU7ICAvLy9cblxuICAgICAgbG9nLndhcm5pbmcoYFRoZSAnJHtkZXBlbmRlbmN5TmFtZX0nIGRlcGVuZGVuY3kgaXMgYSBwcm9qZWN0IHdoaWxzdCBpdHMgJyR7ZGVwZW5kZW50TmFtZX0nIGRlcGVuZGVudCBpcyBhIHBhY2thZ2UuYCk7XG5cbiAgICAgIHByb2plY3REZXBlbmRlbmN5T2ZQYWNrYWdlID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcHJvamVjdERlcGVuZGVuY3lPZlBhY2thZ2U7XG59XG4iXSwibmFtZXMiOlsiY3JlYXRlUmVsZWFzZUNvbnRleHRzIiwiaW5pdGlhbGlzZVJlbGVhc2VDb250ZXh0cyIsInZlcmlmeVJlbGVhc2VDb250ZXh0cyIsImxhc3QiLCJhcnJheVV0aWxpdGllcyIsImRlcGVuZGVuY3lOYW1lIiwiY29udGV4dCIsImZhaWwiLCJzdWNjZWVkIiwibmFtZSIsImRlcGVuZGVuY3kiLCJEZXBlbmRlbmN5IiwiZnJvbU5hbWUiLCJkZXBlbmRlbnROYW1lcyIsImRlcGVuZGVudFJlbGVhc2VkIiwiY3JlYXRlUmVsZWFzZUNvbnRleHQiLCJyZWxlYXNlQ29udGV4dENyZWF0ZWQiLCJyZWxlYXNlQ29udGV4dHNDcmVhdGVkIiwicmVsZWFzZUNvbnRleHRzIiwiZm9yRWFjaCIsInJlbGVhc2VDb250ZXh0IiwiaW5pdGlhbGlzZVJlbGVhc2VDb250ZXh0IiwiYmFjayIsImZvcndhcmQiLCJldmVyeSIsInZlcmlmeVJlbGVhc2VDb250ZXh0IiwicmVsZWFzZWQiLCJpc1JlbGVhc2VkIiwidmVyaWZpZWQiLCJoYXNWZXJpZmllZCIsImxvZyIsImdldE5hbWUiLCJyZWxlYXNlTmFtZSIsImluZm8iLCJ2ZXJpZnkiLCJmaW5kUmVsZWFzZUNvbnRleHQiLCJkZXBlbmRlbnROYW1lc0xlbmd0aCIsImxlbmd0aCIsImxhc3REZXBlbmRlbnROYW1lIiwiZGVwZW5kZW50TmFtZSIsImRlcGVuZGVuY3lTdHJpbmciLCJhc1N0cmluZyIsInJlbGVhc2VDb250ZXh0RnJvbURlcGVuZGVuY3kiLCJyZWxlYXRlUHJlc2VudCIsImNoZWNrUmVsZWFzZVByZXNlbnQiLCJwcm9qZWN0RGVwZW5kZW5jeU9mUGFja2FnZSIsImNoZWNrUHJvamVjdERlcGVuZGVuY3lPZlBhY2thZ2UiLCJyZWxlYXNlTWF0Y2hlc0RlcGVuZGVuY3kiLCJjaGVja1JlbGVhc2VNYXRjaGVzRGVwZW5kZW5jeSIsImNyZWF0ZURlcGVuZGVuY3lSZWxlYXNlQ29udGV4dHMiLCJkZXBlbmRlbmN5UmVsZWFzZUNvbnRleHRzQ3JlYXRlZCIsImFkZFJlbGVhc2VDb250ZXh0IiwiZGVidWciLCJ3YXJuaW5nIiwiZGVwZW5kZW5jaWVzIiwiZ2V0RGVwZW5kZW5jaWVzIiwiYXJyYXkiLCJnZXRBcnJheSIsImN5Y2xpY0RlcGVuZGVuY3lQcmVzZW50IiwiY2hlY2tDeWNsaWNEZXBlbmRlbmN5UHJlc2VudCIsInB1c2giLCJmaW5kIiwiZGVwZW5kZW5jeU5hbWVNYXRjaGVzIiwibWF0Y2hEZXBlbmRlbmN5TmFtZSIsInJlbGVhc2VQcmVzZW50IiwicmV0cmlldmVSZWxlYXNlQ29udGV4dHMiLCJyZWxlYXNlQ29udGV4dHNJbmNsdWRlc1JlbGVhc2VDb250ZXh0IiwiaW5jbHVkZXMiLCJmb3JFYWNoRGVwZW5kZW5jeSIsInVuc2hpZnQiLCJGaWxlQ29udGV4dEZyb21GaWxlUGF0aCIsImluaXRpYWxpc2UiLCJpbmRleCIsImluZGV4T2YiLCJjaXJjdWxhckRlcGVuZGVudE5hbWVzIiwic2xpY2UiLCJjaXJjdWxhckRlcGVuZGVuY3lOYW1lcyIsImNpcmN1bGFyRGVwZW5kZW5jeU5hbWVzU3RyaW5nIiwiam9pbiIsIlNJTkdMRV9TUEFDRSIsInNob3J0ZW5lZFZlcnNpb24iLCJnZXRTaG9ydGVuZWRWZXJzaW9uIiwiZW50cmllc01hdGNoU2hvcnRlbmVkVmVyc2lvbiIsIm1hdGNoU2hvcnRlbmVkVmVyc2lvbiIsInZlcnNpb24iLCJnZXRWZXJzaW9uIiwidmVyc2lvblN0cmluZyIsInRvU3RyaW5nIiwidW5yZWxlYXNlZCIsImlzVW5yZWxlYXNlZCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O1FBVWdCQTtlQUFBQTs7UUErQmhCO2VBQUE7O1FBZGdCQztlQUFBQTs7UUFRQUM7ZUFBQUE7Ozs0QkFqQ1c7MkJBQ0k7OEJBRVI7MkJBQ007QUFFN0IsTUFBTSxFQUFFQyxJQUFJLEVBQUUsR0FBR0MseUJBQWM7QUFFeEIsU0FBU0osc0JBQXNCSyxjQUFjLEVBQUVDLE9BQU8sRUFBRUMsSUFBSSxFQUFFQyxPQUFPO0lBQzFFLE1BQU1DLE9BQU9KLGdCQUNQSyxhQUFhQyxzQkFBVSxDQUFDQyxRQUFRLENBQUNILE9BQ2pDSSxpQkFBaUIsRUFBRSxFQUNuQkMsb0JBQW9CO0lBRTFCLE9BQU9DLHFCQUFxQkwsWUFBWUcsZ0JBQWdCQyxtQkFBbUJSLFNBQVNDLE1BQU0sQ0FBQ1M7UUFDekYsSUFBSUMseUJBQXlCO1FBRTdCLElBQUlELHVCQUF1QjtZQUN6QkMseUJBQXlCO1FBQzNCO1FBRUEsT0FBT1QsUUFBUVM7SUFDakI7QUFDRjtBQUVPLFNBQVNoQiwwQkFBMEJLLE9BQU87SUFDL0MsTUFBTSxFQUFFWSxlQUFlLEVBQUUsR0FBR1o7SUFFNUJZLGdCQUFnQkMsT0FBTyxDQUFDLENBQUND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
|
|
207
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvdmVyaWZpY2F0aW9uLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBEZXBlbmRlbmN5IH0gZnJvbSBcIm9jY2FtLW1vZGVsXCI7XG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IHsgZXZlcnkgIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250aW51YXRpb25cIjtcbmltcG9ydCB7IFNJTkdMRV9TUEFDRSB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxuY29uc3QgeyBsYXN0IH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlbGVhc2VDb250ZXh0cyhkZXBlbmRlbmN5TmFtZSwgY29udGV4dCwgc3VjY2VlZCwgZmFpbCkge1xuICBjb25zdCBuYW1lID0gZGVwZW5kZW5jeU5hbWUsICAvLy9cbiAgICAgICAgZGVwZW5kZW5jeSA9IERlcGVuZGVuY3kuZnJvbU5hbWUobmFtZSksXG4gICAgICAgIGRlcGVuZGVudE5hbWVzID0gW10sXG4gICAgICAgIGRlcGVuZGVudFJlbGVhc2VkID0gZmFsc2U7XG5cbiAgcmV0dXJuIGNyZWF0ZVJlbGVhc2VDb250ZXh0KGRlcGVuZGVuY3ksIGRlcGVuZGVudE5hbWVzLCBkZXBlbmRlbnRSZWxlYXNlZCwgY29udGV4dCwgKHJlbGVhc2VDb250ZXh0Q3JlYXRlZCkgPT4ge1xuICAgIGxldCByZWxlYXNlQ29udGV4dHNDcmVhdGVkID0gZmFsc2U7XG5cbiAgICBpZiAocmVsZWFzZUNvbnRleHRDcmVhdGVkKSB7XG4gICAgICByZWxlYXNlQ29udGV4dHNDcmVhdGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3VjY2VlZChyZWxlYXNlQ29udGV4dHNDcmVhdGVkKTtcbiAgfSwgZmFpbCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0aWFsaXNlUmVsZWFzZUNvbnRleHRzKGNvbnRleHQpIHtcbiAgY29uc3QgeyByZWxlYXNlQ29udGV4dHMgfSA9IGNvbnRleHQ7XG5cbiAgcmVsZWFzZUNvbnRleHRzLmZvckVhY2goKHJlbGVhc2VDb250ZXh0KSA9PiB7XG4gICAgaW5pdGlhbGlzZVJlbGVhc2VDb250ZXh0KHJlbGVhc2VDb250ZXh0LCBjb250ZXh0KTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2ZXJpZnlSZWxlYXNlQ29udGV4dHMoY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICBjb25zdCB7IHJlbGVhc2VDb250ZXh0cyB9ID0gY29udGV4dDtcblxuICByZXR1cm4gZXZlcnkocmVsZWFzZUNvbnRleHRzLCB2ZXJpZnlSZWxlYXNlQ29udGV4dCwgY29udGV4dCwgZm9yd2FyZCwgYmFjayk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY3JlYXRlUmVsZWFzZUNvbnRleHRzLFxuICBpbml0aWFsaXNlUmVsZWFzZUNvbnRleHRzLFxuICB2ZXJpZnlSZWxlYXNlQ29udGV4dHNcbn07XG5cbmZ1bmN0aW9uIHZlcmlmeVJlbGVhc2VDb250ZXh0KHJlbGVhc2VDb250ZXh0LCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gIGNvbnN0IHJlbGVhc2VkID0gcmVsZWFzZUNvbnRleHQuaXNSZWxlYXNlZCgpLFxuICAgICAgICB2ZXJpZmllZCA9IHJlbGVhc2VDb250ZXh0Lmhhc1ZlcmlmaWVkKCk7XG5cbiAgaWYgKHJlbGVhc2VkIHx8IHZlcmlmaWVkKSB7XG4gICAgcmV0dXJuIGZvcndhcmQoYmFjayk7XG4gIH1cblxuICBjb25zdCB7IGxvZyB9ID0gY29udGV4dCxcbiAgICAgICAgbmFtZSA9IHJlbGVhc2VDb250ZXh0LmdldE5hbWUoKSxcbiAgICAgICAgcmVsZWFzZU5hbWUgPSBuYW1lOyAvLy9cblxuICBsb2cuaW5mbyhgVmVyaWZ5aW5nIHRoZSAnJHtyZWxlYXNlTmFtZX0nIHByb2plY3QuLi5gKTtcblxuICByZXR1cm4gcmVsZWFzZUNvbnRleHQudmVyaWZ5KChiYWNrKSA9PiB7XG4gICAgbG9nLmluZm8oYC4uLnZlcmlmaWVkIHRoZSAnJHtyZWxlYXNlTmFtZX0nIHByb2plY3QuYCk7XG5cbiAgICByZXR1cm4gZm9yd2FyZChjb250ZXh0LCBiYWNrKTtcbiAgfSwgYmFjayk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVJlbGVhc2VDb250ZXh0KGRlcGVuZGVuY3ksIGRlcGVuZGVudE5hbWVzLCBkZXBlbmRlbnRSZWxlYXNlZCwgY29udGV4dCwgc3VjY2VlZCwgZmFpbCkge1xuICBjb25zdCB7IGxvZyB9ID0gY29udGV4dCxcbiAgICAgICAgcmVsZWFzZUNvbnRleHQgPSBmaW5kUmVsZWFzZUNvbnRleHQoZGVwZW5kZW5jeSwgY29udGV4dCk7XG5cbiAgaWYgKHJlbGVhc2VDb250ZXh0ICE9PSBudWxsKSB7XG4gICAgY29uc3QgcmVsZWFzZUNvbnRleHRDcmVhdGVkID0gdHJ1ZTtcblxuICAgIHJldHVybiBzdWNjZWVkKHJlbGVhc2VDb250ZXh0Q3JlYXRlZCk7XG4gIH1cblxuICBjb25zdCBkZXBlbmRlbmN5TmFtZSA9IGRlcGVuZGVuY3kuZ2V0TmFtZSgpLFxuICAgICAgICBkZXBlbmRlbnROYW1lc0xlbmd0aCA9IGRlcGVuZGVudE5hbWVzLmxlbmd0aDtcblxuICBpZiAoZGVwZW5kZW50TmFtZXNMZW5ndGggPT09IDApIHtcbiAgICBsb2cuaW5mbyhgQ3JlYXRpbmcgdGhlICcke2RlcGVuZGVuY3lOYW1lfScgcGFja2FnZSBjb250ZXh0Li4uYCk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgbGFzdERlcGVuZGVudE5hbWUgPSBsYXN0KGRlcGVuZGVudE5hbWVzKSxcbiAgICAgICAgICBkZXBlbmRlbnROYW1lID0gbGFzdERlcGVuZGVudE5hbWUsICAvLy9cbiAgICAgICAgICBkZXBlbmRlbmN5U3RyaW5nID0gZGVwZW5kZW5jeS5hc1N0cmluZygpO1xuXG4gICAgbG9nLmluZm8oYENyZWF0aW5nIHRoZSAnJHtkZXBlbmRlbmN5TmFtZX0nIHBhY2thZ2UgY29udGV4dCBnaXZlbiB0aGUgJyR7ZGVwZW5kZW50TmFtZX0nIGRlcGVuZGFudCdzICcke2RlcGVuZGVuY3lTdHJpbmd9JyBkZXBlbmRlbmN5Li4uYCk7XG4gIH1cblxuICBjb25zdCB7IHJlbGVhc2VDb250ZXh0RnJvbURlcGVuZGVuY3kgfSA9IGNvbnRleHQ7XG5cbiAgcmV0dXJuIHJlbGVhc2VDb250ZXh0RnJvbURlcGVuZGVuY3koZGVwZW5kZW5jeSwgY29udGV4dCwgKHJlbGVhc2VDb250ZXh0KSA9PiB7XG4gICAgbGV0IHJlbGVhc2VDb250ZXh0Q3JlYXRlZCA9IGZhbHNlO1xuXG4gICAgY29uc3QgcmVsZWF0ZVByZXNlbnQgPSBjaGVja1JlbGVhc2VQcmVzZW50KHJlbGVhc2VDb250ZXh0LCBkZXBlbmRlbmN5TmFtZSwgY29udGV4dCk7XG5cbiAgICBpZiAoIXJlbGVhdGVQcmVzZW50KSB7XG4gICAgICByZXR1cm4gc3VjY2VlZChyZWxlYXNlQ29udGV4dENyZWF0ZWQpO1xuICAgIH1cblxuICAgIGNvbnN0IHByb2plY3REZXBlbmRlbmN5T2ZQYWNrYWdlID0gY2hlY2tQcm9qZWN0RGVwZW5kZW5jeU9mUGFja2FnZShyZWxlYXNlQ29udGV4dCwgZGVwZW5kZW50UmVsZWFzZWQsIGRlcGVuZGVudE5hbWVzLCBjb250ZXh0KTtcblxuICAgIGlmIChwcm9qZWN0RGVwZW5kZW5jeU9mUGFja2FnZSkge1xuICAgICAgcmV0dXJuIHN1Y2NlZWQocmVsZWFzZUNvbnRleHRDcmVhdGVkKTtcbiAgICB9XG5cbiAgICBjb25zdCByZWxlYXNlTWF0Y2hlc0RlcGVuZGVuY3kgPSBjaGVja1JlbGVhc2VNYXRjaGVzRGVwZW5kZW5jeShyZWxlYXNlQ29udGV4dCwgZGVwZW5kZW5jeSwgZGVwZW5kZW50TmFtZXMsIGNvbnRleHQpO1xuXG4gICAgaWYgKCFyZWxlYXNlTWF0Y2hlc0RlcGVuZGVuY3kpIHtcbiAgICAgIHJldHVybiBzdWNjZWVkKHJlbGVhc2VDb250ZXh0Q3JlYXRlZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNyZWF0ZURlcGVuZGVuY3lSZWxlYXNlQ29udGV4dHMocmVsZWFzZUNvbnRleHQsIGRlcGVuZGVuY3ksIGRlcGVuZGVudE5hbWVzLCBjb250ZXh0LCAoZGVwZW5kZW5jeVJlbGVhc2VDb250ZXh0c0NyZWF0ZWQpID0+IHtcbiAgICAgIGlmIChkZXBlbmRlbmN5UmVsZWFzZUNvbnRleHRzQ3JlYXRlZCkge1xuICAgICAgICByZWxlYXNlQ29udGV4dENyZWF0ZWQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVsZWFzZUNvbnRleHRDcmVhdGVkKSB7XG4gICAgICAgIGFkZFJlbGVhc2VDb250ZXh0KHJlbGVhc2VDb250ZXh0LCBjb250ZXh0KTtcbiAgICAgIH1cblxuICAgICAgcmVsZWFzZUNvbnRleHRDcmVhdGVkID9cbiAgICAgICAgbG9nLmRlYnVnKGAuLi5jcmVhdGVkIHRoZSAnJHtkZXBlbmRlbmN5TmFtZX0nIHBhY2thZ2UgY29udGV4dC5gKSA6XG4gICAgICAgICAgbG9nLndhcm5pbmcoYC4uLnVuYWJsZSB0byBjcmVhdGUgdGhlICcke2RlcGVuZGVuY3lOYW1lfScgcGFja2FnZSBjb250ZXh0LmApO1xuXG4gICAgICByZXR1cm4gc3VjY2VlZChyZWxlYXNlQ29udGV4dENyZWF0ZWQpO1xuICAgIH0sIGZhaWwpO1xuICB9LCBmYWlsKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRGVwZW5kZW5jeVJlbGVhc2VDb250ZXh0cyhyZWxlYXNlQ29udGV4dCwgZGVwZW5kZW5jeSwgZGVwZW5kZW50TmFtZXMsIGNvbnRleHQsIHN1Y2NlZWQsIGZhaWwpIHtcbiAgY29uc3QgbmFtZSA9IHJlbGVhc2VDb250ZXh0LmdldE5hbWUoKSxcbiAgICAgICAgcmVsZWFzZWQgPSByZWxlYXNlQ29udGV4dC5pc1JlbGVhc2VkKCksXG4gICAgICAgIGRlcGVuZGVuY2llcyA9IHJlbGVhc2VDb250ZXh0LmdldERlcGVuZGVuY2llcygpLFxuICAgICAgICBkZXBlbmRlbnROYW1lID0gbmFtZSwgIC8vL1xuICAgICAgICBkZXBlbmRlbnRSZWxlYXNlZCA9IHJlbGVhc2VkOyAgLy8vXG5cbiAgZGVwZW5kZW50TmFtZXMgPSBbIC4uLmRlcGVuZGVudE5hbWVzLCBkZXBlbmRlbnROYW1lIF07ICAvLy9cblxuICBjb25zdCBhcnJheSA9IGRlcGVuZGVuY2llcy5nZXRBcnJheSgpO1xuXG4gIHJldHVybiBldmVyeShhcnJheSwgKGRlcGVuZGVuY3ksIGZvcndhcmQsIGJhY2spID0+IHtcbiAgICBjb25zdCBjeWNsaWNEZXBlbmRlbmN5UHJlc2VudCA9IGNoZWNrQ3ljbGljRGVwZW5kZW5jeVByZXNlbnQoZGVwZW5kZW5jeSwgZGVwZW5kZW50TmFtZXMsIGNvbnRleHQpO1xuXG4gICAgaWYgKGN5Y2xpY0RlcGVuZGVuY3lQcmVzZW50KSB7XG4gICAgICByZXR1cm4gYmFjaygpO1xuICAgIH1cblxuICAgIHJldHVybiBjcmVhdGVSZWxlYXNlQ29udGV4dChkZXBlbmRlbmN5LCBkZXBlbmRlbnROYW1lcywgZGVwZW5kZW50UmVsZWFzZWQsIGNvbnRleHQsIChyZWxlYXNlQ29udGV4dENyZWF0ZWQpID0+IHtcbiAgICAgIGlmICghcmVsZWFzZUNvbnRleHRDcmVhdGVkKSB7XG4gICAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKGJhY2spO1xuICAgIH0sIGZhaWwpO1xuICB9LCAoKSA9PiBzdWNjZWVkKGZhbHNlKSwgKCkgPT4gc3VjY2VlZCh0cnVlKSk7XG59XG5cbmZ1bmN0aW9uIGFkZFJlbGVhc2VDb250ZXh0KHJlbGVhc2VDb250ZXh0LCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgcmVsZWFzZUNvbnRleHRzIH0gPSBjb250ZXh0O1xuXG4gIHJlbGVhc2VDb250ZXh0cy5wdXNoKHJlbGVhc2VDb250ZXh0KTtcbn1cblxuZnVuY3Rpb24gZmluZFJlbGVhc2VDb250ZXh0KGRlcGVuZGVuY3ksIGNvbnRleHQpIHtcbiAgY29uc3QgeyByZWxlYXNlQ29udGV4dHMgfSA9IGNvbnRleHQsXG4gICAgICAgIGRlcGVuZGVuY3lOYW1lID0gZGVwZW5kZW5jeS5nZXROYW1lKCksXG4gICAgICAgIHJlbGVhc2VDb250ZXh0ID0gcmVsZWFzZUNvbnRleHRzLmZpbmQoKHJlbGVhc2VDb250ZXh0KSA9PiB7XG4gICAgICAgICAgY29uc3QgZGVwZW5kZW5jeU5hbWVNYXRjaGVzID0gcmVsZWFzZUNvbnRleHQubWF0Y2hEZXBlbmRlbmN5TmFtZShkZXBlbmRlbmN5TmFtZSk7XG5cbiAgICAgICAgICBpZiAoZGVwZW5kZW5jeU5hbWVNYXRjaGVzKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pIHx8IG51bGw7XG5cbiAgcmV0dXJuIHJlbGVhc2VDb250ZXh0O1xufVxuXG5mdW5jdGlvbiBjaGVja1JlbGVhc2VQcmVzZW50KHJlbGVhc2VDb250ZXh0LCBkZXBlbmRlbmN5TmFtZSwgY29udGV4dCkge1xuICBsZXQgcmVsZWFzZVByZXNlbnQgPSB0cnVlO1xuXG4gIGlmIChyZWxlYXNlQ29udGV4dCA9PT0gbnVsbCkge1xuICAgIGNvbnN0IHsgbG9nIH0gPSBjb250ZXh0O1xuXG4gICAgbG9nLndhcm5pbmcoYFRoZSAnJHtkZXBlbmRlbmN5TmFtZX0nIHBhY2thZ2UgY29udGV4dCBjb3VsZCBub3QgYmUgY3JlYXRlZC4gUGVyaGFwcyB0aGUgJ21ldGEuanNvbicgZmlsZSBpcyBtaXNzaW5nIG9yIGludmFsaWQuYCk7XG5cbiAgICByZWxlYXNlUHJlc2VudCA9IGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHJlbGVhc2VQcmVzZW50O1xufVxuXG5mdW5jdGlvbiByZXRyaWV2ZVJlbGVhc2VDb250ZXh0cyhyZWxlYXNlQ29udGV4dCwgY29udGV4dCwgcmVsZWFzZUNvbnRleHRzID0gW10pIHtcbiAgY29uc3QgcmVsZWFzZUNvbnRleHRzSW5jbHVkZXNSZWxlYXNlQ29udGV4dCA9IHJlbGVhc2VDb250ZXh0cy5pbmNsdWRlcyhyZWxlYXNlQ29udGV4dCk7XG5cbiAgaWYgKCFyZWxlYXNlQ29udGV4dHNJbmNsdWRlc1JlbGVhc2VDb250ZXh0KSB7XG4gICAgY29uc3QgZGVwZW5kZW5jaWVzID0gcmVsZWFzZUNvbnRleHQuZ2V0RGVwZW5kZW5jaWVzKCk7XG5cbiAgICBkZXBlbmRlbmNpZXMuZm9yRWFjaERlcGVuZGVuY3koKGRlcGVuZGVuY3kpID0+IHtcbiAgICAgIGNvbnN0IHJlbGVhc2VDb250ZXh0ID0gZmluZFJlbGVhc2VDb250ZXh0KGRlcGVuZGVuY3ksIGNvbnRleHQpO1xuXG4gICAgICByZXRyaWV2ZVJlbGVhc2VDb250ZXh0cyhyZWxlYXNlQ29udGV4dCwgY29udGV4dCwgcmVsZWFzZUNvbnRleHRzKTtcbiAgICB9KTtcblxuICAgIHJlbGVhc2VDb250ZXh0cy51bnNoaWZ0KHJlbGVhc2VDb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiByZWxlYXNlQ29udGV4dHM7XG59XG5cbmZ1bmN0aW9uIGluaXRpYWxpc2VSZWxlYXNlQ29udGV4dChyZWxlYXNlQ29udGV4dCwgY29udGV4dCkge1xuICBjb25zdCB7IGxvZyB9ID0gY29udGV4dCxcbiAgICAgICAgbmFtZSA9IHJlbGVhc2VDb250ZXh0LmdldE5hbWUoKSxcbiAgICAgICAgcmVsZWFzZU5hbWUgPSBuYW1lLCAvLy9cbiAgICAgICAgcmVsZWFzZUNvbnRleHRzID0gcmV0cmlldmVSZWxlYXNlQ29udGV4dHMocmVsZWFzZUNvbnRleHQsIGNvbnRleHQpO1xuXG4gIGxvZy5pbmZvKGBJbml0aWFsaXNpbmcgdGhlICcke3JlbGVhc2VOYW1lfScgcGFja2FnZSBjb250ZXh0Li4uYCk7XG5cbiAgY29uc3QgeyBGaWxlQ29udGV4dEZyb21GaWxlUGF0aCB9ID0gY29udGV4dDtcblxuICByZWxlYXNlQ29udGV4dC5pbml0aWFsaXNlKHJlbGVhc2VDb250ZXh0cywgRmlsZUNvbnRleHRGcm9tRmlsZVBhdGgpO1xuXG4gIGxvZy5kZWJ1ZyhgLi4uaW5pdGlhbGlzZWQgdGhlICcke3JlbGVhc2VOYW1lfScgcGFja2FnZSBjb250ZXh0LmApO1xufVxuXG5mdW5jdGlvbiBjaGVja0N5Y2xpY0RlcGVuZGVuY3lQcmVzZW50KGRlcGVuZGVuY3ksIGRlcGVuZGVudE5hbWVzLCBjb250ZXh0KSB7XG4gIGxldCBjeWNsaWNEZXBlbmRlbmN5UHJlc2VudCA9IGZhbHNlO1xuXG4gIGNvbnN0IGRlcGVuZGVuY3lOYW1lID0gZGVwZW5kZW5jeS5nZXROYW1lKCksXG4gICAgICAgIGluZGV4ID0gZGVwZW5kZW50TmFtZXMuaW5kZXhPZihkZXBlbmRlbmN5TmFtZSk7XG5cbiAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICBjb25zdCB7IGxvZyB9ID0gY29udGV4dCxcbiAgICAgICAgICBjaXJjdWxhckRlcGVuZGVudE5hbWVzID0gZGVwZW5kZW50TmFtZXMuc2xpY2UoaW5kZXgpLFxuICAgICAgICAgIGNpcmN1bGFyRGVwZW5kZW5jeU5hbWVzID0gW1xuICAgICAgICAgICAgLi4uY2lyY3VsYXJEZXBlbmRlbnROYW1lcyxcbiAgICAgICAgICAgIGRlcGVuZGVuY3lOYW1lXG4gICAgICAgICAgXSxcbiAgICAgICAgICBjaXJjdWxhckRlcGVuZGVuY3lOYW1lc1N0cmluZyA9IGNpcmN1bGFyRGVwZW5kZW5jeU5hbWVzLmpvaW4oU0lOR0xFX1NQQUNFKTtcblxuICAgIGxvZy53YXJuaW5nKGBUaGVyZSBpcyBhIGN5Y2xpYyBkZXBlbmRlbmN5LCAnJHtjaXJjdWxhckRlcGVuZGVuY3lOYW1lc1N0cmluZ30nLmApO1xuXG4gICAgY3ljbGljRGVwZW5kZW5jeVByZXNlbnQgPSB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGN5Y2xpY0RlcGVuZGVuY3lQcmVzZW50O1xufVxuXG5mdW5jdGlvbiBjaGVja1JlbGVhc2VNYXRjaGVzRGVwZW5kZW5jeShyZWxlYXNlQ29udGV4dCwgZGVwZW5kZW5jeSwgZGVwZW5kZW50TmFtZXMsIGNvbnRleHQpIHtcbiAgbGV0IHJlbGVhc2VNYXRjaGVzRGVwZW5kZW5jeSA9IHRydWU7XG5cbiAgY29uc3Qgc2hvcnRlbmVkVmVyc2lvbiA9IGRlcGVuZGVuY3kuZ2V0U2hvcnRlbmVkVmVyc2lvbigpO1xuXG4gIGlmIChzaG9ydGVuZWRWZXJzaW9uICE9PSBudWxsKSB7XG4gICAgY29uc3QgZW50cmllc01hdGNoU2hvcnRlbmVkVmVyc2lvbiA9IHJlbGVhc2VDb250ZXh0Lm1hdGNoU2hvcnRlbmVkVmVyc2lvbihzaG9ydGVuZWRWZXJzaW9uKTtcblxuICAgIGlmICghZW50cmllc01hdGNoU2hvcnRlbmVkVmVyc2lvbikge1xuICAgICAgY29uc3QgeyBsb2cgfSA9IGNvbnRleHQsXG4gICAgICAgICAgICB2ZXJzaW9uID0gcmVsZWFzZUNvbnRleHQuZ2V0VmVyc2lvbigpLFxuICAgICAgICAgICAgbGFzdERlcGVuZGVudE5hbWUgPSBsYXN0KGRlcGVuZGVudE5hbWVzKSxcbiAgICAgICAgICAgIGRlcGVuZGVudE5hbWUgPSBsYXN0RGVwZW5kZW50TmFtZSwgIC8vL1xuICAgICAgICAgICAgdmVyc2lvblN0cmluZyA9IHZlcnNpb24udG9TdHJpbmcoKSxcbiAgICAgICAgICAgIGRlcGVuZGVuY3lTdHJpbmcgPSBkZXBlbmRlbmN5LmFzU3RyaW5nKCk7XG5cbiAgICAgIGxvZy53YXJuaW5nKGBUaGUgJyR7ZGVwZW5kZW50TmFtZX0nIGRlcGVuZGVudCByZXF1aXJlcyB0aGUgJyR7ZGVwZW5kZW5jeVN0cmluZ30nIGRlcGVuZGVuY3kgYnV0IGEgY29udGV4dCB3aXRoIHZlcnNpb24gJyR7dmVyc2lvblN0cmluZ30nIHdhcyBwcm92aWRlZC5gKTtcblxuICAgICAgcmVsZWFzZU1hdGNoZXNEZXBlbmRlbmN5ID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlbGVhc2VNYXRjaGVzRGVwZW5kZW5jeTtcbn1cblxuZnVuY3Rpb24gY2hlY2tQcm9qZWN0RGVwZW5kZW5jeU9mUGFja2FnZShyZWxlYXNlQ29udGV4dCwgZGVwZW5kZW50UmVsZWFzZWQsIGRlcGVuZGVudE5hbWVzLCBjb250ZXh0KSB7XG4gIGxldCBwcm9qZWN0RGVwZW5kZW5jeU9mUGFja2FnZSA9IGZhbHNlO1xuXG4gIGlmIChkZXBlbmRlbnRSZWxlYXNlZCkge1xuICAgIGNvbnN0IHVucmVsZWFzZWQgPSByZWxlYXNlQ29udGV4dC5pc1VucmVsZWFzZWQoKTtcblxuICAgIGlmICh1bnJlbGVhc2VkKSB7XG4gICAgICBjb25zdCB7IGxvZyB9ID0gY29udGV4dCxcbiAgICAgICAgICAgIG5hbWUgPSByZWxlYXNlQ29udGV4dC5nZXROYW1lKCksXG4gICAgICAgICAgICBsYXN0RGVwZW5kZW50TmFtZSA9IGxhc3QoZGVwZW5kZW50TmFtZXMpLFxuICAgICAgICAgICAgZGVwZW5kZW5jeU5hbWUgPSBuYW1lLC8vL1xuICAgICAgICAgICAgZGVwZW5kZW50TmFtZSA9IGxhc3REZXBlbmRlbnROYW1lOyAgLy8vXG5cbiAgICAgIGxvZy53YXJuaW5nKGBUaGUgJyR7ZGVwZW5kZW5jeU5hbWV9JyBkZXBlbmRlbmN5IGlzIGEgcHJvamVjdCB3aGlsc3QgaXRzICcke2RlcGVuZGVudE5hbWV9JyBkZXBlbmRlbnQgaXMgYSBwYWNrYWdlLmApO1xuXG4gICAgICBwcm9qZWN0RGVwZW5kZW5jeU9mUGFja2FnZSA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHByb2plY3REZXBlbmRlbmN5T2ZQYWNrYWdlO1xufVxuIl0sIm5hbWVzIjpbImNyZWF0ZVJlbGVhc2VDb250ZXh0cyIsImluaXRpYWxpc2VSZWxlYXNlQ29udGV4dHMiLCJ2ZXJpZnlSZWxlYXNlQ29udGV4dHMiLCJsYXN0IiwiYXJyYXlVdGlsaXRpZXMiLCJkZXBlbmRlbmN5TmFtZSIsImNvbnRleHQiLCJzdWNjZWVkIiwiZmFpbCIsIm5hbWUiLCJkZXBlbmRlbmN5IiwiRGVwZW5kZW5jeSIsImZyb21OYW1lIiwiZGVwZW5kZW50TmFtZXMiLCJkZXBlbmRlbnRSZWxlYXNlZCIsImNyZWF0ZVJlbGVhc2VDb250ZXh0IiwicmVsZWFzZUNvbnRleHRDcmVhdGVkIiwicmVsZWFzZUNvbnRleHRzQ3JlYXRlZCIsInJlbGVhc2VDb250ZXh0cyIsImZvckVhY2giLCJyZWxlYXNlQ29udGV4dCIsImluaXRpYWxpc2VSZWxlYXNlQ29udGV4dCIsImZvcndhcmQiLCJiYWNrIiwiZXZlcnkiLCJ2ZXJpZnlSZWxlYXNlQ29udGV4dCIsInJlbGVhc2VkIiwiaXNSZWxlYXNlZCIsInZlcmlmaWVkIiwiaGFzVmVyaWZpZWQiLCJsb2ciLCJnZXROYW1lIiwicmVsZWFzZU5hbWUiLCJpbmZvIiwidmVyaWZ5IiwiZmluZFJlbGVhc2VDb250ZXh0IiwiZGVwZW5kZW50TmFtZXNMZW5ndGgiLCJsZW5ndGgiLCJsYXN0RGVwZW5kZW50TmFtZSIsImRlcGVuZGVudE5hbWUiLCJkZXBlbmRlbmN5U3RyaW5nIiwiYXNTdHJpbmciLCJyZWxlYXNlQ29udGV4dEZyb21EZXBlbmRlbmN5IiwicmVsZWF0ZVByZXNlbnQiLCJjaGVja1JlbGVhc2VQcmVzZW50IiwicHJvamVjdERlcGVuZGVuY3lPZlBhY2thZ2UiLCJjaGVja1Byb2plY3REZXBlbmRlbmN5T2ZQYWNrYWdlIiwicmVsZWFzZU1hdGNoZXNEZXBlbmRlbmN5IiwiY2hlY2tSZWxlYXNlTWF0Y2hlc0RlcGVuZGVuY3kiLCJjcmVhdGVEZXBlbmRlbmN5UmVsZWFzZUNvbnRleHRzIiwiZGVwZW5kZW5jeVJlbGVhc2VDb250ZXh0c0NyZWF0ZWQiLCJhZGRSZWxlYXNlQ29udGV4dCIsImRlYnVnIiwid2FybmluZyIsImRlcGVuZGVuY2llcyIsImdldERlcGVuZGVuY2llcyIsImFycmF5IiwiZ2V0QXJyYXkiLCJjeWNsaWNEZXBlbmRlbmN5UHJlc2VudCIsImNoZWNrQ3ljbGljRGVwZW5kZW5jeVByZXNlbnQiLCJwdXNoIiwiZmluZCIsImRlcGVuZGVuY3lOYW1lTWF0Y2hlcyIsIm1hdGNoRGVwZW5kZW5jeU5hbWUiLCJyZWxlYXNlUHJlc2VudCIsInJldHJpZXZlUmVsZWFzZUNvbnRleHRzIiwicmVsZWFzZUNvbnRleHRzSW5jbHVkZXNSZWxlYXNlQ29udGV4dCIsImluY2x1ZGVzIiwiZm9yRWFjaERlcGVuZGVuY3kiLCJ1bnNoaWZ0IiwiRmlsZUNvbnRleHRGcm9tRmlsZVBhdGgiLCJpbml0aWFsaXNlIiwiaW5kZXgiLCJpbmRleE9mIiwiY2lyY3VsYXJEZXBlbmRlbnROYW1lcyIsInNsaWNlIiwiY2lyY3VsYXJEZXBlbmRlbmN5TmFtZXMiLCJjaXJjdWxhckRlcGVuZGVuY3lOYW1lc1N0cmluZyIsImpvaW4iLCJTSU5HTEVfU1BBQ0UiLCJzaG9ydGVuZWRWZXJzaW9uIiwiZ2V0U2hvcnRlbmVkVmVyc2lvbiIsImVudHJpZXNNYXRjaFNob3J0ZW5lZFZlcnNpb24iLCJtYXRjaFNob3J0ZW5lZFZlcnNpb24iLCJ2ZXJzaW9uIiwiZ2V0VmVyc2lvbiIsInZlcnNpb25TdHJpbmciLCJ0b1N0cmluZyIsInVucmVsZWFzZWQiLCJpc1VucmVsZWFzZWQiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztRQVVnQkE7ZUFBQUE7O1FBK0JoQjtlQUFBOztRQWRnQkM7ZUFBQUE7O1FBUUFDO2VBQUFBOzs7NEJBakNXOzJCQUNJOzhCQUVSOzJCQUNNO0FBRTdCLE1BQU0sRUFBRUMsSUFBSSxFQUFFLEdBQUdDLHlCQUFjO0FBRXhCLFNBQVNKLHNCQUFzQkssY0FBYyxFQUFFQyxPQUFPLEVBQUVDLE9BQU8sRUFBRUMsSUFBSTtJQUMxRSxNQUFNQyxPQUFPSixnQkFDUEssYUFBYUMsc0JBQVUsQ0FBQ0MsUUFBUSxDQUFDSCxPQUNqQ0ksaUJBQWlCLEVBQUUsRUFDbkJDLG9CQUFvQjtJQUUxQixPQUFPQyxxQkFBcUJMLFlBQVlHLGdCQUFnQkMsbUJBQW1CUixTQUFTLENBQUNVO1FBQ25GLElBQUlDLHlCQUF5QjtRQUU3QixJQUFJRCx1QkFBdUI7WUFDekJDLHlCQUF5QjtRQUMzQjtRQUVBLE9BQU9WLFFBQVFVO0lBQ2pCLEdBQUdUO0FBQ0w7QUFFTyxTQUFTUCwwQkFBMEJLLE9BQU87SUFDL0MsTUFBTSxFQUFFWSxlQUFlLEVBQUUsR0FBR1o7SUFFNUJZLGdCQUFn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
|
package/lib/utilities/verify.js
CHANGED
|
@@ -19,10 +19,10 @@ _export(exports, {
|
|
|
19
19
|
const _necessary = require("necessary");
|
|
20
20
|
const _continuation = require("../utilities/continuation");
|
|
21
21
|
const { first, filter, compress } = _necessary.arrayUtilities;
|
|
22
|
-
function verifyFileContexts(fileContexts, verifiedFileContexts,
|
|
23
|
-
return (0, _continuation.resolve)(fileContexts, verifiedFileContexts, (fileContext,
|
|
24
|
-
return fileContext.verify(
|
|
25
|
-
},
|
|
22
|
+
function verifyFileContexts(fileContexts, verifiedFileContexts, forward, back) {
|
|
23
|
+
return (0, _continuation.resolve)(fileContexts, verifiedFileContexts, (fileContext, forward, back)=>{
|
|
24
|
+
return fileContext.verify(forward, back);
|
|
25
|
+
}, forward, back);
|
|
26
26
|
}
|
|
27
27
|
function verifyTypePrefixes(typePrefixes, releaseContext) {
|
|
28
28
|
let typePrefixesVerify = true;
|
|
@@ -50,4 +50,4 @@ function verifyTypePrefixes(typePrefixes, releaseContext) {
|
|
|
50
50
|
return typePrefixesVerify;
|
|
51
51
|
}
|
|
52
52
|
|
|
53
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvdmVyaWZ5LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGludWF0aW9uXCI7XG5cbmNvbnN0IHsgZmlyc3QsIGZpbHRlciwgY29tcHJlc3MgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZnVuY3Rpb24gdmVyaWZ5RmlsZUNvbnRleHRzKGZpbGVDb250ZXh0cywgdmVyaWZpZWRGaWxlQ29udGV4dHMsIGZvcndhcmQsIGJhY2spIHtcbiAgcmV0dXJuIHJlc29sdmUoZmlsZUNvbnRleHRzLCB2ZXJpZmllZEZpbGVDb250ZXh0cywgKGZpbGVDb250ZXh0LCBmb3J3YXJkLCBiYWNrKSA9PiB7XG4gICAgcmV0dXJuIGZpbGVDb250ZXh0LnZlcmlmeShmb3J3YXJkLCBiYWNrKTtcbiAgfSwgZm9yd2FyZCwgYmFjayk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2ZXJpZnlUeXBlUHJlZml4ZXModHlwZVByZWZpeGVzLCByZWxlYXNlQ29udGV4dCkge1xuICBsZXQgdHlwZVByZWZpeGVzVmVyaWZ5ID0gdHJ1ZTtcblxuICBjb25zdCB0eXBlUHJlZml4ZXNMZW5ndGggPSB0eXBlUHJlZml4ZXMubGVuZ3RoLFxuICAgICAgICBjb21wcmVzc2VkVHlwZVByZWZpeGVzID0gWyAgLy8vXG4gICAgICAgICAgLi4udHlwZVByZWZpeGVzLFxuICAgICAgICBdO1xuXG4gIGNvbXByZXNzKGNvbXByZXNzZWRUeXBlUHJlZml4ZXMsICh0eXBlUHJlZml4QSwgdHlwZVByZWZpeEIpID0+IHtcbiAgICBjb25zdCB0eXBlUHJlZml4QU5hbWUgPSB0eXBlUHJlZml4QS5nZXROYW1lKCksXG4gICAgICAgICAgdHlwZVByZWZpeEJOYW1lID0gdHlwZVByZWZpeEIuZ2V0TmFtZSgpO1xuXG4gICAgaWYgKHR5cGVQcmVmaXhBTmFtZSAhPT0gdHlwZVByZWZpeEJOYW1lKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IGNvbXByZXNzVHlwZVByZWZpeGVzTGVuZ3RoID0gY29tcHJlc3NlZFR5cGVQcmVmaXhlcy5sZW5ndGg7XG5cbiAgaWYgKHR5cGVQcmVmaXhlc0xlbmd0aCA+IGNvbXByZXNzVHlwZVByZWZpeGVzTGVuZ3RoKSB7XG4gICAgZmlsdGVyKGNvbXByZXNzZWRUeXBlUHJlZml4ZXMsICh0eXBlUHJlZml4KSA9PiB7XG4gICAgICBjb25zdCB0eXBlUHJlZml4ZXNJbmNsdWRlc1R5cGVQcmVmaXggPSB0eXBlUHJlZml4ZXMuaW5jbHVkZXModHlwZVByZWZpeCk7XG5cbiAgICAgIGlmICghdHlwZVByZWZpeGVzSW5jbHVkZXNUeXBlUHJlZml4KSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgZmlyc3RUeXBlUHJlZml4ID0gZmlyc3QodHlwZVByZWZpeGVzKSxcbiAgICAgICAgICB0eXBlUHJlZml4ID0gZmlyc3RUeXBlUHJlZml4LCAvLy9cbiAgICAgICAgICB0eXBlUHJlZml4U3RyaW5nID0gdHlwZVByZWZpeC5nZXRTdHJpbmcoKTtcblxuICAgIHJlbGVhc2VDb250ZXh0LmluZm8oYFRoZSAnJHt0eXBlUHJlZml4U3RyaW5nfScgdHlwZSBwcmVmaXggaXMgZHVwbGljYXRlZC5gKVxuXG4gICAgdHlwZVByZWZpeGVzVmVyaWZ5ID0gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHlwZVByZWZpeGVzVmVyaWZ5O1xufVxuIl0sIm5hbWVzIjpbInZlcmlmeUZpbGVDb250ZXh0cyIsInZlcmlmeVR5cGVQcmVmaXhlcyIsImZpcnN0IiwiZmlsdGVyIiwiY29tcHJlc3MiLCJhcnJheVV0aWxpdGllcyIsImZpbGVDb250ZXh0cyIsInZlcmlmaWVkRmlsZUNvbnRleHRzIiwiZm9yd2FyZCIsImJhY2siLCJyZXNvbHZlIiwiZmlsZUNvbnRleHQiLCJ2ZXJpZnkiLCJ0eXBlUHJlZml4ZXMiLCJyZWxlYXNlQ29udGV4dCIsInR5cGVQcmVmaXhlc1ZlcmlmeSIsInR5cGVQcmVmaXhlc0xlbmd0aCIsImxlbmd0aCIsImNvbXByZXNzZWRUeXBlUHJlZml4ZXMiLCJ0eXBlUHJlZml4QSIsInR5cGVQcmVmaXhCIiwidHlwZVByZWZpeEFOYW1lIiwiZ2V0TmFtZSIsInR5cGVQcmVmaXhCTmFtZSIsImNvbXByZXNzVHlwZVByZWZpeGVzTGVuZ3RoIiwidHlwZVByZWZpeCIsInR5cGVQcmVmaXhlc0luY2x1ZGVzVHlwZVByZWZpeCIsImluY2x1ZGVzIiwiZmlyc3RUeXBlUHJlZml4IiwidHlwZVByZWZpeFN0cmluZyIsImdldFN0cmluZyIsImluZm8iXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztRQVFnQkE7ZUFBQUE7O1FBTUFDO2VBQUFBOzs7MkJBWmU7OEJBRVA7QUFFeEIsTUFBTSxFQUFFQyxLQUFLLEVBQUVDLE1BQU0sRUFBRUMsUUFBUSxFQUFFLEdBQUdDLHlCQUFjO0FBRTNDLFNBQVNMLG1CQUFtQk0sWUFBWSxFQUFFQyxvQkFBb0IsRUFBRUMsT0FBTyxFQUFFQyxJQUFJO0lBQ2xGLE9BQU9DLElBQUFBLHFCQUFPLEVBQUNKLGNBQWNDLHNCQUFzQixDQUFDSSxhQUFhSCxTQUFTQztRQUN4RSxPQUFPRSxZQUFZQyxNQUFNLENBQUNKLFNBQVNDO0lBQ3JDLEdBQUdELFNBQVNDO0FBQ2Q7QUFFTyxTQUFTUixtQkFBbUJZLFlBQVksRUFBRUMsY0FBYztJQUM3RCxJQUFJQyxxQkFBcUI7SUFFekIsTUFBTUMscUJBQXFCSCxhQUFhSSxNQUFNLEVBQ3hDQyx5QkFBeUI7V0FDcEJMO0tBQ0o7SUFFUFQsU0FBU2Msd0JBQXdCLENBQUNDLGFBQWFDO1FBQzdDLE1BQU1DLGtCQUFrQkYsWUFBWUcsT0FBTyxJQUNyQ0Msa0JBQWtCSCxZQUFZRSxPQUFPO1FBRTNDLElBQUlELG9CQUFvQkUsaUJBQWlCO1lBQ3ZDLE9BQU87UUFDVDtJQUNGO0lBRUEsTUFBTUMsNkJBQTZCTix1QkFBdUJELE1BQU07SUFFaEUsSUFBSUQscUJBQXFCUSw0QkFBNEI7UUFDbkRyQixPQUFPZSx3QkFBd0IsQ0FBQ087WUFDOUIsTUFBTUMsaUNBQWlDYixhQUFhYyxRQUFRLENBQUNGO1lBRTdELElBQUksQ0FBQ0MsZ0NBQWdDO2dCQUNuQyxPQUFPO1lBQ1Q7UUFDRjtRQUVBLE1BQU1FLGtCQUFrQjFCLE1BQU1XLGVBQ3hCWSxhQUFhRyxpQkFDYkMsbUJBQW1CSixXQUFXSyxTQUFTO1FBRTdDaEIsZUFBZWlCLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRUYsaUJBQWlCLDRCQUE0QixDQUFDO1FBRTFFZCxxQkFBcUI7SUFDdkI7SUFFQSxPQUFPQTtBQUNUIn0=
|
package/package.json
CHANGED
package/src/context/file.js
CHANGED
|
@@ -73,7 +73,7 @@ export default class FileContext extends Context {
|
|
|
73
73
|
return string;
|
|
74
74
|
}
|
|
75
75
|
|
|
76
|
-
break(node, breakPoint,
|
|
76
|
+
break(node, breakPoint, forward, back) {
|
|
77
77
|
const filePath = this.filePath,
|
|
78
78
|
releaseContext = this.getReleaseContext();
|
|
79
79
|
|
|
@@ -81,10 +81,10 @@ export default class FileContext extends Context {
|
|
|
81
81
|
breakPoint = BreakPoint.fromFilePathNodeAndTokens(filePath, node, this.tokens);
|
|
82
82
|
}
|
|
83
83
|
|
|
84
|
-
return releaseContext.break(breakPoint,
|
|
84
|
+
return releaseContext.break(breakPoint, forward, back);
|
|
85
85
|
}
|
|
86
86
|
|
|
87
|
-
verify(
|
|
87
|
+
verify(forward, back) {
|
|
88
88
|
if (this.node === null) {
|
|
89
89
|
this.warning(`Unable to verify the '${this.filePath}' file because it cannot be parsed.`);
|
|
90
90
|
|
|
@@ -95,13 +95,13 @@ export default class FileContext extends Context {
|
|
|
95
95
|
|
|
96
96
|
this.clear();
|
|
97
97
|
|
|
98
|
-
return this.verifyFile(back
|
|
98
|
+
return this.verifyFile((back) => {
|
|
99
99
|
this.complete();
|
|
100
100
|
|
|
101
101
|
this.info(`...verified the '${this.filePath}' file.`);
|
|
102
102
|
|
|
103
|
-
return forward();
|
|
104
|
-
});
|
|
103
|
+
return forward(back);
|
|
104
|
+
}, back);
|
|
105
105
|
}
|
|
106
106
|
|
|
107
107
|
initialise() {
|
package/src/context/release.js
CHANGED
|
@@ -464,7 +464,7 @@ export default class ReleaseContext {
|
|
|
464
464
|
this.initialised = true;
|
|
465
465
|
}
|
|
466
466
|
|
|
467
|
-
break(breakPoint,
|
|
467
|
+
break(breakPoint, forward, back) {
|
|
468
468
|
const level = TRACE_LEVEL,
|
|
469
469
|
message = BREAK_MESSAGE,
|
|
470
470
|
filePath = breakPoint.getFilePath(),
|
|
@@ -474,10 +474,10 @@ export default class ReleaseContext {
|
|
|
474
474
|
|
|
475
475
|
const context = this; ///
|
|
476
476
|
|
|
477
|
-
return this.callback(breakPoint, context,
|
|
477
|
+
return this.callback(breakPoint, context, forward, back);
|
|
478
478
|
}
|
|
479
479
|
|
|
480
|
-
verify(
|
|
480
|
+
verify(forward, back) {
|
|
481
481
|
const typePrefixes = this.getTypePrefixes(),
|
|
482
482
|
releaseContext = this, ///
|
|
483
483
|
typePrefixesVerify = verifyTypePrefixes(typePrefixes, releaseContext);
|
|
@@ -488,13 +488,13 @@ export default class ReleaseContext {
|
|
|
488
488
|
|
|
489
489
|
const fileContexts = [];
|
|
490
490
|
|
|
491
|
-
return verifyFileContexts(this.fileContexts, fileContexts, back
|
|
491
|
+
return verifyFileContexts(this.fileContexts, fileContexts, (back) => {
|
|
492
492
|
this.fileContexts = fileContexts; ///
|
|
493
493
|
|
|
494
494
|
this.verifies = true;
|
|
495
495
|
|
|
496
|
-
return forward();
|
|
497
|
-
});
|
|
496
|
+
return forward(back);
|
|
497
|
+
}, back);
|
|
498
498
|
}
|
|
499
499
|
|
|
500
500
|
toJSON() {
|
package/src/context.js
CHANGED
|
@@ -100,7 +100,7 @@ export default class Context {
|
|
|
100
100
|
releaseContext.writeToLog(level, message);
|
|
101
101
|
}
|
|
102
102
|
|
|
103
|
-
break(node, breakPoint,
|
|
103
|
+
break(node, breakPoint, forward, bcak) { return this.context.break(node, breakPoint, forward, bcak); }
|
|
104
104
|
|
|
105
105
|
static fromNothing(Class, ...remainingArguments) {
|
|
106
106
|
let context = remainingArguments.pop();
|
package/src/element.js
CHANGED
|
@@ -50,12 +50,12 @@ export default class Element {
|
|
|
50
50
|
this.context = context;
|
|
51
51
|
}
|
|
52
52
|
|
|
53
|
-
break(context,
|
|
54
|
-
return context.break(this.node, this.breakPoint,
|
|
53
|
+
break(context, forward, back) {
|
|
54
|
+
return context.break(this.node, this.breakPoint, (breakPoint, back) => {
|
|
55
55
|
this.breakPoint = breakPoint;
|
|
56
56
|
|
|
57
|
-
return forward();
|
|
58
|
-
});
|
|
57
|
+
return forward(back);
|
|
58
|
+
}, back);
|
|
59
59
|
}
|
|
60
60
|
|
|
61
61
|
matchNode(node) { return this.node.match(node); }
|
package/src/pass/continuation.js
CHANGED
|
@@ -5,10 +5,10 @@ import { nonTerminalNodeQuery } from "../utilities/pass";
|
|
|
5
5
|
|
|
6
6
|
export default class ContinuationPass {
|
|
7
7
|
run(node, ...remainingArguments) {
|
|
8
|
-
const
|
|
9
|
-
|
|
8
|
+
const back = remainingArguments.pop(),
|
|
9
|
+
forward = remainingArguments.pop();
|
|
10
10
|
|
|
11
|
-
return this.visitNode(node, ...remainingArguments,
|
|
11
|
+
return this.visitNode(node, ...remainingArguments, forward, back);
|
|
12
12
|
}
|
|
13
13
|
|
|
14
14
|
descend(childNodes, ...remainingArguments) {
|
|
@@ -17,40 +17,40 @@ export default class ContinuationPass {
|
|
|
17
17
|
|
|
18
18
|
return every(childNodes, (childNode, ...remainingArguments) => {
|
|
19
19
|
const index = remainingArguments.pop(),
|
|
20
|
-
forward = remainingArguments.pop(),
|
|
21
20
|
back = remainingArguments.pop(),
|
|
21
|
+
forward = remainingArguments.pop(),
|
|
22
22
|
node = childNode; ///
|
|
23
23
|
|
|
24
|
-
return this.visitNode(node, ...remainingArguments,
|
|
25
|
-
}, ...remainingArguments,
|
|
24
|
+
return this.visitNode(node, ...remainingArguments, forward, back);
|
|
25
|
+
}, ...remainingArguments, forward, back);
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
visitNode(node, ...remainingArguments) {
|
|
29
|
-
const
|
|
30
|
-
|
|
29
|
+
const back = remainingArguments.pop(),
|
|
30
|
+
forward = remainingArguments.pop(),
|
|
31
31
|
nodeTerminalNode = node.isTerminalNode();
|
|
32
32
|
|
|
33
33
|
if (nodeTerminalNode) {
|
|
34
34
|
const terminalNode = node; ///
|
|
35
35
|
|
|
36
|
-
return this.visitTerminalNode(terminalNode, ...remainingArguments,
|
|
36
|
+
return this.visitTerminalNode(terminalNode, ...remainingArguments, forward, back);
|
|
37
37
|
}
|
|
38
38
|
|
|
39
39
|
const nonTerminalNode = node; ///
|
|
40
40
|
|
|
41
|
-
return this.visitNonTerminalNode(nonTerminalNode, ...remainingArguments,
|
|
41
|
+
return this.visitNonTerminalNode(nonTerminalNode, ...remainingArguments, forward, back);
|
|
42
42
|
}
|
|
43
43
|
|
|
44
44
|
visitTerminalNode(terminalNode, ...remainingArguments) {
|
|
45
|
-
const
|
|
46
|
-
|
|
45
|
+
const back = remainingArguments.pop(),
|
|
46
|
+
forward = remainingArguments.pop();
|
|
47
47
|
|
|
48
|
-
return forward(...remainingArguments);
|
|
48
|
+
return forward(...remainingArguments, back);
|
|
49
49
|
}
|
|
50
50
|
|
|
51
51
|
visitNonTerminalNode(nonTerminalNode, ...remainingArguments) {
|
|
52
|
-
const
|
|
53
|
-
|
|
52
|
+
const back = remainingArguments.pop(),
|
|
53
|
+
forward = remainingArguments.pop();
|
|
54
54
|
|
|
55
55
|
let { maps } = this.constructor;
|
|
56
56
|
|
|
@@ -69,7 +69,7 @@ export default class ContinuationPass {
|
|
|
69
69
|
if (map !== null) {
|
|
70
70
|
const { run } = map;
|
|
71
71
|
|
|
72
|
-
return run(node, ...remainingArguments,
|
|
72
|
+
return run(node, ...remainingArguments, forward, back);
|
|
73
73
|
}
|
|
74
74
|
|
|
75
75
|
node = nonTerminalNode; ///
|
|
@@ -82,6 +82,6 @@ export default class ContinuationPass {
|
|
|
82
82
|
|
|
83
83
|
const childNodes = nonTerminalNode.getChildNodes();
|
|
84
84
|
|
|
85
|
-
return this.descend(childNodes, ...remainingArguments,
|
|
85
|
+
return this.descend(childNodes, ...remainingArguments, forward, back);
|
|
86
86
|
}
|
|
87
87
|
}
|
|
@@ -5,15 +5,15 @@ import { nonTerminalNodeQuery, areChildNodesCongruent } from "../utilities/pass"
|
|
|
5
5
|
|
|
6
6
|
export default class ContinuationZipPass {
|
|
7
7
|
run(generalNode, specificNode, ...remainingArguments) {
|
|
8
|
-
const
|
|
9
|
-
|
|
8
|
+
const back = remainingArguments.pop(),
|
|
9
|
+
forward = remainingArguments.pop();
|
|
10
10
|
|
|
11
|
-
return this.visitNode(generalNode, specificNode, ...remainingArguments,
|
|
11
|
+
return this.visitNode(generalNode, specificNode, ...remainingArguments, forward, back);
|
|
12
12
|
}
|
|
13
13
|
|
|
14
14
|
descend(generalChildNodes, specificChildNodes, ...remainingArguments) {
|
|
15
|
-
const
|
|
16
|
-
|
|
15
|
+
const back = remainingArguments.pop(),
|
|
16
|
+
forward = remainingArguments.pop(),
|
|
17
17
|
childNodesCongruent = areChildNodesCongruent(generalChildNodes, specificChildNodes);
|
|
18
18
|
|
|
19
19
|
if (!childNodesCongruent) {
|
|
@@ -22,18 +22,18 @@ export default class ContinuationZipPass {
|
|
|
22
22
|
|
|
23
23
|
return match(generalChildNodes, specificChildNodes, (generalChildNode, specificChildNode, ...remainingArguments) => {
|
|
24
24
|
const index = remainingArguments.pop(),
|
|
25
|
-
forward = remainingArguments.pop(),
|
|
26
25
|
back = remainingArguments.pop(),
|
|
26
|
+
forward = remainingArguments.pop(),
|
|
27
27
|
generalNode = generalChildNode, ///
|
|
28
28
|
specificNode = specificChildNode; ///
|
|
29
29
|
|
|
30
|
-
return this.visitNode(generalNode, specificNode, ...remainingArguments,
|
|
31
|
-
}, ...remainingArguments,
|
|
30
|
+
return this.visitNode(generalNode, specificNode, ...remainingArguments, forward, back);
|
|
31
|
+
}, ...remainingArguments, forward, back);
|
|
32
32
|
}
|
|
33
33
|
|
|
34
34
|
visitNode(generalNode, specificNode, ...remainingArguments) {
|
|
35
|
-
const
|
|
36
|
-
|
|
35
|
+
const back = remainingArguments.pop(),
|
|
36
|
+
forward = remainingArguments.pop(),
|
|
37
37
|
generalNodeTerminalNode = generalNode.isTerminalNode(),
|
|
38
38
|
specificNodeTerminalNode = specificNode.isTerminalNode(),
|
|
39
39
|
generalNodeNonTerminalNode = generalNode.isNonTerminalNode(),
|
|
@@ -43,29 +43,29 @@ export default class ContinuationZipPass {
|
|
|
43
43
|
const generalTerminalNode = generalNode, ///
|
|
44
44
|
specificTerminalNode = specificNode; ///
|
|
45
45
|
|
|
46
|
-
return this.visitTerminalNode(generalTerminalNode, specificTerminalNode, ...remainingArguments,
|
|
46
|
+
return this.visitTerminalNode(generalTerminalNode, specificTerminalNode, ...remainingArguments, forward, back);
|
|
47
47
|
}
|
|
48
48
|
|
|
49
49
|
if (generalNodeNonTerminalNode && specificNodeNonTerminalNode) {
|
|
50
50
|
const generalNonTerminalNode = generalNode, ///
|
|
51
|
-
|
|
51
|
+
specificNonTerminalNode = specificNode; ///
|
|
52
52
|
|
|
53
|
-
return this.visitNonTerminalNode(generalNonTerminalNode, specificNonTerminalNode, ...remainingArguments,
|
|
53
|
+
return this.visitNonTerminalNode(generalNonTerminalNode, specificNonTerminalNode, ...remainingArguments, forward, back);
|
|
54
54
|
}
|
|
55
55
|
|
|
56
56
|
return back();
|
|
57
57
|
}
|
|
58
58
|
|
|
59
59
|
visitTerminalNode(generalTerminalNode, specificTerminalNode, ...remainingArguments) { ///
|
|
60
|
-
const
|
|
61
|
-
|
|
60
|
+
const back = remainingArguments.pop(),
|
|
61
|
+
forward = remainingArguments.pop();
|
|
62
62
|
|
|
63
|
-
return forward(...remainingArguments);
|
|
63
|
+
return forward(...remainingArguments, back);
|
|
64
64
|
}
|
|
65
65
|
|
|
66
66
|
visitNonTerminalNode(generalNonTerminalNode, specificNonTerminalNode, ...remainingArguments) {
|
|
67
|
-
const
|
|
68
|
-
|
|
67
|
+
const back = remainingArguments.pop(),
|
|
68
|
+
forward = remainingArguments.pop();
|
|
69
69
|
|
|
70
70
|
let { maps } = this.constructor;
|
|
71
71
|
|
|
@@ -86,7 +86,7 @@ export default class ContinuationZipPass {
|
|
|
86
86
|
if (map !== null) {
|
|
87
87
|
const { run } = map;
|
|
88
88
|
|
|
89
|
-
return run(generalNode, specificNode, ...remainingArguments,
|
|
89
|
+
return run(generalNode, specificNode, ...remainingArguments, forward, back);
|
|
90
90
|
}
|
|
91
91
|
|
|
92
92
|
generalNode = generalNonTerminalNode; ///
|
|
@@ -109,6 +109,6 @@ export default class ContinuationZipPass {
|
|
|
109
109
|
const generalChildNodes = generalNonTerminalNode.getChildNodes(), ///
|
|
110
110
|
specificChildNodes = specificNonTerminalNode.getChildNodes(); ///
|
|
111
111
|
|
|
112
|
-
return this.descend(generalChildNodes, specificChildNodes, ...remainingArguments,
|
|
112
|
+
return this.descend(generalChildNodes, specificChildNodes, ...remainingArguments, forward, back);
|
|
113
113
|
}
|
|
114
114
|
}
|
|
@@ -8,11 +8,11 @@ export function breakable(innerFunction) {
|
|
|
8
8
|
back = remainingArguments.pop(),
|
|
9
9
|
context = remainingArguments.pop();
|
|
10
10
|
|
|
11
|
-
return this.break(context, back
|
|
11
|
+
return this.break(context, (back) => {
|
|
12
12
|
setImmediate(() => {
|
|
13
|
-
return innerFunction.call(this, ...remainingArguments, context,
|
|
13
|
+
return innerFunction.call(this, ...remainingArguments, context, forward, back);
|
|
14
14
|
});
|
|
15
|
-
});
|
|
15
|
+
}, back);
|
|
16
16
|
};
|
|
17
17
|
}
|
|
18
18
|
|