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.
@@ -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 { log } = context, releaseContexts = retrieveReleaseContexts(releaseContext, releaseContextMap);
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 success = false;
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 { log } = context, releaseMatchesDependency = checkReleaseMatchesDependency(releaseContext, dependency, dependentNames, context);
48
+ const releaseMatchesDependency = checkReleaseMatchesDependency(releaseContext, dependency, dependentNames, context);
50
49
  if (releaseMatchesDependency) {
51
50
  log.debug(`The '${releaseName}' context has already been created.`);
52
- success = true;
51
+ releaseContextCreated = true;
53
52
  }
54
53
  } else {
55
- const { log } = context, dependencyString = dependency.asString(), dependentNamesLength = dependentNames.length;
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), releaseContextCreated = checkReleaseContextCreated(releaseContext, dependency, context);
63
- if (releaseContextCreated) {
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
- success = await createDependencyReleaseContexts(dependency, releaseContext, dependentNames, context);
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
- success ? log.debug(`...created the '${releaseName}' context.`) : log.warning(`...unable to create the '${releaseName}' context.`);
75
+ releaseContextCreated ? log.debug(`...created the '${releaseName}' context.`) : log.warning(`...unable to create the '${releaseName}' context.`);
71
76
  }
72
- return success;
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 success;
115
+ let dependencyReleaseContextsCreated;
111
116
  const dependencyName = dependency.getName(), dependencies = releaseContext.getDependencies();
112
117
  dependentNames = [
113
118
  ...dependentNames,
114
119
  dependencyName
115
120
  ]; ///
116
- success = await (0, _dependency.asyncEveryDependency)(dependencies, async (dependency)=>{
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
- success = await createReleaseContext(dependency, dependentNames, context);
124
+ const releaseContextCreated = await createReleaseContext(dependency, dependentNames, context);
125
+ if (releaseContextCreated) {
126
+ return true;
127
+ }
121
128
  }
122
- return success;
123
129
  });
124
- return success;
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.113",
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.1",
14
- "occam-custom-grammars": "^6.0.11",
15
- "occam-parsers": "^23.1.44"
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 { log } = context,
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 success = false;
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 { log } = context,
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
- success = true;
50
+ releaseContextCreated = true;
55
51
  }
56
52
  } else {
57
- const { log } = context,
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 (releaseContextCreated) {
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
- success = await createDependencyReleaseContexts(dependency, releaseContext, dependentNames, context);
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
- success ?
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 success;
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 success;
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
- success = await asyncEveryDependency(dependencies, async (dependency) => {
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
- success = await createReleaseContext(dependency, dependentNames, context);
155
- }
155
+ const releaseContextCreated = await createReleaseContext(dependency, dependentNames, context);
156
156
 
157
- return success;
157
+ if (releaseContextCreated) {
158
+ return true;
159
+ }
160
+ }
158
161
  });
159
162
 
160
- return success;
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),