@nlabs/lex 1.49.4 → 1.50.0
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/.swcrc +35 -0
- package/README.md +43 -59
- package/__mocks__/chalk.js +19 -17
- package/config.json +32 -8
- package/examples/lex.config.js +110 -10
- package/index.cjs +1 -5
- package/lex.config.js +34 -7
- package/lib/Button.stories.js +99 -0
- package/lib/LexConfig.d.ts +60 -22
- package/lib/LexConfig.js +285 -244
- package/lib/commands/ai/ai.js +287 -288
- package/lib/commands/ai/index.js +8 -7
- package/lib/commands/build/build.d.ts +2 -2
- package/lib/commands/build/build.js +349 -458
- package/lib/commands/clean/clean.js +45 -33
- package/lib/commands/compile/compile.js +214 -227
- package/lib/commands/config/config.js +46 -42
- package/lib/commands/copy/copy.js +36 -35
- package/lib/commands/create/create.js +200 -121
- package/lib/commands/dev/dev.d.ts +2 -0
- package/lib/commands/dev/dev.js +259 -263
- package/lib/commands/init/init.js +108 -88
- package/lib/commands/link/link.js +18 -14
- package/lib/commands/lint/lint.js +735 -742
- package/lib/commands/migrate/migrate.js +49 -36
- package/lib/commands/publish/publish.js +116 -96
- package/lib/commands/serverless/serverless.js +611 -585
- package/lib/commands/storybook/storybook.js +242 -238
- package/lib/commands/test/test.d.ts +1 -1
- package/lib/commands/test/test.js +382 -394
- package/lib/commands/update/update.js +141 -120
- package/lib/commands/upgrade/upgrade.js +51 -44
- package/lib/commands/versions/versions.d.ts +1 -1
- package/lib/commands/versions/versions.js +36 -38
- package/lib/create/changelog.js +136 -125
- package/lib/index.js +40 -38
- package/lib/lex.js +95 -68
- package/lib/storybook/index.js +6 -1
- package/lib/test-react/index.js +7 -84
- package/lib/types.d.ts +1 -1
- package/lib/types.js +7 -1
- package/lib/utils/aiService.js +240 -227
- package/lib/utils/app.js +274 -273
- package/lib/utils/deepMerge.js +37 -23
- package/lib/utils/file.js +218 -215
- package/lib/utils/log.js +29 -27
- package/lib/utils/reactShim.js +7 -85
- package/lib/utils/translations.js +91 -65
- package/package.json +63 -64
- package/templates/typescript/DataLayer.js.txt +218 -0
- package/templates/typescript/DataLayer.test.js.txt +268 -0
- package/templates/typescript/DataLayer.test.ts.txt +269 -0
- package/templates/typescript/DataLayer.ts.txt +227 -0
- package/webpack.config.js +53 -26
- package/lib/commands/lint/autofix.d.ts +0 -2
package/lib/utils/deepMerge.js
CHANGED
|
@@ -1,26 +1,40 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
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
|
-
|
|
39
|
+
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9kZWVwTWVyZ2UudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cblxuLyoqXG4gKiBEZWVwIG1lcmdlIGZ1bmN0aW9uIHRoYXQgcmVjdXJzaXZlbHkgbWVyZ2VzIG9iamVjdHMgYW5kIGFycmF5c1xuICogQHBhcmFtIHRhcmdldCAtIFRoZSB0YXJnZXQgb2JqZWN0IHRvIG1lcmdlIGludG9cbiAqIEBwYXJhbSBzb3VyY2UgLSBUaGUgc291cmNlIG9iamVjdCB0byBtZXJnZSBmcm9tXG4gKiBAcmV0dXJucyBUaGUgbWVyZ2VkIG9iamVjdFxuICovXG5leHBvcnQgY29uc3QgZGVlcE1lcmdlID0gKHRhcmdldDogYW55LCBzb3VyY2U6IGFueSk6IGFueSA9PiB7XG4gIGlmKCFzb3VyY2UpIHtcbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9XG5cbiAgY29uc3QgcmVzdWx0ID0gey4uLnRhcmdldH07XG5cbiAgZm9yKGNvbnN0IGtleSBpbiBzb3VyY2UpIHtcbiAgICBpZihzb3VyY2UuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgaWYoc291cmNlW2tleV0gJiYgdHlwZW9mIHNvdXJjZVtrZXldID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShzb3VyY2Vba2V5XSkpIHtcbiAgICAgICAgcmVzdWx0W2tleV0gPSBkZWVwTWVyZ2UodGFyZ2V0W2tleV0gfHwge30sIHNvdXJjZVtrZXldKTtcbiAgICAgIH0gZWxzZSBpZihBcnJheS5pc0FycmF5KHNvdXJjZVtrZXldKSkge1xuICAgICAgICAvLyBGb3IgYXJyYXlzLCBtZXJnZSBpZiBib3RoIGFyZSBhcnJheXMsIG90aGVyd2lzZSByZXBsYWNlXG4gICAgICAgIGlmKEFycmF5LmlzQXJyYXkodGFyZ2V0W2tleV0pKSB7XG4gICAgICAgICAgcmVzdWx0W2tleV0gPSBbLi4udGFyZ2V0W2tleV0sIC4uLnNvdXJjZVtrZXldXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN1bHRba2V5XSA9IFsuLi5zb3VyY2Vba2V5XV07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdFtrZXldID0gc291cmNlW2tleV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07Il0sIm5hbWVzIjpbImRlZXBNZXJnZSIsInRhcmdldCIsInNvdXJjZSIsInJlc3VsdCIsImtleSIsImhhc093blByb3BlcnR5IiwiQXJyYXkiLCJpc0FycmF5Il0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FFRDs7Ozs7Q0FLQyxHQUNELE9BQU8sTUFBTUEsWUFBWSxDQUFDQyxRQUFhQztJQUNyQyxJQUFHLENBQUNBLFFBQVE7UUFDVixPQUFPRDtJQUNUO0lBRUEsTUFBTUUsU0FBUztRQUFDLEdBQUdGLE1BQU07SUFBQTtJQUV6QixJQUFJLE1BQU1HLE9BQU9GLE9BQVE7UUFDdkIsSUFBR0EsT0FBT0csY0FBYyxDQUFDRCxNQUFNO1lBQzdCLElBQUdGLE1BQU0sQ0FBQ0UsSUFBSSxJQUFJLE9BQU9GLE1BQU0sQ0FBQ0UsSUFBSSxLQUFLLFlBQVksQ0FBQ0UsTUFBTUMsT0FBTyxDQUFDTCxNQUFNLENBQUNFLElBQUksR0FBRztnQkFDaEZELE1BQU0sQ0FBQ0MsSUFBSSxHQUFHSixVQUFVQyxNQUFNLENBQUNHLElBQUksSUFBSSxDQUFDLEdBQUdGLE1BQU0sQ0FBQ0UsSUFBSTtZQUN4RCxPQUFPLElBQUdFLE1BQU1DLE9BQU8sQ0FBQ0wsTUFBTSxDQUFDRSxJQUFJLEdBQUc7Z0JBQ3BDLDBEQUEwRDtnQkFDMUQsSUFBR0UsTUFBTUMsT0FBTyxDQUFDTixNQUFNLENBQUNHLElBQUksR0FBRztvQkFDN0JELE1BQU0sQ0FBQ0MsSUFBSSxHQUFHOzJCQUFJSCxNQUFNLENBQUNHLElBQUk7MkJBQUtGLE1BQU0sQ0FBQ0UsSUFBSTtxQkFBQztnQkFDaEQsT0FBTztvQkFDTEQsTUFBTSxDQUFDQyxJQUFJLEdBQUc7MkJBQUlGLE1BQU0sQ0FBQ0UsSUFBSTtxQkFBQztnQkFDaEM7WUFDRixPQUFPO2dCQUNMRCxNQUFNLENBQUNDLElBQUksR0FBR0YsTUFBTSxDQUFDRSxJQUFJO1lBQzNCO1FBQ0Y7SUFDRjtJQUVBLE9BQU9EO0FBQ1QsRUFBRSJ9
|
package/lib/utils/file.js
CHANGED
|
@@ -1,229 +1,232 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
|
|
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
|
|
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
|
-
|
|
35
|
-
} catch
|
|
36
|
-
|
|
37
|
-
|
|
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
|
-
|
|
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
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
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
|
-
|
|
67
|
-
|
|
68
|
-
|
|
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
|
-
|
|
71
|
-
}
|
|
72
|
-
return pathResolve(process.cwd(), "package.json");
|
|
74
|
+
return pathResolve(process.cwd(), 'package.json');
|
|
73
75
|
};
|
|
74
|
-
const relativeFilePath = (filename, dirPath =
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
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
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
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
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
const
|
|
125
|
-
if (existsSync(
|
|
126
|
-
|
|
127
|
-
}
|
|
128
|
-
const
|
|
129
|
-
|
|
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
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
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
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
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
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
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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
|