@nlabs/lex 1.58.1 → 1.59.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/copilot-instructions.md +55 -194
- package/AGENTS.md +55 -0
- package/README.md +27 -0
- package/lib/LexConfig.d.ts +5 -0
- package/lib/LexConfig.js +43 -2
- package/lib/commands/compile/compile.js +3 -3
- package/package.json +42 -41
- package/webpack.config.js +7 -6
|
@@ -1,194 +1,55 @@
|
|
|
1
|
-
#
|
|
2
|
-
|
|
3
|
-
##
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
-
|
|
10
|
-
-
|
|
11
|
-
-
|
|
12
|
-
-
|
|
13
|
-
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
-
|
|
17
|
-
-
|
|
18
|
-
-
|
|
19
|
-
-
|
|
20
|
-
|
|
21
|
-
##
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
apiKey: process.env.OPENAI_API_KEY,
|
|
57
|
-
model: 'gpt-4o',
|
|
58
|
-
maxTokens: 4000
|
|
59
|
-
},
|
|
60
|
-
useTypescript: true,
|
|
61
|
-
preset: 'web', // 'web' | 'node' | 'lambda'
|
|
62
|
-
sourcePath: './src',
|
|
63
|
-
outputPath: './lib'
|
|
64
|
-
};
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
### Command Implementation Pattern
|
|
68
|
-
```typescript
|
|
69
|
-
// src/commands/example/example.ts
|
|
70
|
-
import {Command} from 'commander';
|
|
71
|
-
import {LexConfig} from '../../LexConfig.js';
|
|
72
|
-
|
|
73
|
-
export const example = new Command('example')
|
|
74
|
-
.option('--option <value>', 'Description')
|
|
75
|
-
.action(async (options) => {
|
|
76
|
-
const config = LexConfig.config || {};
|
|
77
|
-
// Implementation
|
|
78
|
-
});
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
## Code Conventions
|
|
82
|
-
|
|
83
|
-
### File Organization
|
|
84
|
-
- Commands: One file per command in `src/commands/[name]/`
|
|
85
|
-
- Utils: Shared functions in `src/utils/`
|
|
86
|
-
- Types: Centralized in `src/types.ts`
|
|
87
|
-
- Config: All configuration logic in `LexConfig.ts`
|
|
88
|
-
|
|
89
|
-
### Error Handling
|
|
90
|
-
```typescript
|
|
91
|
-
try {
|
|
92
|
-
// Operation
|
|
93
|
-
} catch (error) {
|
|
94
|
-
log(`${chalk.red('Error:')} ${error.message}`, 'error');
|
|
95
|
-
return {error: error.message};
|
|
96
|
-
}
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
### Logging
|
|
100
|
-
```typescript
|
|
101
|
-
import {log} from '../utils/log.js';
|
|
102
|
-
log('Success message', 'success');
|
|
103
|
-
log('Info message', 'info');
|
|
104
|
-
log('Warning message', 'warning');
|
|
105
|
-
log('Error message', 'error');
|
|
106
|
-
```
|
|
107
|
-
|
|
108
|
-
### AI Integration
|
|
109
|
-
- Use `callAIService()` from `utils/aiService.ts`
|
|
110
|
-
- Support multiple providers (OpenAI, Anthropic, Cursor)
|
|
111
|
-
- Include project context when relevant
|
|
112
|
-
- Handle provider-specific authentication
|
|
113
|
-
|
|
114
|
-
## Testing Patterns
|
|
115
|
-
|
|
116
|
-
### Unit Tests
|
|
117
|
-
```typescript
|
|
118
|
-
// Use Vitest with jsdom for DOM testing
|
|
119
|
-
import {render, screen} from '@testing-library/react';
|
|
120
|
-
import {Button} from './Button.js';
|
|
121
|
-
|
|
122
|
-
describe('Button', () => {
|
|
123
|
-
it('renders correctly', () => {
|
|
124
|
-
render(<Button>Click me</Button>);
|
|
125
|
-
expect(screen.getByText('Click me')).toBeInTheDocument();
|
|
126
|
-
});
|
|
127
|
-
});
|
|
128
|
-
```
|
|
129
|
-
|
|
130
|
-
### CLI Command Testing
|
|
131
|
-
```typescript
|
|
132
|
-
// Mock commander and test command actions
|
|
133
|
-
import {example} from './example.js';
|
|
134
|
-
|
|
135
|
-
describe('example command', () => {
|
|
136
|
-
it('handles options correctly', async () => {
|
|
137
|
-
// Test implementation
|
|
138
|
-
});
|
|
139
|
-
});
|
|
140
|
-
```
|
|
141
|
-
|
|
142
|
-
## Key Files to Reference
|
|
143
|
-
|
|
144
|
-
- [`src/lex.ts`](src/lex.ts) - Main CLI entry point and command registration
|
|
145
|
-
- [`src/LexConfig.ts`](src/LexConfig.ts) - Configuration management
|
|
146
|
-
- [`src/commands/ai/ai.ts`](src/commands/ai/ai.ts) - AI command implementation
|
|
147
|
-
- [`src/utils/aiService.ts`](src/utils/aiService.ts) - AI service integrations
|
|
148
|
-
- [`package.json`](package.json) - Dependencies and scripts
|
|
149
|
-
- [`README.md`](README.md) - User documentation
|
|
150
|
-
|
|
151
|
-
## Common Patterns
|
|
152
|
-
|
|
153
|
-
### Async Command Handlers
|
|
154
|
-
```typescript
|
|
155
|
-
.action(async (options) => {
|
|
156
|
-
try {
|
|
157
|
-
await someAsyncOperation(options);
|
|
158
|
-
process.exit(0);
|
|
159
|
-
} catch (error) {
|
|
160
|
-
log(`Error: ${error.message}`, 'error');
|
|
161
|
-
process.exit(1);
|
|
162
|
-
}
|
|
163
|
-
})
|
|
164
|
-
```
|
|
165
|
-
|
|
166
|
-
### Configuration Merging
|
|
167
|
-
```typescript
|
|
168
|
-
import {deepMerge} from '../utils/deepMerge.js';
|
|
169
|
-
const finalConfig = deepMerge(defaultConfig, userConfig);
|
|
170
|
-
```
|
|
171
|
-
|
|
172
|
-
### File Operations
|
|
173
|
-
```typescript
|
|
174
|
-
import {readFile, writeFile} from '../utils/file.js';
|
|
175
|
-
// Use utility functions instead of fs directly
|
|
176
|
-
```
|
|
177
|
-
|
|
178
|
-
## AI-Specific Guidelines
|
|
179
|
-
|
|
180
|
-
- Always check for AI provider configuration before making API calls
|
|
181
|
-
- Include relevant file/directory context in prompts
|
|
182
|
-
- Handle rate limits and API errors gracefully
|
|
183
|
-
- Support both streaming and non-streaming responses
|
|
184
|
-
- Use temperature 0.1 for code generation tasks
|
|
185
|
-
|
|
186
|
-
## Development Tips
|
|
187
|
-
|
|
188
|
-
- Use `npm run build` to compile TypeScript to JavaScript
|
|
189
|
-
- Use `npm run lint` to check code quality
|
|
190
|
-
- Use `npm run test` for unit tests
|
|
191
|
-
- Commands should be stateless and configurable
|
|
192
|
-
- Prefer functional programming patterns
|
|
193
|
-
- Document complex logic with comments
|
|
194
|
-
- Follow existing naming conventions (camelCase for variables, PascalCase for types)
|
|
1
|
+
# AI Coding Assistant Instructions
|
|
2
|
+
|
|
3
|
+
## Shared NLabs Stack
|
|
4
|
+
- Use Lex (`@nlabs/lex`) for CLI workflows, building, compiling, deploying, and testing projects.
|
|
5
|
+
- Use Vitest for unit and integration tests.
|
|
6
|
+
- Use Playwright for end-to-end tests.
|
|
7
|
+
- Use GothamJS (`@nlabs/gothamjs`) for the presentation layer. Obtain components, views, routing, Tailwind setup, and default styles from GothamJS before creating custom project-level components.
|
|
8
|
+
- Use React v19 for frontend work.
|
|
9
|
+
- Use Tailwind v4 for CSS styles.
|
|
10
|
+
- Use MetropolisJS (`@nlabs/metropolisjs`) as the starting point for all frontend API integration. Create custom data types, actions, queries, or mutations only after MetropolisJS has been exhausted.
|
|
11
|
+
- Use Rip-Hunter to access API endpoints.
|
|
12
|
+
- Use `fetch` through Rip-Hunter rather than direct project-level `fetch` calls.
|
|
13
|
+
- Use ArkhamJS (`@nlabs/arkhamjs`) as the frontend data store. Store data, including session-storage-backed data, through Flux actions and event listeners.
|
|
14
|
+
- Prefer listening for Flux events over chaining `.then(...)` to Flux action promises.
|
|
15
|
+
- Flux actions update the data store before dispatching their events.
|
|
16
|
+
- Multiple listeners may listen for the same Flux action event.
|
|
17
|
+
- Read persistent data from the data store, and read event-specific data directly from the Flux action event when appropriate.
|
|
18
|
+
- Send all data as JSON.
|
|
19
|
+
- Use Reaktor (`@nlabs/reaktor`) for actions that interact with the ArangoDB database.
|
|
20
|
+
|
|
21
|
+
## Database
|
|
22
|
+
- All projects use the ArangoDB instance at `https://db.reaktor.io:8529`.
|
|
23
|
+
- ArangoDB is a document NoSQL database with SQL-style query and graph database features.
|
|
24
|
+
- When adding or deleting documents, check whether associated graph edges also need to be added or deleted.
|
|
25
|
+
|
|
26
|
+
## Project Structure
|
|
27
|
+
- Web apps should contain at least one microsite.
|
|
28
|
+
- Web apps should include a `src/ui` folder.
|
|
29
|
+
- Web apps with a backend should include a `src/api` folder or microsite.
|
|
30
|
+
- Library projects may use a root source folder without `src/ui` or `src/api`.
|
|
31
|
+
- Shared utility/helper functions should live in a shared file when used in more than one place.
|
|
32
|
+
- Keep one component per file.
|
|
33
|
+
- Each component should have a sibling test file named `MyComponent.test.ts` or `MyComponent.test.tsx`.
|
|
34
|
+
- Group components by component folder, for example `src/ui/components/MyComponent/MyComponent.tsx`.
|
|
35
|
+
|
|
36
|
+
## Package Scripts
|
|
37
|
+
- All projects should have at least `start`, `test`, and `update` scripts.
|
|
38
|
+
- If a project includes both `api` and `ui` workspaces, use `concurrently` in `start`:
|
|
39
|
+
`"start": "concurrently \"npm run start -w api\" \"npm run start -w ui\""`
|
|
40
|
+
- Use this workspace test script:
|
|
41
|
+
`"test": "npm run test --workspaces --ignore-scripts"`
|
|
42
|
+
- Use this workspace update script:
|
|
43
|
+
`"update": "npm run update --workspaces"`
|
|
44
|
+
|
|
45
|
+
## Testing
|
|
46
|
+
- Maintain at least 90% unit test coverage.
|
|
47
|
+
- Components that require other components should have integration tests.
|
|
48
|
+
- Provide at least one Playwright e2e test for each happy path.
|
|
49
|
+
|
|
50
|
+
## Code Style
|
|
51
|
+
- Use arrow functions for functions.
|
|
52
|
+
- Correctly type all variables, props, and arguments unless TypeScript inference already provides the correct type.
|
|
53
|
+
- Sort props and object keys alphabetically.
|
|
54
|
+
- Check and fix all ESLint errors and warnings.
|
|
55
|
+
- Use `eslint-config-styleguide` for linting rules.
|
package/AGENTS.md
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# AI Coding Assistant Instructions
|
|
2
|
+
|
|
3
|
+
## Shared NLabs Stack
|
|
4
|
+
- Use Lex (`@nlabs/lex`) for CLI workflows, building, compiling, deploying, and testing projects.
|
|
5
|
+
- Use Vitest for unit and integration tests.
|
|
6
|
+
- Use Playwright for end-to-end tests.
|
|
7
|
+
- Use GothamJS (`@nlabs/gothamjs`) for the presentation layer. Obtain components, views, routing, Tailwind setup, and default styles from GothamJS before creating custom project-level components.
|
|
8
|
+
- Use React v19 for frontend work.
|
|
9
|
+
- Use Tailwind v4 for CSS styles.
|
|
10
|
+
- Use MetropolisJS (`@nlabs/metropolisjs`) as the starting point for all frontend API integration. Create custom data types, actions, queries, or mutations only after MetropolisJS has been exhausted.
|
|
11
|
+
- Use Rip-Hunter to access API endpoints.
|
|
12
|
+
- Use `fetch` through Rip-Hunter rather than direct project-level `fetch` calls.
|
|
13
|
+
- Use ArkhamJS (`@nlabs/arkhamjs`) as the frontend data store. Store data, including session-storage-backed data, through Flux actions and event listeners.
|
|
14
|
+
- Prefer listening for Flux events over chaining `.then(...)` to Flux action promises.
|
|
15
|
+
- Flux actions update the data store before dispatching their events.
|
|
16
|
+
- Multiple listeners may listen for the same Flux action event.
|
|
17
|
+
- Read persistent data from the data store, and read event-specific data directly from the Flux action event when appropriate.
|
|
18
|
+
- Send all data as JSON.
|
|
19
|
+
- Use Reaktor (`@nlabs/reaktor`) for actions that interact with the ArangoDB database.
|
|
20
|
+
|
|
21
|
+
## Database
|
|
22
|
+
- All projects use the ArangoDB instance at `https://db.reaktor.io:8529`.
|
|
23
|
+
- ArangoDB is a document NoSQL database with SQL-style query and graph database features.
|
|
24
|
+
- When adding or deleting documents, check whether associated graph edges also need to be added or deleted.
|
|
25
|
+
|
|
26
|
+
## Project Structure
|
|
27
|
+
- Web apps should contain at least one microsite.
|
|
28
|
+
- Web apps should include a `src/ui` folder.
|
|
29
|
+
- Web apps with a backend should include a `src/api` folder or microsite.
|
|
30
|
+
- Library projects may use a root source folder without `src/ui` or `src/api`.
|
|
31
|
+
- Shared utility/helper functions should live in a shared file when used in more than one place.
|
|
32
|
+
- Keep one component per file.
|
|
33
|
+
- Each component should have a sibling test file named `MyComponent.test.ts` or `MyComponent.test.tsx`.
|
|
34
|
+
- Group components by component folder, for example `src/ui/components/MyComponent/MyComponent.tsx`.
|
|
35
|
+
|
|
36
|
+
## Package Scripts
|
|
37
|
+
- All projects should have at least `start`, `test`, and `update` scripts.
|
|
38
|
+
- If a project includes both `api` and `ui` workspaces, use `concurrently` in `start`:
|
|
39
|
+
`"start": "concurrently \"npm run start -w api\" \"npm run start -w ui\""`
|
|
40
|
+
- Use this workspace test script:
|
|
41
|
+
`"test": "npm run test --workspaces --ignore-scripts"`
|
|
42
|
+
- Use this workspace update script:
|
|
43
|
+
`"update": "npm run update --workspaces"`
|
|
44
|
+
|
|
45
|
+
## Testing
|
|
46
|
+
- Maintain at least 90% unit test coverage.
|
|
47
|
+
- Components that require other components should have integration tests.
|
|
48
|
+
- Provide at least one Playwright e2e test for each happy path.
|
|
49
|
+
|
|
50
|
+
## Code Style
|
|
51
|
+
- Use arrow functions for functions.
|
|
52
|
+
- Correctly type all variables, props, and arguments unless TypeScript inference already provides the correct type.
|
|
53
|
+
- Sort props and object keys alphabetically.
|
|
54
|
+
- Check and fix all ESLint errors and warnings.
|
|
55
|
+
- Use `eslint-config-styleguide` for linting rules.
|
package/README.md
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
# Lex: The Ultimate React Development CLI
|
|
2
2
|
|
|
3
|
+
<p align="center">
|
|
4
|
+
<img src="docs/assets/lex-logo.png" alt="Lex logo" width="520">
|
|
5
|
+
</p>
|
|
6
|
+
|
|
3
7
|
> **Zero Configuration. Maximum Productivity.**
|
|
4
8
|
|
|
5
9
|
Lex is the all-in-one development CLI that eliminates the complexity of modern React development. No more juggling webpack configs, testing setups, or build tools. Just install Lex globally and focus on what matters most - building amazing applications.
|
|
@@ -315,6 +319,7 @@ export default {
|
|
|
315
319
|
|
|
316
320
|
// SWC configuration (defaults to ESM format)
|
|
317
321
|
// SWC is now the default transpiler for all compilation tasks
|
|
322
|
+
reactCompiler: true,
|
|
318
323
|
|
|
319
324
|
// Vitest configuration (merged with Lex defaults)
|
|
320
325
|
vitest: {
|
|
@@ -345,6 +350,7 @@ Lex provides extensive configuration options through the `lex.config.js` file. H
|
|
|
345
350
|
| `outputPath` | `string` | `'./lib'` | Output directory path | `outputPath: './build'` |
|
|
346
351
|
| `packageManager` | `'npm' \| 'yarn'` | `'npm'` | Package manager to use | `packageManager: 'yarn'` |
|
|
347
352
|
| `preset` | `'web' \| 'node' \| 'lambda' \| 'mobile'` | `'web'` | Project preset type | `preset: 'node'` |
|
|
353
|
+
| `reactCompiler` | `boolean \| object` | `false` | Enable React Compiler through SWC, optionally with compiler options | `reactCompiler: true` |
|
|
348
354
|
| `sourceFullPath` | `string` | `path.resolve('./src')` | Absolute source code path | `sourceFullPath: '/absolute/path'` |
|
|
349
355
|
| `sourcePath` | `string` | `'./src'` | Source code directory path | `sourcePath: './app'` |
|
|
350
356
|
| `targetEnvironment` | `'web' \| 'node'` | `'web'` | Target runtime environment | `targetEnvironment: 'node'` |
|
|
@@ -379,9 +385,30 @@ SWC is automatically configured and doesn't require additional configuration in
|
|
|
379
385
|
| **Output Format** | JavaScript module format | `esm` |
|
|
380
386
|
| **Target** | JavaScript target version | `es2020` |
|
|
381
387
|
| **JSX Runtime** | React JSX transformation | `automatic` |
|
|
388
|
+
| **React Compiler** | Optional React Compiler SWC plugin | `false` |
|
|
382
389
|
| **Decorators** | TypeScript decorators support | `enabled` |
|
|
383
390
|
| **Source Maps** | Debug information | `inline` |
|
|
384
391
|
|
|
392
|
+
Enable the React Compiler through Lex's SWC pipeline:
|
|
393
|
+
|
|
394
|
+
```javascript
|
|
395
|
+
export default {
|
|
396
|
+
reactCompiler: true
|
|
397
|
+
};
|
|
398
|
+
```
|
|
399
|
+
|
|
400
|
+
You can also pass SWC React Compiler options:
|
|
401
|
+
|
|
402
|
+
```javascript
|
|
403
|
+
export default {
|
|
404
|
+
reactCompiler: {
|
|
405
|
+
compilationMode: 'infer',
|
|
406
|
+
panicThreshold: 'none',
|
|
407
|
+
target: '19'
|
|
408
|
+
}
|
|
409
|
+
};
|
|
410
|
+
```
|
|
411
|
+
|
|
385
412
|
### **Vitest Configuration**
|
|
386
413
|
|
|
387
414
|
| Option | Type | Default | Description | Example |
|
package/lib/LexConfig.d.ts
CHANGED
|
@@ -45,6 +45,7 @@ export interface LexConfigType {
|
|
|
45
45
|
outputPath?: string;
|
|
46
46
|
packageManager?: 'npm' | 'yarn';
|
|
47
47
|
preset?: 'web' | 'node' | 'lambda' | 'mobile';
|
|
48
|
+
reactCompiler?: ReactCompilerConfig;
|
|
48
49
|
sourceFullPath?: string;
|
|
49
50
|
sourcePath?: string;
|
|
50
51
|
swc?: SWCOptions;
|
|
@@ -54,6 +55,9 @@ export interface LexConfigType {
|
|
|
54
55
|
webpack?: WebpackConfig;
|
|
55
56
|
}
|
|
56
57
|
export type Config = LexConfigType;
|
|
58
|
+
export type ReactCompilerConfig = boolean | Record<string, unknown>;
|
|
59
|
+
export declare const reactCompilerPluginName = "@swc/react-compiler";
|
|
60
|
+
export declare const defaultReactCompilerOptions: Record<string, unknown>;
|
|
57
61
|
export declare const defaultConfigValues: LexConfigType;
|
|
58
62
|
export declare const getPackageDir: () => string;
|
|
59
63
|
export declare const getTypeScriptConfigPath: (configName: string) => string;
|
|
@@ -61,6 +65,7 @@ export declare class LexConfig {
|
|
|
61
65
|
static config: LexConfigType;
|
|
62
66
|
static set useTypescript(value: boolean);
|
|
63
67
|
static getLexDir(): string;
|
|
68
|
+
static getSWCConfigWithReactCompiler(swcConfig?: SWCOptions | undefined, reactCompiler?: ReactCompilerConfig | undefined): SWCOptions | undefined;
|
|
64
69
|
static updateConfig(updatedConfig: LexConfigType): LexConfigType;
|
|
65
70
|
static addConfigParams(cmd: Record<string, any>, params: LexConfigType): void;
|
|
66
71
|
static parseConfig(cmd: Record<string, any>, isRoot?: boolean): Promise<void>;
|
package/lib/LexConfig.js
CHANGED
|
@@ -21,6 +21,13 @@ import { URL } from 'url';
|
|
|
21
21
|
import { getLexPackageJsonPath, relativeFilePath } from './utils/file.js';
|
|
22
22
|
import { log } from './utils/log.js';
|
|
23
23
|
const cwd = process.cwd();
|
|
24
|
+
export const reactCompilerPluginName = '@swc/react-compiler';
|
|
25
|
+
export const defaultReactCompilerOptions = {
|
|
26
|
+
compilationMode: 'infer',
|
|
27
|
+
panicThreshold: 'none',
|
|
28
|
+
target: '19'
|
|
29
|
+
};
|
|
30
|
+
const isReactCompilerPlugin = (plugin)=>Array.isArray(plugin) && plugin[0] === reactCompilerPluginName;
|
|
24
31
|
export const defaultConfigValues = {
|
|
25
32
|
ai: {
|
|
26
33
|
maxTokens: 4000,
|
|
@@ -34,7 +41,6 @@ export const defaultConfigValues = {
|
|
|
34
41
|
entryJs: 'index.js',
|
|
35
42
|
env: null,
|
|
36
43
|
eslint: {},
|
|
37
|
-
vitest: {},
|
|
38
44
|
outputFullPath: pathResolve(cwd, './lib'),
|
|
39
45
|
outputHash: false,
|
|
40
46
|
outputPath: './lib',
|
|
@@ -75,6 +81,7 @@ export const defaultConfigValues = {
|
|
|
75
81
|
targetEnvironment: 'web',
|
|
76
82
|
useGraphQl: false,
|
|
77
83
|
useTypescript: false,
|
|
84
|
+
vitest: {},
|
|
78
85
|
webpack: {
|
|
79
86
|
staticPath: './src/static'
|
|
80
87
|
}
|
|
@@ -204,6 +211,39 @@ export class LexConfig {
|
|
|
204
211
|
static getLexDir() {
|
|
205
212
|
return dirname(getLexPackageJsonPath());
|
|
206
213
|
}
|
|
214
|
+
static getSWCConfigWithReactCompiler(swcConfig = LexConfig.config.swc, reactCompiler = LexConfig.config.reactCompiler) {
|
|
215
|
+
if (reactCompiler === undefined) {
|
|
216
|
+
return swcConfig;
|
|
217
|
+
}
|
|
218
|
+
const currentSwcConfig = swcConfig || defaultConfigValues.swc;
|
|
219
|
+
const currentJsc = currentSwcConfig?.jsc || {};
|
|
220
|
+
const currentExperimental = currentJsc.experimental || {};
|
|
221
|
+
const plugins = Array.isArray(currentExperimental.plugins) ? currentExperimental.plugins.filter((plugin)=>!isReactCompilerPlugin(plugin)) : [];
|
|
222
|
+
const experimental = reactCompiler === false ? {
|
|
223
|
+
...currentExperimental,
|
|
224
|
+
plugins
|
|
225
|
+
} : {
|
|
226
|
+
...currentExperimental,
|
|
227
|
+
plugins: [
|
|
228
|
+
...plugins,
|
|
229
|
+
[
|
|
230
|
+
reactCompilerPluginName,
|
|
231
|
+
typeof reactCompiler === 'object' ? {
|
|
232
|
+
...defaultReactCompilerOptions,
|
|
233
|
+
...reactCompiler
|
|
234
|
+
} : defaultReactCompilerOptions
|
|
235
|
+
]
|
|
236
|
+
]
|
|
237
|
+
};
|
|
238
|
+
const swcConfigWithReactCompiler = {
|
|
239
|
+
...currentSwcConfig,
|
|
240
|
+
jsc: {
|
|
241
|
+
...currentJsc,
|
|
242
|
+
experimental
|
|
243
|
+
}
|
|
244
|
+
};
|
|
245
|
+
return swcConfigWithReactCompiler;
|
|
246
|
+
}
|
|
207
247
|
static updateConfig(updatedConfig) {
|
|
208
248
|
const { outputFullPath, outputPath, sourcePath, sourceFullPath, useTypescript, ai } = updatedConfig;
|
|
209
249
|
const packageDir = getPackageDir();
|
|
@@ -229,6 +269,7 @@ export class LexConfig {
|
|
|
229
269
|
...LexConfig.config,
|
|
230
270
|
...updatedConfig
|
|
231
271
|
};
|
|
272
|
+
LexConfig.config.swc = LexConfig.getSWCConfigWithReactCompiler();
|
|
232
273
|
return LexConfig.config;
|
|
233
274
|
}
|
|
234
275
|
static addConfigParams(cmd, params) {
|
|
@@ -421,4 +462,4 @@ _define_property(LexConfig, "config", {
|
|
|
421
462
|
...defaultConfigValues
|
|
422
463
|
});
|
|
423
464
|
|
|
424
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9MZXhDb25maWcudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCBmaW5kRmlsZVVwIGZyb20gJ2ZpbmQtZmlsZS11cCc7XG5pbXBvcnQge2V4aXN0c1N5bmMsIHJlYWRGaWxlU3luYywgd3JpdGVGaWxlU3luY30gZnJvbSAnZnMnO1xuaW1wb3J0IHtcbiAgZGlybmFtZSxcbiAgZXh0bmFtZSBhcyBwYXRoRXh0bmFtZSxcbiAgcmVsYXRpdmUgYXMgcGF0aFJlbGF0aXZlLFxuICByZXNvbHZlIGFzIHBhdGhSZXNvbHZlXG59IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHtVUkx9IGZyb20gJ3VybCc7XG5cbmltcG9ydCB7Z2V0TGV4UGFja2FnZUpzb25QYXRoLCByZWxhdGl2ZUZpbGVQYXRofSBmcm9tICcuL3V0aWxzL2ZpbGUuanMnO1xuaW1wb3J0IHtsb2d9IGZyb20gJy4vdXRpbHMvbG9nLmpzJztcblxuaW1wb3J0IHR5cGUge09wdGlvbnN9IGZyb20gJ0Bzd2MvY29yZSc7XG5pbXBvcnQgdHlwZSB7TGludGVyfSBmcm9tICdlc2xpbnQnO1xuXG5jb25zdCBjd2Q6IHN0cmluZyA9IHByb2Nlc3MuY3dkKCk7XG5cblxuZXhwb3J0IGludGVyZmFjZSBWaXRlc3RDb25maWcge1xuICBba2V5OiBzdHJpbmddOiB1bmtub3duO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdlYnBhY2tDb25maWcge1xuICBba2V5OiBzdHJpbmddOiB1bmtub3duO1xuICBlbnRyeT86IHN0cmluZyB8IHN0cmluZ1tdO1xuICBvdXRwdXQ/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgbW9kdWxlPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHBsdWdpbnM/OiB1bmtub3duW107XG4gIHN0YXRpY1BhdGg/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQUlDb25maWcge1xuICBwcm92aWRlcj86ICdjdXJzb3InIHwgJ2NvcGlsb3QnIHwgJ29wZW5haScgfCAnYW50aHJvcGljJyB8ICdub25lJztcbiAgYXBpS2V5Pzogc3RyaW5nO1xuICBtb2RlbD86IHN0cmluZztcbiAgbWF4VG9rZW5zPzogbnVtYmVyO1xuICB0ZW1wZXJhdHVyZT86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEZXZDb25maWcge1xuICBwb3J0PzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVTTGludENvbmZpZyB7XG4gIFtrZXk6IHN0cmluZ106IHVua25vd247XG4gIGV4dGVuZHM/OiBzdHJpbmdbXTtcbiAgcnVsZXM/OiBMaW50ZXIuUnVsZXNSZWNvcmQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGV4Q29uZmlnVHlwZSB7XG4gIGFpPzogQUlDb25maWc7XG4gIGNvbmZpZ0ZpbGVzPzogc3RyaW5nW107XG4gIGNvcHlGaWxlcz86IHN0cmluZ1tdO1xuICBkZXY/OiBEZXZDb25maWc7XG4gIGVudHJ5SFRNTD86IHN0cmluZztcbiAgZW50cnlKcz86IHN0cmluZztcbiAgZW52Pzogb2JqZWN0IHwgbnVsbDtcbiAgZXNsaW50PzogRVNMaW50Q29uZmlnO1xuICBnaXRVcmw/OiBzdHJpbmc7XG4gIHZpdGVzdD86IFZpdGVzdENvbmZpZztcbiAgbGlicmFyeU5hbWU/OiBzdHJpbmc7XG4gIGxpYnJhcnlUYXJnZXQ/OiBzdHJpbmc7XG4gIG91dHB1dEZpbGU/OiBzdHJpbmc7XG4gIG91dHB1dEZ1bGxQYXRoPzogc3RyaW5nO1xuICBvdXRwdXRIYXNoPzogYm9vbGVhbjtcbiAgb3V0cHV0UGF0aD86IHN0cmluZztcbiAgcGFja2FnZU1hbmFnZXI/OiAnbnBtJyB8ICd5YXJuJztcbiAgcHJlc2V0PzogJ3dlYicgfCAnbm9kZScgfCAnbGFtYmRhJyB8ICdtb2JpbGUnO1xuICBzb3VyY2VGdWxsUGF0aD86IHN0cmluZztcbiAgc291cmNlUGF0aD86IHN0cmluZztcbiAgc3djPzogU1dDT3B0aW9ucztcbiAgdGFyZ2V0RW52aXJvbm1lbnQ/OiAnbm9kZScgfCAnd2ViJztcbiAgdXNlR3JhcGhRbD86IGJvb2xlYW47XG4gIHVzZVR5cGVzY3JpcHQ/OiBib29sZWFuO1xuICB3ZWJwYWNrPzogV2VicGFja0NvbmZpZztcbn1cblxuZXhwb3J0IHR5cGUgQ29uZmlnID0gTGV4Q29uZmlnVHlwZTtcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRDb25maWdWYWx1ZXM6IExleENvbmZpZ1R5cGUgPSB7XG4gIGFpOiB7XG4gICAgbWF4VG9rZW5zOiA0MDAwLFxuICAgIG1vZGVsOiAnZ3B0LTRvJyxcbiAgICBwcm92aWRlcjogJ25vbmUnLFxuICAgIHRlbXBlcmF0dXJlOiAwLjFcbiAgfSxcbiAgY29uZmlnRmlsZXM6IFtdLFxuICBjb3B5RmlsZXM6IFtdLFxuICBlbnRyeUhUTUw6ICdpbmRleC5odG1sJyxcbiAgZW50cnlKczogJ2luZGV4LmpzJyxcbiAgZW52OiBudWxsLFxuICBlc2xpbnQ6IHt9LFxuICB2aXRlc3Q6IHt9LFxuICBvdXRwdXRGdWxsUGF0aDogcGF0aFJlc29sdmUoY3dkLCAnLi9saWInKSxcbiAgb3V0cHV0SGFzaDogZmFsc2UsXG4gIG91dHB1dFBhdGg6ICcuL2xpYicsXG4gIHBhY2thZ2VNYW5hZ2VyOiAnbnBtJyxcbiAgcHJlc2V0OiAnd2ViJyxcbiAgc291cmNlRnVsbFBhdGg6IHBhdGhSZXNvbHZlKGN3ZCwgJy4vc3JjJyksXG4gIHNvdXJjZVBhdGg6ICcuL3NyYycsXG4gIHN3Yzoge1xuICAgIGlubGluZVNvdXJjZXNDb250ZW50OiB0cnVlLFxuICAgIGlzTW9kdWxlOiB0cnVlLFxuICAgIGpzYzoge1xuICAgICAgZXh0ZXJuYWxIZWxwZXJzOiBmYWxzZSxcbiAgICAgIGtlZXBDbGFzc05hbWVzOiBmYWxzZSxcbiAgICAgIGxvb3NlOiBmYWxzZSxcbiAgICAgIHBhcnNlcjoge1xuICAgICAgICBkZWNvcmF0b3JzOiB0cnVlLFxuICAgICAgICBkeW5hbWljSW1wb3J0OiB0cnVlLFxuICAgICAgICBzeW50YXg6ICd0eXBlc2NyaXB0JyxcbiAgICAgICAgdHN4OiB0cnVlXG4gICAgICB9LFxuICAgICAgdGFyZ2V0OiAnZXMyMDIzJyxcbiAgICAgIHRyYW5zZm9ybToge1xuICAgICAgICByZWFjdDoge1xuICAgICAgICAgIHJ1bnRpbWU6ICdhdXRvbWF0aWMnXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIG1pbmlmeTogZmFsc2UsXG4gICAgbW9kdWxlOiB7XG4gICAgICBsYXp5OiBmYWxzZSxcbiAgICAgIG5vSW50ZXJvcDogZmFsc2UsXG4gICAgICBzdHJpY3Q6IGZhbHNlLFxuICAgICAgc3RyaWN0TW9kZTogdHJ1ZSxcbiAgICAgIHR5cGU6ICdlczYnXG4gICAgfSxcbiAgICBzb3VyY2VNYXBzOiAnaW5saW5lJ1xuICB9LFxuICB0YXJnZXRFbnZpcm9ubWVudDogJ3dlYicsXG4gIHVzZUdyYXBoUWw6IGZhbHNlLFxuICB1c2VUeXBlc2NyaXB0OiBmYWxzZSxcbiAgd2VicGFjazoge1xuICAgIHN0YXRpY1BhdGg6ICcuL3NyYy9zdGF0aWMnXG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQYWNrYWdlRGlyID0gKCk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IGN3ZCA9IHByb2Nlc3MuY3dkKCk7XG4gIGNvbnN0IGN1cnJlbnRQa2dQYXRoID0gcGF0aFJlc29sdmUoY3dkLCAncGFja2FnZS5qc29uJyk7XG5cbiAgaWYoZXhpc3RzU3luYyhjdXJyZW50UGtnUGF0aCkpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGtnID0gSlNPTi5wYXJzZShyZWFkRmlsZVN5bmMoY3VycmVudFBrZ1BhdGgsICd1dGY4JykpO1xuICAgICAgaWYoIXBrZy53b3Jrc3BhY2VzKSB7XG4gICAgICAgIHJldHVybiBjd2Q7XG4gICAgICB9XG4gICAgfSBjYXRjaHtcbiAgICAgIHJldHVybiBjd2Q7XG4gICAgfVxuICB9XG5cbiAgbGV0IHNlYXJjaERpciA9IGN3ZDtcblxuICBmb3IobGV0IGkgPSAwOyBpIDwgMTA7IGkrKykge1xuICAgIGNvbnN0IHBrZ1BhdGggPSBwYXRoUmVzb2x2ZShzZWFyY2hEaXIsICdwYWNrYWdlLmpzb24nKTtcbiAgICBpZihleGlzdHNTeW5jKHBrZ1BhdGgpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBwa2cgPSBKU09OLnBhcnNlKHJlYWRGaWxlU3luYyhwa2dQYXRoLCAndXRmOCcpKTtcblxuICAgICAgICBpZighcGtnLndvcmtzcGFjZXMpIHtcbiAgICAgICAgICByZXR1cm4gc2VhcmNoRGlyO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoe1xuICAgICAgICAvLyBDb250aW51ZSBzZWFyY2hpbmdcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBwYXJlbnQgPSBkaXJuYW1lKHNlYXJjaERpcik7XG5cbiAgICBpZihwYXJlbnQgPT09IHNlYXJjaERpcikge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHNlYXJjaERpciA9IHBhcmVudDtcbiAgfVxuXG4gIGNvbnN0IGNvbmZpZ0Zvcm1hdHMgPSBbJ2pzJywgJ21qcycsICdjanMnLCAndHMnLCAnanNvbiddO1xuXG4gIGZvcihjb25zdCBmb3JtYXQgb2YgY29uZmlnRm9ybWF0cykge1xuICAgIGNvbnN0IGNvbmZpZ1BhdGggPSBmaW5kRmlsZVVwLnN5bmMoYGxleC5jb25maWcuJHtmb3JtYXR9YCwgY3dkLCA1KTtcblxuICAgIGlmKGNvbmZpZ1BhdGgpIHtcbiAgICAgIHJldHVybiBkaXJuYW1lKGNvbmZpZ1BhdGgpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjd2Q7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VHlwZVNjcmlwdENvbmZpZ1BhdGggPSAoY29uZmlnTmFtZTogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgY29uc3QgcGFja2FnZURpciA9IGdldFBhY2thZ2VEaXIoKTtcbiAgY29uc3QgY3dkID0gcHJvY2Vzcy5jd2QoKTtcblxuICBpZihjb25maWdOYW1lID09PSAndHNjb25maWcuYnVpbGQuanNvbicpIHtcbiAgICBjb25zdCBwcm9qZWN0QnVpbGRDb25maWcgPSBwYXRoUmVzb2x2ZShwYWNrYWdlRGlyLCAndHNjb25maWcuYnVpbGQuanNvbicpO1xuXG4gICAgaWYoZXhpc3RzU3luYyhwcm9qZWN0QnVpbGRDb25maWcpKSB7XG4gICAgICByZXR1cm4gcHJvamVjdEJ1aWxkQ29uZmlnO1xuICAgIH1cblxuICAgIGNvbnN0IHJvb3RCdWlsZENvbmZpZyA9IHBhdGhSZXNvbHZlKGN3ZCwgJ3RzY29uZmlnLmJ1aWxkLmpzb24nKTtcbiAgICBpZihleGlzdHNTeW5jKHJvb3RCdWlsZENvbmZpZykpIHtcbiAgICAgIHJldHVybiByb290QnVpbGRDb25maWc7XG4gICAgfVxuICB9XG5cbiAgaWYoY29uZmlnTmFtZSA9PT0gJ3RzY29uZmlnLmxpbnQuanNvbicpIHtcbiAgICBjb25zdCBwcm9qZWN0TGludENvbmZpZyA9IHBhdGhSZXNvbHZlKHBhY2thZ2VEaXIsICd0c2NvbmZpZy5lc2xpbnQuanNvbicpO1xuICAgIGlmKGV4aXN0c1N5bmMocHJvamVjdExpbnRDb25maWcpKSB7XG4gICAgICByZXR1cm4gcHJvamVjdExpbnRDb25maWc7XG4gICAgfVxuXG4gICAgY29uc3Qgcm9vdExpbnRDb25maWcgPSBwYXRoUmVzb2x2ZShjd2QsICd0c2NvbmZpZy5lc2xpbnQuanNvbicpO1xuXG4gICAgaWYoZXhpc3RzU3luYyhyb290TGludENvbmZpZykpIHtcbiAgICAgIHJldHVybiByb290TGludENvbmZpZztcbiAgICB9XG4gIH1cblxuICBpZihjb25maWdOYW1lID09PSAndHNjb25maWcudGVzdC5qc29uJykge1xuICAgIGNvbnN0IHByb2plY3RUZXN0Q29uZmlnID0gcGF0aFJlc29sdmUocGFja2FnZURpciwgJ3RzY29uZmlnLnRlc3QuanNvbicpO1xuICAgIGlmKGV4aXN0c1N5bmMocHJvamVjdFRlc3RDb25maWcpKSB7XG4gICAgICByZXR1cm4gcHJvamVjdFRlc3RDb25maWc7XG4gICAgfVxuXG4gICAgY29uc3Qgcm9vdFRlc3RDb25maWcgPSBwYXRoUmVzb2x2ZShjd2QsICd0c2NvbmZpZy50ZXN0Lmpzb24nKTtcblxuICAgIGlmKGV4aXN0c1N5bmMocm9vdFRlc3RDb25maWcpKSB7XG4gICAgICByZXR1cm4gcm9vdFRlc3RDb25maWc7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcHJvamVjdENvbmZpZ1BhdGggPSBwYXRoUmVzb2x2ZShwYWNrYWdlRGlyLCBjb25maWdOYW1lKTtcblxuICBpZihleGlzdHNTeW5jKHByb2plY3RDb25maWdQYXRoKSkge1xuICAgIHJldHVybiBwcm9qZWN0Q29uZmlnUGF0aDtcbiAgfVxuXG4gIGNvbnN0IHJvb3RDb25maWdQYXRoID0gcGF0aFJlc29sdmUoY3dkLCBjb25maWdOYW1lKTtcblxuICBpZihleGlzdHNTeW5jKHJvb3RDb25maWdQYXRoKSkge1xuICAgIHJldHVybiByb290Q29uZmlnUGF0aDtcbiAgfVxuXG4gIGNvbnN0IGxleERpciA9IExleENvbmZpZy5nZXRMZXhEaXIoKTtcblxuICByZXR1cm4gcGF0aFJlc29sdmUobGV4RGlyLCBjb25maWdOYW1lKTtcbn07XG5cbmV4cG9ydCBjbGFzcyBMZXhDb25maWcge1xuICBzdGF0aWMgY29uZmlnOiBMZXhDb25maWdUeXBlID0ge1xuICAgIC4uLmRlZmF1bHRDb25maWdWYWx1ZXNcbiAgfTtcblxuICBzdGF0aWMgc2V0IHVzZVR5cGVzY3JpcHQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICBMZXhDb25maWcuY29uZmlnLnVzZVR5cGVzY3JpcHQgPSB2YWx1ZTtcbiAgICBjb25zdCB7ZW50cnlKcywgc291cmNlRnVsbFBhdGgsIHRhcmdldEVudmlyb25tZW50fSA9IExleENvbmZpZy5jb25maWc7XG5cbiAgICBpZihlbnRyeUpzID09PSAnaW5kZXguanMnICYmIHZhbHVlKSB7XG4gICAgICBjb25zdCBpbmRleFBhdGg6IHN0cmluZyA9IHBhdGhSZXNvbHZlKGN3ZCwgc291cmNlRnVsbFBhdGggfHwgY3dkLCAnaW5kZXgudHN4Jyk7XG4gICAgICBjb25zdCBoYXNJbmRleFRzeDogYm9vbGVhbiA9IGV4aXN0c1N5bmMoaW5kZXhQYXRoKTtcblxuICAgICAgaWYoaGFzSW5kZXhUc3gpIHtcbiAgICAgICAgTGV4Q29uZmlnLmNvbmZpZy5lbnRyeUpzID0gJ2luZGV4LnRzeCc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBMZXhDb25maWcuY29uZmlnLmVudHJ5SnMgPSAnaW5kZXgudHMnO1xuICAgICAgfVxuICAgIH1cblxuICAgIExleENvbmZpZy5jb25maWcuc3djID0gTGV4Q29uZmlnLmNvbmZpZy5zd2MgfHwgey4uLmRlZmF1bHRDb25maWdWYWx1ZXMuc3djIX07XG4gICAgTGV4Q29uZmlnLmNvbmZpZy5zd2MuanNjID0gTGV4Q29uZmlnLmNvbmZpZy5zd2MuanNjIHx8IHsuLi5kZWZhdWx0Q29uZmlnVmFsdWVzLnN3YyEuanNjIX07XG4gICAgTGV4Q29uZmlnLmNvbmZpZy5zd2MuanNjLnBhcnNlciA9IHtcbiAgICAgIHN5bnRheDogJ3R5cGVzY3JpcHQnLFxuICAgICAgdHN4OiB0cnVlXG4gICAgfTtcblxuICAgIGlmKHRhcmdldEVudmlyb25tZW50ID09PSAnd2ViJykge1xuICAgICAgTGV4Q29uZmlnLmNvbmZpZy5zd2MuanNjLnRyYW5zZm9ybSA9IHtcbiAgICAgICAgcmVhY3Q6IHtcbiAgICAgICAgICBydW50aW1lOiAnYXV0b21hdGljJ1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBnZXRMZXhEaXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZGlybmFtZShnZXRMZXhQYWNrYWdlSnNvblBhdGgoKSk7XG4gIH1cblxuICBzdGF0aWMgdXBkYXRlQ29uZmlnKHVwZGF0ZWRDb25maWc6IExleENvbmZpZ1R5cGUpOiBMZXhDb25maWdUeXBlIHtcbiAgICBjb25zdCB7b3V0cHV0RnVsbFBhdGgsIG91dHB1dFBhdGgsIHNvdXJjZVBhdGgsIHNvdXJjZUZ1bGxQYXRoLCB1c2VUeXBlc2NyaXB0LCBhaX0gPSB1cGRhdGVkQ29uZmlnO1xuICAgIGNvbnN0IHBhY2thZ2VEaXIgPSBnZXRQYWNrYWdlRGlyKCk7XG5cbiAgICBpZih1c2VUeXBlc2NyaXB0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIExleENvbmZpZy51c2VUeXBlc2NyaXB0ID0gdXNlVHlwZXNjcmlwdDtcbiAgICB9XG5cbiAgICBpZihvdXRwdXRQYXRoICE9PSB1bmRlZmluZWQgJiYgb3V0cHV0RnVsbFBhdGggPT09IHVuZGVmaW5lZCkge1xuICAgICAgdXBkYXRlZENvbmZpZy5vdXRwdXRGdWxsUGF0aCA9IHBhdGhSZXNvbHZlKHBhY2thZ2VEaXIsIG91dHB1dFBhdGgpO1xuICAgIH1cblxuICAgIGlmKHNvdXJjZVBhdGggIT09IHVuZGVmaW5lZCAmJiBzb3VyY2VGdWxsUGF0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB1cGRhdGVkQ29uZmlnLnNvdXJjZUZ1bGxQYXRoID0gcGF0aFJlc29sdmUocGFja2FnZURpciwgc291cmNlUGF0aCk7XG4gICAgfVxuXG4gICAgaWYoYWkpIHtcbiAgICAgIExleENvbmZpZy5jb25maWcuYWkgPSB7Li4uTGV4Q29uZmlnLmNvbmZpZy5haSwgLi4uYWl9O1xuXG4gICAgICBpZihwcm9jZXNzLmVudi5DVVJTT1JfSURFID09PSAndHJ1ZScgJiYgTGV4Q29uZmlnLmNvbmZpZy5haS5wcm92aWRlciA9PT0gJ25vbmUnKSB7XG4gICAgICAgIExleENvbmZpZy5jb25maWcuYWkucHJvdmlkZXIgPSAnY3Vyc29yJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBMZXhDb25maWcuY29uZmlnID0gey4uLkxleENvbmZpZy5jb25maWcsIC4uLnVwZGF0ZWRDb25maWd9O1xuXG4gICAgcmV0dXJuIExleENvbmZpZy5jb25maWc7XG4gIH1cblxuICBzdGF0aWMgYWRkQ29uZmlnUGFyYW1zKGNtZDogUmVjb3JkPHN0cmluZywgYW55PiwgcGFyYW1zOiBMZXhDb25maWdUeXBlKSB7XG4gICAgY29uc3QgbmFtZVByb3BlcnR5OiBzdHJpbmcgPSAnX25hbWUnO1xuICAgIGNvbnN0IHtlbnZpcm9ubWVudCwgb3V0cHV0UGF0aCwgc291cmNlUGF0aCwgdHlwZXNjcmlwdH0gPSBjbWQ7XG4gICAgY29uc3QgcGFja2FnZURpciA9IGdldFBhY2thZ2VEaXIoKTtcblxuICAgIGlmKG91dHB1dFBhdGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgcGFyYW1zLm91dHB1dFBhdGggPSBvdXRwdXRQYXRoO1xuICAgICAgcGFyYW1zLm91dHB1dEZ1bGxQYXRoID0gcGF0aFJlc29sdmUocGFja2FnZURpciwgb3V0cHV0UGF0aCk7XG4gICAgfSBlbHNlIGlmKHBhcmFtcy5vdXRwdXRQYXRoICYmICFwYXJhbXMub3V0cHV0RnVsbFBhdGgpIHtcbiAgICAgIHBhcmFtcy5vdXRwdXRGdWxsUGF0aCA9IHBhdGhSZXNvbHZlKHBhY2thZ2VEaXIsIHBhcmFtcy5vdXRwdXRQYXRoKTtcbiAgICB9XG5cbiAgICBpZihzb3VyY2VQYXRoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHBhcmFtcy5zb3VyY2VQYXRoID0gc291cmNlUGF0aDtcbiAgICAgIHBhcmFtcy5zb3VyY2VGdWxsUGF0aCA9IHBhdGhSZXNvbHZlKHBhY2thZ2VEaXIsIHNvdXJjZVBhdGgpO1xuICAgIH0gZWxzZSBpZihwYXJhbXMuc291cmNlUGF0aCAmJiAhcGFyYW1zLnNvdXJjZUZ1bGxQYXRoKSB7XG4gICAgICBwYXJhbXMuc291cmNlRnVsbFBhdGggPSBwYXRoUmVzb2x2ZShwYWNrYWdlRGlyLCBwYXJhbXMuc291cmNlUGF0aCk7XG4gICAgfVxuXG4gICAgaWYodHlwZXNjcmlwdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBwYXJhbXMudXNlVHlwZXNjcmlwdCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYoZW52aXJvbm1lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcGFyYW1zLnRhcmdldEVudmlyb25tZW50ID0gZW52aXJvbm1lbnQgPT09ICd3ZWInID8gJ3dlYicgOiAnbm9kZSc7XG4gICAgfVxuXG4gICAgcHJvY2Vzcy5lbnYuTEVYX0NPTkZJRyA9IEpTT04uc3RyaW5naWZ5KFxuICAgICAge1xuICAgICAgICAuLi5MZXhDb25maWcudXBkYXRlQ29uZmlnKHBhcmFtcyksXG4gICAgICAgIGNvbW1hbmROYW1lOiBjbWRbbmFtZVByb3BlcnR5XSxcbiAgICAgICAgaXNTdGF0aWM6IGNtZC5zdGF0aWNcbiAgICAgIH0sIG51bGwsIDBcbiAgICApO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIHBhcnNlQ29uZmlnKGNtZDogUmVjb3JkPHN0cmluZywgYW55PiwgaXNSb290OiBib29sZWFuID0gdHJ1ZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHtjbGlOYW1lID0gJ0xleCcsIGxleENvbmZpZywgbGV4Q29uZmlnTmFtZSwgcXVpZXQsIHR5cGVzY3JpcHQsIGRlYnVnID0gZmFsc2V9ID0gY21kO1xuICAgIGNvbnN0IGNvbmZpZ0Zvcm1hdHMgPSBbJ2pzJywgJ21qcycsICdjanMnLCAndHMnLCAnanNvbiddO1xuICAgIGNvbnN0IGNvbmZpZ0Jhc2VOYW1lOiBzdHJpbmcgPSBsZXhDb25maWdOYW1lIHx8ICdsZXguY29uZmlnJztcbiAgICBsZXQgY29uZmlnUGF0aDogc3RyaW5nID0gbGV4Q29uZmlnIHx8ICcnO1xuICAgIGxldCBjb25maWdFeGlzdHM6IGJvb2xlYW4gPSBsZXhDb25maWcgPyBleGlzdHNTeW5jKGNvbmZpZ1BhdGgpIDogZmFsc2U7XG5cbiAgICBpZighY29uZmlnUGF0aCB8fCAhY29uZmlnRXhpc3RzKSB7XG4gICAgICBpZihkZWJ1Zykge1xuICAgICAgICBsb2coYFNlYXJjaGluZyBmb3IgY29uZmlnIGZpbGVzIHdpdGggYmFzZSBuYW1lOiAke2NvbmZpZ0Jhc2VOYW1lfWAsICdpbmZvJywgcXVpZXQpO1xuICAgICAgfVxuXG4gICAgICBmb3IoY29uc3QgZm9ybWF0IG9mIGNvbmZpZ0Zvcm1hdHMpIHtcbiAgICAgICAgY29uc3QgcG90ZW50aWFsUGF0aCA9IGlzUm9vdFxuICAgICAgICAgID8gcGF0aFJlc29sdmUoY3dkLCBgLi8ke2NvbmZpZ0Jhc2VOYW1lfS4ke2Zvcm1hdH1gKVxuICAgICAgICAgIDogcmVsYXRpdmVGaWxlUGF0aChgJHtjb25maWdCYXNlTmFtZX0uJHtmb3JtYXR9YCwgY3dkKTtcblxuICAgICAgICBpZihkZWJ1Zykge1xuICAgICAgICAgIGxvZyhgQ2hlY2tpbmcgZm9yIGNvbmZpZyBmaWxlOiAke3BvdGVudGlhbFBhdGh9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZihleGlzdHNTeW5jKHBvdGVudGlhbFBhdGgpKSB7XG4gICAgICAgICAgY29uZmlnUGF0aCA9IHBvdGVudGlhbFBhdGg7XG4gICAgICAgICAgY29uZmlnRXhpc3RzID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmKGNvbmZpZ0V4aXN0cykge1xuICAgICAgbG9nKGBVc2luZyAke2NsaU5hbWV9IGNvbmZpZ3VyYXRpb24gZmlsZTogJHtjb25maWdQYXRofWAsICdub3RlJywgcXVpZXQpO1xuICAgICAgY29uc3QgZXh0OiBzdHJpbmcgPSBwYXRoRXh0bmFtZShjb25maWdQYXRoKTtcblxuICAgICAgaWYoZXh0ID09PSAnLmpzb24nKSB7XG4gICAgICAgIGNvbnN0IGNvbmZpZ0NvbnRlbnQ6IHN0cmluZyA9IHJlYWRGaWxlU3luYyhjb25maWdQYXRoLCAndXRmOCcpO1xuXG4gICAgICAgIGlmKGNvbmZpZ0NvbnRlbnQpIHtcbiAgICAgICAgICBsZXQgY29uZmlnSnNvbjogTGV4Q29uZmlnVHlwZTtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25maWdKc29uID0gSlNPTi5wYXJzZShjb25maWdDb250ZW50KT8uZGVmYXVsdCB8fCB7fTtcbiAgICAgICAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICAgICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IEZhaWxlZCB0byBwYXJzZSBKU09OIGNvbmZpZzogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgICAgICAgIGNvbmZpZ0pzb24gPSB7fTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBMZXhDb25maWcuYWRkQ29uZmlnUGFyYW1zKGNtZCwgY29uZmlnSnNvbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBDb25maWcgZmlsZSBtYWxmb3JtZWQsICR7Y29uZmlnUGF0aH1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZihbJy5qcycsICcubWpzJywgJy5janMnLCAnLnRzJ10uaW5jbHVkZXMoZXh0KSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGxldCBsZXhDdXN0b21Db25maWc7XG5cbiAgICAgICAgICBpZihleHQgPT09ICcuY2pzJykge1xuICAgICAgICAgICAgY29uc3QgZmlsZVVybCA9IG5ldyBVUkwoYGZpbGU6Ly8vJHtwYXRoUmVzb2x2ZShjb25maWdQYXRoKX1gKS5ocmVmO1xuXG4gICAgICAgICAgICBpZihkZWJ1Zykge1xuICAgICAgICAgICAgICBsb2coYExvYWRpbmcgQ29tbW9uSlMgY29uZmlnIGZyb206ICR7ZmlsZVVybH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxleEN1c3RvbUNvbmZpZyA9IGF3YWl0IGltcG9ydChmaWxlVXJsKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYoZGVidWcpIHtcbiAgICAgICAgICAgICAgbG9nKGBMb2FkaW5nIEVTTS9UUyBjb25maWcgZnJvbTogJHtjb25maWdQYXRofWAsICdpbmZvJywgcXVpZXQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXhDdXN0b21Db25maWcgPSBhd2FpdCBpbXBvcnQoY29uZmlnUGF0aCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgY29uZmlnID0gbGV4Q3VzdG9tQ29uZmlnLmRlZmF1bHQgfHwgbGV4Q3VzdG9tQ29uZmlnO1xuXG4gICAgICAgICAgaWYoZGVidWcpIHtcbiAgICAgICAgICAgIGxvZyhgTG9hZGVkIGNvbmZpZzogJHtKU09OLnN0cmluZ2lmeShjb25maWcsIG51bGwsIDIpfWAsICdpbmZvJywgcXVpZXQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmKCFjb25maWcpIHtcbiAgICAgICAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBXYXJuaW5nOiBDb25maWcgZmlsZSBsb2FkZWQgYnV0IG5vIGNvbmZpZ3VyYXRpb24gZm91bmRgLCAnd2FybicsIHF1aWV0KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBMZXhDb25maWcuYWRkQ29uZmlnUGFyYW1zKGNtZCwgY29uZmlnIHx8IHt9KTtcbiAgICAgICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogRmFpbGVkIHRvIGxvYWQgY29uZmlnIGZpbGU6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICAgICAgaWYoZGVidWcpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogQ29uZmlnIGZpbGUgbXVzdCBiZSBhIEpTLCBDSlMsIE1KUywgVFMsIG9yIEpTT04gZmlsZS5gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgIGxvZygnTm8gY29uZmlnIGZpbGUgZm91bmQuIFVzaW5nIGRlZmF1bHQgY29uZmlndXJhdGlvbi4nLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgIH1cblxuICAgICAgTGV4Q29uZmlnLnVzZVR5cGVzY3JpcHQgPSAhIXR5cGVzY3JpcHQ7XG4gICAgICBMZXhDb25maWcuYWRkQ29uZmlnUGFyYW1zKGNtZCwgTGV4Q29uZmlnLmNvbmZpZyk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGNoZWNrVHlwZXNjcmlwdENvbmZpZygpIHtcbiAgICBjb25zdCBwYWNrYWdlRGlyID0gZ2V0UGFja2FnZURpcigpO1xuICAgIGNvbnN0IHRzY29uZmlnUGF0aDogc3RyaW5nID0gcGF0aFJlc29sdmUocGFja2FnZURpciwgJy4vdHNjb25maWcuanNvbicpO1xuXG4gICAgaWYoIWV4aXN0c1N5bmModHNjb25maWdQYXRoKSkge1xuICAgICAgY29uc3QgbGV4RGlyID0gTGV4Q29uZmlnLmdldExleERpcigpO1xuICAgICAgY29uc3QgYmFzZUNvbmZpZ1BhdGggPSBwYXRoUmVzb2x2ZShsZXhEaXIsICd0c2NvbmZpZy5iYXNlLmpzb24nKTtcbiAgICAgIGNvbnN0IHRlbXBsYXRlQ29uZmlnUGF0aCA9IHBhdGhSZXNvbHZlKGxleERpciwgJ3RzY29uZmlnLnRlbXBsYXRlLmpzb24nKTtcbiAgICAgIGNvbnN0IHNvdXJjZVBhdGggPSBleGlzdHNTeW5jKGJhc2VDb25maWdQYXRoKSA/IGJhc2VDb25maWdQYXRoIDogdGVtcGxhdGVDb25maWdQYXRoO1xuXG4gICAgICBpZihleGlzdHNTeW5jKHNvdXJjZVBhdGgpKSB7XG4gICAgICAgIHdyaXRlRmlsZVN5bmModHNjb25maWdQYXRoLCByZWFkRmlsZVN5bmMoc291cmNlUGF0aCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBnZXRUeXBlU2NyaXB0RGVjbGFyYXRpb25GbGFncygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgY3dkID0gcHJvY2Vzcy5jd2QoKTtcbiAgICBjb25zdCBvdXRwdXRQYXRoID0gTGV4Q29uZmlnLmNvbmZpZy5vdXRwdXRQYXRoIHx8ICcuL2xpYic7XG4gICAgY29uc3Qgb3V0cHV0RnVsbFBhdGggPSBMZXhDb25maWcuY29uZmlnLm91dHB1dEZ1bGxQYXRoIHx8IHBhdGhSZXNvbHZlKGN3ZCwgb3V0cHV0UGF0aCk7XG4gICAgY29uc3Qgc291cmNlUGF0aCA9IExleENvbmZpZy5jb25maWcuc291cmNlUGF0aCB8fCAnLi9zcmMnO1xuICAgIGNvbnN0IHNvdXJjZUZ1bGxQYXRoID0gTGV4Q29uZmlnLmNvbmZpZy5zb3VyY2VGdWxsUGF0aCB8fCBwYXRoUmVzb2x2ZShjd2QsIHNvdXJjZVBhdGgpO1xuICAgIGNvbnN0IHJlbGF0aXZlT3V0RGlyID0gcGF0aFJlbGF0aXZlKGN3ZCwgb3V0cHV0RnVsbFBhdGgpIHx8ICcuL2xpYic7XG4gICAgY29uc3QgcmVsYXRpdmVSb290RGlyID0gcGF0aFJlbGF0aXZlKGN3ZCwgc291cmNlRnVsbFBhdGgpIHx8ICcuL3NyYyc7XG5cbiAgICByZXR1cm4gW1xuICAgICAgJy0tZW1pdERlY2xhcmF0aW9uT25seScsIC8vIENSSVRJQ0FMOiBPbmx5IGVtaXQgLmQudHMgZmlsZXMsIG5vIEpTIGZpbGVzXG4gICAgICAnLS1kZWNsYXJhdGlvbicsIC8vIEdlbmVyYXRlIGRlY2xhcmF0aW9uIGZpbGVzXG4gICAgICAnLS1kZWNsYXJhdGlvbk1hcCcsIC8vIEdlbmVyYXRlIHNvdXJjZSBtYXBzIGZvciBkZWNsYXJhdGlvbnNcbiAgICAgICctLW91dERpcicsIHJlbGF0aXZlT3V0RGlyLFxuICAgICAgJy0tcm9vdERpcicsIHJlbGF0aXZlUm9vdERpcixcbiAgICAgICctLXNraXBMaWJDaGVjaycsIC8vIFNraXAgdHlwZSBjaGVja2luZyBvZiBkZWNsYXJhdGlvbiBmaWxlcyAoZmFzdGVyLCBtb3JlIGxlbmllbnQpXG4gICAgICAnLS1lc01vZHVsZUludGVyb3AnLFxuICAgICAgJy0tYWxsb3dTeW50aGV0aWNEZWZhdWx0SW1wb3J0cycsXG4gICAgICAnLS1tb2R1bGUnLCAnTm9kZU5leHQnLFxuICAgICAgJy0tbW9kdWxlUmVzb2x1dGlvbicsICdOb2RlTmV4dCcsXG4gICAgICAnLS10YXJnZXQnLCAnRVNOZXh0JyxcbiAgICAgICctLWpzeCcsICdyZWFjdC1qc3gnLFxuICAgICAgJy0taXNvbGF0ZWRNb2R1bGVzJyxcbiAgICAgICctLXJlc29sdmVKc29uTW9kdWxlJyxcbiAgICAgICctLWFsbG93SnMnLFxuICAgICAgJy0taWdub3JlQ29uZmlnJ1xuICAgICAgLy8gTm90ZTogLS1ub1VudXNlZExvY2FscyBhbmQgLS1ub1VudXNlZFBhcmFtZXRlcnMgYXJlIG5vdCBuZWVkZWQgZm9yIGRlY2xhcmF0aW9uIGdlbmVyYXRpb25cbiAgICAgIC8vIGFuZCB3b3VsZCBhY3R1YWxseSBlbmFibGUgc3RyaWN0IGNoZWNraW5nLCB3aGljaCB3ZSB3YW50IHRvIGF2b2lkIGZvciBmYXN0ZXIgZGVjbGFyYXRpb24gZ2VuZXJhdGlvblxuICAgIF07XG4gIH1cblxuICBzdGF0aWMgY2hlY2tMaW50VHlwZXNjcmlwdENvbmZpZygpIHtcbiAgICBjb25zdCBsZXhEaXIgPSBMZXhDb25maWcuZ2V0TGV4RGlyKCk7XG4gICAgY29uc3QgdHNjb25maWdMaW50UGF0aDogc3RyaW5nID0gcGF0aFJlc29sdmUobGV4RGlyLCAnLi90c2NvbmZpZy5saW50Lmpzb24nKTtcblxuICAgIGlmKCFleGlzdHNTeW5jKHRzY29uZmlnTGludFBhdGgpKSB7XG4gICAgICBjb25zdCB0ZW1wbGF0ZVBhdGggPSBwYXRoUmVzb2x2ZShsZXhEaXIsICd0c2NvbmZpZy5saW50Lmpzb24nKTtcbiAgICAgIGlmKGV4aXN0c1N5bmModGVtcGxhdGVQYXRoKSkge1xuICAgICAgICB3cml0ZUZpbGVTeW5jKHRzY29uZmlnTGludFBhdGgsIHJlYWRGaWxlU3luYyh0ZW1wbGF0ZVBhdGgpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzdGF0aWMgY2hlY2tUZXN0VHlwZXNjcmlwdENvbmZpZygpIHtcbiAgICBjb25zdCBsZXhEaXIgPSBMZXhDb25maWcuZ2V0TGV4RGlyKCk7XG4gICAgY29uc3QgdHNjb25maWdUZXN0UGF0aDogc3RyaW5nID0gcGF0aFJlc29sdmUobGV4RGlyLCAnLi90c2NvbmZpZy50ZXN0Lmpzb24nKTtcblxuICAgIGlmKCFleGlzdHNTeW5jKHRzY29uZmlnVGVzdFBhdGgpKSB7XG4gICAgICBjb25zdCB0ZW1wbGF0ZVBhdGggPSBwYXRoUmVzb2x2ZShsZXhEaXIsICd0c2NvbmZpZy50ZXN0Lmpzb24nKTtcbiAgICAgIGlmKGV4aXN0c1N5bmModGVtcGxhdGVQYXRoKSkge1xuICAgICAgICB3cml0ZUZpbGVTeW5jKHRzY29uZmlnVGVzdFBhdGgsIHJlYWRGaWxlU3luYyh0ZW1wbGF0ZVBhdGgpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgU1dDT3B0aW9ucyA9IE9wdGlvbnM7XG4iXSwibmFtZXMiOlsiZmluZEZpbGVVcCIsImV4aXN0c1N5bmMiLCJyZWFkRmlsZVN5bmMiLCJ3cml0ZUZpbGVTeW5jIiwiZGlybmFtZSIsImV4dG5hbWUiLCJwYXRoRXh0bmFtZSIsInJlbGF0aXZlIiwicGF0aFJlbGF0aXZlIiwicmVzb2x2ZSIsInBhdGhSZXNvbHZlIiwiVVJMIiwiZ2V0TGV4UGFja2FnZUpzb25QYXRoIiwicmVsYXRpdmVGaWxlUGF0aCIsImxvZyIsImN3ZCIsInByb2Nlc3MiLCJkZWZhdWx0Q29uZmlnVmFsdWVzIiwiYWkiLCJtYXhUb2tlbnMiLCJtb2RlbCIsInByb3ZpZGVyIiwidGVtcGVyYXR1cmUiLCJjb25maWdGaWxlcyIsImNvcHlGaWxlcyIsImVudHJ5SFRNTCIsImVudHJ5SnMiLCJlbnYiLCJlc2xpbnQiLCJ2aXRlc3QiLCJvdXRwdXRGdWxsUGF0aCIsIm91dHB1dEhhc2giLCJvdXRwdXRQYXRoIiwicGFja2FnZU1hbmFnZXIiLCJwcmVzZXQiLCJzb3VyY2VGdWxsUGF0aCIsInNvdXJjZVBhdGgiLCJzd2MiLCJpbmxpbmVTb3VyY2VzQ29udGVudCIsImlzTW9kdWxlIiwianNjIiwiZXh0ZXJuYWxIZWxwZXJzIiwia2VlcENsYXNzTmFtZXMiLCJsb29zZSIsInBhcnNlciIsImRlY29yYXRvcnMiLCJkeW5hbWljSW1wb3J0Iiwic3ludGF4IiwidHN4IiwidGFyZ2V0IiwidHJhbnNmb3JtIiwicmVhY3QiLCJydW50aW1lIiwibWluaWZ5IiwibW9kdWxlIiwibGF6eSIsIm5vSW50ZXJvcCIsInN0cmljdCIsInN0cmljdE1vZGUiLCJ0eXBlIiwic291cmNlTWFwcyIsInRhcmdldEVudmlyb25tZW50IiwidXNlR3JhcGhRbCIsInVzZVR5cGVzY3JpcHQiLCJ3ZWJwYWNrIiwic3RhdGljUGF0aCIsImdldFBhY2thZ2VEaXIiLCJjdXJyZW50UGtnUGF0aCIsInBrZyIsIkpTT04iLCJwYXJzZSIsIndvcmtzcGFjZXMiLCJzZWFyY2hEaXIiLCJpIiwicGtnUGF0aCIsInBhcmVudCIsImNvbmZpZ0Zvcm1hdHMiLCJmb3JtYXQiLCJjb25maWdQYXRoIiwic3luYyIsImdldFR5cGVTY3JpcHRDb25maWdQYXRoIiwiY29uZmlnTmFtZSIsInBhY2thZ2VEaXIiLCJwcm9qZWN0QnVpbGRDb25maWciLCJyb290QnVpbGRDb25maWciLCJwcm9qZWN0TGludENvbmZpZyIsInJvb3RMaW50Q29uZmlnIiwicHJvamVjdFRlc3RDb25maWciLCJyb290VGVzdENvbmZpZyIsInByb2plY3RDb25maWdQYXRoIiwicm9vdENvbmZpZ1BhdGgiLCJsZXhEaXIiLCJMZXhDb25maWciLCJnZXRMZXhEaXIiLCJ2YWx1ZSIsImNvbmZpZyIsImluZGV4UGF0aCIsImhhc0luZGV4VHN4IiwidXBkYXRlQ29uZmlnIiwidXBkYXRlZENvbmZpZyIsInVuZGVmaW5lZCIsIkNVUlNPUl9JREUiLCJhZGRDb25maWdQYXJhbXMiLCJjbWQiLCJwYXJhbXMiLCJuYW1lUHJvcGVydHkiLCJlbnZpcm9ubWVudCIsInR5cGVzY3JpcHQiLCJMRVhfQ09ORklHIiwic3RyaW5naWZ5IiwiY29tbWFuZE5hbWUiLCJpc1N0YXRpYyIsInN0YXRpYyIsInBhcnNlQ29uZmlnIiwiaXNSb290IiwiY2xpTmFtZSIsImxleENvbmZpZyIsImxleENvbmZpZ05hbWUiLCJxdWlldCIsImRlYnVnIiwiY29uZmlnQmFzZU5hbWUiLCJjb25maWdFeGlzdHMiLCJwb3RlbnRpYWxQYXRoIiwiZXh0IiwiY29uZmlnQ29udGVudCIsImNvbmZpZ0pzb24iLCJkZWZhdWx0IiwiZXJyb3IiLCJtZXNzYWdlIiwiaW5jbHVkZXMiLCJsZXhDdXN0b21Db25maWciLCJmaWxlVXJsIiwiaHJlZiIsImNvbnNvbGUiLCJjaGVja1R5cGVzY3JpcHRDb25maWciLCJ0c2NvbmZpZ1BhdGgiLCJiYXNlQ29uZmlnUGF0aCIsInRlbXBsYXRlQ29uZmlnUGF0aCIsImdldFR5cGVTY3JpcHREZWNsYXJhdGlvbkZsYWdzIiwicmVsYXRpdmVPdXREaXIiLCJyZWxhdGl2ZVJvb3REaXIiLCJjaGVja0xpbnRUeXBlc2NyaXB0Q29uZmlnIiwidHNjb25maWdMaW50UGF0aCIsInRlbXBsYXRlUGF0aCIsImNoZWNrVGVzdFR5cGVzY3JpcHRDb25maWciLCJ0c2NvbmZpZ1Rlc3RQYXRoIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQUE7OztDQUdDLEdBQ0QsT0FBT0EsZ0JBQWdCLGVBQWU7QUFDdEMsU0FBUUMsVUFBVSxFQUFFQyxZQUFZLEVBQUVDLGFBQWEsUUFBTyxLQUFLO0FBQzNELFNBQ0VDLE9BQU8sRUFDUEMsV0FBV0MsV0FBVyxFQUN0QkMsWUFBWUMsWUFBWSxFQUN4QkMsV0FBV0MsV0FBVyxRQUNqQixPQUFPO0FBQ2QsU0FBUUMsR0FBRyxRQUFPLE1BQU07QUFFeEIsU0FBUUMscUJBQXFCLEVBQUVDLGdCQUFnQixRQUFPLGtCQUFrQjtBQUN4RSxTQUFRQyxHQUFHLFFBQU8saUJB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
|
|
465
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9MZXhDb25maWcudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCBmaW5kRmlsZVVwIGZyb20gJ2ZpbmQtZmlsZS11cCc7XG5pbXBvcnQge2V4aXN0c1N5bmMsIHJlYWRGaWxlU3luYywgd3JpdGVGaWxlU3luY30gZnJvbSAnZnMnO1xuaW1wb3J0IHtcbiAgZGlybmFtZSxcbiAgZXh0bmFtZSBhcyBwYXRoRXh0bmFtZSxcbiAgcmVsYXRpdmUgYXMgcGF0aFJlbGF0aXZlLFxuICByZXNvbHZlIGFzIHBhdGhSZXNvbHZlXG59IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHtVUkx9IGZyb20gJ3VybCc7XG5cbmltcG9ydCB7Z2V0TGV4UGFja2FnZUpzb25QYXRoLCByZWxhdGl2ZUZpbGVQYXRofSBmcm9tICcuL3V0aWxzL2ZpbGUuanMnO1xuaW1wb3J0IHtsb2d9IGZyb20gJy4vdXRpbHMvbG9nLmpzJztcblxuaW1wb3J0IHR5cGUge09wdGlvbnN9IGZyb20gJ0Bzd2MvY29yZSc7XG5pbXBvcnQgdHlwZSB7TGludGVyfSBmcm9tICdlc2xpbnQnO1xuXG5jb25zdCBjd2Q6IHN0cmluZyA9IHByb2Nlc3MuY3dkKCk7XG5cblxuZXhwb3J0IGludGVyZmFjZSBWaXRlc3RDb25maWcge1xuICBba2V5OiBzdHJpbmddOiB1bmtub3duO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdlYnBhY2tDb25maWcge1xuICBba2V5OiBzdHJpbmddOiB1bmtub3duO1xuICBlbnRyeT86IHN0cmluZyB8IHN0cmluZ1tdO1xuICBvdXRwdXQ/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgbW9kdWxlPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHBsdWdpbnM/OiB1bmtub3duW107XG4gIHN0YXRpY1BhdGg/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQUlDb25maWcge1xuICBwcm92aWRlcj86ICdjdXJzb3InIHwgJ2NvcGlsb3QnIHwgJ29wZW5haScgfCAnYW50aHJvcGljJyB8ICdub25lJztcbiAgYXBpS2V5Pzogc3RyaW5nO1xuICBtb2RlbD86IHN0cmluZztcbiAgbWF4VG9rZW5zPzogbnVtYmVyO1xuICB0ZW1wZXJhdHVyZT86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEZXZDb25maWcge1xuICBwb3J0PzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVTTGludENvbmZpZyB7XG4gIFtrZXk6IHN0cmluZ106IHVua25vd247XG4gIGV4dGVuZHM/OiBzdHJpbmdbXTtcbiAgcnVsZXM/OiBMaW50ZXIuUnVsZXNSZWNvcmQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGV4Q29uZmlnVHlwZSB7XG4gIGFpPzogQUlDb25maWc7XG4gIGNvbmZpZ0ZpbGVzPzogc3RyaW5nW107XG4gIGNvcHlGaWxlcz86IHN0cmluZ1tdO1xuICBkZXY/OiBEZXZDb25maWc7XG4gIGVudHJ5SFRNTD86IHN0cmluZztcbiAgZW50cnlKcz86IHN0cmluZztcbiAgZW52Pzogb2JqZWN0IHwgbnVsbDtcbiAgZXNsaW50PzogRVNMaW50Q29uZmlnO1xuICBnaXRVcmw/OiBzdHJpbmc7XG4gIHZpdGVzdD86IFZpdGVzdENvbmZpZztcbiAgbGlicmFyeU5hbWU/OiBzdHJpbmc7XG4gIGxpYnJhcnlUYXJnZXQ/OiBzdHJpbmc7XG4gIG91dHB1dEZpbGU/OiBzdHJpbmc7XG4gIG91dHB1dEZ1bGxQYXRoPzogc3RyaW5nO1xuICBvdXRwdXRIYXNoPzogYm9vbGVhbjtcbiAgb3V0cHV0UGF0aD86IHN0cmluZztcbiAgcGFja2FnZU1hbmFnZXI/OiAnbnBtJyB8ICd5YXJuJztcbiAgcHJlc2V0PzogJ3dlYicgfCAnbm9kZScgfCAnbGFtYmRhJyB8ICdtb2JpbGUnO1xuICByZWFjdENvbXBpbGVyPzogUmVhY3RDb21waWxlckNvbmZpZztcbiAgc291cmNlRnVsbFBhdGg/OiBzdHJpbmc7XG4gIHNvdXJjZVBhdGg/OiBzdHJpbmc7XG4gIHN3Yz86IFNXQ09wdGlvbnM7XG4gIHRhcmdldEVudmlyb25tZW50PzogJ25vZGUnIHwgJ3dlYic7XG4gIHVzZUdyYXBoUWw/OiBib29sZWFuO1xuICB1c2VUeXBlc2NyaXB0PzogYm9vbGVhbjtcbiAgd2VicGFjaz86IFdlYnBhY2tDb25maWc7XG59XG5cbmV4cG9ydCB0eXBlIENvbmZpZyA9IExleENvbmZpZ1R5cGU7XG5cbmV4cG9ydCB0eXBlIFJlYWN0Q29tcGlsZXJDb25maWcgPSBib29sZWFuIHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbmV4cG9ydCBjb25zdCByZWFjdENvbXBpbGVyUGx1Z2luTmFtZSA9ICdAc3djL3JlYWN0LWNvbXBpbGVyJztcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRSZWFjdENvbXBpbGVyT3B0aW9uczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gIGNvbXBpbGF0aW9uTW9kZTogJ2luZmVyJyxcbiAgcGFuaWNUaHJlc2hvbGQ6ICdub25lJyxcbiAgdGFyZ2V0OiAnMTknXG59O1xuXG5jb25zdCBpc1JlYWN0Q29tcGlsZXJQbHVnaW4gPSAocGx1Z2luOiB1bmtub3duKTogYm9vbGVhbiA9PiAoXG4gIEFycmF5LmlzQXJyYXkocGx1Z2luKSAmJiBwbHVnaW5bMF0gPT09IHJlYWN0Q29tcGlsZXJQbHVnaW5OYW1lXG4pO1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdENvbmZpZ1ZhbHVlczogTGV4Q29uZmlnVHlwZSA9IHtcbiAgYWk6IHtcbiAgICBtYXhUb2tlbnM6IDQwMDAsXG4gICAgbW9kZWw6ICdncHQtNG8nLFxuICAgIHByb3ZpZGVyOiAnbm9uZScsXG4gICAgdGVtcGVyYXR1cmU6IDAuMVxuICB9LFxuICBjb25maWdGaWxlczogW10sXG4gIGNvcHlGaWxlczogW10sXG4gIGVudHJ5SFRNTDogJ2luZGV4Lmh0bWwnLFxuICBlbnRyeUpzOiAnaW5kZXguanMnLFxuICBlbnY6IG51bGwsXG4gIGVzbGludDoge30sXG4gIG91dHB1dEZ1bGxQYXRoOiBwYXRoUmVzb2x2ZShjd2QsICcuL2xpYicpLFxuICBvdXRwdXRIYXNoOiBmYWxzZSxcbiAgb3V0cHV0UGF0aDogJy4vbGliJyxcbiAgcGFja2FnZU1hbmFnZXI6ICducG0nLFxuICBwcmVzZXQ6ICd3ZWInLFxuICBzb3VyY2VGdWxsUGF0aDogcGF0aFJlc29sdmUoY3dkLCAnLi9zcmMnKSxcbiAgc291cmNlUGF0aDogJy4vc3JjJyxcbiAgc3djOiB7XG4gICAgaW5saW5lU291cmNlc0NvbnRlbnQ6IHRydWUsXG4gICAgaXNNb2R1bGU6IHRydWUsXG4gICAganNjOiB7XG4gICAgICBleHRlcm5hbEhlbHBlcnM6IGZhbHNlLFxuICAgICAga2VlcENsYXNzTmFtZXM6IGZhbHNlLFxuICAgICAgbG9vc2U6IGZhbHNlLFxuICAgICAgcGFyc2VyOiB7XG4gICAgICAgIGRlY29yYXRvcnM6IHRydWUsXG4gICAgICAgIGR5bmFtaWNJbXBvcnQ6IHRydWUsXG4gICAgICAgIHN5bnRheDogJ3R5cGVzY3JpcHQnLFxuICAgICAgICB0c3g6IHRydWVcbiAgICAgIH0sXG4gICAgICB0YXJnZXQ6ICdlczIwMjMnLFxuICAgICAgdHJhbnNmb3JtOiB7XG4gICAgICAgIHJlYWN0OiB7XG4gICAgICAgICAgcnVudGltZTogJ2F1dG9tYXRpYydcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgbWluaWZ5OiBmYWxzZSxcbiAgICBtb2R1bGU6IHtcbiAgICAgIGxhenk6IGZhbHNlLFxuICAgICAgbm9JbnRlcm9wOiBmYWxzZSxcbiAgICAgIHN0cmljdDogZmFsc2UsXG4gICAgICBzdHJpY3RNb2RlOiB0cnVlLFxuICAgICAgdHlwZTogJ2VzNidcbiAgICB9LFxuICAgIHNvdXJjZU1hcHM6ICdpbmxpbmUnXG4gIH0sXG4gIHRhcmdldEVudmlyb25tZW50OiAnd2ViJyxcbiAgdXNlR3JhcGhRbDogZmFsc2UsXG4gIHVzZVR5cGVzY3JpcHQ6IGZhbHNlLFxuICB2aXRlc3Q6IHt9LFxuICB3ZWJwYWNrOiB7XG4gICAgc3RhdGljUGF0aDogJy4vc3JjL3N0YXRpYydcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldFBhY2thZ2VEaXIgPSAoKTogc3RyaW5nID0+IHtcbiAgY29uc3QgY3dkID0gcHJvY2Vzcy5jd2QoKTtcbiAgY29uc3QgY3VycmVudFBrZ1BhdGggPSBwYXRoUmVzb2x2ZShjd2QsICdwYWNrYWdlLmpzb24nKTtcblxuICBpZihleGlzdHNTeW5jKGN1cnJlbnRQa2dQYXRoKSkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwa2cgPSBKU09OLnBhcnNlKHJlYWRGaWxlU3luYyhjdXJyZW50UGtnUGF0aCwgJ3V0ZjgnKSk7XG4gICAgICBpZighcGtnLndvcmtzcGFjZXMpIHtcbiAgICAgICAgcmV0dXJuIGN3ZDtcbiAgICAgIH1cbiAgICB9IGNhdGNoe1xuICAgICAgcmV0dXJuIGN3ZDtcbiAgICB9XG4gIH1cblxuICBsZXQgc2VhcmNoRGlyID0gY3dkO1xuXG4gIGZvcihsZXQgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG4gICAgY29uc3QgcGtnUGF0aCA9IHBhdGhSZXNvbHZlKHNlYXJjaERpciwgJ3BhY2thZ2UuanNvbicpO1xuICAgIGlmKGV4aXN0c1N5bmMocGtnUGF0aCkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHBrZyA9IEpTT04ucGFyc2UocmVhZEZpbGVTeW5jKHBrZ1BhdGgsICd1dGY4JykpO1xuXG4gICAgICAgIGlmKCFwa2cud29ya3NwYWNlcykge1xuICAgICAgICAgIHJldHVybiBzZWFyY2hEaXI7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2h7XG4gICAgICAgIC8vIENvbnRpbnVlIHNlYXJjaGluZ1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHBhcmVudCA9IGRpcm5hbWUoc2VhcmNoRGlyKTtcblxuICAgIGlmKHBhcmVudCA9PT0gc2VhcmNoRGlyKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgc2VhcmNoRGlyID0gcGFyZW50O1xuICB9XG5cbiAgY29uc3QgY29uZmlnRm9ybWF0cyA9IFsnanMnLCAnbWpzJywgJ2NqcycsICd0cycsICdqc29uJ107XG5cbiAgZm9yKGNvbnN0IGZvcm1hdCBvZiBjb25maWdGb3JtYXRzKSB7XG4gICAgY29uc3QgY29uZmlnUGF0aCA9IGZpbmRGaWxlVXAuc3luYyhgbGV4LmNvbmZpZy4ke2Zvcm1hdH1gLCBjd2QsIDUpO1xuXG4gICAgaWYoY29uZmlnUGF0aCkge1xuICAgICAgcmV0dXJuIGRpcm5hbWUoY29uZmlnUGF0aCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGN3ZDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRUeXBlU2NyaXB0Q29uZmlnUGF0aCA9IChjb25maWdOYW1lOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBwYWNrYWdlRGlyID0gZ2V0UGFja2FnZURpcigpO1xuICBjb25zdCBjd2QgPSBwcm9jZXNzLmN3ZCgpO1xuXG4gIGlmKGNvbmZpZ05hbWUgPT09ICd0c2NvbmZpZy5idWlsZC5qc29uJykge1xuICAgIGNvbnN0IHByb2plY3RCdWlsZENvbmZpZyA9IHBhdGhSZXNvbHZlKHBhY2thZ2VEaXIsICd0c2NvbmZpZy5idWlsZC5qc29uJyk7XG5cbiAgICBpZihleGlzdHNTeW5jKHByb2plY3RCdWlsZENvbmZpZykpIHtcbiAgICAgIHJldHVybiBwcm9qZWN0QnVpbGRDb25maWc7XG4gICAgfVxuXG4gICAgY29uc3Qgcm9vdEJ1aWxkQ29uZmlnID0gcGF0aFJlc29sdmUoY3dkLCAndHNjb25maWcuYnVpbGQuanNvbicpO1xuICAgIGlmKGV4aXN0c1N5bmMocm9vdEJ1aWxkQ29uZmlnKSkge1xuICAgICAgcmV0dXJuIHJvb3RCdWlsZENvbmZpZztcbiAgICB9XG4gIH1cblxuICBpZihjb25maWdOYW1lID09PSAndHNjb25maWcubGludC5qc29uJykge1xuICAgIGNvbnN0IHByb2plY3RMaW50Q29uZmlnID0gcGF0aFJlc29sdmUocGFja2FnZURpciwgJ3RzY29uZmlnLmVzbGludC5qc29uJyk7XG4gICAgaWYoZXhpc3RzU3luYyhwcm9qZWN0TGludENvbmZpZykpIHtcbiAgICAgIHJldHVybiBwcm9qZWN0TGludENvbmZpZztcbiAgICB9XG5cbiAgICBjb25zdCByb290TGludENvbmZpZyA9IHBhdGhSZXNvbHZlKGN3ZCwgJ3RzY29uZmlnLmVzbGludC5qc29uJyk7XG5cbiAgICBpZihleGlzdHNTeW5jKHJvb3RMaW50Q29uZmlnKSkge1xuICAgICAgcmV0dXJuIHJvb3RMaW50Q29uZmlnO1xuICAgIH1cbiAgfVxuXG4gIGlmKGNvbmZpZ05hbWUgPT09ICd0c2NvbmZpZy50ZXN0Lmpzb24nKSB7XG4gICAgY29uc3QgcHJvamVjdFRlc3RDb25maWcgPSBwYXRoUmVzb2x2ZShwYWNrYWdlRGlyLCAndHNjb25maWcudGVzdC5qc29uJyk7XG4gICAgaWYoZXhpc3RzU3luYyhwcm9qZWN0VGVzdENvbmZpZykpIHtcbiAgICAgIHJldHVybiBwcm9qZWN0VGVzdENvbmZpZztcbiAgICB9XG5cbiAgICBjb25zdCByb290VGVzdENvbmZpZyA9IHBhdGhSZXNvbHZlKGN3ZCwgJ3RzY29uZmlnLnRlc3QuanNvbicpO1xuXG4gICAgaWYoZXhpc3RzU3luYyhyb290VGVzdENvbmZpZykpIHtcbiAgICAgIHJldHVybiByb290VGVzdENvbmZpZztcbiAgICB9XG4gIH1cblxuICBjb25zdCBwcm9qZWN0Q29uZmlnUGF0aCA9IHBhdGhSZXNvbHZlKHBhY2thZ2VEaXIsIGNvbmZpZ05hbWUpO1xuXG4gIGlmKGV4aXN0c1N5bmMocHJvamVjdENvbmZpZ1BhdGgpKSB7XG4gICAgcmV0dXJuIHByb2plY3RDb25maWdQYXRoO1xuICB9XG5cbiAgY29uc3Qgcm9vdENvbmZpZ1BhdGggPSBwYXRoUmVzb2x2ZShjd2QsIGNvbmZpZ05hbWUpO1xuXG4gIGlmKGV4aXN0c1N5bmMocm9vdENvbmZpZ1BhdGgpKSB7XG4gICAgcmV0dXJuIHJvb3RDb25maWdQYXRoO1xuICB9XG5cbiAgY29uc3QgbGV4RGlyID0gTGV4Q29uZmlnLmdldExleERpcigpO1xuXG4gIHJldHVybiBwYXRoUmVzb2x2ZShsZXhEaXIsIGNvbmZpZ05hbWUpO1xufTtcblxuZXhwb3J0IGNsYXNzIExleENvbmZpZyB7XG4gIHN0YXRpYyBjb25maWc6IExleENvbmZpZ1R5cGUgPSB7XG4gICAgLi4uZGVmYXVsdENvbmZpZ1ZhbHVlc1xuICB9O1xuXG4gIHN0YXRpYyBzZXQgdXNlVHlwZXNjcmlwdCh2YWx1ZTogYm9vbGVhbikge1xuICAgIExleENvbmZpZy5jb25maWcudXNlVHlwZXNjcmlwdCA9IHZhbHVlO1xuICAgIGNvbnN0IHtlbnRyeUpzLCBzb3VyY2VGdWxsUGF0aCwgdGFyZ2V0RW52aXJvbm1lbnR9ID0gTGV4Q29uZmlnLmNvbmZpZztcblxuICAgIGlmKGVudHJ5SnMgPT09ICdpbmRleC5qcycgJiYgdmFsdWUpIHtcbiAgICAgIGNvbnN0IGluZGV4UGF0aDogc3RyaW5nID0gcGF0aFJlc29sdmUoY3dkLCBzb3VyY2VGdWxsUGF0aCB8fCBjd2QsICdpbmRleC50c3gnKTtcbiAgICAgIGNvbnN0IGhhc0luZGV4VHN4OiBib29sZWFuID0gZXhpc3RzU3luYyhpbmRleFBhdGgpO1xuXG4gICAgICBpZihoYXNJbmRleFRzeCkge1xuICAgICAgICBMZXhDb25maWcuY29uZmlnLmVudHJ5SnMgPSAnaW5kZXgudHN4JztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIExleENvbmZpZy5jb25maWcuZW50cnlKcyA9ICdpbmRleC50cyc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgTGV4Q29uZmlnLmNvbmZpZy5zd2MgPSBMZXhDb25maWcuY29uZmlnLnN3YyB8fCB7Li4uZGVmYXVsdENvbmZpZ1ZhbHVlcy5zd2MhfTtcbiAgICBMZXhDb25maWcuY29uZmlnLnN3Yy5qc2MgPSBMZXhDb25maWcuY29uZmlnLnN3Yy5qc2MgfHwgey4uLmRlZmF1bHRDb25maWdWYWx1ZXMuc3djIS5qc2MhfTtcbiAgICBMZXhDb25maWcuY29uZmlnLnN3Yy5qc2MucGFyc2VyID0ge1xuICAgICAgc3ludGF4OiAndHlwZXNjcmlwdCcsXG4gICAgICB0c3g6IHRydWVcbiAgICB9O1xuXG4gICAgaWYodGFyZ2V0RW52aXJvbm1lbnQgPT09ICd3ZWInKSB7XG4gICAgICBMZXhDb25maWcuY29uZmlnLnN3Yy5qc2MudHJhbnNmb3JtID0ge1xuICAgICAgICByZWFjdDoge1xuICAgICAgICAgIHJ1bnRpbWU6ICdhdXRvbWF0aWMnXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGdldExleERpcigpOiBzdHJpbmcge1xuICAgIHJldHVybiBkaXJuYW1lKGdldExleFBhY2thZ2VKc29uUGF0aCgpKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRTV0NDb25maWdXaXRoUmVhY3RDb21waWxlcihcbiAgICBzd2NDb25maWc6IFNXQ09wdGlvbnMgfCB1bmRlZmluZWQgPSBMZXhDb25maWcuY29uZmlnLnN3YyxcbiAgICByZWFjdENvbXBpbGVyOiBSZWFjdENvbXBpbGVyQ29uZmlnIHwgdW5kZWZpbmVkID0gTGV4Q29uZmlnLmNvbmZpZy5yZWFjdENvbXBpbGVyXG4gICk6IFNXQ09wdGlvbnMgfCB1bmRlZmluZWQge1xuICAgIGlmKHJlYWN0Q29tcGlsZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHN3Y0NvbmZpZztcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50U3djQ29uZmlnID0gc3djQ29uZmlnIHx8IGRlZmF1bHRDb25maWdWYWx1ZXMuc3djO1xuICAgIGNvbnN0IGN1cnJlbnRKc2M6IFJlY29yZDxzdHJpbmcsIGFueT4gPSBjdXJyZW50U3djQ29uZmlnPy5qc2MgfHwge307XG4gICAgY29uc3QgY3VycmVudEV4cGVyaW1lbnRhbCA9IGN1cnJlbnRKc2MuZXhwZXJpbWVudGFsIHx8IHt9O1xuICAgIGNvbnN0IHBsdWdpbnMgPSBBcnJheS5pc0FycmF5KGN1cnJlbnRFeHBlcmltZW50YWwucGx1Z2lucylcbiAgICAgID8gY3VycmVudEV4cGVyaW1lbnRhbC5wbHVnaW5zLmZpbHRlcigocGx1Z2luOiB1bmtub3duKSA9PiAhaXNSZWFjdENvbXBpbGVyUGx1Z2luKHBsdWdpbikpXG4gICAgICA6IFtdO1xuXG4gICAgY29uc3QgZXhwZXJpbWVudGFsID0gcmVhY3RDb21waWxlciA9PT0gZmFsc2VcbiAgICAgID8ge1xuICAgICAgICAuLi5jdXJyZW50RXhwZXJpbWVudGFsLFxuICAgICAgICBwbHVnaW5zXG4gICAgICB9XG4gICAgICA6IHtcbiAgICAgICAgLi4uY3VycmVudEV4cGVyaW1lbnRhbCxcbiAgICAgICAgcGx1Z2luczogW1xuICAgICAgICAgIC4uLnBsdWdpbnMsXG4gICAgICAgICAgW1xuICAgICAgICAgICAgcmVhY3RDb21waWxlclBsdWdpbk5hbWUsXG4gICAgICAgICAgICB0eXBlb2YgcmVhY3RDb21waWxlciA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgLi4uZGVmYXVsdFJlYWN0Q29tcGlsZXJPcHRpb25zLFxuICAgICAgICAgICAgICAgIC4uLnJlYWN0Q29tcGlsZXJcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA6IGRlZmF1bHRSZWFjdENvbXBpbGVyT3B0aW9uc1xuICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgICAgfTtcbiAgICBjb25zdCBzd2NDb25maWdXaXRoUmVhY3RDb21waWxlcjogU1dDT3B0aW9ucyA9IHtcbiAgICAgIC4uLmN1cnJlbnRTd2NDb25maWcsXG4gICAgICBqc2M6IHtcbiAgICAgICAgLi4uY3VycmVudEpzYyxcbiAgICAgICAgZXhwZXJpbWVudGFsXG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBzd2NDb25maWdXaXRoUmVhY3RDb21waWxlcjtcbiAgfVxuXG4gIHN0YXRpYyB1cGRhdGVDb25maWcodXBkYXRlZENvbmZpZzogTGV4Q29uZmlnVHlwZSk6IExleENvbmZpZ1R5cGUge1xuICAgIGNvbnN0IHtvdXRwdXRGdWxsUGF0aCwgb3V0cHV0UGF0aCwgc291cmNlUGF0aCwgc291cmNlRnVsbFBhdGgsIHVzZVR5cGVzY3JpcHQsIGFpfSA9IHVwZGF0ZWRDb25maWc7XG4gICAgY29uc3QgcGFja2FnZURpciA9IGdldFBhY2thZ2VEaXIoKTtcblxuICAgIGlmKHVzZVR5cGVzY3JpcHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgTGV4Q29uZmlnLnVzZVR5cGVzY3JpcHQgPSB1c2VUeXBlc2NyaXB0O1xuICAgIH1cblxuICAgIGlmKG91dHB1dFBhdGggIT09IHVuZGVmaW5lZCAmJiBvdXRwdXRGdWxsUGF0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB1cGRhdGVkQ29uZmlnLm91dHB1dEZ1bGxQYXRoID0gcGF0aFJlc29sdmUocGFja2FnZURpciwgb3V0cHV0UGF0aCk7XG4gICAgfVxuXG4gICAgaWYoc291cmNlUGF0aCAhPT0gdW5kZWZpbmVkICYmIHNvdXJjZUZ1bGxQYXRoID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHVwZGF0ZWRDb25maWcuc291cmNlRnVsbFBhdGggPSBwYXRoUmVzb2x2ZShwYWNrYWdlRGlyLCBzb3VyY2VQYXRoKTtcbiAgICB9XG5cbiAgICBpZihhaSkge1xuICAgICAgTGV4Q29uZmlnLmNvbmZpZy5haSA9IHsuLi5MZXhDb25maWcuY29uZmlnLmFpLCAuLi5haX07XG5cbiAgICAgIGlmKHByb2Nlc3MuZW52LkNVUlNPUl9JREUgPT09ICd0cnVlJyAmJiBMZXhDb25maWcuY29uZmlnLmFpLnByb3ZpZGVyID09PSAnbm9uZScpIHtcbiAgICAgICAgTGV4Q29uZmlnLmNvbmZpZy5haS5wcm92aWRlciA9ICdjdXJzb3InO1xuICAgICAgfVxuICAgIH1cblxuICAgIExleENvbmZpZy5jb25maWcgPSB7Li4uTGV4Q29uZmlnLmNvbmZpZywgLi4udXBkYXRlZENvbmZpZ307XG4gICAgTGV4Q29uZmlnLmNvbmZpZy5zd2MgPSBMZXhDb25maWcuZ2V0U1dDQ29uZmlnV2l0aFJlYWN0Q29tcGlsZXIoKTtcblxuICAgIHJldHVybiBMZXhDb25maWcuY29uZmlnO1xuICB9XG5cbiAgc3RhdGljIGFkZENvbmZpZ1BhcmFtcyhjbWQ6IFJlY29yZDxzdHJpbmcsIGFueT4sIHBhcmFtczogTGV4Q29uZmlnVHlwZSkge1xuICAgIGNvbnN0IG5hbWVQcm9wZXJ0eTogc3RyaW5nID0gJ19uYW1lJztcbiAgICBjb25zdCB7ZW52aXJvbm1lbnQsIG91dHB1dFBhdGgsIHNvdXJjZVBhdGgsIHR5cGVzY3JpcHR9ID0gY21kO1xuICAgIGNvbnN0IHBhY2thZ2VEaXIgPSBnZXRQYWNrYWdlRGlyKCk7XG5cbiAgICBpZihvdXRwdXRQYXRoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHBhcmFtcy5vdXRwdXRQYXRoID0gb3V0cHV0UGF0aDtcbiAgICAgIHBhcmFtcy5vdXRwdXRGdWxsUGF0aCA9IHBhdGhSZXNvbHZlKHBhY2thZ2VEaXIsIG91dHB1dFBhdGgpO1xuICAgIH0gZWxzZSBpZihwYXJhbXMub3V0cHV0UGF0aCAmJiAhcGFyYW1zLm91dHB1dEZ1bGxQYXRoKSB7XG4gICAgICBwYXJhbXMub3V0cHV0RnVsbFBhdGggPSBwYXRoUmVzb2x2ZShwYWNrYWdlRGlyLCBwYXJhbXMub3V0cHV0UGF0aCk7XG4gICAgfVxuXG4gICAgaWYoc291cmNlUGF0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBwYXJhbXMuc291cmNlUGF0aCA9IHNvdXJjZVBhdGg7XG4gICAgICBwYXJhbXMuc291cmNlRnVsbFBhdGggPSBwYXRoUmVzb2x2ZShwYWNrYWdlRGlyLCBzb3VyY2VQYXRoKTtcbiAgICB9IGVsc2UgaWYocGFyYW1zLnNvdXJjZVBhdGggJiYgIXBhcmFtcy5zb3VyY2VGdWxsUGF0aCkge1xuICAgICAgcGFyYW1zLnNvdXJjZUZ1bGxQYXRoID0gcGF0aFJlc29sdmUocGFja2FnZURpciwgcGFyYW1zLnNvdXJjZVBhdGgpO1xuICAgIH1cblxuICAgIGlmKHR5cGVzY3JpcHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcGFyYW1zLnVzZVR5cGVzY3JpcHQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmKGVudmlyb25tZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHBhcmFtcy50YXJnZXRFbnZpcm9ubWVudCA9IGVudmlyb25tZW50ID09PSAnd2ViJyA/ICd3ZWInIDogJ25vZGUnO1xuICAgIH1cblxuICAgIHByb2Nlc3MuZW52LkxFWF9DT05GSUcgPSBKU09OLnN0cmluZ2lmeShcbiAgICAgIHtcbiAgICAgICAgLi4uTGV4Q29uZmlnLnVwZGF0ZUNvbmZpZyhwYXJhbXMpLFxuICAgICAgICBjb21tYW5kTmFtZTogY21kW25hbWVQcm9wZXJ0eV0sXG4gICAgICAgIGlzU3RhdGljOiBjbWQuc3RhdGljXG4gICAgICB9LCBudWxsLCAwXG4gICAgKTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBwYXJzZUNvbmZpZyhjbWQ6IFJlY29yZDxzdHJpbmcsIGFueT4sIGlzUm9vdDogYm9vbGVhbiA9IHRydWUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7Y2xpTmFtZSA9ICdMZXgnLCBsZXhDb25maWcsIGxleENvbmZpZ05hbWUsIHF1aWV0LCB0eXBlc2NyaXB0LCBkZWJ1ZyA9IGZhbHNlfSA9IGNtZDtcbiAgICBjb25zdCBjb25maWdGb3JtYXRzID0gWydqcycsICdtanMnLCAnY2pzJywgJ3RzJywgJ2pzb24nXTtcbiAgICBjb25zdCBjb25maWdCYXNlTmFtZTogc3RyaW5nID0gbGV4Q29uZmlnTmFtZSB8fCAnbGV4LmNvbmZpZyc7XG4gICAgbGV0IGNvbmZpZ1BhdGg6IHN0cmluZyA9IGxleENvbmZpZyB8fCAnJztcbiAgICBsZXQgY29uZmlnRXhpc3RzOiBib29sZWFuID0gbGV4Q29uZmlnID8gZXhpc3RzU3luYyhjb25maWdQYXRoKSA6IGZhbHNlO1xuXG4gICAgaWYoIWNvbmZpZ1BhdGggfHwgIWNvbmZpZ0V4aXN0cykge1xuICAgICAgaWYoZGVidWcpIHtcbiAgICAgICAgbG9nKGBTZWFyY2hpbmcgZm9yIGNvbmZpZyBmaWxlcyB3aXRoIGJhc2UgbmFtZTogJHtjb25maWdCYXNlTmFtZX1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgIH1cblxuICAgICAgZm9yKGNvbnN0IGZvcm1hdCBvZiBjb25maWdGb3JtYXRzKSB7XG4gICAgICAgIGNvbnN0IHBvdGVudGlhbFBhdGggPSBpc1Jvb3RcbiAgICAgICAgICA/IHBhdGhSZXNvbHZlKGN3ZCwgYC4vJHtjb25maWdCYXNlTmFtZX0uJHtmb3JtYXR9YClcbiAgICAgICAgICA6IHJlbGF0aXZlRmlsZVBhdGgoYCR7Y29uZmlnQmFzZU5hbWV9LiR7Zm9ybWF0fWAsIGN3ZCk7XG5cbiAgICAgICAgaWYoZGVidWcpIHtcbiAgICAgICAgICBsb2coYENoZWNraW5nIGZvciBjb25maWcgZmlsZTogJHtwb3RlbnRpYWxQYXRofWAsICdpbmZvJywgcXVpZXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoZXhpc3RzU3luYyhwb3RlbnRpYWxQYXRoKSkge1xuICAgICAgICAgIGNvbmZpZ1BhdGggPSBwb3RlbnRpYWxQYXRoO1xuICAgICAgICAgIGNvbmZpZ0V4aXN0cyA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZihjb25maWdFeGlzdHMpIHtcbiAgICAgIGxvZyhgVXNpbmcgJHtjbGlOYW1lfSBjb25maWd1cmF0aW9uIGZpbGU6ICR7Y29uZmlnUGF0aH1gLCAnbm90ZScsIHF1aWV0KTtcbiAgICAgIGNvbnN0IGV4dDogc3RyaW5nID0gcGF0aEV4dG5hbWUoY29uZmlnUGF0aCk7XG5cbiAgICAgIGlmKGV4dCA9PT0gJy5qc29uJykge1xuICAgICAgICBjb25zdCBjb25maWdDb250ZW50OiBzdHJpbmcgPSByZWFkRmlsZVN5bmMoY29uZmlnUGF0aCwgJ3V0ZjgnKTtcblxuICAgICAgICBpZihjb25maWdDb250ZW50KSB7XG4gICAgICAgICAgbGV0IGNvbmZpZ0pzb246IExleENvbmZpZ1R5cGU7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uZmlnSnNvbiA9IEpTT04ucGFyc2UoY29uZmlnQ29udGVudCk/LmRlZmF1bHQgfHwge307XG4gICAgICAgICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBGYWlsZWQgdG8gcGFyc2UgSlNPTiBjb25maWc6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICAgICAgICBjb25maWdKc29uID0ge307XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgTGV4Q29uZmlnLmFkZENvbmZpZ1BhcmFtcyhjbWQsIGNvbmZpZ0pzb24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogQ29uZmlnIGZpbGUgbWFsZm9ybWVkLCAke2NvbmZpZ1BhdGh9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYoWycuanMnLCAnLm1qcycsICcuY2pzJywgJy50cyddLmluY2x1ZGVzKGV4dCkpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBsZXQgbGV4Q3VzdG9tQ29uZmlnO1xuXG4gICAgICAgICAgaWYoZXh0ID09PSAnLmNqcycpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVVcmwgPSBuZXcgVVJMKGBmaWxlOi8vLyR7cGF0aFJlc29sdmUoY29uZmlnUGF0aCl9YCkuaHJlZjtcblxuICAgICAgICAgICAgaWYoZGVidWcpIHtcbiAgICAgICAgICAgICAgbG9nKGBMb2FkaW5nIENvbW1vbkpTIGNvbmZpZyBmcm9tOiAke2ZpbGVVcmx9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXhDdXN0b21Db25maWcgPSBhd2FpdCBpbXBvcnQoZmlsZVVybCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgICAgICAgIGxvZyhgTG9hZGluZyBFU00vVFMgY29uZmlnIGZyb206ICR7Y29uZmlnUGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV4Q3VzdG9tQ29uZmlnID0gYXdhaXQgaW1wb3J0KGNvbmZpZ1BhdGgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGNvbmZpZyA9IGxleEN1c3RvbUNvbmZpZy5kZWZhdWx0IHx8IGxleEN1c3RvbUNvbmZpZztcblxuICAgICAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgICAgICBsb2coYExvYWRlZCBjb25maWc6ICR7SlNPTi5zdHJpbmdpZnkoY29uZmlnLCBudWxsLCAyKX1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZighY29uZmlnKSB7XG4gICAgICAgICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gV2FybmluZzogQ29uZmlnIGZpbGUgbG9hZGVkIGJ1dCBubyBjb25maWd1cmF0aW9uIGZvdW5kYCwgJ3dhcm4nLCBxdWlldCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgTGV4Q29uZmlnLmFkZENvbmZpZ1BhcmFtcyhjbWQsIGNvbmZpZyB8fCB7fSk7XG4gICAgICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IEZhaWxlZCB0byBsb2FkIGNvbmZpZyBmaWxlOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IENvbmZpZyBmaWxlIG11c3QgYmUgYSBKUywgQ0pTLCBNSlMsIFRTLCBvciBKU09OIGZpbGUuYCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZihkZWJ1Zykge1xuICAgICAgICBsb2coJ05vIGNvbmZpZyBmaWxlIGZvdW5kLiBVc2luZyBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uJywgJ2luZm8nLCBxdWlldCk7XG4gICAgICB9XG5cbiAgICAgIExleENvbmZpZy51c2VUeXBlc2NyaXB0ID0gISF0eXBlc2NyaXB0O1xuICAgICAgTGV4Q29uZmlnLmFkZENvbmZpZ1BhcmFtcyhjbWQsIExleENvbmZpZy5jb25maWcpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBjaGVja1R5cGVzY3JpcHRDb25maWcoKSB7XG4gICAgY29uc3QgcGFja2FnZURpciA9IGdldFBhY2thZ2VEaXIoKTtcbiAgICBjb25zdCB0c2NvbmZpZ1BhdGg6IHN0cmluZyA9IHBhdGhSZXNvbHZlKHBhY2thZ2VEaXIsICcuL3RzY29uZmlnLmpzb24nKTtcblxuICAgIGlmKCFleGlzdHNTeW5jKHRzY29uZmlnUGF0aCkpIHtcbiAgICAgIGNvbnN0IGxleERpciA9IExleENvbmZpZy5nZXRMZXhEaXIoKTtcbiAgICAgIGNvbnN0IGJhc2VDb25maWdQYXRoID0gcGF0aFJlc29sdmUobGV4RGlyLCAndHNjb25maWcuYmFzZS5qc29uJyk7XG4gICAgICBjb25zdCB0ZW1wbGF0ZUNvbmZpZ1BhdGggPSBwYXRoUmVzb2x2ZShsZXhEaXIsICd0c2NvbmZpZy50ZW1wbGF0ZS5qc29uJyk7XG4gICAgICBjb25zdCBzb3VyY2VQYXRoID0gZXhpc3RzU3luYyhiYXNlQ29uZmlnUGF0aCkgPyBiYXNlQ29uZmlnUGF0aCA6IHRlbXBsYXRlQ29uZmlnUGF0aDtcblxuICAgICAgaWYoZXhpc3RzU3luYyhzb3VyY2VQYXRoKSkge1xuICAgICAgICB3cml0ZUZpbGVTeW5jKHRzY29uZmlnUGF0aCwgcmVhZEZpbGVTeW5jKHNvdXJjZVBhdGgpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZ2V0VHlwZVNjcmlwdERlY2xhcmF0aW9uRmxhZ3MoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGN3ZCA9IHByb2Nlc3MuY3dkKCk7XG4gICAgY29uc3Qgb3V0cHV0UGF0aCA9IExleENvbmZpZy5jb25maWcub3V0cHV0UGF0aCB8fCAnLi9saWInO1xuICAgIGNvbnN0IG91dHB1dEZ1bGxQYXRoID0gTGV4Q29uZmlnLmNvbmZpZy5vdXRwdXRGdWxsUGF0aCB8fCBwYXRoUmVzb2x2ZShjd2QsIG91dHB1dFBhdGgpO1xuICAgIGNvbnN0IHNvdXJjZVBhdGggPSBMZXhDb25maWcuY29uZmlnLnNvdXJjZVBhdGggfHwgJy4vc3JjJztcbiAgICBjb25zdCBzb3VyY2VGdWxsUGF0aCA9IExleENvbmZpZy5jb25maWcuc291cmNlRnVsbFBhdGggfHwgcGF0aFJlc29sdmUoY3dkLCBzb3VyY2VQYXRoKTtcbiAgICBjb25zdCByZWxhdGl2ZU91dERpciA9IHBhdGhSZWxhdGl2ZShjd2QsIG91dHB1dEZ1bGxQYXRoKSB8fCAnLi9saWInO1xuICAgIGNvbnN0IHJlbGF0aXZlUm9vdERpciA9IHBhdGhSZWxhdGl2ZShjd2QsIHNvdXJjZUZ1bGxQYXRoKSB8fCAnLi9zcmMnO1xuXG4gICAgcmV0dXJuIFtcbiAgICAgICctLWVtaXREZWNsYXJhdGlvbk9ubHknLCAvLyBDUklUSUNBTDogT25seSBlbWl0IC5kLnRzIGZpbGVzLCBubyBKUyBmaWxlc1xuICAgICAgJy0tZGVjbGFyYXRpb24nLCAvLyBHZW5lcmF0ZSBkZWNsYXJhdGlvbiBmaWxlc1xuICAgICAgJy0tZGVjbGFyYXRpb25NYXAnLCAvLyBHZW5lcmF0ZSBzb3VyY2UgbWFwcyBmb3IgZGVjbGFyYXRpb25zXG4gICAgICAnLS1vdXREaXInLCByZWxhdGl2ZU91dERpcixcbiAgICAgICctLXJvb3REaXInLCByZWxhdGl2ZVJvb3REaXIsXG4gICAgICAnLS1za2lwTGliQ2hlY2snLCAvLyBTa2lwIHR5cGUgY2hlY2tpbmcgb2YgZGVjbGFyYXRpb24gZmlsZXMgKGZhc3RlciwgbW9yZSBsZW5pZW50KVxuICAgICAgJy0tZXNNb2R1bGVJbnRlcm9wJyxcbiAgICAgICctLWFsbG93U3ludGhldGljRGVmYXVsdEltcG9ydHMnLFxuICAgICAgJy0tbW9kdWxlJywgJ05vZGVOZXh0JyxcbiAgICAgICctLW1vZHVsZVJlc29sdXRpb24nLCAnTm9kZU5leHQnLFxuICAgICAgJy0tdGFyZ2V0JywgJ0VTTmV4dCcsXG4gICAgICAnLS1qc3gnLCAncmVhY3QtanN4JyxcbiAgICAgICctLWlzb2xhdGVkTW9kdWxlcycsXG4gICAgICAnLS1yZXNvbHZlSnNvbk1vZHVsZScsXG4gICAgICAnLS1hbGxvd0pzJyxcbiAgICAgICctLWlnbm9yZUNvbmZpZydcbiAgICAgIC8vIE5vdGU6IC0tbm9VbnVzZWRMb2NhbHMgYW5kIC0tbm9VbnVzZWRQYXJhbWV0ZXJzIGFyZSBub3QgbmVlZGVkIGZvciBkZWNsYXJhdGlvbiBnZW5lcmF0aW9uXG4gICAgICAvLyBhbmQgd291bGQgYWN0dWFsbHkgZW5hYmxlIHN0cmljdCBjaGVja2luZywgd2hpY2ggd2Ugd2FudCB0byBhdm9pZCBmb3IgZmFzdGVyIGRlY2xhcmF0aW9uIGdlbmVyYXRpb25cbiAgICBdO1xuICB9XG5cbiAgc3RhdGljIGNoZWNrTGludFR5cGVzY3JpcHRDb25maWcoKSB7XG4gICAgY29uc3QgbGV4RGlyID0gTGV4Q29uZmlnLmdldExleERpcigpO1xuICAgIGNvbnN0IHRzY29uZmlnTGludFBhdGg6IHN0cmluZyA9IHBhdGhSZXNvbHZlKGxleERpciwgJy4vdHNjb25maWcubGludC5qc29uJyk7XG5cbiAgICBpZighZXhpc3RzU3luYyh0c2NvbmZpZ0xpbnRQYXRoKSkge1xuICAgICAgY29uc3QgdGVtcGxhdGVQYXRoID0gcGF0aFJlc29sdmUobGV4RGlyLCAndHNjb25maWcubGludC5qc29uJyk7XG4gICAgICBpZihleGlzdHNTeW5jKHRlbXBsYXRlUGF0aCkpIHtcbiAgICAgICAgd3JpdGVGaWxlU3luYyh0c2NvbmZpZ0xpbnRQYXRoLCByZWFkRmlsZVN5bmModGVtcGxhdGVQYXRoKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGNoZWNrVGVzdFR5cGVzY3JpcHRDb25maWcoKSB7XG4gICAgY29uc3QgbGV4RGlyID0gTGV4Q29uZmlnLmdldExleERpcigpO1xuICAgIGNvbnN0IHRzY29uZmlnVGVzdFBhdGg6IHN0cmluZyA9IHBhdGhSZXNvbHZlKGxleERpciwgJy4vdHNjb25maWcudGVzdC5qc29uJyk7XG5cbiAgICBpZighZXhpc3RzU3luYyh0c2NvbmZpZ1Rlc3RQYXRoKSkge1xuICAgICAgY29uc3QgdGVtcGxhdGVQYXRoID0gcGF0aFJlc29sdmUobGV4RGlyLCAndHNjb25maWcudGVzdC5qc29uJyk7XG4gICAgICBpZihleGlzdHNTeW5jKHRlbXBsYXRlUGF0aCkpIHtcbiAgICAgICAgd3JpdGVGaWxlU3luYyh0c2NvbmZpZ1Rlc3RQYXRoLCByZWFkRmlsZVN5bmModGVtcGxhdGVQYXRoKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCB0eXBlIFNXQ09wdGlvbnMgPSBPcHRpb25zO1xuIl0sIm5hbWVzIjpbImZpbmRGaWxlVXAiLCJleGlzdHNTeW5jIiwicmVhZEZpbGVTeW5jIiwid3JpdGVGaWxlU3luYyIsImRpcm5hbWUiLCJleHRuYW1lIiwicGF0aEV4dG5hbWUiLCJyZWxhdGl2ZSIsInBhdGhSZWxhdGl2ZSIsInJlc29sdmUiLCJwYXRoUmVzb2x2ZSIsIlVSTCIsImdldExleFBhY2thZ2VKc29uUGF0aCIsInJlbGF0aXZlRmlsZVBhdGgiLCJsb2ciLCJjd2QiLCJwcm9jZXNzIiwicmVhY3RDb21waWxlclBsdWdpbk5hbWUiLCJkZWZhdWx0UmVhY3RDb21waWxlck9wdGlvbnMiLCJjb21waWxhdGlvbk1vZGUiLCJwYW5pY1RocmVzaG9sZCIsInRhcmdldCIsImlzUmVhY3RDb21waWxlclBsdWdpbiIsInBsdWdpbiIsIkFycmF5IiwiaXNBcnJheSIsImRlZmF1bHRDb25maWdWYWx1ZXMiLCJhaSIsIm1heFRva2VucyIsIm1vZGVsIiwicHJvdmlkZXIiLCJ0ZW1wZXJhdHVyZSIsImNvbmZpZ0ZpbGVzIiwiY29weUZpbGVzIiwiZW50cnlIVE1MIiwiZW50cnlKcyIsImVudiIsImVzbGludCIsIm91dHB1dEZ1bGxQYXRoIiwib3V0cHV0SGFzaCIsIm91dHB1dFBhdGgiLCJwYWNrYWdlTWFuYWdlciIsInByZXNldCIsInNvdXJjZUZ1bGxQYXRoIiwic291cmNlUGF0aCIsInN3YyIsImlubGluZVNvdXJjZXNDb250ZW50IiwiaXNNb2R1bGUiLCJqc2MiLCJleHRlcm5hbEhlbHBlcnMiLCJrZWVwQ2xhc3NOYW1lcyIsImxvb3NlIiwicGFyc2VyIiwiZGVjb3JhdG9ycyIsImR5bmFtaWNJbXBvcnQiLCJzeW50YXgiLCJ0c3giLCJ0cmFuc2Zvcm0iLCJyZWFjdCIsInJ1bnRpbWUiLCJtaW5pZnkiLCJtb2R1bGUiLCJsYXp5Iiwibm9JbnRlcm9wIiwic3RyaWN0Iiwic3RyaWN0TW9kZSIsInR5cGUiLCJzb3VyY2VNYXBzIiwidGFyZ2V0RW52aXJvbm1lbnQiLCJ1c2VHcmFwaFFsIiwidXNlVHlwZXNjcmlwdCIsInZpdGVzdCIsIndlYnBhY2siLCJzdGF0aWNQYXRoIiwiZ2V0UGFja2FnZURpciIsImN1cnJlbnRQa2dQYXRoIiwicGtnIiwiSlNPTiIsInBhcnNlIiwid29ya3NwYWNlcyIsInNlYXJjaERpciIsImkiLCJwa2dQYXRoIiwicGFyZW50IiwiY29uZmlnRm9ybWF0cyIsImZvcm1hdCIsImNvbmZpZ1BhdGgiLCJzeW5jIiwiZ2V0VHlwZVNjcmlwdENvbmZpZ1BhdGgiLCJjb25maWdOYW1lIiwicGFja2FnZURpciIsInByb2plY3RCdWlsZENvbmZpZyIsInJvb3RCdWlsZENvbmZpZyIsInByb2plY3RMaW50Q29uZmlnIiwicm9vdExpbnRDb25maWciLCJwcm9qZWN0VGVzdENvbmZpZyIsInJvb3RUZXN0Q29uZmlnIiwicHJvamVjdENvbmZpZ1BhdGgiLCJyb290Q29uZmlnUGF0aCIsImxleERpciIsIkxleENvbmZpZyIsImdldExleERpciIsInZhbHVlIiwiY29uZmlnIiwiaW5kZXhQYXRoIiwiaGFzSW5kZXhUc3giLCJnZXRTV0NDb25maWdXaXRoUmVhY3RDb21waWxlciIsInN3Y0NvbmZpZyIsInJlYWN0Q29tcGlsZXIiLCJ1bmRlZmluZWQiLCJjdXJyZW50U3djQ29uZmlnIiwiY3VycmVudEpzYyIsImN1cnJlbnRFeHBlcmltZW50YWwiLCJleHBlcmltZW50YWwiLCJwbHVnaW5zIiwiZmlsdGVyIiwic3djQ29uZmlnV2l0aFJlYWN0Q29tcGlsZXIiLCJ1cGRhdGVDb25maWciLCJ1cGRhdGVkQ29uZmlnIiwiQ1VSU09SX0lERSIsImFkZENvbmZpZ1BhcmFtcyIsImNtZCIsInBhcmFtcyIsIm5hbWVQcm9wZXJ0eSIsImVudmlyb25tZW50IiwidHlwZXNjcmlwdCIsIkxFWF9DT05GSUciLCJzdHJpbmdpZnkiLCJjb21tYW5kTmFtZSIsImlzU3RhdGljIiwic3RhdGljIiwicGFyc2VDb25maWciLCJpc1Jvb3QiLCJjbGlOYW1lIiwibGV4Q29uZmlnIiwibGV4Q29uZmlnTmFtZSIsInF1aWV0IiwiZGVidWciLCJjb25maWdCYXNlTmFtZSIsImNvbmZpZ0V4aXN0cyIsInBvdGVudGlhbFBhdGgiLCJleHQiLCJjb25maWdDb250ZW50IiwiY29uZmlnSnNvbiIsImRlZmF1bHQiLCJlcnJvciIsIm1lc3NhZ2UiLCJpbmNsdWRlcyIsImxleEN1c3RvbUNvbmZpZyIsImZpbGVVcmwiLCJocmVmIiwiY29uc29sZSIsImNoZWNrVHlwZXNjcmlwdENvbmZpZyIsInRzY29uZmlnUGF0aCIsImJhc2VDb25maWdQYXRoIiwidGVtcGxhdGVDb25maWdQYXRoIiwiZ2V0VHlwZVNjcmlwdERlY2xhcmF0aW9uRmxhZ3MiLCJyZWxhdGl2ZU91dERpciIsInJlbGF0aXZlUm9vdERpciIsImNoZWNrTGludFR5cGVzY3JpcHRDb25maWciLCJ0c2NvbmZpZ0xpbnRQYXRoIiwidGVtcGxhdGVQYXRoIiwiY2hlY2tUZXN0VHlwZXNjcmlwdENvbmZpZyIsInRzY29uZmlnVGVzdFBhdGgiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQTs7O0NBR0MsR0FDRCxPQUFPQSxnQkFBZ0IsZUFBZTtBQUN0QyxTQUFRQyxVQUFVLEVBQUVDLFlBQVksRUFBRUMsYUFBYSxRQUFPLEtBQUs7QUFDM0QsU0FDRUMsT0FBTyxFQUNQQyxXQUFXQyxXQUFXLEVBQ3RCQyxZQUFZQyxZQUFZLEVBQ3hCQyxXQUFXQyxXQUFXLFFBQ2pCLE9BQU87QUFDZCxTQUFRQyxHQUFHLFFBQU8sTUFBTTtBQUV4QixTQUFRQyxxQkFBcUIsRUFBRUMsZ0JBQWdCLFFBQU8sa0JBQWtCO0FBQ3hFLFNBQVFDLEdBQUcsUUFBTyxpQkFBaUI7QUFLbkMsTUFBTUMsTUFBY0MsUUFBUUQsR0FBRztBQW1FL0IsT0FBTyxNQUFNRSwwQkFBMEIsc0JBQXNCO0FBRTdELE9BQU8sTUFBTUMsOEJBQXVEO0lBQ2xFQyxpQkFBaUI7SUFDakJDLGdCQUFnQjtJQUNoQkMsUUFBUTtBQUNWLEVBQUU7QUFFRixNQUFNQyx3QkFBd0IsQ0FBQ0MsU0FDN0JDLE1BQU1DLE9BQU8sQ0FBQ0YsV0FBV0EsTUFBTSxDQUFDLEVBQUUsS0FBS047QUFHekMsT0FBTyxNQUFNUyxzQkFBcUM7SUFDaERDLElBQUk7UUFDRkMsV0FBVztRQUNYQyxPQUFPO1FBQ1BDLFVBQVU7UUFDVkMsYUFBYTtJQUNmO0lBQ0FDLGFBQWEsRUFBRTtJQUNmQyxXQUFXLEVBQUU7SUFDYkMsV0FBVztJQUNYQyxTQUFTO0lBQ1RDLEtBQUs7SUFDTEMsUUFBUSxDQUFDO0lBQ1RDLGdCQUFnQjVCLFlBQVlLLEtBQUs7SUFDakN3QixZQUFZO0lBQ1pDLFlBQVk7SUFDWkMsZ0JBQWdCO0lBQ2hCQyxRQUFRO0lBQ1JDLGdC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
|
|
@@ -30,7 +30,8 @@ export const compile = async (cmd, callback = ()=>({}))=>{
|
|
|
30
30
|
const spinner = createSpinner(quiet);
|
|
31
31
|
log(`${cliName} compiling...`, 'info', quiet);
|
|
32
32
|
await LexConfig.parseConfig(cmd);
|
|
33
|
-
const { outputFullPath, sourceFullPath, swc:
|
|
33
|
+
const { outputFullPath, reactCompiler, sourceFullPath, swc: parsedSwcConfig, useTypescript } = LexConfig.config;
|
|
34
|
+
const swcConfig = LexConfig.getSWCConfigWithReactCompiler(parsedSwcConfig, reactCompiler);
|
|
34
35
|
const outputDir = outputPath ? pathResolve(process.cwd(), outputPath) : outputFullPath || pathResolve(process.cwd(), './lib');
|
|
35
36
|
const sourceDir = sourcePath ? pathResolve(process.cwd(), `./${sourcePath}`) : sourceFullPath || '';
|
|
36
37
|
const dirName = getDirName();
|
|
@@ -228,7 +229,6 @@ export const compile = async (cmd, callback = ()=>({}))=>{
|
|
|
228
229
|
});
|
|
229
230
|
}
|
|
230
231
|
const sourceCode = readFileSync(sourcePath, 'utf8');
|
|
231
|
-
const isTSX = file.endsWith('.tsx');
|
|
232
232
|
const swcOptions = {
|
|
233
233
|
...swcConfig,
|
|
234
234
|
filename: file,
|
|
@@ -274,4 +274,4 @@ export const compile = async (cmd, callback = ()=>({}))=>{
|
|
|
274
274
|
return 0;
|
|
275
275
|
};
|
|
276
276
|
|
|
277
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9jb21waWxlL2NvbXBpbGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7dHJhbnNmb3JtfSBmcm9tICdAc3djL2NvcmUnO1xuaW1wb3J0IHtleGVjYX0gZnJvbSAnZXhlY2EnO1xuaW1wb3J0IHtleGlzdHNTeW5jLCBsc3RhdFN5bmMsIHJlYWRkaXJTeW5jLCByZWFkRmlsZVN5bmMsIHdyaXRlRmlsZVN5bmMsIG1rZGlyU3luY30gZnJvbSAnZnMnO1xuaW1wb3J0IHtzeW5jIGFzIGdsb2JTeW5jfSBmcm9tICdnbG9iJztcbmltcG9ydCB7ZXh0bmFtZSBhcyBwYXRoRXh0bmFtZSwgam9pbiBhcyBwYXRoSm9pbiwgcmVsYXRpdmUgYXMgcGF0aFJlbGF0aXZlLCByZXNvbHZlIGFzIHBhdGhSZXNvbHZlLCBkaXJuYW1lfSBmcm9tICdwYXRoJztcblxuaW1wb3J0IHtMZXhDb25maWd9IGZyb20gJy4uLy4uL0xleENvbmZpZy5qcyc7XG5pbXBvcnQge2NoZWNrTGlua2VkTW9kdWxlcywgY29weUNvbmZpZ3VyZWRGaWxlcywgY29weUZpbGVzLCBjcmVhdGVTcGlubmVyLCBnZXRGaWxlc0J5RXh0LCByZW1vdmVGaWxlc30gZnJvbSAnLi4vLi4vdXRpbHMvYXBwLmpzJztcbmltcG9ydCB7Z2V0RGlyTmFtZSwgcmVzb2x2ZUJpbmFyeVBhdGh9IGZyb20gJy4uLy4uL3V0aWxzL2ZpbGUuanMnO1xuaW1wb3J0IHtsb2d9IGZyb20gJy4uLy4uL3V0aWxzL2xvZy5qcyc7XG5cbmltcG9ydCB0eXBlIHtTV0NPcHRpb25zfSBmcm9tICcuLi8uLi9MZXhDb25maWcuanMnO1xuXG5leHBvcnQgY29uc3QgaGFzRmlsZVR5cGUgPSAoc3RhcnRQYXRoOiBzdHJpbmcsIGV4dDogc3RyaW5nW10pOiBib29sZWFuID0+IHtcbiAgaWYoIWV4aXN0c1N5bmMoc3RhcnRQYXRoKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGZpbGVzOiBzdHJpbmdbXSA9IHJlYWRkaXJTeW5jKHN0YXJ0UGF0aCk7XG5cbiAgcmV0dXJuIGZpbGVzLnNvbWUoKGZpbGU6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IGZpbGVuYW1lOiBzdHJpbmcgPSBwYXRoSm9pbihzdGFydFBhdGgsIGZpbGUpO1xuICAgIGNvbnN0IGZpbGVFeHQ6IHN0cmluZyA9IHBhdGhFeHRuYW1lKGZpbGVuYW1lKTtcbiAgICBjb25zdCBzdGF0ID0gbHN0YXRTeW5jKGZpbGVuYW1lKTtcblxuICAgIGlmKHN0YXQuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgcmV0dXJuIGhhc0ZpbGVUeXBlKGZpbGVuYW1lLCBleHQpO1xuICAgIH1cblxuICAgIHJldHVybiBleHQuaW5jbHVkZXMoZmlsZUV4dCk7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNvbXBpbGUgPSBhc3luYyAoY21kOiBhbnksIGNhbGxiYWNrOiBhbnkgPSAoKSA9PiAoe30pKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcbiAgY29uc3Qge1xuICAgIGNsaU5hbWUgPSAnTGV4JyxcbiAgICBjb25maWcsXG4gICAgZm9ybWF0ID0gJ2VzbScsXG4gICAgb3V0cHV0UGF0aCxcbiAgICBxdWlldCxcbiAgICByZW1vdmUsXG4gICAgc291cmNlUGF0aCxcbiAgICB3YXRjaFxuICB9ID0gY21kO1xuICBjb25zdCBzcGlubmVyID0gY3JlYXRlU3Bpbm5lcihxdWlldCk7XG5cbiAgbG9nKGAke2NsaU5hbWV9IGNvbXBpbGluZy4uLmAsICdpbmZvJywgcXVpZXQpO1xuXG4gIGF3YWl0IExleENvbmZpZy5wYXJzZUNvbmZpZyhjbWQpO1xuXG4gIGNvbnN0IHtvdXRwdXRGdWxsUGF0aCwgc291cmNlRnVsbFBhdGgsIHN3Yzogc3djQ29uZmlnLCB1c2VUeXBlc2NyaXB0fSA9IExleENvbmZpZy5jb25maWc7XG4gIGNvbnN0IG91dHB1dERpcjogc3RyaW5nID0gb3V0cHV0UGF0aFxuICAgID8gcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgb3V0cHV0UGF0aClcbiAgICA6IChvdXRwdXRGdWxsUGF0aCB8fCBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnLi9saWInKSk7XG4gIGNvbnN0IHNvdXJjZURpcjogc3RyaW5nID0gc291cmNlUGF0aCA/IHBhdGhSZXNvbHZlKHByb2Nlc3MuY3dkKCksIGAuLyR7c291cmNlUGF0aH1gKSA6IHNvdXJjZUZ1bGxQYXRoIHx8ICcnO1xuICBjb25zdCBkaXJOYW1lID0gZ2V0RGlyTmFtZSgpO1xuXG4gIGNoZWNrTGlua2VkTW9kdWxlcygpO1xuXG4gIGlmKHJlbW92ZSkge1xuICAgIGF3YWl0IHJlbW92ZUZpbGVzKG91dHB1dERpcik7XG4gIH1cblxuICBpZih1c2VUeXBlc2NyaXB0KSB7XG4gICAgY29uc3QgdHlwZXNjcmlwdFBhdGg6IHN0cmluZyA9IHJlc29sdmVCaW5hcnlQYXRoKCd0c2MnLCAndHlwZXNjcmlwdCcpO1xuXG4gICAgaWYoIXR5cGVzY3JpcHRQYXRoKSB7XG4gICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IFR5cGVTY3JpcHQgYmluYXJ5IG5vdCBmb3VuZCBpbiBMZXgncyBub2RlX21vZHVsZXMgb3IgbW9ub3JlcG8gcm9vdGAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgIGxvZygnUGxlYXNlIHJlaW5zdGFsbCBMZXggb3IgY2hlY2sgeW91ciBpbnN0YWxsYXRpb24uJywgJ2luZm8nLCBxdWlldCk7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG5cbiAgICBjb25zdCB0eXBlc2NyaXB0T3B0aW9uczogc3RyaW5nW10gPSBjb25maWdcbiAgICAgID8gWyctcCcsIGNvbmZpZywgJy0tZW1pdERlY2xhcmF0aW9uT25seScsICctLXNraXBMaWJDaGVjayddIC8vIFVzZXIgcHJvdmlkZWQgY3VzdG9tIGNvbmZpZywgYnV0IHN0aWxsIG9ubHkgZW1pdCBkZWNsYXJhdGlvbnNcbiAgICAgIDogKCgpID0+IHtcbiAgICAgICAgY29uc3QgZ2xvYk9wdGlvbnMgPSB7XG4gICAgICAgICAgYWJzb2x1dGU6IHRydWUsXG4gICAgICAgICAgY3dkOiBzb3VyY2VEaXIsXG4gICAgICAgICAgZG90OiBmYWxzZSxcbiAgICAgICAgICBub2RpcjogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCB0c0ZpbGVzID0gZ2xvYlN5bmMoJyoqLyEoKi5zcGVjfCoudGVzdHwqLmludGVncmF0aW9ufCouZTJlKS50cycsIGdsb2JPcHRpb25zKTtcbiAgICAgICAgY29uc3QgdHN4RmlsZXMgPSBnbG9iU3luYygnKiovISgqLnNwZWN8Ki50ZXN0fCouaW50ZWdyYXRpb258Ki5lMmUpLnRzeCcsIGdsb2JPcHRpb25zKTtcbiAgICAgICAgY29uc3QgYWxsU291cmNlRmlsZXMgPSBbLi4udHNGaWxlcywgLi4udHN4RmlsZXNdO1xuXG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgLi4uTGV4Q29uZmlnLmdldFR5cGVTY3JpcHREZWNsYXJhdGlvbkZsYWdzKCksXG4gICAgICAgICAgLi4uYWxsU291cmNlRmlsZXNcbiAgICAgICAgXTtcbiAgICAgIH0pKCk7XG5cbiAgICBzcGlubmVyLnN0YXJ0KCdHZW5lcmF0aW5nIFR5cGVTY3JpcHQgZGVjbGFyYXRpb25zLi4uJyk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZXhlY2EodHlwZXNjcmlwdFBhdGgsIHR5cGVzY3JpcHRPcHRpb25zLCB7XG4gICAgICAgIGFsbDogdHJ1ZSxcbiAgICAgICAgY3dkOiBwcm9jZXNzLmN3ZCgpLFxuICAgICAgICBlbmNvZGluZzogJ3V0ZjgnLFxuICAgICAgICByZWplY3Q6IGZhbHNlXG4gICAgICB9KTtcblxuICAgICAgaWYocmVzdWx0LmV4aXRDb2RlICE9PSAwKSB7XG4gICAgICAgIGNvbnN0IGhhc0RlY2xhcmF0aW9ucyA9IHJlc3VsdC5hbGw/LmluY2x1ZGVzKCdXcml0aW5nJykgfHwgcmVzdWx0LmFsbD8uaW5jbHVkZXMoJ0RlY2xhcmF0aW9uJykgfHwgZmFsc2U7XG4gICAgICAgIGNvbnN0IGVycm9yT3V0cHV0ID0gcmVzdWx0LnN0ZGVyciB8fCByZXN1bHQuc3Rkb3V0IHx8IHJlc3VsdC5hbGwgfHwgJ1Vua25vd24gZXJyb3InO1xuXG4gICAgICAgIGlmKCFoYXNEZWNsYXJhdGlvbnMpIHtcbiAgICAgICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IFR5cGVTY3JpcHQgZGVjbGFyYXRpb24gZ2VuZXJhdGlvbiBmYWlsZWRgLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICAgICAgbG9nKGBcXG5FeGl0IENvZGU6ICR7cmVzdWx0LmV4aXRDb2RlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgICAgICBsb2coYFxcblR5cGVTY3JpcHQgQ29tbWFuZDogJHt0eXBlc2NyaXB0UGF0aH0gJHt0eXBlc2NyaXB0T3B0aW9ucy5qb2luKCcgJyl9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgICAgIGxvZyhgXFxuRXJyb3IgT3V0cHV0OlxcbiR7ZXJyb3JPdXRwdXR9YCwgJ2Vycm9yJywgcXVpZXQpO1xuXG4gICAgICAgICAgY29uc3QgZXJyb3JMaW5lcyA9IGVycm9yT3V0cHV0LnNwbGl0KCdcXG4nKS5maWx0ZXIoKGxpbmUpID0+XG4gICAgICAgICAgICBsaW5lLmluY2x1ZGVzKCdlcnJvciBUUycpIHx8XG4gICAgICAgICAgICBsaW5lLmluY2x1ZGVzKCdFcnJvcjonKSB8fFxuICAgICAgICAgICAgbGluZS50cmltKCkuc3RhcnRzV2l0aCgnc3JjLycpIHx8XG4gICAgICAgICAgICBsaW5lLnRyaW0oKS5zdGFydHNXaXRoKCdUUycpXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmKGVycm9yTGluZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgbG9nKCdcXG5LZXkgRXJyb3JzOicsICdlcnJvcicsIHF1aWV0KTtcblxuICAgICAgICAgICAgZXJyb3JMaW5lcy5zbGljZSgwLCAxMCkuZm9yRWFjaCgobGluZSkgPT4ge1xuICAgICAgICAgICAgICBsb2coYCAgJHtsaW5lfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZihlcnJvckxpbmVzLmxlbmd0aCA+IDEwKSB7XG4gICAgICAgICAgICAgIGxvZyhgICAuLi4gYW5kICR7ZXJyb3JMaW5lcy5sZW5ndGggLSAxMH0gbW9yZSBlcnJvcnNgLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc3Bpbm5lci5mYWlsKCdUeXBlU2NyaXB0IGRlY2xhcmF0aW9uIGdlbmVyYXRpb24gZmFpbGVkLicpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBXYXJuaW5nOiBUeXBlU2NyaXB0IGRlY2xhcmF0aW9uIGdlbmVyYXRpb24gY29tcGxldGVkIHdpdGggZXJyb3JzYCwgJ3dhcm4nLCBxdWlldCk7XG5cbiAgICAgICAgICBpZighcXVpZXQgJiYgZXJyb3JPdXRwdXQpIHtcbiAgICAgICAgICAgIGxvZyhgXFxuV2FybmluZ3M6XFxuJHtlcnJvck91dHB1dH1gLCAnd2FybicsIHF1aWV0KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzcGlubmVyLnN1Y2NlZWQoJ1R5cGVTY3JpcHQgZGVjbGFyYXRpb25zIGdlbmVyYXRlZCAod2l0aCB3YXJuaW5ncykuJyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNwaW5uZXIuc3VjY2VlZCgnU3VjY2Vzc2Z1bGx5IGdlbmVyYXRlZCBUeXBlU2NyaXB0IGRlY2xhcmF0aW9ucyEnKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IFR5cGVTY3JpcHQgZGVjbGFyYXRpb24gZ2VuZXJhdGlvbiBleGNlcHRpb25gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICBsb2coYFxcbkVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuXG4gICAgICBpZihlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmIGVycm9yLnN0YWNrKSB7XG4gICAgICAgIGxvZyhgXFxuU3RhY2s6XFxuJHtlcnJvci5zdGFja31gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICB9XG5cbiAgICAgIHNwaW5uZXIuZmFpbCgnVHlwZVNjcmlwdCBkZWNsYXJhdGlvbiBnZW5lcmF0aW9uIGhhZCBpc3N1ZXMsIGNvbnRpbnVpbmcuLi4nKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBnbG9iT3B0aW9ucyA9IHtcbiAgICBhYnNvbHV0ZTogdHJ1ZSxcbiAgICBjd2Q6IHNvdXJjZURpcixcbiAgICBkb3Q6IGZhbHNlLFxuICAgIG5vZGlyOiB0cnVlLFxuICAgIG5vc29ydDogdHJ1ZVxuICB9O1xuICBjb25zdCB0c0ZpbGVzOiBzdHJpbmdbXSA9IGdsb2JTeW5jKCcqKi8hKCouc3BlY3wqLnRlc3R8Ki5pbnRlZ3JhdGlvbnwqLmUyZSkudHMqJywgZ2xvYk9wdGlvbnMpO1xuICBjb25zdCBqc0ZpbGVzOiBzdHJpbmdbXSA9IGdsb2JTeW5jKCcqKi8hKCouc3BlY3wqLnRlc3R8Ki5pbnRlZ3JhdGlvbnwqLmUyZSkuanMnLCBnbG9iT3B0aW9ucyk7XG4gIGNvbnN0IHNvdXJjZUZpbGVzOiBzdHJpbmdbXSA9IFsuLi50c0ZpbGVzLCAuLi5qc0ZpbGVzXTtcblxuICBjb25zdCBjc3NGaWxlczogc3RyaW5nW10gPSBnZXRGaWxlc0J5RXh0KCcuY3NzJywgTGV4Q29uZmlnLmNvbmZpZyk7XG5cbiAgaWYoY3NzRmlsZXMubGVuZ3RoKSB7XG4gICAgY29uc3QgcG9zdGNzc1BhdGg6IHN0cmluZyA9IHJlc29sdmVCaW5hcnlQYXRoKCdwb3N0Y3NzJywgJ3Bvc3Rjc3MtY2xpJyk7XG5cbiAgICBpZighcG9zdGNzc1BhdGgpIHtcbiAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogUG9zdENTUyBiaW5hcnkgbm90IGZvdW5kIGluIExleCdzIG5vZGVfbW9kdWxlcyBvciBtb25vcmVwbyByb290YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgbG9nKCdQbGVhc2UgcmVpbnN0YWxsIExleCBvciBjaGVjayB5b3VyIGluc3RhbGxhdGlvbi4nLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cblxuICAgIGNvbnN0IHBvc3Rjc3NPcHRpb25zOiBzdHJpbmdbXSA9IFtcbiAgICAgIGAke3NvdXJjZURpcn0vKiovKiouY3NzYCxcbiAgICAgICctLWJhc2UnLFxuICAgICAgc291cmNlRGlyLFxuICAgICAgJy0tZGlyJyxcbiAgICAgIG91dHB1dERpcixcbiAgICAgICctLWNvbmZpZycsXG4gICAgICBwYXRoUmVzb2x2ZShkaXJOYW1lLCAnLi4vLi4vcG9zdGNzcy5jb25maWcuanMnKVxuICAgIF07XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgZXhlY2EocG9zdGNzc1BhdGgsIHBvc3Rjc3NPcHRpb25zLCB7ZW5jb2Rpbmc6ICd1dGY4J30pO1xuICAgICAgc3Bpbm5lci5zdWNjZWVkKGBTdWNjZXNzZnVsbHkgZm9ybWF0dGVkICR7Y3NzRmlsZXMubGVuZ3RofSBjc3MgZmlsZXMhYCk7XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuXG4gICAgICBzcGlubmVyLmZhaWwoJ0ZhaWxlZCBmb3JtYXR0aW5nIGNzcy4nKTtcblxuICAgICAgY2FsbGJhY2soMSk7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBnaWZGaWxlczogc3RyaW5nW10gPSBnZXRGaWxlc0J5RXh0KCcuZ2lmJywgTGV4Q29uZmlnLmNvbmZpZyk7XG4gIGNvbnN0IGpwZ0ZpbGVzOiBzdHJpbmdbXSA9IGdldEZpbGVzQnlFeHQoJy5qcGcnLCBMZXhDb25maWcuY29uZmlnKTtcbiAgY29uc3QgcG5nRmlsZXM6IHN0cmluZ1tdID0gZ2V0RmlsZXNCeUV4dCgnLnBuZycsIExleENvbmZpZy5jb25maWcpO1xuICBjb25zdCBzdmdGaWxlczogc3RyaW5nW10gPSBnZXRGaWxlc0J5RXh0KCcuc3ZnJywgTGV4Q29uZmlnLmNvbmZpZyk7XG4gIGNvbnN0IGltYWdlRmlsZXM6IHN0cmluZ1tdID0gWy4uLmdpZkZpbGVzLCAuLi5qcGdGaWxlcywgLi4ucG5nRmlsZXMsIC4uLnN2Z0ZpbGVzXTtcblxuICBpZihpbWFnZUZpbGVzLmxlbmd0aCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBjb3B5RmlsZXMoaW1hZ2VGaWxlcywgJ2ltYWdlJywgc3Bpbm5lciwgTGV4Q29uZmlnLmNvbmZpZyk7XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuXG4gICAgICBzcGlubmVyLmZhaWwoJ0ZhaWxlZCB0byBtb3ZlIGltYWdlcyB0byBvdXRwdXQgZGlyZWN0b3J5LicpO1xuXG4gICAgICBjYWxsYmFjaygxKTtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHR0ZkZpbGVzOiBzdHJpbmdbXSA9IGdldEZpbGVzQnlFeHQoJy50dGYnLCBMZXhDb25maWcuY29uZmlnKTtcbiAgY29uc3Qgb3RmRmlsZXM6IHN0cmluZ1tdID0gZ2V0RmlsZXNCeUV4dCgnLm90ZicsIExleENvbmZpZy5jb25maWcpO1xuICBjb25zdCB3b2ZmRmlsZXM6IHN0cmluZ1tdID0gZ2V0RmlsZXNCeUV4dCgnLndvZmYnLCBMZXhDb25maWcuY29uZmlnKTtcbiAgY29uc3Qgd29mZjJGaWxlczogc3RyaW5nW10gPSBnZXRGaWxlc0J5RXh0KCcud29mZjInLCBMZXhDb25maWcuY29uZmlnKTtcbiAgY29uc3QgZm9udEZpbGVzOiBzdHJpbmdbXSA9IFsuLi50dGZGaWxlcywgLi4ub3RmRmlsZXMsIC4uLndvZmZGaWxlcywgLi4ud29mZjJGaWxlc107XG5cbiAgaWYoZm9udEZpbGVzLmxlbmd0aCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBjb3B5RmlsZXMoZm9udEZpbGVzLCAnZm9udCcsIHNwaW5uZXIsIExleENvbmZpZy5jb25maWcpO1xuICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcblxuICAgICAgc3Bpbm5lci5mYWlsKCdGYWlsZWQgdG8gbW92ZSBmb250cyB0byBvdXRwdXQgZGlyZWN0b3J5LicpO1xuXG4gICAgICBjYWxsYmFjaygxKTtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG1kRmlsZXM6IHN0cmluZ1tdID0gZ2V0RmlsZXNCeUV4dCgnLm1kJywgTGV4Q29uZmlnLmNvbmZpZyk7XG5cbiAgaWYobWRGaWxlcy5sZW5ndGgpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgY29weUZpbGVzKG1kRmlsZXMsICdkb2N1bWVudHMnLCBzcGlubmVyLCBMZXhDb25maWcuY29uZmlnKTtcbiAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG5cbiAgICAgIHNwaW5uZXIuZmFpbCgnRmFpbGVkIHRvIG1vdmUgZG9jcyB0byBvdXRwdXQgZGlyZWN0b3J5LicpO1xuXG4gICAgICBjYWxsYmFjaygxKTtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgfVxuXG4gIGlmKHNvdXJjZUZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBXYXJuaW5nOiBObyBzb3VyY2UgZmlsZXMgZm91bmQgdG8gY29tcGlsZSBpbiAke3NvdXJjZURpcn1gLCAnd2FybicsIHF1aWV0KTtcbiAgICBzcGlubmVyLnN1Y2NlZWQoJ05vIGZpbGVzIHRvIGNvbXBpbGUuJyk7XG4gICAgY2FsbGJhY2soMCk7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBzcGlubmVyLnN0YXJ0KHdhdGNoID8gJ1dhdGNoaW5nIGZvciBjaGFuZ2VzLi4uJyA6ICdDb21waWxpbmcgd2l0aCBTV0MuLi4nKTtcblxuICB0cnkge1xuICAgIGNvbnN0IHRyYW5zZm9ybVByb21pc2VzID0gc291cmNlRmlsZXMubWFwKGFzeW5jIChmaWxlKSA9PiB7XG4gICAgICBjb25zdCBmaWxlUmVsYXRpdmVUb1NvdXJjZSA9IHBhdGhSZWxhdGl2ZShzb3VyY2VEaXIsIGZpbGUpO1xuICAgICAgY29uc3Qgc291cmNlUGF0aCA9IGZpbGU7XG4gICAgICBjb25zdCBvdXRwdXRGaWxlID0gZmlsZVJlbGF0aXZlVG9Tb3VyY2UucmVwbGFjZSgvXFwuKHRzfHRzeCkkLywgJy5qcycpO1xuICAgICAgY29uc3Qgb3V0cHV0UGF0aCA9IHBhdGhSZXNvbHZlKG91dHB1dERpciwgb3V0cHV0RmlsZSk7XG4gICAgICBjb25zdCBvdXRwdXREaXJQYXRoID0gZGlybmFtZShvdXRwdXRQYXRoKTtcblxuICAgICAgaWYoIWV4aXN0c1N5bmMob3V0cHV0RGlyUGF0aCkpIHtcbiAgICAgICAgbWtkaXJTeW5jKG91dHB1dERpclBhdGgsIHtyZWN1cnNpdmU6IHRydWV9KTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc291cmNlQ29kZSA9IHJlYWRGaWxlU3luYyhzb3VyY2VQYXRoLCAndXRmOCcpO1xuICAgICAgY29uc3QgaXNUU1ggPSBmaWxlLmVuZHNXaXRoKCcudHN4Jyk7XG4gICAgICBjb25zdCBzd2NPcHRpb25zOiBQYXJ0aWFsPFNXQ09wdGlvbnM+ID0ge1xuICAgICAgICAuLi5zd2NDb25maWcsXG4gICAgICAgIGZpbGVuYW1lOiBmaWxlLFxuICAgICAgICBtb2R1bGU6IHtcbiAgICAgICAgICB0eXBlOiBmb3JtYXQgPT09ICdjanMnID8gJ2NvbW1vbmpzJyBhcyBjb25zdCA6IChzd2NDb25maWc/Lm1vZHVsZT8udHlwZSBhcyAnZXM2JyB8fCAnZXM2JyksXG4gICAgICAgICAgLi4uc3djQ29uZmlnPy5tb2R1bGVcbiAgICAgICAgfSxcbiAgICAgICAgc291cmNlTWFwczogc3djQ29uZmlnPy5zb3VyY2VNYXBzIHx8ICdpbmxpbmUnXG4gICAgICB9O1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0cmFuc2Zvcm0oc291cmNlQ29kZSwgc3djT3B0aW9ucyk7XG5cbiAgICAgIHdyaXRlRmlsZVN5bmMob3V0cHV0UGF0aCwgcmVzdWx0LmNvZGUpO1xuICAgIH0pO1xuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwodHJhbnNmb3JtUHJvbWlzZXMpO1xuXG4gICAgc3Bpbm5lci5zdWNjZWVkKCdDb21waWxlIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkhJyk7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IFNXQyBjb21waWxhdGlvbiBmYWlsZWRgLCAnZXJyb3InLCBxdWlldCk7XG4gICAgbG9nKGBcXG5FcnJvcjogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcblxuICAgIGlmKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIGlmKGVycm9yLnN0YWNrKSB7XG4gICAgICAgIGxvZyhgXFxuU3RhY2sgVHJhY2U6XFxuJHtlcnJvci5zdGFja31gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICB9XG5cbiAgICAgIGlmKCdmaWxlbmFtZScgaW4gZXJyb3IgfHwgJ2ZpbGUnIGluIGVycm9yKSB7XG4gICAgICAgIGxvZyhgXFxuRmlsZTogJHsoZXJyb3IgYXMgYW55KS5maWxlbmFtZSB8fCAoZXJyb3IgYXMgYW55KS5maWxlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZighcXVpZXQpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLmVycm9yKCdcXG5GdWxsIEVycm9yIERldGFpbHM6JywgZXJyb3IpO1xuICAgIH1cblxuICAgIHNwaW5uZXIuZmFpbCgnQ29kZSBjb21waWxpbmcgZmFpbGVkLicpO1xuXG4gICAgY2FsbGJhY2soMSk7XG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICB0cnkge1xuICAgIGF3YWl0IGNvcHlDb25maWd1cmVkRmlsZXMoc3Bpbm5lciwgTGV4Q29uZmlnLmNvbmZpZywgcXVpZXQpO1xuICB9IGNhdGNoKGNvcHlFcnJvcikge1xuICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogRmFpbGVkIHRvIGNvcHkgY29uZmlndXJlZCBmaWxlczogJHtjb3B5RXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG5cbiAgICBzcGlubmVyLmZhaWwoJ0ZhaWxlZCB0byBjb3B5IGNvbmZpZ3VyZWQgZmlsZXMuJyk7XG5cbiAgICBjYWxsYmFjaygxKTtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIGNhbGxiYWNrKDApO1xuICByZXR1cm4gMDtcbn07XG4iXSwibmFtZXMiOlsidHJhbnNmb3JtIiwiZXhlY2EiLCJleGlzdHNTeW5jIiwibHN0YXRTeW5jIiwicmVhZGRpclN5bmMiLCJyZWFkRmlsZVN5bmMiLCJ3cml0ZUZpbGVTeW5jIiwibWtkaXJTeW5jIiwic3luYyIsImdsb2JTeW5jIiwiZXh0bmFtZSIsInBhdGhFeHRuYW1lIiwiam9pbiIsInBhdGhKb2luIiwicmVsYXRpdmUiLCJwYXRoUmVsYXRpdmUiLCJyZXNvbHZlIiwicGF0aFJlc29sdmUiLCJkaXJuYW1lIiwiTGV4Q29uZmlnIiwiY2hlY2tMaW5rZWRNb2R1bGVzIiwiY29weUNvbmZpZ3VyZWRGaWxlcyIsImNvcHlGaWxlcyIsImNyZWF0ZVNwaW5uZXIiLCJnZXRGaWxlc0J5RXh0IiwicmVtb3ZlRmlsZXMiLCJnZXREaXJOYW1lIiwicmVzb2x2ZUJpbmFyeVBhdGgiLCJsb2ciLCJoYXNGaWxlVHlwZSIsInN0YXJ0UGF0aCIsImV4dCIsImZpbGVzIiwic29tZSIsImZpbGUiLCJmaWxlbmFtZSIsImZpbGVFeHQiLCJzdGF0IiwiaXNEaXJlY3RvcnkiLCJpbmNsdWRlcyIsImNvbXBpbGUiLCJjbWQiLCJjYWxsYmFjayIsImNsaU5hbWUiLCJjb25maWciLCJmb3JtYXQiLCJvdXRwdXRQYXRoIiwicXVpZXQiLCJyZW1vdmUiLCJzb3VyY2VQYXRoIiwid2F0Y2giLCJzcGlubmVyIiwicGFyc2VDb25maWciLCJvdXRwdXRGdWxsUGF0aCIsInNvdXJjZUZ1bGxQYXRoIiwic3djIiwic3djQ29uZmlnIiwidXNlVHlwZXNjcmlwdCIsIm91dHB1dERpciIsInByb2Nlc3MiLCJjd2QiLCJzb3VyY2VEaXIiLCJkaXJOYW1lIiwidHlwZXNjcmlwdFBhdGgiLCJ0eXBlc2NyaXB0T3B0aW9ucyIsImdsb2JPcHRpb25zIiwiYWJzb2x1dGUiLCJkb3QiLCJub2RpciIsInRzRmlsZXMiLCJ0c3hGaWxlcyIsImFsbFNvdXJjZUZpbGVzIiwiZ2V0VHlwZVNjcmlwdERlY2xhcmF0aW9uRmxhZ3MiLCJzdGFydCIsInJlc3VsdCIsImFsbCIsImVuY29kaW5nIiwicmVqZWN0IiwiZXhpdENvZGUiLCJoYXNEZWNsYXJhdGlvbnMiLCJlcnJvck91dHB1dCIsInN0ZGVyciIsInN0ZG91dCIsImVycm9yTGluZXMiLCJzcGxpdCIsImZpbHRlciIsImxpbmUiLCJ0cmltIiwic3RhcnRzV2l0aCIsImxlbmd0aCIsInNsaWNlIiwiZm9yRWFjaCIsImZhaWwiLCJzdWNjZWVkIiwiZXJyb3IiLCJtZXNzYWdlIiwiRXJyb3IiLCJzdGFjayIsIm5vc29ydCIsImpzRmlsZXMiLCJzb3VyY2VGaWxlcyIsImNzc0ZpbGVzIiwicG9zdGNzc1BhdGgiLCJwb3N0Y3NzT3B0aW9ucyIsImdpZkZpbGVzIiwianBnRmlsZXMiLCJwbmdGaWxlcyIsInN2Z0ZpbGVzIiwiaW1hZ2VGaWxlcyIsInR0ZkZpbGVzIiwib3RmRmlsZXMiLCJ3b2ZmRmlsZXMiLCJ3b2ZmMkZpbGVzIiwiZm9udEZpbGVzIiwibWRGaWxlcyIsInRyYW5zZm9ybVByb21pc2VzIiwibWFwIiwiZmlsZVJlbGF0aXZlVG9Tb3VyY2UiLCJvdXRwdXRGaWxlIiwicmVwbGFjZSIsIm91dHB1dERpclBhdGgiLCJyZWN1cnNpdmUiLCJzb3VyY2VDb2RlIiwiaXNUU1giLCJlbmRzV2l0aCIsInN3Y09wdGlvbnMiLCJtb2R1bGUiLCJ0eXBlIiwic291cmNlTWFwcyIsImNvZGUiLCJQcm9taXNlIiwiY29uc29sZSIsImNvcHlFcnJvciJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBQ0QsU0FBUUEsU0FBUyxRQUFPLFlBQVk7QUFDcEMsU0FBUUMsS0FBSyxRQUFPLFFBQVE7QUFDNUIsU0FBUUMsVUFBVSxFQUFFQyxTQUFTLEVBQUVDLFdBQVcsRUFBRUMsWUFBWSxFQUFFQyxhQUFhLEVBQUVDLFNBQVMsUUFBTyxLQUFLO0FBQzlGLFNBQVFDLFFBQVFDLFFBQVEsUUFBTyxPQUFPO0FBQ3RDLFNBQVFDLFdBQVdDLFdBQVcsRUFBRUMsUUFBUUMsUUFBUSxFQUFFQyxZQUFZQyxZQUFZLEVBQUVDLFdBQVdDLFdBQVcsRUFBRUMsT0FBTyxRQUFPLE9BQU87QUFFekgsU0FBUUMsU0FBUyxRQUFPLHFCQUFxQjtBQUM3QyxTQUFRQyxrQkFBa0IsRUFBRUMsbUJBQW1CLEVBQUVDLFNBQVMsRUFBRUMsYUFBYSxFQUFFQyxhQUFhLEVBQUVDLFdBQVcsUUFBTyxxQkFBcUI7QUFDakksU0FBUUMsVUFBVSxFQUFFQyxpQkFBaUIsUUFBTyxzQkFBc0I7QUFDbEUsU0FBUUMsR0FBRyxRQUFPLHFCQUFxQjtBQUl2QyxPQUFPLE1BQU1DLGNBQWMsQ0FBQ0MsV0FBbUJDO0lBQzdDLElBQUcsQ0FBQzdCLFdBQVc0QixZQUFZO1FBQ3pCLE9BQU87SUFDVDtJQUVBLE1BQU1FLFFBQWtCNUIsWUFBWTBCO0lB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
|
|
277
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9jb21waWxlL2NvbXBpbGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7dHJhbnNmb3JtfSBmcm9tICdAc3djL2NvcmUnO1xuaW1wb3J0IHtleGVjYX0gZnJvbSAnZXhlY2EnO1xuaW1wb3J0IHtleGlzdHNTeW5jLCBsc3RhdFN5bmMsIHJlYWRkaXJTeW5jLCByZWFkRmlsZVN5bmMsIHdyaXRlRmlsZVN5bmMsIG1rZGlyU3luY30gZnJvbSAnZnMnO1xuaW1wb3J0IHtzeW5jIGFzIGdsb2JTeW5jfSBmcm9tICdnbG9iJztcbmltcG9ydCB7ZXh0bmFtZSBhcyBwYXRoRXh0bmFtZSwgam9pbiBhcyBwYXRoSm9pbiwgcmVsYXRpdmUgYXMgcGF0aFJlbGF0aXZlLCByZXNvbHZlIGFzIHBhdGhSZXNvbHZlLCBkaXJuYW1lfSBmcm9tICdwYXRoJztcblxuaW1wb3J0IHtMZXhDb25maWd9IGZyb20gJy4uLy4uL0xleENvbmZpZy5qcyc7XG5pbXBvcnQge2NoZWNrTGlua2VkTW9kdWxlcywgY29weUNvbmZpZ3VyZWRGaWxlcywgY29weUZpbGVzLCBjcmVhdGVTcGlubmVyLCBnZXRGaWxlc0J5RXh0LCByZW1vdmVGaWxlc30gZnJvbSAnLi4vLi4vdXRpbHMvYXBwLmpzJztcbmltcG9ydCB7Z2V0RGlyTmFtZSwgcmVzb2x2ZUJpbmFyeVBhdGh9IGZyb20gJy4uLy4uL3V0aWxzL2ZpbGUuanMnO1xuaW1wb3J0IHtsb2d9IGZyb20gJy4uLy4uL3V0aWxzL2xvZy5qcyc7XG5cbmltcG9ydCB0eXBlIHtTV0NPcHRpb25zfSBmcm9tICcuLi8uLi9MZXhDb25maWcuanMnO1xuXG5leHBvcnQgY29uc3QgaGFzRmlsZVR5cGUgPSAoc3RhcnRQYXRoOiBzdHJpbmcsIGV4dDogc3RyaW5nW10pOiBib29sZWFuID0+IHtcbiAgaWYoIWV4aXN0c1N5bmMoc3RhcnRQYXRoKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGZpbGVzOiBzdHJpbmdbXSA9IHJlYWRkaXJTeW5jKHN0YXJ0UGF0aCk7XG5cbiAgcmV0dXJuIGZpbGVzLnNvbWUoKGZpbGU6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IGZpbGVuYW1lOiBzdHJpbmcgPSBwYXRoSm9pbihzdGFydFBhdGgsIGZpbGUpO1xuICAgIGNvbnN0IGZpbGVFeHQ6IHN0cmluZyA9IHBhdGhFeHRuYW1lKGZpbGVuYW1lKTtcbiAgICBjb25zdCBzdGF0ID0gbHN0YXRTeW5jKGZpbGVuYW1lKTtcblxuICAgIGlmKHN0YXQuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgcmV0dXJuIGhhc0ZpbGVUeXBlKGZpbGVuYW1lLCBleHQpO1xuICAgIH1cblxuICAgIHJldHVybiBleHQuaW5jbHVkZXMoZmlsZUV4dCk7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNvbXBpbGUgPSBhc3luYyAoY21kOiBhbnksIGNhbGxiYWNrOiBhbnkgPSAoKSA9PiAoe30pKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcbiAgY29uc3Qge1xuICAgIGNsaU5hbWUgPSAnTGV4JyxcbiAgICBjb25maWcsXG4gICAgZm9ybWF0ID0gJ2VzbScsXG4gICAgb3V0cHV0UGF0aCxcbiAgICBxdWlldCxcbiAgICByZW1vdmUsXG4gICAgc291cmNlUGF0aCxcbiAgICB3YXRjaFxuICB9ID0gY21kO1xuICBjb25zdCBzcGlubmVyID0gY3JlYXRlU3Bpbm5lcihxdWlldCk7XG5cbiAgbG9nKGAke2NsaU5hbWV9IGNvbXBpbGluZy4uLmAsICdpbmZvJywgcXVpZXQpO1xuXG4gIGF3YWl0IExleENvbmZpZy5wYXJzZUNvbmZpZyhjbWQpO1xuXG4gIGNvbnN0IHtvdXRwdXRGdWxsUGF0aCwgcmVhY3RDb21waWxlciwgc291cmNlRnVsbFBhdGgsIHN3YzogcGFyc2VkU3djQ29uZmlnLCB1c2VUeXBlc2NyaXB0fSA9IExleENvbmZpZy5jb25maWc7XG4gIGNvbnN0IHN3Y0NvbmZpZyA9IExleENvbmZpZy5nZXRTV0NDb25maWdXaXRoUmVhY3RDb21waWxlcihwYXJzZWRTd2NDb25maWcsIHJlYWN0Q29tcGlsZXIpO1xuICBjb25zdCBvdXRwdXREaXI6IHN0cmluZyA9IG91dHB1dFBhdGhcbiAgICA/IHBhdGhSZXNvbHZlKHByb2Nlc3MuY3dkKCksIG91dHB1dFBhdGgpXG4gICAgOiAob3V0cHV0RnVsbFBhdGggfHwgcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJy4vbGliJykpO1xuICBjb25zdCBzb3VyY2VEaXI6IHN0cmluZyA9IHNvdXJjZVBhdGggPyBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCBgLi8ke3NvdXJjZVBhdGh9YCkgOiBzb3VyY2VGdWxsUGF0aCB8fCAnJztcbiAgY29uc3QgZGlyTmFtZSA9IGdldERpck5hbWUoKTtcblxuICBjaGVja0xpbmtlZE1vZHVsZXMoKTtcblxuICBpZihyZW1vdmUpIHtcbiAgICBhd2FpdCByZW1vdmVGaWxlcyhvdXRwdXREaXIpO1xuICB9XG5cbiAgaWYodXNlVHlwZXNjcmlwdCkge1xuICAgIGNvbnN0IHR5cGVzY3JpcHRQYXRoOiBzdHJpbmcgPSByZXNvbHZlQmluYXJ5UGF0aCgndHNjJywgJ3R5cGVzY3JpcHQnKTtcblxuICAgIGlmKCF0eXBlc2NyaXB0UGF0aCkge1xuICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBUeXBlU2NyaXB0IGJpbmFyeSBub3QgZm91bmQgaW4gTGV4J3Mgbm9kZV9tb2R1bGVzIG9yIG1vbm9yZXBvIHJvb3RgLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICBsb2coJ1BsZWFzZSByZWluc3RhbGwgTGV4IG9yIGNoZWNrIHlvdXIgaW5zdGFsbGF0aW9uLicsICdpbmZvJywgcXVpZXQpO1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuXG4gICAgY29uc3QgdHlwZXNjcmlwdE9wdGlvbnM6IHN0cmluZ1tdID0gY29uZmlnXG4gICAgICA/IFsnLXAnLCBjb25maWcsICctLWVtaXREZWNsYXJhdGlvbk9ubHknLCAnLS1za2lwTGliQ2hlY2snXSAvLyBVc2VyIHByb3ZpZGVkIGN1c3RvbSBjb25maWcsIGJ1dCBzdGlsbCBvbmx5IGVtaXQgZGVjbGFyYXRpb25zXG4gICAgICA6ICgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGdsb2JPcHRpb25zID0ge1xuICAgICAgICAgIGFic29sdXRlOiB0cnVlLFxuICAgICAgICAgIGN3ZDogc291cmNlRGlyLFxuICAgICAgICAgIGRvdDogZmFsc2UsXG4gICAgICAgICAgbm9kaXI6IHRydWVcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgdHNGaWxlcyA9IGdsb2JTeW5jKCcqKi8hKCouc3BlY3wqLnRlc3R8Ki5pbnRlZ3JhdGlvbnwqLmUyZSkudHMnLCBnbG9iT3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHRzeEZpbGVzID0gZ2xvYlN5bmMoJyoqLyEoKi5zcGVjfCoudGVzdHwqLmludGVncmF0aW9ufCouZTJlKS50c3gnLCBnbG9iT3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGFsbFNvdXJjZUZpbGVzID0gWy4uLnRzRmlsZXMsIC4uLnRzeEZpbGVzXTtcblxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIC4uLkxleENvbmZpZy5nZXRUeXBlU2NyaXB0RGVjbGFyYXRpb25GbGFncygpLFxuICAgICAgICAgIC4uLmFsbFNvdXJjZUZpbGVzXG4gICAgICAgIF07XG4gICAgICB9KSgpO1xuXG4gICAgc3Bpbm5lci5zdGFydCgnR2VuZXJhdGluZyBUeXBlU2NyaXB0IGRlY2xhcmF0aW9ucy4uLicpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGV4ZWNhKHR5cGVzY3JpcHRQYXRoLCB0eXBlc2NyaXB0T3B0aW9ucywge1xuICAgICAgICBhbGw6IHRydWUsXG4gICAgICAgIGN3ZDogcHJvY2Vzcy5jd2QoKSxcbiAgICAgICAgZW5jb2Rpbmc6ICd1dGY4JyxcbiAgICAgICAgcmVqZWN0OiBmYWxzZVxuICAgICAgfSk7XG5cbiAgICAgIGlmKHJlc3VsdC5leGl0Q29kZSAhPT0gMCkge1xuICAgICAgICBjb25zdCBoYXNEZWNsYXJhdGlvbnMgPSByZXN1bHQuYWxsPy5pbmNsdWRlcygnV3JpdGluZycpIHx8IHJlc3VsdC5hbGw/LmluY2x1ZGVzKCdEZWNsYXJhdGlvbicpIHx8IGZhbHNlO1xuICAgICAgICBjb25zdCBlcnJvck91dHB1dCA9IHJlc3VsdC5zdGRlcnIgfHwgcmVzdWx0LnN0ZG91dCB8fCByZXN1bHQuYWxsIHx8ICdVbmtub3duIGVycm9yJztcblxuICAgICAgICBpZighaGFzRGVjbGFyYXRpb25zKSB7XG4gICAgICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBUeXBlU2NyaXB0IGRlY2xhcmF0aW9uIGdlbmVyYXRpb24gZmFpbGVkYCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgICAgIGxvZyhgXFxuRXhpdCBDb2RlOiAke3Jlc3VsdC5leGl0Q29kZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICAgICAgbG9nKGBcXG5UeXBlU2NyaXB0IENvbW1hbmQ6ICR7dHlwZXNjcmlwdFBhdGh9ICR7dHlwZXNjcmlwdE9wdGlvbnMuam9pbignICcpfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgICAgICBsb2coYFxcbkVycm9yIE91dHB1dDpcXG4ke2Vycm9yT3V0cHV0fWAsICdlcnJvcicsIHF1aWV0KTtcblxuICAgICAgICAgIGNvbnN0IGVycm9yTGluZXMgPSBlcnJvck91dHB1dC5zcGxpdCgnXFxuJykuZmlsdGVyKChsaW5lKSA9PlxuICAgICAgICAgICAgbGluZS5pbmNsdWRlcygnZXJyb3IgVFMnKSB8fFxuICAgICAgICAgICAgbGluZS5pbmNsdWRlcygnRXJyb3I6JykgfHxcbiAgICAgICAgICAgIGxpbmUudHJpbSgpLnN0YXJ0c1dpdGgoJ3NyYy8nKSB8fFxuICAgICAgICAgICAgbGluZS50cmltKCkuc3RhcnRzV2l0aCgnVFMnKVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZihlcnJvckxpbmVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGxvZygnXFxuS2V5IEVycm9yczonLCAnZXJyb3InLCBxdWlldCk7XG5cbiAgICAgICAgICAgIGVycm9yTGluZXMuc2xpY2UoMCwgMTApLmZvckVhY2goKGxpbmUpID0+IHtcbiAgICAgICAgICAgICAgbG9nKGAgICR7bGluZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYoZXJyb3JMaW5lcy5sZW5ndGggPiAxMCkge1xuICAgICAgICAgICAgICBsb2coYCAgLi4uIGFuZCAke2Vycm9yTGluZXMubGVuZ3RoIC0gMTB9IG1vcmUgZXJyb3JzYCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHNwaW5uZXIuZmFpbCgnVHlwZVNjcmlwdCBkZWNsYXJhdGlvbiBnZW5lcmF0aW9uIGZhaWxlZC4nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gV2FybmluZzogVHlwZVNjcmlwdCBkZWNsYXJhdGlvbiBnZW5lcmF0aW9uIGNvbXBsZXRlZCB3aXRoIGVycm9yc2AsICd3YXJuJywgcXVpZXQpO1xuXG4gICAgICAgICAgaWYoIXF1aWV0ICYmIGVycm9yT3V0cHV0KSB7XG4gICAgICAgICAgICBsb2coYFxcbldhcm5pbmdzOlxcbiR7ZXJyb3JPdXRwdXR9YCwgJ3dhcm4nLCBxdWlldCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc3Bpbm5lci5zdWNjZWVkKCdUeXBlU2NyaXB0IGRlY2xhcmF0aW9ucyBnZW5lcmF0ZWQgKHdpdGggd2FybmluZ3MpLicpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzcGlubmVyLnN1Y2NlZWQoJ1N1Y2Nlc3NmdWxseSBnZW5lcmF0ZWQgVHlwZVNjcmlwdCBkZWNsYXJhdGlvbnMhJyk7XG4gICAgICB9XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBUeXBlU2NyaXB0IGRlY2xhcmF0aW9uIGdlbmVyYXRpb24gZXhjZXB0aW9uYCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgbG9nKGBcXG5FcnJvcjogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcblxuICAgICAgaWYoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiBlcnJvci5zdGFjaykge1xuICAgICAgICBsb2coYFxcblN0YWNrOlxcbiR7ZXJyb3Iuc3RhY2t9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgfVxuXG4gICAgICBzcGlubmVyLmZhaWwoJ1R5cGVTY3JpcHQgZGVjbGFyYXRpb24gZ2VuZXJhdGlvbiBoYWQgaXNzdWVzLCBjb250aW51aW5nLi4uJyk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgZ2xvYk9wdGlvbnMgPSB7XG4gICAgYWJzb2x1dGU6IHRydWUsXG4gICAgY3dkOiBzb3VyY2VEaXIsXG4gICAgZG90OiBmYWxzZSxcbiAgICBub2RpcjogdHJ1ZSxcbiAgICBub3NvcnQ6IHRydWVcbiAgfTtcbiAgY29uc3QgdHNGaWxlczogc3RyaW5nW10gPSBnbG9iU3luYygnKiovISgqLnNwZWN8Ki50ZXN0fCouaW50ZWdyYXRpb258Ki5lMmUpLnRzKicsIGdsb2JPcHRpb25zKTtcbiAgY29uc3QganNGaWxlczogc3RyaW5nW10gPSBnbG9iU3luYygnKiovISgqLnNwZWN8Ki50ZXN0fCouaW50ZWdyYXRpb258Ki5lMmUpLmpzJywgZ2xvYk9wdGlvbnMpO1xuICBjb25zdCBzb3VyY2VGaWxlczogc3RyaW5nW10gPSBbLi4udHNGaWxlcywgLi4uanNGaWxlc107XG5cbiAgY29uc3QgY3NzRmlsZXM6IHN0cmluZ1tdID0gZ2V0RmlsZXNCeUV4dCgnLmNzcycsIExleENvbmZpZy5jb25maWcpO1xuXG4gIGlmKGNzc0ZpbGVzLmxlbmd0aCkge1xuICAgIGNvbnN0IHBvc3Rjc3NQYXRoOiBzdHJpbmcgPSByZXNvbHZlQmluYXJ5UGF0aCgncG9zdGNzcycsICdwb3N0Y3NzLWNsaScpO1xuXG4gICAgaWYoIXBvc3Rjc3NQYXRoKSB7XG4gICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IFBvc3RDU1MgYmluYXJ5IG5vdCBmb3VuZCBpbiBMZXgncyBub2RlX21vZHVsZXMgb3IgbW9ub3JlcG8gcm9vdGAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgIGxvZygnUGxlYXNlIHJlaW5zdGFsbCBMZXggb3IgY2hlY2sgeW91ciBpbnN0YWxsYXRpb24uJywgJ2luZm8nLCBxdWlldCk7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG5cbiAgICBjb25zdCBwb3N0Y3NzT3B0aW9uczogc3RyaW5nW10gPSBbXG4gICAgICBgJHtzb3VyY2VEaXJ9LyoqLyoqLmNzc2AsXG4gICAgICAnLS1iYXNlJyxcbiAgICAgIHNvdXJjZURpcixcbiAgICAgICctLWRpcicsXG4gICAgICBvdXRwdXREaXIsXG4gICAgICAnLS1jb25maWcnLFxuICAgICAgcGF0aFJlc29sdmUoZGlyTmFtZSwgJy4uLy4uL3Bvc3Rjc3MuY29uZmlnLmpzJylcbiAgICBdO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGV4ZWNhKHBvc3Rjc3NQYXRoLCBwb3N0Y3NzT3B0aW9ucywge2VuY29kaW5nOiAndXRmOCd9KTtcbiAgICAgIHNwaW5uZXIuc3VjY2VlZChgU3VjY2Vzc2Z1bGx5IGZvcm1hdHRlZCAke2Nzc0ZpbGVzLmxlbmd0aH0gY3NzIGZpbGVzIWApO1xuICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcblxuICAgICAgc3Bpbm5lci5mYWlsKCdGYWlsZWQgZm9ybWF0dGluZyBjc3MuJyk7XG5cbiAgICAgIGNhbGxiYWNrKDEpO1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgZ2lmRmlsZXM6IHN0cmluZ1tdID0gZ2V0RmlsZXNCeUV4dCgnLmdpZicsIExleENvbmZpZy5jb25maWcpO1xuICBjb25zdCBqcGdGaWxlczogc3RyaW5nW10gPSBnZXRGaWxlc0J5RXh0KCcuanBnJywgTGV4Q29uZmlnLmNvbmZpZyk7XG4gIGNvbnN0IHBuZ0ZpbGVzOiBzdHJpbmdbXSA9IGdldEZpbGVzQnlFeHQoJy5wbmcnLCBMZXhDb25maWcuY29uZmlnKTtcbiAgY29uc3Qgc3ZnRmlsZXM6IHN0cmluZ1tdID0gZ2V0RmlsZXNCeUV4dCgnLnN2ZycsIExleENvbmZpZy5jb25maWcpO1xuICBjb25zdCBpbWFnZUZpbGVzOiBzdHJpbmdbXSA9IFsuLi5naWZGaWxlcywgLi4uanBnRmlsZXMsIC4uLnBuZ0ZpbGVzLCAuLi5zdmdGaWxlc107XG5cbiAgaWYoaW1hZ2VGaWxlcy5sZW5ndGgpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgY29weUZpbGVzKGltYWdlRmlsZXMsICdpbWFnZScsIHNwaW5uZXIsIExleENvbmZpZy5jb25maWcpO1xuICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcblxuICAgICAgc3Bpbm5lci5mYWlsKCdGYWlsZWQgdG8gbW92ZSBpbWFnZXMgdG8gb3V0cHV0IGRpcmVjdG9yeS4nKTtcblxuICAgICAgY2FsbGJhY2soMSk7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gIH1cblxuICBjb25zdCB0dGZGaWxlczogc3RyaW5nW10gPSBnZXRGaWxlc0J5RXh0KCcudHRmJywgTGV4Q29uZmlnLmNvbmZpZyk7XG4gIGNvbnN0IG90ZkZpbGVzOiBzdHJpbmdbXSA9IGdldEZpbGVzQnlFeHQoJy5vdGYnLCBMZXhDb25maWcuY29uZmlnKTtcbiAgY29uc3Qgd29mZkZpbGVzOiBzdHJpbmdbXSA9IGdldEZpbGVzQnlFeHQoJy53b2ZmJywgTGV4Q29uZmlnLmNvbmZpZyk7XG4gIGNvbnN0IHdvZmYyRmlsZXM6IHN0cmluZ1tdID0gZ2V0RmlsZXNCeUV4dCgnLndvZmYyJywgTGV4Q29uZmlnLmNvbmZpZyk7XG4gIGNvbnN0IGZvbnRGaWxlczogc3RyaW5nW10gPSBbLi4udHRmRmlsZXMsIC4uLm90ZkZpbGVzLCAuLi53b2ZmRmlsZXMsIC4uLndvZmYyRmlsZXNdO1xuXG4gIGlmKGZvbnRGaWxlcy5sZW5ndGgpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgY29weUZpbGVzKGZvbnRGaWxlcywgJ2ZvbnQnLCBzcGlubmVyLCBMZXhDb25maWcuY29uZmlnKTtcbiAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG5cbiAgICAgIHNwaW5uZXIuZmFpbCgnRmFpbGVkIHRvIG1vdmUgZm9udHMgdG8gb3V0cHV0IGRpcmVjdG9yeS4nKTtcblxuICAgICAgY2FsbGJhY2soMSk7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBtZEZpbGVzOiBzdHJpbmdbXSA9IGdldEZpbGVzQnlFeHQoJy5tZCcsIExleENvbmZpZy5jb25maWcpO1xuXG4gIGlmKG1kRmlsZXMubGVuZ3RoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGNvcHlGaWxlcyhtZEZpbGVzLCAnZG9jdW1lbnRzJywgc3Bpbm5lciwgTGV4Q29uZmlnLmNvbmZpZyk7XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuXG4gICAgICBzcGlubmVyLmZhaWwoJ0ZhaWxlZCB0byBtb3ZlIGRvY3MgdG8gb3V0cHV0IGRpcmVjdG9yeS4nKTtcblxuICAgICAgY2FsbGJhY2soMSk7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gIH1cblxuICBpZihzb3VyY2VGaWxlcy5sZW5ndGggPT09IDApIHtcbiAgICBsb2coYFxcbiR7Y2xpTmFtZX0gV2FybmluZzogTm8gc291cmNlIGZpbGVzIGZvdW5kIHRvIGNvbXBpbGUgaW4gJHtzb3VyY2VEaXJ9YCwgJ3dhcm4nLCBxdWlldCk7XG4gICAgc3Bpbm5lci5zdWNjZWVkKCdObyBmaWxlcyB0byBjb21waWxlLicpO1xuICAgIGNhbGxiYWNrKDApO1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgc3Bpbm5lci5zdGFydCh3YXRjaCA/ICdXYXRjaGluZyBmb3IgY2hhbmdlcy4uLicgOiAnQ29tcGlsaW5nIHdpdGggU1dDLi4uJyk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCB0cmFuc2Zvcm1Qcm9taXNlcyA9IHNvdXJjZUZpbGVzLm1hcChhc3luYyAoZmlsZSkgPT4ge1xuICAgICAgY29uc3QgZmlsZVJlbGF0aXZlVG9Tb3VyY2UgPSBwYXRoUmVsYXRpdmUoc291cmNlRGlyLCBmaWxlKTtcbiAgICAgIGNvbnN0IHNvdXJjZVBhdGggPSBmaWxlO1xuICAgICAgY29uc3Qgb3V0cHV0RmlsZSA9IGZpbGVSZWxhdGl2ZVRvU291cmNlLnJlcGxhY2UoL1xcLih0c3x0c3gpJC8sICcuanMnKTtcbiAgICAgIGNvbnN0IG91dHB1dFBhdGggPSBwYXRoUmVzb2x2ZShvdXRwdXREaXIsIG91dHB1dEZpbGUpO1xuICAgICAgY29uc3Qgb3V0cHV0RGlyUGF0aCA9IGRpcm5hbWUob3V0cHV0UGF0aCk7XG5cbiAgICAgIGlmKCFleGlzdHNTeW5jKG91dHB1dERpclBhdGgpKSB7XG4gICAgICAgIG1rZGlyU3luYyhvdXRwdXREaXJQYXRoLCB7cmVjdXJzaXZlOiB0cnVlfSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNvdXJjZUNvZGUgPSByZWFkRmlsZVN5bmMoc291cmNlUGF0aCwgJ3V0ZjgnKTtcbiAgICAgIGNvbnN0IHN3Y09wdGlvbnM6IFBhcnRpYWw8U1dDT3B0aW9ucz4gPSB7XG4gICAgICAgIC4uLnN3Y0NvbmZpZyxcbiAgICAgICAgZmlsZW5hbWU6IGZpbGUsXG4gICAgICAgIG1vZHVsZToge1xuICAgICAgICAgIHR5cGU6IGZvcm1hdCA9PT0gJ2NqcycgPyAnY29tbW9uanMnIGFzIGNvbnN0IDogKHN3Y0NvbmZpZz8ubW9kdWxlPy50eXBlIGFzICdlczYnIHx8ICdlczYnKSxcbiAgICAgICAgICAuLi5zd2NDb25maWc/Lm1vZHVsZVxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2VNYXBzOiBzd2NDb25maWc/LnNvdXJjZU1hcHMgfHwgJ2lubGluZSdcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRyYW5zZm9ybShzb3VyY2VDb2RlLCBzd2NPcHRpb25zKTtcblxuICAgICAgd3JpdGVGaWxlU3luYyhvdXRwdXRQYXRoLCByZXN1bHQuY29kZSk7XG4gICAgfSk7XG5cbiAgICBhd2FpdCBQcm9taXNlLmFsbCh0cmFuc2Zvcm1Qcm9taXNlcyk7XG5cbiAgICBzcGlubmVyLnN1Y2NlZWQoJ0NvbXBpbGUgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSEnKTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogU1dDIGNvbXBpbGF0aW9uIGZhaWxlZGAsICdlcnJvcicsIHF1aWV0KTtcbiAgICBsb2coYFxcbkVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuXG4gICAgaWYoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgaWYoZXJyb3Iuc3RhY2spIHtcbiAgICAgICAgbG9nKGBcXG5TdGFjayBUcmFjZTpcXG4ke2Vycm9yLnN0YWNrfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgIH1cblxuICAgICAgaWYoJ2ZpbGVuYW1lJyBpbiBlcnJvciB8fCAnZmlsZScgaW4gZXJyb3IpIHtcbiAgICAgICAgbG9nKGBcXG5GaWxlOiAkeyhlcnJvciBhcyBhbnkpLmZpbGVuYW1lIHx8IChlcnJvciBhcyBhbnkpLmZpbGV9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmKCFxdWlldCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1xcbkZ1bGwgRXJyb3IgRGV0YWlsczonLCBlcnJvcik7XG4gICAgfVxuXG4gICAgc3Bpbm5lci5mYWlsKCdDb2RlIGNvbXBpbGluZyBmYWlsZWQuJyk7XG5cbiAgICBjYWxsYmFjaygxKTtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgYXdhaXQgY29weUNvbmZpZ3VyZWRGaWxlcyhzcGlubmVyLCBMZXhDb25maWcuY29uZmlnLCBxdWlldCk7XG4gIH0gY2F0Y2goY29weUVycm9yKSB7XG4gICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBGYWlsZWQgdG8gY29weSBjb25maWd1cmVkIGZpbGVzOiAke2NvcHlFcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcblxuICAgIHNwaW5uZXIuZmFpbCgnRmFpbGVkIHRvIGNvcHkgY29uZmlndXJlZCBmaWxlcy4nKTtcblxuICAgIGNhbGxiYWNrKDEpO1xuICAgIHJldHVybiAxO1xuICB9XG5cbiAgY2FsbGJhY2soMCk7XG4gIHJldHVybiAwO1xufTtcbiJdLCJuYW1lcyI6WyJ0cmFuc2Zvcm0iLCJleGVjYSIsImV4aXN0c1N5bmMiLCJsc3RhdFN5bmMiLCJyZWFkZGlyU3luYyIsInJlYWRGaWxlU3luYyIsIndyaXRlRmlsZVN5bmMiLCJta2RpclN5bmMiLCJzeW5jIiwiZ2xvYlN5bmMiLCJleHRuYW1lIiwicGF0aEV4dG5hbWUiLCJqb2luIiwicGF0aEpvaW4iLCJyZWxhdGl2ZSIsInBhdGhSZWxhdGl2ZSIsInJlc29sdmUiLCJwYXRoUmVzb2x2ZSIsImRpcm5hbWUiLCJMZXhDb25maWciLCJjaGVja0xpbmtlZE1vZHVsZXMiLCJjb3B5Q29uZmlndXJlZEZpbGVzIiwiY29weUZpbGVzIiwiY3JlYXRlU3Bpbm5lciIsImdldEZpbGVzQnlFeHQiLCJyZW1vdmVGaWxlcyIsImdldERpck5hbWUiLCJyZXNvbHZlQmluYXJ5UGF0aCIsImxvZyIsImhhc0ZpbGVUeXBlIiwic3RhcnRQYXRoIiwiZXh0IiwiZmlsZXMiLCJzb21lIiwiZmlsZSIsImZpbGVuYW1lIiwiZmlsZUV4dCIsInN0YXQiLCJpc0RpcmVjdG9yeSIsImluY2x1ZGVzIiwiY29tcGlsZSIsImNtZCIsImNhbGxiYWNrIiwiY2xpTmFtZSIsImNvbmZpZyIsImZvcm1hdCIsIm91dHB1dFBhdGgiLCJxdWlldCIsInJlbW92ZSIsInNvdXJjZVBhdGgiLCJ3YXRjaCIsInNwaW5uZXIiLCJwYXJzZUNvbmZpZyIsIm91dHB1dEZ1bGxQYXRoIiwicmVhY3RDb21waWxlciIsInNvdXJjZUZ1bGxQYXRoIiwic3djIiwicGFyc2VkU3djQ29uZmlnIiwidXNlVHlwZXNjcmlwdCIsInN3Y0NvbmZpZyIsImdldFNXQ0NvbmZpZ1dpdGhSZWFjdENvbXBpbGVyIiwib3V0cHV0RGlyIiwicHJvY2VzcyIsImN3ZCIsInNvdXJjZURpciIsImRpck5hbWUiLCJ0eXBlc2NyaXB0UGF0aCIsInR5cGVzY3JpcHRPcHRpb25zIiwiZ2xvYk9wdGlvbnMiLCJhYnNvbHV0ZSIsImRvdCIsIm5vZGlyIiwidHNGaWxlcyIsInRzeEZpbGVzIiwiYWxsU291cmNlRmlsZXMiLCJnZXRUeXBlU2NyaXB0RGVjbGFyYXRpb25GbGFncyIsInN0YXJ0IiwicmVzdWx0IiwiYWxsIiwiZW5jb2RpbmciLCJyZWplY3QiLCJleGl0Q29kZSIsImhhc0RlY2xhcmF0aW9ucyIsImVycm9yT3V0cHV0Iiwic3RkZXJyIiwic3Rkb3V0IiwiZXJyb3JMaW5lcyIsInNwbGl0IiwiZmlsdGVyIiwibGluZSIsInRyaW0iLCJzdGFydHNXaXRoIiwibGVuZ3RoIiwic2xpY2UiLCJmb3JFYWNoIiwiZmFpbCIsInN1Y2NlZWQiLCJlcnJvciIsIm1lc3NhZ2UiLCJFcnJvciIsInN0YWNrIiwibm9zb3J0IiwianNGaWxlcyIsInNvdXJjZUZpbGVzIiwiY3NzRmlsZXMiLCJwb3N0Y3NzUGF0aCIsInBvc3Rjc3NPcHRpb25zIiwiZ2lmRmlsZXMiLCJqcGdGaWxlcyIsInBuZ0ZpbGVzIiwic3ZnRmlsZXMiLCJpbWFnZUZpbGVzIiwidHRmRmlsZXMiLCJvdGZGaWxlcyIsIndvZmZGaWxlcyIsIndvZmYyRmlsZXMiLCJmb250RmlsZXMiLCJtZEZpbGVzIiwidHJhbnNmb3JtUHJvbWlzZXMiLCJtYXAiLCJmaWxlUmVsYXRpdmVUb1NvdXJjZSIsIm91dHB1dEZpbGUiLCJyZXBsYWNlIiwib3V0cHV0RGlyUGF0aCIsInJlY3Vyc2l2ZSIsInNvdXJjZUNvZGUiLCJzd2NPcHRpb25zIiwibW9kdWxlIiwidHlwZSIsInNvdXJjZU1hcHMiLCJjb2RlIiwiUHJvbWlzZSIsImNvbnNvbGUiLCJjb3B5RXJyb3IiXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUNELFNBQVFBLFNBQVMsUUFBTyxZQUFZO0FBQ3BDLFNBQVFDLEtBQUssUUFBTyxRQUFRO0FBQzVCLFNBQVFDLFVBQVUsRUFBRUMsU0FBUyxFQUFFQyxXQUFXLEVBQUVDLFlBQVksRUFBRUMsYUFBYSxFQUFFQyxTQUFTLFFBQU8sS0FBSztBQUM5RixTQUFRQyxRQUFRQyxRQUFRLFFBQU8sT0FBTztBQUN0QyxTQUFRQyxXQUFXQyxXQUFXLEVBQUVDLFFBQVFDLFFBQVEsRUFBRUMsWUFBWUMsWUFBWSxFQUFFQyxXQUFXQyxXQUFXLEVBQUVDLE9BQU8sUUFBTyxPQUFPO0FBRXpILFNBQVFDLFNBQVMsUUFBTyxxQkFBcUI7QUFDN0MsU0FBUUMsa0JBQWtCLEVBQUVDLG1CQUFtQixFQUFFQyxTQUFTLEVBQUVDLGFBQWEsRUFBRUMsYUFBYSxFQUFFQyxXQUFXLFFBQU8scUJBQXFCO0FBQ2pJLFNBQVFDLFVBQVUsRUFBRUMsaUJBQWlCLFFBQU8sc0JBQXNCO0FBQ2xFLFNBQVFDLEdBQUcsUUFB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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nlabs/lex",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.59.0",
|
|
4
4
|
"description": "Lex",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -87,27 +87,28 @@
|
|
|
87
87
|
"dependencies": {
|
|
88
88
|
"@mdx-js/loader": "^3.1.1",
|
|
89
89
|
"@nlabs/webpack-plugin-static-site": "*",
|
|
90
|
-
"@playwright/test": "^1.
|
|
91
|
-
"@storybook/addon-docs": "^10.
|
|
92
|
-
"@storybook/addon-links": "^10.
|
|
90
|
+
"@playwright/test": "^1.60.0",
|
|
91
|
+
"@storybook/addon-docs": "^10.4.1",
|
|
92
|
+
"@storybook/addon-links": "^10.4.1",
|
|
93
93
|
"@storybook/addon-styling-webpack": "^3.0.2",
|
|
94
|
-
"@storybook/addon-themes": "^10.
|
|
95
|
-
"@storybook/cli": "^10.
|
|
96
|
-
"@storybook/react": "^10.
|
|
97
|
-
"@storybook/react-webpack5": "^10.
|
|
94
|
+
"@storybook/addon-themes": "^10.4.1",
|
|
95
|
+
"@storybook/cli": "^10.4.1",
|
|
96
|
+
"@storybook/react": "^10.4.1",
|
|
97
|
+
"@storybook/react-webpack5": "^10.4.1",
|
|
98
98
|
"@swc/cli": "^0.8.1",
|
|
99
|
-
"@swc/core": "^1.15.
|
|
99
|
+
"@swc/core": "^1.15.40",
|
|
100
|
+
"@swc/react-compiler": "^1.15.40",
|
|
100
101
|
"@tailwindcss/forms": "^0.5.11",
|
|
101
102
|
"@tailwindcss/nesting": "^0.0.0-insiders.565cd3e",
|
|
102
|
-
"@tailwindcss/postcss": "4.
|
|
103
|
+
"@tailwindcss/postcss": "4.3.0",
|
|
103
104
|
"@testing-library/jest-dom": "^6.9.1",
|
|
104
105
|
"@testing-library/react": "^16.3.2",
|
|
105
|
-
"@vitest/coverage-v8": "^4.1.
|
|
106
|
+
"@vitest/coverage-v8": "^4.1.7",
|
|
106
107
|
"assert": "^2.1.0",
|
|
107
|
-
"autoprefixer": "^10.
|
|
108
|
+
"autoprefixer": "^10.5.0",
|
|
108
109
|
"boxen": "8.0.1",
|
|
109
110
|
"buffer": "^6.0.3",
|
|
110
|
-
"caniuse-lite": "1.0.
|
|
111
|
+
"caniuse-lite": "1.0.30001793",
|
|
111
112
|
"chalk": "^5.6.2",
|
|
112
113
|
"commander": "^14.0.3",
|
|
113
114
|
"compare-versions": "^6.1.1",
|
|
@@ -117,37 +118,37 @@
|
|
|
117
118
|
"crypto-js": "^4.2.0",
|
|
118
119
|
"css-loader": "^7.1.4",
|
|
119
120
|
"css-minimizer-webpack-plugin": "^8.0.0",
|
|
120
|
-
"cssnano": "^
|
|
121
|
+
"cssnano": "^8.0.1",
|
|
121
122
|
"dotenv-webpack": "^9.0.0",
|
|
122
123
|
"download-npm-package": "^3.1.12",
|
|
123
|
-
"esbuild": "^0.
|
|
124
|
-
"eslint": "^10.
|
|
124
|
+
"esbuild": "^0.28.0",
|
|
125
|
+
"eslint": "^10.4.0",
|
|
125
126
|
"eslint-config-styleguidejs": "^5.0.4",
|
|
126
127
|
"execa": "9.6.1",
|
|
127
|
-
"expect": "^30.
|
|
128
|
+
"expect": "^30.4.1",
|
|
128
129
|
"express": "^5.2.1",
|
|
129
130
|
"favicons-webpack-plugin": "^6.0.1",
|
|
130
131
|
"find-file-up": "^2.0.1",
|
|
131
132
|
"glob": "^13.0.6",
|
|
132
133
|
"global": "^4.4.0",
|
|
133
|
-
"graphql": "^16.
|
|
134
|
+
"graphql": "^16.14.0",
|
|
134
135
|
"graphql-tag": "^2.12.6",
|
|
135
136
|
"html-loader": "^5.1.0",
|
|
136
|
-
"html-webpack-plugin": "^5.6.
|
|
137
|
+
"html-webpack-plugin": "^5.6.7",
|
|
137
138
|
"https-browserify": "^1.0.0",
|
|
138
139
|
"image-webpack-loader": "^8.1.0",
|
|
139
|
-
"jsdom": "^29.
|
|
140
|
+
"jsdom": "^29.1.1",
|
|
140
141
|
"latest-version": "9.0.0",
|
|
141
142
|
"lodash": "^4.18.1",
|
|
142
143
|
"luxon": "^3.7.2",
|
|
143
144
|
"math-expression-evaluator": "^2.0.7",
|
|
144
145
|
"mini-css-extract-plugin": "^2.10.2",
|
|
145
|
-
"npm-check-updates": "^
|
|
146
|
-
"openai": "^6.
|
|
147
|
-
"ora": "9.
|
|
146
|
+
"npm-check-updates": "^22.2.1",
|
|
147
|
+
"openai": "^6.39.1",
|
|
148
|
+
"ora": "9.4.0",
|
|
148
149
|
"os-browserify": "^0.3.0",
|
|
149
150
|
"path-browserify": "^1.0.1",
|
|
150
|
-
"postcss": "^8.5.
|
|
151
|
+
"postcss": "^8.5.15",
|
|
151
152
|
"postcss-browser-reporter": "^0.7.0",
|
|
152
153
|
"postcss-cli": "^11.0.1",
|
|
153
154
|
"postcss-custom-properties": "^15.0.1",
|
|
@@ -156,46 +157,46 @@
|
|
|
156
157
|
"postcss-import": "16.1.1",
|
|
157
158
|
"postcss-loader": "^8.2.1",
|
|
158
159
|
"postcss-nesting": "^14.0.0",
|
|
159
|
-
"postcss-preset-env": "^11.
|
|
160
|
+
"postcss-preset-env": "^11.3.0",
|
|
160
161
|
"postcss-simple-vars": "^7.0.1",
|
|
161
|
-
"postcss-svgo": "
|
|
162
|
-
"postcss-url": "10.1.
|
|
162
|
+
"postcss-svgo": "8.0.0",
|
|
163
|
+
"postcss-url": "10.1.4",
|
|
163
164
|
"postcss-value-parser": "^4.2.0",
|
|
164
165
|
"process": "^0.11.10",
|
|
165
166
|
"randombytes": "^2.1.0",
|
|
166
|
-
"react": "^19.2.
|
|
167
|
-
"react-dom": "^19.2.
|
|
167
|
+
"react": "^19.2.6",
|
|
168
|
+
"react-dom": "^19.2.6",
|
|
168
169
|
"regenerator-runtime": "^0.14.1",
|
|
169
|
-
"resolve": "^1.22.
|
|
170
|
+
"resolve": "^1.22.12",
|
|
170
171
|
"rimraf": "^6.1.3",
|
|
171
|
-
"semver": "^7.
|
|
172
|
+
"semver": "^7.8.1",
|
|
172
173
|
"source-map-loader": "^5.0.0",
|
|
173
|
-
"storybook": "^10.
|
|
174
|
+
"storybook": "^10.4.1",
|
|
174
175
|
"stream-browserify": "^3.0.0",
|
|
175
176
|
"stream-http": "^3.2.0",
|
|
176
177
|
"style-loader": "^4.0.0",
|
|
177
178
|
"svgo": "4.0.1",
|
|
178
179
|
"swc-loader": "^0.2.7",
|
|
179
|
-
"tailwindcss": "^4.
|
|
180
|
+
"tailwindcss": "^4.3.0",
|
|
180
181
|
"ts-node": "^10.9.2",
|
|
181
182
|
"tsconfig-paths-webpack-plugin": "^4.2.0",
|
|
182
|
-
"typescript": "^6.0.
|
|
183
|
+
"typescript": "^6.0.3",
|
|
183
184
|
"util": "^0.12.5",
|
|
184
|
-
"vitest": "^4.1.
|
|
185
|
+
"vitest": "^4.1.7",
|
|
185
186
|
"vm-browserify": "^1.1.2",
|
|
186
|
-
"webpack": "5.
|
|
187
|
+
"webpack": "5.107.2",
|
|
187
188
|
"webpack-bundle-analyzer": "^5.3.0",
|
|
188
|
-
"webpack-cli": "^7.0.
|
|
189
|
+
"webpack-cli": "^7.0.3",
|
|
189
190
|
"webpack-merge": "^6.0.1",
|
|
190
191
|
"webpack-plugin-serve": "^1.6.0",
|
|
191
|
-
"ws": "^8.
|
|
192
|
+
"ws": "^8.21.0"
|
|
192
193
|
},
|
|
193
194
|
"devDependencies": {
|
|
194
195
|
"@types/express": "^5.0.6",
|
|
195
196
|
"@types/luxon": "^3.7.1",
|
|
196
|
-
"@types/node": "^25.
|
|
197
|
+
"@types/node": "^25.9.1",
|
|
197
198
|
"@types/ora": "^3.2.0",
|
|
198
|
-
"@types/react": "^19.2.
|
|
199
|
+
"@types/react": "^19.2.15",
|
|
199
200
|
"@types/webpack": "^5.28.5"
|
|
200
201
|
},
|
|
201
202
|
"overrides": {
|
|
@@ -207,7 +208,7 @@
|
|
|
207
208
|
"follow-redirects": "^1.16.0",
|
|
208
209
|
"http-proxy-middleware": "^3.0.5",
|
|
209
210
|
"minimatch": ">=10.2.4",
|
|
210
|
-
"postcss": "^8.5.
|
|
211
|
+
"postcss": "^8.5.15",
|
|
211
212
|
"semver-regex": "^4.0.5",
|
|
212
213
|
"tmp": "^0.2.5",
|
|
213
214
|
"file-type": "^21.3.1"
|
package/webpack.config.js
CHANGED
|
@@ -61,6 +61,7 @@ const {
|
|
|
61
61
|
const webpackStaticPath = webpackCustom?.staticPath || './src/static';
|
|
62
62
|
|
|
63
63
|
const {publicPath: _, staticPath: __, ...webpackConfigFiltered} = webpackCustom || {};
|
|
64
|
+
const swcConfig = LexConfig.getSWCConfigWithReactCompiler(lexConfig.swc, lexConfig.reactCompiler);
|
|
64
65
|
|
|
65
66
|
const plugins = [
|
|
66
67
|
new ProgressPlugin({
|
|
@@ -396,18 +397,18 @@ export default (webpackEnv, webpackOptions) => {
|
|
|
396
397
|
type: 'javascript/esm',
|
|
397
398
|
loader: swcLoaderPath,
|
|
398
399
|
options: {
|
|
399
|
-
...
|
|
400
|
+
...swcConfig,
|
|
400
401
|
jsc: {
|
|
401
|
-
...
|
|
402
|
+
...swcConfig?.jsc,
|
|
402
403
|
parser: {
|
|
403
|
-
...
|
|
404
|
+
...swcConfig?.jsc?.parser,
|
|
404
405
|
tsx: false,
|
|
405
406
|
dynamicImport: true
|
|
406
407
|
},
|
|
407
|
-
target:
|
|
408
|
+
target: swcConfig?.jsc?.target || 'es2020'
|
|
408
409
|
},
|
|
409
410
|
module: {
|
|
410
|
-
...
|
|
411
|
+
...swcConfig?.module,
|
|
411
412
|
type: 'es6'
|
|
412
413
|
}
|
|
413
414
|
},
|
|
@@ -426,7 +427,7 @@ export default (webpackEnv, webpackOptions) => {
|
|
|
426
427
|
type: 'javascript/esm',
|
|
427
428
|
loader: swcLoaderPath,
|
|
428
429
|
options: {
|
|
429
|
-
...
|
|
430
|
+
...swcConfig
|
|
430
431
|
},
|
|
431
432
|
resolve: {
|
|
432
433
|
symlinks: true
|