cdk-turso 0.3.4 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/.jsii CHANGED
@@ -3992,7 +3992,7 @@
3992
3992
  },
3993
3993
  "name": "cdk-turso",
3994
3994
  "readme": {
3995
- "markdown": "# CDK Turso\n\nCDK constructs to create [Turso cloud](https://docs.turso.tech/turso-cloud) databases and manage auth tokens.\n\n## Installation\n\n```bash\nnpm install cdk-turso\n```\n\n## Usage\n\nCreate a `TursoProvider` with your API token:\n\n```typescript\nimport { Stack } from 'aws-cdk-lib';\nimport { ParameterType, StringParameter } from 'aws-cdk-lib/aws-ssm';\nimport { TursoProvider, TursoDatabase, TursoAuthToken } from 'cdk-turso';\n\nconst stack = new Stack();\n\n// SSM Parameter containing your Turso API token (must be a SecureString)\nconst apiToken = new StringParameter(stack, 'TursoApiToken', {\n parameterName: '/turso/api-token',\n stringValue: 'your-api-token',\n type: ParameterType.SECURE_STRING,\n});\n\n// Create the provider (one per stack)\nconst provider = new TursoProvider(stack, 'TursoProvider', {\n apiToken,\n});\n\nconst database = new TursoDatabase(stack, 'Database', {\n provider,\n databaseName: 'my-database',\n group: 'group-name',\n organizationSlug: 'my-org',\n});\n\n// Access database attributes\ndatabase.dbId; // Database ID\ndatabase.hostname; // Database hostname (e.g., my-database-my-org.turso.io)\ndatabase.databaseName; // Database name\n```\n\nIf you run a shared provider in another stack, import it by service token:\n\n```typescript\nconst provider = TursoProvider.fromServiceToken(\n stack,\n 'TursoProvider',\n 'arn:aws:lambda:us-east-1:123456789012:function:shared-turso-provider',\n);\n```\n\n### Auth Token\n\nGenerate a database auth token and store it as a SecureString in SSM Parameter Store:\n\n```typescript\nconst authToken = new TursoAuthToken(stack, 'AuthToken', {\n provider,\n databaseName: database.databaseName,\n organizationSlug: 'my-org',\n parameterName: '/turso/db-token',\n expiration: '2w', // optional, default: 'never'\n authorization: 'read-only', // optional, default: 'full-access'\n});\n\n// The SSM parameter name where the JWT is stored\nauthToken.parameterName;\n```\n\n## API\n\n### TursoProviderProps\n\n| Prop | Type | Required | Description |\n|------|------|----------|-------------|\n| `apiToken` | `ssm.IParameter` | Yes | SSM Parameter containing the Turso platform API token (must be SecureString) |\n| `logGroup` | `ILogGroup` | No | Optional CloudWatch log group for the Lambda handler |\n\n### TursoProvider\n\n| Attribute | Type | Description |\n|-----------|------|-------------|\n| `handler` | `Function` | The Lambda function backing all Turso custom resources (for attaching IAM permissions) |\n| `serviceToken` | `string` | The CDK custom-resource provider service token |\n\nStatic method:\n\n| Method | Returns | Description |\n|--------|---------|-------------|\n| `fromServiceToken(scope, id, serviceToken)` | `ITursoProvider` | Imports an existing Turso custom-resource provider |\n\n### ITursoProvider\n\n| Attribute | Type | Description |\n|-----------|------|-------------|\n| `serviceToken` | `string` | The CDK custom-resource provider service token |\n\n### TursoDatabaseProps\n\n| Prop | Type | Required | Description |\n|------|------|----------|-------------|\n| `provider` | `ITursoProvider` | Yes | The Turso provider to use for this database |\n| `databaseName` | `string` | Yes | Database name (lowercase, numbers, dashes only, max 64 chars) |\n| `group` | `string` | Yes | Turso group name (must already exist) |\n| `organizationSlug` | `string` | Yes | Organization slug |\n| `sizeLimit` | `string` | No | Size limit (e.g., '256mb') |\n| `seed` | `TursoDatabaseSeed` | No | Database seed configuration |\n| `encryption` | `TursoDatabaseEncryption` | No | Encryption configuration |\n\n### TursoDatabaseSeed\n\n```typescript\ninterface TursoDatabaseSeed {\n readonly type: string; // Seed type (e.g., 'schema')\n readonly name: string; // Seed name\n readonly timestamp?: string; // Optional timestamp\n}\n```\n\n### TursoDatabaseEncryption\n\n```typescript\ninterface TursoDatabaseEncryption {\n readonly encryptionKey: string; // KMS key ARN\n readonly encryptionCipher: string; // Cipher type (e.g., 'AES')\n}\n```\n\n### TursoDatabase\n\n| Attribute | Type | Description |\n|-----------|------|-------------|\n| `dbId` | `string` | Turso database ID |\n| `hostname` | `string` | DNS hostname (e.g., `my-database-my-org.turso.io`) for libSQL/HTTP connections |\n| `databaseName` | `string` | Database name |\n\n### TursoAuthTokenProps\n\n| Prop | Type | Required | Description |\n|------|------|----------|-------------|\n| `provider` | `ITursoProvider` | Yes | The Turso provider to use for this auth token |\n| `databaseName` | `string` | Yes | The name of the Turso database to create an auth token for |\n| `organizationSlug` | `string` | Yes | The Turso organization slug that owns the database |\n| `parameterName` | `string` | Yes | SSM parameter name where the generated JWT will be stored as a SecureString |\n| `expiration` | `string` | No | Token expiry (e.g., `'2w'`, `'1d30m'`). Default: `'never'` |\n| `authorization` | `string` | No | `'full-access'` or `'read-only'`. Default: `'full-access'` |\n\n### TursoAuthToken\n\n| Attribute | Type | Description |\n|-----------|------|-------------|\n| `parameterName` | `string` | The SSM parameter name where the auth token is stored |\n\n## Requirements\n\n- Node.js 24.x runtime for the Lambda handler\n- The Lambda handler requires the AWS SDK for JavaScript v3 (pre-installed in Lambda runtime)\n"
3995
+ "markdown": "# CDK Turso\n\nCDK constructs to create [Turso cloud](https://docs.turso.tech/turso-cloud) databases and manage auth tokens.\n\n## Installation\n\n```bash\nnpm install cdk-turso\n```\n\n## Usage\n\nCreate a `TursoProvider` with your API token:\n\n```typescript\nimport { RemovalPolicy, Stack } from 'aws-cdk-lib';\nimport { ParameterType, StringParameter } from 'aws-cdk-lib/aws-ssm';\nimport { TursoProvider, TursoDatabase, TursoAuthToken } from 'cdk-turso';\n\nconst stack = new Stack();\n\n// SSM Parameter containing your Turso API token (must be a SecureString)\nconst apiToken = new StringParameter(stack, 'TursoApiToken', {\n parameterName: '/turso/api-token',\n stringValue: 'your-api-token',\n type: ParameterType.SECURE_STRING,\n});\n\n// Create the provider (one per stack)\nconst provider = new TursoProvider(stack, 'TursoProvider', {\n apiToken,\n});\n\nconst database = new TursoDatabase(stack, 'Database', {\n provider,\n databaseName: 'my-database',\n group: 'group-name',\n organizationSlug: 'my-org',\n adopt: true, // optional: adopt existing database if it already exists\n removalPolicy: RemovalPolicy.RETAIN, // optional: keep DB on stack delete\n});\n\n// Access database attributes\ndatabase.dbId; // Database ID\ndatabase.hostname; // Database hostname (e.g., my-database-my-org.turso.io)\ndatabase.databaseName; // Database name\n```\n\nIf you run a shared provider in another stack, import it by service token:\n\n```typescript\nconst provider = TursoProvider.fromServiceToken(\n stack,\n 'TursoProvider',\n 'arn:aws:lambda:us-east-1:123456789012:function:shared-turso-provider',\n);\n```\n\n### Auth Token\n\nGenerate a database auth token and store it as a SecureString in SSM Parameter Store:\n\n```typescript\nconst authToken = new TursoAuthToken(stack, 'AuthToken', {\n provider,\n databaseName: database.databaseName,\n organizationSlug: 'my-org',\n parameterName: '/turso/db-token',\n expiration: '2w', // optional, default: 'never'\n authorization: 'read-only', // optional, default: 'full-access'\n removalPolicy: RemovalPolicy.RETAIN, // optional: keep SSM parameter\n});\n\n// The SSM parameter name where the JWT is stored\nauthToken.parameterName;\n```\n\n## API\n\n### TursoProviderProps\n\n| Prop | Type | Required | Description |\n|------|------|----------|-------------|\n| `apiToken` | `ssm.IParameter` | Yes | SSM Parameter containing the Turso platform API token (must be SecureString) |\n| `logGroup` | `ILogGroup` | No | Optional CloudWatch log group for the Lambda handler |\n\n### TursoProvider\n\n| Attribute | Type | Description |\n|-----------|------|-------------|\n| `handler` | `Function` | The Lambda function backing all Turso custom resources (for attaching IAM permissions) |\n| `serviceToken` | `string` | The CDK custom-resource provider service token |\n\nStatic method:\n\n| Method | Returns | Description |\n|--------|---------|-------------|\n| `fromServiceToken(scope, id, serviceToken)` | `ITursoProvider` | Imports an existing Turso custom-resource provider |\n\n### ITursoProvider\n\n| Attribute | Type | Description |\n|-----------|------|-------------|\n| `serviceToken` | `string` | The CDK custom-resource provider service token |\n\n### TursoDatabaseProps\n\n| Prop | Type | Required | Description |\n|------|------|----------|-------------|\n| `provider` | `ITursoProvider` | Yes | The Turso provider to use for this database |\n| `databaseName` | `string` | Yes | Database name (lowercase, numbers, dashes only, max 64 chars) |\n| `group` | `string` | Yes | Turso group name (must already exist) |\n| `organizationSlug` | `string` | Yes | Organization slug |\n| `sizeLimit` | `string` | No | Size limit (e.g., '256mb') |\n| `seed` | `TursoDatabaseSeed` | No | Database seed configuration |\n| `encryption` | `TursoDatabaseEncryption` | No | Encryption configuration |\n| `adopt` | `boolean` | No | On create, adopt an existing database when create returns \"already exists\" |\n| `removalPolicy` | `RemovalPolicy` | No | Custom resource removal policy (for example `RemovalPolicy.RETAIN`) |\n\n### TursoDatabaseSeed\n\n```typescript\ninterface TursoDatabaseSeed {\n readonly type: string; // Seed type (e.g., 'schema')\n readonly name: string; // Seed name\n readonly timestamp?: string; // Optional timestamp\n}\n```\n\n### TursoDatabaseEncryption\n\n```typescript\ninterface TursoDatabaseEncryption {\n readonly encryptionKey: string; // KMS key ARN\n readonly encryptionCipher: string; // Cipher type (e.g., 'AES')\n}\n```\n\n### TursoDatabase\n\n| Attribute | Type | Description |\n|-----------|------|-------------|\n| `dbId` | `string` | Turso database ID |\n| `hostname` | `string` | DNS hostname (e.g., `my-database-my-org.turso.io`) for libSQL/HTTP connections |\n| `databaseName` | `string` | Database name |\n\n### TursoAuthTokenProps\n\n| Prop | Type | Required | Description |\n|------|------|----------|-------------|\n| `provider` | `ITursoProvider` | Yes | The Turso provider to use for this auth token |\n| `databaseName` | `string` | Yes | The name of the Turso database to create an auth token for |\n| `organizationSlug` | `string` | Yes | The Turso organization slug that owns the database |\n| `parameterName` | `string` | Yes | SSM parameter name where the generated JWT will be stored as a SecureString |\n| `expiration` | `string` | No | Token expiry (e.g., `'2w'`, `'1d30m'`). Default: `'never'` |\n| `authorization` | `string` | No | `'full-access'` or `'read-only'`. Default: `'full-access'` |\n| `removalPolicy` | `RemovalPolicy` | No | Custom resource removal policy (for example `RemovalPolicy.RETAIN`) |\n\n### TursoAuthToken\n\n| Attribute | Type | Description |\n|-----------|------|-------------|\n| `parameterName` | `string` | The SSM parameter name where the auth token is stored |\n\n## Requirements\n\n- Node.js 24.x runtime for the Lambda handler\n- The Lambda handler requires the AWS SDK for JavaScript v3 (pre-installed in Lambda runtime)\n"
3996
3996
  },
