@nlabs/lex 1.48.7 → 1.49.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 (105) hide show
  1. package/.storybook/main.ts +9 -2
  2. package/.vscode/settings.json +1 -6
  3. package/README.md +249 -0
  4. package/eslint.config.mjs +24 -0
  5. package/examples/lex.config.js +18 -8
  6. package/examples/serverless-example/README.md +109 -0
  7. package/examples/serverless-example/dist/handlers/echo.js +15 -0
  8. package/examples/serverless-example/dist/handlers/graphql.js +137 -0
  9. package/examples/serverless-example/dist/handlers/hello.js +15 -0
  10. package/examples/serverless-example/dist/handlers/test.js +17 -0
  11. package/examples/serverless-example/dist/handlers/websocket.js +14 -0
  12. package/examples/serverless-example/lex.config.mjs +74 -0
  13. package/jest.config.mjs +13 -12
  14. package/{dist → lib}/LexConfig.d.ts +7 -6
  15. package/lib/LexConfig.js +268 -0
  16. package/lib/commands/ai/ai.js +303 -0
  17. package/{dist → lib}/commands/build/build.d.ts +3 -0
  18. package/lib/commands/build/build.js +494 -0
  19. package/{dist → lib}/commands/clean/clean.js +1 -1
  20. package/lib/commands/compile/compile.js +241 -0
  21. package/lib/commands/copy/copy.js +38 -0
  22. package/{dist → lib}/commands/create/create.js +1 -1
  23. package/{dist → lib}/commands/dev/dev.d.ts +2 -0
  24. package/lib/commands/dev/dev.js +286 -0
  25. package/{dist → lib}/commands/init/init.js +1 -1
  26. package/lib/commands/lint/lint.js +962 -0
  27. package/{dist → lib}/commands/migrate/migrate.js +1 -1
  28. package/lib/commands/publish/publish.js +104 -0
  29. package/lib/commands/serverless/serverless.d.ts +17 -0
  30. package/lib/commands/serverless/serverless.js +662 -0
  31. package/lib/commands/storybook/storybook.js +249 -0
  32. package/lib/commands/test/test.js +428 -0
  33. package/lib/commands/update/update.js +128 -0
  34. package/{dist → lib}/create/changelog.js +1 -1
  35. package/{dist → lib}/index.d.ts +1 -0
  36. package/{dist → lib}/index.js +2 -1
  37. package/lib/lex.js +73 -0
  38. package/lib/utils/aiService.d.ts +9 -0
  39. package/lib/utils/aiService.js +299 -0
  40. package/{dist → lib}/utils/app.d.ts +3 -0
  41. package/lib/utils/app.js +296 -0
  42. package/{dist → lib}/utils/file.d.ts +7 -3
  43. package/lib/utils/file.js +229 -0
  44. package/lib/utils/translations.d.ts +1 -0
  45. package/lib/utils/translations.js +74 -0
  46. package/package.json +60 -54
  47. package/postcss.config.js +5 -3
  48. package/tsconfig.build.json +2 -2
  49. package/webpack.config.js +229 -39
  50. package/dist/LexConfig.js +0 -287
  51. package/dist/commands/ai/ai.js +0 -303
  52. package/dist/commands/build/build.js +0 -404
  53. package/dist/commands/compile/compile.js +0 -234
  54. package/dist/commands/copy/copy.js +0 -38
  55. package/dist/commands/dev/dev.js +0 -74
  56. package/dist/commands/lint/lint.js +0 -993
  57. package/dist/commands/publish/publish.js +0 -104
  58. package/dist/commands/storybook/storybook.js +0 -249
  59. package/dist/commands/test/test.js +0 -429
  60. package/dist/commands/update/update.js +0 -132
  61. package/dist/lex.js +0 -70
  62. package/dist/utils/aiService.d.ts +0 -9
  63. package/dist/utils/aiService.js +0 -299
  64. package/dist/utils/app.js +0 -267
  65. package/dist/utils/file.js +0 -185
  66. package/emptyModule.js +0 -0
  67. package/eslint.config.js +0 -3
  68. /package/{dist → lib}/Button.stories.d.ts +0 -0
  69. /package/{dist → lib}/commands/ai/ai.d.ts +0 -0
  70. /package/{dist → lib}/commands/ai/index.d.ts +0 -0
  71. /package/{dist → lib}/commands/ai/index.js +0 -0
  72. /package/{dist → lib}/commands/clean/clean.d.ts +0 -0
  73. /package/{dist → lib}/commands/compile/compile.d.ts +0 -0
  74. /package/{dist → lib}/commands/config/config.d.ts +0 -0
  75. /package/{dist → lib}/commands/config/config.js +0 -0
  76. /package/{dist → lib}/commands/copy/copy.d.ts +0 -0
  77. /package/{dist → lib}/commands/create/create.d.ts +0 -0
  78. /package/{dist → lib}/commands/init/init.d.ts +0 -0
  79. /package/{dist → lib}/commands/link/link.d.ts +0 -0
  80. /package/{dist → lib}/commands/link/link.js +0 -0
  81. /package/{dist → lib}/commands/lint/autofix.d.ts +0 -0
  82. /package/{dist → lib}/commands/lint/lint.d.ts +0 -0
  83. /package/{dist → lib}/commands/migrate/migrate.d.ts +0 -0
  84. /package/{dist → lib}/commands/publish/publish.d.ts +0 -0
  85. /package/{dist → lib}/commands/storybook/storybook.d.ts +0 -0
  86. /package/{dist → lib}/commands/test/test.d.ts +0 -0
  87. /package/{dist → lib}/commands/update/update.d.ts +0 -0
  88. /package/{dist → lib}/commands/upgrade/upgrade.d.ts +0 -0
  89. /package/{dist → lib}/commands/upgrade/upgrade.js +0 -0
  90. /package/{dist → lib}/commands/versions/versions.d.ts +0 -0
  91. /package/{dist → lib}/commands/versions/versions.js +0 -0
  92. /package/{dist → lib}/create/changelog.d.ts +0 -0
  93. /package/{dist → lib}/lex.d.ts +0 -0
  94. /package/{dist → lib}/storybook/index.d.ts +0 -0
  95. /package/{dist → lib}/storybook/index.js +0 -0
  96. /package/{dist → lib}/test-react/index.d.ts +0 -0
  97. /package/{dist → lib}/test-react/index.js +0 -0
  98. /package/{dist → lib}/types.d.ts +0 -0
  99. /package/{dist → lib}/types.js +0 -0
  100. /package/{dist → lib}/utils/deepMerge.d.ts +0 -0
  101. /package/{dist → lib}/utils/deepMerge.js +0 -0
  102. /package/{dist → lib}/utils/log.d.ts +0 -0
  103. /package/{dist → lib}/utils/log.js +0 -0
  104. /package/{dist → lib}/utils/reactShim.d.ts +0 -0
  105. /package/{dist → lib}/utils/reactShim.js +0 -0
