@nikovirtala/projen-lambda-function-construct-generator 0.0.27 → 0.0.29
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/.jsii +2 -2
- package/.kiro/steering/product.md +20 -0
- package/.kiro/steering/structure.md +73 -0
- package/.kiro/steering/tech.md +91 -0
- package/lib/index.js +1 -1
- package/package.json +2 -2
package/.jsii
CHANGED
|
@@ -8845,6 +8845,6 @@
|
|
|
8845
8845
|
"symbolId": "src/index:LambdaFunctionConstructGeneratorOptions"
|
|
8846
8846
|
}
|
|
8847
8847
|
},
|
|
8848
|
-
"version": "0.0.
|
|
8849
|
-
"fingerprint": "
|
|
8848
|
+
"version": "0.0.29",
|
|
8849
|
+
"fingerprint": "V8OZ0oGKqZkbQjJVT4JDraLWKFt2IvP4Q6tg+xnugDk="
|
|
8850
8850
|
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Product Overview
|
|
2
|
+
|
|
3
|
+
This is a projen component that generates AWS CDK Lambda Function constructs and bundles their code assets using esbuild.
|
|
4
|
+
|
|
5
|
+
## Key Features
|
|
6
|
+
|
|
7
|
+
- Automatically discovers Lambda Function handlers in a specified directory
|
|
8
|
+
- Generates type-safe CDK constructs for each Lambda handler
|
|
9
|
+
- Bundles Lambda code assets using esbuild during projen execution (not during CDK synth)
|
|
10
|
+
- Enables "build once, deploy many" pattern for Lambda Functions
|
|
11
|
+
- Supports customization of esbuild bundling options and base construct classes
|
|
12
|
+
- Allows multiple generator instances with different configurations
|
|
13
|
+
|
|
14
|
+
## Target Users
|
|
15
|
+
|
|
16
|
+
Developers building AWS CDK applications with TypeScript who want to:
|
|
17
|
+
- Automate Lambda construct generation from handler files
|
|
18
|
+
- Pre-bundle Lambda code during build time rather than synth time
|
|
19
|
+
- Maintain type-safe, reusable Lambda constructs
|
|
20
|
+
- Follow consistent patterns across multiple Lambda functions
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# Project Structure
|
|
2
|
+
|
|
3
|
+
## Directory Layout
|
|
4
|
+
|
|
5
|
+
```
|
|
6
|
+
.
|
|
7
|
+
├── .github/ # GitHub Actions workflows and configuration
|
|
8
|
+
├── .kiro/ # Kiro AI assistant configuration
|
|
9
|
+
│ └── steering/ # AI guidance documents
|
|
10
|
+
├── .projen/ # Projen-managed task and dependency definitions
|
|
11
|
+
├── .vscode/ # VS Code settings and extensions
|
|
12
|
+
├── src/ # Source code
|
|
13
|
+
│ └── index.ts # Main component implementation
|
|
14
|
+
├── test/ # Test files
|
|
15
|
+
│ └── *.test.ts # Vitest test files
|
|
16
|
+
├── assets/ # Generated bundled Lambda code (created at build time)
|
|
17
|
+
│ └── handlers/ # Bundled handler code organized by function name
|
|
18
|
+
├── .projenrc.ts # Projen project configuration
|
|
19
|
+
├── package.json # npm package manifest (managed by projen)
|
|
20
|
+
├── tsconfig.dev.json # TypeScript configuration (managed by projen)
|
|
21
|
+
├── vitest.config.ts # Vitest test configuration
|
|
22
|
+
├── biome.jsonc # Biome linter/formatter configuration
|
|
23
|
+
└── mise.toml # Node.js version management
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Key Files
|
|
27
|
+
|
|
28
|
+
### Configuration Files
|
|
29
|
+
|
|
30
|
+
- **`.projenrc.ts`**: Single source of truth for project configuration. Modify this and run `pnpm projen` to regenerate managed files.
|
|
31
|
+
- **`package.json`**: Generated by projen. Do not edit directly.
|
|
32
|
+
- **`tsconfig.dev.json`**: Generated by projen. Do not edit directly.
|
|
33
|
+
- **`biome.jsonc`**: Generated by projen. Do not edit directly.
|
|
34
|
+
|
|
35
|
+
### Source Code
|
|
36
|
+
|
|
37
|
+
- **`src/index.ts`**: Contains the `LambdaFunctionConstructGenerator` component class and its options interface.
|
|
38
|
+
|
|
39
|
+
### Generated Files
|
|
40
|
+
|
|
41
|
+
Files marked with `~~ Generated by projen. To modify, edit .projenrc.ts and run "npx projen".` should not be edited directly.
|
|
42
|
+
|
|
43
|
+
## Code Organization Patterns
|
|
44
|
+
|
|
45
|
+
### Component Structure
|
|
46
|
+
|
|
47
|
+
The main export is `LambdaFunctionConstructGenerator`, a projen `Component` that:
|
|
48
|
+
1. Extends the projen `Component` class
|
|
49
|
+
2. Accepts a `NodeProject` and options in the constructor
|
|
50
|
+
3. Creates tasks and scripts during project synthesis
|
|
51
|
+
4. Generates a bundler script in `.projen/generate-and-bundle-*.ts`
|
|
52
|
+
|
|
53
|
+
### Generated Code Pattern
|
|
54
|
+
|
|
55
|
+
The component generates:
|
|
56
|
+
1. **Bundler scripts** in `.projen/` directory (TypeScript files executed by tsx)
|
|
57
|
+
2. **Lambda constructs** in the configured output directory (default: `src/constructs/lambda/`)
|
|
58
|
+
3. **Bundled assets** in `assets/handlers/{functionName}/` directory
|
|
59
|
+
|
|
60
|
+
### Naming Conventions
|
|
61
|
+
|
|
62
|
+
- Lambda handler files: `*.lambda.ts` (configurable via `filePattern`)
|
|
63
|
+
- Generated construct files: `{functionName}.ts` (PascalCase class names)
|
|
64
|
+
- Generated construct classes: `{FunctionName}Function`
|
|
65
|
+
- Task names: `generate-and-bundle-{uniqueId}` where uniqueId is derived from sourceDir and filePattern
|
|
66
|
+
|
|
67
|
+
## Testing Conventions
|
|
68
|
+
|
|
69
|
+
- Test files located in `test/` directory
|
|
70
|
+
- Naming: `*.test.ts`
|
|
71
|
+
- Framework: Vitest with mocking support
|
|
72
|
+
- Coverage enabled via v8 provider
|
|
73
|
+
- Type checking enabled during tests
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# Technology Stack
|
|
2
|
+
|
|
3
|
+
## ⚠️ Projen-Managed Project
|
|
4
|
+
|
|
5
|
+
This project is **entirely managed by projen**. Key implications:
|
|
6
|
+
|
|
7
|
+
- **DO NOT** manually edit generated files (package.json, tsconfig.json, etc.)
|
|
8
|
+
- **ALL** configuration changes must be made in `.projenrc.ts`
|
|
9
|
+
- After modifying `.projenrc.ts`, run `npx projen` to regenerate files
|
|
10
|
+
- Dependencies, scripts, and tooling are defined in `.projenrc.ts`, not package.json
|
|
11
|
+
|
|
12
|
+
## Build System
|
|
13
|
+
|
|
14
|
+
- **projen**: Project configuration and build orchestration
|
|
15
|
+
- **JSII**: Cross-language library compilation for CDK constructs
|
|
16
|
+
- **pnpm**: Package manager (v10)
|
|
17
|
+
- **TypeScript**: v5.9.3
|
|
18
|
+
|
|
19
|
+
## Core Dependencies
|
|
20
|
+
|
|
21
|
+
- **aws-cdk-lib**: AWS CDK v2 library
|
|
22
|
+
- **constructs**: CDK constructs base library
|
|
23
|
+
- **@mrgrain/cdk-esbuild**: esbuild integration for CDK
|
|
24
|
+
- **esbuild**: JavaScript/TypeScript bundler
|
|
25
|
+
- **glob**: File pattern matching
|
|
26
|
+
- **change-case**: String case conversion utilities
|
|
27
|
+
- **yargs**: CLI argument parsing
|
|
28
|
+
|
|
29
|
+
## Code Quality
|
|
30
|
+
|
|
31
|
+
- **Biome**: Linting and formatting (replaces ESLint/Prettier)
|
|
32
|
+
- Tab indentation (4 spaces)
|
|
33
|
+
- Double quotes for JavaScript/TypeScript
|
|
34
|
+
- Format on save enabled
|
|
35
|
+
- **Vitest**: Testing framework with coverage via v8
|
|
36
|
+
- **TypeScript**: Strict mode enabled with comprehensive checks
|
|
37
|
+
|
|
38
|
+
## Node.js
|
|
39
|
+
|
|
40
|
+
- **Version**: 22.21.1 (managed via mise)
|
|
41
|
+
- **Target**: ES2020
|
|
42
|
+
- **Module System**: CommonJS for compilation, supports ES modules in generated code
|
|
43
|
+
|
|
44
|
+
## Common Commands
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
# Install dependencies
|
|
48
|
+
pnpm install
|
|
49
|
+
|
|
50
|
+
# Build the project (runs projen tasks)
|
|
51
|
+
pnpm build
|
|
52
|
+
|
|
53
|
+
# Run tests
|
|
54
|
+
pnpm test
|
|
55
|
+
|
|
56
|
+
# Run tests in watch mode
|
|
57
|
+
pnpm test:watch
|
|
58
|
+
|
|
59
|
+
# Update test snapshots
|
|
60
|
+
pnpm test:update
|
|
61
|
+
|
|
62
|
+
# Format and lint code
|
|
63
|
+
pnpm biome
|
|
64
|
+
|
|
65
|
+
# Compile TypeScript
|
|
66
|
+
pnpm compile
|
|
67
|
+
|
|
68
|
+
# Generate API documentation
|
|
69
|
+
pnpm docgen
|
|
70
|
+
|
|
71
|
+
# Run projen to regenerate project files
|
|
72
|
+
pnpm projen
|
|
73
|
+
|
|
74
|
+
# Package for distribution
|
|
75
|
+
pnpm package
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## Development Workflow
|
|
79
|
+
|
|
80
|
+
1. Modify `.projenrc.ts` for project configuration changes
|
|
81
|
+
2. Run `pnpm projen` to regenerate managed files
|
|
82
|
+
3. Make code changes in `src/`
|
|
83
|
+
4. Run `pnpm build` to compile and test
|
|
84
|
+
5. Generated files are marked with `~~ Generated by projen` header
|
|
85
|
+
|
|
86
|
+
## CI/CD
|
|
87
|
+
|
|
88
|
+
- GitHub Actions for build, test, and release
|
|
89
|
+
- Auto-merge enabled for dependency updates (via Mergify)
|
|
90
|
+
- Trusted publishing to npm
|
|
91
|
+
- Auto-approval for @nikovirtala
|
package/lib/index.js
CHANGED
|
@@ -245,5 +245,5 @@ main().catch(error => {
|
|
|
245
245
|
}
|
|
246
246
|
exports.LambdaFunctionConstructGenerator = LambdaFunctionConstructGenerator;
|
|
247
247
|
_a = JSII_RTTI_SYMBOL_1;
|
|
248
|
-
LambdaFunctionConstructGenerator[_a] = { fqn: "@nikovirtala/projen-lambda-function-construct-generator.LambdaFunctionConstructGenerator", version: "0.0.
|
|
248
|
+
LambdaFunctionConstructGenerator[_a] = { fqn: "@nikovirtala/projen-lambda-function-construct-generator.LambdaFunctionConstructGenerator", version: "0.0.29" };
|
|
249
249
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxrQ0FBa0M7QUFFbEMsbUNBQStDO0FBc0UvQzs7OztHQUlHO0FBQ0gsTUFBYSxnQ0FBaUMsU0FBUSxrQkFBUztJQVc5RCxZQUNDLE9BQW9CLEVBQ3BCLE9BQWlEO1FBRWpELEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNmLElBQUksQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDO1FBQzNCLElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxFQUFFLFNBQVMsSUFBSSxjQUFjLENBQUM7UUFDdEQsSUFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPLEVBQUUsU0FBUyxJQUFJLHVCQUF1QixDQUFDO1FBQy9ELElBQUksQ0FBQyxXQUFXLEdBQUcsT0FBTyxFQUFFLFdBQVcsSUFBSSxhQUFhLENBQUM7UUFDekQsSUFBSSxDQUFDLGNBQWMsR0FBRyxPQUFPLEVBQUUsY0FBYyxJQUFJLEVBQUUsQ0FBQztRQUNwRCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsT0FBTyxFQUFFLG1CQUFtQixDQUFDO1FBQ3hELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxPQUFPLEVBQUUsa0JBQWtCLENBQUM7UUFDdEQsSUFBSSxDQUFDLG9CQUFvQixHQUFHLE9BQU8sRUFBRSxvQkFBb0IsQ0FBQztRQUUxRCwrREFBK0Q7UUFDL0QsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN2RSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FDakMsU0FBUyxFQUNULHVCQUF1QixRQUFRLEtBQUssQ0FDcEMsQ0FBQztRQUVGLDRCQUE0QjtRQUM1QixJQUFJLE9BQU8sRUFBRSxlQUFlLElBQUksSUFBSSxFQUFFLENBQUM7WUFDdEMsSUFBSSxD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LEdBQUcsR0FBRyxJQUFJLG1CQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNqRSxNQUFNLEtBQUssR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hDLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7WUFDMUIsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoQixDQUFDO1FBRUQscURBQXFEO1FBQ3JELElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUMxQixTQUFTLEVBQ1QsTUFBTSxFQUNOLE9BQU8sRUFDUCxhQUFhLEVBQ2IsY0FBYyxFQUNkLEtBQUssRUFDTCxhQUFhLENBQ2IsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNLLHVCQUF1QjtRQUM5Qix1QkFBdUI7UUFDdkIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRTlELElBQUksV0FBVyxFQUFFLENBQUM7WUFDakIsMERBQTBEO1lBQzFELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDdkUsTUFBTSxRQUFRLEdBQUcsdUJBQXVCLFFBQVEsRUFBRSxDQUFDO1lBQ25ELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM1RCxJQUFJLFVBQVUsRUFBRSxDQUFDO2dCQUNoQixXQUFXLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3RDLENBQUM7UUFDRixDQUFDO0lBQ0YsQ0FBQzs7QUFsUkYsNEVBbVJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgdHlwZSB7IEJ1aWxkT3B0aW9ucyB9IGZyb20gXCJAbXJncmFpbi9jZGstZXNidWlsZFwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBTb3VyY2VDb2RlIH0gZnJvbSBcInByb2plblwiO1xuaW1wb3J0IHR5cGUgeyBOb2RlUHJvamVjdCB9IGZyb20gXCJwcm9qZW4vbGliL2phdmFzY3JpcHRcIjtcblxuLyoqXG4gKiBPcHRpb25zIGZvciB0aGUgTGFtYmRhRnVuY3Rpb25Db25zdHJ1Y3RHZW5lcmF0b3JcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMYW1iZGFGdW5jdGlvbkNvbnN0cnVjdEdlbmVyYXRvck9wdGlvbnMge1xuXHQvKipcblx0ICogU291cmNlIGRpcmVjdG9yeSB3aGVyZSBMYW1iZGEgRnVuY3Rpb24gaGFuZGxlcnMgYXJlIGxvY2F0ZWRcblx0ICpcblx0ICogQGRlZmF1bHQgXCJzcmMvaGFuZGxlcnNcIlxuXHQgKi9cblx0cmVhZG9ubHkgc291cmNlRGlyPzogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBPdXRwdXQgZGlyZWN0b3J5IHdoZXJlIExhbWJkYSBGdW5jdGlvbiBjb25zdHJ1Y3RzIHdpbGwgYmUgZ2VuZXJhdGVkXG5cdCAqXG5cdCAqIEBkZWZhdWx0IFwic3JjL2NvbnN0cnVjdHMvbGFtYmRhXCJcblx0ICovXG5cdHJlYWRvbmx5IG91dHB1dERpcj86IHN0cmluZztcblxuXHQvKipcblx0ICogRmlsZSBwYXR0ZXJuIHRvIGlkZW50aWZ5IExhbWJkYSBGdW5jdGlvbiBoYW5kbGVyc1xuXHQgKlxuXHQgKiBAZGVmYXVsdCBcIioubGFtYmRhLnRzXCJcblx0ICovXG5cdHJlYWRvbmx5IGZpbGVQYXR0ZXJuPzogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBlc2J1aWxkIG9wdGlvbnMgdG8gY3VzdG9taXplIHRoZSBidW5kbGluZyBwcm9jZXNzXG5cdCAqXG5cdCAqIEBkZWZhdWx0IHt9XG5cdCAqL1xuXHRyZWFkb25seSBlc2J1aWxkT3B0aW9ucz86IEJ1aWxkT3B0aW9ucztcblxuXHQvKipcblx0ICogV2hldGhlciB0byBhdXRvbWF0aWNhbGx5IGFkZCB0aGUgcmVxdWlyZWQgZGVwZW5kZW5jaWVzXG5cdCAqXG5cdCAqIEBkZWZhdWx0IHRydWVcblx0ICovXG5cdHJlYWRvbmx5IGFkZERlcGVuZGVuY2llcz86IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIEltcG9ydCBzdGF0ZW1lbnQgZm9yIHRoZSBiYXNlIGNvbnN0cnVjdFxuXHQgKlxuXHQgKiBAZXhhbXBsZSBcImltcG9ydCB7IE5vZGVqc0Z1bmN0aW9uIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYS1ub2RlanMnO1wiXG5cdCAqXG5cdCAqIEBkZWZhdWx0IFwiaW1wb3J0IHsgYXdzX2xhbWJkYSB9IGZyb20gJ2F3cy1jZGstbGliJztcIlxuXHQgKi9cblx0cmVhZG9ubHkgYmFzZUNvbnN0cnVjdEltcG9ydD86IHN0cmluZztcblxuXHQvKipcblx0ICogTmFtZSBvZiB0aGUgY29uc3RydWN0IGNsYXNzIHRvIGV4dGVuZFxuXHQgKlxuXHQgKiBAZXhhbXBsZSBcIk5vZGVqc0Z1bmN0aW9uXCJcblx0ICpcblx0ICogQGRlZmF1bHQgXCJhd3NfbGFtYmRhLkZ1bmN0aW9uXCJcblx0ICovXG5cdHJlYWRvbmx5IGJhc2VDb25zdHJ1Y3RDbGFzcz86IHN0cmluZztcblxuXHQvKipcblx0ICogUGFja2FnZSBuYW1lIHRvIGFkZCBhcyBkZXBlbmRlbmN5IGZvciB0aGUgYmFzZSBjb25zdHJ1Y3Rcblx0ICpcblx0ICogQGV4YW1wbGUgXCJhd3MtY2RrLWxpYlwiXG5cdCAqXG5cdCAqIEBkZWZhdWx0IFwiYXdzLWNkay1saWJcIlxuXHQgKi9cblx0cmVhZG9ubHkgYmFzZUNvbnN0cnVjdFBhY2thZ2U/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBwcm9qZW4gY29tcG9uZW50IHRoYXQgZ2VuZXJhdGVzIEFXUyBDREsgTGFtYmRhIEZ1bmN0aW9uIGNvbnN0cnVjdHMgYW5kIGJ1bmRsZXMgdGhlaXIgY29kZSBhc3NldHMgdXNpbmcgZXNidWlsZC5cbiAqXG4gKiBUaGUgYnVuZGxpbmcgaGFwcGVucyBkdXJpbmcgcHJvamVuIGV4ZWN1dGlvbiwgbm90IGR1cmluZyBDREsgc3ludGgsIGVuYWJsaW5nIGEgXCJidWlsZCBvbmNlLCBkZXBsb3kgbWFueVwiIHBhdHRlcm4uXG4gKi9cbmV4cG9ydCBjbGFzcyBMYW1iZGFGdW5jdGlvbkNvbnN0cnVjdEdlbmVyYXRvciBleHRlbmRzIENvbXBvbmVudCB7XG5cdHB1YmxpYyByZWFkb25seSBzb3VyY2VEaXI6IHN0cmluZztcblx0cHVibGljIHJlYWRvbmx5IG91dHB1dERpcjogc3RyaW5nO1xuXHRwdWJsaWMgcmVhZG9ubHkgZmlsZVBhdHRlcm46IHN0cmluZztcblx0cHVibGljIHJlYWRvbmx5IGVzYnVpbGRPcHRpb25zOiBCdWlsZE9wdGlvbnM7XG5cdHB1YmxpYyByZWFkb25seSBiYXNlQ29uc3RydWN0SW1wb3J0Pzogc3RyaW5nO1xuXHRwdWJsaWMgcmVhZG9ubHkgYmFzZUNvbnN0cnVjdENsYXNzPzogc3RyaW5nO1xuXHRwdWJsaWMgcmVhZG9ubHkgYmFzZUNvbnN0cnVjdFBhY2thZ2U/OiBzdHJpbmc7XG5cdHByaXZhdGUgcmVhZG9ubHkgbm9kZVByb2plY3Q6IE5vZGVQcm9qZWN0O1xuXHRwcml2YXRlIHJlYWRvbmx5IGJ1bmRsZXJTY3JpcHRQYXRoOiBzdHJpbmc7XG5cblx0Y29uc3RydWN0b3IoXG5cdFx0cHJvamVjdDogTm9kZVByb2plY3QsXG5cdFx0b3B0aW9ucz86IExhbWJkYUZ1bmN0aW9uQ29uc3RydWN0R2VuZXJhdG9yT3B0aW9ucyxcblx0KSB7XG5cdFx0c3VwZXIocHJvamVjdCk7XG5cdFx0dGhpcy5ub2RlUHJvamVjdCA9IHByb2plY3Q7XG5cdFx0dGhpcy5zb3VyY2VEaXIgPSBvcHRpb25zPy5zb3VyY2VEaXIgPz8gXCJzcmMvaGFuZGxlcnNcIjtcblx0XHR0aGlzLm91dHB1dERpciA9IG9wdGlvbnM/Lm91dHB1dERpciA/PyBcInNyYy9jb25zdHJ1Y3RzL2xhbWJkYVwiO1xuXHRcdHRoaXMuZmlsZVBhdHRlcm4gPSBvcHRpb25zPy5maWxlUGF0dGVybiA/PyBcIioubGFtYmRhLnRzXCI7XG5cdFx0dGhpcy5lc2J1aWxkT3B0aW9ucyA9IG9wdGlvbnM/LmVzYnVpbGRPcHRpb25zID8/IHt9O1xuXHRcdHRoaXMuYmFzZUNvbnN0cnVjdEltcG9ydCA9IG9wdGlvbnM/LmJhc2VDb25zdHJ1Y3RJbXBvcnQ7XG5cdFx0dGhpcy5iYXNlQ29uc3RydWN0Q2xhc3MgPSBvcHRpb25zPy5iYXNlQ29uc3RydWN0Q2xhc3M7XG5cdFx0dGhpcy5iYXNlQ29uc3RydWN0UGFja2FnZSA9IG9wdGlvbnM/LmJhc2VDb25zdHJ1Y3RQYWNrYWdlO1xuXG5cdFx0Ly8gQ3JlYXRlIHVuaXF1ZSBzY3JpcHQgbmFtZSBiYXNlZCBvbiBzb3VyY2VEaXIgYW5kIGZpbGVQYXR0ZXJuXG5cdFx0Y29uc3QgdW5pcXVlSWQgPSB0aGlzLmNyZWF0ZVVuaXF1ZUlkKHRoaXMuc291cmNlRGlyLCB0aGlzLmZpbGVQYXR0ZXJuKTtcblx0XHR0aGlzLmJ1bmRsZXJTY3JpcHRQYXRoID0gcGF0aC5qb2luKFxuXHRcdFx0XCIucHJvamVuXCIsXG5cdFx0XHRgZ2VuZXJhdGUtYW5kLWJ1bmRsZS0ke3VuaXF1ZUlkfS50c2AsXG5cdFx0KTtcblxuXHRcdC8vIEFkZCByZXF1aXJlZCBkZXBlbmRlbmNpZXNcblx0XHRpZiAob3B0aW9ucz8uYWRkRGVwZW5kZW5jaWVzID8/IHRydWUpIHtcblx0XHRcdHRoaXMuYWRkRGVwZW5kZW5jaWVzKG9wdGlvbnM/LmJhc2VDb25zdHJ1Y3RQYWNrYWdlKTtcblx0XHR9XG5cblx0XHQvLyBDcmVhdGUgdGhlIGJ1bmRsZSB0YXNrXG5cdFx0dGhpcy5jcmVhdGVCdW5kbGVUYXNrKCk7XG5cblx0XHQvLyBBZGQgdGhlIGJ1bmRsZSB0YXNrIHRvIHRoZSBidWlsZCB3b3JrZmxvd1xuXHRcdHRoaXMuYWRkQnVuZGxlVGFza1RvV29ya2Zsb3coKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGQgcmVxdWlyZWQgZGVwZW5kZW5jaWVzIGZvciB0aGUgY29tcG9uZW50XG5cdCAqL1xuXHRwcml2YXRlIGFkZERlcGVuZGVuY2llcyhhZGRpdGlvbmFsUGFja2FnZT86IHN0cmluZykge1xuXHRcdHRoaXMubm9kZVByb2plY3QuYWRkRGVwcyhcImF3cy1jZGstbGliXCIsIFwiY29uc3RydWN0c1wiKTtcblxuXHRcdGlmIChcblx0XHRcdGFkZGl0aW9uYWxQYWNrYWdlICYmXG5cdFx0XHRhZGRpdGlvbmFsUGFja2FnZSAhPT0gXCJhd3MtY2RrLWxpYlwiICYmXG5cdFx0XHRhZGRpdGlvbmFsUGFja2FnZSAhPT0gXCJjb25zdHJ1Y3RzXCJcblx0XHQpIHtcblx0XHRcdHRoaXMubm9kZVByb2plY3QuYWRkRGVwcyhhZGRpdGlvbmFsUGFja2FnZSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZSBhIHVuaXF1ZSBJRCBiYXNlZCBvbiBzb3VyY2VEaXIgYW5kIGZpbGVQYXR0ZXJuXG5cdCAqL1xuXHRwcml2YXRlIGNyZWF0ZVVuaXF1ZUlkKHNvdXJjZURpcjogc3RyaW5nLCBmaWxlUGF0dGVybjogc3RyaW5nKTogc3RyaW5nIHtcblx0XHQvLyBSZW1vdmUgc3BlY2lhbCBjaGFyYWN0ZXJzIGFuZCBjb252ZXJ0IHRvIGtlYmFiIGNhc2Vcblx0XHRjb25zdCBkaXJQYXJ0ID0gc291cmNlRGlyLnJlcGxhY2UoL1xcLy9nLCBcIi1cIikucmVwbGFjZSgvW15cXHctXS9nLCBcIlwiKTtcblx0XHRjb25zdCBwYXR0ZXJuUGFydCA9IGZpbGVQYXR0ZXJuXG5cdFx0XHQucmVwbGFjZSgvXFwqL2csIFwiXCIpXG5cdFx0XHQucmVwbGFjZSgvXFwuL2csIFwiLVwiKVxuXHRcdFx0LnJlcGxhY2UoL1teXFx3LV0vZywgXCJcIik7XG5cdFx0cmV0dXJuIGAke2RpclBhcnR9LSR7cGF0dGVyblBhcnR9YFxuXHRcdFx0LnJlcGxhY2UoLy0tKy9nLCBcIi1cIilcblx0XHRcdC5yZXBsYWNlKC9eLXwtJC9nLCBcIlwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGUgdGhlIGJ1bmRsZSB0YXNrIHRoYXQgd2lsbCBiZSBleGVjdXRlZCBkdXJpbmcgcHJvamVuIGJ1aWxkXG5cdCAqL1xuXHRwcml2YXRlIGNyZWF0ZUJ1bmRsZVRhc2soKSB7XG5cdFx0Y29uc3QgdW5pcXVlSWQgPSB0aGlzLmNyZWF0ZVVuaXF1ZUlkKHRoaXMuc291cmNlRGlyLCB0aGlzLmZpbGVQYXR0ZXJuKTtcblx0XHRjb25zdCB0YXNrTmFtZSA9IGBnZW5lcmF0ZS1hbmQtYnVuZGxlLSR7dW5pcXVlSWR9YDtcblxuXHRcdGxldCBiYXNlQ29uc3RydWN0QXJncyA9IFwiXCI7XG5cdFx0aWYgKHRoaXMuYmFzZUNvbnN0cnVjdEltcG9ydCkge1xuXHRcdFx0YmFzZUNvbnN0cnVjdEFyZ3MgKz0gYCAtLWJhc2UtY29uc3RydWN0LWltcG9ydCAnJHt0aGlzLmJhc2VDb25zdHJ1Y3RJbXBvcnR9J2A7XG5cdFx0fVxuXHRcdGlmICh0aGlzLmJhc2VDb25zdHJ1Y3RDbGFzcykge1xuXHRcdFx0YmFzZUNvbnN0cnVjdEFyZ3MgKz0gYCAtLWJhc2UtY29uc3RydWN0LWNsYXNzICcke3RoaXMuYmFzZUNvbnN0cnVjdENsYXNzfSdgO1xuXHRcdH1cblxuXHRcdGNvbnN0IGJ1bmRsZVRhc2sgPSB0aGlzLm5vZGVQcm9qZWN0LmFkZFRhc2sodGFza05hbWUsIHtcblx0XHRcdGRlc2NyaXB0aW9uOiBgR2VuZXJhdGUgTGFtYmRhIEZ1bmN0aW9uIENvbnN0cnVjdHMgZnJvbSAke3RoaXMuc291cmNlRGlyfS8ke3RoaXMuZmlsZVBhdHRlcm59IGFuZCBidW5kbGUgdGhlaXIgaGFuZGxlcnNgLFxuXHRcdFx0ZXhlYzogYHRzeCAtLXRzY29uZmlnIHRzY29uZmlnLmRldi5qc29uICR7dGhpcy5idW5kbGVyU2NyaXB0UGF0aH0gLS1zb3VyY2UtZGlyICR7dGhpcy5zb3VyY2VEaXJ9IC0tb3V0cHV0LWRpciAke3RoaXMub3V0cHV0RGlyfSAtLWZpbGUtcGF0dGVybiBcIiR7dGhpcy5maWxlUGF0dGVybn1cIiAtLWVzYnVpbGQtb3B0aW9ucyAnJHtKU09OLnN0cmluZ2lmeSh0aGlzLmVzYnVpbGRPcHRpb25zKX0nJHtiYXNlQ29uc3RydWN0QXJnc31gLFxuXHRcdH0pO1xuXG5cdFx0Ly8gQ3JlYXRlIHRoZSBidW5kbGVyIHNjcmlwdFxuXHRcdHRoaXMuY3JlYXRlQnVuZGxlclNjcmlwdCgpO1xuXG5cdFx0cmV0dXJuIGJ1bmRsZVRhc2s7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlIHRoZSBidW5kbGVyIHNjcmlwdCB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgYnkgdGhlIGJ1bmRsZSB0YXNrXG5cdCAqL1xuXHRwcml2YXRlIGNyZWF0ZUJ1bmRsZXJTY3JpcHQoKSB7XG5cdFx0Y29uc3QgYnVuZGxlclNjcmlwdCA9IGAvLyB+fiBHZW5lcmF0ZWQgYnkgcHJvamVuLiBUbyBtb2RpZnksIGVkaXQgLnByb2plbnJjLnRzIGFuZCBydW4gXCJucHggcHJvamVuXCIuXG5cbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBlc2J1aWxkIGZyb20gJ2VzYnVpbGQnO1xuaW1wb3J0ICogYXMgZ2xvYiBmcm9tICdnbG9iJztcbmltcG9ydCB7IHBhc2NhbENhc2UgfSBmcm9tICdjaGFuZ2UtY2FzZSc7XG5pbXBvcnQgeWFyZ3MgZnJvbSAneWFyZ3MveWFyZ3MnO1xuaW1wb3J0IHsgaGlkZUJpbiB9IGZyb20gJ3lhcmdzL2hlbHBlcnMnO1xuXG5hc3luYyBmdW5jdGlvbiBtYWluKCkge1xuICBjb25zdCBhcmd2ID0gYXdhaXQgeWFyZ3MoaGlkZUJpbihwcm9jZXNzLmFyZ3YpKVxuICAgIC5vcHRpb24oJ3NvdXJjZS1kaXInLCB7IHR5cGU6ICdzdHJpbmcnLCBkZWZhdWx0OiAnc3JjL2hhbmRsZXJzJywgZGVzY3JpcHRpb246ICdTb3VyY2UgZGlyZWN0b3J5IHdoZXJlIExhbWJkYSBGdW5jdGlvbiBoYW5kbGVycyBhcmUgbG9jYXRlZCcgfSlcbiAgICAub3B0aW9uKCdvdXRwdXQtZGlyJywgeyB0eXBlOiAnc3RyaW5nJywgZGVmYXVsdDogJ3NyYy9jb25zdHJ1Y3RzL2xhbWJkYScsIGRlc2NyaXB0aW9uOiAnT3V0cHV0IGRpcmVjdG9yeSB3aGVyZSBMYW1iZGEgRnVuY3Rpb24gY29uc3RydWN0cyB3aWxsIGJlIGdlbmVyYXRlZCcgfSlcbiAgICAub3B0aW9uKCdmaWxlLXBhdHRlcm4nLCB7IHR5cGU6ICdzdHJpbmcnLCBkZWZhdWx0OiAnKi5sYW1iZGEudHMnLCBkZXNjcmlwdGlvbjogJ0ZpbGUgcGF0dGVybiB0byBpZGVudGlmeSBMYW1iZGEgRnVuY3Rpb24gaGFuZGxlcnMnIH0pXG4gICAgLm9wdGlvbignZXNidWlsZC1vcHRpb25zJywgeyB0eXBlOiAnc3RyaW5nJywgZGVmYXVsdDogJ3t9JywgZGVzY3JpcHRpb246ICdlc2J1aWxkIG9wdGlvbnMgYXMgSlNPTiBzdHJpbmcnIH0pXG4gICAgLm9wdGlvbignYmFzZS1jb25zdHJ1Y3QtaW1wb3J0JywgeyB0eXBlOiAnc3RyaW5nJywgZGVzY3JpcHRpb246ICdJbXBvcnQgc3RhdGVtZW50IGZvciB0aGUgYmFzZSBjb25zdHJ1Y3QnIH0pXG4gICAgLm9wdGlvbignYmFzZS1jb25zdHJ1Y3QtY2xhc3MnLCB7IHR5cGU6ICdzdHJpbmcnLCBkZXNjcmlwdGlvbjogJ05hbWUgb2YgdGhlIGNvbnN0cnVjdCBjbGFzcyB0byBleHRlbmQnIH0pXG4gICAgLmhlbHAoKVxuICAgIC5wYXJzZSgpO1xuXG4gIGNvbnN0IHNvdXJjZURpciA9IGFyZ3ZbJ3NvdXJjZS1kaXInXTtcbiAgY29uc3Qgb3V0cHV0RGlyID0gYXJndlsnb3V0cHV0LWRpciddO1xuICBjb25zdCBmaWxlUGF0dGVybiA9IGFyZ3ZbJ2ZpbGUtcGF0dGVybiddO1xuICBjb25zdCBlc2J1aWxkT3B0aW9ucyA9IEpTT04ucGFyc2UoYXJndlsnZXNidWlsZC1vcHRpb25zJ10gYXMgc3RyaW5nKTtcbiAgY29uc3QgYmFzZUNvbnN0cnVjdEltcG9ydCA9IGFyZ3ZbJ2Jhc2UtY29uc3RydWN0LWltcG9ydCddIGFzIHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgY29uc3QgYmFzZUNvbnN0cnVjdENsYXNzID0gYXJndlsnYmFzZS1jb25zdHJ1Y3QtY2xhc3MnXSBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLy8gRW5zdXJlIG91dHB1dCBkaXJlY3RvcnkgZXhpc3RzXG4gIGZzLm1rZGlyU3luYyhwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgb3V0cHV0RGlyKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgLy8gRW5zdXJlIGFzc2V0cyBkaXJlY3RvcnkgZXhpc3RzXG4gIGNvbnN0IGFzc2V0c0RpciA9IHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCAnYXNzZXRzJywgJ2hhbmRsZXJzJyk7XG4gIGZzLm1rZGlyU3luYyhhc3NldHNEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gIC8vIEZpbmQgYWxsIExhbWJkYSBGdW5jdGlvbiBoYW5kbGVyIGZpbGVzXG4gIGNvbnN0IGhhbmRsZXJGaWxlcyA9IGdsb2Iuc3luYyhwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgc291cmNlRGlyLCBmaWxlUGF0dGVybikpO1xuXG4gIGNvbnNvbGUubG9nKFxcYEZvdW5kIFxcJHtoYW5kbGVyRmlsZXMubGVuZ3RofSBMYW1iZGEgRnVuY3Rpb24gaGFuZGxlciBmaWxlc1xcYCk7XG5cbiAgLy8gUHJvY2VzcyBlYWNoIGhhbmRsZXIgZmlsZVxuICBmb3IgKGNvbnN0IGhhbmRsZXJGaWxlIG9mIGhhbmRsZXJGaWxlcykge1xuICAgIGNvbnN0IHJlbGF0aXZlUGF0aCA9IHBhdGgucmVsYXRpdmUocGF0aC5qb2luKHByb2Nlc3MuY3dkKCksIHNvdXJjZURpciksIGhhbmRsZXJGaWxlKTtcbiAgICBjb25zdCBmaWxlTmFtZSA9IHBhdGguYmFzZW5hbWUocmVsYXRpdmVQYXRoLCBwYXRoLmV4dG5hbWUocmVsYXRpdmVQYXRoKSk7XG4gICAgY29uc3QgZnVuY3Rpb25OYW1lID0gZmlsZU5hbWUucmVwbGFjZSgnLmxhbWJkYScsICcnKTtcblxuICAgIGNvbnNvbGUubG9nKFxcYFByb2Nlc3NpbmcgTGFtYmRhIEZ1bmN0aW9uIGhhbmRsZXI6IFxcJHtmdW5jdGlvbk5hbWV9XFxgKTtcblxuICAgIC8vIENyZWF0ZSBmdW5jdGlvbi1zcGVjaWZpYyBkaXJlY3RvcnlcbiAgICBjb25zdCBmdW5jdGlvbkRpciA9IHBhdGguam9pbihhc3NldHNEaXIsIGZ1bmN0aW9uTmFtZSk7XG4gICAgZnMubWtkaXJTeW5jKGZ1bmN0aW9uRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICAgIC8vIEJ1bmRsZSB0aGUgaGFuZGxlciBjb2RlIHRvIGluZGV4LmpzIGluIHRoZSBmdW5jdGlvbiBkaXJlY3RvcnlcbiAgICBjb25zdCBvdXRmaWxlID0gcGF0aC5qb2luKGZ1bmN0aW9uRGlyLCAnaW5kZXguanMnKTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBlc2J1aWxkLmJ1aWxkKHtcbiAgICAgICAgZW50cnlQb2ludHM6IFtoYW5kbGVyRmlsZV0sXG4gICAgICAgIGJ1bmRsZTogdHJ1ZSxcbiAgICAgICAgbWluaWZ5OiB0cnVlLFxuICAgICAgICBwbGF0Zm9ybTogJ25vZGUnLFxuICAgICAgICB0YXJnZXQ6ICdub2RlMTgnLFxuICAgICAgICBvdXRmaWxlLFxuICAgICAgICAuLi5lc2J1aWxkT3B0aW9ucyxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zb2xlLmxvZyhcXGBTdWNjZXNzZnVsbHkgYnVuZGxlZCBcXCR7ZnVuY3Rpb25OYW1lfSB0byBcXCR7b3V0ZmlsZX1cXGApO1xuXG4gICAgICAvLyBHZW5lcmF0ZSB0aGUgQ0RLIGNvbnN0cnVjdFxuICAgICAgY29uc3QgY29uc3RydWN0RmlsZVBhdGggPSBwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgb3V0cHV0RGlyLCBcXGBcXCR7ZnVuY3Rpb25OYW1lfS50c1xcYCk7XG4gICAgICBjb25zdCBjb25zdHJ1Y3RDb2RlID0gZ2VuZXJhdGVDb25zdHJ1Y3RDb2RlKGZ1bmN0aW9uTmFtZSwgcmVsYXRpdmVQYXRoLCBiYXNlQ29uc3RydWN0SW1wb3J0LCBiYXNlQ29uc3RydWN0Q2xhc3MpO1xuXG4gICAgICBmcy53cml0ZUZpbGVTeW5jKGNvbnN0cnVjdEZpbGVQYXRoLCBjb25zdHJ1Y3RDb2RlKTtcbiAgICAgIGNvbnNvbGUubG9nKFxcYEdlbmVyYXRlZCBjb25zdHJ1Y3QgYXQgXFwke2NvbnN0cnVjdEZpbGVQYXRofVxcYCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXFxgRXJyb3IgcHJvY2Vzc2luZyBcXCR7ZnVuY3Rpb25OYW1lfTpcXGAsIGVycm9yKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVDb25zdHJ1Y3RDb2RlKGZ1bmN0aW9uTmFtZTogc3RyaW5nLCBoYW5kbGVyUGF0aDogc3RyaW5nLCBiYXNlQ29uc3RydWN0SW1wb3J0Pzogc3RyaW5nLCBiYXNlQ29uc3RydWN0Q2xhc3M/OiBzdHJpbmcpIHtcbiAgY29uc3QgY29uc3RydWN0TmFtZSA9IFxcYFxcJHtwYXNjYWxDYXNlKGZ1bmN0aW9uTmFtZSl9RnVuY3Rpb25cXGA7XG5cbiAgLy8gRGVmYXVsdCB2YWx1ZXMgaWYgbm8gYmFzZUNvbnN0cnVjdCBpcyBwcm92aWRlZFxuICBjb25zdCBpbXBvcnRTdGF0ZW1lbnQgPSBiYXNlQ29uc3RydWN0SW1wb3J0ID8/IFwiXCI7XG4gIGNvbnN0IGJhc2VDbGFzc05hbWUgPSBiYXNlQ29uc3RydWN0Q2xhc3MgPz8gXCJhd3NfbGFtYmRhLkZ1bmN0aW9uXCI7XG5cbiAgLy8gRGV0ZXJtaW5lIGlmIHdlIG5lZWQgdG8gdXNlIGF3c19sYW1iZGEuUnVudGltZSBvciBub3QgYmFzZWQgb24gdGhlIGJhc2UgY2xhc3NcbiAgY29uc3QgdXNlQXdzTGFtYmRhUnVudGltZSA9ICFiYXNlQ29uc3RydWN0Q2xhc3MgfHwgYmFzZUNsYXNzTmFtZS5pbmNsdWRlcyhcIkZ1bmN0aW9uXCIpO1xuXG4gIHJldHVybiBcXGAvLyB+fiBHZW5lcmF0ZWQgYnkgcHJvamVuLiBUbyBtb2RpZnksIGVkaXQgLnByb2plbnJjLnRzIGFuZCBydW4gXCJucHggcHJvamVuXCIuXG5cbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBmaWxlVVJMVG9QYXRoIH0gZnJvbSAndXJsJztcblxcJHtpbXBvcnRTdGF0ZW1lbnR9XG5pbXBvcnQgeyBhd3NfbGFtYmRhIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5cbi8vIEVTIE1vZHVsZSBjb21wYXRpYmlsaXR5XG5jb25zdCBfX2ZpbGVuYW1lID0gZmlsZVVSTFRvUGF0aChpbXBvcnQubWV0YS51cmwpO1xuY29uc3QgX19kaXJuYW1lID0gcGF0aC5kaXJuYW1lKF9fZmlsZW5hbWUpO1xuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIFxcJHtjb25zdHJ1Y3ROYW1lfVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFxcJHtjb25zdHJ1Y3ROYW1lfVByb3BzIGV4dGVuZHMgT21pdDxcXCR7YmFzZUNsYXNzTmFtZSA9PT0gXCJhd3NfbGFtYmRhLkZ1bmN0aW9uXCIgPyBcImF3c19sYW1iZGEuRnVuY3Rpb25Qcm9wc1wiIDogXFxgXFwke2Jhc2VDbGFzc05hbWV9UHJvcHNcXGB9LCAnY29kZSdcXCR7dXNlQXdzTGFtYmRhUnVudGltZSA/IFwiIHwgJ3J1bnRpbWUnXCIgOiBcIlwifSB8ICdoYW5kbGVyJz4ge1xuICBcXCR7dXNlQXdzTGFtYmRhUnVudGltZSA/IFxcYC8qKlxuICAgKiBPdmVycmlkZSB0aGUgZGVmYXVsdCBydW50aW1lXG4gICAqIEBkZWZhdWx0IG5vZGVqczIyLnhcbiAgICovXG4gIHJlYWRvbmx5IHJ1bnRpbWU/OiBhd3NfbGFtYmRhLlJ1bnRpbWU7XFxgIDogXCJcIn1cbn1cblxuLyoqXG4gKiBcXCR7Y29uc3RydWN0TmFtZX0gLSBMYW1iZGEgRnVuY3Rpb24gQ29uc3RydWN0IGZvciBcXCR7aGFuZGxlclBhdGh9XG4gKi9cbmV4cG9ydCBjbGFzcyBcXCR7Y29uc3RydWN0TmFtZX0gZXh0ZW5kcyBcXCR7YmFzZUNsYXNzTmFtZX0ge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogXFwke2NvbnN0cnVjdE5hbWV9UHJvcHMgPSB7fSkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgLi4ucHJvcHMsXG4gICAgICBcXCR7dXNlQXdzTGFtYmRhUnVudGltZSA/IFwicnVudGltZTogcHJvcHMucnVudGltZSA/PyBhd3NfbGFtYmRhLlJ1bnRpbWUuTk9ERUpTXzIyX1gsXCIgOiBcIlwifVxuICAgICAgaGFuZGxlcjogJ2luZGV4LmhhbmRsZXInLFxuICAgICAgY29kZTogYXdzX2xhbWJkYS5Db2RlLmZyb21Bc3NldChwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4vLi4vLi4vYXNzZXRzL2hhbmRsZXJzL1xcJHtmdW5jdGlvbk5hbWV9JykpLFxuICAgIH0pO1xuICB9XG59XG5cXGA7XG59XG5cbm1haW4oKS5jYXRjaChlcnJvciA9PiB7XG4gIGNvbnNvbGUuZXJyb3IoJ0Vycm9yOicsIGVycm9yKTtcbiAgcHJvY2Vzcy5leGl0KDEpO1xufSk7XG5gO1xuXG5cdFx0Ly8gQ3JlYXRlIHNvdXJjZSBjb2RlIGZpbGUgYW5kIGFkZCBjb2RlIGxpbmVzIHRvIGl0XG5cdFx0Y29uc3Qgc3JjID0gbmV3IFNvdXJjZUNvZGUodGhpcy5wcm9qZWN0LCB0aGlzLmJ1bmRsZXJTY3JpcHRQYXRoKTtcblx0XHRjb25zdCBsaW5lcyA9IGJ1bmRsZXJTY3JpcHQuc3BsaXQoXCJcXG5cIik7XG5cdFx0Zm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG5cdFx0XHRzcmMubGluZShsaW5lKTtcblx0XHR9XG5cblx0XHQvLyBBZGQgdGhlIGRlcGVuZGVuY2llcyBuZWVkZWQgZm9yIHRoZSBidW5kbGVyIHNjcmlwdFxuXHRcdHRoaXMubm9kZVByb2plY3QuYWRkRGV2RGVwcyhcblx0XHRcdFwiZXNidWlsZFwiLFxuXHRcdFx0XCJnbG9iXCIsXG5cdFx0XHRcInlhcmdzXCIsXG5cdFx0XHRcIkB0eXBlcy9nbG9iXCIsXG5cdFx0XHRcIkB0eXBlcy95YXJnc1wiLFxuXHRcdFx0XCJ0c3hcIixcblx0XHRcdFwiY2hhbmdlLWNhc2VcIixcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCB0aGUgYnVuZGxlIHRhc2sgdG8gdGhlIGJ1aWxkIHdvcmtmbG93XG5cdCAqL1xuXHRwcml2YXRlIGFkZEJ1bmRsZVRhc2tUb1dvcmtmbG93KCkge1xuXHRcdC8vIEdldCB0aGUgY29tcGlsZSB0YXNrXG5cdFx0Y29uc3QgY29tcGlsZVRhc2sgPSB0aGlzLm5vZGVQcm9qZWN0LnRhc2tzLnRyeUZpbmQoXCJjb21waWxlXCIpO1xuXG5cdFx0aWYgKGNvbXBpbGVUYXNrKSB7XG5cdFx0XHQvLyBBZGQgdGhlIGJ1bmRsZSB0YXNrIGFzIGEgZGVwZW5kZW5jeSBvZiB0aGUgY29tcGlsZSB0YXNrXG5cdFx0XHRjb25zdCB1bmlxdWVJZCA9IHRoaXMuY3JlYXRlVW5pcXVlSWQodGhpcy5zb3VyY2VEaXIsIHRoaXMuZmlsZVBhdHRlcm4pO1xuXHRcdFx0Y29uc3QgdGFza05hbWUgPSBgZ2VuZXJhdGUtYW5kLWJ1bmRsZS0ke3VuaXF1ZUlkfWA7XG5cdFx0XHRjb25zdCBidW5kbGVUYXNrID0gdGhpcy5ub2RlUHJvamVjdC50YXNrcy50cnlGaW5kKHRhc2tOYW1lKTtcblx0XHRcdGlmIChidW5kbGVUYXNrKSB7XG5cdFx0XHRcdGNvbXBpbGVUYXNrLnByZXBlbmRTcGF3bihidW5kbGVUYXNrKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cbiJdfQ==
|
package/package.json
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"devDependencies": {
|
|
14
14
|
"@biomejs/biome": "^2",
|
|
15
15
|
"@mrgrain/cdk-esbuild": "^5.7.5",
|
|
16
|
-
"@nikovirtala/projen-vitest": "^2.1.
|
|
16
|
+
"@nikovirtala/projen-vitest": "^2.1.22",
|
|
17
17
|
"@types/glob": "^8.1.0",
|
|
18
18
|
"@types/node": "ts5.9",
|
|
19
19
|
"@types/yargs": "^17.0.35",
|
|
@@ -52,7 +52,7 @@
|
|
|
52
52
|
"publishConfig": {
|
|
53
53
|
"access": "public"
|
|
54
54
|
},
|
|
55
|
-
"version": "0.0.
|
|
55
|
+
"version": "0.0.29",
|
|
56
56
|
"types": "lib/index.d.ts",
|
|
57
57
|
"stability": "stable",
|
|
58
58
|
"jsii": {
|