cdk-rds-sql 8.1.6 → 9.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/AGENTS.md CHANGED
@@ -46,7 +46,7 @@ pnpm exec projen test:watch
46
46
  pnpm exec projen typecheck
47
47
 
48
48
  # Run linting
49
- pnpm exec projen eslint
49
+ pnpm exec projen biome
50
50
 
51
51
  # Build only the Lambda handler
52
52
  pnpm exec projen build:handler
@@ -102,7 +102,7 @@ Projen tasks:
102
102
  1. `pre-compile`: Transpiles Lambda handler using esbuild
103
103
  2. `compile`: TypeScript compilation
104
104
  3. `post-compile`: Copies handler to lib directory
105
- 4. `eslint`: Runs linter
105
+ 4. `biome`: Runs formatting and linting
106
106
  5. `typecheck`: Runs typecheck
107
107
 
108
108
  ## SSL/TLS Configuration
package/CLAUDE.md CHANGED
@@ -46,7 +46,7 @@ pnpm exec projen test:watch
46
46
  pnpm exec projen typecheck
47
47
 
48
48
  # Run linting
49
- pnpm exec projen eslint
49
+ pnpm exec projen biome
50
50
 
51
51
  # Build only the Lambda handler
52
52
  pnpm exec projen build:handler
@@ -102,7 +102,7 @@ Projen tasks:
102
102
  1. `pre-compile`: Transpiles Lambda handler using esbuild
103
103
  2. `compile`: TypeScript compilation
104
104
  3. `post-compile`: Copies handler to lib directory
105
- 4. `eslint`: Runs linter
105
+ 4. `biome`: Runs formatting and linting
106
106
  5. `typecheck`: Runs typecheck
107
107
 
108
108
  ## SSL/TLS Configuration
package/README.md CHANGED
@@ -16,6 +16,8 @@ environments, and works in isolated subnets.
16
16
  # Requirements
17
17
 
18
18
  - CDK v2.
19
+ - Node.js 22.14 or newer for consumers, as declared in `package.json`'s `engines`.
20
+ This is the library's supported minimum, independent of its development tools.
19
21
 
20
22
  # Installation
21
23
 
@@ -143,6 +145,31 @@ has been created.
143
145
  If you want to make the role the owner of a new database, just specify
144
146
  the `databaseName` here, and create the database later.
145
147
 
148
+ ### Connection limit (MySQL/MariaDB)
149
+
150
+ Cap how many connections a MySQL or MariaDB user may open:
151
+
152
+ ```ts
153
+ const role = new Role(this, "Role", {
154
+ provider: provider,
155
+ roleName: "myrole",
156
+ databaseName: "mydb",
157
+ maxUserConnections: 5,
158
+ })
159
+ ```
160
+
161
+ Create and update then run:
162
+
163
+ ```sql
164
+ ALTER USER 'myrole'@'%' WITH MAX_USER_CONNECTIONS 5
165
+ ```
166
+
167
+ Omit `maxUserConnections` to leave the user unlimited, which is the
168
+ existing behaviour. Omitting it does not clear a limit that was already
169
+ applied; set `0` to restore the server default (unlimited unless the
170
+ global `max_user_connections` is set). PostgreSQL and DSQL throw if
171
+ this property is set.
172
+
146
173
  ### IAM Authentication
147
174
 
148
175
  Instead of password-based authentication, you can create roles that
