occam-languages 3.0.4 → 3.0.8

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.
@@ -25,16 +25,17 @@ _export(exports, {
25
25
  const _occammodel = require("occam-model");
26
26
  const _necessary = require("necessary");
27
27
  const _continuation = require("../utilities/continuation");
28
- const _async = require("../utilities/async");
29
28
  const _constants = require("../constants");
30
29
  const { last } = _necessary.arrayUtilities;
31
- async function createReleaseContexts(dependencyName, context) {
32
- let releaseContextsCreated = false;
33
- const name = dependencyName, dependency = _occammodel.Dependency.fromName(name), dependentNames = [], dependentReleased = false, releaseContextCreated = await createReleaseContext(dependency, dependentNames, dependentReleased, context);
34
- if (releaseContextCreated) {
35
- releaseContextsCreated = true;
36
- }
37
- return releaseContextsCreated;
30
+ function createReleaseContexts(dependencyName, context, fail, succeed) {
31
+ const name = dependencyName, dependency = _occammodel.Dependency.fromName(name), dependentNames = [], dependentReleased = false;
32
+ return createReleaseContext(dependency, dependentNames, dependentReleased, context, fail, (releaseContextCreated)=>{
33
+ let releaseContextsCreated = false;
34
+ if (releaseContextCreated) {
35
+ releaseContextsCreated = true;
36
+ }
37
+ return succeed(releaseContextsCreated);
38
+ });
38
39
  }
39
40
  function initialiseReleaseContexts(context) {
40
41
  const { releaseContexts } = context;
@@ -42,91 +43,83 @@ function initialiseReleaseContexts(context) {
42
43
  initialiseReleaseContext(releaseContext, context);
43
44
  });
44
45
  }
45
- function verifyReleaseContexts(context, contiunation) {
46
- const { releaseContexts } = context;
47
- return (0, _continuation.every)(releaseContexts, verifyReleaseContext, context, contiunation);
46
+ function verifyReleaseContexts(context, fail, succeed) {
47
+ const { releaseContexts } = context, back = fail, forward = succeed; ///
48
+ return (0, _continuation.every)(releaseContexts, verifyReleaseContext, context, back, forward);
48
49
  }
49
50
  const _default = {
50
51
  createReleaseContexts,
51
52
  initialiseReleaseContexts,
52
53
  verifyReleaseContexts
53
54
  };
54
- function verifyReleaseContext(releaseContext, context, contiunation) {
55
+ function verifyReleaseContext(releaseContext, context, back, forward) {
55
56
  const released = releaseContext.isReleased(), verified = releaseContext.hasVerified();
56
57
  if (released || verified) {
57
- const releaseContextVerifies = true;
58
- return contiunation(releaseContextVerifies, context);
58
+ return forward();
59
59
  }
60
60
  const { log } = context, name = releaseContext.getName(), releaseName = name; ///
61
61
  log.info(`Verifying the '${releaseName}' project...`);
62
- return releaseContext.verify((verifies)=>{
63
- let releaseContextVerifies = false;
64
- if (verifies) {
65
- log.info(`...verified the '${releaseName}' project.`);
66
- releaseContextVerifies = true;
67
- }
68
- return contiunation(releaseContextVerifies, context);
62
+ return releaseContext.verify(back, ()=>{
63
+ log.info(`...verified the '${releaseName}' project.`);
64
+ return forward();
69
65
  });
70
66
  }
71
- async function createReleaseContext(dependency, dependentNames, dependentReleased, context) {
72
- let releaseContextCreated = false;
73
- const { log } = context, dependencyName = dependency.getName();
74
- let releaseContext;
75
- releaseContext = findReleaseContext(dependency, context);
76
- const releaseContextFound = releaseContext !== null;
77
- if (!releaseContextFound) {
78
- const dependentNamesLength = dependentNames.length, dependencyString = dependency.asString();
79
- if (dependentNamesLength === 0) {
80
- log.info(`Creating the '${dependencyName}' package context...`);
81
- } else {
82
- const lastDependentName = last(dependentNames), dependentName = lastDependentName; ///
83
- log.info(`Creating the '${dependencyName}' package context given the '${dependentName}' dependant's '${dependencyString}' dependency...`);
84
- }
85
- const { releaseContextFromDependency } = context;
86
- releaseContext = await releaseContextFromDependency(dependency, context);
67
+ function createReleaseContext(dependency, dependentNames, dependentReleased, context, fail, succeed) {
68
+ const { log } = context, releaseContext = findReleaseContext(dependency, context);
69
+ if (releaseContext !== null) {
70
+ const releaseContextCreated = true;
71
+ return succeed(releaseContextCreated);
87
72
  }
88
- if (releaseContext === null) {
89
- log.warning(`The '${dependencyName}' package context could not be created. Perhaps the 'meta.json' file is missing or invalid.`);
73
+ const dependencyName = dependency.getName(), dependentNamesLength = dependentNames.length;
74
+ if (dependentNamesLength === 0) {
75
+ log.info(`Creating the '${dependencyName}' package context...`);
90
76
  } else {
77
+ const lastDependentName = last(dependentNames), dependentName = lastDependentName, dependencyString = dependency.asString();
78
+ log.info(`Creating the '${dependencyName}' package context given the '${dependentName}' dependant's '${dependencyString}' dependency...`);
79
+ }
80
+ const { releaseContextFromDependency } = context;
81
+ releaseContextFromDependency(dependency, context, fail, (releaseContext)=>{
82
+ let releaseContextCreated = false;
83
+ const releatePresent = checkReleasePresent(releaseContext, dependencyName, context);
84
+ if (!releatePresent) {
85
+ return succeed(releaseContextCreated);
86
+ }
91
87
  const projectDependencyOfPackage = checkProjectDependencyOfPackage(releaseContext, dependentReleased, dependentNames, context);
92
- if (!projectDependencyOfPackage) {
93
- const releaseMatchesDependency = checkReleaseMatchesDependency(releaseContext, dependency, dependentNames, context);
94
- if (releaseMatchesDependency) {
95
- if (releaseContextFound) {
96
- releaseContextCreated = true;
97
- } else {
98
- const dependencyReleaseContextsCreated = await createDependencyReleaseContexts(releaseContext, dependency, dependentNames, context);
99
- if (dependencyReleaseContextsCreated) {
100
- addReleaseContext(releaseContext, context);
101
- releaseContextCreated = true;
102
- }
103
- }
104
- }
88
+ if (projectDependencyOfPackage) {
89
+ return succeed(releaseContextCreated);
105
90
  }
106
- if (!releaseContextFound) {
107
- releaseContextCreated ? log.debug(`...created the '${dependencyName}' package context.`) : log.warning(`...unable to create the '${dependencyName}' package context.`);
91
+ const releaseMatchesDependency = checkReleaseMatchesDependency(releaseContext, dependency, dependentNames, context);
92
+ if (!releaseMatchesDependency) {
93
+ return succeed(releaseContextCreated);
108
94
  }
109
- }
110
- return releaseContextCreated;
95
+ return createDependencyReleaseContexts(releaseContext, dependency, dependentNames, context, fail, (dependencyReleaseContextsCreated)=>{
96
+ if (dependencyReleaseContextsCreated) {
97
+ releaseContextCreated = true;
98
+ }
99
+ if (releaseContextCreated) {
100
+ addReleaseContext(releaseContext, context);
101
+ }
102
+ releaseContextCreated ? log.debug(`...created the '${dependencyName}' package context.`) : log.warning(`...unable to create the '${dependencyName}' package context.`);
103
+ return succeed(releaseContextCreated);
104
+ });
105
+ });
111
106
  }
112
- async function createDependencyReleaseContexts(releaseContext, dependency, dependentNames, context) {
113
- let dependencyReleaseContextsCreated;
107
+ function createDependencyReleaseContexts(releaseContext, dependency, dependentNames, context, fail, succeed) {
114
108
  const name = releaseContext.getName(), released = releaseContext.isReleased(), dependencies = releaseContext.getDependencies(), dependentName = name, dependentReleased = released; ///
115
109
  dependentNames = [
116
110
  ...dependentNames,
117
111
  dependentName
118
112
  ]; ///
119
113
  const array = dependencies.getArray();
120
- dependencyReleaseContextsCreated = await (0, _async.asyncEvery)(array, async (dependency)=>{
114
+ return (0, _continuation.every)(array, (dependency, back, forward)=>{
121
115
  const cyclicDependencyPresent = checkCyclicDependencyPresent(dependency, dependentNames, context);
122
- if (!cyclicDependencyPresent) {
123
- const releaseContextCreated = await createReleaseContext(dependency, dependentNames, dependentReleased, context);
124
- if (releaseContextCreated) {
125
- return true;
126
- }
116
+ if (cyclicDependencyPresent) {
117
+ return back();
127
118
  }
128
- });
129
- return dependencyReleaseContextsCreated;
119
+ return createReleaseContext(dependency, dependentNames, dependentReleased, context, fail, (releaseContextCreated)=>{
120
+ return releaseContextCreated ? forward() : back();
121
+ });
122
+ }, ()=>succeed(false), ()=>succeed(true));
130
123
  }
131
124
  function addReleaseContext(releaseContext, context) {
132
125
  const { releaseContexts } = context;
@@ -141,6 +134,15 @@ function findReleaseContext(dependency, context) {
141
134
  }) || null;
142
135
  return releaseContext;
143
136
  }
137
+ function checkReleasePresent(releaseContext, dependencyName, context) {
138
+ let releasePresent = true;
139
+ if (releaseContext === null) {
140
+ const { log } = context;
141
+ log.warning(`The '${dependencyName}' package context could not be created. Perhaps the 'meta.json' file is missing or invalid.`);
142
+ releasePresent = false;
143
+ }
144
+ return releasePresent;
145
+ }
144
146
  function retrieveReleaseContexts(releaseContext, context, releaseContexts = []) {
145
147
  const releaseContextsIncludesReleaseContext = releaseContexts.includes(releaseContext);
146
148
  if (!releaseContextsIncludesReleaseContext) {
@@ -199,4 +201,4 @@ function checkProjectDependencyOfPackage(releaseContext, dependentReleased, depe
199
201
  return projectDependencyOfPackage;
200
202
  }
201
203
 
202
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvdmVyaWZpY2F0aW9uLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBEZXBlbmRlbmN5IH0gZnJvbSBcIm9jY2FtLW1vZGVsXCI7XG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IHsgZXZlcnkgIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250aW51YXRpb25cIjtcbmltcG9ydCB7IGFzeW5jRXZlcnkgIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9hc3luY1wiO1xuaW1wb3J0IHsgU0lOR0xFX1NQQUNFIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5jb25zdCB7IGxhc3QgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlUmVsZWFzZUNvbnRleHRzKGRlcGVuZGVuY3lOYW1lLCBjb250ZXh0KSB7XG4gIGxldCByZWxlYXNlQ29udGV4dHNDcmVhdGVkID0gZmFsc2U7XG5cbiAgY29uc3QgbmFtZSA9IGRlcGVuZGVuY3lOYW1lLCAgLy8vXG4gICAgICAgIGRlcGVuZGVuY3kgPSBEZXBlbmRlbmN5LmZyb21OYW1lKG5hbWUpLFxuICAgICAgICBkZXBlbmRlbnROYW1lcyA9IFtdLFxuICAgICAgICBkZXBlbmRlbnRSZWxlYXNlZCA9IGZhbHNlLFxuICAgICAgICByZWxlYXNlQ29udGV4dENyZWF0ZWQgPSBhd2FpdCBjcmVhdGVSZWxlYXNlQ29udGV4dChkZXBlbmRlbmN5LCBkZXBlbmRlbnROYW1lcywgZGVwZW5kZW50UmVsZWFzZWQsIGNvbnRleHQpO1xuXG4gIGlmIChyZWxlYXNlQ29udGV4dENyZWF0ZWQpIHtcbiAgICByZWxlYXNlQ29udGV4dHNDcmVhdGVkID0gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiByZWxlYXNlQ29udGV4dHNDcmVhdGVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdGlhbGlzZVJlbGVhc2VDb250ZXh0cyhjb250ZXh0KSB7XG4gIGNvbnN0IHsgcmVsZWFzZUNvbnRleHRzIH0gPSBjb250ZXh0O1xuXG4gIHJlbGVhc2VDb250ZXh0cy5mb3JFYWNoKChyZWxlYXNlQ29udGV4dCkgPT4ge1xuICAgIGluaXRpYWxpc2VSZWxlYXNlQ29udGV4dChyZWxlYXNlQ29udGV4dCwgY29udGV4dCk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmVyaWZ5UmVsZWFzZUNvbnRleHRzKGNvbnRleHQsIGNvbnRpdW5hdGlvbikge1xuICBjb25zdCB7IHJlbGVhc2VDb250ZXh0cyB9ID0gY29udGV4dDtcblxuICByZXR1cm4gZXZlcnkocmVsZWFzZUNvbnRleHRzLCB2ZXJpZnlSZWxlYXNlQ29udGV4dCwgY29udGV4dCwgY29udGl1bmF0aW9uKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBjcmVhdGVSZWxlYXNlQ29udGV4dHMsXG4gIGluaXRpYWxpc2VSZWxlYXNlQ29udGV4dHMsXG4gIHZlcmlmeVJlbGVhc2VDb250ZXh0c1xufTtcblxuZnVuY3Rpb24gdmVyaWZ5UmVsZWFzZUNvbnRleHQocmVsZWFzZUNvbnRleHQsIGNvbnRleHQsIGNvbnRpdW5hdGlvbikge1xuICBjb25zdCByZWxlYXNlZCA9IHJlbGVhc2VDb250ZXh0LmlzUmVsZWFzZWQoKSxcbiAgICAgICAgdmVyaWZpZWQgPSByZWxlYXNlQ29udGV4dC5oYXNWZXJpZmllZCgpO1xuXG4gIGlmIChyZWxlYXNlZCB8fCB2ZXJpZmllZCkge1xuICAgIGNvbnN0IHJlbGVhc2VDb250ZXh0VmVyaWZpZXMgPSB0cnVlO1xuXG4gICAgcmV0dXJuIGNvbnRpdW5hdGlvbihyZWxlYXNlQ29udGV4dFZlcmlmaWVzLCBjb250ZXh0KTtcbiAgfVxuXG4gIGNvbnN0IHsgbG9nIH0gPSBjb250ZXh0LFxuICAgICAgICBuYW1lID0gcmVsZWFzZUNvbnRleHQuZ2V0TmFtZSgpLFxuICAgICAgICByZWxlYXNlTmFtZSA9IG5hbWU7IC8vL1xuXG4gIGxvZy5pbmZvKGBWZXJpZnlpbmcgdGhlICcke3JlbGVhc2VOYW1lfScgcHJvamVjdC4uLmApO1xuXG4gIHJldHVybiByZWxlYXNlQ29udGV4dC52ZXJpZnkoKHZlcmlmaWVzKSA9PiB7XG4gICAgbGV0IHJlbGVhc2VDb250ZXh0VmVyaWZpZXMgPSBmYWxzZTtcblxuICAgIGlmICh2ZXJpZmllcykge1xuICAgICAgbG9nLmluZm8oYC4uLnZlcmlmaWVkIHRoZSAnJHtyZWxlYXNlTmFtZX0nIHByb2plY3QuYCk7XG5cbiAgICAgIHJlbGVhc2VDb250ZXh0VmVyaWZpZXMgPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBjb250aXVuYXRpb24ocmVsZWFzZUNvbnRleHRWZXJpZmllcywgY29udGV4dCk7XG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVSZWxlYXNlQ29udGV4dChkZXBlbmRlbmN5LCBkZXBlbmRlbnROYW1lcywgZGVwZW5kZW50UmVsZWFzZWQsIGNvbnRleHQpIHtcbiAgbGV0IHJlbGVhc2VDb250ZXh0Q3JlYXRlZCA9IGZhbHNlO1xuXG4gIGNvbnN0IHsgbG9nIH0gPSBjb250ZXh0LFxuICAgICAgICBkZXBlbmRlbmN5TmFtZSA9IGRlcGVuZGVuY3kuZ2V0TmFtZSgpO1xuXG4gIGxldCByZWxlYXNlQ29udGV4dDtcblxuICByZWxlYXNlQ29udGV4dCA9IGZpbmRSZWxlYXNlQ29udGV4dChkZXBlbmRlbmN5LCBjb250ZXh0KTtcblxuICBjb25zdCByZWxlYXNlQ29udGV4dEZvdW5kID0gKHJlbGVhc2VDb250ZXh0ICE9PSBudWxsKTtcblxuICBpZiAoIXJlbGVhc2VDb250ZXh0Rm91bmQpIHtcbiAgICBjb25zdCBkZXBlbmRlbnROYW1lc0xlbmd0aCA9IGRlcGVuZGVudE5hbWVzLmxlbmd0aCxcbiAgICAgICAgICBkZXBlbmRlbmN5U3RyaW5nID0gZGVwZW5kZW5jeS5hc1N0cmluZygpO1xuXG4gICAgaWYgKGRlcGVuZGVudE5hbWVzTGVuZ3RoID09PSAwKSB7XG4gICAgICBsb2cuaW5mbyhgQ3JlYXRpbmcgdGhlICcke2RlcGVuZGVuY3lOYW1lfScgcGFja2FnZSBjb250ZXh0Li4uYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGxhc3REZXBlbmRlbnROYW1lID0gbGFzdChkZXBlbmRlbnROYW1lcyksXG4gICAgICAgICAgICBkZXBlbmRlbnROYW1lID0gbGFzdERlcGVuZGVudE5hbWU7ICAvLy9cblxuICAgICAgbG9nLmluZm8oYENyZWF0aW5nIHRoZSAnJHtkZXBlbmRlbmN5TmFtZX0nIHBhY2thZ2UgY29udGV4dCBnaXZlbiB0aGUgJyR7ZGVwZW5kZW50TmFtZX0nIGRlcGVuZGFudCdzICcke2RlcGVuZGVuY3lTdHJpbmd9JyBkZXBlbmRlbmN5Li4uYCk7XG4gICAgfVxuXG4gICAgY29uc3QgeyByZWxlYXNlQ29udGV4dEZyb21EZXBlbmRlbmN5IH0gPSBjb250ZXh0O1xuXG4gICAgcmVsZWFzZUNvbnRleHQgPSBhd2FpdCByZWxlYXNlQ29udGV4dEZyb21EZXBlbmRlbmN5KGRlcGVuZGVuY3ksIGNvbnRleHQpO1xuICB9XG5cbiAgaWYgKHJlbGVhc2VDb250ZXh0ID09PSBudWxsKSB7XG4gICAgbG9nLndhcm5pbmcoYFRoZSAnJHtkZXBlbmRlbmN5TmFtZX0nIHBhY2thZ2UgY29udGV4dCBjb3VsZCBub3QgYmUgY3JlYXRlZC4gUGVyaGFwcyB0aGUgJ21ldGEuanNvbicgZmlsZSBpcyBtaXNzaW5nIG9yIGludmFsaWQuYCk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgcHJvamVjdERlcGVuZGVuY3lPZlBhY2thZ2UgPSBjaGVja1Byb2plY3REZXBlbmRlbmN5T2ZQYWNrYWdlKHJlbGVhc2VDb250ZXh0LCBkZXBlbmRlbnRSZWxlYXNlZCwgZGVwZW5kZW50TmFtZXMsIGNvbnRleHQpO1xuXG4gICAgaWYgKCFwcm9qZWN0RGVwZW5kZW5jeU9mUGFja2FnZSkge1xuICAgICAgY29uc3QgcmVsZWFzZU1hdGNoZXNEZXBlbmRlbmN5ID0gY2hlY2tSZWxlYXNlTWF0Y2hlc0RlcGVuZGVuY3kocmVsZWFzZUNvbnRleHQsIGRlcGVuZGVuY3ksIGRlcGVuZGVudE5hbWVzLCBjb250ZXh0KTtcblxuICAgICAgaWYgKHJlbGVhc2VNYXRjaGVzRGVwZW5kZW5jeSkge1xuICAgICAgICBpZiAocmVsZWFzZUNvbnRleHRGb3VuZCkge1xuICAgICAgICAgIHJlbGVhc2VDb250ZXh0Q3JlYXRlZCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgZGVwZW5kZW5jeVJlbGVhc2VDb250ZXh0c0NyZWF0ZWQgPSBhd2FpdCBjcmVhdGVEZXBlbmRlbmN5UmVsZWFzZUNvbnRleHRzKHJlbGVhc2VDb250ZXh0LCBkZXBlbmRlbmN5LCBkZXBlbmRlbnROYW1lcywgY29udGV4dCk7XG5cbiAgICAgICAgICBpZiAoZGVwZW5kZW5jeVJlbGVhc2VDb250ZXh0c0NyZWF0ZWQpIHtcbiAgICAgICAgICAgIGFkZFJlbGVhc2VDb250ZXh0KHJlbGVhc2VDb250ZXh0LCBjb250ZXh0KTtcblxuICAgICAgICAgICAgcmVsZWFzZUNvbnRleHRDcmVhdGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXJlbGVhc2VDb250ZXh0Rm91bmQpIHtcbiAgICAgIHJlbGVhc2VDb250ZXh0Q3JlYXRlZCA/XG4gICAgICAgIGxvZy5kZWJ1ZyhgLi4uY3JlYXRlZCB0aGUgJyR7ZGVwZW5kZW5jeU5hbWV9JyBwYWNrYWdlIGNvbnRleHQuYCkgOlxuICAgICAgICAgIGxvZy53YXJuaW5nKGAuLi51bmFibGUgdG8gY3JlYXRlIHRoZSAnJHtkZXBlbmRlbmN5TmFtZX0nIHBhY2thZ2UgY29udGV4dC5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVsZWFzZUNvbnRleHRDcmVhdGVkO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVEZXBlbmRlbmN5UmVsZWFzZUNvbnRleHRzKHJlbGVhc2VDb250ZXh0LCBkZXBlbmRlbmN5LCBkZXBlbmRlbnROYW1lcywgY29udGV4dCkge1xuICBsZXQgZGVwZW5kZW5jeVJlbGVhc2VDb250ZXh0c0NyZWF0ZWQ7XG5cbiAgY29uc3QgbmFtZSA9IHJlbGVhc2VDb250ZXh0LmdldE5hbWUoKSxcbiAgICAgICAgcmVsZWFzZWQgPSByZWxlYXNlQ29udGV4dC5pc1JlbGVhc2VkKCksXG4gICAgICAgIGRlcGVuZGVuY2llcyA9IHJlbGVhc2VDb250ZXh0LmdldERlcGVuZGVuY2llcygpLFxuICAgICAgICBkZXBlbmRlbnROYW1lID0gbmFtZSwgIC8vL1xuICAgICAgICBkZXBlbmRlbnRSZWxlYXNlZCA9IHJlbGVhc2VkOyAgLy8vXG5cbiAgZGVwZW5kZW50TmFtZXMgPSBbIC4uLmRlcGVuZGVudE5hbWVzLCBkZXBlbmRlbnROYW1lIF07ICAvLy9cblxuICBjb25zdCBhcnJheSA9IGRlcGVuZGVuY2llcy5nZXRBcnJheSgpO1xuXG4gIGRlcGVuZGVuY3lSZWxlYXNlQ29udGV4dHNDcmVhdGVkID0gYXdhaXQgYXN5bmNFdmVyeShhcnJheSwgYXN5bmMgKGRlcGVuZGVuY3kpID0+IHtcbiAgICBjb25zdCBjeWNsaWNEZXBlbmRlbmN5UHJlc2VudCA9IGNoZWNrQ3ljbGljRGVwZW5kZW5jeVByZXNlbnQoZGVwZW5kZW5jeSwgZGVwZW5kZW50TmFtZXMsIGNvbnRleHQpO1xuXG4gICAgaWYgKCFjeWNsaWNEZXBlbmRlbmN5UHJlc2VudCkge1xuICAgICAgY29uc3QgcmVsZWFzZUNvbnRleHRDcmVhdGVkID0gYXdhaXQgY3JlYXRlUmVsZWFzZUNvbnRleHQoZGVwZW5kZW5jeSwgZGVwZW5kZW50TmFtZXMsIGRlcGVuZGVudFJlbGVhc2VkLCBjb250ZXh0KTtcblxuICAgICAgaWYgKHJlbGVhc2VDb250ZXh0Q3JlYXRlZCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBkZXBlbmRlbmN5UmVsZWFzZUNvbnRleHRzQ3JlYXRlZDtcbn1cblxuZnVuY3Rpb24gYWRkUmVsZWFzZUNvbnRleHQocmVsZWFzZUNvbnRleHQsIGNvbnRleHQpIHtcbiAgY29uc3QgeyByZWxlYXNlQ29udGV4dHMgfSA9IGNvbnRleHQ7XG5cbiAgcmVsZWFzZUNvbnRleHRzLnB1c2gocmVsZWFzZUNvbnRleHQpO1xufVxuXG5mdW5jdGlvbiBmaW5kUmVsZWFzZUNvbnRleHQoZGVwZW5kZW5jeSwgY29udGV4dCkge1xuICBjb25zdCB7IHJlbGVhc2VDb250ZXh0cyB9ID0gY29udGV4dCxcbiAgICAgICAgZGVwZW5kZW5jeU5hbWUgPSBkZXBlbmRlbmN5LmdldE5hbWUoKSxcbiAgICAgICAgcmVsZWFzZUNvbnRleHQgPSByZWxlYXNlQ29udGV4dHMuZmluZCgocmVsZWFzZUNvbnRleHQpID0+IHtcbiAgICAgICAgICBjb25zdCBkZXBlbmRlbmN5TmFtZU1hdGNoZXMgPSByZWxlYXNlQ29udGV4dC5tYXRjaERlcGVuZGVuY3lOYW1lKGRlcGVuZGVuY3lOYW1lKTtcblxuICAgICAgICAgIGlmIChkZXBlbmRlbmN5TmFtZU1hdGNoZXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSkgfHwgbnVsbDtcblxuICByZXR1cm4gcmVsZWFzZUNvbnRleHQ7XG59XG5cbmZ1bmN0aW9uIHJldHJpZXZlUmVsZWFzZUNvbnRleHRzKHJlbGVhc2VDb250ZXh0LCBjb250ZXh0LCByZWxlYXNlQ29udGV4dHMgPSBbXSkge1xuICBjb25zdCByZWxlYXNlQ29udGV4dHNJbmNsdWRlc1JlbGVhc2VDb250ZXh0ID0gcmVsZWFzZUNvbnRleHRzLmluY2x1ZGVzKHJlbGVhc2VDb250ZXh0KTtcblxuICBpZiAoIXJlbGVhc2VDb250ZXh0c0luY2x1ZGVzUmVsZWFzZUNvbnRleHQpIHtcbiAgICBjb25zdCBkZXBlbmRlbmNpZXMgPSByZWxlYXNlQ29udGV4dC5nZXREZXBlbmRlbmNpZXMoKTtcblxuICAgIGRlcGVuZGVuY2llcy5mb3JFYWNoRGVwZW5kZW5jeSgoZGVwZW5kZW5jeSkgPT4ge1xuICAgICAgY29uc3QgcmVsZWFzZUNvbnRleHQgPSBmaW5kUmVsZWFzZUNvbnRleHQoZGVwZW5kZW5jeSwgY29udGV4dCk7XG5cbiAgICAgIHJldHJpZXZlUmVsZWFzZUNvbnRleHRzKHJlbGVhc2VDb250ZXh0LCBjb250ZXh0LCByZWxlYXNlQ29udGV4dHMpO1xuICAgIH0pO1xuXG4gICAgcmVsZWFzZUNvbnRleHRzLnVuc2hpZnQocmVsZWFzZUNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHJlbGVhc2VDb250ZXh0cztcbn1cblxuZnVuY3Rpb24gaW5pdGlhbGlzZVJlbGVhc2VDb250ZXh0KHJlbGVhc2VDb250ZXh0LCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgbG9nIH0gPSBjb250ZXh0LFxuICAgICAgICBuYW1lID0gcmVsZWFzZUNvbnRleHQuZ2V0TmFtZSgpLFxuICAgICAgICByZWxlYXNlTmFtZSA9IG5hbWUsIC8vL1xuICAgICAgICByZWxlYXNlQ29udGV4dHMgPSByZXRyaWV2ZVJlbGVhc2VDb250ZXh0cyhyZWxlYXNlQ29udGV4dCwgY29udGV4dCk7XG5cbiAgbG9nLmluZm8oYEluaXRpYWxpc2luZyB0aGUgJyR7cmVsZWFzZU5hbWV9JyBwYWNrYWdlIGNvbnRleHQuLi5gKTtcblxuICBjb25zdCB7IEZpbGVDb250ZXh0RnJvbUZpbGVQYXRoIH0gPSBjb250ZXh0O1xuXG4gIHJlbGVhc2VDb250ZXh0LmluaXRpYWxpc2UocmVsZWFzZUNvbnRleHRzLCBGaWxlQ29udGV4dEZyb21GaWxlUGF0aCk7XG5cbiAgbG9nLmRlYnVnKGAuLi5pbml0aWFsaXNlZCB0aGUgJyR7cmVsZWFzZU5hbWV9JyBwYWNrYWdlIGNvbnRleHQuYCk7XG59XG5cbmZ1bmN0aW9uIGNoZWNrQ3ljbGljRGVwZW5kZW5jeVByZXNlbnQoZGVwZW5kZW5jeSwgZGVwZW5kZW50TmFtZXMsIGNvbnRleHQpIHtcbiAgbGV0IGN5Y2xpY0RlcGVuZGVuY3lQcmVzZW50ID0gZmFsc2U7XG5cbiAgY29uc3QgZGVwZW5kZW5jeU5hbWUgPSBkZXBlbmRlbmN5LmdldE5hbWUoKSxcbiAgICAgICAgaW5kZXggPSBkZXBlbmRlbnROYW1lcy5pbmRleE9mKGRlcGVuZGVuY3lOYW1lKTtcblxuICBpZiAoaW5kZXggPiAtMSkge1xuICAgIGNvbnN0IHsgbG9nIH0gPSBjb250ZXh0LFxuICAgICAgICAgIGNpcmN1bGFyRGVwZW5kZW50TmFtZXMgPSBkZXBlbmRlbnROYW1lcy5zbGljZShpbmRleCksXG4gICAgICAgICAgY2lyY3VsYXJEZXBlbmRlbmN5TmFtZXMgPSBbXG4gICAgICAgICAgICAuLi5jaXJjdWxhckRlcGVuZGVudE5hbWVzLFxuICAgICAgICAgICAgZGVwZW5kZW5jeU5hbWVcbiAgICAgICAgICBdLFxuICAgICAgICAgIGNpcmN1bGFyRGVwZW5kZW5jeU5hbWVzU3RyaW5nID0gY2lyY3VsYXJEZXBlbmRlbmN5TmFtZXMuam9pbihTSU5HTEVfU1BBQ0UpO1xuXG4gICAgbG9nLndhcm5pbmcoYFRoZXJlIGlzIGEgY3ljbGljIGRlcGVuZGVuY3ksICcke2NpcmN1bGFyRGVwZW5kZW5jeU5hbWVzU3RyaW5nfScuYCk7XG5cbiAgICBjeWNsaWNEZXBlbmRlbmN5UHJlc2VudCA9IHRydWU7XG4gIH1cblxuICByZXR1cm4gY3ljbGljRGVwZW5kZW5jeVByZXNlbnQ7XG59XG5cbmZ1bmN0aW9uIGNoZWNrUmVsZWFzZU1hdGNoZXNEZXBlbmRlbmN5KHJlbGVhc2VDb250ZXh0LCBkZXBlbmRlbmN5LCBkZXBlbmRlbnROYW1lcywgY29udGV4dCkge1xuICBsZXQgcmVsZWFzZU1hdGNoZXNEZXBlbmRlbmN5ID0gdHJ1ZTtcblxuICBjb25zdCBzaG9ydGVuZWRWZXJzaW9uID0gZGVwZW5kZW5jeS5nZXRTaG9ydGVuZWRWZXJzaW9uKCk7XG5cbiAgaWYgKHNob3J0ZW5lZFZlcnNpb24gIT09IG51bGwpIHtcbiAgICBjb25zdCBlbnRyaWVzTWF0Y2hTaG9ydGVuZWRWZXJzaW9uID0gcmVsZWFzZUNvbnRleHQubWF0Y2hTaG9ydGVuZWRWZXJzaW9uKHNob3J0ZW5lZFZlcnNpb24pO1xuXG4gICAgaWYgKCFlbnRyaWVzTWF0Y2hTaG9ydGVuZWRWZXJzaW9uKSB7XG4gICAgICBjb25zdCB7IGxvZyB9ID0gY29udGV4dCxcbiAgICAgICAgICAgIHZlcnNpb24gPSByZWxlYXNlQ29udGV4dC5nZXRWZXJzaW9uKCksXG4gICAgICAgICAgICBsYXN0RGVwZW5kZW50TmFtZSA9IGxhc3QoZGVwZW5kZW50TmFtZXMpLFxuICAgICAgICAgICAgZGVwZW5kZW50TmFtZSA9IGxhc3REZXBlbmRlbnROYW1lLCAgLy8vXG4gICAgICAgICAgICB2ZXJzaW9uU3RyaW5nID0gdmVyc2lvbi50b1N0cmluZygpLFxuICAgICAgICAgICAgZGVwZW5kZW5jeVN0cmluZyA9IGRlcGVuZGVuY3kuYXNTdHJpbmcoKTtcblxuICAgICAgbG9nLndhcm5pbmcoYFRoZSAnJHtkZXBlbmRlbnROYW1lfScgZGVwZW5kZW50IHJlcXVpcmVzIHRoZSAnJHtkZXBlbmRlbmN5U3RyaW5nfScgZGVwZW5kZW5jeSBidXQgYSBjb250ZXh0IHdpdGggdmVyc2lvbiAnJHt2ZXJzaW9uU3RyaW5nfScgd2FzIHByb3ZpZGVkLmApO1xuXG4gICAgICByZWxlYXNlTWF0Y2hlc0RlcGVuZGVuY3kgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVsZWFzZU1hdGNoZXNEZXBlbmRlbmN5O1xufVxuXG5mdW5jdGlvbiBjaGVja1Byb2plY3REZXBlbmRlbmN5T2ZQYWNrYWdlKHJlbGVhc2VDb250ZXh0LCBkZXBlbmRlbnRSZWxlYXNlZCwgZGVwZW5kZW50TmFtZXMsIGNvbnRleHQpIHtcbiAgbGV0IHByb2plY3REZXBlbmRlbmN5T2ZQYWNrYWdlID0gZmFsc2U7XG5cbiAgaWYgKGRlcGVuZGVudFJlbGVhc2VkKSB7XG4gICAgY29uc3QgdW5yZWxlYXNlZCA9IHJlbGVhc2VDb250ZXh0LmlzVW5yZWxlYXNlZCgpO1xuXG4gICAgaWYgKHVucmVsZWFzZWQpIHtcbiAgICAgIGNvbnN0IHsgbG9nIH0gPSBjb250ZXh0LFxuICAgICAgICAgICAgbmFtZSA9IHJlbGVhc2VDb250ZXh0LmdldE5hbWUoKSxcbiAgICAgICAgICAgIGxhc3REZXBlbmRlbnROYW1lID0gbGFzdChkZXBlbmRlbnROYW1lcyksXG4gICAgICAgICAgICBkZXBlbmRlbmN5TmFtZSA9IG5hbWUsLy8vXG4gICAgICAgICAgICBkZXBlbmRlbnROYW1lID0gbGFzdERlcGVuZGVudE5hbWU7ICAvLy9cblxuICAgICAgbG9nLndhcm5pbmcoYFRoZSAnJHtkZXBlbmRlbmN5TmFtZX0nIGRlcGVuZGVuY3kgaXMgYSBwcm9qZWN0IHdoaWxzdCBpdHMgJyR7ZGVwZW5kZW50TmFtZX0nIGRlcGVuZGVudCBpcyBhIHBhY2thZ2UuYCk7XG5cbiAgICAgIHByb2plY3REZXBlbmRlbmN5T2ZQYWNrYWdlID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcHJvamVjdERlcGVuZGVuY3lPZlBhY2thZ2U7XG59XG4iXSwibmFtZXMiOlsiY3JlYXRlUmVsZWFzZUNvbnRleHRzIiwiaW5pdGlhbGlzZVJlbGVhc2VDb250ZXh0cyIsInZlcmlmeVJlbGVhc2VDb250ZXh0cyIsImxhc3QiLCJhcnJheVV0aWxpdGllcyIsImRlcGVuZGVuY3lOYW1lIiwiY29udGV4dCIsInJlbGVhc2VDb250ZXh0c0NyZWF0ZWQiLCJuYW1lIiwiZGVwZW5kZW5jeSIsIkRlcGVuZGVuY3kiLCJmcm9tTmFtZSIsImRlcGVuZGVudE5hbWVzIiwiZGVwZW5kZW50UmVsZWFzZWQiLCJyZWxlYXNlQ29udGV4dENyZWF0ZWQiLCJjcmVhdGVSZWxlYXNlQ29udGV4dCIsInJlbGVhc2VDb250ZXh0cyIsImZvckVhY2giLCJyZWxlYXNlQ29udGV4dCIsImluaXRpYWxpc2VSZWxlYXNlQ29udGV4dCIsImNvbnRpdW5hdGlvbiIsImV2ZXJ5IiwidmVyaWZ5UmVsZWFzZUNvbnRleHQiLCJyZWxlYXNlZCIsImlzUmVsZWFzZWQiLCJ2ZXJpZmllZCIsImhhc1ZlcmlmaWVkIiwicmVsZWFzZUNvbnRleHRWZXJpZmllcyIsImxvZyIsImdldE5hbWUiLCJyZWxlYXNlTmFtZSIsImluZm8iLCJ2ZXJpZnkiLCJ2ZXJpZmllcyIsImZpbmRSZWxlYXNlQ29udGV4dCIsInJlbGVhc2VDb250ZXh0Rm91bmQiLCJkZXBlbmRlbnROYW1lc0xlbmd0aCIsImxlbmd0aCIsImRlcGVuZGVuY3lTdHJpbmciLCJhc1N0cmluZyIsImxhc3REZXBlbmRlbnROYW1lIiwiZGVwZW5kZW50TmFtZSIsInJlbGVhc2VDb250ZXh0RnJvbURlcGVuZGVuY3kiLCJ3YXJuaW5nIiwicHJvamVjdERlcGVuZGVuY3lPZlBhY2thZ2UiLCJjaGVja1Byb2plY3REZXBlbmRlbmN5T2ZQYWNrYWdlIiwicmVsZWFzZU1hdGNoZXNEZXBlbmRlbmN5IiwiY2hlY2tSZWxlYXNlTWF0Y2hlc0RlcGVuZGVuY3kiLCJkZXBlbmRlbmN5UmVsZWFzZUNvbnRleHRzQ3JlYXRlZCIsImNyZWF0ZURlcGVuZGVuY3lSZWxlYXNlQ29udGV4dHMiLCJhZGRSZWxlYXNlQ29udGV4dCIsImRlYnVnIiwiZGVwZW5kZW5jaWVzIiwiZ2V0RGVwZW5kZW5jaWVzIiwiYXJyYXkiLCJnZXRBcnJheSIsImFzeW5jRXZlcnkiLCJjeWNsaWNEZXBlbmRlbmN5UHJlc2VudCIsImNoZWNrQ3ljbGljRGVwZW5kZW5jeVByZXNlbnQiLCJwdXNoIiwiZmluZCIsImRlcGVuZGVuY3lOYW1lTWF0Y2hlcyIsIm1hdGNoRGVwZW5kZW5jeU5hbWUiLCJyZXRyaWV2ZVJlbGVhc2VDb250ZXh0cyIsInJlbGVhc2VDb250ZXh0c0luY2x1ZGVzUmVsZWFzZUNvbnRleHQiLCJpbmNsdWRlcyIsImZvckVhY2hEZXBlbmRlbmN5IiwidW5zaGlmdCIsIkZpbGVDb250ZXh0RnJvbUZpbGVQYXRoIiwiaW5pdGlhbGlzZSIsImluZGV4IiwiaW5kZXhPZiIsImNpcmN1bGFyRGVwZW5kZW50TmFtZXMiLCJzbGljZSIsImNpcmN1bGFyRGVwZW5kZW5jeU5hbWVzIiwiY2lyY3VsYXJEZXBlbmRlbmN5TmFtZXNTdHJpbmciLCJqb2luIiwiU0lOR0xFX1NQQUNFIiwic2hvcnRlbmVkVmVyc2lvbiIsImdldFNob3J0ZW5lZFZlcnNpb24iLCJlbnRyaWVzTWF0Y2hTaG9ydGVuZWRWZXJzaW9uIiwibWF0Y2hTaG9ydGVuZWRWZXJzaW9uIiwidmVyc2lvbiIsImdldFZlcnNpb24iLCJ2ZXJzaW9uU3RyaW5nIiwidG9TdHJpbmciLCJ1bnJlbGVhc2VkIiwiaXNVbnJlbGVhc2VkIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7UUFXc0JBO2VBQUFBOztRQThCdEI7ZUFBQTs7UUFkZ0JDO2VBQUFBOztRQVFBQztlQUFBQTs7OzRCQWpDVzsyQkFDSTs4QkFFUjt1QkFDSzsyQkFDQztBQUU3QixNQUFNLEVBQUVDLElBQUksRUFBRSxHQUFHQyx5QkFBYztBQUV4QixlQUFlSixzQkFBc0JLLGNBQWMsRUFBRUMsT0FBTztJQUNqRSxJQUFJQyx5QkFBeUI7SUFFN0IsTUFBTUMsT0FBT0gsZ0JBQ1BJLGFBQWFDLHNCQUFVLENBQUNDLFFBQVEsQ0FBQ0gsT0FDakNJLGlCQUFpQixFQUFFLEVBQ25CQyxvQkFBb0IsT0FDcEJDLHdCQUF3QixNQUFNQyxxQkFBcUJOLFlBQVlHLGdCQUFnQkMsbUJBQW1CUDtJQUV4RyxJQUFJUSx1QkFBdUI7UUFDekJQLHlCQUF5QjtJQUMzQjtJQUVBLE9BQU9BO0FBQ1Q7QUFFTyxTQUFTTiwwQkFBMEJLLE9BQU87SUFDL0MsTUFBTSxFQUFFVSxlQUFlLEVBQUUsR0FBR1Y7SUFFNUJVLGdCQUFnQkMsT0FBTyxDQUFDLENBQUNDO1FBQ3ZCQyx5QkFBeUJELGdCQUFnQlo7SUFDM0M7QUFDRjtBQUVPLFNBQVNKLHNCQUFzQkksT0FBTyxFQUFFYyxZQUFZO0lBQ3pELE1BQU0sRUFBRUosZUFBZSxFQUFFLEdBQUdWO0lBRTVCLE9BQU9lLElBQUFBLG1CQUFLLEVBQUNMLGlCQUFpQk0sc0JBQXNCaEIsU0FBU2M7QUFDL0Q7TUFFQSxXQUFlO0lBQ2Jw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
204
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvdmVyaWZpY2F0aW9uLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBEZXBlbmRlbmN5IH0gZnJvbSBcIm9jY2FtLW1vZGVsXCI7XG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IHsgZXZlcnkgIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250aW51YXRpb25cIjtcbmltcG9ydCB7IFNJTkdMRV9TUEFDRSB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxuY29uc3QgeyBsYXN0IH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlbGVhc2VDb250ZXh0cyhkZXBlbmRlbmN5TmFtZSwgY29udGV4dCwgZmFpbCwgc3VjY2VlZCkge1xuICBjb25zdCBuYW1lID0gZGVwZW5kZW5jeU5hbWUsICAvLy9cbiAgICAgICAgZGVwZW5kZW5jeSA9IERlcGVuZGVuY3kuZnJvbU5hbWUobmFtZSksXG4gICAgICAgIGRlcGVuZGVudE5hbWVzID0gW10sXG4gICAgICAgIGRlcGVuZGVudFJlbGVhc2VkID0gZmFsc2U7XG5cbiAgcmV0dXJuIGNyZWF0ZVJlbGVhc2VDb250ZXh0KGRlcGVuZGVuY3ksIGRlcGVuZGVudE5hbWVzLCBkZXBlbmRlbnRSZWxlYXNlZCwgY29udGV4dCwgZmFpbCwgKHJlbGVhc2VDb250ZXh0Q3JlYXRlZCkgPT4ge1xuICAgIGxldCByZWxlYXNlQ29udGV4dHNDcmVhdGVkID0gZmFsc2U7XG5cbiAgICBpZiAocmVsZWFzZUNvbnRleHRDcmVhdGVkKSB7XG4gICAgICByZWxlYXNlQ29udGV4dHNDcmVhdGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3VjY2VlZChyZWxlYXNlQ29udGV4dHNDcmVhdGVkKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0aWFsaXNlUmVsZWFzZUNvbnRleHRzKGNvbnRleHQpIHtcbiAgY29uc3QgeyByZWxlYXNlQ29udGV4dHMgfSA9IGNvbnRleHQ7XG5cbiAgcmVsZWFzZUNvbnRleHRzLmZvckVhY2goKHJlbGVhc2VDb250ZXh0KSA9PiB7XG4gICAgaW5pdGlhbGlzZVJlbGVhc2VDb250ZXh0KHJlbGVhc2VDb250ZXh0LCBjb250ZXh0KTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2ZXJpZnlSZWxlYXNlQ29udGV4dHMoY29udGV4dCwgZmFpbCwgc3VjY2VlZCkge1xuICBjb25zdCB7IHJlbGVhc2VDb250ZXh0cyB9ID0gY29udGV4dCxcbiAgICAgICAgYmFjayA9IGZhaWwsICAvLy9cbiAgICAgICAgZm9yd2FyZCA9IHN1Y2NlZWQ7ICAvLy9cblxuICByZXR1cm4gZXZlcnkocmVsZWFzZUNvbnRleHRzLCB2ZXJpZnlSZWxlYXNlQ29udGV4dCwgY29udGV4dCwgYmFjaywgZm9yd2FyZCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY3JlYXRlUmVsZWFzZUNvbnRleHRzLFxuICBpbml0aWFsaXNlUmVsZWFzZUNvbnRleHRzLFxuICB2ZXJpZnlSZWxlYXNlQ29udGV4dHNcbn07XG5cbmZ1bmN0aW9uIHZlcmlmeVJlbGVhc2VDb250ZXh0KHJlbGVhc2VDb250ZXh0LCBjb250ZXh0LCBiYWNrLCBmb3J3YXJkKSB7XG4gIGNvbnN0IHJlbGVhc2VkID0gcmVsZWFzZUNvbnRleHQuaXNSZWxlYXNlZCgpLFxuICAgICAgICB2ZXJpZmllZCA9IHJlbGVhc2VDb250ZXh0Lmhhc1ZlcmlmaWVkKCk7XG5cbiAgaWYgKHJlbGVhc2VkIHx8IHZlcmlmaWVkKSB7XG4gICAgcmV0dXJuIGZvcndhcmQoKTtcbiAgfVxuXG4gIGNvbnN0IHsgbG9nIH0gPSBjb250ZXh0LFxuICAgICAgICBuYW1lID0gcmVsZWFzZUNvbnRleHQuZ2V0TmFtZSgpLFxuICAgICAgICByZWxlYXNlTmFtZSA9IG5hbWU7IC8vL1xuXG4gIGxvZy5pbmZvKGBWZXJpZnlpbmcgdGhlICcke3JlbGVhc2VOYW1lfScgcHJvamVjdC4uLmApO1xuXG4gIHJldHVybiByZWxlYXNlQ29udGV4dC52ZXJpZnkoYmFjaywgKCkgPT4ge1xuICAgIGxvZy5pbmZvKGAuLi52ZXJpZmllZCB0aGUgJyR7cmVsZWFzZU5hbWV9JyBwcm9qZWN0LmApO1xuXG4gICAgcmV0dXJuIGZvcndhcmQoKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVJlbGVhc2VDb250ZXh0KGRlcGVuZGVuY3ksIGRlcGVuZGVudE5hbWVzLCBkZXBlbmRlbnRSZWxlYXNlZCwgY29udGV4dCwgZmFpbCwgc3VjY2VlZCkge1xuICBjb25zdCB7IGxvZyB9ID0gY29udGV4dCxcbiAgICAgICAgcmVsZWFzZUNvbnRleHQgPSBmaW5kUmVsZWFzZUNvbnRleHQoZGVwZW5kZW5jeSwgY29udGV4dCk7XG5cbiAgaWYgKHJlbGVhc2VDb250ZXh0ICE9PSBudWxsKSB7XG4gICAgY29uc3QgcmVsZWFzZUNvbnRleHRDcmVhdGVkID0gdHJ1ZTtcblxuICAgIHJldHVybiBzdWNjZWVkKHJlbGVhc2VDb250ZXh0Q3JlYXRlZCk7XG4gIH1cblxuICBjb25zdCBkZXBlbmRlbmN5TmFtZSA9IGRlcGVuZGVuY3kuZ2V0TmFtZSgpLFxuICAgICAgICBkZXBlbmRlbnROYW1lc0xlbmd0aCA9IGRlcGVuZGVudE5hbWVzLmxlbmd0aDtcblxuICBpZiAoZGVwZW5kZW50TmFtZXNMZW5ndGggPT09IDApIHtcbiAgICBsb2cuaW5mbyhgQ3JlYXRpbmcgdGhlICcke2RlcGVuZGVuY3lOYW1lfScgcGFja2FnZSBjb250ZXh0Li4uYCk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgbGFzdERlcGVuZGVudE5hbWUgPSBsYXN0KGRlcGVuZGVudE5hbWVzKSxcbiAgICAgICAgICBkZXBlbmRlbnROYW1lID0gbGFzdERlcGVuZGVudE5hbWUsICAvLy9cbiAgICAgICAgICBkZXBlbmRlbmN5U3RyaW5nID0gZGVwZW5kZW5jeS5hc1N0cmluZygpO1xuXG4gICAgbG9nLmluZm8oYENyZWF0aW5nIHRoZSAnJHtkZXBlbmRlbmN5TmFtZX0nIHBhY2thZ2UgY29udGV4dCBnaXZlbiB0aGUgJyR7ZGVwZW5kZW50TmFtZX0nIGRlcGVuZGFudCdzICcke2RlcGVuZGVuY3lTdHJpbmd9JyBkZXBlbmRlbmN5Li4uYCk7XG4gIH1cblxuICBjb25zdCB7IHJlbGVhc2VDb250ZXh0RnJvbURlcGVuZGVuY3kgfSA9IGNvbnRleHQ7XG5cbiAgcmVsZWFzZUNvbnRleHRGcm9tRGVwZW5kZW5jeShkZXBlbmRlbmN5LCBjb250ZXh0LCBmYWlsLCAocmVsZWFzZUNvbnRleHQpID0+IHtcbiAgICBsZXQgcmVsZWFzZUNvbnRleHRDcmVhdGVkID0gZmFsc2U7XG5cbiAgICBjb25zdCByZWxlYXRlUHJlc2VudCA9IGNoZWNrUmVsZWFzZVByZXNlbnQocmVsZWFzZUNvbnRleHQsIGRlcGVuZGVuY3lOYW1lLCBjb250ZXh0KTtcblxuICAgIGlmICghcmVsZWF0ZVByZXNlbnQpIHtcbiAgICAgIHJldHVybiBzdWNjZWVkKHJlbGVhc2VDb250ZXh0Q3JlYXRlZCk7XG4gICAgfVxuXG4gICAgY29uc3QgcHJvamVjdERlcGVuZGVuY3lPZlBhY2thZ2UgPSBjaGVja1Byb2plY3REZXBlbmRlbmN5T2ZQYWNrYWdlKHJlbGVhc2VDb250ZXh0LCBkZXBlbmRlbnRSZWxlYXNlZCwgZGVwZW5kZW50TmFtZXMsIGNvbnRleHQpO1xuXG4gICAgaWYgKHByb2plY3REZXBlbmRlbmN5T2ZQYWNrYWdlKSB7XG4gICAgICByZXR1cm4gc3VjY2VlZChyZWxlYXNlQ29udGV4dENyZWF0ZWQpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlbGVhc2VNYXRjaGVzRGVwZW5kZW5jeSA9IGNoZWNrUmVsZWFzZU1hdGNoZXNEZXBlbmRlbmN5KHJlbGVhc2VDb250ZXh0LCBkZXBlbmRlbmN5LCBkZXBlbmRlbnROYW1lcywgY29udGV4dCk7XG5cbiAgICBpZiAoIXJlbGVhc2VNYXRjaGVzRGVwZW5kZW5jeSkge1xuICAgICAgcmV0dXJuIHN1Y2NlZWQocmVsZWFzZUNvbnRleHRDcmVhdGVkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY3JlYXRlRGVwZW5kZW5jeVJlbGVhc2VDb250ZXh0cyhyZWxlYXNlQ29udGV4dCwgZGVwZW5kZW5jeSwgZGVwZW5kZW50TmFtZXMsIGNvbnRleHQsIGZhaWwsIChkZXBlbmRlbmN5UmVsZWFzZUNvbnRleHRzQ3JlYXRlZCkgPT4ge1xuICAgICAgaWYgKGRlcGVuZGVuY3lSZWxlYXNlQ29udGV4dHNDcmVhdGVkKSB7XG4gICAgICAgIHJlbGVhc2VDb250ZXh0Q3JlYXRlZCA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZWxlYXNlQ29udGV4dENyZWF0ZWQpIHtcbiAgICAgICAgYWRkUmVsZWFzZUNvbnRleHQocmVsZWFzZUNvbnRleHQsIGNvbnRleHQpO1xuICAgICAgfVxuXG4gICAgICByZWxlYXNlQ29udGV4dENyZWF0ZWQgP1xuICAgICAgICBsb2cuZGVidWcoYC4uLmNyZWF0ZWQgdGhlICcke2RlcGVuZGVuY3lOYW1lfScgcGFja2FnZSBjb250ZXh0LmApIDpcbiAgICAgICAgICBsb2cud2FybmluZyhgLi4udW5hYmxlIHRvIGNyZWF0ZSB0aGUgJyR7ZGVwZW5kZW5jeU5hbWV9JyBwYWNrYWdlIGNvbnRleHQuYCk7XG5cbiAgICAgIHJldHVybiBzdWNjZWVkKHJlbGVhc2VDb250ZXh0Q3JlYXRlZCk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVEZXBlbmRlbmN5UmVsZWFzZUNvbnRleHRzKHJlbGVhc2VDb250ZXh0LCBkZXBlbmRlbmN5LCBkZXBlbmRlbnROYW1lcywgY29udGV4dCwgZmFpbCwgc3VjY2VlZCkge1xuICBjb25zdCBuYW1lID0gcmVsZWFzZUNvbnRleHQuZ2V0TmFtZSgpLFxuICAgICAgICByZWxlYXNlZCA9IHJlbGVhc2VDb250ZXh0LmlzUmVsZWFzZWQoKSxcbiAgICAgICAgZGVwZW5kZW5jaWVzID0gcmVsZWFzZUNvbnRleHQuZ2V0RGVwZW5kZW5jaWVzKCksXG4gICAgICAgIGRlcGVuZGVudE5hbWUgPSBuYW1lLCAgLy8vXG4gICAgICAgIGRlcGVuZGVudFJlbGVhc2VkID0gcmVsZWFzZWQ7ICAvLy9cblxuICBkZXBlbmRlbnROYW1lcyA9IFsgLi4uZGVwZW5kZW50TmFtZXMsIGRlcGVuZGVudE5hbWUgXTsgIC8vL1xuXG4gIGNvbnN0IGFycmF5ID0gZGVwZW5kZW5jaWVzLmdldEFycmF5KCk7XG5cbiAgcmV0dXJuIGV2ZXJ5KGFycmF5LCAoZGVwZW5kZW5jeSwgYmFjaywgZm9yd2FyZCkgPT4ge1xuICAgIGNvbnN0IGN5Y2xpY0RlcGVuZGVuY3lQcmVzZW50ID0gY2hlY2tDeWNsaWNEZXBlbmRlbmN5UHJlc2VudChkZXBlbmRlbmN5LCBkZXBlbmRlbnROYW1lcywgY29udGV4dCk7XG5cbiAgICBpZiAoY3ljbGljRGVwZW5kZW5jeVByZXNlbnQpIHtcbiAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNyZWF0ZVJlbGVhc2VDb250ZXh0KGRlcGVuZGVuY3ksIGRlcGVuZGVudE5hbWVzLCBkZXBlbmRlbnRSZWxlYXNlZCwgY29udGV4dCwgZmFpbCwgKHJlbGVhc2VDb250ZXh0Q3JlYXRlZCkgPT4ge1xuICAgICAgcmV0dXJuIChyZWxlYXNlQ29udGV4dENyZWF0ZWQpID9cbiAgICAgICAgICAgICAgICBmb3J3YXJkKCkgOlxuICAgICAgICAgICAgICAgICAgYmFjaygpO1xuICAgIH0pO1xuICB9LCAoKSA9PiBzdWNjZWVkKGZhbHNlKSwgKCkgPT4gc3VjY2VlZCh0cnVlKSk7XG59XG5cbmZ1bmN0aW9uIGFkZFJlbGVhc2VDb250ZXh0KHJlbGVhc2VDb250ZXh0LCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgcmVsZWFzZUNvbnRleHRzIH0gPSBjb250ZXh0O1xuXG4gIHJlbGVhc2VDb250ZXh0cy5wdXNoKHJlbGVhc2VDb250ZXh0KTtcbn1cblxuZnVuY3Rpb24gZmluZFJlbGVhc2VDb250ZXh0KGRlcGVuZGVuY3ksIGNvbnRleHQpIHtcbiAgY29uc3QgeyByZWxlYXNlQ29udGV4dHMgfSA9IGNvbnRleHQsXG4gICAgICAgIGRlcGVuZGVuY3lOYW1lID0gZGVwZW5kZW5jeS5nZXROYW1lKCksXG4gICAgICAgIHJlbGVhc2VDb250ZXh0ID0gcmVsZWFzZUNvbnRleHRzLmZpbmQoKHJlbGVhc2VDb250ZXh0KSA9PiB7XG4gICAgICAgICAgY29uc3QgZGVwZW5kZW5jeU5hbWVNYXRjaGVzID0gcmVsZWFzZUNvbnRleHQubWF0Y2hEZXBlbmRlbmN5TmFtZShkZXBlbmRlbmN5TmFtZSk7XG5cbiAgICAgICAgICBpZiAoZGVwZW5kZW5jeU5hbWVNYXRjaGVzKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pIHx8IG51bGw7XG5cbiAgcmV0dXJuIHJlbGVhc2VDb250ZXh0O1xufVxuXG5mdW5jdGlvbiBjaGVja1JlbGVhc2VQcmVzZW50KHJlbGVhc2VDb250ZXh0LCBkZXBlbmRlbmN5TmFtZSwgY29udGV4dCkge1xuICBsZXQgcmVsZWFzZVByZXNlbnQgPSB0cnVlO1xuXG4gIGlmIChyZWxlYXNlQ29udGV4dCA9PT0gbnVsbCkge1xuICAgIGNvbnN0IHsgbG9nIH0gPSBjb250ZXh0O1xuXG4gICAgbG9nLndhcm5pbmcoYFRoZSAnJHtkZXBlbmRlbmN5TmFtZX0nIHBhY2thZ2UgY29udGV4dCBjb3VsZCBub3QgYmUgY3JlYXRlZC4gUGVyaGFwcyB0aGUgJ21ldGEuanNvbicgZmlsZSBpcyBtaXNzaW5nIG9yIGludmFsaWQuYCk7XG5cbiAgICByZWxlYXNlUHJlc2VudCA9IGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHJlbGVhc2VQcmVzZW50O1xufVxuXG5mdW5jdGlvbiByZXRyaWV2ZVJlbGVhc2VDb250ZXh0cyhyZWxlYXNlQ29udGV4dCwgY29udGV4dCwgcmVsZWFzZUNvbnRleHRzID0gW10pIHtcbiAgY29uc3QgcmVsZWFzZUNvbnRleHRzSW5jbHVkZXNSZWxlYXNlQ29udGV4dCA9IHJlbGVhc2VDb250ZXh0cy5pbmNsdWRlcyhyZWxlYXNlQ29udGV4dCk7XG5cbiAgaWYgKCFyZWxlYXNlQ29udGV4dHNJbmNsdWRlc1JlbGVhc2VDb250ZXh0KSB7XG4gICAgY29uc3QgZGVwZW5kZW5jaWVzID0gcmVsZWFzZUNvbnRleHQuZ2V0RGVwZW5kZW5jaWVzKCk7XG5cbiAgICBkZXBlbmRlbmNpZXMuZm9yRWFjaERlcGVuZGVuY3koKGRlcGVuZGVuY3kpID0+IHtcbiAgICAgIGNvbnN0IHJlbGVhc2VDb250ZXh0ID0gZmluZFJlbGVhc2VDb250ZXh0KGRlcGVuZGVuY3ksIGNvbnRleHQpO1xuXG4gICAgICByZXRyaWV2ZVJlbGVhc2VDb250ZXh0cyhyZWxlYXNlQ29udGV4dCwgY29udGV4dCwgcmVsZWFzZUNvbnRleHRzKTtcbiAgICB9KTtcblxuICAgIHJlbGVhc2VDb250ZXh0cy51bnNoaWZ0KHJlbGVhc2VDb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiByZWxlYXNlQ29udGV4dHM7XG59XG5cbmZ1bmN0aW9uIGluaXRpYWxpc2VSZWxlYXNlQ29udGV4dChyZWxlYXNlQ29udGV4dCwgY29udGV4dCkge1xuICBjb25zdCB7IGxvZyB9ID0gY29udGV4dCxcbiAgICAgICAgbmFtZSA9IHJlbGVhc2VDb250ZXh0LmdldE5hbWUoKSxcbiAgICAgICAgcmVsZWFzZU5hbWUgPSBuYW1lLCAvLy9cbiAgICAgICAgcmVsZWFzZUNvbnRleHRzID0gcmV0cmlldmVSZWxlYXNlQ29udGV4dHMocmVsZWFzZUNvbnRleHQsIGNvbnRleHQpO1xuXG4gIGxvZy5pbmZvKGBJbml0aWFsaXNpbmcgdGhlICcke3JlbGVhc2VOYW1lfScgcGFja2FnZSBjb250ZXh0Li4uYCk7XG5cbiAgY29uc3QgeyBGaWxlQ29udGV4dEZyb21GaWxlUGF0aCB9ID0gY29udGV4dDtcblxuICByZWxlYXNlQ29udGV4dC5pbml0aWFsaXNlKHJlbGVhc2VDb250ZXh0cywgRmlsZUNvbnRleHRGcm9tRmlsZVBhdGgpO1xuXG4gIGxvZy5kZWJ1ZyhgLi4uaW5pdGlhbGlzZWQgdGhlICcke3JlbGVhc2VOYW1lfScgcGFja2FnZSBjb250ZXh0LmApO1xufVxuXG5mdW5jdGlvbiBjaGVja0N5Y2xpY0RlcGVuZGVuY3lQcmVzZW50KGRlcGVuZGVuY3ksIGRlcGVuZGVudE5hbWVzLCBjb250ZXh0KSB7XG4gIGxldCBjeWNsaWNEZXBlbmRlbmN5UHJlc2VudCA9IGZhbHNlO1xuXG4gIGNvbnN0IGRlcGVuZGVuY3lOYW1lID0gZGVwZW5kZW5jeS5nZXROYW1lKCksXG4gICAgICAgIGluZGV4ID0gZGVwZW5kZW50TmFtZXMuaW5kZXhPZihkZXBlbmRlbmN5TmFtZSk7XG5cbiAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICBjb25zdCB7IGxvZyB9ID0gY29udGV4dCxcbiAgICAgICAgICBjaXJjdWxhckRlcGVuZGVudE5hbWVzID0gZGVwZW5kZW50TmFtZXMuc2xpY2UoaW5kZXgpLFxuICAgICAgICAgIGNpcmN1bGFyRGVwZW5kZW5jeU5hbWVzID0gW1xuICAgICAgICAgICAgLi4uY2lyY3VsYXJEZXBlbmRlbnROYW1lcyxcbiAgICAgICAgICAgIGRlcGVuZGVuY3lOYW1lXG4gICAgICAgICAgXSxcbiAgICAgICAgICBjaXJjdWxhckRlcGVuZGVuY3lOYW1lc1N0cmluZyA9IGNpcmN1bGFyRGVwZW5kZW5jeU5hbWVzLmpvaW4oU0lOR0xFX1NQQUNFKTtcblxuICAgIGxvZy53YXJuaW5nKGBUaGVyZSBpcyBhIGN5Y2xpYyBkZXBlbmRlbmN5LCAnJHtjaXJjdWxhckRlcGVuZGVuY3lOYW1lc1N0cmluZ30nLmApO1xuXG4gICAgY3ljbGljRGVwZW5kZW5jeVByZXNlbnQgPSB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGN5Y2xpY0RlcGVuZGVuY3lQcmVzZW50O1xufVxuXG5mdW5jdGlvbiBjaGVja1JlbGVhc2VNYXRjaGVzRGVwZW5kZW5jeShyZWxlYXNlQ29udGV4dCwgZGVwZW5kZW5jeSwgZGVwZW5kZW50TmFtZXMsIGNvbnRleHQpIHtcbiAgbGV0IHJlbGVhc2VNYXRjaGVzRGVwZW5kZW5jeSA9IHRydWU7XG5cbiAgY29uc3Qgc2hvcnRlbmVkVmVyc2lvbiA9IGRlcGVuZGVuY3kuZ2V0U2hvcnRlbmVkVmVyc2lvbigpO1xuXG4gIGlmIChzaG9ydGVuZWRWZXJzaW9uICE9PSBudWxsKSB7XG4gICAgY29uc3QgZW50cmllc01hdGNoU2hvcnRlbmVkVmVyc2lvbiA9IHJlbGVhc2VDb250ZXh0Lm1hdGNoU2hvcnRlbmVkVmVyc2lvbihzaG9ydGVuZWRWZXJzaW9uKTtcblxuICAgIGlmICghZW50cmllc01hdGNoU2hvcnRlbmVkVmVyc2lvbikge1xuICAgICAgY29uc3QgeyBsb2cgfSA9IGNvbnRleHQsXG4gICAgICAgICAgICB2ZXJzaW9uID0gcmVsZWFzZUNvbnRleHQuZ2V0VmVyc2lvbigpLFxuICAgICAgICAgICAgbGFzdERlcGVuZGVudE5hbWUgPSBsYXN0KGRlcGVuZGVudE5hbWVzKSxcbiAgICAgICAgICAgIGRlcGVuZGVudE5hbWUgPSBsYXN0RGVwZW5kZW50TmFtZSwgIC8vL1xuICAgICAgICAgICAgdmVyc2lvblN0cmluZyA9IHZlcnNpb24udG9TdHJpbmcoKSxcbiAgICAgICAgICAgIGRlcGVuZGVuY3lTdHJpbmcgPSBkZXBlbmRlbmN5LmFzU3RyaW5nKCk7XG5cbiAgICAgIGxvZy53YXJuaW5nKGBUaGUgJyR7ZGVwZW5kZW50TmFtZX0nIGRlcGVuZGVudCByZXF1aXJlcyB0aGUgJyR7ZGVwZW5kZW5jeVN0cmluZ30nIGRlcGVuZGVuY3kgYnV0IGEgY29udGV4dCB3aXRoIHZlcnNpb24gJyR7dmVyc2lvblN0cmluZ30nIHdhcyBwcm92aWRlZC5gKTtcblxuICAgICAgcmVsZWFzZU1hdGNoZXNEZXBlbmRlbmN5ID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlbGVhc2VNYXRjaGVzRGVwZW5kZW5jeTtcbn1cblxuZnVuY3Rpb24gY2hlY2tQcm9qZWN0RGVwZW5kZW5jeU9mUGFja2FnZShyZWxlYXNlQ29udGV4dCwgZGVwZW5kZW50UmVsZWFzZWQsIGRlcGVuZGVudE5hbWVzLCBjb250ZXh0KSB7XG4gIGxldCBwcm9qZWN0RGVwZW5kZW5jeU9mUGFja2FnZSA9IGZhbHNlO1xuXG4gIGlmIChkZXBlbmRlbnRSZWxlYXNlZCkge1xuICAgIGNvbnN0IHVucmVsZWFzZWQgPSByZWxlYXNlQ29udGV4dC5pc1VucmVsZWFzZWQoKTtcblxuICAgIGlmICh1bnJlbGVhc2VkKSB7XG4gICAgICBjb25zdCB7IGxvZyB9ID0gY29udGV4dCxcbiAgICAgICAgICAgIG5hbWUgPSByZWxlYXNlQ29udGV4dC5nZXROYW1lKCksXG4gICAgICAgICAgICBsYXN0RGVwZW5kZW50TmFtZSA9IGxhc3QoZGVwZW5kZW50TmFtZXMpLFxuICAgICAgICAgICAgZGVwZW5kZW5jeU5hbWUgPSBuYW1lLC8vL1xuICAgICAgICAgICAgZGVwZW5kZW50TmFtZSA9IGxhc3REZXBlbmRlbnROYW1lOyAgLy8vXG5cbiAgICAgIGxvZy53YXJuaW5nKGBUaGUgJyR7ZGVwZW5kZW5jeU5hbWV9JyBkZXBlbmRlbmN5IGlzIGEgcHJvamVjdCB3aGlsc3QgaXRzICcke2RlcGVuZGVudE5hbWV9JyBkZXBlbmRlbnQgaXMgYSBwYWNrYWdlLmApO1xuXG4gICAgICBwcm9qZWN0RGVwZW5kZW5jeU9mUGFja2FnZSA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHByb2plY3REZXBlbmRlbmN5T2ZQYWNrYWdlO1xufVxuIl0sIm5hbWVzIjpbImNyZWF0ZVJlbGVhc2VDb250ZXh0cyIsImluaXRpYWxpc2VSZWxlYXNlQ29udGV4dHMiLCJ2ZXJpZnlSZWxlYXNlQ29udGV4dHMiLCJsYXN0IiwiYXJyYXlVdGlsaXRpZXMiLCJkZXBlbmRlbmN5TmFtZSIsImNvbnRleHQiLCJmYWlsIiwic3VjY2VlZCIsIm5hbWUiLCJkZXBlbmRlbmN5IiwiRGVwZW5kZW5jeSIsImZyb21OYW1lIiwiZGVwZW5kZW50TmFtZXMiLCJkZXBlbmRlbnRSZWxlYXNlZCIsImNyZWF0ZVJlbGVhc2VDb250ZXh0IiwicmVsZWFzZUNvbnRleHRDcmVhdGVkIiwicmVsZWFzZUNvbnRleHRzQ3JlYXRlZCIsInJlbGVhc2VDb250ZXh0cyIsImZvckVhY2giLCJyZWxlYXNlQ29udGV4dCIsImluaXRpYWxpc2VSZWxlYXNlQ29udGV4dCIsImJhY2siLCJmb3J3YXJkIiwiZXZlcnkiLCJ2ZXJpZnlSZWxlYXNlQ29udGV4dCIsInJlbGVhc2VkIiwiaXNSZWxlYXNlZCIsInZlcmlmaWVkIiwiaGFzVmVyaWZpZWQiLCJsb2ciLCJnZXROYW1lIiwicmVsZWFzZU5hbWUiLCJpbmZvIiwidmVyaWZ5IiwiZmluZFJlbGVhc2VDb250ZXh0IiwiZGVwZW5kZW50TmFtZXNMZW5ndGgiLCJsZW5ndGgiLCJsYXN0RGVwZW5kZW50TmFtZSIsImRlcGVuZGVudE5hbWUiLCJkZXBlbmRlbmN5U3RyaW5nIiwiYXNTdHJpbmciLCJyZWxlYXNlQ29udGV4dEZyb21EZXBlbmRlbmN5IiwicmVsZWF0ZVByZXNlbnQiLCJjaGVja1JlbGVhc2VQcmVzZW50IiwicHJvamVjdERlcGVuZGVuY3lPZlBhY2thZ2UiLCJjaGVja1Byb2plY3REZXBlbmRlbmN5T2ZQYWNrYWdlIiwicmVsZWFzZU1hdGNoZXNEZXBlbmRlbmN5IiwiY2hlY2tSZWxlYXNlTWF0Y2hlc0RlcGVuZGVuY3kiLCJjcmVhdGVEZXBlbmRlbmN5UmVsZWFzZUNvbnRleHRzIiwiZGVwZW5kZW5jeVJlbGVhc2VDb250ZXh0c0NyZWF0ZWQiLCJhZGRSZWxlYXNlQ29udGV4dCIsImRlYnVnIiwid2FybmluZyIsImRlcGVuZGVuY2llcyIsImdldERlcGVuZGVuY2llcyIsImFycmF5IiwiZ2V0QXJyYXkiLCJjeWNsaWNEZXBlbmRlbmN5UHJlc2VudCIsImNoZWNrQ3ljbGljRGVwZW5kZW5jeVByZXNlbnQiLCJwdXNoIiwiZmluZCIsImRlcGVuZGVuY3lOYW1lTWF0Y2hlcyIsIm1hdGNoRGVwZW5kZW5jeU5hbWUiLCJyZWxlYXNlUHJlc2VudCIsInJldHJpZXZlUmVsZWFzZUNvbnRleHRzIiwicmVsZWFzZUNvbnRleHRzSW5jbHVkZXNSZWxlYXNlQ29udGV4dCIsImluY2x1ZGVzIiwiZm9yRWFjaERlcGVuZGVuY3kiLCJ1bnNoaWZ0IiwiRmlsZUNvbnRleHRGcm9tRmlsZVBhdGgiLCJpbml0aWFsaXNlIiwiaW5kZXgiLCJpbmRleE9mIiwiY2lyY3VsYXJEZXBlbmRlbnROYW1lcyIsInNsaWNlIiwiY2lyY3VsYXJEZXBlbmRlbmN5TmFtZXMiLCJjaXJjdWxhckRlcGVuZGVuY3lOYW1lc1N0cmluZyIsImpvaW4iLCJTSU5HTEVfU1BBQ0UiLCJzaG9ydGVuZWRWZXJzaW9uIiwiZ2V0U2hvcnRlbmVkVmVyc2lvbiIsImVudHJpZXNNYXRjaFNob3J0ZW5lZFZlcnNpb24iLCJtYXRjaFNob3J0ZW5lZFZlcnNpb24iLCJ2ZXJzaW9uIiwiZ2V0VmVyc2lvbiIsInZlcnNpb25TdHJpbmciLCJ0b1N0cmluZyIsInVucmVsZWFzZWQiLCJpc1VucmVsZWFzZWQiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztRQVVnQkE7ZUFBQUE7O1FBaUNoQjtlQUFBOztRQWhCZ0JDO2VBQUFBOztRQVFBQztlQUFBQTs7OzRCQWpDVzsyQkFDSTs4QkFFUjsyQkFDTTtBQUU3QixNQUFNLEVBQUVDLElBQUksRUFBRSxHQUFHQyx5QkFBYztBQUV4QixTQUFTSixzQkFBc0JLLGNBQWMsRUFBRUMsT0FBTyxFQUFFQyxJQUFJLEVBQUVDLE9BQU87SUFDMUUsTUFBTUMsT0FBT0osZ0JBQ1BLLGFBQWFDLHNCQUFVLENBQUNDLFFBQVEsQ0FBQ0gsT0FDakNJLGlCQUFpQixFQUFFLEVBQ25CQyxvQkFBb0I7SUFFMUIsT0FBT0MscUJBQXFCTCxZQUFZRyxnQkFBZ0JDLG1CQUFtQlIsU0FBU0MsTUFBTSxDQUFDUztRQUN6RixJQUFJQyx5QkFBeUI7UUFFN0IsSUFBSUQsdUJBQXVCO1lBQ3pCQyx5QkFBeUI7UUFDM0I7UUFFQSxPQUFPVCxRQUFRUztJQUNqQjtBQUNGO0FBRU8sU0FBU2hCLDBCQUEwQkssT0FBTztJQUMvQyxNQUFNLEVBQUVZ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
@@ -19,10 +19,10 @@ _export(exports, {
19
19
  const _necessary = require("necessary");
20
20
  const _continuation = require("../utilities/continuation");
21
21
  const { first, filter, compress } = _necessary.arrayUtilities;
22
- function verifyFileContexts(fileContexts, verifiedFileContexts, contiunation) {
23
- return (0, _continuation.resolve)(fileContexts, verifiedFileContexts, (fileContext, contiunation)=>{
24
- return fileContext.verify(contiunation);
25
- }, contiunation);
22
+ function verifyFileContexts(fileContexts, verifiedFileContexts, back, forward) {
23
+ return (0, _continuation.resolve)(fileContexts, verifiedFileContexts, (fileContext, back, forward)=>{
24
+ return fileContext.verify(back, forward);
25
+ }, back, forward);
26
26
  }
27
27
  function verifyTypePrefixes(typePrefixes, releaseContext) {
28
28
  let typePrefixesVerify = true;
@@ -50,4 +50,4 @@ function verifyTypePrefixes(typePrefixes, releaseContext) {
50
50
  return typePrefixesVerify;
51
51
  }
52
52
 
53
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvdmVyaWZ5LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGludWF0aW9uXCI7XG5cbmNvbnN0IHsgZmlyc3QsIGZpbHRlciwgY29tcHJlc3MgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZnVuY3Rpb24gdmVyaWZ5RmlsZUNvbnRleHRzKGZpbGVDb250ZXh0cywgdmVyaWZpZWRGaWxlQ29udGV4dHMsIGNvbnRpdW5hdGlvbikge1xuICByZXR1cm4gcmVzb2x2ZShmaWxlQ29udGV4dHMsIHZlcmlmaWVkRmlsZUNvbnRleHRzLCAoZmlsZUNvbnRleHQsIGNvbnRpdW5hdGlvbikgPT4ge1xuICAgIHJldHVybiBmaWxlQ29udGV4dC52ZXJpZnkoY29udGl1bmF0aW9uKTtcbiAgfSwgY29udGl1bmF0aW9uKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZlcmlmeVR5cGVQcmVmaXhlcyh0eXBlUHJlZml4ZXMsIHJlbGVhc2VDb250ZXh0KSB7XG4gIGxldCB0eXBlUHJlZml4ZXNWZXJpZnkgPSB0cnVlO1xuXG4gIGNvbnN0IHR5cGVQcmVmaXhlc0xlbmd0aCA9IHR5cGVQcmVmaXhlcy5sZW5ndGgsXG4gICAgICAgIGNvbXByZXNzZWRUeXBlUHJlZml4ZXMgPSBbICAvLy9cbiAgICAgICAgICAuLi50eXBlUHJlZml4ZXMsXG4gICAgICAgIF07XG5cbiAgY29tcHJlc3MoY29tcHJlc3NlZFR5cGVQcmVmaXhlcywgKHR5cGVQcmVmaXhBLCB0eXBlUHJlZml4QikgPT4ge1xuICAgIGNvbnN0IHR5cGVQcmVmaXhBTmFtZSA9IHR5cGVQcmVmaXhBLmdldE5hbWUoKSxcbiAgICAgICAgICB0eXBlUHJlZml4Qk5hbWUgPSB0eXBlUHJlZml4Qi5nZXROYW1lKCk7XG5cbiAgICBpZiAodHlwZVByZWZpeEFOYW1lICE9PSB0eXBlUHJlZml4Qk5hbWUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgY29tcHJlc3NUeXBlUHJlZml4ZXNMZW5ndGggPSBjb21wcmVzc2VkVHlwZVByZWZpeGVzLmxlbmd0aDtcblxuICBpZiAodHlwZVByZWZpeGVzTGVuZ3RoID4gY29tcHJlc3NUeXBlUHJlZml4ZXNMZW5ndGgpIHtcbiAgICBmaWx0ZXIoY29tcHJlc3NlZFR5cGVQcmVmaXhlcywgKHR5cGVQcmVmaXgpID0+IHtcbiAgICAgIGNvbnN0IHR5cGVQcmVmaXhlc0luY2x1ZGVzVHlwZVByZWZpeCA9IHR5cGVQcmVmaXhlcy5pbmNsdWRlcyh0eXBlUHJlZml4KTtcblxuICAgICAgaWYgKCF0eXBlUHJlZml4ZXNJbmNsdWRlc1R5cGVQcmVmaXgpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBmaXJzdFR5cGVQcmVmaXggPSBmaXJzdCh0eXBlUHJlZml4ZXMpLFxuICAgICAgICAgIHR5cGVQcmVmaXggPSBmaXJzdFR5cGVQcmVmaXgsIC8vL1xuICAgICAgICAgIHR5cGVQcmVmaXhTdHJpbmcgPSB0eXBlUHJlZml4LmdldFN0cmluZygpO1xuXG4gICAgcmVsZWFzZUNvbnRleHQuaW5mbyhgVGhlICcke3R5cGVQcmVmaXhTdHJpbmd9JyB0eXBlIHByZWZpeCBpcyBkdXBsaWNhdGVkLmApXG5cbiAgICB0eXBlUHJlZml4ZXNWZXJpZnkgPSBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0eXBlUHJlZml4ZXNWZXJpZnk7XG59XG4iXSwibmFtZXMiOlsidmVyaWZ5RmlsZUNvbnRleHRzIiwidmVyaWZ5VHlwZVByZWZpeGVzIiwiZmlyc3QiLCJmaWx0ZXIiLCJjb21wcmVzcyIsImFycmF5VXRpbGl0aWVzIiwiZmlsZUNvbnRleHRzIiwidmVyaWZpZWRGaWxlQ29udGV4dHMiLCJjb250aXVuYXRpb24iLCJyZXNvbHZlIiwiZmlsZUNvbnRleHQiLCJ2ZXJpZnkiLCJ0eXBlUHJlZml4ZXMiLCJyZWxlYXNlQ29udGV4dCIsInR5cGVQcmVmaXhlc1ZlcmlmeSIsInR5cGVQcmVmaXhlc0xlbmd0aCIsImxlbmd0aCIsImNvbXByZXNzZWRUeXBlUHJlZml4ZXMiLCJ0eXBlUHJlZml4QSIsInR5cGVQcmVmaXhCIiwidHlwZVByZWZpeEFOYW1lIiwiZ2V0TmFtZSIsInR5cGVQcmVmaXhCTmFtZSIsImNvbXByZXNzVHlwZVByZWZpeGVzTGVuZ3RoIiwidHlwZVByZWZpeCIsInR5cGVQcmVmaXhlc0luY2x1ZGVzVHlwZVByZWZpeCIsImluY2x1ZGVzIiwiZmlyc3RUeXBlUHJlZml4IiwidHlwZVByZWZpeFN0cmluZyIsImdldFN0cmluZyIsImluZm8iXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztRQVFnQkE7ZUFBQUE7O1FBTUFDO2VBQUFBOzs7MkJBWmU7OEJBRVA7QUFFeEIsTUFBTSxFQUFFQyxLQUFLLEVBQUVDLE1BQU0sRUFBRUMsUUFBUSxFQUFFLEdBQUdDLHlCQUFjO0FBRTNDLFNBQVNMLG1CQUFtQk0sWUFBWSxFQUFFQyxvQkFBb0IsRUFBRUMsWUFBWTtJQUNqRixPQUFPQyxJQUFBQSxxQkFBTyxFQUFDSCxjQUFjQyxzQkFBc0IsQ0FBQ0csYUFBYUY7UUFDL0QsT0FBT0UsWUFBWUMsTUFBTSxDQUFDSDtJQUM1QixHQUFHQTtBQUNMO0FBRU8sU0FBU1AsbUJBQW1CVyxZQUFZLEVBQUVDLGNBQWM7SUFDN0QsSUFBSUMscUJBQXFCO0lBRXpCLE1BQU1DLHFCQUFxQkgsYUFBYUksTUFBTSxFQUN4Q0MseUJBQXlCO1dBQ3BCTDtLQUNKO0lBRVBSLFNBQVNhLHdCQUF3QixDQUFDQyxhQUFhQztRQUM3QyxNQUFNQyxrQkFBa0JGLFlBQVlHLE9BQU8sSUFDckNDLGtCQUFrQkgsWUFBWUUsT0FBTztRQUUzQyxJQUFJRCxvQkFBb0JFLGlCQUFpQjtZQUN2QyxPQUFPO1FBQ1Q7SUFDRjtJQUVBLE1BQU1DLDZCQUE2Qk4sdUJBQXVCRCxNQUFNO0lBRWhFLElBQUlELHFCQUFxQlEsNEJBQTRCO1FBQ25EcEIsT0FBT2Msd0JBQXdCLENBQUNPO1lBQzlCLE1BQU1DLGlDQUFpQ2IsYUFBYWMsUUFBUSxDQUFDRjtZQUU3RCxJQUFJLENBQUNDLGdDQUFnQztnQkFDbkMsT0FBTztZQUNUO1FBQ0Y7UUFFQSxNQUFNRSxrQkFBa0J6QixNQUFNVSxlQUN4QlksYUFBYUcsaUJBQ2JDLG1CQUFtQkosV0FBV0ssU0FBUztRQUU3Q2hCLGVBQWVpQixJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUVGLGlCQUFpQiw0QkFBNEIsQ0FBQztRQUUxRWQscUJBQXFCO0lBQ3ZCO0lBRUEsT0FBT0E7QUFDVCJ9
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvdmVyaWZ5LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGludWF0aW9uXCI7XG5cbmNvbnN0IHsgZmlyc3QsIGZpbHRlciwgY29tcHJlc3MgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZnVuY3Rpb24gdmVyaWZ5RmlsZUNvbnRleHRzKGZpbGVDb250ZXh0cywgdmVyaWZpZWRGaWxlQ29udGV4dHMsIGJhY2ssIGZvcndhcmQpIHtcbiAgcmV0dXJuIHJlc29sdmUoZmlsZUNvbnRleHRzLCB2ZXJpZmllZEZpbGVDb250ZXh0cywgKGZpbGVDb250ZXh0LCBiYWNrLCBmb3J3YXJkKSA9PiB7XG4gICAgcmV0dXJuIGZpbGVDb250ZXh0LnZlcmlmeShiYWNrLCBmb3J3YXJkKTtcbiAgfSwgYmFjaywgZm9yd2FyZCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2ZXJpZnlUeXBlUHJlZml4ZXModHlwZVByZWZpeGVzLCByZWxlYXNlQ29udGV4dCkge1xuICBsZXQgdHlwZVByZWZpeGVzVmVyaWZ5ID0gdHJ1ZTtcblxuICBjb25zdCB0eXBlUHJlZml4ZXNMZW5ndGggPSB0eXBlUHJlZml4ZXMubGVuZ3RoLFxuICAgICAgICBjb21wcmVzc2VkVHlwZVByZWZpeGVzID0gWyAgLy8vXG4gICAgICAgICAgLi4udHlwZVByZWZpeGVzLFxuICAgICAgICBdO1xuXG4gIGNvbXByZXNzKGNvbXByZXNzZWRUeXBlUHJlZml4ZXMsICh0eXBlUHJlZml4QSwgdHlwZVByZWZpeEIpID0+IHtcbiAgICBjb25zdCB0eXBlUHJlZml4QU5hbWUgPSB0eXBlUHJlZml4QS5nZXROYW1lKCksXG4gICAgICAgICAgdHlwZVByZWZpeEJOYW1lID0gdHlwZVByZWZpeEIuZ2V0TmFtZSgpO1xuXG4gICAgaWYgKHR5cGVQcmVmaXhBTmFtZSAhPT0gdHlwZVByZWZpeEJOYW1lKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IGNvbXByZXNzVHlwZVByZWZpeGVzTGVuZ3RoID0gY29tcHJlc3NlZFR5cGVQcmVmaXhlcy5sZW5ndGg7XG5cbiAgaWYgKHR5cGVQcmVmaXhlc0xlbmd0aCA+IGNvbXByZXNzVHlwZVByZWZpeGVzTGVuZ3RoKSB7XG4gICAgZmlsdGVyKGNvbXByZXNzZWRUeXBlUHJlZml4ZXMsICh0eXBlUHJlZml4KSA9PiB7XG4gICAgICBjb25zdCB0eXBlUHJlZml4ZXNJbmNsdWRlc1R5cGVQcmVmaXggPSB0eXBlUHJlZml4ZXMuaW5jbHVkZXModHlwZVByZWZpeCk7XG5cbiAgICAgIGlmICghdHlwZVByZWZpeGVzSW5jbHVkZXNUeXBlUHJlZml4KSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgZmlyc3RUeXBlUHJlZml4ID0gZmlyc3QodHlwZVByZWZpeGVzKSxcbiAgICAgICAgICB0eXBlUHJlZml4ID0gZmlyc3RUeXBlUHJlZml4LCAvLy9cbiAgICAgICAgICB0eXBlUHJlZml4U3RyaW5nID0gdHlwZVByZWZpeC5nZXRTdHJpbmcoKTtcblxuICAgIHJlbGVhc2VDb250ZXh0LmluZm8oYFRoZSAnJHt0eXBlUHJlZml4U3RyaW5nfScgdHlwZSBwcmVmaXggaXMgZHVwbGljYXRlZC5gKVxuXG4gICAgdHlwZVByZWZpeGVzVmVyaWZ5ID0gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHlwZVByZWZpeGVzVmVyaWZ5O1xufVxuIl0sIm5hbWVzIjpbInZlcmlmeUZpbGVDb250ZXh0cyIsInZlcmlmeVR5cGVQcmVmaXhlcyIsImZpcnN0IiwiZmlsdGVyIiwiY29tcHJlc3MiLCJhcnJheVV0aWxpdGllcyIsImZpbGVDb250ZXh0cyIsInZlcmlmaWVkRmlsZUNvbnRleHRzIiwiYmFjayIsImZvcndhcmQiLCJyZXNvbHZlIiwiZmlsZUNvbnRleHQiLCJ2ZXJpZnkiLCJ0eXBlUHJlZml4ZXMiLCJyZWxlYXNlQ29udGV4dCIsInR5cGVQcmVmaXhlc1ZlcmlmeSIsInR5cGVQcmVmaXhlc0xlbmd0aCIsImxlbmd0aCIsImNvbXByZXNzZWRUeXBlUHJlZml4ZXMiLCJ0eXBlUHJlZml4QSIsInR5cGVQcmVmaXhCIiwidHlwZVByZWZpeEFOYW1lIiwiZ2V0TmFtZSIsInR5cGVQcmVmaXhCTmFtZSIsImNvbXByZXNzVHlwZVByZWZpeGVzTGVuZ3RoIiwidHlwZVByZWZpeCIsInR5cGVQcmVmaXhlc0luY2x1ZGVzVHlwZVByZWZpeCIsImluY2x1ZGVzIiwiZmlyc3RUeXBlUHJlZml4IiwidHlwZVByZWZpeFN0cmluZyIsImdldFN0cmluZyIsImluZm8iXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztRQVFnQkE7ZUFBQUE7O1FBTUFDO2VBQUFBOzs7MkJBWmU7OEJBRVA7QUFFeEIsTUFBTSxFQUFFQyxLQUFLLEVBQUVDLE1BQU0sRUFBRUMsUUFBUSxFQUFFLEdBQUdDLHlCQUFjO0FBRTNDLFNBQVNMLG1CQUFtQk0sWUFBWSxFQUFFQyxvQkFBb0IsRUFBRUMsSUFBSSxFQUFFQyxPQUFPO0lBQ2xGLE9BQU9DLElBQUFBLHFCQUFPLEVBQUNKLGNBQWNDLHNCQUFzQixDQUFDSSxhQUFhSCxNQUFNQztRQUNyRSxPQUFPRSxZQUFZQyxNQUFNLENBQUNKLE1BQU1DO0lBQ2xDLEdBQUdELE1BQU1DO0FBQ1g7QUFFTyxTQUFTUixtQkFBbUJZLFlBQVksRUFBRUMsY0FBYztJQUM3RCxJQUFJQyxxQkFBcUI7SUFFekIsTUFBTUMscUJBQXFCSCxhQUFhSSxNQUFNLEVBQ3hDQyx5QkFBeUI7V0FDcEJMO0tBQ0o7SUFFUFQsU0FBU2Msd0JBQXdCLENBQUNDLGFBQWFDO1FBQzdDLE1BQU1DLGtCQUFrQkYsWUFBWUcsT0FBTyxJQUNyQ0Msa0JBQWtCSCxZQUFZRSxPQUFPO1FBRTNDLElBQUlELG9CQUFvQkUsaUJBQWlCO1lBQ3ZDLE9BQU87UUFDVDtJQUNGO0lBRUEsTUFBTUMsNkJBQTZCTix1QkFBdUJELE1BQU07SUFFaEUsSUFBSUQscUJBQXFCUSw0QkFBNEI7UUFDbkRyQixPQUFPZSx3QkFBd0IsQ0FBQ087WUFDOUIsTUFBTUMsaUNBQWlDYixhQUFhYyxRQUFRLENBQUNGO1lBRTdELElBQUksQ0FBQ0MsZ0NBQWdDO2dCQUNuQyxPQUFPO1lBQ1Q7UUFDRjtRQUVBLE1BQU1FLGtCQUFrQjFCLE1BQU1XLGVBQ3hCWSxhQUFhRyxpQkFDYkMsbUJBQW1CSixXQUFXSyxTQUFTO1FBRTdDaEIsZUFBZWlCLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRUYsaUJBQWlCLDRCQUE0QixDQUFDO1FBRTFFZCxxQkFBcUI7SUFDdkI7SUFFQSxPQUFPQTtBQUNUIn0=
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "occam-languages",
3
3
  "author": "James Smith",
4
- "version": "3.0.4",
4
+ "version": "3.0.8",
5
5
  "license": "MIT, Anti-996",
6
6
  "homepage": "https://github.com/djalbat/occam-languages",
7
7
  "description": "Occam's common language functionality.",
@@ -34,8 +34,7 @@
34
34
  "build": "npm run clean && npm run batch",
35
35
  "build-debug": "npm run clean && npm run batch-debug",
36
36
  "watch": "npm run clean && npm run batch && npm run incremental",
37
- "watch-debug": "npm run clean && npm run batch-debug && npm run incremental-debug",
38
- "test": "decaf test -f"
37
+ "watch-debug": "npm run clean && npm run batch-debug && npm run incremental-debug"
39
38
  },
40
39
  "files": [
41
40
  "src",
@@ -73,7 +73,7 @@ export default class FileContext extends Context {
73
73
  return string;
74
74
  }
75
75
 
76
- break(node, breakPoint, continuation) {
76
+ break(node, breakPoint, back, forward) {
77
77
  const filePath = this.filePath,
78
78
  releaseContext = this.getReleaseContext();
79
79
 
@@ -81,34 +81,26 @@ export default class FileContext extends Context {
81
81
  breakPoint = BreakPoint.fromFilePathNodeAndTokens(filePath, node, this.tokens);
82
82
  }
83
83
 
84
- return releaseContext.break(breakPoint, continuation);
84
+ return releaseContext.break(breakPoint, back, forward);
85
85
  }
86
86
 
87
- verify(continuation) {
88
- let verifies = false;
89
-
87
+ verify(back, forward) {
90
88
  if (this.node === null) {
91
89
  this.warning(`Unable to verify the '${this.filePath}' file because it cannot be parsed.`);
92
90
 
93
- return continuation(verifies);
91
+ return back();
94
92
  }
95
93
 
96
94
  this.debug(`Verifying the '${this.filePath}' file...`);
97
95
 
98
- return this.verifyFile((fileVerifies) => {
99
- if (fileVerifies) {
100
- verifies = true;
101
- }
96
+ this.clear();
102
97
 
103
- verifies ?
104
- this.complete() :
105
- this.clear();
98
+ return this.verifyFile(back, () => {
99
+ this.complete();
106
100
 
107
- if (verifies) {
108
- this.info(`...verified the '${this.filePath}' file.`);
109
- }
101
+ this.info(`...verified the '${this.filePath}' file.`);
110
102
 
111
- return continuation(verifies);
103
+ return forward();
112
104
  });
113
105
  }
114
106
 
@@ -464,7 +464,7 @@ export default class ReleaseContext {
464
464
  this.initialised = true;
465
465
  }
466
466
 
467
- break(breakPoint, continuation) {
467
+ break(breakPoint, back, forward) {
468
468
  const level = TRACE_LEVEL,
469
469
  message = BREAK_MESSAGE,
470
470
  filePath = breakPoint.getFilePath(),
@@ -474,32 +474,26 @@ export default class ReleaseContext {
474
474
 
475
475
  const context = this; ///
476
476
 
477
- return this.callback(breakPoint, context, continuation);
477
+ return this.callback(breakPoint, context, back, forward);
478
478
  }
479
479
 
480
- verify(contiunation) {
481
- let verifies = false;
482
-
480
+ verify(back, forward) {
483
481
  const typePrefixes = this.getTypePrefixes(),
484
482
  releaseContext = this, ///
485
483
  typePrefixesVerify = verifyTypePrefixes(typePrefixes, releaseContext);
486
484
 
487
485
  if (!typePrefixesVerify) {
488
- return contiunation(verifies);
486
+ return back();
489
487
  }
490
488
 
491
- const verifiedFileContexts = [];
492
-
493
- return verifyFileContexts(this.fileContexts, verifiedFileContexts, (fileContextsVerify) => {
494
- if (fileContextsVerify) {
495
- verifies = true;
489
+ const fileContexts = [];
496
490
 
497
- this.verifies = verifies;
491
+ return verifyFileContexts(this.fileContexts, fileContexts, back, () => {
492
+ this.fileContexts = fileContexts; ///
498
493
 
499
- this.fileContexts = verifiedFileContexts; ///
500
- }
494
+ this.verifies = true;
501
495
 
502
- return contiunation(verifies);
496
+ return forward();
503
497
  });
504
498
  }
505
499
 
package/src/element.js CHANGED
@@ -50,11 +50,11 @@ export default class Element {
50
50
  this.context = context;
51
51
  }
52
52
 
53
- break(context, continuation) {
53
+ break(context, back, forward) {
54
54
  return context.break(this.node, this.breakPoint, (breakPoint) => {
55
55
  this.breakPoint = breakPoint;
56
56
 
57
- return continuation();
57
+ return forward();
58
58
  });
59
59
  }
60
60
 
@@ -5,62 +5,54 @@ import { nonTerminalNodeQuery } from "../utilities/pass";
5
5
 
6
6
  export default class ContinuationPass {
7
7
  run(node, ...remainingArguments) {
8
- const continuation = remainingArguments.pop();
8
+ const forward = remainingArguments.pop(),
9
+ back = remainingArguments.pop();
9
10
 
10
- return this.visitNode(node, ...remainingArguments, continuation);
11
+ return this.visitNode(node, ...remainingArguments, back, forward);
11
12
  }
12
13
 
13
14
  descend(childNodes, ...remainingArguments) {
14
- const continuation = remainingArguments.pop();
15
+ const forward = remainingArguments.pop(),
16
+ back = remainingArguments.pop();
15
17
 
16
18
  return every(childNodes, (childNode, ...remainingArguments) => {
17
- const continuation = remainingArguments.pop(),
19
+ const forward = remainingArguments.pop(),
20
+ back = remainingArguments.pop(),
18
21
  node = childNode; ///
19
22
 
20
- return this.visitNode(node, ...remainingArguments, continuation);
21
- }, ...remainingArguments, continuation);
23
+ return this.visitNode(node, ...remainingArguments, back, forward);
24
+ }, ...remainingArguments, back, forward);
22
25
  }
23
26
 
24
27
  visitNode(node, ...remainingArguments) {
25
- const continuation = remainingArguments.pop(),
28
+ const forward = remainingArguments.pop(),
29
+ back = remainingArguments.pop(),
26
30
  nodeTerminalNode = node.isTerminalNode();
27
31
 
28
32
  if (nodeTerminalNode) {
29
33
  const terminalNode = node; ///
30
34
 
31
- return this.visitTerminalNode(terminalNode, ...remainingArguments, continuation);
35
+ return this.visitTerminalNode(terminalNode, ...remainingArguments, back, forward);
32
36
  }
33
37
 
34
38
  const nonTerminalNode = node; ///
35
39
 
36
- return this.visitNonTerminalNode(nonTerminalNode, ...remainingArguments, continuation);
40
+ return this.visitNonTerminalNode(nonTerminalNode, ...remainingArguments, back, forward);
37
41
  }
38
42
 
39
43
  visitTerminalNode(terminalNode, ...remainingArguments) {
40
- const visited = true,
41
- continuation = remainingArguments.pop();
44
+ const forward = remainingArguments.pop(),
45
+ back = remainingArguments.pop();
42
46
 
43
- return continuation(visited, ...remainingArguments);
47
+ return forward(...remainingArguments);
44
48
  }
45
49
 
46
50
  visitNonTerminalNode(nonTerminalNode, ...remainingArguments) {
47
- const continuation = remainingArguments.pop();
51
+ const forward = remainingArguments.pop(),
52
+ back = remainingArguments.pop();
48
53
 
49
54
  let { maps } = this.constructor;
50
55
 
51
- maps = [ ///
52
- ...maps,
53
- {
54
- nodeQuery: nonTerminalNodeQuery,
55
- run: (nonTerminalNode, ...remainingArguments) => {
56
- const continuation = remainingArguments.pop(),
57
- childNodes = nonTerminalNode.getChildNodes();
58
-
59
- return this.descend(childNodes, ...remainingArguments, continuation);
60
- }
61
- }
62
- ];
63
-
64
56
  let node;
65
57
 
66
58
  const map = maps.find((map) => {
@@ -73,14 +65,22 @@ export default class ContinuationPass {
73
65
  }
74
66
  }) || null;
75
67
 
76
- if (map === null) {
77
- const visited = false;
68
+ if (map !== null) {
69
+ const { run } = map;
70
+
71
+ return run(node, ...remainingArguments, back, forward);
72
+ }
73
+
74
+ node = nonTerminalNode; ///
75
+
76
+ nonTerminalNode = nonTerminalNodeQuery(node);
78
77
 
79
- return continuation(visited, ...remainingArguments);
78
+ if (nonTerminalNode === null) {
79
+ return back();
80
80
  }
81
81
 
82
- const { run } = map;
82
+ const childNodes = nonTerminalNode.getChildNodes();
83
83
 
84
- return run(node, ...remainingArguments, continuation);
84
+ return this.descend(childNodes, ...remainingArguments, back, forward);
85
85
  }
86
86
  }