@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 CHANGED
@@ -8845,6 +8845,6 @@
8845
8845
  "symbolId": "src/index:LambdaFunctionConstructGeneratorOptions"
8846
8846
  }
8847
8847
  },
8848
- "version": "0.0.27",
8849
- "fingerprint": "5znDh6rk1voaRcDJOAuN+DRWZK7d7jPuFbJN9kK3FKk="
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.27" };
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.21",
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.27",
55
+ "version": "0.0.29",
56
56
  "types": "lib/index.d.ts",
57
57
  "stability": "stable",
58
58
  "jsii": {