@nikovirtala/projen-constructs 0.3.78 → 0.3.79
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 +65 -13
- package/README.md +18 -0
- package/docs/api/assets/search.js +1 -1
- package/docs/api/classes/AwsCdkConstructLibraryProject.html +1 -1
- package/docs/api/classes/AwsCdkTypeScriptAppProject.html +1 -1
- package/docs/api/classes/JsiiProject.html +1 -1
- package/docs/api/classes/ProjectGenerator.html +1 -1
- package/docs/api/classes/TypeScriptProject.html +1 -1
- package/docs/api/classes/Vitest.html +1 -1
- package/docs/api/index.html +8 -0
- package/docs/api/interfaces/ProjectGeneratorOptions.html +1 -1
- package/docs/api/interfaces/VitestOptions.html +48 -3
- package/lib/components/bundle-lambda-function-code.js +3 -3
- package/lib/components/colima.js +1 -1
- package/lib/components/homebrew.js +1 -1
- package/lib/components/lambda-function-construct-generator.js +1 -1
- package/lib/components/localstack.js +1 -1
- package/lib/components/mise.js +1 -1
- package/lib/components/typedoc.js +1 -1
- package/lib/components/vitest.d.ts +29 -0
- package/lib/components/vitest.js +38 -35
- package/lib/project-generator.js +1 -1
- package/lib/projects/awscdk-construct-library.generated.js +1 -1
- package/lib/projects/awscdk-typescript-app.generated.js +1 -1
- package/lib/projects/jsii.generated.js +1 -1
- package/lib/projects/typescript.generated.js +1 -1
- package/package.json +1 -1
package/.jsii
CHANGED
|
@@ -4196,7 +4196,7 @@
|
|
|
4196
4196
|
},
|
|
4197
4197
|
"name": "@nikovirtala/projen-constructs",
|
|
4198
4198
|
"readme": {
|
|
4199
|
-
"markdown": "# @nikovirtala/projen-constructs\n\nProjen project types with standard configuration for consistent project setup across all repositories.\n\n## Installation\n\n```bash\npnpm add -D @nikovirtala/projen-constructs projen constructs\n```\n\nRequires pnpm 11 and `projen` >= 0.101.27. `@mrgrain/cdk-esbuild` and `constructs` are peer\ndependencies as well.\n\nTo create a project from scratch:\n\n```bash\npnpm dlx projen new --from @nikovirtala/projen-constructs aws_cdk_construct_library\n```\n\n## Features\n\n- **Standard Configuration**: Opinionated defaults for author, release branch, package manager, Node.js, TypeScript, and tooling\n- **Automatic Project Type Discovery**: Generates the `ProjectType` enum from Projen's JSII manifest (19 project types)\n- **Component System**: Reusable components (Vitest, TypeDoc, Mise, Homebrew, Colima, LocalStack, Lambda bundling)\n- **Code Generation**: `ProjectGenerator` creates project classes with standard configuration\n- **ES Modules**: TypeScript and CDK App projects use ES modules (JSII uses CommonJS)\n- **Code Quality**: Biome for formatting and linting\n- **Testing**: Vitest with coverage\n- **Auto-merge**: Enabled with auto-approve\n- **VSCode**: Recommended extensions and settings\n- **mise**: Node version management\n\n## Standard Configuration\n\n- **Author**: Niko Virtala (niko.virtala@hey.com)\n- **Default Release Branch**: main\n- **Package Manager**: pnpm 11.20.0\n- **Node Version**: 24.19.0\n- **TypeScript**: 6.0.3\n- **CDK Version**: 2.263.0 (for CDK projects)\n- **JSII Version**: ~6.0.3 (for JSII projects)\n\nThe AWS CDK, Node.js and TypeScript versions live in `src/versions.json` and are refreshed by the\n`update-versions` task, which the dependency upgrade workflow runs.\n\n### pnpm\n\npnpm reads its settings from `pnpm-workspace.yaml`, not `.npmrc`, since pnpm 11. Generated projects\nget:\n\n| Setting | Value | Reason |\n| ---------------------- | ----------------- | ------------------------------------------------------------------------------------------------------------ |\n| `nodeLinker` | `hoisted` | jsii tooling resolves dependencies from a flat `node_modules` |\n| `allowBuilds` | `esbuild: true` | esbuild links its platform binary in a postinstall script, and pnpm 11 fails an install with ignored builds |\n| `verifyDepsBeforeRun` | `false` | projen resolves the task `PATH` with `$(pnpm -c exec ...)`, which otherwise re-enters `pnpm install` and deadlocks |\n| `minimumReleaseAge` | `0` | the pnpm 11 default of 1440 minutes makes pnpm write `minimumReleaseAgeExclude` entries into this generated file |\n\n### TypeScript configuration\n\nProjen renders three configs, and none of them should be edited directly:\n\n- `tsconfig.json` compiles `src` to `lib`. For JSII projects, jsii validates it against its `strict`\n rule set, so it only carries compiler options jsii accepts.\n- `test/tsconfig.json` extends it and is type-check only. This is the config Vitest type checking and\n the editor use, and the one `tsconfigDev` points at.\n- `projenrc/tsconfig.json` covers `.projenrc.ts`.\n\n## Customization\n\nOverride any option by passing it to the constructor:\n\n```typescript\nconst project = new JsiiProject({\n name: \"my-project\",\n repositoryUrl: \"https://github.com/nikovirtala/my-project.git\",\n minNodeVersion: \"24.0.0\",\n author: \"Custom Author\",\n authorAddress: \"custom@example.com\",\n mise: false,\n vitest: false,\n tsconfig: {\n compilerOptions: {\n noUnusedLocals: false,\n },\n },\n biomeOptions: {\n biomeConfig: {\n formatter: {\n lineWidth: 100,\n },\n },\n },\n});\n```\n\nEvery component is exposed as an enable flag (`mise`, `vitest`, ...) plus an options property\n(`miseOptions`, `vitestOptions`, ...).\n\n## Usage\n\n### Projects\n\n#### AWS CDK Construct Library Project\n\n```typescript\nimport { AwsCdkConstructLibraryProject } from \"@nikovirtala/projen-constructs\";\n\nconst project = new AwsCdkConstructLibraryProject({\n name: \"my-cdk-construct\",\n repositoryUrl: \"https://github.com/nikovirtala/my-cdk-construct.git\",\n});\n\nproject.synth();\n```\n\n#### AWS CDK TypeScript App Project\n\n```typescript\nimport { AwsCdkTypeScriptAppProject } from \"@nikovirtala/projen-constructs\";\n\nconst project = new AwsCdkTypeScriptAppProject({\n name: \"my-cdk-app\",\n repositoryUrl: \"https://github.com/nikovirtala/my-cdk-app.git\",\n});\n\nproject.synth();\n```\n\n#### JSII Project\n\n```typescript\nimport { JsiiProject } from \"@nikovirtala/projen-constructs\";\n\nconst project = new JsiiProject({\n name: \"my-jsii-project\",\n repositoryUrl: \"https://github.com/nikovirtala/my-jsii-project.git\",\n});\n\nproject.synth();\n```\n\n#### TypeScript Project\n\n```typescript\nimport { TypeScriptProject } from \"@nikovirtala/projen-constructs\";\n\nconst project = new TypeScriptProject({\n name: \"my-typescript-project\",\n repositoryUrl: \"https://github.com/nikovirtala/my-typescript-project.git\",\n});\n\nproject.synth();\n```\n\n### Components\n\nThe package includes reusable components for common development tasks:\n\n#### Vitest\n\n[Vitest](https://vitest.dev) testing framework component.\n\n```typescript\nimport { Vitest } from \"@nikovirtala/projen-constructs\";\n\nnew Vitest(project, {\n vitestVersion: \"^4\",\n config: {\n coverageProvider: CoverageProvider.V8,\n coverageReporters: [CoverageReporter.TEXT, CoverageReporter.LCOV],\n },\n});\n```\n\nType checking runs against the project's development tsconfig (`test/tsconfig.json`) unless\n`config.typecheckTsconfig` says otherwise.\n\n#### TypeDoc\n\n[TypeDoc](https://typedoc.org) documentation generation component.\n\n```typescript\nimport { TypeDoc, EntryPointStrategy } from \"@nikovirtala/projen-constructs\";\n\nnew TypeDoc(project, {\n version: \"^0.28\",\n typeDocConfig: {\n entryPointStrategy: EntryPointStrategy.EXPAND,\n out: \"docs/api\",\n exclude: [\"**/*.test.ts\"],\n },\n});\n```\n\n#### Mise\n\n[Mise](https://mise.jdx.dev) dev tools/runtimes management component.\n\n```typescript\nimport { Mise } from \"@nikovirtala/projen-constructs\";\n\nnew Mise(project, {\n nodeVersion: \"24.19.0\",\n});\n```\n\n#### Homebrew\n\n[Homebrew](https://brew.sh) package management component. Writes a `Brewfile` and adds an\n`install:homebrew` task that bootstraps Homebrew and runs `brew bundle`.\n\n```typescript\nimport { Homebrew } from \"@nikovirtala/projen-constructs\";\n\nconst homebrew = new Homebrew(project, {\n packages: [\"jq\", \"yq\"],\n});\n\nhomebrew.addPackage(\"gh\");\n```\n\n#### Colima\n\n[Colima](https://github.com/abiosoft/colima) container runtime component. Alternative for Docker.\n\n```typescript\nimport { Colima } from \"@nikovirtala/projen-constructs\";\n\nnew Colima(project);\n```\n\n#### LocalStack\n\n[LocalStack](https://www.localstack.cloud) AWS emulation component.\n\n```typescript\nimport { LocalStack } from \"@nikovirtala/projen-constructs\";\n\nnew LocalStack(project, {\n services: [\"s3\", \"lambda\", \"dynamodb\"],\n port: 4566,\n debug: true,\n});\n```\n\n#### LambdaFunctionConstructGenerator\n\nGenerates AWS CDK Lambda Function constructs and bundles their code.\n\n```typescript\nimport { LambdaFunctionConstructGenerator } from \"@nikovirtala/projen-constructs\";\n\nnew LambdaFunctionConstructGenerator(project, {\n sourceDir: \"src/handlers\",\n outputDir: \"src/constructs/lambda\",\n filePattern: \"*.lambda.ts\",\n esbuildOptions: {\n minify: true,\n sourcemap: true,\n },\n});\n```\n\n#### Bundler\n\nLow-level bundling utilities for Lambda functions.\n\n```typescript\nimport {\n Bundler,\n LambdaFunctionCodeBundle,\n} from \"@nikovirtala/projen-constructs\";\n\nconst bundler = new Bundler(project, {\n assetsDir: \"assets\",\n esbuildVersion: \"^0.25\",\n});\n\nnew LambdaFunctionCodeBundle(project, {\n entrypoint: \"src/my-function.lambda.ts\",\n extension: \".lambda.ts\",\n});\n```\n\n#### ProjectGenerator\n\nGenerates TypeScript project classes with standard configuration.\n\n```typescript\nimport { ProjectGenerator, ProjectType } from \"@nikovirtala/projen-constructs\";\n\nnew ProjectGenerator(project, {\n name: \"TypeScriptProject\",\n projectType: ProjectType.TYPE_SCRIPT_PROJECT,\n filePath: \"./src/projects/typescript.generated.ts\",\n components: [\n { componentClass: Mise },\n { componentClass: Vitest }, // Auto-detects VitestOptions from JSII manifest\n ],\n});\n```\n\nFeatures:\n\n- Automatically generates the `ProjectType` enum from Projen's JSII manifest\n- Auto-detects component options types from JSII manifests\n- Strips Projen's `@pjnew` annotation from `packageManager`, which `projen new` would otherwise\n render into a generated `.projenrc.ts` as the package manager that ran the command\n- Validates paths to prevent directory traversal attacks\n- Structured error handling with custom error classes\n\n## Development\n\nThis project is managed by Projen and generates itself: `.projenrc.ts` defines the project using the\n`JsiiProject` type from `src/`. Configuration changes belong in `.projenrc.ts`, never in the\ngenerated files.\n\n```bash\npnpm projen # synthesize project files\npnpm build # synthesize, compile, test and package\npnpm test # biome, vitest, typedoc\npnpm test:watch # vitest in watch mode\npnpm test:update # update snapshots\npnpm biome # format and lint\npnpm docgen # regenerate API.md from the .jsii manifest\npnpm update-versions # refresh src/versions.json\npnpm upgrade # upgrade dependencies\n```\n\n### Build process\n\n```mermaid\nflowchart TD\n projenrc[\".projenrc.ts\"]\n\n subgraph synthesize[\"default (synthesize)\"]\n direction TB\n synth[\"tsx .projenrc.ts\"]\n generator[\"ProjectGenerator\"]\n generated[\"src/project-type.ts<br/>src/projects/*.generated.ts<br/>src/projects/*-options.generated.ts\"]\n projenfiles[\"package.json, tsconfig.json,<br/>pnpm-workspace.yaml, workflows, ...\"]\n brew[\"install:homebrew<br/>brew bundle\"]\n definecfg[\"bundle-vitest-define-config<br/>esbuild → lib/vitest-define-config.js\"]\n\n synth --> generator --> generated\n synth --> projenfiles\n synth --> brew\n synth --> definecfg\n end\n\n subgraph compile[\"compile\"]\n direction TB\n jsii[\"jsii<br/>validates tsconfig.json against the strict rule set\"]\n lib[\"lib/**\"]\n manifest[\".jsii manifest\"]\n\n jsii --> lib\n jsii --> manifest\n end\n\n subgraph test[\"test\"]\n direction TB\n biome[\"biome check --write\"]\n vitest[\"vitest run<br/>+ type checking\"]\n typedoc[\"typedoc → docs/api\"]\n\n biome --> vitest --> typedoc\n end\n\n subgraph package[\"package\"]\n direction TB\n pacmak[\"jsii-pacmak<br/>--pack-command 'pnpm pack'\"]\n dist[\"dist/js/*.tgz\"]\n\n pacmak --> dist\n end\n\n projenrc --> synthesize\n synthesize --> compile\n compile --> test\n test --> package\n\n manifest -. \"component options FQNs<br/>read on the next synthesis\" .-> generator\n docgen[\"docgen<br/>jsii-docgen → API.md\"]\n manifest --> docgen\n\n classDef artifact fill:#eef,stroke:#88a\n class generated,projenfiles,lib,manifest,dist artifact\n```\n\nThe dashed edge is the part worth knowing about: `ProjectGenerator` reads the committed `.jsii`\nmanifest to resolve component options types, so the manifest produced by `compile` feeds the *next*\nsynthesis. This is why `.jsii` is committed rather than ignored. A component options type that is\nmissing from the manifest is reported as a warning and its options property is left out of the\ngenerated interface, which is expected only while a new component is being introduced: compile once,\nthen synthesize again.\n\n`package` runs `package:js` on CI and `package-all` locally; both end up in `jsii-pacmak`.\n`docgen` is not part of `build` and has to be run explicitly after the manifest changes.\n"
|
|
4199
|
+
"markdown": "# @nikovirtala/projen-constructs\n\nProjen project types with standard configuration for consistent project setup across all repositories.\n\n## Installation\n\n```bash\npnpm add -D @nikovirtala/projen-constructs projen constructs\n```\n\nRequires pnpm 11 and `projen` >= 0.101.27. `@mrgrain/cdk-esbuild` and `constructs` are peer\ndependencies as well.\n\nTo create a project from scratch:\n\n```bash\npnpm dlx projen new --from @nikovirtala/projen-constructs aws_cdk_construct_library\n```\n\n## Features\n\n- **Standard Configuration**: Opinionated defaults for author, release branch, package manager, Node.js, TypeScript, and tooling\n- **Automatic Project Type Discovery**: Generates the `ProjectType` enum from Projen's JSII manifest (19 project types)\n- **Component System**: Reusable components (Vitest, TypeDoc, Mise, Homebrew, Colima, LocalStack, Lambda bundling)\n- **Code Generation**: `ProjectGenerator` creates project classes with standard configuration\n- **ES Modules**: TypeScript and CDK App projects use ES modules (JSII uses CommonJS)\n- **Code Quality**: Biome for formatting and linting\n- **Testing**: Vitest with coverage\n- **Auto-merge**: Enabled with auto-approve\n- **VSCode**: Recommended extensions and settings\n- **mise**: Node version management\n\n## Standard Configuration\n\n- **Author**: Niko Virtala (niko.virtala@hey.com)\n- **Default Release Branch**: main\n- **Package Manager**: pnpm 11.20.0\n- **Node Version**: 24.19.0\n- **TypeScript**: 6.0.3\n- **CDK Version**: 2.263.0 (for CDK projects)\n- **JSII Version**: ~6.0.3 (for JSII projects)\n\nThe AWS CDK, Node.js and TypeScript versions live in `src/versions.json` and are refreshed by the\n`update-versions` task, which the dependency upgrade workflow runs.\n\n### pnpm\n\npnpm reads its settings from `pnpm-workspace.yaml`, not `.npmrc`, since pnpm 11. Generated projects\nget:\n\n| Setting | Value | Reason |\n| ---------------------- | ----------------- | ------------------------------------------------------------------------------------------------------------ |\n| `nodeLinker` | `hoisted` | jsii tooling resolves dependencies from a flat `node_modules` |\n| `allowBuilds` | `esbuild: true` | esbuild links its platform binary in a postinstall script, and pnpm 11 fails an install with ignored builds |\n| `verifyDepsBeforeRun` | `false` | projen resolves the task `PATH` with `$(pnpm -c exec ...)`, which otherwise re-enters `pnpm install` and deadlocks |\n| `minimumReleaseAge` | `0` | the pnpm 11 default of 1440 minutes makes pnpm write `minimumReleaseAgeExclude` entries into this generated file |\n\n### TypeScript configuration\n\nProjen renders three configs, and none of them should be edited directly:\n\n- `tsconfig.json` compiles `src` to `lib`. For JSII projects, jsii validates it against its `strict`\n rule set, so it only carries compiler options jsii accepts.\n- `test/tsconfig.json` extends it and is type-check only. This is the config Vitest type checking and\n the editor use, and the one `tsconfigDev` points at.\n- `projenrc/tsconfig.json` covers `.projenrc.ts`.\n\n## Customization\n\nOverride any option by passing it to the constructor:\n\n```typescript\nconst project = new JsiiProject({\n name: \"my-project\",\n repositoryUrl: \"https://github.com/nikovirtala/my-project.git\",\n minNodeVersion: \"24.0.0\",\n author: \"Custom Author\",\n authorAddress: \"custom@example.com\",\n mise: false,\n vitest: false,\n tsconfig: {\n compilerOptions: {\n noUnusedLocals: false,\n },\n },\n biomeOptions: {\n biomeConfig: {\n formatter: {\n lineWidth: 100,\n },\n },\n },\n});\n```\n\nEvery component is exposed as an enable flag (`mise`, `vitest`, ...) plus an options property\n(`miseOptions`, `vitestOptions`, ...).\n\n## Usage\n\n### Projects\n\n#### AWS CDK Construct Library Project\n\n```typescript\nimport { AwsCdkConstructLibraryProject } from \"@nikovirtala/projen-constructs\";\n\nconst project = new AwsCdkConstructLibraryProject({\n name: \"my-cdk-construct\",\n repositoryUrl: \"https://github.com/nikovirtala/my-cdk-construct.git\",\n});\n\nproject.synth();\n```\n\n#### AWS CDK TypeScript App Project\n\n```typescript\nimport { AwsCdkTypeScriptAppProject } from \"@nikovirtala/projen-constructs\";\n\nconst project = new AwsCdkTypeScriptAppProject({\n name: \"my-cdk-app\",\n repositoryUrl: \"https://github.com/nikovirtala/my-cdk-app.git\",\n});\n\nproject.synth();\n```\n\n#### JSII Project\n\n```typescript\nimport { JsiiProject } from \"@nikovirtala/projen-constructs\";\n\nconst project = new JsiiProject({\n name: \"my-jsii-project\",\n repositoryUrl: \"https://github.com/nikovirtala/my-jsii-project.git\",\n});\n\nproject.synth();\n```\n\n#### TypeScript Project\n\n```typescript\nimport { TypeScriptProject } from \"@nikovirtala/projen-constructs\";\n\nconst project = new TypeScriptProject({\n name: \"my-typescript-project\",\n repositoryUrl: \"https://github.com/nikovirtala/my-typescript-project.git\",\n});\n\nproject.synth();\n```\n\n### Components\n\nThe package includes reusable components for common development tasks:\n\n#### Vitest\n\n[Vitest](https://vitest.dev) testing framework component.\n\n```typescript\nimport { Vitest } from \"@nikovirtala/projen-constructs\";\n\nnew Vitest(project, {\n vitestVersion: \"^4\",\n config: {\n coverageProvider: CoverageProvider.V8,\n coverageReporters: [CoverageReporter.TEXT, CoverageReporter.LCOV],\n },\n});\n```\n\nType checking runs against the project's development tsconfig (`test/tsconfig.json`) unless\n`config.typecheckTsconfig` says otherwise.\n\nFor Vitest settings that `config` doesn't cover, use `extraTestConfig` (merged into `test`) and\n`extraConfig` (top-level options next to `test`):\n\n```typescript\nnew Vitest(project, {\n extraTestConfig: {\n setupFiles: [\"test/setup.ts\"],\n },\n extraConfig: {\n resolve: { alias: { \"@\": \"/src\" } },\n },\n});\n```\n\n`extraTestConfig` is deep-merged over the generated `test` options: objects merge, and other values\n(including arrays) replace the generated value. Both options are rendered as JSON, so their values\ncan't contain functions or regular expressions, which rules out plugins.\n\n#### TypeDoc\n\n[TypeDoc](https://typedoc.org) documentation generation component.\n\n```typescript\nimport { TypeDoc, EntryPointStrategy } from \"@nikovirtala/projen-constructs\";\n\nnew TypeDoc(project, {\n version: \"^0.28\",\n typeDocConfig: {\n entryPointStrategy: EntryPointStrategy.EXPAND,\n out: \"docs/api\",\n exclude: [\"**/*.test.ts\"],\n },\n});\n```\n\n#### Mise\n\n[Mise](https://mise.jdx.dev) dev tools/runtimes management component.\n\n```typescript\nimport { Mise } from \"@nikovirtala/projen-constructs\";\n\nnew Mise(project, {\n nodeVersion: \"24.19.0\",\n});\n```\n\n#### Homebrew\n\n[Homebrew](https://brew.sh) package management component. Writes a `Brewfile` and adds an\n`install:homebrew` task that bootstraps Homebrew and runs `brew bundle`.\n\n```typescript\nimport { Homebrew } from \"@nikovirtala/projen-constructs\";\n\nconst homebrew = new Homebrew(project, {\n packages: [\"jq\", \"yq\"],\n});\n\nhomebrew.addPackage(\"gh\");\n```\n\n#### Colima\n\n[Colima](https://github.com/abiosoft/colima) container runtime component. Alternative for Docker.\n\n```typescript\nimport { Colima } from \"@nikovirtala/projen-constructs\";\n\nnew Colima(project);\n```\n\n#### LocalStack\n\n[LocalStack](https://www.localstack.cloud) AWS emulation component.\n\n```typescript\nimport { LocalStack } from \"@nikovirtala/projen-constructs\";\n\nnew LocalStack(project, {\n services: [\"s3\", \"lambda\", \"dynamodb\"],\n port: 4566,\n debug: true,\n});\n```\n\n#### LambdaFunctionConstructGenerator\n\nGenerates AWS CDK Lambda Function constructs and bundles their code.\n\n```typescript\nimport { LambdaFunctionConstructGenerator } from \"@nikovirtala/projen-constructs\";\n\nnew LambdaFunctionConstructGenerator(project, {\n sourceDir: \"src/handlers\",\n outputDir: \"src/constructs/lambda\",\n filePattern: \"*.lambda.ts\",\n esbuildOptions: {\n minify: true,\n sourcemap: true,\n },\n});\n```\n\n#### Bundler\n\nLow-level bundling utilities for Lambda functions.\n\n```typescript\nimport {\n Bundler,\n LambdaFunctionCodeBundle,\n} from \"@nikovirtala/projen-constructs\";\n\nconst bundler = new Bundler(project, {\n assetsDir: \"assets\",\n esbuildVersion: \"^0.25\",\n});\n\nnew LambdaFunctionCodeBundle(project, {\n entrypoint: \"src/my-function.lambda.ts\",\n extension: \".lambda.ts\",\n});\n```\n\n#### ProjectGenerator\n\nGenerates TypeScript project classes with standard configuration.\n\n```typescript\nimport { ProjectGenerator, ProjectType } from \"@nikovirtala/projen-constructs\";\n\nnew ProjectGenerator(project, {\n name: \"TypeScriptProject\",\n projectType: ProjectType.TYPE_SCRIPT_PROJECT,\n filePath: \"./src/projects/typescript.generated.ts\",\n components: [\n { componentClass: Mise },\n { componentClass: Vitest }, // Auto-detects VitestOptions from JSII manifest\n ],\n});\n```\n\nFeatures:\n\n- Automatically generates the `ProjectType` enum from Projen's JSII manifest\n- Auto-detects component options types from JSII manifests\n- Strips Projen's `@pjnew` annotation from `packageManager`, which `projen new` would otherwise\n render into a generated `.projenrc.ts` as the package manager that ran the command\n- Validates paths to prevent directory traversal attacks\n- Structured error handling with custom error classes\n\n## Development\n\nThis project is managed by Projen and generates itself: `.projenrc.ts` defines the project using the\n`JsiiProject` type from `src/`. Configuration changes belong in `.projenrc.ts`, never in the\ngenerated files.\n\n```bash\npnpm projen # synthesize project files\npnpm build # synthesize, compile, test and package\npnpm test # biome, vitest, typedoc\npnpm test:watch # vitest in watch mode\npnpm test:update # update snapshots\npnpm biome # format and lint\npnpm docgen # regenerate API.md from the .jsii manifest\npnpm update-versions # refresh src/versions.json\npnpm upgrade # upgrade dependencies\n```\n\n### Build process\n\n```mermaid\nflowchart TD\n projenrc[\".projenrc.ts\"]\n\n subgraph synthesize[\"default (synthesize)\"]\n direction TB\n synth[\"tsx .projenrc.ts\"]\n generator[\"ProjectGenerator\"]\n generated[\"src/project-type.ts<br/>src/projects/*.generated.ts<br/>src/projects/*-options.generated.ts\"]\n projenfiles[\"package.json, tsconfig.json,<br/>pnpm-workspace.yaml, workflows, ...\"]\n brew[\"install:homebrew<br/>brew bundle\"]\n definecfg[\"bundle-vitest-define-config<br/>esbuild → lib/vitest-define-config.js\"]\n\n synth --> generator --> generated\n synth --> projenfiles\n synth --> brew\n synth --> definecfg\n end\n\n subgraph compile[\"compile\"]\n direction TB\n jsii[\"jsii<br/>validates tsconfig.json against the strict rule set\"]\n lib[\"lib/**\"]\n manifest[\".jsii manifest\"]\n\n jsii --> lib\n jsii --> manifest\n end\n\n subgraph test[\"test\"]\n direction TB\n biome[\"biome check --write\"]\n vitest[\"vitest run<br/>+ type checking\"]\n typedoc[\"typedoc → docs/api\"]\n\n biome --> vitest --> typedoc\n end\n\n subgraph package[\"package\"]\n direction TB\n pacmak[\"jsii-pacmak<br/>--pack-command 'pnpm pack'\"]\n dist[\"dist/js/*.tgz\"]\n\n pacmak --> dist\n end\n\n projenrc --> synthesize\n synthesize --> compile\n compile --> test\n test --> package\n\n manifest -. \"component options FQNs<br/>read on the next synthesis\" .-> generator\n docgen[\"docgen<br/>jsii-docgen → API.md\"]\n manifest --> docgen\n\n classDef artifact fill:#eef,stroke:#88a\n class generated,projenfiles,lib,manifest,dist artifact\n```\n\nThe dashed edge is the part worth knowing about: `ProjectGenerator` reads the committed `.jsii`\nmanifest to resolve component options types, so the manifest produced by `compile` feeds the *next*\nsynthesis. This is why `.jsii` is committed rather than ignored. A component options type that is\nmissing from the manifest is reported as a warning and its options property is left out of the\ngenerated interface, which is expected only while a new component is being introduced: compile once,\nthen synthesize again.\n\n`package` runs `package:js` on CI and `package-all` locally; both end up in `jsii-pacmak`.\n`docgen` is not part of `build` and has to be run explicitly after the manifest changes.\n"
|
|
4200
4200
|
},
|
|
4201
4201
|
"repository": {
|
|
4202
4202
|
"type": "git",
|
|
@@ -20575,7 +20575,7 @@
|
|
|
20575
20575
|
},
|
|
20576
20576
|
"locationInModule": {
|
|
20577
20577
|
"filename": "src/components/vitest.ts",
|
|
20578
|
-
"line":
|
|
20578
|
+
"line": 344
|
|
20579
20579
|
},
|
|
20580
20580
|
"parameters": [
|
|
20581
20581
|
{
|
|
@@ -20596,7 +20596,7 @@
|
|
|
20596
20596
|
"kind": "class",
|
|
20597
20597
|
"locationInModule": {
|
|
20598
20598
|
"filename": "src/components/vitest.ts",
|
|
20599
|
-
"line":
|
|
20599
|
+
"line": 315
|
|
20600
20600
|
},
|
|
20601
20601
|
"methods": [
|
|
20602
20602
|
{
|
|
@@ -20605,7 +20605,7 @@
|
|
|
20605
20605
|
},
|
|
20606
20606
|
"locationInModule": {
|
|
20607
20607
|
"filename": "src/components/vitest.ts",
|
|
20608
|
-
"line":
|
|
20608
|
+
"line": 316
|
|
20609
20609
|
},
|
|
20610
20610
|
"name": "of",
|
|
20611
20611
|
"parameters": [
|
|
@@ -20630,7 +20630,7 @@
|
|
|
20630
20630
|
},
|
|
20631
20631
|
"locationInModule": {
|
|
20632
20632
|
"filename": "src/components/vitest.ts",
|
|
20633
|
-
"line":
|
|
20633
|
+
"line": 417
|
|
20634
20634
|
},
|
|
20635
20635
|
"name": "addExclude",
|
|
20636
20636
|
"parameters": [
|
|
@@ -20648,7 +20648,7 @@
|
|
|
20648
20648
|
},
|
|
20649
20649
|
"locationInModule": {
|
|
20650
20650
|
"filename": "src/components/vitest.ts",
|
|
20651
|
-
"line":
|
|
20651
|
+
"line": 412
|
|
20652
20652
|
},
|
|
20653
20653
|
"name": "addInclude",
|
|
20654
20654
|
"parameters": [
|
|
@@ -20666,7 +20666,7 @@
|
|
|
20666
20666
|
},
|
|
20667
20667
|
"locationInModule": {
|
|
20668
20668
|
"filename": "src/components/vitest.ts",
|
|
20669
|
-
"line":
|
|
20669
|
+
"line": 427
|
|
20670
20670
|
},
|
|
20671
20671
|
"name": "configureCoverageProvider",
|
|
20672
20672
|
"parameters": [
|
|
@@ -20684,7 +20684,7 @@
|
|
|
20684
20684
|
},
|
|
20685
20685
|
"locationInModule": {
|
|
20686
20686
|
"filename": "src/components/vitest.ts",
|
|
20687
|
-
"line":
|
|
20687
|
+
"line": 446
|
|
20688
20688
|
},
|
|
20689
20689
|
"name": "configureCoverageReporters",
|
|
20690
20690
|
"parameters": [
|
|
@@ -20707,7 +20707,7 @@
|
|
|
20707
20707
|
},
|
|
20708
20708
|
"locationInModule": {
|
|
20709
20709
|
"filename": "src/components/vitest.ts",
|
|
20710
|
-
"line":
|
|
20710
|
+
"line": 422
|
|
20711
20711
|
},
|
|
20712
20712
|
"name": "configureEnvironment",
|
|
20713
20713
|
"parameters": [
|
|
@@ -20725,7 +20725,7 @@
|
|
|
20725
20725
|
},
|
|
20726
20726
|
"locationInModule": {
|
|
20727
20727
|
"filename": "src/components/vitest.ts",
|
|
20728
|
-
"line":
|
|
20728
|
+
"line": 451
|
|
20729
20729
|
},
|
|
20730
20730
|
"name": "configureGlobals"
|
|
20731
20731
|
},
|
|
@@ -20736,7 +20736,7 @@
|
|
|
20736
20736
|
},
|
|
20737
20737
|
"locationInModule": {
|
|
20738
20738
|
"filename": "src/components/vitest.ts",
|
|
20739
|
-
"line":
|
|
20739
|
+
"line": 402
|
|
20740
20740
|
},
|
|
20741
20741
|
"name": "preSynthesize",
|
|
20742
20742
|
"overrides": "projen.Component"
|
|
@@ -21173,6 +21173,58 @@
|
|
|
21173
21173
|
"primitive": "string"
|
|
21174
21174
|
}
|
|
21175
21175
|
},
|
|
21176
|
+
{
|
|
21177
|
+
"abstract": true,
|
|
21178
|
+
"docs": {
|
|
21179
|
+
"default": "- no additional top-level options",
|
|
21180
|
+
"example": "{ resolve: { alias: { \"@\": \"/src\" } } }",
|
|
21181
|
+
"remarks": "Values are rendered as JSON, so they must be JSON-serializable (no functions or regular expressions,\nwhich rules out plugins). Use `extraTestConfig` for `test` options.",
|
|
21182
|
+
"see": "https://vitest.dev/config/",
|
|
21183
|
+
"stability": "stable",
|
|
21184
|
+
"summary": "Additional top-level config options, next to `test`, such as `resolve`."
|
|
21185
|
+
},
|
|
21186
|
+
"immutable": true,
|
|
21187
|
+
"locationInModule": {
|
|
21188
|
+
"filename": "src/components/vitest.ts",
|
|
21189
|
+
"line": 312
|
|
21190
|
+
},
|
|
21191
|
+
"name": "extraConfig",
|
|
21192
|
+
"optional": true,
|
|
21193
|
+
"type": {
|
|
21194
|
+
"collection": {
|
|
21195
|
+
"elementtype": {
|
|
21196
|
+
"primitive": "any"
|
|
21197
|
+
},
|
|
21198
|
+
"kind": "map"
|
|
21199
|
+
}
|
|
21200
|
+
}
|
|
21201
|
+
},
|
|
21202
|
+
{
|
|
21203
|
+
"abstract": true,
|
|
21204
|
+
"docs": {
|
|
21205
|
+
"default": "- no additional test options",
|
|
21206
|
+
"example": "{ setupFiles: [\"test/setup.ts\"], expect: { requireAssertions: true } }",
|
|
21207
|
+
"remarks": "Deep-merged over the options generated from `config`: objects are merged, other values (including\narrays) replace the generated value. Values are rendered as JSON, so they must be JSON-serializable\n(no functions or regular expressions).",
|
|
21208
|
+
"see": "https://vitest.dev/config/",
|
|
21209
|
+
"stability": "stable",
|
|
21210
|
+
"summary": "Additional `test` options for settings that `config` doesn't cover, such as `setupFiles` or `expect`."
|
|
21211
|
+
},
|
|
21212
|
+
"immutable": true,
|
|
21213
|
+
"locationInModule": {
|
|
21214
|
+
"filename": "src/components/vitest.ts",
|
|
21215
|
+
"line": 300
|
|
21216
|
+
},
|
|
21217
|
+
"name": "extraTestConfig",
|
|
21218
|
+
"optional": true,
|
|
21219
|
+
"type": {
|
|
21220
|
+
"collection": {
|
|
21221
|
+
"elementtype": {
|
|
21222
|
+
"primitive": "any"
|
|
21223
|
+
},
|
|
21224
|
+
"kind": "map"
|
|
21225
|
+
}
|
|
21226
|
+
}
|
|
21227
|
+
},
|
|
21176
21228
|
{
|
|
21177
21229
|
"abstract": true,
|
|
21178
21230
|
"docs": {
|
|
@@ -21195,6 +21247,6 @@
|
|
|
21195
21247
|
"symbolId": "src/components/vitest:VitestOptions"
|
|
21196
21248
|
}
|
|
21197
21249
|
},
|
|
21198
|
-
"version": "0.3.
|
|
21199
|
-
"fingerprint": "
|
|
21250
|
+
"version": "0.3.79",
|
|
21251
|
+
"fingerprint": "VRPwvbb0ZYcBikmET25BdRi+oXVjSIHOXFDkc0B/2DE="
|
|
21200
21252
|
}
|
package/README.md
CHANGED
|
@@ -175,6 +175,24 @@ new Vitest(project, {
|
|
|
175
175
|
Type checking runs against the project's development tsconfig (`test/tsconfig.json`) unless
|
|
176
176
|
`config.typecheckTsconfig` says otherwise.
|
|
177
177
|
|
|
178
|
+
For Vitest settings that `config` doesn't cover, use `extraTestConfig` (merged into `test`) and
|
|
179
|
+
`extraConfig` (top-level options next to `test`):
|
|
180
|
+
|
|
181
|
+
```typescript
|
|
182
|
+
new Vitest(project, {
|
|
183
|
+
extraTestConfig: {
|
|
184
|
+
setupFiles: ["test/setup.ts"],
|
|
185
|
+
},
|
|
186
|
+
extraConfig: {
|
|
187
|
+
resolve: { alias: { "@": "/src" } },
|
|
188
|
+
},
|
|
189
|
+
});
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
`extraTestConfig` is deep-merged over the generated `test` options: objects merge, and other values
|
|
193
|
+
(including arrays) replace the generated value. Both options are rendered as JSON, so their values
|
|
194
|
+
can't contain functions or regular expressions, which rules out plugins.
|
|
195
|
+
|
|
178
196
|
#### TypeDoc
|
|
179
197
|
|
|
180
198
|
[TypeDoc](https://typedoc.org) documentation generation component.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
window.searchData = "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";
|
|
1
|
+
window.searchData = "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";
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
<div class="tsd-comment tsd-typography"><p>AwsCdkConstructLibraryProject with standard configuration and component integration</p>
|
|
15
15
|
<p>Extends Projen's base class with opinionated defaults and automatic component setup.</p>
|
|
16
16
|
</div></section>
|
|
17
|
-
<section class="tsd-panel tsd-hierarchy" data-refl="
|
|
17
|
+
<section class="tsd-panel tsd-hierarchy" data-refl="829">
|
|
18
18
|
<h4>Hierarchy</h4>
|
|
19
19
|
<ul class="tsd-hierarchy">
|
|
20
20
|
<li class="tsd-hierarchy-item"><span class="tsd-signature-type">AwsCdkConstructLibrary</span>
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
<div class="tsd-comment tsd-typography"><p>AwsCdkTypeScriptAppProject with standard configuration and component integration</p>
|
|
15
15
|
<p>Extends Projen's base class with opinionated defaults and automatic component setup.</p>
|
|
16
16
|
</div></section>
|
|
17
|
-
<section class="tsd-panel tsd-hierarchy" data-refl="
|
|
17
|
+
<section class="tsd-panel tsd-hierarchy" data-refl="1009">
|
|
18
18
|
<h4>Hierarchy</h4>
|
|
19
19
|
<ul class="tsd-hierarchy">
|
|
20
20
|
<li class="tsd-hierarchy-item"><span class="tsd-signature-type">AwsCdkTypeScriptApp</span>
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
<div class="tsd-comment tsd-typography"><p>JsiiProject with standard configuration and component integration</p>
|
|
15
15
|
<p>Extends Projen's base class with opinionated defaults and automatic component setup.</p>
|
|
16
16
|
</div></section>
|
|
17
|
-
<section class="tsd-panel tsd-hierarchy" data-refl="
|
|
17
|
+
<section class="tsd-panel tsd-hierarchy" data-refl="1192">
|
|
18
18
|
<h4>Hierarchy</h4>
|
|
19
19
|
<ul class="tsd-hierarchy">
|
|
20
20
|
<li class="tsd-hierarchy-item"><span class="tsd-signature-type">JsiiProject</span>
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
<p>This component automates the creation of project classes that extend Projen base classes
|
|
16
16
|
with opinionated defaults and component integration.</p>
|
|
17
17
|
</div></section>
|
|
18
|
-
<section class="tsd-panel tsd-hierarchy" data-refl="
|
|
18
|
+
<section class="tsd-panel tsd-hierarchy" data-refl="729">
|
|
19
19
|
<h4>Hierarchy</h4>
|
|
20
20
|
<ul class="tsd-hierarchy">
|
|
21
21
|
<li class="tsd-hierarchy-item"><span class="tsd-signature-type">Component</span>
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
<div class="tsd-comment tsd-typography"><p>TypeScriptProject with standard configuration and component integration</p>
|
|
15
15
|
<p>Extends Projen's base class with opinionated defaults and automatic component setup.</p>
|
|
16
16
|
</div></section>
|
|
17
|
-
<section class="tsd-panel tsd-hierarchy" data-refl="
|
|
17
|
+
<section class="tsd-panel tsd-hierarchy" data-refl="1369">
|
|
18
18
|
<h4>Hierarchy</h4>
|
|
19
19
|
<ul class="tsd-hierarchy">
|
|
20
20
|
<li class="tsd-hierarchy-item"><span class="tsd-signature-type">TypeScriptProject</span>
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
<ul class="tsd-breadcrumb" aria-label="Breadcrumb">
|
|
11
11
|
<li><a href="" aria-current="page">Vitest</a></li></ul>
|
|
12
12
|
<h1>Class Vitest</h1></div>
|
|
13
|
-
<section class="tsd-panel tsd-hierarchy" data-refl="
|
|
13
|
+
<section class="tsd-panel tsd-hierarchy" data-refl="519">
|
|
14
14
|
<h4>Hierarchy</h4>
|
|
15
15
|
<ul class="tsd-hierarchy">
|
|
16
16
|
<li class="tsd-hierarchy-item"><span class="tsd-signature-type">Component</span>
|
package/docs/api/index.html
CHANGED
|
@@ -122,6 +122,14 @@ the editor use, and the one <code>tsconfigDev</code> points at.</li>
|
|
|
122
122
|
|
|
123
123
|
<p>Type checking runs against the project's development tsconfig (<code>test/tsconfig.json</code>) unless
|
|
124
124
|
<code>config.typecheckTsconfig</code> says otherwise.</p>
|
|
125
|
+
<p>For Vitest settings that <code>config</code> doesn't cover, use <code>extraTestConfig</code> (merged into <code>test</code>) and
|
|
126
|
+
<code>extraConfig</code> (top-level options next to <code>test</code>):</p>
|
|
127
|
+
<pre><code class="typescript"><span class="hl-3">new</span><span class="hl-1"> </span><span class="hl-0">Vitest</span><span class="hl-1">(</span><span class="hl-5">project</span><span class="hl-1">, {</span><br/><span class="hl-1"> </span><span class="hl-5">extraTestConfig:</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-5">setupFiles:</span><span class="hl-1"> [</span><span class="hl-2">"test/setup.ts"</span><span class="hl-1">],</span><br/><span class="hl-1"> },</span><br/><span class="hl-1"> </span><span class="hl-5">extraConfig:</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-5">resolve:</span><span class="hl-1"> { </span><span class="hl-5">alias:</span><span class="hl-1"> { </span><span class="hl-2">"@"</span><span class="hl-5">:</span><span class="hl-1"> </span><span class="hl-2">"/src"</span><span class="hl-1"> } },</span><br/><span class="hl-1"> },</span><br/><span class="hl-1">});</span>
|
|
128
|
+
</code><button type="button">Copy</button></pre>
|
|
129
|
+
|
|
130
|
+
<p><code>extraTestConfig</code> is deep-merged over the generated <code>test</code> options: objects merge, and other values
|
|
131
|
+
(including arrays) replace the generated value. Both options are rendered as JSON, so their values
|
|
132
|
+
can't contain functions or regular expressions, which rules out plugins.</p>
|
|
125
133
|
<h4 id="typedoc" class="tsd-anchor-link">TypeDoc<a href="#typedoc" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h4>
|
|
126
134
|
<p><a href="https://typedoc.org">TypeDoc</a> documentation generation component.</p>
|
|
127
135
|
<pre><code class="typescript"><span class="hl-7">import</span><span class="hl-1"> { </span><span class="hl-5">TypeDoc</span><span class="hl-1">, </span><span class="hl-5">EntryPointStrategy</span><span class="hl-1"> } </span><span class="hl-7">from</span><span class="hl-1"> </span><span class="hl-2">"@nikovirtala/projen-constructs"</span><span class="hl-1">;</span><br/><br/><span class="hl-3">new</span><span class="hl-1"> </span><span class="hl-0">TypeDoc</span><span class="hl-1">(</span><span class="hl-5">project</span><span class="hl-1">, {</span><br/><span class="hl-1"> </span><span class="hl-5">version:</span><span class="hl-1"> </span><span class="hl-2">"^0.28"</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">typeDocConfig:</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-5">entryPointStrategy:</span><span class="hl-1"> </span><span class="hl-5">EntryPointStrategy</span><span class="hl-1">.</span><span class="hl-4">EXPAND</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">out:</span><span class="hl-1"> </span><span class="hl-2">"docs/api"</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">exclude:</span><span class="hl-1"> [</span><span class="hl-2">"**/*.test.ts"</span><span class="hl-1">],</span><br/><span class="hl-1"> },</span><br/><span class="hl-1">});</span>
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
with standard configuration and component integration.</p>
|
|
17
17
|
</div></section>
|
|
18
18
|
<div class="tsd-signature"><span class="tsd-signature-keyword">interface</span> <span class="tsd-kind-interface">ProjectGeneratorOptions</span> <span class="tsd-signature-symbol">{</span><br/> <a class="tsd-kind-property" href="#additionaloptions">additionalOptions</a><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol">;</span><br/> <a class="tsd-kind-property" href="#components">components</a><span class="tsd-signature-symbol">?:</span> <a href="Component.html" class="tsd-signature-type tsd-kind-interface">Component</a><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol">;</span><br/> <a class="tsd-kind-property" href="#executable">executable</a><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-type">boolean</span><span class="tsd-signature-symbol">;</span><br/> <a class="tsd-kind-property" href="#filepath">filePath</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">;</span><br/> <a class="tsd-kind-property" href="#indent">indent</a><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">;</span><br/> <a class="tsd-kind-property" href="#name">name</a><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">;</span><br/> <a class="tsd-kind-property" href="#omitoptions">omitOptions</a><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">[]</span><span class="tsd-signature-symbol">;</span><br/> <a class="tsd-kind-property" href="#projecttype">projectType</a><span class="tsd-signature-symbol">:</span> <a href="../enums/ProjectType.html" class="tsd-signature-type tsd-kind-enum">ProjectType</a><span class="tsd-signature-symbol">;</span><br/> <a class="tsd-kind-property" href="#readonly">readonly</a><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-type">boolean</span><span class="tsd-signature-symbol">;</span><br/><span class="tsd-signature-symbol">}</span></div>
|
|
19
|
-
<section class="tsd-panel tsd-hierarchy" data-refl="
|
|
19
|
+
<section class="tsd-panel tsd-hierarchy" data-refl="719">
|
|
20
20
|
<h4>Hierarchy</h4>
|
|
21
21
|
<ul class="tsd-hierarchy">
|
|
22
22
|
<li class="tsd-hierarchy-item"><span class="tsd-signature-type">SourceCodeOptions</span>
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
<ul class="tsd-breadcrumb" aria-label="Breadcrumb">
|
|
11
11
|
<li><a href="" aria-current="page">VitestOptions</a></li></ul>
|
|
12
12
|
<h1>Interface VitestOptions</h1></div>
|
|
13
|
-
<div class="tsd-signature"><span class="tsd-signature-keyword">interface</span> <span class="tsd-kind-interface">VitestOptions</span> <span class="tsd-signature-symbol">{</span><br/> <a class="tsd-kind-property" href="#config">config</a><span class="tsd-signature-symbol">?:</span> <a href="VitestConfigOptions.html" class="tsd-signature-type tsd-kind-interface">VitestConfigOptions</a><span class="tsd-signature-symbol">;</span><br/> <a class="tsd-kind-property" href="#configfilepath">configFilePath</a><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">;</span><br/> <a class="tsd-kind-property" href="#vitestversion">vitestVersion</a><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">;</span><br/><span class="tsd-signature-symbol">}</span></div>
|
|
13
|
+
<div class="tsd-signature"><span class="tsd-signature-keyword">interface</span> <span class="tsd-kind-interface">VitestOptions</span> <span class="tsd-signature-symbol">{</span><br/> <a class="tsd-kind-property" href="#config">config</a><span class="tsd-signature-symbol">?:</span> <a href="VitestConfigOptions.html" class="tsd-signature-type tsd-kind-interface">VitestConfigOptions</a><span class="tsd-signature-symbol">;</span><br/> <a class="tsd-kind-property" href="#configfilepath">configFilePath</a><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">;</span><br/> <a class="tsd-kind-property" href="#extraconfig">extraConfig</a><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-symbol">{</span> <span class="tsd-signature-symbol">[</span><span class="tsd-kind-index-signature">key</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">]:</span> <span class="tsd-signature-type">unknown</span> <span class="tsd-signature-symbol">}</span><span class="tsd-signature-symbol">;</span><br/> <a class="tsd-kind-property" href="#extratestconfig">extraTestConfig</a><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-symbol">{</span> <span class="tsd-signature-symbol">[</span><span class="tsd-kind-index-signature">key</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">]:</span> <span class="tsd-signature-type">unknown</span> <span class="tsd-signature-symbol">}</span><span class="tsd-signature-symbol">;</span><br/> <a class="tsd-kind-property" href="#vitestversion">vitestVersion</a><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">;</span><br/><span class="tsd-signature-symbol">}</span></div>
|
|
14
14
|
<section class="tsd-panel-group tsd-index-group">
|
|
15
15
|
<section class="tsd-panel tsd-index-panel">
|
|
16
16
|
<details class="tsd-index-content tsd-accordion" open><summary class="tsd-accordion-summary tsd-index-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>
|
|
@@ -20,6 +20,8 @@
|
|
|
20
20
|
<h3 class="tsd-index-heading tsd-anchor-link" id="properties">Properties<a href="#properties" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3>
|
|
21
21
|
<div class="tsd-index-list"><a href="#config" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>config?</span></a>
|
|
22
22
|
<a href="#configfilepath" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>config<wbr/>File<wbr/>Path?</span></a>
|
|
23
|
+
<a href="#extraconfig" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>extra<wbr/>Config?</span></a>
|
|
24
|
+
<a href="#extratestconfig" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>extra<wbr/>Test<wbr/>Config?</span></a>
|
|
23
25
|
<a href="#vitestversion" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>vitest<wbr/>Version?</span></a>
|
|
24
26
|
</div></section></div></details></section></section>
|
|
25
27
|
<details class="tsd-panel-group tsd-member-group tsd-accordion" open><summary class="tsd-accordion-summary" data-key="section-Properties"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>
|
|
@@ -40,6 +42,49 @@
|
|
|
40
42
|
<h4 class="tsd-anchor-link" id="default">Default<a href="#default" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h4><pre><code class="ts"><span class="hl-2">"vitest.config.ts"</span>
|
|
41
43
|
</code><button type="button">Copy</button></pre>
|
|
42
44
|
|
|
45
|
+
</div></div></section>
|
|
46
|
+
<section class="tsd-panel tsd-member">
|
|
47
|
+
<h3 class="tsd-anchor-link" id="extraconfig"><code class="tsd-tag">Optional</code> <code class="tsd-tag">Readonly</code><span>extra<wbr/>Config</span><a href="#extraconfig" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3>
|
|
48
|
+
<div class="tsd-signature"><span class="tsd-kind-property">extraConfig</span><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-symbol">{</span> <span class="tsd-signature-symbol">[</span><span class="tsd-kind-index-signature">key</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">]:</span> <span class="tsd-signature-type">unknown</span> <span class="tsd-signature-symbol">}</span></div>
|
|
49
|
+
<div class="tsd-comment tsd-typography"><p>Additional top-level config options, next to <code>test</code>, such as <code>resolve</code>.</p>
|
|
50
|
+
<p>Values are rendered as JSON, so they must be JSON-serializable (no functions or regular expressions,
|
|
51
|
+
which rules out plugins). Use <code>extraTestConfig</code> for <code>test</code> options.</p>
|
|
52
|
+
</div>
|
|
53
|
+
<div class="tsd-comment tsd-typography">
|
|
54
|
+
<div class="tsd-tag-example">
|
|
55
|
+
<h4 class="tsd-anchor-link" id="example">Example<a href="#example" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h4><pre><code class="ts"><span class="hl-1">{ </span><span class="hl-10">resolve</span><span class="hl-1">: { </span><span class="hl-10">alias</span><span class="hl-1">: { </span><span class="hl-2">"@"</span><span class="hl-1">: </span><span class="hl-2">"/src"</span><span class="hl-1"> } } }</span>
|
|
56
|
+
</code><button type="button">Copy</button></pre>
|
|
57
|
+
|
|
58
|
+
</div>
|
|
59
|
+
<div class="tsd-tag-default">
|
|
60
|
+
<h4 class="tsd-anchor-link" id="default-1">Default<a href="#default-1" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h4><pre><code class="ts"><span class="hl-1">- </span><span class="hl-5">no</span><span class="hl-1"> </span><span class="hl-5">additional</span><span class="hl-1"> </span><span class="hl-5">top</span><span class="hl-1">-</span><span class="hl-5">level</span><span class="hl-1"> </span><span class="hl-5">options</span>
|
|
61
|
+
</code><button type="button">Copy</button></pre>
|
|
62
|
+
|
|
63
|
+
</div>
|
|
64
|
+
<div class="tsd-tag-see">
|
|
65
|
+
<h4 class="tsd-anchor-link" id="see">See<a href="#see" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h4><p><a href="https://vitest.dev/config/">https://vitest.dev/config/</a></p>
|
|
66
|
+
</div></div></section>
|
|
67
|
+
<section class="tsd-panel tsd-member">
|
|
68
|
+
<h3 class="tsd-anchor-link" id="extratestconfig"><code class="tsd-tag">Optional</code> <code class="tsd-tag">Readonly</code><span>extra<wbr/>Test<wbr/>Config</span><a href="#extratestconfig" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3>
|
|
69
|
+
<div class="tsd-signature"><span class="tsd-kind-property">extraTestConfig</span><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-symbol">{</span> <span class="tsd-signature-symbol">[</span><span class="tsd-kind-index-signature">key</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">]:</span> <span class="tsd-signature-type">unknown</span> <span class="tsd-signature-symbol">}</span></div>
|
|
70
|
+
<div class="tsd-comment tsd-typography"><p>Additional <code>test</code> options for settings that <code>config</code> doesn't cover, such as <code>setupFiles</code> or <code>expect</code>.</p>
|
|
71
|
+
<p>Deep-merged over the options generated from <code>config</code>: objects are merged, other values (including
|
|
72
|
+
arrays) replace the generated value. Values are rendered as JSON, so they must be JSON-serializable
|
|
73
|
+
(no functions or regular expressions).</p>
|
|
74
|
+
</div>
|
|
75
|
+
<div class="tsd-comment tsd-typography">
|
|
76
|
+
<div class="tsd-tag-example">
|
|
77
|
+
<h4 class="tsd-anchor-link" id="example-1">Example<a href="#example-1" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h4><pre><code class="ts"><span class="hl-1">{ </span><span class="hl-10">setupFiles</span><span class="hl-1">: [</span><span class="hl-2">"test/setup.ts"</span><span class="hl-1">], </span><span class="hl-10">expect</span><span class="hl-1">: { </span><span class="hl-10">requireAssertions</span><span class="hl-1">: </span><span class="hl-3">true</span><span class="hl-1"> } }</span>
|
|
78
|
+
</code><button type="button">Copy</button></pre>
|
|
79
|
+
|
|
80
|
+
</div>
|
|
81
|
+
<div class="tsd-tag-default">
|
|
82
|
+
<h4 class="tsd-anchor-link" id="default-2">Default<a href="#default-2" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h4><pre><code class="ts"><span class="hl-1">- </span><span class="hl-5">no</span><span class="hl-1"> </span><span class="hl-5">additional</span><span class="hl-1"> </span><span class="hl-5">test</span><span class="hl-1"> </span><span class="hl-5">options</span>
|
|
83
|
+
</code><button type="button">Copy</button></pre>
|
|
84
|
+
|
|
85
|
+
</div>
|
|
86
|
+
<div class="tsd-tag-see">
|
|
87
|
+
<h4 class="tsd-anchor-link" id="see-1">See<a href="#see-1" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h4><p><a href="https://vitest.dev/config/">https://vitest.dev/config/</a></p>
|
|
43
88
|
</div></div></section>
|
|
44
89
|
<section class="tsd-panel tsd-member">
|
|
45
90
|
<h3 class="tsd-anchor-link" id="vitestversion"><code class="tsd-tag">Optional</code> <code class="tsd-tag">Readonly</code><span>vitest<wbr/>Version</span><a href="#vitestversion" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3>
|
|
@@ -48,7 +93,7 @@
|
|
|
48
93
|
</div>
|
|
49
94
|
<div class="tsd-comment tsd-typography">
|
|
50
95
|
<div class="tsd-tag-default">
|
|
51
|
-
<h4 class="tsd-anchor-link" id="default-
|
|
96
|
+
<h4 class="tsd-anchor-link" id="default-3">Default<a href="#default-3" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h4><pre><code class="ts"><span class="hl-2">"^4"</span>
|
|
52
97
|
</code><button type="button">Copy</button></pre>
|
|
53
98
|
|
|
54
99
|
</div></div></section></section></details></div>
|
|
@@ -68,7 +113,7 @@
|
|
|
68
113
|
<h3>On This Page</h3></summary>
|
|
69
114
|
<div class="tsd-accordion-details">
|
|
70
115
|
<details open class="tsd-accordion tsd-page-navigation-section"><summary class="tsd-accordion-summary" data-key="section-Properties"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>Properties</summary>
|
|
71
|
-
<div><a href="#config"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>config</span></a><a href="#configfilepath"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>config<wbr/>File<wbr/>Path</span></a><a href="#vitestversion"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>vitest<wbr/>Version</span></a></div></details></div></details></div>
|
|
116
|
+
<div><a href="#config"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>config</span></a><a href="#configfilepath"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>config<wbr/>File<wbr/>Path</span></a><a href="#extraconfig"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>extra<wbr/>Config</span></a><a href="#extratestconfig"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>extra<wbr/>Test<wbr/>Config</span></a><a href="#vitestversion"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Property"><use href="../assets/icons.svg#icon-1024"></use></svg><span>vitest<wbr/>Version</span></a></div></details></div></details></div>
|
|
72
117
|
<div class="site-menu">
|
|
73
118
|
<nav class="tsd-navigation"><a href="../modules.html">@nikovirtala/projen-constructs</a>
|
|
74
119
|
<ul class="tsd-small-nested-navigation" id="tsd-nav-container">
|
|
@@ -55,7 +55,7 @@ function convertToPosixPath(p) {
|
|
|
55
55
|
return p.split(node_path_1.sep).join(node_path_1.posix.sep);
|
|
56
56
|
}
|
|
57
57
|
class Bundler extends projen_1.Component {
|
|
58
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@nikovirtala/projen-constructs.Bundler", version: "0.3.
|
|
58
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@nikovirtala/projen-constructs.Bundler", version: "0.3.79" };
|
|
59
59
|
static of(project) {
|
|
60
60
|
const isBundler = (o) => o instanceof Bundler;
|
|
61
61
|
return project.components.find(isBundler);
|
|
@@ -157,7 +157,7 @@ class Bundler extends projen_1.Component {
|
|
|
157
157
|
}
|
|
158
158
|
exports.Bundler = Bundler;
|
|
159
159
|
class LambdaFunctionCodeBundle extends projen_1.Component {
|
|
160
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@nikovirtala/projen-constructs.LambdaFunctionCodeBundle", version: "0.3.
|
|
160
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@nikovirtala/projen-constructs.LambdaFunctionCodeBundle", version: "0.3.79" };
|
|
161
161
|
constructor(project, options) {
|
|
162
162
|
super(project);
|
|
163
163
|
const bundler = Bundler.of(project);
|
|
@@ -203,7 +203,7 @@ exports.LambdaFunctionCodeBundle = LambdaFunctionCodeBundle;
|
|
|
203
203
|
* Creates Lambda Function code bundles from entrypoints discovered in the project's source tree.
|
|
204
204
|
*/
|
|
205
205
|
class LambdaFunctionCodeBundler extends projen_1.cdk.AutoDiscoverBase {
|
|
206
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@nikovirtala/projen-constructs.LambdaFunctionCodeBundler", version: "0.3.
|
|
206
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@nikovirtala/projen-constructs.LambdaFunctionCodeBundler", version: "0.3.79" };
|
|
207
207
|
constructor(project, options) {
|
|
208
208
|
super(project, {
|
|
209
209
|
projectdir: options.srcdir,
|
package/lib/components/colima.js
CHANGED
|
@@ -6,7 +6,7 @@ const component_1 = require("projen/lib/component");
|
|
|
6
6
|
const task_shell_1 = require("projen/lib/task-shell");
|
|
7
7
|
const homebrew_1 = require("./homebrew");
|
|
8
8
|
class Colima extends component_1.Component {
|
|
9
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@nikovirtala/projen-constructs.Colima", version: "0.3.
|
|
9
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@nikovirtala/projen-constructs.Colima", version: "0.3.79" };
|
|
10
10
|
constructor(scope) {
|
|
11
11
|
super(scope);
|
|
12
12
|
const project = this.project;
|
|
@@ -6,7 +6,7 @@ const component_1 = require("projen/lib/component");
|
|
|
6
6
|
const task_shell_1 = require("projen/lib/task-shell");
|
|
7
7
|
const textfile_1 = require("projen/lib/textfile");
|
|
8
8
|
class Homebrew extends component_1.Component {
|
|
9
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@nikovirtala/projen-constructs.Homebrew", version: "0.3.
|
|
9
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@nikovirtala/projen-constructs.Homebrew", version: "0.3.79" };
|
|
10
10
|
static of(project) {
|
|
11
11
|
const isHomebrew = (c) => c instanceof Homebrew;
|
|
12
12
|
return project.components.find(isHomebrew);
|
|
@@ -39,7 +39,7 @@ const path = __importStar(require("node:path"));
|
|
|
39
39
|
const projen_1 = require("projen");
|
|
40
40
|
const utils_1 = require("../utils");
|
|
41
41
|
class LambdaFunctionConstructGenerator extends projen_1.Component {
|
|
42
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@nikovirtala/projen-constructs.LambdaFunctionConstructGenerator", version: "0.3.
|
|
42
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@nikovirtala/projen-constructs.LambdaFunctionConstructGenerator", version: "0.3.79" };
|
|
43
43
|
sourceDir;
|
|
44
44
|
outputDir;
|
|
45
45
|
filePattern;
|
|
@@ -7,7 +7,7 @@ const javascript_1 = require("projen/lib/javascript");
|
|
|
7
7
|
const colima_1 = require("./colima");
|
|
8
8
|
const homebrew_1 = require("./homebrew");
|
|
9
9
|
class LocalStack extends component_1.Component {
|
|
10
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@nikovirtala/projen-constructs.LocalStack", version: "0.3.
|
|
10
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@nikovirtala/projen-constructs.LocalStack", version: "0.3.79" };
|
|
11
11
|
constructor(scope, options = {}) {
|
|
12
12
|
super(scope);
|
|
13
13
|
const project = javascript_1.NodeProject.of(this);
|
package/lib/components/mise.js
CHANGED
|
@@ -7,7 +7,7 @@ const component_1 = require("projen/lib/component");
|
|
|
7
7
|
const textfile_1 = require("projen/lib/textfile");
|
|
8
8
|
const homebrew_1 = require("./homebrew");
|
|
9
9
|
class Mise extends component_1.Component {
|
|
10
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@nikovirtala/projen-constructs.Mise", version: "0.3.
|
|
10
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@nikovirtala/projen-constructs.Mise", version: "0.3.79" };
|
|
11
11
|
static of(project) {
|
|
12
12
|
const isMise = (c) => c instanceof Mise;
|
|
13
13
|
return project.components.find(isMise);
|
|
@@ -34,7 +34,7 @@ const DEFAULT_CONFIG = {
|
|
|
34
34
|
* TypeDoc component for projen projects
|
|
35
35
|
*/
|
|
36
36
|
class TypeDoc extends component_1.Component {
|
|
37
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@nikovirtala/projen-constructs.TypeDoc", version: "0.3.
|
|
37
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@nikovirtala/projen-constructs.TypeDoc", version: "0.3.79" };
|
|
38
38
|
static of(project) {
|
|
39
39
|
const isTypeDoc = (c) => c instanceof TypeDoc;
|
|
40
40
|
return project.components.find(isTypeDoc);
|
|
@@ -244,6 +244,33 @@ export interface VitestOptions {
|
|
|
244
244
|
* @default "^4"
|
|
245
245
|
*/
|
|
246
246
|
readonly vitestVersion?: string;
|
|
247
|
+
/**
|
|
248
|
+
* Additional `test` options for settings that `config` doesn't cover, such as `setupFiles` or `expect`.
|
|
249
|
+
*
|
|
250
|
+
* Deep-merged over the options generated from `config`: objects are merged, other values (including
|
|
251
|
+
* arrays) replace the generated value. Values are rendered as JSON, so they must be JSON-serializable
|
|
252
|
+
* (no functions or regular expressions).
|
|
253
|
+
*
|
|
254
|
+
* @example { setupFiles: ["test/setup.ts"], expect: { requireAssertions: true } }
|
|
255
|
+
* @default - no additional test options
|
|
256
|
+
* @see https://vitest.dev/config/
|
|
257
|
+
*/
|
|
258
|
+
readonly extraTestConfig?: {
|
|
259
|
+
[key: string]: unknown;
|
|
260
|
+
};
|
|
261
|
+
/**
|
|
262
|
+
* Additional top-level config options, next to `test`, such as `resolve`.
|
|
263
|
+
*
|
|
264
|
+
* Values are rendered as JSON, so they must be JSON-serializable (no functions or regular expressions,
|
|
265
|
+
* which rules out plugins). Use `extraTestConfig` for `test` options.
|
|
266
|
+
*
|
|
267
|
+
* @example { resolve: { alias: { "@": "/src" } } }
|
|
268
|
+
* @default - no additional top-level options
|
|
269
|
+
* @see https://vitest.dev/config/
|
|
270
|
+
*/
|
|
271
|
+
readonly extraConfig?: {
|
|
272
|
+
[key: string]: unknown;
|
|
273
|
+
};
|
|
247
274
|
}
|
|
248
275
|
export declare class Vitest extends Component {
|
|
249
276
|
static of(project: NodeProject): Vitest | undefined;
|
|
@@ -267,6 +294,8 @@ export declare class Vitest extends Component {
|
|
|
267
294
|
private version;
|
|
268
295
|
private readonly printConsoleTrace;
|
|
269
296
|
private readonly slowTestThreshold;
|
|
297
|
+
private readonly extraTestConfig;
|
|
298
|
+
private readonly extraConfig;
|
|
270
299
|
constructor(project: NodeProject, options?: VitestOptions);
|
|
271
300
|
preSynthesize(): void;
|
|
272
301
|
addInclude(pattern: string): void;
|
package/lib/components/vitest.js
CHANGED
|
@@ -140,7 +140,7 @@ var CoverageReporter;
|
|
|
140
140
|
CoverageReporter["TEXT"] = "text";
|
|
141
141
|
})(CoverageReporter || (exports.CoverageReporter = CoverageReporter = {}));
|
|
142
142
|
class Vitest extends component_1.Component {
|
|
143
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@nikovirtala/projen-constructs.Vitest", version: "0.3.
|
|
143
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@nikovirtala/projen-constructs.Vitest", version: "0.3.79" };
|
|
144
144
|
static of(project) {
|
|
145
145
|
const isVitest = (c) => c instanceof Vitest;
|
|
146
146
|
return project.components.find(isVitest);
|
|
@@ -165,8 +165,15 @@ class Vitest extends component_1.Component {
|
|
|
165
165
|
version;
|
|
166
166
|
printConsoleTrace;
|
|
167
167
|
slowTestThreshold;
|
|
168
|
+
extraTestConfig;
|
|
169
|
+
extraConfig;
|
|
168
170
|
constructor(project, options = {}) {
|
|
169
171
|
super(project);
|
|
172
|
+
if (options.extraConfig && "test" in options.extraConfig) {
|
|
173
|
+
throw new Error("vitest extraConfig must not contain `test`, use extraTestConfig for test options");
|
|
174
|
+
}
|
|
175
|
+
this.extraTestConfig = options.extraTestConfig ?? {};
|
|
176
|
+
this.extraConfig = options.extraConfig ?? {};
|
|
170
177
|
this.configFilePath = options.configFilePath ?? "vitest.config.ts";
|
|
171
178
|
this.include = new Set(options.config?.include ?? ["**/*.{test,spec}.?(c|m)[jt]s?(x)"]);
|
|
172
179
|
this.exclude = new Set(options.config?.exclude ?? [
|
|
@@ -293,42 +300,38 @@ class Vitest extends component_1.Component {
|
|
|
293
300
|
const defineConfigImport = packageName === "@nikovirtala/projen-constructs"
|
|
294
301
|
? 'import { defineConfig } from "./lib/vitest-define-config";'
|
|
295
302
|
: 'import { defineConfig } from "@nikovirtala/projen-constructs/lib/vitest-define-config";';
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
...this.renderTestOptions(),
|
|
302
|
-
" },",
|
|
303
|
-
"});",
|
|
304
|
-
];
|
|
303
|
+
const config = {
|
|
304
|
+
...this.extraConfig,
|
|
305
|
+
test: (0, utils_1.deepMerge)(this.renderTestOptions(), this.extraTestConfig),
|
|
306
|
+
};
|
|
307
|
+
return [defineConfigImport, "", `export default defineConfig(${JSON.stringify(config, null, 2)});`];
|
|
305
308
|
}
|
|
306
309
|
renderTestOptions() {
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
310
|
+
return {
|
|
311
|
+
bail: this.bail,
|
|
312
|
+
coverage: {
|
|
313
|
+
enabled: this.coverageEnabled,
|
|
314
|
+
provider: this.coverageProvider,
|
|
315
|
+
reporter: this.coverageReporters,
|
|
316
|
+
reportsDirectory: this.coverageDirectory,
|
|
317
|
+
},
|
|
318
|
+
environment: this.environment,
|
|
319
|
+
exclude: Array.from(this.exclude),
|
|
320
|
+
globals: this.globals,
|
|
321
|
+
include: Array.from(this.include),
|
|
322
|
+
isolate: this.isolate,
|
|
323
|
+
passWithNoTests: this.passWithNoTests,
|
|
324
|
+
printConsoleTrace: this.printConsoleTrace,
|
|
325
|
+
pool: this.pool,
|
|
326
|
+
slowTestThreshold: this.slowTestThreshold,
|
|
327
|
+
typecheck: {
|
|
328
|
+
enabled: this.typecheckEnabled,
|
|
329
|
+
checker: this.typecheckChecker,
|
|
330
|
+
tsconfig: this.typecheckTsconfig,
|
|
331
|
+
},
|
|
332
|
+
update: this.updateSnapshots,
|
|
333
|
+
};
|
|
331
334
|
}
|
|
332
335
|
}
|
|
333
336
|
exports.Vitest = Vitest;
|
|
334
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidml0ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbXBvbmVudHMvdml0ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxnREFBa0M7QUFDbEMsbUNBQXFDO0FBQ3JDLG9EQUFpRDtBQUNqRCwwREFBeUQ7QUFDekQsc0RBQStEO0FBQy9ELGtEQUErQztBQUMvQyxvQ0FBMkM7QUFFM0MsSUFBWSxXQTBCWDtBQTFCRCxXQUFZLFdBQVc7SUFDbkI7Ozs7T0FJRztJQUNILDRDQUE2QixDQUFBO0lBRTdCOzs7O09BSUc7SUFDSCxzQ0FBdUIsQ0FBQTtJQUV2Qjs7OztPQUlHO0lBQ0gsOEJBQWUsQ0FBQTtJQUVmOztPQUVHO0lBQ0gsNEJBQWEsQ0FBQTtBQUNqQixDQUFDLEVBMUJXLFdBQVcsMkJBQVgsV0FBVyxRQTBCdEI7QUFFRCxJQUFZLElBbUNYO0FBbkNELFdBQVksSUFBSTtJQUNaOzs7Ozs7T0FNRztJQUNILHVCQUFlLENBQUE7SUFFZjs7OztPQUlHO0lBQ0gsMkJBQW1CLENBQUE7SUFFbkI7Ozs7Ozs7O09BUUc7SUFDSCwyQkFBbUIsQ0FBQTtJQUVuQjs7Ozs7T0FLRztJQUNILCtCQUF1QixDQUFBO0FBQzNCLENBQUMsRUFuQ1csSUFBSSxvQkFBSixJQUFJLFFBbUNmO0FBRUQsSUFBWSxnQkFjWDtBQWRELFdBQVksZ0JBQWdCO0lBQ3hCOzs7O09BSUc7SUFDSCx5Q0FBcUIsQ0FBQTtJQUVyQjs7OztPQUlHO0lBQ0gsNkJBQVMsQ0FBQTtBQUNiLENBQUMsRUFkVyxnQkFBZ0IsZ0NBQWhCLGdCQUFnQixRQWMzQjtBQUVELElBQVksZ0JBeUJYO0FBekJELFdBQVksZ0JBQWdCO0lBQ3hCOztPQUVHO0lBQ0gscUNBQWlCLENBQUE7SUFFakI7O09BRUc7SUFDSCxpQ0FBYSxDQUFBO0lBRWI7O09BRUc7SUFDSCxpQ0FBYSxDQUFBO0lBRWI7O09BRUc7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c0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBhd3NjZGssIGNkayB9IGZyb20gXCJwcm9qZW5cIjtcbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gXCJwcm9qZW4vbGliL2NvbXBvbmVudFwiO1xuaW1wb3J0IHsgRGVwZW5kZW5jeVR5cGUgfSBmcm9tIFwicHJvamVuL2xpYi9kZXBlbmRlbmNpZXNcIjtcbmltcG9ydCB7IEplc3QsIHR5cGUgTm9kZVByb2plY3QgfSBmcm9tIFwicHJvamVuL2xpYi9qYXZhc2NyaXB0XCI7XG5pbXBvcnQgeyBUZXh0RmlsZSB9IGZyb20gXCJwcm9qZW4vbGliL3RleHRmaWxlXCI7XG5pbXBvcnQgeyB0c2NvbmZpZ0RldlBhdGggfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuZXhwb3J0IGVudW0gRW52aXJvbm1lbnQge1xuICAgIC8qKlxuICAgICAqIFJ1biB0ZXN0cyBpbiBWZXJjZWwncyBFZGdlIFJ1bnRpbWUgVk0uXG4gICAgICpcbiAgICAgKiBAc2VlIGh0dHBzOi8vZWRnZS1ydW50aW1lLnZlcmNlbC5hcHAvcGFja2FnZXMvdm1cbiAgICAgKi9cbiAgICBFREdFX1JVTlRJTUUgPSBcImVkZ2UtcnVudGltZVwiLFxuXG4gICAgLyoqXG4gICAgICogUnVuIHRlc3RzIGluIGBoYXBweS1kb21gIGVudmlyb25tZW50LlxuICAgICAqXG4gICAgICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vY2Fwcmljb3JuODYvaGFwcHktZG9tXG4gICAgICovXG4gICAgSEFQUFlfRE9NID0gXCJoYXBweS1kb21cIixcblxuICAgIC8qKlxuICAgICAqIFJ1biB0ZXN0cyBpbiBganNkb21gIGVudmlyb25tZW50LlxuICAgICAqXG4gICAgICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vanNkb20vanNkb21cbiAgICAgKi9cbiAgICBKU0RPTSA9IFwianNkb21cIixcblxuICAgIC8qKlxuICAgICAqIFJ1biB0ZXN0cyBpbiBhIE5vZGUuanMgZW52aXJvbm1lbnQuXG4gICAgICovXG4gICAgTk9ERSA9IFwibm9kZVwiLFxufVxuXG5leHBvcnQgZW51bSBQb29sIHtcbiAgICAvKipcbiAgICAgKiBSdW4gdGVzdHMgaW4gYG5vZGU6Y2hpbGRfcHJvY2Vzc2AgdXNpbmcgZm9yaygpXG4gICAgICpcbiAgICAgKiBUZXN0IGlzb2xhdGlvbiAod2hlbiBlbmFibGVkKSBpcyBkb25lIGJ5IHNwYXduaW5nIGEgbmV3IGNoaWxkIHByb2Nlc3MgZm9yIGVhY2ggdGVzdCBmaWxlLlxuICAgICAqXG4gICAgICogQHNlZSBodHRwczovL25vZGVqcy5vcmcvYXBpL2NoaWxkX3Byb2Nlc3MuaHRtbCNjaGlsZF9wcm9jZXNzZm9ya21vZHVsZXBhdGgtYXJncy1vcHRpb25zXG4gICAgICovXG4gICAgRk9SS1MgPSBcImZvcmtzXCIsXG5cbiAgICAvKipcbiAgICAgKiBSdW4gdGVzdHMgaW4gYG5vZGU6d29ya2VyX3RocmVhZHNgLlxuICAgICAqXG4gICAgICogVGVzdCBpc29sYXRpb24gKHdoZW4gZW5hYmxlZCkgaXMgZG9uZSBieSBzcGF3bmluZyBhIG5ldyB0aHJlYWQgZm9yIGVhY2ggdGVzdCBmaWxlLlxuICAgICAqL1xuICAgIFRIUkVBRFMgPSBcInRocmVhZHNcIixcblxuICAgIC8qKlxuICAgICAqIFJ1biB0ZXN0cyBpbiBpc29sYXRlZCBgbm9kZTp2bWAuXG4gICAgICpcbiAgICAgKiBUZXN0IGZpbGVzIGFyZSBydW4gcGFyYWxsZWwgdXNpbmcgYG5vZGU6Y2hpbGRfcHJvY2Vzc2AgZm9yaygpXG4gICAgICpcbiAgICAgKiBUaGlzIG1ha2VzIHRlc3RzIHJ1biBmYXN0ZXIsIGJ1dCBWTSBtb2R1bGUgaXMgdW5zdGFibGUuIFlvdXIgdGVzdHMgbWlnaHQgbGVhayBtZW1vcnkuXG4gICAgICpcbiAgICAgKiBAc2VlIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvY2hpbGRfcHJvY2Vzcy5odG1sI2NoaWxkX3Byb2Nlc3Nmb3JrbW9kdWxlcGF0aC1hcmdzLW9wdGlvbnNcbiAgICAgKi9cbiAgICBWTUZPUktTID0gXCJ2bWZvcmtzXCIsXG5cbiAgICAvKipcbiAgICAgKiBSdW4gdGVzdHMgaW4gaXNvbGF0ZWQgYG5vZGU6dm1gLlxuICAgICAqIFRlc3QgZmlsZXMgYXJlIHJ1biBwYXJhbGxlbCB1c2luZyBgbm9kZTp3b3JrZXJfdGhyZWFkc2AuXG4gICAgICpcbiAgICAgKiBUaGlzIG1ha2VzIHRlc3RzIHJ1biBmYXN0ZXIsIGJ1dCBWTSBtb2R1bGUgaXMgdW5zdGFibGUuIFlvdXIgdGVzdHMgbWlnaHQgbGVhayBtZW1vcnkuXG4gICAgICovXG4gICAgVk1USFJFQURTID0gXCJ2bXRocmVhZHNcIixcbn1cblxuZXhwb3J0IGVudW0gQ292ZXJhZ2VQcm92aWRlciB7XG4gICAgLyoqXG4gICAgICogUHJvdmlkZSBjb3ZlcmFnZSByZXBvcnQgdXNpbmcgaXN0YW5idWwuXG4gICAgICpcbiAgICAgKiBAc2VlIGh0dHBzOi8vaXN0YW5idWwuanMub3JnXG4gICAgICovXG4gICAgSVNUQU5CVUwgPSBcImlzdGFuYnVsXCIsXG5cbiAgICAvKipcbiAgICAgKiBQcm92aWRlIGNvdmVyYWdlIHJlcG9ydHMgdXNpbmcgdjguXG4gICAgICpcbiAgICAgKiBAc2VlIGh0dHBzOi8vdjguZGV2L2Jsb2cvamF2YXNjcmlwdC1jb2RlLWNvdmVyYWdlXG4gICAgICovXG4gICAgVjggPSBcInY4XCIsXG59XG5cbmV4cG9ydCBlbnVtIENvdmVyYWdlUmVwb3J0ZXIge1xuICAgIC8qKlxuICAgICAqIFByb3ZpZGVzIGBjbG92ZXJgIHJlcG9ydC5cbiAgICAgKi9cbiAgICBDTE9WRVIgPSBcImNsb3ZlclwiLFxuXG4gICAgLyoqXG4gICAgICogUHJvdmlkZXMgYEhUTUxgIHJlcG9ydC5cbiAgICAgKi9cbiAgICBIVE1MID0gXCJodG1sXCIsXG5cbiAgICAvKipcbiAgICAgKiBQcm92aWRlcyBgSlNPTmAgcmVwb3J0LlxuICAgICAqL1xuICAgIEpTT04gPSBcImpzb25cIixcblxuICAgIC8qKlxuICAgICAqIFByb3ZpZGVzIGBMQ09WYCByZXBvcnQuXG4gICAgICovXG4gICAgTENPViA9IFwibGNvdlwiLFxuXG4gICAgLyoqXG4gICAgICogUHJvdmlkZXMgYHRleHRgIHJlcG9ydC5cbiAgICAgKi9cbiAgICBURVhUID0gXCJ0ZXh0XCIsXG59XG5cbi8qKlxuICogVml0ZXN0IENvbmZpZy5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vdml0ZXN0LmRldi9jb25maWcvXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVml0ZXN0Q29uZmlnT3B0aW9ucyB7XG4gICAgLyoqXG4gICAgICogQSBsaXN0IG9mIGdsb2IgcGF0dGVybnMgdGhhdCBtYXRjaCB5b3VyIHRlc3QgZmlsZXMuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAtIFZpdGVzdCdzIGBjb25maWdEZWZhdWx0cy5pbmNsdWRlYFxuICAgICAqIEBzZWUgaHR0cHM6Ly92aXRlc3QuZGV2L2NvbmZpZy8jaW5jbHVkZVxuICAgICAqL1xuICAgIHJlYWRvbmx5IGluY2x1ZGU/OiBBcnJheTxzdHJpbmc+O1xuXG4gICAgLyoqXG4gICAgICogQSBsaXN0IG9mIGdsb2IgcGF0dGVybnMgdGhhdCBzaG91bGQgYmUgZXhjbHVkZWQgZnJvbSB5b3VyIHRlc3QgZmlsZXMuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAtIFZpdGVzdCdzIGBjb25maWdEZWZhdWx0cy5leGNsdWRlYFxuICAgICAqIEBzZWUgaHR0cHM6Ly92aXRlc3QuZGV2L2NvbmZpZy8jZXhjbHVkZVxuICAgICAqL1xuICAgIHJlYWRvbmx5IGV4Y2x1ZGU/OiBBcnJheTxzdHJpbmc+O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGVudmlyb25tZW50IHRoYXQgd2lsbCBiZSB1c2VkIGZvciB0ZXN0aW5nLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgXCJub2RlXCJcbiAgICAgKiBAc2VlIGh0dHBzOi8vdml0ZXN0LmRldi9jb25maWcvI2Vudmlyb25tZW50XG4gICAgICovXG4gICAgcmVhZG9ubHkgZW52aXJvbm1lbnQ/OiBFbnZpcm9ubWVudDtcblxuICAgIC8qKlxuICAgICAqIFJ1biB0ZXN0cyBpbiBhbiBpc29sYXRlZCBlbnZpcm9ubWVudC4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB2bVRocmVhZHMgcG9vbC5cbiAgICAgKlxuICAgICAqIERpc2FibGluZyB0aGlzIG9wdGlvbiBtaWdodCBpbXByb3ZlIHBlcmZvcm1hbmNlIGlmIHlvdXIgY29kZSBkb2Vzbid0IHJlbHkgb24gc2lkZSBlZmZlY3RzLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqIEBzZWUgaHR0cHM6Ly92aXRlc3QuZGV2L2NvbmZpZy8jaXNvbGF0ZVxuICAgICAqL1xuICAgIHJlYWRvbmx5IGlzb2xhdGU/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogUG9vbCB1c2VkIHRvIHJ1biB0ZXN0cyBpbi5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IFwiZm9ya3NcIlxuICAgICAqIEBzZWUgaHR0cHM6Ly92aXRlc3QuZGV2L2NvbmZpZy8jcG9vbFxuICAgICAqL1xuICAgIHJlYWRvbmx5IHBvb2w/OiBQb29sO1xuXG4gICAgLyoqXG4gICAgICogUmVnaXN0ZXIgYXBpcyBnbG9iYWxseS4gSWYgeW91IHByZWZlciB0byB1c2UgdGhlIEFQSXMgZ2xvYmFsbHkgbGlrZSBKZXN0LCBzZXQgdG8gYHRydWVgLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKiBAc2VlIGh0dHBzOi8vdml0ZXN0LmRldi9jb25maWcvI2dsb2JhbHNcbiAgICAgKi9cbiAgICByZWFkb25seSBnbG9iYWxzPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIENvdmVyYWdlIGVuYWJsZWQuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICogQHNlZSBodHRwczovL3ZpdGVzdC5kZXYvY29uZmlnLyNjb3ZlcmFnZS1lbmFibGVkXG4gICAgICovXG4gICAgcmVhZG9ubHkgY292ZXJhZ2VFbmFibGVkPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIENvdmVyYWdlIHByb3ZpZGVyIHR5cGUuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBcInY4XCJcbiAgICAgKiBAc2VlIGh0dHBzOi8vdml0ZXN0LmRldi9jb25maWcvI2NvdmVyYWdlLXByb3ZpZGVyXG4gICAgICovXG4gICAgcmVhZG9ubHkgY292ZXJhZ2VQcm92aWRlcj86IENvdmVyYWdlUHJvdmlkZXI7XG5cbiAgICAvKipcbiAgICAgKiBDb3ZlcmFnZSByZXBvcnRlcnMuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAnW1widGV4dFwiLCBcImxjb3ZcIl0nXG4gICAgICogQHNlZSBodHRwczovL3ZpdGVzdC5kZXYvY29uZmlnLyNjb3ZlcmFnZS1yZXBvcnRlclxuICAgICAqL1xuICAgIHJlYWRvbmx5IGNvdmVyYWdlUmVwb3J0ZXJzPzogQXJyYXk8Q292ZXJhZ2VSZXBvcnRlcj47XG5cbiAgICAvKipcbiAgICAgKiBDb3ZlcmFnZSBvdXRwdXQgZGlyZWN0b3J5LlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgXCJjb3ZlcmFnZVwiXG4gICAgICovXG4gICAgcmVhZG9ubHkgY292ZXJhZ2VEaXJlY3Rvcnk/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBFbmFibGUgdHlwZWNoZWNraW5nIGFsb25nc2lkZSB5b3VyIHJlZ3VsYXIgdGVzdHMuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCB0cnVlIChmb3IgVHlwZVNjcmlwdCBwcm9qZWN0cylcbiAgICAgKiBAc2VlIGh0dHBzOi8vdml0ZXN0LmRldi9jb25maWcvI3R5cGVjaGVjay1lbmFibGVkXG4gICAgICovXG4gICAgcmVhZG9ubHkgdHlwZWNoZWNrRW5hYmxlZD86IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBUb29sIHRvIHVzZSBmb3IgdHlwZSBjaGVja2luZy4gQ2hlY2tlciBzaG91bGQgaW1wbGVtZW50IHRoZSBzYW1lIG91dHB1dCBmb3JtYXQgYXMgYHRzY2AuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBcInRzYyAtLW5vRW1pdFwiXG4gICAgICogQHNlZSBodHRwczovL3ZpdGVzdC5kZXYvY29uZmlnLyN0eXBlY2hlY2stY2hlY2tlclxuICAgICAqL1xuICAgIHJlYWRvbmx5IHR5cGVjaGVja0NoZWNrZXI/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIGN1c3RvbSB0c2NvbmZpZywgcmVsYXRpdmUgdG8gdGhlIHByb2plY3Qgcm9vdC5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IC0gdGhlIHByb2plY3QncyBkZXZlbG9wbWVudCB0c2NvbmZpZyAoZS5nLiBcInRlc3QvdHNjb25maWcuanNvblwiKVxuICAgICAqIEBzZWUgaHR0cHM6Ly92aXRlc3QuZGV2L2NvbmZpZy8jdHlwZWNoZWNrLXRzY29uZmlnXG4gICAgICovXG4gICAgcmVhZG9ubHkgdHlwZWNoZWNrVHNjb25maWc/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBWaXRlc3Qgd2lsbCBub3QgZmFpbCwgaWYgbm8gdGVzdHMgd2lsbCBiZSBmb3VuZC5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKiBAc2VlIGh0dHBzOi8vdml0ZXN0LmRldi9jb25maWcvI3Bhc3N3aXRobm90ZXN0c1xuICAgICAqL1xuICAgIHJlYWRvbmx5IHBhc3NXaXRoTm9UZXN0cz86IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBTdG9wIHJ1bm5pbmcgdGVzdHMgYWZ0ZXIgY2VydGFpbiBudW1iZXIgb2YgZmFpbHVyZXMuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICogQHNlZSBodHRwczovL3ZpdGVzdC5kZXYvY29uZmlnLyNiYWlsXG4gICAgICovXG4gICAgcmVhZG9ubHkgYmFpbD86IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZSBzbmFwc2hvdCBmaWxlcy4gVGhpcyB3aWxsIHVwZGF0ZSBhbGwgY2hhbmdlZCBzbmFwc2hvdHMgYW5kIGRlbGV0ZSBvYnNvbGV0ZSBvbmVzLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqIEBzZWUgaHR0cHM6Ly92aXRlc3QuZGV2L2d1aWRlL3NuYXBzaG90Lmh0bWwjdXBkYXRpbmctc25hcHNob3RzXG4gICAgICovXG4gICAgcmVhZG9ubHkgdXBkYXRlU25hcHNob3RzPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEFsd2F5cyBwcmludCBjb25zb2xlIHRyYWNlcyB3aGVuIGNhbGxpbmcgYW55IGNvbnNvbGUgbWV0aG9kLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqIEBzZWUgaHR0cHM6Ly92aXRlc3QuZGV2L2NvbmZpZy8jY29uc29sZXRyYWNlXG4gICAgICovXG4gICAgcmVhZG9ubHkgcHJpbnRDb25zb2xlVHJhY2U/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgYWZ0ZXIgd2hpY2ggYSB0ZXN0IG9yIHN1aXRlIGlzIGNvbnNpZGVyZWQgc2xvdy5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IDMwMFxuICAgICAqIEBzZWUgaHR0cHM6Ly92aXRlc3QuZGV2L2NvbmZpZy8jc2xvd3Rlc3R0aHJlc2hvbGRcbiAgICAgKi9cbiAgICByZWFkb25seSBzbG93VGVzdFRocmVzaG9sZD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWaXRlc3RPcHRpb25zIHtcbiAgICAvKipcbiAgICAgKiBDb25maWcgZmlsZSBwYXRoLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgXCJ2aXRlc3QuY29uZmlnLnRzXCJcbiAgICAgKi9cbiAgICByZWFkb25seSBjb25maWdGaWxlUGF0aD86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEluaXRpYWwgY29uZmlnIG9wdGlvbnMuXG4gICAgICovXG4gICAgcmVhZG9ubHkgY29uZmlnPzogVml0ZXN0Q29uZmlnT3B0aW9ucztcblxuICAgIC8qKlxuICAgICAqIFZpdGVzdCB2ZXJzaW9uLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgXCJeNFwiXG4gICAgICovXG4gICAgcmVhZG9ubHkgdml0ZXN0VmVyc2lvbj86IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIFZpdGVzdCBleHRlbmRzIENvbXBvbmVudCB7XG4gICAgcHVibGljIHN0YXRpYyBvZihwcm9qZWN0OiBOb2RlUHJvamVjdCk6IFZpdGVzdCB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGNvbnN0IGlzVml0ZXN0ID0gKGM6IENvbXBvbmVudCk6IGMgaXMgVml0ZXN0ID0+IGMgaW5zdGFuY2VvZiBWaXRlc3Q7XG4gICAgICAgIHJldHVybiBwcm9qZWN0LmNvbXBvbmVudHMuZmluZChpc1ZpdGVzdCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb25maWdGaWxlUGF0aDogc3RyaW5nO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgaW5jbHVkZTogU2V0PHN0cmluZz47XG4gICAgcHJpdmF0ZSByZWFkb25seSBleGNsdWRlOiBTZXQ8c3RyaW5nPjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGlzb2xhdGU6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSByZWFkb25seSBwb29sOiBQb29sO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY292ZXJhZ2VFbmFibGVkOiBib29sZWFuO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdHlwZWNoZWNrRW5hYmxlZDogYm9vbGVhbjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHR5cGVjaGVja0NoZWNrZXI6IHN0cmluZztcbiAgICBwcml2YXRlIHJlYWRvbmx5IHR5cGVjaGVja1RzY29uZmlnOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSByZWFkb25seSBwYXNzV2l0aE5vVGVzdHM6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSByZWFkb25seSBiYWlsOiBudW1iZXI7XG4gICAgcHJpdmF0ZSByZWFkb25seSB1cGRhdGVTbmFwc2hvdHM6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBlbnZpcm9ubWVudDogc3RyaW5nO1xuICAgIHByaXZhdGUgZ2xvYmFsczogYm9vbGVhbjtcbiAgICBwcml2YXRlIGNvdmVyYWdlUHJvdmlkZXI6IENvdmVyYWdlUHJvdmlkZXI7XG4gICAgcHJpdmF0ZSBjb3ZlcmFnZVJlcG9ydGVyczogQXJyYXk8Q292ZXJhZ2VSZXBvcnRlcj47XG4gICAgcHJpdmF0ZSBjb3ZlcmFnZURpcmVjdG9yeTogc3RyaW5nO1xuICAgIHByaXZhdGUgdmVyc2lvbjogc3RyaW5nO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcHJpbnRDb25zb2xlVHJhY2U6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSByZWFkb25seSBzbG93VGVzdFRocmVzaG9sZDogbnVtYmVyO1xuXG4gICAgY29uc3RydWN0b3IocHJvamVjdDogTm9kZVByb2plY3QsIG9wdGlvbnM6IFZpdGVzdE9wdGlvbnMgPSB7fSkge1xuICAgICAgICBzdXBlcihwcm9qZWN0KTtcblxuICAgICAgICB0aGlzLmNvbmZpZ0ZpbGVQYXRoID0gb3B0aW9ucy5jb25maWdGaWxlUGF0aCA/PyBcInZpdGVzdC5jb25maWcudHNcIjtcbiAgICAgICAgdGhpcy5pbmNsdWRlID0gbmV3IFNldChvcHRpb25zLmNvbmZpZz8uaW5jbHVkZSA/PyBbXCIqKi8qLnt0ZXN0LHNwZWN9Lj8oY3xtKVtqdF1zPyh4KVwiXSk7XG4gICAgICAgIHRoaXMuZXhjbHVkZSA9IG5ldyBTZXQoXG4gICAgICAgICAgICBvcHRpb25zLmNvbmZpZz8uZXhjbHVkZSA/PyBbXG4gICAgICAgICAgICAgICAgXCIqKi9ub2RlX21vZHVsZXMvKipcIixcbiAgICAgICAgICAgICAgICBcIioqL2Rpc3QvKipcIixcbiAgICAgICAgICAgICAgICBcIioqL2N5cHJlc3MvKipcIixcbiAgICAgICAgICAgICAgICBcIioqLy57aWRlYSxnaXQsY2FjaGUsb3V0cHV0LHRlbXB9LyoqXCIsXG4gICAgICAgICAgICAgICAgXCIqKi97a2FybWEscm9sbHVwLHdlYnBhY2ssdml0ZSx2aXRlc3QsamVzdCxhdmEsYmFiZWwsbnljLGN5cHJlc3MsdHN1cCxidWlsZCxlc2xpbnQscHJldHRpZXJ9LmNvbmZpZy4qXCIsXG4gICAgICAgICAgICBdLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLmlzb2xhdGUgPSBvcHRpb25zLmNvbmZpZz8uaXNvbGF0ZSA/PyB0cnVlO1xuICAgICAgICB0aGlzLnBvb2wgPSBvcHRpb25zLmNvbmZpZz8ucG9vbCA/PyBQb29sLkZPUktTO1xuICAgICAgICB0aGlzLmNvdmVyYWdlRW5hYmxlZCA9IG9wdGlvbnMuY29uZmlnPy5jb3ZlcmFnZUVuYWJsZWQgPz8gdHJ1ZTtcbiAgICAgICAgdGhpcy50eXBlY2hlY2tFbmFibGVkID0gb3B0aW9ucy5jb25maWc/LnR5cGVjaGVja0VuYWJsZWQgPz8gdGhpcy5pc1R5cGVzY3JpcHRQcm9qZWN0KCk7XG4gICAgICAgIHRoaXMudHlwZWNoZWNrQ2hlY2tlciA9IG9wdGlvbnMuY29uZmlnPy50eXBlY2hlY2tDaGVja2VyID8/IFwidHNjIC0tbm9FbWl0XCI7XG4gICAgICAgIHRoaXMudHlwZWNoZWNrVHNjb25maWcgPSBvcHRpb25zLmNvbmZpZz8udHlwZWNoZWNrVHNjb25maWcgPz8gdHNjb25maWdEZXZQYXRoKHByb2plY3QpO1xuICAgICAgICB0aGlzLnBhc3NXaXRoTm9UZXN0cyA9IG9wdGlvbnMuY29uZmlnPy5wYXNzV2l0aE5vVGVzdHMgPz8gdHJ1ZTtcbiAgICAgICAgdGhpcy5iYWlsID0gb3B0aW9ucy5jb25maWc/LmJhaWwgPz8gMDtcbiAgICAgICAgdGhpcy5lbnZpcm9ubWVudCA9IG9wdGlvbnMuY29uZmlnPy5lbnZpcm9ubWVudCA/PyBFbnZpcm9ubWVudC5OT0RFO1xuICAgICAgICB0aGlzLmdsb2JhbHMgPSBvcHRpb25zLmNvbmZpZz8uZ2xvYmFscyA/PyBmYWxzZTtcbiAgICAgICAgdGhpcy5jb3ZlcmFnZVByb3ZpZGVyID0gb3B0aW9ucy5jb25maWc/LmNvdmVyYWdlUHJvdmlkZXIgPz8gQ292ZXJhZ2VQcm92aWRlci5WODtcbiAgICAgICAgdGhpcy5jb3ZlcmFnZVJlcG9ydGVycyA9IG9wdGlvbnMuY29uZmlnPy5jb3ZlcmFnZVJlcG9ydGVycyA/PyBbQ292ZXJhZ2VSZXBvcnRlci5URVhULCBDb3ZlcmFnZVJlcG9ydGVyLkxDT1ZdO1xuICAgICAgICB0aGlzLmNvdmVyYWdlRGlyZWN0b3J5ID0gb3B0aW9ucy5jb25maWc/LmNvdmVyYWdlRGlyZWN0b3J5ID8/IFwiY292ZXJhZ2VcIjtcbiAgICAgICAgdGhpcy52ZXJzaW9uID0gb3B0aW9ucy52aXRlc3RWZXJzaW9uID8/IFwiXjRcIjtcbiAgICAgICAgdGhpcy51cGRhdGVTbmFwc2hvdHMgPSBvcHRpb25zLmNvbmZpZz8udXBkYXRlU25hcHNob3RzID8/IHRydWU7XG4gICAgICAgIHRoaXMucHJpbnRDb25zb2xlVHJhY2UgPSBvcHRpb25zLmNvbmZpZz8ucHJpbnRDb25zb2xlVHJhY2UgPz8gdHJ1ZTtcbiAgICAgICAgdGhpcy5zbG93VGVzdFRocmVzaG9sZCA9IG9wdGlvbnMuY29uZmlnPy5zbG93VGVzdFRocmVzaG9sZCA/PyAzMDA7XG5cbiAgICAgICAgcHJvamVjdC5hZGREZXZEZXBzKGB2aXRlc3RAJHt0aGlzLnZlcnNpb259YCk7XG4gICAgICAgIHRoaXMuY29uZmlndXJlQ292ZXJhZ2VQcm92aWRlcih0aGlzLmNvdmVyYWdlUHJvdmlkZXIpO1xuXG4gICAgICAgIGlmICh0aGlzLmdsb2JhbHMgJiYgdGhpcy5pc1R5cGVzY3JpcHRQcm9qZWN0KCkgJiYgdGhpcy5wcm9qZWN0LnRyeUZpbmRPYmplY3RGaWxlKHRoaXMudHlwZWNoZWNrVHNjb25maWcpKSB7XG4gICAgICAgICAgICB0aGlzLmNvbmZpZ3VyZUdsb2JhbHMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvdmVyYWdlRGlyZWN0b3J5UGF0aCA9IHBhdGgucG9zaXguam9pbihcIi9cIiwgdGhpcy5jb3ZlcmFnZURpcmVjdG9yeSwgXCIvXCIpO1xuICAgICAgICBwcm9qZWN0Lm5wbWlnbm9yZT8uZXhjbHVkZShjb3ZlcmFnZURpcmVjdG9yeVBhdGgpO1xuICAgICAgICBwcm9qZWN0LmdpdGlnbm9yZS5leGNsdWRlKGNvdmVyYWdlRGlyZWN0b3J5UGF0aCk7XG5cbiAgICAgICAgdGhpcy5hZGRUZXN0Q29tbWFuZCgpO1xuICAgICAgICB0aGlzLnN5bnRoZXNpemVDb25maWcoKTtcblxuICAgICAgICBpZiAocHJvamVjdCBpbnN0YW5jZW9mIGNkay5Kc2lpUHJvamVjdCB8fCBwcm9qZWN0IGluc3RhbmNlb2YgYXdzY2RrLkF3c0Nka0NvbnN0cnVjdExpYnJhcnkpIHtcbiAgICAgICAgICAgIHByb2plY3QubnBtaWdub3JlPy5hZGRQYXR0ZXJucyhcInZpdGVzdC5jb25maWcudHNcIik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgcHJlU3ludGhlc2l6ZSgpIHtcbiAgICAgICAgc3VwZXIucHJlU3ludGhlc2l6ZSgpO1xuXG4gICAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIHRoaXMucHJvamVjdC5jb21wb25lbnRzKSB7XG4gICAgICAgICAgICBpZiAoY29tcG9uZW50IGluc3RhbmNlb2YgSmVzdCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInZpdGVzdCBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciB3aXRoIGplc3RcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkSW5jbHVkZShwYXR0ZXJuOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbmNsdWRlLmFkZChwYXR0ZXJuKTtcbiAgICAgICAgdGhpcy5zeW50aGVzaXplQ29uZmlnKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEV4Y2x1ZGUocGF0dGVybjogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZXhjbHVkZS5hZGQocGF0dGVybik7XG4gICAgICAgIHRoaXMuc3ludGhlc2l6ZUNvbmZpZygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb25maWd1cmVFbnZpcm9ubWVudChlbnZpcm9ubWVudDogRW52aXJvbm1lbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lbnZpcm9ubWVudCA9IGVudmlyb25tZW50O1xuICAgICAgICB0aGlzLnN5bnRoZXNpemVDb25maWcoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY29uZmlndXJlQ292ZXJhZ2VQcm92aWRlcihwcm92aWRlcjogQ292ZXJhZ2VQcm92aWRlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBwcm92aWRlclBhY2thZ2VzID0ge1xuICAgICAgICAgICAgW0NvdmVyYWdlUHJvdmlkZXIuVjhdOiBgQHZpdGVzdC9jb3ZlcmFnZS12OEAke3RoaXMudmVyc2lvbn1gLFxuICAgICAgICAgICAgW0NvdmVyYWdlUHJvdmlkZXIuSVNUQU5CVUxdOiBgQHZpdGVzdC9jb3ZlcmFnZS1pc3RhbmJ1bEAke3RoaXMudmVyc2lvbn1gLFxuICAgICAgICB9O1xuXG4gICAgICAgIGZvciAoY29uc3QgcHJvdmlkZXJQYWNrYWdlIG9mIE9iamVjdC52YWx1ZXMocHJvdmlkZXJQYWNrYWdlcykpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9qZWN0LmRlcHMucmVtb3ZlRGVwZW5kZW5jeShwcm92aWRlclBhY2thZ2UpO1xuICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgICAgLy8gaWdub3JlXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnByb2plY3QuZGVwcy5hZGREZXBlbmRlbmN5KHByb3ZpZGVyUGFja2FnZXNbcHJvdmlkZXJdLCBEZXBlbmRlbmN5VHlwZS5ERVZFTlYpO1xuICAgICAgICB0aGlzLmNvdmVyYWdlUHJvdmlkZXIgPSBwcm92aWRlcjtcbiAgICAgICAgdGhpcy5zeW50aGVzaXplQ29uZmlnKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNvbmZpZ3VyZUNvdmVyYWdlUmVwb3J0ZXJzKHJlcG9ydGVyczogQXJyYXk8Q292ZXJhZ2VSZXBvcnRlcj4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb3ZlcmFnZVJlcG9ydGVycyA9IHJlcG9ydGVycztcbiAgICAgICAgdGhpcy5zeW50aGVzaXplQ29uZmlnKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNvbmZpZ3VyZUdsb2JhbHMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudXBkYXRlVHNDb25maWcoKTtcbiAgICAgICAgdGhpcy5zeW50aGVzaXplQ29uZmlnKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVUc0NvbmZpZygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdHNjb25maWcgPSB0aGlzLnByb2plY3QudHJ5RmluZE9iamVjdEZpbGUodGhpcy50eXBlY2hlY2tUc2NvbmZpZyk7XG5cbiAgICAgICAgaWYgKCF0c2NvbmZpZykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidW5hYmxlIHRvIGZpbmQgdHNjb25maWdcIik7XG4gICAgICAgIH1cblxuICAgICAgICB0c2NvbmZpZy5hZGRUb0FycmF5KFwiY29tcGlsZXJPcHRpb25zLnR5cGVzXCIsIFwidml0ZXN0L2dsb2JhbHNcIik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1R5cGVzY3JpcHRQcm9qZWN0KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9qZWN0LmRlcHMudHJ5R2V0RGVwZW5kZW5jeShcInR5cGVzY3JpcHRcIikgIT09IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZFRlc3RDb21tYW5kKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnByb2plY3QudGVzdFRhc2suZXhlYyhcInZpdGVzdCBydW5cIiwge1xuICAgICAgICAgICAgcmVjZWl2ZUFyZ3M6IHRydWUsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHRlc3RXYXRjaCA9IHRoaXMucHJvamVjdC50YXNrcy50cnlGaW5kKFwidGVzdDp3YXRjaFwiKTtcbiAgICAgICAgaWYgKCF0ZXN0V2F0Y2gpIHtcbiAgICAgICAgICAgIHRoaXMucHJvamVjdC5hZGRUYXNrKFwidGVzdDp3YXRjaFwiLCB7XG4gICAgICAgICAgICAgICAgZXhlYzogXCJ2aXRlc3Qgd2F0Y2hcIixcbiAgICAgICAgICAgICAgICByZWNlaXZlQXJnczogdHJ1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGVzdFVwZGF0ZVNuYXBzaG90cyA9IHRoaXMucHJvamVjdC50YXNrcy50cnlGaW5kKFwidGVzdDp1cGRhdGVcIik7XG4gICAgICAgIGlmICghdGVzdFVwZGF0ZVNuYXBzaG90cykge1xuICAgICAgICAgICAgdGhpcy5wcm9qZWN0LmFkZFRhc2soXCJ0ZXN0OnVwZGF0ZVwiLCB7XG4gICAgICAgICAgICAgICAgZXhlYzogXCJ2aXRlc3QgLS11cGRhdGVcIixcbiAgICAgICAgICAgICAgICByZWNlaXZlQXJnczogdHJ1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzeW50aGVzaXplQ29uZmlnKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnByb2plY3QudHJ5UmVtb3ZlRmlsZSh0aGlzLmNvbmZpZ0ZpbGVQYXRoKTtcblxuICAgICAgICBuZXcgVGV4dEZpbGUodGhpcywgdGhpcy5jb25maWdGaWxlUGF0aCwge1xuICAgICAgICAgICAgbGluZXM6IHRoaXMucmVuZGVyQ29uZmlnKCksXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVuZGVyQ29uZmlnKCk6IEFycmF5PHN0cmluZz4ge1xuICAgICAgICBjb25zdCBwcm9qZWN0ID0gdGhpcy5wcm9qZWN0IGFzIE5vZGVQcm9qZWN0O1xuICAgICAgICBjb25zdCBwYWNrYWdlTmFtZSA9IHByb2plY3QucGFja2FnZS5wYWNrYWdlTmFtZTtcbiAgICAgICAgY29uc3QgZGVmaW5lQ29uZmlnSW1wb3J0ID1cbiAgICAgICAgICAgIHBhY2thZ2VOYW1lID09PSBcIkBuaWtvdmlydGFsYS9wcm9qZW4tY29uc3RydWN0c1wiXG4gICAgICAgICAgICAgICAgPyAnaW1wb3J0IHsgZGVmaW5lQ29uZmlnIH0gZnJvbSBcIi4vbGliL3ZpdGVzdC1kZWZpbmUtY29uZmlnXCI7J1xuICAgICAgICAgICAgICAgIDogJ2ltcG9ydCB7IGRlZmluZUNvbmZpZyB9IGZyb20gXCJAbmlrb3ZpcnRhbGEvcHJvamVuLWNvbnN0cnVjdHMvbGliL3ZpdGVzdC1kZWZpbmUtY29uZmlnXCI7JztcblxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgZGVmaW5lQ29uZmlnSW1wb3J0LFxuICAgICAgICAgICAgXCJcIixcbiAgICAgICAgICAgIFwiZXhwb3J0IGRlZmF1bHQgZGVmaW5lQ29uZmlnKHtcIixcbiAgICAgICAgICAgIFwiICB0ZXN0OiB7XCIsXG4gICAgICAgICAgICAuLi50aGlzLnJlbmRlclRlc3RPcHRpb25zKCksXG4gICAgICAgICAgICBcIiAgfSxcIixcbiAgICAgICAgICAgIFwifSk7XCIsXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW5kZXJUZXN0T3B0aW9ucygpOiBBcnJheTxzdHJpbmc+IHtcbiAgICAgICAgY29uc3QgbGluZXM6IEFycmF5PHN0cmluZz4gPSBbXTtcblxuICAgICAgICBsaW5lcy5wdXNoKGAgICAgYmFpbDogJHt0aGlzLmJhaWx9LGApO1xuICAgICAgICBsaW5lcy5wdXNoKFwiICAgIGNvdmVyYWdlOiB7XCIpO1xuICAgICAgICBsaW5lcy5wdXNoKGAgICAgICBlbmFibGVkOiAke3RoaXMuY292ZXJhZ2VFbmFibGVkfSxgKTtcbiAgICAgICAgbGluZXMucHVzaChgICAgICAgcHJvdmlkZXI6IFwiJHt0aGlzLmNvdmVyYWdlUHJvdmlkZXJ9XCIsYCk7XG4gICAgICAgIGxpbmVzLnB1c2goYCAgICAgIHJlcG9ydGVyOiAke0pTT04uc3RyaW5naWZ5KHRoaXMuY292ZXJhZ2VSZXBvcnRlcnMpfSxgKTtcbiAgICAgICAgbGluZXMucHVzaChgICAgICAgcmVwb3J0c0RpcmVjdG9yeTogXCIke3RoaXMuY292ZXJhZ2VEaXJlY3Rvcnl9XCIsYCk7XG4gICAgICAgIGxpbmVzLnB1c2goXCIgICAgfSxcIik7XG4gICAgICAgIGxpbmVzLnB1c2goYCAgICBlbnZpcm9ubWVudDogXCIke3RoaXMuZW52aXJvbm1lbnR9XCIsYCk7XG4gICAgICAgIGxpbmVzLnB1c2goYCAgICBleGNsdWRlOiAke0pTT04uc3RyaW5naWZ5KEFycmF5LmZyb20odGhpcy5leGNsdWRlKSl9LGApO1xuICAgICAgICBsaW5lcy5wdXNoKGAgICAgZ2xvYmFsczogJHt0aGlzLmdsb2JhbHN9LGApO1xuICAgICAgICBsaW5lcy5wdXNoKGAgICAgaW5jbHVkZTogJHtKU09OLnN0cmluZ2lmeShBcnJheS5mcm9tKHRoaXMuaW5jbHVkZSkpfSxgKTtcbiAgICAgICAgbGluZXMucHVzaChgICAgIGlzb2xhdGU6ICR7dGhpcy5pc29sYXRlfSxgKTtcbiAgICAgICAgbGluZXMucHVzaChgICAgIHBhc3NXaXRoTm9UZXN0czogJHt0aGlzLnBhc3NXaXRoTm9UZXN0c30sYCk7XG4gICAgICAgIGxpbmVzLnB1c2goYCAgICBwcmludENvbnNvbGVUcmFjZTogJHt0aGlzLnByaW50Q29uc29sZVRyYWNlfSxgKTtcbiAgICAgICAgbGluZXMucHVzaChgICAgIHBvb2w6IFwiJHt0aGlzLnBvb2x9XCIsYCk7XG4gICAgICAgIGxpbmVzLnB1c2goYCAgICBzbG93VGVzdFRocmVzaG9sZDogJHt0aGlzLnNsb3dUZXN0VGhyZXNob2xkfSxgKTtcbiAgICAgICAgbGluZXMucHVzaChcIiAgICB0eXBlY2hlY2s6IHtcIik7XG4gICAgICAgIGxpbmVzLnB1c2goYCAgICAgIGVuYWJsZWQ6ICR7dGhpcy50eXBlY2hlY2tFbmFibGVkfSxgKTtcbiAgICAgICAgbGluZXMucHVzaChgICAgICAgY2hlY2tlcjogXCIke3RoaXMudHlwZWNoZWNrQ2hlY2tlcn1cIixgKTtcbiAgICAgICAgbGluZXMucHVzaChgICAgICAgdHNjb25maWc6IFwiJHt0aGlzLnR5cGVjaGVja1RzY29uZmlnfVwiLGApO1xuICAgICAgICBsaW5lcy5wdXNoKFwiICAgIH0sXCIpO1xuICAgICAgICBsaW5lcy5wdXNoKGAgICAgdXBkYXRlOiAke3RoaXMudXBkYXRlU25hcHNob3RzfSxgKTtcblxuICAgICAgICByZXR1cm4gbGluZXM7XG4gICAgfVxufVxuIl19
|
|
337
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidml0ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbXBvbmVudHMvdml0ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxnREFBa0M7QUFDbEMsbUNBQXFDO0FBQ3JDLG9EQUFpRDtBQUNqRCwwREFBeUQ7QUFDekQsc0RBQStEO0FBQy9ELGtEQUErQztBQUMvQyxvQ0FBc0Q7QUFFdEQsSUFBWSxXQTBCWDtBQTFCRCxXQUFZLFdBQVc7SUFDbkI7Ozs7T0FJRztJQUNILDRDQUE2QixDQUFBO0lBRTdCOzs7O09BSUc7SUFDSCxzQ0FBdUIsQ0FBQTtJQUV2Qjs7OztPQUlHO0lBQ0gsOEJBQWUsQ0FBQTtJQUVmOztPQUVHO0lBQ0gsNEJBQWEsQ0FBQTtBQUNqQixDQUFDLEVBMUJXLFdBQVcsMkJBQVgsV0FBVyxRQTBCdEI7QUFFRCxJQUFZLElBbUNYO0FBbkNELFdBQVksSUFBSTtJQUNaOzs7Ozs7T0FNRztJQUNILHVCQUFlLENBQUE7SUFFZjs7OztPQUlHO0lBQ0gsMkJBQW1CLENBQUE7SUFFbkI7Ozs7Ozs7O09BUUc7SUFDSCwyQkFBbUIsQ0FBQTtJQUVuQjs7Ozs7T0FLRztJQUNILCtCQUF1QixDQUFBO0FBQzNCLENBQUMsRUFuQ1csSUFBSSxvQkFBSixJQUFJLFFBbUNmO0FBRUQsSUFBWSxnQkFjWDtBQWRELFdBQVksZ0JBQWdCO0lBQ3hCOzs7O09BSUc7SUFDSCx5Q0FBcUIsQ0FBQTtJQUVyQjs7OztPQUlHO0lBQ0gsNkJBQVMsQ0FBQTtBQUNiLENBQUMsRUFkVyxnQkFBZ0IsZ0NBQWhCLGdCQUFnQixRQWMzQjtBQUVELElBQVksZ0JBeUJYO0FBekJELFdBQVksZ0JBQWdCO0lBQ3hCOztPQUVHO0lBQ0gscUNBQWlCLENBQUE7SUFFakI7O09BRUc7SUFDSCxpQ0FBYSxDQUFBO0lBRWI7O09BRUc7SUFDSCxpQ0FBYSxDQUFBO0lBRWI7O09BRUc7SUFDSCxpQ0FBYSxDQUFBO0lBRWI7O09BRUc7SUFDSCxpQ0FBYSxDQUFBO0FBQ2pCLENBQUMsRUF6QlcsZ0JBQWdCLGdDQUFoQixnQkFBZ0IsUUF5QjNCO0FBd01ELE1BQWEsTUFBTyxTQUFRLHFCQUFTOztJQUMxQixNQUFNLENBQUMsRUFBRSxDQUFDLE9BQW9CO1FBQ2pDLE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBWSxFQUFlLEVBQUUsQ0FBQyxDQUFDLFlBQVksTUFBTSxDQUFDO1FBQ3BFLE9BQU8sT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVnQixjQUFjLENBQVM7SUFDdkIsT0FBTyxDQUFjO0lBQ3JCLE9BQU8sQ0FBYztJQUNyQixPQUFPLENBQVU7SUFDakIsSUFBSSxDQUFPO0lBQ1gsZUFBZSxDQUFVO0lBQ3pCLGdCQUFnQixDQUFVO0lBQzFCLGdCQUFnQixDQUFTO0lBQ3pCLGlCQUFpQixDQUFTO0lBQzFCLGVBQWUsQ0FBVTtJQUN6QixJQUFJLENBQVM7SUFDYixlQUFlLENBQVU7SUFDbEMsV0FBVyxDQUFTO0lBQ3BCLE9BQU8sQ0FBVTtJQUNqQixnQkFBZ0IsQ0FBbUI7SUFDbkMsaUJBQWlCLENBQTBCO0lBQzNDLGlCQUFpQixDQUFTO0lBQzFCLE9BQU8sQ0FBUztJQUNQLGlCQUFpQixDQUFVO0lBQzNCLGlCQUFpQixDQUFTO0lBQzFCLGVBQWUsQ0FBNkI7SUFDNUMsV0FBVyxDQUE2QjtJQUV6RCxZQUFZLE9BQW9CLEVBQUUsVUFBeUIsRUFBRTtRQUN6RCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFZixJQUFJLE9BQU8sQ0FBQyxXQUFXLElBQUksTUFBTSxJQUFJLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN2RCxNQUFNLElBQUksS0FBSyxDQUFDLGtGQUFrRixDQUFDLENBQUM7UUFDeEcsQ0FBQztRQUVELElBQUksQ0FBQyxlQUFlLEdBQUcsT0FBTyxDQUFDLGVBQWUsSUFBSSxFQUFFLENBQUM7UUFDckQsSUFBSSxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQztRQUU3QyxJQUFJLENBQUMsY0FBYyxHQUFHLE9BQU8sQ0FBQyxjQUFjLElBQUksa0JBQWtCLENBQUM7UUFDbkUsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLE9BQU8sSUFBSSxDQUFDLGtDQUFrQyxDQUFDLENBQUMsQ0FBQztRQUN4RixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksR0FBRyxDQUNsQixPQUFPLENBQUMsTUFBTSxFQUFFLE9BQU8sSUFBSTtZQUN2QixvQkFBb0I7WUFDcEIsWUFBWTtZQUNaLGVBQWU7WUFDZixxQ0FBcUM7WUFDckMsc0dBQXNHO1NBQ3pHLENBQ0osQ0FBQztRQUNGLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxPQUFPLElBQUksSUFBSSxDQUFDO1FBQy9DLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQztRQUMvQyxJQUFJLENBQUMsZUFBZSxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsZUFBZSxJQUFJLElBQUksQ0FBQztRQUMvRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUN2RixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsSUFBSSxjQUFjLENBQUM7UUFDM0UsSUFBSSxDQUFDLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsaUJBQWlCLElBQUksSUFBQSx1QkFBZSxFQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZGLElBQUksQ0FBQyxlQUFlLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxlQUFlLElBQUksSUFBSSxDQUFDO1FBQy9ELElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxJQUFJLElBQUksQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxXQUFXLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQztRQUNuRSxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsT0FBTyxJQUFJLEtBQUssQ0FBQztRQUNoRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsSUFBSSxnQkFBZ0IsQ0FBQyxFQUFFLENBQUM7UUFDaEYsSUFBSSxDQUFDLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsaUJBQWlCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0csSUFBSSxDQUFDLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsaUJBQWlCLElBQUksVUFBVSxDQUFDO1FBQ3pFLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUM7UUFDN0MsSUFBSSxDQUFDLGVBQWUsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLGVBQWUsSUFBSSxJQUFJLENBQUM7UUFDL0QsSUFBSSxDQUFDLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsaUJBQWlCLElBQUksSUFBSSxDQUFDO1FBQ25FLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLGlCQUFpQixJQUFJLEdBQUcsQ0FBQztRQUVsRSxPQUFPLENBQUMsVUFBVSxDQUFDLFVBQVUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBRXRELElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUM7WUFDdkcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDNUIsQ0FBQztRQUVELE1BQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNoRixPQUFPLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ2xELE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFFakQsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBRXhCLElBQUksT0FBTyxZQUFZLFlBQUcsQ0FBQyxXQUFXLElBQUksT0FBTyxZQUFZLGVBQU0sQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1lBQ3pGLE9BQU8sQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDdkQsQ0FBQztJQUNMLENBQUM7SUFFZSxhQUFhO1FBQ3pCLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUV0QixLQUFLLE1BQU0sU0FBUyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDOUMsSUFBSSxTQUFTLFlBQVksaUJBQUksRUFBRSxDQUFDO2dCQUM1QixNQUFNLElBQUksS0FBSyxDQUFDLDBDQUEwQyxDQUFDLENBQUM7WUFDaEUsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0lBRU0sVUFBVSxDQUFDLE9BQWU7UUFDN0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVNLFVBQVUsQ0FBQyxPQUFlO1FBQzdCLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFTSxvQkFBb0IsQ0FBQyxXQUF3QjtRQUNoRCxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztRQUMvQixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRU0seUJBQXlCLENBQUMsUUFBMEI7UUFDdkQsTUFBTSxnQkFBZ0IsR0FBRztZQUNyQixDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxFQUFFLHVCQUF1QixJQUFJLENBQUMsT0FBTyxFQUFFO1lBQzVELENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLEVBQUUsNkJBQTZCLElBQUksQ0FBQyxPQUFPLEVBQUU7U0FDM0UsQ0FBQztRQUVGLEtBQUssTUFBTSxlQUFlLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUM7WUFDNUQsSUFBSSxDQUFDO2dCQUNELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQ3hELENBQUM7WUFBQyxNQUFNLENBQUM7Z0JBQ0wsU0FBUztZQUNiLENBQUM7UUFDTCxDQUFDO1FBRUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxFQUFFLDZCQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbkYsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFFBQVEsQ0FBQztRQUNqQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRU0sMEJBQTBCLENBQUMsU0FBa0M7UUFDaEUsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFNBQVMsQ0FBQztRQUNuQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRU0sZ0JBQWdCO1FBQ25CLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRU8sY0FBYztRQUNsQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBRXhFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNaLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUMvQyxDQUFDO1FBRUQsUUFBUSxDQUFDLFVBQVUsQ0FBQyx1QkFBdUIsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFTyxtQkFBbUI7UUFDdkIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsS0FBSyxTQUFTLENBQUM7SUFDMUUsQ0FBQztJQUVPLGNBQWM7UUFDbEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNyQyxXQUFXLEVBQUUsSUFBSTtTQUNwQixDQUFDLENBQUM7UUFFSCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDM0QsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFO2dCQUMvQixJQUFJLEVBQUUsY0FBYztnQkFDcEIsV0FBVyxFQUFFLElBQUk7YUFDcEIsQ0FBQyxDQUFDO1FBQ1AsQ0FBQztRQUVELE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3RFLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRTtnQkFDaEMsSUFBSSxFQUFFLGlCQUFpQjtnQkFDdkIsV0FBVyxFQUFFLElBQUk7YUFDcEIsQ0FBQyxDQUFDO1FBQ1AsQ0FBQztJQUNMLENBQUM7SUFFTyxnQkFBZ0I7UUFDcEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRWhELElBQUksbUJBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUNwQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRTtTQUM3QixDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sWUFBWTtRQUNoQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBc0IsQ0FBQztRQUM1QyxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztRQUNoRCxNQUFNLGtCQUFrQixHQUNwQixXQUFXLEtBQUssZ0NBQWdDO1lBQzVDLENBQUMsQ0FBQyw0REFBNEQ7WUFDOUQsQ0FBQyxDQUFDLHlGQUF5RixDQUFDO1FBRXBHLE1BQU0sTUFBTSxHQUFHO1lBQ1gsR0FBRyxJQUFJLENBQUMsV0FBVztZQUNuQixJQUFJLEVBQUUsSUFBQSxpQkFBUyxFQUEwQixJQUFJLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDO1NBQzNGLENBQUM7UUFFRixPQUFPLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxFQUFFLCtCQUErQixJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hHLENBQUM7SUFFTyxpQkFBaUI7UUFDckIsT0FBTztZQUNILElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNmLFFBQVEsRUFBRTtnQkFDTixPQUFPLEVBQUUsSUFBSSxDQUFDLGVBQWU7Z0JBQzdCLFFBQVEsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO2dCQUMvQixRQUFRLEVBQUUsSUFBSSxDQUFDLGlCQUFpQjtnQkFDaEMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGlCQUFpQjthQUMzQztZQUNELFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztZQUM3QixPQUFPLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1lBQ2pDLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztZQUNyQixPQUFPLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1lBQ2pDLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztZQUNyQixlQUFlLEVBQUUsSUFBSSxDQUFDLGVBQWU7WUFDckMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGlCQUFpQjtZQUN6QyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDZixpQkFBaUIsRUFBRSxJQUFJLENBQUMsaUJBQWlCO1lBQ3pDLFNBQVMsRUFBRTtnQkFDUCxPQUFPLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtnQkFDOUIsT0FBTyxFQUFFLElBQUksQ0FBQyxnQkFBZ0I7Z0JBQzlCLFFBQVEsRUFBRSxJQUFJLENBQUMsaUJBQWlCO2FBQ25DO1lBQ0QsTUFBTSxFQUFFLElBQUksQ0FBQyxlQUFlO1NBQy9CLENBQUM7SUFDTixDQUFDOztBQWxPTCx3QkFtT0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IGF3c2NkaywgY2RrIH0gZnJvbSBcInByb2plblwiO1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSBcInByb2plbi9saWIvY29tcG9uZW50XCI7XG5pbXBvcnQgeyBEZXBlbmRlbmN5VHlwZSB9IGZyb20gXCJwcm9qZW4vbGliL2RlcGVuZGVuY2llc1wiO1xuaW1wb3J0IHsgSmVzdCwgdHlwZSBOb2RlUHJvamVjdCB9IGZyb20gXCJwcm9qZW4vbGliL2phdmFzY3JpcHRcIjtcbmltcG9ydCB7IFRleHRGaWxlIH0gZnJvbSBcInByb2plbi9saWIvdGV4dGZpbGVcIjtcbmltcG9ydCB7IGRlZXBNZXJnZSwgdHNjb25maWdEZXZQYXRoIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmV4cG9ydCBlbnVtIEVudmlyb25tZW50IHtcbiAgICAvKipcbiAgICAgKiBSdW4gdGVzdHMgaW4gVmVyY2VsJ3MgRWRnZSBSdW50aW1lIFZNLlxuICAgICAqXG4gICAgICogQHNlZSBodHRwczovL2VkZ2UtcnVudGltZS52ZXJjZWwuYXBwL3BhY2thZ2VzL3ZtXG4gICAgICovXG4gICAgRURHRV9SVU5USU1FID0gXCJlZGdlLXJ1bnRpbWVcIixcblxuICAgIC8qKlxuICAgICAqIFJ1biB0ZXN0cyBpbiBgaGFwcHktZG9tYCBlbnZpcm9ubWVudC5cbiAgICAgKlxuICAgICAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2NhcHJpY29ybjg2L2hhcHB5LWRvbVxuICAgICAqL1xuICAgIEhBUFBZX0RPTSA9IFwiaGFwcHktZG9tXCIsXG5cbiAgICAvKipcbiAgICAgKiBSdW4gdGVzdHMgaW4gYGpzZG9tYCBlbnZpcm9ubWVudC5cbiAgICAgKlxuICAgICAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2pzZG9tL2pzZG9tXG4gICAgICovXG4gICAgSlNET00gPSBcImpzZG9tXCIsXG5cbiAgICAvKipcbiAgICAgKiBSdW4gdGVzdHMgaW4gYSBOb2RlLmpzIGVudmlyb25tZW50LlxuICAgICAqL1xuICAgIE5PREUgPSBcIm5vZGVcIixcbn1cblxuZXhwb3J0IGVudW0gUG9vbCB7XG4gICAgLyoqXG4gICAgICogUnVuIHRlc3RzIGluIGBub2RlOmNoaWxkX3Byb2Nlc3NgIHVzaW5nIGZvcmsoKVxuICAgICAqXG4gICAgICogVGVzdCBpc29sYXRpb24gKHdoZW4gZW5hYmxlZCkgaXMgZG9uZSBieSBzcGF3bmluZyBhIG5ldyBjaGlsZCBwcm9jZXNzIGZvciBlYWNoIHRlc3QgZmlsZS5cbiAgICAgKlxuICAgICAqIEBzZWUgaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9jaGlsZF9wcm9jZXNzLmh0bWwjY2hpbGRfcHJvY2Vzc2Zvcmttb2R1bGVwYXRoLWFyZ3Mtb3B0aW9uc1xuICAgICAqL1xuICAgIEZPUktTID0gXCJmb3Jrc1wiLFxuXG4gICAgLyoqXG4gICAgICogUnVuIHRlc3RzIGluIGBub2RlOndvcmtlcl90aHJlYWRzYC5cbiAgICAgKlxuICAgICAqIFRlc3QgaXNvbGF0aW9uICh3aGVuIGVuYWJsZWQpIGlzIGRvbmUgYnkgc3Bhd25pbmcgYSBuZXcgdGhyZWFkIGZvciBlYWNoIHRlc3QgZmlsZS5cbiAgICAgKi9cbiAgICBUSFJFQURTID0gXCJ0aHJlYWRzXCIsXG5cbiAgICAvKipcbiAgICAgKiBSdW4gdGVzdHMgaW4gaXNvbGF0ZWQgYG5vZGU6dm1gLlxuICAgICAqXG4gICAgICogVGVzdCBmaWxlcyBhcmUgcnVuIHBhcmFsbGVsIHVzaW5nIGBub2RlOmNoaWxkX3Byb2Nlc3NgIGZvcmsoKVxuICAgICAqXG4gICAgICogVGhpcyBtYWtlcyB0ZXN0cyBydW4gZmFzdGVyLCBidXQgVk0gbW9kdWxlIGlzIHVuc3RhYmxlLiBZb3VyIHRlc3RzIG1pZ2h0IGxlYWsgbWVtb3J5LlxuICAgICAqXG4gICAgICogQHNlZSBodHRwczovL25vZGVqcy5vcmcvYXBpL2NoaWxkX3Byb2Nlc3MuaHRtbCNjaGlsZF9wcm9jZXNzZm9ya21vZHVsZXBhdGgtYXJncy1vcHRpb25zXG4gICAgICovXG4gICAgVk1GT1JLUyA9IFwidm1mb3Jrc1wiLFxuXG4gICAgLyoqXG4gICAgICogUnVuIHRlc3RzIGluIGlzb2xhdGVkIGBub2RlOnZtYC5cbiAgICAgKiBUZXN0IGZpbGVzIGFyZSBydW4gcGFyYWxsZWwgdXNpbmcgYG5vZGU6d29ya2VyX3RocmVhZHNgLlxuICAgICAqXG4gICAgICogVGhpcyBtYWtlcyB0ZXN0cyBydW4gZmFzdGVyLCBidXQgVk0gbW9kdWxlIGlzIHVuc3RhYmxlLiBZb3VyIHRlc3RzIG1pZ2h0IGxlYWsgbWVtb3J5LlxuICAgICAqL1xuICAgIFZNVEhSRUFEUyA9IFwidm10aHJlYWRzXCIsXG59XG5cbmV4cG9ydCBlbnVtIENvdmVyYWdlUHJvdmlkZXIge1xuICAgIC8qKlxuICAgICAqIFByb3ZpZGUgY292ZXJhZ2UgcmVwb3J0IHVzaW5nIGlzdGFuYnVsLlxuICAgICAqXG4gICAgICogQHNlZSBodHRwczovL2lzdGFuYnVsLmpzLm9yZ1xuICAgICAqL1xuICAgIElTVEFOQlVMID0gXCJpc3RhbmJ1bFwiLFxuXG4gICAgLyoqXG4gICAgICogUHJvdmlkZSBjb3ZlcmFnZSByZXBvcnRzIHVzaW5nIHY4LlxuICAgICAqXG4gICAgICogQHNlZSBodHRwczovL3Y4LmRldi9ibG9nL2phdmFzY3JpcHQtY29kZS1jb3ZlcmFnZVxuICAgICAqL1xuICAgIFY4ID0gXCJ2OFwiLFxufVxuXG5leHBvcnQgZW51bSBDb3ZlcmFnZVJlcG9ydGVyIHtcbiAgICAvKipcbiAgICAgKiBQcm92aWRlcyBgY2xvdmVyYCByZXBvcnQuXG4gICAgICovXG4gICAgQ0xPVkVSID0gXCJjbG92ZXJcIixcblxuICAgIC8qKlxuICAgICAqIFByb3ZpZGVzIGBIVE1MYCByZXBvcnQuXG4gICAgICovXG4gICAgSFRNTCA9IFwiaHRtbFwiLFxuXG4gICAgLyoqXG4gICAgICogUHJvdmlkZXMgYEpTT05gIHJlcG9ydC5cbiAgICAgKi9cbiAgICBKU09OID0gXCJqc29uXCIsXG5cbiAgICAvKipcbiAgICAgKiBQcm92aWRlcyBgTENPVmAgcmVwb3J0LlxuICAgICAqL1xuICAgIExDT1YgPSBcImxjb3ZcIixcblxuICAgIC8qKlxuICAgICAqIFByb3ZpZGVzIGB0ZXh0YCByZXBvcnQuXG4gICAgICovXG4gICAgVEVYVCA9IFwidGV4dFwiLFxufVxuXG4vKipcbiAqIFZpdGVzdCBDb25maWcuXG4gKlxuICogQHNlZSBodHRwczovL3ZpdGVzdC5kZXYvY29uZmlnL1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFZpdGVzdENvbmZpZ09wdGlvbnMge1xuICAgIC8qKlxuICAgICAqIEEgbGlzdCBvZiBnbG9iIHBhdHRlcm5zIHRoYXQgbWF0Y2ggeW91ciB0ZXN0IGZpbGVzLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgLSBWaXRlc3QncyBgY29uZmlnRGVmYXVsdHMuaW5jbHVkZWBcbiAgICAgKiBAc2VlIGh0dHBzOi8vdml0ZXN0LmRldi9jb25maWcvI2luY2x1ZGVcbiAgICAgKi9cbiAgICByZWFkb25seSBpbmNsdWRlPzogQXJyYXk8c3RyaW5nPjtcblxuICAgIC8qKlxuICAgICAqIEEgbGlzdCBvZiBnbG9iIHBhdHRlcm5zIHRoYXQgc2hvdWxkIGJlIGV4Y2x1ZGVkIGZyb20geW91ciB0ZXN0IGZpbGVzLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgLSBWaXRlc3QncyBgY29uZmlnRGVmYXVsdHMuZXhjbHVkZWBcbiAgICAgKiBAc2VlIGh0dHBzOi8vdml0ZXN0LmRldi9jb25maWcvI2V4Y2x1ZGVcbiAgICAgKi9cbiAgICByZWFkb25seSBleGNsdWRlPzogQXJyYXk8c3RyaW5nPjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBlbnZpcm9ubWVudCB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgdGVzdGluZy5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IFwibm9kZVwiXG4gICAgICogQHNlZSBodHRwczovL3ZpdGVzdC5kZXYvY29uZmlnLyNlbnZpcm9ubWVudFxuICAgICAqL1xuICAgIHJlYWRvbmx5IGVudmlyb25tZW50PzogRW52aXJvbm1lbnQ7XG5cbiAgICAvKipcbiAgICAgKiBSdW4gdGVzdHMgaW4gYW4gaXNvbGF0ZWQgZW52aXJvbm1lbnQuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdm1UaHJlYWRzIHBvb2wuXG4gICAgICpcbiAgICAgKiBEaXNhYmxpbmcgdGhpcyBvcHRpb24gbWlnaHQgaW1wcm92ZSBwZXJmb3JtYW5jZSBpZiB5b3VyIGNvZGUgZG9lc24ndCByZWx5IG9uIHNpZGUgZWZmZWN0cy5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKiBAc2VlIGh0dHBzOi8vdml0ZXN0LmRldi9jb25maWcvI2lzb2xhdGVcbiAgICAgKi9cbiAgICByZWFkb25seSBpc29sYXRlPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIFBvb2wgdXNlZCB0byBydW4gdGVzdHMgaW4uXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBcImZvcmtzXCJcbiAgICAgKiBAc2VlIGh0dHBzOi8vdml0ZXN0LmRldi9jb25maWcvI3Bvb2xcbiAgICAgKi9cbiAgICByZWFkb25seSBwb29sPzogUG9vbDtcblxuICAgIC8qKlxuICAgICAqIFJlZ2lzdGVyIGFwaXMgZ2xvYmFsbHkuIElmIHlvdSBwcmVmZXIgdG8gdXNlIHRoZSBBUElzIGdsb2JhbGx5IGxpa2UgSmVzdCwgc2V0IHRvIGB0cnVlYC5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICogQHNlZSBodHRwczovL3ZpdGVzdC5kZXYvY29uZmlnLyNnbG9iYWxzXG4gICAgICovXG4gICAgcmVhZG9ubHkgZ2xvYmFscz86IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBDb3ZlcmFnZSBlbmFibGVkLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqIEBzZWUgaHR0cHM6Ly92aXRlc3QuZGV2L2NvbmZpZy8jY292ZXJhZ2UtZW5hYmxlZFxuICAgICAqL1xuICAgIHJlYWRvbmx5IGNvdmVyYWdlRW5hYmxlZD86IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBDb3ZlcmFnZSBwcm92aWRlciB0eXBlLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgXCJ2OFwiXG4gICAgICogQHNlZSBodHRwczovL3ZpdGVzdC5kZXYvY29uZmlnLyNjb3ZlcmFnZS1wcm92aWRlclxuICAgICAqL1xuICAgIHJlYWRvbmx5IGNvdmVyYWdlUHJvdmlkZXI/OiBDb3ZlcmFnZVByb3ZpZGVyO1xuXG4gICAgLyoqXG4gICAgICogQ292ZXJhZ2UgcmVwb3J0ZXJzLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgJ1tcInRleHRcIiwgXCJsY292XCJdJ1xuICAgICAqIEBzZWUgaHR0cHM6Ly92aXRlc3QuZGV2L2NvbmZpZy8jY292ZXJhZ2UtcmVwb3J0ZXJcbiAgICAgKi9cbiAgICByZWFkb25seSBjb3ZlcmFnZVJlcG9ydGVycz86IEFycmF5PENvdmVyYWdlUmVwb3J0ZXI+O1xuXG4gICAgLyoqXG4gICAgICogQ292ZXJhZ2Ugb3V0cHV0IGRpcmVjdG9yeS5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IFwiY292ZXJhZ2VcIlxuICAgICAqL1xuICAgIHJlYWRvbmx5IGNvdmVyYWdlRGlyZWN0b3J5Pzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogRW5hYmxlIHR5cGVjaGVja2luZyBhbG9uZ3NpZGUgeW91ciByZWd1bGFyIHRlc3RzLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgdHJ1ZSAoZm9yIFR5cGVTY3JpcHQgcHJvamVjdHMpXG4gICAgICogQHNlZSBodHRwczovL3ZpdGVzdC5kZXYvY29uZmlnLyN0eXBlY2hlY2stZW5hYmxlZFxuICAgICAqL1xuICAgIHJlYWRvbmx5IHR5cGVjaGVja0VuYWJsZWQ/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogVG9vbCB0byB1c2UgZm9yIHR5cGUgY2hlY2tpbmcuIENoZWNrZXIgc2hvdWxkIGltcGxlbWVudCB0aGUgc2FtZSBvdXRwdXQgZm9ybWF0IGFzIGB0c2NgLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgXCJ0c2MgLS1ub0VtaXRcIlxuICAgICAqIEBzZWUgaHR0cHM6Ly92aXRlc3QuZGV2L2NvbmZpZy8jdHlwZWNoZWNrLWNoZWNrZXJcbiAgICAgKi9cbiAgICByZWFkb25seSB0eXBlY2hlY2tDaGVja2VyPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogUGF0aCB0byBjdXN0b20gdHNjb25maWcsIHJlbGF0aXZlIHRvIHRoZSBwcm9qZWN0IHJvb3QuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAtIHRoZSBwcm9qZWN0J3MgZGV2ZWxvcG1lbnQgdHNjb25maWcgKGUuZy4gXCJ0ZXN0L3RzY29uZmlnLmpzb25cIilcbiAgICAgKiBAc2VlIGh0dHBzOi8vdml0ZXN0LmRldi9jb25maWcvI3R5cGVjaGVjay10c2NvbmZpZ1xuICAgICAqL1xuICAgIHJlYWRvbmx5IHR5cGVjaGVja1RzY29uZmlnPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVml0ZXN0IHdpbGwgbm90IGZhaWwsIGlmIG5vIHRlc3RzIHdpbGwgYmUgZm91bmQuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICogQHNlZSBodHRwczovL3ZpdGVzdC5kZXYvY29uZmlnLyNwYXNzd2l0aG5vdGVzdHNcbiAgICAgKi9cbiAgICByZWFkb25seSBwYXNzV2l0aE5vVGVzdHM/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogU3RvcCBydW5uaW5nIHRlc3RzIGFmdGVyIGNlcnRhaW4gbnVtYmVyIG9mIGZhaWx1cmVzLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqIEBzZWUgaHR0cHM6Ly92aXRlc3QuZGV2L2NvbmZpZy8jYmFpbFxuICAgICAqL1xuICAgIHJlYWRvbmx5IGJhaWw/OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGUgc25hcHNob3QgZmlsZXMuIFRoaXMgd2lsbCB1cGRhdGUgYWxsIGNoYW5nZWQgc25hcHNob3RzIGFuZCBkZWxldGUgb2Jzb2xldGUgb25lcy5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKiBAc2VlIGh0dHBzOi8vdml0ZXN0LmRldi9ndWlkZS9zbmFwc2hvdC5odG1sI3VwZGF0aW5nLXNuYXBzaG90c1xuICAgICAqL1xuICAgIHJlYWRvbmx5IHVwZGF0ZVNuYXBzaG90cz86IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBBbHdheXMgcHJpbnQgY29uc29sZSB0cmFjZXMgd2hlbiBjYWxsaW5nIGFueSBjb25zb2xlIG1ldGhvZC5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKiBAc2VlIGh0dHBzOi8vdml0ZXN0LmRldi9jb25maWcvI2NvbnNvbGV0cmFjZVxuICAgICAqL1xuICAgIHJlYWRvbmx5IHByaW50Q29uc29sZVRyYWNlPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGFmdGVyIHdoaWNoIGEgdGVzdCBvciBzdWl0ZSBpcyBjb25zaWRlcmVkIHNsb3cuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAzMDBcbiAgICAgKiBAc2VlIGh0dHBzOi8vdml0ZXN0LmRldi9jb25maWcvI3Nsb3d0ZXN0dGhyZXNob2xkXG4gICAgICovXG4gICAgcmVhZG9ubHkgc2xvd1Rlc3RUaHJlc2hvbGQ/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVml0ZXN0T3B0aW9ucyB7XG4gICAgLyoqXG4gICAgICogQ29uZmlnIGZpbGUgcGF0aC5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IFwidml0ZXN0LmNvbmZpZy50c1wiXG4gICAgICovXG4gICAgcmVhZG9ubHkgY29uZmlnRmlsZVBhdGg/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBJbml0aWFsIGNvbmZpZyBvcHRpb25zLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IGNvbmZpZz86IFZpdGVzdENvbmZpZ09wdGlvbnM7XG5cbiAgICAvKipcbiAgICAgKiBWaXRlc3QgdmVyc2lvbi5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IFwiXjRcIlxuICAgICAqL1xuICAgIHJlYWRvbmx5IHZpdGVzdFZlcnNpb24/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBBZGRpdGlvbmFsIGB0ZXN0YCBvcHRpb25zIGZvciBzZXR0aW5ncyB0aGF0IGBjb25maWdgIGRvZXNuJ3QgY292ZXIsIHN1Y2ggYXMgYHNldHVwRmlsZXNgIG9yIGBleHBlY3RgLlxuICAgICAqXG4gICAgICogRGVlcC1tZXJnZWQgb3ZlciB0aGUgb3B0aW9ucyBnZW5lcmF0ZWQgZnJvbSBgY29uZmlnYDogb2JqZWN0cyBhcmUgbWVyZ2VkLCBvdGhlciB2YWx1ZXMgKGluY2x1ZGluZ1xuICAgICAqIGFycmF5cykgcmVwbGFjZSB0aGUgZ2VuZXJhdGVkIHZhbHVlLiBWYWx1ZXMgYXJlIHJlbmRlcmVkIGFzIEpTT04sIHNvIHRoZXkgbXVzdCBiZSBKU09OLXNlcmlhbGl6YWJsZVxuICAgICAqIChubyBmdW5jdGlvbnMgb3IgcmVndWxhciBleHByZXNzaW9ucykuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZSB7IHNldHVwRmlsZXM6IFtcInRlc3Qvc2V0dXAudHNcIl0sIGV4cGVjdDogeyByZXF1aXJlQXNzZXJ0aW9uczogdHJ1ZSB9IH1cbiAgICAgKiBAZGVmYXVsdCAtIG5vIGFkZGl0aW9uYWwgdGVzdCBvcHRpb25zXG4gICAgICogQHNlZSBodHRwczovL3ZpdGVzdC5kZXYvY29uZmlnL1xuICAgICAqL1xuICAgIHJlYWRvbmx5IGV4dHJhVGVzdENvbmZpZz86IHsgW2tleTogc3RyaW5nXTogdW5rbm93biB9O1xuXG4gICAgLyoqXG4gICAgICogQWRkaXRpb25hbCB0b3AtbGV2ZWwgY29uZmlnIG9wdGlvbnMsIG5leHQgdG8gYHRlc3RgLCBzdWNoIGFzIGByZXNvbHZlYC5cbiAgICAgKlxuICAgICAqIFZhbHVlcyBhcmUgcmVuZGVyZWQgYXMgSlNPTiwgc28gdGhleSBtdXN0IGJlIEpTT04tc2VyaWFsaXphYmxlIChubyBmdW5jdGlvbnMgb3IgcmVndWxhciBleHByZXNzaW9ucyxcbiAgICAgKiB3aGljaCBydWxlcyBvdXQgcGx1Z2lucykuIFVzZSBgZXh0cmFUZXN0Q29uZmlnYCBmb3IgYHRlc3RgIG9wdGlvbnMuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZSB7IHJlc29sdmU6IHsgYWxpYXM6IHsgXCJAXCI6IFwiL3NyY1wiIH0gfSB9XG4gICAgICogQGRlZmF1bHQgLSBubyBhZGRpdGlvbmFsIHRvcC1sZXZlbCBvcHRpb25zXG4gICAgICogQHNlZSBodHRwczovL3ZpdGVzdC5kZXYvY29uZmlnL1xuICAgICAqL1xuICAgIHJlYWRvbmx5IGV4dHJhQ29uZmlnPzogeyBba2V5OiBzdHJpbmddOiB1bmtub3duIH07XG59XG5cbmV4cG9ydCBjbGFzcyBWaXRlc3QgZXh0ZW5kcyBDb21wb25lbnQge1xuICAgIHB1YmxpYyBzdGF0aWMgb2YocHJvamVjdDogTm9kZVByb2plY3QpOiBWaXRlc3QgfCB1bmRlZmluZWQge1xuICAgICAgICBjb25zdCBpc1ZpdGVzdCA9IChjOiBDb21wb25lbnQpOiBjIGlzIFZpdGVzdCA9PiBjIGluc3RhbmNlb2YgVml0ZXN0O1xuICAgICAgICByZXR1cm4gcHJvamVjdC5jb21wb25lbnRzLmZpbmQoaXNWaXRlc3QpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnRmlsZVBhdGg6IHN0cmluZztcbiAgICBwcml2YXRlIHJlYWRvbmx5IGluY2x1ZGU6IFNldDxzdHJpbmc+O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZXhjbHVkZTogU2V0PHN0cmluZz47XG4gICAgcHJpdmF0ZSByZWFkb25seSBpc29sYXRlOiBib29sZWFuO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcG9vbDogUG9vbDtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvdmVyYWdlRW5hYmxlZDogYm9vbGVhbjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHR5cGVjaGVja0VuYWJsZWQ6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSByZWFkb25seSB0eXBlY2hlY2tDaGVja2VyOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSByZWFkb25seSB0eXBlY2hlY2tUc2NvbmZpZzogc3RyaW5nO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcGFzc1dpdGhOb1Rlc3RzOiBib29sZWFuO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgYmFpbDogbnVtYmVyO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdXBkYXRlU25hcHNob3RzOiBib29sZWFuO1xuICAgIHByaXZhdGUgZW52aXJvbm1lbnQ6IHN0cmluZztcbiAgICBwcml2YXRlIGdsb2JhbHM6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBjb3ZlcmFnZVByb3ZpZGVyOiBDb3ZlcmFnZVByb3ZpZGVyO1xuICAgIHByaXZhdGUgY292ZXJhZ2VSZXBvcnRlcnM6IEFycmF5PENvdmVyYWdlUmVwb3J0ZXI+O1xuICAgIHByaXZhdGUgY292ZXJhZ2VEaXJlY3Rvcnk6IHN0cmluZztcbiAgICBwcml2YXRlIHZlcnNpb246IHN0cmluZztcbiAgICBwcml2YXRlIHJlYWRvbmx5IHByaW50Q29uc29sZVRyYWNlOiBib29sZWFuO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgc2xvd1Rlc3RUaHJlc2hvbGQ6IG51bWJlcjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGV4dHJhVGVzdENvbmZpZzogeyBba2V5OiBzdHJpbmddOiB1bmtub3duIH07XG4gICAgcHJpdmF0ZSByZWFkb25seSBleHRyYUNvbmZpZzogeyBba2V5OiBzdHJpbmddOiB1bmtub3duIH07XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9qZWN0OiBOb2RlUHJvamVjdCwgb3B0aW9uczogVml0ZXN0T3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHN1cGVyKHByb2plY3QpO1xuXG4gICAgICAgIGlmIChvcHRpb25zLmV4dHJhQ29uZmlnICYmIFwidGVzdFwiIGluIG9wdGlvbnMuZXh0cmFDb25maWcpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInZpdGVzdCBleHRyYUNvbmZpZyBtdXN0IG5vdCBjb250YWluIGB0ZXN0YCwgdXNlIGV4dHJhVGVzdENvbmZpZyBmb3IgdGVzdCBvcHRpb25zXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5leHRyYVRlc3RDb25maWcgPSBvcHRpb25zLmV4dHJhVGVzdENvbmZpZyA/PyB7fTtcbiAgICAgICAgdGhpcy5leHRyYUNvbmZpZyA9IG9wdGlvbnMuZXh0cmFDb25maWcgPz8ge307XG5cbiAgICAgICAgdGhpcy5jb25maWdGaWxlUGF0aCA9IG9wdGlvbnMuY29uZmlnRmlsZVBhdGggPz8gXCJ2aXRlc3QuY29uZmlnLnRzXCI7XG4gICAgICAgIHRoaXMuaW5jbHVkZSA9IG5ldyBTZXQob3B0aW9ucy5jb25maWc/LmluY2x1ZGUgPz8gW1wiKiovKi57dGVzdCxzcGVjfS4/KGN8bSlbanRdcz8oeClcIl0pO1xuICAgICAgICB0aGlzLmV4Y2x1ZGUgPSBuZXcgU2V0KFxuICAgICAgICAgICAgb3B0aW9ucy5jb25maWc/LmV4Y2x1ZGUgPz8gW1xuICAgICAgICAgICAgICAgIFwiKiovbm9kZV9tb2R1bGVzLyoqXCIsXG4gICAgICAgICAgICAgICAgXCIqKi9kaXN0LyoqXCIsXG4gICAgICAgICAgICAgICAgXCIqKi9jeXByZXNzLyoqXCIsXG4gICAgICAgICAgICAgICAgXCIqKi8ue2lkZWEsZ2l0LGNhY2hlLG91dHB1dCx0ZW1wfS8qKlwiLFxuICAgICAgICAgICAgICAgIFwiKiove2thcm1hLHJvbGx1cCx3ZWJwYWNrLHZpdGUsdml0ZXN0LGplc3QsYXZhLGJhYmVsLG55YyxjeXByZXNzLHRzdXAsYnVpbGQsZXNsaW50LHByZXR0aWVyfS5jb25maWcuKlwiLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5pc29sYXRlID0gb3B0aW9ucy5jb25maWc/Lmlzb2xhdGUgPz8gdHJ1ZTtcbiAgICAgICAgdGhpcy5wb29sID0gb3B0aW9ucy5jb25maWc/LnBvb2wgPz8gUG9vbC5GT1JLUztcbiAgICAgICAgdGhpcy5jb3ZlcmFnZUVuYWJsZWQgPSBvcHRpb25zLmNvbmZpZz8uY292ZXJhZ2VFbmFibGVkID8/IHRydWU7XG4gICAgICAgIHRoaXMudHlwZWNoZWNrRW5hYmxlZCA9IG9wdGlvbnMuY29uZmlnPy50eXBlY2hlY2tFbmFibGVkID8/IHRoaXMuaXNUeXBlc2NyaXB0UHJvamVjdCgpO1xuICAgICAgICB0aGlzLnR5cGVjaGVja0NoZWNrZXIgPSBvcHRpb25zLmNvbmZpZz8udHlwZWNoZWNrQ2hlY2tlciA/PyBcInRzYyAtLW5vRW1pdFwiO1xuICAgICAgICB0aGlzLnR5cGVjaGVja1RzY29uZmlnID0gb3B0aW9ucy5jb25maWc/LnR5cGVjaGVja1RzY29uZmlnID8/IHRzY29uZmlnRGV2UGF0aChwcm9qZWN0KTtcbiAgICAgICAgdGhpcy5wYXNzV2l0aE5vVGVzdHMgPSBvcHRpb25zLmNvbmZpZz8ucGFzc1dpdGhOb1Rlc3RzID8/IHRydWU7XG4gICAgICAgIHRoaXMuYmFpbCA9IG9wdGlvbnMuY29uZmlnPy5iYWlsID8/IDA7XG4gICAgICAgIHRoaXMuZW52aXJvbm1lbnQgPSBvcHRpb25zLmNvbmZpZz8uZW52aXJvbm1lbnQgPz8gRW52aXJvbm1lbnQuTk9ERTtcbiAgICAgICAgdGhpcy5nbG9iYWxzID0gb3B0aW9ucy5jb25maWc/Lmdsb2JhbHMgPz8gZmFsc2U7XG4gICAgICAgIHRoaXMuY292ZXJhZ2VQcm92aWRlciA9IG9wdGlvbnMuY29uZmlnPy5jb3ZlcmFnZVByb3ZpZGVyID8/IENvdmVyYWdlUHJvdmlkZXIuVjg7XG4gICAgICAgIHRoaXMuY292ZXJhZ2VSZXBvcnRlcnMgPSBvcHRpb25zLmNvbmZpZz8uY292ZXJhZ2VSZXBvcnRlcnMgPz8gW0NvdmVyYWdlUmVwb3J0ZXIuVEVYVCwgQ292ZXJhZ2VSZXBvcnRlci5MQ09WXTtcbiAgICAgICAgdGhpcy5jb3ZlcmFnZURpcmVjdG9yeSA9IG9wdGlvbnMuY29uZmlnPy5jb3ZlcmFnZURpcmVjdG9yeSA/PyBcImNvdmVyYWdlXCI7XG4gICAgICAgIHRoaXMudmVyc2lvbiA9IG9wdGlvbnMudml0ZXN0VmVyc2lvbiA/PyBcIl40XCI7XG4gICAgICAgIHRoaXMudXBkYXRlU25hcHNob3RzID0gb3B0aW9ucy5jb25maWc/LnVwZGF0ZVNuYXBzaG90cyA/PyB0cnVlO1xuICAgICAgICB0aGlzLnByaW50Q29uc29sZVRyYWNlID0gb3B0aW9ucy5jb25maWc/LnByaW50Q29uc29sZVRyYWNlID8/IHRydWU7XG4gICAgICAgIHRoaXMuc2xvd1Rlc3RUaHJlc2hvbGQgPSBvcHRpb25zLmNvbmZpZz8uc2xvd1Rlc3RUaHJlc2hvbGQgPz8gMzAwO1xuXG4gICAgICAgIHByb2plY3QuYWRkRGV2RGVwcyhgdml0ZXN0QCR7dGhpcy52ZXJzaW9ufWApO1xuICAgICAgICB0aGlzLmNvbmZpZ3VyZUNvdmVyYWdlUHJvdmlkZXIodGhpcy5jb3ZlcmFnZVByb3ZpZGVyKTtcblxuICAgICAgICBpZiAodGhpcy5nbG9iYWxzICYmIHRoaXMuaXNUeXBlc2NyaXB0UHJvamVjdCgpICYmIHRoaXMucHJvamVjdC50cnlGaW5kT2JqZWN0RmlsZSh0aGlzLnR5cGVjaGVja1RzY29uZmlnKSkge1xuICAgICAgICAgICAgdGhpcy5jb25maWd1cmVHbG9iYWxzKCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb3ZlcmFnZURpcmVjdG9yeVBhdGggPSBwYXRoLnBvc2l4LmpvaW4oXCIvXCIsIHRoaXMuY292ZXJhZ2VEaXJlY3RvcnksIFwiL1wiKTtcbiAgICAgICAgcHJvamVjdC5ucG1pZ25vcmU/LmV4Y2x1ZGUoY292ZXJhZ2VEaXJlY3RvcnlQYXRoKTtcbiAgICAgICAgcHJvamVjdC5naXRpZ25vcmUuZXhjbHVkZShjb3ZlcmFnZURpcmVjdG9yeVBhdGgpO1xuXG4gICAgICAgIHRoaXMuYWRkVGVzdENvbW1hbmQoKTtcbiAgICAgICAgdGhpcy5zeW50aGVzaXplQ29uZmlnKCk7XG5cbiAgICAgICAgaWYgKHByb2plY3QgaW5zdGFuY2VvZiBjZGsuSnNpaVByb2plY3QgfHwgcHJvamVjdCBpbnN0YW5jZW9mIGF3c2Nkay5Bd3NDZGtDb25zdHJ1Y3RMaWJyYXJ5KSB7XG4gICAgICAgICAgICBwcm9qZWN0Lm5wbWlnbm9yZT8uYWRkUGF0dGVybnMoXCJ2aXRlc3QuY29uZmlnLnRzXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIHByZVN5bnRoZXNpemUoKSB7XG4gICAgICAgIHN1cGVyLnByZVN5bnRoZXNpemUoKTtcblxuICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiB0aGlzLnByb2plY3QuY29tcG9uZW50cykge1xuICAgICAgICAgICAgaWYgKGNvbXBvbmVudCBpbnN0YW5jZW9mIEplc3QpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ2aXRlc3QgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCBqZXN0XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEluY2x1ZGUocGF0dGVybjogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW5jbHVkZS5hZGQocGF0dGVybik7XG4gICAgICAgIHRoaXMuc3ludGhlc2l6ZUNvbmZpZygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRFeGNsdWRlKHBhdHRlcm46IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLmV4Y2x1ZGUuYWRkKHBhdHRlcm4pO1xuICAgICAgICB0aGlzLnN5bnRoZXNpemVDb25maWcoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY29uZmlndXJlRW52aXJvbm1lbnQoZW52aXJvbm1lbnQ6IEVudmlyb25tZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMuZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudDtcbiAgICAgICAgdGhpcy5zeW50aGVzaXplQ29uZmlnKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNvbmZpZ3VyZUNvdmVyYWdlUHJvdmlkZXIocHJvdmlkZXI6IENvdmVyYWdlUHJvdmlkZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcHJvdmlkZXJQYWNrYWdlcyA9IHtcbiAgICAgICAgICAgIFtDb3ZlcmFnZVByb3ZpZGVyLlY4XTogYEB2aXRlc3QvY292ZXJhZ2UtdjhAJHt0aGlzLnZlcnNpb259YCxcbiAgICAgICAgICAgIFtDb3ZlcmFnZVByb3ZpZGVyLklTVEFOQlVMXTogYEB2aXRlc3QvY292ZXJhZ2UtaXN0YW5idWxAJHt0aGlzLnZlcnNpb259YCxcbiAgICAgICAgfTtcblxuICAgICAgICBmb3IgKGNvbnN0IHByb3ZpZGVyUGFja2FnZSBvZiBPYmplY3QudmFsdWVzKHByb3ZpZGVyUGFja2FnZXMpKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvamVjdC5kZXBzLnJlbW92ZURlcGVuZGVuY3kocHJvdmlkZXJQYWNrYWdlKTtcbiAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICAgIC8vIGlnbm9yZVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wcm9qZWN0LmRlcHMuYWRkRGVwZW5kZW5jeShwcm92aWRlclBhY2thZ2VzW3Byb3ZpZGVyXSwgRGVwZW5kZW5jeVR5cGUuREVWRU5WKTtcbiAgICAgICAgdGhpcy5jb3ZlcmFnZVByb3ZpZGVyID0gcHJvdmlkZXI7XG4gICAgICAgIHRoaXMuc3ludGhlc2l6ZUNvbmZpZygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb25maWd1cmVDb3ZlcmFnZVJlcG9ydGVycyhyZXBvcnRlcnM6IEFycmF5PENvdmVyYWdlUmVwb3J0ZXI+KTogdm9pZCB7XG4gICAgICAgIHRoaXMuY292ZXJhZ2VSZXBvcnRlcnMgPSByZXBvcnRlcnM7XG4gICAgICAgIHRoaXMuc3ludGhlc2l6ZUNvbmZpZygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb25maWd1cmVHbG9iYWxzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnVwZGF0ZVRzQ29uZmlnKCk7XG4gICAgICAgIHRoaXMuc3ludGhlc2l6ZUNvbmZpZygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlVHNDb25maWcoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRzY29uZmlnID0gdGhpcy5wcm9qZWN0LnRyeUZpbmRPYmplY3RGaWxlKHRoaXMudHlwZWNoZWNrVHNjb25maWcpO1xuXG4gICAgICAgIGlmICghdHNjb25maWcpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInVuYWJsZSB0byBmaW5kIHRzY29uZmlnXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgdHNjb25maWcuYWRkVG9BcnJheShcImNvbXBpbGVyT3B0aW9ucy50eXBlc1wiLCBcInZpdGVzdC9nbG9iYWxzXCIpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNUeXBlc2NyaXB0UHJvamVjdCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvamVjdC5kZXBzLnRyeUdldERlcGVuZGVuY3koXCJ0eXBlc2NyaXB0XCIpICE9PSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRUZXN0Q29tbWFuZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wcm9qZWN0LnRlc3RUYXNrLmV4ZWMoXCJ2aXRlc3QgcnVuXCIsIHtcbiAgICAgICAgICAgIHJlY2VpdmVBcmdzOiB0cnVlLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB0ZXN0V2F0Y2ggPSB0aGlzLnByb2plY3QudGFza3MudHJ5RmluZChcInRlc3Q6d2F0Y2hcIik7XG4gICAgICAgIGlmICghdGVzdFdhdGNoKSB7XG4gICAgICAgICAgICB0aGlzLnByb2plY3QuYWRkVGFzayhcInRlc3Q6d2F0Y2hcIiwge1xuICAgICAgICAgICAgICAgIGV4ZWM6IFwidml0ZXN0IHdhdGNoXCIsXG4gICAgICAgICAgICAgICAgcmVjZWl2ZUFyZ3M6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRlc3RVcGRhdGVTbmFwc2hvdHMgPSB0aGlzLnByb2plY3QudGFza3MudHJ5RmluZChcInRlc3Q6dXBkYXRlXCIpO1xuICAgICAgICBpZiAoIXRlc3RVcGRhdGVTbmFwc2hvdHMpIHtcbiAgICAgICAgICAgIHRoaXMucHJvamVjdC5hZGRUYXNrKFwidGVzdDp1cGRhdGVcIiwge1xuICAgICAgICAgICAgICAgIGV4ZWM6IFwidml0ZXN0IC0tdXBkYXRlXCIsXG4gICAgICAgICAgICAgICAgcmVjZWl2ZUFyZ3M6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc3ludGhlc2l6ZUNvbmZpZygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wcm9qZWN0LnRyeVJlbW92ZUZpbGUodGhpcy5jb25maWdGaWxlUGF0aCk7XG5cbiAgICAgICAgbmV3IFRleHRGaWxlKHRoaXMsIHRoaXMuY29uZmlnRmlsZVBhdGgsIHtcbiAgICAgICAgICAgIGxpbmVzOiB0aGlzLnJlbmRlckNvbmZpZygpLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbmRlckNvbmZpZygpOiBBcnJheTxzdHJpbmc+IHtcbiAgICAgICAgY29uc3QgcHJvamVjdCA9IHRoaXMucHJvamVjdCBhcyBOb2RlUHJvamVjdDtcbiAgICAgICAgY29uc3QgcGFja2FnZU5hbWUgPSBwcm9qZWN0LnBhY2thZ2UucGFja2FnZU5hbWU7XG4gICAgICAgIGNvbnN0IGRlZmluZUNvbmZpZ0ltcG9ydCA9XG4gICAgICAgICAgICBwYWNrYWdlTmFtZSA9PT0gXCJAbmlrb3ZpcnRhbGEvcHJvamVuLWNvbnN0cnVjdHNcIlxuICAgICAgICAgICAgICAgID8gJ2ltcG9ydCB7IGRlZmluZUNvbmZpZyB9IGZyb20gXCIuL2xpYi92aXRlc3QtZGVmaW5lLWNvbmZpZ1wiOydcbiAgICAgICAgICAgICAgICA6ICdpbXBvcnQgeyBkZWZpbmVDb25maWcgfSBmcm9tIFwiQG5pa292aXJ0YWxhL3Byb2plbi1jb25zdHJ1Y3RzL2xpYi92aXRlc3QtZGVmaW5lLWNvbmZpZ1wiOyc7XG5cbiAgICAgICAgY29uc3QgY29uZmlnID0ge1xuICAgICAgICAgICAgLi4udGhpcy5leHRyYUNvbmZpZyxcbiAgICAgICAgICAgIHRlc3Q6IGRlZXBNZXJnZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4odGhpcy5yZW5kZXJUZXN0T3B0aW9ucygpLCB0aGlzLmV4dHJhVGVzdENvbmZpZyksXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIFtkZWZpbmVDb25maWdJbXBvcnQsIFwiXCIsIGBleHBvcnQgZGVmYXVsdCBkZWZpbmVDb25maWcoJHtKU09OLnN0cmluZ2lmeShjb25maWcsIG51bGwsIDIpfSk7YF07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW5kZXJUZXN0T3B0aW9ucygpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBiYWlsOiB0aGlzLmJhaWwsXG4gICAgICAgICAgICBjb3ZlcmFnZToge1xuICAgICAgICAgICAgICAgIGVuYWJsZWQ6IHRoaXMuY292ZXJhZ2VFbmFibGVkLFxuICAgICAgICAgICAgICAgIHByb3ZpZGVyOiB0aGlzLmNvdmVyYWdlUHJvdmlkZXIsXG4gICAgICAgICAgICAgICAgcmVwb3J0ZXI6IHRoaXMuY292ZXJhZ2VSZXBvcnRlcnMsXG4gICAgICAgICAgICAgICAgcmVwb3J0c0RpcmVjdG9yeTogdGhpcy5jb3ZlcmFnZURpcmVjdG9yeSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbnZpcm9ubWVudDogdGhpcy5lbnZpcm9ubWVudCxcbiAgICAgICAgICAgIGV4Y2x1ZGU6IEFycmF5LmZyb20odGhpcy5leGNsdWRlKSxcbiAgICAgICAgICAgIGdsb2JhbHM6IHRoaXMuZ2xvYmFscyxcbiAgICAgICAgICAgIGluY2x1ZGU6IEFycmF5LmZyb20odGhpcy5pbmNsdWRlKSxcbiAgICAgICAgICAgIGlzb2xhdGU6IHRoaXMuaXNvbGF0ZSxcbiAgICAgICAgICAgIHBhc3NXaXRoTm9UZXN0czogdGhpcy5wYXNzV2l0aE5vVGVzdHMsXG4gICAgICAgICAgICBwcmludENvbnNvbGVUcmFjZTogdGhpcy5wcmludENvbnNvbGVUcmFjZSxcbiAgICAgICAgICAgIHBvb2w6IHRoaXMucG9vbCxcbiAgICAgICAgICAgIHNsb3dUZXN0VGhyZXNob2xkOiB0aGlzLnNsb3dUZXN0VGhyZXNob2xkLFxuICAgICAgICAgICAgdHlwZWNoZWNrOiB7XG4gICAgICAgICAgICAgICAgZW5hYmxlZDogdGhpcy50eXBlY2hlY2tFbmFibGVkLFxuICAgICAgICAgICAgICAgIGNoZWNrZXI6IHRoaXMudHlwZWNoZWNrQ2hlY2tlcixcbiAgICAgICAgICAgICAgICB0c2NvbmZpZzogdGhpcy50eXBlY2hlY2tUc2NvbmZpZyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1cGRhdGU6IHRoaXMudXBkYXRlU25hcHNob3RzLFxuICAgICAgICB9O1xuICAgIH1cbn1cbiJdfQ==
|
package/lib/project-generator.js
CHANGED
|
@@ -428,7 +428,7 @@ class TypeScriptClassRenderer {
|
|
|
428
428
|
*/
|
|
429
429
|
class ProjectGenerator extends projen.Component {
|
|
430
430
|
options;
|
|
431
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@nikovirtala/projen-constructs.ProjectGenerator", version: "0.3.
|
|
431
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@nikovirtala/projen-constructs.ProjectGenerator", version: "0.3.79" };
|
|
432
432
|
renderer;
|
|
433
433
|
static enumGenerated = false;
|
|
434
434
|
/**
|
|
@@ -15,7 +15,7 @@ const utils_1 = require("../utils");
|
|
|
15
15
|
* Extends Projen's base class with opinionated defaults and automatic component setup.
|
|
16
16
|
*/
|
|
17
17
|
class AwsCdkConstructLibraryProject extends projen_1.awscdk.AwsCdkConstructLibrary {
|
|
18
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@nikovirtala/projen-constructs.AwsCdkConstructLibraryProject", version: "0.3.
|
|
18
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@nikovirtala/projen-constructs.AwsCdkConstructLibraryProject", version: "0.3.79" };
|
|
19
19
|
/**
|
|
20
20
|
* @param options - Project configuration
|
|
21
21
|
*/
|
|
@@ -15,7 +15,7 @@ const utils_1 = require("../utils");
|
|
|
15
15
|
* Extends Projen's base class with opinionated defaults and automatic component setup.
|
|
16
16
|
*/
|
|
17
17
|
class AwsCdkTypeScriptAppProject extends projen_1.awscdk.AwsCdkTypeScriptApp {
|
|
18
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@nikovirtala/projen-constructs.AwsCdkTypeScriptAppProject", version: "0.3.
|
|
18
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@nikovirtala/projen-constructs.AwsCdkTypeScriptAppProject", version: "0.3.79" };
|
|
19
19
|
/**
|
|
20
20
|
* @param options - Project configuration
|
|
21
21
|
*/
|
|
@@ -16,7 +16,7 @@ const utils_1 = require("../utils");
|
|
|
16
16
|
* Extends Projen's base class with opinionated defaults and automatic component setup.
|
|
17
17
|
*/
|
|
18
18
|
class JsiiProject extends projen_1.cdk.JsiiProject {
|
|
19
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@nikovirtala/projen-constructs.JsiiProject", version: "0.3.
|
|
19
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@nikovirtala/projen-constructs.JsiiProject", version: "0.3.79" };
|
|
20
20
|
/**
|
|
21
21
|
* @param options - Project configuration
|
|
22
22
|
*/
|
|
@@ -15,7 +15,7 @@ const utils_1 = require("../utils");
|
|
|
15
15
|
* Extends Projen's base class with opinionated defaults and automatic component setup.
|
|
16
16
|
*/
|
|
17
17
|
class TypeScriptProject extends projen_1.typescript.TypeScriptProject {
|
|
18
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@nikovirtala/projen-constructs.TypeScriptProject", version: "0.3.
|
|
18
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@nikovirtala/projen-constructs.TypeScriptProject", version: "0.3.79" };
|
|
19
19
|
/**
|
|
20
20
|
* @param options - Project configuration
|
|
21
21
|
*/
|