@@ -518,17 +545,35 @@ const provider = new Provider(this, "Provider", {
518
545
 
519
546
  # Working on this code
520
547
 
521
- This code is managed by
522
- [projen](https://github.com/projen/projen/blob/main/README.md). In
523
- addition [pre-commit](https://pre-commit.com/) is used.
548
+ This code is managed by [projen](https://github.com/projen/projen).
549
+ [mise](https://mise.jdx.dev/) installs Node 24, pnpm 12, and
550
+ [hk](https://hk.jdx.dev/) for Git hooks. Biome handles formatting and linting.
524
551
 
525
- So after git clone and `pnpm install` you would do:
552
+ Development and CI use Node 24. Testcontainers is a development-only dependency;
553
+ its dependency tree requires newer APIs than the consumer minimum of Node 22.14.
526
554
 
555
+ After cloning:
556
+
557
+ ```sh
558
+ mise trust
559
+ mise install
560
+ mise run setup
527
561
  ```
528
- pre-commit install --install-hooks --hook-type commit-msg --hook-type pre-commit
529
- ```
530
562
 
531
- to install the pre-commit hooks.
563
+ When migrating an existing clone, replace the old pre-commit hooks with
564
+ `mise exec -- hk install --mise --force`.
565
+
566
+ Run all checks with `mise run check`, or format and lint with
567
+ `pnpm exec projen biome`. Tests require Docker. TypeScript stays on the
568
+ 6.0 release line supported by jsii 6.0.
569
+
570
+ The pre-commit hook runs the full build, tests, and packaging, so Docker must
571
+ be running. When `VPC_ID` is set, changes under `src/` also run CDK synthesis
572
+ against that VPC; this requires AWS credentials. Unset `VPC_ID` to skip synthesis.
573
+
574
+ The development tsconfig uses `node16` module resolution, including package
575
+ exports. Jest tasks enable Node's VM module support for native dynamic imports
576
+ such as the MySQL driver import.
532
577
 
533
578
  ## Testing
534
579
 
@@ -536,6 +581,9 @@ Test code via projen with:
536
581
 
537
582
  pnpm exec projen test
538
583
 
584
+ Tests do not update snapshots automatically. To intentionally refresh them, run
585
+ `pnpm exec projen test:update` and review the snapshot diff.
586
+
539
587
  You can run the PostgreSQL sample stack with:
540
588
 
541
589
  pnpm exec projen integ:deploy:postgresql:serverless
package/biome.jsonc ADDED
@@ -0,0 +1,66 @@
1
+ // biome-ignore-all format: ~~ Generated by projen. To modify, edit .projenrc.ts and run "pnpm exec projen".
2
+ {
3
+ "assist": {
4
+ "actions": {
5
+ "preset": "recommended"
6
+ },
7
+ "enabled": true
8
+ },
9
+ "files": {
10
+ "ignoreUnknown": false,
11
+ "includes": [
12
+ "src/**",
13
+ "test/**",
14
+ "lambda/**",
15
+ ".projenrc.ts",
16
+ "projenrc/**",
17
+ "!.gitattributes",
18
+ "!.github/dependabot.yml",
19
+ "!.github/workflows/build.yml",
20
+ "!.github/workflows/pull-request-lint.yml",
21
+ "!.github/workflows/release.yml",
22
+ "!.gitignore",
23
+ "!.mergify.yml",
24
+ "!.projen/deps.json",
25
+ "!.projen/files.json",
26
+ "!.projen/tasks.json",
27
+ "!projenrc/tsconfig.json",
28
+ "!tsconfig.dev.json",
29
+ "!tsconfig.json"
30
+ ]
31
+ },
32
+ "formatter": {
33
+ "enabled": true,
34
+ "indentStyle": "space",
35
+ "indentWidth": 2,
36
+ "lineWidth": 100
37
+ },
38
+ "javascript": {
39
+ "formatter": {
40
+ "quoteStyle": "double",
41
+ "semicolons": "asNeeded",
42
+ "trailingCommas": "es5"
43
+ }
44
+ },
45
+ "linter": {
46
+ "enabled": true,
47
+ "rules": {
48
+ "preset": "recommended",
49
+ "nursery": {
50
+ "noFloatingPromises": "error"
51
+ },
52
+ "suspicious": {
53
+ "noShadow": "error"
54
+ },
55
+ "correctness": {
56
+ "noUndeclaredDependencies": "error"
57
+ }
58
+ }
59
+ },
60
+ "vcs": {
61
+ "clientKind": "git",
62
+ "enabled": true,
63
+ "useIgnoreFile": true
64
+ },
65
+ "$schema": "node_modules/@biomejs/biome/configuration_schema.json"
66
+ }
package/lib/database.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { CustomResource } from "aws-cdk-lib";
2
2
  import { Construct } from "constructs";
3
- import { IProvider } from "./provider";
4
- import { Role } from "./role";
3
+ import { type IProvider } from "./provider";
4
+ import type { Role } from "./role";
5
5
  interface DatabaseAttributes {
6
6
  /**
7
7
  * Name of database to create.
package/lib/database.js CHANGED
@@ -1,5 +1,4 @@
1
1
  "use strict";
2
- var _a;
3
2
  Object.defineProperty(exports, "__esModule", { value: true });
4
3
  exports.Database = void 0;
5
4
  const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
@@ -8,12 +7,14 @@ const constructs_1 = require("constructs");
8
7
  const enum_1 = require("./enum");
9
8
  const provider_1 = require("./provider");
10
9
  class ImportedDatabase extends constructs_1.Construct {
10
+ databaseName;
11
11
  constructor(scope, id, props) {
12
12
  super(scope, id);
13
13
  this.databaseName = props.databaseName;
14
14
  }
15
15
  }
16
16
  class Database extends aws_cdk_lib_1.CustomResource {
17
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-rds-sql.Database", version: "9.0.0" };
17
18
  /**
18
19
  * Return a Database based upon name only. Use for importing existing databases.
19
20
  */
@@ -22,6 +23,7 @@ class Database extends aws_cdk_lib_1.CustomResource {
22
23
  databaseName: databaseName,
23
24
  });
24
25
  }
26
+ databaseName;
25
27
  constructor(scope, id, props) {
26
28
  // Check if using DSQL provider and forbid database creation
27
29
  if (props.provider.engine === provider_1.DatabaseEngine.DSQL) {
@@ -44,6 +46,4 @@ class Database extends aws_cdk_lib_1.CustomResource {
44
46
  }
45
47
  }
46
48
  exports.Database = Database;
47
- _a = JSII_RTTI_SYMBOL_1;
48
- Database[_a] = { fqn: "cdk-rds-sql.Database", version: "8.1.6" };
49
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZGF0YWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2Q0FBNEM7QUFDNUMsMkNBQXNDO0FBQ3RDLGlDQUF1QztBQUN2Qyx5Q0FBc0Q7QUEwQnRELE1BQU0sZ0JBQWlCLFNBQVEsc0JBQVM7SUFHdEMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUF5QjtRQUNqRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFBO1FBQ2hCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQTtJQUN4QyxDQUFDO0NBQ0Y7QUFFRCxNQUFhLFFBQVMsU0FBUSw0QkFBYztJQUMxQzs7T0FFRztJQUNILE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFnQixFQUFFLEVBQVUsRUFBRSxZQUFvQjtRQUN4RSxPQUFPLElBQUksZ0JBQWdCLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUNyQyxZQUFZLEVBQUUsWUFBWTtTQUMzQixDQUFDLENBQUE7SUFDSixDQUFDO0lBSUQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFvQjtRQUM1RCw0REFBNEQ7UUFDNUQsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyx5QkFBYyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2xELE1BQU0sSUFBSSxLQUFLLENBQ2IscUZBQXFGLENBQ3RGLENBQUE7UUFDSCxDQUFDO1FBRUQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDZixZQUFZLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxZQUFZO1lBQ3pDLFVBQVUsRUFBRTtnQkFDVixRQUFRLEVBQUUscUJBQWMsQ0FBQyxRQUFRO2dCQUNqQyxVQUFVLEVBQUUsS0FBSyxDQUFDLFlBQVk7Z0JBQzlCLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDaEYsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsUUFBUTthQUM3QjtTQUNGLENBQUMsQ0FBQTtRQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUN2QyxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUE7UUFDdEMsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ3RDLENBQUM7SUFDSCxDQUFDOztBQWxDSCw0QkFtQ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDdXN0b21SZXNvdXJjZSB9IGZyb20gXCJhd3MtY2RrLWxpYlwiXG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiXG5pbXBvcnQgeyBSZHNTcWxSZXNvdXJjZSB9IGZyb20gXCIuL2VudW1cIlxuaW1wb3J0IHsgSVByb3ZpZGVyLCBEYXRhYmFzZUVuZ2luZSB9IGZyb20gXCIuL3Byb3ZpZGVyXCJcbmltcG9ydCB7IFJvbGUgfSBmcm9tIFwiLi9yb2xlXCJcblxuaW50ZXJmYWNlIERhdGFiYXNlQXR0cmlidXRlcyB7XG4gIC8qKlxuICAgKiBOYW1lIG9mIGRhdGFiYXNlIHRvIGNyZWF0ZS5cbiAgICovXG4gIHJlYWRvbmx5IGRhdGFiYXNlTmFtZTogc3RyaW5nXG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGRhdGFiYXNlIG93bmVyLlxuICAgKi9cbiAgcmVhZG9ubHkgb3duZXI/OiBSb2xlXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YWJhc2VQcm9wcyBleHRlbmRzIERhdGFiYXNlQXR0cmlidXRlcyB7XG4gIC8qKlxuICAgKiBQcm92aWRlci5cbiAgICovXG4gIHJlYWRvbmx5IHByb3ZpZGVyOiBJUHJvdmlkZXJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJRGF0YWJhc2Uge1xuICByZWFkb25seSBkYXRhYmFzZU5hbWU6IHN0cmluZ1xufVxuXG5jbGFzcyBJbXBvcnRlZERhdGFiYXNlIGV4dGVuZHMgQ29uc3RydWN0IGltcGxlbWVudHMgSURhdGFiYXNlIHtcbiAgcHVibGljIHJlYWRvbmx5IGRhdGFiYXNlTmFtZTogc3RyaW5nXG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IERhdGFiYXNlQXR0cmlidXRlcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZClcbiAgICB0aGlzLmRhdGFiYXNlTmFtZSA9IHByb3BzLmRhdGFiYXNlTmFtZVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEYXRhYmFzZSBleHRlbmRzIEN1c3RvbVJlc291cmNlIGltcGxlbWVudHMgSURhdGFiYXNlIHtcbiAgLyoqXG4gICAqIFJldHVybiBhIERhdGFiYXNlIGJhc2VkIHVwb24gbmFtZSBvbmx5LiBVc2UgZm9yIGltcG9ydGluZyBleGlzdGluZyBkYXRhYmFzZXMuXG4gICAqL1xuICBzdGF0aWMgZnJvbURhdGFiYXNlTmFtZShzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBkYXRhYmFzZU5hbWU6IHN0cmluZyk6IElEYXRhYmFzZSB7XG4gICAgcmV0dXJuIG5ldyBJbXBvcnRlZERhdGFiYXNlKHNjb3BlLCBpZCwge1xuICAgICAgZGF0YWJhc2VOYW1lOiBkYXRhYmFzZU5hbWUsXG4gICAgfSlcbiAgfVxuXG4gIHB1YmxpYyByZWFkb25seSBkYXRhYmFzZU5hbWU6IHN0cmluZ1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBEYXRhYmFzZVByb3BzKSB7XG4gICAgLy8gQ2hlY2sgaWYgdXNpbmcgRFNRTCBwcm92aWRlciBhbmQgZm9yYmlkIGRhdGFiYXNlIGNyZWF0aW9uXG4gICAgaWYgKHByb3BzLnByb3ZpZGVyLmVuZ2luZSA9PT0gRGF0YWJhc2VFbmdpbmUuRFNRTCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkRhdGFiYXNlIGNyZWF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgd2l0aCBEU1FMLiBEU1FMIGFsd2F5cyB1c2VzICdwb3N0Z3JlcycgZGF0YWJhc2UuXCJcbiAgICAgIClcbiAgICB9XG5cbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIHNlcnZpY2VUb2tlbjogcHJvcHMucHJvdmlkZXIuc2VydmljZVRva2VuLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBSZXNvdXJjZTogUmRzU3FsUmVzb3VyY2UuREFUQUJBU0UsXG4gICAgICAgIFJlc291cmNlSWQ6IHByb3BzLmRhdGFiYXNlTmFtZSxcbiAgICAgICAgLi4uKHByb3BzLnByb3ZpZGVyLnNlY3JldCA/IHsgU2VjcmV0QXJuOiBwcm9wcy5wcm92aWRlci5zZWNyZXQuc2VjcmV0QXJuIH0gOiB7fSksXG4gICAgICAgIE93bmVyOiBwcm9wcy5vd25lcj8ucm9sZU5hbWUsXG4gICAgICB9LFxuICAgIH0pXG4gICAgdGhpcy5ub2RlLmFkZERlcGVuZGVuY3kocHJvcHMucHJvdmlkZXIpXG4gICAgdGhpcy5kYXRhYmFzZU5hbWUgPSBwcm9wcy5kYXRhYmFzZU5hbWVcbiAgICBpZiAocHJvcHMub3duZXIpIHtcbiAgICAgIHRoaXMubm9kZS5hZGREZXBlbmRlbmN5KHByb3BzLm93bmVyKVxuICAgIH1cbiAgfVxufVxuIl19
49
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZGF0YWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLDZDQUE0QztBQUM1QywyQ0FBc0M7QUFDdEMsaUNBQXVDO0FBQ3ZDLHlDQUEyRDtBQTBCM0QsTUFBTSxnQkFBaUIsU0FBUSxzQkFBUztJQUN0QixZQUFZLENBQVE7SUFFcEMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUF5QjtRQUNqRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFBO1FBQ2hCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQTtJQUN4QyxDQUFDO0NBQ0Y7QUFFRCxNQUFhLFFBQVMsU0FBUSw0QkFBYzs7SUFDMUM7O09BRUc7SUFDSCxNQUFNLENBQUMsZ0JBQWdCLENBQUMsS0FBZ0IsRUFBRSxFQUFVLEVBQUUsWUFBb0I7UUFDeEUsT0FBTyxJQUFJLGdCQUFnQixDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDckMsWUFBWSxFQUFFLFlBQVk7U0FDM0IsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVlLFlBQVksQ0FBUTtJQUVwQyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQW9CO1FBQzVELDREQUE0RDtRQUM1RCxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxLQUFLLHlCQUFjLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbEQsTUFBTSxJQUFJLEtBQUssQ0FDYixxRkFBcUYsQ0FDdEYsQ0FBQTtRQUNILENBQUM7UUFFRCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUNmLFlBQVksRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLFlBQVk7WUFDekMsVUFBVSxFQUFFO2dCQUNWLFFBQVEsRUFBRSxxQkFBYyxDQUFDLFFBQVE7Z0JBQ2pDLFVBQVUsRUFBRSxLQUFLLENBQUMsWUFBWTtnQkFDOUIsR0FBRyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNoRixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxRQUFRO2FBQzdCO1NBQ0YsQ0FBQyxDQUFBO1FBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQ3ZDLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQTtRQUN0QyxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDdEMsQ0FBQztJQUNILENBQUM7O0FBbENILDRCQW1DQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEN1c3RvbVJlc291cmNlIH0gZnJvbSBcImF3cy1jZGstbGliXCJcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCJcbmltcG9ydCB7IFJkc1NxbFJlc291cmNlIH0gZnJvbSBcIi4vZW51bVwiXG5pbXBvcnQgeyBEYXRhYmFzZUVuZ2luZSwgdHlwZSBJUHJvdmlkZXIgfSBmcm9tIFwiLi9wcm92aWRlclwiXG5pbXBvcnQgdHlwZSB7IFJvbGUgfSBmcm9tIFwiLi9yb2xlXCJcblxuaW50ZXJmYWNlIERhdGFiYXNlQXR0cmlidXRlcyB7XG4gIC8qKlxuICAgKiBOYW1lIG9mIGRhdGFiYXNlIHRvIGNyZWF0ZS5cbiAgICovXG4gIHJlYWRvbmx5IGRhdGFiYXNlTmFtZTogc3RyaW5nXG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGRhdGFiYXNlIG93bmVyLlxuICAgKi9cbiAgcmVhZG9ubHkgb3duZXI/OiBSb2xlXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YWJhc2VQcm9wcyBleHRlbmRzIERhdGFiYXNlQXR0cmlidXRlcyB7XG4gIC8qKlxuICAgKiBQcm92aWRlci5cbiAgICovXG4gIHJlYWRvbmx5IHByb3ZpZGVyOiBJUHJvdmlkZXJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJRGF0YWJhc2Uge1xuICByZWFkb25seSBkYXRhYmFzZU5hbWU6IHN0cmluZ1xufVxuXG5jbGFzcyBJbXBvcnRlZERhdGFiYXNlIGV4dGVuZHMgQ29uc3RydWN0IGltcGxlbWVudHMgSURhdGFiYXNlIHtcbiAgcHVibGljIHJlYWRvbmx5IGRhdGFiYXNlTmFtZTogc3RyaW5nXG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IERhdGFiYXNlQXR0cmlidXRlcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZClcbiAgICB0aGlzLmRhdGFiYXNlTmFtZSA9IHByb3BzLmRhdGFiYXNlTmFtZVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEYXRhYmFzZSBleHRlbmRzIEN1c3RvbVJlc291cmNlIGltcGxlbWVudHMgSURhdGFiYXNlIHtcbiAgLyoqXG4gICAqIFJldHVybiBhIERhdGFiYXNlIGJhc2VkIHVwb24gbmFtZSBvbmx5LiBVc2UgZm9yIGltcG9ydGluZyBleGlzdGluZyBkYXRhYmFzZXMuXG4gICAqL1xuICBzdGF0aWMgZnJvbURhdGFiYXNlTmFtZShzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBkYXRhYmFzZU5hbWU6IHN0cmluZyk6IElEYXRhYmFzZSB7XG4gICAgcmV0dXJuIG5ldyBJbXBvcnRlZERhdGFiYXNlKHNjb3BlLCBpZCwge1xuICAgICAgZGF0YWJhc2VOYW1lOiBkYXRhYmFzZU5hbWUsXG4gICAgfSlcbiAgfVxuXG4gIHB1YmxpYyByZWFkb25seSBkYXRhYmFzZU5hbWU6IHN0cmluZ1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBEYXRhYmFzZVByb3BzKSB7XG4gICAgLy8gQ2hlY2sgaWYgdXNpbmcgRFNRTCBwcm92aWRlciBhbmQgZm9yYmlkIGRhdGFiYXNlIGNyZWF0aW9uXG4gICAgaWYgKHByb3BzLnByb3ZpZGVyLmVuZ2luZSA9PT0gRGF0YWJhc2VFbmdpbmUuRFNRTCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkRhdGFiYXNlIGNyZWF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgd2l0aCBEU1FMLiBEU1FMIGFsd2F5cyB1c2VzICdwb3N0Z3JlcycgZGF0YWJhc2UuXCJcbiAgICAgIClcbiAgICB9XG5cbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIHNlcnZpY2VUb2tlbjogcHJvcHMucHJvdmlkZXIuc2VydmljZVRva2VuLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBSZXNvdXJjZTogUmRzU3FsUmVzb3VyY2UuREFUQUJBU0UsXG4gICAgICAgIFJlc291cmNlSWQ6IHByb3BzLmRhdGFiYXNlTmFtZSxcbiAgICAgICAgLi4uKHByb3BzLnByb3ZpZGVyLnNlY3JldCA/IHsgU2VjcmV0QXJuOiBwcm9wcy5wcm92aWRlci5zZWNyZXQuc2VjcmV0QXJuIH0gOiB7fSksXG4gICAgICAgIE93bmVyOiBwcm9wcy5vd25lcj8ucm9sZU5hbWUsXG4gICAgICB9LFxuICAgIH0pXG4gICAgdGhpcy5ub2RlLmFkZERlcGVuZGVuY3kocHJvcHMucHJvdmlkZXIpXG4gICAgdGhpcy5kYXRhYmFzZU5hbWUgPSBwcm9wcy5kYXRhYmFzZU5hbWVcbiAgICBpZiAocHJvcHMub3duZXIpIHtcbiAgICAgIHRoaXMubm9kZS5hZGREZXBlbmRlbmN5KHByb3BzLm93bmVyKVxuICAgIH1cbiAgfVxufVxuIl19