@mnemonica/tactica 0.3.11 → 0.3.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/writer.js CHANGED
@@ -40,8 +40,50 @@ const path = __importStar(require("path"));
40
40
  * Writes generated types to file system
41
41
  */
42
42
  class TypesWriter {
43
- constructor(outputDir = '.tactica') {
43
+ constructor(outputDir = '.tactica', projectRoot) {
44
44
  this.outputDir = outputDir;
45
+ this.projectRoot = projectRoot === undefined
46
+ ? undefined
47
+ : path.resolve(projectRoot);
48
+ }
49
+ /**
50
+ * Rewrite every project-rooted absolute path in the payload to a
51
+ * project-relative one (values AND object keys), so .tactica output
52
+ * stays portable across machines and checkouts. Paths outside the
53
+ * project root keep their absolute form — they genuinely are
54
+ * machine-specific. Consumers resolve relative entries against the
55
+ * directory that holds .tactica.
56
+ */
57
+ relativize(payload) {
58
+ if (this.projectRoot === undefined) {
59
+ return payload;
60
+ }
61
+ const prefix = this.projectRoot + path.sep;
62
+ const walk = (input) => {
63
+ if (typeof input === 'string') {
64
+ if (!input.startsWith(prefix)) {
65
+ return input;
66
+ }
67
+ const relative = input.slice(prefix.length);
68
+ const walked = relative.split(path.sep).join('/');
69
+ return walked;
70
+ }
71
+ if (Array.isArray(input)) {
72
+ const walked = input.map(walk);
73
+ return walked;
74
+ }
75
+ if (input !== null && typeof input === 'object') {
76
+ const walked = {};
77
+ for (const [key, value] of Object.entries(input)) {
78
+ const walkedKey = walk(key);
79
+ walked[walkedKey] = walk(value);
80
+ }
81
+ return walked;
82
+ }
83
+ return input;
84
+ };
85
+ const result = walk(payload);
86
+ return result;
45
87
  }
46
88
  /**
47
89
  * Legacy write method - delegates to writeTypesFile
@@ -112,11 +154,11 @@ class TypesWriter {
112
154
  for (const [key, value] of definitions) {
113
155
  definitionsObj[key] = value;
114
156
  }
115
- const json = {
157
+ const json = this.relativize({
116
158
  version: '1.0',
117
159
  generatedAt: new Date().toISOString(),
118
160
  definitions: definitionsObj,
119
- };
161
+ });
120
162
  fs.writeFileSync(filePath, JSON.stringify(json, null, 2), 'utf-8');
121
163
  return filePath;
122
164
  }
@@ -131,11 +173,11 @@ class TypesWriter {
131
173
  for (const [key, value] of usages) {
132
174
  usagesObj[key] = value;
133
175
  }
134
- const json = {
176
+ const json = this.relativize({
135
177
  version: '1.0',
136
178
  generatedAt: new Date().toISOString(),
137
179
  usages: usagesObj,
138
- };
180
+ });
139
181
  fs.writeFileSync(filePath, JSON.stringify(json, null, 2), 'utf-8');
140
182
  return filePath;
141
183
  }
@@ -150,11 +192,11 @@ class TypesWriter {
150
192
  for (const [key, value] of eds) {
151
193
  edsObj[key] = value;
152
194
  }
153
- const json = {
195
+ const json = this.relativize({
154
196
  version: '1.0',
155
197
  generatedAt: new Date().toISOString(),
156
198
  eds: edsObj,
157
- };
199
+ });
158
200
  fs.writeFileSync(filePath, JSON.stringify(json, null, 2), 'utf-8');
159
201
  return filePath;
160
202
  }
@@ -173,7 +215,8 @@ class TypesWriter {
173
215
  if (creationGraph) {
174
216
  json.creationGraph = creationGraph;
175
217
  }
176
- fs.writeFileSync(filePath, JSON.stringify(json, null, 2), 'utf-8');
218
+ const relativized = this.relativize(json);
219
+ fs.writeFileSync(filePath, JSON.stringify(relativized, null, 2), 'utf-8');
177
220
  return filePath;
178
221
  }
179
222
  /**
@@ -187,11 +230,11 @@ class TypesWriter {
187
230
  for (const [key, value] of flow) {
188
231
  flowObj[key] = value;
189
232
  }
190
- const json = {
233
+ const json = this.relativize({
191
234
  version: '1.0',
192
235
  generatedAt: new Date().toISOString(),
193
236
  flow: flowObj,
194
- };
237
+ });
195
238
  fs.writeFileSync(filePath, JSON.stringify(json, null, 2), 'utf-8');
196
239
  return filePath;
197
240
  }
@@ -206,13 +249,13 @@ class TypesWriter {
206
249
  for (const [key, value] of graph.modules) {
207
250
  modulesObj[key] = value;
208
251
  }
209
- const json = {
252
+ const json = this.relativize({
210
253
  version: '1.0',
211
254
  generatedAt: new Date().toISOString(),
212
255
  modules: modulesObj,
213
256
  edges: graph.edges,
214
257
  cycles: graph.cycles,
215
- };
258
+ });
216
259
  fs.writeFileSync(filePath, JSON.stringify(json, null, 2), 'utf-8');
217
260
  return filePath;
218
261
  }
@@ -228,12 +271,12 @@ class TypesWriter {
228
271
  scopesObj[key] = value;
229
272
  }
230
273
  const variables = Array.from(analysis.variables.values());
231
- const json = {
274
+ const json = this.relativize({
232
275
  version: '1.0',
233
276
  generatedAt: new Date().toISOString(),
234
277
  scopes: scopesObj,
235
278
  variables,
236
- };
279
+ });
237
280
  fs.writeFileSync(filePath, JSON.stringify(json, null, 2), 'utf-8');
238
281
  return filePath;
239
282
  }
@@ -243,14 +286,14 @@ class TypesWriter {
243
286
  writeHierarchyFile(roots) {
244
287
  this.ensureDirectory();
245
288
  const filePath = path.join(this.outputDir, 'hierarchy.json');
246
- const json = {
289
+ const json = this.relativize({
247
290
  version: '1.0',
248
291
  generatedAt: new Date().toISOString(),
249
292
  roots,
250
- };
293
+ });
251
294
  fs.writeFileSync(filePath, JSON.stringify(json, null, 2), 'utf-8');
252
295
  return filePath;
253
296
  }
254
297
  }
255
298
  exports.TypesWriter = TypesWriter;
256
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JpdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3dyaXRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUViLHVDQUF5QjtBQUN6QiwyQ0FBNkI7QUFNN0I7O0dBRUc7QUFDSCxNQUFhLFdBQVc7SUFHdkIsWUFBYSxTQUFTLEdBQUcsVUFBVTtRQUNsQyxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztJQUM1QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUUsU0FBeUI7UUFDL0IsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7T0FFRztJQUNILGNBQWMsQ0FBRSxTQUF5QjtRQUN4QyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdkIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3ZELEVBQUUsQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDdkQsT0FBTyxRQUFRLENBQUM7SUFDakIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsdUJBQXVCLENBQUUsU0FBeUI7UUFDakQsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUN6RCxFQUFFLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZELE9BQU8sUUFBUSxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7T0FFRztJQUNILE9BQU8sQ0FBRSxRQUFnQixFQUFFLE9BQWU7UUFDekMs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V0FBVyxFQUFHLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO1lBQ3RDLE1BQU0sRUFBUSxTQUFTO1lBQ3ZCLFNBQVM7U0FDVCxDQUFDO1FBRUYsRUFBRSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ25FLE9BQU8sUUFBUSxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7T0FFRztJQUNILGtCQUFrQixDQUFFLEtBQXNCO1FBQ3pDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN2QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUU3RCxNQUFNLElBQUksR0FBa0I7WUFDM0IsT0FBTyxFQUFPLEtBQUs7WUFDbkIsV0FBVyxFQUFHLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO1lBQ3RDLEtBQUs7U0FDTCxDQUFDO1FBRUYsRUFBRSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ25FLE9BQU8sUUFBUSxDQUFDO0lBQ2pCLENBQUM7Q0FDRDtBQTNQRCxrQ0EyUEMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQge1xuXHRHZW5lcmF0ZWRUeXBlcywgRGVmaW5pdGlvbkluZm8sIFVzYWdlSW5mbywgRURTSW5mbywgRmxvd0luZm8sIEZsb3dKc29uLCBIaWVyYXJjaHlOb2RlLCBIaWVyYXJjaHlKc29uLFxuXHRJbnN0cnVtZW50YXRpb25Qb2ludCwgSW5zdHJ1bWVudGF0aW9uSnNvbiwgTW9kdWxlR3JhcGgsIE1vZHVsZXNKc29uLCBTY29wZUFuYWx5c2lzLCBTY29wZXNKc29uLCBDcmVhdGlvbkdyYXBoXG59IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIFdyaXRlcyBnZW5lcmF0ZWQgdHlwZXMgdG8gZmlsZSBzeXN0ZW1cbiAqL1xuZXhwb3J0IGNsYXNzIFR5cGVzV3JpdGVyIHtcblx0cHJpdmF0ZSBvdXRwdXREaXI6IHN0cmluZztcblxuXHRjb25zdHJ1Y3RvciAob3V0cHV0RGlyID0gJy50YWN0aWNhJykge1xuXHRcdHRoaXMub3V0cHV0RGlyID0gb3V0cHV0RGlyO1xuXHR9XG5cblx0LyoqXG5cdCAqIExlZ2FjeSB3cml0ZSBtZXRob2QgLSBkZWxlZ2F0ZXMgdG8gd3JpdGVUeXBlc0ZpbGVcblx0ICovXG5cdHdyaXRlIChnZW5lcmF0ZWQ6IEdlbmVyYXRlZFR5cGVzKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy53cml0ZVR5cGVzRmlsZShnZW5lcmF0ZWQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdyaXRlIHR5cGVzLnRzIGZpbGUgKGV4cG9ydGFibGUgdHlwZSBhbGlhc2VzIC0gZGVmYXVsdCBtb2RlKVxuXHQgKi9cblx0d3JpdGVUeXBlc0ZpbGUgKGdlbmVyYXRlZDogR2VuZXJhdGVkVHlwZXMpOiBzdHJpbmcge1xuXHRcdHRoaXMuZW5zdXJlRGlyZWN0b3J5KCk7XG5cdFx0Y29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4odGhpcy5vdXRwdXREaXIsICd0eXBlcy50cycpO1xuXHRcdGZzLndyaXRlRmlsZVN5bmMoZmlsZVBhdGgsIGdlbmVyYXRlZC5jb250ZW50LCAndXRmLTgnKTtcblx0XHRyZXR1cm4gZmlsZVBhdGg7XG5cdH1cblxuXHQvKipcblx0ICogV3JpdGUgZ2xvYmFsIGF1Z21lbnRhdGlvbiBmaWxlIChpbmRleC5kLnRzIC0gbW9kdWxlIGF1Z21lbnRhdGlvbiBtb2RlKVxuXHQgKi9cblx0d3JpdGVHbG9iYWxBdWdtZW50YXRpb24gKGdlbmVyYXRlZDogR2VuZXJhdGVkVHlwZXMpOiBzdHJpbmcge1xuXHRcdHRoaXMuZW5zdXJlRGlyZWN0b3J5KCk7XG5cdFx0Y29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4odGhpcy5vdXRwdXREaXIsICdpbmRleC5kLnRzJyk7XG5cdFx0ZnMud3JpdGVGaWxlU3luYyhmaWxlUGF0aCwgZ2VuZXJhdGVkLmNvbnRlbnQsICd1dGYtOCcpO1xuXHRcdHJldHVybiBmaWxlUGF0aDtcblx0fVxuXG5cdC8qKlxuXHQgKiBXcml0ZSB0byBhIGN1c3RvbSBmaWxlbmFtZVxuXHQgKi9cblx0d3JpdGVUbyAoZmlsZW5hbWU6IHN0cmluZywgY29udGVudDogc3RyaW5nKTogc3RyaW5nIHtcblx0XHR0aGlzLmVuc3VyZURpcmVjdG9yeSgpO1xuXHRcdGNvbnN0IGZpbGVQYXRoID0gcGF0aC5qb2luKHRoaXMub3V0cHV0RGlyLCBmaWxlbmFtZSk7XG5cdFx0ZnMud3JpdGVGaWxlU3luYyhmaWxlUGF0aCwgY29udGVudCwgJ3V0Zi04Jyk7XG5cdFx0cmV0dXJuIGZpbGVQYXRoO1xuXHR9XG5cblx0LyoqXG5cdCAqIEVuc3VyZSBvdXRwdXQgZGlyZWN0b3J5IGV4aXN0c1xuXHQgKi9cblx0cHJpdmF0ZSBlbnN1cmVEaXJlY3RvcnkgKCk6IHZvaWQge1xuXHRcdGlmICghZnMuZXhpc3RzU3luYyh0aGlzLm91dHB1dERpcikpIHtcblx0XHRcdGZzLm1rZGlyU3luYyh0aGlzLm91dHB1dERpciwgeyByZWN1cnNpdmUgOiB0cnVlIH0pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDbGVhbiB0aGUgb3V0cHV0IGRpcmVjdG9yeVxuXHQgKi9cblx0Y2xlYW4gKCk6IHZvaWQge1xuXHRcdGlmIChmcy5leGlzdHNTeW5jKHRoaXMub3V0cHV0RGlyKSkge1xuXHRcdFx0Y29uc3QgZmlsZXMgPSBmcy5yZWFkZGlyU3luYyh0aGlzLm91dHB1dERpcik7XG5cdFx0XHRmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcblx0XHRcdFx0ZnMudW5saW5rU3luYyhwYXRoLmpvaW4odGhpcy5vdXRwdXREaXIsIGZpbGUpKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0IG91dHB1dCBkaXJlY3Rvcnlcblx0ICovXG5cdGdldE91dHB1dERpciAoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5vdXRwdXREaXI7XG5cdH1cblxuXHQvKipcblx0ICogV3JpdGUgZGVmaW5pdGlvbnMuanNvbiBmaWxlXG5cdCAqL1xuXHR3cml0ZURlZmluaXRpb25zRmlsZSAoZGVmaW5pdGlvbnM6IE1hcDxzdHJpbmcsIERlZmluaXRpb25JbmZvPik6IHN0cmluZyB7XG5cdFx0dGhpcy5lbnN1cmVEaXJlY3RvcnkoKTtcblx0XHRjb25zdCBmaWxlUGF0aCA9IHBhdGguam9pbih0aGlzLm91dHB1dERpciwgJ2RlZmluaXRpb25zLmpzb24nKTtcblxuXHRcdC8vIENvbnZlcnQgTWFwIHRvIHBsYWluIG9iamVjdFxuXHRcdGNvbnN0IGRlZmluaXRpb25zT2JqOiBSZWNvcmQ8c3RyaW5nLCBEZWZpbml0aW9uSW5mbz4gPSB7fTtcblx0XHRmb3IgKGNvbnN0IFsga2V5LCB2YWx1ZSBdIG9mIGRlZmluaXRpb25zKSB7XG5cdFx0XHRkZWZpbml0aW9uc09ialsga2V5IF0gPSB2YWx1ZTtcblx0XHR9XG5cblx0XHRjb25zdCBqc29uID0ge1xuXHRcdFx0dmVyc2lvbiAgICAgOiAnMS4wJyxcblx0XHRcdGdlbmVyYXRlZEF0IDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuXHRcdFx0ZGVmaW5pdGlvbnMgOiBkZWZpbml0aW9uc09iaixcblx0XHR9O1xuXG5cdFx0ZnMud3JpdGVGaWxlU3luYyhmaWxlUGF0aCwgSlNPTi5zdHJpbmdpZnkoanNvbiwgbnVsbCwgMiksICd1dGYtOCcpO1xuXHRcdHJldHVybiBmaWxlUGF0aDtcblx0fVxuXG5cdC8qKlxuXHQgKiBXcml0ZSB1c2FnZXMuanNvbiBmaWxlXG5cdCAqL1xuXHR3cml0ZVVzYWdlc0ZpbGUgKHVzYWdlczogTWFwPHN0cmluZywgVXNhZ2VJbmZvW10+KTogc3RyaW5nIHtcblx0XHR0aGlzLmVuc3VyZURpcmVjdG9yeSgpO1xuXHRcdGNvbnN0IGZpbGVQYXRoID0gcGF0aC5qb2luKHRoaXMub3V0cHV0RGlyLCAndXNhZ2VzLmpzb24nKTtcblxuXHRcdC8vIENvbnZlcnQgTWFwIHRvIHBsYWluIG9iamVjdFxuXHRcdGNvbnN0IHVzYWdlc09iajogUmVjb3JkPHN0cmluZywgVXNhZ2VJbmZvW10+ID0ge307XG5cdFx0Zm9yIChjb25zdCBbIGtleSwgdmFsdWUgXSBvZiB1c2FnZXMpIHtcblx0XHRcdHVzYWdlc09ialsga2V5IF0gPSB2YWx1ZTtcblx0XHR9XG5cblx0XHRjb25zdCBqc29uID0ge1xuXHRcdFx0dmVyc2lvbiAgICAgOiAnMS4wJyxcblx0XHRcdGdlbmVyYXRlZEF0IDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuXHRcdFx0dXNhZ2VzICAgICAgOiB1c2FnZXNPYmosXG5cdFx0fTtcblxuXHRcdGZzLndyaXRlRmlsZVN5bmMoZmlsZVBhdGgsIEpTT04uc3RyaW5naWZ5KGpzb24sIG51bGwsIDIpLCAndXRmLTgnKTtcblx0XHRyZXR1cm4gZmlsZVBhdGg7XG5cdH1cblxuXHQvKipcblx0ICogV3JpdGUgZWRzLmpzb24gZmlsZVxuXHQgKi9cblx0d3JpdGVFRFNGaWxlIChlZHM6IE1hcDxzdHJpbmcsIEVEU0luZm9bXT4pOiBzdHJpbmcge1xuXHRcdHRoaXMuZW5zdXJlRGlyZWN0b3J5KCk7XG5cdFx0Y29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4odGhpcy5vdXRwdXREaXIsICdlZHMuanNvbicpO1xuXG5cdFx0Ly8gQ29udmVydCBNYXAgdG8gcGxhaW4gb2JqZWN0XG5cdFx0Y29uc3QgZWRzT2JqOiBSZWNvcmQ8c3RyaW5nLCBFRFNJbmZvW10+ID0ge307XG5cdFx0Zm9yIChjb25zdCBbIGtleSwgdmFsdWUgXSBvZiBlZHMpIHtcblx0XHRcdGVkc09ialsga2V5IF0gPSB2YWx1ZTtcblx0XHR9XG5cblx0XHRjb25zdCBqc29uID0ge1xuXHRcdFx0dmVyc2lvbiAgICAgOiAnMS4wJyxcblx0XHRcdGdlbmVyYXRlZEF0IDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuXHRcdFx0ZWRzICAgICAgICAgOiBlZHNPYmosXG5cdFx0fTtcblxuXHRcdGZzLndyaXRlRmlsZVN5bmMoZmlsZVBhdGgsIEpTT04uc3RyaW5naWZ5KGpzb24sIG51bGwsIDIpLCAndXRmLTgnKTtcblx0XHRyZXR1cm4gZmlsZVBhdGg7XG5cdH1cblxuXHQvKipcblx0ICogV3JpdGUgaW5zdHJ1bWVudGF0aW9uLmpzb24gZmlsZSAodjI6IGFkZHMgdGhlIGNyZWF0aW9uR3JhcGgga2V5IHdoZW5cblx0ICogdGhlIGNhbGxlciBwYXNzZXMgY3JlYXRpb24tZ3JhcGggZGF0YSDigJQgdGhlIENMSSBhbHdheXMgZG9lcylcblx0ICovXG5cdHdyaXRlSW5zdHJ1bWVudGF0aW9uRmlsZSAocG9pbnRzOiBJbnN0cnVtZW50YXRpb25Qb2ludFtdLCBjcmVhdGlvbkdyYXBoPzogQ3JlYXRpb25HcmFwaCk6IHN0cmluZyB7XG5cdFx0dGhpcy5lbnN1cmVEaXJlY3RvcnkoKTtcblx0XHRjb25zdCBmaWxlUGF0aCA9IHBhdGguam9pbih0aGlzLm91dHB1dERpciwgJ2luc3RydW1lbnRhdGlvbi5qc29uJyk7XG5cblx0XHRjb25zdCBqc29uOiBJbnN0cnVtZW50YXRpb25Kc29uID0ge1xuXHRcdFx0dmVyc2lvbiAgICAgOiAyLFxuXHRcdFx0Z2VuZXJhdGVkQXQgOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG5cdFx0XHRwb2ludHMsXG5cdFx0fTtcblx0XHRpZiAoY3JlYXRpb25HcmFwaCkge1xuXHRcdFx0anNvbi5jcmVhdGlvbkdyYXBoID0gY3JlYXRpb25HcmFwaDtcblx0XHR9XG5cblx0XHRmcy53cml0ZUZpbGVTeW5jKGZpbGVQYXRoLCBKU09OLnN0cmluZ2lmeShqc29uLCBudWxsLCAyKSwgJ3V0Zi04Jyk7XG5cdFx0cmV0dXJuIGZpbGVQYXRoO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdyaXRlIGZsb3cuanNvbiBmaWxlXG5cdCAqL1xuXHR3cml0ZUZsb3dGaWxlIChmbG93OiBNYXA8c3RyaW5nLCBGbG93SW5mb1tdPik6IHN0cmluZyB7XG5cdFx0dGhpcy5lbnN1cmVEaXJlY3RvcnkoKTtcblx0XHRjb25zdCBmaWxlUGF0aCA9IHBhdGguam9pbih0aGlzLm91dHB1dERpciwgJ2Zsb3cuanNvbicpO1xuXG5cdFx0Ly8gQ29udmVydCBNYXAgdG8gcGxhaW4gb2JqZWN0XG5cdFx0Y29uc3QgZmxvd09iajogUmVjb3JkPHN0cmluZywgRmxvd0luZm9bXT4gPSB7fTtcblx0XHRmb3IgKGNvbnN0IFsga2V5LCB2YWx1ZSBdIG9mIGZsb3cpIHtcblx0XHRcdGZsb3dPYmpbIGtleSBdID0gdmFsdWU7XG5cdFx0fVxuXG5cdFx0Y29uc3QganNvbjogRmxvd0pzb24gPSB7XG5cdFx0XHR2ZXJzaW9uICAgICA6ICcxLjAnLFxuXHRcdFx0Z2VuZXJhdGVkQXQgOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG5cdFx0XHRmbG93ICAgICAgICA6IGZsb3dPYmosXG5cdFx0fTtcblxuXHRcdGZzLndyaXRlRmlsZVN5bmMoZmlsZVBhdGgsIEpTT04uc3RyaW5naWZ5KGpzb24sIG51bGwsIDIpLCAndXRmLTgnKTtcblx0XHRyZXR1cm4gZmlsZVBhdGg7XG5cdH1cblxuXHQvKipcblx0ICogV3JpdGUgbW9kdWxlcy5qc29uIGZpbGVcblx0ICovXG5cdHdyaXRlTW9kdWxlc0ZpbGUgKGdyYXBoOiBNb2R1bGVHcmFwaCk6IHN0cmluZyB7XG5cdFx0dGhpcy5lbnN1cmVEaXJlY3RvcnkoKTtcblx0XHRjb25zdCBmaWxlUGF0aCA9IHBhdGguam9pbih0aGlzLm91dHB1dERpciwgJ21vZHVsZXMuanNvbicpO1xuXG5cdFx0Ly8gQ29udmVydCBNYXAgdG8gcGxhaW4gb2JqZWN0XG5cdFx0Y29uc3QgbW9kdWxlc09iajogTW9kdWxlc0pzb25bICdtb2R1bGVzJyBdID0ge307XG5cdFx0Zm9yIChjb25zdCBbIGtleSwgdmFsdWUgXSBvZiBncmFwaC5tb2R1bGVzKSB7XG5cdFx0XHRtb2R1bGVzT2JqWyBrZXkgXSA9IHZhbHVlO1xuXHRcdH1cblxuXHRcdGNvbnN0IGpzb246IE1vZHVsZXNKc29uID0ge1xuXHRcdFx0dmVyc2lvbiAgICAgOiAnMS4wJyxcblx0XHRcdGdlbmVyYXRlZEF0IDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuXHRcdFx0bW9kdWxlcyAgICAgOiBtb2R1bGVzT2JqLFxuXHRcdFx0ZWRnZXMgICAgICAgOiBncmFwaC5lZGdlcyxcblx0XHRcdGN5Y2xlcyAgICAgIDogZ3JhcGguY3ljbGVzLFxuXHRcdH07XG5cblx0XHRmcy53cml0ZUZpbGVTeW5jKGZpbGVQYXRoLCBKU09OLnN0cmluZ2lmeShqc29uLCBudWxsLCAyKSwgJ3V0Zi04Jyk7XG5cdFx0cmV0dXJuIGZpbGVQYXRoO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdyaXRlIHNjb3Blcy5qc29uIGZpbGVcblx0ICovXG5cdHdyaXRlU2NvcGVzRmlsZSAoYW5hbHlzaXM6IFNjb3BlQW5hbHlzaXMpOiBzdHJpbmcge1xuXHRcdHRoaXMuZW5zdXJlRGlyZWN0b3J5KCk7XG5cdFx0Y29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4odGhpcy5vdXRwdXREaXIsICdzY29wZXMuanNvbicpO1xuXG5cdFx0Ly8gQ29udmVydCBNYXBzIHRvIHBsYWluIHNoYXBlc1xuXHRcdGNvbnN0IHNjb3Blc09iajogU2NvcGVzSnNvblsgJ3Njb3BlcycgXSA9IHt9O1xuXHRcdGZvciAoY29uc3QgWyBrZXksIHZhbHVlIF0gb2YgYW5hbHlzaXMuc2NvcGVzKSB7XG5cdFx0XHRzY29wZXNPYmpbIGtleSBdID0gdmFsdWU7XG5cdFx0fVxuXHRcdGNvbnN0IHZhcmlhYmxlcyA9IEFycmF5LmZyb20oYW5hbHlzaXMudmFyaWFibGVzLnZhbHVlcygpKTtcblxuXHRcdGNvbnN0IGpzb246IFNjb3Blc0pzb24gPSB7XG5cdFx0XHR2ZXJzaW9uICAgICA6ICcxLjAnLFxuXHRcdFx0Z2VuZXJhdGVkQXQgOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG5cdFx0XHRzY29wZXMgICAgICA6IHNjb3Blc09iaixcblx0XHRcdHZhcmlhYmxlcyxcblx0XHR9O1xuXG5cdFx0ZnMud3JpdGVGaWxlU3luYyhmaWxlUGF0aCwgSlNPTi5zdHJpbmdpZnkoanNvbiwgbnVsbCwgMiksICd1dGYtOCcpO1xuXHRcdHJldHVybiBmaWxlUGF0aDtcblx0fVxuXG5cdC8qKlxuXHQgKiBXcml0ZSBoaWVyYXJjaHkuanNvbiBmaWxlXG5cdCAqL1xuXHR3cml0ZUhpZXJhcmNoeUZpbGUgKHJvb3RzOiBIaWVyYXJjaHlOb2RlW10pOiBzdHJpbmcge1xuXHRcdHRoaXMuZW5zdXJlRGlyZWN0b3J5KCk7XG5cdFx0Y29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4odGhpcy5vdXRwdXREaXIsICdoaWVyYXJjaHkuanNvbicpO1xuXG5cdFx0Y29uc3QganNvbjogSGllcmFyY2h5SnNvbiA9IHtcblx0XHRcdHZlcnNpb24gICAgIDogJzEuMCcsXG5cdFx0XHRnZW5lcmF0ZWRBdCA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcblx0XHRcdHJvb3RzLFxuXHRcdH07XG5cblx0XHRmcy53cml0ZUZpbGVTeW5jKGZpbGVQYXRoLCBKU09OLnN0cmluZ2lmeShqc29uLCBudWxsLCAyKSwgJ3V0Zi04Jyk7XG5cdFx0cmV0dXJuIGZpbGVQYXRoO1xuXHR9XG59XG4iXX0=
299
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JpdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3dyaXRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUViLHVDQUF5QjtBQUN6QiwyQ0FBNkI7QUFNN0I7O0dBRUc7QUFDSCxNQUFhLFdBQVc7SUFJdkIsWUFBYSxTQUFTLEdBQUcsVUFBVSxFQUFFLFdBQW9CO1FBQ3hELElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQzNCLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxLQUFLLFNBQVM7WUFDM0MsQ0FBQyxDQUFDLFNBQVM7WUFDWCxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNLLFVBQVUsQ0FBSyxPQUFVO1FBQ2hDLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNwQyxPQUFPLE9BQU8sQ0FBQztRQUNoQixDQUFDO1FBQ0QsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO1FBQzNDLE1BQU0sSUFBSSxHQUFHLENBQUMsS0FBYyxFQUFXLEVBQUU7WUFDeEMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDL0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztvQkFDL0IsT0FBTyxLQUFLLENBQUM7Z0JBQ2QsQ0FBQztnQkFDRCxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDNUMsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxD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QUMsQ0FBQztRQUU3RCxNQUFNLElBQUksR0FBa0IsSUFBSSxDQUFDLFVBQVUsQ0FBQztZQUMzQyxPQUFPLEVBQU8sS0FBSztZQUNuQixXQUFXLEVBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7WUFDdEMsS0FBSztTQUNMLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNuRSxPQUFPLFFBQVEsQ0FBQztJQUNqQixDQUFDO0NBQ0Q7QUF4U0Qsa0NBd1NDIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHtcblx0R2VuZXJhdGVkVHlwZXMsIERlZmluaXRpb25JbmZvLCBVc2FnZUluZm8sIEVEU0luZm8sIEZsb3dJbmZvLCBGbG93SnNvbiwgSGllcmFyY2h5Tm9kZSwgSGllcmFyY2h5SnNvbixcblx0SW5zdHJ1bWVudGF0aW9uUG9pbnQsIEluc3RydW1lbnRhdGlvbkpzb24sIE1vZHVsZUdyYXBoLCBNb2R1bGVzSnNvbiwgU2NvcGVBbmFseXNpcywgU2NvcGVzSnNvbiwgQ3JlYXRpb25HcmFwaFxufSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiBXcml0ZXMgZ2VuZXJhdGVkIHR5cGVzIHRvIGZpbGUgc3lzdGVtXG4gKi9cbmV4cG9ydCBjbGFzcyBUeXBlc1dyaXRlciB7XG5cdHByaXZhdGUgb3V0cHV0RGlyOiBzdHJpbmc7XG5cdHByaXZhdGUgcHJvamVjdFJvb3Q/OiBzdHJpbmc7XG5cblx0Y29uc3RydWN0b3IgKG91dHB1dERpciA9ICcudGFjdGljYScsIHByb2plY3RSb290Pzogc3RyaW5nKSB7XG5cdFx0dGhpcy5vdXRwdXREaXIgPSBvdXRwdXREaXI7XG5cdFx0dGhpcy5wcm9qZWN0Um9vdCA9IHByb2plY3RSb290ID09PSB1bmRlZmluZWRcblx0XHRcdD8gdW5kZWZpbmVkXG5cdFx0XHQ6IHBhdGgucmVzb2x2ZShwcm9qZWN0Um9vdCk7XG5cdH1cblxuXHQvKipcblx0ICogUmV3cml0ZSBldmVyeSBwcm9qZWN0LXJvb3RlZCBhYnNvbHV0ZSBwYXRoIGluIHRoZSBwYXlsb2FkIHRvIGFcblx0ICogcHJvamVjdC1yZWxhdGl2ZSBvbmUgKHZhbHVlcyBBTkQgb2JqZWN0IGtleXMpLCBzbyAudGFjdGljYSBvdXRwdXRcblx0ICogc3RheXMgcG9ydGFibGUgYWNyb3NzIG1hY2hpbmVzIGFuZCBjaGVja291dHMuIFBhdGhzIG91dHNpZGUgdGhlXG5cdCAqIHByb2plY3Qgcm9vdCBrZWVwIHRoZWlyIGFic29sdXRlIGZvcm0g4oCUIHRoZXkgZ2VudWluZWx5IGFyZVxuXHQgKiBtYWNoaW5lLXNwZWNpZmljLiBDb25zdW1lcnMgcmVzb2x2ZSByZWxhdGl2ZSBlbnRyaWVzIGFnYWluc3QgdGhlXG5cdCAqIGRpcmVjdG9yeSB0aGF0IGhvbGRzIC50YWN0aWNhLlxuXHQgKi9cblx0cHJpdmF0ZSByZWxhdGl2aXplPFQ+IChwYXlsb2FkOiBUKTogVCB7XG5cdFx0aWYgKHRoaXMucHJvamVjdFJvb3QgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuIHBheWxvYWQ7XG5cdFx0fVxuXHRcdGNvbnN0IHByZWZpeCA9IHRoaXMucHJvamVjdFJvb3QgKyBwYXRoLnNlcDtcblx0XHRjb25zdCB3YWxrID0gKGlucHV0OiB1bmtub3duKTogdW5rbm93biA9PiB7XG5cdFx0XHRpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuXHRcdFx0XHRpZiAoIWlucHV0LnN0YXJ0c1dpdGgocHJlZml4KSkge1xuXHRcdFx0XHRcdHJldHVybiBpbnB1dDtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCByZWxhdGl2ZSA9IGlucHV0LnNsaWNlKHByZWZpeC5sZW5ndGgpO1xuXHRcdFx0XHRjb25zdCB3YWxrZWQgPSByZWxhdGl2ZS5zcGxpdChwYXRoLnNlcCkuam9pbignLycpO1xuXHRcdFx0XHRyZXR1cm4gd2Fsa2VkO1xuXHRcdFx0fVxuXHRcdFx0aWYgKEFycmF5LmlzQXJyYXkoaW5wdXQpKSB7XG5cdFx0XHRcdGNvbnN0IHdhbGtlZCA9IGlucHV0Lm1hcCh3YWxrKTtcblx0XHRcdFx0cmV0dXJuIHdhbGtlZDtcblx0XHRcdH1cblx0XHRcdGlmIChpbnB1dCAhPT0gbnVsbCAmJiB0eXBlb2YgaW5wdXQgPT09ICdvYmplY3QnKSB7XG5cdFx0XHRcdGNvbnN0IHdhbGtlZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblx0XHRcdFx0Zm9yIChjb25zdCBbIGtleSwgdmFsdWUgXSBvZiBPYmplY3QuZW50cmllcyhpbnB1dCkpIHtcblx0XHRcdFx0XHRjb25zdCB3YWxrZWRLZXkgPSB3YWxrKGtleSkgYXMgc3RyaW5nO1xuXHRcdFx0XHRcdHdhbGtlZFsgd2Fsa2VkS2V5IF0gPSB3YWxrKHZhbHVlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gd2Fsa2VkO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGlucHV0O1xuXHRcdH07XG5cdFx0Y29uc3QgcmVzdWx0ID0gd2FsayhwYXlsb2FkKTtcblx0XHRyZXR1cm4gcmVzdWx0IGFzIFQ7XG5cdH1cblxuXHQvKipcblx0ICogTGVnYWN5IHdyaXRlIG1ldGhvZCAtIGRlbGVnYXRlcyB0byB3cml0ZVR5cGVzRmlsZVxuXHQgKi9cblx0d3JpdGUgKGdlbmVyYXRlZDogR2VuZXJhdGVkVHlwZXMpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLndyaXRlVHlwZXNGaWxlKGdlbmVyYXRlZCk7XG5cdH1cblxuXHQvKipcblx0ICogV3JpdGUgdHlwZXMudHMgZmlsZSAoZXhwb3J0YWJsZSB0eXBlIGFsaWFzZXMgLSBkZWZhdWx0IG1vZGUpXG5cdCAqL1xuXHR3cml0ZVR5cGVzRmlsZSAoZ2VuZXJhdGVkOiBHZW5lcmF0ZWRUeXBlcyk6IHN0cmluZyB7XG5cdFx0dGhpcy5lbnN1cmVEaXJlY3RvcnkoKTtcblx0XHRjb25zdCBmaWxlUGF0aCA9IHBhdGguam9pbih0aGlzLm91dHB1dERpciwgJ3R5cGVzLnRzJyk7XG5cdFx0ZnMud3JpdGVGaWxlU3luYyhmaWxlUGF0aCwgZ2VuZXJhdGVkLmNvbnRlbnQsICd1dGYtOCcpO1xuXHRcdHJldHVybiBmaWxlUGF0aDtcblx0fVxuXG5cdC8qKlxuXHQgKiBXcml0ZSBnbG9iYWwgYXVnbWVudGF0aW9uIGZpbGUgKGluZGV4LmQudHMgLSBtb2R1bGUgYXVnbWVudGF0aW9uIG1vZGUpXG5cdCAqL1xuXHR3cml0ZUdsb2JhbEF1Z21lbnRhdGlvbiAoZ2VuZXJhdGVkOiBHZW5lcmF0ZWRUeXBlcyk6IHN0cmluZyB7XG5cdFx0dGhpcy5lbnN1cmVEaXJlY3RvcnkoKTtcblx0XHRjb25zdCBmaWxlUGF0aCA9IHBhdGguam9pbih0aGlzLm91dHB1dERpciwgJ2luZGV4LmQudHMnKTtcblx0XHRmcy53cml0ZUZpbGVTeW5jKGZpbGVQYXRoLCBnZW5lcmF0ZWQuY29udGVudCwgJ3V0Zi04Jyk7XG5cdFx0cmV0dXJuIGZpbGVQYXRoO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdyaXRlIHRvIGEgY3VzdG9tIGZpbGVuYW1lXG5cdCAqL1xuXHR3cml0ZVRvIChmaWxlbmFtZTogc3RyaW5nLCBjb250ZW50OiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdHRoaXMuZW5zdXJlRGlyZWN0b3J5KCk7XG5cdFx0Y29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4odGhpcy5vdXRwdXREaXIsIGZpbGVuYW1lKTtcblx0XHRmcy53cml0ZUZpbGVTeW5jKGZpbGVQYXRoLCBjb250ZW50LCAndXRmLTgnKTtcblx0XHRyZXR1cm4gZmlsZVBhdGg7XG5cdH1cblxuXHQvKipcblx0ICogRW5zdXJlIG91dHB1dCBkaXJlY3RvcnkgZXhpc3RzXG5cdCAqL1xuXHRwcml2YXRlIGVuc3VyZURpcmVjdG9yeSAoKTogdm9pZCB7XG5cdFx0aWYgKCFmcy5leGlzdHNTeW5jKHRoaXMub3V0cHV0RGlyKSkge1xuXHRcdFx0ZnMubWtkaXJTeW5jKHRoaXMub3V0cHV0RGlyLCB7IHJlY3Vyc2l2ZSA6IHRydWUgfSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENsZWFuIHRoZSBvdXRwdXQgZGlyZWN0b3J5XG5cdCAqL1xuXHRjbGVhbiAoKTogdm9pZCB7XG5cdFx0aWYgKGZzLmV4aXN0c1N5bmModGhpcy5vdXRwdXREaXIpKSB7XG5cdFx0XHRjb25zdCBmaWxlcyA9IGZzLnJlYWRkaXJTeW5jKHRoaXMub3V0cHV0RGlyKTtcblx0XHRcdGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuXHRcdFx0XHRmcy51bmxpbmtTeW5jKHBhdGguam9pbih0aGlzLm91dHB1dERpciwgZmlsZSkpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgb3V0cHV0IGRpcmVjdG9yeVxuXHQgKi9cblx0Z2V0T3V0cHV0RGlyICgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLm91dHB1dERpcjtcblx0fVxuXG5cdC8qKlxuXHQgKiBXcml0ZSBkZWZpbml0aW9ucy5qc29uIGZpbGVcblx0ICovXG5cdHdyaXRlRGVmaW5pdGlvbnNGaWxlIChkZWZpbml0aW9uczogTWFwPHN0cmluZywgRGVmaW5pdGlvbkluZm8+KTogc3RyaW5nIHtcblx0XHR0aGlzLmVuc3VyZURpcmVjdG9yeSgpO1xuXHRcdGNvbnN0IGZpbGVQYXRoID0gcGF0aC5qb2luKHRoaXMub3V0cHV0RGlyLCAnZGVmaW5pdGlvbnMuanNvbicpO1xuXG5cdFx0Ly8gQ29udmVydCBNYXAgdG8gcGxhaW4gb2JqZWN0XG5cdFx0Y29uc3QgZGVmaW5pdGlvbnNPYmo6IFJlY29yZDxzdHJpbmcsIERlZmluaXRpb25JbmZvPiA9IHt9O1xuXHRcdGZvciAoY29uc3QgWyBrZXksIHZhbHVlIF0gb2YgZGVmaW5pdGlvbnMpIHtcblx0XHRcdGRlZmluaXRpb25zT2JqWyBrZXkgXSA9IHZhbHVlO1xuXHRcdH1cblxuXHRcdGNvbnN0IGpzb24gPSB0aGlzLnJlbGF0aXZpemUoe1xuXHRcdFx0dmVyc2lvbiAgICAgOiAnMS4wJyxcblx0XHRcdGdlbmVyYXRlZEF0IDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuXHRcdFx0ZGVmaW5pdGlvbnMgOiBkZWZpbml0aW9uc09iaixcblx0XHR9KTtcblxuXHRcdGZzLndyaXRlRmlsZVN5bmMoZmlsZVBhdGgsIEpTT04uc3RyaW5naWZ5KGpzb24sIG51bGwsIDIpLCAndXRmLTgnKTtcblx0XHRyZXR1cm4gZmlsZVBhdGg7XG5cdH1cblxuXHQvKipcblx0ICogV3JpdGUgdXNhZ2VzLmpzb24gZmlsZVxuXHQgKi9cblx0d3JpdGVVc2FnZXNGaWxlICh1c2FnZXM6IE1hcDxzdHJpbmcsIFVzYWdlSW5mb1tdPik6IHN0cmluZyB7XG5cdFx0dGhpcy5lbnN1cmVEaXJlY3RvcnkoKTtcblx0XHRjb25zdCBmaWxlUGF0aCA9IHBhdGguam9pbih0aGlzLm91dHB1dERpciwgJ3VzYWdlcy5qc29uJyk7XG5cblx0XHQvLyBDb252ZXJ0IE1hcCB0byBwbGFpbiBvYmplY3Rcblx0XHRjb25zdCB1c2FnZXNPYmo6IFJlY29yZDxzdHJpbmcsIFVzYWdlSW5mb1tdPiA9IHt9O1xuXHRcdGZvciAoY29uc3QgWyBrZXksIHZhbHVlIF0gb2YgdXNhZ2VzKSB7XG5cdFx0XHR1c2FnZXNPYmpbIGtleSBdID0gdmFsdWU7XG5cdFx0fVxuXG5cdFx0Y29uc3QganNvbiA9IHRoaXMucmVsYXRpdml6ZSh7XG5cdFx0XHR2ZXJzaW9uICAgICA6ICcxLjAnLFxuXHRcdFx0Z2VuZXJhdGVkQXQgOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG5cdFx0XHR1c2FnZXMgICAgICA6IHVzYWdlc09iaixcblx0XHR9KTtcblxuXHRcdGZzLndyaXRlRmlsZVN5bmMoZmlsZVBhdGgsIEpTT04uc3RyaW5naWZ5KGpzb24sIG51bGwsIDIpLCAndXRmLTgnKTtcblx0XHRyZXR1cm4gZmlsZVBhdGg7XG5cdH1cblxuXHQvKipcblx0ICogV3JpdGUgZWRzLmpzb24gZmlsZVxuXHQgKi9cblx0d3JpdGVFRFNGaWxlIChlZHM6IE1hcDxzdHJpbmcsIEVEU0luZm9bXT4pOiBzdHJpbmcge1xuXHRcdHRoaXMuZW5zdXJlRGlyZWN0b3J5KCk7XG5cdFx0Y29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4odGhpcy5vdXRwdXREaXIsICdlZHMuanNvbicpO1xuXG5cdFx0Ly8gQ29udmVydCBNYXAgdG8gcGxhaW4gb2JqZWN0XG5cdFx0Y29uc3QgZWRzT2JqOiBSZWNvcmQ8c3RyaW5nLCBFRFNJbmZvW10+ID0ge307XG5cdFx0Zm9yIChjb25zdCBbIGtleSwgdmFsdWUgXSBvZiBlZHMpIHtcblx0XHRcdGVkc09ialsga2V5IF0gPSB2YWx1ZTtcblx0XHR9XG5cblx0XHRjb25zdCBqc29uID0gdGhpcy5yZWxhdGl2aXplKHtcblx0XHRcdHZlcnNpb24gICAgIDogJzEuMCcsXG5cdFx0XHRnZW5lcmF0ZWRBdCA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcblx0XHRcdGVkcyAgICAgICAgIDogZWRzT2JqLFxuXHRcdH0pO1xuXG5cdFx0ZnMud3JpdGVGaWxlU3luYyhmaWxlUGF0aCwgSlNPTi5zdHJpbmdpZnkoanNvbiwgbnVsbCwgMiksICd1dGYtOCcpO1xuXHRcdHJldHVybiBmaWxlUGF0aDtcblx0fVxuXG5cdC8qKlxuXHQgKiBXcml0ZSBpbnN0cnVtZW50YXRpb24uanNvbiBmaWxlICh2MjogYWRkcyB0aGUgY3JlYXRpb25HcmFwaCBrZXkgd2hlblxuXHQgKiB0aGUgY2FsbGVyIHBhc3NlcyBjcmVhdGlvbi1ncmFwaCBkYXRhIOKAlCB0aGUgQ0xJIGFsd2F5cyBkb2VzKVxuXHQgKi9cblx0d3JpdGVJbnN0cnVtZW50YXRpb25GaWxlIChwb2ludHM6IEluc3RydW1lbnRhdGlvblBvaW50W10sIGNyZWF0aW9uR3JhcGg/OiBDcmVhdGlvbkdyYXBoKTogc3RyaW5nIHtcblx0XHR0aGlzLmVuc3VyZURpcmVjdG9yeSgpO1xuXHRcdGNvbnN0IGZpbGVQYXRoID0gcGF0aC5qb2luKHRoaXMub3V0cHV0RGlyLCAnaW5zdHJ1bWVudGF0aW9uLmpzb24nKTtcblxuXHRcdGNvbnN0IGpzb246IEluc3RydW1lbnRhdGlvbkpzb24gPSB7XG5cdFx0XHR2ZXJzaW9uICAgICA6IDIsXG5cdFx0XHRnZW5lcmF0ZWRBdCA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcblx0XHRcdHBvaW50cyxcblx0XHR9O1xuXHRcdGlmIChjcmVhdGlvbkdyYXBoKSB7XG5cdFx0XHRqc29uLmNyZWF0aW9uR3JhcGggPSBjcmVhdGlvbkdyYXBoO1xuXHRcdH1cblxuXHRcdGNvbnN0IHJlbGF0aXZpemVkID0gdGhpcy5yZWxhdGl2aXplKGpzb24pO1xuXHRcdGZzLndyaXRlRmlsZVN5bmMoZmlsZVBhdGgsIEpTT04uc3RyaW5naWZ5KHJlbGF0aXZpemVkLCBudWxsLCAyKSwgJ3V0Zi04Jyk7XG5cdFx0cmV0dXJuIGZpbGVQYXRoO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdyaXRlIGZsb3cuanNvbiBmaWxlXG5cdCAqL1xuXHR3cml0ZUZsb3dGaWxlIChmbG93OiBNYXA8c3RyaW5nLCBGbG93SW5mb1tdPik6IHN0cmluZyB7XG5cdFx0dGhpcy5lbnN1cmVEaXJlY3RvcnkoKTtcblx0XHRjb25zdCBmaWxlUGF0aCA9IHBhdGguam9pbih0aGlzLm91dHB1dERpciwgJ2Zsb3cuanNvbicpO1xuXG5cdFx0Ly8gQ29udmVydCBNYXAgdG8gcGxhaW4gb2JqZWN0XG5cdFx0Y29uc3QgZmxvd09iajogUmVjb3JkPHN0cmluZywgRmxvd0luZm9bXT4gPSB7fTtcblx0XHRmb3IgKGNvbnN0IFsga2V5LCB2YWx1ZSBdIG9mIGZsb3cpIHtcblx0XHRcdGZsb3dPYmpbIGtleSBdID0gdmFsdWU7XG5cdFx0fVxuXG5cdFx0Y29uc3QganNvbjogRmxvd0pzb24gPSB0aGlzLnJlbGF0aXZpemUoe1xuXHRcdFx0dmVyc2lvbiAgICAgOiAnMS4wJyxcblx0XHRcdGdlbmVyYXRlZEF0IDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuXHRcdFx0ZmxvdyAgICAgICAgOiBmbG93T2JqLFxuXHRcdH0pO1xuXG5cdFx0ZnMud3JpdGVGaWxlU3luYyhmaWxlUGF0aCwgSlNPTi5zdHJpbmdpZnkoanNvbiwgbnVsbCwgMiksICd1dGYtOCcpO1xuXHRcdHJldHVybiBmaWxlUGF0aDtcblx0fVxuXG5cdC8qKlxuXHQgKiBXcml0ZSBtb2R1bGVzLmpzb24gZmlsZVxuXHQgKi9cblx0d3JpdGVNb2R1bGVzRmlsZSAoZ3JhcGg6IE1vZHVsZUdyYXBoKTogc3RyaW5nIHtcblx0XHR0aGlzLmVuc3VyZURpcmVjdG9yeSgpO1xuXHRcdGNvbnN0IGZpbGVQYXRoID0gcGF0aC5qb2luKHRoaXMub3V0cHV0RGlyLCAnbW9kdWxlcy5qc29uJyk7XG5cblx0XHQvLyBDb252ZXJ0IE1hcCB0byBwbGFpbiBvYmplY3Rcblx0XHRjb25zdCBtb2R1bGVzT2JqOiBNb2R1bGVzSnNvblsgJ21vZHVsZXMnIF0gPSB7fTtcblx0XHRmb3IgKGNvbnN0IFsga2V5LCB2YWx1ZSBdIG9mIGdyYXBoLm1vZHVsZXMpIHtcblx0XHRcdG1vZHVsZXNPYmpbIGtleSBdID0gdmFsdWU7XG5cdFx0fVxuXG5cdFx0Y29uc3QganNvbjogTW9kdWxlc0pzb24gPSB0aGlzLnJlbGF0aXZpemUoe1xuXHRcdFx0dmVyc2lvbiAgICAgOiAnMS4wJyxcblx0XHRcdGdlbmVyYXRlZEF0IDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuXHRcdFx0bW9kdWxlcyAgICAgOiBtb2R1bGVzT2JqLFxuXHRcdFx0ZWRnZXMgICAgICAgOiBncmFwaC5lZGdlcyxcblx0XHRcdGN5Y2xlcyAgICAgIDogZ3JhcGguY3ljbGVzLFxuXHRcdH0pO1xuXG5cdFx0ZnMud3JpdGVGaWxlU3luYyhmaWxlUGF0aCwgSlNPTi5zdHJpbmdpZnkoanNvbiwgbnVsbCwgMiksICd1dGYtOCcpO1xuXHRcdHJldHVybiBmaWxlUGF0aDtcblx0fVxuXG5cdC8qKlxuXHQgKiBXcml0ZSBzY29wZXMuanNvbiBmaWxlXG5cdCAqL1xuXHR3cml0ZVNjb3Blc0ZpbGUgKGFuYWx5c2lzOiBTY29wZUFuYWx5c2lzKTogc3RyaW5nIHtcblx0XHR0aGlzLmVuc3VyZURpcmVjdG9yeSgpO1xuXHRcdGNvbnN0IGZpbGVQYXRoID0gcGF0aC5qb2luKHRoaXMub3V0cHV0RGlyLCAnc2NvcGVzLmpzb24nKTtcblxuXHRcdC8vIENvbnZlcnQgTWFwcyB0byBwbGFpbiBzaGFwZXNcblx0XHRjb25zdCBzY29wZXNPYmo6IFNjb3Blc0pzb25bICdzY29wZXMnIF0gPSB7fTtcblx0XHRmb3IgKGNvbnN0IFsga2V5LCB2YWx1ZSBdIG9mIGFuYWx5c2lzLnNjb3Blcykge1xuXHRcdFx0c2NvcGVzT2JqWyBrZXkgXSA9IHZhbHVlO1xuXHRcdH1cblx0XHRjb25zdCB2YXJpYWJsZXMgPSBBcnJheS5mcm9tKGFuYWx5c2lzLnZhcmlhYmxlcy52YWx1ZXMoKSk7XG5cblx0XHRjb25zdCBqc29uOiBTY29wZXNKc29uID0gdGhpcy5yZWxhdGl2aXplKHtcblx0XHRcdHZlcnNpb24gICAgIDogJzEuMCcsXG5cdFx0XHRnZW5lcmF0ZWRBdCA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcblx0XHRcdHNjb3BlcyAgICAgIDogc2NvcGVzT2JqLFxuXHRcdFx0dmFyaWFibGVzLFxuXHRcdH0pO1xuXG5cdFx0ZnMud3JpdGVGaWxlU3luYyhmaWxlUGF0aCwgSlNPTi5zdHJpbmdpZnkoanNvbiwgbnVsbCwgMiksICd1dGYtOCcpO1xuXHRcdHJldHVybiBmaWxlUGF0aDtcblx0fVxuXG5cdC8qKlxuXHQgKiBXcml0ZSBoaWVyYXJjaHkuanNvbiBmaWxlXG5cdCAqL1xuXHR3cml0ZUhpZXJhcmNoeUZpbGUgKHJvb3RzOiBIaWVyYXJjaHlOb2RlW10pOiBzdHJpbmcge1xuXHRcdHRoaXMuZW5zdXJlRGlyZWN0b3J5KCk7XG5cdFx0Y29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4odGhpcy5vdXRwdXREaXIsICdoaWVyYXJjaHkuanNvbicpO1xuXG5cdFx0Y29uc3QganNvbjogSGllcmFyY2h5SnNvbiA9IHRoaXMucmVsYXRpdml6ZSh7XG5cdFx0XHR2ZXJzaW9uICAgICA6ICcxLjAnLFxuXHRcdFx0Z2VuZXJhdGVkQXQgOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG5cdFx0XHRyb290cyxcblx0XHR9KTtcblxuXHRcdGZzLndyaXRlRmlsZVN5bmMoZmlsZVBhdGgsIEpTT04uc3RyaW5naWZ5KGpzb24sIG51bGwsIDIpLCAndXRmLTgnKTtcblx0XHRyZXR1cm4gZmlsZVBhdGg7XG5cdH1cbn1cbiJdfQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mnemonica/tactica",
3
- "version": "0.3.11",
3
+ "version": "0.3.15",
4
4
  "description": "Type definition generator for Mnemonica — statically analyzes define() calls and emits .tactica/ types, registry, and metadata",
5
5
  "main": "lib/index.js",
6
6
  "types": "lib/index.d.ts",