@nlabs/lex 2.0.4 → 2.0.5

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 CHANGED
@@ -2,6 +2,9 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ - Fixed static Storybook builds by omitting development-only port and browser-open arguments.
6
+ - Exposed the Vite development server on local networks by default and allowed local or custom hostnames without per-project configuration.
7
+ - Documented the network-access defaults, security considerations, and localhost-only overrides.
5
8
  - Disabled browser response caching in the Vite development server and forced dependency re-optimization on each development-server start.
6
9
  - Allowed projects to override the new cache defaults through standard Vite configuration.
7
10
  - Pinned Vitest and its V8 coverage provider to the same version to prevent peer-dependency resolution warnings during installation.
package/README.md CHANGED
@@ -10,6 +10,7 @@ Lex is the all-in-one development CLI that eliminates the complexity of modern R
10
10
 
11
11
  [![npm version](https://img.shields.io/npm/v/@nlabs/lex.svg?style=flat-square)](https://www.npmjs.com/package/@nlabs/lex)
12
12
  [![npm downloads](https://img.shields.io/npm/dm/@nlabs/lex.svg?style=flat-square)](https://www.npmjs.com/package/@nlabs/lex)
13
+ [![Documentation](https://img.shields.io/badge/docs-lex.nitrogenx.co-6d28d9?style=flat-square)](https://lex.nitrogenx.co)
13
14
  [![Issues](https://img.shields.io/github/issues/nitrogenlabs/lex.svg?style=flat-square)](https://github.com/nitrogenlabs/lex/issues)
14
15
  [![MIT license](https://img.shields.io/badge/license-MIT-brightgreen.svg?style=flat-square)](LICENSE)
15
16
  [![Chat](https://img.shields.io/discord/446122412715802649.svg)](https://discord.gg/nitrogenlabs)
@@ -163,6 +164,8 @@ export default {
163
164
 
164
165
  `--port` takes precedence over `dev.port`.
165
166
 
167
+ **Local Network Access**: Lex binds Vite to all network interfaces with `vite.server.host: '0.0.0.0'` and accepts all development hostnames with `vite.server.allowedHosts: true`. Use the private IP printed by `lex dev` or a local hostname such as `http://my-computer.local:4200` from another device on the same trusted network. To limit a project to the current machine, set `vite.server.host` to `'127.0.0.1'` and `vite.server.allowedHosts` to `['localhost']`.
168
+
166
169
  **Development Caching**: Lex sends `no-store` response headers and forces Vite to refresh optimized dependencies each time the development server starts. Projects can override these defaults with `vite.server.headers` and `vite.optimizeDeps.force`.
167
170
 
168
171
  **Public IP Caching**: Lex automatically caches your public IP address for 1 week to reduce API calls. Use `--usePublicIp` to force refresh the cache when needed.
@@ -459,9 +462,13 @@ Vite is the default for `web` projects. Lex merges the `vite` object with its re
459
462
 
460
463
  | Option | Type | Default | Description | Example |
461
464
  |--------|------|---------|-------------|---------|
465
+ | `vite.server.allowedHosts` | `string[] \| true` | `true` | Hostnames accepted by the development server | `vite: { server: { allowedHosts: ['localhost'] } }` |
466
+ | `vite.server.host` | `string \| boolean` | `'0.0.0.0'` | Network interface used by the development server | `vite: { server: { host: '127.0.0.1' } }` |
462
467
  | `vite.staticPath` | `string` | `'./src/static'` | Static assets copied to the output root | `vite: { staticPath: './assets' }` |
463
468
  | `vite.*` | `Vite UserConfig` | `undefined` | Additional Vite configuration merged with Lex defaults | `vite: { base: '/app/' }` |
464
469
 
470
+ The network defaults are intended for trusted development environments. `allowedHosts: true` disables Vite's host allowlist, while the operating-system firewall controls whether the port is reachable from another device.
471
+
465
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.
466
473
 
467
474
  Lex also processes these conventional asset locations:
@@ -78,9 +78,6 @@ export const storybook = async (cmd, callback = ()=>({}))=>{
78
78
  }
79
79
  spinner.succeed(`Found ${storyFiles.length} story file(s)`);
80
80
  const tailwindCssPath = findTailwindCssPath();
81
- console.log({
82
- tailwindCssPath
83
- });
84
81
  if (tailwindCssPath) {
85
82
  if (!quiet) {
86
83
  log(chalk.green(`✓ Tailwind CSS integration detected: ${tailwindCssPath}`), 'info', quiet);
@@ -156,10 +153,10 @@ export const storybook = async (cmd, callback = ()=>({}))=>{
156
153
  staticBuild ? 'build' : 'dev'
157
154
  ];
158
155
  storybookArgs.push('--config-dir', configDir);
159
- if (port) {
156
+ if (port && !staticBuild) {
160
157
  storybookArgs.push('--port', port.toString());
161
158
  }
162
- if (open) {
159
+ if (open && !staticBuild) {
163
160
  storybookArgs.push('--open');
164
161
  }
165
162
  if (staticBuild) {
@@ -227,4 +224,4 @@ export const storybook = async (cmd, callback = ()=>({}))=>{
227
224
  }
228
225
  };
229
226
 
230
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9zdG9yeWJvb2svc3Rvcnlib29rLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQge2V4ZWNhfSBmcm9tICdleGVjYSc7XG5pbXBvcnQge2V4aXN0c1N5bmN9IGZyb20gJ2ZzJztcbmltcG9ydCB7c3luYyBhcyBnbG9iU3luY30gZnJvbSAnZ2xvYic7XG5pbXBvcnQge3Jlc29sdmUgYXMgcGF0aFJlc29sdmV9IGZyb20gJ3BhdGgnO1xuXG5pbXBvcnQge0xleENvbmZpZ30gZnJvbSAnLi4vLi4vTGV4Q29uZmlnLmpzJztcbmltcG9ydCB7Y3JlYXRlU3Bpbm5lcn0gZnJvbSAnLi4vLi4vdXRpbHMvYXBwLmpzJztcbmltcG9ydCB7ZmluZFRhaWx3aW5kQ3NzUGF0aCwgcmVzb2x2ZUJpbmFyeVBhdGh9IGZyb20gJy4uLy4uL3V0aWxzL2ZpbGUuanMnO1xuaW1wb3J0IHtsb2d9IGZyb20gJy4uLy4uL3V0aWxzL2xvZy5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3Rvcnlib29rT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGNsaU5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNvbmZpZz86IHN0cmluZztcbiAgcmVhZG9ubHkgb3Blbj86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHBvcnQ/OiBudW1iZXI7XG4gIHJlYWRvbmx5IHF1aWV0PzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgc3RhdGljPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgdXNlTGV4Q29uZmlnPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgdmFyaWFibGVzPzogc3RyaW5nO1xuICByZWFkb25seSB2ZXJib3NlPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IHR5cGUgU3Rvcnlib29rQ2FsbGJhY2sgPSAoc3RhdHVzOiBudW1iZXIpID0+IHZvaWQ7XG5cbmNvbnN0IGZpbmRTdG9yeUZpbGVzID0gKCk6IHN0cmluZ1tdID0+IHtcbiAgY29uc3Qgc3RvcnlQYXR0ZXJucyA9IFtcbiAgICAnKiovKi5zdG9yaWVzLnt0cyx0c3gsanMsanN4fScsXG4gICAgJyoqLyouc3Rvcnkue3RzLHRzeCxqcyxqc3h9JyxcbiAgICAnKiovc3Rvcmllcy8qKi8qLnt0cyx0c3gsanMsanN4fSdcbiAgXTtcblxuICBjb25zdCBzdG9yeUZpbGVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIHN0b3J5UGF0dGVybnMuZm9yRWFjaCgocGF0dGVybikgPT4ge1xuICAgIGNvbnN0IGZpbGVzID0gZ2xvYlN5bmMocGF0dGVybiwge1xuICAgICAgY3dkOiBwcm9jZXNzLmN3ZCgpLFxuICAgICAgaWdub3JlOiBbJyoqL25vZGVfbW9kdWxlcy8qKicsICcqKi9kaXN0LyoqJywgJyoqL2xpYi8qKicsICcqKi9idWlsZC8qKiddXG4gICAgfSk7XG4gICAgc3RvcnlGaWxlcy5wdXNoKC4uLmZpbGVzKTtcbiAgfSk7XG5cbiAgcmV0dXJuIHN0b3J5RmlsZXM7XG59O1xuXG5jb25zdCBjaGVja1N0b3J5Ym9va0luaXRpYWxpemF0aW9uID0gKCk6IGJvb2xlYW4gPT4ge1xuICBjb25zdCBwcm9qZWN0Q29uZmlnRGlyID0gcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJy5zdG9yeWJvb2snKTtcbiAgY29uc3QgbGV4Q29uZmlnRGlyID0gcGF0aFJlc29sdmUoTGV4Q29uZmlnLmdldExleERpcigpLCAnLnN0b3J5Ym9vaycpO1xuXG4gIHJldHVybiBleGlzdHNTeW5jKHByb2plY3RDb25maWdEaXIpIHx8IGV4aXN0c1N5bmMobGV4Q29uZmlnRGlyKTtcbn07XG5cbmNvbnN0IGZpbHRlckFuZEJlYXV0aWZ5T3V0cHV0ID0gKG91dHB1dDogc3RyaW5nLCBpc1ZlcmJvc2U6IGJvb2xlYW4pOiBzdHJpbmcgPT4ge1xuICBpZihpc1ZlcmJvc2UpIHtcbiAgICByZXR1cm4gb3V0cHV0O1xuICB9XG5cbiAgY29uc3QgbGluZXMgPSBvdXRwdXQuc3BsaXQoJ1xcbicpO1xuICBjb25zdCBmaWx0ZXJlZExpbmVzID0gbGluZXMuZmlsdGVyKChsaW5lKSA9PiB7XG4gICAgaWYobGluZS5pbmNsdWRlcygnU3Rvcnlib29rJykgfHxcbiAgICAgIGxpbmUuaW5jbHVkZXMoJ0xvY2FsOicpIHx8XG4gICAgICBsaW5lLmluY2x1ZGVzKCdodHRwOi8vbG9jYWxob3N0JykgfHxcbiAgICAgIGxpbmUuaW5jbHVkZXMoJ2luZm8gPT4nKSB8fFxuICAgICAgbGluZS5pbmNsdWRlcygnU3RhcnRpbmcnKSB8fFxuICAgICAgbGluZS5pbmNsdWRlcygncmVhZHknKSB8fFxuICAgICAgbGluZS5pbmNsdWRlcygnZXJyb3InKSB8fFxuICAgICAgbGluZS5pbmNsdWRlcygnd2FybmluZycpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSk7XG5cbiAgcmV0dXJuIGZpbHRlcmVkTGluZXMuam9pbignXFxuJyk7XG59O1xuXG5jb25zdCBiZWF1dGlmeU91dHB1dCA9IChvdXRwdXQ6IHN0cmluZyk6IHN0cmluZyA9PiBvdXRwdXRcbiAgLnJlcGxhY2UoL1N0b3J5Ym9vayB2W1xcZC5dKy9nLCBjaGFsay5jeWFuKCckJicpKVxuICAucmVwbGFjZSgvaW5mbyA9Pi9nLCBjaGFsay5ibHVlKCdpbmZvID0+JykpXG4gIC5yZXBsYWNlKC9Mb2NhbDovZywgY2hhbGsuZ3JlZW4oJ0xvY2FsOicpKVxuICAucmVwbGFjZSgvT24geW91ciBuZXR3b3JrOi9nLCBjaGFsay5ncmVlbignT24geW91ciBuZXR3b3JrOicpKVxuICAucmVwbGFjZSgvU3Rvcnlib29rLipzdGFydGVkL2csIGNoYWxrLmdyZWVuKCckJicpKVxuICAucmVwbGFjZSgvU3Rvcnlib29rLipyZWFkeS9nLCBjaGFsay5ncmVlbignJCYnKSlcbiAgLnJlcGxhY2UoL2Vycm9yL2csIGNoYWxrLnJlZCgnJCYnKSlcbiAgLnJlcGxhY2UoL3dhcm5pbmcvZywgY2hhbGsueWVsbG93KCckJicpKVxuICAucmVwbGFjZSgvKFxcZCspJS9nLCBjaGFsay5tYWdlbnRhKCckMSUnKSk7XG5cbmV4cG9ydCBjb25zdCBzdG9yeWJvb2sgPSBhc3luYyAoY21kOiBTdG9yeWJvb2tPcHRpb25zLCBjYWxsYmFjazogU3Rvcnlib29rQ2FsbGJhY2sgPSAoKSA9PiAoe30pKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcbiAgY29uc3Qge2NsaU5hbWUgPSAnTGV4JywgY29uZmlnLCBvcGVuID0gZmFsc2UsIHBvcnQgPSA2MDA3LCBxdWlldCwgc3RhdGljOiBzdGF0aWNCdWlsZCA9IGZhbHNlLCB1c2VMZXhDb25maWcgPSBmYWxzZSwgdmFyaWFibGVzLCB2ZXJib3NlID0gZmFsc2V9ID0gY21kO1xuXG4gIGNvbnN0IHNwaW5uZXIgPSBjcmVhdGVTcGlubmVyKHF1aWV0KTtcblxuICBsb2coY2hhbGsuY3lhbihgJHtjbGlOYW1lfSBzdGFydGluZyBTdG9yeWJvb2suLi5gKSwgJ2luZm8nLCBxdWlldCk7XG5cbiAgYXdhaXQgTGV4Q29uZmlnLnBhcnNlQ29uZmlnKGNtZCk7XG5cbiAgbGV0IHZhcmlhYmxlc09iajogb2JqZWN0ID0ge05PREVfRU5WOiAnZGV2ZWxvcG1lbnQnfTtcblxuICBpZih2YXJpYWJsZXMpIHtcbiAgICB0cnkge1xuICAgICAgdmFyaWFibGVzT2JqID0gSlNPTi5wYXJzZSh2YXJpYWJsZXMpO1xuICAgIH0gY2F0Y2goX2Vycm9yKSB7XG4gICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IEVudmlyb25tZW50IHZhcmlhYmxlcyBvcHRpb24gaXMgbm90IGEgdmFsaWQgSlNPTiBvYmplY3QuYCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgY2FsbGJhY2soMSk7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gIH1cblxuICBwcm9jZXNzLmVudiA9IHsuLi5wcm9jZXNzLmVudiwgLi4udmFyaWFibGVzT2JqfTtcblxuICBzcGlubmVyLnN0YXJ0KCdGaW5kaW5nIHN0b3J5IGZpbGVzLi4uJyk7XG4gIGNvbnN0IHN0b3J5RmlsZXMgPSBmaW5kU3RvcnlGaWxlcygpO1xuXG4gIGlmKHN0b3J5RmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgc3Bpbm5lci5mYWlsKCdObyBzdG9yeSBmaWxlcyBmb3VuZCBpbiB0aGUgcHJvamVjdC4nKTtcbiAgICBsb2coJ1BsZWFzZSBjcmVhdGUgc3RvcnkgZmlsZXMgd2l0aCAuc3Rvcmllcy50cy8uc3Rvcmllcy5qcyBleHRlbnNpb25zIG9yIGluIGEgc3Rvcmllcy8gZGlyZWN0b3J5LicsICdpbmZvJywgcXVpZXQpO1xuICAgIGNhbGxiYWNrKDEpO1xuICAgIHJldHVybiAxO1xuICB9XG5cbiAgc3Bpbm5lci5zdWNjZWVkKGBGb3VuZCAke3N0b3J5RmlsZXMubGVuZ3RofSBzdG9yeSBmaWxlKHMpYCk7XG5cbiAgY29uc3QgdGFpbHdpbmRDc3NQYXRoID0gZmluZFRhaWx3aW5kQ3NzUGF0aCgpO1xuXG4gIGNvbnNvbGUubG9nKHt0YWlsd2luZENzc1BhdGh9KTtcbiAgaWYodGFpbHdpbmRDc3NQYXRoKSB7XG4gICAgaWYoIXF1aWV0KSB7XG4gICAgICBsb2coY2hhbGsuZ3JlZW4oYOKckyBUYWlsd2luZCBDU1MgaW50ZWdyYXRpb24gZGV0ZWN0ZWQ6ICR7dGFpbHdpbmRDc3NQYXRofWApLCAnaW5mbycsIHF1aWV0KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYoIXF1aWV0KSB7XG4gICAgICBsb2coY2hhbGsueWVsbG93KCfimqAgTm8gVGFpbHdpbmQgQ1NTIGZpbGUgZm91bmQgaW4gcHJvamVjdCcpLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgIGxvZyhjaGFsay5ncmF5KCdDcmVhdGUgYSB0YWlsd2luZC5jc3MgZmlsZSB3aXRoIEB0YWlsd2luZCBkaXJlY3RpdmVzIGZvciBmdWxsIFRhaWx3aW5kIHN1cHBvcnQnKSwgJ2luZm8nLCBxdWlldCk7XG4gICAgfVxuICB9XG5cbiAgaWYoIWNoZWNrU3Rvcnlib29rSW5pdGlhbGl6YXRpb24oKSkge1xuICAgIHNwaW5uZXIuZmFpbCgnU3Rvcnlib29rIGlzIG5vdCBpbml0aWFsaXplZCBpbiB0aGlzIHByb2plY3Qgb3IgaW4gTGV4LicpO1xuICAgIGxvZygnUGxlYXNlIHJ1biBcIm5weCBzdG9yeWJvb2tAbGF0ZXN0IGluaXRcIiB0byBzZXQgdXAgU3Rvcnlib29rIGluIHlvdXIgcHJvamVjdCwgb3IgZW5zdXJlIExleCBoYXMgYSB2YWxpZCAuc3Rvcnlib29rIGNvbmZpZ3VyYXRpb24uJywgJ2luZm8nLCBxdWlldCk7XG4gICAgY2FsbGJhY2soMSk7XG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICBjb25zdCBwcm9qZWN0Q29uZmlnRGlyID0gcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJy5zdG9yeWJvb2snKTtcbiAgY29uc3QgbGV4Q29uZmlnRGlyID0gcGF0aFJlc29sdmUoTGV4Q29uZmlnLmdldExleERpcigpLCAnLnN0b3J5Ym9vaycpO1xuXG4gIGxldCBjb25maWdEaXIgPSBjb25maWc7XG4gIGlmKCFjb25maWdEaXIpIHtcbiAgICBjb25maWdEaXIgPSBsZXhDb25maWdEaXI7XG4gICAgaWYoIXVzZUxleENvbmZpZyAmJiBleGlzdHNTeW5jKHByb2plY3RDb25maWdEaXIpKSB7XG4gICAgICBjb25maWdEaXIgPSBwcm9qZWN0Q29uZmlnRGlyO1xuICAgIH1cbiAgfVxuXG4gIGlmKCFxdWlldCkge1xuICAgIGxvZyhjaGFsay5ncmF5KGBQcm9qZWN0IGNvbmZpZyBkaXI6ICR7cHJvamVjdENvbmZpZ0Rpcn0gKGV4aXN0czogJHtleGlzdHNTeW5jKHByb2plY3RDb25maWdEaXIpfSlgKSwgJ2luZm8nLCBxdWlldCk7XG4gICAgbG9nKGNoYWxrLmdyYXkoYExleCBjb25maWcgZGlyOiAke2xleENvbmZpZ0Rpcn0gKGV4aXN0czogJHtleGlzdHNTeW5jKGxleENvbmZpZ0Rpcil9KWApLCAnaW5mbycsIHF1aWV0KTtcbiAgICBpZih1c2VMZXhDb25maWcpIHtcbiAgICAgIGxvZyhjaGFsay5ibHVlKCdVc2luZyBMZXggU3Rvcnlib29rIGNvbmZpZ3VyYXRpb24gKC0tdXNlTGV4Q29uZmlnIGZsYWcpJyksICdpbmZvJywgcXVpZXQpO1xuICAgIH1cbiAgICBsb2coY2hhbGsuZ3JheShgSW5pdGlhbCBjb25maWcgZGlyOiAke2NvbmZpZ0Rpcn1gKSwgJ2luZm8nLCBxdWlldCk7XG4gIH1cblxuICBpZihjb25maWdEaXIgPT09IGxleENvbmZpZ0Rpcikge1xuICAgIGlmKCFxdWlldCkge1xuICAgICAgbG9nKGNoYWxrLmJsdWUoJ1VzaW5nIExleCBjb25maWcsIHdpbGwgY3JlYXRlIHRlbXBvcmFyeSBjb25maWcgaW4gcHJvamVjdCAuc3Rvcnlib29rIGRpcmVjdG9yeScpLCAnaW5mbycsIHF1aWV0KTtcbiAgICB9XG4gICAgY29uc3QgcHJvamVjdFN0b3J5Ym9va0RpciA9IHBhdGhSZXNvbHZlKHByb2Nlc3MuY3dkKCksICcuc3Rvcnlib29rJyk7XG5cbiAgICBjb25zdCBmcyA9IGF3YWl0IGltcG9ydCgnZnMvcHJvbWlzZXMnKTtcbiAgICBhd2FpdCBmcy5ta2Rpcihwcm9qZWN0U3Rvcnlib29rRGlyLCB7cmVjdXJzaXZlOiB0cnVlfSk7XG5cbiAgICBjb25zdCBsZXhNYWluUGF0aCA9IHBhdGhSZXNvbHZlKGxleENvbmZpZ0RpciwgJ21haW4udHMnKTtcbiAgICBjb25zdCBwcm9qZWN0TWFpblBhdGggPSBwYXRoUmVzb2x2ZShwcm9qZWN0U3Rvcnlib29rRGlyLCAnbWFpbi50cycpO1xuICAgIGxldCBtYWluQ29udGVudCA9IGF3YWl0IGZzLnJlYWRGaWxlKGxleE1haW5QYXRoLCAndXRmOCcpO1xuXG4gICAgbWFpbkNvbnRlbnQgPSBtYWluQ29udGVudC5yZXBsYWNlKFxuICAgICAgL3N0b3JpZXM6XFxzKlxcWy4qP1xcXS8sXG4gICAgICBgc3RvcmllczogWycke3BhdGhSZXNvbHZlKHByb2Nlc3MuY3dkKCksICdzcmMvKiovKi5zdG9yaWVzLkAodHN8dHN4KScpfScsICcke3BhdGhSZXNvbHZlKHByb2Nlc3MuY3dkKCksICdzcmMvKiovKi5tZHgnKX0nXWBcbiAgICApO1xuXG4gICAgY29uc3QgbGV4Tm9kZU1vZHVsZXMgPSBwYXRoUmVzb2x2ZShMZXhDb25maWcuZ2V0TGV4RGlyKCksICdub2RlX21vZHVsZXMnKTtcbiAgICBtYWluQ29udGVudCA9IG1haW5Db250ZW50LnJlcGxhY2UoXG4gICAgICAvY29uc3QgbGV4TW9kdWxlID0gXFwobW9kdWxlUGF0aDogc3RyaW5nXFwpID0+IHJlc29sdmVcXChnZXRMZXhOb2RlTW9kdWxlc1BhdGhcXChcXCksIG1vZHVsZVBhdGhcXCk7LyxcbiAgICAgIGBjb25zdCBsZXhNb2R1bGUgPSAobW9kdWxlUGF0aDogc3RyaW5nKSA9PiByZXNvbHZlKCcke2xleE5vZGVNb2R1bGVzfScsIG1vZHVsZVBhdGgpO2BcbiAgICApO1xuXG4gICAgYXdhaXQgZnMud3JpdGVGaWxlKHByb2plY3RNYWluUGF0aCwgbWFpbkNvbnRlbnQpO1xuXG4gICAgY29uc3QgbGV4UHJldmlld1BhdGggPSBwYXRoUmVzb2x2ZShsZXhDb25maWdEaXIsICdwcmV2aWV3LnRzeCcpO1xuICAgIGlmKGV4aXN0c1N5bmMobGV4UHJldmlld1BhdGgpKSB7XG4gICAgICBjb25zdCBwcmV2aWV3Q29udGVudCA9IGF3YWl0IGZzLnJlYWRGaWxlKGxleFByZXZpZXdQYXRoLCAndXRmOCcpO1xuICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKHBhdGhSZXNvbHZlKHByb2plY3RTdG9yeWJvb2tEaXIsICdwcmV2aWV3LnRzeCcpLCBwcmV2aWV3Q29udGVudCk7XG4gICAgfVxuXG4gICAgY29uZmlnRGlyID0gcHJvamVjdFN0b3J5Ym9va0RpcjtcbiAgfVxuICBpZighZXhpc3RzU3luYyhjb25maWdEaXIpKSB7XG4gICAgc3Bpbm5lci5mYWlsKCdTdG9yeWJvb2sgY29uZmlndXJhdGlvbiBub3QgZm91bmQuJyk7XG4gICAgbG9nKGBQcm9qZWN0IGNvbmZpZzogJHtwcm9qZWN0Q29uZmlnRGlyfWAsICdpbmZvJywgcXVpZXQpO1xuICAgIGxvZyhgTGV4IGNvbmZpZzogJHtsZXhDb25maWdEaXJ9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgbG9nKCdQbGVhc2UgcnVuIFwibnB4IHN0b3J5Ym9va0BsYXRlc3QgaW5pdFwiIHRvIHNldCB1cCBTdG9yeWJvb2sgaW4geW91ciBwcm9qZWN0LCBvciBlbnN1cmUgTGV4IGhhcyBhIHZhbGlkIC5zdG9yeWJvb2sgY29uZmlndXJhdGlvbi4nLCAnaW5mbycsIHF1aWV0KTtcbiAgICBjYWxsYmFjaygxKTtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIGNvbnN0IHN0b3J5Ym9va1BhdGggPSByZXNvbHZlQmluYXJ5UGF0aCgnc3Rvcnlib29rJyk7XG5cbiAgaWYoIXN0b3J5Ym9va1BhdGgpIHtcbiAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IHN0b3J5Ym9vayBiaW5hcnkgbm90IGZvdW5kIGluIExleCdzIG5vZGVfbW9kdWxlcyBvciBtb25vcmVwbyByb290YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgIGxvZygnUGxlYXNlIHJlaW5zdGFsbCBMZXggb3IgY2hlY2sgeW91ciBTdG9yeWJvb2sgaW5zdGFsbGF0aW9uLicsICdpbmZvJywgcXVpZXQpO1xuICAgIGNhbGxiYWNrKDEpO1xuICAgIHJldHVybiAxO1xuICB9XG5cbiAgY29uc3Qgc3Rvcnlib29rQXJncyA9IFtzdGF0aWNCdWlsZCA/ICdidWlsZCcgOiAnZGV2J107XG4gIHN0b3J5Ym9va0FyZ3MucHVzaCgnLS1jb25maWctZGlyJywgY29uZmlnRGlyKTtcblxuICBpZihwb3J0KSB7XG4gICAgc3Rvcnlib29rQXJncy5wdXNoKCctLXBvcnQnLCBwb3J0LnRvU3RyaW5nKCkpO1xuICB9XG5cbiAgaWYob3Blbikge1xuICAgIHN0b3J5Ym9va0FyZ3MucHVzaCgnLS1vcGVuJyk7XG4gIH1cblxuICBpZihzdGF0aWNCdWlsZCkge1xuICAgIGNvbnN0IG91dHB1dERpciA9IHBhdGhSZXNvbHZlKHByb2Nlc3MuY3dkKCksICdzdG9yeWJvb2stc3RhdGljJyk7XG4gICAgc3Rvcnlib29rQXJncy5wdXNoKCctLW91dHB1dC1kaXInLCBvdXRwdXREaXIpO1xuICB9XG5cbiAgaWYoIXF1aWV0KSB7XG4gICAgbG9nKGNoYWxrLmdyYXkoYENvbmZpZyBkaXJlY3Rvcnk6ICR7Y29uZmlnRGlyfWApLCAnaW5mbycsIHF1aWV0KTtcbiAgfVxuXG4gIHByb2Nlc3MuZW52LlRBSUxXSU5EX0NTU19QQVRIID0gdGFpbHdpbmRDc3NQYXRoO1xuXG4gIHRyeSB7XG4gICAgc3Bpbm5lci5zdGFydChzdGF0aWNCdWlsZCA/ICdCdWlsZGluZyBzdGF0aWMgU3Rvcnlib29rLi4uJyA6ICdTdGFydGluZyBTdG9yeWJvb2sgZGV2ZWxvcG1lbnQgc2VydmVyLi4uJyk7XG5cbiAgICBjb25zdCBzdG9yeWJvb2tQcm9jZXNzID0gZXhlY2Eoc3Rvcnlib29rUGF0aCBhcyBhbnksIHN0b3J5Ym9va0FyZ3MsIHtcbiAgICAgIGVuY29kaW5nOiAndXRmOCcsXG4gICAgICBlbnY6IHtcbiAgICAgICAgLi4ucHJvY2Vzcy5lbnYsXG4gICAgICAgIExFWF9RVUlFVDogcXVpZXQsXG4gICAgICAgIExFWF9WRVJCT1NFOiB2ZXJib3NlLFxuICAgICAgICBTVE9SWUJPT0tfT1BFTjogb3BlbixcbiAgICAgICAgLi4uKHRhaWx3aW5kQ3NzUGF0aCAmJiB7VEFJTFdJTkRfQ1NTX1BBVEg6IHRhaWx3aW5kQ3NzUGF0aH0pXG4gICAgICB9IGFzIGFueSxcbiAgICAgIHN0ZGlvOiAncGlwZSdcbiAgICB9KTtcblxuICAgIGxldCB1cmxGb3VuZCA9IGZhbHNlO1xuICAgIHN0b3J5Ym9va1Byb2Nlc3Muc3Rkb3V0Py5vbignZGF0YScsIChkYXRhKSA9PiB7XG4gICAgICBjb25zdCBvdXRwdXQgPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICBjb25zdCBmaWx0ZXJlZE91dHB1dCA9IGZpbHRlckFuZEJlYXV0aWZ5T3V0cHV0KG91dHB1dCwgdmVyYm9zZSk7XG4gICAgICBjb25zdCBiZWF1dGlmaWVkT3V0cHV0ID0gYmVhdXRpZnlPdXRwdXQoZmlsdGVyZWRPdXRwdXQpO1xuXG4gICAgICBpZighdXJsRm91bmQgJiYgKG91dHB1dC5pbmNsdWRlcygnTG9jYWw6JykgfHwgb3V0cHV0LmluY2x1ZGVzKCdodHRwOi8vbG9jYWxob3N0JykgfHwgb3V0cHV0LmluY2x1ZGVzKCdTdG9yeWJvb2snKSkpIHtcbiAgICAgICAgc3Bpbm5lci5zdWNjZWVkKGNoYWxrLmdyZWVuKCdTdG9yeWJvb2sgZGV2ZWxvcG1lbnQgc2VydmVyIGlzIHJlYWR5IScpKTtcbiAgICAgICAgdXJsRm91bmQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZihmaWx0ZXJlZE91dHB1dC50cmltKCkpIHtcbiAgICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYmVhdXRpZmllZE91dHB1dCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBzdG9yeWJvb2tQcm9jZXNzLnN0ZGVycj8ub24oJ2RhdGEnLCAoZGF0YSkgPT4ge1xuICAgICAgY29uc3Qgb3V0cHV0ID0gZGF0YS50b1N0cmluZygpO1xuICAgICAgY29uc3QgZmlsdGVyZWRPdXRwdXQgPSBmaWx0ZXJBbmRCZWF1dGlmeU91dHB1dChvdXRwdXQsIHZlcmJvc2UpO1xuICAgICAgY29uc3QgYmVhdXRpZmllZE91dHB1dCA9IGJlYXV0aWZ5T3V0cHV0KGZpbHRlcmVkT3V0cHV0KTtcblxuICAgICAgaWYoZmlsdGVyZWRPdXRwdXQudHJpbSgpKSB7XG4gICAgICAgIHByb2Nlc3Muc3RkZXJyLndyaXRlKGJlYXV0aWZpZWRPdXRwdXQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHN0b3J5Ym9va1Byb2Nlc3M7XG4gICAgICBpZighdXJsRm91bmQpIHtcbiAgICAgICAgc3Bpbm5lci5zdWNjZWVkKGNoYWxrLmdyZWVuKCdTdG9yeWJvb2sgZGV2ZWxvcG1lbnQgc2VydmVyIHN0YXJ0ZWQuJykpO1xuICAgICAgfVxuICAgICAgY2FsbGJhY2soMCk7XG4gICAgICByZXR1cm4gMDtcbiAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICBzcGlubmVyLmZhaWwoY2hhbGsucmVkKCdUaGVyZSB3YXMgYW4gZXJyb3Igd2hpbGUgcnVubmluZyBzdG9yeWJvb2suJykpO1xuICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgY2FsbGJhY2soMSk7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgc3Bpbm5lci5mYWlsKCdUaGVyZSB3YXMgYW4gZXJyb3Igd2hpbGUgcnVubmluZyBzdG9yeWJvb2suJyk7XG4gICAgY2FsbGJhY2soMSk7XG4gICAgcmV0dXJuIDE7XG4gIH1cbn07XG4iXSwibmFtZXMiOlsiY2hhbGsiLCJleGVjYSIsImV4aXN0c1N5bmMiLCJzeW5jIiwiZ2xvYlN5bmMiLCJyZXNvbHZlIiwicGF0aFJlc29sdmUiLCJMZXhDb25maWciLCJjcmVhdGVTcGlubmVyIiwiZmluZFRhaWx3aW5kQ3NzUGF0aCIsInJlc29sdmVCaW5hcnlQYXRoIiwibG9nIiwiZmluZFN0b3J5RmlsZXMiLCJzdG9yeVBhdHRlcm5zIiwic3RvcnlGaWxlcyIsImZvckVhY2giLCJwYXR0ZXJuIiwiZmlsZXMiLCJjd2QiLCJwcm9jZXNzIiwiaWdub3JlIiwicHVzaCIsImNoZWNrU3Rvcnlib29rSW5pdGlhbGl6YXRpb24iLCJwcm9qZWN0Q29uZmlnRGlyIiwibGV4Q29uZmlnRGlyIiwiZ2V0TGV4RGlyIiwiZmlsdGVyQW5kQmVhdXRpZnlPdXRwdXQiLCJvdXRwdXQiLCJpc1ZlcmJvc2UiLCJsaW5lcyIsInNwbGl0IiwiZmlsdGVyZWRMaW5lcyIsImZpbHRlciIsImxpbmUiLCJpbmNsdWRlcyIsImpvaW4iLCJiZWF1dGlmeU91dHB1dCIsInJlcGxhY2UiLCJjeWFuIiwiYmx1ZSIsImdyZWVuIiwicmVkIiwieWVsbG93IiwibWFnZW50YSIsInN0b3J5Ym9vayIsImNtZCIsImNhbGxiYWNrIiwiY2xpTmFtZSIsImNvbmZpZyIsIm9wZW4iLCJwb3J0IiwicXVpZXQiLCJzdGF0aWMiLCJzdGF0aWNCdWlsZCIsInVzZUxleENvbmZpZyIsInZhcmlhYmxlcyIsInZlcmJvc2UiLCJzcGlubmVyIiwicGFyc2VDb25maWciLCJ2YXJpYWJsZXNPYmoiLCJOT0RFX0VOViIsIkpTT04iLCJwYXJzZSIsIl9lcnJvciIsImVudiIsInN0YXJ0IiwibGVuZ3RoIiwiZmFpbCIsInN1Y2NlZWQiLCJ0YWlsd2luZENzc1BhdGgiLCJjb25zb2xlIiwiZ3JheSIsImNvbmZpZ0RpciIsInByb2plY3RTdG9yeWJvb2tEaXIiLCJmcyIsIm1rZGlyIiwicmVjdXJzaXZlIiwibGV4TWFpblBhdGgiLCJwcm9qZWN0TWFpblBhdGgiLCJtYWluQ29udGVudCIsInJlYWRGaWxlIiwibGV4Tm9kZU1vZHVsZXMiLCJ3cml0ZUZpbGUiLCJsZXhQcmV2aWV3UGF0aCIsInByZXZpZXdDb250ZW50Iiwic3Rvcnlib29rUGF0aCIsInN0b3J5Ym9va0FyZ3MiLCJ0b1N0cmluZyIsIm91dHB1dERpciIsIlRBSUxXSU5EX0NTU19QQVRIIiwic3Rvcnlib29rUHJvY2VzcyIsImVuY29kaW5nIiwiTEVYX1FVSUVUIiwiTEVYX1ZFUkJPU0UiLCJTVE9SWUJPT0tfT1BFTiIsInN0ZGlvIiwidXJsRm91bmQiLCJzdGRvdXQiLCJvbiIsImRhdGEiLCJmaWx0ZXJlZE91dHB1dCIsImJlYXV0aWZpZWRPdXRwdXQiLCJ0cmltIiwid3JpdGUiLCJzdGRlcnIiLCJlcnJvciIsIm1lc3NhZ2UiXSwibWFwcGluZ3MiOiJBQUFBLE9BQU9BLFdBQVcsUUFBUTtBQUMxQixTQUFRQyxLQUFLLFFBQU8sUUFBUTtBQUM1QixTQUFRQyxVQUFVLFFBQU8sS0FBSztBQUM5QixTQUFRQyxRQUFRQyxRQUFRLFFBQU8sT0FBTztBQUN0QyxT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
227
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9zdG9yeWJvb2svc3Rvcnlib29rLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQge2V4ZWNhfSBmcm9tICdleGVjYSc7XG5pbXBvcnQge2V4aXN0c1N5bmN9IGZyb20gJ2ZzJztcbmltcG9ydCB7c3luYyBhcyBnbG9iU3luY30gZnJvbSAnZ2xvYic7XG5pbXBvcnQge3Jlc29sdmUgYXMgcGF0aFJlc29sdmV9IGZyb20gJ3BhdGgnO1xuXG5pbXBvcnQge0xleENvbmZpZ30gZnJvbSAnLi4vLi4vTGV4Q29uZmlnLmpzJztcbmltcG9ydCB7Y3JlYXRlU3Bpbm5lcn0gZnJvbSAnLi4vLi4vdXRpbHMvYXBwLmpzJztcbmltcG9ydCB7ZmluZFRhaWx3aW5kQ3NzUGF0aCwgcmVzb2x2ZUJpbmFyeVBhdGh9IGZyb20gJy4uLy4uL3V0aWxzL2ZpbGUuanMnO1xuaW1wb3J0IHtsb2d9IGZyb20gJy4uLy4uL3V0aWxzL2xvZy5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3Rvcnlib29rT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGNsaU5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNvbmZpZz86IHN0cmluZztcbiAgcmVhZG9ubHkgb3Blbj86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHBvcnQ/OiBudW1iZXI7XG4gIHJlYWRvbmx5IHF1aWV0PzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgc3RhdGljPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgdXNlTGV4Q29uZmlnPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgdmFyaWFibGVzPzogc3RyaW5nO1xuICByZWFkb25seSB2ZXJib3NlPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IHR5cGUgU3Rvcnlib29rQ2FsbGJhY2sgPSAoc3RhdHVzOiBudW1iZXIpID0+IHZvaWQ7XG5cbmNvbnN0IGZpbmRTdG9yeUZpbGVzID0gKCk6IHN0cmluZ1tdID0+IHtcbiAgY29uc3Qgc3RvcnlQYXR0ZXJucyA9IFtcbiAgICAnKiovKi5zdG9yaWVzLnt0cyx0c3gsanMsanN4fScsXG4gICAgJyoqLyouc3Rvcnkue3RzLHRzeCxqcyxqc3h9JyxcbiAgICAnKiovc3Rvcmllcy8qKi8qLnt0cyx0c3gsanMsanN4fSdcbiAgXTtcblxuICBjb25zdCBzdG9yeUZpbGVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIHN0b3J5UGF0dGVybnMuZm9yRWFjaCgocGF0dGVybikgPT4ge1xuICAgIGNvbnN0IGZpbGVzID0gZ2xvYlN5bmMocGF0dGVybiwge1xuICAgICAgY3dkOiBwcm9jZXNzLmN3ZCgpLFxuICAgICAgaWdub3JlOiBbJyoqL25vZGVfbW9kdWxlcy8qKicsICcqKi9kaXN0LyoqJywgJyoqL2xpYi8qKicsICcqKi9idWlsZC8qKiddXG4gICAgfSk7XG4gICAgc3RvcnlGaWxlcy5wdXNoKC4uLmZpbGVzKTtcbiAgfSk7XG5cbiAgcmV0dXJuIHN0b3J5RmlsZXM7XG59O1xuXG5jb25zdCBjaGVja1N0b3J5Ym9va0luaXRpYWxpemF0aW9uID0gKCk6IGJvb2xlYW4gPT4ge1xuICBjb25zdCBwcm9qZWN0Q29uZmlnRGlyID0gcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJy5zdG9yeWJvb2snKTtcbiAgY29uc3QgbGV4Q29uZmlnRGlyID0gcGF0aFJlc29sdmUoTGV4Q29uZmlnLmdldExleERpcigpLCAnLnN0b3J5Ym9vaycpO1xuXG4gIHJldHVybiBleGlzdHNTeW5jKHByb2plY3RDb25maWdEaXIpIHx8IGV4aXN0c1N5bmMobGV4Q29uZmlnRGlyKTtcbn07XG5cbmNvbnN0IGZpbHRlckFuZEJlYXV0aWZ5T3V0cHV0ID0gKG91dHB1dDogc3RyaW5nLCBpc1ZlcmJvc2U6IGJvb2xlYW4pOiBzdHJpbmcgPT4ge1xuICBpZihpc1ZlcmJvc2UpIHtcbiAgICByZXR1cm4gb3V0cHV0O1xuICB9XG5cbiAgY29uc3QgbGluZXMgPSBvdXRwdXQuc3BsaXQoJ1xcbicpO1xuICBjb25zdCBmaWx0ZXJlZExpbmVzID0gbGluZXMuZmlsdGVyKChsaW5lKSA9PiB7XG4gICAgaWYobGluZS5pbmNsdWRlcygnU3Rvcnlib29rJykgfHxcbiAgICAgIGxpbmUuaW5jbHVkZXMoJ0xvY2FsOicpIHx8XG4gICAgICBsaW5lLmluY2x1ZGVzKCdodHRwOi8vbG9jYWxob3N0JykgfHxcbiAgICAgIGxpbmUuaW5jbHVkZXMoJ2luZm8gPT4nKSB8fFxuICAgICAgbGluZS5pbmNsdWRlcygnU3RhcnRpbmcnKSB8fFxuICAgICAgbGluZS5pbmNsdWRlcygncmVhZHknKSB8fFxuICAgICAgbGluZS5pbmNsdWRlcygnZXJyb3InKSB8fFxuICAgICAgbGluZS5pbmNsdWRlcygnd2FybmluZycpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSk7XG5cbiAgcmV0dXJuIGZpbHRlcmVkTGluZXMuam9pbignXFxuJyk7XG59O1xuXG5jb25zdCBiZWF1dGlmeU91dHB1dCA9IChvdXRwdXQ6IHN0cmluZyk6IHN0cmluZyA9PiBvdXRwdXRcbiAgLnJlcGxhY2UoL1N0b3J5Ym9vayB2W1xcZC5dKy9nLCBjaGFsay5jeWFuKCckJicpKVxuICAucmVwbGFjZSgvaW5mbyA9Pi9nLCBjaGFsay5ibHVlKCdpbmZvID0+JykpXG4gIC5yZXBsYWNlKC9Mb2NhbDovZywgY2hhbGsuZ3JlZW4oJ0xvY2FsOicpKVxuICAucmVwbGFjZSgvT24geW91ciBuZXR3b3JrOi9nLCBjaGFsay5ncmVlbignT24geW91ciBuZXR3b3JrOicpKVxuICAucmVwbGFjZSgvU3Rvcnlib29rLipzdGFydGVkL2csIGNoYWxrLmdyZWVuKCckJicpKVxuICAucmVwbGFjZSgvU3Rvcnlib29rLipyZWFkeS9nLCBjaGFsay5ncmVlbignJCYnKSlcbiAgLnJlcGxhY2UoL2Vycm9yL2csIGNoYWxrLnJlZCgnJCYnKSlcbiAgLnJlcGxhY2UoL3dhcm5pbmcvZywgY2hhbGsueWVsbG93KCckJicpKVxuICAucmVwbGFjZSgvKFxcZCspJS9nLCBjaGFsay5tYWdlbnRhKCckMSUnKSk7XG5cbmV4cG9ydCBjb25zdCBzdG9yeWJvb2sgPSBhc3luYyAoY21kOiBTdG9yeWJvb2tPcHRpb25zLCBjYWxsYmFjazogU3Rvcnlib29rQ2FsbGJhY2sgPSAoKSA9PiAoe30pKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcbiAgY29uc3Qge2NsaU5hbWUgPSAnTGV4JywgY29uZmlnLCBvcGVuID0gZmFsc2UsIHBvcnQgPSA2MDA3LCBxdWlldCwgc3RhdGljOiBzdGF0aWNCdWlsZCA9IGZhbHNlLCB1c2VMZXhDb25maWcgPSBmYWxzZSwgdmFyaWFibGVzLCB2ZXJib3NlID0gZmFsc2V9ID0gY21kO1xuXG4gIGNvbnN0IHNwaW5uZXIgPSBjcmVhdGVTcGlubmVyKHF1aWV0KTtcblxuICBsb2coY2hhbGsuY3lhbihgJHtjbGlOYW1lfSBzdGFydGluZyBTdG9yeWJvb2suLi5gKSwgJ2luZm8nLCBxdWlldCk7XG5cbiAgYXdhaXQgTGV4Q29uZmlnLnBhcnNlQ29uZmlnKGNtZCk7XG5cbiAgbGV0IHZhcmlhYmxlc09iajogb2JqZWN0ID0ge05PREVfRU5WOiAnZGV2ZWxvcG1lbnQnfTtcblxuICBpZih2YXJpYWJsZXMpIHtcbiAgICB0cnkge1xuICAgICAgdmFyaWFibGVzT2JqID0gSlNPTi5wYXJzZSh2YXJpYWJsZXMpO1xuICAgIH0gY2F0Y2goX2Vycm9yKSB7XG4gICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IEVudmlyb25tZW50IHZhcmlhYmxlcyBvcHRpb24gaXMgbm90IGEgdmFsaWQgSlNPTiBvYmplY3QuYCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgY2FsbGJhY2soMSk7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gIH1cblxuICBwcm9jZXNzLmVudiA9IHsuLi5wcm9jZXNzLmVudiwgLi4udmFyaWFibGVzT2JqfTtcblxuICBzcGlubmVyLnN0YXJ0KCdGaW5kaW5nIHN0b3J5IGZpbGVzLi4uJyk7XG4gIGNvbnN0IHN0b3J5RmlsZXMgPSBmaW5kU3RvcnlGaWxlcygpO1xuXG4gIGlmKHN0b3J5RmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgc3Bpbm5lci5mYWlsKCdObyBzdG9yeSBmaWxlcyBmb3VuZCBpbiB0aGUgcHJvamVjdC4nKTtcbiAgICBsb2coJ1BsZWFzZSBjcmVhdGUgc3RvcnkgZmlsZXMgd2l0aCAuc3Rvcmllcy50cy8uc3Rvcmllcy5qcyBleHRlbnNpb25zIG9yIGluIGEgc3Rvcmllcy8gZGlyZWN0b3J5LicsICdpbmZvJywgcXVpZXQpO1xuICAgIGNhbGxiYWNrKDEpO1xuICAgIHJldHVybiAxO1xuICB9XG5cbiAgc3Bpbm5lci5zdWNjZWVkKGBGb3VuZCAke3N0b3J5RmlsZXMubGVuZ3RofSBzdG9yeSBmaWxlKHMpYCk7XG5cbiAgY29uc3QgdGFpbHdpbmRDc3NQYXRoID0gZmluZFRhaWx3aW5kQ3NzUGF0aCgpO1xuXG4gIGlmKHRhaWx3aW5kQ3NzUGF0aCkge1xuICAgIGlmKCFxdWlldCkge1xuICAgICAgbG9nKGNoYWxrLmdyZWVuKGDinJMgVGFpbHdpbmQgQ1NTIGludGVncmF0aW9uIGRldGVjdGVkOiAke3RhaWx3aW5kQ3NzUGF0aH1gKSwgJ2luZm8nLCBxdWlldCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmKCFxdWlldCkge1xuICAgICAgbG9nKGNoYWxrLnllbGxvdygn4pqgIE5vIFRhaWx3aW5kIENTUyBmaWxlIGZvdW5kIGluIHByb2plY3QnKSwgJ2luZm8nLCBxdWlldCk7XG4gICAgICBsb2coY2hhbGsuZ3JheSgnQ3JlYXRlIGEgdGFpbHdpbmQuY3NzIGZpbGUgd2l0aCBAdGFpbHdpbmQgZGlyZWN0aXZlcyBmb3IgZnVsbCBUYWlsd2luZCBzdXBwb3J0JyksICdpbmZvJywgcXVpZXQpO1xuICAgIH1cbiAgfVxuXG4gIGlmKCFjaGVja1N0b3J5Ym9va0luaXRpYWxpemF0aW9uKCkpIHtcbiAgICBzcGlubmVyLmZhaWwoJ1N0b3J5Ym9vayBpcyBub3QgaW5pdGlhbGl6ZWQgaW4gdGhpcyBwcm9qZWN0IG9yIGluIExleC4nKTtcbiAgICBsb2coJ1BsZWFzZSBydW4gXCJucHggc3Rvcnlib29rQGxhdGVzdCBpbml0XCIgdG8gc2V0IHVwIFN0b3J5Ym9vayBpbiB5b3VyIHByb2plY3QsIG9yIGVuc3VyZSBMZXggaGFzIGEgdmFsaWQgLnN0b3J5Ym9vayBjb25maWd1cmF0aW9uLicsICdpbmZvJywgcXVpZXQpO1xuICAgIGNhbGxiYWNrKDEpO1xuICAgIHJldHVybiAxO1xuICB9XG5cbiAgY29uc3QgcHJvamVjdENvbmZpZ0RpciA9IHBhdGhSZXNvbHZlKHByb2Nlc3MuY3dkKCksICcuc3Rvcnlib29rJyk7XG4gIGNvbnN0IGxleENvbmZpZ0RpciA9IHBhdGhSZXNvbHZlKExleENvbmZpZy5nZXRMZXhEaXIoKSwgJy5zdG9yeWJvb2snKTtcblxuICBsZXQgY29uZmlnRGlyID0gY29uZmlnO1xuICBpZighY29uZmlnRGlyKSB7XG4gICAgY29uZmlnRGlyID0gbGV4Q29uZmlnRGlyO1xuICAgIGlmKCF1c2VMZXhDb25maWcgJiYgZXhpc3RzU3luYyhwcm9qZWN0Q29uZmlnRGlyKSkge1xuICAgICAgY29uZmlnRGlyID0gcHJvamVjdENvbmZpZ0RpcjtcbiAgICB9XG4gIH1cblxuICBpZighcXVpZXQpIHtcbiAgICBsb2coY2hhbGsuZ3JheShgUHJvamVjdCBjb25maWcgZGlyOiAke3Byb2plY3RDb25maWdEaXJ9IChleGlzdHM6ICR7ZXhpc3RzU3luYyhwcm9qZWN0Q29uZmlnRGlyKX0pYCksICdpbmZvJywgcXVpZXQpO1xuICAgIGxvZyhjaGFsay5ncmF5KGBMZXggY29uZmlnIGRpcjogJHtsZXhDb25maWdEaXJ9IChleGlzdHM6ICR7ZXhpc3RzU3luYyhsZXhDb25maWdEaXIpfSlgKSwgJ2luZm8nLCBxdWlldCk7XG4gICAgaWYodXNlTGV4Q29uZmlnKSB7XG4gICAgICBsb2coY2hhbGsuYmx1ZSgnVXNpbmcgTGV4IFN0b3J5Ym9vayBjb25maWd1cmF0aW9uICgtLXVzZUxleENvbmZpZyBmbGFnKScpLCAnaW5mbycsIHF1aWV0KTtcbiAgICB9XG4gICAgbG9nKGNoYWxrLmdyYXkoYEluaXRpYWwgY29uZmlnIGRpcjogJHtjb25maWdEaXJ9YCksICdpbmZvJywgcXVpZXQpO1xuICB9XG5cbiAgaWYoY29uZmlnRGlyID09PSBsZXhDb25maWdEaXIpIHtcbiAgICBpZighcXVpZXQpIHtcbiAgICAgIGxvZyhjaGFsay5ibHVlKCdVc2luZyBMZXggY29uZmlnLCB3aWxsIGNyZWF0ZSB0ZW1wb3JhcnkgY29uZmlnIGluIHByb2plY3QgLnN0b3J5Ym9vayBkaXJlY3RvcnknKSwgJ2luZm8nLCBxdWlldCk7XG4gICAgfVxuICAgIGNvbnN0IHByb2plY3RTdG9yeWJvb2tEaXIgPSBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnLnN0b3J5Ym9vaycpO1xuXG4gICAgY29uc3QgZnMgPSBhd2FpdCBpbXBvcnQoJ2ZzL3Byb21pc2VzJyk7XG4gICAgYXdhaXQgZnMubWtkaXIocHJvamVjdFN0b3J5Ym9va0Rpciwge3JlY3Vyc2l2ZTogdHJ1ZX0pO1xuXG4gICAgY29uc3QgbGV4TWFpblBhdGggPSBwYXRoUmVzb2x2ZShsZXhDb25maWdEaXIsICdtYWluLnRzJyk7XG4gICAgY29uc3QgcHJvamVjdE1haW5QYXRoID0gcGF0aFJlc29sdmUocHJvamVjdFN0b3J5Ym9va0RpciwgJ21haW4udHMnKTtcbiAgICBsZXQgbWFpbkNvbnRlbnQgPSBhd2FpdCBmcy5yZWFkRmlsZShsZXhNYWluUGF0aCwgJ3V0ZjgnKTtcblxuICAgIG1haW5Db250ZW50ID0gbWFpbkNvbnRlbnQucmVwbGFjZShcbiAgICAgIC9zdG9yaWVzOlxccypcXFsuKj9cXF0vLFxuICAgICAgYHN0b3JpZXM6IFsnJHtwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnc3JjLyoqLyouc3Rvcmllcy5AKHRzfHRzeCknKX0nLCAnJHtwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnc3JjLyoqLyoubWR4Jyl9J11gXG4gICAgKTtcblxuICAgIGNvbnN0IGxleE5vZGVNb2R1bGVzID0gcGF0aFJlc29sdmUoTGV4Q29uZmlnLmdldExleERpcigpLCAnbm9kZV9tb2R1bGVzJyk7XG4gICAgbWFpbkNvbnRlbnQgPSBtYWluQ29udGVudC5yZXBsYWNlKFxuICAgICAgL2NvbnN0IGxleE1vZHVsZSA9IFxcKG1vZHVsZVBhdGg6IHN0cmluZ1xcKSA9PiByZXNvbHZlXFwoZ2V0TGV4Tm9kZU1vZHVsZXNQYXRoXFwoXFwpLCBtb2R1bGVQYXRoXFwpOy8sXG4gICAgICBgY29uc3QgbGV4TW9kdWxlID0gKG1vZHVsZVBhdGg6IHN0cmluZykgPT4gcmVzb2x2ZSgnJHtsZXhOb2RlTW9kdWxlc30nLCBtb2R1bGVQYXRoKTtgXG4gICAgKTtcblxuICAgIGF3YWl0IGZzLndyaXRlRmlsZShwcm9qZWN0TWFpblBhdGgsIG1haW5Db250ZW50KTtcblxuICAgIGNvbnN0IGxleFByZXZpZXdQYXRoID0gcGF0aFJlc29sdmUobGV4Q29uZmlnRGlyLCAncHJldmlldy50c3gnKTtcbiAgICBpZihleGlzdHNTeW5jKGxleFByZXZpZXdQYXRoKSkge1xuICAgICAgY29uc3QgcHJldmlld0NvbnRlbnQgPSBhd2FpdCBmcy5yZWFkRmlsZShsZXhQcmV2aWV3UGF0aCwgJ3V0ZjgnKTtcbiAgICAgIGF3YWl0IGZzLndyaXRlRmlsZShwYXRoUmVzb2x2ZShwcm9qZWN0U3Rvcnlib29rRGlyLCAncHJldmlldy50c3gnKSwgcHJldmlld0NvbnRlbnQpO1xuICAgIH1cblxuICAgIGNvbmZpZ0RpciA9IHByb2plY3RTdG9yeWJvb2tEaXI7XG4gIH1cbiAgaWYoIWV4aXN0c1N5bmMoY29uZmlnRGlyKSkge1xuICAgIHNwaW5uZXIuZmFpbCgnU3Rvcnlib29rIGNvbmZpZ3VyYXRpb24gbm90IGZvdW5kLicpO1xuICAgIGxvZyhgUHJvamVjdCBjb25maWc6ICR7cHJvamVjdENvbmZpZ0Rpcn1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICBsb2coYExleCBjb25maWc6ICR7bGV4Q29uZmlnRGlyfWAsICdpbmZvJywgcXVpZXQpO1xuICAgIGxvZygnUGxlYXNlIHJ1biBcIm5weCBzdG9yeWJvb2tAbGF0ZXN0IGluaXRcIiB0byBzZXQgdXAgU3Rvcnlib29rIGluIHlvdXIgcHJvamVjdCwgb3IgZW5zdXJlIExleCBoYXMgYSB2YWxpZCAuc3Rvcnlib29rIGNvbmZpZ3VyYXRpb24uJywgJ2luZm8nLCBxdWlldCk7XG4gICAgY2FsbGJhY2soMSk7XG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICBjb25zdCBzdG9yeWJvb2tQYXRoID0gcmVzb2x2ZUJpbmFyeVBhdGgoJ3N0b3J5Ym9vaycpO1xuXG4gIGlmKCFzdG9yeWJvb2tQYXRoKSB7XG4gICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBzdG9yeWJvb2sgYmluYXJ5IG5vdCBmb3VuZCBpbiBMZXgncyBub2RlX21vZHVsZXMgb3IgbW9ub3JlcG8gcm9vdGAsICdlcnJvcicsIHF1aWV0KTtcbiAgICBsb2coJ1BsZWFzZSByZWluc3RhbGwgTGV4IG9yIGNoZWNrIHlvdXIgU3Rvcnlib29rIGluc3RhbGxhdGlvbi4nLCAnaW5mbycsIHF1aWV0KTtcbiAgICBjYWxsYmFjaygxKTtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIGNvbnN0IHN0b3J5Ym9va0FyZ3MgPSBbc3RhdGljQnVpbGQgPyAnYnVpbGQnIDogJ2RldiddO1xuICBzdG9yeWJvb2tBcmdzLnB1c2goJy0tY29uZmlnLWRpcicsIGNvbmZpZ0Rpcik7XG5cbiAgaWYocG9ydCAmJiAhc3RhdGljQnVpbGQpIHtcbiAgICBzdG9yeWJvb2tBcmdzLnB1c2goJy0tcG9ydCcsIHBvcnQudG9TdHJpbmcoKSk7XG4gIH1cblxuICBpZihvcGVuICYmICFzdGF0aWNCdWlsZCkge1xuICAgIHN0b3J5Ym9va0FyZ3MucHVzaCgnLS1vcGVuJyk7XG4gIH1cblxuICBpZihzdGF0aWNCdWlsZCkge1xuICAgIGNvbnN0IG91dHB1dERpciA9IHBhdGhSZXNvbHZlKHByb2Nlc3MuY3dkKCksICdzdG9yeWJvb2stc3RhdGljJyk7XG4gICAgc3Rvcnlib29rQXJncy5wdXNoKCctLW91dHB1dC1kaXInLCBvdXRwdXREaXIpO1xuICB9XG5cbiAgaWYoIXF1aWV0KSB7XG4gICAgbG9nKGNoYWxrLmdyYXkoYENvbmZpZyBkaXJlY3Rvcnk6ICR7Y29uZmlnRGlyfWApLCAnaW5mbycsIHF1aWV0KTtcbiAgfVxuXG4gIHByb2Nlc3MuZW52LlRBSUxXSU5EX0NTU19QQVRIID0gdGFpbHdpbmRDc3NQYXRoO1xuXG4gIHRyeSB7XG4gICAgc3Bpbm5lci5zdGFydChzdGF0aWNCdWlsZCA/ICdCdWlsZGluZyBzdGF0aWMgU3Rvcnlib29rLi4uJyA6ICdTdGFydGluZyBTdG9yeWJvb2sgZGV2ZWxvcG1lbnQgc2VydmVyLi4uJyk7XG5cbiAgICBjb25zdCBzdG9yeWJvb2tQcm9jZXNzID0gZXhlY2Eoc3Rvcnlib29rUGF0aCBhcyBhbnksIHN0b3J5Ym9va0FyZ3MsIHtcbiAgICAgIGVuY29kaW5nOiAndXRmOCcsXG4gICAgICBlbnY6IHtcbiAgICAgICAgLi4ucHJvY2Vzcy5lbnYsXG4gICAgICAgIExFWF9RVUlFVDogcXVpZXQsXG4gICAgICAgIExFWF9WRVJCT1NFOiB2ZXJib3NlLFxuICAgICAgICBTVE9SWUJPT0tfT1BFTjogb3BlbixcbiAgICAgICAgLi4uKHRhaWx3aW5kQ3NzUGF0aCAmJiB7VEFJTFdJTkRfQ1NTX1BBVEg6IHRhaWx3aW5kQ3NzUGF0aH0pXG4gICAgICB9IGFzIGFueSxcbiAgICAgIHN0ZGlvOiAncGlwZSdcbiAgICB9KTtcblxuICAgIGxldCB1cmxGb3VuZCA9IGZhbHNlO1xuICAgIHN0b3J5Ym9va1Byb2Nlc3Muc3Rkb3V0Py5vbignZGF0YScsIChkYXRhKSA9PiB7XG4gICAgICBjb25zdCBvdXRwdXQgPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICBjb25zdCBmaWx0ZXJlZE91dHB1dCA9IGZpbHRlckFuZEJlYXV0aWZ5T3V0cHV0KG91dHB1dCwgdmVyYm9zZSk7XG4gICAgICBjb25zdCBiZWF1dGlmaWVkT3V0cHV0ID0gYmVhdXRpZnlPdXRwdXQoZmlsdGVyZWRPdXRwdXQpO1xuXG4gICAgICBpZighdXJsRm91bmQgJiYgKG91dHB1dC5pbmNsdWRlcygnTG9jYWw6JykgfHwgb3V0cHV0LmluY2x1ZGVzKCdodHRwOi8vbG9jYWxob3N0JykgfHwgb3V0cHV0LmluY2x1ZGVzKCdTdG9yeWJvb2snKSkpIHtcbiAgICAgICAgc3Bpbm5lci5zdWNjZWVkKGNoYWxrLmdyZWVuKCdTdG9yeWJvb2sgZGV2ZWxvcG1lbnQgc2VydmVyIGlzIHJlYWR5IScpKTtcbiAgICAgICAgdXJsRm91bmQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZihmaWx0ZXJlZE91dHB1dC50cmltKCkpIHtcbiAgICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYmVhdXRpZmllZE91dHB1dCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBzdG9yeWJvb2tQcm9jZXNzLnN0ZGVycj8ub24oJ2RhdGEnLCAoZGF0YSkgPT4ge1xuICAgICAgY29uc3Qgb3V0cHV0ID0gZGF0YS50b1N0cmluZygpO1xuICAgICAgY29uc3QgZmlsdGVyZWRPdXRwdXQgPSBmaWx0ZXJBbmRCZWF1dGlmeU91dHB1dChvdXRwdXQsIHZlcmJvc2UpO1xuICAgICAgY29uc3QgYmVhdXRpZmllZE91dHB1dCA9IGJlYXV0aWZ5T3V0cHV0KGZpbHRlcmVkT3V0cHV0KTtcblxuICAgICAgaWYoZmlsdGVyZWRPdXRwdXQudHJpbSgpKSB7XG4gICAgICAgIHByb2Nlc3Muc3RkZXJyLndyaXRlKGJlYXV0aWZpZWRPdXRwdXQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHN0b3J5Ym9va1Byb2Nlc3M7XG4gICAgICBpZighdXJsRm91bmQpIHtcbiAgICAgICAgc3Bpbm5lci5zdWNjZWVkKGNoYWxrLmdyZWVuKCdTdG9yeWJvb2sgZGV2ZWxvcG1lbnQgc2VydmVyIHN0YXJ0ZWQuJykpO1xuICAgICAgfVxuICAgICAgY2FsbGJhY2soMCk7XG4gICAgICByZXR1cm4gMDtcbiAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICBzcGlubmVyLmZhaWwoY2hhbGsucmVkKCdUaGVyZSB3YXMgYW4gZXJyb3Igd2hpbGUgcnVubmluZyBzdG9yeWJvb2suJykpO1xuICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgY2FsbGJhY2soMSk7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgc3Bpbm5lci5mYWlsKCdUaGVyZSB3YXMgYW4gZXJyb3Igd2hpbGUgcnVubmluZyBzdG9yeWJvb2suJyk7XG4gICAgY2FsbGJhY2soMSk7XG4gICAgcmV0dXJuIDE7XG4gIH1cbn07XG4iXSwibmFtZXMiOlsiY2hhbGsiLCJleGVjYSIsImV4aXN0c1N5bmMiLCJzeW5jIiwiZ2xvYlN5bmMiLCJyZXNvbHZlIiwicGF0aFJlc29sdmUiLCJMZXhDb25maWciLCJjcmVhdGVTcGlubmVyIiwiZmluZFRhaWx3aW5kQ3NzUGF0aCIsInJlc29sdmVCaW5hcnlQYXRoIiwibG9nIiwiZmluZFN0b3J5RmlsZXMiLCJzdG9yeVBhdHRlcm5zIiwic3RvcnlGaWxlcyIsImZvckVhY2giLCJwYXR0ZXJuIiwiZmlsZXMiLCJjd2QiLCJwcm9jZXNzIiwiaWdub3JlIiwicHVzaCIsImNoZWNrU3Rvcnlib29rSW5pdGlhbGl6YXRpb24iLCJwcm9qZWN0Q29uZmlnRGlyIiwibGV4Q29uZmlnRGlyIiwiZ2V0TGV4RGlyIiwiZmlsdGVyQW5kQmVhdXRpZnlPdXRwdXQiLCJvdXRwdXQiLCJpc1ZlcmJvc2UiLCJsaW5lcyIsInNwbGl0IiwiZmlsdGVyZWRMaW5lcyIsImZpbHRlciIsImxpbmUiLCJpbmNsdWRlcyIsImpvaW4iLCJiZWF1dGlmeU91dHB1dCIsInJlcGxhY2UiLCJjeWFuIiwiYmx1ZSIsImdyZWVuIiwicmVkIiwieWVsbG93IiwibWFnZW50YSIsInN0b3J5Ym9vayIsImNtZCIsImNhbGxiYWNrIiwiY2xpTmFtZSIsImNvbmZpZyIsIm9wZW4iLCJwb3J0IiwicXVpZXQiLCJzdGF0aWMiLCJzdGF0aWNCdWlsZCIsInVzZUxleENvbmZpZyIsInZhcmlhYmxlcyIsInZlcmJvc2UiLCJzcGlubmVyIiwicGFyc2VDb25maWciLCJ2YXJpYWJsZXNPYmoiLCJOT0RFX0VOViIsIkpTT04iLCJwYXJzZSIsIl9lcnJvciIsImVudiIsInN0YXJ0IiwibGVuZ3RoIiwiZmFpbCIsInN1Y2NlZWQiLCJ0YWlsd2luZENzc1BhdGgiLCJncmF5IiwiY29uZmlnRGlyIiwicHJvamVjdFN0b3J5Ym9va0RpciIsImZzIiwibWtkaXIiLCJyZWN1cnNpdmUiLCJsZXhNYWluUGF0aCIsInByb2plY3RNYWluUGF0aCIsIm1haW5Db250ZW50IiwicmVhZEZpbGUiLCJsZXhOb2RlTW9kdWxlcyIsIndyaXRlRmlsZSIsImxleFByZXZpZXdQYXRoIiwicHJldmlld0NvbnRlbnQiLCJzdG9yeWJvb2tQYXRoIiwic3Rvcnlib29rQXJncyIsInRvU3RyaW5nIiwib3V0cHV0RGlyIiwiVEFJTFdJTkRfQ1NTX1BBVEgiLCJzdG9yeWJvb2tQcm9jZXNzIiwiZW5jb2RpbmciLCJMRVhfUVVJRVQiLCJMRVhfVkVSQk9TRSIsIlNUT1JZQk9PS19PUEVOIiwic3RkaW8iLCJ1cmxGb3VuZCIsInN0ZG91dCIsIm9uIiwiZGF0YSIsImZpbHRlcmVkT3V0cHV0IiwiYmVhdXRpZmllZE91dHB1dCIsInRyaW0iLCJ3cml0ZSIsInN0ZGVyciIsImVycm9yIiwibWVzc2FnZSJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBT0EsV0FBVyxRQUFRO0FBQzFCLFNBQVFDLEtBQUssUUFBTyxRQUFRO0FBQzVCLFNBQVFDLFVBQVUsUUFBTyxLQUFLO0FBQzlCLFNBQVFDLFFBQVFDLFFBQVEsUUFBTyxPQUFPO0FBQ3RDLFNBQVFDLFdBQVdDLFdB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
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@nlabs/lex",
3
- "version": "2.0.4",
4
- "description": "Lex",
3
+ "version": "2.0.5",
4
+ "description": "All-in-one CLI to create, develop, test, build, and ship React, TypeScript, library, and serverless projects.",
5
5
  "license": "MIT",
6
6
  "type": "module",
7
7
  "bin": {
@@ -28,8 +28,21 @@
28
28
  "types": "./lib/index.d.ts",
29
29
  "keywords": [
30
30
  "arkhamjs",
31
+ "build-tool",
32
+ "cli",
33
+ "code-generator",
34
+ "developer-tools",
35
+ "devops",
31
36
  "lex",
32
37
  "nitrogenlabs",
38
+ "playwright",
39
+ "react",
40
+ "react-19",
41
+ "serverless",
42
+ "storybook",
43
+ "tailwindcss",
44
+ "typescript",
45
+ "vitest",
33
46
  "vite"
34
47
  ],
35
48
  "author": {
@@ -41,7 +54,7 @@
41
54
  "type": "git",
42
55
  "url": "git+https://github.com/nitrogenlabs/lex.git"
43
56
  },
44
- "homepage": "https://github.com/nitrogenlabs/lex",
57
+ "homepage": "https://lex.nitrogenx.co",
45
58
  "bugs": {
46
59
  "url": "https://github.com/nitrogenlabs/lex/issues"
47
60
  },