@nlabs/lex 1.49.5 → 1.50.1

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.
Files changed (52) hide show
  1. package/.swcrc +35 -0
  2. package/README.md +43 -59
  3. package/config.json +32 -8
  4. package/examples/lex.config.js +110 -10
  5. package/lex.config.js +34 -7
  6. package/lib/Button.stories.js +99 -0
  7. package/lib/LexConfig.d.ts +60 -22
  8. package/lib/LexConfig.js +285 -244
  9. package/lib/commands/ai/ai.js +287 -288
  10. package/lib/commands/ai/index.js +8 -7
  11. package/lib/commands/build/build.d.ts +2 -2
  12. package/lib/commands/build/build.js +349 -458
  13. package/lib/commands/clean/clean.js +45 -33
  14. package/lib/commands/compile/compile.js +214 -228
  15. package/lib/commands/config/config.js +46 -42
  16. package/lib/commands/copy/copy.js +36 -35
  17. package/lib/commands/create/create.js +200 -121
  18. package/lib/commands/dev/dev.d.ts +1 -0
  19. package/lib/commands/dev/dev.js +261 -259
  20. package/lib/commands/init/init.js +108 -88
  21. package/lib/commands/link/link.js +18 -14
  22. package/lib/commands/lint/lint.js +735 -742
  23. package/lib/commands/migrate/migrate.js +49 -36
  24. package/lib/commands/publish/publish.js +116 -96
  25. package/lib/commands/serverless/serverless.js +611 -585
  26. package/lib/commands/storybook/storybook.js +242 -238
  27. package/lib/commands/test/test.js +381 -409
  28. package/lib/commands/update/update.js +141 -120
  29. package/lib/commands/upgrade/upgrade.js +51 -44
  30. package/lib/commands/versions/versions.d.ts +1 -1
  31. package/lib/commands/versions/versions.js +36 -38
  32. package/lib/create/changelog.js +136 -125
  33. package/lib/index.js +40 -38
  34. package/lib/lex.js +95 -68
  35. package/lib/storybook/index.js +6 -1
  36. package/lib/test-react/index.js +7 -84
  37. package/lib/types.d.ts +1 -1
  38. package/lib/types.js +7 -1
  39. package/lib/utils/aiService.js +240 -227
  40. package/lib/utils/app.js +274 -273
  41. package/lib/utils/deepMerge.js +37 -23
  42. package/lib/utils/file.js +218 -215
  43. package/lib/utils/log.js +29 -27
  44. package/lib/utils/reactShim.js +7 -85
  45. package/lib/utils/translations.js +92 -82
  46. package/package.json +59 -60
  47. package/templates/typescript/DataLayer.js.txt +218 -0
  48. package/templates/typescript/DataLayer.test.js.txt +268 -0
  49. package/templates/typescript/DataLayer.test.ts.txt +269 -0
  50. package/templates/typescript/DataLayer.ts.txt +227 -0
  51. package/webpack.config.js +38 -28
  52. package/lib/commands/lint/autofix.d.ts +0 -2
