@nlabs/lex 2.0.1 → 2.0.3
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/CHANGELOG.md +19 -0
- package/README.md +55 -4
- package/examples/lex.config.js +6 -5
- package/lib/commands/compile/compile.js +13 -5
- package/lib/utils/vite/config.d.ts +6 -0
- package/lib/utils/vite/config.js +95 -43
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1 +1,20 @@
|
|
|
1
1
|
# Changes
|
|
2
|
+
|
|
3
|
+
## 2.0.0
|
|
4
|
+
|
|
5
|
+
### Breaking changes
|
|
6
|
+
|
|
7
|
+
- Replaced Webpack with Vite for web development and production builds.
|
|
8
|
+
- Removed Lex's Webpack configuration files, dependency stack, loaders, plugins, and Webpack-specific build options.
|
|
9
|
+
- Replaced the `webpack` configuration property with `vite`.
|
|
10
|
+
- Web projects now default to Vite; Node, Lambda, and mobile projects default to SWC.
|
|
11
|
+
- Requires Node.js 22 or newer.
|
|
12
|
+
|
|
13
|
+
### Vite migration
|
|
14
|
+
|
|
15
|
+
- Preserved native dynamic imports and production code splitting.
|
|
16
|
+
- Ported GraphQL loading, PostCSS, source maps, environment handling, library builds, SSR loading, and bundle reports.
|
|
17
|
+
- Ported browser shims for Buffer, process, global, and supported Node modules.
|
|
18
|
+
- Ported static copying, image optimization, SVG sprites, favicons, Open Graph and Twitter images, and gzip sidecars.
|
|
19
|
+
- Added recursive static-site rendering through Vite's SSR module loader.
|
|
20
|
+
- Added `lex config vite` for inspecting the resolved web configuration.
|
package/README.md
CHANGED
|
@@ -211,7 +211,7 @@ export default {
|
|
|
211
211
|
# Standard production build
|
|
212
212
|
lex build --mode production
|
|
213
213
|
|
|
214
|
-
#
|
|
214
|
+
# Force the SWC pipeline instead of the web default
|
|
215
215
|
lex build --bundler swc
|
|
216
216
|
|
|
217
217
|
# With AI optimization analysis
|
|
@@ -278,7 +278,7 @@ Lex works seamlessly with popular React frameworks and libraries:
|
|
|
278
278
|
- ✅ **Create React App** - Migrate existing CRA projects
|
|
279
279
|
- ✅ **Next.js** - Use Lex for testing and building
|
|
280
280
|
- ✅ **Gatsby** - Integrate Lex workflows
|
|
281
|
-
- ✅ **Vite** -
|
|
281
|
+
- ✅ **Vite** - Built-in web development and production bundling
|
|
282
282
|
- ✅ **TypeScript** - Full TypeScript support out of the box
|
|
283
283
|
- ✅ **Tailwind CSS** - Automatic Tailwind integration
|
|
284
284
|
- ✅ **Storybook** - Built-in Storybook support
|
|
@@ -315,9 +315,14 @@ export default {
|
|
|
315
315
|
},
|
|
316
316
|
|
|
317
317
|
// SWC configuration (defaults to ESM format)
|
|
318
|
-
// SWC is
|
|
318
|
+
// SWC is the default compiler for non-web targets
|
|
319
319
|
reactCompiler: true,
|
|
320
320
|
|
|
321
|
+
// Vite configuration for web development and production builds
|
|
322
|
+
vite: {
|
|
323
|
+
staticPath: './src/static'
|
|
324
|
+
},
|
|
325
|
+
|
|
321
326
|
// Vitest configuration (merged with Lex defaults)
|
|
322
327
|
vitest: {
|
|
323
328
|
environment: 'jsdom',
|
|
@@ -366,7 +371,7 @@ Lex provides extensive configuration options through the `lex.config.js` file. H
|
|
|
366
371
|
|
|
367
372
|
### **SWC Configuration**
|
|
368
373
|
|
|
369
|
-
SWC (Speedy Web Compiler)
|
|
374
|
+
SWC (Speedy Web Compiler) powers non-web compilation and Lex's source transformation inside Vite. SWC provides:
|
|
370
375
|
|
|
371
376
|
- **10-100x faster** compilation than Babel
|
|
372
377
|
- **Faster than esbuild** for TypeScript compilation
|
|
@@ -457,11 +462,57 @@ You can also specify ESLint rules in your `lex.config.js` file, but this is less
|
|
|
457
462
|
|
|
458
463
|
### **Vite Configuration**
|
|
459
464
|
|
|
465
|
+
Vite is the default for `web` projects. Lex merges the `vite` object with its required plugin stack, so standard Vite options such as `base`, `server`, and `resolve` can be supplied alongside Lex's `staticPath` option. Project plugins are appended to Lex's built-in plugins.
|
|
466
|
+
|
|
460
467
|
| Option | Type | Default | Description | Example |
|
|
461
468
|
|--------|------|---------|-------------|---------|
|
|
462
469
|
| `vite.staticPath` | `string` | `'./src/static'` | Static assets copied to the output root | `vite: { staticPath: './assets' }` |
|
|
463
470
|
| `vite.*` | `Vite UserConfig` | `undefined` | Additional Vite configuration merged with Lex defaults | `vite: { base: '/app/' }` |
|
|
464
471
|
|
|
472
|
+
Web builds provide dynamic-import code splitting, GraphQL document loading, PostCSS, source maps, and browser shims for `assert`, `buffer`, `http`, `https`, `os`, `path`, `process`, `stream`, `util`, and `vm`. `crypto` remains an empty browser shim, matching the previous Lex behavior.
|
|
473
|
+
|
|
474
|
+
Lex also processes these conventional asset locations:
|
|
475
|
+
|
|
476
|
+
| Source | Output | Behavior |
|
|
477
|
+
|--------|--------|----------|
|
|
478
|
+
| `vite.staticPath` | Output root | Recursively copied |
|
|
479
|
+
| `src/images` | `images` | Copied and optimized |
|
|
480
|
+
| `src/fonts` | `fonts` | Copied |
|
|
481
|
+
| `src/docs` | `docs` | Copied |
|
|
482
|
+
| `src/icons/*.svg` | `icons/icons.svg` | Combined into an optimized SVG sprite |
|
|
483
|
+
| `src/images/logo.png` | Output root | Generates favicons, manifests, `open-graph.png`, and `twitter.png` |
|
|
484
|
+
|
|
485
|
+
Production builds optimize GIF, JPEG, PNG, SVG, and WebP assets. Compressible CSS, HTML, JavaScript, JSON, SVG, text, and XML files of at least 8 KiB receive a `.gz` sidecar.
|
|
486
|
+
|
|
487
|
+
### **Migrating from Lex 1.x**
|
|
488
|
+
|
|
489
|
+
Lex 2 is a breaking migration from Webpack to Vite for web projects. Non-web projects use SWC.
|
|
490
|
+
|
|
491
|
+
Update the configuration property:
|
|
492
|
+
|
|
493
|
+
```javascript
|
|
494
|
+
// Lex 1.x
|
|
495
|
+
export default {
|
|
496
|
+
webpack: {
|
|
497
|
+
staticPath: './src/static'
|
|
498
|
+
}
|
|
499
|
+
};
|
|
500
|
+
|
|
501
|
+
// Lex 2.x
|
|
502
|
+
export default {
|
|
503
|
+
vite: {
|
|
504
|
+
staticPath: './src/static'
|
|
505
|
+
}
|
|
506
|
+
};
|
|
507
|
+
```
|
|
508
|
+
|
|
509
|
+
- Remove project references to Lex's former `webpack.config.js` and Webpack-specific Lex options.
|
|
510
|
+
- Use `lex build --bundler vite` for an explicit web build or rely on the `web` preset default.
|
|
511
|
+
- Use `lex build --bundler swc` for Node, Lambda, mobile, and library compilation when needed.
|
|
512
|
+
- Keep native `import()` expressions; Vite creates dynamic chunks without additional configuration.
|
|
513
|
+
- Put pass-through public files in `vite.staticPath`. The image, font, document, icon, favicon, optimization, and gzip behavior described above is built in.
|
|
514
|
+
- Use `lex config vite` to inspect the resolved Vite configuration.
|
|
515
|
+
|
|
465
516
|
### **Library Configuration**
|
|
466
517
|
|
|
467
518
|
| Option | Type | Default | Description | Example |
|
package/examples/lex.config.js
CHANGED
|
@@ -2,8 +2,7 @@
|
|
|
2
2
|
* Lex configuration file
|
|
3
3
|
* This file contains configuration options for the Lex CLI tool
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
* The 'swc' configuration section below replaces the old 'esbuild' configuration.
|
|
5
|
+
* Web projects build with Vite. Node, Lambda, and mobile projects compile with SWC.
|
|
7
6
|
*/
|
|
8
7
|
|
|
9
8
|
export default {
|
|
@@ -38,12 +37,14 @@ export default {
|
|
|
38
37
|
|
|
39
38
|
// Vite configuration
|
|
40
39
|
vite: {
|
|
41
|
-
//
|
|
40
|
+
// Standard Vite options are merged with Lex's required plugins
|
|
41
|
+
base: '/',
|
|
42
|
+
|
|
43
|
+
// Path copied to the output root (defaults to './src/static')
|
|
42
44
|
staticPath: './src/static'
|
|
43
45
|
},
|
|
44
46
|
|
|
45
|
-
// SWC configuration
|
|
46
|
-
// SWC is now the default transpiler for all TypeScript/JavaScript compilation
|
|
47
|
+
// SWC configuration for non-web compilation and Vite source transforms
|
|
47
48
|
swc: {
|
|
48
49
|
// JavaScript Compiler (JSC) configuration
|
|
49
50
|
jsc: {
|
|
@@ -10,6 +10,11 @@ import { LexConfig } from '../../LexConfig.js';
|
|
|
10
10
|
import { checkLinkedModules, copyConfiguredFiles, copyFiles, createSpinner, getFilesByExt, removeFiles } from '../../utils/app.js';
|
|
11
11
|
import { getDirName, resolveBinaryPath } from '../../utils/file.js';
|
|
12
12
|
import { log } from '../../utils/log.js';
|
|
13
|
+
const SOURCE_GLOB_IGNORE = [
|
|
14
|
+
'**/__mocks__/**',
|
|
15
|
+
'**/__tests__/**',
|
|
16
|
+
'**/tests/**'
|
|
17
|
+
];
|
|
13
18
|
export const hasFileType = (startPath, ext)=>{
|
|
14
19
|
if (!existsSync(startPath)) {
|
|
15
20
|
return false;
|
|
@@ -46,17 +51,19 @@ export const compile = async (cmd, callback = ()=>({}))=>{
|
|
|
46
51
|
log('Please reinstall Lex or check your installation.', 'info', quiet);
|
|
47
52
|
return 1;
|
|
48
53
|
}
|
|
49
|
-
const
|
|
54
|
+
const defaultTypeScriptConfig = pathResolve(process.cwd(), 'tsconfig.build.json');
|
|
55
|
+
const typeScriptConfig = config || (existsSync(defaultTypeScriptConfig) ? defaultTypeScriptConfig : undefined);
|
|
56
|
+
const typescriptOptions = typeScriptConfig ? [
|
|
50
57
|
'-p',
|
|
51
|
-
|
|
58
|
+
typeScriptConfig,
|
|
52
59
|
'--emitDeclarationOnly',
|
|
53
60
|
'--skipLibCheck'
|
|
54
|
-
]
|
|
55
|
-
: (()=>{
|
|
61
|
+
] : (()=>{
|
|
56
62
|
const globOptions = {
|
|
57
63
|
absolute: true,
|
|
58
64
|
cwd: sourceDir,
|
|
59
65
|
dot: false,
|
|
66
|
+
ignore: SOURCE_GLOB_IGNORE,
|
|
60
67
|
nodir: true
|
|
61
68
|
};
|
|
62
69
|
const tsFiles = globSync('**/!(*.spec|*.test|*.integration|*.e2e).ts', globOptions);
|
|
@@ -120,6 +127,7 @@ export const compile = async (cmd, callback = ()=>({}))=>{
|
|
|
120
127
|
absolute: true,
|
|
121
128
|
cwd: sourceDir,
|
|
122
129
|
dot: false,
|
|
130
|
+
ignore: SOURCE_GLOB_IGNORE,
|
|
123
131
|
nodir: true,
|
|
124
132
|
nosort: true
|
|
125
133
|
};
|
|
@@ -274,4 +282,4 @@ export const compile = async (cmd, callback = ()=>({}))=>{
|
|
|
274
282
|
return 0;
|
|
275
283
|
};
|
|
276
284
|
|
|
277
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9jb21waWxlL2NvbXBpbGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7dHJhbnNmb3JtfSBmcm9tICdAc3djL2NvcmUnO1xuaW1wb3J0IHtleGVjYX0gZnJvbSAnZXhlY2EnO1xuaW1wb3J0IHtleGlzdHNTeW5jLCBsc3RhdFN5bmMsIHJlYWRkaXJTeW5jLCByZWFkRmlsZVN5bmMsIHdyaXRlRmlsZVN5bmMsIG1rZGlyU3luY30gZnJvbSAnZnMnO1xuaW1wb3J0IHtzeW5jIGFzIGdsb2JTeW5jfSBmcm9tICdnbG9iJztcbmltcG9ydCB7ZXh0bmFtZSBhcyBwYXRoRXh0bmFtZSwgam9pbiBhcyBwYXRoSm9pbiwgcmVsYXRpdmUgYXMgcGF0aFJlbGF0aXZlLCByZXNvbHZlIGFzIHBhdGhSZXNvbHZlLCBkaXJuYW1lfSBmcm9tICdwYXRoJztcblxuaW1wb3J0IHtMZXhDb25maWd9IGZyb20gJy4uLy4uL0xleENvbmZpZy5qcyc7XG5pbXBvcnQge2NoZWNrTGlua2VkTW9kdWxlcywgY29weUNvbmZpZ3VyZWRGaWxlcywgY29weUZpbGVzLCBjcmVhdGVTcGlubmVyLCBnZXRGaWxlc0J5RXh0LCByZW1vdmVGaWxlc30gZnJvbSAnLi4vLi4vdXRpbHMvYXBwLmpzJztcbmltcG9ydCB7Z2V0RGlyTmFtZSwgcmVzb2x2ZUJpbmFyeVBhdGh9IGZyb20gJy4uLy4uL3V0aWxzL2ZpbGUuanMnO1xuaW1wb3J0IHtsb2d9IGZyb20gJy4uLy4uL3V0aWxzL2xvZy5qcyc7XG5cbmltcG9ydCB0eXBlIHtTV0NPcHRpb25zfSBmcm9tICcuLi8uLi9MZXhDb25maWcuanMnO1xuXG5leHBvcnQgY29uc3QgaGFzRmlsZVR5cGUgPSAoc3RhcnRQYXRoOiBzdHJpbmcsIGV4dDogc3RyaW5nW10pOiBib29sZWFuID0+IHtcbiAgaWYoIWV4aXN0c1N5bmMoc3RhcnRQYXRoKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGZpbGVzOiBzdHJpbmdbXSA9IHJlYWRkaXJTeW5jKHN0YXJ0UGF0aCk7XG5cbiAgcmV0dXJuIGZpbGVzLnNvbWUoKGZpbGU6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IGZpbGVuYW1lOiBzdHJpbmcgPSBwYXRoSm9pbihzdGFydFBhdGgsIGZpbGUpO1xuICAgIGNvbnN0IGZpbGVFeHQ6IHN0cmluZyA9IHBhdGhFeHRuYW1lKGZpbGVuYW1lKTtcbiAgICBjb25zdCBzdGF0ID0gbHN0YXRTeW5jKGZpbGVuYW1lKTtcblxuICAgIGlmKHN0YXQuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgcmV0dXJuIGhhc0ZpbGVUeXBlKGZpbGVuYW1lLCBleHQpO1xuICAgIH1cblxuICAgIHJldHVybiBleHQuaW5jbHVkZXMoZmlsZUV4dCk7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNvbXBpbGUgPSBhc3luYyAoY21kOiBhbnksIGNhbGxiYWNrOiBhbnkgPSAoKSA9PiAoe30pKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcbiAgY29uc3Qge1xuICAgIGNsaU5hbWUgPSAnTGV4JyxcbiAgICBjb25maWcsXG4gICAgZm9ybWF0ID0gJ2VzbScsXG4gICAgb3V0cHV0UGF0aCxcbiAgICBxdWlldCxcbiAgICByZW1vdmUsXG4gICAgc291cmNlUGF0aCxcbiAgICB3YXRjaFxuICB9ID0gY21kO1xuICBjb25zdCBzcGlubmVyID0gY3JlYXRlU3Bpbm5lcihxdWlldCk7XG5cbiAgbG9nKGAke2NsaU5hbWV9IGNvbXBpbGluZy4uLmAsICdpbmZvJywgcXVpZXQpO1xuXG4gIGF3YWl0IExleENvbmZpZy5wYXJzZUNvbmZpZyhjbWQpO1xuXG4gIGNvbnN0IHtvdXRwdXRGdWxsUGF0aCwgcmVhY3RDb21waWxlciwgc291cmNlRnVsbFBhdGgsIHN3YzogcGFyc2VkU3djQ29uZmlnLCB1c2VUeXBlc2NyaXB0fSA9IExleENvbmZpZy5jb25maWc7XG4gIGNvbnN0IHN3Y0NvbmZpZyA9IExleENvbmZpZy5nZXRTV0NDb25maWdXaXRoUmVhY3RDb21waWxlcihwYXJzZWRTd2NDb25maWcsIHJlYWN0Q29tcGlsZXIpO1xuICBjb25zdCBvdXRwdXREaXI6IHN0cmluZyA9IG91dHB1dFBhdGhcbiAgICA/IHBhdGhSZXNvbHZlKHByb2Nlc3MuY3dkKCksIG91dHB1dFBhdGgpXG4gICAgOiAob3V0cHV0RnVsbFBhdGggfHwgcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJy4vbGliJykpO1xuICBjb25zdCBzb3VyY2VEaXI6IHN0cmluZyA9IHNvdXJjZVBhdGggPyBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCBgLi8ke3NvdXJjZVBhdGh9YCkgOiBzb3VyY2VGdWxsUGF0aCB8fCAnJztcbiAgY29uc3QgZGlyTmFtZSA9IGdldERpck5hbWUoKTtcblxuICBjaGVja0xpbmtlZE1vZHVsZXMoKTtcblxuICBpZihyZW1vdmUpIHtcbiAgICBhd2FpdCByZW1vdmVGaWxlcyhvdXRwdXREaXIpO1xuICB9XG5cbiAgaWYodXNlVHlwZXNjcmlwdCkge1xuICAgIGNvbnN0IHR5cGVzY3JpcHRQYXRoOiBzdHJpbmcgPSByZXNvbHZlQmluYXJ5UGF0aCgndHNjJywgJ3R5cGVzY3JpcHQnKTtcblxuICAgIGlmKCF0eXBlc2NyaXB0UGF0aCkge1xuICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBUeXBlU2NyaXB0IGJpbmFyeSBub3QgZm91bmQgaW4gTGV4J3Mgbm9kZV9tb2R1bGVzIG9yIG1vbm9yZXBvIHJvb3RgLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICBsb2coJ1BsZWFzZSByZWluc3RhbGwgTGV4IG9yIGNoZWNrIHlvdXIgaW5zdGFsbGF0aW9uLicsICdpbmZvJywgcXVpZXQpO1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuXG4gICAgY29uc3QgdHlwZXNjcmlwdE9wdGlvbnM6IHN0cmluZ1tdID0gY29uZmlnXG4gICAgICA/IFsnLXAnLCBjb25maWcsICctLWVtaXREZWNsYXJhdGlvbk9ubHknLCAnLS1za2lwTGliQ2hlY2snXSAvLyBVc2VyIHByb3ZpZGVkIGN1c3RvbSBjb25maWcsIGJ1dCBzdGlsbCBvbmx5IGVtaXQgZGVjbGFyYXRpb25zXG4gICAgICA6ICgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGdsb2JPcHRpb25zID0ge1xuICAgICAgICAgIGFic29sdXRlOiB0cnVlLFxuICAgICAgICAgIGN3ZDogc291cmNlRGlyLFxuICAgICAgICAgIGRvdDogZmFsc2UsXG4gICAgICAgICAgbm9kaXI6IHRydWVcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgdHNGaWxlcyA9IGdsb2JTeW5jKCcqKi8hKCouc3BlY3wqLnRlc3R8Ki5pbnRlZ3JhdGlvbnwqLmUyZSkudHMnLCBnbG9iT3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHRzeEZpbGVzID0gZ2xvYlN5bmMoJyoqLyEoKi5zcGVjfCoudGVzdHwqLmludGVncmF0aW9ufCouZTJlKS50c3gnLCBnbG9iT3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGFsbFNvdXJjZUZpbGVzID0gWy4uLnRzRmlsZXMsIC4uLnRzeEZpbGVzXTtcblxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIC4uLkxleENvbmZpZy5nZXRUeXBlU2NyaXB0RGVjbGFyYXRpb25GbGFncygpLFxuICAgICAgICAgIC4uLmFsbFNvdXJjZUZpbGVzXG4gICAgICAgIF07XG4gICAgICB9KSgpO1xuXG4gICAgc3Bpbm5lci5zdGFydCgnR2VuZXJhdGluZyBUeXBlU2NyaXB0IGRlY2xhcmF0aW9ucy4uLicpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGV4ZWNhKHR5cGVzY3JpcHRQYXRoLCB0eXBlc2NyaXB0T3B0aW9ucywge1xuICAgICAgICBhbGw6IHRydWUsXG4gICAgICAgIGN3ZDogcHJvY2Vzcy5jd2QoKSxcbiAgICAgICAgZW5jb2Rpbmc6ICd1dGY4JyxcbiAgICAgICAgcmVqZWN0OiBmYWxzZVxuICAgICAgfSk7XG5cbiAgICAgIGlmKHJlc3VsdC5leGl0Q29kZSAhPT0gMCkge1xuICAgICAgICBjb25zdCBoYXNEZWNsYXJhdGlvbnMgPSByZXN1bHQuYWxsPy5pbmNsdWRlcygnV3JpdGluZycpIHx8IHJlc3VsdC5hbGw/LmluY2x1ZGVzKCdEZWNsYXJhdGlvbicpIHx8IGZhbHNlO1xuICAgICAgICBjb25zdCBlcnJvck91dHB1dCA9IHJlc3VsdC5zdGRlcnIgfHwgcmVzdWx0LnN0ZG91dCB8fCByZXN1bHQuYWxsIHx8ICdVbmtub3duIGVycm9yJztcblxuICAgICAgICBpZighaGFzRGVjbGFyYXRpb25zKSB7XG4gICAgICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBUeXBlU2NyaXB0IGRlY2xhcmF0aW9uIGdlbmVyYXRpb24gZmFpbGVkYCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgICAgIGxvZyhgXFxuRXhpdCBDb2RlOiAke3Jlc3VsdC5leGl0Q29kZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICAgICAgbG9nKGBcXG5UeXBlU2NyaXB0IENvbW1hbmQ6ICR7dHlwZXNjcmlwdFBhdGh9ICR7dHlwZXNjcmlwdE9wdGlvbnMuam9pbignICcpfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgICAgICBsb2coYFxcbkVycm9yIE91dHB1dDpcXG4ke2Vycm9yT3V0cHV0fWAsICdlcnJvcicsIHF1aWV0KTtcblxuICAgICAgICAgIGNvbnN0IGVycm9yTGluZXMgPSBlcnJvck91dHB1dC5zcGxpdCgnXFxuJykuZmlsdGVyKChsaW5lKSA9PlxuICAgICAgICAgICAgbGluZS5pbmNsdWRlcygnZXJyb3IgVFMnKSB8fFxuICAgICAgICAgICAgbGluZS5pbmNsdWRlcygnRXJyb3I6JykgfHxcbiAgICAgICAgICAgIGxpbmUudHJpbSgpLnN0YXJ0c1dpdGgoJ3NyYy8nKSB8fFxuICAgICAgICAgICAgbGluZS50cmltKCkuc3RhcnRzV2l0aCgnVFMnKVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZihlcnJvckxpbmVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGxvZygnXFxuS2V5IEVycm9yczonLCAnZXJyb3InLCBxdWlldCk7XG5cbiAgICAgICAgICAgIGVycm9yTGluZXMuc2xpY2UoMCwgMTApLmZvckVhY2goKGxpbmUpID0+IHtcbiAgICAgICAgICAgICAgbG9nKGAgICR7bGluZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYoZXJyb3JMaW5lcy5sZW5ndGggPiAxMCkge1xuICAgICAgICAgICAgICBsb2coYCAgLi4uIGFuZCAke2Vycm9yTGluZXMubGVuZ3RoIC0gMTB9IG1vcmUgZXJyb3JzYCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHNwaW5uZXIuZmFpbCgnVHlwZVNjcmlwdCBkZWNsYXJhdGlvbiBnZW5lcmF0aW9uIGZhaWxlZC4nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gV2FybmluZzogVHlwZVNjcmlwdCBkZWNsYXJhdGlvbiBnZW5lcmF0aW9uIGNvbXBsZXRlZCB3aXRoIGVycm9yc2AsICd3YXJuJywgcXVpZXQpO1xuXG4gICAgICAgICAgaWYoIXF1aWV0ICYmIGVycm9yT3V0cHV0KSB7XG4gICAgICAgICAgICBsb2coYFxcbldhcm5pbmdzOlxcbiR7ZXJyb3JPdXRwdXR9YCwgJ3dhcm4nLCBxdWlldCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc3Bpbm5lci5zdWNjZWVkKCdUeXBlU2NyaXB0IGRlY2xhcmF0aW9ucyBnZW5lcmF0ZWQgKHdpdGggd2FybmluZ3MpLicpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzcGlubmVyLnN1Y2NlZWQoJ1N1Y2Nlc3NmdWxseSBnZW5lcmF0ZWQgVHlwZVNjcmlwdCBkZWNsYXJhdGlvbnMhJyk7XG4gICAgICB9XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBUeXBlU2NyaXB0IGRlY2xhcmF0aW9uIGdlbmVyYXRpb24gZXhjZXB0aW9uYCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgbG9nKGBcXG5FcnJvcjogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcblxuICAgICAgaWYoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiBlcnJvci5zdGFjaykge1xuICAgICAgICBsb2coYFxcblN0YWNrOlxcbiR7ZXJyb3Iuc3RhY2t9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgfVxuXG4gICAgICBzcGlubmVyLmZhaWwoJ1R5cGVTY3JpcHQgZGVjbGFyYXRpb24gZ2VuZXJhdGlvbiBoYWQgaXNzdWVzLCBjb250aW51aW5nLi4uJyk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgZ2xvYk9wdGlvbnMgPSB7XG4gICAgYWJzb2x1dGU6IHRydWUsXG4gICAgY3dkOiBzb3VyY2VEaXIsXG4gICAgZG90OiBmYWxzZSxcbiAgICBub2RpcjogdHJ1ZSxcbiAgICBub3NvcnQ6IHRydWVcbiAgfTtcbiAgY29uc3QgdHNGaWxlczogc3RyaW5nW10gPSBnbG9iU3luYygnKiovISgqLnNwZWN8Ki50ZXN0fCouaW50ZWdyYXRpb258Ki5lMmUpLnRzKicsIGdsb2JPcHRpb25zKTtcbiAgY29uc3QganNGaWxlczogc3RyaW5nW10gPSBnbG9iU3luYygnKiovISgqLnNwZWN8Ki50ZXN0fCouaW50ZWdyYXRpb258Ki5lMmUpLmpzJywgZ2xvYk9wdGlvbnMpO1xuICBjb25zdCBzb3VyY2VGaWxlczogc3RyaW5nW10gPSBbLi4udHNGaWxlcywgLi4uanNGaWxlc107XG5cbiAgY29uc3QgY3NzRmlsZXM6IHN0cmluZ1tdID0gZ2V0RmlsZXNCeUV4dCgnLmNzcycsIExleENvbmZpZy5jb25maWcpO1xuXG4gIGlmKGNzc0ZpbGVzLmxlbmd0aCkge1xuICAgIGNvbnN0IHBvc3Rjc3NQYXRoOiBzdHJpbmcgPSByZXNvbHZlQmluYXJ5UGF0aCgncG9zdGNzcycsICdwb3N0Y3NzLWNsaScpO1xuXG4gICAgaWYoIXBvc3Rjc3NQYXRoKSB7XG4gICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IFBvc3RDU1MgYmluYXJ5IG5vdCBmb3VuZCBpbiBMZXgncyBub2RlX21vZHVsZXMgb3IgbW9ub3JlcG8gcm9vdGAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgIGxvZygnUGxlYXNlIHJlaW5zdGFsbCBMZXggb3IgY2hlY2sgeW91ciBpbnN0YWxsYXRpb24uJywgJ2luZm8nLCBxdWlldCk7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG5cbiAgICBjb25zdCBwb3N0Y3NzT3B0aW9uczogc3RyaW5nW10gPSBbXG4gICAgICBgJHtzb3VyY2VEaXJ9LyoqLyoqLmNzc2AsXG4gICAgICAnLS1iYXNlJyxcbiAgICAgIHNvdXJjZURpcixcbiAgICAgICctLWRpcicsXG4gICAgICBvdXRwdXREaXIsXG4gICAgICAnLS1jb25maWcnLFxuICAgICAgcGF0aFJlc29sdmUoZGlyTmFtZSwgJy4uLy4uL3Bvc3Rjc3MuY29uZmlnLmpzJylcbiAgICBdO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGV4ZWNhKHBvc3Rjc3NQYXRoLCBwb3N0Y3NzT3B0aW9ucywge2VuY29kaW5nOiAndXRmOCd9KTtcbiAgICAgIHNwaW5uZXIuc3VjY2VlZChgU3VjY2Vzc2Z1bGx5IGZvcm1hdHRlZCAke2Nzc0ZpbGVzLmxlbmd0aH0gY3NzIGZpbGVzIWApO1xuICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcblxuICAgICAgc3Bpbm5lci5mYWlsKCdGYWlsZWQgZm9ybWF0dGluZyBjc3MuJyk7XG5cbiAgICAgIGNhbGxiYWNrKDEpO1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgZ2lmRmlsZXM6IHN0cmluZ1tdID0gZ2V0RmlsZXNCeUV4dCgnLmdpZicsIExleENvbmZpZy5jb25maWcpO1xuICBjb25zdCBqcGdGaWxlczogc3RyaW5nW10gPSBnZXRGaWxlc0J5RXh0KCcuanBnJywgTGV4Q29uZmlnLmNvbmZpZyk7XG4gIGNvbnN0IHBuZ0ZpbGVzOiBzdHJpbmdbXSA9IGdldEZpbGVzQnlFeHQoJy5wbmcnLCBMZXhDb25maWcuY29uZmlnKTtcbiAgY29uc3Qgc3ZnRmlsZXM6IHN0cmluZ1tdID0gZ2V0RmlsZXNCeUV4dCgnLnN2ZycsIExleENvbmZpZy5jb25maWcpO1xuICBjb25zdCBpbWFnZUZpbGVzOiBzdHJpbmdbXSA9IFsuLi5naWZGaWxlcywgLi4uanBnRmlsZXMsIC4uLnBuZ0ZpbGVzLCAuLi5zdmdGaWxlc107XG5cbiAgaWYoaW1hZ2VGaWxlcy5sZW5ndGgpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgY29weUZpbGVzKGltYWdlRmlsZXMsICdpbWFnZScsIHNwaW5uZXIsIExleENvbmZpZy5jb25maWcpO1xuICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcblxuICAgICAgc3Bpbm5lci5mYWlsKCdGYWlsZWQgdG8gbW92ZSBpbWFnZXMgdG8gb3V0cHV0IGRpcmVjdG9yeS4nKTtcblxuICAgICAgY2FsbGJhY2soMSk7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gIH1cblxuICBjb25zdCB0dGZGaWxlczogc3RyaW5nW10gPSBnZXRGaWxlc0J5RXh0KCcudHRmJywgTGV4Q29uZmlnLmNvbmZpZyk7XG4gIGNvbnN0IG90ZkZpbGVzOiBzdHJpbmdbXSA9IGdldEZpbGVzQnlFeHQoJy5vdGYnLCBMZXhDb25maWcuY29uZmlnKTtcbiAgY29uc3Qgd29mZkZpbGVzOiBzdHJpbmdbXSA9IGdldEZpbGVzQnlFeHQoJy53b2ZmJywgTGV4Q29uZmlnLmNvbmZpZyk7XG4gIGNvbnN0IHdvZmYyRmlsZXM6IHN0cmluZ1tdID0gZ2V0RmlsZXNCeUV4dCgnLndvZmYyJywgTGV4Q29uZmlnLmNvbmZpZyk7XG4gIGNvbnN0IGZvbnRGaWxlczogc3RyaW5nW10gPSBbLi4udHRmRmlsZXMsIC4uLm90ZkZpbGVzLCAuLi53b2ZmRmlsZXMsIC4uLndvZmYyRmlsZXNdO1xuXG4gIGlmKGZvbnRGaWxlcy5sZW5ndGgpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgY29weUZpbGVzKGZvbnRGaWxlcywgJ2ZvbnQnLCBzcGlubmVyLCBMZXhDb25maWcuY29uZmlnKTtcbiAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG5cbiAgICAgIHNwaW5uZXIuZmFpbCgnRmFpbGVkIHRvIG1vdmUgZm9udHMgdG8gb3V0cHV0IGRpcmVjdG9yeS4nKTtcblxuICAgICAgY2FsbGJhY2soMSk7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBtZEZpbGVzOiBzdHJpbmdbXSA9IGdldEZpbGVzQnlFeHQoJy5tZCcsIExleENvbmZpZy5jb25maWcpO1xuXG4gIGlmKG1kRmlsZXMubGVuZ3RoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGNvcHlGaWxlcyhtZEZpbGVzLCAnZG9jdW1lbnRzJywgc3Bpbm5lciwgTGV4Q29uZmlnLmNvbmZpZyk7XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuXG4gICAgICBzcGlubmVyLmZhaWwoJ0ZhaWxlZCB0byBtb3ZlIGRvY3MgdG8gb3V0cHV0IGRpcmVjdG9yeS4nKTtcblxuICAgICAgY2FsbGJhY2soMSk7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gIH1cblxuICBpZihzb3VyY2VGaWxlcy5sZW5ndGggPT09IDApIHtcbiAgICBsb2coYFxcbiR7Y2xpTmFtZX0gV2FybmluZzogTm8gc291cmNlIGZpbGVzIGZvdW5kIHRvIGNvbXBpbGUgaW4gJHtzb3VyY2VEaXJ9YCwgJ3dhcm4nLCBxdWlldCk7XG4gICAgc3Bpbm5lci5zdWNjZWVkKCdObyBmaWxlcyB0byBjb21waWxlLicpO1xuICAgIGNhbGxiYWNrKDApO1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgc3Bpbm5lci5zdGFydCh3YXRjaCA/ICdXYXRjaGluZyBmb3IgY2hhbmdlcy4uLicgOiAnQ29tcGlsaW5nIHdpdGggU1dDLi4uJyk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCB0cmFuc2Zvcm1Qcm9taXNlcyA9IHNvdXJjZUZpbGVzLm1hcChhc3luYyAoZmlsZSkgPT4ge1xuICAgICAgY29uc3QgZmlsZVJlbGF0aXZlVG9Tb3VyY2UgPSBwYXRoUmVsYXRpdmUoc291cmNlRGlyLCBmaWxlKTtcbiAgICAgIGNvbnN0IHNvdXJjZVBhdGggPSBmaWxlO1xuICAgICAgY29uc3Qgb3V0cHV0RmlsZSA9IGZpbGVSZWxhdGl2ZVRvU291cmNlLnJlcGxhY2UoL1xcLih0c3x0c3gpJC8sICcuanMnKTtcbiAgICAgIGNvbnN0IG91dHB1dFBhdGggPSBwYXRoUmVzb2x2ZShvdXRwdXREaXIsIG91dHB1dEZpbGUpO1xuICAgICAgY29uc3Qgb3V0cHV0RGlyUGF0aCA9IGRpcm5hbWUob3V0cHV0UGF0aCk7XG5cbiAgICAgIGlmKCFleGlzdHNTeW5jKG91dHB1dERpclBhdGgpKSB7XG4gICAgICAgIG1rZGlyU3luYyhvdXRwdXREaXJQYXRoLCB7cmVjdXJzaXZlOiB0cnVlfSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNvdXJjZUNvZGUgPSByZWFkRmlsZVN5bmMoc291cmNlUGF0aCwgJ3V0ZjgnKTtcbiAgICAgIGNvbnN0IHN3Y09wdGlvbnM6IFBhcnRpYWw8U1dDT3B0aW9ucz4gPSB7XG4gICAgICAgIC4uLnN3Y0NvbmZpZyxcbiAgICAgICAgZmlsZW5hbWU6IGZpbGUsXG4gICAgICAgIG1vZHVsZToge1xuICAgICAgICAgIHR5cGU6IGZvcm1hdCA9PT0gJ2NqcycgPyAnY29tbW9uanMnIGFzIGNvbnN0IDogKHN3Y0NvbmZpZz8ubW9kdWxlPy50eXBlIGFzICdlczYnIHx8ICdlczYnKSxcbiAgICAgICAgICAuLi5zd2NDb25maWc/Lm1vZHVsZVxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2VNYXBzOiBzd2NDb25maWc/LnNvdXJjZU1hcHMgfHwgJ2lubGluZSdcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRyYW5zZm9ybShzb3VyY2VDb2RlLCBzd2NPcHRpb25zKTtcblxuICAgICAgd3JpdGVGaWxlU3luYyhvdXRwdXRQYXRoLCByZXN1bHQuY29kZSk7XG4gICAgfSk7XG5cbiAgICBhd2FpdCBQcm9taXNlLmFsbCh0cmFuc2Zvcm1Qcm9taXNlcyk7XG5cbiAgICBzcGlubmVyLnN1Y2NlZWQoJ0NvbXBpbGUgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSEnKTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogU1dDIGNvbXBpbGF0aW9uIGZhaWxlZGAsICdlcnJvcicsIHF1aWV0KTtcbiAgICBsb2coYFxcbkVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuXG4gICAgaWYoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgaWYoZXJyb3Iuc3RhY2spIHtcbiAgICAgICAgbG9nKGBcXG5TdGFjayBUcmFjZTpcXG4ke2Vycm9yLnN0YWNrfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgIH1cblxuICAgICAgaWYoJ2ZpbGVuYW1lJyBpbiBlcnJvciB8fCAnZmlsZScgaW4gZXJyb3IpIHtcbiAgICAgICAgbG9nKGBcXG5GaWxlOiAkeyhlcnJvciBhcyBhbnkpLmZpbGVuYW1lIHx8IChlcnJvciBhcyBhbnkpLmZpbGV9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmKCFxdWlldCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1xcbkZ1bGwgRXJyb3IgRGV0YWlsczonLCBlcnJvcik7XG4gICAgfVxuXG4gICAgc3Bpbm5lci5mYWlsKCdDb2RlIGNvbXBpbGluZyBmYWlsZWQuJyk7XG5cbiAgICBjYWxsYmFjaygxKTtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgYXdhaXQgY29weUNvbmZpZ3VyZWRGaWxlcyhzcGlubmVyLCBMZXhDb25maWcuY29uZmlnLCBxdWlldCk7XG4gIH0gY2F0Y2goY29weUVycm9yKSB7XG4gICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBGYWlsZWQgdG8gY29weSBjb25maWd1cmVkIGZpbGVzOiAke2NvcHlFcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcblxuICAgIHNwaW5uZXIuZmFpbCgnRmFpbGVkIHRvIGNvcHkgY29uZmlndXJlZCBmaWxlcy4nKTtcblxuICAgIGNhbGxiYWNrKDEpO1xuICAgIHJldHVybiAxO1xuICB9XG5cbiAgY2FsbGJhY2soMCk7XG4gIHJldHVybiAwO1xufTtcbiJdLCJuYW1lcyI6WyJ0cmFuc2Zvcm0iLCJleGVjYSIsImV4aXN0c1N5bmMiLCJsc3RhdFN5bmMiLCJyZWFkZGlyU3luYyIsInJlYWRGaWxlU3luYyIsIndyaXRlRmlsZVN5bmMiLCJta2RpclN5bmMiLCJzeW5jIiwiZ2xvYlN5bmMiLCJleHRuYW1lIiwicGF0aEV4dG5hbWUiLCJqb2luIiwicGF0aEpvaW4iLCJyZWxhdGl2ZSIsInBhdGhSZWxhdGl2ZSIsInJlc29sdmUiLCJwYXRoUmVzb2x2ZSIsImRpcm5hbWUiLCJMZXhDb25maWciLCJjaGVja0xpbmtlZE1vZHVsZXMiLCJjb3B5Q29uZmlndXJlZEZpbGVzIiwiY29weUZpbGVzIiwiY3JlYXRlU3Bpbm5lciIsImdldEZpbGVzQnlFeHQiLCJyZW1vdmVGaWxlcyIsImdldERpck5hbWUiLCJyZXNvbHZlQmluYXJ5UGF0aCIsImxvZyIsImhhc0ZpbGVUeXBlIiwic3RhcnRQYXRoIiwiZXh0IiwiZmlsZXMiLCJzb21lIiwiZmlsZSIsImZpbGVuYW1lIiwiZmlsZUV4dCIsInN0YXQiLCJpc0RpcmVjdG9yeSIsImluY2x1ZGVzIiwiY29tcGlsZSIsImNtZCIsImNhbGxiYWNrIiwiY2xpTmFtZSIsImNvbmZpZyIsImZvcm1hdCIsIm91dHB1dFBhdGgiLCJxdWlldCIsInJlbW92ZSIsInNvdXJjZVBhdGgiLCJ3YXRjaCIsInNwaW5uZXIiLCJwYXJzZUNvbmZpZyIsIm91dHB1dEZ1bGxQYXRoIiwicmVhY3RDb21waWxlciIsInNvdXJjZUZ1bGxQYXRoIiwic3djIiwicGFyc2VkU3djQ29uZmlnIiwidXNlVHlwZXNjcmlwdCIsInN3Y0NvbmZpZyIsImdldFNXQ0NvbmZpZ1dpdGhSZWFjdENvbXBpbGVyIiwib3V0cHV0RGlyIiwicHJvY2VzcyIsImN3ZCIsInNvdXJjZURpciIsImRpck5hbWUiLCJ0eXBlc2NyaXB0UGF0aCIsInR5cGVzY3JpcHRPcHRpb25zIiwiZ2xvYk9wdGlvbnMiLCJhYnNvbHV0ZSIsImRvdCIsIm5vZGlyIiwidHNGaWxlcyIsInRzeEZpbGVzIiwiYWxsU291cmNlRmlsZXMiLCJnZXRUeXBlU2NyaXB0RGVjbGFyYXRpb25GbGFncyIsInN0YXJ0IiwicmVzdWx0IiwiYWxsIiwiZW5jb2RpbmciLCJyZWplY3QiLCJleGl0Q29kZSIsImhhc0RlY2xhcmF0aW9ucyIsImVycm9yT3V0cHV0Iiwic3RkZXJyIiwic3Rkb3V0IiwiZXJyb3JMaW5lcyIsInNwbGl0IiwiZmlsdGVyIiwibGluZSIsInRyaW0iLCJzdGFydHNXaXRoIiwibGVuZ3RoIiwic2xpY2UiLCJmb3JFYWNoIiwiZmFpbCIsInN1Y2NlZWQiLCJlcnJvciIsIm1lc3NhZ2UiLCJFcnJvciIsInN0YWNrIiwibm9zb3J0IiwianNGaWxlcyIsInNvdXJjZUZpbGVzIiwiY3NzRmlsZXMiLCJwb3N0Y3NzUGF0aCIsInBvc3Rjc3NPcHRpb25zIiwiZ2lmRmlsZXMiLCJqcGdGaWxlcyIsInBuZ0ZpbGVzIiwic3ZnRmlsZXMiLCJpbWFnZUZpbGVzIiwidHRmRmlsZXMiLCJvdGZGaWxlcyIsIndvZmZGaWxlcyIsIndvZmYyRmlsZXMiLCJmb250RmlsZXMiLCJtZEZpbGVzIiwidHJhbnNmb3JtUHJvbWlzZXMiLCJtYXAiLCJmaWxlUmVsYXRpdmVUb1NvdXJjZSIsIm91dHB1dEZpbGUiLCJyZXBsYWNlIiwib3V0cHV0RGlyUGF0aCIsInJlY3Vyc2l2ZSIsInNvdXJjZUNvZGUiLCJzd2NPcHRpb25zIiwibW9kdWxlIiwidHlwZSIsInNvdXJjZU1hcHMiLCJjb2RlIiwiUHJvbWlzZSIsImNvbnNvbGUiLCJjb3B5RXJyb3IiXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUNELFNBQVFBLFNBQVMsUUFBTyxZQUFZO0FBQ3BDLFNBQVFDLEtBQUssUUFBTyxRQUFRO0FBQzVCLFNBQVFDLFVBQVUsRUFBRUMsU0FBUyxFQUFFQyxXQUFXLEVBQUVDLFlBQVksRUFBRUMsYUFBYSxFQUFFQyxTQUFTLFFBQU8sS0FBSztBQUM5RixTQUFRQyxRQUFRQyxRQUFRLFFBQU8sT0FBTztBQUN0QyxTQUFRQyxXQUFXQyxXQUFXLEVBQUVDLFFBQVFDLFFBQVEsRUFBRUMsWUFBWUMsWUFBWSxFQUFFQyxXQUFXQyxXQUFXLEVBQUVDLE9BQU8sUUFBTyxPQUFPO0FBRXpILFNBQVFDLFNBQVMsUUFBTyxxQkFBcUI7QUFDN0MsU0FBUUMsa0JBQWtCLEVBQUVDLG1CQUFtQixFQUFFQyxTQUFTLEVBQUVDLGFBQWEsRUFBRUMsYUFBYSxFQUFFQyxXQUFXLFFBQU8scUJBQXFCO0FBQ2pJLFNBQVFDLFVBQVUsRUFBRUMsaUJBQWlCLFFBQU8sc0JBQXNCO0FBQ2xFLFNBQVFDLEdBQUcsUUFB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
|
|
285
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9jb21waWxlL2NvbXBpbGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7dHJhbnNmb3JtfSBmcm9tICdAc3djL2NvcmUnO1xuaW1wb3J0IHtleGVjYX0gZnJvbSAnZXhlY2EnO1xuaW1wb3J0IHtleGlzdHNTeW5jLCBsc3RhdFN5bmMsIHJlYWRkaXJTeW5jLCByZWFkRmlsZVN5bmMsIHdyaXRlRmlsZVN5bmMsIG1rZGlyU3luY30gZnJvbSAnZnMnO1xuaW1wb3J0IHtzeW5jIGFzIGdsb2JTeW5jfSBmcm9tICdnbG9iJztcbmltcG9ydCB7ZXh0bmFtZSBhcyBwYXRoRXh0bmFtZSwgam9pbiBhcyBwYXRoSm9pbiwgcmVsYXRpdmUgYXMgcGF0aFJlbGF0aXZlLCByZXNvbHZlIGFzIHBhdGhSZXNvbHZlLCBkaXJuYW1lfSBmcm9tICdwYXRoJztcblxuaW1wb3J0IHtMZXhDb25maWd9IGZyb20gJy4uLy4uL0xleENvbmZpZy5qcyc7XG5pbXBvcnQge2NoZWNrTGlua2VkTW9kdWxlcywgY29weUNvbmZpZ3VyZWRGaWxlcywgY29weUZpbGVzLCBjcmVhdGVTcGlubmVyLCBnZXRGaWxlc0J5RXh0LCByZW1vdmVGaWxlc30gZnJvbSAnLi4vLi4vdXRpbHMvYXBwLmpzJztcbmltcG9ydCB7Z2V0RGlyTmFtZSwgcmVzb2x2ZUJpbmFyeVBhdGh9IGZyb20gJy4uLy4uL3V0aWxzL2ZpbGUuanMnO1xuaW1wb3J0IHtsb2d9IGZyb20gJy4uLy4uL3V0aWxzL2xvZy5qcyc7XG5cbmltcG9ydCB0eXBlIHtTV0NPcHRpb25zfSBmcm9tICcuLi8uLi9MZXhDb25maWcuanMnO1xuXG5jb25zdCBTT1VSQ0VfR0xPQl9JR05PUkUgPSBbXG4gICcqKi9fX21vY2tzX18vKionLFxuICAnKiovX190ZXN0c19fLyoqJyxcbiAgJyoqL3Rlc3RzLyoqJ1xuXTtcblxuZXhwb3J0IGNvbnN0IGhhc0ZpbGVUeXBlID0gKHN0YXJ0UGF0aDogc3RyaW5nLCBleHQ6IHN0cmluZ1tdKTogYm9vbGVhbiA9PiB7XG4gIGlmKCFleGlzdHNTeW5jKHN0YXJ0UGF0aCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBmaWxlczogc3RyaW5nW10gPSByZWFkZGlyU3luYyhzdGFydFBhdGgpO1xuXG4gIHJldHVybiBmaWxlcy5zb21lKChmaWxlOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBmaWxlbmFtZTogc3RyaW5nID0gcGF0aEpvaW4oc3RhcnRQYXRoLCBmaWxlKTtcbiAgICBjb25zdCBmaWxlRXh0OiBzdHJpbmcgPSBwYXRoRXh0bmFtZShmaWxlbmFtZSk7XG4gICAgY29uc3Qgc3RhdCA9IGxzdGF0U3luYyhmaWxlbmFtZSk7XG5cbiAgICBpZihzdGF0LmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgIHJldHVybiBoYXNGaWxlVHlwZShmaWxlbmFtZSwgZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXh0LmluY2x1ZGVzKGZpbGVFeHQpO1xuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBjb21waWxlID0gYXN5bmMgKGNtZDogYW55LCBjYWxsYmFjazogYW55ID0gKCkgPT4gKHt9KSk6IFByb21pc2U8bnVtYmVyPiA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGlOYW1lID0gJ0xleCcsXG4gICAgY29uZmlnLFxuICAgIGZvcm1hdCA9ICdlc20nLFxuICAgIG91dHB1dFBhdGgsXG4gICAgcXVpZXQsXG4gICAgcmVtb3ZlLFxuICAgIHNvdXJjZVBhdGgsXG4gICAgd2F0Y2hcbiAgfSA9IGNtZDtcbiAgY29uc3Qgc3Bpbm5lciA9IGNyZWF0ZVNwaW5uZXIocXVpZXQpO1xuXG4gIGxvZyhgJHtjbGlOYW1lfSBjb21waWxpbmcuLi5gLCAnaW5mbycsIHF1aWV0KTtcblxuICBhd2FpdCBMZXhDb25maWcucGFyc2VDb25maWcoY21kKTtcblxuICBjb25zdCB7b3V0cHV0RnVsbFBhdGgsIHJlYWN0Q29tcGlsZXIsIHNvdXJjZUZ1bGxQYXRoLCBzd2M6IHBhcnNlZFN3Y0NvbmZpZywgdXNlVHlwZXNjcmlwdH0gPSBMZXhDb25maWcuY29uZmlnO1xuICBjb25zdCBzd2NDb25maWcgPSBMZXhDb25maWcuZ2V0U1dDQ29uZmlnV2l0aFJlYWN0Q29tcGlsZXIocGFyc2VkU3djQ29uZmlnLCByZWFjdENvbXBpbGVyKTtcbiAgY29uc3Qgb3V0cHV0RGlyOiBzdHJpbmcgPSBvdXRwdXRQYXRoXG4gICAgPyBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCBvdXRwdXRQYXRoKVxuICAgIDogKG91dHB1dEZ1bGxQYXRoIHx8IHBhdGhSZXNvbHZlKHByb2Nlc3MuY3dkKCksICcuL2xpYicpKTtcbiAgY29uc3Qgc291cmNlRGlyOiBzdHJpbmcgPSBzb3VyY2VQYXRoID8gcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgYC4vJHtzb3VyY2VQYXRofWApIDogc291cmNlRnVsbFBhdGggfHwgJyc7XG4gIGNvbnN0IGRpck5hbWUgPSBnZXREaXJOYW1lKCk7XG5cbiAgY2hlY2tMaW5rZWRNb2R1bGVzKCk7XG5cbiAgaWYocmVtb3ZlKSB7XG4gICAgYXdhaXQgcmVtb3ZlRmlsZXMob3V0cHV0RGlyKTtcbiAgfVxuXG4gIGlmKHVzZVR5cGVzY3JpcHQpIHtcbiAgICBjb25zdCB0eXBlc2NyaXB0UGF0aDogc3RyaW5nID0gcmVzb2x2ZUJpbmFyeVBhdGgoJ3RzYycsICd0eXBlc2NyaXB0Jyk7XG5cbiAgICBpZighdHlwZXNjcmlwdFBhdGgpIHtcbiAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogVHlwZVNjcmlwdCBiaW5hcnkgbm90IGZvdW5kIGluIExleCdzIG5vZGVfbW9kdWxlcyBvciBtb25vcmVwbyByb290YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgbG9nKCdQbGVhc2UgcmVpbnN0YWxsIExleCBvciBjaGVjayB5b3VyIGluc3RhbGxhdGlvbi4nLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cblxuICAgIGNvbnN0IGRlZmF1bHRUeXBlU2NyaXB0Q29uZmlnID0gcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJ3RzY29uZmlnLmJ1aWxkLmpzb24nKTtcbiAgICBjb25zdCB0eXBlU2NyaXB0Q29uZmlnID0gY29uZmlnIHx8IChleGlzdHNTeW5jKGRlZmF1bHRUeXBlU2NyaXB0Q29uZmlnKSA/IGRlZmF1bHRUeXBlU2NyaXB0Q29uZmlnIDogdW5kZWZpbmVkKTtcbiAgICBjb25zdCB0eXBlc2NyaXB0T3B0aW9uczogc3RyaW5nW10gPSB0eXBlU2NyaXB0Q29uZmlnXG4gICAgICA/IFsnLXAnLCB0eXBlU2NyaXB0Q29uZmlnLCAnLS1lbWl0RGVjbGFyYXRpb25Pbmx5JywgJy0tc2tpcExpYkNoZWNrJ11cbiAgICAgIDogKCgpID0+IHtcbiAgICAgICAgY29uc3QgZ2xvYk9wdGlvbnMgPSB7XG4gICAgICAgICAgYWJzb2x1dGU6IHRydWUsXG4gICAgICAgICAgY3dkOiBzb3VyY2VEaXIsXG4gICAgICAgICAgZG90OiBmYWxzZSxcbiAgICAgICAgICBpZ25vcmU6IFNPVVJDRV9HTE9CX0lHTk9SRSxcbiAgICAgICAgICBub2RpcjogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCB0c0ZpbGVzID0gZ2xvYlN5bmMoJyoqLyEoKi5zcGVjfCoudGVzdHwqLmludGVncmF0aW9ufCouZTJlKS50cycsIGdsb2JPcHRpb25zKTtcbiAgICAgICAgY29uc3QgdHN4RmlsZXMgPSBnbG9iU3luYygnKiovISgqLnNwZWN8Ki50ZXN0fCouaW50ZWdyYXRpb258Ki5lMmUpLnRzeCcsIGdsb2JPcHRpb25zKTtcbiAgICAgICAgY29uc3QgYWxsU291cmNlRmlsZXMgPSBbLi4udHNGaWxlcywgLi4udHN4RmlsZXNdO1xuXG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgLi4uTGV4Q29uZmlnLmdldFR5cGVTY3JpcHREZWNsYXJhdGlvbkZsYWdzKCksXG4gICAgICAgICAgLi4uYWxsU291cmNlRmlsZXNcbiAgICAgICAgXTtcbiAgICAgIH0pKCk7XG5cbiAgICBzcGlubmVyLnN0YXJ0KCdHZW5lcmF0aW5nIFR5cGVTY3JpcHQgZGVjbGFyYXRpb25zLi4uJyk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZXhlY2EodHlwZXNjcmlwdFBhdGgsIHR5cGVzY3JpcHRPcHRpb25zLCB7XG4gICAgICAgIGFsbDogdHJ1ZSxcbiAgICAgICAgY3dkOiBwcm9jZXNzLmN3ZCgpLFxuICAgICAgICBlbmNvZGluZzogJ3V0ZjgnLFxuICAgICAgICByZWplY3Q6IGZhbHNlXG4gICAgICB9KTtcblxuICAgICAgaWYocmVzdWx0LmV4aXRDb2RlICE9PSAwKSB7XG4gICAgICAgIGNvbnN0IGhhc0RlY2xhcmF0aW9ucyA9IHJlc3VsdC5hbGw/LmluY2x1ZGVzKCdXcml0aW5nJykgfHwgcmVzdWx0LmFsbD8uaW5jbHVkZXMoJ0RlY2xhcmF0aW9uJykgfHwgZmFsc2U7XG4gICAgICAgIGNvbnN0IGVycm9yT3V0cHV0ID0gcmVzdWx0LnN0ZGVyciB8fCByZXN1bHQuc3Rkb3V0IHx8IHJlc3VsdC5hbGwgfHwgJ1Vua25vd24gZXJyb3InO1xuXG4gICAgICAgIGlmKCFoYXNEZWNsYXJhdGlvbnMpIHtcbiAgICAgICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IFR5cGVTY3JpcHQgZGVjbGFyYXRpb24gZ2VuZXJhdGlvbiBmYWlsZWRgLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICAgICAgbG9nKGBcXG5FeGl0IENvZGU6ICR7cmVzdWx0LmV4aXRDb2RlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgICAgICBsb2coYFxcblR5cGVTY3JpcHQgQ29tbWFuZDogJHt0eXBlc2NyaXB0UGF0aH0gJHt0eXBlc2NyaXB0T3B0aW9ucy5qb2luKCcgJyl9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgICAgIGxvZyhgXFxuRXJyb3IgT3V0cHV0OlxcbiR7ZXJyb3JPdXRwdXR9YCwgJ2Vycm9yJywgcXVpZXQpO1xuXG4gICAgICAgICAgY29uc3QgZXJyb3JMaW5lcyA9IGVycm9yT3V0cHV0LnNwbGl0KCdcXG4nKS5maWx0ZXIoKGxpbmUpID0+XG4gICAgICAgICAgICBsaW5lLmluY2x1ZGVzKCdlcnJvciBUUycpIHx8XG4gICAgICAgICAgICBsaW5lLmluY2x1ZGVzKCdFcnJvcjonKSB8fFxuICAgICAgICAgICAgbGluZS50cmltKCkuc3RhcnRzV2l0aCgnc3JjLycpIHx8XG4gICAgICAgICAgICBsaW5lLnRyaW0oKS5zdGFydHNXaXRoKCdUUycpXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmKGVycm9yTGluZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgbG9nKCdcXG5LZXkgRXJyb3JzOicsICdlcnJvcicsIHF1aWV0KTtcblxuICAgICAgICAgICAgZXJyb3JMaW5lcy5zbGljZSgwLCAxMCkuZm9yRWFjaCgobGluZSkgPT4ge1xuICAgICAgICAgICAgICBsb2coYCAgJHtsaW5lfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZihlcnJvckxpbmVzLmxlbmd0aCA+IDEwKSB7XG4gICAgICAgICAgICAgIGxvZyhgICAuLi4gYW5kICR7ZXJyb3JMaW5lcy5sZW5ndGggLSAxMH0gbW9yZSBlcnJvcnNgLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc3Bpbm5lci5mYWlsKCdUeXBlU2NyaXB0IGRlY2xhcmF0aW9uIGdlbmVyYXRpb24gZmFpbGVkLicpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBXYXJuaW5nOiBUeXBlU2NyaXB0IGRlY2xhcmF0aW9uIGdlbmVyYXRpb24gY29tcGxldGVkIHdpdGggZXJyb3JzYCwgJ3dhcm4nLCBxdWlldCk7XG5cbiAgICAgICAgICBpZighcXVpZXQgJiYgZXJyb3JPdXRwdXQpIHtcbiAgICAgICAgICAgIGxvZyhgXFxuV2FybmluZ3M6XFxuJHtlcnJvck91dHB1dH1gLCAnd2FybicsIHF1aWV0KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzcGlubmVyLnN1Y2NlZWQoJ1R5cGVTY3JpcHQgZGVjbGFyYXRpb25zIGdlbmVyYXRlZCAod2l0aCB3YXJuaW5ncykuJyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNwaW5uZXIuc3VjY2VlZCgnU3VjY2Vzc2Z1bGx5IGdlbmVyYXRlZCBUeXBlU2NyaXB0IGRlY2xhcmF0aW9ucyEnKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IFR5cGVTY3JpcHQgZGVjbGFyYXRpb24gZ2VuZXJhdGlvbiBleGNlcHRpb25gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICBsb2coYFxcbkVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuXG4gICAgICBpZihlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmIGVycm9yLnN0YWNrKSB7XG4gICAgICAgIGxvZyhgXFxuU3RhY2s6XFxuJHtlcnJvci5zdGFja31gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICB9XG5cbiAgICAgIHNwaW5uZXIuZmFpbCgnVHlwZVNjcmlwdCBkZWNsYXJhdGlvbiBnZW5lcmF0aW9uIGhhZCBpc3N1ZXMsIGNvbnRpbnVpbmcuLi4nKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBnbG9iT3B0aW9ucyA9IHtcbiAgICBhYnNvbHV0ZTogdHJ1ZSxcbiAgICBjd2Q6IHNvdXJjZURpcixcbiAgICBkb3Q6IGZhbHNlLFxuICAgIGlnbm9yZTogU09VUkNFX0dMT0JfSUdOT1JFLFxuICAgIG5vZGlyOiB0cnVlLFxuICAgIG5vc29ydDogdHJ1ZVxuICB9O1xuICBjb25zdCB0c0ZpbGVzOiBzdHJpbmdbXSA9IGdsb2JTeW5jKCcqKi8hKCouc3BlY3wqLnRlc3R8Ki5pbnRlZ3JhdGlvbnwqLmUyZSkudHMqJywgZ2xvYk9wdGlvbnMpO1xuICBjb25zdCBqc0ZpbGVzOiBzdHJpbmdbXSA9IGdsb2JTeW5jKCcqKi8hKCouc3BlY3wqLnRlc3R8Ki5pbnRlZ3JhdGlvbnwqLmUyZSkuanMnLCBnbG9iT3B0aW9ucyk7XG4gIGNvbnN0IHNvdXJjZUZpbGVzOiBzdHJpbmdbXSA9IFsuLi50c0ZpbGVzLCAuLi5qc0ZpbGVzXTtcblxuICBjb25zdCBjc3NGaWxlczogc3RyaW5nW10gPSBnZXRGaWxlc0J5RXh0KCcuY3NzJywgTGV4Q29uZmlnLmNvbmZpZyk7XG5cbiAgaWYoY3NzRmlsZXMubGVuZ3RoKSB7XG4gICAgY29uc3QgcG9zdGNzc1BhdGg6IHN0cmluZyA9IHJlc29sdmVCaW5hcnlQYXRoKCdwb3N0Y3NzJywgJ3Bvc3Rjc3MtY2xpJyk7XG5cbiAgICBpZighcG9zdGNzc1BhdGgpIHtcbiAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogUG9zdENTUyBiaW5hcnkgbm90IGZvdW5kIGluIExleCdzIG5vZGVfbW9kdWxlcyBvciBtb25vcmVwbyByb290YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgbG9nKCdQbGVhc2UgcmVpbnN0YWxsIExleCBvciBjaGVjayB5b3VyIGluc3RhbGxhdGlvbi4nLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cblxuICAgIGNvbnN0IHBvc3Rjc3NPcHRpb25zOiBzdHJpbmdbXSA9IFtcbiAgICAgIGAke3NvdXJjZURpcn0vKiovKiouY3NzYCxcbiAgICAgICctLWJhc2UnLFxuICAgICAgc291cmNlRGlyLFxuICAgICAgJy0tZGlyJyxcbiAgICAgIG91dHB1dERpcixcbiAgICAgICctLWNvbmZpZycsXG4gICAgICBwYXRoUmVzb2x2ZShkaXJOYW1lLCAnLi4vLi4vcG9zdGNzcy5jb25maWcuanMnKVxuICAgIF07XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgZXhlY2EocG9zdGNzc1BhdGgsIHBvc3Rjc3NPcHRpb25zLCB7ZW5jb2Rpbmc6ICd1dGY4J30pO1xuICAgICAgc3Bpbm5lci5zdWNjZWVkKGBTdWNjZXNzZnVsbHkgZm9ybWF0dGVkICR7Y3NzRmlsZXMubGVuZ3RofSBjc3MgZmlsZXMhYCk7XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuXG4gICAgICBzcGlubmVyLmZhaWwoJ0ZhaWxlZCBmb3JtYXR0aW5nIGNzcy4nKTtcblxuICAgICAgY2FsbGJhY2soMSk7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBnaWZGaWxlczogc3RyaW5nW10gPSBnZXRGaWxlc0J5RXh0KCcuZ2lmJywgTGV4Q29uZmlnLmNvbmZpZyk7XG4gIGNvbnN0IGpwZ0ZpbGVzOiBzdHJpbmdbXSA9IGdldEZpbGVzQnlFeHQoJy5qcGcnLCBMZXhDb25maWcuY29uZmlnKTtcbiAgY29uc3QgcG5nRmlsZXM6IHN0cmluZ1tdID0gZ2V0RmlsZXNCeUV4dCgnLnBuZycsIExleENvbmZpZy5jb25maWcpO1xuICBjb25zdCBzdmdGaWxlczogc3RyaW5nW10gPSBnZXRGaWxlc0J5RXh0KCcuc3ZnJywgTGV4Q29uZmlnLmNvbmZpZyk7XG4gIGNvbnN0IGltYWdlRmlsZXM6IHN0cmluZ1tdID0gWy4uLmdpZkZpbGVzLCAuLi5qcGdGaWxlcywgLi4ucG5nRmlsZXMsIC4uLnN2Z0ZpbGVzXTtcblxuICBpZihpbWFnZUZpbGVzLmxlbmd0aCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBjb3B5RmlsZXMoaW1hZ2VGaWxlcywgJ2ltYWdlJywgc3Bpbm5lciwgTGV4Q29uZmlnLmNvbmZpZyk7XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuXG4gICAgICBzcGlubmVyLmZhaWwoJ0ZhaWxlZCB0byBtb3ZlIGltYWdlcyB0byBvdXRwdXQgZGlyZWN0b3J5LicpO1xuXG4gICAgICBjYWxsYmFjaygxKTtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHR0ZkZpbGVzOiBzdHJpbmdbXSA9IGdldEZpbGVzQnlFeHQoJy50dGYnLCBMZXhDb25maWcuY29uZmlnKTtcbiAgY29uc3Qgb3RmRmlsZXM6IHN0cmluZ1tdID0gZ2V0RmlsZXNCeUV4dCgnLm90ZicsIExleENvbmZpZy5jb25maWcpO1xuICBjb25zdCB3b2ZmRmlsZXM6IHN0cmluZ1tdID0gZ2V0RmlsZXNCeUV4dCgnLndvZmYnLCBMZXhDb25maWcuY29uZmlnKTtcbiAgY29uc3Qgd29mZjJGaWxlczogc3RyaW5nW10gPSBnZXRGaWxlc0J5RXh0KCcud29mZjInLCBMZXhDb25maWcuY29uZmlnKTtcbiAgY29uc3QgZm9udEZpbGVzOiBzdHJpbmdbXSA9IFsuLi50dGZGaWxlcywgLi4ub3RmRmlsZXMsIC4uLndvZmZGaWxlcywgLi4ud29mZjJGaWxlc107XG5cbiAgaWYoZm9udEZpbGVzLmxlbmd0aCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBjb3B5RmlsZXMoZm9udEZpbGVzLCAnZm9udCcsIHNwaW5uZXIsIExleENvbmZpZy5jb25maWcpO1xuICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcblxuICAgICAgc3Bpbm5lci5mYWlsKCdGYWlsZWQgdG8gbW92ZSBmb250cyB0byBvdXRwdXQgZGlyZWN0b3J5LicpO1xuXG4gICAgICBjYWxsYmFjaygxKTtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG1kRmlsZXM6IHN0cmluZ1tdID0gZ2V0RmlsZXNCeUV4dCgnLm1kJywgTGV4Q29uZmlnLmNvbmZpZyk7XG5cbiAgaWYobWRGaWxlcy5sZW5ndGgpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgY29weUZpbGVzKG1kRmlsZXMsICdkb2N1bWVudHMnLCBzcGlubmVyLCBMZXhDb25maWcuY29uZmlnKTtcbiAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG5cbiAgICAgIHNwaW5uZXIuZmFpbCgnRmFpbGVkIHRvIG1vdmUgZG9jcyB0byBvdXRwdXQgZGlyZWN0b3J5LicpO1xuXG4gICAgICBjYWxsYmFjaygxKTtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgfVxuXG4gIGlmKHNvdXJjZUZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBXYXJuaW5nOiBObyBzb3VyY2UgZmlsZXMgZm91bmQgdG8gY29tcGlsZSBpbiAke3NvdXJjZURpcn1gLCAnd2FybicsIHF1aWV0KTtcbiAgICBzcGlubmVyLnN1Y2NlZWQoJ05vIGZpbGVzIHRvIGNvbXBpbGUuJyk7XG4gICAgY2FsbGJhY2soMCk7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBzcGlubmVyLnN0YXJ0KHdhdGNoID8gJ1dhdGNoaW5nIGZvciBjaGFuZ2VzLi4uJyA6ICdDb21waWxpbmcgd2l0aCBTV0MuLi4nKTtcblxuICB0cnkge1xuICAgIGNvbnN0IHRyYW5zZm9ybVByb21pc2VzID0gc291cmNlRmlsZXMubWFwKGFzeW5jIChmaWxlKSA9PiB7XG4gICAgICBjb25zdCBmaWxlUmVsYXRpdmVUb1NvdXJjZSA9IHBhdGhSZWxhdGl2ZShzb3VyY2VEaXIsIGZpbGUpO1xuICAgICAgY29uc3Qgc291cmNlUGF0aCA9IGZpbGU7XG4gICAgICBjb25zdCBvdXRwdXRGaWxlID0gZmlsZVJlbGF0aXZlVG9Tb3VyY2UucmVwbGFjZSgvXFwuKHRzfHRzeCkkLywgJy5qcycpO1xuICAgICAgY29uc3Qgb3V0cHV0UGF0aCA9IHBhdGhSZXNvbHZlKG91dHB1dERpciwgb3V0cHV0RmlsZSk7XG4gICAgICBjb25zdCBvdXRwdXREaXJQYXRoID0gZGlybmFtZShvdXRwdXRQYXRoKTtcblxuICAgICAgaWYoIWV4aXN0c1N5bmMob3V0cHV0RGlyUGF0aCkpIHtcbiAgICAgICAgbWtkaXJTeW5jKG91dHB1dERpclBhdGgsIHtyZWN1cnNpdmU6IHRydWV9KTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc291cmNlQ29kZSA9IHJlYWRGaWxlU3luYyhzb3VyY2VQYXRoLCAndXRmOCcpO1xuICAgICAgY29uc3Qgc3djT3B0aW9uczogUGFydGlhbDxTV0NPcHRpb25zPiA9IHtcbiAgICAgICAgLi4uc3djQ29uZmlnLFxuICAgICAgICBmaWxlbmFtZTogZmlsZSxcbiAgICAgICAgbW9kdWxlOiB7XG4gICAgICAgICAgdHlwZTogZm9ybWF0ID09PSAnY2pzJyA/ICdjb21tb25qcycgYXMgY29uc3QgOiAoc3djQ29uZmlnPy5tb2R1bGU/LnR5cGUgYXMgJ2VzNicgfHwgJ2VzNicpLFxuICAgICAgICAgIC4uLnN3Y0NvbmZpZz8ubW9kdWxlXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZU1hcHM6IHN3Y0NvbmZpZz8uc291cmNlTWFwcyB8fCAnaW5saW5lJ1xuICAgICAgfTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdHJhbnNmb3JtKHNvdXJjZUNvZGUsIHN3Y09wdGlvbnMpO1xuXG4gICAgICB3cml0ZUZpbGVTeW5jKG91dHB1dFBhdGgsIHJlc3VsdC5jb2RlKTtcbiAgICB9KTtcblxuICAgIGF3YWl0IFByb21pc2UuYWxsKHRyYW5zZm9ybVByb21pc2VzKTtcblxuICAgIHNwaW5uZXIuc3VjY2VlZCgnQ29tcGlsZSBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IScpO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBTV0MgY29tcGlsYXRpb24gZmFpbGVkYCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgIGxvZyhgXFxuRXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG5cbiAgICBpZihlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICBpZihlcnJvci5zdGFjaykge1xuICAgICAgICBsb2coYFxcblN0YWNrIFRyYWNlOlxcbiR7ZXJyb3Iuc3RhY2t9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgfVxuXG4gICAgICBpZignZmlsZW5hbWUnIGluIGVycm9yIHx8ICdmaWxlJyBpbiBlcnJvcikge1xuICAgICAgICBsb2coYFxcbkZpbGU6ICR7KGVycm9yIGFzIGFueSkuZmlsZW5hbWUgfHwgKGVycm9yIGFzIGFueSkuZmlsZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYoIXF1aWV0KSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS5lcnJvcignXFxuRnVsbCBFcnJvciBEZXRhaWxzOicsIGVycm9yKTtcbiAgICB9XG5cbiAgICBzcGlubmVyLmZhaWwoJ0NvZGUgY29tcGlsaW5nIGZhaWxlZC4nKTtcblxuICAgIGNhbGxiYWNrKDEpO1xuICAgIHJldHVybiAxO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBjb3B5Q29uZmlndXJlZEZpbGVzKHNwaW5uZXIsIExleENvbmZpZy5jb25maWcsIHF1aWV0KTtcbiAgfSBjYXRjaChjb3B5RXJyb3IpIHtcbiAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IEZhaWxlZCB0byBjb3B5IGNvbmZpZ3VyZWQgZmlsZXM6ICR7Y29weUVycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuXG4gICAgc3Bpbm5lci5mYWlsKCdGYWlsZWQgdG8gY29weSBjb25maWd1cmVkIGZpbGVzLicpO1xuXG4gICAgY2FsbGJhY2soMSk7XG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICBjYWxsYmFjaygwKTtcbiAgcmV0dXJuIDA7XG59O1xuIl0sIm5hbWVzIjpbInRyYW5zZm9ybSIsImV4ZWNhIiwiZXhpc3RzU3luYyIsImxzdGF0U3luYyIsInJlYWRkaXJTeW5jIiwicmVhZEZpbGVTeW5jIiwid3JpdGVGaWxlU3luYyIsIm1rZGlyU3luYyIsInN5bmMiLCJnbG9iU3luYyIsImV4dG5hbWUiLCJwYXRoRXh0bmFtZSIsImpvaW4iLCJwYXRoSm9pbiIsInJlbGF0aXZlIiwicGF0aFJlbGF0aXZlIiwicmVzb2x2ZSIsInBhdGhSZXNvbHZlIiwiZGlybmFtZSIsIkxleENvbmZpZyIsImNoZWNrTGlua2VkTW9kdWxlcyIsImNvcHlDb25maWd1cmVkRmlsZXMiLCJjb3B5RmlsZXMiLCJjcmVhdGVTcGlubmVyIiwiZ2V0RmlsZXNCeUV4dCIsInJlbW92ZUZpbGVzIiwiZ2V0RGlyTmFtZSIsInJlc29sdmVCaW5hcnlQYXRoIiwibG9nIiwiU09VUkNFX0dMT0JfSUdOT1JFIiwiaGFzRmlsZVR5cGUiLCJzdGFydFBhdGgiLCJleHQiLCJmaWxlcyIsInNvbWUiLCJmaWxlIiwiZmlsZW5hbWUiLCJmaWxlRXh0Iiwic3RhdCIsImlzRGlyZWN0b3J5IiwiaW5jbHVkZXMiLCJjb21waWxlIiwiY21kIiwiY2FsbGJhY2siLCJjbGlOYW1lIiwiY29uZmlnIiwiZm9ybWF0Iiwib3V0cHV0UGF0aCIsInF1aWV0IiwicmVtb3ZlIiwic291cmNlUGF0aCIsIndhdGNoIiwic3Bpbm5lciIsInBhcnNlQ29uZmlnIiwib3V0cHV0RnVsbFBhdGgiLCJyZWFjdENvbXBpbGVyIiwic291cmNlRnVsbFBhdGgiLCJzd2MiLCJwYXJzZWRTd2NDb25maWciLCJ1c2VUeXBlc2NyaXB0Iiwic3djQ29uZmlnIiwiZ2V0U1dDQ29uZmlnV2l0aFJlYWN0Q29tcGlsZXIiLCJvdXRwdXREaXIiLCJwcm9jZXNzIiwiY3dkIiwic291cmNlRGlyIiwiZGlyTmFtZSIsInR5cGVzY3JpcHRQYXRoIiwiZGVmYXVsdFR5cGVTY3JpcHRDb25maWciLCJ0eXBlU2NyaXB0Q29uZmlnIiwidW5kZWZpbmVkIiwidHlwZXNjcmlwdE9wdGlvbnMiLCJnbG9iT3B0aW9ucyIsImFic29sdXRlIiwiZG90IiwiaWdub3JlIiwibm9kaXIiLCJ0c0ZpbGVzIiwidHN4RmlsZXMiLCJhbGxTb3VyY2VGaWxlcyIsImdldFR5cGVTY3JpcHREZWNsYXJhdGlvbkZsYWdzIiwic3RhcnQiLCJyZXN1bHQiLCJhbGwiLCJlbmNvZGluZyIsInJlamVjdCIsImV4aXRDb2RlIiwiaGFzRGVjbGFyYXRpb25zIiwiZXJyb3JPdXRwdXQiLCJzdGRlcnIiLCJzdGRvdXQiLCJlcnJvckxpbmVzIiwic3BsaXQiLCJmaWx0ZXIiLCJsaW5lIiwidHJpbSIsInN0YXJ0c1dpdGgiLCJsZW5ndGgiLCJzbGljZSIsImZvckVhY2giLCJmYWlsIiwic3VjY2VlZCIsImVycm9yIiwibWVzc2FnZSIsIkVycm9yIiwic3RhY2siLCJub3NvcnQiLCJqc0ZpbGVzIiwic291cmNlRmlsZXMiLCJjc3NGaWxlcyIsInBvc3Rjc3NQYXRoIiwicG9zdGNzc09wdGlvbnMiLCJnaWZGaWxlcyIsImpwZ0ZpbGVzIiwicG5nRmlsZXMiLCJzdmdGaWxlcyIsImltYWdlRmlsZXMiLCJ0dGZGaWxlcyIsIm90ZkZpbGVzIiwid29mZkZpbGVzIiwid29mZjJGaWxlcyIsImZvbnRGaWxlcyIsIm1kRmlsZXMiLCJ0cmFuc2Zvcm1Qcm9taXNlcyIsIm1hcCIsImZpbGVSZWxhdGl2ZVRvU291cmNlIiwib3V0cHV0RmlsZSIsInJlcGxhY2UiLCJvdXRwdXREaXJQYXRoIiwicmVjdXJzaXZlIiwic291cmNlQ29kZSIsInN3Y09wdGlvbnMiLCJtb2R1bGUiLCJ0eXBlIiwic291cmNlTWFwcyIsImNvZGUiLCJQcm9taXNlIiwiY29uc29sZSIsImNvcHlFcnJvciJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBQ0QsU0FBUUEsU0FBUyxRQUFPLFlBQVk7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
|
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
import type { InlineConfig } from 'vite';
|
|
2
|
+
export declare const browserGlobalModules: {
|
|
3
|
+
readonly Buffer: readonly ['buffer/index.js', 'Buffer'];
|
|
4
|
+
readonly process: readonly ['process/browser.js', 'default'];
|
|
5
|
+
};
|
|
2
6
|
export interface LexViteOptions {
|
|
3
7
|
readonly analyze?: boolean;
|
|
4
8
|
readonly command: 'build' | 'serve';
|
|
@@ -9,4 +13,6 @@ export interface LexViteOptions {
|
|
|
9
13
|
readonly quiet?: boolean;
|
|
10
14
|
readonly ssr?: boolean;
|
|
11
15
|
}
|
|
16
|
+
export declare const resolveProjectPackage: (packageName: string) => string;
|
|
17
|
+
export declare const getBrowserGlobalInjectOptions: (command: LexViteOptions['command']) => Record<string, unknown>;
|
|
12
18
|
export declare const createLexViteConfig: (options: LexViteOptions) => InlineConfig;
|
package/lib/utils/vite/config.js
CHANGED
|
@@ -1,14 +1,28 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Copyright (c) 2018-Present, Nitrogen Labs, Inc.
|
|
3
3
|
* Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
|
|
4
|
-
*/ import
|
|
5
|
-
import
|
|
4
|
+
*/ import inject from '@rollup/plugin-inject';
|
|
5
|
+
import { transform } from '@swc/core';
|
|
6
6
|
import { existsSync, readFileSync } from 'fs';
|
|
7
|
-
import { extname, resolve } from 'path';
|
|
7
|
+
import { dirname, extname, resolve } from 'path';
|
|
8
8
|
import { mergeConfig } from 'vite';
|
|
9
9
|
import { LexConfig } from '../../LexConfig.js';
|
|
10
10
|
import { generateLexFavicons, getDevAsset } from './assets.js';
|
|
11
11
|
const createInjectPlugin = inject;
|
|
12
|
+
export const browserGlobalModules = {
|
|
13
|
+
Buffer: [
|
|
14
|
+
'buffer/index.js',
|
|
15
|
+
'Buffer'
|
|
16
|
+
],
|
|
17
|
+
process: [
|
|
18
|
+
'process/browser.js',
|
|
19
|
+
'default'
|
|
20
|
+
]
|
|
21
|
+
};
|
|
22
|
+
const browserGlobalInjectExcludes = [
|
|
23
|
+
'**/node_modules/buffer/**',
|
|
24
|
+
'**/node_modules/process/**'
|
|
25
|
+
];
|
|
12
26
|
const contentTypes = {
|
|
13
27
|
'.css': 'text/css',
|
|
14
28
|
'.gif': 'image/gif',
|
|
@@ -55,7 +69,9 @@ const nodePolyfillsPlugin = ()=>({
|
|
|
55
69
|
});
|
|
56
70
|
const graphqlPlugin = ()=>({
|
|
57
71
|
load (id) {
|
|
58
|
-
if (!/\.(gql|graphql)$/.test(id))
|
|
72
|
+
if (!/\.(gql|graphql)$/.test(id)) {
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
59
75
|
const source = JSON.stringify(readFileSync(id, 'utf8'));
|
|
60
76
|
return `import gql from 'graphql-tag'; export default gql(${source});`;
|
|
61
77
|
},
|
|
@@ -63,9 +79,12 @@ const graphqlPlugin = ()=>({
|
|
|
63
79
|
});
|
|
64
80
|
const swcPlugin = (sourcePath)=>({
|
|
65
81
|
enforce: 'pre',
|
|
82
|
+
name: 'lex-swc',
|
|
66
83
|
async transform (source, id) {
|
|
67
84
|
const cleanId = id.split('?')[0];
|
|
68
|
-
if (!cleanId.startsWith(sourcePath) || !/\.[jt]sx?$/.test(cleanId) || /\.(test|spec|integration|e2e)\.[jt]sx?$/.test(cleanId))
|
|
85
|
+
if (!cleanId.startsWith(sourcePath) || !/\.[jt]sx?$/.test(cleanId) || /\.(test|spec|integration|e2e)\.[jt]sx?$/.test(cleanId)) {
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
69
88
|
const swcConfig = LexConfig.getSWCConfigWithReactCompiler();
|
|
70
89
|
const result = await transform(source, {
|
|
71
90
|
...swcConfig,
|
|
@@ -81,15 +100,16 @@ const swcPlugin = (sourcePath)=>({
|
|
|
81
100
|
code: needsReact ? `import React from 'react';\n${result.code}` : result.code,
|
|
82
101
|
map: result.map || null
|
|
83
102
|
};
|
|
84
|
-
}
|
|
85
|
-
name: 'lex-swc'
|
|
103
|
+
}
|
|
86
104
|
});
|
|
87
105
|
const importMetaCompatibilityPlugin = (sourcePath)=>({
|
|
88
106
|
enforce: 'post',
|
|
89
107
|
name: 'lex-import-meta-compatibility',
|
|
90
108
|
transform (source, id) {
|
|
91
109
|
const cleanId = id.split('?')[0];
|
|
92
|
-
if (!cleanId.startsWith(sourcePath) || !source.includes('import.meta.url'))
|
|
110
|
+
if (!cleanId.startsWith(sourcePath) || !source.includes('import.meta.url')) {
|
|
111
|
+
return null;
|
|
112
|
+
}
|
|
93
113
|
const replacement = '(typeof document !== "undefined" && document.currentScript && document.currentScript.src ? new URL(document.currentScript.src, window.location.href).href : (typeof window !== "undefined" ? new URL("", window.location.href).href : ""))';
|
|
94
114
|
return source.replaceAll('import.meta.url', replacement);
|
|
95
115
|
}
|
|
@@ -103,24 +123,32 @@ const assetsDevPlugin = ()=>{
|
|
|
103
123
|
},
|
|
104
124
|
configureServer (server) {
|
|
105
125
|
server.middlewares.use(async (request, response, next)=>{
|
|
106
|
-
if (!request.url)
|
|
126
|
+
if (!request.url) {
|
|
127
|
+
return next();
|
|
128
|
+
}
|
|
107
129
|
const asset = await getDevAsset(LexConfig.config, request.url);
|
|
108
|
-
if (!asset)
|
|
130
|
+
if (!asset) {
|
|
131
|
+
return next();
|
|
132
|
+
}
|
|
109
133
|
response.statusCode = 200;
|
|
110
134
|
response.setHeader('Content-Type', contentTypes[extname(request.url.split('?')[0])] || 'application/octet-stream');
|
|
111
|
-
response.end(asset);
|
|
135
|
+
return response.end(asset);
|
|
112
136
|
});
|
|
113
137
|
},
|
|
114
138
|
name: 'lex-assets-dev',
|
|
115
139
|
transformIndexHtml (html) {
|
|
116
|
-
if (faviconHtml.length === 0)
|
|
140
|
+
if (faviconHtml.length === 0) {
|
|
141
|
+
return html;
|
|
142
|
+
}
|
|
117
143
|
return html.replace('</head>', ` ${faviconHtml.join('\n ')}\n </head>`);
|
|
118
144
|
}
|
|
119
145
|
};
|
|
120
146
|
};
|
|
121
147
|
const analyzerPlugin = (enabled)=>({
|
|
122
148
|
generateBundle (_options, bundle) {
|
|
123
|
-
if (!enabled)
|
|
149
|
+
if (!enabled) {
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
124
152
|
const report = Object.entries(bundle).map(([fileName, output])=>({
|
|
125
153
|
fileName,
|
|
126
154
|
size: output.type === 'asset' ? Buffer.byteLength(typeof output.source === 'string' ? output.source : output.source) : Buffer.byteLength(output.code),
|
|
@@ -135,25 +163,55 @@ const analyzerPlugin = (enabled)=>({
|
|
|
135
163
|
name: 'lex-bundle-analyzer'
|
|
136
164
|
});
|
|
137
165
|
const getLibraryFormats = (libraryTarget)=>{
|
|
138
|
-
if (libraryTarget === 'commonjs' || libraryTarget === 'commonjs2')
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
166
|
+
if (libraryTarget === 'commonjs' || libraryTarget === 'commonjs2') {
|
|
167
|
+
return [
|
|
168
|
+
'cjs'
|
|
169
|
+
];
|
|
170
|
+
}
|
|
171
|
+
if (libraryTarget === 'var' || libraryTarget === 'window') {
|
|
172
|
+
return [
|
|
173
|
+
'iife'
|
|
174
|
+
];
|
|
175
|
+
}
|
|
176
|
+
if (libraryTarget === 'umd') {
|
|
177
|
+
return [
|
|
178
|
+
'umd'
|
|
179
|
+
];
|
|
180
|
+
}
|
|
147
181
|
return [
|
|
148
182
|
'es'
|
|
149
183
|
];
|
|
150
184
|
};
|
|
151
|
-
const
|
|
152
|
-
|
|
153
|
-
|
|
185
|
+
const findNodeModulesPackage = (startPath, packageName)=>{
|
|
186
|
+
let currentPath = resolve(startPath);
|
|
187
|
+
while(true){
|
|
188
|
+
const candidatePath = resolve(currentPath, 'node_modules', packageName);
|
|
189
|
+
if (existsSync(candidatePath)) {
|
|
190
|
+
return candidatePath;
|
|
191
|
+
}
|
|
192
|
+
const parentPath = dirname(currentPath);
|
|
193
|
+
if (parentPath === currentPath) {
|
|
194
|
+
return undefined;
|
|
195
|
+
}
|
|
196
|
+
currentPath = parentPath;
|
|
197
|
+
}
|
|
154
198
|
};
|
|
199
|
+
export const resolveProjectPackage = (packageName)=>findNodeModulesPackage(process.cwd(), packageName) || findNodeModulesPackage(LexConfig.getLexDir(), packageName) || resolve(LexConfig.getLexDir(), 'node_modules', packageName);
|
|
200
|
+
export const getBrowserGlobalInjectOptions = (command)=>({
|
|
201
|
+
...command === 'serve' ? browserGlobalModules : {
|
|
202
|
+
Buffer: [
|
|
203
|
+
resolveProjectPackage('buffer/index.js'),
|
|
204
|
+
'Buffer'
|
|
205
|
+
],
|
|
206
|
+
process: [
|
|
207
|
+
resolveProjectPackage('process/browser.js'),
|
|
208
|
+
'default'
|
|
209
|
+
]
|
|
210
|
+
},
|
|
211
|
+
exclude: browserGlobalInjectExcludes
|
|
212
|
+
});
|
|
155
213
|
export const createLexViteConfig = (options)=>{
|
|
156
|
-
const config = LexConfig
|
|
214
|
+
const { config } = LexConfig;
|
|
157
215
|
const sourcePath = config.sourceFullPath || resolve(process.cwd(), config.sourcePath || './src');
|
|
158
216
|
const outputPath = config.outputFullPath || resolve(process.cwd(), config.outputPath || './lib');
|
|
159
217
|
const entryPath = resolve(sourcePath, options.entry || config.entryJs || 'index.js');
|
|
@@ -180,7 +238,7 @@ export const createLexViteConfig = (options)=>{
|
|
|
180
238
|
}
|
|
181
239
|
}
|
|
182
240
|
},
|
|
183
|
-
sourcemap: config.swc?.sourceMaps
|
|
241
|
+
sourcemap: !!config.swc?.sourceMaps,
|
|
184
242
|
ssr: options.ssr ? entryPath : false,
|
|
185
243
|
target: config.swc?.jsc?.target?.toString() || 'es2020'
|
|
186
244
|
},
|
|
@@ -190,29 +248,23 @@ export const createLexViteConfig = (options)=>{
|
|
|
190
248
|
postcss: resolve(LexConfig.getLexDir(), 'postcss.config.js')
|
|
191
249
|
},
|
|
192
250
|
define: {
|
|
251
|
+
global: 'globalThis',
|
|
193
252
|
'process.env.NODE_ENV': JSON.stringify(options.mode || (options.command === 'build' ? 'production' : 'development'))
|
|
194
253
|
},
|
|
195
254
|
envDir: process.cwd(),
|
|
196
255
|
logLevel: options.quiet ? 'silent' : 'info',
|
|
197
256
|
mode: options.mode || (options.command === 'build' ? 'production' : 'development'),
|
|
257
|
+
optimizeDeps: options.ssr ? undefined : {
|
|
258
|
+
include: [
|
|
259
|
+
'buffer/index.js',
|
|
260
|
+
'process/browser.js'
|
|
261
|
+
]
|
|
262
|
+
},
|
|
198
263
|
plugins: [
|
|
199
264
|
...options.ssr ? [] : [
|
|
200
265
|
emptyCryptoPlugin(),
|
|
201
266
|
nodePolyfillsPlugin(),
|
|
202
|
-
createInjectPlugin(
|
|
203
|
-
Buffer: [
|
|
204
|
-
resolveProjectPackage('buffer/index.js'),
|
|
205
|
-
'Buffer'
|
|
206
|
-
],
|
|
207
|
-
global: [
|
|
208
|
-
resolveProjectPackage('global/window.js'),
|
|
209
|
-
'default'
|
|
210
|
-
],
|
|
211
|
-
process: [
|
|
212
|
-
resolveProjectPackage('process/browser.js'),
|
|
213
|
-
'default'
|
|
214
|
-
]
|
|
215
|
-
})
|
|
267
|
+
createInjectPlugin(getBrowserGlobalInjectOptions(options.command))
|
|
216
268
|
],
|
|
217
269
|
swcPlugin(sourcePath),
|
|
218
270
|
graphqlPlugin(),
|
|
@@ -229,7 +281,7 @@ export const createLexViteConfig = (options)=>{
|
|
|
229
281
|
'core-js': resolveProjectPackage('core-js'),
|
|
230
282
|
global: resolveProjectPackage('global'),
|
|
231
283
|
'graphql-tag': resolveProjectPackage('graphql-tag'),
|
|
232
|
-
randombytes:
|
|
284
|
+
randombytes: resolveProjectPackage('randombytes'),
|
|
233
285
|
react: resolveProjectPackage('react'),
|
|
234
286
|
'react-dom': resolveProjectPackage('react-dom'),
|
|
235
287
|
'regenerator-runtime': resolveProjectPackage('regenerator-runtime')
|
|
@@ -269,4 +321,4 @@ export const createLexViteConfig = (options)=>{
|
|
|
269
321
|
return mergeConfig(viteConfig, config.vite || {});
|
|
270
322
|
};
|
|
271
323
|
|
|
272
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91dGlscy92aXRlL2NvbmZpZy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOC1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHt0cmFuc2Zvcm19IGZyb20gJ0Bzd2MvY29yZSc7XG5pbXBvcnQgaW5qZWN0IGZyb20gJ0Byb2xsdXAvcGx1Z2luLWluamVjdCc7XG5pbXBvcnQge2V4aXN0c1N5bmMsIHJlYWRGaWxlU3luY30gZnJvbSAnZnMnO1xuaW1wb3J0IHtleHRuYW1lLCByZXNvbHZlfSBmcm9tICdwYXRoJztcbmltcG9ydCB7bWVyZ2VDb25maWd9IGZyb20gJ3ZpdGUnO1xuXG5pbXBvcnQge0xleENvbmZpZ30gZnJvbSAnLi4vLi4vTGV4Q29uZmlnLmpzJztcbmltcG9ydCB7Z2VuZXJhdGVMZXhGYXZpY29ucywgZ2V0RGV2QXNzZXR9IGZyb20gJy4vYXNzZXRzLmpzJztcblxuaW1wb3J0IHR5cGUge0lubGluZUNvbmZpZywgUGx1Z2lufSBmcm9tICd2aXRlJztcblxuY29uc3QgY3JlYXRlSW5qZWN0UGx1Z2luID0gaW5qZWN0IGFzIHVua25vd24gYXMgKG9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiBQbHVnaW47XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGV4Vml0ZU9wdGlvbnMge1xuICByZWFkb25seSBhbmFseXplPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgY29tbWFuZDogJ2J1aWxkJyB8ICdzZXJ2ZSc7XG4gIHJlYWRvbmx5IGVudHJ5Pzogc3RyaW5nO1xuICByZWFkb25seSBtb2RlPzogc3RyaW5nO1xuICByZWFkb25seSBvcGVuPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgcG9ydD86IG51bWJlcjtcbiAgcmVhZG9ubHkgcXVpZXQ/OiBib29sZWFuO1xuICByZWFkb25seSBzc3I/OiBib29sZWFuO1xufVxuXG5jb25zdCBjb250ZW50VHlwZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICcuY3NzJzogJ3RleHQvY3NzJyxcbiAgJy5naWYnOiAnaW1hZ2UvZ2lmJyxcbiAgJy5odG1sJzogJ3RleHQvaHRtbCcsXG4gICcuaWNvJzogJ2ltYWdlL3gtaWNvbicsXG4gICcuanBlZyc6ICdpbWFnZS9qcGVnJyxcbiAgJy5qcGcnOiAnaW1hZ2UvanBlZycsXG4gICcuanNvbic6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgJy5wbmcnOiAnaW1hZ2UvcG5nJyxcbiAgJy5zdmcnOiAnaW1hZ2Uvc3ZnK3htbCcsXG4gICcudHRmJzogJ2ZvbnQvdHRmJyxcbiAgJy50eHQnOiAndGV4dC9wbGFpbicsXG4gICcud29mZic6ICdmb250L3dvZmYnLFxuICAnLndvZmYyJzogJ2ZvbnQvd29mZjInXG59O1xuXG5jb25zdCBlbXB0eUNyeXB0b1BsdWdpbiA9ICgpOiBQbHVnaW4gPT4gKHtcbiAgbG9hZChpZCkge1xuICAgIHJldHVybiBpZCA9PT0gJ1xcMGxleC1lbXB0eS1jcnlwdG8nID8gJ2V4cG9ydCBkZWZhdWx0IHt9OyBleHBvcnQgY29uc3Qgd2ViY3J5cHRvID0gdW5kZWZpbmVkOycgOiBudWxsO1xuICB9LFxuICBuYW1lOiAnbGV4LWVtcHR5LWNyeXB0bycsXG4gIHJlc29sdmVJZChpZCkge1xuICAgIHJldHVybiBpZCA9PT0gJ2NyeXB0bycgfHwgaWQgPT09ICdub2RlOmNyeXB0bycgPyAnXFwwbGV4LWVtcHR5LWNyeXB0bycgOiBudWxsO1xuICB9XG59KTtcblxuY29uc3Qgbm9kZVBvbHlmaWxsTW9kdWxlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgYXNzZXJ0OiAnYXNzZXJ0L2J1aWxkL2Fzc2VydC5qcycsXG4gIGJ1ZmZlcjogJ2J1ZmZlci9pbmRleC5qcycsXG4gIGh0dHA6ICdzdHJlYW0taHR0cC9pbmRleC5qcycsXG4gIGh0dHBzOiAnaHR0cHMtYnJvd3NlcmlmeS9pbmRleC5qcycsXG4gIG9zOiAnb3MtYnJvd3NlcmlmeS9icm93c2VyLmpzJyxcbiAgcGF0aDogJ3BhdGgtYnJvd3NlcmlmeS9pbmRleC5qcycsXG4gIHByb2Nlc3M6ICdwcm9jZXNzL2Jyb3dzZXIuanMnLFxuICBzdHJlYW06ICdzdHJlYW0tYnJvd3NlcmlmeS9pbmRleC5qcycsXG4gIHV0aWw6ICd1dGlsL3V0aWwuanMnLFxuICB2bTogJ3ZtLWJyb3dzZXJpZnkvaW5kZXguanMnXG59O1xuXG5jb25zdCBub2RlUG9seWZpbGxzUGx1Z2luID0gKCk6IFBsdWdpbiA9PiAoe1xuICBuYW1lOiAnbGV4LW5vZGUtcG9seWZpbGxzJyxcbiAgcmVzb2x2ZUlkKGlkKSB7XG4gICAgY29uc3QgbW9kdWxlTmFtZSA9IGlkLnN0YXJ0c1dpdGgoJ25vZGU6JykgPyBpZC5zbGljZSg1KSA6IGlkO1xuICAgIGNvbnN0IHJlcGxhY2VtZW50ID0gbm9kZVBvbHlmaWxsTW9kdWxlc1ttb2R1bGVOYW1lXTtcbiAgICByZXR1cm4gcmVwbGFjZW1lbnQgPyByZXNvbHZlUHJvamVjdFBhY2thZ2UocmVwbGFjZW1lbnQpIDogbnVsbDtcbiAgfVxufSk7XG5cbmNvbnN0IGdyYXBocWxQbHVnaW4gPSAoKTogUGx1Z2luID0+ICh7XG4gIGxvYWQoaWQpIHtcbiAgICBpZighL1xcLihncWx8Z3JhcGhxbCkkLy50ZXN0KGlkKSkgcmV0dXJuIG51bGw7XG4gICAgY29uc3Qgc291cmNlID0gSlNPTi5zdHJpbmdpZnkocmVhZEZpbGVTeW5jKGlkLCAndXRmOCcpKTtcbiAgICByZXR1cm4gYGltcG9ydCBncWwgZnJvbSAnZ3JhcGhxbC10YWcnOyBleHBvcnQgZGVmYXVsdCBncWwoJHtzb3VyY2V9KTtgO1xuICB9LFxuICBuYW1lOiAnbGV4LWdyYXBocWwnXG59KTtcblxuY29uc3Qgc3djUGx1Z2luID0gKHNvdXJjZVBhdGg6IHN0cmluZyk6IFBsdWdpbiA9PiAoe1xuICBlbmZvcmNlOiAncHJlJyxcbiAgYXN5bmMgdHJhbnNmb3JtKHNvdXJjZSwgaWQpIHtcbiAgICBjb25zdCBjbGVhbklkID0gaWQuc3BsaXQoJz8nKVswXTtcbiAgICBpZighY2xlYW5JZC5zdGFydHNXaXRoKHNvdXJjZVBhdGgpIHx8ICEvXFwuW2p0XXN4PyQvLnRlc3QoY2xlYW5JZCkgfHwgL1xcLih0ZXN0fHNwZWN8aW50ZWdyYXRpb258ZTJlKVxcLltqdF1zeD8kLy50ZXN0KGNsZWFuSWQpKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IHN3Y0NvbmZpZyA9IExleENvbmZpZy5nZXRTV0NDb25maWdXaXRoUmVhY3RDb21waWxlcigpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRyYW5zZm9ybShzb3VyY2UsIHtcbiAgICAgIC4uLnN3Y0NvbmZpZyxcbiAgICAgIGZpbGVuYW1lOiBjbGVhbklkLFxuICAgICAgbW9kdWxlOiB7Li4uc3djQ29uZmlnPy5tb2R1bGUsIHR5cGU6ICdlczYnfSxcbiAgICAgIHNvdXJjZU1hcHM6IHRydWVcbiAgICB9KTtcblxuICAgIGNvbnN0IG5lZWRzUmVhY3QgPSAvXFxiUmVhY3RcXHMqXFwuLy50ZXN0KHJlc3VsdC5jb2RlKSAmJiAhL2Zyb21cXHMrWydcIl1yZWFjdFsnXCJdLy50ZXN0KHJlc3VsdC5jb2RlKTtcbiAgICByZXR1cm4ge1xuICAgICAgY29kZTogbmVlZHNSZWFjdCA/IGBpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xcbiR7cmVzdWx0LmNvZGV9YCA6IHJlc3VsdC5jb2RlLFxuICAgICAgbWFwOiByZXN1bHQubWFwIHx8IG51bGxcbiAgICB9O1xuICB9LFxuICBuYW1lOiAnbGV4LXN3Yydcbn0pO1xuXG5jb25zdCBpbXBvcnRNZXRhQ29tcGF0aWJpbGl0eVBsdWdpbiA9IChzb3VyY2VQYXRoOiBzdHJpbmcpOiBQbHVnaW4gPT4gKHtcbiAgZW5mb3JjZTogJ3Bvc3QnLFxuICBuYW1lOiAnbGV4LWltcG9ydC1tZXRhLWNvbXBhdGliaWxpdHknLFxuICB0cmFuc2Zvcm0oc291cmNlLCBpZCkge1xuICAgIGNvbnN0IGNsZWFuSWQgPSBpZC5zcGxpdCgnPycpWzBdO1xuICAgIGlmKCFjbGVhbklkLnN0YXJ0c1dpdGgoc291cmNlUGF0aCkgfHwgIXNvdXJjZS5pbmNsdWRlcygnaW1wb3J0Lm1ldGEudXJsJykpIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgcmVwbGFjZW1lbnQgPSAnKHR5cGVvZiBkb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkb2N1bWVudC5jdXJyZW50U2NyaXB0ICYmIGRvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjID8gbmV3IFVSTChkb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYywgd2luZG93LmxvY2F0aW9uLmhyZWYpLmhyZWYgOiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IG5ldyBVUkwoXCJcIiwgd2luZG93LmxvY2F0aW9uLmhyZWYpLmhyZWYgOiBcIlwiKSknO1xuICAgIHJldHVybiBzb3VyY2UucmVwbGFjZUFsbCgnaW1wb3J0Lm1ldGEudXJsJywgcmVwbGFjZW1lbnQpO1xuICB9XG59KTtcblxuY29uc3QgYXNzZXRzRGV2UGx1Z2luID0gKCk6IFBsdWdpbiA9PiB7XG4gIGxldCBmYXZpY29uSHRtbDogc3RyaW5nW10gPSBbXTtcblxuICByZXR1cm4ge1xuICAgIGFzeW5jIGJ1aWxkU3RhcnQoKSB7XG4gICAgICBjb25zdCBnZW5lcmF0ZWRGYXZpY29ucyA9IGF3YWl0IGdlbmVyYXRlTGV4RmF2aWNvbnMoTGV4Q29uZmlnLmNvbmZpZyk7XG4gICAgICBmYXZpY29uSHRtbCA9IGdlbmVyYXRlZEZhdmljb25zPy5odG1sIHx8IFtdO1xuICAgIH0sXG4gICAgY29uZmlndXJlU2VydmVyKHNlcnZlcikge1xuICAgICAgc2VydmVyLm1pZGRsZXdhcmVzLnVzZShhc3luYyAocmVxdWVzdCwgcmVzcG9uc2UsIG5leHQpID0+IHtcbiAgICAgICAgaWYoIXJlcXVlc3QudXJsKSByZXR1cm4gbmV4dCgpO1xuICAgICAgICBjb25zdCBhc3NldCA9IGF3YWl0IGdldERldkFzc2V0KExleENvbmZpZy5jb25maWcsIHJlcXVlc3QudXJsKTtcbiAgICAgICAgaWYoIWFzc2V0KSByZXR1cm4gbmV4dCgpO1xuXG4gICAgICAgIHJlc3BvbnNlLnN0YXR1c0NvZGUgPSAyMDA7XG4gICAgICAgIHJlc3BvbnNlLnNldEhlYWRlcignQ29udGVudC1UeXBlJywgY29udGVudFR5cGVzW2V4dG5hbWUocmVxdWVzdC51cmwuc3BsaXQoJz8nKVswXSldIHx8ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nKTtcbiAgICAgICAgcmVzcG9uc2UuZW5kKGFzc2V0KTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgbmFtZTogJ2xleC1hc3NldHMtZGV2JyxcbiAgICB0cmFuc2Zvcm1JbmRleEh0bWwoaHRtbCkge1xuICAgICAgaWYoZmF2aWNvbkh0bWwubGVuZ3RoID09PSAwKSByZXR1cm4gaHRtbDtcbiAgICAgIHJldHVybiBodG1sLnJlcGxhY2UoJzwvaGVhZD4nLCBgICAgICR7ZmF2aWNvbkh0bWwuam9pbignXFxuICAgICcpfVxcbiAgPC9oZWFkPmApO1xuICAgIH1cbiAgfTtcbn07XG5cbmNvbnN0IGFuYWx5emVyUGx1Z2luID0gKGVuYWJsZWQ6IGJvb2xlYW4pOiBQbHVnaW4gPT4gKHtcbiAgZ2VuZXJhdGVCdW5kbGUoX29wdGlvbnMsIGJ1bmRsZSkge1xuICAgIGlmKCFlbmFibGVkKSByZXR1cm47XG5cbiAgICBjb25zdCByZXBvcnQgPSBPYmplY3QuZW50cmllcyhidW5kbGUpLm1hcCgoW2ZpbGVOYW1lLCBvdXRwdXRdKSA9PiAoe1xuICAgICAgZmlsZU5hbWUsXG4gICAgICBzaXplOiBvdXRwdXQudHlwZSA9PT0gJ2Fzc2V0J1xuICAgICAgICA/IEJ1ZmZlci5ieXRlTGVuZ3RoKHR5cGVvZiBvdXRwdXQuc291cmNlID09PSAnc3RyaW5nJyA/IG91dHB1dC5zb3VyY2UgOiBvdXRwdXQuc291cmNlKVxuICAgICAgICA6IEJ1ZmZlci5ieXRlTGVuZ3RoKG91dHB1dC5jb2RlKSxcbiAgICAgIHR5cGU6IG91dHB1dC50eXBlXG4gICAgfSkpO1xuXG4gICAgdGhpcy5lbWl0RmlsZSh7ZmlsZU5hbWU6ICdidW5kbGUtcmVwb3J0Lmpzb24nLCBzb3VyY2U6IEpTT04uc3RyaW5naWZ5KHJlcG9ydCwgbnVsbCwgMiksIHR5cGU6ICdhc3NldCd9KTtcbiAgfSxcbiAgbmFtZTogJ2xleC1idW5kbGUtYW5hbHl6ZXInXG59KTtcblxuY29uc3QgZ2V0TGlicmFyeUZvcm1hdHMgPSAobGlicmFyeVRhcmdldD86IHN0cmluZyk6IEFycmF5PCdjanMnIHwgJ2VzJyB8ICdpaWZlJyB8ICd1bWQnPiA9PiB7XG4gIGlmKGxpYnJhcnlUYXJnZXQgPT09ICdjb21tb25qcycgfHwgbGlicmFyeVRhcmdldCA9PT0gJ2NvbW1vbmpzMicpIHJldHVybiBbJ2NqcyddO1xuICBpZihsaWJyYXJ5VGFyZ2V0ID09PSAndmFyJyB8fCBsaWJyYXJ5VGFyZ2V0ID09PSAnd2luZG93JykgcmV0dXJuIFsnaWlmZSddO1xuICBpZihsaWJyYXJ5VGFyZ2V0ID09PSAndW1kJykgcmV0dXJuIFsndW1kJ107XG4gIHJldHVybiBbJ2VzJ107XG59O1xuXG5jb25zdCByZXNvbHZlUHJvamVjdFBhY2thZ2UgPSAocGFja2FnZU5hbWU6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IHByb2plY3RQYWNrYWdlID0gcmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnbm9kZV9tb2R1bGVzJywgcGFja2FnZU5hbWUpO1xuICByZXR1cm4gZXhpc3RzU3luYyhwcm9qZWN0UGFja2FnZSkgPyBwcm9qZWN0UGFja2FnZSA6IHJlc29sdmUoTGV4Q29uZmlnLmdldExleERpcigpLCAnbm9kZV9tb2R1bGVzJywgcGFja2FnZU5hbWUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUxleFZpdGVDb25maWcgPSAob3B0aW9uczogTGV4Vml0ZU9wdGlvbnMpOiBJbmxpbmVDb25maWcgPT4ge1xuICBjb25zdCBjb25maWcgPSBMZXhDb25maWcuY29uZmlnO1xuICBjb25zdCBzb3VyY2VQYXRoID0gY29uZmlnLnNvdXJjZUZ1bGxQYXRoIHx8IHJlc29sdmUocHJvY2Vzcy5jd2QoKSwgY29uZmlnLnNvdXJjZVBhdGggfHwgJy4vc3JjJyk7XG4gIGNvbnN0IG91dHB1dFBhdGggPSBjb25maWcub3V0cHV0RnVsbFBhdGggfHwgcmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCBjb25maWcub3V0cHV0UGF0aCB8fCAnLi9saWInKTtcbiAgY29uc3QgZW50cnlQYXRoID0gcmVzb2x2ZShzb3VyY2VQYXRoLCBvcHRpb25zLmVudHJ5IHx8IGNvbmZpZy5lbnRyeUpzIHx8ICdpbmRleC5qcycpO1xuICBjb25zdCBodG1sUGF0aCA9IHJlc29sdmUoc291cmNlUGF0aCwgY29uZmlnLmVudHJ5SFRNTCB8fCAnaW5kZXguaHRtbCcpO1xuICBjb25zdCBoYXNIdG1sRW50cnkgPSBleGlzdHNTeW5jKGh0bWxQYXRoKSAmJiAhb3B0aW9ucy5zc3I7XG4gIGNvbnN0IG91dHB1dEhhc2ggPSBjb25maWcub3V0cHV0SGFzaCB8fCBvcHRpb25zLm1vZGUgPT09ICdwcm9kdWN0aW9uJztcbiAgY29uc3QgZmlsZU5hbWUgPSBjb25maWcub3V0cHV0RmlsZSB8fCAob3V0cHV0SGFzaCA/ICdbbmFtZV0uW2hhc2hdLmpzJyA6ICdbbmFtZV0uanMnKTtcblxuICBjb25zdCB2aXRlQ29uZmlnOiBJbmxpbmVDb25maWcgPSB7XG4gICAgYXBwVHlwZTogaGFzSHRtbEVudHJ5ID8gJ3NwYScgOiAnY3VzdG9tJyxcbiAgICBiYXNlOiAnLycsXG4gICAgYnVpbGQ6IHtcbiAgICAgIGNzc0NvZGVTcGxpdDogdHJ1ZSxcbiAgICAgIGVtcHR5T3V0RGlyOiBmYWxzZSxcbiAgICAgIG1pbmlmeTogb3B0aW9ucy5tb2RlID09PSAncHJvZHVjdGlvbicsXG4gICAgICBvdXREaXI6IG91dHB1dFBhdGgsXG4gICAgICByb2xsZG93bk9wdGlvbnM6IHtcbiAgICAgICAgaW5wdXQ6IGhhc0h0bWxFbnRyeSA/IGh0bWxQYXRoIDogZW50cnlQYXRoLFxuICAgICAgICBvdXRwdXQ6IHtcbiAgICAgICAgICBhc3NldEZpbGVOYW1lczogb3V0cHV0SGFzaCA/ICdhc3NldHMvW25hbWVdLltoYXNoXVtleHRuYW1lXScgOiAnYXNzZXRzL1tuYW1lXVtleHRuYW1lXScsXG4gICAgICAgICAgY2h1bmtGaWxlTmFtZXM6IG91dHB1dEhhc2ggPyAnW25hbWVdLltoYXNoXS5jaHVuay5qcycgOiAnW25hbWVdLmNodW5rLmpzJyxcbiAgICAgICAgICBlbnRyeUZpbGVOYW1lczogZmlsZU5hbWUsXG4gICAgICAgICAgbWFudWFsQ2h1bmtzKGlkKSB7XG4gICAgICAgICAgICByZXR1cm4gaWQuaW5jbHVkZXMoJy9ub2RlX21vZHVsZXMvJykgPyAndmVuZG9ycycgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgc291cmNlbWFwOiBjb25maWcuc3djPy5zb3VyY2VNYXBzID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgc3NyOiBvcHRpb25zLnNzciA/IGVudHJ5UGF0aCA6IGZhbHNlLFxuICAgICAgdGFyZ2V0OiBjb25maWcuc3djPy5qc2M/LnRhcmdldD8udG9TdHJpbmcoKSB8fCAnZXMyMDIwJ1xuICAgIH0sXG4gICAgY2xlYXJTY3JlZW46IGZhbHNlLFxuICAgIGNvbmZpZ0ZpbGU6IGZhbHNlLFxuICAgIGNzczoge1xuICAgICAgcG9zdGNzczogcmVzb2x2ZShMZXhDb25maWcuZ2V0TGV4RGlyKCksICdwb3N0Y3NzLmNvbmZpZy5qcycpXG4gICAgfSxcbiAgICBkZWZpbmU6IHtcbiAgICAgICdwcm9jZXNzLmVudi5OT0RFX0VOVic6IEpTT04uc3RyaW5naWZ5KG9wdGlvbnMubW9kZSB8fCAob3B0aW9ucy5jb21tYW5kID09PSAnYnVpbGQnID8gJ3Byb2R1Y3Rpb24nIDogJ2RldmVsb3BtZW50JykpXG4gICAgfSxcbiAgICBlbnZEaXI6IHByb2Nlc3MuY3dkKCksXG4gICAgbG9nTGV2ZWw6IG9wdGlvbnMucXVpZXQgPyAnc2lsZW50JyA6ICdpbmZvJyxcbiAgICBtb2RlOiBvcHRpb25zLm1vZGUgfHwgKG9wdGlvbnMuY29tbWFuZCA9PT0gJ2J1aWxkJyA/ICdwcm9kdWN0aW9uJyA6ICdkZXZlbG9wbWVudCcpLFxuICAgIHBsdWdpbnM6IFtcbiAgICAgIC4uLihvcHRpb25zLnNzciA/IFtdIDogW1xuICAgICAgICBlbXB0eUNyeXB0b1BsdWdpbigpLFxuICAgICAgICBub2RlUG9seWZpbGxzUGx1Z2luKCksXG4gICAgICAgIGNyZWF0ZUluamVjdFBsdWdpbih7XG4gICAgICAgICAgQnVmZmVyOiBbcmVzb2x2ZVByb2plY3RQYWNrYWdlKCdidWZmZXIvaW5kZXguanMnKSwgJ0J1ZmZlciddLFxuICAgICAgICAgIGdsb2JhbDogW3Jlc29sdmVQcm9qZWN0UGFja2FnZSgnZ2xvYmFsL3dpbmRvdy5qcycpLCAnZGVmYXVsdCddLFxuICAgICAgICAgIHByb2Nlc3M6IFtyZXNvbHZlUHJvamVjdFBhY2thZ2UoJ3Byb2Nlc3MvYnJvd3Nlci5qcycpLCAnZGVmYXVsdCddXG4gICAgICAgIH0pXG4gICAgICBdKSxcbiAgICAgIHN3Y1BsdWdpbihzb3VyY2VQYXRoKSxcbiAgICAgIGdyYXBocWxQbHVnaW4oKSxcbiAgICAgIC4uLihvcHRpb25zLnNzciA/IFtdIDogW2ltcG9ydE1ldGFDb21wYXRpYmlsaXR5UGx1Z2luKHNvdXJjZVBhdGgpLCBhc3NldHNEZXZQbHVnaW4oKSwgYW5hbHl6ZXJQbHVnaW4oQm9vbGVhbihvcHRpb25zLmFuYWx5emUpKV0pXG4gICAgXSxcbiAgICBwdWJsaWNEaXI6IGZhbHNlLFxuICAgIHJlc29sdmU6IHtcbiAgICAgIGFsaWFzOiB7XG4gICAgICAgIEJ1ZmZlcjogcmVzb2x2ZVByb2plY3RQYWNrYWdlKCdidWZmZXInKSxcbiAgICAgICAgJ2NvcmUtanMnOiByZXNvbHZlUHJvamVjdFBhY2thZ2UoJ2NvcmUtanMnKSxcbiAgICAgICAgZ2xvYmFsOiByZXNvbHZlUHJvamVjdFBhY2thZ2UoJ2dsb2JhbCcpLFxuICAgICAgICAnZ3JhcGhxbC10YWcnOiByZXNvbHZlUHJvamVjdFBhY2thZ2UoJ2dyYXBocWwtdGFnJyksXG4gICAgICAgIHJhbmRvbWJ5dGVzOiByZXNvbHZlKExleENvbmZpZy5nZXRMZXhEaXIoKSwgJ25vZGVfbW9kdWxlcy9yYW5kb21ieXRlcycpLFxuICAgICAgICByZWFjdDogcmVzb2x2ZVByb2plY3RQYWNrYWdlKCdyZWFjdCcpLFxuICAgICAgICAncmVhY3QtZG9tJzogcmVzb2x2ZVByb2plY3RQYWNrYWdlKCdyZWFjdC1kb20nKSxcbiAgICAgICAgJ3JlZ2VuZXJhdG9yLXJ1bnRpbWUnOiByZXNvbHZlUHJvamVjdFBhY2thZ2UoJ3JlZ2VuZXJhdG9yLXJ1bnRpbWUnKVxuICAgICAgfSxcbiAgICAgIGV4dGVuc2lvbnM6IFsnLm1qcycsICcuanMnLCAnLnRzJywgJy50c3gnLCAnLmpzeCcsICcuanNvbicsICcuZ3FsJywgJy5ncmFwaHFsJ10sXG4gICAgICBwcmVzZXJ2ZVN5bWxpbmtzOiBmYWxzZSxcbiAgICAgIHRzY29uZmlnUGF0aHM6IHRydWVcbiAgICB9LFxuICAgIHJvb3Q6IHNvdXJjZVBhdGgsXG4gICAgc2VydmVyOiB7XG4gICAgICBobXI6IGZhbHNlLFxuICAgICAgb3Blbjogb3B0aW9ucy5vcGVuLFxuICAgICAgcG9ydDogb3B0aW9ucy5wb3J0LFxuICAgICAgc3RyaWN0UG9ydDogdHJ1ZVxuICAgIH1cbiAgfTtcblxuICBpZighaGFzSHRtbEVudHJ5ICYmIGNvbmZpZy5saWJyYXJ5TmFtZSAmJiAhb3B0aW9ucy5zc3IpIHtcbiAgICB2aXRlQ29uZmlnLmJ1aWxkID0ge1xuICAgICAgLi4udml0ZUNvbmZpZy5idWlsZCxcbiAgICAgIGxpYjoge1xuICAgICAgICBlbnRyeTogZW50cnlQYXRoLFxuICAgICAgICBmaWxlTmFtZTogKCkgPT4gY29uZmlnLm91dHB1dEZpbGUgfHwgJ2luZGV4LmpzJyxcbiAgICAgICAgZm9ybWF0czogZ2V0TGlicmFyeUZvcm1hdHMoY29uZmlnLmxpYnJhcnlUYXJnZXQpLFxuICAgICAgICBuYW1lOiBjb25maWcubGlicmFyeU5hbWVcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIG1lcmdlQ29uZmlnKHZpdGVDb25maWcsIGNvbmZpZy52aXRlIHx8IHt9KSBhcyBJbmxpbmVDb25maWc7XG59O1xuIl0sIm5hbWVzIjpbInRyYW5zZm9ybSIsImluamVjdCIsImV4aXN0c1N5bmMiLCJyZWFkRmlsZVN5bmMiLCJleHRuYW1lIiwicmVzb2x2ZSIsIm1lcmdlQ29uZmlnIiwiTGV4Q29uZmlnIiwiZ2VuZXJhdGVMZXhGYXZpY29ucyIsImdldERldkFzc2V0IiwiY3JlYXRlSW5qZWN0UGx1Z2luIiwiY29udGVudFR5cGVzIiwiZW1wdHlDcnlwdG9QbHVnaW4iLCJsb2FkIiwiaWQiLCJuYW1lIiwicmVzb2x2ZUlkIiwibm9kZVBvbHlmaWxsTW9kdWxlcyIsImFzc2VydCIsImJ1ZmZlciIsImh0dHAiLCJodHRwcyIsIm9zIiwicGF0aCIsInByb2Nlc3MiLCJzdHJlYW0iLCJ1dGlsIiwidm0iLCJub2RlUG9seWZpbGxzUGx1Z2luIiwibW9kdWxlTmFtZSIsInN0YXJ0c1dpdGgiLCJzbGljZSIsInJlcGxhY2VtZW50IiwicmVzb2x2ZVByb2plY3RQYWNrYWdlIiwiZ3JhcGhxbFBsdWdpbiIsInRlc3QiLCJzb3VyY2UiLCJKU09OIiwic3RyaW5naWZ5Iiwic3djUGx1Z2luIiwic291cmNlUGF0aCIsImVuZm9yY2UiLCJjbGVhbklkIiwic3BsaXQiLCJzd2NDb25maWciLCJnZXRTV0NDb25maWdXaXRoUmVhY3RDb21waWxlciIsInJlc3VsdCIsImZpbGVuYW1lIiwibW9kdWxlIiwidHlwZSIsInNvdXJjZU1hcHMiLCJuZWVkc1JlYWN0IiwiY29kZSIsIm1hcCIsImltcG9ydE1ldGFDb21wYXRpYmlsaXR5UGx1Z2luIiwiaW5jbHVkZXMiLCJyZXBsYWNlQWxsIiwiYXNzZXRzRGV2UGx1Z2luIiwiZmF2aWNvbkh0bWwiLCJidWlsZFN0YXJ0IiwiZ2VuZXJhdGVkRmF2aWNvbnMiLCJjb25maWciLCJodG1sIiwiY29uZmlndXJlU2VydmVyIiwic2VydmVyIiwibWlkZGxld2FyZXMiLCJ1c2UiLCJyZXF1ZXN0IiwicmVzcG9uc2UiLCJuZXh0IiwidXJsIiwiYXNzZXQiLCJzdGF0dXNDb2RlIiwic2V0SGVhZGVyIiwiZW5kIiwidHJhbnNmb3JtSW5kZXhIdG1sIiwibGVuZ3RoIiwicmVwbGFjZSIsImpvaW4iLCJhbmFseXplclBsdWdpbiIsImVuYWJsZWQiLCJnZW5lcmF0ZUJ1bmRsZSIsIl9vcHRpb25zIiwiYnVuZGxlIiwicmVwb3J0IiwiT2JqZWN0IiwiZW50cmllcyIsImZpbGVOYW1lIiwib3V0cHV0Iiwic2l6ZSIsIkJ1ZmZlciIsImJ5dGVMZW5ndGgiLCJlbWl0RmlsZSIsImdldExpYnJhcnlGb3JtYXRzIiwibGlicmFyeVRhcmdldCIsInBhY2thZ2VOYW1lIiwicHJvamVjdFBhY2thZ2UiLCJjd2QiLCJnZXRMZXhEaXIiLCJjcmVhdGVMZXhWaXRlQ29uZmlnIiwib3B0aW9ucyIsInNvdXJjZUZ1bGxQYXRoIiwib3V0cHV0UGF0aCIsIm91dHB1dEZ1bGxQYXRoIiwiZW50cnlQYXRoIiwiZW50cnkiLCJlbnRyeUpzIiwiaHRtbFBhdGgiLCJlbnRyeUhUTUwiLCJoYXNIdG1sRW50cnkiLCJzc3IiLCJvdXRwdXRIYXNoIiwibW9kZSIsIm91dHB1dEZpbGUiLCJ2aXRlQ29uZmlnIiwiYXBwVHlwZSIsImJhc2UiLCJidWlsZCIsImNzc0NvZGVTcGxpdCIsImVtcHR5T3V0RGlyIiwibWluaWZ5Iiwib3V0RGlyIiwicm9sbGRvd25PcHRpb25zIiwiaW5wdXQiLCJhc3NldEZpbGVOYW1lcyIsImNodW5rRmlsZU5hbWVzIiwiZW50cnlGaWxlTmFtZXMiLCJtYW51YWxDaHVua3MiLCJ1bmRlZmluZWQiLCJzb3VyY2VtYXAiLCJzd2MiLCJ0YXJnZXQiLCJqc2MiLCJ0b1N0cmluZyIsImNsZWFyU2NyZWVuIiwiY29uZmlnRmlsZSIsImNzcyIsInBvc3Rjc3MiLCJkZWZpbmUiLCJjb21tYW5kIiwiZW52RGlyIiwibG9nTGV2ZWwiLCJxdWlldCIsInBsdWdpbnMiLCJnbG9iYWwiLCJCb29sZWFuIiwiYW5hbHl6ZSIsInB1YmxpY0RpciIsImFsaWFzIiwicmFuZG9tYnl0ZXMiLCJyZWFjdCIsImV4dGVuc2lvbnMiLCJwcmVzZXJ2ZVN5bWxpbmtzIiwidHNjb25maWdQYXRocyIsInJvb3QiLCJobXIiLCJvcGVuIiwicG9ydCIsInN0cmljdFBvcnQiLCJsaWJyYXJ5TmFtZSIsImxpYiIsImZvcm1hdHMiLCJ2aXRlIl0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FDRCxTQUFRQSxTQUFTLFFBQU8sWUFBWTtBQUNwQyxPQUFPQyxZQUFZLHdCQUF3QjtBQUMzQyxTQUFRQyxVQUFVLEVBQUVDLFlBQVksUUFBTyxLQUFLO0FBQzVDLFNBQVFDLE9BQU8sRUFBRUMsT0FBTyxRQUFPLE9BQU87QUFDdEMsU0FBUUMsV0FBVyxRQUFPLE9BQU87QUFFakMsU0FBUUMsU0FBUyxRQUFPLHFCQUFxQjtBQUM3QyxTQUFRQyxtQkFBbUIsRUFBRUMsV0FBVyxRQUFPLGNBQWM7QUFJN0QsTUFBTUMscUJBQXFCVDtBQWEzQixNQUFNVSxlQUF1QztJQUMzQyxRQUFRO0lBQ1IsUUFBUTtJQUNSLFNBQVM7SUFDVCxRQUFRO0lBQ1IsU0FBUztJQUNULFFBQVE7SUFDUixTQUFTO0lBQ1QsUUFBUTtJQUNSLFFBQVE7SUFDUixRQUFRO0lBQ1IsUUFBUTtJQUNSLFNBQVM7SUFDVCxVQUFVO0FBQ1o7QUFFQSxNQUFNQyxvQkFBb0IsSUFBZSxDQUFBO1FBQ3ZDQyxNQUFLQyxFQUFFO1lBQ0wsT0FBT0EsT0FBTyx1QkFBdUIsMkRBQTJEO1FBQ2xHO1FBQ0FDLE1BQU07UUFDTkMsV0FBVUYsRUFBRTtZQUNWLE9BQU9BLE9BQU8sWUFBWUEsT0FBTyxnQkFBZ0IsdUJBQXVCO1FBQzFFO0lB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
|
|
324
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91dGlscy92aXRlL2NvbmZpZy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOC1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IGluamVjdCBmcm9tICdAcm9sbHVwL3BsdWdpbi1pbmplY3QnO1xuaW1wb3J0IHt0cmFuc2Zvcm19IGZyb20gJ0Bzd2MvY29yZSc7XG5pbXBvcnQge2V4aXN0c1N5bmMsIHJlYWRGaWxlU3luY30gZnJvbSAnZnMnO1xuaW1wb3J0IHtkaXJuYW1lLCBleHRuYW1lLCByZXNvbHZlfSBmcm9tICdwYXRoJztcbmltcG9ydCB7bWVyZ2VDb25maWd9IGZyb20gJ3ZpdGUnO1xuXG5pbXBvcnQge0xleENvbmZpZ30gZnJvbSAnLi4vLi4vTGV4Q29uZmlnLmpzJztcbmltcG9ydCB7Z2VuZXJhdGVMZXhGYXZpY29ucywgZ2V0RGV2QXNzZXR9IGZyb20gJy4vYXNzZXRzLmpzJztcblxuaW1wb3J0IHR5cGUge0lubGluZUNvbmZpZywgUGx1Z2lufSBmcm9tICd2aXRlJztcblxuY29uc3QgY3JlYXRlSW5qZWN0UGx1Z2luID0gaW5qZWN0IGFzIHVua25vd24gYXMgKG9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiBQbHVnaW47XG5cbmV4cG9ydCBjb25zdCBicm93c2VyR2xvYmFsTW9kdWxlcyA9IHtcbiAgQnVmZmVyOiBbJ2J1ZmZlci9pbmRleC5qcycsICdCdWZmZXInXSxcbiAgcHJvY2VzczogWydwcm9jZXNzL2Jyb3dzZXIuanMnLCAnZGVmYXVsdCddXG59IGFzIGNvbnN0O1xuXG5jb25zdCBicm93c2VyR2xvYmFsSW5qZWN0RXhjbHVkZXMgPSBbXG4gICcqKi9ub2RlX21vZHVsZXMvYnVmZmVyLyoqJyxcbiAgJyoqL25vZGVfbW9kdWxlcy9wcm9jZXNzLyoqJ1xuXTtcblxuZXhwb3J0IGludGVyZmFjZSBMZXhWaXRlT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGFuYWx5emU/OiBib29sZWFuO1xuICByZWFkb25seSBjb21tYW5kOiAnYnVpbGQnIHwgJ3NlcnZlJztcbiAgcmVhZG9ubHkgZW50cnk/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IG1vZGU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IG9wZW4/OiBib29sZWFuO1xuICByZWFkb25seSBwb3J0PzogbnVtYmVyO1xuICByZWFkb25seSBxdWlldD86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHNzcj86IGJvb2xlYW47XG59XG5cbmNvbnN0IGNvbnRlbnRUeXBlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgJy5jc3MnOiAndGV4dC9jc3MnLFxuICAnLmdpZic6ICdpbWFnZS9naWYnLFxuICAnLmh0bWwnOiAndGV4dC9odG1sJyxcbiAgJy5pY28nOiAnaW1hZ2UveC1pY29uJyxcbiAgJy5qcGVnJzogJ2ltYWdlL2pwZWcnLFxuICAnLmpwZyc6ICdpbWFnZS9qcGVnJyxcbiAgJy5qc29uJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAnLnBuZyc6ICdpbWFnZS9wbmcnLFxuICAnLnN2Zyc6ICdpbWFnZS9zdmcreG1sJyxcbiAgJy50dGYnOiAnZm9udC90dGYnLFxuICAnLnR4dCc6ICd0ZXh0L3BsYWluJyxcbiAgJy53b2ZmJzogJ2ZvbnQvd29mZicsXG4gICcud29mZjInOiAnZm9udC93b2ZmMidcbn07XG5cbmNvbnN0IGVtcHR5Q3J5cHRvUGx1Z2luID0gKCk6IFBsdWdpbiA9PiAoe1xuICBsb2FkKGlkKSB7XG4gICAgcmV0dXJuIGlkID09PSAnXFwwbGV4LWVtcHR5LWNyeXB0bycgPyAnZXhwb3J0IGRlZmF1bHQge307IGV4cG9ydCBjb25zdCB3ZWJjcnlwdG8gPSB1bmRlZmluZWQ7JyA6IG51bGw7XG4gIH0sXG4gIG5hbWU6ICdsZXgtZW1wdHktY3J5cHRvJyxcbiAgcmVzb2x2ZUlkKGlkKSB7XG4gICAgcmV0dXJuIGlkID09PSAnY3J5cHRvJyB8fCBpZCA9PT0gJ25vZGU6Y3J5cHRvJyA/ICdcXDBsZXgtZW1wdHktY3J5cHRvJyA6IG51bGw7XG4gIH1cbn0pO1xuXG5jb25zdCBub2RlUG9seWZpbGxNb2R1bGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICBhc3NlcnQ6ICdhc3NlcnQvYnVpbGQvYXNzZXJ0LmpzJyxcbiAgYnVmZmVyOiAnYnVmZmVyL2luZGV4LmpzJyxcbiAgaHR0cDogJ3N0cmVhbS1odHRwL2luZGV4LmpzJyxcbiAgaHR0cHM6ICdodHRwcy1icm93c2VyaWZ5L2luZGV4LmpzJyxcbiAgb3M6ICdvcy1icm93c2VyaWZ5L2Jyb3dzZXIuanMnLFxuICBwYXRoOiAncGF0aC1icm93c2VyaWZ5L2luZGV4LmpzJyxcbiAgcHJvY2VzczogJ3Byb2Nlc3MvYnJvd3Nlci5qcycsXG4gIHN0cmVhbTogJ3N0cmVhbS1icm93c2VyaWZ5L2luZGV4LmpzJyxcbiAgdXRpbDogJ3V0aWwvdXRpbC5qcycsXG4gIHZtOiAndm0tYnJvd3NlcmlmeS9pbmRleC5qcydcbn07XG5cbmNvbnN0IG5vZGVQb2x5ZmlsbHNQbHVnaW4gPSAoKTogUGx1Z2luID0+ICh7XG4gIG5hbWU6ICdsZXgtbm9kZS1wb2x5ZmlsbHMnLFxuICByZXNvbHZlSWQoaWQpIHtcbiAgICBjb25zdCBtb2R1bGVOYW1lID0gaWQuc3RhcnRzV2l0aCgnbm9kZTonKSA/IGlkLnNsaWNlKDUpIDogaWQ7XG4gICAgY29uc3QgcmVwbGFjZW1lbnQgPSBub2RlUG9seWZpbGxNb2R1bGVzW21vZHVsZU5hbWVdO1xuICAgIHJldHVybiByZXBsYWNlbWVudCA/IHJlc29sdmVQcm9qZWN0UGFja2FnZShyZXBsYWNlbWVudCkgOiBudWxsO1xuICB9XG59KTtcblxuY29uc3QgZ3JhcGhxbFBsdWdpbiA9ICgpOiBQbHVnaW4gPT4gKHtcbiAgbG9hZChpZCkge1xuICAgIGlmKCEvXFwuKGdxbHxncmFwaHFsKSQvLnRlc3QoaWQpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3Qgc291cmNlID0gSlNPTi5zdHJpbmdpZnkocmVhZEZpbGVTeW5jKGlkLCAndXRmOCcpKTtcbiAgICByZXR1cm4gYGltcG9ydCBncWwgZnJvbSAnZ3JhcGhxbC10YWcnOyBleHBvcnQgZGVmYXVsdCBncWwoJHtzb3VyY2V9KTtgO1xuICB9LFxuICBuYW1lOiAnbGV4LWdyYXBocWwnXG59KTtcblxuY29uc3Qgc3djUGx1Z2luID0gKHNvdXJjZVBhdGg6IHN0cmluZyk6IFBsdWdpbiA9PiAoe1xuICBlbmZvcmNlOiAncHJlJyxcbiAgbmFtZTogJ2xleC1zd2MnLFxuICBhc3luYyB0cmFuc2Zvcm0oc291cmNlLCBpZCkge1xuICAgIGNvbnN0IGNsZWFuSWQgPSBpZC5zcGxpdCgnPycpWzBdO1xuICAgIGlmKCFjbGVhbklkLnN0YXJ0c1dpdGgoc291cmNlUGF0aCkgfHwgIS9cXC5banRdc3g/JC8udGVzdChjbGVhbklkKSB8fCAvXFwuKHRlc3R8c3BlY3xpbnRlZ3JhdGlvbnxlMmUpXFwuW2p0XXN4PyQvLnRlc3QoY2xlYW5JZCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHN3Y0NvbmZpZyA9IExleENvbmZpZy5nZXRTV0NDb25maWdXaXRoUmVhY3RDb21waWxlcigpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRyYW5zZm9ybShzb3VyY2UsIHtcbiAgICAgIC4uLnN3Y0NvbmZpZyxcbiAgICAgIGZpbGVuYW1lOiBjbGVhbklkLFxuICAgICAgbW9kdWxlOiB7Li4uc3djQ29uZmlnPy5tb2R1bGUsIHR5cGU6ICdlczYnfSxcbiAgICAgIHNvdXJjZU1hcHM6IHRydWVcbiAgICB9KTtcblxuICAgIGNvbnN0IG5lZWRzUmVhY3QgPSAvXFxiUmVhY3RcXHMqXFwuLy50ZXN0KHJlc3VsdC5jb2RlKSAmJiAhL2Zyb21cXHMrWydcIl1yZWFjdFsnXCJdLy50ZXN0KHJlc3VsdC5jb2RlKTtcbiAgICByZXR1cm4ge1xuICAgICAgY29kZTogbmVlZHNSZWFjdCA/IGBpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xcbiR7cmVzdWx0LmNvZGV9YCA6IHJlc3VsdC5jb2RlLFxuICAgICAgbWFwOiByZXN1bHQubWFwIHx8IG51bGxcbiAgICB9O1xuICB9XG59KTtcblxuY29uc3QgaW1wb3J0TWV0YUNvbXBhdGliaWxpdHlQbHVnaW4gPSAoc291cmNlUGF0aDogc3RyaW5nKTogUGx1Z2luID0+ICh7XG4gIGVuZm9yY2U6ICdwb3N0JyxcbiAgbmFtZTogJ2xleC1pbXBvcnQtbWV0YS1jb21wYXRpYmlsaXR5JyxcbiAgdHJhbnNmb3JtKHNvdXJjZSwgaWQpIHtcbiAgICBjb25zdCBjbGVhbklkID0gaWQuc3BsaXQoJz8nKVswXTtcbiAgICBpZighY2xlYW5JZC5zdGFydHNXaXRoKHNvdXJjZVBhdGgpIHx8ICFzb3VyY2UuaW5jbHVkZXMoJ2ltcG9ydC5tZXRhLnVybCcpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCByZXBsYWNlbWVudCA9ICcodHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIGRvY3VtZW50LmN1cnJlbnRTY3JpcHQgJiYgZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmMgPyBuZXcgVVJMKGRvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjLCB3aW5kb3cubG9jYXRpb24uaHJlZikuaHJlZiA6ICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gbmV3IFVSTChcIlwiLCB3aW5kb3cubG9jYXRpb24uaHJlZikuaHJlZiA6IFwiXCIpKSc7XG4gICAgcmV0dXJuIHNvdXJjZS5yZXBsYWNlQWxsKCdpbXBvcnQubWV0YS51cmwnLCByZXBsYWNlbWVudCk7XG4gIH1cbn0pO1xuXG5jb25zdCBhc3NldHNEZXZQbHVnaW4gPSAoKTogUGx1Z2luID0+IHtcbiAgbGV0IGZhdmljb25IdG1sOiBzdHJpbmdbXSA9IFtdO1xuXG4gIHJldHVybiB7XG4gICAgYXN5bmMgYnVpbGRTdGFydCgpIHtcbiAgICAgIGNvbnN0IGdlbmVyYXRlZEZhdmljb25zID0gYXdhaXQgZ2VuZXJhdGVMZXhGYXZpY29ucyhMZXhDb25maWcuY29uZmlnKTtcbiAgICAgIGZhdmljb25IdG1sID0gZ2VuZXJhdGVkRmF2aWNvbnM/Lmh0bWwgfHwgW107XG4gICAgfSxcbiAgICBjb25maWd1cmVTZXJ2ZXIoc2VydmVyKSB7XG4gICAgICBzZXJ2ZXIubWlkZGxld2FyZXMudXNlKGFzeW5jIChyZXF1ZXN0LCByZXNwb25zZSwgbmV4dCkgPT4ge1xuICAgICAgICBpZighcmVxdWVzdC51cmwpIHtcbiAgICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFzc2V0ID0gYXdhaXQgZ2V0RGV2QXNzZXQoTGV4Q29uZmlnLmNvbmZpZywgcmVxdWVzdC51cmwpO1xuICAgICAgICBpZighYXNzZXQpIHtcbiAgICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzcG9uc2Uuc3RhdHVzQ29kZSA9IDIwMDtcbiAgICAgICAgcmVzcG9uc2Uuc2V0SGVhZGVyKCdDb250ZW50LVR5cGUnLCBjb250ZW50VHlwZXNbZXh0bmFtZShyZXF1ZXN0LnVybC5zcGxpdCgnPycpWzBdKV0gfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScpO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2UuZW5kKGFzc2V0KTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgbmFtZTogJ2xleC1hc3NldHMtZGV2JyxcbiAgICB0cmFuc2Zvcm1JbmRleEh0bWwoaHRtbCkge1xuICAgICAgaWYoZmF2aWNvbkh0bWwubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBodG1sO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGh0bWwucmVwbGFjZSgnPC9oZWFkPicsIGAgICAgJHtmYXZpY29uSHRtbC5qb2luKCdcXG4gICAgJyl9XFxuICA8L2hlYWQ+YCk7XG4gICAgfVxuICB9O1xufTtcblxuY29uc3QgYW5hbHl6ZXJQbHVnaW4gPSAoZW5hYmxlZDogYm9vbGVhbik6IFBsdWdpbiA9PiAoe1xuICBnZW5lcmF0ZUJ1bmRsZShfb3B0aW9ucywgYnVuZGxlKSB7XG4gICAgaWYoIWVuYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByZXBvcnQgPSBPYmplY3QuZW50cmllcyhidW5kbGUpLm1hcCgoW2ZpbGVOYW1lLCBvdXRwdXRdKSA9PiAoe1xuICAgICAgZmlsZU5hbWUsXG4gICAgICBzaXplOiBvdXRwdXQudHlwZSA9PT0gJ2Fzc2V0J1xuICAgICAgICA/IEJ1ZmZlci5ieXRlTGVuZ3RoKHR5cGVvZiBvdXRwdXQuc291cmNlID09PSAnc3RyaW5nJyA/IG91dHB1dC5zb3VyY2UgOiBvdXRwdXQuc291cmNlKVxuICAgICAgICA6IEJ1ZmZlci5ieXRlTGVuZ3RoKG91dHB1dC5jb2RlKSxcbiAgICAgIHR5cGU6IG91dHB1dC50eXBlXG4gICAgfSkpO1xuXG4gICAgdGhpcy5lbWl0RmlsZSh7ZmlsZU5hbWU6ICdidW5kbGUtcmVwb3J0Lmpzb24nLCBzb3VyY2U6IEpTT04uc3RyaW5naWZ5KHJlcG9ydCwgbnVsbCwgMiksIHR5cGU6ICdhc3NldCd9KTtcbiAgfSxcbiAgbmFtZTogJ2xleC1idW5kbGUtYW5hbHl6ZXInXG59KTtcblxuY29uc3QgZ2V0TGlicmFyeUZvcm1hdHMgPSAobGlicmFyeVRhcmdldD86IHN0cmluZyk6IEFycmF5PCdjanMnIHwgJ2VzJyB8ICdpaWZlJyB8ICd1bWQnPiA9PiB7XG4gIGlmKGxpYnJhcnlUYXJnZXQgPT09ICdjb21tb25qcycgfHwgbGlicmFyeVRhcmdldCA9PT0gJ2NvbW1vbmpzMicpIHtcbiAgICByZXR1cm4gWydjanMnXTtcbiAgfVxuICBpZihsaWJyYXJ5VGFyZ2V0ID09PSAndmFyJyB8fCBsaWJyYXJ5VGFyZ2V0ID09PSAnd2luZG93Jykge1xuICAgIHJldHVybiBbJ2lpZmUnXTtcbiAgfVxuICBpZihsaWJyYXJ5VGFyZ2V0ID09PSAndW1kJykge1xuICAgIHJldHVybiBbJ3VtZCddO1xuICB9XG4gIHJldHVybiBbJ2VzJ107XG59O1xuXG5jb25zdCBmaW5kTm9kZU1vZHVsZXNQYWNrYWdlID0gKHN0YXJ0UGF0aDogc3RyaW5nLCBwYWNrYWdlTmFtZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcbiAgbGV0IGN1cnJlbnRQYXRoID0gcmVzb2x2ZShzdGFydFBhdGgpO1xuXG4gIHdoaWxlKHRydWUpIHtcbiAgICBjb25zdCBjYW5kaWRhdGVQYXRoID0gcmVzb2x2ZShjdXJyZW50UGF0aCwgJ25vZGVfbW9kdWxlcycsIHBhY2thZ2VOYW1lKTtcbiAgICBpZihleGlzdHNTeW5jKGNhbmRpZGF0ZVBhdGgpKSB7XG4gICAgICByZXR1cm4gY2FuZGlkYXRlUGF0aDtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJlbnRQYXRoID0gZGlybmFtZShjdXJyZW50UGF0aCk7XG4gICAgaWYocGFyZW50UGF0aCA9PT0gY3VycmVudFBhdGgpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGN1cnJlbnRQYXRoID0gcGFyZW50UGF0aDtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHJlc29sdmVQcm9qZWN0UGFja2FnZSA9IChwYWNrYWdlTmFtZTogc3RyaW5nKTogc3RyaW5nID0+IGZpbmROb2RlTW9kdWxlc1BhY2thZ2UocHJvY2Vzcy5jd2QoKSwgcGFja2FnZU5hbWUpXG4gICAgfHwgZmluZE5vZGVNb2R1bGVzUGFja2FnZShMZXhDb25maWcuZ2V0TGV4RGlyKCksIHBhY2thZ2VOYW1lKVxuICAgIHx8IHJlc29sdmUoTGV4Q29uZmlnLmdldExleERpcigpLCAnbm9kZV9tb2R1bGVzJywgcGFja2FnZU5hbWUpO1xuXG5leHBvcnQgY29uc3QgZ2V0QnJvd3Nlckdsb2JhbEluamVjdE9wdGlvbnMgPSAoY29tbWFuZDogTGV4Vml0ZU9wdGlvbnNbJ2NvbW1hbmQnXSk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0+ICh7XG4gIC4uLihjb21tYW5kID09PSAnc2VydmUnID8gYnJvd3Nlckdsb2JhbE1vZHVsZXMgOiB7XG4gICAgQnVmZmVyOiBbcmVzb2x2ZVByb2plY3RQYWNrYWdlKCdidWZmZXIvaW5kZXguanMnKSwgJ0J1ZmZlciddLFxuICAgIHByb2Nlc3M6IFtyZXNvbHZlUHJvamVjdFBhY2thZ2UoJ3Byb2Nlc3MvYnJvd3Nlci5qcycpLCAnZGVmYXVsdCddXG4gIH0pLFxuICBleGNsdWRlOiBicm93c2VyR2xvYmFsSW5qZWN0RXhjbHVkZXNcbn0pO1xuXG5leHBvcnQgY29uc3QgY3JlYXRlTGV4Vml0ZUNvbmZpZyA9IChvcHRpb25zOiBMZXhWaXRlT3B0aW9ucyk6IElubGluZUNvbmZpZyA9PiB7XG4gIGNvbnN0IHtjb25maWd9ID0gTGV4Q29uZmlnO1xuICBjb25zdCBzb3VyY2VQYXRoID0gY29uZmlnLnNvdXJjZUZ1bGxQYXRoIHx8IHJlc29sdmUocHJvY2Vzcy5jd2QoKSwgY29uZmlnLnNvdXJjZVBhdGggfHwgJy4vc3JjJyk7XG4gIGNvbnN0IG91dHB1dFBhdGggPSBjb25maWcub3V0cHV0RnVsbFBhdGggfHwgcmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCBjb25maWcub3V0cHV0UGF0aCB8fCAnLi9saWInKTtcbiAgY29uc3QgZW50cnlQYXRoID0gcmVzb2x2ZShzb3VyY2VQYXRoLCBvcHRpb25zLmVudHJ5IHx8IGNvbmZpZy5lbnRyeUpzIHx8ICdpbmRleC5qcycpO1xuICBjb25zdCBodG1sUGF0aCA9IHJlc29sdmUoc291cmNlUGF0aCwgY29uZmlnLmVudHJ5SFRNTCB8fCAnaW5kZXguaHRtbCcpO1xuICBjb25zdCBoYXNIdG1sRW50cnkgPSBleGlzdHNTeW5jKGh0bWxQYXRoKSAmJiAhb3B0aW9ucy5zc3I7XG4gIGNvbnN0IG91dHB1dEhhc2ggPSBjb25maWcub3V0cHV0SGFzaCB8fCBvcHRpb25zLm1vZGUgPT09ICdwcm9kdWN0aW9uJztcbiAgY29uc3QgZmlsZU5hbWUgPSBjb25maWcub3V0cHV0RmlsZSB8fCAob3V0cHV0SGFzaCA/ICdbbmFtZV0uW2hhc2hdLmpzJyA6ICdbbmFtZV0uanMnKTtcblxuICBjb25zdCB2aXRlQ29uZmlnOiBJbmxpbmVDb25maWcgPSB7XG4gICAgYXBwVHlwZTogaGFzSHRtbEVudHJ5ID8gJ3NwYScgOiAnY3VzdG9tJyxcbiAgICBiYXNlOiAnLycsXG4gICAgYnVpbGQ6IHtcbiAgICAgIGNzc0NvZGVTcGxpdDogdHJ1ZSxcbiAgICAgIGVtcHR5T3V0RGlyOiBmYWxzZSxcbiAgICAgIG1pbmlmeTogb3B0aW9ucy5tb2RlID09PSAncHJvZHVjdGlvbicsXG4gICAgICBvdXREaXI6IG91dHB1dFBhdGgsXG4gICAgICByb2xsZG93bk9wdGlvbnM6IHtcbiAgICAgICAgaW5wdXQ6IGhhc0h0bWxFbnRyeSA/IGh0bWxQYXRoIDogZW50cnlQYXRoLFxuICAgICAgICBvdXRwdXQ6IHtcbiAgICAgICAgICBhc3NldEZpbGVOYW1lczogb3V0cHV0SGFzaCA/ICdhc3NldHMvW25hbWVdLltoYXNoXVtleHRuYW1lXScgOiAnYXNzZXRzL1tuYW1lXVtleHRuYW1lXScsXG4gICAgICAgICAgY2h1bmtGaWxlTmFtZXM6IG91dHB1dEhhc2ggPyAnW25hbWVdLltoYXNoXS5jaHVuay5qcycgOiAnW25hbWVdLmNodW5rLmpzJyxcbiAgICAgICAgICBlbnRyeUZpbGVOYW1lczogZmlsZU5hbWUsXG4gICAgICAgICAgbWFudWFsQ2h1bmtzKGlkKSB7XG4gICAgICAgICAgICByZXR1cm4gaWQuaW5jbHVkZXMoJy9ub2RlX21vZHVsZXMvJykgPyAndmVuZG9ycycgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgc291cmNlbWFwOiAhIWNvbmZpZy5zd2M/LnNvdXJjZU1hcHMsXG4gICAgICBzc3I6IG9wdGlvbnMuc3NyID8gZW50cnlQYXRoIDogZmFsc2UsXG4gICAgICB0YXJnZXQ6IGNvbmZpZy5zd2M/LmpzYz8udGFyZ2V0Py50b1N0cmluZygpIHx8ICdlczIwMjAnXG4gICAgfSxcbiAgICBjbGVhclNjcmVlbjogZmFsc2UsXG4gICAgY29uZmlnRmlsZTogZmFsc2UsXG4gICAgY3NzOiB7XG4gICAgICBwb3N0Y3NzOiByZXNvbHZlKExleENvbmZpZy5nZXRMZXhEaXIoKSwgJ3Bvc3Rjc3MuY29uZmlnLmpzJylcbiAgICB9LFxuICAgIGRlZmluZToge1xuICAgICAgZ2xvYmFsOiAnZ2xvYmFsVGhpcycsXG4gICAgICAncHJvY2Vzcy5lbnYuTk9ERV9FTlYnOiBKU09OLnN0cmluZ2lmeShvcHRpb25zLm1vZGUgfHwgKG9wdGlvbnMuY29tbWFuZCA9PT0gJ2J1aWxkJyA/ICdwcm9kdWN0aW9uJyA6ICdkZXZlbG9wbWVudCcpKVxuICAgIH0sXG4gICAgZW52RGlyOiBwcm9jZXNzLmN3ZCgpLFxuICAgIGxvZ0xldmVsOiBvcHRpb25zLnF1aWV0ID8gJ3NpbGVudCcgOiAnaW5mbycsXG4gICAgbW9kZTogb3B0aW9ucy5tb2RlIHx8IChvcHRpb25zLmNvbW1hbmQgPT09ICdidWlsZCcgPyAncHJvZHVjdGlvbicgOiAnZGV2ZWxvcG1lbnQnKSxcbiAgICBvcHRpbWl6ZURlcHM6IG9wdGlvbnMuc3NyID8gdW5kZWZpbmVkIDoge1xuICAgICAgaW5jbHVkZTogWydidWZmZXIvaW5kZXguanMnLCAncHJvY2Vzcy9icm93c2VyLmpzJ11cbiAgICB9LFxuICAgIHBsdWdpbnM6IFtcbiAgICAgIC4uLihvcHRpb25zLnNzciA/IFtdIDogW1xuICAgICAgICBlbXB0eUNyeXB0b1BsdWdpbigpLFxuICAgICAgICBub2RlUG9seWZpbGxzUGx1Z2luKCksXG4gICAgICAgIGNyZWF0ZUluamVjdFBsdWdpbihnZXRCcm93c2VyR2xvYmFsSW5qZWN0T3B0aW9ucyhvcHRpb25zLmNvbW1hbmQpKVxuICAgICAgXSksXG4gICAgICBzd2NQbHVnaW4oc291cmNlUGF0aCksXG4gICAgICBncmFwaHFsUGx1Z2luKCksXG4gICAgICAuLi4ob3B0aW9ucy5zc3IgPyBbXSA6IFtcbiAgICAgICAgaW1wb3J0TWV0YUNvbXBhdGliaWxpdHlQbHVnaW4oc291cmNlUGF0aCksXG4gICAgICAgIGFzc2V0c0RldlBsdWdpbigpLFxuICAgICAgICBhbmFseXplclBsdWdpbihCb29sZWFuKG9wdGlvbnMuYW5hbHl6ZSkpXG4gICAgICBdKVxuICAgIF0sXG4gICAgcHVibGljRGlyOiBmYWxzZSxcbiAgICByZXNvbHZlOiB7XG4gICAgICBhbGlhczoge1xuICAgICAgICBCdWZmZXI6IHJlc29sdmVQcm9qZWN0UGFja2FnZSgnYnVmZmVyJyksXG4gICAgICAgICdjb3JlLWpzJzogcmVzb2x2ZVByb2plY3RQYWNrYWdlKCdjb3JlLWpzJyksXG4gICAgICAgIGdsb2JhbDogcmVzb2x2ZVByb2plY3RQYWNrYWdlKCdnbG9iYWwnKSxcbiAgICAgICAgJ2dyYXBocWwtdGFnJzogcmVzb2x2ZVByb2plY3RQYWNrYWdlKCdncmFwaHFsLXRhZycpLFxuICAgICAgICByYW5kb21ieXRlczogcmVzb2x2ZVByb2plY3RQYWNrYWdlKCdyYW5kb21ieXRlcycpLFxuICAgICAgICByZWFjdDogcmVzb2x2ZVByb2plY3RQYWNrYWdlKCdyZWFjdCcpLFxuICAgICAgICAncmVhY3QtZG9tJzogcmVzb2x2ZVByb2plY3RQYWNrYWdlKCdyZWFjdC1kb20nKSxcbiAgICAgICAgJ3JlZ2VuZXJhdG9yLXJ1bnRpbWUnOiByZXNvbHZlUHJvamVjdFBhY2thZ2UoJ3JlZ2VuZXJhdG9yLXJ1bnRpbWUnKVxuICAgICAgfSxcbiAgICAgIGV4dGVuc2lvbnM6IFsnLm1qcycsICcuanMnLCAnLnRzJywgJy50c3gnLCAnLmpzeCcsICcuanNvbicsICcuZ3FsJywgJy5ncmFwaHFsJ10sXG4gICAgICBwcmVzZXJ2ZVN5bWxpbmtzOiBmYWxzZSxcbiAgICAgIHRzY29uZmlnUGF0aHM6IHRydWVcbiAgICB9LFxuICAgIHJvb3Q6IHNvdXJjZVBhdGgsXG4gICAgc2VydmVyOiB7XG4gICAgICBobXI6IGZhbHNlLFxuICAgICAgb3Blbjogb3B0aW9ucy5vcGVuLFxuICAgICAgcG9ydDogb3B0aW9ucy5wb3J0LFxuICAgICAgc3RyaWN0UG9ydDogdHJ1ZVxuICAgIH1cbiAgfTtcblxuICBpZighaGFzSHRtbEVudHJ5ICYmIGNvbmZpZy5saWJyYXJ5TmFtZSAmJiAhb3B0aW9ucy5zc3IpIHtcbiAgICB2aXRlQ29uZmlnLmJ1aWxkID0ge1xuICAgICAgLi4udml0ZUNvbmZpZy5idWlsZCxcbiAgICAgIGxpYjoge1xuICAgICAgICBlbnRyeTogZW50cnlQYXRoLFxuICAgICAgICBmaWxlTmFtZTogKCkgPT4gY29uZmlnLm91dHB1dEZpbGUgfHwgJ2luZGV4LmpzJyxcbiAgICAgICAgZm9ybWF0czogZ2V0TGlicmFyeUZvcm1hdHMoY29uZmlnLmxpYnJhcnlUYXJnZXQpLFxuICAgICAgICBuYW1lOiBjb25maWcubGlicmFyeU5hbWVcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIG1lcmdlQ29uZmlnKHZpdGVDb25maWcsIGNvbmZpZy52aXRlIHx8IHt9KSBhcyBJbmxpbmVDb25maWc7XG59O1xuIl0sIm5hbWVzIjpbImluamVjdCIsInRyYW5zZm9ybSIsImV4aXN0c1N5bmMiLCJyZWFkRmlsZVN5bmMiLCJkaXJuYW1lIiwiZXh0bmFtZSIsInJlc29sdmUiLCJtZXJnZUNvbmZpZyIsIkxleENvbmZpZyIsImdlbmVyYXRlTGV4RmF2aWNvbnMiLCJnZXREZXZBc3NldCIsImNyZWF0ZUluamVjdFBsdWdpbiIsImJyb3dzZXJHbG9iYWxNb2R1bGVzIiwiQnVmZmVyIiwicHJvY2VzcyIsImJyb3dzZXJHbG9iYWxJbmplY3RFeGNsdWRlcyIsImNvbnRlbnRUeXBlcyIsImVtcHR5Q3J5cHRvUGx1Z2luIiwibG9hZCIsImlkIiwibmFtZSIsInJlc29sdmVJZCIsIm5vZGVQb2x5ZmlsbE1vZHVsZXMiLCJhc3NlcnQiLCJidWZmZXIiLCJodHRwIiwiaHR0cHMiLCJvcyIsInBhdGgiLCJzdHJlYW0iLCJ1dGlsIiwidm0iLCJub2RlUG9seWZpbGxzUGx1Z2luIiwibW9kdWxlTmFtZSIsInN0YXJ0c1dpdGgiLCJzbGljZSIsInJlcGxhY2VtZW50IiwicmVzb2x2ZVByb2plY3RQYWNrYWdlIiwiZ3JhcGhxbFBsdWdpbiIsInRlc3QiLCJzb3VyY2UiLCJKU09OIiwic3RyaW5naWZ5Iiwic3djUGx1Z2luIiwic291cmNlUGF0aCIsImVuZm9yY2UiLCJjbGVhbklkIiwic3BsaXQiLCJzd2NDb25maWciLCJnZXRTV0NDb25maWdXaXRoUmVhY3RDb21waWxlciIsInJlc3VsdCIsImZpbGVuYW1lIiwibW9kdWxlIiwidHlwZSIsInNvdXJjZU1hcHMiLCJuZWVkc1JlYWN0IiwiY29kZSIsIm1hcCIsImltcG9ydE1ldGFDb21wYXRpYmlsaXR5UGx1Z2luIiwiaW5jbHVkZXMiLCJyZXBsYWNlQWxsIiwiYXNzZXRzRGV2UGx1Z2luIiwiZmF2aWNvbkh0bWwiLCJidWlsZFN0YXJ0IiwiZ2VuZXJhdGVkRmF2aWNvbnMiLCJjb25maWciLCJodG1sIiwiY29uZmlndXJlU2VydmVyIiwic2VydmVyIiwibWlkZGxld2FyZXMiLCJ1c2UiLCJyZXF1ZXN0IiwicmVzcG9uc2UiLCJuZXh0IiwidXJsIiwiYXNzZXQiLCJzdGF0dXNDb2RlIiwic2V0SGVhZGVyIiwiZW5kIiwidHJhbnNmb3JtSW5kZXhIdG1sIiwibGVuZ3RoIiwicmVwbGFjZSIsImpvaW4iLCJhbmFseXplclBsdWdpbiIsImVuYWJsZWQiLCJnZW5lcmF0ZUJ1bmRsZSIsIl9vcHRpb25zIiwiYnVuZGxlIiwicmVwb3J0IiwiT2JqZWN0IiwiZW50cmllcyIsImZpbGVOYW1lIiwib3V0cHV0Iiwic2l6ZSIsImJ5dGVMZW5ndGgiLCJlbWl0RmlsZSIsImdldExpYnJhcnlGb3JtYXRzIiwibGlicmFyeVRhcmdldCIsImZpbmROb2RlTW9kdWxlc1BhY2thZ2UiLCJzdGFydFBhdGgiLCJwYWNrYWdlTmFtZSIsImN1cnJlbnRQYXRoIiwiY2FuZGlkYXRlUGF0aCIsInBhcmVudFBhdGgiLCJ1bmRlZmluZWQiLCJjd2QiLCJnZXRMZXhEaXIiLCJnZXRCcm93c2VyR2xvYmFsSW5qZWN0T3B0aW9ucyIsImNvbW1hbmQiLCJleGNsdWRlIiwiY3JlYXRlTGV4Vml0ZUNvbmZpZyIsIm9wdGlvbnMiLCJzb3VyY2VGdWxsUGF0aCIsIm91dHB1dFBhdGgiLCJvdXRwdXRGdWxsUGF0aCIsImVudHJ5UGF0aCIsImVudHJ5IiwiZW50cnlKcyIsImh0bWxQYXRoIiwiZW50cnlIVE1MIiwiaGFzSHRtbEVudHJ5Iiwic3NyIiwib3V0cHV0SGFzaCIsIm1vZGUiLCJvdXRwdXRGaWxlIiwidml0ZUNvbmZpZyIsImFwcFR5cGUiLCJiYXNlIiwiYnVpbGQiLCJjc3NDb2RlU3BsaXQiLCJlbXB0eU91dERpciIsIm1pbmlmeSIsIm91dERpciIsInJvbGxkb3duT3B0aW9ucyIsImlucHV0IiwiYXNzZXRGaWxlTmFtZXMiLCJjaHVua0ZpbGVOYW1lcyIsImVudHJ5RmlsZU5hbWVzIiwibWFudWFsQ2h1bmtzIiwic291cmNlbWFwIiwic3djIiwidGFyZ2V0IiwianNjIiwidG9TdHJpbmciLCJjbGVhclNjcmVlbiIsImNvbmZpZ0ZpbGUiLCJjc3MiLCJwb3N0Y3NzIiwiZGVmaW5lIiwiZ2xvYmFsIiwiZW52RGlyIiwibG9nTGV2ZWwiLCJxdWlldCIsIm9wdGltaXplRGVwcyIsImluY2x1ZGUiLCJwbHVnaW5zIiwiQm9vbGVhbiIsImFuYWx5emUiLCJwdWJsaWNEaXIiLCJhbGlhcyIsInJhbmRvbWJ5dGVzIiwicmVhY3QiLCJleHRlbnNpb25zIiwicHJlc2VydmVTeW1saW5rcyIsInRzY29uZmlnUGF0aHMiLCJyb290IiwiaG1yIiwib3BlbiIsInBvcnQiLCJzdHJpY3RQb3J0IiwibGlicmFyeU5hbWUiLCJsaWIiLCJmb3JtYXRzIiwidml0ZSJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBQ0QsT0FBT0EsWUFBWSx3QkFBd0I7QUFDM0MsU0FBUUMsU0FBUyxRQUFPLFlBQVk7QUFDcEMsU0FB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
|