occam-languages 0.0.113 → 0.0.115
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/utilities/verification.js +26 -28
- package/package.json +4 -4
- package/src/utilities/verification.js +29 -40
|
@@ -26,15 +26,14 @@ const _necessary = require("necessary");
|
|
|
26
26
|
const _dependency = require("../utilities/dependency");
|
|
27
27
|
const { last } = _necessary.arrayUtilities;
|
|
28
28
|
function initialiseReleaseContext(dependency, context) {
|
|
29
|
-
const { releaseContextMap } = context, dependencyName = dependency.getName(), releaseName = dependencyName, releaseContext = releaseContextMap[releaseName] || null;
|
|
29
|
+
const { log, releaseContextMap } = context, dependencyName = dependency.getName(), releaseName = dependencyName, releaseContext = releaseContextMap[releaseName] || null;
|
|
30
30
|
if (releaseContext === null) {
|
|
31
|
-
const { log } = context;
|
|
32
31
|
log.warning(`Unable to initialise the '${dependencyName}' context because it has not been created.`);
|
|
33
32
|
} else {
|
|
34
33
|
const releaseContextInitialised = releaseContext.isInitialised();
|
|
35
34
|
if (!releaseContextInitialised) {
|
|
36
35
|
initialiseDependencyReleaseContexts(dependency, releaseContext, context);
|
|
37
|
-
const
|
|
36
|
+
const releaseContexts = retrieveReleaseContexts(releaseContext, releaseContextMap);
|
|
38
37
|
log.info(`Initialising the '${dependencyName}' context...`);
|
|
39
38
|
const { FileContextFromFilePath } = context;
|
|
40
39
|
releaseContext.initialise(releaseContexts, FileContextFromFilePath);
|
|
@@ -43,33 +42,39 @@ function initialiseReleaseContext(dependency, context) {
|
|
|
43
42
|
}
|
|
44
43
|
}
|
|
45
44
|
async function createReleaseContext(dependency, dependentNames, context) {
|
|
46
|
-
let
|
|
47
|
-
const { releaseContextMap } = context, dependencyName = dependency.getName(), releaseName = dependencyName, releaseContext = releaseContextMap[releaseName] || null;
|
|
45
|
+
let releaseContextCreated = false;
|
|
46
|
+
const { log, releaseContextMap } = context, dependencyName = dependency.getName(), releaseName = dependencyName, releaseContext = releaseContextMap[releaseName] || null;
|
|
48
47
|
if (releaseContext !== null) {
|
|
49
|
-
const
|
|
48
|
+
const releaseMatchesDependency = checkReleaseMatchesDependency(releaseContext, dependency, dependentNames, context);
|
|
50
49
|
if (releaseMatchesDependency) {
|
|
51
50
|
log.debug(`The '${releaseName}' context has already been created.`);
|
|
52
|
-
|
|
51
|
+
releaseContextCreated = true;
|
|
53
52
|
}
|
|
54
53
|
} else {
|
|
55
|
-
const
|
|
54
|
+
const dependencyString = dependency.asString(), dependentNamesLength = dependentNames.length;
|
|
56
55
|
if (dependentNamesLength === 0) {
|
|
57
56
|
log.info(`Creating the '${releaseName}' context...`);
|
|
58
57
|
} else {
|
|
59
58
|
const lastDependentName = last(dependentNames), dependentName = lastDependentName; ///
|
|
60
59
|
log.info(`Creating the '${releaseName}' context given the '${dependentName}' dependant's '${dependencyString}' dependency...`);
|
|
61
60
|
}
|
|
62
|
-
const { releaseContextFromDependency } = context, releaseContext = await releaseContextFromDependency(dependency, context)
|
|
63
|
-
if (
|
|
61
|
+
const { releaseContextFromDependency } = context, releaseContext = await releaseContextFromDependency(dependency, context);
|
|
62
|
+
if (releaseContext !== null) {
|
|
64
63
|
const releaseMatchesDependency = checkReleaseMatchesDependency(releaseContext, dependency, dependentNames, context);
|
|
65
64
|
if (releaseMatchesDependency) {
|
|
66
65
|
releaseContextMap[releaseName] = releaseContext;
|
|
67
|
-
|
|
66
|
+
const dependencyReleaseContextsCreated = await createDependencyReleaseContexts(dependency, releaseContext, dependentNames, context);
|
|
67
|
+
if (dependencyReleaseContextsCreated) {
|
|
68
|
+
releaseContextCreated = true;
|
|
69
|
+
}
|
|
68
70
|
}
|
|
71
|
+
} else {
|
|
72
|
+
const dependencyName = dependency.getName(), releaseName = dependencyName; ///
|
|
73
|
+
log.warning(`The '${releaseName}' context could not be created. Perhaps the 'meta.json' file is missing or invalid. Or there could be a dependency mismatch.`);
|
|
69
74
|
}
|
|
70
|
-
|
|
75
|
+
releaseContextCreated ? log.debug(`...created the '${releaseName}' context.`) : log.warning(`...unable to create the '${releaseName}' context.`);
|
|
71
76
|
}
|
|
72
|
-
return
|
|
77
|
+
return releaseContextCreated;
|
|
73
78
|
}
|
|
74
79
|
async function verifyReleaseContext(releaseName, dependentName, dependentReleased, releaseContextMap) {
|
|
75
80
|
let releaseVerifies = false;
|
|
@@ -107,21 +112,22 @@ const _default = {
|
|
|
107
112
|
initialiseReleaseContext
|
|
108
113
|
};
|
|
109
114
|
async function createDependencyReleaseContexts(dependency, releaseContext, dependentNames, context) {
|
|
110
|
-
let
|
|
115
|
+
let dependencyReleaseContextsCreated;
|
|
111
116
|
const dependencyName = dependency.getName(), dependencies = releaseContext.getDependencies();
|
|
112
117
|
dependentNames = [
|
|
113
118
|
...dependentNames,
|
|
114
119
|
dependencyName
|
|
115
120
|
]; ///
|
|
116
|
-
|
|
117
|
-
let success = false;
|
|
121
|
+
dependencyReleaseContextsCreated = await (0, _dependency.asyncEveryDependency)(dependencies, async (dependency)=>{
|
|
118
122
|
const cyclicDependencyExists = checkCyclicDependencyExists(dependency, dependentNames, context);
|
|
119
123
|
if (!cyclicDependencyExists) {
|
|
120
|
-
|
|
124
|
+
const releaseContextCreated = await createReleaseContext(dependency, dependentNames, context);
|
|
125
|
+
if (releaseContextCreated) {
|
|
126
|
+
return true;
|
|
127
|
+
}
|
|
121
128
|
}
|
|
122
|
-
return success;
|
|
123
129
|
});
|
|
124
|
-
return
|
|
130
|
+
return dependencyReleaseContextsCreated;
|
|
125
131
|
}
|
|
126
132
|
async function verifyDependencyReleaseContexts(releaseContext, dependentName, dependentReleased, releaseContextMap) {
|
|
127
133
|
const dependencies = releaseContext.getDependencies(), dependencyReleaseContextsVerify = await (0, _dependency.asyncEveryDependency)(dependencies, async (dependency)=>{
|
|
@@ -152,14 +158,6 @@ function retrieveReleaseContexts(releaseContext, releaseContextMap) {
|
|
|
152
158
|
}
|
|
153
159
|
return releaseContexts;
|
|
154
160
|
}
|
|
155
|
-
function checkReleaseContextCreated(releaseContext, dependency, context) {
|
|
156
|
-
const releaseContextCreated = releaseContext !== null;
|
|
157
|
-
if (!releaseContextCreated) {
|
|
158
|
-
const { log } = context, dependencyName = dependency.getName(), releaseName = dependencyName; ///
|
|
159
|
-
log.warning(`The '${releaseName}' context could not be created. Perhaps the 'meta.json' file is missing or invalid. Or there could be a dependency mismatch.`);
|
|
160
|
-
}
|
|
161
|
-
return releaseContextCreated;
|
|
162
|
-
}
|
|
163
161
|
function checkCyclicDependencyExists(dependency, dependentNames, context) {
|
|
164
162
|
const dependencyName = dependency.getName(), dependentNamesIncludesDependencyName = dependentNames.includes(dependencyName), cyclicDependencyExists = dependentNamesIncludesDependencyName; ///
|
|
165
163
|
if (cyclicDependencyExists) {
|
|
@@ -191,4 +189,4 @@ function initialiseDependencyReleaseContexts(dependency, releaseContext, context
|
|
|
191
189
|
});
|
|
192
190
|
}
|
|
193
191
|
|
|
194
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvdmVyaWZpY2F0aW9uLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IHsgYXN5bmNFdmVyeURlcGVuZGVuY3kgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2RlcGVuZGVuY3lcIjtcblxuY29uc3QgeyBsYXN0IH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGZ1bmN0aW9uIGluaXRpYWxpc2VSZWxlYXNlQ29udGV4dChkZXBlbmRlbmN5LCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgcmVsZWFzZUNvbnRleHRNYXAgfSA9IGNvbnRleHQsXG4gICAgICAgIGRlcGVuZGVuY3lOYW1lID0gZGVwZW5kZW5jeS5nZXROYW1lKCksXG4gICAgICAgIHJlbGVhc2VOYW1lID0gZGVwZW5kZW5jeU5hbWUsIC8vL1xuICAgICAgICByZWxlYXNlQ29udGV4dCA9IHJlbGVhc2VDb250ZXh0TWFwW3JlbGVhc2VOYW1lXSB8fCBudWxsO1xuXG4gIGlmIChyZWxlYXNlQ29udGV4dCA9PT0gbnVsbCkge1xuICAgIGNvbnN0IHsgbG9nIH0gPSBjb250ZXh0O1xuXG4gICAgbG9nLndhcm5pbmcoYFVuYWJsZSB0byBpbml0aWFsaXNlIHRoZSAnJHtkZXBlbmRlbmN5TmFtZX0nIGNvbnRleHQgYmVjYXVzZSBpdCBoYXMgbm90IGJlZW4gY3JlYXRlZC5gKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCByZWxlYXNlQ29udGV4dEluaXRpYWxpc2VkID0gcmVsZWFzZUNvbnRleHQuaXNJbml0aWFsaXNlZCgpO1xuXG4gICAgaWYgKCFyZWxlYXNlQ29udGV4dEluaXRpYWxpc2VkKSB7XG4gICAgICBpbml0aWFsaXNlRGVwZW5kZW5jeVJlbGVhc2VDb250ZXh0cyhkZXBlbmRlbmN5LCByZWxlYXNlQ29udGV4dCwgY29udGV4dCk7XG5cbiAgICAgIGNvbnN0IHsgbG9nIH0gPSBjb250ZXh0LFxuICAgICAgICAgICAgcmVsZWFzZUNvbnRleHRzID0gcmV0cmlldmVSZWxlYXNlQ29udGV4dHMocmVsZWFzZUNvbnRleHQsIHJlbGVhc2VDb250ZXh0TWFwKTtcblxuICAgICAgbG9nLmluZm8oYEluaXRpYWxpc2luZyB0aGUgJyR7ZGVwZW5kZW5jeU5hbWV9JyBjb250ZXh0Li4uYCk7XG5cbiAgICAgIGNvbnN0IHsgRmlsZUNvbnRleHRGcm9tRmlsZVBhdGggfSA9IGNvbnRleHQ7XG5cbiAgICAgIHJlbGVhc2VDb250ZXh0LmluaXRpYWxpc2UocmVsZWFzZUNvbnRleHRzLCBGaWxlQ29udGV4dEZyb21GaWxlUGF0aCk7XG5cbiAgICAgIGxvZy5kZWJ1ZyhgLi4uaW5pdGlhbGlzZWQgdGhlICcke2RlcGVuZGVuY3lOYW1lfScgY29udGV4dC5gKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVJlbGVhc2VDb250ZXh0KGRlcGVuZGVuY3ksIGRlcGVuZGVudE5hbWVzLCBjb250ZXh0KSB7XG4gIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgY29uc3QgeyByZWxlYXNlQ29udGV4dE1hcCB9ID0gY29udGV4dCxcbiAgICAgICAgZGVwZW5kZW5jeU5hbWUgPSBkZXBlbmRlbmN5LmdldE5hbWUoKSxcbiAgICAgICAgcmVsZWFzZU5hbWUgPSBkZXBlbmRlbmN5TmFtZSwgLy8vXG4gICAgICAgIHJlbGVhc2VDb250ZXh0ID0gcmVsZWFzZUNvbnRleHRNYXBbcmVsZWFzZU5hbWVdIHx8IG51bGw7XG5cbiAgaWYgKHJlbGVhc2VDb250ZXh0ICE9PSBudWxsKSB7XG4gICAgY29uc3QgeyBsb2cgfSA9IGNvbnRleHQsXG4gICAgICAgICAgcmVsZWFzZU1hdGNoZXNEZXBlbmRlbmN5ID0gY2hlY2tSZWxlYXNlTWF0Y2hlc0RlcGVuZGVuY3kocmVsZWFzZUNvbnRleHQsIGRlcGVuZGVuY3ksIGRlcGVuZGVudE5hbWVzLCBjb250ZXh0KTtcblxuICAgIGlmIChyZWxlYXNlTWF0Y2hlc0RlcGVuZGVuY3kpIHtcbiAgICAgIGxvZy5kZWJ1ZyhgVGhlICcke3JlbGVhc2VOYW1lfScgY29udGV4dCBoYXMgYWxyZWFkeSBiZWVuIGNyZWF0ZWQuYCk7XG5cbiAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb25zdCB7IGxvZyB9ID0gY29udGV4dCxcbiAgICAgICAgICBkZXBlbmRlbmN5U3RyaW5nID0gZGVwZW5kZW5jeS5hc1N0cmluZygpLFxuICAgICAgICAgIGRlcGVuZGVudE5hbWVzTGVuZ3RoID0gZGVwZW5kZW50TmFtZXMubGVuZ3RoO1xuXG4gICAgaWYgKGRlcGVuZGVudE5hbWVzTGVuZ3RoID09PSAwKSB7XG4gICAgICBsb2cuaW5mbyhgQ3JlYXRpbmcgdGhlICcke3JlbGVhc2VOYW1lfScgY29udGV4dC4uLmApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBsYXN0RGVwZW5kZW50TmFtZSA9IGxhc3QoZGVwZW5kZW50TmFtZXMpLFxuICAgICAgICAgICAgZGVwZW5kZW50TmFtZSA9IGxhc3REZXBlbmRlbnROYW1lOyAgLy8vXG5cbiAgICAgIGxvZy5pbmZvKGBDcmVhdGluZyB0aGUgJyR7cmVsZWFzZU5hbWV9JyBjb250ZXh0IGdpdmVuIHRoZSAnJHtkZXBlbmRlbnROYW1lfScgZGVwZW5kYW50J3MgJyR7ZGVwZW5kZW5jeVN0cmluZ30nIGRlcGVuZGVuY3kuLi5gKTtcbiAgICB9XG5cbiAgICBjb25zdCB7IHJlbGVhc2VDb250ZXh0RnJvbURlcGVuZGVuY3kgfSA9IGNvbnRleHQsXG4gICAgICAgICAgcmVsZWFzZUNvbnRleHQgPSBhd2FpdCByZWxlYXNlQ29udGV4dEZyb21EZXBlbmRlbmN5KGRlcGVuZGVuY3ksIGNvbnRleHQpLFxuICAgICAgICAgIHJlbGVhc2VDb250ZXh0Q3JlYXRlZCA9IGNoZWNrUmVsZWFzZUNvbnRleHRDcmVhdGVkKHJlbGVhc2VDb250ZXh0LCBkZXBlbmRlbmN5LCBjb250ZXh0KTtcblxuICAgIGlmIChyZWxlYXNlQ29udGV4dENyZWF0ZWQpIHtcbiAgICAgIGNvbnN0IHJlbGVhc2VNYXRjaGVzRGVwZW5kZW5jeSA9IGNoZWNrUmVsZWFzZU1hdGNoZXNEZXBlbmRlbmN5KHJlbGVhc2VDb250ZXh0LCBkZXBlbmRlbmN5LCBkZXBlbmRlbnROYW1lcywgY29udGV4dCk7XG5cbiAgICAgIGlmIChyZWxlYXNlTWF0Y2hlc0RlcGVuZGVuY3kpIHtcbiAgICAgICAgcmVsZWFzZUNvbnRleHRNYXBbcmVsZWFzZU5hbWVdID0gcmVsZWFzZUNvbnRleHQ7XG5cbiAgICAgICAgc3VjY2VzcyA9IGF3YWl0IGNyZWF0ZURlcGVuZGVuY3lSZWxlYXNlQ29udGV4dHMoZGVwZW5kZW5jeSwgcmVsZWFzZUNvbnRleHQsIGRlcGVuZGVudE5hbWVzLCBjb250ZXh0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzdWNjZXNzID9cbiAgICAgIGxvZy5kZWJ1ZyhgLi4uY3JlYXRlZCB0aGUgJyR7cmVsZWFzZU5hbWV9JyBjb250ZXh0LmApIDpcbiAgICAgICAgbG9nLndhcm5pbmcoYC4uLnVuYWJsZSB0byBjcmVhdGUgdGhlICcke3JlbGVhc2VOYW1lfScgY29udGV4dC5gKTtcbiAgfVxuXG4gIHJldHVybiBzdWNjZXNzO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdmVyaWZ5UmVsZWFzZUNvbnRleHQocmVsZWFzZU5hbWUsIGRlcGVuZGVudE5hbWUsIGRlcGVuZGVudFJlbGVhc2VkLCByZWxlYXNlQ29udGV4dE1hcCkge1xuICBsZXQgcmVsZWFzZVZlcmlmaWVzID0gZmFsc2U7XG5cbiAgY29uc3QgcmVsZWFzZUNvbnRleHQgPSByZWxlYXNlQ29udGV4dE1hcFtyZWxlYXNlTmFtZV07XG5cbiAgaWYgKHJlbGVhc2VDb250ZXh0ICE9PSBudWxsKSB7XG4gICAgY29uc3QgcmVsZWFzZWQgPSByZWxlYXNlQ29udGV4dC5pc1JlbGVhc2VkKCk7XG5cbiAgICBpZiAocmVsZWFzZWQpIHtcbiAgICAgIHJlbGVhc2VWZXJpZmllcyA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChkZXBlbmRlbnRSZWxlYXNlZCkge1xuICAgICAgICByZWxlYXNlQ29udGV4dC53YXJuaW5nKGBUaGUgJyR7cmVsZWFzZU5hbWV9JyBwcm9qZWN0IGNhbm5vdCBiZSB2ZXJpZmllcyBiZWNhdXNlIGl0cyAnJHtkZXBlbmRlbnROYW1lfScgZGVwZW5kZW50IGlzIGEgcGFja2FnZS5gKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGRlcGVuZGVudE5hbWUgPSByZWxlYXNlTmFtZSwgIC8vL1xuICAgICAgICAgICAgICBkZXBlbmRlbnRSZWxlYXNlZCA9IHJlbGVhc2VkLCAvLy9cbiAgICAgICAgICAgICAgZGVwZW5kZW5jeVJlbGVhc2VDb250ZXh0c1ZlcmlmeSA9IGF3YWl0IHZlcmlmeURlcGVuZGVuY3lSZWxlYXNlQ29udGV4dHMocmVsZWFzZUNvbnRleHQsIGRlcGVuZGVudE5hbWUsIGRlcGVuZGVudFJlbGVhc2VkLCByZWxlYXNlQ29udGV4dE1hcCk7XG5cbiAgICAgICAgaWYgKGRlcGVuZGVuY3lSZWxlYXNlQ29udGV4dHNWZXJpZnkpIHtcbiAgICAgICAgICBjb25zdCByZWxlYXNlQ29udGV4dFZlcmlmaWVkID0gcmVsZWFzZUNvbnRleHQuaGFzVmVyaWZpZWQoKTtcblxuICAgICAgICAgIGlmIChyZWxlYXNlQ29udGV4dFZlcmlmaWVkKSB7XG4gICAgICAgICAgICByZWxlYXNlVmVyaWZpZXMgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZWxlYXNlQ29udGV4dC5pbmZvKGBWZXJpZnlpbmcgdGhlICcke3JlbGVhc2VOYW1lfScgcHJvamVjdC4uLmApO1xuXG4gICAgICAgICAgICBjb25zdCByZWxlYXNlQ29udGV4dFZlcmlmaWVzID0gYXdhaXQgcmVsZWFzZUNvbnRleHQudmVyaWZ5KCk7XG5cbiAgICAgICAgICAgIGlmIChyZWxlYXNlQ29udGV4dFZlcmlmaWVzKSB7XG4gICAgICAgICAgICAgIHJlbGVhc2VDb250ZXh0LmluZm8oYC4uLnZlcmlmaWVkIHRoZSAnJHtyZWxlYXNlTmFtZX0nIHByb2plY3QuYCk7XG5cbiAgICAgICAgICAgICAgcmVsZWFzZVZlcmlmaWVzID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVsZWFzZVZlcmlmaWVzO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNyZWF0ZVJlbGVhc2VDb250ZXh0LFxuICB2ZXJpZnlSZWxlYXNlQ29udGV4dCxcbiAgaW5pdGlhbGlzZVJlbGVhc2VDb250ZXh0XG59O1xuXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVEZXBlbmRlbmN5UmVsZWFzZUNvbnRleHRzKGRlcGVuZGVuY3ksIHJlbGVhc2VDb250ZXh0LCBkZXBlbmRlbnROYW1lcywgY29udGV4dCkge1xuICBsZXQgc3VjY2VzcztcblxuICBjb25zdCBkZXBlbmRlbmN5TmFtZSA9IGRlcGVuZGVuY3kuZ2V0TmFtZSgpLFxuICAgICAgICBkZXBlbmRlbmNpZXMgPSByZWxlYXNlQ29udGV4dC5nZXREZXBlbmRlbmNpZXMoKTtcblxuICBkZXBlbmRlbnROYW1lcyA9IFsgLi4uZGVwZW5kZW50TmFtZXMsIGRlcGVuZGVuY3lOYW1lIF07ICAvLy9cblxuICBzdWNjZXNzID0gYXdhaXQgYXN5bmNFdmVyeURlcGVuZGVuY3koZGVwZW5kZW5jaWVzLCBhc3luYyAoZGVwZW5kZW5jeSkgPT4ge1xuICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICBjb25zdCBjeWNsaWNEZXBlbmRlbmN5RXhpc3RzID0gY2hlY2tDeWNsaWNEZXBlbmRlbmN5RXhpc3RzKGRlcGVuZGVuY3ksIGRlcGVuZGVudE5hbWVzLCBjb250ZXh0KTtcblxuICAgIGlmICghY3ljbGljRGVwZW5kZW5jeUV4aXN0cykge1xuICAgICAgc3VjY2VzcyA9IGF3YWl0IGNyZWF0ZVJlbGVhc2VDb250ZXh0KGRlcGVuZGVuY3ksIGRlcGVuZGVudE5hbWVzLCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3VjY2VzcztcbiAgfSk7XG5cbiAgcmV0dXJuIHN1Y2Nlc3M7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHZlcmlmeURlcGVuZGVuY3lSZWxlYXNlQ29udGV4dHMocmVsZWFzZUNvbnRleHQsIGRlcGVuZGVudE5hbWUsIGRlcGVuZGVudFJlbGVhc2VkLCByZWxlYXNlQ29udGV4dE1hcCkge1xuICBjb25zdCBkZXBlbmRlbmNpZXMgPSByZWxlYXNlQ29udGV4dC5nZXREZXBlbmRlbmNpZXMoKSxcbiAgICAgICAgZGVwZW5kZW5jeVJlbGVhc2VDb250ZXh0c1ZlcmlmeSA9IGF3YWl0IGFzeW5jRXZlcnlEZXBlbmRlbmN5KGRlcGVuZGVuY2llcywgYXN5bmMgKGRlcGVuZGVuY3kpID0+IHtcbiAgICAgICAgICBjb25zdCBuYW1lID0gZGVwZW5kZW5jeS5nZXROYW1lKCksXG4gICAgICAgICAgICAgICAgcmVsZWFzZU5hbWUgPSBuYW1lLCAvLy9cbiAgICAgICAgICAgICAgICByZWxlYXNlQ29udGV4dFZlcmlmaWVzID0gYXdhaXQgdmVyaWZ5UmVsZWFzZUNvbnRleHQocmVsZWFzZU5hbWUsIGRlcGVuZGVudE5hbWUsIGRlcGVuZGVudFJlbGVhc2VkLCByZWxlYXNlQ29udGV4dE1hcCk7XG5cbiAgICAgICAgICBpZiAocmVsZWFzZUNvbnRleHRWZXJpZmllcykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICByZXR1cm4gZGVwZW5kZW5jeVJlbGVhc2VDb250ZXh0c1ZlcmlmeTtcbn1cblxuZnVuY3Rpb24gcmV0cmlldmVSZWxlYXNlQ29udGV4dHMocmVsZWFzZUNvbnRleHQsIHJlbGVhc2VDb250ZXh0TWFwKSB7XG4gIGNvbnN0IHJlbGVhc2VDb250ZXh0cyA9IFtdLFxuICAgICAgICByZW1haW5pbmdSZWxlYXNlQ29udGV4dCA9IHJlbGVhc2VDb250ZXh0LCAgLy8vXG4gICAgICAgIHJlbWFpbmluZ1JlbGVhc2VDb250ZXh0cyA9IFtcbiAgICAgICAgICByZW1haW5pbmdSZWxlYXNlQ29udGV4dFxuICAgICAgICBdO1xuXG4gIGxldCByZW1haW5pbmdSZWxlYXNlQ29udGV4dHNMZW5ndGggPSByZW1haW5pbmdSZWxlYXNlQ29udGV4dHMubGVuZ3RoO1xuXG4gIHdoaWxlIChyZW1haW5pbmdSZWxlYXNlQ29udGV4dHNMZW5ndGggPiAwKSB7XG4gICAgY29uc3QgcmVtYWluaW5nUmVsZWFzZUNvbnRleHQgPSByZW1haW5pbmdSZWxlYXNlQ29udGV4dHMuc2hpZnQoKSxcbiAgICAgICAgICByZWxlYXNlQ29udGV4dCA9IHJlbWFpbmluZ1JlbGVhc2VDb250ZXh0OyAgLy8vXG5cbiAgICByZWxlYXNlQ29udGV4dHMucHVzaChyZWxlYXNlQ29udGV4dCk7XG5cbiAgICBjb25zdCBkZXBlbmRlbmNpZXMgPSByZWxlYXNlQ29udGV4dC5nZXREZXBlbmRlbmNpZXMoKTtcblxuICAgIGRlcGVuZGVuY2llcy5mb3JFYWNoRGVwZW5kZW5jeSgoZGVwZW5kZW5jeSkgPT4ge1xuICAgICAgY29uc3QgZGVwZW5kZW5jeU5hbWUgPSBkZXBlbmRlbmN5LmdldE5hbWUoKSxcbiAgICAgICAgICAgIHJlbGVhc2VOYW1lID0gZGVwZW5kZW5jeU5hbWUsIC8vL1xuICAgICAgICAgICAgcmVsZWFzZUNvbnRleHQgPSByZWxlYXNlQ29udGV4dE1hcFtyZWxlYXNlTmFtZV0sXG4gICAgICAgICAgICByZWxlYXNlQ29udGV4dHNJbmNsdWRlc1JlbGVhc2VDb250ZXh0ID0gcmVsZWFzZUNvbnRleHRzLmluY2x1ZGVzKHJlbGVhc2VDb250ZXh0KSxcbiAgICAgICAgICAgIHJlbWFpbmluZ1JlbGVhc2VDb250ZXh0c0luY2x1ZGVzUmVsZWFzZUNvbnRleHQgPSByZW1haW5pbmdSZWxlYXNlQ29udGV4dHMuaW5jbHVkZXMocmVsZWFzZUNvbnRleHQpO1xuXG4gICAgICBpZiAoIXJlbGVhc2VDb250ZXh0c0luY2x1ZGVzUmVsZWFzZUNvbnRleHQgJiYgIXJlbWFpbmluZ1JlbGVhc2VDb250ZXh0c0luY2x1ZGVzUmVsZWFzZUNvbnRleHQpIHtcbiAgICAgICAgY29uc3QgcmVtYWluaW5nUmVsZWFzZUNvbnRleHQgPSByZWxlYXNlQ29udGV4dDsgLy8vXG5cbiAgICAgICAgcmVtYWluaW5nUmVsZWFzZUNvbnRleHRzLnB1c2gocmVtYWluaW5nUmVsZWFzZUNvbnRleHQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmVtYWluaW5nUmVsZWFzZUNvbnRleHRzTGVuZ3RoID0gcmVtYWluaW5nUmVsZWFzZUNvbnRleHRzLmxlbmd0aDtcbiAgfVxuXG4gIHJldHVybiByZWxlYXNlQ29udGV4dHM7XG59XG5cbmZ1bmN0aW9uIGNoZWNrUmVsZWFzZUNvbnRleHRDcmVhdGVkKHJlbGVhc2VDb250ZXh0LCBkZXBlbmRlbmN5LCBjb250ZXh0KSB7XG4gIGNvbnN0IHJlbGVhc2VDb250ZXh0Q3JlYXRlZCA9IChyZWxlYXNlQ29udGV4dCAhPT0gbnVsbCk7XG5cbiAgaWYgKCFyZWxlYXNlQ29udGV4dENyZWF0ZWQpIHtcbiAgICBjb25zdCB7IGxvZyB9ID0gY29udGV4dCxcbiAgICAgICAgICBkZXBlbmRlbmN5TmFtZSA9IGRlcGVuZGVuY3kuZ2V0TmFtZSgpLFxuICAgICAgICAgIHJlbGVhc2VOYW1lID0gZGVwZW5kZW5jeU5hbWU7IC8vL1xuXG4gICAgbG9nLndhcm5pbmcoYFRoZSAnJHtyZWxlYXNlTmFtZX0nIGNvbnRleHQgY291bGQgbm90IGJlIGNyZWF0ZWQuIFBlcmhhcHMgdGhlICdtZXRhLmpzb24nIGZpbGUgaXMgbWlzc2luZyBvciBpbnZhbGlkLiBPciB0aGVyZSBjb3VsZCBiZSBhIGRlcGVuZGVuY3kgbWlzbWF0Y2guYCk7XG4gIH1cblxuICByZXR1cm4gcmVsZWFzZUNvbnRleHRDcmVhdGVkO1xufVxuXG5mdW5jdGlvbiBjaGVja0N5Y2xpY0RlcGVuZGVuY3lFeGlzdHMoZGVwZW5kZW5jeSwgZGVwZW5kZW50TmFtZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgZGVwZW5kZW5jeU5hbWUgPSBkZXBlbmRlbmN5LmdldE5hbWUoKSxcbiAgICAgICAgZGVwZW5kZW50TmFtZXNJbmNsdWRlc0RlcGVuZGVuY3lOYW1lID0gZGVwZW5kZW50TmFtZXMuaW5jbHVkZXMoZGVwZW5kZW5jeU5hbWUpLFxuICAgICAgICBjeWNsaWNEZXBlbmRlbmN5RXhpc3RzID0gZGVwZW5kZW50TmFtZXNJbmNsdWRlc0RlcGVuZGVuY3lOYW1lOyAgLy8vXG5cbiAgaWYgKGN5Y2xpY0RlcGVuZGVuY3lFeGlzdHMpIHtcbiAgICBjb25zdCB7IGxvZyB9ID0gY29udGV4dCxcbiAgICAgICAgICBmaXJzdERlcGVuZGVudE5hbWUgPSBmaXJzdChkZXBlbmRlbnROYW1lcyksXG4gICAgICAgICAgZGVwZW5kZW5jeU5hbWVzID0gWyAgLy8vXG4gICAgICAgICAgICAuLi5kZXBlbmRlbnROYW1lcyxcbiAgICAgICAgICAgIGZpcnN0RGVwZW5kZW50TmFtZVxuICAgICAgICAgIF0sXG4gICAgICAgICAgZGVwZW5kZW5jeU5hbWVzU3RyaW5nID0gZGVwZW5kZW5jeU5hbWVzLmpvaW4oYCcgLT4gJ2ApO1xuXG4gICAgbG9nLndhcm5pbmcoYFRoZXJlIGlzIGEgY3ljbGljIGRlcGVuZGVuY3ksICcke2RlcGVuZGVuY3lOYW1lc1N0cmluZ30nLmApO1xuICB9XG5cbiAgcmV0dXJuIGN5Y2xpY0RlcGVuZGVuY3lFeGlzdHM7XG59XG5cbmZ1bmN0aW9uIGNoZWNrUmVsZWFzZU1hdGNoZXNEZXBlbmRlbmN5KHJlbGVhc2VDb250ZXh0LCBkZXBlbmRlbmN5LCBkZXBlbmRlbnROYW1lcywgY29udGV4dCkge1xuICBsZXQgcmVsZWFzZU1hdGNoZXNEZXBlbmRlbmN5ID0gdHJ1ZTtcblxuICBjb25zdCBzaG9ydGVuZWRWZXJzaW9uID0gZGVwZW5kZW5jeS5nZXRTaG9ydGVkVmVyc2lvbigpO1xuXG4gIGlmIChzaG9ydGVuZWRWZXJzaW9uICE9PSBudWxsKSB7XG4gICAgY29uc3QgZW50cmllc01hdGNoU2hvcnRlbmVkVmVyc2lvbiA9IHJlbGVhc2VDb250ZXh0Lm1hdGNoU2hvcnRlbmVkVmVyc2lvbihzaG9ydGVuZWRWZXJzaW9uKTtcblxuICAgIGlmICghZW50cmllc01hdGNoU2hvcnRlbmVkVmVyc2lvbikge1xuICAgICAgY29uc3QgeyBsb2cgfSA9IGNvbnRleHQsXG4gICAgICAgICAgICB2ZXJzaW9uID0gcmVsZWFzZUNvbnRleHQuZ2V0VmVyc2lvbigpLFxuICAgICAgICAgICAgbGFzdERlcGVuZGVudE5hbWUgPSBsYXN0KGRlcGVuZGVudE5hbWVzKSxcbiAgICAgICAgICAgIGRlcGVuZGVudE5hbWUgPSBsYXN0RGVwZW5kZW50TmFtZSwgIC8vL1xuICAgICAgICAgICAgdmVyc2lvblN0cmluZyA9IHZlcnNpb24udG9TdHJpbmcoKSxcbiAgICAgICAgICAgIGRlcGVuZGVuY3lTdHJpbmcgPSBkZXBlbmRlbmN5LmFzU3RyaW5nKCk7XG5cbiAgICAgIGxvZy53YXJuaW5nKGBUaGUgJyR7ZGVwZW5kZW50TmFtZX0nIGRlcGVuZGVudCByZXF1aXJlcyB0aGUgJyR7ZGVwZW5kZW5jeVN0cmluZ30nIGRlcGVuZGVuY3kgYnV0IGEgY29udGV4dCB3aXRoIHZlcnNpb24gJyR7dmVyc2lvblN0cmluZ30nIHdhcyBwcm92aWRlZC5gKTtcblxuICAgICAgcmVsZWFzZU1hdGNoZXNEZXBlbmRlbmN5ID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlbGVhc2VNYXRjaGVzRGVwZW5kZW5jeTtcbn1cblxuZnVuY3Rpb24gaW5pdGlhbGlzZURlcGVuZGVuY3lSZWxlYXNlQ29udGV4dHMoZGVwZW5kZW5jeSwgcmVsZWFzZUNvbnRleHQsIGNvbnRleHQpIHtcbiAgY29uc3QgZGVwZW5kZW5jaWVzID0gcmVsZWFzZUNvbnRleHQuZ2V0RGVwZW5kZW5jaWVzKCk7XG5cbiAgZGVwZW5kZW5jaWVzLmZvckVhY2hEZXBlbmRlbmN5KChkZXBlbmRlbmN5KSA9PiB7ICAvLy9cbiAgICBpbml0aWFsaXNlUmVsZWFzZUNvbnRleHQoZGVwZW5kZW5jeSwgY29udGV4dCk7XG4gIH0pO1xufVxuIl0sIm5hbWVzIjpbImNyZWF0ZVJlbGVhc2VDb250ZXh0IiwiaW5pdGlhbGlzZVJlbGVhc2VDb250ZXh0IiwidmVyaWZ5UmVsZWFzZUNvbnRleHQiLCJsYXN0IiwiYXJyYXlVdGlsaXRpZXMiLCJkZXBlbmRlbmN5IiwiY29udGV4dCIsInJlbGVhc2VDb250ZXh0TWFwIiwiZGVwZW5kZW5jeU5hbWUiLCJnZXROYW1lIiwicmVsZWFzZU5hbWUiLCJyZWxlYXNlQ29udGV4dCIsImxvZyIsIndhcm5pbmciLCJyZWxlYXNlQ29udGV4dEluaXRpYWxpc2VkIiwiaXNJbml0aWFsaXNlZCIsImluaXRpYWxpc2VEZXBlbmRlbmN5UmVsZWFzZUNvbnRleHRzIiwicmVsZWFzZUNvbnRleHRzIiwicmV0cmlldmVSZWxlYXNlQ29udGV4dHMiLCJpbmZvIiwiRmlsZUNvbnRleHRGcm9tRmlsZVBhdGgiLCJpbml0aWFsaXNlIiwiZGVidWciLCJkZXBlbmRlbnROYW1lcyIsInN1Y2Nlc3MiLCJyZWxlYXNlTWF0Y2hlc0RlcGVuZGVuY3kiLCJjaGVja1JlbGVhc2VNYXRjaGVzRGVwZW5kZW5jeSIsImRlcGVuZGVuY3lTdHJpbmciLCJhc1N0cmluZyIsImRlcGVuZGVudE5hbWVzTGVuZ3RoIiwibGVuZ3RoIiwibGFzdERlcGVuZGVudE5hbWUiLCJkZXBlbmRlbnROYW1lIiwicmVsZWFzZUNvbnRleHRGcm9tRGVwZW5kZW5jeSIsInJlbGVhc2VDb250ZXh0Q3JlYXRlZCIsImNoZWNrUmVsZWFzZUNvbnRleHRDcmVhdGVkIiwiY3JlYXRlRGVwZW5kZW5jeVJlbGVhc2VDb250ZXh0cyIsImRlcGVuZGVudFJlbGVhc2VkIiwicmVsZWFzZVZlcmlmaWVzIiwicmVsZWFzZWQiLCJpc1JlbGVhc2VkIiwiZGVwZW5kZW5jeVJlbGVhc2VDb250ZXh0c1ZlcmlmeSIsInZlcmlmeURlcGVuZGVuY3lSZWxlYXNlQ29udGV4dHMiLCJyZWxlYXNlQ29udGV4dFZlcmlmaWVkIiwiaGFzVmVyaWZpZWQiLCJyZWxlYXNlQ29udGV4dFZlcmlmaWVzIiwidmVyaWZ5IiwiZGVwZW5kZW5jaWVzIiwiZ2V0RGVwZW5kZW5jaWVzIiwiYXN5bmNFdmVyeURlcGVuZGVuY3kiLCJjeWNsaWNEZXBlbmRlbmN5RXhpc3RzIiwiY2hlY2tDeWNsaWNEZXBlbmRlbmN5RXhpc3RzIiwibmFtZSIsInJlbWFpbmluZ1JlbGVhc2VDb250ZXh0IiwicmVtYWluaW5nUmVsZWFzZUNvbnRleHRzIiwicmVtYWluaW5nUmVsZWFzZUNvbnRleHRzTGVuZ3RoIiwic2hpZnQiLCJwdXNoIiwiZm9yRWFjaERlcGVuZGVuY3kiLCJyZWxlYXNlQ29udGV4dHNJbmNsdWRlc1JlbGVhc2VDb250ZXh0IiwiaW5jbHVkZXMiLCJyZW1haW5pbmdSZWxlYXNlQ29udGV4dHNJbmNsdWRlc1JlbGVhc2VDb250ZXh0IiwiZGVwZW5kZW50TmFtZXNJbmNsdWRlc0RlcGVuZGVuY3lOYW1lIiwiZmlyc3REZXBlbmRlbnROYW1lIiwiZmlyc3QiLCJkZXBlbmRlbmN5TmFtZXMiLCJkZXBlbmRlbmN5TmFtZXNTdHJpbmciLCJqb2luIiwic2hvcnRlbmVkVmVyc2lvbiIsImdldFNob3J0ZWRWZXJzaW9uIiwiZW50cmllc01hdGNoU2hvcnRlbmVkVmVyc2lvbiIsIm1hdGNoU2hvcnRlbmVkVmVyc2lvbiIsInZlcnNpb24iLCJnZXRWZXJzaW9uIiwidmVyc2lvblN0cmluZyIsInRvU3RyaW5nIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7UUFzQ3NCQTtlQUFBQTs7UUErRnRCO2VBQUE7O1FBN0hnQkM7ZUFBQUE7O1FBbUZNQztlQUFBQTs7OzJCQXpGUzs0QkFFTTtBQUVyQyxNQUFNLEVBQUVDLElBQUksRUFBRSxHQUFHQyx5QkFBYztBQUV4QixTQUFTSCx5QkFBeUJJLFVBQVUsRUFBRUMsT0FBTztJQUMxRCxNQUFNLEVBQUVDLGlCQUFp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
|
|
192
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvdmVyaWZpY2F0aW9uLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IHsgYXN5bmNFdmVyeURlcGVuZGVuY3kgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2RlcGVuZGVuY3lcIjtcblxuY29uc3QgeyBsYXN0IH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGZ1bmN0aW9uIGluaXRpYWxpc2VSZWxlYXNlQ29udGV4dChkZXBlbmRlbmN5LCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgbG9nLCByZWxlYXNlQ29udGV4dE1hcCB9ID0gY29udGV4dCxcbiAgICAgICAgZGVwZW5kZW5jeU5hbWUgPSBkZXBlbmRlbmN5LmdldE5hbWUoKSxcbiAgICAgICAgcmVsZWFzZU5hbWUgPSBkZXBlbmRlbmN5TmFtZSwgLy8vXG4gICAgICAgIHJlbGVhc2VDb250ZXh0ID0gcmVsZWFzZUNvbnRleHRNYXBbcmVsZWFzZU5hbWVdIHx8IG51bGw7XG5cbiAgaWYgKHJlbGVhc2VDb250ZXh0ID09PSBudWxsKSB7XG4gICAgbG9nLndhcm5pbmcoYFVuYWJsZSB0byBpbml0aWFsaXNlIHRoZSAnJHtkZXBlbmRlbmN5TmFtZX0nIGNvbnRleHQgYmVjYXVzZSBpdCBoYXMgbm90IGJlZW4gY3JlYXRlZC5gKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCByZWxlYXNlQ29udGV4dEluaXRpYWxpc2VkID0gcmVsZWFzZUNvbnRleHQuaXNJbml0aWFsaXNlZCgpO1xuXG4gICAgaWYgKCFyZWxlYXNlQ29udGV4dEluaXRpYWxpc2VkKSB7XG4gICAgICBpbml0aWFsaXNlRGVwZW5kZW5jeVJlbGVhc2VDb250ZXh0cyhkZXBlbmRlbmN5LCByZWxlYXNlQ29udGV4dCwgY29udGV4dCk7XG5cbiAgICAgIGNvbnN0IHJlbGVhc2VDb250ZXh0cyA9IHJldHJpZXZlUmVsZWFzZUNvbnRleHRzKHJlbGVhc2VDb250ZXh0LCByZWxlYXNlQ29udGV4dE1hcCk7XG5cbiAgICAgIGxvZy5pbmZvKGBJbml0aWFsaXNpbmcgdGhlICcke2RlcGVuZGVuY3lOYW1lfScgY29udGV4dC4uLmApO1xuXG4gICAgICBjb25zdCB7IEZpbGVDb250ZXh0RnJvbUZpbGVQYXRoIH0gPSBjb250ZXh0O1xuXG4gICAgICByZWxlYXNlQ29udGV4dC5pbml0aWFsaXNlKHJlbGVhc2VDb250ZXh0cywgRmlsZUNvbnRleHRGcm9tRmlsZVBhdGgpO1xuXG4gICAgICBsb2cuZGVidWcoYC4uLmluaXRpYWxpc2VkIHRoZSAnJHtkZXBlbmRlbmN5TmFtZX0nIGNvbnRleHQuYCk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVSZWxlYXNlQ29udGV4dChkZXBlbmRlbmN5LCBkZXBlbmRlbnROYW1lcywgY29udGV4dCkge1xuICBsZXQgcmVsZWFzZUNvbnRleHRDcmVhdGVkID0gZmFsc2U7XG5cbiAgY29uc3QgeyBsb2csIHJlbGVhc2VDb250ZXh0TWFwIH0gPSBjb250ZXh0LFxuICAgICAgICBkZXBlbmRlbmN5TmFtZSA9IGRlcGVuZGVuY3kuZ2V0TmFtZSgpLFxuICAgICAgICByZWxlYXNlTmFtZSA9IGRlcGVuZGVuY3lOYW1lLCAvLy9cbiAgICAgICAgcmVsZWFzZUNvbnRleHQgPSByZWxlYXNlQ29udGV4dE1hcFtyZWxlYXNlTmFtZV0gfHwgbnVsbDtcblxuICBpZiAocmVsZWFzZUNvbnRleHQgIT09IG51bGwpIHtcbiAgICBjb25zdCByZWxlYXNlTWF0Y2hlc0RlcGVuZGVuY3kgPSBjaGVja1JlbGVhc2VNYXRjaGVzRGVwZW5kZW5jeShyZWxlYXNlQ29udGV4dCwgZGVwZW5kZW5jeSwgZGVwZW5kZW50TmFtZXMsIGNvbnRleHQpO1xuXG4gICAgaWYgKHJlbGVhc2VNYXRjaGVzRGVwZW5kZW5jeSkge1xuICAgICAgbG9nLmRlYnVnKGBUaGUgJyR7cmVsZWFzZU5hbWV9JyBjb250ZXh0IGhhcyBhbHJlYWR5IGJlZW4gY3JlYXRlZC5gKTtcblxuICAgICAgcmVsZWFzZUNvbnRleHRDcmVhdGVkID0gdHJ1ZTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZGVwZW5kZW5jeVN0cmluZyA9IGRlcGVuZGVuY3kuYXNTdHJpbmcoKSxcbiAgICAgICAgICBkZXBlbmRlbnROYW1lc0xlbmd0aCA9IGRlcGVuZGVudE5hbWVzLmxlbmd0aDtcblxuICAgIGlmIChkZXBlbmRlbnROYW1lc0xlbmd0aCA9PT0gMCkge1xuICAgICAgbG9nLmluZm8oYENyZWF0aW5nIHRoZSAnJHtyZWxlYXNlTmFtZX0nIGNvbnRleHQuLi5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgbGFzdERlcGVuZGVudE5hbWUgPSBsYXN0KGRlcGVuZGVudE5hbWVzKSxcbiAgICAgICAgICAgIGRlcGVuZGVudE5hbWUgPSBsYXN0RGVwZW5kZW50TmFtZTsgIC8vL1xuXG4gICAgICBsb2cuaW5mbyhgQ3JlYXRpbmcgdGhlICcke3JlbGVhc2VOYW1lfScgY29udGV4dCBnaXZlbiB0aGUgJyR7ZGVwZW5kZW50TmFtZX0nIGRlcGVuZGFudCdzICcke2RlcGVuZGVuY3lTdHJpbmd9JyBkZXBlbmRlbmN5Li4uYCk7XG4gICAgfVxuXG4gICAgY29uc3QgeyByZWxlYXNlQ29udGV4dEZyb21EZXBlbmRlbmN5IH0gPSBjb250ZXh0LFxuICAgICAgICAgIHJlbGVhc2VDb250ZXh0ID0gYXdhaXQgcmVsZWFzZUNvbnRleHRGcm9tRGVwZW5kZW5jeShkZXBlbmRlbmN5LCBjb250ZXh0KTtcblxuICAgIGlmIChyZWxlYXNlQ29udGV4dCAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgcmVsZWFzZU1hdGNoZXNEZXBlbmRlbmN5ID0gY2hlY2tSZWxlYXNlTWF0Y2hlc0RlcGVuZGVuY3kocmVsZWFzZUNvbnRleHQsIGRlcGVuZGVuY3ksIGRlcGVuZGVudE5hbWVzLCBjb250ZXh0KTtcblxuICAgICAgaWYgKHJlbGVhc2VNYXRjaGVzRGVwZW5kZW5jeSkge1xuICAgICAgICByZWxlYXNlQ29udGV4dE1hcFtyZWxlYXNlTmFtZV0gPSByZWxlYXNlQ29udGV4dDtcblxuICAgICAgICBjb25zdCBkZXBlbmRlbmN5UmVsZWFzZUNvbnRleHRzQ3JlYXRlZCA9IGF3YWl0IGNyZWF0ZURlcGVuZGVuY3lSZWxlYXNlQ29udGV4dHMoZGVwZW5kZW5jeSwgcmVsZWFzZUNvbnRleHQsIGRlcGVuZGVudE5hbWVzLCBjb250ZXh0KTtcblxuICAgICAgICBpZiAoZGVwZW5kZW5jeVJlbGVhc2VDb250ZXh0c0NyZWF0ZWQpIHtcbiAgICAgICAgICByZWxlYXNlQ29udGV4dENyZWF0ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGRlcGVuZGVuY3lOYW1lID0gZGVwZW5kZW5jeS5nZXROYW1lKCksXG4gICAgICAgICAgICByZWxlYXNlTmFtZSA9IGRlcGVuZGVuY3lOYW1lOyAvLy9cblxuICAgICAgbG9nLndhcm5pbmcoYFRoZSAnJHtyZWxlYXNlTmFtZX0nIGNvbnRleHQgY291bGQgbm90IGJlIGNyZWF0ZWQuIFBlcmhhcHMgdGhlICdtZXRhLmpzb24nIGZpbGUgaXMgbWlzc2luZyBvciBpbnZhbGlkLiBPciB0aGVyZSBjb3VsZCBiZSBhIGRlcGVuZGVuY3kgbWlzbWF0Y2guYCk7XG4gICAgfVxuXG4gICAgcmVsZWFzZUNvbnRleHRDcmVhdGVkID9cbiAgICAgIGxvZy5kZWJ1ZyhgLi4uY3JlYXRlZCB0aGUgJyR7cmVsZWFzZU5hbWV9JyBjb250ZXh0LmApIDpcbiAgICAgICAgbG9nLndhcm5pbmcoYC4uLnVuYWJsZSB0byBjcmVhdGUgdGhlICcke3JlbGVhc2VOYW1lfScgY29udGV4dC5gKTtcbiAgfVxuXG4gIHJldHVybiByZWxlYXNlQ29udGV4dENyZWF0ZWQ7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB2ZXJpZnlSZWxlYXNlQ29udGV4dChyZWxlYXNlTmFtZSwgZGVwZW5kZW50TmFtZSwgZGVwZW5kZW50UmVsZWFzZWQsIHJlbGVhc2VDb250ZXh0TWFwKSB7XG4gIGxldCByZWxlYXNlVmVyaWZpZXMgPSBmYWxzZTtcblxuICBjb25zdCByZWxlYXNlQ29udGV4dCA9IHJlbGVhc2VDb250ZXh0TWFwW3JlbGVhc2VOYW1lXTtcblxuICBpZiAocmVsZWFzZUNvbnRleHQgIT09IG51bGwpIHtcbiAgICBjb25zdCByZWxlYXNlZCA9IHJlbGVhc2VDb250ZXh0LmlzUmVsZWFzZWQoKTtcblxuICAgIGlmIChyZWxlYXNlZCkge1xuICAgICAgcmVsZWFzZVZlcmlmaWVzID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGRlcGVuZGVudFJlbGVhc2VkKSB7XG4gICAgICAgIHJlbGVhc2VDb250ZXh0Lndhcm5pbmcoYFRoZSAnJHtyZWxlYXNlTmFtZX0nIHByb2plY3QgY2Fubm90IGJlIHZlcmlmaWVzIGJlY2F1c2UgaXRzICcke2RlcGVuZGVudE5hbWV9JyBkZXBlbmRlbnQgaXMgYSBwYWNrYWdlLmApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZGVwZW5kZW50TmFtZSA9IHJlbGVhc2VOYW1lLCAgLy8vXG4gICAgICAgICAgICAgIGRlcGVuZGVudFJlbGVhc2VkID0gcmVsZWFzZWQsIC8vL1xuICAgICAgICAgICAgICBkZXBlbmRlbmN5UmVsZWFzZUNvbnRleHRzVmVyaWZ5ID0gYXdhaXQgdmVyaWZ5RGVwZW5kZW5jeVJlbGVhc2VDb250ZXh0cyhyZWxlYXNlQ29udGV4dCwgZGVwZW5kZW50TmFtZSwgZGVwZW5kZW50UmVsZWFzZWQsIHJlbGVhc2VDb250ZXh0TWFwKTtcblxuICAgICAgICBpZiAoZGVwZW5kZW5jeVJlbGVhc2VDb250ZXh0c1ZlcmlmeSkge1xuICAgICAgICAgIGNvbnN0IHJlbGVhc2VDb250ZXh0VmVyaWZpZWQgPSByZWxlYXNlQ29udGV4dC5oYXNWZXJpZmllZCgpO1xuXG4gICAgICAgICAgaWYgKHJlbGVhc2VDb250ZXh0VmVyaWZpZWQpIHtcbiAgICAgICAgICAgIHJlbGVhc2VWZXJpZmllcyA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlbGVhc2VDb250ZXh0LmluZm8oYFZlcmlmeWluZyB0aGUgJyR7cmVsZWFzZU5hbWV9JyBwcm9qZWN0Li4uYCk7XG5cbiAgICAgICAgICAgIGNvbnN0IHJlbGVhc2VDb250ZXh0VmVyaWZpZXMgPSBhd2FpdCByZWxlYXNlQ29udGV4dC52ZXJpZnkoKTtcblxuICAgICAgICAgICAgaWYgKHJlbGVhc2VDb250ZXh0VmVyaWZpZXMpIHtcbiAgICAgICAgICAgICAgcmVsZWFzZUNvbnRleHQuaW5mbyhgLi4udmVyaWZpZWQgdGhlICcke3JlbGVhc2VOYW1lfScgcHJvamVjdC5gKTtcblxuICAgICAgICAgICAgICByZWxlYXNlVmVyaWZpZXMgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZWxlYXNlVmVyaWZpZXM7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY3JlYXRlUmVsZWFzZUNvbnRleHQsXG4gIHZlcmlmeVJlbGVhc2VDb250ZXh0LFxuICBpbml0aWFsaXNlUmVsZWFzZUNvbnRleHRcbn07XG5cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZURlcGVuZGVuY3lSZWxlYXNlQ29udGV4dHMoZGVwZW5kZW5jeSwgcmVsZWFzZUNvbnRleHQsIGRlcGVuZGVudE5hbWVzLCBjb250ZXh0KSB7XG4gIGxldCBkZXBlbmRlbmN5UmVsZWFzZUNvbnRleHRzQ3JlYXRlZDtcblxuICBjb25zdCBkZXBlbmRlbmN5TmFtZSA9IGRlcGVuZGVuY3kuZ2V0TmFtZSgpLFxuICAgICAgICBkZXBlbmRlbmNpZXMgPSByZWxlYXNlQ29udGV4dC5nZXREZXBlbmRlbmNpZXMoKTtcblxuICBkZXBlbmRlbnROYW1lcyA9IFsgLi4uZGVwZW5kZW50TmFtZXMsIGRlcGVuZGVuY3lOYW1lIF07ICAvLy9cblxuICBkZXBlbmRlbmN5UmVsZWFzZUNvbnRleHRzQ3JlYXRlZCA9IGF3YWl0IGFzeW5jRXZlcnlEZXBlbmRlbmN5KGRlcGVuZGVuY2llcywgYXN5bmMgKGRlcGVuZGVuY3kpID0+IHtcbiAgICBjb25zdCBjeWNsaWNEZXBlbmRlbmN5RXhpc3RzID0gY2hlY2tDeWNsaWNEZXBlbmRlbmN5RXhpc3RzKGRlcGVuZGVuY3ksIGRlcGVuZGVudE5hbWVzLCBjb250ZXh0KTtcblxuICAgIGlmICghY3ljbGljRGVwZW5kZW5jeUV4aXN0cykge1xuICAgICAgY29uc3QgcmVsZWFzZUNvbnRleHRDcmVhdGVkID0gYXdhaXQgY3JlYXRlUmVsZWFzZUNvbnRleHQoZGVwZW5kZW5jeSwgZGVwZW5kZW50TmFtZXMsIGNvbnRleHQpO1xuXG4gICAgICBpZiAocmVsZWFzZUNvbnRleHRDcmVhdGVkKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGRlcGVuZGVuY3lSZWxlYXNlQ29udGV4dHNDcmVhdGVkO1xufVxuXG5hc3luYyBmdW5jdGlvbiB2ZXJpZnlEZXBlbmRlbmN5UmVsZWFzZUNvbnRleHRzKHJlbGVhc2VDb250ZXh0LCBkZXBlbmRlbnROYW1lLCBkZXBlbmRlbnRSZWxlYXNlZCwgcmVsZWFzZUNvbnRleHRNYXApIHtcbiAgY29uc3QgZGVwZW5kZW5jaWVzID0gcmVsZWFzZUNvbnRleHQuZ2V0RGVwZW5kZW5jaWVzKCksXG4gICAgICAgIGRlcGVuZGVuY3lSZWxlYXNlQ29udGV4dHNWZXJpZnkgPSBhd2FpdCBhc3luY0V2ZXJ5RGVwZW5kZW5jeShkZXBlbmRlbmNpZXMsIGFzeW5jIChkZXBlbmRlbmN5KSA9PiB7XG4gICAgICAgICAgY29uc3QgbmFtZSA9IGRlcGVuZGVuY3kuZ2V0TmFtZSgpLFxuICAgICAgICAgICAgICAgIHJlbGVhc2VOYW1lID0gbmFtZSwgLy8vXG4gICAgICAgICAgICAgICAgcmVsZWFzZUNvbnRleHRWZXJpZmllcyA9IGF3YWl0IHZlcmlmeVJlbGVhc2VDb250ZXh0KHJlbGVhc2VOYW1lLCBkZXBlbmRlbnROYW1lLCBkZXBlbmRlbnRSZWxlYXNlZCwgcmVsZWFzZUNvbnRleHRNYXApO1xuXG4gICAgICAgICAgaWYgKHJlbGVhc2VDb250ZXh0VmVyaWZpZXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIGRlcGVuZGVuY3lSZWxlYXNlQ29udGV4dHNWZXJpZnk7XG59XG5cbmZ1bmN0aW9uIHJldHJpZXZlUmVsZWFzZUNvbnRleHRzKHJlbGVhc2VDb250ZXh0LCByZWxlYXNlQ29udGV4dE1hcCkge1xuICBjb25zdCByZWxlYXNlQ29udGV4dHMgPSBbXSxcbiAgICAgICAgcmVtYWluaW5nUmVsZWFzZUNvbnRleHQgPSByZWxlYXNlQ29udGV4dCwgIC8vL1xuICAgICAgICByZW1haW5pbmdSZWxlYXNlQ29udGV4dHMgPSBbXG4gICAgICAgICAgcmVtYWluaW5nUmVsZWFzZUNvbnRleHRcbiAgICAgICAgXTtcblxuICBsZXQgcmVtYWluaW5nUmVsZWFzZUNvbnRleHRzTGVuZ3RoID0gcmVtYWluaW5nUmVsZWFzZUNvbnRleHRzLmxlbmd0aDtcblxuICB3aGlsZSAocmVtYWluaW5nUmVsZWFzZUNvbnRleHRzTGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IHJlbWFpbmluZ1JlbGVhc2VDb250ZXh0ID0gcmVtYWluaW5nUmVsZWFzZUNvbnRleHRzLnNoaWZ0KCksXG4gICAgICAgICAgcmVsZWFzZUNvbnRleHQgPSByZW1haW5pbmdSZWxlYXNlQ29udGV4dDsgIC8vL1xuXG4gICAgcmVsZWFzZUNvbnRleHRzLnB1c2gocmVsZWFzZUNvbnRleHQpO1xuXG4gICAgY29uc3QgZGVwZW5kZW5jaWVzID0gcmVsZWFzZUNvbnRleHQuZ2V0RGVwZW5kZW5jaWVzKCk7XG5cbiAgICBkZXBlbmRlbmNpZXMuZm9yRWFjaERlcGVuZGVuY3koKGRlcGVuZGVuY3kpID0+IHtcbiAgICAgIGNvbnN0IGRlcGVuZGVuY3lOYW1lID0gZGVwZW5kZW5jeS5nZXROYW1lKCksXG4gICAgICAgICAgICByZWxlYXNlTmFtZSA9IGRlcGVuZGVuY3lOYW1lLCAvLy9cbiAgICAgICAgICAgIHJlbGVhc2VDb250ZXh0ID0gcmVsZWFzZUNvbnRleHRNYXBbcmVsZWFzZU5hbWVdLFxuICAgICAgICAgICAgcmVsZWFzZUNvbnRleHRzSW5jbHVkZXNSZWxlYXNlQ29udGV4dCA9IHJlbGVhc2VDb250ZXh0cy5pbmNsdWRlcyhyZWxlYXNlQ29udGV4dCksXG4gICAgICAgICAgICByZW1haW5pbmdSZWxlYXNlQ29udGV4dHNJbmNsdWRlc1JlbGVhc2VDb250ZXh0ID0gcmVtYWluaW5nUmVsZWFzZUNvbnRleHRzLmluY2x1ZGVzKHJlbGVhc2VDb250ZXh0KTtcblxuICAgICAgaWYgKCFyZWxlYXNlQ29udGV4dHNJbmNsdWRlc1JlbGVhc2VDb250ZXh0ICYmICFyZW1haW5pbmdSZWxlYXNlQ29udGV4dHNJbmNsdWRlc1JlbGVhc2VDb250ZXh0KSB7XG4gICAgICAgIGNvbnN0IHJlbWFpbmluZ1JlbGVhc2VDb250ZXh0ID0gcmVsZWFzZUNvbnRleHQ7IC8vL1xuXG4gICAgICAgIHJlbWFpbmluZ1JlbGVhc2VDb250ZXh0cy5wdXNoKHJlbWFpbmluZ1JlbGVhc2VDb250ZXh0KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJlbWFpbmluZ1JlbGVhc2VDb250ZXh0c0xlbmd0aCA9IHJlbWFpbmluZ1JlbGVhc2VDb250ZXh0cy5sZW5ndGg7XG4gIH1cblxuICByZXR1cm4gcmVsZWFzZUNvbnRleHRzO1xufVxuXG5mdW5jdGlvbiBjaGVja0N5Y2xpY0RlcGVuZGVuY3lFeGlzdHMoZGVwZW5kZW5jeSwgZGVwZW5kZW50TmFtZXMsIGNvbnRleHQpIHtcbiAgY29uc3QgZGVwZW5kZW5jeU5hbWUgPSBkZXBlbmRlbmN5LmdldE5hbWUoKSxcbiAgICAgICAgZGVwZW5kZW50TmFtZXNJbmNsdWRlc0RlcGVuZGVuY3lOYW1lID0gZGVwZW5kZW50TmFtZXMuaW5jbHVkZXMoZGVwZW5kZW5jeU5hbWUpLFxuICAgICAgICBjeWNsaWNEZXBlbmRlbmN5RXhpc3RzID0gZGVwZW5kZW50TmFtZXNJbmNsdWRlc0RlcGVuZGVuY3lOYW1lOyAgLy8vXG5cbiAgaWYgKGN5Y2xpY0RlcGVuZGVuY3lFeGlzdHMpIHtcbiAgICBjb25zdCB7IGxvZyB9ID0gY29udGV4dCxcbiAgICAgICAgICBmaXJzdERlcGVuZGVudE5hbWUgPSBmaXJzdChkZXBlbmRlbnROYW1lcyksXG4gICAgICAgICAgZGVwZW5kZW5jeU5hbWVzID0gWyAgLy8vXG4gICAgICAgICAgICAuLi5kZXBlbmRlbnROYW1lcyxcbiAgICAgICAgICAgIGZpcnN0RGVwZW5kZW50TmFtZVxuICAgICAgICAgIF0sXG4gICAgICAgICAgZGVwZW5kZW5jeU5hbWVzU3RyaW5nID0gZGVwZW5kZW5jeU5hbWVzLmpvaW4oYCcgLT4gJ2ApO1xuXG4gICAgbG9nLndhcm5pbmcoYFRoZXJlIGlzIGEgY3ljbGljIGRlcGVuZGVuY3ksICcke2RlcGVuZGVuY3lOYW1lc1N0cmluZ30nLmApO1xuICB9XG5cbiAgcmV0dXJuIGN5Y2xpY0RlcGVuZGVuY3lFeGlzdHM7XG59XG5cbmZ1bmN0aW9uIGNoZWNrUmVsZWFzZU1hdGNoZXNEZXBlbmRlbmN5KHJlbGVhc2VDb250ZXh0LCBkZXBlbmRlbmN5LCBkZXBlbmRlbnROYW1lcywgY29udGV4dCkge1xuICBsZXQgcmVsZWFzZU1hdGNoZXNEZXBlbmRlbmN5ID0gdHJ1ZTtcblxuICBjb25zdCBzaG9ydGVuZWRWZXJzaW9uID0gZGVwZW5kZW5jeS5nZXRTaG9ydGVkVmVyc2lvbigpO1xuXG4gIGlmIChzaG9ydGVuZWRWZXJzaW9uICE9PSBudWxsKSB7XG4gICAgY29uc3QgZW50cmllc01hdGNoU2hvcnRlbmVkVmVyc2lvbiA9IHJlbGVhc2VDb250ZXh0Lm1hdGNoU2hvcnRlbmVkVmVyc2lvbihzaG9ydGVuZWRWZXJzaW9uKTtcblxuICAgIGlmICghZW50cmllc01hdGNoU2hvcnRlbmVkVmVyc2lvbikge1xuICAgICAgY29uc3QgeyBsb2cgfSA9IGNvbnRleHQsXG4gICAgICAgICAgICB2ZXJzaW9uID0gcmVsZWFzZUNvbnRleHQuZ2V0VmVyc2lvbigpLFxuICAgICAgICAgICAgbGFzdERlcGVuZGVudE5hbWUgPSBsYXN0KGRlcGVuZGVudE5hbWVzKSxcbiAgICAgICAgICAgIGRlcGVuZGVudE5hbWUgPSBsYXN0RGVwZW5kZW50TmFtZSwgIC8vL1xuICAgICAgICAgICAgdmVyc2lvblN0cmluZyA9IHZlcnNpb24udG9TdHJpbmcoKSxcbiAgICAgICAgICAgIGRlcGVuZGVuY3lTdHJpbmcgPSBkZXBlbmRlbmN5LmFzU3RyaW5nKCk7XG5cbiAgICAgIGxvZy53YXJuaW5nKGBUaGUgJyR7ZGVwZW5kZW50TmFtZX0nIGRlcGVuZGVudCByZXF1aXJlcyB0aGUgJyR7ZGVwZW5kZW5jeVN0cmluZ30nIGRlcGVuZGVuY3kgYnV0IGEgY29udGV4dCB3aXRoIHZlcnNpb24gJyR7dmVyc2lvblN0cmluZ30nIHdhcyBwcm92aWRlZC5gKTtcblxuICAgICAgcmVsZWFzZU1hdGNoZXNEZXBlbmRlbmN5ID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlbGVhc2VNYXRjaGVzRGVwZW5kZW5jeTtcbn1cblxuZnVuY3Rpb24gaW5pdGlhbGlzZURlcGVuZGVuY3lSZWxlYXNlQ29udGV4dHMoZGVwZW5kZW5jeSwgcmVsZWFzZUNvbnRleHQsIGNvbnRleHQpIHtcbiAgY29uc3QgZGVwZW5kZW5jaWVzID0gcmVsZWFzZUNvbnRleHQuZ2V0RGVwZW5kZW5jaWVzKCk7XG5cbiAgZGVwZW5kZW5jaWVzLmZvckVhY2hEZXBlbmRlbmN5KChkZXBlbmRlbmN5KSA9PiB7ICAvLy9cbiAgICBpbml0aWFsaXNlUmVsZWFzZUNvbnRleHQoZGVwZW5kZW5jeSwgY29udGV4dCk7XG4gIH0pO1xufVxuIl0sIm5hbWVzIjpbImNyZWF0ZVJlbGVhc2VDb250ZXh0IiwiaW5pdGlhbGlzZVJlbGVhc2VDb250ZXh0IiwidmVyaWZ5UmVsZWFzZUNvbnRleHQiLCJsYXN0IiwiYXJyYXlVdGlsaXRpZXMiLCJkZXBlbmRlbmN5IiwiY29udGV4dCIsImxvZyIsInJlbGVhc2VDb250ZXh0TWFwIiwiZGVwZW5kZW5jeU5hbWUiLCJnZXROYW1lIiwicmVsZWFzZU5hbWUiLCJyZWxlYXNlQ29udGV4dCIsIndhcm5pbmciLCJyZWxlYXNlQ29udGV4dEluaXRpYWxpc2VkIiwiaXNJbml0aWFsaXNlZCIsImluaXRpYWxpc2VEZXBlbmRlbmN5UmVsZWFzZUNvbnRleHRzIiwicmVsZWFzZUNvbnRleHRzIiwicmV0cmlldmVSZWxlYXNlQ29udGV4dHMiLCJpbmZvIiwiRmlsZUNvbnRleHRGcm9tRmlsZVBhdGgiLCJpbml0aWFsaXNlIiwiZGVidWciLCJkZXBlbmRlbnROYW1lcyIsInJlbGVhc2VDb250ZXh0Q3JlYXRlZCIsInJlbGVhc2VNYXRjaGVzRGVwZW5kZW5jeSIsImNoZWNrUmVsZWFzZU1hdGNoZXNEZXBlbmRlbmN5IiwiZGVwZW5kZW5jeVN0cmluZyIsImFzU3RyaW5nIiwiZGVwZW5kZW50TmFtZXNMZW5ndGgiLCJsZW5ndGgiLCJsYXN0RGVwZW5kZW50TmFtZSIsImRlcGVuZGVudE5hbWUiLCJyZWxlYXNlQ29udGV4dEZyb21EZXBlbmRlbmN5IiwiZGVwZW5kZW5jeVJlbGVhc2VDb250ZXh0c0NyZWF0ZWQiLCJjcmVhdGVEZXBlbmRlbmN5UmVsZWFzZUNvbnRleHRzIiwiZGVwZW5kZW50UmVsZWFzZWQiLCJyZWxlYXNlVmVyaWZpZXMiLCJyZWxlYXNlZCIsImlzUmVsZWFzZWQiLCJkZXBlbmRlbmN5UmVsZWFzZUNvbnRleHRzVmVyaWZ5IiwidmVyaWZ5RGVwZW5kZW5jeVJlbGVhc2VDb250ZXh0cyIsInJlbGVhc2VDb250ZXh0VmVyaWZpZWQiLCJoYXNWZXJpZmllZCIsInJlbGVhc2VDb250ZXh0VmVyaWZpZXMiLCJ2ZXJpZnkiLCJkZXBlbmRlbmNpZXMiLCJnZXREZXBlbmRlbmNpZXMiLCJhc3luY0V2ZXJ5RGVwZW5kZW5jeSIsImN5Y2xpY0RlcGVuZGVuY3lFeGlzdHMiLCJjaGVja0N5Y2xpY0RlcGVuZGVuY3lFeGlzdHMiLCJuYW1lIiwicmVtYWluaW5nUmVsZWFzZUNvbnRleHQiLCJyZW1haW5pbmdSZWxlYXNlQ29udGV4dHMiLCJyZW1haW5pbmdSZWxlYXNlQ29udGV4dHNMZW5ndGgiLCJzaGlmdCIsInB1c2giLCJmb3JFYWNoRGVwZW5kZW5jeSIsInJlbGVhc2VDb250ZXh0c0luY2x1ZGVzUmVsZWFzZUNvbnRleHQiLCJpbmNsdWRlcyIsInJlbWFpbmluZ1JlbGVhc2VDb250ZXh0c0luY2x1ZGVzUmVsZWFzZUNvbnRleHQiLCJkZXBlbmRlbnROYW1lc0luY2x1ZGVzRGVwZW5kZW5jeU5hbWUiLCJmaXJzdERlcGVuZGVudE5hbWUiLCJmaXJzdCIsImRlcGVuZGVuY3lOYW1lcyIsImRlcGVuZGVuY3lOYW1lc1N0cmluZyIsImpvaW4iLCJzaG9ydGVuZWRWZXJzaW9uIiwiZ2V0U2hvcnRlZFZlcnNpb24iLCJlbnRyaWVzTWF0Y2hTaG9ydGVuZWRWZXJzaW9uIiwibWF0Y2hTaG9ydGVuZWRWZXJzaW9uIiwidmVyc2lvbiIsImdldFZlcnNpb24iLCJ2ZXJzaW9uU3RyaW5nIiwidG9TdHJpbmciXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztRQW1Dc0JBO2VBQUFBOztRQXFHdEI7ZUFBQTs7UUFoSWdCQztlQUFBQTs7UUFzRk1DO2VBQUFBOzs7MkJBNUZTOzRCQUVNO0FBRXJDLE1BQU0sRUFBRUMsSUFBSSxFQUFFLEdBQUdDLHlCQUFjO0FBRXhCLFNBQVNILHlCQUF5QkksVUFBVSxFQUFFQyxPQUFPO0lBQzFELE1BQU0sRUFBRUMsR0FBRyxFQUFFQyxpQkFBaUIsRUFBRSxHQUFHRixTQUM3QkcsaUJBQWlCSixXQUFXSyxPQUFPLElBQ25DQyxjQUFjRixnQkFDZEcsaUJBQWlCSixpQkFBaUIsQ0FBQ0csWUFBWSxJQUFJO0lBRXpELElBQUlDLG1CQUFtQixNQUFNO1FBQzNCTCxJQUFJTSxP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
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "occam-languages",
|
|
3
3
|
"author": "James Smith",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.115",
|
|
5
5
|
"license": "MIT, Anti-996",
|
|
6
6
|
"homepage": "https://github.com/djalbat/occam-languages",
|
|
7
7
|
"description": "Occam's common language functionality.",
|
|
@@ -10,9 +10,9 @@
|
|
|
10
10
|
"url": "https://github.com/djalbat/occam-languages"
|
|
11
11
|
},
|
|
12
12
|
"dependencies": {
|
|
13
|
-
"necessary": "^17.1.
|
|
14
|
-
"occam-custom-grammars": "^6.0.
|
|
15
|
-
"occam-parsers": "^23.1.
|
|
13
|
+
"necessary": "^17.1.7",
|
|
14
|
+
"occam-custom-grammars": "^6.0.17",
|
|
15
|
+
"occam-parsers": "^23.1.50"
|
|
16
16
|
},
|
|
17
17
|
"devDependencies": {
|
|
18
18
|
"@swc/core": "1.13.20",
|
|
@@ -7,14 +7,12 @@ import { asyncEveryDependency } from "../utilities/dependency";
|
|
|
7
7
|
const { last } = arrayUtilities;
|
|
8
8
|
|
|
9
9
|
export function initialiseReleaseContext(dependency, context) {
|
|
10
|
-
const { releaseContextMap } = context,
|
|
10
|
+
const { log, releaseContextMap } = context,
|
|
11
11
|
dependencyName = dependency.getName(),
|
|
12
12
|
releaseName = dependencyName, ///
|
|
13
13
|
releaseContext = releaseContextMap[releaseName] || null;
|
|
14
14
|
|
|
15
15
|
if (releaseContext === null) {
|
|
16
|
-
const { log } = context;
|
|
17
|
-
|
|
18
16
|
log.warning(`Unable to initialise the '${dependencyName}' context because it has not been created.`);
|
|
19
17
|
} else {
|
|
20
18
|
const releaseContextInitialised = releaseContext.isInitialised();
|
|
@@ -22,8 +20,7 @@ export function initialiseReleaseContext(dependency, context) {
|
|
|
22
20
|
if (!releaseContextInitialised) {
|
|
23
21
|
initialiseDependencyReleaseContexts(dependency, releaseContext, context);
|
|
24
22
|
|
|
25
|
-
const
|
|
26
|
-
releaseContexts = retrieveReleaseContexts(releaseContext, releaseContextMap);
|
|
23
|
+
const releaseContexts = retrieveReleaseContexts(releaseContext, releaseContextMap);
|
|
27
24
|
|
|
28
25
|
log.info(`Initialising the '${dependencyName}' context...`);
|
|
29
26
|
|
|
@@ -37,25 +34,23 @@ export function initialiseReleaseContext(dependency, context) {
|
|
|
37
34
|
}
|
|
38
35
|
|
|
39
36
|
export async function createReleaseContext(dependency, dependentNames, context) {
|
|
40
|
-
let
|
|
37
|
+
let releaseContextCreated = false;
|
|
41
38
|
|
|
42
|
-
const { releaseContextMap } = context,
|
|
39
|
+
const { log, releaseContextMap } = context,
|
|
43
40
|
dependencyName = dependency.getName(),
|
|
44
41
|
releaseName = dependencyName, ///
|
|
45
42
|
releaseContext = releaseContextMap[releaseName] || null;
|
|
46
43
|
|
|
47
44
|
if (releaseContext !== null) {
|
|
48
|
-
const
|
|
49
|
-
releaseMatchesDependency = checkReleaseMatchesDependency(releaseContext, dependency, dependentNames, context);
|
|
45
|
+
const releaseMatchesDependency = checkReleaseMatchesDependency(releaseContext, dependency, dependentNames, context);
|
|
50
46
|
|
|
51
47
|
if (releaseMatchesDependency) {
|
|
52
48
|
log.debug(`The '${releaseName}' context has already been created.`);
|
|
53
49
|
|
|
54
|
-
|
|
50
|
+
releaseContextCreated = true;
|
|
55
51
|
}
|
|
56
52
|
} else {
|
|
57
|
-
const
|
|
58
|
-
dependencyString = dependency.asString(),
|
|
53
|
+
const dependencyString = dependency.asString(),
|
|
59
54
|
dependentNamesLength = dependentNames.length;
|
|
60
55
|
|
|
61
56
|
if (dependentNamesLength === 0) {
|
|
@@ -68,25 +63,33 @@ export async function createReleaseContext(dependency, dependentNames, context)
|
|
|
68
63
|
}
|
|
69
64
|
|
|
70
65
|
const { releaseContextFromDependency } = context,
|
|
71
|
-
releaseContext = await releaseContextFromDependency(dependency, context)
|
|
72
|
-
releaseContextCreated = checkReleaseContextCreated(releaseContext, dependency, context);
|
|
66
|
+
releaseContext = await releaseContextFromDependency(dependency, context);
|
|
73
67
|
|
|
74
|
-
if (
|
|
68
|
+
if (releaseContext !== null) {
|
|
75
69
|
const releaseMatchesDependency = checkReleaseMatchesDependency(releaseContext, dependency, dependentNames, context);
|
|
76
70
|
|
|
77
71
|
if (releaseMatchesDependency) {
|
|
78
72
|
releaseContextMap[releaseName] = releaseContext;
|
|
79
73
|
|
|
80
|
-
|
|
74
|
+
const dependencyReleaseContextsCreated = await createDependencyReleaseContexts(dependency, releaseContext, dependentNames, context);
|
|
75
|
+
|
|
76
|
+
if (dependencyReleaseContextsCreated) {
|
|
77
|
+
releaseContextCreated = true;
|
|
78
|
+
}
|
|
81
79
|
}
|
|
80
|
+
} else {
|
|
81
|
+
const dependencyName = dependency.getName(),
|
|
82
|
+
releaseName = dependencyName; ///
|
|
83
|
+
|
|
84
|
+
log.warning(`The '${releaseName}' context could not be created. Perhaps the 'meta.json' file is missing or invalid. Or there could be a dependency mismatch.`);
|
|
82
85
|
}
|
|
83
86
|
|
|
84
|
-
|
|
87
|
+
releaseContextCreated ?
|
|
85
88
|
log.debug(`...created the '${releaseName}' context.`) :
|
|
86
89
|
log.warning(`...unable to create the '${releaseName}' context.`);
|
|
87
90
|
}
|
|
88
91
|
|
|
89
|
-
return
|
|
92
|
+
return releaseContextCreated;
|
|
90
93
|
}
|
|
91
94
|
|
|
92
95
|
export async function verifyReleaseContext(releaseName, dependentName, dependentReleased, releaseContextMap) {
|
|
@@ -138,26 +141,26 @@ export default {
|
|
|
138
141
|
};
|
|
139
142
|
|
|
140
143
|
async function createDependencyReleaseContexts(dependency, releaseContext, dependentNames, context) {
|
|
141
|
-
let
|
|
144
|
+
let dependencyReleaseContextsCreated;
|
|
142
145
|
|
|
143
146
|
const dependencyName = dependency.getName(),
|
|
144
147
|
dependencies = releaseContext.getDependencies();
|
|
145
148
|
|
|
146
149
|
dependentNames = [ ...dependentNames, dependencyName ]; ///
|
|
147
150
|
|
|
148
|
-
|
|
149
|
-
let success = false;
|
|
150
|
-
|
|
151
|
+
dependencyReleaseContextsCreated = await asyncEveryDependency(dependencies, async (dependency) => {
|
|
151
152
|
const cyclicDependencyExists = checkCyclicDependencyExists(dependency, dependentNames, context);
|
|
152
153
|
|
|
153
154
|
if (!cyclicDependencyExists) {
|
|
154
|
-
|
|
155
|
-
}
|
|
155
|
+
const releaseContextCreated = await createReleaseContext(dependency, dependentNames, context);
|
|
156
156
|
|
|
157
|
-
|
|
157
|
+
if (releaseContextCreated) {
|
|
158
|
+
return true;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
158
161
|
});
|
|
159
162
|
|
|
160
|
-
return
|
|
163
|
+
return dependencyReleaseContextsCreated;
|
|
161
164
|
}
|
|
162
165
|
|
|
163
166
|
async function verifyDependencyReleaseContexts(releaseContext, dependentName, dependentReleased, releaseContextMap) {
|
|
@@ -212,20 +215,6 @@ function retrieveReleaseContexts(releaseContext, releaseContextMap) {
|
|
|
212
215
|
return releaseContexts;
|
|
213
216
|
}
|
|
214
217
|
|
|
215
|
-
function checkReleaseContextCreated(releaseContext, dependency, context) {
|
|
216
|
-
const releaseContextCreated = (releaseContext !== null);
|
|
217
|
-
|
|
218
|
-
if (!releaseContextCreated) {
|
|
219
|
-
const { log } = context,
|
|
220
|
-
dependencyName = dependency.getName(),
|
|
221
|
-
releaseName = dependencyName; ///
|
|
222
|
-
|
|
223
|
-
log.warning(`The '${releaseName}' context could not be created. Perhaps the 'meta.json' file is missing or invalid. Or there could be a dependency mismatch.`);
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
return releaseContextCreated;
|
|
227
|
-
}
|
|
228
|
-
|
|
229
218
|
function checkCyclicDependencyExists(dependency, dependentNames, context) {
|
|
230
219
|
const dependencyName = dependency.getName(),
|
|
231
220
|
dependentNamesIncludesDependencyName = dependentNames.includes(dependencyName),
|