@nlabs/lex 1.48.5 → 1.48.6

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/babel.config.json CHANGED
@@ -9,6 +9,11 @@
9
9
  }
10
10
  ],
11
11
  "@babel/preset-typescript",
12
- "@babel/preset-react"
12
+ [
13
+ "@babel/preset-react",
14
+ {
15
+ "runtime": "automatic"
16
+ }
17
+ ]
13
18
  ]
14
19
  }
@@ -164,6 +164,7 @@ ${cliName} Error: Jest binary not found in Lex's node_modules or monorepo root`,
164
164
  } else {
165
165
  const projectJestConfigPath = pathResolve(process.cwd(), "jest.config.js");
166
166
  const projectJestConfigCjsPath = pathResolve(process.cwd(), "jest.config.cjs");
167
+ const projectJestConfigMjsPath = pathResolve(process.cwd(), "jest.config.mjs");
167
168
  const projectJestConfigJsonPath = pathResolve(process.cwd(), "jest.config.json");
168
169
  if (existsSync(projectJestConfigPath)) {
169
170
  jestConfigFile = projectJestConfigPath;
@@ -175,6 +176,11 @@ ${cliName} Error: Jest binary not found in Lex's node_modules or monorepo root`,
175
176
  if (debug) {
176
177
  log(`Using project Jest config file (CJS): ${jestConfigFile}`, "info", quiet);
177
178
  }
179
+ } else if (existsSync(projectJestConfigMjsPath)) {
180
+ jestConfigFile = projectJestConfigMjsPath;
181
+ if (debug) {
182
+ log(`Using project Jest config file (MJS): ${jestConfigFile}`, "info", quiet);
183
+ }
178
184
  } else if (existsSync(projectJestConfigJsonPath)) {
179
185
  jestConfigFile = projectJestConfigJsonPath;
180
186
  if (debug) {
@@ -208,18 +214,6 @@ ${cliName} Error: Jest binary not found in Lex's node_modules or monorepo root`,
208
214
  }
209
215
  }
210
216
  const jestSetupFile = setup || pathResolve(process.cwd(), "jest.setup.js");
211
- if (!existsSync(jestSetupFile)) {
212
- const lexDir = LexConfig.getLexDir();
213
- const templateSetupFile = pathResolve(lexDir, "jest.setup.template.js");
214
- if (existsSync(templateSetupFile)) {
215
- const fs = await import("fs");
216
- const templateContent = fs.readFileSync(templateSetupFile, "utf8");
217
- fs.writeFileSync(jestSetupFile, templateContent);
218
- if (debug) {
219
- log(`Created Jest setup file from template: ${jestSetupFile}`, "info", quiet);
220
- }
221
- }
222
- }
223
217
  const jestOptions = ["--no-cache"];
224
218
  const isESM = detectESM(process.cwd());
225
219
  let nodeOptions = process.env.NODE_OPTIONS || "";
@@ -318,7 +312,7 @@ ${cliName} Error: Jest binary not found in Lex's node_modules or monorepo root`,
318
312
  jestOptions.push("--testNamePattern", testNamePattern);
319
313
  }
320
314
  if (testPathPattern) {
321
- jestOptions.push("--testPathPatterns", testPathPattern);
315
+ jestOptions.push("--testPathPattern", testPathPattern);
322
316
  }