3997
3997
  "repository": {
3998
3998
  "type": "git",
@@ -4051,7 +4051,7 @@
4051
4051
  },
4052
4052
  "locationInModule": {
4053
4053
  "filename": "src/turso-auth-token.ts",
4054
- "line": 46
4054
+ "line": 53
4055
4055
  },
4056
4056
  "parameters": [
4057
4057
  {
@@ -4077,7 +4077,7 @@
4077
4077
  "kind": "class",
4078
4078
  "locationInModule": {
4079
4079
  "filename": "src/turso-auth-token.ts",
4080
- "line": 40
4080
+ "line": 47
4081
4081
  },
4082
4082
  "name": "TursoAuthToken",
4083
4083
  "properties": [
@@ -4089,7 +4089,7 @@
4089
4089
  "immutable": true,
4090
4090
  "locationInModule": {
4091
4091
  "filename": "src/turso-auth-token.ts",
4092
- "line": 44
4092
+ "line": 51
4093
4093
  },
4094
4094
  "name": "parameterName",
4095
4095
  "type": {
@@ -4211,6 +4211,24 @@
4211
4211
  "type": {
4212
4212
  "primitive": "string"
4213
4213
  }
4214
+ },
4215
+ {
4216
+ "abstract": true,
4217
+ "docs": {
4218
+ "remarks": "Set to `RemovalPolicy.RETAIN` to keep the SSM parameter on stack\ndeletion.",
4219
+ "stability": "stable",
4220
+ "summary": "Removal policy for the underlying custom resource."
4221
+ },
4222
+ "immutable": true,
4223
+ "locationInModule": {
4224
+ "filename": "src/turso-auth-token.ts",
4225
+ "line": 44
4226
+ },
4227
+ "name": "removalPolicy",
4228
+ "optional": true,
4229
+ "type": {
4230
+ "fqn": "aws-cdk-lib.RemovalPolicy"
4231
+ }
4214
4232
  }
4215
4233
  ],
4216
4234
  "symbolId": "src/turso-auth-token:TursoAuthTokenProps"
@@ -4228,7 +4246,7 @@
4228
4246
  },
4229
4247
  "locationInModule": {
4230
4248
  "filename": "src/turso-database.ts",
4231
- "line": 35
4249
+ "line": 52
4232
4250
  },
4233
4251
  "parameters": [
4234
4252
  {
@@ -4254,7 +4272,7 @@
4254
4272
  "kind": "class",
4255
4273
  "locationInModule": {
4256
4274
  "filename": "src/turso-database.ts",
4257
- "line": 26
4275
+ "line": 43
4258
4276
  },
4259
4277
  "name": "TursoDatabase",
4260
4278
  "properties": [
@@ -4265,7 +4283,7 @@
4265
4283
  "immutable": true,
4266
4284
  "locationInModule": {
4267
4285
  "filename": "src/turso-database.ts",
4268
- "line": 33
4286
+ "line": 50
4269
4287
  },
4270
4288
  "name": "databaseName",
4271
4289
  "type": {
@@ -4279,7 +4297,7 @@
4279
4297
  "immutable": true,
4280
4298
  "locationInModule": {
4281
4299
  "filename": "src/turso-database.ts",
4282
- "line": 27
4300
+ "line": 44
4283
4301
  },
4284
4302
  "name": "dbId",
4285
4303
  "type": {
@@ -4294,7 +4312,7 @@
4294
4312
  "immutable": true,
4295
4313
  "locationInModule": {
4296
4314
  "filename": "src/turso-database.ts",
4297
- "line": 32
4315
+ "line": 49
4298
4316
  },
4299
4317
  "name": "hostname",
4300
4318
  "type": {
@@ -4425,6 +4443,25 @@
4425
4443
  "fqn": "cdk-turso.ITursoProvider"
4426
4444
  }
4427
4445
  },
4446
+ {
4447
+ "abstract": true,
4448
+ "docs": {
4449
+ "default": "false",
4450
+ "remarks": "This flag is only used during Create requests.",
4451
+ "stability": "stable",
4452
+ "summary": "If true, the provider will adopt an existing Turso database when creation reports that the database already exists."
4453
+ },
4454
+ "immutable": true,
4455
+ "locationInModule": {
4456
+ "filename": "src/turso-database.ts",
4457
+ "line": 33
4458
+ },
4459
+ "name": "adopt",
4460
+ "optional": true,
4461
+ "type": {
4462
+ "primitive": "boolean"
4463
+ }
4464
+ },
4428
4465
  {
4429
4466
  "abstract": true,
4430
4467
  "docs": {
@@ -4441,6 +4478,24 @@
4441
4478
  "fqn": "cdk-turso.TursoDatabaseEncryption"
4442
4479
  }
4443
4480
  },
4481
+ {
4482
+ "abstract": true,
4483
+ "docs": {
4484
+ "remarks": "Set to `RemovalPolicy.RETAIN` to keep the Turso database on stack\ndeletion.",
4485
+ "stability": "stable",
4486
+ "summary": "Removal policy for the underlying custom resource."
4487
+ },
4488
+ "immutable": true,
4489
+ "locationInModule": {
4490
+ "filename": "src/turso-database.ts",
4491
+ "line": 40
4492
+ },
4493
+ "name": "removalPolicy",
4494
+ "optional": true,
4495
+ "type": {
4496
+ "fqn": "aws-cdk-lib.RemovalPolicy"
4497
+ }
4498
+ },
4444
4499
  {
4445
4500
  "abstract": true,
4446
4501
  "docs": {
@@ -4713,6 +4768,6 @@
4713
4768
  "symbolId": "src/turso-provider:TursoProviderProps"
4714
4769
  }
4715
4770
  },
4716
- "version": "0.3.4",
4717
- "fingerprint": "gkOnoknm4+gYZJqSzoT456Ffsz9/1FvBa7vHu9NANC8="
4771
+ "version": "0.4.1",
4772
+ "fingerprint": "WHKzvJeCw9C/i+shTTkKOW2J2EX8q9lly9Rq/iIDggQ="
4718
4773
  }
package/AGENTS.md CHANGED
@@ -1,146 +1,149 @@
1
1
  # AGENTS.md
2
-
3
- Guidance for AI coding agents working in this repository.
2
+ Guidance for agentic coding assistants working in this repository.
4
3
 
5
4
  ## Project Overview
6
-
7
- CDK construct library for provisioning Turso cloud databases. Built with projen's `AwsCdkConstructLibrary` template, using JSII for multi-language support. Source must remain JSII-compatible.
8
-
9
- ## Commands
10
-
5
+ `cdk-turso` is a JSII-based AWS CDK construct library for Turso resources,
6
+ implemented through Lambda-backed CloudFormation custom resources.
7
+ - Main constructs: `TursoProvider`, `TursoDatabase`, `TursoAuthToken`
8
+ - Language: TypeScript with strict settings
9
+ - Build system: projen (`AwsCdkConstructLibrary`)
10
+ - Lint/format: Biome (ESLint is disabled)
11
+
12
+ ## Build, Lint, and Test Commands
13
+ Use npm/projen tasks from the repo root.
11
14
  ```bash
12
- npm run build # Full pipeline: compile test package
13
- npm run compile # jsii compiler (TypeScript → JS + .d.ts) + esbuild handler bundle
14
- npm run test # Jest (with coverage) + Biome lint
15
- npm run test:watch # Jest in watch mode
16
- npm run watch # jsii in watch mode (for development)
17
- npx projen biome # Run Biome formatter + linter with --fix
18
- npx projen # Regenerate project files from .projenrc.ts
15
+ npm run build # compile -> docgen -> test -> package
16
+ npm run compile # jsii compile + esbuild bundle
17
+ npm run test # jest + biome
18
+ npm run test:watch # jest watch mode
19
+ npm run watch # jsii watch mode
20
+ npx projen biome # biome check/format with --write
21
+ npx projen # regenerate projen-managed files
19
22
  ```
20
23
 
21
- Run a single test file:
24
+ ### Single-test execution (important)
25
+ Run one test file:
22
26
  ```bash
23
27
  npx jest --passWithNoTests test/handler.test.ts
24
28
  ```
25
-
26
- ## Projen: Critical Rule
27
-
28
- Most config files are **generated by projen** and must NOT be edited directly. This includes `package.json`, `biome.jsonc`, `tsconfig.json`, `tsconfig.dev.json`, GitHub workflows, `.mergify.yml`, and anything marked `~~ Generated by projen`. To change project configuration, edit `.projenrc.ts` and run `npx projen`.
29
-
30
- ## Architecture
31
-
29
+ Run one named test:
30
+ ```bash
31
+ npx jest --passWithNoTests test/handler.test.ts -t "create with adopt"
32
+ ```
33
+ Run construct tests only:
34
+ ```bash
35
+ npx jest --passWithNoTests test/turso-database.test.ts
32
36
  ```
37
+
38
+ ## Projen and Generated Files
39
+ Do not manually edit generated files; edit `.projenrc.ts`, then run
40
+ `npx projen`.
41
+ Common generated files include:
42
+ - `package.json`
43
+ - `biome.jsonc`
44
+ - `tsconfig.json`
45
+ - `tsconfig.dev.json`
46
+ - `.github/workflows/*`
47
+ - `.mergify.yml`
48
+ - files with `~~ Generated by projen`
49
+ `API.md` is generated by `jsii-docgen` during `npm run build`.
50
+
51
+ ## Repository Layout
52
+ ```text
33
53
  src/
34
- index.ts # Barrel exports — all public symbols re-exported here
35
- turso-database.ts # Main CDK construct for Turso databases
36
- turso-auth-token.ts # Auth token generation construct
37
- turso-provider.ts # Shared CloudFormation custom resource provider
38
- handler/index.ts # Lambda handler for custom resources (bundled via esbuild)
54
+ index.ts # Public exports barrel
55
+ turso-provider.ts # Shared provider (Lambda + Provider)
56
+ turso-database.ts # Database construct
57
+ turso-auth-token.ts # Auth token construct
58
+ handler/index.ts # Lambda custom-resource handler
39
59
  test/
40
- turso-database.test.ts # Construct unit tests (CDK assertions)
41
- turso-auth-token.test.ts # Auth token construct tests
42
- handler.test.ts # Handler unit tests (Jest mocks)
43
- lib/ # Compiled output (generated, gitignored)
44
- dist/ # Distribution packages (generated, gitignored)
60
+ turso-database.test.ts # CDK assertion tests
61
+ turso-auth-token.test.ts # CDK assertion tests
62
+ handler.test.ts # Handler unit tests with mocks
63
+ lib/ # Generated compile output
64
+ dist/ # Generated JSII packaging output
45
65
  ```
46
66
 
47
- - Peer dependencies: `aws-cdk-lib` (^2.1.0), `constructs` (^10.0.5)
48
- - Handler bundled separately: `esbuild src/handler/index.ts --bundle --platform=node --target=node24 --outfile=lib/handler/index.js --external:@aws-sdk/*`
49
- - Pre-commit hook (husky): runs `npx projen biome && npx projen build`
50
-
51
- ## Code Style (enforced by Biome)
52
-
53
- Biome is the sole linter and formatter. ESLint is disabled.
54
-
55
- ### Formatting
56
- - **2-space** indentation (spaces, not tabs)
57
- - **80-char** max line width
58
- - **Double quotes** for strings: `"hello"` not `'hello'`
59
- - **Semicolons as needed** omit them; Biome inserts only where syntactically required
60
- - **Trailing commas** on all multi-line constructs (arrays, objects, parameters)
61
- - **Arrow parentheses**: always, even for single parameter `(x) => x`
62
- - **Bracket spacing**: `{ a }` not `{a}`
63
-
64
- ### Linting Rules
67
+ ## Dependency and Runtime Notes
68
+ - Peer deps: `aws-cdk-lib` `^2.201.0`, `constructs` `^10.3.0`
69
+ - Lambda target/runtime: Node.js 24.x
70
+ - Handler bundle command is configured in `.projenrc.ts`
71
+ - Pre-commit hook runs: `npx projen biome && npx projen build`
72
+
73
+ ## Formatting and Linting (Biome)
74
+ Follow the enforced formatting profile:
75
+ - 2-space indentation, no tabs
76
+ - line width 80
77
+ - double quotes
78
+ - semicolons only when required
79
+ - trailing commas in multiline literals/params
80
+ - always parenthesize arrow function args: `(x) => x`
81
+ - bracket spacing: `{ a }`
82
+ Important lint rules:
65
83
  - `noUnusedImports`: error
66
84
  - `noUnusedVariables`: error
67
85
  - `noConfusingVoidType`: error
68
- - `noNonNullAssertion`: allowed in `**/*.test.ts` only
69
- - `useNodejsImportProtocol`: off — use `"path"` not `"node:path"`
86
+ - `noNonNullAssertion`: off only in `**/*.test.ts`
87
+ - `useNodejsImportProtocol`: off (`"path"` over `"node:path"`)
70
88
 
71
89
  ## Import Conventions
72
-
73
- ### Ordering
74
- 1. AWS CDK / framework imports (`aws-cdk-lib`, `aws-cdk-lib/*`, `constructs`)
75
- 2. External packages (`@aws-sdk/client-ssm`)
76
- 3. Node.js builtins (`import * as path from "path"`)
77
- 4. Relative imports (`"./turso-database"`, `"../src"`)
78
-
79
- ### Style
80
- - **Named imports** with destructuring: `import { CustomResource, Duration } from "aws-cdk-lib"`
81
- - **Namespace imports** for Node builtins: `import * as path from "path"`
82
- - **`type` keyword** for type-only imports: `import type { IParameter } from "aws-cdk-lib/aws-ssm"`
83
- - **Inline `type`** in mixed imports: `import { type SomeType, someValue } from "..."`
84
- - Use deep CDK imports: `aws-cdk-lib/aws-lambda`, `aws-cdk-lib/aws-ssm`, `aws-cdk-lib/custom-resources`
85
- - Barrel exports in `src/index.ts` are **alphabetically sorted**
90
+ Order imports in this sequence:
91
+ 1. CDK/framework (`aws-cdk-lib`, `aws-cdk-lib/*`, `constructs`)
92
+ 2. External packages (`@aws-sdk/client-ssm`, etc.)
93
+ 3. Node builtins (`import * as path from "path"`)
94
+ 4. Relative imports (`"./..."`, `"../..."`)
95
+ Style rules:
96
+ - Prefer named imports
97
+ - Use namespace imports for Node builtins
98
+ - Use `import type` for type-only imports
99
+ - Use inline `type` specifiers in mixed imports when needed
100
+ - Keep `src/index.ts` exports alphabetically ordered
101
+
102
+ ## TypeScript and API Design
103
+ - Keep code JSII-compatible (public API types should be simple/stable)
104
+ - Respect `strict` mode and avoid `any`
105
+ - Avoid unused locals/parameters and implicit returns
106
+ - Use explicit, narrow interfaces for custom resource properties
107
+ - Prefer `readonly` on interface and public class properties
86
108
 
87
109
  ## Naming Conventions
88
-
89
- | Category | Convention | Example |
90
- |---|---|---|
91
- | Source files | kebab-case `.ts` | `turso-database.ts` |
92
- | Test files | `{source-name}.test.ts` | `handler.test.ts` |
93
- | Classes | PascalCase | `TursoDatabase` |
94
- | Props interfaces | `{ClassName}Props` | `TursoDatabaseProps` |
95
- | Sub-config interfaces | `{ClassName}{Feature}` | `TursoDatabaseEncryption` |
96
- | Interface properties | `readonly`, camelCase | `readonly databaseName: string` |
97
- | Public class properties | `public readonly`, camelCase | `public readonly dbId: string` |
98
- | Functions | camelCase | `handler`, `getApiToken` |
99
- | CDK resource IDs | PascalCase string | `"Handler"`, `"Provider"` |
100
- | CF resource properties | PascalCase string | `"DatabaseName"`, `"Group"` |
101
- | Environment variables | SCREAMING_SNAKE_CASE | `TURSO_API_TOKEN_PARAMETER_NAME` |
102
-
103
- ## TypeScript
104
-
105
- - `strict: true` — all strict checks enabled (`noImplicitAny`, `strictNullChecks`, `strictPropertyInitialization`, etc.)
106
- - `noUnusedLocals: true`, `noUnusedParameters: true`, `noImplicitReturns: true`
107
- - `noFallthroughCasesInSwitch: true`
108
- - Target: `ES2020`, Module: `CommonJS`
109
-
110
- ## CDK Construct Patterns
111
-
112
- - Extend `Construct` from `constructs`, not from `aws-cdk-lib`
113
- - Constructor signature: `constructor(scope: Construct, id: string, props: XxxProps)`
114
- - Call `super(scope, id)` first
115
- - Validate inputs in constructor with `throw new Error(...)` for bad values (regex checks, length limits)
116
- - Custom resource pattern: Lambda Function Provider → CustomResource
117
- - Expose outputs as `public readonly` properties via `cr.getAttString("AttrName")`
118
-
119
- ## Error Handling
120
-
121
- - **Constructor validation**: throw `new Error(...)` with clear messages for invalid props
122
- - **Handler errors**: include HTTP status and response text: `throw new Error(\`Failed to create: ${response.status} ${errorText}\`)`
123
- - **Environment checks**: throw early if required env vars are missing
124
- - **Idempotent deletes**: tolerate 404 on delete operations
125
- - **Graceful handling**: skip delete for unknown/failed physical resource IDs
126
-
127
- ## Testing Patterns
128
-
129
- - Use `describe("ClassName", () => { ... })` as outer wrapper
130
- - Use **`test()`** (not `it()`) for individual cases
131
- - Test names are descriptive sentences: `"creates custom resource with correct properties"`
132
-
133
- ### Construct Tests
134
- - Helper function `createStack()` at top of describe block for shared setup
135
- - CDK assertions: `Template.fromStack(stack)`, `template.hasResource()`, `template.hasResourceProperties()`
136
- - Partial matching: `Match.arrayWith([...])`, `Match.objectLike({...})`
137
- - Validation tests: `expect(() => { ... }).toThrow("exact message")`
138
- - Import constructs from barrel: `import { TursoDatabase } from "../src"`
139
-
140
- ### Handler Tests
141
- - `jest.mock()` at file top level, before imports
142
- - Mock `global.fetch` per test: `global.fetch = jest.fn()`
143
- - `beforeEach`: clear mocks, set env vars, configure default mock responses
144
- - `afterEach`: clean up env vars
145
- - Async error assertions: `await expect(handler(...)).rejects.toThrow("message")`
146
- - Argument checking: `expect(mockFetch).toHaveBeenCalledWith(url, expect.objectContaining({...}))`
110
+ - Files: kebab-case (`turso-database.ts`)
111
+ - Tests: `<source>.test.ts`
112
+ - Classes: PascalCase
113
+ - Props interfaces: `<ClassName>Props`
114
+ - Function/method names: camelCase
115
+ - CDK logical IDs: PascalCase strings (`"Handler"`, `"Provider"`)
116
+ - Custom resource payload keys: PascalCase (`DatabaseName`, `OrganizationSlug`)
117
+ - Env vars: SCREAMING_SNAKE_CASE
118
+
119
+ ## Construct Patterns
120
+ - Extend `Construct` from `constructs`
121
+ - Constructor pattern: `(scope, id, props)` and `super(scope, id)` first
122
+ - Validate inputs early with clear `Error` messages
123
+ - Pattern is `Lambda -> Provider -> CustomResource`
124
+ - Expose CR outputs using `cr.getAttString(...)`
125
+ - Forward `removalPolicy` with `cr.applyRemovalPolicy(...)`
126
+ - `TursoDatabase.adopt` is create-only behavior; updates ignore it
127
+
128
+ ## Error Handling Guidelines
129
+ - Fail fast if required environment variables are missing
130
+ - Include status code and response text for API failures
131
+ - Keep delete operations idempotent (404 is tolerated where intended)
132
+ - Skip destructive delete work for unknown/failed physical IDs
133
+ - In adopt flows, only suppress expected "already exists" create errors
134
+
135
+ ## Testing Guidelines
136
+ - Use `describe(...)` and `test(...)` (not `it(...)`)
137
+ - Use behavior-focused test names
138
+ - Keep construct tests focused on synthesized template assertions
139
+ - Use `Template.fromStack`, `hasResource`, `hasResourceProperties`
140
+ - Use `Match.objectLike` / `Match.arrayWith` for partial assertions
141
+ - In handler tests, mock `global.fetch` per scenario
142
+ - Keep `jest.mock(...)` declarations at top-level before imports
143
+ - Use `await expect(...).rejects.toThrow(...)` for async error checks
144
+
145
+ ## Agent Checklist Before Finishing
146
+ - Run focused tests for changed behavior first
147
+ - Run `npm run test`
148
+ - Run `npm run build` when API surface/types/docs changed
149
+ - Regenerate files only through projen workflows
package/API.md CHANGED
@@ -476,6 +476,7 @@ const tursoAuthTokenProps: TursoAuthTokenProps = { ... }
476
476
  | <code><a href="#cdk-turso.TursoAuthTokenProps.property.provider">provider</a></code> | <code><a href="#cdk-turso.ITursoProvider">ITursoProvider</a></code> | *No description.* |
477
477
  | <code><a href="#cdk-turso.TursoAuthTokenProps.property.authorization">authorization</a></code> | <code>string</code> | Authorization level for the token. |
478
478
  | <code><a href="#cdk-turso.TursoAuthTokenProps.property.expiration">expiration</a></code> | <code>string</code> | Expiration time for the token (e.g., `"2w"`, `"1d30m"`). |
479
+ | <code><a href="#cdk-turso.TursoAuthTokenProps.property.removalPolicy">removalPolicy</a></code> | <code>aws-cdk-lib.RemovalPolicy</code> | Removal policy for the underlying custom resource. |
479
480
 
480
481
  ---
481
482
 
@@ -551,6 +552,21 @@ Expiration time for the token (e.g., `"2w"`, `"1d30m"`).
551
552
 
552
553
  ---
553
554
 
555
+ ##### `removalPolicy`<sup>Optional</sup> <a name="removalPolicy" id="cdk-turso.TursoAuthTokenProps.property.removalPolicy"></a>
556
+
557
+ ```typescript
558
+ public readonly removalPolicy: RemovalPolicy;
559
+ ```
560
+
561
+ - *Type:* aws-cdk-lib.RemovalPolicy
562
+
563
+ Removal policy for the underlying custom resource.
564
+
565
+ Set to `RemovalPolicy.RETAIN` to keep the SSM parameter on stack
566
+ deletion.
567
+
568
+ ---
569
+
554
570
  ### TursoDatabaseEncryption <a name="TursoDatabaseEncryption" id="cdk-turso.TursoDatabaseEncryption"></a>
555
571
 
556
572
  #### Initializer <a name="Initializer" id="cdk-turso.TursoDatabaseEncryption.Initializer"></a>
@@ -608,7 +624,9 @@ const tursoDatabaseProps: TursoDatabaseProps = { ... }
608
624
  | <code><a href="#cdk-turso.TursoDatabaseProps.property.group">group</a></code> | <code>string</code> | *No description.* |
609
625
  | <code><a href="#cdk-turso.TursoDatabaseProps.property.organizationSlug">organizationSlug</a></code> | <code>string</code> | *No description.* |
610
626
  | <code><a href="#cdk-turso.TursoDatabaseProps.property.provider">provider</a></code> | <code><a href="#cdk-turso.ITursoProvider">ITursoProvider</a></code> | *No description.* |
627
+ | <code><a href="#cdk-turso.TursoDatabaseProps.property.adopt">adopt</a></code> | <code>boolean</code> | If true, the provider will adopt an existing Turso database when creation reports that the database already exists. |
611
628
  | <code><a href="#cdk-turso.TursoDatabaseProps.property.encryption">encryption</a></code> | <code><a href="#cdk-turso.TursoDatabaseEncryption">TursoDatabaseEncryption</a></code> | *No description.* |
629
+ | <code><a href="#cdk-turso.TursoDatabaseProps.property.removalPolicy">removalPolicy</a></code> | <code>aws-cdk-lib.RemovalPolicy</code> | Removal policy for the underlying custom resource. |
612
630
  | <code><a href="#cdk-turso.TursoDatabaseProps.property.seed">seed</a></code> | <code><a href="#cdk-turso.TursoDatabaseSeed">TursoDatabaseSeed</a></code> | *No description.* |
613
631
  | <code><a href="#cdk-turso.TursoDatabaseProps.property.sizeLimit">sizeLimit</a></code> | <code>string</code> | *No description.* |
614
632
 
@@ -654,6 +672,21 @@ public readonly provider: ITursoProvider;
654
672
 
655
673
  ---
656
674
 
675
+ ##### `adopt`<sup>Optional</sup> <a name="adopt" id="cdk-turso.TursoDatabaseProps.property.adopt"></a>
676
+
677
+ ```typescript
678
+ public readonly adopt: boolean;
679
+ ```
680
+
681
+ - *Type:* boolean
682
+ - *Default:* false
683
+
684
+ If true, the provider will adopt an existing Turso database when creation reports that the database already exists.
685
+
686
+ This flag is only used during Create requests.
687
+
688
+ ---
689
+
657
690
  ##### `encryption`<sup>Optional</sup> <a name="encryption" id="cdk-turso.TursoDatabaseProps.property.encryption"></a>
658
691
 
659
692
  ```typescript
@@ -664,6 +697,21 @@ public readonly encryption: TursoDatabaseEncryption;
664
697
 
665
698
  ---
666
699
 
700
+ ##### `removalPolicy`<sup>Optional</sup> <a name="removalPolicy" id="cdk-turso.TursoDatabaseProps.property.removalPolicy"></a>
701
+
702
+ ```typescript
703
+ public readonly removalPolicy: RemovalPolicy;
704
+ ```
705
+
706
+ - *Type:* aws-cdk-lib.RemovalPolicy
707
+
708
+ Removal policy for the underlying custom resource.
709
+
710
+ Set to `RemovalPolicy.RETAIN` to keep the Turso database on stack
711
+ deletion.
712
+
713
+ ---
714
+
667
715
  ##### `seed`<sup>Optional</sup> <a name="seed" id="cdk-turso.TursoDatabaseProps.property.seed"></a>
668
716
 
669
717
  ```typescript
package/README.md CHANGED
@@ -13,7 +13,7 @@ npm install cdk-turso
13
13
  Create a `TursoProvider` with your API token:
14
14
 
15
15
  ```typescript
16
- import { Stack } from 'aws-cdk-lib';
16
+ import { RemovalPolicy, Stack } from 'aws-cdk-lib';
17
17
  import { ParameterType, StringParameter } from 'aws-cdk-lib/aws-ssm';
18
18
  import { TursoProvider, TursoDatabase, TursoAuthToken } from 'cdk-turso';
19
19
 
@@ -36,6 +36,8 @@ const database = new TursoDatabase(stack, 'Database', {
36
36
  databaseName: 'my-database',
37
37
  group: 'group-name',
38
38
  organizationSlug: 'my-org',
39
+ adopt: true, // optional: adopt existing database if it already exists
40
+ removalPolicy: RemovalPolicy.RETAIN, // optional: keep DB on stack delete
39
41
  });
40
42
 
41
43
  // Access database attributes
@@ -66,6 +68,7 @@ const authToken = new TursoAuthToken(stack, 'AuthToken', {
66
68
  parameterName: '/turso/db-token',
67
69
  expiration: '2w', // optional, default: 'never'
68
70
  authorization: 'read-only', // optional, default: 'full-access'
71
+ removalPolicy: RemovalPolicy.RETAIN, // optional: keep SSM parameter
69
72
  });
70
73
 
71
74
  // The SSM parameter name where the JWT is stored
@@ -111,6 +114,8 @@ Static method:
111
114
  | `sizeLimit` | `string` | No | Size limit (e.g., '256mb') |
112
115
  | `seed` | `TursoDatabaseSeed` | No | Database seed configuration |
113
116
  | `encryption` | `TursoDatabaseEncryption` | No | Encryption configuration |
117
+ | `adopt` | `boolean` | No | On create, adopt an existing database when create returns "already exists" |
118
+ | `removalPolicy` | `RemovalPolicy` | No | Custom resource removal policy (for example `RemovalPolicy.RETAIN`) |
114
119
 
115
120
  ### TursoDatabaseSeed
116
121
 
@@ -149,6 +154,7 @@ interface TursoDatabaseEncryption {
149
154
  | `parameterName` | `string` | Yes | SSM parameter name where the generated JWT will be stored as a SecureString |
150
155
  | `expiration` | `string` | No | Token expiry (e.g., `'2w'`, `'1d30m'`). Default: `'never'` |
151
156
  | `authorization` | `string` | No | `'full-access'` or `'read-only'`. Default: `'full-access'` |
157
+ | `removalPolicy` | `RemovalPolicy` | No | Custom resource removal policy (for example `RemovalPolicy.RETAIN`) |
152
158
 
153
159
  ### TursoAuthToken
154
160
 
@@ -591,16 +591,28 @@ var retryOptions = {
591
591
  numOfAttempts: 4,
592
592
  jitter: "none"
593
593
  };
594
- async function fetchWithRetry(url, options, errorMessage, allow404 = false) {
594
+ async function fetchWithRetry(url, options, errorMessage, allow404 = false, allowError) {
595
595
  return (0, import_exponential_backoff.backOff)(async () => {
596
596
  const response = await fetch(url, options);
597
597
  if (!response.ok && !(allow404 && response.status === 404)) {
598
598
  const errorText = await response.text();
599
+ if (allowError?.(response.status, errorText)) {
600
+ return response;
601
+ }
599
602
  throw new Error(`${errorMessage}: ${response.status} ${errorText}`);
600
603
  }
601
604
  return response;
602
605
  }, retryOptions);
603
606
  }
607
+ function isAlreadyExistsError(status, errorText) {
608
+ return status === 409 || /already exists|already been taken/i.test(errorText);
609
+ }
610
+ function isTrueValue(value) {
611
+ if (typeof value === "string") {
612
+ return value.trim().toLowerCase() === "true";
613
+ }
614
+ return value === true;
615
+ }
604
616
  async function getApiToken(parameterName) {
605
617
  const command = new import_client_ssm.GetParameterCommand({
606
618
  Name: parameterName,
@@ -618,6 +630,7 @@ async function handleDatabase(event, apiToken) {
618
630
  const baseUrl = "https://api.turso.tech/v1";
619
631
  if (RequestType === "Create") {
620
632
  const dbName = ResourceProperties.DatabaseName;
633
+ const adopt = isTrueValue(ResourceProperties.Adopt);
621
634
  const body = {
622
635
  name: dbName,
623
636
  group: ResourceProperties.Group
@@ -641,8 +654,34 @@ async function handleDatabase(event, apiToken) {
641
654
  },
642
655
  body: JSON.stringify(body)
643
656
  },
644
- "Failed to create database"
657
+ "Failed to create database",
658
+ false,
659
+ (status, errorText) => {
660
+ return adopt && isAlreadyExistsError(status, errorText);
661
+ }
645
662
  );
663
+ if (!response.ok) {
664
+ const existingDbName = encodeURIComponent(dbName);
665
+ const existingResponse = await fetchWithRetry(
666
+ `${baseUrl}/organizations/${orgSlug}/databases/${existingDbName}`,
667
+ {
668
+ method: "GET",
669
+ headers: {
670
+ Authorization: `Bearer ${apiToken}`
671
+ }
672
+ },
673
+ "Failed to get database"
674
+ );
675
+ const existingData = await existingResponse.json();
676
+ return {
677
+ PhysicalResourceId: dbName,
678
+ Data: {
679
+ DbId: existingData.database.DbId,
680
+ Hostname: existingData.database.Hostname,
681
+ Name: existingData.database.Name
682
+ }
683
+ };
684
+ }
646
685
  const data = await response.json();
647
686
  return {
648
687
  PhysicalResourceId: dbName,
@@ -1,3 +1,4 @@
1
+ import { RemovalPolicy } from "aws-cdk-lib";
1
2
  import { Construct } from "constructs";
2
3
  import type { ITursoProvider } from "./turso-provider";
3
4
  export interface TursoAuthTokenProps {
@@ -27,6 +28,12 @@ export interface TursoAuthTokenProps {
27
28
  * @default "full-access"
28
29
  */
29
30
  readonly authorization?: string;
31
+ /**
32
+ * Removal policy for the underlying custom resource.
33
+ * Set to `RemovalPolicy.RETAIN` to keep the SSM parameter on stack
34
+ * deletion.
35
+ */
36
+ readonly removalPolicy?: RemovalPolicy;
30
37
  }
31
38
  export declare class TursoAuthToken extends Construct {
32
39
  /**
@@ -39,15 +39,18 @@ class TursoAuthToken extends constructs_1.Construct {
39
39
  if (props.authorization) {
40
40
  resourceProps.Authorization = props.authorization;
41
41
  }
42
- new aws_cdk_lib_1.CustomResource(this, "TursoAuthToken", {
42
+ const cr = new aws_cdk_lib_1.CustomResource(this, "TursoAuthToken", {
43
43
  serviceToken: props.provider.serviceToken,
44
44
  resourceType: "Custom::TursoAuthToken",
45
45
  properties: resourceProps,
46
46
  });
47
+ if (props.removalPolicy !== undefined) {
48
+ cr.applyRemovalPolicy(props.removalPolicy);
49
+ }
47
50
  this.parameterName = props.parameterName;
48
51
  }
49
52
  }
50
53
  exports.TursoAuthToken = TursoAuthToken;
51
54
  _a = JSII_RTTI_SYMBOL_1;
52
- TursoAuthToken[_a] = { fqn: "cdk-turso.TursoAuthToken", version: "0.3.4" };
53
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHVyc28tYXV0aC10b2tlbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy90dXJzby1hdXRoLXRva2VuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsNkNBQW1EO0FBQ25ELGlEQUE2RDtBQUM3RCwyQ0FBc0M7QUFxQ3RDLE1BQWEsY0FBZSxTQUFRLHNCQUFTO0lBTTNDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBMEI7UUFDbEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUVoQixJQUNFLEtBQUssQ0FBQyxhQUFhO1lBQ25CLEtBQUssQ0FBQyxhQUFhLEtBQUssYUFBYTtZQUNyQyxLQUFLLENBQUMsYUFBYSxLQUFLLFdBQVcsRUFDbkMsQ0FBQztZQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsb0RBQW9ELENBQUMsQ0FBQTtRQUN2RSxDQUFDO1FBRUQsTUFBTSxZQUFZLEdBQUcsbUJBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQzVDLE9BQU8sRUFBRSxLQUFLO1lBQ2QsUUFBUSxFQUFFLFdBQVc7WUFDckIsWUFBWSxFQUFFLEtBQUssQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQztnQkFDL0MsQ0FBQyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDOUIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxhQUFhO1NBQ3hCLENBQUMsQ0FBQTtRQUVGLE1BQU0sbUJBQW1CLEdBQUcsS0FBSyxDQUFDLFFBSWpDLENBQUE7UUFFRCxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsZUFBZSxDQUMxQyxJQUFJLHlCQUFlLENBQUM7WUFDbEIsTUFBTSxFQUFFLGdCQUFNLENBQUMsS0FBSztZQUNwQixPQUFPLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxxQkFBcUIsQ0FBQztZQUNwRCxTQUFTLEVBQUUsQ0FBQyxZQUFZLENBQUM7U0FDMUIsQ0FBQyxDQUNILENBQUE7UUFFRCxNQUFNLGFBQWEsR0FBNEI7WUFDN0MsWUFBWSxFQUFFLFdBQVc7WUFDekIsWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFZO1lBQ2hDLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxnQkFBZ0I7WUFDeEMsYUFBYSxFQUFFLEtBQUssQ0FBQyxhQUFhO1NBQ25DLENBQUE7UUFFRCxJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNyQixhQUFhLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUE7UUFDN0MsQ0FBQztRQUNELElBQUksS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3hCLGFBQWEsQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQTtRQUNuRCxDQUFDO1FBRUQsSUFBSSw0QkFBYyxDQUFDLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtZQUN6QyxZQUFZLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxZQUFZO1lBQ3pDLFlBQVksRUFBRSx3QkFBd0I7WUFDdEMsVUFBVSxFQUFFLGFBQWE7U0FDMUIsQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFBO0lBQzFDLENBQUM7O0FBNURILHdDQTZEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEN1c3RvbVJlc291cmNlLCBTdGFjayB9IGZyb20gXCJhd3MtY2RrLWxpYlwiXG5pbXBvcnQgeyBFZmZlY3QsIFBvbGljeVN0YXRlbWVudCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCJcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCJcbmltcG9ydCB0eXBlIHsgSVR1cnNvUHJvdmlkZXIgfSBmcm9tIFwiLi90dXJzby1wcm92aWRlclwiXG5cbmV4cG9ydCBpbnRlcmZhY2UgVHVyc29BdXRoVG9rZW5Qcm9wcyB7XG4gIHJlYWRvbmx5IHByb3ZpZGVyOiBJVHVyc29Qcm92aWRlclxuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgVHVyc28gZGF0YWJhc2UgdG8gY3JlYXRlIGFuIGF1dGggdG9rZW4gZm9yLlxuICAgKi9cbiAgcmVhZG9ubHkgZGF0YWJhc2VOYW1lOiBzdHJpbmdcblxuICAvKipcbiAgICogVGhlIFR1cnNvIG9yZ2FuaXphdGlvbiBzbHVnIHRoYXQgb3ducyB0aGUgZGF0YWJhc2UuXG4gICAqL1xuICByZWFkb25seSBvcmdhbml6YXRpb25TbHVnOiBzdHJpbmdcblxuICAvKipcbiAgICogVGhlIFNTTSBwYXJhbWV0ZXIgbmFtZSB3aGVyZSB0aGUgZ2VuZXJhdGVkIEpXVCB3aWxsIGJlIHN0b3JlZFxuICAgKiBhcyBhIFNlY3VyZVN0cmluZy5cbiAgICovXG4gIHJlYWRvbmx5IHBhcmFtZXRlck5hbWU6IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBFeHBpcmF0aW9uIHRpbWUgZm9yIHRoZSB0b2tlbiAoZS5nLiwgYFwiMndcImAsIGBcIjFkMzBtXCJgKS5cbiAgICpcbiAgICogQGRlZmF1bHQgXCJuZXZlclwiXG4gICAqL1xuICByZWFkb25seSBleHBpcmF0aW9uPzogc3RyaW5nXG5cbiAgLyoqXG4gICAqIEF1dGhvcml6YXRpb24gbGV2ZWwgZm9yIHRoZSB0b2tlbi5cbiAgICpcbiAgICogQGRlZmF1bHQgXCJmdWxsLWFjY2Vzc1wiXG4gICAqL1xuICByZWFkb25seSBhdXRob3JpemF0aW9uPzogc3RyaW5nXG59XG5cbmV4cG9ydCBjbGFzcyBUdXJzb0F1dGhUb2tlbiBleHRlbmRzIENvbnN0cnVjdCB7XG4gIC8qKlxuICAgKiBUaGUgU1NNIHBhcmFtZXRlciBuYW1lIHdoZXJlIHRoZSBhdXRoIHRva2VuIGlzIHN0b3JlZC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwYXJhbWV0ZXJOYW1lOiBzdHJpbmdcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogVHVyc29BdXRoVG9rZW5Qcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZClcblxuICAgIGlmIChcbiAgICAgIHByb3BzLmF1dGhvcml6YXRpb24gJiZcbiAgICAgIHByb3BzLmF1dGhvcml6YXRpb24gIT09IFwiZnVsbC1hY2Nlc3NcIiAmJlxuICAgICAgcHJvcHMuYXV0aG9yaXphdGlvbiAhPT0gXCJyZWFkLW9ubHlcIlxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdhdXRob3JpemF0aW9uIG11c3QgYmUgXCJmdWxsLWFjY2Vzc1wiIG9yIFwicmVhZC1vbmx5XCInKVxuICAgIH1cblxuICAgIGNvbnN0IHBhcmFtZXRlckFybiA9IFN0YWNrLm9mKHRoaXMpLmZvcm1hdEFybih7XG4gICAgICBzZXJ2aWNlOiBcInNzbVwiLFxuICAgICAgcmVzb3VyY2U6IFwicGFyYW1ldGVyXCIsXG4gICAgICByZXNvdXJjZU5hbWU6IHByb3BzLnBhcmFtZXRlck5hbWUuc3RhcnRzV2l0aChcIi9cIilcbiAgICAgICAgPyBwcm9wcy5wYXJhbWV0ZXJOYW1lLnNsaWNlKDEpXG4gICAgICAgIDogcHJvcHMucGFyYW1ldGVyTmFtZSxcbiAgICB9KVxuXG4gICAgY29uc3QgcHJvdmlkZXJXaXRoSGFuZGxlciA9IHByb3BzLnByb3ZpZGVyIGFzIElUdXJzb1Byb3ZpZGVyICYge1xuICAgICAgcmVhZG9ubHkgaGFuZGxlcj86IHtcbiAgICAgICAgYWRkVG9Sb2xlUG9saWN5KHN0YXRlbWVudDogUG9saWN5U3RhdGVtZW50KTogdm9pZFxuICAgICAgfVxuICAgIH1cblxuICAgIHByb3ZpZGVyV2l0aEhhbmRsZXIuaGFuZGxlcj8uYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgICBhY3Rpb25zOiBbXCJzc206UHV0UGFyYW1ldGVyXCIsIFwic3NtOkRlbGV0ZVBhcmFtZXRlclwiXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbcGFyYW1ldGVyQXJuXSxcbiAgICAgIH0pLFxuICAgIClcblxuICAgIGNvbnN0IHJlc291cmNlUHJvcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgICAgUmVzb3VyY2VUeXBlOiBcIkF1dGhUb2tlblwiLFxuICAgICAgRGF0YWJhc2VOYW1lOiBwcm9wcy5kYXRhYmFzZU5hbWUsXG4gICAgICBPcmdhbml6YXRpb25TbHVnOiBwcm9wcy5vcmdhbml6YXRpb25TbHVnLFxuICAgICAgUGFyYW1ldGVyTmFtZTogcHJvcHMucGFyYW1ldGVyTmFtZSxcbiAgICB9XG5cbiAgICBpZiAocHJvcHMuZXhwaXJhdGlvbikge1xuICAgICAgcmVzb3VyY2VQcm9wcy5FeHBpcmF0aW9uID0gcHJvcHMuZXhwaXJhdGlvblxuICAgIH1cbiAgICBpZiAocHJvcHMuYXV0aG9yaXphdGlvbikge1xuICAgICAgcmVzb3VyY2VQcm9wcy5BdXRob3JpemF0aW9uID0gcHJvcHMuYXV0aG9yaXphdGlvblxuICAgIH1cblxuICAgIG5ldyBDdXN0b21SZXNvdXJjZSh0aGlzLCBcIlR1cnNvQXV0aFRva2VuXCIsIHtcbiAgICAgIHNlcnZpY2VUb2tlbjogcHJvcHMucHJvdmlkZXIuc2VydmljZVRva2VuLFxuICAgICAgcmVzb3VyY2VUeXBlOiBcIkN1c3RvbTo6VHVyc29BdXRoVG9rZW5cIixcbiAgICAgIHByb3BlcnRpZXM6IHJlc291cmNlUHJvcHMsXG4gICAgfSlcblxuICAgIHRoaXMucGFyYW1ldGVyTmFtZSA9IHByb3BzLnBhcmFtZXRlck5hbWVcbiAgfVxufVxuIl19
55
+ TursoAuthToken[_a] = { fqn: "cdk-turso.TursoAuthToken", version: "0.4.1" };
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHVyc28tYXV0aC10b2tlbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy90dXJzby1hdXRoLXRva2VuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsNkNBQWtFO0FBQ2xFLGlEQUE2RDtBQUM3RCwyQ0FBc0M7QUE0Q3RDLE1BQWEsY0FBZSxTQUFRLHNCQUFTO0lBTTNDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBMEI7UUFDbEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUVoQixJQUNFLEtBQUssQ0FBQyxhQUFhO1lBQ25CLEtBQUssQ0FBQyxhQUFhLEtBQUssYUFBYTtZQUNyQyxLQUFLLENBQUMsYUFBYSxLQUFLLFdBQVcsRUFDbkMsQ0FBQztZQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsb0RBQW9ELENBQUMsQ0FBQTtRQUN2RSxDQUFDO1FBRUQsTUFBTSxZQUFZLEdBQUcsbUJBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQzVDLE9BQU8sRUFBRSxLQUFLO1lBQ2QsUUFBUSxFQUFFLFdBQVc7WUFDckIsWUFBWSxFQUFFLEtBQUssQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQztnQkFDL0MsQ0FBQyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDOUIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxhQUFhO1NBQ3hCLENBQUMsQ0FBQTtRQUVGLE1BQU0sbUJBQW1CLEdBQUcsS0FBSyxDQUFDLFFBSWpDLENBQUE7UUFFRCxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsZUFBZSxDQUMxQyxJQUFJLHlCQUFlLENBQUM7WUFDbEIsTUFBTSxFQUFFLGdCQUFNLENBQUMsS0FBSztZQUNwQixPQUFPLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxxQkFBcUIsQ0FBQztZQUNwRCxTQUFTLEVBQUUsQ0FBQyxZQUFZLENBQUM7U0FDMUIsQ0FBQyxDQUNILENBQUE7UUFFRCxNQUFNLGFBQWEsR0FBNEI7WUFDN0MsWUFBWSxFQUFFLFdBQVc7WUFDekIsWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFZO1lBQ2hDLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxnQkFBZ0I7WUFDeEMsYUFBYSxFQUFFLEtBQUssQ0FBQyxhQUFhO1NBQ25DLENBQUE7UUFFRCxJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNyQixhQUFhLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUE7UUFDN0MsQ0FBQztRQUNELElBQUksS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3hCLGFBQWEsQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQTtRQUNuRCxDQUFDO1FBRUQsTUFBTSxFQUFFLEdBQUcsSUFBSSw0QkFBYyxDQUFDLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtZQUNwRCxZQUFZLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxZQUFZO1lBQ3pDLFlBQVksRUFBRSx3QkFBd0I7WUFDdEMsVUFBVSxFQUFFLGFBQWE7U0FDMUIsQ0FBQyxDQUFBO1FBRUYsSUFBSSxLQUFLLENBQUMsYUFBYSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3RDLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUE7UUFDNUMsQ0FBQztRQUVELElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQTtJQUMxQyxDQUFDOztBQWhFSCx3Q0FpRUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDdXN0b21SZXNvdXJjZSwgUmVtb3ZhbFBvbGljeSwgU3RhY2sgfSBmcm9tIFwiYXdzLWNkay1saWJcIlxuaW1wb3J0IHsgRWZmZWN0LCBQb2xpY3lTdGF0ZW1lbnQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiXG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiXG5pbXBvcnQgdHlwZSB7IElUdXJzb1Byb3ZpZGVyIH0gZnJvbSBcIi4vdHVyc28tcHJvdmlkZXJcIlxuXG5leHBvcnQgaW50ZXJmYWNlIFR1cnNvQXV0aFRva2VuUHJvcHMge1xuICByZWFkb25seSBwcm92aWRlcjogSVR1cnNvUHJvdmlkZXJcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIFR1cnNvIGRhdGFiYXNlIHRvIGNyZWF0ZSBhbiBhdXRoIHRva2VuIGZvci5cbiAgICovXG4gIHJlYWRvbmx5IGRhdGFiYXNlTmFtZTogc3RyaW5nXG5cbiAgLyoqXG4gICAqIFRoZSBUdXJzbyBvcmdhbml6YXRpb24gc2x1ZyB0aGF0IG93bnMgdGhlIGRhdGFiYXNlLlxuICAgKi9cbiAgcmVhZG9ubHkgb3JnYW5pemF0aW9uU2x1Zzogc3RyaW5nXG5cbiAgLyoqXG4gICAqIFRoZSBTU00gcGFyYW1ldGVyIG5hbWUgd2hlcmUgdGhlIGdlbmVyYXRlZCBKV1Qgd2lsbCBiZSBzdG9yZWRcbiAgICogYXMgYSBTZWN1cmVTdHJpbmcuXG4gICAqL1xuICByZWFkb25seSBwYXJhbWV0ZXJOYW1lOiBzdHJpbmdcblxuICAvKipcbiAgICogRXhwaXJhdGlvbiB0aW1lIGZvciB0aGUgdG9rZW4gKGUuZy4sIGBcIjJ3XCJgLCBgXCIxZDMwbVwiYCkuXG4gICAqXG4gICAqIEBkZWZhdWx0IFwibmV2ZXJcIlxuICAgKi9cbiAgcmVhZG9ubHkgZXhwaXJhdGlvbj86IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBBdXRob3JpemF0aW9uIGxldmVsIGZvciB0aGUgdG9rZW4uXG4gICAqXG4gICAqIEBkZWZhdWx0IFwiZnVsbC1hY2Nlc3NcIlxuICAgKi9cbiAgcmVhZG9ubHkgYXV0aG9yaXphdGlvbj86IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBSZW1vdmFsIHBvbGljeSBmb3IgdGhlIHVuZGVybHlpbmcgY3VzdG9tIHJlc291cmNlLlxuICAgKiBTZXQgdG8gYFJlbW92YWxQb2xpY3kuUkVUQUlOYCB0byBrZWVwIHRoZSBTU00gcGFyYW1ldGVyIG9uIHN0YWNrXG4gICAqIGRlbGV0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVtb3ZhbFBvbGljeT86IFJlbW92YWxQb2xpY3lcbn1cblxuZXhwb3J0IGNsYXNzIFR1cnNvQXV0aFRva2VuIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgLyoqXG4gICAqIFRoZSBTU00gcGFyYW1ldGVyIG5hbWUgd2hlcmUgdGhlIGF1dGggdG9rZW4gaXMgc3RvcmVkLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHBhcmFtZXRlck5hbWU6IHN0cmluZ1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBUdXJzb0F1dGhUb2tlblByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKVxuXG4gICAgaWYgKFxuICAgICAgcHJvcHMuYXV0aG9yaXphdGlvbiAmJlxuICAgICAgcHJvcHMuYXV0aG9yaXphdGlvbiAhPT0gXCJmdWxsLWFjY2Vzc1wiICYmXG4gICAgICBwcm9wcy5hdXRob3JpemF0aW9uICE9PSBcInJlYWQtb25seVwiXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2F1dGhvcml6YXRpb24gbXVzdCBiZSBcImZ1bGwtYWNjZXNzXCIgb3IgXCJyZWFkLW9ubHlcIicpXG4gICAgfVxuXG4gICAgY29uc3QgcGFyYW1ldGVyQXJuID0gU3RhY2sub2YodGhpcykuZm9ybWF0QXJuKHtcbiAgICAgIHNlcnZpY2U6IFwic3NtXCIsXG4gICAgICByZXNvdXJjZTogXCJwYXJhbWV0ZXJcIixcbiAgICAgIHJlc291cmNlTmFtZTogcHJvcHMucGFyYW1ldGVyTmFtZS5zdGFydHNXaXRoKFwiL1wiKVxuICAgICAgICA/IHByb3BzLnBhcmFtZXRlck5hbWUuc2xpY2UoMSlcbiAgICAgICAgOiBwcm9wcy5wYXJhbWV0ZXJOYW1lLFxuICAgIH0pXG5cbiAgICBjb25zdCBwcm92aWRlcldpdGhIYW5kbGVyID0gcHJvcHMucHJvdmlkZXIgYXMgSVR1cnNvUHJvdmlkZXIgJiB7XG4gICAgICByZWFkb25seSBoYW5kbGVyPzoge1xuICAgICAgICBhZGRUb1JvbGVQb2xpY3koc3RhdGVtZW50OiBQb2xpY3lTdGF0ZW1lbnQpOiB2b2lkXG4gICAgICB9XG4gICAgfVxuXG4gICAgcHJvdmlkZXJXaXRoSGFuZGxlci5oYW5kbGVyPy5hZGRUb1JvbGVQb2xpY3koXG4gICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgZWZmZWN0OiBFZmZlY3QuQUxMT1csXG4gICAgICAgIGFjdGlvbnM6IFtcInNzbTpQdXRQYXJhbWV0ZXJcIiwgXCJzc206RGVsZXRlUGFyYW1ldGVyXCJdLFxuICAgICAgICByZXNvdXJjZXM6IFtwYXJhbWV0ZXJBcm5dLFxuICAgICAgfSksXG4gICAgKVxuXG4gICAgY29uc3QgcmVzb3VyY2VQcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgICBSZXNvdXJjZVR5cGU6IFwiQXV0aFRva2VuXCIsXG4gICAgICBEYXRhYmFzZU5hbWU6IHByb3BzLmRhdGFiYXNlTmFtZSxcbiAgICAgIE9yZ2FuaXphdGlvblNsdWc6IHByb3BzLm9yZ2FuaXphdGlvblNsdWcsXG4gICAgICBQYXJhbWV0ZXJOYW1lOiBwcm9wcy5wYXJhbWV0ZXJOYW1lLFxuICAgIH1cblxuICAgIGlmIChwcm9wcy5leHBpcmF0aW9uKSB7XG4gICAgICByZXNvdXJjZVByb3BzLkV4cGlyYXRpb24gPSBwcm9wcy5leHBpcmF0aW9uXG4gICAgfVxuICAgIGlmIChwcm9wcy5hdXRob3JpemF0aW9uKSB7XG4gICAgICByZXNvdXJjZVByb3BzLkF1dGhvcml6YXRpb24gPSBwcm9wcy5hdXRob3JpemF0aW9uXG4gICAgfVxuXG4gICAgY29uc3QgY3IgPSBuZXcgQ3VzdG9tUmVzb3VyY2UodGhpcywgXCJUdXJzb0F1dGhUb2tlblwiLCB7XG4gICAgICBzZXJ2aWNlVG9rZW46IHByb3BzLnByb3ZpZGVyLnNlcnZpY2VUb2tlbixcbiAgICAgIHJlc291cmNlVHlwZTogXCJDdXN0b206OlR1cnNvQXV0aFRva2VuXCIsXG4gICAgICBwcm9wZXJ0aWVzOiByZXNvdXJjZVByb3BzLFxuICAgIH0pXG5cbiAgICBpZiAocHJvcHMucmVtb3ZhbFBvbGljeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjci5hcHBseVJlbW92YWxQb2xpY3kocHJvcHMucmVtb3ZhbFBvbGljeSlcbiAgICB9XG5cbiAgICB0aGlzLnBhcmFtZXRlck5hbWUgPSBwcm9wcy5wYXJhbWV0ZXJOYW1lXG4gIH1cbn1cbiJdfQ==
@@ -1,3 +1,4 @@
1
+ import { RemovalPolicy } from "aws-cdk-lib";
1
2
  import { Construct } from "constructs";
2
3
  import type { ITursoProvider } from "./turso-provider";
3
4
  export interface TursoDatabaseSeed {
@@ -17,6 +18,21 @@ export interface TursoDatabaseProps {
17
18
  readonly sizeLimit?: string;
18
19
  readonly seed?: TursoDatabaseSeed;
19
20
  readonly encryption?: TursoDatabaseEncryption;
21
+ /**
22
+ * If true, the provider will adopt an existing Turso database when
23
+ * creation reports that the database already exists.
24
+ *
25
+ * This flag is only used during Create requests.
26
+ *
27
+ * @default false
28
+ */
29
+ readonly adopt?: boolean;
30
+ /**
31
+ * Removal policy for the underlying custom resource.
32
+ * Set to `RemovalPolicy.RETAIN` to keep the Turso database on stack
33
+ * deletion.
34
+ */
35
+ readonly removalPolicy?: RemovalPolicy;
20
36
  }
21
37
  export declare class TursoDatabase extends Construct {
22
38
  readonly dbId: string;
@@ -29,11 +29,17 @@ class TursoDatabase extends constructs_1.Construct {
29
29
  if (props.encryption) {
30
30
  resourceProps.Encryption = props.encryption;
31
31
  }
32
+ if (props.adopt !== undefined) {
33
+ resourceProps.Adopt = props.adopt;
34
+ }
32
35
  const cr = new aws_cdk_lib_1.CustomResource(this, "TursoDb", {
33
36
  serviceToken: props.provider.serviceToken,
34
37
  resourceType: "Custom::TursoDatabase",
35
38
  properties: resourceProps,
36
39
  });
40
+ if (props.removalPolicy !== undefined) {
41
+ cr.applyRemovalPolicy(props.removalPolicy);
42
+ }
37
43
  this.dbId = cr.getAttString("DbId");
38
44
  this.hostname = cr.getAttString("Hostname");
39
45
  this.databaseName = cr.getAttString("Name");
@@ -41,5 +47,5 @@ class TursoDatabase extends constructs_1.Construct {
41
47
  }
42
48
  exports.TursoDatabase = TursoDatabase;
43
49
  _a = JSII_RTTI_SYMBOL_1;
44
- TursoDatabase[_a] = { fqn: "cdk-turso.TursoDatabase", version: "0.3.4" };
45
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHVyc28tZGF0YWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHVyc28tZGF0YWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2Q0FBNEM7QUFDNUMsMkNBQXNDO0FBd0J0QyxNQUFhLGFBQWMsU0FBUSxzQkFBUztJQVMxQyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXlCO1FBQ2pFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUE7UUFFaEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7WUFDN0MsTUFBTSxJQUFJLEtBQUssQ0FDYix1RUFBdUUsQ0FDeEUsQ0FBQTtRQUNILENBQUM7UUFDRCxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLEVBQUUsRUFBRSxDQUFDO1lBQ25DLE1BQU0sSUFBSSxLQUFLLENBQUMsNENBQTRDLENBQUMsQ0FBQTtRQUMvRCxDQUFDO1FBRUQsTUFBTSxhQUFhLEdBQTRCO1lBQzdDLFlBQVksRUFBRSxVQUFVO1lBQ3hCLFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWTtZQUNoQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUs7WUFDbEIsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLGdCQUFnQjtTQUN6QyxDQUFBO1FBRUQsSUFBSSxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDcEIsYUFBYSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFBO1FBQzNDLENBQUM7UUFDRCxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNmLGFBQWEsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQTtRQUNqQyxDQUFDO1FBQ0QsSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDckIsYUFBYSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFBO1FBQzdDLENBQUM7UUFFRCxNQUFNLEVBQUUsR0FBRyxJQUFJLDRCQUFjLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRTtZQUM3QyxZQUFZLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxZQUFZO1lBQ3pDLFlBQVksRUFBRSx1QkFBdUI7WUFDckMsVUFBVSxFQUFFLGFBQWE7U0FDMUIsQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQ25DLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUMzQyxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDN0MsQ0FBQzs7QUEvQ0gsc0NBZ0RDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ3VzdG9tUmVzb3VyY2UgfSBmcm9tIFwiYXdzLWNkay1saWJcIlxuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIlxuaW1wb3J0IHR5cGUgeyBJVHVyc29Qcm92aWRlciB9IGZyb20gXCIuL3R1cnNvLXByb3ZpZGVyXCJcblxuZXhwb3J0IGludGVyZmFjZSBUdXJzb0RhdGFiYXNlU2VlZCB7XG4gIHJlYWRvbmx5IHR5cGU6IHN0cmluZ1xuICByZWFkb25seSBuYW1lOiBzdHJpbmdcbiAgcmVhZG9ubHkgdGltZXN0YW1wPzogc3RyaW5nXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHVyc29EYXRhYmFzZUVuY3J5cHRpb24ge1xuICByZWFkb25seSBlbmNyeXB0aW9uS2V5OiBzdHJpbmdcbiAgcmVhZG9ubHkgZW5jcnlwdGlvbkNpcGhlcjogc3RyaW5nXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHVyc29EYXRhYmFzZVByb3BzIHtcbiAgcmVhZG9ubHkgcHJvdmlkZXI6IElUdXJzb1Byb3ZpZGVyXG4gIHJlYWRvbmx5IGRhdGFiYXNlTmFtZTogc3RyaW5nXG4gIHJlYWRvbmx5IGdyb3VwOiBzdHJpbmdcbiAgcmVhZG9ubHkgb3JnYW5pemF0aW9uU2x1Zzogc3RyaW5nXG4gIHJlYWRvbmx5IHNpemVMaW1pdD86IHN0cmluZ1xuICByZWFkb25seSBzZWVkPzogVHVyc29EYXRhYmFzZVNlZWRcbiAgcmVhZG9ubHkgZW5jcnlwdGlvbj86IFR1cnNvRGF0YWJhc2VFbmNyeXB0aW9uXG59XG5cbmV4cG9ydCBjbGFzcyBUdXJzb0RhdGFiYXNlIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IGRiSWQ6IHN0cmluZ1xuICAvKipcbiAgICogRE5TIGhvc3RuYW1lIGZvciB0aGUgZGF0YWJhc2UgKGUuZy4sIGBteS1kYi1teS1vcmcudHVyc28uaW9gKS5cbiAgICogVXNlIHdpdGggbGliU1FMIG9yIEhUVFAgY29ubmVjdGlvbnMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaG9zdG5hbWU6IHN0cmluZ1xuICBwdWJsaWMgcmVhZG9ubHkgZGF0YWJhc2VOYW1lOiBzdHJpbmdcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogVHVyc29EYXRhYmFzZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKVxuXG4gICAgaWYgKCEvXlthLXowLTktXSskLy50ZXN0KHByb3BzLmRhdGFiYXNlTmFtZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJkYXRhYmFzZU5hbWUgbXVzdCBjb250YWluIG9ubHkgbG93ZXJjYXNlIGxldHRlcnMsIG51bWJlcnMsIGFuZCBkYXNoZXNcIixcbiAgICAgIClcbiAgICB9XG4gICAgaWYgKHByb3BzLmRhdGFiYXNlTmFtZS5sZW5ndGggPiA2NCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZGF0YWJhc2VOYW1lIG11c3QgYmUgYXQgbW9zdCA2NCBjaGFyYWN0ZXJzXCIpXG4gICAgfVxuXG4gICAgY29uc3QgcmVzb3VyY2VQcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgICBSZXNvdXJjZVR5cGU6IFwiRGF0YWJhc2VcIixcbiAgICAgIERhdGFiYXNlTmFtZTogcHJvcHMuZGF0YWJhc2VOYW1lLFxuICAgICAgR3JvdXA6IHByb3BzLmdyb3VwLFxuICAgICAgT3JnYW5pemF0aW9uU2x1ZzogcHJvcHMub3JnYW5pemF0aW9uU2x1ZyxcbiAgICB9XG5cbiAgICBpZiAocHJvcHMuc2l6ZUxpbWl0KSB7XG4gICAgICByZXNvdXJjZVByb3BzLlNpemVMaW1pdCA9IHByb3BzLnNpemVMaW1pdFxuICAgIH1cbiAgICBpZiAocHJvcHMuc2VlZCkge1xuICAgICAgcmVzb3VyY2VQcm9wcy5TZWVkID0gcHJvcHMuc2VlZFxuICAgIH1cbiAgICBpZiAocHJvcHMuZW5jcnlwdGlvbikge1xuICAgICAgcmVzb3VyY2VQcm9wcy5FbmNyeXB0aW9uID0gcHJvcHMuZW5jcnlwdGlvblxuICAgIH1cblxuICAgIGNvbnN0IGNyID0gbmV3IEN1c3RvbVJlc291cmNlKHRoaXMsIFwiVHVyc29EYlwiLCB7XG4gICAgICBzZXJ2aWNlVG9rZW46IHByb3BzLnByb3ZpZGVyLnNlcnZpY2VUb2tlbixcbiAgICAgIHJlc291cmNlVHlwZTogXCJDdXN0b206OlR1cnNvRGF0YWJhc2VcIixcbiAgICAgIHByb3BlcnRpZXM6IHJlc291cmNlUHJvcHMsXG4gICAgfSlcblxuICAgIHRoaXMuZGJJZCA9IGNyLmdldEF0dFN0cmluZyhcIkRiSWRcIilcbiAgICB0aGlzLmhvc3RuYW1lID0gY3IuZ2V0QXR0U3RyaW5nKFwiSG9zdG5hbWVcIilcbiAgICB0aGlzLmRhdGFiYXNlTmFtZSA9IGNyLmdldEF0dFN0cmluZyhcIk5hbWVcIilcbiAgfVxufVxuIl19
50
+ TursoDatabase[_a] = { fqn: "cdk-turso.TursoDatabase", version: "0.4.1" };
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHVyc28tZGF0YWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHVyc28tZGF0YWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2Q0FBMkQ7QUFDM0QsMkNBQXNDO0FBeUN0QyxNQUFhLGFBQWMsU0FBUSxzQkFBUztJQVMxQyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXlCO1FBQ2pFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUE7UUFFaEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7WUFDN0MsTUFBTSxJQUFJLEtBQUssQ0FDYix1RUFBdUUsQ0FDeEUsQ0FBQTtRQUNILENBQUM7UUFDRCxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLEVBQUUsRUFBRSxDQUFDO1lBQ25DLE1BQU0sSUFBSSxLQUFLLENBQUMsNENBQTRDLENBQUMsQ0FBQTtRQUMvRCxDQUFDO1FBRUQsTUFBTSxhQUFhLEdBQTRCO1lBQzdDLFlBQVksRUFBRSxVQUFVO1lBQ3hCLFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWTtZQUNoQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUs7WUFDbEIsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLGdCQUFnQjtTQUN6QyxDQUFBO1FBRUQsSUFBSSxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDcEIsYUFBYSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFBO1FBQzNDLENBQUM7UUFDRCxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNmLGFBQWEsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQTtRQUNqQyxDQUFDO1FBQ0QsSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDckIsYUFBYSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFBO1FBQzdDLENBQUM7UUFDRCxJQUFJLEtBQUssQ0FBQyxLQUFLLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDOUIsYUFBYSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFBO1FBQ25DLENBQUM7UUFFRCxNQUFNLEVBQUUsR0FBRyxJQUFJLDRCQUFjLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRTtZQUM3QyxZQUFZLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxZQUFZO1lBQ3pDLFlBQVksRUFBRSx1QkFBdUI7WUFDckMsVUFBVSxFQUFFLGFBQWE7U0FDMUIsQ0FBQyxDQUFBO1FBRUYsSUFBSSxLQUFLLENBQUMsYUFBYSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3RDLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUE7UUFDNUMsQ0FBQztRQUVELElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUNuQyxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUE7UUFDM0MsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQzdDLENBQUM7O0FBdERILHNDQXVEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEN1c3RvbVJlc291cmNlLCBSZW1vdmFsUG9saWN5IH0gZnJvbSBcImF3cy1jZGstbGliXCJcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCJcbmltcG9ydCB0eXBlIHsgSVR1cnNvUHJvdmlkZXIgfSBmcm9tIFwiLi90dXJzby1wcm92aWRlclwiXG5cbmV4cG9ydCBpbnRlcmZhY2UgVHVyc29EYXRhYmFzZVNlZWQge1xuICByZWFkb25seSB0eXBlOiBzdHJpbmdcbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nXG4gIHJlYWRvbmx5IHRpbWVzdGFtcD86IHN0cmluZ1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFR1cnNvRGF0YWJhc2VFbmNyeXB0aW9uIHtcbiAgcmVhZG9ubHkgZW5jcnlwdGlvbktleTogc3RyaW5nXG4gIHJlYWRvbmx5IGVuY3J5cHRpb25DaXBoZXI6IHN0cmluZ1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFR1cnNvRGF0YWJhc2VQcm9wcyB7XG4gIHJlYWRvbmx5IHByb3ZpZGVyOiBJVHVyc29Qcm92aWRlclxuICByZWFkb25seSBkYXRhYmFzZU5hbWU6IHN0cmluZ1xuICByZWFkb25seSBncm91cDogc3RyaW5nXG4gIHJlYWRvbmx5IG9yZ2FuaXphdGlvblNsdWc6IHN0cmluZ1xuICByZWFkb25seSBzaXplTGltaXQ/OiBzdHJpbmdcbiAgcmVhZG9ubHkgc2VlZD86IFR1cnNvRGF0YWJhc2VTZWVkXG4gIHJlYWRvbmx5IGVuY3J5cHRpb24/OiBUdXJzb0RhdGFiYXNlRW5jcnlwdGlvblxuXG4gIC8qKlxuICAgKiBJZiB0cnVlLCB0aGUgcHJvdmlkZXIgd2lsbCBhZG9wdCBhbiBleGlzdGluZyBUdXJzbyBkYXRhYmFzZSB3aGVuXG4gICAqIGNyZWF0aW9uIHJlcG9ydHMgdGhhdCB0aGUgZGF0YWJhc2UgYWxyZWFkeSBleGlzdHMuXG4gICAqXG4gICAqIFRoaXMgZmxhZyBpcyBvbmx5IHVzZWQgZHVyaW5nIENyZWF0ZSByZXF1ZXN0cy5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGFkb3B0PzogYm9vbGVhblxuXG4gIC8qKlxuICAgKiBSZW1vdmFsIHBvbGljeSBmb3IgdGhlIHVuZGVybHlpbmcgY3VzdG9tIHJlc291cmNlLlxuICAgKiBTZXQgdG8gYFJlbW92YWxQb2xpY3kuUkVUQUlOYCB0byBrZWVwIHRoZSBUdXJzbyBkYXRhYmFzZSBvbiBzdGFja1xuICAgKiBkZWxldGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IHJlbW92YWxQb2xpY3k/OiBSZW1vdmFsUG9saWN5XG59XG5cbmV4cG9ydCBjbGFzcyBUdXJzb0RhdGFiYXNlIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IGRiSWQ6IHN0cmluZ1xuICAvKipcbiAgICogRE5TIGhvc3RuYW1lIGZvciB0aGUgZGF0YWJhc2UgKGUuZy4sIGBteS1kYi1teS1vcmcudHVyc28uaW9gKS5cbiAgICogVXNlIHdpdGggbGliU1FMIG9yIEhUVFAgY29ubmVjdGlvbnMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaG9zdG5hbWU6IHN0cmluZ1xuICBwdWJsaWMgcmVhZG9ubHkgZGF0YWJhc2VOYW1lOiBzdHJpbmdcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogVHVyc29EYXRhYmFzZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKVxuXG4gICAgaWYgKCEvXlthLXowLTktXSskLy50ZXN0KHByb3BzLmRhdGFiYXNlTmFtZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJkYXRhYmFzZU5hbWUgbXVzdCBjb250YWluIG9ubHkgbG93ZXJjYXNlIGxldHRlcnMsIG51bWJlcnMsIGFuZCBkYXNoZXNcIixcbiAgICAgIClcbiAgICB9XG4gICAgaWYgKHByb3BzLmRhdGFiYXNlTmFtZS5sZW5ndGggPiA2NCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZGF0YWJhc2VOYW1lIG11c3QgYmUgYXQgbW9zdCA2NCBjaGFyYWN0ZXJzXCIpXG4gICAgfVxuXG4gICAgY29uc3QgcmVzb3VyY2VQcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgICBSZXNvdXJjZVR5cGU6IFwiRGF0YWJhc2VcIixcbiAgICAgIERhdGFiYXNlTmFtZTogcHJvcHMuZGF0YWJhc2VOYW1lLFxuICAgICAgR3JvdXA6IHByb3BzLmdyb3VwLFxuICAgICAgT3JnYW5pemF0aW9uU2x1ZzogcHJvcHMub3JnYW5pemF0aW9uU2x1ZyxcbiAgICB9XG5cbiAgICBpZiAocHJvcHMuc2l6ZUxpbWl0KSB7XG4gICAgICByZXNvdXJjZVByb3BzLlNpemVMaW1pdCA9IHByb3BzLnNpemVMaW1pdFxuICAgIH1cbiAgICBpZiAocHJvcHMuc2VlZCkge1xuICAgICAgcmVzb3VyY2VQcm9wcy5TZWVkID0gcHJvcHMuc2VlZFxuICAgIH1cbiAgICBpZiAocHJvcHMuZW5jcnlwdGlvbikge1xuICAgICAgcmVzb3VyY2VQcm9wcy5FbmNyeXB0aW9uID0gcHJvcHMuZW5jcnlwdGlvblxuICAgIH1cbiAgICBpZiAocHJvcHMuYWRvcHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVzb3VyY2VQcm9wcy5BZG9wdCA9IHByb3BzLmFkb3B0XG4gICAgfVxuXG4gICAgY29uc3QgY3IgPSBuZXcgQ3VzdG9tUmVzb3VyY2UodGhpcywgXCJUdXJzb0RiXCIsIHtcbiAgICAgIHNlcnZpY2VUb2tlbjogcHJvcHMucHJvdmlkZXIuc2VydmljZVRva2VuLFxuICAgICAgcmVzb3VyY2VUeXBlOiBcIkN1c3RvbTo6VHVyc29EYXRhYmFzZVwiLFxuICAgICAgcHJvcGVydGllczogcmVzb3VyY2VQcm9wcyxcbiAgICB9KVxuXG4gICAgaWYgKHByb3BzLnJlbW92YWxQb2xpY3kgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY3IuYXBwbHlSZW1vdmFsUG9saWN5KHByb3BzLnJlbW92YWxQb2xpY3kpXG4gICAgfVxuXG4gICAgdGhpcy5kYklkID0gY3IuZ2V0QXR0U3RyaW5nKFwiRGJJZFwiKVxuICAgIHRoaXMuaG9zdG5hbWUgPSBjci5nZXRBdHRTdHJpbmcoXCJIb3N0bmFtZVwiKVxuICAgIHRoaXMuZGF0YWJhc2VOYW1lID0gY3IuZ2V0QXR0U3RyaW5nKFwiTmFtZVwiKVxuICB9XG59XG4iXX0=
@@ -48,5 +48,5 @@ class TursoProvider extends constructs_1.Construct {
48
48
  }
49
49
  exports.TursoProvider = TursoProvider;
50
50
  _a = JSII_RTTI_SYMBOL_1;
51
- TursoProvider[_a] = { fqn: "cdk-turso.TursoProvider", version: "0.3.4" };
51
+ TursoProvider[_a] = { fqn: "cdk-turso.TursoProvider", version: "0.4.1" };
52
52
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHVyc28tcHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHVyc28tcHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2Q0FBc0M7QUFDdEMsdURBQStFO0FBRy9FLG1FQUF1RDtBQUN2RCwyQ0FBc0M7QUFDdEMsNkJBQTRCO0FBWTVCLE1BQU0scUJBQXNCLFNBQVEsc0JBQVM7SUFHM0MsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxZQUFvQjtRQUM1RCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFBO1FBRWhCLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFBO0lBQ2xDLENBQUM7Q0FDRjtBQWdCRDs7OztHQUlHO0FBQ0gsTUFBYSxhQUFjLFNBQVEsc0JBQVM7SUFDMUM7O09BRUc7SUFDSSxNQUFNLENBQUMsZ0JBQWdCLENBQzVCLEtBQWdCLEVBQ2hCLEVBQVUsRUFDVixZQUFvQjtRQUVwQixPQUFPLElBQUkscUJBQXFCLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxZQUFZLENBQUMsQ0FBQTtJQUMzRCxDQUFDO0lBY0QsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUF5QjtRQUNqRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFBO1FBRWhCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxxQkFBUSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUU7WUFDM0MsT0FBTyxFQUFFLElBQUksb0JBQU8sQ0FBQyxZQUFZLEVBQUUsMEJBQWEsQ0FBQyxNQUFNLENBQUM7WUFDeEQsT0FBTyxFQUFFLGVBQWU7WUFDeEIsSUFBSSxFQUFFLGlCQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ3JELE9BQU8sRUFBRSxzQkFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDNUIsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRO1lBQ3hCLFdBQVcsRUFBRTtnQkFDWCw4QkFBOEIsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLGFBQWE7YUFDN0Q7U0FDRixDQUFDLENBQUE7UUFFRixLQUFLLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7UUFFdEMsTUFBTSxRQUFRLEdBQUcsSUFBSSwyQkFBUSxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUU7WUFDOUMsY0FBYyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQzVCLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUTtTQUN6QixDQUFDLENBQUE7UUFFRixJQUFJLENBQUMsWUFBWSxHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUE7SUFDM0MsQ0FBQzs7QUE5Q0gsc0NBK0NDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRHVyYXRpb24gfSBmcm9tIFwiYXdzLWNkay1saWJcIlxuaW1wb3J0IHsgQ29kZSwgRnVuY3Rpb24sIFJ1bnRpbWUsIFJ1bnRpbWVGYW1pbHkgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiXG5pbXBvcnQgdHlwZSB7IElMb2dHcm91cCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbG9nc1wiXG5pbXBvcnQgdHlwZSB7IElQYXJhbWV0ZXIgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXNzbVwiXG5pbXBvcnQgeyBQcm92aWRlciB9IGZyb20gXCJhd3MtY2RrLWxpYi9jdXN0b20tcmVzb3VyY2VzXCJcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCJcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIlxuXG4vKipcbiAqIFNoYXJlZCBUdXJzbyBjdXN0b20tcmVzb3VyY2UgcHJvdmlkZXIgY29udHJhY3QuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVR1cnNvUHJvdmlkZXIge1xuICAvKipcbiAgICogVGhlIENESyBjdXN0b20tcmVzb3VyY2UgcHJvdmlkZXIgc2VydmljZSB0b2tlbi5cbiAgICovXG4gIHJlYWRvbmx5IHNlcnZpY2VUb2tlbjogc3RyaW5nXG59XG5cbmNsYXNzIEltcG9ydGVkVHVyc29Qcm92aWRlciBleHRlbmRzIENvbnN0cnVjdCBpbXBsZW1lbnRzIElUdXJzb1Byb3ZpZGVyIHtcbiAgcHVibGljIHJlYWRvbmx5IHNlcnZpY2VUb2tlbjogc3RyaW5nXG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgc2VydmljZVRva2VuOiBzdHJpbmcpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpXG5cbiAgICB0aGlzLnNlcnZpY2VUb2tlbiA9IHNlcnZpY2VUb2tlblxuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHVyc29Qcm92aWRlclByb3BzIHtcbiAgLyoqXG4gICAqIFNTTSBwYXJhbWV0ZXIgdGhhdCBob2xkcyB0aGUgVHVyc28gcGxhdGZvcm0gQVBJIHRva2VuXG4gICAqIChzdG9yZWQgYXMgU2VjdXJlU3RyaW5nKS5cbiAgICovXG4gIHJlYWRvbmx5IGFwaVRva2VuOiBJUGFyYW1ldGVyXG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGxvZyBncm91cCBmb3IgdGhlIExhbWJkYSBmdW5jdGlvbi5cbiAgICogSWYgbm90IHByb3ZpZGVkLCBhIGxvZyBncm91cCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgY3JlYXRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGxvZ0dyb3VwPzogSUxvZ0dyb3VwIHwgdW5kZWZpbmVkXG59XG5cbi8qKlxuICogU2hhcmVkIExhbWJkYSArIENsb3VkRm9ybWF0aW9uIGN1c3RvbS1yZXNvdXJjZSBwcm92aWRlciBmb3IgYWxsXG4gKiBUdXJzbyByZXNvdXJjZXMuICBDcmVhdGUgb25lIHBlciBzdGFjayBhbmQgcGFzcyBpdCB0byBldmVyeVxuICogYFR1cnNvRGF0YWJhc2VgLCBgVHVyc29BdXRoVG9rZW5gLCBldGMuXG4gKi9cbmV4cG9ydCBjbGFzcyBUdXJzb1Byb3ZpZGVyIGV4dGVuZHMgQ29uc3RydWN0IGltcGxlbWVudHMgSVR1cnNvUHJvdmlkZXIge1xuICAvKipcbiAgICogSW1wb3J0cyBhbiBleGlzdGluZyBUdXJzbyBwcm92aWRlciBieSBzZXJ2aWNlIHRva2VuLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tU2VydmljZVRva2VuKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBzZXJ2aWNlVG9rZW46IHN0cmluZyxcbiAgKTogSVR1cnNvUHJvdmlkZXIge1xuICAgIHJldHVybiBuZXcgSW1wb3J0ZWRUdXJzb1Byb3ZpZGVyKHNjb3BlLCBpZCwgc2VydmljZVRva2VuKVxuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBMYW1iZGEgZnVuY3Rpb24gYmFja2luZyBhbGwgVHVyc28gY3VzdG9tIHJlc291cmNlcy5cbiAgICogVXNlIHRoaXMgdG8gYXR0YWNoIGFkZGl0aW9uYWwgSUFNIHBlcm1pc3Npb25zIHdoZW4gYSByZXNvdXJjZVxuICAgKiB0eXBlIG5lZWRzIHRoZW0gKGUuZy4gYHNzbTpQdXRQYXJhbWV0ZXJgIGZvciBhdXRoLXRva2VuIHN0b3JhZ2UpLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGhhbmRsZXI6IEZ1bmN0aW9uXG5cbiAgLyoqXG4gICAqIFRoZSBDREsgY3VzdG9tLXJlc291cmNlIHByb3ZpZGVyIHNlcnZpY2UgdG9rZW4uXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc2VydmljZVRva2VuOiBzdHJpbmdcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogVHVyc29Qcm92aWRlclByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKVxuXG4gICAgdGhpcy5oYW5kbGVyID0gbmV3IEZ1bmN0aW9uKHRoaXMsIFwiSGFuZGxlclwiLCB7XG4gICAgICBydW50aW1lOiBuZXcgUnVudGltZShcIm5vZGVqczI0LnhcIiwgUnVudGltZUZhbWlseS5OT0RFSlMpLFxuICAgICAgaGFuZGxlcjogXCJpbmRleC5oYW5kbGVyXCIsXG4gICAgICBjb2RlOiBDb2RlLmZyb21Bc3NldChwYXRoLmpvaW4oX19kaXJuYW1lLCBcImhhbmRsZXJcIikpLFxuICAgICAgdGltZW91dDogRHVyYXRpb24ubWludXRlcygzKSxcbiAgICAgIGxvZ0dyb3VwOiBwcm9wcy5sb2dHcm91cCxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIFRVUlNPX0FQSV9UT0tFTl9QQVJBTUVURVJfTkFNRTogcHJvcHMuYXBpVG9rZW4ucGFyYW1ldGVyTmFtZSxcbiAgICAgIH0sXG4gICAgfSlcblxuICAgIHByb3BzLmFwaVRva2VuLmdyYW50UmVhZCh0aGlzLmhhbmRsZXIpXG5cbiAgICBjb25zdCBwcm92aWRlciA9IG5ldyBQcm92aWRlcih0aGlzLCBcIlByb3ZpZGVyXCIsIHtcbiAgICAgIG9uRXZlbnRIYW5kbGVyOiB0aGlzLmhhbmRsZXIsXG4gICAgICBsb2dHcm91cDogcHJvcHMubG9nR3JvdXAsXG4gICAgfSlcblxuICAgIHRoaXMuc2VydmljZVRva2VuID0gcHJvdmlkZXIuc2VydmljZVRva2VuXG4gIH1cbn1cbiJdfQ==
package/package.json CHANGED
@@ -68,7 +68,7 @@
68
68
  "publishConfig": {
69
69
  "access": "public"
70
70
  },
71
- "version": "0.3.4",
71
+ "version": "0.4.1",
72
72
  "jest": {
73
73
  "coverageProvider": "v8",
74
74
  "testMatch": [
package/CLAUDE.md DELETED
@@ -1 +0,0 @@
1
- @AGENTS.md