@@ -1,26 +1,40 @@
1
- const deepMerge = (target, source) => {
2
- if (!source) {
3
- return target;
4
- }
5
- const result = { ...target };
6
- for (const key in source) {
7
- if (source.hasOwnProperty(key)) {
8
- if (source[key] && typeof source[key] === "object" && !Array.isArray(source[key])) {
9
- result[key] = deepMerge(target[key] || {}, source[key]);
10
- } else if (Array.isArray(source[key])) {
11
- if (Array.isArray(target[key])) {
12
- result[key] = [...target[key], ...source[key]];
13
- } else {
14
- result[key] = [...source[key]];
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
+ * Deep merge function that recursively merges objects and arrays
6
+ * @param target - The target object to merge into
7
+ * @param source - The source object to merge from
8
+ * @returns The merged object
9
+ */ export const deepMerge = (target, source)=>{
10
+ if (!source) {
11
+ return target;
12
+ }
13
+ const result = {
14
+ ...target
15
+ };
16
+ for(const key in source){
17
+ if (source.hasOwnProperty(key)) {
18
+ if (source[key] && typeof source[key] === 'object' && !Array.isArray(source[key])) {
19
+ result[key] = deepMerge(target[key] || {}, source[key]);
20
+ } else if (Array.isArray(source[key])) {
21
+ // For arrays, merge if both are arrays, otherwise replace
22
+ if (Array.isArray(target[key])) {
23
+ result[key] = [
24
+ ...target[key],
25
+ ...source[key]
26
+ ];
27
+ } else {
28
+ result[key] = [
29
+ ...source[key]
30
+ ];
31
+ }
32
+ } else {
33
+ result[key] = source[key];
34
+ }
15
35
  }
16
- } else {
17
- result[key] = source[key];
18
- }
19
36
  }
20
- }
21
- return result;
22
- };
23
- export {
24
- deepMerge
37
+ return result;
25
38
  };
26
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL3V0aWxzL2RlZXBNZXJnZS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cblxuLyoqXG4gKiBEZWVwIG1lcmdlIGZ1bmN0aW9uIHRoYXQgcmVjdXJzaXZlbHkgbWVyZ2VzIG9iamVjdHMgYW5kIGFycmF5c1xuICogQHBhcmFtIHRhcmdldCAtIFRoZSB0YXJnZXQgb2JqZWN0IHRvIG1lcmdlIGludG9cbiAqIEBwYXJhbSBzb3VyY2UgLSBUaGUgc291cmNlIG9iamVjdCB0byBtZXJnZSBmcm9tXG4gKiBAcmV0dXJucyBUaGUgbWVyZ2VkIG9iamVjdFxuICovXG5leHBvcnQgY29uc3QgZGVlcE1lcmdlID0gKHRhcmdldDogYW55LCBzb3VyY2U6IGFueSk6IGFueSA9PiB7XG4gIGlmKCFzb3VyY2UpIHtcbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9XG5cbiAgY29uc3QgcmVzdWx0ID0gey4uLnRhcmdldH07XG5cbiAgZm9yKGNvbnN0IGtleSBpbiBzb3VyY2UpIHtcbiAgICBpZihzb3VyY2UuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgaWYoc291cmNlW2tleV0gJiYgdHlwZW9mIHNvdXJjZVtrZXldID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShzb3VyY2Vba2V5XSkpIHtcbiAgICAgICAgcmVzdWx0W2tleV0gPSBkZWVwTWVyZ2UodGFyZ2V0W2tleV0gfHwge30sIHNvdXJjZVtrZXldKTtcbiAgICAgIH0gZWxzZSBpZihBcnJheS5pc0FycmF5KHNvdXJjZVtrZXldKSkge1xuICAgICAgICAvLyBGb3IgYXJyYXlzLCBtZXJnZSBpZiBib3RoIGFyZSBhcnJheXMsIG90aGVyd2lzZSByZXBsYWNlXG4gICAgICAgIGlmKEFycmF5LmlzQXJyYXkodGFyZ2V0W2tleV0pKSB7XG4gICAgICAgICAgcmVzdWx0W2tleV0gPSBbLi4udGFyZ2V0W2tleV0sIC4uLnNvdXJjZVtrZXldXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN1bHRba2V5XSA9IFsuLi5zb3VyY2Vba2V5XV07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdFtrZXldID0gc291cmNlW2tleV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07Il0sCiAgIm1hcHBpbmdzIjogIkFBV08sTUFBTSxZQUFZLENBQUMsUUFBYSxXQUFxQjtBQUMxRCxNQUFHLENBQUMsUUFBUTtBQUNWLFdBQU87QUFBQSxFQUNUO0FBRUEsUUFBTSxTQUFTLEVBQUMsR0FBRyxPQUFNO0FBRXpCLGFBQVUsT0FBTyxRQUFRO0FBQ3ZCLFFBQUcsT0FBTyxlQUFlLEdBQUcsR0FBRztBQUM3QixVQUFHLE9BQU8sR0FBRyxLQUFLLE9BQU8sT0FBTyxHQUFHLE1BQU0sWUFBWSxDQUFDLE1BQU0sUUFBUSxPQUFPLEdBQUcsQ0FBQyxHQUFHO0FBQ2hGLGVBQU8sR0FBRyxJQUFJLFVBQVUsT0FBTyxHQUFHLEtBQUssQ0FBQyxHQUFHLE9BQU8sR0FBRyxDQUFDO0FBQUEsTUFDeEQsV0FBVSxNQUFNLFFBQVEsT0FBTyxHQUFHLENBQUMsR0FBRztBQUVwQyxZQUFHLE1BQU0sUUFBUSxPQUFPLEdBQUcsQ0FBQyxHQUFHO0FBQzdCLGlCQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsT0FBTyxHQUFHLEdBQUcsR0FBRyxPQUFPLEdBQUcsQ0FBQztBQUFBLFFBQy9DLE9BQU87QUFDTCxpQkFBTyxHQUFHLElBQUksQ0FBQyxHQUFHLE9BQU8sR0FBRyxDQUFDO0FBQUEsUUFDL0I7QUFBQSxNQUNGLE9BQU87QUFDTCxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUMxQjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBRUEsU0FBTztBQUNUOyIsCiAgIm5hbWVzIjogW10KfQo=
39
+
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9kZWVwTWVyZ2UudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cblxuLyoqXG4gKiBEZWVwIG1lcmdlIGZ1bmN0aW9uIHRoYXQgcmVjdXJzaXZlbHkgbWVyZ2VzIG9iamVjdHMgYW5kIGFycmF5c1xuICogQHBhcmFtIHRhcmdldCAtIFRoZSB0YXJnZXQgb2JqZWN0IHRvIG1lcmdlIGludG9cbiAqIEBwYXJhbSBzb3VyY2UgLSBUaGUgc291cmNlIG9iamVjdCB0byBtZXJnZSBmcm9tXG4gKiBAcmV0dXJucyBUaGUgbWVyZ2VkIG9iamVjdFxuICovXG5leHBvcnQgY29uc3QgZGVlcE1lcmdlID0gKHRhcmdldDogYW55LCBzb3VyY2U6IGFueSk6IGFueSA9PiB7XG4gIGlmKCFzb3VyY2UpIHtcbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9XG5cbiAgY29uc3QgcmVzdWx0ID0gey4uLnRhcmdldH07XG5cbiAgZm9yKGNvbnN0IGtleSBpbiBzb3VyY2UpIHtcbiAgICBpZihzb3VyY2UuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgaWYoc291cmNlW2tleV0gJiYgdHlwZW9mIHNvdXJjZVtrZXldID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShzb3VyY2Vba2V5XSkpIHtcbiAgICAgICAgcmVzdWx0W2tleV0gPSBkZWVwTWVyZ2UodGFyZ2V0W2tleV0gfHwge30sIHNvdXJjZVtrZXldKTtcbiAgICAgIH0gZWxzZSBpZihBcnJheS5pc0FycmF5KHNvdXJjZVtrZXldKSkge1xuICAgICAgICAvLyBGb3IgYXJyYXlzLCBtZXJnZSBpZiBib3RoIGFyZSBhcnJheXMsIG90aGVyd2lzZSByZXBsYWNlXG4gICAgICAgIGlmKEFycmF5LmlzQXJyYXkodGFyZ2V0W2tleV0pKSB7XG4gICAgICAgICAgcmVzdWx0W2tleV0gPSBbLi4udGFyZ2V0W2tleV0sIC4uLnNvdXJjZVtrZXldXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN1bHRba2V5XSA9IFsuLi5zb3VyY2Vba2V5XV07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdFtrZXldID0gc291cmNlW2tleV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07Il0sIm5hbWVzIjpbImRlZXBNZXJnZSIsInRhcmdldCIsInNvdXJjZSIsInJlc3VsdCIsImtleSIsImhhc093blByb3BlcnR5IiwiQXJyYXkiLCJpc0FycmF5Il0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FFRDs7Ozs7Q0FLQyxHQUNELE9BQU8sTUFBTUEsWUFBWSxDQUFDQyxRQUFhQztJQUNyQyxJQUFHLENBQUNBLFFBQVE7UUFDVixPQUFPRDtJQUNUO0lBRUEsTUFBTUUsU0FBUztRQUFDLEdBQUdGLE1BQU07SUFBQTtJQUV6QixJQUFJLE1BQU1HLE9BQU9GLE9BQVE7UUFDdkIsSUFBR0EsT0FBT0csY0FBYyxDQUFDRCxNQUFNO1lBQzdCLElBQUdGLE1BQU0sQ0FBQ0UsSUFBSSxJQUFJLE9BQU9GLE1BQU0sQ0FBQ0UsSUFBSSxLQUFLLFlBQVksQ0FBQ0UsTUFBTUMsT0FBTyxDQUFDTCxNQUFNLENBQUNFLElBQUksR0FBRztnQkFDaEZELE1BQU0sQ0FBQ0MsSUFBSSxHQUFHSixVQUFVQyxNQUFNLENBQUNHLElBQUksSUFBSSxDQUFDLEdBQUdGLE1BQU0sQ0FBQ0UsSUFBSTtZQUN4RCxPQUFPLElBQUdFLE1BQU1DLE9BQU8sQ0FBQ0wsTUFBTSxDQUFDRSxJQUFJLEdBQUc7Z0JBQ3BDLDBEQUEwRDtnQkFDMUQsSUFBR0UsTUFBTUMsT0FBTyxDQUFDTixNQUFNLENBQUNHLElBQUksR0FBRztvQkFDN0JELE1BQU0sQ0FBQ0MsSUFBSSxHQUFHOzJCQUFJSCxNQUFNLENBQUNHLElBQUk7MkJBQUtGLE1BQU0sQ0FBQ0UsSUFBSTtxQkFBQztnQkFDaEQsT0FBTztvQkFDTEQsTUFBTSxDQUFDQyxJQUFJLEdBQUc7MkJBQUlGLE1BQU0sQ0FBQ0UsSUFBSTtxQkFBQztnQkFDaEM7WUFDRixPQUFPO2dCQUNMRCxNQUFNLENBQUNDLElBQUksR0FBR0YsTUFBTSxDQUFDRSxJQUFJO1lBQzNCO1FBQ0Y7SUFDRjtJQUVBLE9BQU9EO0FBQ1QsRUFBRSJ9
package/lib/utils/file.js CHANGED
@@ -1,229 +1,232 @@
1
- import findFileUp from "find-file-up";
2
- import { existsSync, readFileSync } from "fs";
3
- import { sync as globSync } from "glob";
4
- import { resolve as pathResolve, dirname } from "path";
5
- import { LexConfig } from "../LexConfig.js";
6
- const getDirName = () => {
7
- try {
8
- return eval('new URL(".", import.meta.url).pathname');
9
- } catch {
10
- return process.cwd();
11
- }
12
- };
13
- const getFilePath = (relativePath) => {
14
- try {
15
- return eval('require("url").fileURLToPath(new URL(relativePath, import.meta.url))');
16
- } catch {
17
- if (relativePath === "../../../package.json") {
18
- return pathResolve(process.cwd(), "package.json");
19
- }
20
- return pathResolve(process.cwd(), relativePath);
21
- }
1
+ /**
2
+ * Copyright (c) 2018-Present, Nitrogen Labs, Inc.
3
+ * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
4
+ */ import findFileUp from 'find-file-up';
5
+ import { existsSync, readFileSync } from 'fs';
6
+ import { sync as globSync } from 'glob';
7
+ import { resolve as pathResolve, dirname } from 'path';
8
+ import { LexConfig } from '../LexConfig.js';
9
+ export const getDirName = ()=>{
10
+ try {
11
+ return eval('new URL(".", import.meta.url).pathname');
12
+ } catch {
13
+ return process.cwd();
14
+ }
22
15
  };
23
- const getLexPackageJsonPath = () => {
24
- const LEX_PACKAGE_NAME = "@nlabs/lex";
25
- const lexInNodeModules = pathResolve(process.cwd(), "node_modules/@nlabs/lex/package.json");
26
- if (existsSync(lexInNodeModules)) {
27
- return lexInNodeModules;
28
- }
29
- let startDir;
30
- if (process.env.LEX_ROOT) {
31
- startDir = process.env.LEX_ROOT;
32
- } else {
16
+ export const getFilePath = (relativePath)=>{
33
17
  try {
34
- startDir = eval('new URL(".", import.meta.url).pathname');
35
- } catch {
36
- try {
37
- startDir = eval('__filename ? require("path").dirname(__filename) : null');
38
- if (!startDir) {
39
- throw new Error("__filename not available");
18
+ return eval('require("url").fileURLToPath(new URL(relativePath, import.meta.url))');
19
+ } catch {
20
+ if (relativePath === '../../../package.json') {
21
+ return pathResolve(process.cwd(), 'package.json');
40
22
  }
41
- } catch {
23
+ return pathResolve(process.cwd(), relativePath);
24
+ }
25
+ };
26
+ export const getLexPackageJsonPath = ()=>{
27
+ const LEX_PACKAGE_NAME = '@nlabs/lex';
28
+ const lexInNodeModules = pathResolve(process.cwd(), 'node_modules/@nlabs/lex/package.json');
29
+ if (existsSync(lexInNodeModules)) {
30
+ return lexInNodeModules;
31
+ }
32
+ let startDir;
33
+ if (process.env.LEX_ROOT) {
34
+ startDir = process.env.LEX_ROOT;
35
+ } else {
42
36
  try {
43
- if (process.argv[1] && !process.argv[1].includes("node")) {
44
- startDir = dirname(process.argv[1]);
45
- } else {
46
- throw new Error("process.argv[1] not suitable");
47
- }
48
- } catch {
49
- startDir = process.cwd();
50
- }
51
- }
52
- }
53
- }
54
- let dir = startDir;
55
- for (let i = 0; i < 8; i++) {
56
- const pkgPath = pathResolve(dir, "package.json");
57
- if (existsSync(pkgPath)) {
58
- try {
59
- const pkg = JSON.parse(readFileSync(pkgPath, "utf8"));
60
- if (pkg.name === LEX_PACKAGE_NAME) {
61
- return pkgPath;
37
+ startDir = eval('new URL(".", import.meta.url).pathname');
38
+ } catch {
39
+ try {
40
+ startDir = eval('__filename ? require("path").dirname(__filename) : null');
41
+ if (!startDir) {
42
+ throw new Error('__filename not available');
43
+ }
44
+ } catch {
45
+ try {
46
+ if (process.argv[1] && !process.argv[1].includes('node')) {
47
+ startDir = dirname(process.argv[1]);
48
+ } else {
49
+ throw new Error('process.argv[1] not suitable');
50
+ }
51
+ } catch {
52
+ startDir = process.cwd();
53
+ }
54
+ }
62
55
  }
63
- } catch {
64
- }
65
56
  }
66
- const parent = dirname(dir);
67
- if (parent === dir) {
68
- break;
57
+ let dir = startDir;
58
+ for(let i = 0; i < 8; i++){
59
+ const pkgPath = pathResolve(dir, 'package.json');
60
+ if (existsSync(pkgPath)) {
61
+ try {
62
+ const pkg = JSON.parse(readFileSync(pkgPath, 'utf8'));
63
+ if (pkg.name === LEX_PACKAGE_NAME) {
64
+ return pkgPath;
65
+ }
66
+ } catch {}
67
+ }
68
+ const parent = dirname(dir);
69
+ if (parent === dir) {
70
+ break;
71
+ }
72
+ dir = parent;
69
73
  }
70
- dir = parent;
71
- }
72
- return pathResolve(process.cwd(), "package.json");
74
+ return pathResolve(process.cwd(), 'package.json');
73
75
  };
74
- const relativeFilePath = (filename, dirPath = "./", backUp = 0) => {
75
- const nestDepth = 10;
76
- if (backUp) {
77
- const filePath = findFileUp.sync(filename, dirPath, nestDepth);
78
- const previousPath = Array(backUp).fill(null).map(() => "../").join("");
79
- return pathResolve(filePath, previousPath);
80
- }
81
- return findFileUp.sync(filename, dirPath, nestDepth);
82
- };
83
- const relativeNodePath = (filename, dirPath = "./", backUp = 0) => {
84
- const nestDepth = 10;
85
- const modulePath = `node_modules/${filename}`;
86
- if (dirPath !== "./") {
87
- const lexModulePath = pathResolve(dirPath, modulePath);
88
- if (existsSync(lexModulePath)) {
89
- return lexModulePath;
90
- }
91
- }
92
- const projectPath = pathResolve(process.cwd(), modulePath);
93
- if (existsSync(projectPath)) {
94
- return projectPath;
95
- }
96
- if (backUp) {
97
- const filePath = findFileUp.sync(modulePath, dirPath, nestDepth);
98
- const previousPath = Array(nestDepth).fill(null).map(() => "../").join("");
99
- return pathResolve(filePath, previousPath);
100
- }
101
- return findFileUp.sync(modulePath, dirPath, nestDepth) || `/node_modules/${filename}`;
76
+ export const relativeFilePath = (filename, dirPath = './', backUp = 0)=>{
77
+ const nestDepth = 10;
78
+ if (backUp) {
79
+ const filePath = findFileUp.sync(filename, dirPath, nestDepth);
80
+ const previousPath = Array(backUp).fill(null).map(()=>'../').join('');
81
+ return pathResolve(filePath, previousPath);
82
+ }
83
+ return findFileUp.sync(filename, dirPath, nestDepth);
102
84
  };
103
- const getNodePath = (moduleName) => {
104
- const dirName = getDirName();
105
- const modulePath = `node_modules/${moduleName}`;
106
- const projectPath = pathResolve(process.cwd(), modulePath);
107
- if (existsSync(projectPath)) {
108
- return projectPath;
109
- }
110
- const repoPath = findFileUp.sync(modulePath, dirName);
111
- if (repoPath && existsSync(repoPath)) {
112
- return repoPath;
113
- }
114
- const localPath = findFileUp.sync(modulePath, "./", 10) || `./${modulePath}`;
115
- return localPath;
85
+ export const relativeNodePath = (filename, dirPath = './', backUp = 0)=>{
86
+ const nestDepth = 10;
87
+ const modulePath = `node_modules/${filename}`;
88
+ if (dirPath !== './') {
89
+ const lexModulePath = pathResolve(dirPath, modulePath);
90
+ if (existsSync(lexModulePath)) {
91
+ return lexModulePath;
92
+ }
93
+ }
94
+ const projectPath = pathResolve(process.cwd(), modulePath);
95
+ if (existsSync(projectPath)) {
96
+ return projectPath;
97
+ }
98
+ if (backUp) {
99
+ const filePath = findFileUp.sync(modulePath, dirPath, nestDepth);
100
+ const previousPath = Array(nestDepth).fill(null).map(()=>'../').join('');
101
+ return pathResolve(filePath, previousPath);
102
+ }
103
+ return findFileUp.sync(modulePath, dirPath, nestDepth) || `/node_modules/${filename}`;
116
104
  };
117
- const resolveBinaryPath = (binaryName, packageName) => {
118
- const lexDir = LexConfig.getLexDir();
119
- const lexBinPath = pathResolve(lexDir, `node_modules/.bin/${binaryName}`);
120
- if (existsSync(lexBinPath)) {
121
- return lexBinPath;
122
- }
123
- if (packageName) {
124
- const lexPackageBinPath = pathResolve(lexDir, `node_modules/${packageName}/bin/${binaryName}`);
125
- if (existsSync(lexPackageBinPath)) {
126
- return lexPackageBinPath;
127
- }
128
- const lexPackageBinJsPath = pathResolve(lexDir, `node_modules/${packageName}/bin/${binaryName}.js`);
129
- if (existsSync(lexPackageBinJsPath)) {
130
- return lexPackageBinJsPath;
131
- }
132
- const lexPackageBinCjsPath = pathResolve(lexDir, `node_modules/${packageName}/bin/${binaryName}.cjs`);
133
- if (existsSync(lexPackageBinCjsPath)) {
134
- return lexPackageBinCjsPath;
135
- }
136
- }
137
- const checkBinUp = (startDir2) => {
138
- let checkDir = startDir2;
139
- for (let i = 0; i < 5; i++) {
140
- const monorepoBinPath = pathResolve(checkDir, `node_modules/.bin/${binaryName}`);
141
- if (existsSync(monorepoBinPath)) {
142
- return monorepoBinPath;
143
- }
144
- const parentDir = pathResolve(checkDir, "..");
145
- if (parentDir === checkDir) {
146
- break;
147
- }
148
- checkDir = parentDir;
149
- }
150
- return "";
151
- };
152
- const fromCwd = checkBinUp(process.cwd());
153
- if (fromCwd) {
154
- return fromCwd;
155
- }
156
- const fromLex = checkBinUp(lexDir);
157
- if (fromLex) {
158
- return fromLex;
159
- }
160
- return "";
105
+ export const getNodePath = (moduleName)=>{
106
+ const dirName = getDirName();
107
+ const modulePath = `node_modules/${moduleName}`;
108
+ const projectPath = pathResolve(process.cwd(), modulePath);
109
+ if (existsSync(projectPath)) {
110
+ return projectPath;
111
+ }
112
+ const repoPath = findFileUp.sync(modulePath, dirName);
113
+ if (repoPath && existsSync(repoPath)) {
114
+ return repoPath;
115
+ }
116
+ const localPath = findFileUp.sync(modulePath, './', 10) || `./${modulePath}`;
117
+ return localPath;
161
118
  };
162
- const findTailwindCssPath = () => {
163
- const tailwindPatterns = ["**/tailwind.css"];
164
- for (const pattern of tailwindPatterns) {
165
- const files = globSync(pattern, {
166
- cwd: process.cwd(),
167
- ignore: ["**/node_modules/**", "**/dist/**", "**/lib/**", "**/build/**", "**/.storybook/**"]
168
- });
169
- if (files.length > 0) {
170
- return pathResolve(process.cwd(), files[0]);
171
- }
172
- }
173
- return "";
119
+ export const resolveBinaryPath = (binaryName, packageName)=>{
120
+ const lexDir = LexConfig.getLexDir();
121
+ const lexBinPath = pathResolve(lexDir, `node_modules/.bin/${binaryName}`);
122
+ if (existsSync(lexBinPath)) {
123
+ return lexBinPath;
124
+ }
125
+ if (packageName) {
126
+ const lexPackageBinPath = pathResolve(lexDir, `node_modules/${packageName}/bin/${binaryName}`);
127
+ if (existsSync(lexPackageBinPath)) {
128
+ return lexPackageBinPath;
129
+ }
130
+ const lexPackageBinJsPath = pathResolve(lexDir, `node_modules/${packageName}/bin/${binaryName}.js`);
131
+ if (existsSync(lexPackageBinJsPath)) {
132
+ return lexPackageBinJsPath;
133
+ }
134
+ const lexPackageBinCjsPath = pathResolve(lexDir, `node_modules/${packageName}/bin/${binaryName}.cjs`);
135
+ if (existsSync(lexPackageBinCjsPath)) {
136
+ return lexPackageBinCjsPath;
137
+ }
138
+ }
139
+ const checkBinUp = (startDir)=>{
140
+ let checkDir = startDir;
141
+ for(let i = 0; i < 5; i++){
142
+ const monorepoBinPath = pathResolve(checkDir, `node_modules/.bin/${binaryName}`);
143
+ if (existsSync(monorepoBinPath)) {
144
+ return monorepoBinPath;
145
+ }
146
+ const parentDir = pathResolve(checkDir, '..');
147
+ if (parentDir === checkDir) {
148
+ break;
149
+ }
150
+ checkDir = parentDir;
151
+ }
152
+ return '';
153
+ };
154
+ const fromCwd = checkBinUp(process.cwd());
155
+ if (fromCwd) {
156
+ return fromCwd;
157
+ }
158
+ const fromLex = checkBinUp(lexDir);
159
+ if (fromLex) {
160
+ return fromLex;
161
+ }
162
+ return '';
174
163
  };
175
- const resolveWebpackPaths = (currentDirname) => {
176
- const possibleWebpackPaths = [
177
- pathResolve(process.cwd(), "node_modules/webpack-cli/bin/cli.js"),
178
- pathResolve(process.cwd(), "node_modules/.bin/webpack"),
179
- pathResolve(process.cwd(), "node_modules/@nlabs/lex", "node_modules/webpack-cli/bin/cli.js"),
180
- pathResolve(process.cwd(), "node_modules/@nlabs/lex", "node_modules/.bin/webpack"),
181
- pathResolve(currentDirname, "node_modules/@nlabs/lex/node_modules/webpack-cli/bin/cli.js"),
182
- pathResolve(currentDirname, "node_modules/@nlabs/lex/node_modules/.bin/webpack"),
183
- pathResolve(process.env.LEX_HOME || "/node_modules/@nlabs/lex", "node_modules/webpack-cli/bin/cli.js"),
184
- pathResolve(process.env.LEX_HOME || "/node_modules/@nlabs/lex", "node_modules/.bin/webpack")
185
- ];
186
- let webpackPath = "";
187
- for (const path of possibleWebpackPaths) {
188
- if (existsSync(path)) {
189
- webpackPath = path;
190
- break;
191
- }
192
- }
193
- if (!webpackPath) {
194
- webpackPath = "npx";
195
- }
196
- const possibleWebpackConfigPaths = [
197
- pathResolve(process.cwd(), "webpack.config.js"),
198
- pathResolve(process.cwd(), "webpack.config.ts"),
199
- pathResolve(process.cwd(), "node_modules/@nlabs/lex/webpack.config.js"),
200
- pathResolve(process.cwd(), "node_modules/@nlabs/lex/webpack.config.ts"),
201
- pathResolve(currentDirname, "node_modules/@nlabs/lex/webpack.config.js"),
202
- pathResolve(currentDirname, "node_modules/@nlabs/lex/webpack.config.ts"),
203
- pathResolve(process.env.LEX_HOME || "/node_modules/@nlabs/lex", "webpack.config.js"),
204
- pathResolve(process.env.LEX_HOME || "/node_modules/@nlabs/lex", "webpack.config.ts")
205
- ];
206
- let webpackConfig = "";
207
- for (const path of possibleWebpackConfigPaths) {
208
- if (existsSync(path)) {
209
- webpackConfig = path;
210
- break;
211
- }
212
- }
213
- if (!webpackConfig) {
214
- webpackConfig = pathResolve(currentDirname, "../../webpack.config.js");
215
- }
216
- return { webpackConfig, webpackPath };
164
+ export const findTailwindCssPath = ()=>{
165
+ const tailwindPatterns = [
166
+ '**/tailwind.css'
167
+ ];
168
+ for (const pattern of tailwindPatterns){
169
+ const files = globSync(pattern, {
170
+ cwd: process.cwd(),
171
+ ignore: [
172
+ '**/node_modules/**',
173
+ '**/dist/**',
174
+ '**/lib/**',
175
+ '**/build/**',
176
+ '**/.storybook/**'
177
+ ]
178
+ });
179
+ if (files.length > 0) {
180
+ return pathResolve(process.cwd(), files[0]);
181
+ }
182
+ }
183
+ return '';
217
184
  };
218
- export {
219
- findTailwindCssPath,
220
- getDirName,
221
- getFilePath,
222
- getLexPackageJsonPath,
223
- getNodePath,
224
- relativeFilePath,
225
- relativeNodePath,
226
- resolveBinaryPath,
227
- resolveWebpackPaths
185
+ export const resolveWebpackPaths = (currentDirname)=>{
186
+ const possibleWebpackPaths = [
187
+ pathResolve(process.cwd(), 'node_modules/webpack-cli/bin/cli.js'),
188
+ pathResolve(process.cwd(), 'node_modules/.bin/webpack'),
189
+ pathResolve(process.cwd(), 'node_modules/@nlabs/lex', 'node_modules/webpack-cli/bin/cli.js'),
190
+ pathResolve(process.cwd(), 'node_modules/@nlabs/lex', 'node_modules/.bin/webpack'),
191
+ pathResolve(currentDirname, 'node_modules/@nlabs/lex/node_modules/webpack-cli/bin/cli.js'),
192
+ pathResolve(currentDirname, 'node_modules/@nlabs/lex/node_modules/.bin/webpack'),
193
+ pathResolve(process.env.LEX_HOME || '/node_modules/@nlabs/lex', 'node_modules/webpack-cli/bin/cli.js'),
194
+ pathResolve(process.env.LEX_HOME || '/node_modules/@nlabs/lex', 'node_modules/.bin/webpack')
195
+ ];
196
+ let webpackPath = '';
197
+ for (const path of possibleWebpackPaths){
198
+ if (existsSync(path)) {
199
+ webpackPath = path;
200
+ break;
201
+ }
202
+ }
203
+ if (!webpackPath) {
204
+ webpackPath = 'npx';
205
+ }
206
+ const possibleWebpackConfigPaths = [
207
+ pathResolve(process.cwd(), 'webpack.config.js'),
208
+ pathResolve(process.cwd(), 'webpack.config.ts'),
209
+ pathResolve(process.cwd(), 'node_modules/@nlabs/lex/webpack.config.js'),
210
+ pathResolve(process.cwd(), 'node_modules/@nlabs/lex/webpack.config.ts'),
211
+ pathResolve(currentDirname, 'node_modules/@nlabs/lex/webpack.config.js'),
212
+ pathResolve(currentDirname, 'node_modules/@nlabs/lex/webpack.config.ts'),
213
+ pathResolve(process.env.LEX_HOME || '/node_modules/@nlabs/lex', 'webpack.config.js'),
214
+ pathResolve(process.env.LEX_HOME || '/node_modules/@nlabs/lex', 'webpack.config.ts')
215
+ ];
216
+ let webpackConfig = '';
217
+ for (const path of possibleWebpackConfigPaths){
218
+ if (existsSync(path)) {
219
+ webpackConfig = path;
220
+ break;
221
+ }
222
+ }
223
+ if (!webpackConfig) {
224
+ webpackConfig = pathResolve(currentDirname, '../../webpack.config.js');
225
+ }
226
+ return {
227
+ webpackConfig,
228
+ webpackPath
229
+ };
228
230
  };
229
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL3V0aWxzL2ZpbGUudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE4LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQgZmluZEZpbGVVcCBmcm9tICdmaW5kLWZpbGUtdXAnO1xuaW1wb3J0IHtleGlzdHNTeW5jLCByZWFkRmlsZVN5bmN9IGZyb20gJ2ZzJztcbmltcG9ydCB7c3luYyBhcyBnbG9iU3luY30gZnJvbSAnZ2xvYic7XG5pbXBvcnQge3Jlc29sdmUgYXMgcGF0aFJlc29sdmUsIGRpcm5hbWV9IGZyb20gJ3BhdGgnO1xuXG5pbXBvcnQge0xleENvbmZpZ30gZnJvbSAnLi4vTGV4Q29uZmlnLmpzJztcblxuZXhwb3J0IGNvbnN0IGdldERpck5hbWUgPSAoKTogc3RyaW5nID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZXZhbCgnbmV3IFVSTChcIi5cIiwgaW1wb3J0Lm1ldGEudXJsKS5wYXRobmFtZScpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gcHJvY2Vzcy5jd2QoKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldEZpbGVQYXRoID0gKHJlbGF0aXZlUGF0aDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZXZhbCgncmVxdWlyZShcInVybFwiKS5maWxlVVJMVG9QYXRoKG5ldyBVUkwocmVsYXRpdmVQYXRoLCBpbXBvcnQubWV0YS51cmwpKScpO1xuICB9IGNhdGNoIHtcbiAgICBpZihyZWxhdGl2ZVBhdGggPT09ICcuLi8uLi8uLi9wYWNrYWdlLmpzb24nKSB7XG4gICAgICByZXR1cm4gcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJ3BhY2thZ2UuanNvbicpO1xuICAgIH1cbiAgICByZXR1cm4gcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgcmVsYXRpdmVQYXRoKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldExleFBhY2thZ2VKc29uUGF0aCA9ICgpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBMRVhfUEFDS0FHRV9OQU1FID0gJ0BubGFicy9sZXgnO1xuXG4gIGNvbnN0IGxleEluTm9kZU1vZHVsZXMgPSBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnbm9kZV9tb2R1bGVzL0BubGFicy9sZXgvcGFja2FnZS5qc29uJyk7XG5cbiAgaWYoZXhpc3RzU3luYyhsZXhJbk5vZGVNb2R1bGVzKSkge1xuICAgIHJldHVybiBsZXhJbk5vZGVNb2R1bGVzO1xuICB9XG5cbiAgbGV0IHN0YXJ0RGlyOiBzdHJpbmc7XG5cbiAgaWYocHJvY2Vzcy5lbnYuTEVYX1JPT1QpIHtcbiAgICBzdGFydERpciA9IHByb2Nlc3MuZW52LkxFWF9ST09UO1xuICB9IGVsc2Uge1xuICAgIHRyeSB7XG4gICAgICBzdGFydERpciA9IGV2YWwoJ25ldyBVUkwoXCIuXCIsIGltcG9ydC5tZXRhLnVybCkucGF0aG5hbWUnKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHN0YXJ0RGlyID0gZXZhbCgnX19maWxlbmFtZSA/IHJlcXVpcmUoXCJwYXRoXCIpLmRpcm5hbWUoX19maWxlbmFtZSkgOiBudWxsJyk7XG4gICAgICAgIGlmKCFzdGFydERpcikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignX19maWxlbmFtZSBub3QgYXZhaWxhYmxlJyk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmKHByb2Nlc3MuYXJndlsxXSAmJiAhcHJvY2Vzcy5hcmd2WzFdLmluY2x1ZGVzKCdub2RlJykpIHtcbiAgICAgICAgICAgIHN0YXJ0RGlyID0gZGlybmFtZShwcm9jZXNzLmFyZ3ZbMV0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYXJndlsxXSBub3Qgc3VpdGFibGUnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIHN0YXJ0RGlyID0gcHJvY2Vzcy5jd2QoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGxldCBkaXIgPSBzdGFydERpcjtcbiAgZm9yKGxldCBpID0gMDsgaSA8IDg7IGkrKykge1xuICAgIGNvbnN0IHBrZ1BhdGggPSBwYXRoUmVzb2x2ZShkaXIsICdwYWNrYWdlLmpzb24nKTtcbiAgICBpZihleGlzdHNTeW5jKHBrZ1BhdGgpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBwa2cgPSBKU09OLnBhcnNlKHJlYWRGaWxlU3luYyhwa2dQYXRoLCAndXRmOCcpKTtcbiAgICAgICAgaWYocGtnLm5hbWUgPT09IExFWF9QQUNLQUdFX05BTUUpIHtcbiAgICAgICAgICByZXR1cm4gcGtnUGF0aDtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHBhcmVudCA9IGRpcm5hbWUoZGlyKTtcbiAgICBpZihwYXJlbnQgPT09IGRpcikge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGRpciA9IHBhcmVudDtcbiAgfVxuXG4gIHJldHVybiBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAncGFja2FnZS5qc29uJyk7XG59O1xuXG5leHBvcnQgY29uc3QgcmVsYXRpdmVGaWxlUGF0aCA9IChmaWxlbmFtZTogc3RyaW5nLCBkaXJQYXRoOiBzdHJpbmcgPSAnLi8nLCBiYWNrVXA6IG51bWJlciA9IDApOiBzdHJpbmcgPT4ge1xuICBjb25zdCBuZXN0RGVwdGg6IG51bWJlciA9IDEwO1xuXG4gIGlmKGJhY2tVcCkge1xuICAgIGNvbnN0IGZpbGVQYXRoOiBzdHJpbmcgPSBmaW5kRmlsZVVwLnN5bmMoZmlsZW5hbWUsIGRpclBhdGgsIG5lc3REZXB0aCk7XG4gICAgY29uc3QgcHJldmlvdXNQYXRoOiBzdHJpbmcgPSBBcnJheShiYWNrVXApLmZpbGwobnVsbCkubWFwKCgpID0+ICcuLi8nKS5qb2luKCcnKTtcbiAgICByZXR1cm4gcGF0aFJlc29sdmUoZmlsZVBhdGgsIHByZXZpb3VzUGF0aCk7XG4gIH1cblxuICByZXR1cm4gZmluZEZpbGVVcC5zeW5jKGZpbGVuYW1lLCBkaXJQYXRoLCBuZXN0RGVwdGgpO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlbGF0aXZlTm9kZVBhdGggPSAoZmlsZW5hbWU6IHN0cmluZywgZGlyUGF0aDogc3RyaW5nID0gJy4vJywgYmFja1VwOiBudW1iZXIgPSAwKTogc3RyaW5nID0+IHtcbiAgY29uc3QgbmVzdERlcHRoOiBudW1iZXIgPSAxMDtcbiAgY29uc3QgbW9kdWxlUGF0aCA9IGBub2RlX21vZHVsZXMvJHtmaWxlbmFtZX1gO1xuXG4gIGlmKGRpclBhdGggIT09ICcuLycpIHtcbiAgICBjb25zdCBsZXhNb2R1bGVQYXRoID0gcGF0aFJlc29sdmUoZGlyUGF0aCwgbW9kdWxlUGF0aCk7XG4gICAgaWYoZXhpc3RzU3luYyhsZXhNb2R1bGVQYXRoKSkge1xuICAgICAgcmV0dXJuIGxleE1vZHVsZVBhdGg7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcHJvamVjdFBhdGggPSBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCBtb2R1bGVQYXRoKTtcbiAgaWYoZXhpc3RzU3luYyhwcm9qZWN0UGF0aCkpIHtcbiAgICByZXR1cm4gcHJvamVjdFBhdGg7XG4gIH1cblxuICBpZihiYWNrVXApIHtcbiAgICBjb25zdCBmaWxlUGF0aDogc3RyaW5nID0gZmluZEZpbGVVcC5zeW5jKG1vZHVsZVBhdGgsIGRpclBhdGgsIG5lc3REZXB0aCk7XG4gICAgY29uc3QgcHJldmlvdXNQYXRoOiBzdHJpbmcgPSBBcnJheShuZXN0RGVwdGgpLmZpbGwobnVsbCkubWFwKCgpID0+ICcuLi8nKS5qb2luKCcnKTtcbiAgICByZXR1cm4gcGF0aFJlc29sdmUoZmlsZVBhdGgsIHByZXZpb3VzUGF0aCk7XG4gIH1cblxuICByZXR1cm4gZmluZEZpbGVVcC5zeW5jKG1vZHVsZVBhdGgsIGRpclBhdGgsIG5lc3REZXB0aCkgfHwgYC9ub2RlX21vZHVsZXMvJHtmaWxlbmFtZX1gO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldE5vZGVQYXRoID0gKG1vZHVsZU5hbWU6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IGRpck5hbWUgPSBnZXREaXJOYW1lKCk7XG4gIGNvbnN0IG1vZHVsZVBhdGg6IHN0cmluZyA9IGBub2RlX21vZHVsZXMvJHttb2R1bGVOYW1lfWA7XG5cbiAgY29uc3QgcHJvamVjdFBhdGggPSBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCBtb2R1bGVQYXRoKTtcbiAgaWYoZXhpc3RzU3luYyhwcm9qZWN0UGF0aCkpIHtcbiAgICByZXR1cm4gcHJvamVjdFBhdGg7XG4gIH1cblxuICBjb25zdCByZXBvUGF0aDogc3RyaW5nID0gZmluZEZpbGVVcC5zeW5jKG1vZHVsZVBhdGgsIGRpck5hbWUpO1xuICBpZihyZXBvUGF0aCAmJiBleGlzdHNTeW5jKHJlcG9QYXRoKSkge1xuICAgIHJldHVybiByZXBvUGF0aDtcbiAgfVxuXG4gIGNvbnN0IGxvY2FsUGF0aDogc3RyaW5nID0gZmluZEZpbGVVcC5zeW5jKG1vZHVsZVBhdGgsICcuLycsIDEwKSB8fCBgLi8ke21vZHVsZVBhdGh9YDtcbiAgcmV0dXJuIGxvY2FsUGF0aDtcbn07XG5cbmV4cG9ydCBjb25zdCByZXNvbHZlQmluYXJ5UGF0aCA9IChiaW5hcnlOYW1lOiBzdHJpbmcsIHBhY2thZ2VOYW1lPzogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgY29uc3QgbGV4RGlyID0gTGV4Q29uZmlnLmdldExleERpcigpO1xuXG4gIGNvbnN0IGxleEJpblBhdGggPSBwYXRoUmVzb2x2ZShsZXhEaXIsIGBub2RlX21vZHVsZXMvLmJpbi8ke2JpbmFyeU5hbWV9YCk7XG4gIGlmKGV4aXN0c1N5bmMobGV4QmluUGF0aCkpIHtcbiAgICByZXR1cm4gbGV4QmluUGF0aDtcbiAgfVxuXG4gIGlmKHBhY2thZ2VOYW1lKSB7XG4gICAgY29uc3QgbGV4UGFja2FnZUJpblBhdGggPSBwYXRoUmVzb2x2ZShsZXhEaXIsIGBub2RlX21vZHVsZXMvJHtwYWNrYWdlTmFtZX0vYmluLyR7YmluYXJ5TmFtZX1gKTtcbiAgICBpZihleGlzdHNTeW5jKGxleFBhY2thZ2VCaW5QYXRoKSkge1xuICAgICAgcmV0dXJuIGxleFBhY2thZ2VCaW5QYXRoO1xuICAgIH1cblxuICAgIGNvbnN0IGxleFBhY2thZ2VCaW5Kc1BhdGggPSBwYXRoUmVzb2x2ZShsZXhEaXIsIGBub2RlX21vZHVsZXMvJHtwYWNrYWdlTmFtZX0vYmluLyR7YmluYXJ5TmFtZX0uanNgKTtcbiAgICBpZihleGlzdHNTeW5jKGxleFBhY2thZ2VCaW5Kc1BhdGgpKSB7XG4gICAgICByZXR1cm4gbGV4UGFja2FnZUJpbkpzUGF0aDtcbiAgICB9XG5cbiAgICBjb25zdCBsZXhQYWNrYWdlQmluQ2pzUGF0aCA9IHBhdGhSZXNvbHZlKGxleERpciwgYG5vZGVfbW9kdWxlcy8ke3BhY2thZ2VOYW1lfS9iaW4vJHtiaW5hcnlOYW1lfS5janNgKTtcbiAgICBpZihleGlzdHNTeW5jKGxleFBhY2thZ2VCaW5DanNQYXRoKSkge1xuICAgICAgcmV0dXJuIGxleFBhY2thZ2VCaW5DanNQYXRoO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGNoZWNrQmluVXAgPSAoc3RhcnREaXI6IHN0cmluZykgPT4ge1xuICAgIGxldCBjaGVja0RpciA9IHN0YXJ0RGlyO1xuICAgIGZvcihsZXQgaSA9IDA7IGkgPCA1OyBpKyspIHtcbiAgICAgIGNvbnN0IG1vbm9yZXBvQmluUGF0aCA9IHBhdGhSZXNvbHZlKGNoZWNrRGlyLCBgbm9kZV9tb2R1bGVzLy5iaW4vJHtiaW5hcnlOYW1lfWApO1xuICAgICAgaWYoZXhpc3RzU3luYyhtb25vcmVwb0JpblBhdGgpKSB7XG4gICAgICAgIHJldHVybiBtb25vcmVwb0JpblBhdGg7XG4gICAgICB9XG4gICAgICBjb25zdCBwYXJlbnREaXIgPSBwYXRoUmVzb2x2ZShjaGVja0RpciwgJy4uJyk7XG4gICAgICBpZihwYXJlbnREaXIgPT09IGNoZWNrRGlyKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2hlY2tEaXIgPSBwYXJlbnREaXI7XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfTtcblxuICBjb25zdCBmcm9tQ3dkID0gY2hlY2tCaW5VcChwcm9jZXNzLmN3ZCgpKTtcbiAgaWYoZnJvbUN3ZCkge1xuICAgIHJldHVybiBmcm9tQ3dkO1xuICB9XG5cbiAgY29uc3QgZnJvbUxleCA9IGNoZWNrQmluVXAobGV4RGlyKTtcbiAgaWYoZnJvbUxleCkge1xuICAgIHJldHVybiBmcm9tTGV4O1xuICB9XG5cbiAgcmV0dXJuICcnO1xufTtcblxuZXhwb3J0IGNvbnN0IGZpbmRUYWlsd2luZENzc1BhdGggPSAoKTogc3RyaW5nID0+IHtcbiAgY29uc3QgdGFpbHdpbmRQYXR0ZXJucyA9IFsnKiovdGFpbHdpbmQuY3NzJ107XG5cbiAgZm9yKGNvbnN0IHBhdHRlcm4gb2YgdGFpbHdpbmRQYXR0ZXJucykge1xuICAgIGNvbnN0IGZpbGVzID0gZ2xvYlN5bmMocGF0dGVybiwge1xuICAgICAgY3dkOiBwcm9jZXNzLmN3ZCgpLFxuICAgICAgaWdub3JlOiBbJyoqL25vZGVfbW9kdWxlcy8qKicsICcqKi9kaXN0LyoqJywgJyoqL2xpYi8qKicsICcqKi9idWlsZC8qKicsICcqKi8uc3Rvcnlib29rLyoqJ11cbiAgICB9KTtcblxuICAgIGlmKGZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCBmaWxlc1swXSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuICcnO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlc29sdmVXZWJwYWNrUGF0aHMgPSAoY3VycmVudERpcm5hbWU6IHN0cmluZyk6IHt3ZWJwYWNrUGF0aDogc3RyaW5nOyB3ZWJwYWNrQ29uZmlnOiBzdHJpbmd9ID0+IHtcbiAgY29uc3QgcG9zc2libGVXZWJwYWNrUGF0aHMgPSBbXG4gICAgcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJ25vZGVfbW9kdWxlcy93ZWJwYWNrLWNsaS9iaW4vY2xpLmpzJyksXG4gICAgcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJ25vZGVfbW9kdWxlcy8uYmluL3dlYnBhY2snKSxcbiAgICBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnbm9kZV9tb2R1bGVzL0BubGFicy9sZXgnLCAnbm9kZV9tb2R1bGVzL3dlYnBhY2stY2xpL2Jpbi9jbGkuanMnKSxcbiAgICBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnbm9kZV9tb2R1bGVzL0BubGFicy9sZXgnLCAnbm9kZV9tb2R1bGVzLy5iaW4vd2VicGFjaycpLFxuICAgIHBhdGhSZXNvbHZlKGN1cnJlbnREaXJuYW1lLCAnbm9kZV9tb2R1bGVzL0BubGFicy9sZXgvbm9kZV9tb2R1bGVzL3dlYnBhY2stY2xpL2Jpbi9jbGkuanMnKSxcbiAgICBwYXRoUmVzb2x2ZShjdXJyZW50RGlybmFtZSwgJ25vZGVfbW9kdWxlcy9AbmxhYnMvbGV4L25vZGVfbW9kdWxlcy8uYmluL3dlYnBhY2snKSxcbiAgICBwYXRoUmVzb2x2ZShwcm9jZXNzLmVudi5MRVhfSE9NRSB8fCAnL25vZGVfbW9kdWxlcy9AbmxhYnMvbGV4JywgJ25vZGVfbW9kdWxlcy93ZWJwYWNrLWNsaS9iaW4vY2xpLmpzJyksXG4gICAgcGF0aFJlc29sdmUocHJvY2Vzcy5lbnYuTEVYX0hPTUUgfHwgJy9ub2RlX21vZHVsZXMvQG5sYWJzL2xleCcsICdub2RlX21vZHVsZXMvLmJpbi93ZWJwYWNrJylcbiAgXTtcblxuICBsZXQgd2VicGFja1BhdGggPSAnJztcblxuICBmb3IoY29uc3QgcGF0aCBvZiBwb3NzaWJsZVdlYnBhY2tQYXRocykge1xuICAgIGlmKGV4aXN0c1N5bmMocGF0aCkpIHtcbiAgICAgIHdlYnBhY2tQYXRoID0gcGF0aDtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGlmKCF3ZWJwYWNrUGF0aCkge1xuICAgIHdlYnBhY2tQYXRoID0gJ25weCc7XG4gIH1cblxuICBjb25zdCBwb3NzaWJsZVdlYnBhY2tDb25maWdQYXRocyA9IFtcbiAgICBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnd2VicGFjay5jb25maWcuanMnKSxcbiAgICBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnd2VicGFjay5jb25maWcudHMnKSxcbiAgICBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnbm9kZV9tb2R1bGVzL0BubGFicy9sZXgvd2VicGFjay5jb25maWcuanMnKSxcbiAgICBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnbm9kZV9tb2R1bGVzL0BubGFicy9sZXgvd2VicGFjay5jb25maWcudHMnKSxcbiAgICBwYXRoUmVzb2x2ZShjdXJyZW50RGlybmFtZSwgJ25vZGVfbW9kdWxlcy9AbmxhYnMvbGV4L3dlYnBhY2suY29uZmlnLmpzJyksXG4gICAgcGF0aFJlc29sdmUoY3VycmVudERpcm5hbWUsICdub2RlX21vZHVsZXMvQG5sYWJzL2xleC93ZWJwYWNrLmNvbmZpZy50cycpLFxuICAgIHBhdGhSZXNvbHZlKHByb2Nlc3MuZW52LkxFWF9IT01FIHx8ICcvbm9kZV9tb2R1bGVzL0BubGFicy9sZXgnLCAnd2VicGFjay5jb25maWcuanMnKSxcbiAgICBwYXRoUmVzb2x2ZShwcm9jZXNzLmVudi5MRVhfSE9NRSB8fCAnL25vZGVfbW9kdWxlcy9AbmxhYnMvbGV4JywgJ3dlYnBhY2suY29uZmlnLnRzJylcbiAgXTtcblxuICBsZXQgd2VicGFja0NvbmZpZyA9ICcnO1xuXG4gIGZvcihjb25zdCBwYXRoIG9mIHBvc3NpYmxlV2VicGFja0NvbmZpZ1BhdGhzKSB7XG4gICAgaWYoZXhpc3RzU3luYyhwYXRoKSkge1xuICAgICAgd2VicGFja0NvbmZpZyA9IHBhdGg7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZighd2VicGFja0NvbmZpZykge1xuICAgIHdlYnBhY2tDb25maWcgPSBwYXRoUmVzb2x2ZShjdXJyZW50RGlybmFtZSwgJy4uLy4uL3dlYnBhY2suY29uZmlnLmpzJyk7XG4gIH1cblxuICByZXR1cm4ge3dlYnBhY2tDb25maWcsIHdlYnBhY2tQYXRofTtcbn07Il0sCiAgIm1hcHBpbmdzIjogIkFBSUEsT0FBTyxnQkFBZ0I7QUFDdkIsU0FBUSxZQUFZLG9CQUFtQjtBQUN2QyxTQUFRLFFBQVEsZ0JBQWU7QUFDL0IsU0FBUSxXQUFXLGFBQWEsZUFBYztBQUU5QyxTQUFRLGlCQUFnQjtBQUVqQixNQUFNLGFBQWEsTUFBYztBQUN0QyxNQUFJO0FBQ0YsV0FBTyxLQUFLLHdDQUF3QztBQUFBLEVBQ3RELFFBQVE7QUFDTixXQUFPLFFBQVEsSUFBSTtBQUFBLEVBQ3JCO0FBQ0Y7QUFFTyxNQUFNLGNBQWMsQ0FBQyxpQkFBaUM7QUFDM0QsTUFBSTtBQUNGLFdBQU8sS0FBSyxzRUFBc0U7QUFBQSxFQUNwRixRQUFRO0FBQ04sUUFBRyxpQkFBaUIseUJBQXlCO0FBQzNDLGFBQU8sWUFBWSxRQUFRLElBQUksR0FBRyxjQUFjO0FBQUEsSUFDbEQ7QUFDQSxXQUFPLFlBQVksUUFBUSxJQUFJLEdBQUcsWUFBWTtBQUFBLEVBQ2hEO0FBQ0Y7QUFFTyxNQUFNLHdCQUF3QixNQUFjO0FBQ2pELFFBQU0sbUJBQW1CO0FBRXpCLFFBQU0sbUJBQW1CLFlBQVksUUFBUSxJQUFJLEdBQUcsc0NBQXNDO0FBRTFGLE1BQUcsV0FBVyxnQkFBZ0IsR0FBRztBQUMvQixXQUFPO0FBQUEsRUFDVDtBQUVBLE1BQUk7QUFFSixNQUFHLFFBQVEsSUFBSSxVQUFVO0FBQ3ZCLGVBQVcsUUFBUSxJQUFJO0FBQUEsRUFDekIsT0FBTztBQUNMLFFBQUk7QUFDRixpQkFBVyxLQUFLLHdDQUF3QztBQUFBLElBQzFELFFBQVE7QUFDTixVQUFJO0FB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
231
+
232
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9maWxlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE4LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQgZmluZEZpbGVVcCBmcm9tICdmaW5kLWZpbGUtdXAnO1xuaW1wb3J0IHtleGlzdHNTeW5jLCByZWFkRmlsZVN5bmN9IGZyb20gJ2ZzJztcbmltcG9ydCB7c3luYyBhcyBnbG9iU3luY30gZnJvbSAnZ2xvYic7XG5pbXBvcnQge3Jlc29sdmUgYXMgcGF0aFJlc29sdmUsIGRpcm5hbWV9IGZyb20gJ3BhdGgnO1xuXG5pbXBvcnQge0xleENvbmZpZ30gZnJvbSAnLi4vTGV4Q29uZmlnLmpzJztcblxuZXhwb3J0IGNvbnN0IGdldERpck5hbWUgPSAoKTogc3RyaW5nID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZXZhbCgnbmV3IFVSTChcIi5cIiwgaW1wb3J0Lm1ldGEudXJsKS5wYXRobmFtZScpO1xuICB9IGNhdGNoe1xuICAgIHJldHVybiBwcm9jZXNzLmN3ZCgpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RmlsZVBhdGggPSAocmVsYXRpdmVQYXRoOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBldmFsKCdyZXF1aXJlKFwidXJsXCIpLmZpbGVVUkxUb1BhdGgobmV3IFVSTChyZWxhdGl2ZVBhdGgsIGltcG9ydC5tZXRhLnVybCkpJyk7XG4gIH0gY2F0Y2h7XG4gICAgaWYocmVsYXRpdmVQYXRoID09PSAnLi4vLi4vLi4vcGFja2FnZS5qc29uJykge1xuICAgICAgcmV0dXJuIHBhdGhSZXNvbHZlKHByb2Nlc3MuY3dkKCksICdwYWNrYWdlLmpzb24nKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhdGhSZXNvbHZlKHByb2Nlc3MuY3dkKCksIHJlbGF0aXZlUGF0aCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRMZXhQYWNrYWdlSnNvblBhdGggPSAoKTogc3RyaW5nID0+IHtcbiAgY29uc3QgTEVYX1BBQ0tBR0VfTkFNRSA9ICdAbmxhYnMvbGV4JztcblxuICBjb25zdCBsZXhJbk5vZGVNb2R1bGVzID0gcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJ25vZGVfbW9kdWxlcy9AbmxhYnMvbGV4L3BhY2thZ2UuanNvbicpO1xuXG4gIGlmKGV4aXN0c1N5bmMobGV4SW5Ob2RlTW9kdWxlcykpIHtcbiAgICByZXR1cm4gbGV4SW5Ob2RlTW9kdWxlcztcbiAgfVxuXG4gIGxldCBzdGFydERpcjogc3RyaW5nO1xuXG4gIGlmKHByb2Nlc3MuZW52LkxFWF9ST09UKSB7XG4gICAgc3RhcnREaXIgPSBwcm9jZXNzLmVudi5MRVhfUk9PVDtcbiAgfSBlbHNlIHtcbiAgICB0cnkge1xuICAgICAgc3RhcnREaXIgPSBldmFsKCduZXcgVVJMKFwiLlwiLCBpbXBvcnQubWV0YS51cmwpLnBhdGhuYW1lJyk7XG4gICAgfSBjYXRjaHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHN0YXJ0RGlyID0gZXZhbCgnX19maWxlbmFtZSA/IHJlcXVpcmUoXCJwYXRoXCIpLmRpcm5hbWUoX19maWxlbmFtZSkgOiBudWxsJyk7XG4gICAgICAgIGlmKCFzdGFydERpcikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignX19maWxlbmFtZSBub3QgYXZhaWxhYmxlJyk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2h7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYocHJvY2Vzcy5hcmd2WzFdICYmICFwcm9jZXNzLmFyZ3ZbMV0uaW5jbHVkZXMoJ25vZGUnKSkge1xuICAgICAgICAgICAgc3RhcnREaXIgPSBkaXJuYW1lKHByb2Nlc3MuYXJndlsxXSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5hcmd2WzFdIG5vdCBzdWl0YWJsZScpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaHtcbiAgICAgICAgICBzdGFydERpciA9IHByb2Nlc3MuY3dkKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBsZXQgZGlyID0gc3RhcnREaXI7XG4gIGZvcihsZXQgaSA9IDA7IGkgPCA4OyBpKyspIHtcbiAgICBjb25zdCBwa2dQYXRoID0gcGF0aFJlc29sdmUoZGlyLCAncGFja2FnZS5qc29uJyk7XG4gICAgaWYoZXhpc3RzU3luYyhwa2dQYXRoKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcGtnID0gSlNPTi5wYXJzZShyZWFkRmlsZVN5bmMocGtnUGF0aCwgJ3V0ZjgnKSk7XG4gICAgICAgIGlmKHBrZy5uYW1lID09PSBMRVhfUEFDS0FHRV9OQU1FKSB7XG4gICAgICAgICAgcmV0dXJuIHBrZ1BhdGg7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2h7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHBhcmVudCA9IGRpcm5hbWUoZGlyKTtcbiAgICBpZihwYXJlbnQgPT09IGRpcikge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGRpciA9IHBhcmVudDtcbiAgfVxuXG4gIHJldHVybiBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAncGFja2FnZS5qc29uJyk7XG59O1xuXG5leHBvcnQgY29uc3QgcmVsYXRpdmVGaWxlUGF0aCA9IChmaWxlbmFtZTogc3RyaW5nLCBkaXJQYXRoOiBzdHJpbmcgPSAnLi8nLCBiYWNrVXA6IG51bWJlciA9IDApOiBzdHJpbmcgPT4ge1xuICBjb25zdCBuZXN0RGVwdGg6IG51bWJlciA9IDEwO1xuXG4gIGlmKGJhY2tVcCkge1xuICAgIGNvbnN0IGZpbGVQYXRoOiBzdHJpbmcgPSBmaW5kRmlsZVVwLnN5bmMoZmlsZW5hbWUsIGRpclBhdGgsIG5lc3REZXB0aCk7XG4gICAgY29uc3QgcHJldmlvdXNQYXRoOiBzdHJpbmcgPSBBcnJheShiYWNrVXApLmZpbGwobnVsbCkubWFwKCgpID0+ICcuLi8nKS5qb2luKCcnKTtcbiAgICByZXR1cm4gcGF0aFJlc29sdmUoZmlsZVBhdGgsIHByZXZpb3VzUGF0aCk7XG4gIH1cblxuICByZXR1cm4gZmluZEZpbGVVcC5zeW5jKGZpbGVuYW1lLCBkaXJQYXRoLCBuZXN0RGVwdGgpO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlbGF0aXZlTm9kZVBhdGggPSAoZmlsZW5hbWU6IHN0cmluZywgZGlyUGF0aDogc3RyaW5nID0gJy4vJywgYmFja1VwOiBudW1iZXIgPSAwKTogc3RyaW5nID0+IHtcbiAgY29uc3QgbmVzdERlcHRoOiBudW1iZXIgPSAxMDtcbiAgY29uc3QgbW9kdWxlUGF0aCA9IGBub2RlX21vZHVsZXMvJHtmaWxlbmFtZX1gO1xuXG4gIGlmKGRpclBhdGggIT09ICcuLycpIHtcbiAgICBjb25zdCBsZXhNb2R1bGVQYXRoID0gcGF0aFJlc29sdmUoZGlyUGF0aCwgbW9kdWxlUGF0aCk7XG4gICAgaWYoZXhpc3RzU3luYyhsZXhNb2R1bGVQYXRoKSkge1xuICAgICAgcmV0dXJuIGxleE1vZHVsZVBhdGg7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcHJvamVjdFBhdGggPSBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCBtb2R1bGVQYXRoKTtcbiAgaWYoZXhpc3RzU3luYyhwcm9qZWN0UGF0aCkpIHtcbiAgICByZXR1cm4gcHJvamVjdFBhdGg7XG4gIH1cblxuICBpZihiYWNrVXApIHtcbiAgICBjb25zdCBmaWxlUGF0aDogc3RyaW5nID0gZmluZEZpbGVVcC5zeW5jKG1vZHVsZVBhdGgsIGRpclBhdGgsIG5lc3REZXB0aCk7XG4gICAgY29uc3QgcHJldmlvdXNQYXRoOiBzdHJpbmcgPSBBcnJheShuZXN0RGVwdGgpLmZpbGwobnVsbCkubWFwKCgpID0+ICcuLi8nKS5qb2luKCcnKTtcbiAgICByZXR1cm4gcGF0aFJlc29sdmUoZmlsZVBhdGgsIHByZXZpb3VzUGF0aCk7XG4gIH1cblxuICByZXR1cm4gZmluZEZpbGVVcC5zeW5jKG1vZHVsZVBhdGgsIGRpclBhdGgsIG5lc3REZXB0aCkgfHwgYC9ub2RlX21vZHVsZXMvJHtmaWxlbmFtZX1gO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldE5vZGVQYXRoID0gKG1vZHVsZU5hbWU6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IGRpck5hbWUgPSBnZXREaXJOYW1lKCk7XG4gIGNvbnN0IG1vZHVsZVBhdGg6IHN0cmluZyA9IGBub2RlX21vZHVsZXMvJHttb2R1bGVOYW1lfWA7XG5cbiAgY29uc3QgcHJvamVjdFBhdGggPSBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCBtb2R1bGVQYXRoKTtcbiAgaWYoZXhpc3RzU3luYyhwcm9qZWN0UGF0aCkpIHtcbiAgICByZXR1cm4gcHJvamVjdFBhdGg7XG4gIH1cblxuICBjb25zdCByZXBvUGF0aDogc3RyaW5nID0gZmluZEZpbGVVcC5zeW5jKG1vZHVsZVBhdGgsIGRpck5hbWUpO1xuICBpZihyZXBvUGF0aCAmJiBleGlzdHNTeW5jKHJlcG9QYXRoKSkge1xuICAgIHJldHVybiByZXBvUGF0aDtcbiAgfVxuXG4gIGNvbnN0IGxvY2FsUGF0aDogc3RyaW5nID0gZmluZEZpbGVVcC5zeW5jKG1vZHVsZVBhdGgsICcuLycsIDEwKSB8fCBgLi8ke21vZHVsZVBhdGh9YDtcbiAgcmV0dXJuIGxvY2FsUGF0aDtcbn07XG5cbmV4cG9ydCBjb25zdCByZXNvbHZlQmluYXJ5UGF0aCA9IChiaW5hcnlOYW1lOiBzdHJpbmcsIHBhY2thZ2VOYW1lPzogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgY29uc3QgbGV4RGlyID0gTGV4Q29uZmlnLmdldExleERpcigpO1xuXG4gIGNvbnN0IGxleEJpblBhdGggPSBwYXRoUmVzb2x2ZShsZXhEaXIsIGBub2RlX21vZHVsZXMvLmJpbi8ke2JpbmFyeU5hbWV9YCk7XG4gIGlmKGV4aXN0c1N5bmMobGV4QmluUGF0aCkpIHtcbiAgICByZXR1cm4gbGV4QmluUGF0aDtcbiAgfVxuXG4gIGlmKHBhY2thZ2VOYW1lKSB7XG4gICAgY29uc3QgbGV4UGFja2FnZUJpblBhdGggPSBwYXRoUmVzb2x2ZShsZXhEaXIsIGBub2RlX21vZHVsZXMvJHtwYWNrYWdlTmFtZX0vYmluLyR7YmluYXJ5TmFtZX1gKTtcbiAgICBpZihleGlzdHNTeW5jKGxleFBhY2thZ2VCaW5QYXRoKSkge1xuICAgICAgcmV0dXJuIGxleFBhY2thZ2VCaW5QYXRoO1xuICAgIH1cblxuICAgIGNvbnN0IGxleFBhY2thZ2VCaW5Kc1BhdGggPSBwYXRoUmVzb2x2ZShsZXhEaXIsIGBub2RlX21vZHVsZXMvJHtwYWNrYWdlTmFtZX0vYmluLyR7YmluYXJ5TmFtZX0uanNgKTtcbiAgICBpZihleGlzdHNTeW5jKGxleFBhY2thZ2VCaW5Kc1BhdGgpKSB7XG4gICAgICByZXR1cm4gbGV4UGFja2FnZUJpbkpzUGF0aDtcbiAgICB9XG5cbiAgICBjb25zdCBsZXhQYWNrYWdlQmluQ2pzUGF0aCA9IHBhdGhSZXNvbHZlKGxleERpciwgYG5vZGVfbW9kdWxlcy8ke3BhY2thZ2VOYW1lfS9iaW4vJHtiaW5hcnlOYW1lfS5janNgKTtcbiAgICBpZihleGlzdHNTeW5jKGxleFBhY2thZ2VCaW5DanNQYXRoKSkge1xuICAgICAgcmV0dXJuIGxleFBhY2thZ2VCaW5DanNQYXRoO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGNoZWNrQmluVXAgPSAoc3RhcnREaXI6IHN0cmluZykgPT4ge1xuICAgIGxldCBjaGVja0RpciA9IHN0YXJ0RGlyO1xuICAgIGZvcihsZXQgaSA9IDA7IGkgPCA1OyBpKyspIHtcbiAgICAgIGNvbnN0IG1vbm9yZXBvQmluUGF0aCA9IHBhdGhSZXNvbHZlKGNoZWNrRGlyLCBgbm9kZV9tb2R1bGVzLy5iaW4vJHtiaW5hcnlOYW1lfWApO1xuICAgICAgaWYoZXhpc3RzU3luYyhtb25vcmVwb0JpblBhdGgpKSB7XG4gICAgICAgIHJldHVybiBtb25vcmVwb0JpblBhdGg7XG4gICAgICB9XG4gICAgICBjb25zdCBwYXJlbnREaXIgPSBwYXRoUmVzb2x2ZShjaGVja0RpciwgJy4uJyk7XG4gICAgICBpZihwYXJlbnREaXIgPT09IGNoZWNrRGlyKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2hlY2tEaXIgPSBwYXJlbnREaXI7XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfTtcblxuICBjb25zdCBmcm9tQ3dkID0gY2hlY2tCaW5VcChwcm9jZXNzLmN3ZCgpKTtcbiAgaWYoZnJvbUN3ZCkge1xuICAgIHJldHVybiBmcm9tQ3dkO1xuICB9XG5cbiAgY29uc3QgZnJvbUxleCA9IGNoZWNrQmluVXAobGV4RGlyKTtcbiAgaWYoZnJvbUxleCkge1xuICAgIHJldHVybiBmcm9tTGV4O1xuICB9XG5cbiAgcmV0dXJuICcnO1xufTtcblxuZXhwb3J0IGNvbnN0IGZpbmRUYWlsd2luZENzc1BhdGggPSAoKTogc3RyaW5nID0+IHtcbiAgY29uc3QgdGFpbHdpbmRQYXR0ZXJucyA9IFsnKiovdGFpbHdpbmQuY3NzJ107XG5cbiAgZm9yKGNvbnN0IHBhdHRlcm4gb2YgdGFpbHdpbmRQYXR0ZXJucykge1xuICAgIGNvbnN0IGZpbGVzID0gZ2xvYlN5bmMocGF0dGVybiwge1xuICAgICAgY3dkOiBwcm9jZXNzLmN3ZCgpLFxuICAgICAgaWdub3JlOiBbJyoqL25vZGVfbW9kdWxlcy8qKicsICcqKi9kaXN0LyoqJywgJyoqL2xpYi8qKicsICcqKi9idWlsZC8qKicsICcqKi8uc3Rvcnlib29rLyoqJ11cbiAgICB9KTtcblxuICAgIGlmKGZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCBmaWxlc1swXSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuICcnO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlc29sdmVXZWJwYWNrUGF0aHMgPSAoY3VycmVudERpcm5hbWU6IHN0cmluZyk6IHt3ZWJwYWNrUGF0aDogc3RyaW5nOyB3ZWJwYWNrQ29uZmlnOiBzdHJpbmd9ID0+IHtcbiAgY29uc3QgcG9zc2libGVXZWJwYWNrUGF0aHMgPSBbXG4gICAgcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJ25vZGVfbW9kdWxlcy93ZWJwYWNrLWNsaS9iaW4vY2xpLmpzJyksXG4gICAgcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJ25vZGVfbW9kdWxlcy8uYmluL3dlYnBhY2snKSxcbiAgICBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnbm9kZV9tb2R1bGVzL0BubGFicy9sZXgnLCAnbm9kZV9tb2R1bGVzL3dlYnBhY2stY2xpL2Jpbi9jbGkuanMnKSxcbiAgICBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnbm9kZV9tb2R1bGVzL0BubGFicy9sZXgnLCAnbm9kZV9tb2R1bGVzLy5iaW4vd2VicGFjaycpLFxuICAgIHBhdGhSZXNvbHZlKGN1cnJlbnREaXJuYW1lLCAnbm9kZV9tb2R1bGVzL0BubGFicy9sZXgvbm9kZV9tb2R1bGVzL3dlYnBhY2stY2xpL2Jpbi9jbGkuanMnKSxcbiAgICBwYXRoUmVzb2x2ZShjdXJyZW50RGlybmFtZSwgJ25vZGVfbW9kdWxlcy9AbmxhYnMvbGV4L25vZGVfbW9kdWxlcy8uYmluL3dlYnBhY2snKSxcbiAgICBwYXRoUmVzb2x2ZShwcm9jZXNzLmVudi5MRVhfSE9NRSB8fCAnL25vZGVfbW9kdWxlcy9AbmxhYnMvbGV4JywgJ25vZGVfbW9kdWxlcy93ZWJwYWNrLWNsaS9iaW4vY2xpLmpzJyksXG4gICAgcGF0aFJlc29sdmUocHJvY2Vzcy5lbnYuTEVYX0hPTUUgfHwgJy9ub2RlX21vZHVsZXMvQG5sYWJzL2xleCcsICdub2RlX21vZHVsZXMvLmJpbi93ZWJwYWNrJylcbiAgXTtcblxuICBsZXQgd2VicGFja1BhdGggPSAnJztcblxuICBmb3IoY29uc3QgcGF0aCBvZiBwb3NzaWJsZVdlYnBhY2tQYXRocykge1xuICAgIGlmKGV4aXN0c1N5bmMocGF0aCkpIHtcbiAgICAgIHdlYnBhY2tQYXRoID0gcGF0aDtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGlmKCF3ZWJwYWNrUGF0aCkge1xuICAgIHdlYnBhY2tQYXRoID0gJ25weCc7XG4gIH1cblxuICBjb25zdCBwb3NzaWJsZVdlYnBhY2tDb25maWdQYXRocyA9IFtcbiAgICBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnd2VicGFjay5jb25maWcuanMnKSxcbiAgICBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnd2VicGFjay5jb25maWcudHMnKSxcbiAgICBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnbm9kZV9tb2R1bGVzL0BubGFicy9sZXgvd2VicGFjay5jb25maWcuanMnKSxcbiAgICBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnbm9kZV9tb2R1bGVzL0BubGFicy9sZXgvd2VicGFjay5jb25maWcudHMnKSxcbiAgICBwYXRoUmVzb2x2ZShjdXJyZW50RGlybmFtZSwgJ25vZGVfbW9kdWxlcy9AbmxhYnMvbGV4L3dlYnBhY2suY29uZmlnLmpzJyksXG4gICAgcGF0aFJlc29sdmUoY3VycmVudERpcm5hbWUsICdub2RlX21vZHVsZXMvQG5sYWJzL2xleC93ZWJwYWNrLmNvbmZpZy50cycpLFxuICAgIHBhdGhSZXNvbHZlKHByb2Nlc3MuZW52LkxFWF9IT01FIHx8ICcvbm9kZV9tb2R1bGVzL0BubGFicy9sZXgnLCAnd2VicGFjay5jb25maWcuanMnKSxcbiAgICBwYXRoUmVzb2x2ZShwcm9jZXNzLmVudi5MRVhfSE9NRSB8fCAnL25vZGVfbW9kdWxlcy9AbmxhYnMvbGV4JywgJ3dlYnBhY2suY29uZmlnLnRzJylcbiAgXTtcblxuICBsZXQgd2VicGFja0NvbmZpZyA9ICcnO1xuXG4gIGZvcihjb25zdCBwYXRoIG9mIHBvc3NpYmxlV2VicGFja0NvbmZpZ1BhdGhzKSB7XG4gICAgaWYoZXhpc3RzU3luYyhwYXRoKSkge1xuICAgICAgd2VicGFja0NvbmZpZyA9IHBhdGg7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZighd2VicGFja0NvbmZpZykge1xuICAgIHdlYnBhY2tDb25maWcgPSBwYXRoUmVzb2x2ZShjdXJyZW50RGlybmFtZSwgJy4uLy4uL3dlYnBhY2suY29uZmlnLmpzJyk7XG4gIH1cblxuICByZXR1cm4ge3dlYnBhY2tDb25maWcsIHdlYnBhY2tQYXRofTtcbn07Il0sIm5hbWVzIjpbImZpbmRGaWxlVXAiLCJleGlzdHNTeW5jIiwicmVhZEZpbGVTeW5jIiwic3luYyIsImdsb2JTeW5jIiwicmVzb2x2ZSIsInBhdGhSZXNvbHZlIiwiZGlybmFtZSIsIkxleENvbmZpZyIsImdldERpck5hbWUiLCJldmFsIiwicHJvY2VzcyIsImN3ZCIsImdldEZpbGVQYXRoIiwicmVsYXRpdmVQYXRoIiwiZ2V0TGV4UGFja2FnZUpzb25QYXRoIiwiTEVYX1BBQ0tBR0VfTkFNRSIsImxleEluTm9kZU1vZHVsZXMiLCJzdGFydERpciIsImVudiIsIkxFWF9ST09UIiwiRXJyb3IiLCJhcmd2IiwiaW5jbHVkZXMiLCJkaXIiLCJpIiwicGtnUGF0aCIsInBrZyIsIkpTT04iLCJwYXJzZSIsIm5hbWUiLCJwYXJlbnQiLCJyZWxhdGl2ZUZpbGVQYXRoIiwiZmlsZW5hbWUiLCJkaXJQYXRoIiwiYmFja1VwIiwibmVzdERlcHRoIiwiZmlsZVBhdGgiLCJwcmV2aW91c1BhdGgiLCJBcnJheSIsImZpbGwiLCJtYXAiLCJqb2luIiwicmVsYXRpdmVOb2RlUGF0aCIsIm1vZHVsZVBhdGgiLCJsZXhNb2R1bGVQYXRoIiwicHJvamVjdFBhdGgiLCJnZXROb2RlUGF0aCIsIm1vZHVsZU5hbWUiLCJkaXJOYW1lIiwicmVwb1BhdGgiLCJsb2NhbFBhdGgiLCJyZXNvbHZlQmluYXJ5UGF0aCIsImJpbmFyeU5hbWUiLCJwYWNrYWdlTmFtZSIsImxleERpciIsImdldExleERpciIsImxleEJpblBhdGgiLCJsZXhQYWNrYWdlQmluUGF0aCIsImxleFBhY2thZ2VCaW5Kc1BhdGgiLCJsZXhQYWNrYWdlQmluQ2pzUGF0aCIsImNoZWNrQmluVXAiLCJjaGVja0RpciIsIm1vbm9yZXBvQmluUGF0aCIsInBhcmVudERpciIsImZyb21Dd2QiLCJmcm9tTGV4IiwiZmluZFRhaWx3aW5kQ3NzUGF0aCIsInRhaWx3aW5kUGF0dGVybnMiLCJwYXR0ZXJuIiwiZmlsZXMiLCJpZ25vcmUiLCJsZW5ndGgiLCJyZXNvbHZlV2VicGFja1BhdGhzIiwiY3VycmVudERpcm5hbWUiLCJwb3NzaWJsZVdlYnBhY2tQYXRocyIsIkxFWF9IT01FIiwid2VicGFja1BhdGgiLCJwYXRoIiwicG9zc2libGVXZWJwYWNrQ29uZmlnUGF0aHMiLCJ3ZWJwYWNrQ29uZmlnIl0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FDRCxPQUFPQSxnQkFBZ0IsZUFBZTtBQUN0QyxTQUFRQyxVQUFVLEVBQUVDLFlBQVksUUFBTyxLQUFLO0FBQzVDLFNBQVFDLFFBQVFDLFFBQVEsUUFBTyxPQUFPO0FBQ3RDLFNBQVFDLFdBQVdDLFdBQVcsRUFBRUMsT0FBTyxRQUFPLE9BQU87QUFFckQsU0FBUUMsU0FBUyxRQUFPLGtCQUFrQjtBQUUxQyxPQUFPLE1BQU1DLGFBQWE7SUFDeEIsSUFBSTtRQUNGLE9BQU9DLEtBQUs7SUFDZCxFQUFFLE9BQUs7UUFDTCxPQUFPQyxRQUFRQyxHQUFHO0lBQ3BCO0FBQ0YsRUFBRTtBQUVGLE9BQU8sTUFBTUMsY0FBYyxDQUFDQztJQUMxQixJQUFJO1FBQ0YsT0FBT0osS0FBSztJQUNkLEVBQUUsT0FBSztRQUNMLElBQUdJLGlCQUFpQix5QkFBeUI7WUFDM0MsT0FBT1IsWUFBWUssUUFBUUMsR0FBRyxJQUFJO1FBQ3BDO1FBQ0EsT0FBT04sWUFBWUssUUFBUUMsR0FBRyxJQUFJRTtJQUNwQztBQUNGLEVBQUU7QUFFRixPQUFPLE1BQU1DLHdCQUF3QjtJQUNuQyxNQUFNQyxtQkFBbUI7SUFFekIsTUFBTUMsbUJBQW1CWCxZQUFZSyxRQUFRQyxHQUFHLElBQUk7SUFFcEQsSUFBR1gsV0FBV2dCLG1CQUFt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