323
317
  if (useStderr) {
324
318
  jestOptions.push("--useStderr");
@@ -432,4 +426,4 @@ export {
432
426
  getTestFilePatterns,
433
427
  test
434
428
  };
435
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL3Rlc3QvdGVzdC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7ZXhlY2F9IGZyb20gJ2V4ZWNhJztcbmltcG9ydCB7ZXhpc3RzU3luYywgcmVhZEZpbGVTeW5jfSBmcm9tICdmcyc7XG5pbXBvcnQge3N5bmMgYXMgZ2xvYlN5bmN9IGZyb20gJ2dsb2InO1xuaW1wb3J0IHtyZXNvbHZlIGFzIHBhdGhSZXNvbHZlfSBmcm9tICdwYXRoJztcblxuaW1wb3J0IHtMZXhDb25maWcsIGdldFR5cGVTY3JpcHRDb25maWdQYXRofSBmcm9tICcuLi8uLi9MZXhDb25maWcuanMnO1xuaW1wb3J0IHtjcmVhdGVTcGlubmVyfSBmcm9tICcuLi8uLi91dGlscy9hcHAuanMnO1xuaW1wb3J0IHtnZXREaXJOYW1lLCByZXNvbHZlQmluYXJ5UGF0aH0gZnJvbSAnLi4vLi4vdXRpbHMvZmlsZS5qcyc7XG5pbXBvcnQge2xvZ30gZnJvbSAnLi4vLi4vdXRpbHMvbG9nLmpzJztcbmltcG9ydCB7YWlGdW5jdGlvbn0gZnJvbSAnLi4vYWkvYWkuanMnO1xuXG5jb25zdCBkZXRlY3RFU00gPSAoY3dkOiBzdHJpbmcpOiBib29sZWFuID0+IHtcbiAgY29uc3QgcGFja2FnZUpzb25QYXRoID0gcGF0aFJlc29sdmUoY3dkLCAncGFja2FnZS5qc29uJyk7XG5cbiAgaWYoZXhpc3RzU3luYyhwYWNrYWdlSnNvblBhdGgpKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhY2thZ2VKc29uQ29udGVudCA9IHJlYWRGaWxlU3luYyhwYWNrYWdlSnNvblBhdGgsICd1dGY4Jyk7XG4gICAgICBjb25zdCBwYWNrYWdlSnNvbiA9IEpTT04ucGFyc2UocGFja2FnZUpzb25Db250ZW50KTtcbiAgICAgIHJldHVybiBwYWNrYWdlSnNvbi50eXBlID09PSAnbW9kdWxlJztcbiAgICB9IGNhdGNoKF9lcnJvcikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGVzdE9wdGlvbnMge1xuICByZWFkb25seSBhbmFseXplPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgYWlEZWJ1Zz86IGJvb2xlYW47XG4gIHJlYWRvbmx5IGFpR2VuZXJhdGU/OiBib29sZWFuO1xuICByZWFkb25seSBhaUFuYWx5emU/OiBib29sZWFuO1xuICByZWFkb25seSBiYWlsPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgY2hhbmdlZEZpbGVzV2l0aEFuY2VzdG9yPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgY2hhbmdlZFNpbmNlPzogc3RyaW5nO1xuICByZWFkb25seSBjaT86IGJvb2xlYW47XG4gIHJlYWRvbmx5IGNsaU5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNvbGxlY3RDb3ZlcmFnZUZyb20/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNvbG9ycz86IGJvb2xlYW47XG4gIHJlYWRvbmx5IGNvbmZpZz86IHN0cmluZztcbiAgcmVhZG9ubHkgZGVidWc/OiBib29sZWFuO1xuICByZWFkb25seSBkZWJ1Z1Rlc3RzPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgZGV0ZWN0T3BlbkhhbmRsZXM/OiBib29sZWFuO1xuICByZWFkb25seSBlbnY/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGVycm9yT25EZXByZWNhdGVkPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgZXhwYW5kPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgZm9yY2VFeGl0PzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgZ2VuZXJhdGU/OiBib29sZWFuO1xuICByZWFkb25seSBqc29uPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgbGFzdENvbW1pdD86IGJvb2xlYW47XG4gIHJlYWRvbmx5IGxpc3RUZXN0cz86IGJvb2xlYW47XG4gIHJlYWRvbmx5IGxvZ0hlYXBVc2FnZT86IGJvb2xlYW47XG4gIHJlYWRvbmx5IG1heFdvcmtlcnM/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IG5vU3RhY2tUcmFjZT86IGJvb2xlYW47XG4gIHJlYWRvbmx5IG5vdGlmeT86IGJvb2xlYW47XG4gIHJlYWRvbmx5IG9ubHlDaGFuZ2VkPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgb3V0cHV0RmlsZT86IHN0cmluZztcbiAgcmVhZG9ubHkgcGFzc1dpdGhOb1Rlc3RzPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgcXVpZXQ/OiBib29sZWFuO1xuICByZWFkb25seSByZW1vdmVDYWNoZT86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHJ1bkluQmFuZD86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHNldHVwPzogc3RyaW5nO1xuICByZWFkb25seSBzaG93Q29uZmlnPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgc2lsZW50PzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgdGVzdExvY2F0aW9uSW5SZXN1bHRzPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgdGVzdE5hbWVQYXR0ZXJuPzogc3RyaW5nO1xuICByZWFkb25seSB0ZXN0UGF0aFBhdHRlcm4/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHVwZGF0ZT86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHVzZVN0ZGVycj86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHZlcmJvc2U/OiBib29sZWFuO1xuICByZWFkb25seSB3YXRjaD86IHN0cmluZztcbiAgcmVhZG9ubHkgd2F0Y2hBbGw/OiBib29sZWFuO1xufVxuXG5leHBvcnQgdHlwZSBUZXN0Q2FsbGJhY2sgPSB0eXBlb2YgcHJvY2Vzcy5leGl0O1xuXG5leHBvcnQgY29uc3QgZ2V0VGVzdEZpbGVQYXR0ZXJucyA9ICh0ZXN0UGF0aFBhdHRlcm4/OiBzdHJpbmcpOiBzdHJpbmdbXSA9PiB7XG4gIGNvbnN0IGRlZmF1bHRQYXR0ZXJucyA9IFsnKiovKi50ZXN0LionLCAnKiovKi5zcGVjLionLCAnKiovKi5pbnRlZ3JhdGlvbi4qJ107XG5cbiAgaWYoIXRlc3RQYXRoUGF0dGVybikge1xuICAgIHJldHVybiBkZWZhdWx0UGF0dGVybnM7XG4gIH1cblxuICByZXR1cm4gW3Rlc3RQYXRoUGF0dGVybl07XG59O1xuXG5jb25zdCBmaW5kVW5jb3ZlcmVkU291cmNlRmlsZXMgPSAoKTogc3RyaW5nW10gPT4ge1xuICBjb25zdCBzb3VyY2VGaWxlcyA9IGdsb2JTeW5jKCdzcmMvKiovKi57dHMsdHN4LGpzLGpzeH0nLCB7XG4gICAgY3dkOiBwcm9jZXNzLmN3ZCgpLFxuICAgIGlnbm9yZTogWycqKi9ub2RlX21vZHVsZXMvKionLCAnKiovZGlzdC8qKicsICcqKi8qLnRlc3QuKicsICcqKi8qLnNwZWMuKiddXG4gIH0pO1xuXG4gIGNvbnN0IHRlc3RGaWxlcyA9IGdsb2JTeW5jKCcqKi8qLnt0ZXN0LHNwZWN9Lnt0cyx0c3gsanMsanN4fScsIHtcbiAgICBjd2Q6IHByb2Nlc3MuY3dkKCksXG4gICAgaWdub3JlOiBbJyoqL25vZGVfbW9kdWxlcy8qKicsICcqKi9kaXN0LyoqJ11cbiAgfSk7XG5cbiAgcmV0dXJuIHNvdXJjZUZpbGVzLmZpbHRlcigoc291cmNlRmlsZSkgPT4ge1xuICAgIGNvbnN0IGJhc2VOYW1lID0gc291cmNlRmlsZS5yZXBsYWNlKC9cXC5bXi8uXSskLywgJycpO1xuICAgIHJldHVybiAhdGVzdEZpbGVzLnNvbWUoKHRlc3RGaWxlKSA9PiB0ZXN0RmlsZS5pbmNsdWRlcyhiYXNlTmFtZSkpO1xuICB9KTtcbn07XG5cbmNvbnN0IHByb2Nlc3NUZXN0UmVzdWx0cyA9IChvdXRwdXRGaWxlPzogc3RyaW5nKTogYW55ID0+IHtcbiAgaWYoIW91dHB1dEZpbGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgY29udGVudCA9IHJlYWRGaWxlU3luYyhvdXRwdXRGaWxlLCAndXRmLTgnKTtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShjb250ZW50KTtcbiAgfSBjYXRjaChfZXJyb3IpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHRlc3QgPSBhc3luYyAob3B0aW9uczogVGVzdE9wdGlvbnMsIGFyZ3M6IHN0cmluZ1tdLCBjYWxsYmFjazogVGVzdENhbGxiYWNrID0gcHJvY2Vzcy5leGl0KTogUHJvbWlzZTxudW1iZXI+ID0+IHtcbiAgY29uc3Qge1xuICAgIGFuYWx5emUgPSBmYWxzZSxcbiAgICBhaUFuYWx5emUgPSBmYWxzZSxcbiAgICBhaURlYnVnID0gZmFsc2UsXG4gICAgYWlHZW5lcmF0ZSA9IGZhbHNlLFxuICAgIGJhaWwsXG4gICAgY2hhbmdlZEZpbGVzV2l0aEFuY2VzdG9yLFxuICAgIGNoYW5nZWRTaW5jZSxcbiAgICBjaSxcbiAgICBjbGlOYW1lID0gJ0xleCcsXG4gICAgY29sbGVjdENvdmVyYWdlRnJvbSxcbiAgICBjb2xvcnMsXG4gICAgY29uZmlnLFxuICAgIGRlYnVnID0gZmFsc2UsXG4gICAgZGVidWdUZXN0cyA9IGZhbHNlLFxuICAgIGRldGVjdE9wZW5IYW5kbGVzLFxuICAgIGVudixcbiAgICBlcnJvck9uRGVwcmVjYXRlZCxcbiAgICBleHBhbmQsXG4gICAgZm9yY2VFeGl0LFxuICAgIGdlbmVyYXRlID0gZmFsc2UsXG4gICAganNvbixcbiAgICBsYXN0Q29tbWl0LFxuICAgIGxpc3RUZXN0cyxcbiAgICBsb2dIZWFwVXNhZ2UsXG4gICAgbWF4V29ya2VycyxcbiAgICBub1N0YWNrVHJhY2UsXG4gICAgbm90aWZ5LFxuICAgIG9ubHlDaGFuZ2VkLFxuICAgIG91dHB1dEZpbGUsXG4gICAgcGFzc1dpdGhOb1Rlc3RzLFxuICAgIHF1aWV0LFxuICAgIHJlbW92ZUNhY2hlLFxuICAgIHJ1bkluQmFuZCxcbiAgICBzZXR1cCxcbiAgICBzaG93Q29uZmlnLFxuICAgIHNpbGVudCxcbiAgICB0ZXN0TG9jYXRpb25JblJlc3VsdHMsXG4gICAgdGVzdE5hbWVQYXR0ZXJuLFxuICAgIHRlc3RQYXRoUGF0dGVybixcbiAgICB1cGRhdGUsXG4gICAgdXNlU3RkZXJyLFxuICAgIHZlcmJvc2UsXG4gICAgd2F0Y2gsXG4gICAgd2F0Y2hBbGxcbiAgfSA9IG9wdGlvbnM7XG5cbiAgY29uc3QgdXNlR2VuZXJhdGUgPSBnZW5lcmF0ZSB8fCBhaUdlbmVyYXRlO1xuICBjb25zdCB1c2VBbmFseXplID0gYW5hbHl6ZSB8fCBhaUFuYWx5emU7XG4gIGNvbnN0IHVzZURlYnVnID0gZGVidWdUZXN0cyB8fCBhaURlYnVnO1xuXG4gIGxvZyhgJHtjbGlOYW1lfSB0ZXN0aW5nLi4uYCwgJ2luZm8nLCBxdWlldCk7XG5cbiAgY29uc3Qgc3Bpbm5lciA9IGNyZWF0ZVNwaW5uZXIocXVpZXQpO1xuXG4gIGF3YWl0IExleENvbmZpZy5wYXJzZUNvbmZpZyhvcHRpb25zKTtcblxuICBjb25zdCB7dXNlVHlwZXNjcmlwdH0gPSBMZXhDb25maWcuY29uZmlnO1xuXG4gIGlmKHVzZVR5cGVzY3JpcHQpIHtcbiAgICBjb25zdCB0ZXN0Q29uZmlnUGF0aCA9IGdldFR5cGVTY3JpcHRDb25maWdQYXRoKCd0c2NvbmZpZy50ZXN0Lmpzb24nKTtcbiAgICBpZihleGlzdHNTeW5jKHRlc3RDb25maWdQYXRoKSkge1xuICAgICAgbG9nKCdVc2luZyB0c2NvbmZpZy50ZXN0Lmpzb24gZm9yIHRlc3RpbmcuLi4nLCAnaW5mbycsIHF1aWV0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgTGV4Q29uZmlnLmNoZWNrVGVzdFR5cGVzY3JpcHRDb25maWcoKTtcbiAgICB9XG4gIH1cblxuICBpZih1c2VHZW5lcmF0ZSkge1xuICAgIHNwaW5uZXIuc3RhcnQoJ0FJIGlzIGFuYWx5emluZyBjb2RlIHRvIGdlbmVyYXRlIHRlc3QgY2FzZXMuLi4nKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCB1bmNvdmVyZWRGaWxlcyA9IGZpbmRVbmNvdmVyZWRTb3VyY2VGaWxlcygpO1xuXG4gICAgICBpZih1bmNvdmVyZWRGaWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldEZpbGUgPSB1bmNvdmVyZWRGaWxlc1swXTtcblxuICAgICAgICBhd2FpdCBhaUZ1bmN0aW9uKHtcbiAgICAgICAgICBwcm9tcHQ6IGBHZW5lcmF0ZSBKZXN0IHVuaXQgdGVzdHMgZm9yIHRoaXMgZmlsZTogJHt0YXJnZXRGaWxlfVxcblxcbiR7cmVhZEZpbGVTeW5jKHRhcmdldEZpbGUsICd1dGYtOCcpfVxcblxcblBsZWFzZSBjcmVhdGUgY29tcHJlaGVuc2l2ZSB0ZXN0cyB0aGF0IGNvdmVyIHRoZSBtYWluIGZ1bmN0aW9uYWxpdHkuIEluY2x1ZGUgdGVzdCBmaXh0dXJlcyBhbmQgbW9ja3Mgd2hlcmUgbmVjZXNzYXJ5LmAsXG4gICAgICAgICAgdGFzazogJ3Rlc3QnLFxuICAgICAgICAgIGZpbGU6IHRhcmdldEZpbGUsXG4gICAgICAgICAgY29udGV4dDogdHJ1ZSxcbiAgICAgICAgICBxdWlldFxuICAgICAgICB9KTtcblxuICAgICAgICBzcGlubmVyLnN1Y2NlZWQoYEFJIHRlc3QgZ2VuZXJhdGlvbiBzdWdnZXN0aW9ucyBwcm92aWRlZCBmb3IgJHt0YXJnZXRGaWxlfWApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3Bpbm5lci5zdWNjZWVkKCdBbGwgc291cmNlIGZpbGVzIGFwcGVhciB0byBoYXZlIGNvcnJlc3BvbmRpbmcgdGVzdCBmaWxlcycpO1xuICAgICAgfVxuICAgIH0gY2F0Y2goYWlFcnJvcikge1xuICAgICAgc3Bpbm5lci5mYWlsKCdDb3VsZCBub3QgZ2VuZXJhdGUgQUkgdGVzdCBzdWdnZXN0aW9ucycpO1xuICAgICAgaWYoIXF1aWV0KSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0FJIHRlc3QgZ2VuZXJhdGlvbiBlcnJvcjonLCBhaUVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBkaXJOYW1lID0gZ2V0RGlyTmFtZSgpO1xuICBjb25zdCBkaXJQYXRoOiBzdHJpbmcgPSBwYXRoUmVzb2x2ZShkaXJOYW1lLCAnLi4vLi4nKTtcblxuICBjb25zdCBwcm9qZWN0SmVzdEJpbiA9IHBhdGhSZXNvbHZlKHByb2Nlc3MuY3dkKCksICdub2RlX21vZHVsZXMvLmJpbi9qZXN0Jyk7XG4gIGxldCBqZXN0UGF0aDogc3RyaW5nO1xuICBpZihleGlzdHNTeW5jKHByb2plY3RKZXN0QmluKSkge1xuICAgIGplc3RQYXRoID0gcHJvamVjdEplc3RCaW47XG4gIH0gZWxzZSB7XG4gICAgamVzdFBhdGggPSByZXNvbHZlQmluYXJ5UGF0aCgnamVzdCcpO1xuICB9XG5cbiAgaWYoIWplc3RQYXRoKSB7XG4gICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBKZXN0IGJpbmFyeSBub3QgZm91bmQgaW4gTGV4J3Mgbm9kZV9tb2R1bGVzIG9yIG1vbm9yZXBvIHJvb3RgLCAnZXJyb3InLCBxdWlldCk7XG4gICAgbG9nKCdQbGVhc2UgcmVpbnN0YWxsIExleCBvciBjaGVjayB5b3VyIGluc3RhbGxhdGlvbi4nLCAnaW5mbycsIHF1aWV0KTtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIGxldCBqZXN0Q29uZmlnRmlsZTogc3RyaW5nO1xuICBsZXQgcHJvamVjdEplc3RDb25maWc6IGFueSA9IG51bGw7XG5cbiAgaWYoY29uZmlnKSB7XG4gICAgamVzdENvbmZpZ0ZpbGUgPSBjb25maWc7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgcHJvamVjdEplc3RDb25maWdQYXRoID0gcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJ2plc3QuY29uZmlnLmpzJyk7XG4gICAgY29uc3QgcHJvamVjdEplc3RDb25maWdDanNQYXRoID0gcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJ2plc3QuY29uZmlnLmNqcycpO1xuICAgIGNvbnN0IHByb2plY3RKZXN0Q29uZmlnSnNvblBhdGggPSBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnamVzdC5jb25maWcuanNvbicpO1xuXG4gICAgaWYoZXhpc3RzU3luYyhwcm9qZWN0SmVzdENvbmZpZ1BhdGgpKSB7XG4gICAgICBqZXN0Q29uZmlnRmlsZSA9IHByb2plY3RKZXN0Q29uZmlnUGF0aDtcbiAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgIGxvZyhgVXNpbmcgcHJvamVjdCBKZXN0IGNvbmZpZyBmaWxlOiAke2plc3RDb25maWdGaWxlfWAsICdpbmZvJywgcXVpZXQpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZihleGlzdHNTeW5jKHByb2plY3RKZXN0Q29uZmlnQ2pzUGF0aCkpIHtcbiAgICAgIGplc3RDb25maWdGaWxlID0gcHJvamVjdEplc3RDb25maWdDanNQYXRoO1xuICAgICAgaWYoZGVidWcpIHtcbiAgICAgICAgbG9nKGBVc2luZyBwcm9qZWN0IEplc3QgY29uZmlnIGZpbGUgKENKUyk6ICR7amVzdENvbmZpZ0ZpbGV9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmKGV4aXN0c1N5bmMocHJvamVjdEplc3RDb25maWdKc29uUGF0aCkpIHtcbiAgICAgIGplc3RDb25maWdGaWxlID0gcHJvamVjdEplc3RDb25maWdKc29uUGF0aDtcbiAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgIGxvZyhgVXNpbmcgcHJvamVjdCBKZXN0IGNvbmZpZyBmaWxlIChKU09OKTogJHtqZXN0Q29uZmlnRmlsZX1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTm8gSmVzdCBjb25maWcgZmlsZSBleGlzdHMgaW4gdGhlIHByb2plY3RcbiAgICAgIC8vIENoZWNrIGlmIHRoZXJlJ3MgYSBKZXN0IGNvbmZpZyBpbiBsZXguY29uZmlnLmNqc1xuICAgICAgcHJvamVjdEplc3RDb25maWcgPSBMZXhDb25maWcuY29uZmlnLmplc3Q7XG5cbiAgICAgIGNvbnN0IGxleERpciA9IExleENvbmZpZy5nZXRMZXhEaXIoKTtcbiAgICAgIGNvbnN0IGxleEplc3RDb25maWcgPSBwYXRoUmVzb2x2ZShsZXhEaXIsICdqZXN0LmNvbmZpZy5tanMnKTtcblxuICAgICAgaWYoZGVidWcpIHtcbiAgICAgICAgbG9nKGBMb29raW5nIGZvciBKZXN0IGNvbmZpZyBhdDogJHtsZXhKZXN0Q29uZmlnfWAsICdpbmZvJywgcXVpZXQpO1xuICAgICAgICBsb2coYEZpbGUgZXhpc3RzOiAke2V4aXN0c1N5bmMobGV4SmVzdENvbmZpZyl9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICB9XG5cbiAgICAgIGlmKGV4aXN0c1N5bmMobGV4SmVzdENvbmZpZykpIHtcbiAgICAgICAgamVzdENvbmZpZ0ZpbGUgPSBsZXhKZXN0Q29uZmlnO1xuICAgICAgICBpZihwcm9qZWN0SmVzdENvbmZpZyAmJiBPYmplY3Qua2V5cyhwcm9qZWN0SmVzdENvbmZpZykubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgICAgICBsb2coYFVzaW5nIExleCBKZXN0IGNvbmZpZyB3aXRoIHByb2plY3QgSmVzdCBjb25maWcgZnJvbSBsZXguY29uZmlnLmNqczogJHtqZXN0Q29uZmlnRmlsZX1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYoZGVidWcpIHtcbiAgICAgICAgICAgIGxvZyhgVXNpbmcgTGV4IEplc3QgY29uZmlnIChubyBwcm9qZWN0IEplc3QgY29uZmlnIGZvdW5kKTogJHtqZXN0Q29uZmlnRmlsZX1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgICAgbG9nKCdObyBKZXN0IGNvbmZpZyBmb3VuZCBpbiBwcm9qZWN0IG9yIExleCcsICd3YXJuJywgcXVpZXQpO1xuICAgICAgICB9XG4gICAgICAgIGplc3RDb25maWdGaWxlID0gJyc7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgamVzdFNldHVwRmlsZTogc3RyaW5nID0gc2V0dXAgfHwgcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJ2plc3Quc2V0dXAuanMnKTtcblxuICBpZighZXhpc3RzU3luYyhqZXN0U2V0dXBGaWxlKSkge1xuICAgIGNvbnN0IGxleERpciA9IExleENvbmZpZy5nZXRMZXhEaXIoKTtcbiAgICBjb25zdCB0ZW1wbGF0ZVNldHVwRmlsZSA9IHBhdGhSZXNvbHZlKGxleERpciwgJ2plc3Quc2V0dXAudGVtcGxhdGUuanMnKTtcbiAgICBpZihleGlzdHNTeW5jKHRlbXBsYXRlU2V0dXBGaWxlKSkge1xuICAgICAgY29uc3QgZnMgPSBhd2FpdCBpbXBvcnQoJ2ZzJyk7XG4gICAgICBjb25zdCB0ZW1wbGF0ZUNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmModGVtcGxhdGVTZXR1cEZpbGUsICd1dGY4Jyk7XG4gICAgICBmcy53cml0ZUZpbGVTeW5jKGplc3RTZXR1cEZpbGUsIHRlbXBsYXRlQ29udGVudCk7XG4gICAgICBpZihkZWJ1Zykge1xuICAgICAgICBsb2coYENyZWF0ZWQgSmVzdCBzZXR1cCBmaWxlIGZyb20gdGVtcGxhdGU6ICR7amVzdFNldHVwRmlsZX1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBqZXN0T3B0aW9uczogc3RyaW5nW10gPSBbJy0tbm8tY2FjaGUnXTtcblxuICBjb25zdCBpc0VTTSA9IGRldGVjdEVTTShwcm9jZXNzLmN3ZCgpKTtcbiAgbGV0IG5vZGVPcHRpb25zID0gcHJvY2Vzcy5lbnYuTk9ERV9PUFRJT05TIHx8ICcnO1xuICBpZihpc0VTTSkge1xuICAgIGlmKCFub2RlT3B0aW9ucy5pbmNsdWRlcygnLS1leHBlcmltZW50YWwtdm0tbW9kdWxlcycpKSB7XG4gICAgICBub2RlT3B0aW9ucyA9IGAke25vZGVPcHRpb25zfSAtLWV4cGVyaW1lbnRhbC12bS1tb2R1bGVzYC50cmltKCk7XG4gICAgfVxuICAgIGxvZygnRVNNIHByb2plY3QgZGV0ZWN0ZWQsIHVzaW5nIC0tZXhwZXJpbWVudGFsLXZtLW1vZHVsZXMgaW4gTk9ERV9PUFRJT05TJywgJ2luZm8nLCBxdWlldCk7XG4gIH1cblxuICBpZihqZXN0Q29uZmlnRmlsZSkge1xuICAgIGplc3RPcHRpb25zLnB1c2goJy0tY29uZmlnJywgamVzdENvbmZpZ0ZpbGUpO1xuICB9XG5cbiAgaWYoYmFpbCkge1xuICAgIGplc3RPcHRpb25zLnB1c2goJy0tYmFpbCcpO1xuICB9XG5cbiAgaWYoY2hhbmdlZEZpbGVzV2l0aEFuY2VzdG9yKSB7XG4gICAgamVzdE9wdGlvbnMucHVzaCgnLS1jaGFuZ2VkRmlsZXNXaXRoQW5jZXN0b3InKTtcbiAgfVxuXG4gIGlmKGNoYW5nZWRTaW5jZSkge1xuICAgIGplc3RPcHRpb25zLnB1c2goJy0tY2hhbmdlZFNpbmNlJyk7XG4gIH1cblxuICBpZihjaSkge1xuICAgIGplc3RPcHRpb25zLnB1c2goJy0tY2knKTtcbiAgfVxuXG4gIGlmKGNvbGxlY3RDb3ZlcmFnZUZyb20pIHtcbiAgICBqZXN0T3B0aW9ucy5wdXNoKCctLWNvbGxlY3RDb3ZlcmFnZUZyb20nLCBjb2xsZWN0Q292ZXJhZ2VGcm9tKTtcbiAgfVxuXG4gIGlmKGNvbG9ycykge1xuICAgIGplc3RPcHRpb25zLnB1c2goJy0tY29sb3JzJyk7XG4gIH1cblxuICBpZihkZWJ1Zykge1xuICAgIGplc3RPcHRpb25zLnB1c2goJy0tZGVidWcnKTtcbiAgfVxuXG4gIGlmKGRldGVjdE9wZW5IYW5kbGVzKSB7XG4gICAgamVzdE9wdGlvbnMucHVzaCgnLS1kZXRlY3RPcGVuSGFuZGxlcycpO1xuICB9XG5cbiAgaWYoZW52KSB7XG4gICAgamVzdE9wdGlvbnMucHVzaCgnLS1lbnYnKTtcbiAgfVxuXG4gIGlmKGVycm9yT25EZXByZWNhdGVkKSB7XG4gICAgamVzdE9wdGlvbnMucHVzaCgnLS1lcnJvck9uRGVwcmVjYXRlZCcpO1xuICB9XG5cbiAgaWYoZXhwYW5kKSB7XG4gICAgamVzdE9wdGlvbnMucHVzaCgnLS1leHBhbmQnKTtcbiAgfVxuXG4gIGlmKGZvcmNlRXhpdCkge1xuICAgIGplc3RPcHRpb25zLnB1c2goJy0tZm9yY2VFeGl0Jyk7XG4gIH1cblxuICBpZihqc29uKSB7XG4gICAgamVzdE9wdGlvbnMucHVzaCgnLS1qc29uJyk7XG4gIH1cblxuICBpZihsYXN0Q29tbWl0KSB7XG4gICAgamVzdE9wdGlvbnMucHVzaCgnLS1sYXN0Q29tbWl0Jyk7XG4gIH1cblxuICBpZihsaXN0VGVzdHMpIHtcbiAgICBqZXN0T3B0aW9ucy5wdXNoKCctLWxpc3RUZXN0cycpO1xuICB9XG5cbiAgaWYobG9nSGVhcFVzYWdlKSB7XG4gICAgamVzdE9wdGlvbnMucHVzaCgnLS1sb2dIZWFwVXNhZ2UnKTtcbiAgfVxuXG4gIGlmKG1heFdvcmtlcnMpIHtcbiAgICBqZXN0T3B0aW9ucy5wdXNoKCctLW1heFdvcmtlcnMnLCBtYXhXb3JrZXJzKTtcbiAgfVxuXG4gIGlmKG5vU3RhY2tUcmFjZSkge1xuICAgIGplc3RPcHRpb25zLnB1c2goJy0tbm9TdGFja1RyYWNlJyk7XG4gIH1cblxuICBpZihub3RpZnkpIHtcbiAgICBqZXN0T3B0aW9ucy5wdXNoKCctLW5vdGlmeScpO1xuICB9XG5cbiAgaWYob25seUNoYW5nZWQpIHtcbiAgICBqZXN0T3B0aW9ucy5wdXNoKCctLW9ubHlDaGFuZ2VkJyk7XG4gIH1cblxuICBsZXQgdGVtcE91dHB1dEZpbGUgPSBvdXRwdXRGaWxlO1xuXG4gIGlmKCh1c2VBbmFseXplIHx8IHVzZURlYnVnKSAmJiAhb3V0cHV0RmlsZSkge1xuICAgIHRlbXBPdXRwdXRGaWxlID0gJy5sZXgtdGVzdC1yZXN1bHRzLmpzb24nO1xuICAgIGplc3RPcHRpb25zLnB1c2goJy0tanNvbicsICctLW91dHB1dEZpbGUnLCB0ZW1wT3V0cHV0RmlsZSk7XG4gIH0gZWxzZSBpZihvdXRwdXRGaWxlKSB7XG4gICAgamVzdE9wdGlvbnMucHVzaCgnLS1vdXRwdXRGaWxlJywgb3V0cHV0RmlsZSk7XG4gIH1cblxuICBpZihwYXNzV2l0aE5vVGVzdHMpIHtcbiAgICBqZXN0T3B0aW9ucy5wdXNoKCctLXBhc3NXaXRoTm9UZXN0cycpO1xuICB9XG5cbiAgaWYocnVuSW5CYW5kKSB7XG4gICAgamVzdE9wdGlvbnMucHVzaCgnLS1ydW5JbkJhbmQnKTtcbiAgfVxuXG4gIGlmKHNob3dDb25maWcpIHtcbiAgICBqZXN0T3B0aW9ucy5wdXNoKCctLXNob3dDb25maWcnKTtcbiAgfVxuXG4gIGlmKHNpbGVudCkge1xuICAgIGplc3RPcHRpb25zLnB1c2goJy0tc2lsZW50Jyk7XG4gIH1cblxuICBpZih0ZXN0TG9jYXRpb25JblJlc3VsdHMpIHtcbiAgICBqZXN0T3B0aW9ucy5wdXNoKCctLXRlc3RMb2NhdGlvbkluUmVzdWx0cycpO1xuICB9XG5cbiAgaWYodGVzdE5hbWVQYXR0ZXJuKSB7XG4gICAgamVzdE9wdGlvbnMucHVzaCgnLS10ZXN0TmFtZVBhdHRlcm4nLCB0ZXN0TmFtZVBhdHRlcm4pO1xuICB9XG5cbiAgaWYodGVzdFBhdGhQYXR0ZXJuKSB7XG4gICAgamVzdE9wdGlvbnMucHVzaCgnLS10ZXN0UGF0aFBhdHRlcm5zJywgdGVzdFBhdGhQYXR0ZXJuKTtcbiAgfVxuXG4gIGlmKHVzZVN0ZGVycikge1xuICAgIGplc3RPcHRpb25zLnB1c2goJy0tdXNlU3RkZXJyJyk7XG4gIH1cblxuICBpZih2ZXJib3NlKSB7XG4gICAgamVzdE9wdGlvbnMucHVzaCgnLS12ZXJib3NlJyk7XG4gIH1cblxuICBpZih3YXRjaEFsbCkge1xuICAgIGplc3RPcHRpb25zLnB1c2goJy0td2F0Y2hBbGwnKTtcbiAgfVxuXG4gIGlmKHJlbW92ZUNhY2hlKSB7XG4gICAgamVzdE9wdGlvbnMucHVzaCgnLS1uby1jYWNoZScpO1xuICB9XG5cbiAgaWYoamVzdFNldHVwRmlsZSAmJiBleGlzdHNTeW5jKGplc3RTZXR1cEZpbGUpKSB7XG4gICAgamVzdE9wdGlvbnMucHVzaChgLS1zZXR1cEZpbGVzQWZ0ZXJFbnY9JHtqZXN0U2V0dXBGaWxlfWApO1xuICB9XG5cbiAgaWYodXBkYXRlKSB7XG4gICAgamVzdE9wdGlvbnMucHVzaCgnLS11cGRhdGVTbmFwc2hvdCcpO1xuICB9XG5cbiAgaWYod2F0Y2gpIHtcbiAgICBqZXN0T3B0aW9ucy5wdXNoKCctLXdhdGNoJywgd2F0Y2gpO1xuICB9XG5cbiAgaWYoYXJncykge1xuICAgIGplc3RPcHRpb25zLnB1c2goLi4uYXJncyk7XG4gIH1cblxuICBpZihkZWJ1Zykge1xuICAgIGxvZyhgSmVzdCBvcHRpb25zOiAke2plc3RPcHRpb25zLmpvaW4oJyAnKX1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICBsb2coYE5PREVfT1BUSU9OUzogJHtub2RlT3B0aW9uc31gLCAnaW5mbycsIHF1aWV0KTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgZW52OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgLi4ucHJvY2Vzcy5lbnYsXG4gICAgICBOT0RFX09QVElPTlM6IG5vZGVPcHRpb25zXG4gICAgfTtcblxuICAgIGF3YWl0IGV4ZWNhKGplc3RQYXRoLCBqZXN0T3B0aW9ucywge1xuICAgICAgZW5jb2Rpbmc6ICd1dGY4JyxcbiAgICAgIHN0ZGlvOiAnaW5oZXJpdCcsXG4gICAgICBlbnZcbiAgICB9KTtcblxuICAgIHNwaW5uZXIuc3VjY2VlZCgnVGVzdGluZyBjb21wbGV0ZWQhJyk7XG5cbiAgICBpZih1c2VBbmFseXplKSB7XG4gICAgICBzcGlubmVyLnN0YXJ0KCdBSSBpcyBhbmFseXppbmcgdGVzdCBjb3ZlcmFnZSBhbmQgc3VnZ2VzdGluZyBpbXByb3ZlbWVudHMuLi4nKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgdGVzdFJlc3VsdHMgPSBwcm9jZXNzVGVzdFJlc3VsdHModGVtcE91dHB1dEZpbGUpO1xuICAgICAgICBjb25zdCBmaWxlUGF0dGVybnMgPSBnZXRUZXN0RmlsZVBhdHRlcm5zKHRlc3RQYXRoUGF0dGVybik7XG5cbiAgICAgICAgYXdhaXQgYWlGdW5jdGlvbih7XG4gICAgICAgICAgcHJvbXB0OiBgQW5hbHl6ZSB0aGVzZSBKZXN0IHRlc3QgcmVzdWx0cyBhbmQgc3VnZ2VzdCB0ZXN0IGNvdmVyYWdlIGltcHJvdmVtZW50czpcblxuJHtKU09OLnN0cmluZ2lmeSh0ZXN0UmVzdWx0cywgbnVsbCwgMil9XG5cblRlc3QgcGF0dGVybnM6ICR7ZmlsZVBhdHRlcm5zLmpvaW4oJywgJyl9XG5cblBsZWFzZSBwcm92aWRlOlxuMS4gQW5hbHlzaXMgb2YgY3VycmVudCBjb3ZlcmFnZSBnYXBzXG4yLiBTdWdnZXN0aW9ucyBmb3IgaW1wcm92aW5nIHRlc3QgY2FzZXNcbjMuIFJlY29tbWVuZGF0aW9ucyBmb3IgYWRkaXRpb25hbCBpbnRlZ3JhdGlvbiB0ZXN0IHNjZW5hcmlvc1xuNC4gQmVzdCBwcmFjdGljZXMgZm9yIGluY3JlYXNpbmcgdGVzdCBlZmZlY3RpdmVuZXNzYCxcbiAgICAgICAgICB0YXNrOiAnb3B0aW1pemUnLFxuICAgICAgICAgIGNvbnRleHQ6IHRydWUsXG4gICAgICAgICAgcXVpZXRcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc3Bpbm5lci5zdWNjZWVkKCdBSSB0ZXN0IGFuYWx5c2lzIGNvbXBsZXRlJyk7XG4gICAgICB9IGNhdGNoKGFpRXJyb3IpIHtcbiAgICAgICAgc3Bpbm5lci5mYWlsKCdDb3VsZCBub3QgZ2VuZXJhdGUgQUkgdGVzdCBhbmFseXNpcycpO1xuICAgICAgICBpZighcXVpZXQpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdBSSBhbmFseXNpcyBlcnJvcjonLCBhaUVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNhbGxiYWNrKDApO1xuICAgIHJldHVybiAwO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBDaGVjayBmb3IgdW5pdCB0ZXN0IGVycm9ycyBhbmQvb3IgY292ZXJhZ2UuYCwgJ2Vycm9yJywgcXVpZXQpO1xuXG4gICAgc3Bpbm5lci5mYWlsKCdUZXN0aW5nIGZhaWxlZCEnKTtcblxuICAgIGlmKHVzZURlYnVnKSB7XG4gICAgICBzcGlubmVyLnN0YXJ0KCdBSSBpcyBhbmFseXppbmcgdGVzdCBmYWlsdXJlcy4uLicpO1xuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB0ZXN0UmVzdWx0cyA9IHByb2Nlc3NUZXN0UmVzdWx0cyh0ZW1wT3V0cHV0RmlsZSk7XG5cbiAgICAgICAgYXdhaXQgYWlGdW5jdGlvbih7XG4gICAgICAgICAgcHJvbXB0OiBgRGVidWcgdGhlc2UgZmFpbGVkIEplc3QgdGVzdHMgYW5kIHN1Z2dlc3QgZml4ZXM6XG5cbiR7SlNPTi5zdHJpbmdpZnkoZXJyb3IubWVzc2FnZSwgbnVsbCwgMil9XG5cblRlc3QgcmVzdWx0czogJHtKU09OLnN0cmluZ2lmeSh0ZXN0UmVzdWx0cywgbnVsbCwgMil9XG5cblBsZWFzZSBwcm92aWRlOlxuMS4gQW5hbHlzaXMgb2Ygd2h5IHRoZSB0ZXN0cyBhcmUgZmFpbGluZ1xuMi4gU3BlY2lmaWMgc3VnZ2VzdGlvbnMgdG8gZml4IGVhY2ggZmFpbGluZyB0ZXN0XG4zLiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHRlc3QgZml4dHVyZXMgb3IgbW9ja3NcbjQuIENvZGUgZXhhbXBsZXMgZm9yIHNvbHV0aW9uc2AsXG4gICAgICAgICAgdGFzazogJ2hlbHAnLFxuICAgICAgICAgIGNvbnRleHQ6IHRydWUsXG4gICAgICAgICAgcXVpZXRcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc3Bpbm5lci5zdWNjZWVkKCdBSSBkZWJ1Z2dpbmcgYXNzaXN0YW5jZSBjb21wbGV0ZScpO1xuICAgICAgfSBjYXRjaChhaUVycm9yKSB7XG4gICAgICAgIHNwaW5uZXIuZmFpbCgnQ291bGQgbm90IGdlbmVyYXRlIEFJIGRlYnVnZ2luZyBhc3Npc3RhbmNlJyk7XG4gICAgICAgIGlmKCFxdWlldCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0FJIGRlYnVnZ2luZyBlcnJvcjonLCBhaUVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNhbGxiYWNrKDEpO1xuICAgIHJldHVybiAxO1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCB0ZXN0OyJdLAogICJtYXBwaW5ncyI6ICJBQUlBLFNBQVEsYUFBWTtBQUNwQixTQUFRLFlBQVksb0JBQW1CO0FBQ3ZDLFNBQVEsUUFBUSxnQkFBZTtBQUMvQixTQUFRLFdBQVcsbUJBQWtCO0FBRXJDLFNBQVEsV0FBVywrQkFBOEI7QUFDakQsU0FBUSxxQkFBb0I7QUFDNUIsU0FBUSxZQUFZLHlCQUF3QjtBQUM1QyxTQUFRLFdBQVU7QUFDbEIsU0FBUSxrQkFBaUI7QUFFekIsTUFBTSxZQUFZLENBQUMsUUFBeUI7QUFDMUMsUUFBTSxrQkFBa0IsWUFBWSxLQUFLLGNBQWM7QUFFdkQsTUFBRyxXQUFXLGVBQWUsR0FBRztBQUM5QixRQUFJO0FBQ0YsWUFBTSxxQkFBcUIsYUFBYSxpQkFBaUIsTUFBTTtBQUMvRCxZQUFNLGNBQWMsS0FBSyxNQUFNLGtCQUFrQjtBQUNqRCxhQUFPLFlBQVksU0FBUztBQUFBLElBQzlCLFNBQVEsUUFBUTtBQUNkLGFBQU87QUFBQSxJQUNUO0FBQUEsRUFDRjtBQUVBLFNBQU87QUFDVDtBQW1ETyxNQUFNLHNCQUFzQixDQUFDLG9CQUF1QztBQUN6RSxRQUFNLGtCQUFrQixDQUFDLGVBQWUsZUFBZSxvQkFBb0I7QUFFM0UsTUFBRyxDQUFDLGlCQUFpQjtBQUNuQixXQUFPO0FBQUEsRUFDVDtBQUVBLFNBQU8sQ0FBQyxlQUFlO0FBQ3pCO0FBRUEsTUFBTSwyQkFBMkIsTUFBZ0I7QUFDL0MsUUFBTSxjQUFjLFNBQVMsNEJBQTRCO0FBQUEsSUFDdkQsS0FBSyxRQUFRLElBQUk7QUFBQSxJQUNqQixRQUFRLENBQUMsc0JBQXNCLGNBQWMsZUFBZSxhQUFhO0FBQUEsRUFDM0UsQ0FBQztBQUVELFFBQU0sWUFBWSxTQUFTLG9DQUFvQztBQUFBLElB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
429
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL3Rlc3QvdGVzdC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7ZXhlY2F9IGZyb20gJ2V4ZWNhJztcbmltcG9ydCB7ZXhpc3RzU3luYywgcmVhZEZpbGVTeW5jfSBmcm9tICdmcyc7XG5pbXBvcnQge3N5bmMgYXMgZ2xvYlN5bmN9IGZyb20gJ2dsb2InO1xuaW1wb3J0IHtyZXNvbHZlIGFzIHBhdGhSZXNvbHZlfSBmcm9tICdwYXRoJztcblxuaW1wb3J0IHtMZXhDb25maWcsIGdldFR5cGVTY3JpcHRDb25maWdQYXRofSBmcm9tICcuLi8uLi9MZXhDb25maWcuanMnO1xuaW1wb3J0IHtjcmVhdGVTcGlubmVyfSBmcm9tICcuLi8uLi91dGlscy9hcHAuanMnO1xuaW1wb3J0IHtnZXREaXJOYW1lLCByZXNvbHZlQmluYXJ5UGF0aH0gZnJvbSAnLi4vLi4vdXRpbHMvZmlsZS5qcyc7XG5pbXBvcnQge2xvZ30gZnJvbSAnLi4vLi4vdXRpbHMvbG9nLmpzJztcbmltcG9ydCB7YWlGdW5jdGlvbn0gZnJvbSAnLi4vYWkvYWkuanMnO1xuXG5jb25zdCBkZXRlY3RFU00gPSAoY3dkOiBzdHJpbmcpOiBib29sZWFuID0+IHtcbiAgY29uc3QgcGFja2FnZUpzb25QYXRoID0gcGF0aFJlc29sdmUoY3dkLCAncGFja2FnZS5qc29uJyk7XG5cbiAgaWYoZXhpc3RzU3luYyhwYWNrYWdlSnNvblBhdGgpKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhY2thZ2VKc29uQ29udGVudCA9IHJlYWRGaWxlU3luYyhwYWNrYWdlSnNvblBhdGgsICd1dGY4Jyk7XG4gICAgICBjb25zdCBwYWNrYWdlSnNvbiA9IEpTT04ucGFyc2UocGFja2FnZUpzb25Db250ZW50KTtcbiAgICAgIHJldHVybiBwYWNrYWdlSnNvbi50eXBlID09PSAnbW9kdWxlJztcbiAgICB9IGNhdGNoKF9lcnJvcikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGVzdE9wdGlvbnMge1xuICByZWFkb25seSBhbmFseXplPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgYWlEZWJ1Zz86IGJvb2xlYW47XG4gIHJlYWRvbmx5IGFpR2VuZXJhdGU/OiBib29sZWFuO1xuICByZWFkb25seSBhaUFuYWx5emU/OiBib29sZWFuO1xuICByZWFkb25seSBiYWlsPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgY2hhbmdlZEZpbGVzV2l0aEFuY2VzdG9yPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgY2hhbmdlZFNpbmNlPzogc3RyaW5nO1xuICByZWFkb25seSBjaT86IGJvb2xlYW47XG4gIHJlYWRvbmx5IGNsaU5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNvbGxlY3RDb3ZlcmFnZUZyb20/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNvbG9ycz86IGJvb2xlYW47XG4gIHJlYWRvbmx5IGNvbmZpZz86IHN0cmluZztcbiAgcmVhZG9ubHkgZGVidWc/OiBib29sZWFuO1xuICByZWFkb25seSBkZWJ1Z1Rlc3RzPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgZGV0ZWN0T3BlbkhhbmRsZXM/OiBib29sZWFuO1xuICByZWFkb25seSBlbnY/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGVycm9yT25EZXByZWNhdGVkPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgZXhwYW5kPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgZm9yY2VFeGl0PzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgZ2VuZXJhdGU/OiBib29sZWFuO1xuICByZWFkb25seSBqc29uPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgbGFzdENvbW1pdD86IGJvb2xlYW47XG4gIHJlYWRvbmx5IGxpc3RUZXN0cz86IGJvb2xlYW47XG4gIHJlYWRvbmx5IGxvZ0hlYXBVc2FnZT86IGJvb2xlYW47XG4gIHJlYWRvbmx5IG1heFdvcmtlcnM/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IG5vU3RhY2tUcmFjZT86IGJvb2xlYW47XG4gIHJlYWRvbmx5IG5vdGlmeT86IGJvb2xlYW47XG4gIHJlYWRvbmx5IG9ubHlDaGFuZ2VkPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgb3V0cHV0RmlsZT86IHN0cmluZztcbiAgcmVhZG9ubHkgcGFzc1dpdGhOb1Rlc3RzPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgcXVpZXQ/OiBib29sZWFuO1xuICByZWFkb25seSByZW1vdmVDYWNoZT86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHJ1bkluQmFuZD86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHNldHVwPzogc3RyaW5nO1xuICByZWFkb25seSBzaG93Q29uZmlnPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgc2lsZW50PzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgdGVzdExvY2F0aW9uSW5SZXN1bHRzPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgdGVzdE5hbWVQYXR0ZXJuPzogc3RyaW5nO1xuICByZWFkb25seSB0ZXN0UGF0aFBhdHRlcm4/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHVwZGF0ZT86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHVzZVN0ZGVycj86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHZlcmJvc2U/OiBib29sZWFuO1xuICByZWFkb25seSB3YXRjaD86IHN0cmluZztcbiAgcmVhZG9ubHkgd2F0Y2hBbGw/OiBib29sZWFuO1xufVxuXG5leHBvcnQgdHlwZSBUZXN0Q2FsbGJhY2sgPSB0eXBlb2YgcHJvY2Vzcy5leGl0O1xuXG5leHBvcnQgY29uc3QgZ2V0VGVzdEZpbGVQYXR0ZXJucyA9ICh0ZXN0UGF0aFBhdHRlcm4/OiBzdHJpbmcpOiBzdHJpbmdbXSA9PiB7XG4gIGNvbnN0IGRlZmF1bHRQYXR0ZXJucyA9IFsnKiovKi50ZXN0LionLCAnKiovKi5zcGVjLionLCAnKiovKi5pbnRlZ3JhdGlvbi4qJ107XG5cbiAgaWYoIXRlc3RQYXRoUGF0dGVybikge1xuICAgIHJldHVybiBkZWZhdWx0UGF0dGVybnM7XG4gIH1cblxuICByZXR1cm4gW3Rlc3RQYXRoUGF0dGVybl07XG59O1xuXG5jb25zdCBmaW5kVW5jb3ZlcmVkU291cmNlRmlsZXMgPSAoKTogc3RyaW5nW10gPT4ge1xuICBjb25zdCBzb3VyY2VGaWxlcyA9IGdsb2JTeW5jKCdzcmMvKiovKi57dHMsdHN4LGpzLGpzeH0nLCB7XG4gICAgY3dkOiBwcm9jZXNzLmN3ZCgpLFxuICAgIGlnbm9yZTogWycqKi9ub2RlX21vZHVsZXMvKionLCAnKiovZGlzdC8qKicsICcqKi8qLnRlc3QuKicsICcqKi8qLnNwZWMuKiddXG4gIH0pO1xuXG4gIGNvbnN0IHRlc3RGaWxlcyA9IGdsb2JTeW5jKCcqKi8qLnt0ZXN0LHNwZWN9Lnt0cyx0c3gsanMsanN4fScsIHtcbiAgICBjd2Q6IHByb2Nlc3MuY3dkKCksXG4gICAgaWdub3JlOiBbJyoqL25vZGVfbW9kdWxlcy8qKicsICcqKi9kaXN0LyoqJ11cbiAgfSk7XG5cbiAgcmV0dXJuIHNvdXJjZUZpbGVzLmZpbHRlcigoc291cmNlRmlsZSkgPT4ge1xuICAgIGNvbnN0IGJhc2VOYW1lID0gc291cmNlRmlsZS5yZXBsYWNlKC9cXC5bXi8uXSskLywgJycpO1xuICAgIHJldHVybiAhdGVzdEZpbGVzLnNvbWUoKHRlc3RGaWxlKSA9PiB0ZXN0RmlsZS5pbmNsdWRlcyhiYXNlTmFtZSkpO1xuICB9KTtcbn07XG5cbmNvbnN0IHByb2Nlc3NUZXN0UmVzdWx0cyA9IChvdXRwdXRGaWxlPzogc3RyaW5nKTogYW55ID0+IHtcbiAgaWYoIW91dHB1dEZpbGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgY29udGVudCA9IHJlYWRGaWxlU3luYyhvdXRwdXRGaWxlLCAndXRmLTgnKTtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShjb250ZW50KTtcbiAgfSBjYXRjaChfZXJyb3IpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHRlc3QgPSBhc3luYyAob3B0aW9uczogVGVzdE9wdGlvbnMsIGFyZ3M6IHN0cmluZ1tdLCBjYWxsYmFjazogVGVzdENhbGxiYWNrID0gcHJvY2Vzcy5leGl0KTogUHJvbWlzZTxudW1iZXI+ID0+IHtcbiAgY29uc3Qge1xuICAgIGFuYWx5emUgPSBmYWxzZSxcbiAgICBhaUFuYWx5emUgPSBmYWxzZSxcbiAgICBhaURlYnVnID0gZmFsc2UsXG4gICAgYWlHZW5lcmF0ZSA9IGZhbHNlLFxuICAgIGJhaWwsXG4gICAgY2hhbmdlZEZpbGVzV2l0aEFuY2VzdG9yLFxuICAgIGNoYW5nZWRTaW5jZSxcbiAgICBjaSxcbiAgICBjbGlOYW1lID0gJ0xleCcsXG4gICAgY29sbGVjdENvdmVyYWdlRnJvbSxcbiAgICBjb2xvcnMsXG4gICAgY29uZmlnLFxuICAgIGRlYnVnID0gZmFsc2UsXG4gICAgZGVidWdUZXN0cyA9IGZhbHNlLFxuICAgIGRldGVjdE9wZW5IYW5kbGVzLFxuICAgIGVudixcbiAgICBlcnJvck9uRGVwcmVjYXRlZCxcbiAgICBleHBhbmQsXG4gICAgZm9yY2VFeGl0LFxuICAgIGdlbmVyYXRlID0gZmFsc2UsXG4gICAganNvbixcbiAgICBsYXN0Q29tbWl0LFxuICAgIGxpc3RUZXN0cyxcbiAgICBsb2dIZWFwVXNhZ2UsXG4gICAgbWF4V29ya2VycyxcbiAgICBub1N0YWNrVHJhY2UsXG4gICAgbm90aWZ5LFxuICAgIG9ubHlDaGFuZ2VkLFxuICAgIG91dHB1dEZpbGUsXG4gICAgcGFzc1dpdGhOb1Rlc3RzLFxuICAgIHF1aWV0LFxuICAgIHJlbW92ZUNhY2hlLFxuICAgIHJ1bkluQmFuZCxcbiAgICBzZXR1cCxcbiAgICBzaG93Q29uZmlnLFxuICAgIHNpbGVudCxcbiAgICB0ZXN0TG9jYXRpb25JblJlc3VsdHMsXG4gICAgdGVzdE5hbWVQYXR0ZXJuLFxuICAgIHRlc3RQYXRoUGF0dGVybixcbiAgICB1cGRhdGUsXG4gICAgdXNlU3RkZXJyLFxuICAgIHZlcmJvc2UsXG4gICAgd2F0Y2gsXG4gICAgd2F0Y2hBbGxcbiAgfSA9IG9wdGlvbnM7XG5cbiAgY29uc3QgdXNlR2VuZXJhdGUgPSBnZW5lcmF0ZSB8fCBhaUdlbmVyYXRlO1xuICBjb25zdCB1c2VBbmFseXplID0gYW5hbHl6ZSB8fCBhaUFuYWx5emU7XG4gIGNvbnN0IHVzZURlYnVnID0gZGVidWdUZXN0cyB8fCBhaURlYnVnO1xuXG4gIGxvZyhgJHtjbGlOYW1lfSB0ZXN0aW5nLi4uYCwgJ2luZm8nLCBxdWlldCk7XG5cbiAgY29uc3Qgc3Bpbm5lciA9IGNyZWF0ZVNwaW5uZXIocXVpZXQpO1xuXG4gIGF3YWl0IExleENvbmZpZy5wYXJzZUNvbmZpZyhvcHRpb25zKTtcblxuICBjb25zdCB7dXNlVHlwZXNjcmlwdH0gPSBMZXhDb25maWcuY29uZmlnO1xuXG4gIGlmKHVzZVR5cGVzY3JpcHQpIHtcbiAgICBjb25zdCB0ZXN0Q29uZmlnUGF0aCA9IGdldFR5cGVTY3JpcHRDb25maWdQYXRoKCd0c2NvbmZpZy50ZXN0Lmpzb24nKTtcbiAgICBpZihleGlzdHNTeW5jKHRlc3RDb25maWdQYXRoKSkge1xuICAgICAgbG9nKCdVc2luZyB0c2NvbmZpZy50ZXN0Lmpzb24gZm9yIHRlc3RpbmcuLi4nLCAnaW5mbycsIHF1aWV0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgTGV4Q29uZmlnLmNoZWNrVGVzdFR5cGVzY3JpcHRDb25maWcoKTtcbiAgICB9XG4gIH1cblxuICBpZih1c2VHZW5lcmF0ZSkge1xuICAgIHNwaW5uZXIuc3RhcnQoJ0FJIGlzIGFuYWx5emluZyBjb2RlIHRvIGdlbmVyYXRlIHRlc3QgY2FzZXMuLi4nKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCB1bmNvdmVyZWRGaWxlcyA9IGZpbmRVbmNvdmVyZWRTb3VyY2VGaWxlcygpO1xuXG4gICAgICBpZih1bmNvdmVyZWRGaWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldEZpbGUgPSB1bmNvdmVyZWRGaWxlc1swXTtcblxuICAgICAgICBhd2FpdCBhaUZ1bmN0aW9uKHtcbiAgICAgICAgICBwcm9tcHQ6IGBHZW5lcmF0ZSBKZXN0IHVuaXQgdGVzdHMgZm9yIHRoaXMgZmlsZTogJHt0YXJnZXRGaWxlfVxcblxcbiR7cmVhZEZpbGVTeW5jKHRhcmdldEZpbGUsICd1dGYtOCcpfVxcblxcblBsZWFzZSBjcmVhdGUgY29tcHJlaGVuc2l2ZSB0ZXN0cyB0aGF0IGNvdmVyIHRoZSBtYWluIGZ1bmN0aW9uYWxpdHkuIEluY2x1ZGUgdGVzdCBmaXh0dXJlcyBhbmQgbW9ja3Mgd2hlcmUgbmVjZXNzYXJ5LmAsXG4gICAgICAgICAgdGFzazogJ3Rlc3QnLFxuICAgICAgICAgIGZpbGU6IHRhcmdldEZpbGUsXG4gICAgICAgICAgY29udGV4dDogdHJ1ZSxcbiAgICAgICAgICBxdWlldFxuICAgICAgICB9KTtcblxuICAgICAgICBzcGlubmVyLnN1Y2NlZWQoYEFJIHRlc3QgZ2VuZXJhdGlvbiBzdWdnZXN0aW9ucyBwcm92aWRlZCBmb3IgJHt0YXJnZXRGaWxlfWApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3Bpbm5lci5zdWNjZWVkKCdBbGwgc291cmNlIGZpbGVzIGFwcGVhciB0byBoYXZlIGNvcnJlc3BvbmRpbmcgdGVzdCBmaWxlcycpO1xuICAgICAgfVxuICAgIH0gY2F0Y2goYWlFcnJvcikge1xuICAgICAgc3Bpbm5lci5mYWlsKCdDb3VsZCBub3QgZ2VuZXJhdGUgQUkgdGVzdCBzdWdnZXN0aW9ucycpO1xuICAgICAgaWYoIXF1aWV0KSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0FJIHRlc3QgZ2VuZXJhdGlvbiBlcnJvcjonLCBhaUVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBkaXJOYW1lID0gZ2V0RGlyTmFtZSgpO1xuICBjb25zdCBkaXJQYXRoOiBzdHJpbmcgPSBwYXRoUmVzb2x2ZShkaXJOYW1lLCAnLi4vLi4nKTtcblxuICBjb25zdCBwcm9qZWN0SmVzdEJpbiA9IHBhdGhSZXNvbHZlKHByb2Nlc3MuY3dkKCksICdub2RlX21vZHVsZXMvLmJpbi9qZXN0Jyk7XG4gIGxldCBqZXN0UGF0aDogc3RyaW5nO1xuICBpZihleGlzdHNTeW5jKHByb2plY3RKZXN0QmluKSkge1xuICAgIGplc3RQYXRoID0gcHJvamVjdEplc3RCaW47XG4gIH0gZWxzZSB7XG4gICAgamVzdFBhdGggPSByZXNvbHZlQmluYXJ5UGF0aCgnamVzdCcpO1xuICB9XG5cbiAgaWYoIWplc3RQYXRoKSB7XG4gICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBKZXN0IGJpbmFyeSBub3QgZm91bmQgaW4gTGV4J3Mgbm9kZV9tb2R1bGVzIG9yIG1vbm9yZXBvIHJvb3RgLCAnZXJyb3InLCBxdWlldCk7XG4gICAgbG9nKCdQbGVhc2UgcmVpbnN0YWxsIExleCBvciBjaGVjayB5b3VyIGluc3RhbGxhdGlvbi4nLCAnaW5mbycsIHF1aWV0KTtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIGxldCBqZXN0Q29uZmlnRmlsZTogc3RyaW5nO1xuICBsZXQgcHJvamVjdEplc3RDb25maWc6IGFueSA9IG51bGw7XG5cbiAgaWYoY29uZmlnKSB7XG4gICAgamVzdENvbmZpZ0ZpbGUgPSBjb25maWc7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgcHJvamVjdEplc3RDb25maWdQYXRoID0gcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJ2plc3QuY29uZmlnLmpzJyk7XG4gICAgY29uc3QgcHJvamVjdEplc3RDb25maWdDanNQYXRoID0gcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJ2plc3QuY29uZmlnLmNqcycpO1xuICAgIGNvbnN0IHByb2plY3RKZXN0Q29uZmlnTWpzUGF0aCA9IHBhdGhSZXNvbHZlKHByb2Nlc3MuY3dkKCksICdqZXN0LmNvbmZpZy5tanMnKTtcbiAgICBjb25zdCBwcm9qZWN0SmVzdENvbmZpZ0pzb25QYXRoID0gcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJ2plc3QuY29uZmlnLmpzb24nKTtcblxuICAgIGlmKGV4aXN0c1N5bmMocHJvamVjdEplc3RDb25maWdQYXRoKSkge1xuICAgICAgamVzdENvbmZpZ0ZpbGUgPSBwcm9qZWN0SmVzdENvbmZpZ1BhdGg7XG4gICAgICBpZihkZWJ1Zykge1xuICAgICAgICBsb2coYFVzaW5nIHByb2plY3QgSmVzdCBjb25maWcgZmlsZTogJHtqZXN0Q29uZmlnRmlsZX1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYoZXhpc3RzU3luYyhwcm9qZWN0SmVzdENvbmZpZ0Nqc1BhdGgpKSB7XG4gICAgICBqZXN0Q29uZmlnRmlsZSA9IHByb2plY3RKZXN0Q29uZmlnQ2pzUGF0aDtcbiAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgIGxvZyhgVXNpbmcgcHJvamVjdCBKZXN0IGNvbmZpZyBmaWxlIChDSlMpOiAke2plc3RDb25maWdGaWxlfWAsICdpbmZvJywgcXVpZXQpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZihleGlzdHNTeW5jKHByb2plY3RKZXN0Q29uZmlnTWpzUGF0aCkpIHtcbiAgICAgIGplc3RDb25maWdGaWxlID0gcHJvamVjdEplc3RDb25maWdNanNQYXRoO1xuICAgICAgaWYoZGVidWcpIHtcbiAgICAgICAgbG9nKGBVc2luZyBwcm9qZWN0IEplc3QgY29uZmlnIGZpbGUgKE1KUyk6ICR7amVzdENvbmZpZ0ZpbGV9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmKGV4aXN0c1N5bmMocHJvamVjdEplc3RDb25maWdKc29uUGF0aCkpIHtcbiAgICAgIGplc3RDb25maWdGaWxlID0gcHJvamVjdEplc3RDb25maWdKc29uUGF0aDtcbiAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgIGxvZyhgVXNpbmcgcHJvamVjdCBKZXN0IGNvbmZpZyBmaWxlIChKU09OKTogJHtqZXN0Q29uZmlnRmlsZX1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTm8gSmVzdCBjb25maWcgZmlsZSBleGlzdHMgaW4gdGhlIHByb2plY3RcbiAgICAgIC8vIENoZWNrIGlmIHRoZXJlJ3MgYSBKZXN0IGNvbmZpZyBpbiBsZXguY29uZmlnLmNqc1xuICAgICAgcHJvamVjdEplc3RDb25maWcgPSBMZXhDb25maWcuY29uZmlnLmplc3Q7XG5cbiAgICAgIGNvbnN0IGxleERpciA9IExleENvbmZpZy5nZXRMZXhEaXIoKTtcbiAgICAgIGNvbnN0IGxleEplc3RDb25maWcgPSBwYXRoUmVzb2x2ZShsZXhEaXIsICdqZXN0LmNvbmZpZy5tanMnKTtcblxuICAgICAgaWYoZGVidWcpIHtcbiAgICAgICAgbG9nKGBMb29raW5nIGZvciBKZXN0IGNvbmZpZyBhdDogJHtsZXhKZXN0Q29uZmlnfWAsICdpbmZvJywgcXVpZXQpO1xuICAgICAgICBsb2coYEZpbGUgZXhpc3RzOiAke2V4aXN0c1N5bmMobGV4SmVzdENvbmZpZyl9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICB9XG5cbiAgICAgIGlmKGV4aXN0c1N5bmMobGV4SmVzdENvbmZpZykpIHtcbiAgICAgICAgamVzdENvbmZpZ0ZpbGUgPSBsZXhKZXN0Q29uZmlnO1xuICAgICAgICBpZihwcm9qZWN0SmVzdENvbmZpZyAmJiBPYmplY3Qua2V5cyhwcm9qZWN0SmVzdENvbmZpZykubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgICAgICBsb2coYFVzaW5nIExleCBKZXN0IGNvbmZpZyB3aXRoIHByb2plY3QgSmVzdCBjb25maWcgZnJvbSBsZXguY29uZmlnLmNqczogJHtqZXN0Q29uZmlnRmlsZX1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYoZGVidWcpIHtcbiAgICAgICAgICAgIGxvZyhgVXNpbmcgTGV4IEplc3QgY29uZmlnIChubyBwcm9qZWN0IEplc3QgY29uZmlnIGZvdW5kKTogJHtqZXN0Q29uZmlnRmlsZX1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgICAgbG9nKCdObyBKZXN0IGNvbmZpZyBmb3VuZCBpbiBwcm9qZWN0IG9yIExleCcsICd3YXJuJywgcXVpZXQpO1xuICAgICAgICB9XG4gICAgICAgIGplc3RDb25maWdGaWxlID0gJyc7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgamVzdFNldHVwRmlsZTogc3RyaW5nID0gc2V0dXAgfHwgcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJ2plc3Quc2V0dXAuanMnKTtcbiAgY29uc3QgamVzdE9wdGlvbnM6IHN0cmluZ1tdID0gWyctLW5vLWNhY2hlJ107XG5cbiAgY29uc3QgaXNFU00gPSBkZXRlY3RFU00ocHJvY2Vzcy5jd2QoKSk7XG4gIGxldCBub2RlT3B0aW9ucyA9IHByb2Nlc3MuZW52Lk5PREVfT1BUSU9OUyB8fCAnJztcbiAgaWYoaXNFU00pIHtcbiAgICBpZighbm9kZU9wdGlvbnMuaW5jbHVkZXMoJy0tZXhwZXJpbWVudGFsLXZtLW1vZHVsZXMnKSkge1xuICAgICAgbm9kZU9wdGlvbnMgPSBgJHtub2RlT3B0aW9uc30gLS1leHBlcmltZW50YWwtdm0tbW9kdWxlc2AudHJpbSgpO1xuICAgIH1cbiAgICBsb2coJ0VTTSBwcm9qZWN0IGRldGVjdGVkLCB1c2luZyAtLWV4cGVyaW1lbnRhbC12bS1tb2R1bGVzIGluIE5PREVfT1BUSU9OUycsICdpbmZvJywgcXVpZXQpO1xuICB9XG5cbiAgaWYoamVzdENvbmZpZ0ZpbGUpIHtcbiAgICBqZXN0T3B0aW9ucy5wdXNoKCctLWNvbmZpZycsIGplc3RDb25maWdGaWxlKTtcbiAgfVxuXG4gIGlmKGJhaWwpIHtcbiAgICBqZXN0T3B0aW9ucy5wdXNoKCctLWJhaWwnKTtcbiAgfVxuXG4gIGlmKGNoYW5nZWRGaWxlc1dpdGhBbmNlc3Rvcikge1xuICAgIGplc3RPcHRpb25zLnB1c2goJy0tY2hhbmdlZEZpbGVzV2l0aEFuY2VzdG9yJyk7XG4gIH1cblxuICBpZihjaGFuZ2VkU2luY2UpIHtcbiAgICBqZXN0T3B0aW9ucy5wdXNoKCctLWNoYW5nZWRTaW5jZScpO1xuICB9XG5cbiAgaWYoY2kpIHtcbiAgICBqZXN0T3B0aW9ucy5wdXNoKCctLWNpJyk7XG4gIH1cblxuICBpZihjb2xsZWN0Q292ZXJhZ2VGcm9tKSB7XG4gICAgamVzdE9wdGlvbnMucHVzaCgnLS1jb2xsZWN0Q292ZXJhZ2VGcm9tJywgY29sbGVjdENvdmVyYWdlRnJvbSk7XG4gIH1cblxuICBpZihjb2xvcnMpIHtcbiAgICBqZXN0T3B0aW9ucy5wdXNoKCctLWNvbG9ycycpO1xuICB9XG5cbiAgaWYoZGVidWcpIHtcbiAgICBqZXN0T3B0aW9ucy5wdXNoKCctLWRlYnVnJyk7XG4gIH1cblxuICBpZihkZXRlY3RPcGVuSGFuZGxlcykge1xuICAgIGplc3RPcHRpb25zLnB1c2goJy0tZGV0ZWN0T3BlbkhhbmRsZXMnKTtcbiAgfVxuXG4gIGlmKGVudikge1xuICAgIGplc3RPcHRpb25zLnB1c2goJy0tZW52Jyk7XG4gIH1cblxuICBpZihlcnJvck9uRGVwcmVjYXRlZCkge1xuICAgIGplc3RPcHRpb25zLnB1c2goJy0tZXJyb3JPbkRlcHJlY2F0ZWQnKTtcbiAgfVxuXG4gIGlmKGV4cGFuZCkge1xuICAgIGplc3RPcHRpb25zLnB1c2goJy0tZXhwYW5kJyk7XG4gIH1cblxuICBpZihmb3JjZUV4aXQpIHtcbiAgICBqZXN0T3B0aW9ucy5wdXNoKCctLWZvcmNlRXhpdCcpO1xuICB9XG5cbiAgaWYoanNvbikge1xuICAgIGplc3RPcHRpb25zLnB1c2goJy0tanNvbicpO1xuICB9XG5cbiAgaWYobGFzdENvbW1pdCkge1xuICAgIGplc3RPcHRpb25zLnB1c2goJy0tbGFzdENvbW1pdCcpO1xuICB9XG5cbiAgaWYobGlzdFRlc3RzKSB7XG4gICAgamVzdE9wdGlvbnMucHVzaCgnLS1saXN0VGVzdHMnKTtcbiAgfVxuXG4gIGlmKGxvZ0hlYXBVc2FnZSkge1xuICAgIGplc3RPcHRpb25zLnB1c2goJy0tbG9nSGVhcFVzYWdlJyk7XG4gIH1cblxuICBpZihtYXhXb3JrZXJzKSB7XG4gICAgamVzdE9wdGlvbnMucHVzaCgnLS1tYXhXb3JrZXJzJywgbWF4V29ya2Vycyk7XG4gIH1cblxuICBpZihub1N0YWNrVHJhY2UpIHtcbiAgICBqZXN0T3B0aW9ucy5wdXNoKCctLW5vU3RhY2tUcmFjZScpO1xuICB9XG5cbiAgaWYobm90aWZ5KSB7XG4gICAgamVzdE9wdGlvbnMucHVzaCgnLS1ub3RpZnknKTtcbiAgfVxuXG4gIGlmKG9ubHlDaGFuZ2VkKSB7XG4gICAgamVzdE9wdGlvbnMucHVzaCgnLS1vbmx5Q2hhbmdlZCcpO1xuICB9XG5cbiAgbGV0IHRlbXBPdXRwdXRGaWxlID0gb3V0cHV0RmlsZTtcblxuICBpZigodXNlQW5hbHl6ZSB8fCB1c2VEZWJ1ZykgJiYgIW91dHB1dEZpbGUpIHtcbiAgICB0ZW1wT3V0cHV0RmlsZSA9ICcubGV4LXRlc3QtcmVzdWx0cy5qc29uJztcbiAgICBqZXN0T3B0aW9ucy5wdXNoKCctLWpzb24nLCAnLS1vdXRwdXRGaWxlJywgdGVtcE91dHB1dEZpbGUpO1xuICB9IGVsc2UgaWYob3V0cHV0RmlsZSkge1xuICAgIGplc3RPcHRpb25zLnB1c2goJy0tb3V0cHV0RmlsZScsIG91dHB1dEZpbGUpO1xuICB9XG5cbiAgaWYocGFzc1dpdGhOb1Rlc3RzKSB7XG4gICAgamVzdE9wdGlvbnMucHVzaCgnLS1wYXNzV2l0aE5vVGVzdHMnKTtcbiAgfVxuXG4gIGlmKHJ1bkluQmFuZCkge1xuICAgIGplc3RPcHRpb25zLnB1c2goJy0tcnVuSW5CYW5kJyk7XG4gIH1cblxuICBpZihzaG93Q29uZmlnKSB7XG4gICAgamVzdE9wdGlvbnMucHVzaCgnLS1zaG93Q29uZmlnJyk7XG4gIH1cblxuICBpZihzaWxlbnQpIHtcbiAgICBqZXN0T3B0aW9ucy5wdXNoKCctLXNpbGVudCcpO1xuICB9XG5cbiAgaWYodGVzdExvY2F0aW9uSW5SZXN1bHRzKSB7XG4gICAgamVzdE9wdGlvbnMucHVzaCgnLS10ZXN0TG9jYXRpb25JblJlc3VsdHMnKTtcbiAgfVxuXG4gIGlmKHRlc3ROYW1lUGF0dGVybikge1xuICAgIGplc3RPcHRpb25zLnB1c2goJy0tdGVzdE5hbWVQYXR0ZXJuJywgdGVzdE5hbWVQYXR0ZXJuKTtcbiAgfVxuXG4gIGlmKHRlc3RQYXRoUGF0dGVybikge1xuICAgIGplc3RPcHRpb25zLnB1c2goJy0tdGVzdFBhdGhQYXR0ZXJuJywgdGVzdFBhdGhQYXR0ZXJuKTtcbiAgfVxuXG4gIGlmKHVzZVN0ZGVycikge1xuICAgIGplc3RPcHRpb25zLnB1c2goJy0tdXNlU3RkZXJyJyk7XG4gIH1cblxuICBpZih2ZXJib3NlKSB7XG4gICAgamVzdE9wdGlvbnMucHVzaCgnLS12ZXJib3NlJyk7XG4gIH1cblxuICBpZih3YXRjaEFsbCkge1xuICAgIGplc3RPcHRpb25zLnB1c2goJy0td2F0Y2hBbGwnKTtcbiAgfVxuXG4gIGlmKHJlbW92ZUNhY2hlKSB7XG4gICAgamVzdE9wdGlvbnMucHVzaCgnLS1uby1jYWNoZScpO1xuICB9XG5cbiAgaWYoamVzdFNldHVwRmlsZSAmJiBleGlzdHNTeW5jKGplc3RTZXR1cEZpbGUpKSB7XG4gICAgamVzdE9wdGlvbnMucHVzaChgLS1zZXR1cEZpbGVzQWZ0ZXJFbnY9JHtqZXN0U2V0dXBGaWxlfWApO1xuICB9XG5cbiAgaWYodXBkYXRlKSB7XG4gICAgamVzdE9wdGlvbnMucHVzaCgnLS11cGRhdGVTbmFwc2hvdCcpO1xuICB9XG5cbiAgaWYod2F0Y2gpIHtcbiAgICBqZXN0T3B0aW9ucy5wdXNoKCctLXdhdGNoJywgd2F0Y2gpO1xuICB9XG5cbiAgaWYoYXJncykge1xuICAgIGplc3RPcHRpb25zLnB1c2goLi4uYXJncyk7XG4gIH1cblxuICBpZihkZWJ1Zykge1xuICAgIGxvZyhgSmVzdCBvcHRpb25zOiAke2plc3RPcHRpb25zLmpvaW4oJyAnKX1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICBsb2coYE5PREVfT1BUSU9OUzogJHtub2RlT3B0aW9uc31gLCAnaW5mbycsIHF1aWV0KTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgZW52OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgLi4ucHJvY2Vzcy5lbnYsXG4gICAgICBOT0RFX09QVElPTlM6IG5vZGVPcHRpb25zXG4gICAgfTtcblxuICAgIGF3YWl0IGV4ZWNhKGplc3RQYXRoLCBqZXN0T3B0aW9ucywge1xuICAgICAgZW5jb2Rpbmc6ICd1dGY4JyxcbiAgICAgIHN0ZGlvOiAnaW5oZXJpdCcsXG4gICAgICBlbnZcbiAgICB9KTtcblxuICAgIHNwaW5uZXIuc3VjY2VlZCgnVGVzdGluZyBjb21wbGV0ZWQhJyk7XG5cbiAgICBpZih1c2VBbmFseXplKSB7XG4gICAgICBzcGlubmVyLnN0YXJ0KCdBSSBpcyBhbmFseXppbmcgdGVzdCBjb3ZlcmFnZSBhbmQgc3VnZ2VzdGluZyBpbXByb3ZlbWVudHMuLi4nKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgdGVzdFJlc3VsdHMgPSBwcm9jZXNzVGVzdFJlc3VsdHModGVtcE91dHB1dEZpbGUpO1xuICAgICAgICBjb25zdCBmaWxlUGF0dGVybnMgPSBnZXRUZXN0RmlsZVBhdHRlcm5zKHRlc3RQYXRoUGF0dGVybik7XG5cbiAgICAgICAgYXdhaXQgYWlGdW5jdGlvbih7XG4gICAgICAgICAgcHJvbXB0OiBgQW5hbHl6ZSB0aGVzZSBKZXN0IHRlc3QgcmVzdWx0cyBhbmQgc3VnZ2VzdCB0ZXN0IGNvdmVyYWdlIGltcHJvdmVtZW50czpcblxuJHtKU09OLnN0cmluZ2lmeSh0ZXN0UmVzdWx0cywgbnVsbCwgMil9XG5cblRlc3QgcGF0dGVybnM6ICR7ZmlsZVBhdHRlcm5zLmpvaW4oJywgJyl9XG5cblBsZWFzZSBwcm92aWRlOlxuMS4gQW5hbHlzaXMgb2YgY3VycmVudCBjb3ZlcmFnZSBnYXBzXG4yLiBTdWdnZXN0aW9ucyBmb3IgaW1wcm92aW5nIHRlc3QgY2FzZXNcbjMuIFJlY29tbWVuZGF0aW9ucyBmb3IgYWRkaXRpb25hbCBpbnRlZ3JhdGlvbiB0ZXN0IHNjZW5hcmlvc1xuNC4gQmVzdCBwcmFjdGljZXMgZm9yIGluY3JlYXNpbmcgdGVzdCBlZmZlY3RpdmVuZXNzYCxcbiAgICAgICAgICB0YXNrOiAnb3B0aW1pemUnLFxuICAgICAgICAgIGNvbnRleHQ6IHRydWUsXG4gICAgICAgICAgcXVpZXRcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc3Bpbm5lci5zdWNjZWVkKCdBSSB0ZXN0IGFuYWx5c2lzIGNvbXBsZXRlJyk7XG4gICAgICB9IGNhdGNoKGFpRXJyb3IpIHtcbiAgICAgICAgc3Bpbm5lci5mYWlsKCdDb3VsZCBub3QgZ2VuZXJhdGUgQUkgdGVzdCBhbmFseXNpcycpO1xuICAgICAgICBpZighcXVpZXQpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdBSSBhbmFseXNpcyBlcnJvcjonLCBhaUVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNhbGxiYWNrKDApO1xuICAgIHJldHVybiAwO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBDaGVjayBmb3IgdW5pdCB0ZXN0IGVycm9ycyBhbmQvb3IgY292ZXJhZ2UuYCwgJ2Vycm9yJywgcXVpZXQpO1xuXG4gICAgc3Bpbm5lci5mYWlsKCdUZXN0aW5nIGZhaWxlZCEnKTtcblxuICAgIGlmKHVzZURlYnVnKSB7XG4gICAgICBzcGlubmVyLnN0YXJ0KCdBSSBpcyBhbmFseXppbmcgdGVzdCBmYWlsdXJlcy4uLicpO1xuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB0ZXN0UmVzdWx0cyA9IHByb2Nlc3NUZXN0UmVzdWx0cyh0ZW1wT3V0cHV0RmlsZSk7XG5cbiAgICAgICAgYXdhaXQgYWlGdW5jdGlvbih7XG4gICAgICAgICAgcHJvbXB0OiBgRGVidWcgdGhlc2UgZmFpbGVkIEplc3QgdGVzdHMgYW5kIHN1Z2dlc3QgZml4ZXM6XG5cbiR7SlNPTi5zdHJpbmdpZnkoZXJyb3IubWVzc2FnZSwgbnVsbCwgMil9XG5cblRlc3QgcmVzdWx0czogJHtKU09OLnN0cmluZ2lmeSh0ZXN0UmVzdWx0cywgbnVsbCwgMil9XG5cblBsZWFzZSBwcm92aWRlOlxuMS4gQW5hbHlzaXMgb2Ygd2h5IHRoZSB0ZXN0cyBhcmUgZmFpbGluZ1xuMi4gU3BlY2lmaWMgc3VnZ2VzdGlvbnMgdG8gZml4IGVhY2ggZmFpbGluZyB0ZXN0XG4zLiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHRlc3QgZml4dHVyZXMgb3IgbW9ja3NcbjQuIENvZGUgZXhhbXBsZXMgZm9yIHNvbHV0aW9uc2AsXG4gICAgICAgICAgdGFzazogJ2hlbHAnLFxuICAgICAgICAgIGNvbnRleHQ6IHRydWUsXG4gICAgICAgICAgcXVpZXRcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc3Bpbm5lci5zdWNjZWVkKCdBSSBkZWJ1Z2dpbmcgYXNzaXN0YW5jZSBjb21wbGV0ZScpO1xuICAgICAgfSBjYXRjaChhaUVycm9yKSB7XG4gICAgICAgIHNwaW5uZXIuZmFpbCgnQ291bGQgbm90IGdlbmVyYXRlIEFJIGRlYnVnZ2luZyBhc3Npc3RhbmNlJyk7XG4gICAgICAgIGlmKCFxdWlldCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0FJIGRlYnVnZ2luZyBlcnJvcjonLCBhaUVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNhbGxiYWNrKDEpO1xuICAgIHJldHVybiAxO1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCB0ZXN0OyJdLAogICJtYXBwaW5ncyI6ICJBQUlBLFNBQVEsYUFBWTtBQUNwQixTQUFRLFlBQVksb0JBQW1C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
@@ -1,8 +1,6 @@
1
1
  /**
2
- * Copyright (c) 2018-Present, Nitrogen Labs, Inc.
2
+ * Copyright (c) 2025-Present, Nitrogen Labs, Inc.
3
3
  * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
4
4
  */
5
5
  import '@testing-library/jest-dom';
6
- import * as react from 'react';
7
6
  export { render, screen, fireEvent, waitFor, waitForElementToBeRemoved, within, getByRole, getByLabelText, getByPlaceholderText, getByText, getByTestId, getAllByRole, getAllByLabelText, getAllByPlaceholderText, getAllByText, getAllByTestId, queryByRole, queryByLabelText, queryByPlaceholderText, queryByText, queryByTestId, queryAllByRole, queryAllByLabelText, queryAllByPlaceholderText, queryAllByText, queryAllByTestId, findByRole, findByLabelText, findByPlaceholderText, findByText, findByTestId, findAllByRole, findAllByLabelText, findAllByPlaceholderText, findAllByText, findAllByTestId, renderHook, act, cleanup } from '@testing-library/react';
8
- export { react };
@@ -1,5 +1,4 @@
1
1
  import "@testing-library/jest-dom";
2
- import * as react from "react";
3
2
  import {
4
3
  render,
5
4
  screen,
@@ -75,7 +74,6 @@ export {
75
74
  queryByRole,
76
75
  queryByTestId,
77
76
  queryByText,
78
- react,
79
77
  render,
80
78
  renderHook,
81
79
  screen,
@@ -83,4 +81,4 @@ export {
83
81
  waitForElementToBeRemoved,
84
82
  within
85
83
  };
86
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL3Rlc3QtcmVhY3QvaW5kZXgudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE4LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQgJ0B0ZXN0aW5nLWxpYnJhcnkvamVzdC1kb20nO1xuXG4vLyBSZS1leHBvcnQgUmVhY3QgdGVzdGluZyB1dGlsaXRpZXMgd2l0aG91dCBhbnkgTGV4IGRlcGVuZGVuY2llc1xuLy8gRXhwb3J0IFJlYWN0IGZvciBjb252ZW5pZW5jZVxuaW1wb3J0ICogYXMgcmVhY3QgZnJvbSAncmVhY3QnO1xuXG5leHBvcnQge1xuICByZW5kZXIsXG4gIHNjcmVlbixcbiAgZmlyZUV2ZW50LFxuICB3YWl0Rm9yLFxuICB3YWl0Rm9yRWxlbWVudFRvQmVSZW1vdmVkLFxuICB3aXRoaW4sXG4gIGdldEJ5Um9sZSxcbiAgZ2V0QnlMYWJlbFRleHQsXG4gIGdldEJ5UGxhY2Vob2xkZXJUZXh0LFxuICBnZXRCeVRleHQsXG4gIGdldEJ5VGVzdElkLFxuICBnZXRBbGxCeVJvbGUsXG4gIGdldEFsbEJ5TGFiZWxUZXh0LFxuICBnZXRBbGxCeVBsYWNlaG9sZGVyVGV4dCxcbiAgZ2V0QWxsQnlUZXh0LFxuICBnZXRBbGxCeVRlc3RJZCxcbiAgcXVlcnlCeVJvbGUsXG4gIHF1ZXJ5QnlMYWJlbFRleHQsXG4gIHF1ZXJ5QnlQbGFjZWhvbGRlclRleHQsXG4gIHF1ZXJ5QnlUZXh0LFxuICBxdWVyeUJ5VGVzdElkLFxuICBxdWVyeUFsbEJ5Um9sZSxcbiAgcXVlcnlBbGxCeUxhYmVsVGV4dCxcbiAgcXVlcnlBbGxCeVBsYWNlaG9sZGVyVGV4dCxcbiAgcXVlcnlBbGxCeVRleHQsXG4gIHF1ZXJ5QWxsQnlUZXN0SWQsXG4gIGZpbmRCeVJvbGUsXG4gIGZpbmRCeUxhYmVsVGV4dCxcbiAgZmluZEJ5UGxhY2Vob2xkZXJUZXh0LFxuICBmaW5kQnlUZXh0LFxuICBmaW5kQnlUZXN0SWQsXG4gIGZpbmRBbGxCeVJvbGUsXG4gIGZpbmRBbGxCeUxhYmVsVGV4dCxcbiAgZmluZEFsbEJ5UGxhY2Vob2xkZXJUZXh0LFxuICBmaW5kQWxsQnlUZXh0LFxuICBmaW5kQWxsQnlUZXN0SWQsXG4gIHJlbmRlckhvb2ssXG4gIGFjdCxcbiAgY2xlYW51cFxufSBmcm9tICdAdGVzdGluZy1saWJyYXJ5L3JlYWN0JztcbmV4cG9ydCB7cmVhY3R9OyJdLAogICJtYXBwaW5ncyI6ICJBQUlBLE9BQU87QUFJUCxZQUFZLFdBQVc7QUFFdkI7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLOyIsCiAgIm5hbWVzIjogW10KfQo=
84
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL3Rlc3QtcmVhY3QvaW5kZXgudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDI1LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQgJ0B0ZXN0aW5nLWxpYnJhcnkvamVzdC1kb20nO1xuXG5leHBvcnQge1xuICByZW5kZXIsXG4gIHNjcmVlbixcbiAgZmlyZUV2ZW50LFxuICB3YWl0Rm9yLFxuICB3YWl0Rm9yRWxlbWVudFRvQmVSZW1vdmVkLFxuICB3aXRoaW4sXG4gIGdldEJ5Um9sZSxcbiAgZ2V0QnlMYWJlbFRleHQsXG4gIGdldEJ5UGxhY2Vob2xkZXJUZXh0LFxuICBnZXRCeVRleHQsXG4gIGdldEJ5VGVzdElkLFxuICBnZXRBbGxCeVJvbGUsXG4gIGdldEFsbEJ5TGFiZWxUZXh0LFxuICBnZXRBbGxCeVBsYWNlaG9sZGVyVGV4dCxcbiAgZ2V0QWxsQnlUZXh0LFxuICBnZXRBbGxCeVRlc3RJZCxcbiAgcXVlcnlCeVJvbGUsXG4gIHF1ZXJ5QnlMYWJlbFRleHQsXG4gIHF1ZXJ5QnlQbGFjZWhvbGRlclRleHQsXG4gIHF1ZXJ5QnlUZXh0LFxuICBxdWVyeUJ5VGVzdElkLFxuICBxdWVyeUFsbEJ5Um9sZSxcbiAgcXVlcnlBbGxCeUxhYmVsVGV4dCxcbiAgcXVlcnlBbGxCeVBsYWNlaG9sZGVyVGV4dCxcbiAgcXVlcnlBbGxCeVRleHQsXG4gIHF1ZXJ5QWxsQnlUZXN0SWQsXG4gIGZpbmRCeVJvbGUsXG4gIGZpbmRCeUxhYmVsVGV4dCxcbiAgZmluZEJ5UGxhY2Vob2xkZXJUZXh0LFxuICBmaW5kQnlUZXh0LFxuICBmaW5kQnlUZXN0SWQsXG4gIGZpbmRBbGxCeVJvbGUsXG4gIGZpbmRBbGxCeUxhYmVsVGV4dCxcbiAgZmluZEFsbEJ5UGxhY2Vob2xkZXJUZXh0LFxuICBmaW5kQWxsQnlUZXh0LFxuICBmaW5kQWxsQnlUZXN0SWQsXG4gIHJlbmRlckhvb2ssXG4gIGFjdCxcbiAgY2xlYW51cFxufSBmcm9tICdAdGVzdGluZy1saWJyYXJ5L3JlYWN0JzsiXSwKICAibWFwcGluZ3MiOiAiQUFJQSxPQUFPO0FBRVA7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Copyright (c) 2018-Present, Nitrogen Labs, Inc.
3
+ * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
4
+ */
5
+ /**
6
+ * Deep merge function that recursively merges objects and arrays
7
+ * @param target - The target object to merge into
8
+ * @param source - The source object to merge from
9
+ * @returns The merged object
10
+ */
11
+ export declare const deepMerge: (target: any, source: any) => any;
@@ -0,0 +1,24 @@
1
+ const deepMerge = (target, source) => {
2
+ if (!source) return target;
3
+ const result = { ...target };
4
+ for (const key in source) {
5
+ if (source.hasOwnProperty(key)) {
6
+ if (source[key] && typeof source[key] === "object" && !Array.isArray(source[key])) {
7
+ result[key] = deepMerge(target[key] || {}, source[key]);
8
+ } else if (Array.isArray(source[key])) {
9
+ if (Array.isArray(target[key])) {
10
+ result[key] = [...target[key], ...source[key]];
11
+ } else {
12
+ result[key] = [...source[key]];
13
+ }
14
+ } else {
15
+ result[key] = source[key];
16
+ }
17
+ }
18
+ }
19
+ return result;
20
+ };
21
+ export {
22
+ deepMerge
23
+ };
24
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL3V0aWxzL2RlZXBNZXJnZS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cblxuLyoqXG4gKiBEZWVwIG1lcmdlIGZ1bmN0aW9uIHRoYXQgcmVjdXJzaXZlbHkgbWVyZ2VzIG9iamVjdHMgYW5kIGFycmF5c1xuICogQHBhcmFtIHRhcmdldCAtIFRoZSB0YXJnZXQgb2JqZWN0IHRvIG1lcmdlIGludG9cbiAqIEBwYXJhbSBzb3VyY2UgLSBUaGUgc291cmNlIG9iamVjdCB0byBtZXJnZSBmcm9tXG4gKiBAcmV0dXJucyBUaGUgbWVyZ2VkIG9iamVjdFxuICovXG5leHBvcnQgY29uc3QgZGVlcE1lcmdlID0gKHRhcmdldDogYW55LCBzb3VyY2U6IGFueSk6IGFueSA9PiB7XG4gIGlmKCFzb3VyY2UpIHJldHVybiB0YXJnZXQ7XG5cbiAgY29uc3QgcmVzdWx0ID0gey4uLnRhcmdldH07XG5cbiAgZm9yKGNvbnN0IGtleSBpbiBzb3VyY2UpIHtcbiAgICBpZihzb3VyY2UuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgaWYoc291cmNlW2tleV0gJiYgdHlwZW9mIHNvdXJjZVtrZXldID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShzb3VyY2Vba2V5XSkpIHtcbiAgICAgICAgcmVzdWx0W2tleV0gPSBkZWVwTWVyZ2UodGFyZ2V0W2tleV0gfHwge30sIHNvdXJjZVtrZXldKTtcbiAgICAgIH0gZWxzZSBpZihBcnJheS5pc0FycmF5KHNvdXJjZVtrZXldKSkge1xuICAgICAgICAvLyBGb3IgYXJyYXlzLCBtZXJnZSBpZiBib3RoIGFyZSBhcnJheXMsIG90aGVyd2lzZSByZXBsYWNlXG4gICAgICAgIGlmKEFycmF5LmlzQXJyYXkodGFyZ2V0W2tleV0pKSB7XG4gICAgICAgICAgcmVzdWx0W2tleV0gPSBbLi4udGFyZ2V0W2tleV0sIC4uLnNvdXJjZVtrZXldXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN1bHRba2V5XSA9IFsuLi5zb3VyY2Vba2V5XV07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdFtrZXldID0gc291cmNlW2tleV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07Il0sCiAgIm1hcHBpbmdzIjogIkFBV08sTUFBTSxZQUFZLENBQUMsUUFBYSxXQUFxQjtBQUMxRCxNQUFHLENBQUMsT0FBUSxRQUFPO0FBRW5CLFFBQU0sU0FBUyxFQUFDLEdBQUcsT0FBTTtBQUV6QixhQUFVLE9BQU8sUUFBUTtBQUN2QixRQUFHLE9BQU8sZUFBZSxHQUFHLEdBQUc7QUFDN0IsVUFBRyxPQUFPLEdBQUcsS0FBSyxPQUFPLE9BQU8sR0FBRyxNQUFNLFlBQVksQ0FBQyxNQUFNLFFBQVEsT0FBTyxHQUFHLENBQUMsR0FBRztBQUNoRixlQUFPLEdBQUcsSUFBSSxVQUFVLE9BQU8sR0FBRyxLQUFLLENBQUMsR0FBRyxPQUFPLEdBQUcsQ0FBQztBQUFBLE1BQ3hELFdBQVUsTUFBTSxRQUFRLE9BQU8sR0FBRyxDQUFDLEdBQUc7QUFFcEMsWUFBRyxNQUFNLFFBQVEsT0FBTyxHQUFHLENBQUMsR0FBRztBQUM3QixpQkFBTyxHQUFHLElBQUksQ0FBQyxHQUFHLE9BQU8sR0FBRyxHQUFHLEdBQUcsT0FBTyxHQUFHLENBQUM7QUFBQSxRQUMvQyxPQUFPO0FBQ0wsaUJBQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxPQUFPLEdBQUcsQ0FBQztBQUFBLFFBQy9CO0FBQUEsTUFDRixPQUFPO0FBQ0wsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFDMUI7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUVBLFNBQU87QUFDVDsiLAogICJuYW1lcyI6IFtdCn0K
package/jest.config.mjs CHANGED
@@ -2,68 +2,65 @@
2
2
  * Copyright (c) 2018-Present, Nitrogen Labs, Inc.
3
3
  * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
4
4
  */
5
- import {readFileSync} from 'fs';
6
5
  import {fileURLToPath} from 'url';
7
6
  import {dirname, resolve} from 'path';
7
+ import {deepMerge} from './dist/utils/deepMerge.js';
8
+
9
+ import {readFileSync} from 'fs';
8
10
 
9
11
  const __filename = fileURLToPath(import.meta.url);
10
12
  const __dirname = dirname(__filename);
11
13
  const pack = JSON.parse(readFileSync(resolve(__dirname, 'package.json'), 'utf8'));
12
14
 
13
- export default {
15
+ let projectJestConfig = null;
16
+ if(process.env.LEX_CONFIG) {
17
+ try {
18
+ const lexConfig = JSON.parse(process.env.LEX_CONFIG);
19
+ projectJestConfig = lexConfig.jest;
20
+ } catch(error) {
21
+ console.warn('Failed to parse LEX_CONFIG:', error.message);
22
+ }
23
+ }
24
+
25
+ const baseConfig = {
26
+ collectCoverage: true,
27
+ coverageDirectory: '<rootDir>/coverage',
28
+ coveragePathIgnorePatterns: [
29
+ '/node_modules/',
30
+ '/dist',
31
+ '/lib',
32
+ '__snapshots__',
33
+ '.d.ts'
34
+ ],
35
+ coverageReporters: ['html', 'text'],
14
36
  displayName: pack.name,
15
- testEnvironment: 'jsdom',
16
37
  moduleFileExtensions: ['ts', 'tsx', 'js', 'json', 'node'],
17
- moduleDirectories: ['js', '.', 'node_modules'],
18
38
  moduleNameMapper: {
19
39
  '^(\\.{1,2}/.*)\\.js$': '$1',
20
- '^execa$': resolve(__dirname, '__mocks__/execa.js'),
21
- '^boxen$': resolve(__dirname, '__mocks__/boxen.js'),
22
- '^chalk$': resolve(__dirname, '__mocks__/chalk.js'),
23
- '^ora$': resolve(__dirname, '__mocks__/ora.js'),
24
- '^latest-version$': resolve(__dirname, '__mocks__/latest-version.js'),
25
- '^compare-versions$': resolve(__dirname, '__mocks__/compare-versions.js'),
26
- '.*LexConfig.*': resolve(__dirname, '__mocks__/LexConfig.js'),
27
- '.*build\\.js$': resolve(__dirname, '__mocks__/build.js'),
28
- '.*versions\\.js$': resolve(__dirname, '__mocks__/versions.js'),
29
- '.*compile\\.js$': resolve(__dirname, '__mocks__/compile.js'),
30
- 'utils/file\\.js$': resolve(__dirname, '__mocks__/file.js'),
31
- '.*/utils/file\\.js$': resolve(__dirname, '__mocks__/file.js'),
32
- '^(\\.{1,2}/)*utils/file\\.js$': resolve(__dirname, '__mocks__/file.js'),
33
- // '^(\.{1,2}/.*)\.js$': '$1',
34
- '\.(css|less|scss|sass)$': 'identity-obj-proxy',
35
- '\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$': resolve(__dirname, '__mocks__/fileMock.js')
36
40
  },
37
41
  rootDir: process.cwd(),
38
- transformIgnorePatterns: [
39
- 'node_modules/(?!(strip-indent|chalk|@testing-library/jest-dom|zod|@nlabs|@nlabs/arkhamjs|@nlabs/utils|@nlabs/lex|react-markdown|devlop)/.*)'
40
- ],
41
- setupFilesAfterEnv: ['<rootDir>/jest.setup.js'],
42
+ testEnvironment: 'node',
43
+ testRegex: '(/__tests__/.*|\\.(test|spec|integration))\\.(ts|tsx)?$',
42
44
  transform: {
43
45
  '^.+\.js$|^.+\.jsx$': ['babel-jest', {
44
46
  presets: [
45
47
  ['@babel/preset-env', {targets: {node: 'current'}}],
46
- '@babel/preset-react'
48
+ '@babel/preset-typescript'
47
49
  ]
48
50
  }],
49
51
  '^.+\.ts$|^.+\.tsx$': ['babel-jest', {
50
52
  presets: [
51
53
  ['@babel/preset-env', {targets: {node: 'current'}}],
52
54
  '@babel/preset-typescript',
53
- '@babel/preset-react'
55
+ ['@babel/preset-react', {runtime: 'automatic'}]
54
56
  ]
55
57
  }]
56
58
  },
57
- testRegex: '(/__tests__/.*|\\.(test|spec|integration))\\.(ts|tsx)?$',
58
- collectCoverage: true,
59
- coverageDirectory: '<rootDir>/coverage',
60
- coveragePathIgnorePatterns: [
61
- '/node_modules/',
62
- '/dist',
63
- '/lib',
64
- '__snapshots__',
65
- '.d.ts'
66
- ],
67
- coverageReporters: ['html', 'text'],
68
59
  verbose: true
69
- };
60
+ };
61
+
62
+ const finalConfig = projectJestConfig && Object.keys(projectJestConfig).length > 0
63
+ ? deepMerge(baseConfig, projectJestConfig)
64
+ : baseConfig;
65
+
66
+ export default finalConfig;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nlabs/lex",
3
- "version": "1.48.5",
3
+ "version": "1.48.6",
4
4
  "description": "Lex",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -106,7 +106,7 @@
106
106
  "ajv": "^8.17.1",
107
107
  "assert": "^2.1.0",
108
108
  "autoprefixer": "^10.4.21",
109
- "babel-jest": "^30.0.4",
109
+ "babel-jest": "^29.7.0",
110
110
  "babel-loader": "^10.0.0",
111
111
  "babel-plugin-module-resolver": "^5.0.2",
112
112
  "babel-plugin-transform-import-meta": "^2.3.3",
@@ -130,6 +130,7 @@
130
130
  "eslint": "^9.31.0",
131
131
  "eslint-config-styleguidejs": "^4.0.22",
132
132
  "execa": "9.6.0",
133
+ "expect": "^29.7.0",
133
134
  "exports-loader": "^5.0.0",
134
135
  "favicons-webpack-plugin": "^6.0.1",
135
136
  "file-loader": "^6.2.0",
@@ -187,7 +188,6 @@
187
188
  "svg-spritemap-webpack-plugin": "^4.7.0",
188
189
  "svgo": "4.0.0",
189
190
  "tls": "^0.0.1",
190
- "ts-jest": "^29.4.0",
191
191
  "ts-node": "^10.9.2",
192
192
  "tsconfig-paths-webpack-plugin": "^4.2.0",
193
193
  "typescript": "5.8.3",
@@ -203,7 +203,10 @@
203
203
  "webpack-plugin-serve": "^1.6.0"
204
204
  },
205
205
  "devDependencies": {
206
- "@types/jest": "^30.0.0",
206
+ "@babel/plugin-transform-react-jsx": "^7.27.1",
207
+ "@babel/runtime": "^7.27.6",
208
+ "@babel/runtime-corejs3": "^7.28.0",
209
+ "@types/jest": "^29.5.14",
207
210
  "@types/luxon": "^3.6.2",
208
211
  "@types/node": "^24.0.14",
209
212
  "@types/ora": "^3.2.0",
@@ -8,7 +8,7 @@
8
8
  "esModuleInterop": true,
9
9
  "inlineSourceMap": true,
10
10
  "isolatedModules": true,
11
- "jsx": "react",
11
+ "jsx": "react-jsx",
12
12
  "lib": [
13
13
  "dom",
14
14
  "ESNext"
package/tsconfig.json CHANGED
@@ -7,7 +7,7 @@
7
7
  "esModuleInterop": true,
8
8
  "inlineSourceMap": true,
9
9
  "isolatedModules": true,
10
- "jsx": "react",
10
+ "jsx": "react-jsx",
11
11
  "lib": [
12
12
  "dom",
13
13
  "ESNext"
@@ -11,7 +11,7 @@
11
11
  "forceConsistentCasingInFileNames": true,
12
12
  "inlineSourceMap": false,
13
13
  "isolatedModules": true,
14
- "jsx": "react",
14
+ "jsx": "react-jsx",
15
15
  "lib": [
16
16
  "ESNext",
17
17
  "DOM"
@@ -5,7 +5,7 @@
5
5
  "emitDeclarationOnly": true,
6
6
  "esModuleInterop": true,
7
7
  "inlineSourceMap": true,
8
- "jsx": "react",
8
+ "jsx": "react-jsx",
9
9
  "lib": [
10
10
  "ESNext",
11
11
  "dom"
@@ -32,4 +32,4 @@
32
32
  "./lib",
33
33
  "./node_modules"
34
34
  ]
35
- }
35
+ }
@@ -10,7 +10,7 @@
10
10
  "forceConsistentCasingInFileNames": true,
11
11
  "inlineSourceMap": true,
12
12
  "isolatedModules": true,
13
- "jsx": "react",
13
+ "jsx": "react-jsx",
14
14
  "lib": [
15
15
  "ESNext",
16
16
  "DOM"
@@ -1,103 +0,0 @@
1
- # TypeScript Configurations in Lex
2
-
3
- Lex now uses specialized TypeScript configurations for different commands to optimize performance and functionality.
4
-
5
- ## Configuration Files
6
-
7
- ### 1. `tsconfig.build.json` - For Compilation and Building
8
-
9
- Used by: `lex compile`, `lex build`
10
-
11
- **Purpose:** Optimized for compilation and bundling with ESM output.
12
-
13
- **Key Features:**
14
-
15
- - ESM module format (`"module": "ESNext"`)
16
- - Declaration file generation (`"declaration": true`)
17
- - Source maps for debugging (`"inlineSourceMap": true`)
18
- - Strict type checking (`"strict": true`)
19
- - Excludes test files for faster compilation
20
-
21
- **Use Cases:**
22
-
23
- - Building production bundles
24
- - Generating type declarations
25
- - Compiling source code for distribution
26
-
27
- ### 2. `tsconfig.lint.json` - For Static Analysis
28
-
29
- Used by: `lex lint`
30
-
31
- **Purpose:** Optimized for static analysis and linting.
32
-
33
- **Key Features:**
34
-
35
- - No emission (`"noEmit": true`)
36
- - Strict unused variable checking (`"noUnusedLocals": true`)
37
- - Disabled pretty printing for faster analysis
38
- - Excludes test files to focus on source code
39
- - ESLint-friendly settings
40
-
41
- **Use Cases:**
42
-
43
- - Static type checking
44
- - Code quality analysis
45
- - Linting with ESLint + TypeScript
46
-
47
- ### 3. `tsconfig.test.json` - For Testing
48
-
49
- Used by: `lex test`
50
-
51
- **Purpose:** Optimized for testing environment.
52
-
53
- **Key Features:**
54
-
55
- - Includes test files (`**/*.test.*`, `**/*.spec.*`)
56
- - Jest types included (`"types": ["jest", "node"]`)
57
- - Relaxed strict mode for test flexibility (`"strict": false`)
58
- - Source maps for debugging tests
59
- - Coverage reporting support
60
-
61
- **Use Cases:**
62
-
63
- - Running unit tests
64
- - Integration testing
65
- - Test debugging and coverage
66
-
67
- ## Automatic Configuration
68
-
69
- Lex automatically creates these configuration files when needed:
70
-
71
- 1. **First run:** If no specialized config exists, Lex creates it from templates
72
- 2. **Fallback:** If specialized config doesn't exist, falls back to default `tsconfig.json`
73
- 3. **Custom configs:** You can override any config by creating your own version
74
-
75
- ## Migration from Single Config
76
-
77
- If you're migrating from a single `tsconfig.json`:
78
-
79
- 1. **Keep your existing config:** It will be used as a fallback
80
- 2. **Customize specialized configs:** Modify the generated configs for your needs
81
- 3. **Gradual adoption:** Commands will automatically use the appropriate config
82
-
83
- ## Customization
84
-
85
- You can customize any of these configurations:
86
-
87
- ```json
88
- // tsconfig.build.json - Customize for your build needs
89
- {
90
- "extends": "../../tsconfig.base.json",
91
- "compilerOptions": {
92
- "outDir": "./lib", // Custom output directory
93
- "target": "ES2020" // Custom target
94
- }
95
- }
96
- ```
97
-
98
- ## Benefits
99
-
100
- 1. **Performance:** Each config is optimized for its specific use case
101
- 2. **Clarity:** Clear separation of concerns between compilation, linting, and testing
102
- 3. **Flexibility:** Easy to customize each workflow independently
103
- 4. **Compatibility:** Maintains backward compatibility with existing setups
package/jest.setup.js DELETED
@@ -1,34 +0,0 @@
1
- require('@testing-library/jest-dom');
2
-
3
- const originalReadFileSync = require('fs').readFileSync;
4
- require('fs').readFileSync = jest.fn((path, encoding) => {
5
- if (path && path.toString().includes('package.json')) {
6
- return JSON.stringify({
7
- version: '1.0.0',
8
- dependencies: {
9
- esbuild: '^0.19.0',
10
- jest: '^29.0.0',
11
- typescript: '^5.0.0',
12
- webpack: '^5.0.0'
13
- }
14
- });
15
- }
16
- return originalReadFileSync(path, encoding);
17
- });
18
-
19
- global.ResizeObserver = jest.fn().mockImplementation(() => ({
20
- observe: jest.fn(),
21
- unobserve: jest.fn(),
22
- disconnect: jest.fn(),
23
- }));
24
-
25
- global.matchMedia = jest.fn().mockImplementation(query => ({
26
- matches: false,
27
- media: query,
28
- onchange: null,
29
- addListener: jest.fn(),
30
- removeListener: jest.fn(),
31
- addEventListener: jest.fn(),
32
- removeEventListener: jest.fn(),
33
- dispatchEvent: jest.fn(),
34
- }));