package/dist/utils/app.js DELETED
@@ -1,267 +0,0 @@
1
- import boxen from "boxen";
2
- import { copyFile, existsSync, lstatSync, mkdirSync, readdirSync, readFileSync, writeFileSync } from "fs";
3
- import { sync as globSync } from "glob";
4
- import isEmpty from "lodash/isEmpty.js";
5
- import ora from "ora";
6
- import { basename as pathBasename, join as pathJoin, relative as pathRelative, resolve as pathResolve } from "path";
7
- import { rimrafSync } from "rimraf";
8
- import { log } from "./log.js";
9
- const cwd = process.cwd();
10
- const getFilenames = (props) => {
11
- const { callback, cliName, name, quiet, type, useTypescript } = props;
12
- let nameCaps;
13
- const itemTypes = ["stores", "views"];
14
- if (!name) {
15
- if (itemTypes.includes(type)) {
16
- log(`
17
- ${cliName} Error: ${type} name is required. Please use 'lex -h' for options.`, "error", quiet);
18
- return callback?.(1);
19
- }
20
- } else {
21
- nameCaps = `${name.charAt(0).toUpperCase()}${name.substr(1)}`;
22
- }
23
- log(`${cliName} adding ${name} ${type}...`, "info", quiet);
24
- let templatePath;
25
- let templateExt;
26
- let templateReact;
27
- if (useTypescript) {
28
- templatePath = "../../templates/typescript";
29
- templateExt = ".ts";
30
- templateReact = ".tsx";
31
- } else {
32
- templatePath = "../../templates/flow";
33
- templateExt = ".js";
34
- templateReact = ".js";
35
- }
36
- return {
37
- nameCaps,
38
- templateExt,
39
- templatePath,
40
- templateReact
41
- };
42
- };
43
- const createSpinner = (quiet = false) => {
44
- if (quiet) {
45
- return {
46
- fail: () => {
47
- },
48
- start: () => {
49
- },
50
- succeed: () => {
51
- }
52
- };
53
- }
54
- return ora({ color: "yellow" });
55
- };
56
- const copyFiles = async (files, typeName, spinner, config) => {
57
- const { outputFullPath, sourceFullPath } = config;
58
- const items = files.map((fileName) => ({
59
- from: fileName,
60
- to: pathResolve(outputFullPath, pathRelative(sourceFullPath, fileName))
61
- }));
62
- try {
63
- spinner.start(`Copying ${typeName} files...`);
64
- await Promise.all(items.map(({ from, to }) => new Promise(
65
- (resolve, reject) => {
66
- mkdirSync(pathResolve(to, ".."), { recursive: true });
67
- return copyFile(from, to, (copyError) => {
68
- if (copyError) {
69
- reject();
70
- } else {
71
- resolve(true);
72
- }
73
- });
74
- }
75
- )));
76
- spinner.succeed(`Successfully copied ${files.length} ${typeName} files!`);
77
- } catch (error) {
78
- spinner.fail(`Copying of ${typeName} files failed.`);
79
- log(`Error: ${error.message}`, "error");
80
- log(error, "error");
81
- }
82
- };
83
- const copyConfiguredFiles = async (spinner, config, quiet) => {
84
- const { copyFiles: copyFilesConfig, outputFullPath, sourceFullPath, sourcePath } = config;
85
- if (!copyFilesConfig || copyFilesConfig.length === 0) {
86
- return;
87
- }
88
- try {
89
- spinner.start("Copying configured files...");
90
- let totalCopied = 0;
91
- const baseDir = sourceFullPath || (sourcePath ? pathResolve(cwd, sourcePath) : cwd);
92
- for (const pattern of copyFilesConfig) {
93
- const resolvedPattern = pathResolve(baseDir, pattern);
94
- const matchingFiles = globSync(resolvedPattern, {
95
- nodir: true,
96
- absolute: true
97
- });
98
- if (matchingFiles.length === 0) {
99
- if (!quiet) {
100
- log(`Warning: No files found matching pattern: ${pattern}`, "warn", quiet);
101
- }
102
- continue;
103
- }
104
- for (const sourceFile of matchingFiles) {
105
- const relativePath = pathRelative(baseDir, sourceFile);
106
- const destPath = pathResolve(outputFullPath, relativePath);
107
- const destDir = pathResolve(destPath, "..");
108
- mkdirSync(destDir, { recursive: true });
109
- await new Promise((resolve, reject) => {
110
- copyFile(sourceFile, destPath, (copyError) => {
111
- if (copyError) {
112
- reject(copyError);
113
- } else {
114
- resolve(true);
115
- }
116
- });
117
- });
118
- totalCopied++;
119
- }
120
- }
121
- if (totalCopied > 0) {
122
- spinner.succeed(`Successfully copied ${totalCopied} configured files!`);
123
- } else {
124
- spinner.succeed("No configured files to copy");
125
- }
126
- } catch (error) {
127
- spinner.fail("Failed to copy configured files");
128
- log(`Error copying configured files: ${error.message}`, "error", quiet);
129
- throw error;
130
- }
131
- };
132
- const copyFileSync = (source, target) => {
133
- let targetFile = target;
134
- if (existsSync(target)) {
135
- if (lstatSync(target).isDirectory()) {
136
- targetFile = pathJoin(target, pathBasename(source));
137
- }
138
- }
139
- writeFileSync(targetFile, readFileSync(source));
140
- };
141
- const copyFolderRecursiveSync = (source, target) => {
142
- let files = [];
143
- const targetFolder = pathJoin(target, pathBasename(source));
144
- if (!existsSync(targetFolder)) {
145
- mkdirSync(targetFolder);
146
- }
147
- if (lstatSync(source).isDirectory()) {
148
- files = readdirSync(source);
149
- files.forEach((file) => {
150
- const curSource = pathJoin(source, file);
151
- if (lstatSync(curSource).isDirectory()) {
152
- copyFolderRecursiveSync(curSource, targetFolder);
153
- } else {
154
- copyFileSync(curSource, targetFolder);
155
- }
156
- });
157
- }
158
- };
159
- const getPackageJson = (packagePath) => {
160
- const formatPath = packagePath || `${process.cwd()}/package.json`;
161
- const packageData = readFileSync(formatPath).toString();
162
- return JSON.parse(packageData);
163
- };
164
- const getFilesByExt = (ext, config) => {
165
- const { sourceFullPath } = config;
166
- return globSync(`${sourceFullPath}/**/**${ext}`);
167
- };
168
- const removeConflictModules = (moduleList) => {
169
- const updatedList = { ...moduleList };
170
- Object.keys(updatedList).forEach((moduleName) => {
171
- const regex = new RegExp("^(?!@types/).*?(jest|webpack).*$", "gi");
172
- if (regex.test(moduleName)) {
173
- delete updatedList[moduleName];
174
- }
175
- });
176
- return updatedList;
177
- };
178
- const removeFiles = (fileName, isRelative = false) => new Promise((resolve, reject) => {
179
- const filePath = isRelative ? pathResolve(cwd, fileName) : fileName;
180
- try {
181
- rimrafSync(filePath);
182
- return resolve(null);
183
- } catch (error) {
184
- return reject(error);
185
- }
186
- });
187
- const removeModules = () => new Promise(async (resolve, reject) => {
188
- try {
189
- await removeFiles("./node_modules", true);
190
- await removeFiles("./yarn.lock", true);
191
- await removeFiles("./package-lock.json", true);
192
- resolve(null);
193
- } catch (error) {
194
- reject(error);
195
- }
196
- });
197
- const setPackageJson = (json, packagePath) => {
198
- if (!json) {
199
- return;
200
- }
201
- const formatPath = packagePath || `${process.cwd()}/package.json`;
202
- writeFileSync(formatPath, JSON.stringify(json, null, 2));
203
- };
204
- const linkedModules = (startPath) => {
205
- const workingPath = startPath || process.cwd();
206
- let modulePath;
207
- let prefix;
208
- if (workingPath.includes("@")) {
209
- prefix = `@${workingPath.split("@").pop()}`;
210
- modulePath = workingPath;
211
- } else {
212
- modulePath = pathJoin(workingPath, "node_modules");
213
- }
214
- const foundPaths = globSync(`${modulePath}/*`);
215
- return foundPaths.reduce((list, foundPath) => {
216
- try {
217
- const stats = lstatSync(foundPath);
218
- if (stats.isDirectory()) {
219
- const deepList = linkedModules(foundPath);
220
- list.push(...deepList);
221
- } else if (stats.isSymbolicLink()) {
222
- const moduleNames = [prefix, pathBasename(foundPath)].filter((item) => !isEmpty(item));
223
- list.push({ name: `${moduleNames.join("/")}`, path: foundPath });
224
- }
225
- return list;
226
- } catch (fsError) {
227
- return list;
228
- }
229
- }, []);
230
- };
231
- const checkLinkedModules = () => {
232
- const linked = linkedModules();
233
- if (linked.length) {
234
- const msgModule = linked.length > 1 ? "Modules" : "Module";
235
- const linkedMsg = linked.reduce(
236
- (msg, linkedModule) => `${msg}
237
- * ${linkedModule.name}`,
238
- `Linked ${msgModule}:`
239
- );
240
- log(boxen(linkedMsg, { dimBorder: true, padding: 1 }), "warn");
241
- }
242
- };
243
- const updateTemplateName = (filePath, replace, replaceCaps) => {
244
- let data = readFileSync(filePath, "utf8");
245
- data = data.replace(/sample/g, replace);
246
- data = data.replace(/Sample/g, replaceCaps);
247
- writeFileSync(filePath, data, "utf8");
248
- };
249
- export {
250
- checkLinkedModules,
251
- copyConfiguredFiles,
252
- copyFileSync,
253
- copyFiles,
254
- copyFolderRecursiveSync,
255
- createSpinner,
256
- cwd,
257
- getFilenames,
258
- getFilesByExt,
259
- getPackageJson,
260
- linkedModules,
261
- removeConflictModules,
262
- removeFiles,
263
- removeModules,
264
- setPackageJson,
265
- updateTemplateName
266
- };
267
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL3V0aWxzL2FwcC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cblxuaW1wb3J0IGJveGVuIGZyb20gJ2JveGVuJztcbmltcG9ydCB7Y29weUZpbGUsIGV4aXN0c1N5bmMsIGxzdGF0U3luYywgbWtkaXJTeW5jLCByZWFkZGlyU3luYywgcmVhZEZpbGVTeW5jLCB3cml0ZUZpbGVTeW5jfSBmcm9tICdmcyc7XG5pbXBvcnQge3N5bmMgYXMgZ2xvYlN5bmN9IGZyb20gJ2dsb2InO1xuaW1wb3J0IGlzRW1wdHkgZnJvbSAnbG9kYXNoL2lzRW1wdHkuanMnO1xuaW1wb3J0IG9yYSBmcm9tICdvcmEnO1xuaW1wb3J0IHtiYXNlbmFtZSBhcyBwYXRoQmFzZW5hbWUsIGpvaW4gYXMgcGF0aEpvaW4sIHJlbGF0aXZlIGFzIHBhdGhSZWxhdGl2ZSwgcmVzb2x2ZSBhcyBwYXRoUmVzb2x2ZX0gZnJvbSAncGF0aCc7XG5pbXBvcnQge3JpbXJhZlN5bmN9IGZyb20gJ3JpbXJhZic7XG5cblxuaW1wb3J0IHtsb2d9IGZyb20gJy4vbG9nLmpzJztcblxuaW1wb3J0IHR5cGUge0xleENvbmZpZ1R5cGV9IGZyb20gJy4uL0xleENvbmZpZy5qcyc7XG5cblxuZXhwb3J0IGNvbnN0IGN3ZDogc3RyaW5nID0gcHJvY2Vzcy5jd2QoKTtcblxuZXhwb3J0IGludGVyZmFjZSBHZXRGaWxlbmFtZXNQcm9wcyB7XG4gIHJlYWRvbmx5IGNhbGxiYWNrPzogKHN0YXR1czogbnVtYmVyKSA9PiB2b2lkO1xuICByZWFkb25seSBjbGlOYW1lPzogc3RyaW5nO1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuICByZWFkb25seSBxdWlldD86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHR5cGU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHVzZVR5cGVzY3JpcHQ/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgRmlsZW5hbWVzUmVzdWx0IHtcbiAgbmFtZUNhcHM6IHN0cmluZztcbiAgdGVtcGxhdGVFeHQ6IHN0cmluZztcbiAgdGVtcGxhdGVQYXRoOiBzdHJpbmc7XG4gIHRlbXBsYXRlUmVhY3Q6IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IGdldEZpbGVuYW1lcyA9IChwcm9wczogR2V0RmlsZW5hbWVzUHJvcHMpOiBGaWxlbmFtZXNSZXN1bHQgfCB2b2lkID0+IHtcbiAgY29uc3Qge2NhbGxiYWNrLCBjbGlOYW1lLCBuYW1lLCBxdWlldCwgdHlwZSwgdXNlVHlwZXNjcmlwdH0gPSBwcm9wcztcblxuICBsZXQgbmFtZUNhcHM6IHN0cmluZztcbiAgY29uc3QgaXRlbVR5cGVzOiBzdHJpbmdbXSA9IFsnc3RvcmVzJywgJ3ZpZXdzJ107XG5cbiAgaWYoIW5hbWUpIHtcbiAgICBpZihpdGVtVHlwZXMuaW5jbHVkZXModHlwZSkpIHtcbiAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogJHt0eXBlfSBuYW1lIGlzIHJlcXVpcmVkLiBQbGVhc2UgdXNlICdsZXggLWgnIGZvciBvcHRpb25zLmAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgIHJldHVybiBjYWxsYmFjaz8uKDEpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBuYW1lQ2FwcyA9IGAke25hbWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCl9JHtuYW1lLnN1YnN0cigxKX1gO1xuICB9XG5cbiAgbG9nKGAke2NsaU5hbWV9IGFkZGluZyAke25hbWV9ICR7dHlwZX0uLi5gLCAnaW5mbycsIHF1aWV0KTtcblxuICBsZXQgdGVtcGxhdGVQYXRoOiBzdHJpbmc7XG4gIGxldCB0ZW1wbGF0ZUV4dDogc3RyaW5nO1xuICBsZXQgdGVtcGxhdGVSZWFjdDogc3RyaW5nO1xuXG4gIGlmKHVzZVR5cGVzY3JpcHQpIHtcbiAgICB0ZW1wbGF0ZVBhdGggPSAnLi4vLi4vdGVtcGxhdGVzL3R5cGVzY3JpcHQnO1xuICAgIHRlbXBsYXRlRXh0ID0gJy50cyc7XG4gICAgdGVtcGxhdGVSZWFjdCA9ICcudHN4JztcbiAgfSBlbHNlIHtcbiAgICB0ZW1wbGF0ZVBhdGggPSAnLi4vLi4vdGVtcGxhdGVzL2Zsb3cnO1xuICAgIHRlbXBsYXRlRXh0ID0gJy5qcyc7XG4gICAgdGVtcGxhdGVSZWFjdCA9ICcuanMnO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lQ2FwcyxcbiAgICB0ZW1wbGF0ZUV4dCxcbiAgICB0ZW1wbGF0ZVBhdGgsXG4gICAgdGVtcGxhdGVSZWFjdFxuICB9O1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBTcGlubmVyIHtcbiAgZmFpbDogKHRleHQ/OiBzdHJpbmcpID0+IHZvaWQ7XG4gIHN0YXJ0OiAodGV4dD86IHN0cmluZykgPT4gdm9pZDtcbiAgc3VjY2VlZDogKHRleHQ/OiBzdHJpbmcpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVTcGlubmVyID0gKHF1aWV0ID0gZmFsc2UpOiBTcGlubmVyID0+IHtcbiAgaWYocXVpZXQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZmFpbDogKCkgPT4ge30sXG4gICAgICBzdGFydDogKCkgPT4ge30sXG4gICAgICBzdWNjZWVkOiAoKSA9PiB7fVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gb3JhKHtjb2xvcjogJ3llbGxvdyd9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBjb3B5RmlsZXMgPSBhc3luYyAoZmlsZXM6IHN0cmluZ1tdLCB0eXBlTmFtZTogc3RyaW5nLCBzcGlubmVyLCBjb25maWc6IExleENvbmZpZ1R5cGUpID0+IHtcbiAgY29uc3Qge291dHB1dEZ1bGxQYXRoLCBzb3VyY2VGdWxsUGF0aH0gPSBjb25maWc7XG4gIGNvbnN0IGl0ZW1zID0gZmlsZXMubWFwKChmaWxlTmFtZTogc3RyaW5nKSA9PiAoe1xuICAgIGZyb206IGZpbGVOYW1lLFxuICAgIHRvOiBwYXRoUmVzb2x2ZShvdXRwdXRGdWxsUGF0aCwgcGF0aFJlbGF0aXZlKHNvdXJjZUZ1bGxQYXRoLCBmaWxlTmFtZSkpXG4gIH0pKTtcblxuICB0cnkge1xuICAgIHNwaW5uZXIuc3RhcnQoYENvcHlpbmcgJHt0eXBlTmFtZX0gZmlsZXMuLi5gKTtcbiAgICBhd2FpdCBQcm9taXNlLmFsbChpdGVtcy5tYXAoKHtmcm9tLCB0b30pID0+IG5ldyBQcm9taXNlKFxuICAgICAgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBta2RpclN5bmMocGF0aFJlc29sdmUodG8sICcuLicpLCB7cmVjdXJzaXZlOiB0cnVlfSk7XG4gICAgICAgIHJldHVybiBjb3B5RmlsZShmcm9tLCB0bywgKGNvcHlFcnJvcikgPT4ge1xuICAgICAgICAgIGlmKGNvcHlFcnJvcikge1xuICAgICAgICAgICAgcmVqZWN0KCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICApKSk7XG4gICAgc3Bpbm5lci5zdWNjZWVkKGBTdWNjZXNzZnVsbHkgY29waWVkICR7ZmlsZXMubGVuZ3RofSAke3R5cGVOYW1lfSBmaWxlcyFgKTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIHNwaW5uZXIuZmFpbChgQ29weWluZyBvZiAke3R5cGVOYW1lfSBmaWxlcyBmYWlsZWQuYCk7XG4gICAgbG9nKGBFcnJvcjogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicpO1xuICAgIGxvZyhlcnJvciwgJ2Vycm9yJyk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBjb3B5Q29uZmlndXJlZEZpbGVzID0gYXN5bmMgKHNwaW5uZXIsIGNvbmZpZzogTGV4Q29uZmlnVHlwZSwgcXVpZXQ6IGJvb2xlYW4pID0+IHtcbiAgY29uc3Qge2NvcHlGaWxlczogY29weUZpbGVzQ29uZmlnLCBvdXRwdXRGdWxsUGF0aCwgc291cmNlRnVsbFBhdGgsIHNvdXJjZVBhdGh9ID0gY29uZmlnO1xuICBpZighY29weUZpbGVzQ29uZmlnIHx8IGNvcHlGaWxlc0NvbmZpZy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB0cnkge1xuICAgIHNwaW5uZXIuc3RhcnQoJ0NvcHlpbmcgY29uZmlndXJlZCBmaWxlcy4uLicpO1xuICAgIGxldCB0b3RhbENvcGllZCA9IDA7XG5cbiAgICBjb25zdCBiYXNlRGlyID0gc291cmNlRnVsbFBhdGggfHwgKHNvdXJjZVBhdGggPyBwYXRoUmVzb2x2ZShjd2QsIHNvdXJjZVBhdGgpIDogY3dkKTtcblxuICAgIGZvcihjb25zdCBwYXR0ZXJuIG9mIGNvcHlGaWxlc0NvbmZpZykge1xuICAgICAgY29uc3QgcmVzb2x2ZWRQYXR0ZXJuID0gcGF0aFJlc29sdmUoYmFzZURpciwgcGF0dGVybik7XG4gICAgICBjb25zdCBtYXRjaGluZ0ZpbGVzID0gZ2xvYlN5bmMocmVzb2x2ZWRQYXR0ZXJuLCB7XG4gICAgICAgIG5vZGlyOiB0cnVlLFxuICAgICAgICBhYnNvbHV0ZTogdHJ1ZVxuICAgICAgfSk7XG4gICAgICBpZihtYXRjaGluZ0ZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBpZighcXVpZXQpIHtcbiAgICAgICAgICBsb2coYFdhcm5pbmc6IE5vIGZpbGVzIGZvdW5kIG1hdGNoaW5nIHBhdHRlcm46ICR7cGF0dGVybn1gLCAnd2FybicsIHF1aWV0KTtcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgZm9yKGNvbnN0IHNvdXJjZUZpbGUgb2YgbWF0Y2hpbmdGaWxlcykge1xuICAgICAgICAvLyBDYWxjdWxhdGUgcmVsYXRpdmUgcGF0aCBmcm9tIHNvdXJjZSBkaXJlY3RvcnlcbiAgICAgICAgY29uc3QgcmVsYXRpdmVQYXRoID0gcGF0aFJlbGF0aXZlKGJhc2VEaXIsIHNvdXJjZUZpbGUpO1xuICAgICAgICAvLyBEZXRlcm1pbmUgZGVzdGluYXRpb24gcGF0aCBpbiBvdXRwdXQgZGlyZWN0b3J5XG4gICAgICAgIGNvbnN0IGRlc3RQYXRoID0gcGF0aFJlc29sdmUob3V0cHV0RnVsbFBhdGgsIHJlbGF0aXZlUGF0aCk7XG4gICAgICAgIC8vIENyZWF0ZSBkZXN0aW5hdGlvbiBkaXJlY3RvcnkgaWYgaXQgZG9lc24ndCBleGlzdFxuICAgICAgICBjb25zdCBkZXN0RGlyID0gcGF0aFJlc29sdmUoZGVzdFBhdGgsICcuLicpO1xuICAgICAgICBta2RpclN5bmMoZGVzdERpciwge3JlY3Vyc2l2ZTogdHJ1ZX0pO1xuXG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICBjb3B5RmlsZShzb3VyY2VGaWxlLCBkZXN0UGF0aCwgKGNvcHlFcnJvcikgPT4ge1xuICAgICAgICAgICAgaWYoY29weUVycm9yKSB7XG4gICAgICAgICAgICAgIHJlamVjdChjb3B5RXJyb3IpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRvdGFsQ29waWVkKys7XG4gICAgICB9XG4gICAgfVxuICAgIGlmKHRvdGFsQ29waWVkID4gMCkge1xuICAgICAgc3Bpbm5lci5zdWNjZWVkKGBTdWNjZXNzZnVsbHkgY29waWVkICR7dG90YWxDb3BpZWR9IGNvbmZpZ3VyZWQgZmlsZXMhYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNwaW5uZXIuc3VjY2VlZCgnTm8gY29uZmlndXJlZCBmaWxlcyB0byBjb3B5Jyk7XG4gICAgfVxuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgc3Bpbm5lci5mYWlsKCdGYWlsZWQgdG8gY29weSBjb25maWd1cmVkIGZpbGVzJyk7XG4gICAgbG9nKGBFcnJvciBjb3B5aW5nIGNvbmZpZ3VyZWQgZmlsZXM6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBjb3B5RmlsZVN5bmMgPSAoc291cmNlOiBzdHJpbmcsIHRhcmdldDogc3RyaW5nKSA9PiB7XG4gIGxldCB0YXJnZXRGaWxlOiBzdHJpbmcgPSB0YXJnZXQ7XG5cbiAgaWYoZXhpc3RzU3luYyh0YXJnZXQpKSB7XG4gICAgaWYobHN0YXRTeW5jKHRhcmdldCkuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgdGFyZ2V0RmlsZSA9IHBhdGhKb2luKHRhcmdldCwgcGF0aEJhc2VuYW1lKHNvdXJjZSkpO1xuICAgIH1cbiAgfVxuXG4gIHdyaXRlRmlsZVN5bmModGFyZ2V0RmlsZSwgcmVhZEZpbGVTeW5jKHNvdXJjZSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGNvcHlGb2xkZXJSZWN1cnNpdmVTeW5jID0gKHNvdXJjZTogc3RyaW5nLCB0YXJnZXQ6IHN0cmluZyk6IHZvaWQgPT4ge1xuICBsZXQgZmlsZXM6IHN0cmluZ1tdID0gW107XG5cbiAgY29uc3QgdGFyZ2V0Rm9sZGVyOiBzdHJpbmcgPSBwYXRoSm9pbih0YXJnZXQsIHBhdGhCYXNlbmFtZShzb3VyY2UpKTtcblxuICBpZighZXhpc3RzU3luYyh0YXJnZXRGb2xkZXIpKSB7XG4gICAgbWtkaXJTeW5jKHRhcmdldEZvbGRlcik7XG4gIH1cblxuICBpZihsc3RhdFN5bmMoc291cmNlKS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgZmlsZXMgPSByZWFkZGlyU3luYyhzb3VyY2UpO1xuICAgIGZpbGVzLmZvckVhY2goKGZpbGU6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgY3VyU291cmNlOiBzdHJpbmcgPSBwYXRoSm9pbihzb3VyY2UsIGZpbGUpO1xuXG4gICAgICBpZihsc3RhdFN5bmMoY3VyU291cmNlKS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgIGNvcHlGb2xkZXJSZWN1cnNpdmVTeW5jKGN1clNvdXJjZSwgdGFyZ2V0Rm9sZGVyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvcHlGaWxlU3luYyhjdXJTb3VyY2UsIHRhcmdldEZvbGRlcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQYWNrYWdlSnNvbiA9IChwYWNrYWdlUGF0aD86IHN0cmluZykgPT4ge1xuICBjb25zdCBmb3JtYXRQYXRoOiBzdHJpbmcgPSBwYWNrYWdlUGF0aCB8fCBgJHtwcm9jZXNzLmN3ZCgpfS9wYWNrYWdlLmpzb25gO1xuXG4gIGNvbnN0IHBhY2thZ2VEYXRhOiBzdHJpbmcgPSByZWFkRmlsZVN5bmMoZm9ybWF0UGF0aCkudG9TdHJpbmcoKTtcbiAgcmV0dXJuIEpTT04ucGFyc2UocGFja2FnZURhdGEpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEZpbGVzQnlFeHQgPSAoZXh0OiBzdHJpbmcsIGNvbmZpZzogTGV4Q29uZmlnVHlwZSk6IHN0cmluZ1tdID0+IHtcbiAgY29uc3Qge3NvdXJjZUZ1bGxQYXRofSA9IGNvbmZpZztcbiAgcmV0dXJuIGdsb2JTeW5jKGAke3NvdXJjZUZ1bGxQYXRofS8qKi8qKiR7ZXh0fWApO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlbW92ZUNvbmZsaWN0TW9kdWxlcyA9IChtb2R1bGVMaXN0OiBvYmplY3QpID0+IHtcbiAgY29uc3QgdXBkYXRlZExpc3Q6IG9iamVjdCA9IHsuLi5tb2R1bGVMaXN0fTtcblxuICBPYmplY3Qua2V5cyh1cGRhdGVkTGlzdCkuZm9yRWFjaCgobW9kdWxlTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgcmVnZXg6IFJlZ0V4cCA9IG5ldyBSZWdFeHAoJ14oPyFAdHlwZXMvKS4qPyhqZXN0fHdlYnBhY2spLiokJywgJ2dpJyk7XG4gICAgaWYocmVnZXgudGVzdChtb2R1bGVOYW1lKSkge1xuICAgICAgZGVsZXRlIHVwZGF0ZWRMaXN0W21vZHVsZU5hbWVdO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHVwZGF0ZWRMaXN0O1xufTtcblxuZXhwb3J0IGNvbnN0IHJlbW92ZUZpbGVzID0gKGZpbGVOYW1lOiBzdHJpbmcsIGlzUmVsYXRpdmU6IGJvb2xlYW4gPSBmYWxzZSkgPT4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICBjb25zdCBmaWxlUGF0aDogc3RyaW5nID0gaXNSZWxhdGl2ZSA/IHBhdGhSZXNvbHZlKGN3ZCwgZmlsZU5hbWUpIDogZmlsZU5hbWU7XG4gIHRyeSB7XG4gICAgcmltcmFmU3luYyhmaWxlUGF0aCk7XG4gICAgcmV0dXJuIHJlc29sdmUobnVsbCk7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICByZXR1cm4gcmVqZWN0KGVycm9yKTtcbiAgfVxufSk7XG5cbmV4cG9ydCBjb25zdCByZW1vdmVNb2R1bGVzID0gKCkgPT4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICB0cnkge1xuICAgIC8vIFJlbW92ZSBub2RlX21vZHVsZXNcbiAgICBhd2FpdCByZW1vdmVGaWxlcygnLi9ub2RlX21vZHVsZXMnLCB0cnVlKTtcblxuICAgIC8vIFJlbW92ZSB5YXJuIGxvY2tcbiAgICBhd2FpdCByZW1vdmVGaWxlcygnLi95YXJuLmxvY2snLCB0cnVlKTtcblxuICAgIC8vIFJlbW92ZSBucG0gbG9ja1xuICAgIGF3YWl0IHJlbW92ZUZpbGVzKCcuL3BhY2thZ2UtbG9jay5qc29uJywgdHJ1ZSk7XG5cbiAgICByZXNvbHZlKG51bGwpO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgcmVqZWN0KGVycm9yKTtcbiAgfVxufSk7XG5cbmV4cG9ydCBjb25zdCBzZXRQYWNrYWdlSnNvbiA9IChqc29uLCBwYWNrYWdlUGF0aD86IHN0cmluZykgPT4ge1xuICBpZighanNvbikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGZvcm1hdFBhdGg6IHN0cmluZyA9IHBhY2thZ2VQYXRoIHx8IGAke3Byb2Nlc3MuY3dkKCl9L3BhY2thZ2UuanNvbmA7XG5cbiAgd3JpdGVGaWxlU3luYyhmb3JtYXRQYXRoLCBKU09OLnN0cmluZ2lmeShqc29uLCBudWxsLCAyKSk7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIExpbmtlZE1vZHVsZVR5cGUge1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBhdGg6IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IGxpbmtlZE1vZHVsZXMgPSAoc3RhcnRQYXRoPzogc3RyaW5nKTogTGlua2VkTW9kdWxlVHlwZVtdID0+IHtcbiAgY29uc3Qgd29ya2luZ1BhdGg6IHN0cmluZyA9IHN0YXJ0UGF0aCB8fCBwcm9jZXNzLmN3ZCgpO1xuICBsZXQgbW9kdWxlUGF0aDogc3RyaW5nO1xuICBsZXQgcHJlZml4OiBzdHJpbmc7XG5cbiAgaWYod29ya2luZ1BhdGguaW5jbHVkZXMoJ0AnKSkge1xuICAgIHByZWZpeCA9IGBAJHt3b3JraW5nUGF0aC5zcGxpdCgnQCcpLnBvcCgpfWA7XG4gICAgbW9kdWxlUGF0aCA9IHdvcmtpbmdQYXRoO1xuICB9IGVsc2Uge1xuICAgIG1vZHVsZVBhdGggPSBwYXRoSm9pbih3b3JraW5nUGF0aCwgJ25vZGVfbW9kdWxlcycpO1xuICB9XG5cbiAgY29uc3QgZm91bmRQYXRoczogc3RyaW5nW10gPSBnbG9iU3luYyhgJHttb2R1bGVQYXRofS8qYCk7XG4gIHJldHVybiBmb3VuZFBhdGhzLnJlZHVjZSgobGlzdDogTGlua2VkTW9kdWxlVHlwZVtdLCBmb3VuZFBhdGg6IHN0cmluZykgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdGF0cyA9IGxzdGF0U3luYyhmb3VuZFBhdGgpO1xuXG4gICAgICBpZihzdGF0cy5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgIGNvbnN0IGRlZXBMaXN0OiBMaW5rZWRNb2R1bGVUeXBlW10gPSBsaW5rZWRNb2R1bGVzKGZvdW5kUGF0aCk7XG4gICAgICAgIGxpc3QucHVzaCguLi5kZWVwTGlzdCk7XG4gICAgICB9IGVsc2UgaWYoc3RhdHMuaXNTeW1ib2xpY0xpbmsoKSkge1xuICAgICAgICBjb25zdCBtb2R1bGVOYW1lczogc3RyaW5nW10gPSAoW3ByZWZpeCwgcGF0aEJhc2VuYW1lKGZvdW5kUGF0aCldKS5maWx0ZXIoKGl0ZW06IHN0cmluZykgPT4gIWlzRW1wdHkoaXRlbSkpO1xuICAgICAgICBsaXN0LnB1c2goe25hbWU6IGAke21vZHVsZU5hbWVzLmpvaW4oJy8nKX1gLCBwYXRoOiBmb3VuZFBhdGh9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGxpc3Q7XG4gICAgfSBjYXRjaChmc0Vycm9yKSB7XG4gICAgICAvLyBTa2lwIGZpbGVzIHRoYXQgZG9uJ3QgZXhpc3Qgb3IgY2FuJ3QgYmUgYWNjZXNzZWRcbiAgICAgIHJldHVybiBsaXN0O1xuICAgIH1cbiAgfSwgW10pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNoZWNrTGlua2VkTW9kdWxlcyA9ICgpID0+IHtcbiAgY29uc3QgbGlua2VkID0gbGlua2VkTW9kdWxlcygpO1xuXG4gIGlmKGxpbmtlZC5sZW5ndGgpIHtcbiAgICBjb25zdCBtc2dNb2R1bGU6IHN0cmluZyA9IGxpbmtlZC5sZW5ndGggPiAxID8gJ01vZHVsZXMnIDogJ01vZHVsZSc7XG4gICAgY29uc3QgbGlua2VkTXNnOiBzdHJpbmcgPSBsaW5rZWQucmVkdWNlKFxuICAgICAgKG1zZzogc3RyaW5nLCBsaW5rZWRNb2R1bGU6IExpbmtlZE1vZHVsZVR5cGUpID0+XG4gICAgICAgIGAke21zZ31cXG4gKiAke2xpbmtlZE1vZHVsZS5uYW1lfWAsXG4gICAgICBgTGlua2VkICR7bXNnTW9kdWxlfTpgXG4gICAgKTtcbiAgICBsb2coYm94ZW4obGlua2VkTXNnLCB7ZGltQm9yZGVyOiB0cnVlLCBwYWRkaW5nOiAxfSksICd3YXJuJyk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVUZW1wbGF0ZU5hbWUgPSAoZmlsZVBhdGg6IHN0cmluZywgcmVwbGFjZTogc3RyaW5nLCByZXBsYWNlQ2Fwczogc3RyaW5nKSA9PiB7XG4gIGxldCBkYXRhOiBzdHJpbmcgPSByZWFkRmlsZVN5bmMoZmlsZVBhdGgsICd1dGY4Jyk7XG4gIGRhdGEgPSBkYXRhLnJlcGxhY2UoL3NhbXBsZS9nLCByZXBsYWNlKTtcbiAgZGF0YSA9IGRhdGEucmVwbGFjZSgvU2FtcGxlL2csIHJlcGxhY2VDYXBzKTtcbiAgd3JpdGVGaWxlU3luYyhmaWxlUGF0aCwgZGF0YSwgJ3V0ZjgnKTtcbn07Il0sCiAgIm1hcHBpbmdzIjogIkFBS0EsT0FBTyxXQUFXO0FBQ2xCLFNBQVEsVUFBVSxZQUFZLFdBQVcsV0FBVyxhQUFhLGNBQWMscUJBQW9CO0FBQ25HLFNBQVEsUUFBUSxnQkFBZTtBQUMvQixPQUFPLGFBQWE7QUFDcEIsT0FBTyxTQUFTO0FBQ2hCLFNBQVEsWUFBWSxjQUFjLFFBQVEsVUFBVSxZQUFZLGNBQWMsV0FBVyxtQkFBa0I7QUFDM0csU0FBUSxrQkFBaUI7QUFHekIsU0FBUSxXQUFVO0FBS1gsTUFBTSxNQUFjLFFBQVEsSUFBSTtBQWtCaEMsTUFBTSxlQUFlLENBQUMsVUFBcUQ7QUFDaEYsUUFBTSxFQUFDLFVBQVUsU0FBUyxNQUFNLE9BQU8sTUFBTSxjQUFhLElBQUk7QUFFOUQsTUFBSTtBQUNKLFFBQU0sWUFBc0IsQ0FBQyxVQUFVLE9BQU87QUFFOUMsTUFBRyxDQUFDLE1BQU07QUFDUixRQUFHLFVBQVUsU0FBUyxJQUFJLEdBQUc7QUFDM0IsVUFBSTtBQUFBLEVBQUssT0FBTyxXQUFXLElBQUksdURBQXVELFNBQVMsS0FBSztBQUNwRyxhQUFPLFdBQVcsQ0FBQztBQUFBLElBQ3JCO0FBQUEsRUFDRixPQUFPO0FBQ0wsZUFBVyxHQUFHLEtBQUssT0FBTyxDQUFDLEVBQUUsWUFBWSxDQUFDLEdBQUcsS0FBSyxPQUFPLENBQUMsQ0FBQztBQUFBLEVBQzdEO0FBRUEsTUFBSSxHQUFHLE9BQU8sV0FBVyxJQUFJLElBQUksSUFBSSxPQUFPLFFBQVEsS0FBSztBQUV6RCxNQUFJO0FBQ0osTUFBSTtBQUNKLE1BQUk7QUFFSixNQUFHLGVBQWU7QUFDaEIsbUJB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
@@ -1,185 +0,0 @@
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
- function getDirName() {
7
- try {
8
- return eval('new URL(".", import.meta.url).pathname');
9
- } catch {
10
- return process.cwd();
11
- }
12
- }
13
- function 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
- }
22
- }
23
- function 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 {
33
- try {
34
- startDir = eval('new URL(".", import.meta.url).pathname');
35
- } catch (err1) {
36
- try {
37
- startDir = eval('__filename ? require("path").dirname(__filename) : null');
38
- if (!startDir) {
39
- throw new Error("__filename not available");
40
- }
41
- } catch (err2) {
42
- 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 (err3) {
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;
62
- }
63
- } catch (error) {
64
- }
65
- }
66
- const parent = dirname(dir);
67
- if (parent === dir) {
68
- break;
69
- }
70
- dir = parent;
71
- }
72
- return pathResolve(process.cwd(), "package.json");
73
- }
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}`;
102
- };
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;
116
- };
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 "";
161
- };
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/**", "**/build/**", "**/.storybook/**"]
168
- });
169
- if (files.length > 0) {
170
- return pathResolve(process.cwd(), files[0]);
171
- }
172
- }
173
- return "";
174
- };
175
- export {
176
- findTailwindCssPath,
177
- getDirName,
178
- getFilePath,
179
- getLexPackageJsonPath,
180
- getNodePath,
181
- relativeFilePath,
182
- relativeNodePath,
183
- resolveBinaryPath
184
- };
185
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL3V0aWxzL2ZpbGUudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE4LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQgZmluZEZpbGVVcCBmcm9tICdmaW5kLWZpbGUtdXAnO1xuaW1wb3J0IHtleGlzdHNTeW5jLCByZWFkRmlsZVN5bmN9IGZyb20gJ2ZzJztcbmltcG9ydCB7c3luYyBhcyBnbG9iU3luY30gZnJvbSAnZ2xvYic7XG5pbXBvcnQge3Jlc29sdmUgYXMgcGF0aFJlc29sdmUsIGRpcm5hbWV9IGZyb20gJ3BhdGgnO1xuXG5pbXBvcnQge0xleENvbmZpZ30gZnJvbSAnLi4vTGV4Q29uZmlnLmpzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldERpck5hbWUoKTogc3RyaW5nIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZXZhbCgnbmV3IFVSTChcIi5cIiwgaW1wb3J0Lm1ldGEudXJsKS5wYXRobmFtZScpO1xuICB9IGNhdGNoe1xuICAgIHJldHVybiBwcm9jZXNzLmN3ZCgpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWxlUGF0aChyZWxhdGl2ZVBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGV2YWwoJ3JlcXVpcmUoXCJ1cmxcIikuZmlsZVVSTFRvUGF0aChuZXcgVVJMKHJlbGF0aXZlUGF0aCwgaW1wb3J0Lm1ldGEudXJsKSknKTtcbiAgfSBjYXRjaHtcbiAgICBpZihyZWxhdGl2ZVBhdGggPT09ICcuLi8uLi8uLi9wYWNrYWdlLmpzb24nKSB7XG4gICAgICByZXR1cm4gcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJ3BhY2thZ2UuanNvbicpO1xuICAgIH1cbiAgICByZXR1cm4gcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgcmVsYXRpdmVQYXRoKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGV4UGFja2FnZUpzb25QYXRoKCk6IHN0cmluZyB7XG4gIGNvbnN0IExFWF9QQUNLQUdFX05BTUUgPSAnQG5sYWJzL2xleCc7XG5cbiAgY29uc3QgbGV4SW5Ob2RlTW9kdWxlcyA9IHBhdGhSZXNvbHZlKHByb2Nlc3MuY3dkKCksICdub2RlX21vZHVsZXMvQG5sYWJzL2xleC9wYWNrYWdlLmpzb24nKTtcblxuICBpZihleGlzdHNTeW5jKGxleEluTm9kZU1vZHVsZXMpKSB7XG4gICAgcmV0dXJuIGxleEluTm9kZU1vZHVsZXM7XG4gIH1cblxuICBsZXQgc3RhcnREaXI6IHN0cmluZztcblxuICBpZihwcm9jZXNzLmVudi5MRVhfUk9PVCkge1xuICAgIHN0YXJ0RGlyID0gcHJvY2Vzcy5lbnYuTEVYX1JPT1Q7XG4gIH0gZWxzZSB7XG4gICAgdHJ5IHtcbiAgICAgIHN0YXJ0RGlyID0gZXZhbCgnbmV3IFVSTChcIi5cIiwgaW1wb3J0Lm1ldGEudXJsKS5wYXRobmFtZScpO1xuICAgIH0gY2F0Y2goZXJyMSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgc3RhcnREaXIgPSBldmFsKCdfX2ZpbGVuYW1lID8gcmVxdWlyZShcInBhdGhcIikuZGlybmFtZShfX2ZpbGVuYW1lKSA6IG51bGwnKTtcbiAgICAgICAgaWYoIXN0YXJ0RGlyKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdfX2ZpbGVuYW1lIG5vdCBhdmFpbGFibGUnKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaChlcnIyKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYocHJvY2Vzcy5hcmd2WzFdICYmICFwcm9jZXNzLmFyZ3ZbMV0uaW5jbHVkZXMoJ25vZGUnKSkge1xuICAgICAgICAgICAgc3RhcnREaXIgPSBkaXJuYW1lKHByb2Nlc3MuYXJndlsxXSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5hcmd2WzFdIG5vdCBzdWl0YWJsZScpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaChlcnIzKSB7XG4gICAgICAgICAgc3RhcnREaXIgPSBwcm9jZXNzLmN3ZCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbGV0IGRpciA9IHN0YXJ0RGlyO1xuICBmb3IobGV0IGkgPSAwOyBpIDwgODsgaSsrKSB7XG4gICAgY29uc3QgcGtnUGF0aCA9IHBhdGhSZXNvbHZlKGRpciwgJ3BhY2thZ2UuanNvbicpO1xuICAgIGlmKGV4aXN0c1N5bmMocGtnUGF0aCkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHBrZyA9IEpTT04ucGFyc2UocmVhZEZpbGVTeW5jKHBrZ1BhdGgsICd1dGY4JykpO1xuICAgICAgICBpZihwa2cubmFtZSA9PT0gTEVYX1BBQ0tBR0VfTkFNRSkge1xuICAgICAgICAgIHJldHVybiBwa2dQYXRoO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHBhcmVudCA9IGRpcm5hbWUoZGlyKTtcbiAgICBpZihwYXJlbnQgPT09IGRpcikge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGRpciA9IHBhcmVudDtcbiAgfVxuXG4gIHJldHVybiBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAncGFja2FnZS5qc29uJyk7XG59XG5cbmV4cG9ydCBjb25zdCByZWxhdGl2ZUZpbGVQYXRoID0gKGZpbGVuYW1lOiBzdHJpbmcsIGRpclBhdGg6IHN0cmluZyA9ICcuLycsIGJhY2tVcDogbnVtYmVyID0gMCk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IG5lc3REZXB0aDogbnVtYmVyID0gMTA7XG5cbiAgaWYoYmFja1VwKSB7XG4gICAgY29uc3QgZmlsZVBhdGg6IHN0cmluZyA9IGZpbmRGaWxlVXAuc3luYyhmaWxlbmFtZSwgZGlyUGF0aCwgbmVzdERlcHRoKTtcbiAgICBjb25zdCBwcmV2aW91c1BhdGg6IHN0cmluZyA9IEFycmF5KGJhY2tVcCkuZmlsbChudWxsKS5tYXAoKCkgPT4gJy4uLycpLmpvaW4oJycpO1xuICAgIHJldHVybiBwYXRoUmVzb2x2ZShmaWxlUGF0aCwgcHJldmlvdXNQYXRoKTtcbiAgfVxuXG4gIHJldHVybiBmaW5kRmlsZVVwLnN5bmMoZmlsZW5hbWUsIGRpclBhdGgsIG5lc3REZXB0aCk7XG59O1xuXG5leHBvcnQgY29uc3QgcmVsYXRpdmVOb2RlUGF0aCA9IChmaWxlbmFtZTogc3RyaW5nLCBkaXJQYXRoOiBzdHJpbmcgPSAnLi8nLCBiYWNrVXA6IG51bWJlciA9IDApOiBzdHJpbmcgPT4ge1xuICBjb25zdCBuZXN0RGVwdGg6IG51bWJlciA9IDEwO1xuICBjb25zdCBtb2R1bGVQYXRoID0gYG5vZGVfbW9kdWxlcy8ke2ZpbGVuYW1lfWA7XG5cbiAgaWYoZGlyUGF0aCAhPT0gJy4vJykge1xuICAgIGNvbnN0IGxleE1vZHVsZVBhdGggPSBwYXRoUmVzb2x2ZShkaXJQYXRoLCBtb2R1bGVQYXRoKTtcbiAgICBpZihleGlzdHNTeW5jKGxleE1vZHVsZVBhdGgpKSB7XG4gICAgICByZXR1cm4gbGV4TW9kdWxlUGF0aDtcbiAgICB9XG4gIH1cblxuICBjb25zdCBwcm9qZWN0UGF0aCA9IHBhdGhSZXNvbHZlKHByb2Nlc3MuY3dkKCksIG1vZHVsZVBhdGgpO1xuICBpZihleGlzdHNTeW5jKHByb2plY3RQYXRoKSkge1xuICAgIHJldHVybiBwcm9qZWN0UGF0aDtcbiAgfVxuXG4gIGlmKGJhY2tVcCkge1xuICAgIGNvbnN0IGZpbGVQYXRoOiBzdHJpbmcgPSBmaW5kRmlsZVVwLnN5bmMobW9kdWxlUGF0aCwgZGlyUGF0aCwgbmVzdERlcHRoKTtcbiAgICBjb25zdCBwcmV2aW91c1BhdGg6IHN0cmluZyA9IEFycmF5KG5lc3REZXB0aCkuZmlsbChudWxsKS5tYXAoKCkgPT4gJy4uLycpLmpvaW4oJycpO1xuICAgIHJldHVybiBwYXRoUmVzb2x2ZShmaWxlUGF0aCwgcHJldmlvdXNQYXRoKTtcbiAgfVxuXG4gIHJldHVybiBmaW5kRmlsZVVwLnN5bmMobW9kdWxlUGF0aCwgZGlyUGF0aCwgbmVzdERlcHRoKSB8fCBgL25vZGVfbW9kdWxlcy8ke2ZpbGVuYW1lfWA7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Tm9kZVBhdGggPSAobW9kdWxlTmFtZTogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgY29uc3QgZGlyTmFtZSA9IGdldERpck5hbWUoKTtcbiAgY29uc3QgbW9kdWxlUGF0aDogc3RyaW5nID0gYG5vZGVfbW9kdWxlcy8ke21vZHVsZU5hbWV9YDtcblxuICBjb25zdCBwcm9qZWN0UGF0aCA9IHBhdGhSZXNvbHZlKHByb2Nlc3MuY3dkKCksIG1vZHVsZVBhdGgpO1xuICBpZihleGlzdHNTeW5jKHByb2plY3RQYXRoKSkge1xuICAgIHJldHVybiBwcm9qZWN0UGF0aDtcbiAgfVxuXG4gIGNvbnN0IHJlcG9QYXRoOiBzdHJpbmcgPSBmaW5kRmlsZVVwLnN5bmMobW9kdWxlUGF0aCwgZGlyTmFtZSk7XG4gIGlmKHJlcG9QYXRoICYmIGV4aXN0c1N5bmMocmVwb1BhdGgpKSB7XG4gICAgcmV0dXJuIHJlcG9QYXRoO1xuICB9XG5cbiAgY29uc3QgbG9jYWxQYXRoOiBzdHJpbmcgPSBmaW5kRmlsZVVwLnN5bmMobW9kdWxlUGF0aCwgJy4vJywgMTApIHx8IGAuLyR7bW9kdWxlUGF0aH1gO1xuICByZXR1cm4gbG9jYWxQYXRoO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlc29sdmVCaW5hcnlQYXRoID0gKGJpbmFyeU5hbWU6IHN0cmluZywgcGFja2FnZU5hbWU/OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBsZXhEaXIgPSBMZXhDb25maWcuZ2V0TGV4RGlyKCk7XG5cbiAgY29uc3QgbGV4QmluUGF0aCA9IHBhdGhSZXNvbHZlKGxleERpciwgYG5vZGVfbW9kdWxlcy8uYmluLyR7YmluYXJ5TmFtZX1gKTtcbiAgaWYoZXhpc3RzU3luYyhsZXhCaW5QYXRoKSkge1xuICAgIHJldHVybiBsZXhCaW5QYXRoO1xuICB9XG5cbiAgaWYocGFja2FnZU5hbWUpIHtcbiAgICBjb25zdCBsZXhQYWNrYWdlQmluUGF0aCA9IHBhdGhSZXNvbHZlKGxleERpciwgYG5vZGVfbW9kdWxlcy8ke3BhY2thZ2VOYW1lfS9iaW4vJHtiaW5hcnlOYW1lfWApO1xuICAgIGlmKGV4aXN0c1N5bmMobGV4UGFja2FnZUJpblBhdGgpKSB7XG4gICAgICByZXR1cm4gbGV4UGFja2FnZUJpblBhdGg7XG4gICAgfVxuXG4gICAgY29uc3QgbGV4UGFja2FnZUJpbkpzUGF0aCA9IHBhdGhSZXNvbHZlKGxleERpciwgYG5vZGVfbW9kdWxlcy8ke3BhY2thZ2VOYW1lfS9iaW4vJHtiaW5hcnlOYW1lfS5qc2ApO1xuICAgIGlmKGV4aXN0c1N5bmMobGV4UGFja2FnZUJpbkpzUGF0aCkpIHtcbiAgICAgIHJldHVybiBsZXhQYWNrYWdlQmluSnNQYXRoO1xuICAgIH1cblxuICAgIGNvbnN0IGxleFBhY2thZ2VCaW5DanNQYXRoID0gcGF0aFJlc29sdmUobGV4RGlyLCBgbm9kZV9tb2R1bGVzLyR7cGFja2FnZU5hbWV9L2Jpbi8ke2JpbmFyeU5hbWV9LmNqc2ApO1xuICAgIGlmKGV4aXN0c1N5bmMobGV4UGFja2FnZUJpbkNqc1BhdGgpKSB7XG4gICAgICByZXR1cm4gbGV4UGFja2FnZUJpbkNqc1BhdGg7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgY2hlY2tCaW5VcCA9IChzdGFydERpcjogc3RyaW5nKSA9PiB7XG4gICAgbGV0IGNoZWNrRGlyID0gc3RhcnREaXI7XG4gICAgZm9yKGxldCBpID0gMDsgaSA8IDU7IGkrKykge1xuICAgICAgY29uc3QgbW9ub3JlcG9CaW5QYXRoID0gcGF0aFJlc29sdmUoY2hlY2tEaXIsIGBub2RlX21vZHVsZXMvLmJpbi8ke2JpbmFyeU5hbWV9YCk7XG4gICAgICBpZihleGlzdHNTeW5jKG1vbm9yZXBvQmluUGF0aCkpIHtcbiAgICAgICAgcmV0dXJuIG1vbm9yZXBvQmluUGF0aDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBhcmVudERpciA9IHBhdGhSZXNvbHZlKGNoZWNrRGlyLCAnLi4nKTtcbiAgICAgIGlmKHBhcmVudERpciA9PT0gY2hlY2tEaXIpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjaGVja0RpciA9IHBhcmVudERpcjtcbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9O1xuXG4gIGNvbnN0IGZyb21Dd2QgPSBjaGVja0JpblVwKHByb2Nlc3MuY3dkKCkpO1xuICBpZihmcm9tQ3dkKSB7XG4gICAgcmV0dXJuIGZyb21Dd2Q7XG4gIH1cblxuICBjb25zdCBmcm9tTGV4ID0gY2hlY2tCaW5VcChsZXhEaXIpO1xuICBpZihmcm9tTGV4KSB7XG4gICAgcmV0dXJuIGZyb21MZXg7XG4gIH1cblxuICByZXR1cm4gJyc7XG59O1xuXG5leHBvcnQgY29uc3QgZmluZFRhaWx3aW5kQ3NzUGF0aCA9ICgpOiBzdHJpbmcgPT4ge1xuICBjb25zdCB0YWlsd2luZFBhdHRlcm5zID0gWycqKi90YWlsd2luZC5jc3MnXTtcblxuICBmb3IoY29uc3QgcGF0dGVybiBvZiB0YWlsd2luZFBhdHRlcm5zKSB7XG4gICAgY29uc3QgZmlsZXMgPSBnbG9iU3luYyhwYXR0ZXJuLCB7XG4gICAgICBjd2Q6IHByb2Nlc3MuY3dkKCksXG4gICAgICBpZ25vcmU6IFsnKiovbm9kZV9tb2R1bGVzLyoqJywgJyoqL2Rpc3QvKionLCAnKiovYnVpbGQvKionLCAnKiovLnN0b3J5Ym9vay8qKiddXG4gICAgfSk7XG5cbiAgICBpZihmaWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgZmlsZXNbMF0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAnJztcbn07Il0sCiAgIm1hcHBpbmdzIjogIkFBSUEsT0FBTyxnQkFBZ0I7QUFDdkIsU0FB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
package/emptyModule.js DELETED
File without changes
package/eslint.config.js DELETED
@@ -1,3 +0,0 @@
1
- import {typescriptConfig} from 'eslint-config-styleguidejs';
2
-
3
- export default typescriptConfig;
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes