cdk-rds-sql 3.4.1 → 3.4.2
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 +27 -10
- package/README.md +11 -0
- package/lib/database.js +1 -1
- package/lib/handler.js +33 -7
- package/lib/provider.js +1 -1
- package/lib/role.js +1 -1
- package/lib/schema.d.ts +5 -0
- package/lib/schema.js +5 -2
- package/lib/sql.js +1 -1
- package/package.json +1 -1
package/.jsii
CHANGED
|
@@ -3781,7 +3781,7 @@
|
|
|
3781
3781
|
},
|
|
3782
3782
|
"name": "cdk-rds-sql",
|
|
3783
3783
|
"readme": {
|
|
3784
|
-
"markdown": "# About\n\nThis CDK construct library makes it possible to create databases,\nschemas, and roles in an Aurora Serverless (v1 and v2 are supported), RDS Database Cluster or Database Instance created\nin that stack.\n\nThis construct library is intended to be used in enterprise\nenvironments, and works in isolated subnets.\n\n<p align=\"left\">\n <a href=\"https://github.com/semantic-release/semantic-release\"><img src=\"https://img.shields.io/badge/semantic--release-angular-e10079?logo=semantic-release\" alt=semantic-release: angular\"></a>\n <a href=\"https://github.com/berenddeboer/cdk-rds-sql/actions/workflows/release.yml\"><img src=\"https://github.com/berenddeboer/cdk-rds-sql/actions/workflows/release.yml/badge.svg\" alt=\"Release badge\"></a>\n</p>\n\n# Requirements\n\n- CDK v2.\n\n# Installation\n\n npm i cdk-rds-sql\n\n# Usage\n\n## Provider\n\nFirst setup your VPC and create your cluster:\n\n```ts\nimport { Duration, RemovalPolicy } from \"aws-cdk-lib\"\nimport * as ec2 from \"aws-cdk-lib/aws-ec2\"\nimport * as rds from \"aws-cdk-lib/aws-rds\"\n\nconst vpc = ec2.Vpc.fromLookup(this, \"Vpc\", {\n vpcId: this.node.tryGetContext(\"vpc-id\"),\n})\n\nconst cluster = new rds.ServerlessCluster(this, \"Cluster\", {\n vpc: vpc,\n vpcSubnets: {\n subnetType: ec2.SubnetType.PRIVATE_ISOLATED,\n },\n engine: rds.DatabaseClusterEngine.AURORA_POSTGRESQL,\n parameterGroup: rds.ParameterGroup.fromParameterGroupName(\n this,\n \"ParameterGroup\",\n \"default.aurora-postgresql11\"\n ),\n removalPolicy: RemovalPolicy.DESTROY,\n scaling: {\n autoPause: Duration.minutes(60),\n minCapacity: rds.AuroraCapacityUnit.ACU_2,\n maxCapacity: rds.AuroraCapacityUnit.ACU_2,\n },\n})\n```\n\nThen create a provider which will connect to your database. For a cluster:\n\n```ts\nimport { Provider } from \"cdk-rds-sql\"\n\nconst provider = new Provider(this, \"Provider\", {\n vpc: vpc,\n cluster: cluster,\n secret: cluster.secret!,\n})\n```\n\nFor an instance:\n```ts\nimport { Provider } from \"cdk-rds-sql\"\n\nconst provider = new Provider(this, \"Provider\", {\n vpc: vpc,\n instance: instance,\n secret: cluster.secret!,\n})\n```\n\nThe provider will setup a lambda, which normally lives in the same VPC\nas the database. You can give a different VPC, as long as that VPC has\naccess to the VPC of the database. Only the provider lambda will talk\nto your database.\n\nThe provider will by default use the private isolated subnet of the\nVPC. This is a breaking change from the past, where the provider used\nthe default strategy, which may not have been the private isolated\nsubnet. But from an enterprise security point of view having third\nparty code run in an isolated network by default is better.\n\nYour isolated network must have a VPC endpoint to AWS Secrets Manager\nand possibly KMS as well. If you want to use a subnet with egress\naccess in case you have no such VPC endpoints, specify the subnet as\nfollows:\n\n```ts\nimport { Provider } from \"cdk-rds-sql\"\n\nconst provider = new Provider(this, \"Provider\", {\n vpc: vpc,\n vpcSubnet: {\n subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS,\n },\n cluster: cluster,\n secret: cluster.secret!,\n})\n```\n\n## Roles\n\nCreate a postgres role (user) for a cluster as follows:\n\n```ts\nimport { Role } from \"cdk-rds-sql\"\n\nconst role = new Role(this, \"Role\", {\n provider: provider,\n roleName: \"myrole\",\n databaseName: \"mydb\",\n})\n```\n\nThis will automatically create a secret just like `ServerlessCluster`\ndoes, with all the connection info needed for this user. It's secret value is a JSON like:\n\n```json\n{\n \"dbClusterIdentifier\": \"teststack-clustereb1186t9-sh4wpqfdyfvu\",\n \"password\": \"very-long-and-boring\",\n \"dbname\": \"mydb\",\n \"engine\": \"postgres\",\n \"port\": 5432,\n \"host\": \"teststack-clustereb1186t9-sh4wpqfdyfvu.cluster-cgudolabssna.us-east-1.rds.amazonaws.com\",\n \"username\": \"myrole\"\n}\n```\n\nYou can access the secret via `role.secret`.\n\nInstead of `databaseName` you can also specify `database` to reference\nan existing database. The role will not be created until the database\nhas been created.\n\n## Database\n\nCreate a database as follows:\n\n```ts\nimport { Database } from \"cdk-rds-sql\"\n\nconst database = new Database(this, \"Database\", {\n provider: provider,\n databaseName: \"mydb\",\n})\n```\n\nYou can provide an owner, which makes it easy to create database owned\nby a new user:\n\n```ts\nconst database = new Database(this, \"Database\", {\n provider: provider,\n databaseName: \"mydb\",\n owner: role,\n})\n```\n\n## Schema\n\nCreate a schema in the default database as follows:\n\n```ts\nimport { Schema } from \"cdk-rds-sql\"\n\nnew Schema(this, \"Schema\", {\n provider: provider,\n schemaName: \"myschema\",\n})\n```\n\nOr in another database:\n\n```ts\nconst database = new Database(this, \"Database\", {\n provider: provider,\n databaseName: \"mydb\",\n})\n\nnew Schema(this, \"Schema\", {\n provider: provider,\n schemaName: \"myschema\",\n databaseName: database.databaseName,\n})\n```\n\n## Sql\n\nYou can insert arbitrary SQL into your database with the `Sql` construct:\n\n```ts\nimport { Sql } from \"cdk-rds-sql\"\n\nconst sql = new Sql(this, \"Sql\", {\n provider: provider,\n database: database,\n statement: \"create table t (i int)\",\n})\n```\n\nCreate a table if it does not exist, and grant a role privileges:\n\n```ts\nconst sql = new Sql(this, \"Sql\", {\n provider: provider,\n database: database,\n statement: `\ncreate table if not exists t (i int);\ngrant select on t to myrole;\n`,\n})\n```\n\nRollback sql on stack deletion:\n\n```ts\nconst sql = new Sql(this, \"Sql\", {\n provider: provider,\n database: database,\n statement: `\ncreate table if not exists t (i int);\ngrant select on t to myrole;\n`,\n rollback: `\nDO $$BEGIN\n IF EXISTS (select from pg_database WHERE datname = 't') THEN\n IF EXISTS (select from pg_catalog.pg_roles WHERE rolname = 'myrole') THEN\n revoke select t from myrole;\n END IF;\n drop table t;\n END IF;\nEND$$;\n`\n})\n```\n\n\nNote that there is no synchronisation between various `Sql`\nconstructs, in particular the order in your code does not determine\nthe order in which your SQL is executed. This happens in parallel,\nunless you specify an explicit dependency via `sql.node.addDepency()`.\n\nThere are a lot of concerns when using `Sql`:\n\n- When you update your Sql, your previous Sql is not \"rolled back\",\n the new Sql is simply executed again.\n- When you delete your `Sql` construct the rollback is executed if specified\n- When permission are granted via `Sql` they must be removed via rollback to succesfully remove the role\n- Currently the `Sql` constructs has less than 5 minutes to execute\n its work.\n- It is unknown how large your SQL can be.\n\n## Dependencies\n\nThis library manages dependencies, there is no need to specify\ndependencies except possibly for `Sql` constructs.\n\n# Working on this code\n\nThis code is managed by\n[projen](https://github.com/projen/projen/blob/main/README.md). In\naddition [pre-commit](https://pre-commit.com/) is used.\n\nSo after git clone and `npm ci` you would do:\n\n```\npre-commit install --install-hooks --hook-type commit-msg --hook-type pre-commit\n```\n\nto install the pre-commit hooks.\n\n## Testing\n\nTest code via projen with:\n\n npx projen test\n\nYou can run the sample stack with:\n\n npx cdk deploy --context vpc-id=vpc-0123456789 TestServerlessV1Stack\n\nOr for v2:\n\n npx cdk deploy TestServerlessV2Stack\n\nIf you want to use an existing vpc:\n\n npx cdk deploy --context vpc-id=vpc-0123456789 TestServerlessV2Stack\n\n# To do\n\n- Update role: will not revoke connect to previous database if database name has changed.\n- If the cluster is configured for autopausing, wake cluster up before doing any SQL operations.\n- We rename roles and database on update: is that actually the best\n thing? More change to get us into an irrecoverable situation??\n"
|
|
3784
|
+
"markdown": "# About\n\nThis CDK construct library makes it possible to create databases,\nschemas, and roles in an Aurora Serverless (v1 and v2 are supported), RDS Database Cluster or Database Instance created\nin that stack.\n\nThis construct library is intended to be used in enterprise\nenvironments, and works in isolated subnets.\n\n<p align=\"left\">\n <a href=\"https://github.com/semantic-release/semantic-release\"><img src=\"https://img.shields.io/badge/semantic--release-angular-e10079?logo=semantic-release\" alt=semantic-release: angular\"></a>\n <a href=\"https://github.com/berenddeboer/cdk-rds-sql/actions/workflows/release.yml\"><img src=\"https://github.com/berenddeboer/cdk-rds-sql/actions/workflows/release.yml/badge.svg\" alt=\"Release badge\"></a>\n</p>\n\n# Requirements\n\n- CDK v2.\n\n# Installation\n\n npm i cdk-rds-sql\n\n# Usage\n\n## Provider\n\nFirst setup your VPC and create your cluster:\n\n```ts\nimport { Duration, RemovalPolicy } from \"aws-cdk-lib\"\nimport * as ec2 from \"aws-cdk-lib/aws-ec2\"\nimport * as rds from \"aws-cdk-lib/aws-rds\"\n\nconst vpc = ec2.Vpc.fromLookup(this, \"Vpc\", {\n vpcId: this.node.tryGetContext(\"vpc-id\"),\n})\n\nconst cluster = new rds.ServerlessCluster(this, \"Cluster\", {\n vpc: vpc,\n vpcSubnets: {\n subnetType: ec2.SubnetType.PRIVATE_ISOLATED,\n },\n engine: rds.DatabaseClusterEngine.AURORA_POSTGRESQL,\n parameterGroup: rds.ParameterGroup.fromParameterGroupName(\n this,\n \"ParameterGroup\",\n \"default.aurora-postgresql11\"\n ),\n removalPolicy: RemovalPolicy.DESTROY,\n scaling: {\n autoPause: Duration.minutes(60),\n minCapacity: rds.AuroraCapacityUnit.ACU_2,\n maxCapacity: rds.AuroraCapacityUnit.ACU_2,\n },\n})\n```\n\nThen create a provider which will connect to your database. For a cluster:\n\n```ts\nimport { Provider } from \"cdk-rds-sql\"\n\nconst provider = new Provider(this, \"Provider\", {\n vpc: vpc,\n cluster: cluster,\n secret: cluster.secret!,\n})\n```\n\nFor an instance:\n```ts\nimport { Provider } from \"cdk-rds-sql\"\n\nconst provider = new Provider(this, \"Provider\", {\n vpc: vpc,\n instance: instance,\n secret: cluster.secret!,\n})\n```\n\nThe provider will setup a lambda, which normally lives in the same VPC\nas the database. You can give a different VPC, as long as that VPC has\naccess to the VPC of the database. Only the provider lambda will talk\nto your database.\n\nThe provider will by default use the private isolated subnet of the\nVPC. This is a breaking change from the past, where the provider used\nthe default strategy, which may not have been the private isolated\nsubnet. But from an enterprise security point of view having third\nparty code run in an isolated network by default is better.\n\nYour isolated network must have a VPC endpoint to AWS Secrets Manager\nand possibly KMS as well. If you want to use a subnet with egress\naccess in case you have no such VPC endpoints, specify the subnet as\nfollows:\n\n```ts\nimport { Provider } from \"cdk-rds-sql\"\n\nconst provider = new Provider(this, \"Provider\", {\n vpc: vpc,\n vpcSubnet: {\n subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS,\n },\n cluster: cluster,\n secret: cluster.secret!,\n})\n```\n\n## Roles\n\nCreate a postgres role (user) for a cluster as follows:\n\n```ts\nimport { Role } from \"cdk-rds-sql\"\n\nconst role = new Role(this, \"Role\", {\n provider: provider,\n roleName: \"myrole\",\n databaseName: \"mydb\",\n})\n```\n\nThis will automatically create a secret just like `ServerlessCluster`\ndoes, with all the connection info needed for this user. It's secret value is a JSON like:\n\n```json\n{\n \"dbClusterIdentifier\": \"teststack-clustereb1186t9-sh4wpqfdyfvu\",\n \"password\": \"very-long-and-boring\",\n \"dbname\": \"mydb\",\n \"engine\": \"postgres\",\n \"port\": 5432,\n \"host\": \"teststack-clustereb1186t9-sh4wpqfdyfvu.cluster-cgudolabssna.us-east-1.rds.amazonaws.com\",\n \"username\": \"myrole\"\n}\n```\n\nYou can access the secret via `role.secret`.\n\nInstead of `databaseName` you can also specify `database` to reference\nan existing database. The role will not be created until the database\nhas been created.\n\n## Database\n\nCreate a database as follows:\n\n```ts\nimport { Database } from \"cdk-rds-sql\"\n\nconst database = new Database(this, \"Database\", {\n provider: provider,\n databaseName: \"mydb\",\n})\n```\n\nYou can provide an owner, which makes it easy to create database owned\nby a new user:\n\n```ts\nconst database = new Database(this, \"Database\", {\n provider: provider,\n databaseName: \"mydb\",\n owner: role,\n})\n```\n\n## Schema\n\nCreate a schema in the default database as follows:\n\n```ts\nimport { Schema } from \"cdk-rds-sql\"\n\nnew Schema(this, \"Schema\", {\n provider: provider,\n schemaName: \"myschema\",\n})\n```\n\nOr in another database:\n\n```ts\nconst database = new Database(this, \"Database\", {\n provider: provider,\n databaseName: \"mydb\",\n})\n\nnew Schema(this, \"Schema\", {\n provider: provider,\n schemaName: \"myschema\",\n databaseName: database.databaseName,\n})\n```\n\nOne may need a role permitted for using schema:\n\n```ts\nnew Schema(this, \"Schema\", {\n provider: provider,\n schemaName: \"myschema\",\n databaseName: database.databaseName,\n role: role,\n})\n```\n\n## Sql\n\nYou can insert arbitrary SQL into your database with the `Sql` construct:\n\n```ts\nimport { Sql } from \"cdk-rds-sql\"\n\nconst sql = new Sql(this, \"Sql\", {\n provider: provider,\n database: database,\n statement: \"create table t (i int)\",\n})\n```\n\nCreate a table if it does not exist, and grant a role privileges:\n\n```ts\nconst sql = new Sql(this, \"Sql\", {\n provider: provider,\n database: database,\n statement: `\ncreate table if not exists t (i int);\ngrant select on t to myrole;\n`,\n})\n```\n\nRollback sql on stack deletion:\n\n```ts\nconst sql = new Sql(this, \"Sql\", {\n provider: provider,\n database: database,\n statement: `\ncreate table if not exists t (i int);\ngrant select on t to myrole;\n`,\n rollback: `\nDO $$BEGIN\n IF EXISTS (select from pg_database WHERE datname = 't') THEN\n IF EXISTS (select from pg_catalog.pg_roles WHERE rolname = 'myrole') THEN\n revoke select t from myrole;\n END IF;\n drop table t;\n END IF;\nEND$$;\n`\n})\n```\n\n\nNote that there is no synchronisation between various `Sql`\nconstructs, in particular the order in your code does not determine\nthe order in which your SQL is executed. This happens in parallel,\nunless you specify an explicit dependency via `sql.node.addDepency()`.\n\nThere are a lot of concerns when using `Sql`:\n\n- When you update your Sql, your previous Sql is not \"rolled back\",\n the new Sql is simply executed again.\n- When you delete your `Sql` construct the rollback is executed if specified\n- When permission are granted via `Sql` they must be removed via rollback to succesfully remove the role\n- Currently the `Sql` constructs has less than 5 minutes to execute\n its work.\n- It is unknown how large your SQL can be.\n\n## Dependencies\n\nThis library manages dependencies, there is no need to specify\ndependencies except possibly for `Sql` constructs.\n\n# Working on this code\n\nThis code is managed by\n[projen](https://github.com/projen/projen/blob/main/README.md). In\naddition [pre-commit](https://pre-commit.com/) is used.\n\nSo after git clone and `npm ci` you would do:\n\n```\npre-commit install --install-hooks --hook-type commit-msg --hook-type pre-commit\n```\n\nto install the pre-commit hooks.\n\n## Testing\n\nTest code via projen with:\n\n npx projen test\n\nYou can run the sample stack with:\n\n npx cdk deploy --context vpc-id=vpc-0123456789 TestServerlessV1Stack\n\nOr for v2:\n\n npx cdk deploy TestServerlessV2Stack\n\nIf you want to use an existing vpc:\n\n npx cdk deploy --context vpc-id=vpc-0123456789 TestServerlessV2Stack\n\n# To do\n\n- Update role: will not revoke connect to previous database if database name has changed.\n- If the cluster is configured for autopausing, wake cluster up before doing any SQL operations.\n- We rename roles and database on update: is that actually the best\n thing? More change to get us into an irrecoverable situation??\n"
|
|
3785
3785
|
},
|
|
3786
3786
|
"repository": {
|
|
3787
3787
|
"type": "git",
|
|
@@ -4553,7 +4553,7 @@
|
|
|
4553
4553
|
},
|
|
4554
4554
|
"locationInModule": {
|
|
4555
4555
|
"filename": "src/schema.ts",
|
|
4556
|
-
"line":
|
|
4556
|
+
"line": 35
|
|
4557
4557
|
},
|
|
4558
4558
|
"parameters": [
|
|
4559
4559
|
{
|
|
@@ -4579,7 +4579,7 @@
|
|
|
4579
4579
|
"kind": "class",
|
|
4580
4580
|
"locationInModule": {
|
|
4581
4581
|
"filename": "src/schema.ts",
|
|
4582
|
-
"line":
|
|
4582
|
+
"line": 32
|
|
4583
4583
|
},
|
|
4584
4584
|
"name": "Schema",
|
|
4585
4585
|
"properties": [
|
|
@@ -4590,7 +4590,7 @@
|
|
|
4590
4590
|
"immutable": true,
|
|
4591
4591
|
"locationInModule": {
|
|
4592
4592
|
"filename": "src/schema.ts",
|
|
4593
|
-
"line":
|
|
4593
|
+
"line": 33
|
|
4594
4594
|
},
|
|
4595
4595
|
"name": "schemaName",
|
|
4596
4596
|
"type": {
|
|
@@ -4610,7 +4610,7 @@
|
|
|
4610
4610
|
"kind": "interface",
|
|
4611
4611
|
"locationInModule": {
|
|
4612
4612
|
"filename": "src/schema.ts",
|
|
4613
|
-
"line":
|
|
4613
|
+
"line": 8
|
|
4614
4614
|
},
|
|
4615
4615
|
"name": "SchemaProps",
|
|
4616
4616
|
"properties": [
|
|
@@ -4623,7 +4623,7 @@
|
|
|
4623
4623
|
"immutable": true,
|
|
4624
4624
|
"locationInModule": {
|
|
4625
4625
|
"filename": "src/schema.ts",
|
|
4626
|
-
"line":
|
|
4626
|
+
"line": 12
|
|
4627
4627
|
},
|
|
4628
4628
|
"name": "provider",
|
|
4629
4629
|
"type": {
|
|
@@ -4639,7 +4639,7 @@
|
|
|
4639
4639
|
"immutable": true,
|
|
4640
4640
|
"locationInModule": {
|
|
4641
4641
|
"filename": "src/schema.ts",
|
|
4642
|
-
"line":
|
|
4642
|
+
"line": 24
|
|
4643
4643
|
},
|
|
4644
4644
|
"name": "schemaName",
|
|
4645
4645
|
"type": {
|
|
@@ -4656,13 +4656,30 @@
|
|
|
4656
4656
|
"immutable": true,
|
|
4657
4657
|
"locationInModule": {
|
|
4658
4658
|
"filename": "src/schema.ts",
|
|
4659
|
-
"line":
|
|
4659
|
+
"line": 19
|
|
4660
4660
|
},
|
|
4661
4661
|
"name": "database",
|
|
4662
4662
|
"optional": true,
|
|
4663
4663
|
"type": {
|
|
4664
4664
|
"fqn": "cdk-rds-sql.IDatabase"
|
|
4665
4665
|
}
|
|
4666
|
+
},
|
|
4667
|
+
{
|
|
4668
|
+
"abstract": true,
|
|
4669
|
+
"docs": {
|
|
4670
|
+
"stability": "stable",
|
|
4671
|
+
"summary": "Optional role to be granted for managing tables in schema."
|
|
4672
|
+
},
|
|
4673
|
+
"immutable": true,
|
|
4674
|
+
"locationInModule": {
|
|
4675
|
+
"filename": "src/schema.ts",
|
|
4676
|
+
"line": 29
|
|
4677
|
+
},
|
|
4678
|
+
"name": "role",
|
|
4679
|
+
"optional": true,
|
|
4680
|
+
"type": {
|
|
4681
|
+
"fqn": "cdk-rds-sql.Role"
|
|
4682
|
+
}
|
|
4666
4683
|
}
|
|
4667
4684
|
],
|
|
4668
4685
|
"symbolId": "src/schema:SchemaProps"
|
|
@@ -4797,6 +4814,6 @@
|
|
|
4797
4814
|
"symbolId": "src/sql:SqlProps"
|
|
4798
4815
|
}
|
|
4799
4816
|
},
|
|
4800
|
-
"version": "3.4.
|
|
4801
|
-
"fingerprint": "
|
|
4817
|
+
"version": "3.4.2",
|
|
4818
|
+
"fingerprint": "QmsNWvSmWy+JuFaCxrkjulhKYFBgNqK3I1t96o6dkM4="
|
|
4802
4819
|
}
|
package/README.md
CHANGED
|
@@ -194,6 +194,17 @@ new Schema(this, "Schema", {
|
|
|
194
194
|
})
|
|
195
195
|
```
|
|
196
196
|
|
|
197
|
+
One may need a role permitted for using schema:
|
|
198
|
+
|
|
199
|
+
```ts
|
|
200
|
+
new Schema(this, "Schema", {
|
|
201
|
+
provider: provider,
|
|
202
|
+
schemaName: "myschema",
|
|
203
|
+
databaseName: database.databaseName,
|
|
204
|
+
role: role,
|
|
205
|
+
})
|
|
206
|
+
```
|
|
207
|
+
|
|
197
208
|
## Sql
|
|
198
209
|
|
|
199
210
|
You can insert arbitrary SQL into your database with the `Sql` construct:
|
package/lib/database.js
CHANGED
|
@@ -40,5 +40,5 @@ class Database extends aws_cdk_lib_1.CustomResource {
|
|
|
40
40
|
}
|
|
41
41
|
exports.Database = Database;
|
|
42
42
|
_a = JSII_RTTI_SYMBOL_1;
|
|
43
|
-
Database[_a] = { fqn: "cdk-rds-sql.Database", version: "3.4.
|
|
43
|
+
Database[_a] = { fqn: "cdk-rds-sql.Database", version: "3.4.2" };
|
|
44
44
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZGF0YWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2Q0FBNEM7QUFDNUMsMkNBQXNDO0FBQ3RDLGlDQUF1QztBQTJCdkMsTUFBTSxnQkFBaUIsU0FBUSxzQkFBUztJQUd0QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXlCO1FBQ2pFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUE7UUFDaEIsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFBO0lBQ3hDLENBQUM7Q0FDRjtBQUVELE1BQWEsUUFBUyxTQUFRLDRCQUFjO0lBWTFDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBb0I7UUFDNUQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDZixZQUFZLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxZQUFZO1lBQ3pDLFVBQVUsRUFBRTtnQkFDVixRQUFRLEVBQUUscUJBQWMsQ0FBQyxRQUFRO2dCQUNqQyxVQUFVLEVBQUUsS0FBSyxDQUFDLFlBQVk7Z0JBQzlCLFNBQVMsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxTQUFTO2dCQUMxQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxRQUFRO2FBQzdCO1NBQ0YsQ0FBQyxDQUFBO1FBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQ3ZDLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQTtRQUN0QyxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUU7WUFDZixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUE7U0FDckM7SUFDSCxDQUFDO0lBMUJEOztPQUVHO0lBQ0gsTUFBTSxDQUFDLGdCQUFnQixDQUFDLEtBQWdCLEVBQUUsRUFBVSxFQUFFLFlBQW9CO1FBQ3hFLE9BQU8sSUFBSSxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ3JDLFlBQVksRUFBRSxZQUFZO1NBQzNCLENBQUMsQ0FBQTtJQUNKLENBQUM7O0FBUkgsNEJBNEJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ3VzdG9tUmVzb3VyY2UgfSBmcm9tIFwiYXdzLWNkay1saWJcIlxuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIlxuaW1wb3J0IHsgUmRzU3FsUmVzb3VyY2UgfSBmcm9tIFwiLi9lbnVtXCJcbmltcG9ydCB7IFByb3ZpZGVyIH0gZnJvbSBcIi4vcHJvdmlkZXJcIlxuaW1wb3J0IHsgUm9sZSB9IGZyb20gXCIuL3JvbGVcIlxuXG5pbnRlcmZhY2UgRGF0YWJhc2VBdHRyaWJ1dGVzIHtcbiAgLyoqXG4gICAqIE5hbWUgb2YgZGF0YWJhc2UgdG8gY3JlYXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgZGF0YWJhc2VOYW1lOiBzdHJpbmdcblxuICAvKipcbiAgICogT3B0aW9uYWwgZGF0YWJhc2Ugb3duZXIuXG4gICAqL1xuICByZWFkb25seSBvd25lcj86IFJvbGVcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYXRhYmFzZVByb3BzIGV4dGVuZHMgRGF0YWJhc2VBdHRyaWJ1dGVzIHtcbiAgLyoqXG4gICAqIFByb3ZpZGVyLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJvdmlkZXI6IFByb3ZpZGVyXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSURhdGFiYXNlIHtcbiAgcmVhZG9ubHkgZGF0YWJhc2VOYW1lOiBzdHJpbmdcbn1cblxuY2xhc3MgSW1wb3J0ZWREYXRhYmFzZSBleHRlbmRzIENvbnN0cnVjdCBpbXBsZW1lbnRzIElEYXRhYmFzZSB7XG4gIHB1YmxpYyByZWFkb25seSBkYXRhYmFzZU5hbWU6IHN0cmluZ1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBEYXRhYmFzZUF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpXG4gICAgdGhpcy5kYXRhYmFzZU5hbWUgPSBwcm9wcy5kYXRhYmFzZU5hbWVcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRGF0YWJhc2UgZXh0ZW5kcyBDdXN0b21SZXNvdXJjZSBpbXBsZW1lbnRzIElEYXRhYmFzZSB7XG4gIC8qKlxuICAgKiBSZXR1cm4gYSBEYXRhYmFzZSBiYXNlZCB1cG9uIG5hbWUgb25seS4gVXNlIGZvciBpbXBvcnRpbmcgZXhpc3RpbmcgZGF0YWJhc2VzLlxuICAgKi9cbiAgc3RhdGljIGZyb21EYXRhYmFzZU5hbWUoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgZGF0YWJhc2VOYW1lOiBzdHJpbmcpOiBJRGF0YWJhc2Uge1xuICAgIHJldHVybiBuZXcgSW1wb3J0ZWREYXRhYmFzZShzY29wZSwgaWQsIHtcbiAgICAgIGRhdGFiYXNlTmFtZTogZGF0YWJhc2VOYW1lLFxuICAgIH0pXG4gIH1cblxuICBwdWJsaWMgcmVhZG9ubHkgZGF0YWJhc2VOYW1lOiBzdHJpbmdcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRGF0YWJhc2VQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgc2VydmljZVRva2VuOiBwcm9wcy5wcm92aWRlci5zZXJ2aWNlVG9rZW4sXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIFJlc291cmNlOiBSZHNTcWxSZXNvdXJjZS5EQVRBQkFTRSxcbiAgICAgICAgUmVzb3VyY2VJZDogcHJvcHMuZGF0YWJhc2VOYW1lLFxuICAgICAgICBTZWNyZXRBcm46IHByb3BzLnByb3ZpZGVyLnNlY3JldC5zZWNyZXRBcm4sXG4gICAgICAgIE93bmVyOiBwcm9wcy5vd25lcj8ucm9sZU5hbWUsXG4gICAgICB9LFxuICAgIH0pXG4gICAgdGhpcy5ub2RlLmFkZERlcGVuZGVuY3kocHJvcHMucHJvdmlkZXIpXG4gICAgdGhpcy5kYXRhYmFzZU5hbWUgPSBwcm9wcy5kYXRhYmFzZU5hbWVcbiAgICBpZiAocHJvcHMub3duZXIpIHtcbiAgICAgIHRoaXMubm9kZS5hZGREZXBlbmRlbmN5KHByb3BzLm93bmVyKVxuICAgIH1cbiAgfVxufVxuIl19
|
package/lib/handler.js
CHANGED
|
@@ -20,14 +20,32 @@ const jumpTable = {
|
|
|
20
20
|
},
|
|
21
21
|
},
|
|
22
22
|
schema: {
|
|
23
|
-
Create: async (resourceId) => {
|
|
24
|
-
|
|
23
|
+
Create: async (resourceId, props) => {
|
|
24
|
+
const sql = [node_pg_format_1.format("create schema if not exists %I", resourceId)];
|
|
25
|
+
if (props.RoleName) {
|
|
26
|
+
grantRoleForSchema(resourceId, props.RoleName).forEach((stmt) => sql.push(stmt));
|
|
27
|
+
}
|
|
28
|
+
return sql;
|
|
25
29
|
},
|
|
26
|
-
Update: async (resourceId, oldResourceId) => {
|
|
27
|
-
|
|
30
|
+
Update: async (resourceId, oldResourceId, props) => {
|
|
31
|
+
const sql = [];
|
|
32
|
+
// TODO: revoke old role-name if props.RoleName was removed or changed
|
|
33
|
+
if (props.RoleName) {
|
|
34
|
+
revokeRoleFromSchema(oldResourceId, props.RoleName).forEach((stmt) => sql.push(stmt));
|
|
35
|
+
}
|
|
36
|
+
sql.push(node_pg_format_1.format("alter schema %I rename to %I", oldResourceId, resourceId));
|
|
37
|
+
if (props.RoleName) {
|
|
38
|
+
grantRoleForSchema(resourceId, props.RoleName).forEach((stmt) => sql.push(stmt));
|
|
39
|
+
}
|
|
40
|
+
return sql;
|
|
28
41
|
},
|
|
29
|
-
Delete: (resourceId) => {
|
|
30
|
-
|
|
42
|
+
Delete: (resourceId, props) => {
|
|
43
|
+
const sql = [];
|
|
44
|
+
if (props.RoleName) {
|
|
45
|
+
revokeRoleFromSchema(resourceId, props.RoleName).forEach((stmt) => sql.push(stmt));
|
|
46
|
+
}
|
|
47
|
+
sql.push(node_pg_format_1.format("drop schema if exists %I cascade", resourceId));
|
|
48
|
+
return sql;
|
|
31
49
|
},
|
|
32
50
|
},
|
|
33
51
|
role: {
|
|
@@ -143,6 +161,14 @@ END$$;`, resourceId, props.DatabaseName, props.DatabaseName, resourceId),
|
|
|
143
161
|
},
|
|
144
162
|
},
|
|
145
163
|
};
|
|
164
|
+
const grantRoleForSchema = (schema, roleName) => [
|
|
165
|
+
node_pg_format_1.format("GRANT USAGE ON SCHEMA %I TO %I", schema, roleName),
|
|
166
|
+
node_pg_format_1.format("GRANT CREATE ON SCHEMA %I TO %I", schema, roleName),
|
|
167
|
+
];
|
|
168
|
+
const revokeRoleFromSchema = (schema, roleName) => [
|
|
169
|
+
node_pg_format_1.format("REVOKE CREATE ON SCHEMA %I FROM %I", schema, roleName),
|
|
170
|
+
node_pg_format_1.format("REVOKE ALL ON SCHEMA %I FROM %I", schema, roleName),
|
|
171
|
+
];
|
|
146
172
|
const log = process.env.LOGGER === "true"
|
|
147
173
|
? console.debug
|
|
148
174
|
: (_message, ..._optionalParams) => { };
|
|
@@ -280,4 +306,4 @@ const getPassword = async (arn) => {
|
|
|
280
306
|
return json.password;
|
|
281
307
|
}
|
|
282
308
|
};
|
|
283
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9oYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDRFQUl3QztBQU14Qyw2REFBNkM7QUFDN0MsbURBQXVDO0FBQ3ZDLDJCQUEyQjtBQUMzQixpQ0FBdUM7QUErQ3ZDLE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQTtBQUV0QixNQUFNLFNBQVMsR0FBYztJQUMzQixHQUFHLEVBQUU7UUFDSCxNQUFNLEVBQUUsQ0FBQyxDQUFTLEVBQUUsS0FBVyxFQUFFLEVBQUU7WUFDakMsT0FBTyxLQUFLLENBQUMsU0FBUyxDQUFBO1FBQ3hCLENBQUM7UUFDRCxNQUFNLEVBQUUsQ0FBQyxDQUFTLEVBQUUsRUFBVSxFQUFFLEtBQVcsRUFBRSxFQUFFO1lBQzdDLE9BQU8sS0FBSyxDQUFDLFNBQVMsQ0FBQTtRQUN4QixDQUFDO1FBQ0QsTUFBTSxFQUFFLENBQUMsQ0FBUyxFQUFFLEtBQVcsRUFBRSxFQUFFO1lBQ2pDLE9BQU8sS0FBSyxDQUFDLFFBQVEsQ0FBQTtRQUN2QixDQUFDO0tBQ0Y7SUFDRCxNQUFNLEVBQUU7UUFDTixNQUFNLEVBQUUsS0FBSyxFQUFFLFVBQWtCLEVBQUUsRUFBRTtZQUNuQyxPQUFPLHVCQUFNLENBQUMsZ0NBQWdDLEVBQUUsVUFBVSxDQUFDLENBQUE7UUFDN0QsQ0FBQztRQUNELE1BQU0sRUFBRSxLQUFLLEVBQUUsVUFBa0IsRUFBRSxhQUFxQixFQUFFLEVBQUU7WUFDMUQsT0FBTyx1QkFBTSxDQUFDLDhCQUE4QixFQUFFLGFBQWEsRUFBRSxVQUFVLENBQUMsQ0FBQTtRQUMxRSxDQUFDO1FBQ0QsTUFBTSxFQUFFLENBQUMsVUFBa0IsRUFBRSxFQUFFO1lBQzdCLE9BQU8sdUJBQU0sQ0FBQyxrQ0FBa0MsRUFBRSxVQUFVLENBQUMsQ0FBQTtRQUMvRCxDQUFDO0tBQ0Y7SUFDRCxJQUFJLEVBQUU7UUFDSixNQUFNLEVBQUUsS0FBSyxFQUFFLFVBQWtC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QUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFBO0lBQzlELEdBQUcsQ0FDRCwyREFBMkQsRUFDM0QsaUJBQWlCLEdBQUcsQ0FBQyxFQUNyQixXQUFXLEVBQ1gsU0FBUyxFQUNULEtBQUssQ0FDTixDQUFBO0lBQ0QsT0FBTyxTQUFTLENBQUE7QUFDbEIsQ0FBQyxDQUFBO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFdBQVcsR0FBRyxLQUFLLEVBQUUsR0FBVyxFQUEwQixFQUFFO0lBQ2hFLE1BQU0sY0FBYyxHQUFHLElBQUksNkNBQW9CLENBQUMsRUFBRSxDQUFDLENBQUE7SUFDbkQsTUFBTSxPQUFPLEdBQUcsSUFBSSw4Q0FBcUIsQ0FBQztRQUN4QyxRQUFRLEVBQUUsR0FBRztLQUNkLENBQUMsQ0FBQTtJQUNGLE1BQU0sTUFBTSxHQUFHLE1BQU0sY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUNqRCxJQUFJLE1BQU0sQ0FBQyxZQUFZLEVBQUU7UUFDdkIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUE7UUFDNUMsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFBO0tBQ3JCO0FBQ0gsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgU2VjcmV0c01hbmFnZXJDbGllbnQsXG4gIEdldFNlY3JldFZhbHVlQ29tbWFuZCxcbiAgR2V0U2VjcmV0VmFsdWVDb21tYW5kT3V0cHV0LFxufSBmcm9tIFwiQGF3cy1zZGsvY2xpZW50LXNlY3JldHMtbWFuYWdlclwiXG5pbXBvcnQge1xuICBDbG91ZEZvcm1hdGlvbkN1c3RvbVJlc291cmNlQ3JlYXRlRXZlbnQsXG4gIENsb3VkRm9ybWF0aW9uQ3VzdG9tUmVzb3VyY2VVcGRhdGVFdmVudCxcbiAgQ2xvdWRGb3JtYXRpb25DdXN0b21SZXNvdXJjZURlbGV0ZUV2ZW50LFxufSBmcm9tIFwiYXdzLWxhbWJkYVwiXG5pbXBvcnQgeyBiYWNrT2ZmIH0gZnJvbSBcImV4cG9uZW50aWFsLWJhY2tvZmZcIlxuaW1wb3J0IHsgZm9ybWF0IH0gZnJvbSBcIm5vZGUtcGctZm9ybWF0XCJcbmltcG9ydCB7IENsaWVudCB9IGZyb20gXCJwZ1wiXG5pbXBvcnQgeyBSZHNTcWxSZXNvdXJjZSB9IGZyb20gXCIuL2VudW1cIlxuXG5pbnRlcmZhY2UgQ3VzdG9tUmVzb3VyY2VSZXNwb25zZSB7XG4gIFBoeXNpY2FsUmVzb3VyY2VJZD86IHN0cmluZ1xuICBEYXRhPzogYW55XG4gIE5vRWNobz86IGJvb2xlYW5cbn1cblxudHlwZSBDcmVhdGVSZXNvdXJjZUhhbmRsZXIgPSAoXG4gIHJlc291cmNlSWQ6IHN0cmluZyxcbiAgcHJvcHM/OiBhbnlcbikgPT4gUHJvbWlzZTxzdHJpbmcgfCBzdHJpbmdbXT5cbnR5cGUgVXBkYXRlUmVzb3VyY2VIYW5kbGVyID0gKFxuICByZXNvdXJjZUlkOiBzdHJpbmcsXG4gIG9sZFJlc291cmNlSWQ6IHN0cmluZyxcbiAgcHJvcHM/OiBhbnlcbikgPT4gUHJvbWlzZTxzdHJpbmcgfCBzdHJpbmdbXSB8IHZvaWQ+XG50eXBlIERlbGV0ZVJlc291cmNlSGFuZGxlciA9IChyZXNvdXJjZUlkOiBzdHJpbmcsIHByb3BzPzogYW55KSA9PiBzdHJpbmcgfCBzdHJpbmdbXSB8IHZvaWRcblxudHlwZSBKdW1wVGFibGUgPSB7XG4gIFtrZXkgaW4gUmRzU3FsUmVzb3VyY2VdOiB7XG4gICAgQ3JlYXRlOiBDcmVhdGVSZXNvdXJjZUhhbmRsZXJcbiAgICBVcGRhdGU6IFVwZGF0ZVJlc291cmNlSGFuZGxlclxuICAgIERlbGV0ZTogRGVsZXRlUmVzb3VyY2VIYW5kbGVyXG4gIH1cbn1cblxuaW50ZXJmYWNlIFJvbGVQcm9wcyB7XG4gIC8qKlxuICAgKiBTZWNyZXQgQVJOLlxuICAgKi9cbiAgUGFzc3dvcmRBcm46IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBkYXRhYmFzZSB0byB3aGljaCByb2xlIGlzIGdyYW50ZWQgY29ubmVjdCBwZXJtaXNzaW9ucy5cbiAgICovXG4gIERhdGFiYXNlTmFtZT86IHN0cmluZ1xufVxuXG5pbnRlcmZhY2UgRGF0YWJhc2VQcm9wcyB7XG4gIE93bmVyOiBzdHJpbmdcbn1cblxuaW50ZXJmYWNlIERhdGFiYXNlVXBkYXRlUHJvcHMgZXh0ZW5kcyBEYXRhYmFzZVByb3BzIHtcbiAgTWFzdGVyT3duZXI6IHN0cmluZ1xufVxuXG5jb25zdCBtYXhBdHRlbXB0cyA9IDIwXG5cbmNvbnN0IGp1bXBUYWJsZTogSnVtcFRhYmxlID0ge1xuICBzcWw6IHtcbiAgICBDcmVhdGU6IChfOiBzdHJpbmcsIHByb3BzPzogYW55KSA9PiB7XG4gICAgICByZXR1cm4gcHJvcHMuU3RhdGVtZW50XG4gICAgfSxcbiAgICBVcGRhdGU6IChfOiBzdHJpbmcsIF9fOiBzdHJpbmcsIHByb3BzPzogYW55KSA9PiB7XG4gICAgICByZXR1cm4gcHJvcHMuU3RhdGVtZW50XG4gICAgfSxcbiAgICBEZWxldGU6IChfOiBzdHJpbmcsIHByb3BzPzogYW55KSA9PiB7XG4gICAgICByZXR1cm4gcHJvcHMuUm9sbGJhY2tcbiAgICB9LFxuICB9LFxuICBzY2hlbWE6IHtcbiAgICBDcmVhdGU6IGFzeW5jIChyZXNvdXJjZUlkOiBzdHJpbmcpID0+IHtcbiAgICAgIHJldHVybiBmb3JtYXQoXCJjcmVhdGUgc2NoZW1hIGlmIG5vdCBleGlzdHMgJUlcIiwgcmVzb3VyY2VJZClcbiAgICB9LFxuICAgIFVwZGF0ZTogYXN5bmMgKHJlc291cmNlSWQ6IHN0cmluZywgb2xkUmVzb3VyY2VJZDogc3RyaW5nKSA9PiB7XG4gICAgICByZXR1cm4gZm9ybWF0KFwiYWx0ZXIgc2NoZW1hICVJIHJlbmFtZSB0byAlSVwiLCBvbGRSZXNvdXJjZUlkLCByZXNvdXJjZUlkKVxuICAgIH0sXG4gICAgRGVsZXRlOiAocmVzb3VyY2VJZDogc3RyaW5nKSA9PiB7XG4gICAgICByZXR1cm4gZm9ybWF0KFwiZHJvcCBzY2hlbWEgaWYgZXhpc3RzICVJIGNhc2NhZGVcIiwgcmVzb3VyY2VJZClcbiAgICB9LFxuICB9LFxuICByb2xlOiB7XG4gICAgQ3JlYXRlOiBhc3luYyAocmVzb3VyY2VJZDogc3RyaW5nLCBwcm9wczogUm9sZVByb3BzKSA9PiB7XG4gICAgICBpZiAoIXByb3BzLlBhc3N3b3JkQXJuKSB0aHJvdyBcIk5vIFBhc3N3b3JkQXJuIHByb3ZpZGVkXCJcbiAgICAgIGNvbnN0IHBhc3N3b3JkID0gYXdhaXQgZ2V0UGFzc3dvcmQocHJvcHMuUGFzc3dvcmRBcm4pXG4gICAgICBpZiAocGFzc3dvcmQpIHtcbiAgICAgICAgY29uc3Qgc3FsID0gW1xuICAgICAgICAgIFwic3RhcnQgdHJhbnNhY3Rpb25cIixcbiAgICAgICAgICBmb3JtYXQoXCJjcmVhdGUgcm9sZSAlSSB3aXRoIGxvZ2luIHBhc3N3b3JkICVMXCIsIHJlc291cmNlSWQsIHBhc3N3b3JkKSxcbiAgICAgICAgXVxuICAgICAgICBpZiAocHJvcHMuRGF0YWJhc2VOYW1lKSB7XG4gICAgICAgICAgLy8gZ3JhbnQgY29ubmVjdCB0byBkYXRhYmFzZSBpZiBkYXRhYmFzZSBhbHJlYWR5IGV4aXN0c1xuICAgICAgICAgIHNxbC5wdXNoKFxuICAgICAgICAgICAgZm9ybWF0KFxuICAgICAgICAgICAgICBgRE8gJCRcbkJFR0lOXG4gIElGIEVYSVNUUyAoc2VsZWN0IGZyb20gcGdfZGF0YWJhc2Ugd2hlcmUgZGF0bmFtZSA9ICclcycgYW5kIGRhdGlzdGVtcGxhdGUgPSBmYWxzZSkgVEhFTlxuICAgIGdyYW50IGNvbm5lY3Qgb24gZGF0YWJhc2UgJUkgdG8gJUk7XG4gIEVORCBJRjtcbkVORCQkO2AsXG4gICAgICAgICAgICAgIHByb3BzLkRhdGFiYXNlTmFtZSxcbiAgICAgICAgICAgICAgcHJvcHMuRGF0YWJhc2VOYW1lLFxuICAgICAgICAgICAgICByZXNvdXJjZUlkXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICAgIHNxbC5wdXNoKFwiY29tbWl0XCIpXG4gICAgICAgIHJldHVybiBzcWxcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGBDYW5ub3QgcGFyc2UgcGFzc3dvcmQgZnJvbSAke3Byb3BzLlBhc3N3b3JkQXJufWBcbiAgICAgIH1cbiAgICB9LFxuICAgIFVwZGF0ZTogYXN5bmMgKHJlc291cmNlSWQ6IHN0cmluZywgb2xkUmVzb3VyY2VJZDogc3RyaW5nLCBwcm9wczogUm9sZVByb3BzKSA9PiB7XG4gICAgICAvLyBUT0RPOiBpZiBkYXRhYmFzZSBuYW1lIGhhcyBjaGFuZ2VkIGluIE9sZFJlc291cmNlUHJvcGVydGllcywgcmV2b2tlIGNvbm5lY3RcbiAgICAgIGlmIChwcm9wcyAmJiBwcm9wcy5QYXNzd29yZEFybikge1xuICAgICAgICBjb25zdCBwYXNzd29yZCA9IGF3YWl0IGdldFBhc3N3b3JkKHByb3BzLlBhc3N3b3JkQXJuKVxuICAgICAgICBpZiAocGFzc3dvcmQpIHtcbiAgICAgICAgICBjb25zdCBzcWwgPSBbXCJzdGFydCB0cmFuc2FjdGlvblwiXVxuICAgICAgICAgIGlmIChvbGRSZXNvdXJjZUlkICE9PSByZXNvdXJjZUlkKSB7XG4gICAgICAgICAgICBzcWwucHVzaChmb3JtYXQoXCJhbHRlciByb2xlICVJIHJlbmFtZSB0byAlSVwiLCBvbGRSZXNvdXJjZUlkLCByZXNvdXJjZUlkKSlcbiAgICAgICAgICB9XG4gICAgICAgICAgc3FsLnB1c2goZm9ybWF0KFwiYWx0ZXIgcm9sZSAlSSB3aXRoIHBhc3N3b3JkICVMXCIsIHJlc291cmNlSWQsIHBhc3N3b3JkKSlcbiAgICAgICAgICBpZiAocHJvcHMuRGF0YWJhc2VOYW1lKSB7XG4gICAgICAgICAgICBzcWwucHVzaChcbiAgICAgICAgICAgICAgZm9ybWF0KFwiZ3JhbnQgY29ubmVjdCBvbiBkYXRhYmFzZSAlSSB0byAlSVwiLCBwcm9wcy5EYXRhYmFzZU5hbWUsIHJlc291cmNlSWQpXG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuICAgICAgICAgIHNxbC5wdXNoKFwiY29tbWl0XCIpXG4gICAgICAgICAgcmV0dXJuIHNxbFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IGBDYW5ub3QgcGFyc2UgcGFzc3dvcmQgZnJvbSAke3Byb3BzLlBhc3N3b3JkQXJufWBcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgc3FsID0gW1wic3RhcnQgdHJhbnNhY3Rpb25cIl1cbiAgICAgICAgaWYgKG9sZFJlc291cmNlSWQgIT09IHJlc291cmNlSWQpIHtcbiAgICAgICAgICBzcWwucHVzaChmb3JtYXQoXCJhbHRlciByb2xlICVJIHJlbmFtZSB0byAlSVwiLCBvbGRSZXNvdXJjZUlkLCByZXNvdXJjZUlkKSlcbiAgICAgICAgfVxuICAgICAgICBzcWwucHVzaChcbiAgICAgICAgICBmb3JtYXQoXG4gICAgICAgICAgICBgRE8gJCRcbkJFR0lOXG4gIElGIEVYSVNUUyAoc2VsZWN0IGZyb20gcGdfZGF0YWJhc2Ugd2hlcmUgZGF0bmFtZSA9ICclcycgYW5kIGRhdGlzdGVtcGxhdGUgPSBmYWxzZSkgVEhFTlxuICAgIGdyYW50IGNvbm5lY3Qgb24gZGF0YWJhc2UgJUkgdG8gJUk7XG4gIEVORCBJRjtcbkVORCQkO2AsXG4gICAgICAgICAgICBwcm9wcy5EYXRhYmFzZU5hbWUsXG4gICAgICAgICAgICBwcm9wcy5EYXRhYmFzZU5hbWUsXG4gICAgICAgICAgICByZXNvdXJjZUlkXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICAgIHNxbC5wdXNoKFwiY29tbWl0XCIpXG4gICAgICAgIHJldHVybiBzcWxcbiAgICAgIH1cbiAgICB9LFxuICAgIERlbGV0ZTogKHJlc291cmNlSWQ6IHN0cmluZywgcHJvcHM6IFJvbGVQcm9wcykgPT4ge1xuICAgICAgLy8gVE9ETzogaWYgdXNlciBpcyBvd25lciBvZiBhIGRhdGFiYXNlLCBhc3NpZ24gb3duZXJzaGlwIHRvIG1hc3RlciB1c2VyXG4gICAgICAvLyBUaGlzIHdpbGwgcmVxdWlyZSBhIHNwZWNpZmllZCBpbmhlcml0b3Igb24gcm9sZSBjcmVhdGlvblxuICAgICAgcmV0dXJuIFtcbiAgICAgICAgXCJzdGFydCB0cmFuc2FjdGlvblwiLFxuICAgICAgICBmb3JtYXQoXG4gICAgICAgICAgYERPICQkXG5CRUdJTlxuICBJRiBFWElTVFMgKHNlbGVjdCBmcm9tIHBnX2NhdGFsb2cucGdfcm9sZXMgV0hFUkUgcm9sbmFtZSA9ICclcycpIEFORCBFWElTVFMgKHNlbGVjdCBmcm9tIHBnX2RhdGFiYXNlIFdIRVJFIGRhdG5hbWUgPSAnJXMnKSBUSEVOXG4gICAgcmV2b2tlIGFsbCBwcml2aWxlZ2VzIG9uIGRhdGFiYXNlICVJIGZyb20gJUk7XG4gIEVORCBJRjtcbkVORCQkO2AsXG4gICAgICAgICAgcmVzb3VyY2VJZCxcbiAgICAgICAgICBwcm9wcy5EYXRhYmFzZU5hbWUsXG4gICAgICAgICAgcHJvcHMuRGF0YWJhc2VOYW1lLFxuICAgICAgICAgIHJlc291cmNlSWRcbiAgICAgICAgKSxcbiAgICAgICAgZm9ybWF0KFwiZHJvcCByb2xlIGlmIGV4aXN0cyAlSVwiLCByZXNvdXJjZUlkKSxcbiAgICAgICAgXCJjb21taXRcIixcbiAgICAgIF1cbiAgICB9LFxuICB9LFxuICBkYXRhYmFzZToge1xuICAgIENyZWF0ZTogYXN5bmMgKHJlc291cmNlSWQ6IHN0cmluZywgcHJvcHM6IERhdGFiYXNlUHJvcHMpID0+IHtcbiAgICAgIGNvbnN0IG93bmVyID0gcHJvcHMuT3duZXJcbiAgICAgIGlmIChvd25lcikge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIGZvcm1hdChcImNyZWF0ZSBkYXRhYmFzZSAlSVwiLCByZXNvdXJjZUlkKSxcbiAgICAgICAgICBmb3JtYXQoXCJhbHRlciBkYXRhYmFzZSAlSSBvd25lciB0byAlSVwiLCByZXNvdXJjZUlkLCBvd25lciksXG4gICAgICAgIF1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmb3JtYXQoXCJjcmVhdGUgZGF0YWJhc2UgJUlcIiwgcmVzb3VyY2VJZClcbiAgICAgIH1cbiAgICB9LFxuICAgIFVwZGF0ZTogYXN5bmMgKFxuICAgICAgcmVzb3VyY2VJZDogc3RyaW5nLFxuICAgICAgb2xkUmVzb3VyY2VJZDogc3RyaW5nLFxuICAgICAgcHJvcHM6IERhdGFiYXNlVXBkYXRlUHJvcHNcbiAgICApOiBQcm9taXNlPHN0cmluZ1tdPiA9PiB7XG4gICAgICBjb25zdCBzdGF0ZW1lbnRzOiBzdHJpbmdbXSA9IFtdXG4gICAgICBpZiAocmVzb3VyY2VJZCAhPT0gb2xkUmVzb3VyY2VJZCkge1xuICAgICAgICBpZiAocHJvcHMuTWFzdGVyT3duZXIpIHtcbiAgICAgICAgICBzdGF0ZW1lbnRzLnB1c2goXG4gICAgICAgICAgICBmb3JtYXQoXCJhbHRlciBkYXRhYmFzZSAlSSBvd25lciB0byAlSVwiLCBvbGRSZXNvdXJjZUlkLCBwcm9wcy5NYXN0ZXJPd25lcilcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgICAgc3RhdGVtZW50cy5wdXNoKFxuICAgICAgICAgIGZvcm1hdChcImFsdGVyIGRhdGFiYXNlICVJIHJlbmFtZSB0byAlSVwiLCBvbGRSZXNvdXJjZUlkLCByZXNvdXJjZUlkKVxuICAgICAgICApXG4gICAgICB9XG4gICAgICBjb25zdCBvd25lciA9IHByb3BzLk93bmVyXG4gICAgICBpZiAob3duZXIpIHtcbiAgICAgICAgc3RhdGVtZW50cy5wdXNoKGZvcm1hdChcImFsdGVyIGRhdGFiYXNlICVJIG93bmVyIHRvICVJXCIsIHJlc291cmNlSWQsIHByb3BzLk93bmVyKSlcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdGF0ZW1lbnRzXG4gICAgfSxcbiAgICBEZWxldGU6IChyZXNvdXJjZUlkOiBzdHJpbmcsIG5ld093bmVyOiBzdHJpbmcpID0+IHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIGZvcm1hdChcbiAgICAgICAgICBcInNlbGVjdCBwZ190ZXJtaW5hdGVfYmFja2VuZChwZ19zdGF0X2FjdGl2aXR5LnBpZCkgZnJvbSBwZ19zdGF0X2FjdGl2aXR5IHdoZXJlIGRhdG5hbWUgPSAlTFwiLFxuICAgICAgICAgIHJlc291cmNlSWRcbiAgICAgICAgKSxcbiAgICAgICAgZm9ybWF0KFxuICAgICAgICAgIFwiRE8gJCRCRUdJTlxcbklGIEVYSVNUUyAoc2VsZWN0IGZyb20gcGdfZGF0YWJhc2UgV0hFUkUgZGF0bmFtZSA9ICclcycpIFRIRU4gYWx0ZXIgZGF0YWJhc2UgJUkgb3duZXIgdG8gJUk7IEVORCBJRjtcXG5FTkQkJDtcIixcbiAgICAgICAgICByZXNvdXJjZUlkLFxuICAgICAgICAgIHJlc291cmNlSWQsXG4gICAgICAgICAgbmV3T3duZXJcbiAgICAgICAgKSxcbiAgICAgICAgZm9ybWF0KFwiZHJvcCBkYXRhYmFzZSBpZiBleGlzdHMgJUlcIiwgcmVzb3VyY2VJZCksXG4gICAgICBdXG4gICAgfSxcbiAgfSxcbn1cblxuY29uc3QgbG9nID1cbiAgcHJvY2Vzcy5lbnYuTE9HR0VSID09PSBcInRydWVcIlxuICAgID8gY29uc29sZS5kZWJ1Z1xuICAgIDogKF9tZXNzYWdlPzogYW55LCAuLi5fb3B0aW9uYWxQYXJhbXM6IGFueVtdKSA9PiB7fVxuXG5leHBvcnQgY29uc3QgaGFuZGxlciA9IGFzeW5jIChcbiAgZXZlbnQ6XG4gICAgfCBDbG91ZEZvcm1hdGlvbkN1c3RvbVJlc291cmNlQ3JlYXRlRXZlbnRcbiAgICB8IENsb3VkRm9ybWF0aW9uQ3VzdG9tUmVzb3VyY2VVcGRhdGVFdmVudFxuICAgIHwgQ2xvdWRGb3JtYXRpb25DdXN0b21SZXNvdXJjZURlbGV0ZUV2ZW50XG4pOiBQcm9taXNlPGFueT4gPT4ge1xuICBsb2coZXZlbnQpXG5cbiAgY29uc3QgcmVxdWVzdFR5cGUgPSBldmVudC5SZXF1ZXN0VHlwZVxuICBjb25zdCByZXNvdXJjZTogUmRzU3FsUmVzb3VyY2UgPSBldmVudC5SZXNvdXJjZVByb3BlcnRpZXMuUmVzb3VyY2VcbiAgY29uc3QgcmVzb3VyY2VJZCA9IGV2ZW50LlJlc291cmNlUHJvcGVydGllcy5SZXNvdXJjZUlkXG4gIGNvbnN0IGRhdGFiYXNlTmFtZSA9IGV2ZW50LlJlc291cmNlUHJvcGVydGllcy5EYXRhYmFzZU5hbWVcblxuICBpZiAoIU9iamVjdC5rZXlzKGp1bXBUYWJsZSkuaW5jbHVkZXMoZXZlbnQuUmVzb3VyY2VQcm9wZXJ0aWVzLlJlc291cmNlKSkge1xuICAgIHRocm93IGBSZXNvdXJjZSB0eXBlICcke3Jlc291cmNlfScgbm90IHJlY29nbmlzZWQuYFxuICB9XG5cbiAgY29uc3Qgc2VjcmV0c19jbGllbnQgPSBuZXcgU2VjcmV0c01hbmFnZXJDbGllbnQoe30pXG4gIGNvbnN0IGNvbW1hbmQgPSBuZXcgR2V0U2VjcmV0VmFsdWVDb21tYW5kKHtcbiAgICBTZWNyZXRJZDogZXZlbnQuUmVzb3VyY2VQcm9wZXJ0aWVzLlNlY3JldEFybixcbiAgfSlcbiAgLy8gQXMgdGhlIElBTSBjcmVkZW50aWFscyBjYW4gYmUgY2FjaGVkLCBhbiB1cGRhdGUgbWFrZGUgdmVyeSByZWNlbnRcbiAgLy8gY291bGQgbm90IHlldCBiZSBhdmFpbGFibGUuXG4gIC8vIFNvIHdlIHJldHJ5IHRoaXMgYSBiaXQuXG4gIGxvZyhcIkZldGNoaW5nIHNlY3JldFwiKVxuICBjb25zdCBzZWNyZXQ6IEdldFNlY3JldFZhbHVlQ29tbWFuZE91dHB1dCA9IGF3YWl0IGJhY2tPZmYoXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2VjcmV0c19jbGllbnQuc2VuZChjb21tYW5kKVxuICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZyhcIkVycm9yIGZldGNoaW5nIHNlY3JldCAlb1wiLCBlKVxuICAgICAgICB0aHJvdyBlXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBudW1PZkF0dGVtcHRzOiAxMCxcbiAgICAgIHN0YXJ0aW5nRGVsYXk6IDUwMCxcbiAgICB9XG4gIClcbiAgaWYgKCFzZWNyZXQuU2VjcmV0U3RyaW5nKSB0aHJvdyBcIk5vIHNlY3JldCBzdHJpbmdcIlxuICBjb25zdCBzZWNyZXRWYWx1ZXMgPSBKU09OLnBhcnNlKHNlY3JldC5TZWNyZXRTdHJpbmcpXG5cbiAgbGV0IHNxbDogc3RyaW5nIHwgc3RyaW5nW10gfCB2b2lkXG4gIHN3aXRjaCAocmVxdWVzdFR5cGUpIHtcbiAgICBjYXNlIFwiQ3JlYXRlXCI6IHtcbiAgICAgIHNxbCA9IGF3YWl0IGp1bXBUYWJsZVtyZXNvdXJjZV1bcmVxdWVzdFR5cGVdKHJlc291cmNlSWQsIGV2ZW50LlJlc291cmNlUHJvcGVydGllcylcbiAgICAgIGJyZWFrXG4gICAgfVxuICAgIGNhc2UgXCJVcGRhdGVcIjoge1xuICAgICAgY29uc3Qgb2xkUmVzb3VyY2VJZCA9IChldmVudCBhcyBDbG91ZEZvcm1hdGlvbkN1c3RvbVJlc291cmNlVXBkYXRlRXZlbnQpXG4gICAgICAgIC5QaHlzaWNhbFJlc291cmNlSWRcbiAgICAgIHNxbCA9IGF3YWl0IGp1bXBUYWJsZVtyZXNvdXJjZV1bcmVxdWVzdFR5cGVdKHJlc291cmNlSWQsIG9sZFJlc291cmNlSWQsIHtcbiAgICAgICAgLi4uZXZlbnQuUmVzb3VyY2VQcm9wZXJ0aWVzLFxuICAgICAgICBNYXN0ZXJPd25lcjogc2VjcmV0VmFsdWVzLnVzZXJuYW1lLFxuICAgICAgfSlcbiAgICAgIGJyZWFrXG4gICAgfVxuICAgIGNhc2UgXCJEZWxldGVcIjoge1xuICAgICAgaWYgKHJlc291cmNlID09PSBSZHNTcWxSZXNvdXJjZS5EQVRBQkFTRSkge1xuICAgICAgICBzcWwgPSBqdW1wVGFibGVbcmVzb3VyY2VdW3JlcXVlc3RUeXBlXShyZXNvdXJjZUlkLCBzZWNyZXRWYWx1ZXMudXNlcm5hbWUpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzcWwgPSBqdW1wVGFibGVbcmVzb3VyY2VdW3JlcXVlc3RUeXBlXShyZXNvdXJjZUlkLCBldmVudC5SZXNvdXJjZVByb3BlcnRpZXMpXG4gICAgICB9XG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIGlmIChzcWwpIHtcbiAgICBsZXQgZGF0YWJhc2U6IHN0cmluZ1xuICAgIGlmIChyZXNvdXJjZSA9PT0gUmRzU3FsUmVzb3VyY2UuUk9MRSkge1xuICAgICAgZGF0YWJhc2UgPSBzZWNyZXRWYWx1ZXMuZGJuYW1lXG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGFiYXNlID0gZGF0YWJhc2VOYW1lID8/IHNlY3JldFZhbHVlcy5kYm5hbWUgLy8gY29ubmVjdCB0byBnaXZlbiBkYXRhYmFzZSBpZiBwb3NzaWJsZSwgZWxzZSB0byBkYXRhYmFzZSBtZW50aW9uZWQgaW4gc2VjcmV0XG4gICAgfVxuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIGhvc3Q6IHNlY3JldFZhbHVlcy5ob3N0LFxuICAgICAgcG9ydDogc2VjcmV0VmFsdWVzLnBvcnQsXG4gICAgICB1c2VyOiBzZWNyZXRWYWx1ZXMudXNlcm5hbWUsXG4gICAgICBwYXNzd29yZDogc2VjcmV0VmFsdWVzLnBhc3N3b3JkLFxuICAgICAgZGF0YWJhc2U6IGRhdGFiYXNlLFxuICAgICAgY29ubmVjdGlvblRpbWVvdXRNaWxsaXM6IDMwMDAwLCAvLyByZXR1cm4gYW4gZXJyb3IgaWYgYSBjb25uZWN0aW9uIGNvdWxkIG5vdCBiZSBlc3RhYmxpc2hlZCB3aXRoaW4gMzAgc2Vjb25kc1xuICAgIH1cbiAgICBsb2coXG4gICAgICBgQ29ubmVjdGluZyB0byBob3N0ICR7cGFyYW1zLmhvc3R9OiAke3BhcmFtcy5wb3J0fSwgZGF0YWJhc2UgJHtwYXJhbXMuZGF0YWJhc2V9IGFzICR7cGFyYW1zLnVzZXJ9YFxuICAgIClcbiAgICBsb2coXCJFeGVjdXRpbmcgU1FMXCIsIHNxbClcbiAgICBjb25zdCBwZ19jbGllbnQgPSBuZXcgQ2xpZW50KHBhcmFtcylcbiAgICBhd2FpdCBwZ19jbGllbnQuY29ubmVjdCgpXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGJhY2tPZmYoXG4gICAgICAgIGFzeW5jICgpID0+IHtcbiAgICAgICAgICBpZiAodHlwZW9mIHNxbCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIHBnX2NsaWVudC5xdWVyeShzcWwpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChzcWwpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKFxuICAgICAgICAgICAgICAgIHNxbC5tYXAoKHN0YXRlbWVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHBnX2NsaWVudC5xdWVyeShzdGF0ZW1lbnQpXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgcmV0cnk6IGVycm9yRmlsdGVyLFxuICAgICAgICAgIG51bU9mQXR0ZW1wdHM6IG1heEF0dGVtcHRzLFxuICAgICAgICB9XG4gICAgICApXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IHBnX2NsaWVudC5lbmQoKVxuICAgIH1cbiAgfVxuXG4gIGxldCByZXNwb25zZTogQ3VzdG9tUmVzb3VyY2VSZXNwb25zZSA9IHt9XG4gIC8vIEV4Y2VwdCBmb3IgdGhlIFNRTCByZXNvdXJjZSwgcmV0dXJuIHRoZSBuZXcgcmVzb3VyY2UgaWQuIFRoaXNcbiAgLy8gd2lsbCBjYXVzZSBhIGRlbGV0ZSB0byBiZSBzZW5kIGZvciB0aGUgb2xkIHJlc291cmNlLlxuICBpZiAocmVzb3VyY2UgIT09IFJkc1NxbFJlc291cmNlLlNRTCkge1xuICAgIHJlc3BvbnNlLlBoeXNpY2FsUmVzb3VyY2VJZCA9IHJlc291cmNlSWRcbiAgfVxuXG4gIHJldHVybiByZXNwb25zZVxufVxuXG4vLyBDdXN0b20gZXJyb3IgZmlsdGVyLCBtYWlubHkgdG8gcmV0cnkgcm9sZSBjcmVhdGlvbi5cbi8vIEZyZXF1ZW50bHkgc2VlIFwidHVwbGUgY29uY3VycmVudGx5IHVwZGF0ZWRcIiwgYW5kIGFkZGluZ1xuLy8gZGVwZW5kZW5jaWVzIGlzIHZlcnkgaGFyZCB0byBtYWtlIHdvcmsuXG5jb25zdCBlcnJvckZpbHRlciA9IChlcnJvcjogYW55LCBuZXh0QXR0ZW1wdE51bWJlcjogbnVtYmVyKSA9PiB7XG4gIC8vIFJldHJ5IG9ubHkgaWYgdGhlIGVycm9yIG1lc3NhZ2UgY29udGFpbnMgXCJ0dXBsZSBjb25jdXJyZW50bHlcIlxuICAvLyBUaGlzIHdpbGwgY292ZXIgY29uY3VycmVudCB1cGRhdGVzIGFuZCBkZWxldGVzXG4gIGNvbnN0IHdpbGxSZXRyeSA9IGVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoXCJ0dXBsZSBjb25jdXJyZW50bHlcIilcbiAgbG9nKFxuICAgIFwiRW5jb3VudGVyZWQgYW4gZXJyb3Igb24gYXR0ZW1wdCAlZC8lZCByZXRyeT0lcyBlcnJvcj1bJW9dXCIsXG4gICAgbmV4dEF0dGVtcHROdW1iZXIgLSAxLFxuICAgIG1heEF0dGVtcHRzLFxuICAgIHdpbGxSZXRyeSxcbiAgICBlcnJvclxuICApXG4gIHJldHVybiB3aWxsUmV0cnlcbn1cblxuLyoqXG4gKiBQYXJzZSBwYXNzd29yZCBmaWVsZCBmcm9tIHNlY3JldC4gUmV0dXJucyB2b2lkIG9uIGVycm9yLlxuICovXG5jb25zdCBnZXRQYXNzd29yZCA9IGFzeW5jIChhcm46IHN0cmluZyk6IFByb21pc2U8c3RyaW5nIHwgdm9pZD4gPT4ge1xuICBjb25zdCBzZWNyZXRzX2NsaWVudCA9IG5ldyBTZWNyZXRzTWFuYWdlckNsaWVudCh7fSlcbiAgY29uc3QgY29tbWFuZCA9IG5ldyBHZXRTZWNyZXRWYWx1ZUNvbW1hbmQoe1xuICAgIFNlY3JldElkOiBhcm4sXG4gIH0pXG4gIGNvbnN0IHNlY3JldCA9IGF3YWl0IHNlY3JldHNfY2xpZW50LnNlbmQoY29tbWFuZClcbiAgaWYgKHNlY3JldC5TZWNyZXRTdHJpbmcpIHtcbiAgICBjb25zdCBqc29uID0gSlNPTi5wYXJzZShzZWNyZXQuU2VjcmV0U3RyaW5nKVxuICAgIHJldHVybiBqc29uLnBhc3N3b3JkXG4gIH1cbn1cbiJdfQ==
|
|
309
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9oYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDRFQUl3QztBQU14Qyw2REFBNkM7QUFDN0MsbURBQXVDO0FBQ3ZDLDJCQUEyQjtBQUMzQixpQ0FBdUM7QUFzRHZDLE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQTtBQUV0QixNQUFNLFNBQVMsR0FBYztJQUMzQixHQUFHLEVBQUU7UUFDSCxNQUFNLEVBQUUsQ0FBQyxDQUFTLEVBQUUsS0FBVyxFQUFFLEVBQUU7WUFDakMsT0FBTyxLQUFLLENBQUMsU0FBUyxDQUFBO1FBQ3hCLENBQUM7UUFDRCxNQUFNLEVBQUUsQ0FBQyxDQUFTLEVBQUUsRUFBVSxFQUFFLEtBQVcsRUFBRSxFQUFFO1lBQzdDLE9BQU8sS0FBSyxDQUFDLFNBQVMsQ0FBQTtRQUN4QixDQUFDO1FBQ0QsTUFBTSxFQUFFLENBQUMsQ0FBUyxFQUFFLEtBQVcsRUFBRSxFQUFFO1lBQ2pDLE9BQU8sS0FBSyxDQUFDLFFBQVEsQ0FBQTtRQUN2QixDQUFDO0tBQ0Y7SUFDRCxNQUFNLEVBQUU7UUFDTixNQUFNLEVBQUUsS0FBSyxFQUFFLFVBQWtCLEVBQUUsS0FBa0IsRUFBRSxFQUFFO1lBQ3ZELE1BQU0sR0FBRyxHQUFhLENBQUMsdUJBQU0sQ0FBQyxnQ0FBZ0MsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFBO1lBQzVFLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRTtnQkFDbEIsa0JBQWtCLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTthQUNqRjtZQUNELE9BQU8sR0FBRyxDQUFBO1FBQ1osQ0FBQztRQUNELE1BQU0sRUFBRSxLQUFLLEVBQUUsVUFBa0IsRUFBRSxhQUFxQixFQUFFLEtBQWtC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InNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIFNlY3JldHNNYW5hZ2VyQ2xpZW50LFxuICBHZXRTZWNyZXRWYWx1ZUNvbW1hbmQsXG4gIEdldFNlY3JldFZhbHVlQ29tbWFuZE91dHB1dCxcbn0gZnJvbSBcIkBhd3Mtc2RrL2NsaWVudC1zZWNyZXRzLW1hbmFnZXJcIlxuaW1wb3J0IHtcbiAgQ2xvdWRGb3JtYXRpb25DdXN0b21SZXNvdXJjZUNyZWF0ZUV2ZW50LFxuICBDbG91ZEZvcm1hdGlvbkN1c3RvbVJlc291cmNlVXBkYXRlRXZlbnQsXG4gIENsb3VkRm9ybWF0aW9uQ3VzdG9tUmVzb3VyY2VEZWxldGVFdmVudCxcbn0gZnJvbSBcImF3cy1sYW1iZGFcIlxuaW1wb3J0IHsgYmFja09mZiB9IGZyb20gXCJleHBvbmVudGlhbC1iYWNrb2ZmXCJcbmltcG9ydCB7IGZvcm1hdCB9IGZyb20gXCJub2RlLXBnLWZvcm1hdFwiXG5pbXBvcnQgeyBDbGllbnQgfSBmcm9tIFwicGdcIlxuaW1wb3J0IHsgUmRzU3FsUmVzb3VyY2UgfSBmcm9tIFwiLi9lbnVtXCJcblxuaW50ZXJmYWNlIEN1c3RvbVJlc291cmNlUmVzcG9uc2Uge1xuICBQaHlzaWNhbFJlc291cmNlSWQ/OiBzdHJpbmdcbiAgRGF0YT86IGFueVxuICBOb0VjaG8/OiBib29sZWFuXG59XG5cbnR5cGUgQ3JlYXRlUmVzb3VyY2VIYW5kbGVyID0gKFxuICByZXNvdXJjZUlkOiBzdHJpbmcsXG4gIHByb3BzPzogYW55XG4pID0+IFByb21pc2U8c3RyaW5nIHwgc3RyaW5nW10+XG50eXBlIFVwZGF0ZVJlc291cmNlSGFuZGxlciA9IChcbiAgcmVzb3VyY2VJZDogc3RyaW5nLFxuICBvbGRSZXNvdXJjZUlkOiBzdHJpbmcsXG4gIHByb3BzPzogYW55XG4pID0+IFByb21pc2U8c3RyaW5nIHwgc3RyaW5nW10gfCB2b2lkPlxudHlwZSBEZWxldGVSZXNvdXJjZUhhbmRsZXIgPSAocmVzb3VyY2VJZDogc3RyaW5nLCBwcm9wcz86IGFueSkgPT4gc3RyaW5nIHwgc3RyaW5nW10gfCB2b2lkXG5cbnR5cGUgSnVtcFRhYmxlID0ge1xuICBba2V5IGluIFJkc1NxbFJlc291cmNlXToge1xuICAgIENyZWF0ZTogQ3JlYXRlUmVzb3VyY2VIYW5kbGVyXG4gICAgVXBkYXRlOiBVcGRhdGVSZXNvdXJjZUhhbmRsZXJcbiAgICBEZWxldGU6IERlbGV0ZVJlc291cmNlSGFuZGxlclxuICB9XG59XG5cbmludGVyZmFjZSBSb2xlUHJvcHMge1xuICAvKipcbiAgICogU2VjcmV0IEFSTi5cbiAgICovXG4gIFBhc3N3b3JkQXJuOiBzdHJpbmdcblxuICAvKipcbiAgICogT3B0aW9uYWwgZGF0YWJhc2UgdG8gd2hpY2ggcm9sZSBpcyBncmFudGVkIGNvbm5lY3QgcGVybWlzc2lvbnMuXG4gICAqL1xuICBEYXRhYmFzZU5hbWU/OiBzdHJpbmdcbn1cblxuaW50ZXJmYWNlIERhdGFiYXNlUHJvcHMge1xuICBPd25lcjogc3RyaW5nXG59XG5cbmludGVyZmFjZSBEYXRhYmFzZVVwZGF0ZVByb3BzIGV4dGVuZHMgRGF0YWJhc2VQcm9wcyB7XG4gIE1hc3Rlck93bmVyOiBzdHJpbmdcbn1cblxuaW50ZXJmYWNlIFNjaGVtYVByb3BzIHtcbiAgLyoqXG4gICAqIE9wdGlvbmFsIHJvbGUgaXMgZ3JhbnRlZCBwZXJtaXNzaW9ucy5cbiAgICovXG4gIFJvbGVOYW1lPzogc3RyaW5nXG59XG5cbmNvbnN0IG1heEF0dGVtcHRzID0gMjBcblxuY29uc3QganVtcFRhYmxlOiBKdW1wVGFibGUgPSB7XG4gIHNxbDoge1xuICAgIENyZWF0ZTogKF86IHN0cmluZywgcHJvcHM/OiBhbnkpID0+IHtcbiAgICAgIHJldHVybiBwcm9wcy5TdGF0ZW1lbnRcbiAgICB9LFxuICAgIFVwZGF0ZTogKF86IHN0cmluZywgX186IHN0cmluZywgcHJvcHM/OiBhbnkpID0+IHtcbiAgICAgIHJldHVybiBwcm9wcy5TdGF0ZW1lbnRcbiAgICB9LFxuICAgIERlbGV0ZTogKF86IHN0cmluZywgcHJvcHM/OiBhbnkpID0+IHtcbiAgICAgIHJldHVybiBwcm9wcy5Sb2xsYmFja1xuICAgIH0sXG4gIH0sXG4gIHNjaGVtYToge1xuICAgIENyZWF0ZTogYXN5bmMgKHJlc291cmNlSWQ6IHN0cmluZywgcHJvcHM6IFNjaGVtYVByb3BzKSA9PiB7XG4gICAgICBjb25zdCBzcWw6IHN0cmluZ1tdID0gW2Zvcm1hdChcImNyZWF0ZSBzY2hlbWEgaWYgbm90IGV4aXN0cyAlSVwiLCByZXNvdXJjZUlkKV1cbiAgICAgIGlmIChwcm9wcy5Sb2xlTmFtZSkge1xuICAgICAgICBncmFudFJvbGVGb3JTY2hlbWEocmVzb3VyY2VJZCwgcHJvcHMuUm9sZU5hbWUpLmZvckVhY2goKHN0bXQpID0+IHNxbC5wdXNoKHN0bXQpKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHNxbFxuICAgIH0sXG4gICAgVXBkYXRlOiBhc3luYyAocmVzb3VyY2VJZDogc3RyaW5nLCBvbGRSZXNvdXJjZUlkOiBzdHJpbmcsIHByb3BzOiBTY2hlbWFQcm9wcykgPT4ge1xuICAgICAgY29uc3Qgc3FsOiBzdHJpbmdbXSA9IFtdXG4gICAgICAvLyBUT0RPOiByZXZva2Ugb2xkIHJvbGUtbmFtZSBpZiBwcm9wcy5Sb2xlTmFtZSB3YXMgcmVtb3ZlZCBvciBjaGFuZ2VkXG4gICAgICBpZiAocHJvcHMuUm9sZU5hbWUpIHtcbiAgICAgICAgcmV2b2tlUm9sZUZyb21TY2hlbWEob2xkUmVzb3VyY2VJZCwgcHJvcHMuUm9sZU5hbWUpLmZvckVhY2goKHN0bXQpID0+XG4gICAgICAgICAgc3FsLnB1c2goc3RtdClcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgc3FsLnB1c2goZm9ybWF0KFwiYWx0ZXIgc2NoZW1hICVJIHJlbmFtZSB0byAlSVwiLCBvbGRSZXNvdXJjZUlkLCByZXNvdXJjZUlkKSlcbiAgICAgIGlmIChwcm9wcy5Sb2xlTmFtZSkge1xuICAgICAgICBncmFudFJvbGVGb3JTY2hlbWEocmVzb3VyY2VJZCwgcHJvcHMuUm9sZU5hbWUpLmZvckVhY2goKHN0bXQpID0+IHNxbC5wdXNoKHN0bXQpKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHNxbFxuICAgIH0sXG4gICAgRGVsZXRlOiAocmVzb3VyY2VJZDogc3RyaW5nLCBwcm9wczogU2NoZW1hUHJvcHMpID0+IHtcbiAgICAgIGNvbnN0IHNxbDogc3RyaW5nW10gPSBbXVxuICAgICAgaWYgKHByb3BzLlJvbGVOYW1lKSB7XG4gICAgICAgIHJldm9rZVJvbGVGcm9tU2NoZW1hKHJlc291cmNlSWQsIHByb3BzLlJvbGVOYW1lKS5mb3JFYWNoKChzdG10KSA9PiBzcWwucHVzaChzdG10KSlcbiAgICAgIH1cbiAgICAgIHNxbC5wdXNoKGZvcm1hdChcImRyb3Agc2NoZW1hIGlmIGV4aXN0cyAlSSBjYXNjYWRlXCIsIHJlc291cmNlSWQpKVxuICAgICAgcmV0dXJuIHNxbFxuICAgIH0sXG4gIH0sXG4gIHJvbGU6IHtcbiAgICBDcmVhdGU6IGFzeW5jIChyZXNvdXJjZUlkOiBzdHJpbmcsIHByb3BzOiBSb2xlUHJvcHMpID0+IHtcbiAgICAgIGlmICghcHJvcHMuUGFzc3dvcmRBcm4pIHRocm93IFwiTm8gUGFzc3dvcmRBcm4gcHJvdmlkZWRcIlxuICAgICAgY29uc3QgcGFzc3dvcmQgPSBhd2FpdCBnZXRQYXNzd29yZChwcm9wcy5QYXNzd29yZEFybilcbiAgICAgIGlmIChwYXNzd29yZCkge1xuICAgICAgICBjb25zdCBzcWwgPSBbXG4gICAgICAgICAgXCJzdGFydCB0cmFuc2FjdGlvblwiLFxuICAgICAgICAgIGZvcm1hdChcImNyZWF0ZSByb2xlICVJIHdpdGggbG9naW4gcGFzc3dvcmQgJUxcIiwgcmVzb3VyY2VJZCwgcGFzc3dvcmQpLFxuICAgICAgICBdXG4gICAgICAgIGlmIChwcm9wcy5EYXRhYmFzZU5hbWUpIHtcbiAgICAgICAgICAvLyBncmFudCBjb25uZWN0IHRvIGRhdGFiYXNlIGlmIGRhdGFiYXNlIGFscmVhZHkgZXhpc3RzXG4gICAgICAgICAgc3FsLnB1c2goXG4gICAgICAgICAgICBmb3JtYXQoXG4gICAgICAgICAgICAgIGBETyAkJFxuQkVHSU5cbiAgSUYgRVhJU1RTIChzZWxlY3QgZnJvbSBwZ19kYXRhYmFzZSB3aGVyZSBkYXRuYW1lID0gJyVzJyBhbmQgZGF0aXN0ZW1wbGF0ZSA9IGZhbHNlKSBUSEVOXG4gICAgZ3JhbnQgY29ubmVjdCBvbiBkYXRhYmFzZSAlSSB0byAlSTtcbiAgRU5EIElGO1xuRU5EJCQ7YCxcbiAgICAgICAgICAgICAgcHJvcHMuRGF0YWJhc2VOYW1lLFxuICAgICAgICAgICAgICBwcm9wcy5EYXRhYmFzZU5hbWUsXG4gICAgICAgICAgICAgIHJlc291cmNlSWRcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgICAgc3FsLnB1c2goXCJjb21taXRcIilcbiAgICAgICAgcmV0dXJuIHNxbFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgYENhbm5vdCBwYXJzZSBwYXNzd29yZCBmcm9tICR7cHJvcHMuUGFzc3dvcmRBcm59YFxuICAgICAgfVxuICAgIH0sXG4gICAgVXBkYXRlOiBhc3luYyAocmVzb3VyY2VJZDogc3RyaW5nLCBvbGRSZXNvdXJjZUlkOiBzdHJpbmcsIHByb3BzOiBSb2xlUHJvcHMpID0+IHtcbiAgICAgIC8vIFRPRE86IGlmIGRhdGFiYXNlIG5hbWUgaGFzIGNoYW5nZWQgaW4gT2xkUmVzb3VyY2VQcm9wZXJ0aWVzLCByZXZva2UgY29ubmVjdFxuICAgICAgaWYgKHByb3BzICYmIHByb3BzLlBhc3N3b3JkQXJuKSB7XG4gICAgICAgIGNvbnN0IHBhc3N3b3JkID0gYXdhaXQgZ2V0UGFzc3dvcmQocHJvcHMuUGFzc3dvcmRBcm4pXG4gICAgICAgIGlmIChwYXNzd29yZCkge1xuICAgICAgICAgIGNvbnN0IHNxbCA9IFtcInN0YXJ0IHRyYW5zYWN0aW9uXCJdXG4gICAgICAgICAgaWYgKG9sZFJlc291cmNlSWQgIT09IHJlc291cmNlSWQpIHtcbiAgICAgICAgICAgIHNxbC5wdXNoKGZvcm1hdChcImFsdGVyIHJvbGUgJUkgcmVuYW1lIHRvICVJXCIsIG9sZFJlc291cmNlSWQsIHJlc291cmNlSWQpKVxuICAgICAgICAgIH1cbiAgICAgICAgICBzcWwucHVzaChmb3JtYXQoXCJhbHRlciByb2xlICVJIHdpdGggcGFzc3dvcmQgJUxcIiwgcmVzb3VyY2VJZCwgcGFzc3dvcmQpKVxuICAgICAgICAgIGlmIChwcm9wcy5EYXRhYmFzZU5hbWUpIHtcbiAgICAgICAgICAgIHNxbC5wdXNoKFxuICAgICAgICAgICAgICBmb3JtYXQoXCJncmFudCBjb25uZWN0IG9uIGRhdGFiYXNlICVJIHRvICVJXCIsIHByb3BzLkRhdGFiYXNlTmFtZSwgcmVzb3VyY2VJZClcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG4gICAgICAgICAgc3FsLnB1c2goXCJjb21taXRcIilcbiAgICAgICAgICByZXR1cm4gc3FsXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgYENhbm5vdCBwYXJzZSBwYXNzd29yZCBmcm9tICR7cHJvcHMuUGFzc3dvcmRBcm59YFxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBzcWwgPSBbXCJzdGFydCB0cmFuc2FjdGlvblwiXVxuICAgICAgICBpZiAob2xkUmVzb3VyY2VJZCAhPT0gcmVzb3VyY2VJZCkge1xuICAgICAgICAgIHNxbC5wdXNoKGZvcm1hdChcImFsdGVyIHJvbGUgJUkgcmVuYW1lIHRvICVJXCIsIG9sZFJlc291cmNlSWQsIHJlc291cmNlSWQpKVxuICAgICAgICB9XG4gICAgICAgIHNxbC5wdXNoKFxuICAgICAgICAgIGZvcm1hdChcbiAgICAgICAgICAgIGBETyAkJFxuQkVHSU5cbiAgSUYgRVhJU1RTIChzZWxlY3QgZnJvbSBwZ19kYXRhYmFzZSB3aGVyZSBkYXRuYW1lID0gJyVzJyBhbmQgZGF0aXN0ZW1wbGF0ZSA9IGZhbHNlKSBUSEVOXG4gICAgZ3JhbnQgY29ubmVjdCBvbiBkYXRhYmFzZSAlSSB0byAlSTtcbiAgRU5EIElGO1xuRU5EJCQ7YCxcbiAgICAgICAgICAgIHByb3BzLkRhdGFiYXNlTmFtZSxcbiAgICAgICAgICAgIHByb3BzLkRhdGFiYXNlTmFtZSxcbiAgICAgICAgICAgIHJlc291cmNlSWRcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICAgc3FsLnB1c2goXCJjb21taXRcIilcbiAgICAgICAgcmV0dXJuIHNxbFxuICAgICAgfVxuICAgIH0sXG4gICAgRGVsZXRlOiAocmVzb3VyY2VJZDogc3RyaW5nLCBwcm9wczogUm9sZVByb3BzKSA9PiB7XG4gICAgICAvLyBUT0RPOiBpZiB1c2VyIGlzIG93bmVyIG9mIGEgZGF0YWJhc2UsIGFzc2lnbiBvd25lcnNoaXAgdG8gbWFzdGVyIHVzZXJcbiAgICAgIC8vIFRoaXMgd2lsbCByZXF1aXJlIGEgc3BlY2lmaWVkIGluaGVyaXRvciBvbiByb2xlIGNyZWF0aW9uXG4gICAgICByZXR1cm4gW1xuICAgICAgICBcInN0YXJ0IHRyYW5zYWN0aW9uXCIsXG4gICAgICAgIGZvcm1hdChcbiAgICAgICAgICBgRE8gJCRcbkJFR0lOXG4gIElGIEVYSVNUUyAoc2VsZWN0IGZyb20gcGdfY2F0YWxvZy5wZ19yb2xlcyBXSEVSRSByb2xuYW1lID0gJyVzJykgQU5EIEVYSVNUUyAoc2VsZWN0IGZyb20gcGdfZGF0YWJhc2UgV0hFUkUgZGF0bmFtZSA9ICclcycpIFRIRU5cbiAgICByZXZva2UgYWxsIHByaXZpbGVnZXMgb24gZGF0YWJhc2UgJUkgZnJvbSAlSTtcbiAgRU5EIElGO1xuRU5EJCQ7YCxcbiAgICAgICAgICByZXNvdXJjZUlkLFxuICAgICAgICAgIHByb3BzLkRhdGFiYXNlTmFtZSxcbiAgICAgICAgICBwcm9wcy5EYXRhYmFzZU5hbWUsXG4gICAgICAgICAgcmVzb3VyY2VJZFxuICAgICAgICApLFxuICAgICAgICBmb3JtYXQoXCJkcm9wIHJvbGUgaWYgZXhpc3RzICVJXCIsIHJlc291cmNlSWQpLFxuICAgICAgICBcImNvbW1pdFwiLFxuICAgICAgXVxuICAgIH0sXG4gIH0sXG4gIGRhdGFiYXNlOiB7XG4gICAgQ3JlYXRlOiBhc3luYyAocmVzb3VyY2VJZDogc3RyaW5nLCBwcm9wczogRGF0YWJhc2VQcm9wcykgPT4ge1xuICAgICAgY29uc3Qgb3duZXIgPSBwcm9wcy5Pd25lclxuICAgICAgaWYgKG93bmVyKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgZm9ybWF0KFwiY3JlYXRlIGRhdGFiYXNlICVJXCIsIHJlc291cmNlSWQpLFxuICAgICAgICAgIGZvcm1hdChcImFsdGVyIGRhdGFiYXNlICVJIG93bmVyIHRvICVJXCIsIHJlc291cmNlSWQsIG93bmVyKSxcbiAgICAgICAgXVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZvcm1hdChcImNyZWF0ZSBkYXRhYmFzZSAlSVwiLCByZXNvdXJjZUlkKVxuICAgICAgfVxuICAgIH0sXG4gICAgVXBkYXRlOiBhc3luYyAoXG4gICAgICByZXNvdXJjZUlkOiBzdHJpbmcsXG4gICAgICBvbGRSZXNvdXJjZUlkOiBzdHJpbmcsXG4gICAgICBwcm9wczogRGF0YWJhc2VVcGRhdGVQcm9wc1xuICAgICk6IFByb21pc2U8c3RyaW5nW10+ID0+IHtcbiAgICAgIGNvbnN0IHN0YXRlbWVudHM6IHN0cmluZ1tdID0gW11cbiAgICAgIGlmIChyZXNvdXJjZUlkICE9PSBvbGRSZXNvdXJjZUlkKSB7XG4gICAgICAgIGlmIChwcm9wcy5NYXN0ZXJPd25lcikge1xuICAgICAgICAgIHN0YXRlbWVudHMucHVzaChcbiAgICAgICAgICAgIGZvcm1hdChcImFsdGVyIGRhdGFiYXNlICVJIG93bmVyIHRvICVJXCIsIG9sZFJlc291cmNlSWQsIHByb3BzLk1hc3Rlck93bmVyKVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZW1lbnRzLnB1c2goXG4gICAgICAgICAgZm9ybWF0KFwiYWx0ZXIgZGF0YWJhc2UgJUkgcmVuYW1lIHRvICVJXCIsIG9sZFJlc291cmNlSWQsIHJlc291cmNlSWQpXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIGNvbnN0IG93bmVyID0gcHJvcHMuT3duZXJcbiAgICAgIGlmIChvd25lcikge1xuICAgICAgICBzdGF0ZW1lbnRzLnB1c2goZm9ybWF0KFwiYWx0ZXIgZGF0YWJhc2UgJUkgb3duZXIgdG8gJUlcIiwgcmVzb3VyY2VJZCwgcHJvcHMuT3duZXIpKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHN0YXRlbWVudHNcbiAgICB9LFxuICAgIERlbGV0ZTogKHJlc291cmNlSWQ6IHN0cmluZywgbmV3T3duZXI6IHN0cmluZykgPT4ge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgZm9ybWF0KFxuICAgICAgICAgIFwic2VsZWN0IHBnX3Rlcm1pbmF0ZV9iYWNrZW5kKHBnX3N0YXRfYWN0aXZpdHkucGlkKSBmcm9tIHBnX3N0YXRfYWN0aXZpdHkgd2hlcmUgZGF0bmFtZSA9ICVMXCIsXG4gICAgICAgICAgcmVzb3VyY2VJZFxuICAgICAgICApLFxuICAgICAgICBmb3JtYXQoXG4gICAgICAgICAgXCJETyAkJEJFR0lOXFxuSUYgRVhJU1RTIChzZWxlY3QgZnJvbSBwZ19kYXRhYmFzZSBXSEVSRSBkYXRuYW1lID0gJyVzJykgVEhFTiBhbHRlciBkYXRhYmFzZSAlSSBvd25lciB0byAlSTsgRU5EIElGO1xcbkVORCQkO1wiLFxuICAgICAgICAgIHJlc291cmNlSWQsXG4gICAgICAgICAgcmVzb3VyY2VJZCxcbiAgICAgICAgICBuZXdPd25lclxuICAgICAgICApLFxuICAgICAgICBmb3JtYXQoXCJkcm9wIGRhdGFiYXNlIGlmIGV4aXN0cyAlSVwiLCByZXNvdXJjZUlkKSxcbiAgICAgIF1cbiAgICB9LFxuICB9LFxufVxuXG5jb25zdCBncmFudFJvbGVGb3JTY2hlbWEgPSAoc2NoZW1hOiBzdHJpbmcsIHJvbGVOYW1lOiBzdHJpbmcpID0+IFtcbiAgZm9ybWF0KFwiR1JBTlQgVVNBR0UgT04gU0NIRU1BICVJIFRPICVJXCIsIHNjaGVtYSwgcm9sZU5hbWUpLFxuICBmb3JtYXQoXCJHUkFOVCBDUkVBVEUgT04gU0NIRU1BICVJIFRPICVJXCIsIHNjaGVtYSwgcm9sZU5hbWUpLFxuXVxuY29uc3QgcmV2b2tlUm9sZUZyb21TY2hlbWEgPSAoc2NoZW1hOiBzdHJpbmcsIHJvbGVOYW1lOiBzdHJpbmcpID0+IFtcbiAgZm9ybWF0KFwiUkVWT0tFIENSRUFURSBPTiBTQ0hFTUEgJUkgRlJPTSAlSVwiLCBzY2hlbWEsIHJvbGVOYW1lKSxcbiAgZm9ybWF0KFwiUkVWT0tFIEFMTCBPTiBTQ0hFTUEgJUkgRlJPTSAlSVwiLCBzY2hlbWEsIHJvbGVOYW1lKSxcbl1cblxuY29uc3QgbG9nID1cbiAgcHJvY2Vzcy5lbnYuTE9HR0VSID09PSBcInRydWVcIlxuICAgID8gY29uc29sZS5kZWJ1Z1xuICAgIDogKF9tZXNzYWdlPzogYW55LCAuLi5fb3B0aW9uYWxQYXJhbXM6IGFueVtdKSA9PiB7fVxuXG5leHBvcnQgY29uc3QgaGFuZGxlciA9IGFzeW5jIChcbiAgZXZlbnQ6XG4gICAgfCBDbG91ZEZvcm1hdGlvbkN1c3RvbVJlc291cmNlQ3JlYXRlRXZlbnRcbiAgICB8IENsb3VkRm9ybWF0aW9uQ3VzdG9tUmVzb3VyY2VVcGRhdGVFdmVudFxuICAgIHwgQ2xvdWRGb3JtYXRpb25DdXN0b21SZXNvdXJjZURlbGV0ZUV2ZW50XG4pOiBQcm9taXNlPGFueT4gPT4ge1xuICBsb2coZXZlbnQpXG5cbiAgY29uc3QgcmVxdWVzdFR5cGUgPSBldmVudC5SZXF1ZXN0VHlwZVxuICBjb25zdCByZXNvdXJjZTogUmRzU3FsUmVzb3VyY2UgPSBldmVudC5SZXNvdXJjZVByb3BlcnRpZXMuUmVzb3VyY2VcbiAgY29uc3QgcmVzb3VyY2VJZCA9IGV2ZW50LlJlc291cmNlUHJvcGVydGllcy5SZXNvdXJjZUlkXG4gIGNvbnN0IGRhdGFiYXNlTmFtZSA9IGV2ZW50LlJlc291cmNlUHJvcGVydGllcy5EYXRhYmFzZU5hbWVcblxuICBpZiAoIU9iamVjdC5rZXlzKGp1bXBUYWJsZSkuaW5jbHVkZXMoZXZlbnQuUmVzb3VyY2VQcm9wZXJ0aWVzLlJlc291cmNlKSkge1xuICAgIHRocm93IGBSZXNvdXJjZSB0eXBlICcke3Jlc291cmNlfScgbm90IHJlY29nbmlzZWQuYFxuICB9XG5cbiAgY29uc3Qgc2VjcmV0c19jbGllbnQgPSBuZXcgU2VjcmV0c01hbmFnZXJDbGllbnQoe30pXG4gIGNvbnN0IGNvbW1hbmQgPSBuZXcgR2V0U2VjcmV0VmFsdWVDb21tYW5kKHtcbiAgICBTZWNyZXRJZDogZXZlbnQuUmVzb3VyY2VQcm9wZXJ0aWVzLlNlY3JldEFybixcbiAgfSlcbiAgLy8gQXMgdGhlIElBTSBjcmVkZW50aWFscyBjYW4gYmUgY2FjaGVkLCBhbiB1cGRhdGUgbWFrZGUgdmVyeSByZWNlbnRcbiAgLy8gY291bGQgbm90IHlldCBiZSBhdmFpbGFibGUuXG4gIC8vIFNvIHdlIHJldHJ5IHRoaXMgYSBiaXQuXG4gIGxvZyhcIkZldGNoaW5nIHNlY3JldFwiKVxuICBjb25zdCBzZWNyZXQ6IEdldFNlY3JldFZhbHVlQ29tbWFuZE91dHB1dCA9IGF3YWl0IGJhY2tPZmYoXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2VjcmV0c19jbGllbnQuc2VuZChjb21tYW5kKVxuICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZyhcIkVycm9yIGZldGNoaW5nIHNlY3JldCAlb1wiLCBlKVxuICAgICAgICB0aHJvdyBlXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBudW1PZkF0dGVtcHRzOiAxMCxcbiAgICAgIHN0YXJ0aW5nRGVsYXk6IDUwMCxcbiAgICB9XG4gIClcbiAgaWYgKCFzZWNyZXQuU2VjcmV0U3RyaW5nKSB0aHJvdyBcIk5vIHNlY3JldCBzdHJpbmdcIlxuICBjb25zdCBzZWNyZXRWYWx1ZXMgPSBKU09OLnBhcnNlKHNlY3JldC5TZWNyZXRTdHJpbmcpXG5cbiAgbGV0IHNxbDogc3RyaW5nIHwgc3RyaW5nW10gfCB2b2lkXG4gIHN3aXRjaCAocmVxdWVzdFR5cGUpIHtcbiAgICBjYXNlIFwiQ3JlYXRlXCI6IHtcbiAgICAgIHNxbCA9IGF3YWl0IGp1bXBUYWJsZVtyZXNvdXJjZV1bcmVxdWVzdFR5cGVdKHJlc291cmNlSWQsIGV2ZW50LlJlc291cmNlUHJvcGVydGllcylcbiAgICAgIGJyZWFrXG4gICAgfVxuICAgIGNhc2UgXCJVcGRhdGVcIjoge1xuICAgICAgY29uc3Qgb2xkUmVzb3VyY2VJZCA9IChldmVudCBhcyBDbG91ZEZvcm1hdGlvbkN1c3RvbVJlc291cmNlVXBkYXRlRXZlbnQpXG4gICAgICAgIC5QaHlzaWNhbFJlc291cmNlSWRcbiAgICAgIHNxbCA9IGF3YWl0IGp1bXBUYWJsZVtyZXNvdXJjZV1bcmVxdWVzdFR5cGVdKHJlc291cmNlSWQsIG9sZFJlc291cmNlSWQsIHtcbiAgICAgICAgLi4uZXZlbnQuUmVzb3VyY2VQcm9wZXJ0aWVzLFxuICAgICAgICBNYXN0ZXJPd25lcjogc2VjcmV0VmFsdWVzLnVzZXJuYW1lLFxuICAgICAgfSlcbiAgICAgIGJyZWFrXG4gICAgfVxuICAgIGNhc2UgXCJEZWxldGVcIjoge1xuICAgICAgaWYgKHJlc291cmNlID09PSBSZHNTcWxSZXNvdXJjZS5EQVRBQkFTRSkge1xuICAgICAgICBzcWwgPSBqdW1wVGFibGVbcmVzb3VyY2VdW3JlcXVlc3RUeXBlXShyZXNvdXJjZUlkLCBzZWNyZXRWYWx1ZXMudXNlcm5hbWUpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzcWwgPSBqdW1wVGFibGVbcmVzb3VyY2VdW3JlcXVlc3RUeXBlXShyZXNvdXJjZUlkLCBldmVudC5SZXNvdXJjZVByb3BlcnRpZXMpXG4gICAgICB9XG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIGlmIChzcWwpIHtcbiAgICBsZXQgZGF0YWJhc2U6IHN0cmluZ1xuICAgIGlmIChyZXNvdXJjZSA9PT0gUmRzU3FsUmVzb3VyY2UuUk9MRSkge1xuICAgICAgZGF0YWJhc2UgPSBzZWNyZXRWYWx1ZXMuZGJuYW1lXG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGFiYXNlID0gZGF0YWJhc2VOYW1lID8/IHNlY3JldFZhbHVlcy5kYm5hbWUgLy8gY29ubmVjdCB0byBnaXZlbiBkYXRhYmFzZSBpZiBwb3NzaWJsZSwgZWxzZSB0byBkYXRhYmFzZSBtZW50aW9uZWQgaW4gc2VjcmV0XG4gICAgfVxuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIGhvc3Q6IHNlY3JldFZhbHVlcy5ob3N0LFxuICAgICAgcG9ydDogc2VjcmV0VmFsdWVzLnBvcnQsXG4gICAgICB1c2VyOiBzZWNyZXRWYWx1ZXMudXNlcm5hbWUsXG4gICAgICBwYXNzd29yZDogc2VjcmV0VmFsdWVzLnBhc3N3b3JkLFxuICAgICAgZGF0YWJhc2U6IGRhdGFiYXNlLFxuICAgICAgY29ubmVjdGlvblRpbWVvdXRNaWxsaXM6IDMwMDAwLCAvLyByZXR1cm4gYW4gZXJyb3IgaWYgYSBjb25uZWN0aW9uIGNvdWxkIG5vdCBiZSBlc3RhYmxpc2hlZCB3aXRoaW4gMzAgc2Vjb25kc1xuICAgIH1cbiAgICBsb2coXG4gICAgICBgQ29ubmVjdGluZyB0byBob3N0ICR7cGFyYW1zLmhvc3R9OiAke3BhcmFtcy5wb3J0fSwgZGF0YWJhc2UgJHtwYXJhbXMuZGF0YWJhc2V9IGFzICR7cGFyYW1zLnVzZXJ9YFxuICAgIClcbiAgICBsb2coXCJFeGVjdXRpbmcgU1FMXCIsIHNxbClcbiAgICBjb25zdCBwZ19jbGllbnQgPSBuZXcgQ2xpZW50KHBhcmFtcylcbiAgICBhd2FpdCBwZ19jbGllbnQuY29ubmVjdCgpXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGJhY2tPZmYoXG4gICAgICAgIGFzeW5jICgpID0+IHtcbiAgICAgICAgICBpZiAodHlwZW9mIHNxbCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIHBnX2NsaWVudC5xdWVyeShzcWwpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChzcWwpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKFxuICAgICAgICAgICAgICAgIHNxbC5tYXAoKHN0YXRlbWVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHBnX2NsaWVudC5xdWVyeShzdGF0ZW1lbnQpXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgcmV0cnk6IGVycm9yRmlsdGVyLFxuICAgICAgICAgIG51bU9mQXR0ZW1wdHM6IG1heEF0dGVtcHRzLFxuICAgICAgICB9XG4gICAgICApXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IHBnX2NsaWVudC5lbmQoKVxuICAgIH1cbiAgfVxuXG4gIGxldCByZXNwb25zZTogQ3VzdG9tUmVzb3VyY2VSZXNwb25zZSA9IHt9XG4gIC8vIEV4Y2VwdCBmb3IgdGhlIFNRTCByZXNvdXJjZSwgcmV0dXJuIHRoZSBuZXcgcmVzb3VyY2UgaWQuIFRoaXNcbiAgLy8gd2lsbCBjYXVzZSBhIGRlbGV0ZSB0byBiZSBzZW5kIGZvciB0aGUgb2xkIHJlc291cmNlLlxuICBpZiAocmVzb3VyY2UgIT09IFJkc1NxbFJlc291cmNlLlNRTCkge1xuICAgIHJlc3BvbnNlLlBoeXNpY2FsUmVzb3VyY2VJZCA9IHJlc291cmNlSWRcbiAgfVxuXG4gIHJldHVybiByZXNwb25zZVxufVxuXG4vLyBDdXN0b20gZXJyb3IgZmlsdGVyLCBtYWlubHkgdG8gcmV0cnkgcm9sZSBjcmVhdGlvbi5cbi8vIEZyZXF1ZW50bHkgc2VlIFwidHVwbGUgY29uY3VycmVudGx5IHVwZGF0ZWRcIiwgYW5kIGFkZGluZ1xuLy8gZGVwZW5kZW5jaWVzIGlzIHZlcnkgaGFyZCB0byBtYWtlIHdvcmsuXG5jb25zdCBlcnJvckZpbHRlciA9IChlcnJvcjogYW55LCBuZXh0QXR0ZW1wdE51bWJlcjogbnVtYmVyKSA9PiB7XG4gIC8vIFJldHJ5IG9ubHkgaWYgdGhlIGVycm9yIG1lc3NhZ2UgY29udGFpbnMgXCJ0dXBsZSBjb25jdXJyZW50bHlcIlxuICAvLyBUaGlzIHdpbGwgY292ZXIgY29uY3VycmVudCB1cGRhdGVzIGFuZCBkZWxldGVzXG4gIGNvbnN0IHdpbGxSZXRyeSA9IGVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoXCJ0dXBsZSBjb25jdXJyZW50bHlcIilcbiAgbG9nKFxuICAgIFwiRW5jb3VudGVyZWQgYW4gZXJyb3Igb24gYXR0ZW1wdCAlZC8lZCByZXRyeT0lcyBlcnJvcj1bJW9dXCIsXG4gICAgbmV4dEF0dGVtcHROdW1iZXIgLSAxLFxuICAgIG1heEF0dGVtcHRzLFxuICAgIHdpbGxSZXRyeSxcbiAgICBlcnJvclxuICApXG4gIHJldHVybiB3aWxsUmV0cnlcbn1cblxuLyoqXG4gKiBQYXJzZSBwYXNzd29yZCBmaWVsZCBmcm9tIHNlY3JldC4gUmV0dXJucyB2b2lkIG9uIGVycm9yLlxuICovXG5jb25zdCBnZXRQYXNzd29yZCA9IGFzeW5jIChhcm46IHN0cmluZyk6IFByb21pc2U8c3RyaW5nIHwgdm9pZD4gPT4ge1xuICBjb25zdCBzZWNyZXRzX2NsaWVudCA9IG5ldyBTZWNyZXRzTWFuYWdlckNsaWVudCh7fSlcbiAgY29uc3QgY29tbWFuZCA9IG5ldyBHZXRTZWNyZXRWYWx1ZUNvbW1hbmQoe1xuICAgIFNlY3JldElkOiBhcm4sXG4gIH0pXG4gIGNvbnN0IHNlY3JldCA9IGF3YWl0IHNlY3JldHNfY2xpZW50LnNlbmQoY29tbWFuZClcbiAgaWYgKHNlY3JldC5TZWNyZXRTdHJpbmcpIHtcbiAgICBjb25zdCBqc29uID0gSlNPTi5wYXJzZShzZWNyZXQuU2VjcmV0U3RyaW5nKVxuICAgIHJldHVybiBqc29uLnBhc3N3b3JkXG4gIH1cbn1cbiJdfQ==
|
package/lib/provider.js
CHANGED
|
@@ -77,7 +77,7 @@ class Provider extends constructs_1.Construct {
|
|
|
77
77
|
}
|
|
78
78
|
exports.Provider = Provider;
|
|
79
79
|
_a = JSII_RTTI_SYMBOL_1;
|
|
80
|
-
Provider[_a] = { fqn: "cdk-rds-sql.Provider", version: "3.4.
|
|
80
|
+
Provider[_a] = { fqn: "cdk-rds-sql.Provider", version: "3.4.2" };
|
|
81
81
|
function slugify(x) {
|
|
82
82
|
return x.replace(/[^a-zA-Z0-9]/g, "");
|
|
83
83
|
}
|
package/lib/role.js
CHANGED
|
@@ -59,5 +59,5 @@ class Role extends constructs_1.Construct {
|
|
|
59
59
|
}
|
|
60
60
|
exports.Role = Role;
|
|
61
61
|
_a = JSII_RTTI_SYMBOL_1;
|
|
62
|
-
Role[_a] = { fqn: "cdk-rds-sql.Role", version: "3.4.
|
|
62
|
+
Role[_a] = { fqn: "cdk-rds-sql.Role", version: "3.4.2" };
|
|
63
63
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9sZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9yb2xlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsNkNBQTJDO0FBRzNDLHVFQUFnRTtBQUNoRSwyQ0FBc0M7QUFHdEMsaUVBQW1FO0FBa0RuRSxNQUFhLElBQUssU0FBUSxzQkFBUztJQVdqQyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQWdCO1FBQ3hELElBQ0UsQ0FBQyxLQUFLLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUM7WUFDdEMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDO1lBRXhDLE1BQU0seUNBQXlDLENBQUE7UUFDakQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUVoQixNQUFNLElBQUksR0FBSSxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQTRCLENBQUMsZUFBZTtZQUN2RSxDQUFDLENBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUE0QixDQUFDLGVBQWUsQ0FBQyxRQUFRO1lBQ3ZFLENBQUMsQ0FBRSxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQTZCLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFBO1FBRTNFLE1BQU0sSUFBSSxHQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBNEIsQ0FBQyxlQUFlO1lBQ3ZFLENBQUMsQ0FBRSxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQTRCLENBQUMsZUFBZSxDQUFDLElBQUk7WUFDbkUsQ0FBQyxDQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBNkIsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUE7UUFFdkUsTUFBTSxVQUFVLEdBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUE0QixDQUFDLGlCQUFpQjtZQUMvRSxDQUFDLENBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUE0QixDQUFDLGlCQUFpQjtZQUNoRSxDQUFDLENBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUE2QixDQUFDLGtCQUFrQixDQUFBO1FBRXBFLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSwyQkFBTSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUU7WUFDdkMsVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVO1lBQzVCLGFBQWEsRUFBRSxLQUFLLENBQUMsYUFBYTtZQUNsQyxXQUFXLEVBQUUsc0NBQXNDLEtBQUssQ0FBQyxRQUFRLEVBQUU7WUFDbkUsb0JBQW9CLEVBQUU7Z0JBQ3BCLGNBQWMsRUFBRSxFQUFFO2dCQUNsQixvQkFBb0IsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDO29CQUNuQyxtQkFBbUIsRUFBRSxVQUFVO29CQUMvQixNQUFNLEVBQUUsVUFBVTtvQkFDbEIsSUFBSSxFQUFFLElBQUk7b0JBQ1YsSUFBSSxFQUFFLElBQUk7b0JBQ1YsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRO29CQUN4QixNQUFNLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxZQUFZO2lCQUMxRSxDQUFDO2dCQUNGLGlCQUFpQixFQUFFLFVBQVU7Z0JBQzdCLGlCQUFpQixFQUFFLCtCQUErQjthQUNuRDtZQUNELGFBQWEsRUFBRSwyQkFBYSxDQUFDLE9BQU87U0FDckMsQ0FBQyxDQUFBO1FBQ0YsTUFBTSxJQUFJLEdBQUcsSUFBSSwyQkFBa0IsQ0FBQyxJQUFJLEVBQUUsY0FBYyxFQUFFO1lBQ3hELFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUTtZQUN4QixRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVE7WUFDeEIsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUztZQUNsQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVE7WUFDeEIsWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFZO1NBQ2pDLENBQUMsQ0FBQTtRQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUNwQyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUE7UUFDOUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUM3QyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFO1lBQzdCLGdEQUFnRDtZQUNoRCxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQTtTQUMvRDtJQUNILENBQUM7O0FBaEVILG9CQWlFQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlbW92YWxQb2xpY3kgfSBmcm9tIFwiYXdzLWNkay1saWJcIlxuaW1wb3J0ICogYXMga21zIGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mta21zXCJcbmltcG9ydCB7IElEYXRhYmFzZUNsdXN0ZXIsIElEYXRhYmFzZUluc3RhbmNlIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1yZHNcIlxuaW1wb3J0IHsgSVNlY3JldCwgU2VjcmV0IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zZWNyZXRzbWFuYWdlclwiXG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiXG5pbXBvcnQgeyBJRGF0YWJhc2UgfSBmcm9tIFwiLi9kYXRhYmFzZVwiXG5pbXBvcnQgeyBQcm92aWRlciB9IGZyb20gXCIuL3Byb3ZpZGVyXCJcbmltcG9ydCB7IFJvbGUgYXMgQ3VzdG9tUmVzb3VyY2VSb2xlIH0gZnJvbSBcIi4vcm9sZS5jdXN0b20tcmVzb3VyY2VcIlxuXG5leHBvcnQgaW50ZXJmYWNlIFJvbGVQcm9wcyB7XG4gIC8qKlxuICAgKiBQcm92aWRlci5cbiAgICovXG4gIHJlYWRvbmx5IHByb3ZpZGVyOiBQcm92aWRlclxuXG4gIC8qKlxuICAgKiBTUUwuXG4gICAqL1xuICByZWFkb25seSByb2xlTmFtZTogc3RyaW5nXG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGRhdGFiYXNlIHRoaXMgdXNlciBpcyBleHBlY3RlZCB0byB1c2UuXG4gICAqXG4gICAqIElmIHRoZSBkYXRhYmFzZSBleGlzdHMsIGNvbm5lY3QgcHJpdmlsZWdlcyBhcmUgZ3JhbnRlZC5cbiAgICpcbiAgICogU3BlY2lmeSBub25lIG9mIGBkYXRhYmFzZWAgb3IgYGRhdGFiYXNlTmFtZWAgb3Igb25seSBvbmUgb2YgdGhlbS5cbiAgICpcbiAgICogQGRlZmF1bHQgbm8gY29ubmVjdGlvbiB0byBhbnkgZGF0YWJhc2UgaXMgZ3JhbnRlZFxuICAgKi9cbiAgcmVhZG9ubHkgZGF0YWJhc2U/OiBJRGF0YWJhc2VcblxuICAvKipcbiAgICogT3B0aW9uYWwgZGF0YWJhc2UgbmFtZSB0aGlzIHVzZXIgaXMgZXhwZWN0ZWQgdG8gdXNlLlxuICAgKlxuICAgKiBJZiB0aGUgZGF0YWJhc2UgZXhpc3RzLCBjb25uZWN0IHByaXZpbGVnZXMgYXJlIGdyYW50ZWQuXG4gICAqXG4gICAqIFNwZWNpZnkgbm9uZSBvZiBgZGF0YWJhc2VgIG9yIGBkYXRhYmFzZU5hbWVgIG9yIG9ubHkgb25lIG9mIHRoZW0uXG4gICAqXG4gICAqIEBkZWZhdWx0IG5vIGNvbm5lY3Rpb24gdG8gYW55IGRhdGFiYXNlIGlzIGdyYW50ZWRcbiAgICovXG4gIHJlYWRvbmx5IGRhdGFiYXNlTmFtZT86IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBBIG5ldyBzZWNyZXQgaXMgY3JlYXRlZCBmb3IgdGhpcyB1c2VyLlxuICAgKlxuICAgKiBPcHRpb25hbGx5IGVuY3J5cHQgaXQgd2l0aCB0aGUgZ2l2ZW4ga2V5LlxuICAgKi9cbiAgcmVhZG9ubHkgZW5jcnlwdGlvbktleT86IGttcy5JS2V5XG5cbiAgLyoqXG4gICAqIEEgbmV3IHNlY3JldCBpcyBjcmVhdGVkIGZvciB0aGlzIHVzZXIuXG4gICAqXG4gICAqIE9wdGlvbmFsbHkgYWRkIHNlY3JldCBuYW1lIHRvIHRoZSBzZWNyZXQuXG4gICAqL1xuICByZWFkb25seSBzZWNyZXROYW1lPzogc3RyaW5nXG59XG5cbmV4cG9ydCBjbGFzcyBSb2xlIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgLyoqXG4gICAqIFRoZSByb2xlIG5hbWUuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcm9sZU5hbWU6IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBUaGUgZ2VuZXJhdGVkIHNlY3JldC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzZWNyZXQ6IElTZWNyZXRcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUm9sZVByb3BzKSB7XG4gICAgaWYgKFxuICAgICAgKHByb3BzLmRhdGFiYXNlICYmIHByb3BzLmRhdGFiYXNlTmFtZSkgfHxcbiAgICAgICghcHJvcHMuZGF0YWJhc2UgJiYgIXByb3BzLmRhdGFiYXNlTmFtZSlcbiAgICApXG4gICAgICB0aHJvdyBcIlNwZWNpZnkgZWl0aGVyIGRhdGFiYXNlIG9yIGRhdGFiYXNlTmFtZVwiXG4gICAgc3VwZXIoc2NvcGUsIGlkKVxuXG4gICAgY29uc3QgaG9zdCA9IChwcm9wcy5wcm92aWRlci5jbHVzdGVyIGFzIElEYXRhYmFzZUNsdXN0ZXIpLmNsdXN0ZXJFbmRwb2ludFxuICAgICAgPyAocHJvcHMucHJvdmlkZXIuY2x1c3RlciBhcyBJRGF0YWJhc2VDbHVzdGVyKS5jbHVzdGVyRW5kcG9pbnQuaG9zdG5hbWVcbiAgICAgIDogKHByb3BzLnByb3ZpZGVyLmNsdXN0ZXIgYXMgSURhdGFiYXNlSW5zdGFuY2UpLmluc3RhbmNlRW5kcG9pbnQuaG9zdG5hbWVcblxuICAgIGNvbnN0IHBvcnQgPSAocHJvcHMucHJvdmlkZXIuY2x1c3RlciBhcyBJRGF0YWJhc2VDbHVzdGVyKS5jbHVzdGVyRW5kcG9pbnRcbiAgICAgID8gKHByb3BzLnByb3ZpZGVyLmNsdXN0ZXIgYXMgSURhdGFiYXNlQ2x1c3RlcikuY2x1c3RlckVuZHBvaW50LnBvcnRcbiAgICAgIDogKHByb3BzLnByb3ZpZGVyLmNsdXN0ZXIgYXMgSURhdGFiYXNlSW5zdGFuY2UpLmluc3RhbmNlRW5kcG9pbnQucG9ydFxuXG4gICAgY29uc3QgaWRlbnRpZmllciA9IChwcm9wcy5wcm92aWRlci5jbHVzdGVyIGFzIElEYXRhYmFzZUNsdXN0ZXIpLmNsdXN0ZXJJZGVudGlmaWVyXG4gICAgICA/IChwcm9wcy5wcm92aWRlci5jbHVzdGVyIGFzIElEYXRhYmFzZUNsdXN0ZXIpLmNsdXN0ZXJJZGVudGlmaWVyXG4gICAgICA6IChwcm9wcy5wcm92aWRlci5jbHVzdGVyIGFzIElEYXRhYmFzZUluc3RhbmNlKS5pbnN0YW5jZUlkZW50aWZpZXJcblxuICAgIHRoaXMuc2VjcmV0ID0gbmV3IFNlY3JldCh0aGlzLCBcIlNlY3JldFwiLCB7XG4gICAgICBzZWNyZXROYW1lOiBwcm9wcy5zZWNyZXROYW1lLFxuICAgICAgZW5jcnlwdGlvbktleTogcHJvcHMuZW5jcnlwdGlvbktleSxcbiAgICAgIGRlc2NyaXB0aW9uOiBgR2VuZXJhdGVkIHNlY3JldCBmb3IgcG9zdGdyZXMgcm9sZSAke3Byb3BzLnJvbGVOYW1lfWAsXG4gICAgICBnZW5lcmF0ZVNlY3JldFN0cmluZzoge1xuICAgICAgICBwYXNzd29yZExlbmd0aDogMzAsIC8vIE9yYWNsZSBwYXNzd29yZCBjYW5ub3QgaGF2ZSBtb3JlIHRoYW4gMzAgY2hhcmFjdGVyc1xuICAgICAgICBzZWNyZXRTdHJpbmdUZW1wbGF0ZTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIGRiQ2x1c3RlcklkZW50aWZpZXI6IGlkZW50aWZpZXIsXG4gICAgICAgICAgZW5naW5lOiBcInBvc3RncmVzXCIsXG4gICAgICAgICAgaG9zdDogaG9zdCxcbiAgICAgICAgICBwb3J0OiBwb3J0LFxuICAgICAgICAgIHVzZXJuYW1lOiBwcm9wcy5yb2xlTmFtZSxcbiAgICAgICAgICBkYm5hbWU6IHByb3BzLmRhdGFiYXNlID8gcHJvcHMuZGF0YWJhc2UuZGF0YWJhc2VOYW1lIDogcHJvcHMuZGF0YWJhc2VOYW1lLFxuICAgICAgICB9KSxcbiAgICAgICAgZ2VuZXJhdGVTdHJpbmdLZXk6IFwicGFzc3dvcmRcIixcbiAgICAgICAgZXhjbHVkZUNoYXJhY3RlcnM6IFwiICUrfmAjJCYqKCl8W117fTo7PD4/IScvQFxcXCJcXFxcXCIsXG4gICAgICB9LFxuICAgICAgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgIH0pXG4gICAgY29uc3Qgcm9sZSA9IG5ldyBDdXN0b21SZXNvdXJjZVJvbGUodGhpcywgXCJQb3N0Z3Jlc1JvbGVcIiwge1xuICAgICAgcHJvdmlkZXI6IHByb3BzLnByb3ZpZGVyLFxuICAgICAgcm9sZU5hbWU6IHByb3BzLnJvbGVOYW1lLFxuICAgICAgcGFzc3dvcmRBcm46IHRoaXMuc2VjcmV0LnNlY3JldEFybixcbiAgICAgIGRhdGFiYXNlOiBwcm9wcy5kYXRhYmFzZSxcbiAgICAgIGRhdGFiYXNlTmFtZTogcHJvcHMuZGF0YWJhc2VOYW1lLFxuICAgIH0pXG4gICAgcm9sZS5ub2RlLmFkZERlcGVuZGVuY3kodGhpcy5zZWNyZXQpXG4gICAgdGhpcy5yb2xlTmFtZSA9IHByb3BzLnJvbGVOYW1lXG4gICAgdGhpcy5zZWNyZXQuZ3JhbnRSZWFkKHByb3BzLnByb3ZpZGVyLmhhbmRsZXIpXG4gICAgaWYgKHRoaXMuc2VjcmV0LmVuY3J5cHRpb25LZXkpIHtcbiAgICAgIC8vIEl0IHNlZW1zIHdlIG5lZWQgdG8gZ3JhbnQgZXhwbGljaXQgcGVybWlzc2lvblxuICAgICAgdGhpcy5zZWNyZXQuZW5jcnlwdGlvbktleS5ncmFudERlY3J5cHQocHJvcHMucHJvdmlkZXIuaGFuZGxlcilcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
package/lib/schema.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import { CustomResource } from "aws-cdk-lib";
|
|
|
2
2
|
import { Construct } from "constructs";
|
|
3
3
|
import { IDatabase } from "./database";
|
|
4
4
|
import { Provider } from "./provider";
|
|
5
|
+
import { Role } from "./role";
|
|
5
6
|
export interface SchemaProps {
|
|
6
7
|
/**
|
|
7
8
|
* Provider.
|
|
@@ -17,6 +18,10 @@ export interface SchemaProps {
|
|
|
17
18
|
* Schema name.
|
|
18
19
|
*/
|
|
19
20
|
readonly schemaName: string;
|
|
21
|
+
/**
|
|
22
|
+
* Optional role to be granted for managing tables in schema
|
|
23
|
+
*/
|
|
24
|
+
readonly role?: Role;
|
|
20
25
|
}
|
|
21
26
|
export declare class Schema extends CustomResource {
|
|
22
27
|
readonly schemaName: string;
|
package/lib/schema.js
CHANGED
|
@@ -14,15 +14,18 @@ class Schema extends aws_cdk_lib_1.CustomResource {
|
|
|
14
14
|
ResourceId: props.schemaName,
|
|
15
15
|
SecretArn: props.provider.secret.secretArn,
|
|
16
16
|
DatabaseName: props.database ? props.database.databaseName : undefined,
|
|
17
|
+
RoleName: props.role ? props.role.roleName : undefined,
|
|
17
18
|
},
|
|
18
19
|
});
|
|
19
20
|
this.node.addDependency(props.provider);
|
|
20
21
|
this.schemaName = props.schemaName;
|
|
21
22
|
if (props.database)
|
|
22
23
|
this.node.addDependency(props.database);
|
|
24
|
+
if (props.role)
|
|
25
|
+
this.node.addDependency(props.role);
|
|
23
26
|
}
|
|
24
27
|
}
|
|
25
28
|
exports.Schema = Schema;
|
|
26
29
|
_a = JSII_RTTI_SYMBOL_1;
|
|
27
|
-
Schema[_a] = { fqn: "cdk-rds-sql.Schema", version: "3.4.
|
|
28
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
30
|
+
Schema[_a] = { fqn: "cdk-rds-sql.Schema", version: "3.4.2" };
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3NjaGVtYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZDQUE0QztBQUc1QyxpQ0FBdUM7QUE0QnZDLE1BQWEsTUFBTyxTQUFRLDRCQUFjO0lBR3hDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBa0I7UUFDMUQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDZixZQUFZLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxZQUFZO1lBQ3pDLFVBQVUsRUFBRTtnQkFDVixRQUFRLEVBQUUscUJBQWMsQ0FBQyxNQUFNO2dCQUMvQixVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVU7Z0JBQzVCLFNBQVMsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxTQUFTO2dCQUMxQyxZQUFZLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFNBQVM7Z0JBQ3RFLFFBQVEsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUzthQUN2RDtTQUNGLENBQUMsQ0FBQTtRQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUN2QyxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUE7UUFDbEMsSUFBSSxLQUFLLENBQUMsUUFBUTtZQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUMzRCxJQUFJLEtBQUssQ0FBQyxJQUFJO1lBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ3JELENBQUM7O0FBbEJILHdCQW1CQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEN1c3RvbVJlc291cmNlIH0gZnJvbSBcImF3cy1jZGstbGliXCJcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCJcbmltcG9ydCB7IElEYXRhYmFzZSB9IGZyb20gXCIuL2RhdGFiYXNlXCJcbmltcG9ydCB7IFJkc1NxbFJlc291cmNlIH0gZnJvbSBcIi4vZW51bVwiXG5pbXBvcnQgeyBQcm92aWRlciB9IGZyb20gXCIuL3Byb3ZpZGVyXCJcbmltcG9ydCB7IFJvbGUgfSBmcm9tIFwiLi9yb2xlXCJcblxuZXhwb3J0IGludGVyZmFjZSBTY2hlbWFQcm9wcyB7XG4gIC8qKlxuICAgKiBQcm92aWRlci5cbiAgICovXG4gIHJlYWRvbmx5IHByb3ZpZGVyOiBQcm92aWRlclxuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBkYXRhYmFzZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB1c2UgZGVmYXVsdCBkYXRhYmFzZVxuICAgKi9cbiAgcmVhZG9ubHkgZGF0YWJhc2U/OiBJRGF0YWJhc2VcblxuICAvKipcbiAgICogU2NoZW1hIG5hbWUuXG4gICAqL1xuICByZWFkb25seSBzY2hlbWFOYW1lOiBzdHJpbmdcblxuICAvKipcbiAgICogT3B0aW9uYWwgcm9sZSB0byBiZSBncmFudGVkIGZvciBtYW5hZ2luZyB0YWJsZXMgaW4gc2NoZW1hXG4gICAqL1xuICByZWFkb25seSByb2xlPzogUm9sZVxufVxuXG5leHBvcnQgY2xhc3MgU2NoZW1hIGV4dGVuZHMgQ3VzdG9tUmVzb3VyY2Uge1xuICBwdWJsaWMgcmVhZG9ubHkgc2NoZW1hTmFtZTogc3RyaW5nXG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFNjaGVtYVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICBzZXJ2aWNlVG9rZW46IHByb3BzLnByb3ZpZGVyLnNlcnZpY2VUb2tlbixcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgUmVzb3VyY2U6IFJkc1NxbFJlc291cmNlLlNDSEVNQSxcbiAgICAgICAgUmVzb3VyY2VJZDogcHJvcHMuc2NoZW1hTmFtZSxcbiAgICAgICAgU2VjcmV0QXJuOiBwcm9wcy5wcm92aWRlci5zZWNyZXQuc2VjcmV0QXJuLFxuICAgICAgICBEYXRhYmFzZU5hbWU6IHByb3BzLmRhdGFiYXNlID8gcHJvcHMuZGF0YWJhc2UuZGF0YWJhc2VOYW1lIDogdW5kZWZpbmVkLFxuICAgICAgICBSb2xlTmFtZTogcHJvcHMucm9sZSA/IHByb3BzLnJvbGUucm9sZU5hbWUgOiB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgIH0pXG4gICAgdGhpcy5ub2RlLmFkZERlcGVuZGVuY3kocHJvcHMucHJvdmlkZXIpXG4gICAgdGhpcy5zY2hlbWFOYW1lID0gcHJvcHMuc2NoZW1hTmFtZVxuICAgIGlmIChwcm9wcy5kYXRhYmFzZSkgdGhpcy5ub2RlLmFkZERlcGVuZGVuY3kocHJvcHMuZGF0YWJhc2UpXG4gICAgaWYgKHByb3BzLnJvbGUpIHRoaXMubm9kZS5hZGREZXBlbmRlbmN5KHByb3BzLnJvbGUpXG4gIH1cbn1cbiJdfQ==
|
package/lib/sql.js
CHANGED
|
@@ -24,5 +24,5 @@ class Sql extends aws_cdk_lib_1.CustomResource {
|
|
|
24
24
|
}
|
|
25
25
|
exports.Sql = Sql;
|
|
26
26
|
_a = JSII_RTTI_SYMBOL_1;
|
|
27
|
-
Sql[_a] = { fqn: "cdk-rds-sql.Sql", version: "3.4.
|
|
27
|
+
Sql[_a] = { fqn: "cdk-rds-sql.Sql", version: "3.4.2" };
|
|
28
28
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3FsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3NxbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZDQUE0QztBQUc1QyxpQ0FBdUM7QUEyQnZDLE1BQWEsR0FBSSxTQUFRLDRCQUFjO0lBQ3JDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBZTtRQUN2RCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUNmLFlBQVksRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLFlBQVk7WUFDekMsVUFBVSxFQUFFO2dCQUNWLFFBQVEsRUFBRSxxQkFBYyxDQUFDLEdBQUc7Z0JBQzVCLFNBQVMsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxTQUFTO2dCQUMxQyxZQUFZLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFNBQVM7Z0JBQ3RFLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUztnQkFDMUIsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRO2FBQ3pCO1NBQ0YsQ0FBQyxDQUFBO1FBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQ3ZDLElBQUksS0FBSyxDQUFDLFFBQVE7WUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDN0QsQ0FBQzs7QUFkSCxrQkFlQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEN1c3RvbVJlc291cmNlIH0gZnJvbSBcImF3cy1jZGstbGliXCJcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCJcbmltcG9ydCB7IElEYXRhYmFzZSB9IGZyb20gXCIuL2RhdGFiYXNlXCJcbmltcG9ydCB7IFJkc1NxbFJlc291cmNlIH0gZnJvbSBcIi4vZW51bVwiXG5pbXBvcnQgeyBQcm92aWRlciB9IGZyb20gXCIuL3Byb3ZpZGVyXCJcblxuZXhwb3J0IGludGVyZmFjZSBTcWxQcm9wcyB7XG4gIC8qKlxuICAgKiBQcm92aWRlci5cbiAgICovXG4gIHJlYWRvbmx5IHByb3ZpZGVyOiBQcm92aWRlclxuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBkYXRhYmFzZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB1c2UgZGVmYXVsdCBkYXRhYmFzZVxuICAgKi9cbiAgcmVhZG9ubHkgZGF0YWJhc2U/OiBJRGF0YWJhc2VcblxuICAvKipcbiAgICogU1FMLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhdGVtZW50Pzogc3RyaW5nXG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIHN0YXRtZW50IHRvIGJlIGV4ZWN1dGVkIHdoZW4gdGhlIHJlc291cmNlIGlzIGRlbGV0ZWRcbiAgICovXG4gIHJlYWRvbmx5IHJvbGxiYWNrPzogc3RyaW5nXG59XG5cbmV4cG9ydCBjbGFzcyBTcWwgZXh0ZW5kcyBDdXN0b21SZXNvdXJjZSB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBTcWxQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgc2VydmljZVRva2VuOiBwcm9wcy5wcm92aWRlci5zZXJ2aWNlVG9rZW4sXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIFJlc291cmNlOiBSZHNTcWxSZXNvdXJjZS5TUUwsXG4gICAgICAgIFNlY3JldEFybjogcHJvcHMucHJvdmlkZXIuc2VjcmV0LnNlY3JldEFybixcbiAgICAgICAgRGF0YWJhc2VOYW1lOiBwcm9wcy5kYXRhYmFzZSA/IHByb3BzLmRhdGFiYXNlLmRhdGFiYXNlTmFtZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgU3RhdGVtZW50OiBwcm9wcy5zdGF0ZW1lbnQsXG4gICAgICAgIFJvbGxiYWNrOiBwcm9wcy5yb2xsYmFjayxcbiAgICAgIH0sXG4gICAgfSlcbiAgICB0aGlzLm5vZGUuYWRkRGVwZW5kZW5jeShwcm9wcy5wcm92aWRlcilcbiAgICBpZiAocHJvcHMuZGF0YWJhc2UpIHRoaXMubm9kZS5hZGREZXBlbmRlbmN5KHByb3BzLmRhdGFiYXNlKVxuICB9XG59XG4iXX0=
|