From 281c6337547bf245910618010c9ed97bafa9c6d4 Mon Sep 17 00:00:00 2001
From: Pedro Rodrigues <44656907+Rodriguespn@users.noreply.github.com>
Date: Tue, 1 Oct 2024 22:22:40 +0100
Subject: [PATCH] Fix/branch clean up for pr drizzle kit (#29)
* branch clean up for pr
* wip [last visited drizzle-kit/src/cli/validations/common.ts
* wip [last visited drizzle-kit/src/schemaValidator.ts
* drizzle kit cleaning
* lint fix
* remove unecessary readme.md
---
changelogs/drizzle-kit/0.25.0.md | 144 -
changelogs/drizzle-orm/0.34.0.md | 255 -
drizzle-kit/build.ts | 3 -
drizzle-kit/package.json | 5 +-
drizzle-kit/pnpm-lock.yaml | 7603 +++++++++++++++++
drizzle-kit/schema.ts | 0
drizzle-kit/src/cli/commands/introspect.ts | 113 -
.../src/cli/commands/libSqlPushUtils.ts | 346 -
drizzle-kit/src/cli/commands/migrate.ts | 93 +-
drizzle-kit/src/cli/commands/push.ts | 113 +-
.../src/cli/commands/sqlitePushUtils.ts | 340 +-
drizzle-kit/src/cli/commands/utils.ts | 88 -
drizzle-kit/src/cli/connections.ts | 120 +-
drizzle-kit/src/cli/schema.ts | 91 +-
drizzle-kit/src/cli/utils.ts | 2 +-
drizzle-kit/src/cli/validations/common.ts | 3 +-
drizzle-kit/src/cli/validations/libsql.ts | 27 -
drizzle-kit/src/cli/validations/outputs.ts | 2 +-
drizzle-kit/src/cli/validations/sqlite.ts | 5 +
drizzle-kit/src/index.ts | 7 +-
drizzle-kit/src/jsonStatements.ts | 198 +-
drizzle-kit/src/schemaValidator.ts | 2 +-
.../src/serializer/sqliteSerializer.ts | 1 +
drizzle-kit/src/serializer/studio.ts | 29 +-
drizzle-kit/src/snapshotsDiffer.ts | 429 +-
drizzle-kit/src/sqlgenerator.ts | 509 +-
drizzle-kit/src/statementCombiner.ts | 450 -
drizzle-kit/src/utils.ts | 21 +-
drizzle-kit/tests/cli-generate.test.ts | 1 -
drizzle-kit/tests/cli-migrate.test.ts | 3 +-
drizzle-kit/tests/cli-push.test.ts | 3 +-
drizzle-kit/tests/cli/turso.config.ts | 3 +-
drizzle-kit/tests/libsql-statements.test.ts | 982 ---
drizzle-kit/tests/migrate/libsq-schema.ts | 6 -
.../tests/migrate/libsql-migrate.test.ts | 58 -
.../migrations/0000_little_blizzard.sql | 4 -
.../migrations/0001_nebulous_storm.sql | 10 -
.../migrations/meta/0000_snapshot.json | 40 -
.../migrations/meta/0001_snapshot.json | 40 -
.../migrate/migrations/meta/_journal.json | 20 -
drizzle-kit/tests/push/libsql.test.ts | 1049 ---
drizzle-kit/tests/push/sqlite.test.ts | 1556 +---
drizzle-kit/tests/schemaDiffer.ts | 259 +-
drizzle-kit/tests/sqlite-columns.test.ts | 423 +-
drizzle-kit/tests/sqlite-tables.test.ts | 14 +-
.../libsql-statements-combiner.test.ts | 1749 ----
.../sqlite-statements-combiner.test.ts | 1170 ---
pnpm-lock.yaml | 276 +-
48 files changed, 8725 insertions(+), 9940 deletions(-)
delete mode 100644 changelogs/drizzle-kit/0.25.0.md
delete mode 100644 changelogs/drizzle-orm/0.34.0.md
create mode 100644 drizzle-kit/pnpm-lock.yaml
create mode 100644 drizzle-kit/schema.ts
delete mode 100644 drizzle-kit/src/cli/commands/libSqlPushUtils.ts
delete mode 100644 drizzle-kit/src/cli/validations/libsql.ts
delete mode 100644 drizzle-kit/src/statementCombiner.ts
delete mode 100644 drizzle-kit/tests/libsql-statements.test.ts
delete mode 100644 drizzle-kit/tests/migrate/libsq-schema.ts
delete mode 100644 drizzle-kit/tests/migrate/libsql-migrate.test.ts
delete mode 100644 drizzle-kit/tests/migrate/migrations/0000_little_blizzard.sql
delete mode 100644 drizzle-kit/tests/migrate/migrations/0001_nebulous_storm.sql
delete mode 100644 drizzle-kit/tests/migrate/migrations/meta/0000_snapshot.json
delete mode 100644 drizzle-kit/tests/migrate/migrations/meta/0001_snapshot.json
delete mode 100644 drizzle-kit/tests/migrate/migrations/meta/_journal.json
delete mode 100644 drizzle-kit/tests/push/libsql.test.ts
delete mode 100644 drizzle-kit/tests/statements-combiner/libsql-statements-combiner.test.ts
delete mode 100644 drizzle-kit/tests/statements-combiner/sqlite-statements-combiner.test.ts
diff --git a/changelogs/drizzle-kit/0.25.0.md b/changelogs/drizzle-kit/0.25.0.md
deleted file mode 100644
index fc4b36c83..000000000
--- a/changelogs/drizzle-kit/0.25.0.md
+++ /dev/null
@@ -1,144 +0,0 @@
-## Breaking changes and migrate guide for Turso users
-
-If you are using Turso and libsql, you will need to upgrade your `drizzle.config` and `@libsql/client` package.
-
-1. This version of drizzle-orm will only work with `@libsql/client@0.10.0` or higher if you are using the `migrate` function. For other use cases, you can continue using previous versions(But the suggestion is to upgrade)
-To install the latest version, use the command:
-
-```bash
-npm i @libsql/client@latest
-```
-
-2. Previously, we had a common `drizzle.config` for SQLite and Turso users, which allowed a shared strategy for both dialects. Starting with this release, we are introducing the turso dialect in drizzle-kit. We will evolve and improve Turso as a separate dialect with its own migration strategies.
-
-**Before**
-
-```ts
-import { defineConfig } from "drizzle-kit";
-
-export default defineConfig({
- dialect: "sqlite",
- schema: "./schema.ts",
- out: "./drizzle",
- dbCredentials: {
- url: "database.db",
- },
- breakpoints: true,
- verbose: true,
- strict: true,
-});
-```
-
-**After**
-
-```ts
-import { defineConfig } from "drizzle-kit";
-
-export default defineConfig({
- dialect: "turso",
- schema: "./schema.ts",
- out: "./drizzle",
- dbCredentials: {
- url: "database.db",
- },
- breakpoints: true,
- verbose: true,
- strict: true,
-});
-```
-
-If you are using only SQLite, you can use `dialect: "sqlite"`
-
-## LibSQL/Turso and Sqlite migration updates
-
-### SQLite "generate" and "push" statements updates
-
-Starting from this release, we will no longer generate comments like this:
-
-```sql
- '/*\n SQLite does not support "Changing existing column type" out of the box, we do not generate automatic migration for that, so it has to be done manually'
- + '\n Please refer to: https://www.techonthenet.com/sqlite/tables/alter_table.php'
- + '\n https://www.sqlite.org/lang_altertable.html'
- + '\n https://stackoverflow.com/questions/2083543/modify-a-columns-type-in-sqlite3'
- + "\n\n Due to that we don't generate migration automatically and it has to be done manually"
- + '\n*/'
-```
-
-We will generate a set of statements, and you can decide if it's appropriate to create data-moving statements instead. Here is an example of the SQL file you'll receive now:
-
-```sql
-PRAGMA foreign_keys=OFF;
---> statement-breakpoint
-CREATE TABLE `__new_worker` (
- `id` integer PRIMARY KEY NOT NULL,
- `name` text NOT NULL,
- `salary` text NOT NULL,
- `job_id` integer,
- FOREIGN KEY (`job_id`) REFERENCES `job`(`id`) ON UPDATE no action ON DELETE no action
-);
---> statement-breakpoint
-INSERT INTO `__new_worker`("id", "name", "salary", "job_id") SELECT "id", "name", "salary", "job_id" FROM `worker`;
---> statement-breakpoint
-DROP TABLE `worker`;
---> statement-breakpoint
-ALTER TABLE `__new_worker` RENAME TO `worker`;
---> statement-breakpoint
-PRAGMA foreign_keys=ON;
-```
-
-### LibSQL/Turso "generate" and "push" statements updates
-
-Since LibSQL supports more ALTER statements than SQLite, we can generate more statements without recreating your schema and moving all the data, which can be potentially dangerous for production environments.
-
-LibSQL and Turso will now have a separate dialect in the Drizzle config file, meaning that we will evolve Turso and LibSQL independently from SQLite and will aim to support as many features as Turso/LibSQL offer.
-
-With the updated LibSQL migration strategy, you will have the ability to:
-
-- **Change Data Type**: Set a new data type for existing columns.
-- **Set and Drop Default Values**: Add or remove default values for existing columns.
-- **Set and Drop NOT NULL**: Add or remove the NOT NULL constraint on existing columns.
-- **Add References to Existing Columns**: Add foreign key references to existing columns
-
-You can find more information in the [LibSQL documentation](https://github.com/tursodatabase/libsql/blob/main/libsql-sqlite3/doc/libsql_extensions.md#altering-columns)
-
-### LIMITATIONS
-
-- Dropping or altering an index will cause table recreation.
-
-This is because LibSQL/Turso does not support dropping this type of index.
-
-```sql
-CREATE TABLE `users` (
- `id` integer NOT NULL,
- `name` integer,
- `age` integer PRIMARY KEY NOT NULL
- FOREIGN KEY (`name`) REFERENCES `users1`("id") ON UPDATE no action ON DELETE no action
-);
-```
-
-- If the table has indexes, altering columns will cause table recreation.
-- Drizzle-Kit will drop the indexes, modify the columns, and then recreate the indexes.
-- Adding or dropping composite foreign keys is not supported and will cause table recreation
-
-### NOTES
-
-- You can create a reference on any column type, but if you want to insert values, the referenced column must have a unique index or primary key.
-
-```sql
-CREATE TABLE parent(a PRIMARY KEY, b UNIQUE, c, d, e, f);
-CREATE UNIQUE INDEX i1 ON parent(c, d);
-CREATE INDEX i2 ON parent(e);
-CREATE UNIQUE INDEX i3 ON parent(f COLLATE nocase);
-
-CREATE TABLE child1(f, g REFERENCES parent(a)); -- Ok
-CREATE TABLE child2(h, i REFERENCES parent(b)); -- Ok
-CREATE TABLE child3(j, k, FOREIGN KEY(j, k) REFERENCES parent(c, d)); -- Ok
-CREATE TABLE child4(l, m REFERENCES parent(e)); -- Error!
-CREATE TABLE child5(n, o REFERENCES parent(f)); -- Error!
-CREATE TABLE child6(p, q, FOREIGN KEY(p, q) REFERENCES parent(b, c)); -- Error!
-CREATE TABLE child7(r REFERENCES parent(c)); -- Error!
-```
-
-> **NOTE**: The foreign key for the table child5 is an error because, although the parent key column has a unique index, the index uses a different collating sequence.
-
-See more: https://www.sqlite.org/foreignkeys.html
\ No newline at end of file
diff --git a/changelogs/drizzle-orm/0.34.0.md b/changelogs/drizzle-orm/0.34.0.md
deleted file mode 100644
index 490422628..000000000
--- a/changelogs/drizzle-orm/0.34.0.md
+++ /dev/null
@@ -1,255 +0,0 @@
-## Breaking changes and migrate guide for Turso users
-
-If you are using Turso and libsql, you will need to upgrade your `drizzle.config` and `@libsql/client` package.
-
-1. This version of drizzle-orm will only work with `@libsql/client@0.10.0` or higher if you are using the `migrate` function. For other use cases, you can continue using previous versions(But the suggestion is to upgrade)
-To install the latest version, use the command:
-
-```bash
-npm i @libsql/client@latest
-```
-
-2. Previously, we had a common `drizzle.config` for SQLite and Turso users, which allowed a shared strategy for both dialects. Starting with this release, we are introducing the turso dialect in drizzle-kit. We will evolve and improve Turso as a separate dialect with its own migration strategies.
-
-**Before**
-
-```ts
-import { defineConfig } from "drizzle-kit";
-
-export default defineConfig({
- dialect: "sqlite",
- schema: "./schema.ts",
- out: "./drizzle",
- dbCredentials: {
- url: "database.db",
- },
- breakpoints: true,
- verbose: true,
- strict: true,
-});
-```
-
-**After**
-
-```ts
-import { defineConfig } from "drizzle-kit";
-
-export default defineConfig({
- dialect: "turso",
- schema: "./schema.ts",
- out: "./drizzle",
- dbCredentials: {
- url: "database.db",
- },
- breakpoints: true,
- verbose: true,
- strict: true,
-});
-```
-
-If you are using only SQLite, you can use `dialect: "sqlite"`
-
-## LibSQL/Turso and Sqlite migration updates
-
-### SQLite "generate" and "push" statements updates
-
-Starting from this release, we will no longer generate comments like this:
-
-```sql
- '/*\n SQLite does not support "Changing existing column type" out of the box, we do not generate automatic migration for that, so it has to be done manually'
- + '\n Please refer to: https://www.techonthenet.com/sqlite/tables/alter_table.php'
- + '\n https://www.sqlite.org/lang_altertable.html'
- + '\n https://stackoverflow.com/questions/2083543/modify-a-columns-type-in-sqlite3'
- + "\n\n Due to that we don't generate migration automatically and it has to be done manually"
- + '\n*/'
-```
-
-We will generate a set of statements, and you can decide if it's appropriate to create data-moving statements instead. Here is an example of the SQL file you'll receive now:
-
-```sql
-PRAGMA foreign_keys=OFF;
---> statement-breakpoint
-CREATE TABLE `__new_worker` (
- `id` integer PRIMARY KEY NOT NULL,
- `name` text NOT NULL,
- `salary` text NOT NULL,
- `job_id` integer,
- FOREIGN KEY (`job_id`) REFERENCES `job`(`id`) ON UPDATE no action ON DELETE no action
-);
---> statement-breakpoint
-INSERT INTO `__new_worker`("id", "name", "salary", "job_id") SELECT "id", "name", "salary", "job_id" FROM `worker`;
---> statement-breakpoint
-DROP TABLE `worker`;
---> statement-breakpoint
-ALTER TABLE `__new_worker` RENAME TO `worker`;
---> statement-breakpoint
-PRAGMA foreign_keys=ON;
-```
-
-### LibSQL/Turso "generate" and "push" statements updates
-
-Since LibSQL supports more ALTER statements than SQLite, we can generate more statements without recreating your schema and moving all the data, which can be potentially dangerous for production environments.
-
-LibSQL and Turso will now have a separate dialect in the Drizzle config file, meaning that we will evolve Turso and LibSQL independently from SQLite and will aim to support as many features as Turso/LibSQL offer.
-
-With the updated LibSQL migration strategy, you will have the ability to:
-
-- **Change Data Type**: Set a new data type for existing columns.
-- **Set and Drop Default Values**: Add or remove default values for existing columns.
-- **Set and Drop NOT NULL**: Add or remove the NOT NULL constraint on existing columns.
-- **Add References to Existing Columns**: Add foreign key references to existing columns
-
-You can find more information in the [LibSQL documentation](https://github.com/tursodatabase/libsql/blob/main/libsql-sqlite3/doc/libsql_extensions.md#altering-columns)
-
-### LIMITATIONS
-
-- Dropping or altering an index will cause table recreation.
-
-This is because LibSQL/Turso does not support dropping this type of index.
-
-```sql
-CREATE TABLE `users` (
- `id` integer NOT NULL,
- `name` integer,
- `age` integer PRIMARY KEY NOT NULL
- FOREIGN KEY (`name`) REFERENCES `users1`("id") ON UPDATE no action ON DELETE no action
-);
-```
-
-- If the table has indexes, altering columns will cause table recreation.
-- Drizzle-Kit will drop the indexes, modify the columns, and then recreate the indexes.
-- Adding or dropping composite foreign keys is not supported and will cause table recreation
-
-### NOTES
-
-- You can create a reference on any column type, but if you want to insert values, the referenced column must have a unique index or primary key.
-
-```sql
-CREATE TABLE parent(a PRIMARY KEY, b UNIQUE, c, d, e, f);
-CREATE UNIQUE INDEX i1 ON parent(c, d);
-CREATE INDEX i2 ON parent(e);
-CREATE UNIQUE INDEX i3 ON parent(f COLLATE nocase);
-
-CREATE TABLE child1(f, g REFERENCES parent(a)); -- Ok
-CREATE TABLE child2(h, i REFERENCES parent(b)); -- Ok
-CREATE TABLE child3(j, k, FOREIGN KEY(j, k) REFERENCES parent(c, d)); -- Ok
-CREATE TABLE child4(l, m REFERENCES parent(e)); -- Error!
-CREATE TABLE child5(n, o REFERENCES parent(f)); -- Error!
-CREATE TABLE child6(p, q, FOREIGN KEY(p, q) REFERENCES parent(b, c)); -- Error!
-CREATE TABLE child7(r REFERENCES parent(c)); -- Error!
-```
-
-> **NOTE**: The foreign key for the table child5 is an error because, although the parent key column has a unique index, the index uses a different collating sequence.
-
-See more: https://www.sqlite.org/foreignkeys.html
-
-## A new and easy way to start using drizzle
-
-Current and the only way to do, is to define client yourself and pass it to drizzle
-
-```ts
-const client = new Pool({ url: '' });
-drizzle(client, { logger: true });
-```
-
-But we want to introduce you to a new API, which is a simplified method in addition to the existing one.
-
-Most clients will have a few options to connect, starting with the easiest and most common one, and allowing you to control your client connection as needed.
-
-Let's use `node-postgres` as an example, but the same pattern can be applied to all other clients
-
-```ts
-// Finally, one import for all available clients and dialects!
-import { drizzle } from 'drizzle-orm'
-
-// Choose a client and use a connection URL — nothing else is needed!
-const db1 = await drizzle("node-postgres", process.env.POSTGRES_URL);
-
-// If you need to pass a logger, schema, or other configurations, you can use an object and specify the client-specific URL in the connection
-const db2 = await drizzle("node-postgres", {
- connection: process.env.POSTGRES_URL,
- logger: true
-});
-
-// And finally, if you need to use full client/driver-specific types in connections, you can use a URL or host/port/etc. as an object inferred from the underlying client connection types
-const db3 = await drizzle("node-postgres", {
- connection: {
- connectionString: process.env.POSTGRES_URL,
- },
-});
-
-const db4 = await drizzle("node-postgres", {
- connection: {
- user: process.env.DB_USER,
- password: process.env.DB_PASSWORD,
- host: process.env.DB_HOST,
- port: process.env.DB_PORT,
- database: process.env.DB_NAME,
- ssl: true,
- },
-});
-```
-
-A few clients will have a slightly different API due to their specific behavior. Let's take a look at them:
-
-For `aws-data-api-pg`, Drizzle will require `resourceArn`, `database`, and `secretArn`, along with any other AWS Data API client types for the connection, such as credentials, region, etc.
-
-```ts
-drizzle("aws-data-api-pg", {
- connection: {
- resourceArn: "",
- database: "",
- secretArn: "",
- },
-});
-```
-
-For `d1`, the Cloudflare Worker types as described in the [documentation](https://developers.cloudflare.com/d1/get-started/) here will be required.
-
-```ts
-drizzle("d1", {
- connection: env.DB // Cloudflare Worker Types
-})
-```
-
-For `vercel-postgres`, nothing is needed since Vercel automatically retrieves the `POSTGRES_URL` from the `.env` file. You can check this [documentation](https://vercel.com/docs/storage/vercel-postgres/quickstart) for more info
-
-```ts
-drizzle("vercel-postgres")
-```
-
-> Note that the first example with the client is still available and not deprecated. You can use it if you don't want to await the drizzle object. The new way of defining drizzle is designed to make it easier to import from one place and get autocomplete for all the available clients
-
-## New "count" API
-
-Befor this release to count entities in a table, you would need to do this:
-
-```ts
-const res = await db.select({ count: sql`count(*)` }).from(users);
-const count = res[0].count;
-```
-
-The new API will look like this:
-
-```ts
-// how many users are in the database
-const count: number = await db.$count(users);
-
-// how many users with the name "Dan" are in the database
-const count: number = await db.$count(users, eq(name, "Dan"));
-```
-
-This can also work as a subquery and within relational queries
-
-```ts
-const users = await db.select({
- ...users,
- postsCount: db.$count(posts, eq(posts.authorId, users.id))
-});
-
-const users = await db.query.users.findMany({
- extras: {
- postsCount: db.$count(posts, eq(posts.authorId, users.id))
- }
-})
-```
diff --git a/drizzle-kit/build.ts b/drizzle-kit/build.ts
index ec7fc76c0..701e9c84c 100644
--- a/drizzle-kit/build.ts
+++ b/drizzle-kit/build.ts
@@ -1,4 +1,3 @@
-///
import * as esbuild from 'esbuild';
import { readFileSync, writeFileSync } from 'node:fs';
import * as tsup from 'tsup';
@@ -17,7 +16,6 @@ const driversPackages = [
// sqlite drivers
'@libsql/client',
'better-sqlite3',
- 'bun:sqlite',
];
esbuild.buildSync({
@@ -84,7 +82,6 @@ const main = async () => {
await tsup.build({
entryPoints: ['./src/index.ts', './src/api.ts'],
outDir: './dist',
- external: ['bun:sqlite'],
splitting: false,
dts: true,
format: ['cjs', 'esm'],
diff --git a/drizzle-kit/package.json b/drizzle-kit/package.json
index 66f19e6be..9d9e1d227 100644
--- a/drizzle-kit/package.json
+++ b/drizzle-kit/package.json
@@ -1,6 +1,6 @@
{
"name": "drizzle-kit",
- "version": "0.25.0",
+ "version": "0.24.2",
"homepage": "https://orm.drizzle.team",
"keywords": [
"drizzle",
@@ -54,7 +54,7 @@
"@electric-sql/pglite": "^0.1.5",
"@hono/node-server": "^1.9.0",
"@hono/zod-validator": "^0.2.1",
- "@libsql/client": "^0.10.0",
+ "@libsql/client": "^0.4.2",
"@neondatabase/serverless": "^0.9.1",
"@originjs/vite-plugin-commonjs": "^1.0.3",
"@planetscale/database": "^1.16.0",
@@ -74,7 +74,6 @@
"@vercel/postgres": "^0.8.0",
"ava": "^5.1.0",
"better-sqlite3": "^9.4.3",
- "bun-types": "^0.6.6",
"camelcase": "^7.0.1",
"chalk": "^5.2.0",
"commander": "^12.1.0",
diff --git a/drizzle-kit/pnpm-lock.yaml b/drizzle-kit/pnpm-lock.yaml
new file mode 100644
index 000000000..8f4d58f55
--- /dev/null
+++ b/drizzle-kit/pnpm-lock.yaml
@@ -0,0 +1,7603 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+patchedDependencies:
+ difflib@0.2.4:
+ hash: jq4t3ysdpnbunjeje4v7nrqn2q
+ path: patches/difflib@0.2.4.patch
+
+importers:
+
+ .:
+ dependencies:
+ '@esbuild-kit/esm-loader':
+ specifier: ^2.5.5
+ version: 2.6.5
+ esbuild:
+ specifier: ^0.19.7
+ version: 0.19.12
+ esbuild-register:
+ specifier: ^3.5.0
+ version: 3.5.0(esbuild@0.19.12)
+ devDependencies:
+ '@arethetypeswrong/cli':
+ specifier: ^0.15.3
+ version: 0.15.3
+ '@aws-sdk/client-rds-data':
+ specifier: ^3.556.0
+ version: 3.577.0
+ '@cloudflare/workers-types':
+ specifier: ^4.20230518.0
+ version: 4.20240512.0
+ '@electric-sql/pglite':
+ specifier: ^0.1.5
+ version: 0.1.5
+ '@hono/node-server':
+ specifier: ^1.9.0
+ version: 1.11.1
+ '@hono/zod-validator':
+ specifier: ^0.2.1
+ version: 0.2.1(hono@4.3.9)(zod@3.23.8)
+ '@libsql/client':
+ specifier: ^0.4.2
+ version: 0.4.3(bufferutil@4.0.8)(utf-8-validate@6.0.3)
+ '@neondatabase/serverless':
+ specifier: ^0.9.1
+ version: 0.9.3
+ '@originjs/vite-plugin-commonjs':
+ specifier: ^1.0.3
+ version: 1.0.3
+ '@planetscale/database':
+ specifier: ^1.16.0
+ version: 1.18.0
+ '@types/better-sqlite3':
+ specifier: ^7.6.4
+ version: 7.6.10
+ '@types/dockerode':
+ specifier: ^3.3.28
+ version: 3.3.29
+ '@types/glob':
+ specifier: ^8.1.0
+ version: 8.1.0
+ '@types/json-diff':
+ specifier: ^1.0.3
+ version: 1.0.3
+ '@types/minimatch':
+ specifier: ^5.1.2
+ version: 5.1.2
+ '@types/node':
+ specifier: ^18.11.15
+ version: 18.19.33
+ '@types/pg':
+ specifier: ^8.10.7
+ version: 8.11.6
+ '@types/pluralize':
+ specifier: ^0.0.33
+ version: 0.0.33
+ '@types/semver':
+ specifier: ^7.5.5
+ version: 7.5.8
+ '@types/uuid':
+ specifier: ^9.0.8
+ version: 9.0.8
+ '@types/ws':
+ specifier: ^8.5.10
+ version: 8.5.10
+ '@typescript-eslint/eslint-plugin':
+ specifier: ^7.2.0
+ version: 7.10.0(@typescript-eslint/parser@7.10.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)
+ '@typescript-eslint/parser':
+ specifier: ^7.2.0
+ version: 7.10.0(eslint@8.57.0)(typescript@5.4.5)
+ '@vercel/postgres':
+ specifier: ^0.8.0
+ version: 0.8.0
+ ava:
+ specifier: ^5.1.0
+ version: 5.3.1
+ better-sqlite3:
+ specifier: ^9.4.3
+ version: 9.6.0
+ camelcase:
+ specifier: ^7.0.1
+ version: 7.0.1
+ chalk:
+ specifier: ^5.2.0
+ version: 5.3.0
+ commander:
+ specifier: ^12.1.0
+ version: 12.1.0
+ dockerode:
+ specifier: ^3.3.4
+ version: 3.3.5
+ dotenv:
+ specifier: ^16.0.3
+ version: 16.4.5
+ drizzle-kit:
+ specifier: 0.21.2
+ version: 0.21.2
+ drizzle-orm:
+ specifier: 0.32.0-85c8008
+ version: 0.32.0-85c8008(@aws-sdk/client-rds-data@3.577.0)(@cloudflare/workers-types@4.20240512.0)(@electric-sql/pglite@0.1.5)(@libsql/client@0.4.3(bufferutil@4.0.8)(utf-8-validate@6.0.3))(@neondatabase/serverless@0.9.3)(@planetscale/database@1.18.0)(@types/better-sqlite3@7.6.10)(@types/pg@8.11.6)(@vercel/postgres@0.8.0)(better-sqlite3@9.6.0)(mysql2@2.3.3)(pg@8.11.5)(postgres@3.4.4)
+ env-paths:
+ specifier: ^3.0.0
+ version: 3.0.0
+ esbuild-node-externals:
+ specifier: ^1.9.0
+ version: 1.13.1(esbuild@0.19.12)
+ eslint:
+ specifier: ^8.57.0
+ version: 8.57.0
+ eslint-config-prettier:
+ specifier: ^9.1.0
+ version: 9.1.0(eslint@8.57.0)
+ eslint-plugin-prettier:
+ specifier: ^5.1.3
+ version: 5.1.3(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@2.8.8)
+ get-port:
+ specifier: ^6.1.2
+ version: 6.1.2
+ glob:
+ specifier: ^8.1.0
+ version: 8.1.0
+ hanji:
+ specifier: ^0.0.5
+ version: 0.0.5
+ hono:
+ specifier: ^4.1.5
+ version: 4.3.9
+ json-diff:
+ specifier: 1.0.6
+ version: 1.0.6
+ minimatch:
+ specifier: ^7.4.3
+ version: 7.4.6
+ mysql2:
+ specifier: 2.3.3
+ version: 2.3.3
+ node-fetch:
+ specifier: ^3.3.2
+ version: 3.3.2
+ pg:
+ specifier: ^8.11.5
+ version: 8.11.5
+ pluralize:
+ specifier: ^8.0.0
+ version: 8.0.0
+ postgres:
+ specifier: ^3.4.4
+ version: 3.4.4
+ prettier:
+ specifier: ^2.8.1
+ version: 2.8.8
+ semver:
+ specifier: ^7.5.4
+ version: 7.6.2
+ superjson:
+ specifier: ^2.2.1
+ version: 2.2.1
+ tsup:
+ specifier: ^8.0.2
+ version: 8.0.2(postcss@8.4.38)(typescript@5.4.5)
+ tsx:
+ specifier: ^3.12.1
+ version: 3.14.0
+ typescript:
+ specifier: ^5.4.3
+ version: 5.4.5
+ uuid:
+ specifier: ^9.0.1
+ version: 9.0.1
+ vite-tsconfig-paths:
+ specifier: ^4.3.2
+ version: 4.3.2(typescript@5.4.5)(vite@5.2.11(@types/node@18.19.33))
+ vitest:
+ specifier: ^1.4.0
+ version: 1.6.0(@types/node@18.19.33)
+ wrangler:
+ specifier: ^3.22.1
+ version: 3.57.0(@cloudflare/workers-types@4.20240512.0)(bufferutil@4.0.8)(utf-8-validate@6.0.3)
+ ws:
+ specifier: ^8.16.0
+ version: 8.17.0(bufferutil@4.0.8)(utf-8-validate@6.0.3)
+ zod:
+ specifier: ^3.20.2
+ version: 3.23.8
+ zx:
+ specifier: ^7.2.2
+ version: 7.2.3
+
+packages:
+
+ '@andrewbranch/untar.js@1.0.3':
+ resolution: {integrity: sha512-Jh15/qVmrLGhkKJBdXlK1+9tY4lZruYjsgkDFj08ZmDiWVBLJcqkok7Z0/R0In+i1rScBpJlSvrTS2Lm41Pbnw==}
+
+ '@arethetypeswrong/cli@0.15.3':
+ resolution: {integrity: sha512-sIMA9ZJBWDEg1+xt5RkAEflZuf8+PO8SdKj17x6PtETuUho+qlZJg4DgmKc3q+QwQ9zOB5VLK6jVRbFdNLdUIA==}
+ engines: {node: '>=18'}
+ hasBin: true
+
+ '@arethetypeswrong/core@0.15.1':
+ resolution: {integrity: sha512-FYp6GBAgsNz81BkfItRz8RLZO03w5+BaeiPma1uCfmxTnxbtuMrI/dbzGiOk8VghO108uFI0oJo0OkewdSHw7g==}
+ engines: {node: '>=18'}
+
+ '@aws-crypto/ie11-detection@3.0.0':
+ resolution: {integrity: sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==}
+
+ '@aws-crypto/sha256-browser@3.0.0':
+ resolution: {integrity: sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==}
+
+ '@aws-crypto/sha256-js@3.0.0':
+ resolution: {integrity: sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==}
+
+ '@aws-crypto/supports-web-crypto@3.0.0':
+ resolution: {integrity: sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==}
+
+ '@aws-crypto/util@3.0.0':
+ resolution: {integrity: sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==}
+
+ '@aws-sdk/client-rds-data@3.577.0':
+ resolution: {integrity: sha512-24a27II6UkNhe2RB6ZwtQPcM3QB/DuRcKvzMmfvipgWS72Q5FEtuq3CO66IObWUel/pxi3ucE6mSvVCFnm7tBQ==}
+ engines: {node: '>=16.0.0'}
+
+ '@aws-sdk/client-sso-oidc@3.577.0':
+ resolution: {integrity: sha512-njmKSPDWueWWYVFpFcZ2P3fI6/pdQVDa0FgCyYZhOnJLgEHZIcBBg1AsnkVWacBuLopp9XVt2m+7hO6ugY1/1g==}
+ engines: {node: '>=16.0.0'}
+
+ '@aws-sdk/client-sso@3.577.0':
+ resolution: {integrity: sha512-BwujdXrydlk6UEyPmewm5GqG4nkQ6OVyRhS/SyZP/6UKSFv2/sf391Cmz0hN0itUTH1rR4XeLln8XCOtarkrzg==}
+ engines: {node: '>=16.0.0'}
+
+ '@aws-sdk/client-sts@3.577.0':
+ resolution: {integrity: sha512-509Kklimva1XVlhGbpTpeX3kOP6ORpm44twJxDHpa9TURbmoaxj7veWlnLCbDorxDTrbsDghvYZshvcLsojVpg==}
+ engines: {node: '>=16.0.0'}
+
+ '@aws-sdk/core@3.576.0':
+ resolution: {integrity: sha512-KDvDlbeipSTIf+ffKtTg1m419TK7s9mZSWC8bvuZ9qx6/sjQFOXIKOVqyuli6DnfxGbvRcwoRuY99OcCH1N/0w==}
+ engines: {node: '>=16.0.0'}
+
+ '@aws-sdk/credential-provider-env@3.577.0':
+ resolution: {integrity: sha512-Jxu255j0gToMGEiqufP8ZtKI8HW90lOLjwJ3LrdlD/NLsAY0tOQf1fWc53u28hWmmNGMxmCrL2p66IOgMDhDUw==}
+ engines: {node: '>=16.0.0'}
+
+ '@aws-sdk/credential-provider-http@3.577.0':
+ resolution: {integrity: sha512-n++yhCp67b9+ZRGEdY1jhamB5E/O+QsIDOPSuRmdaSGMCOd82oUEKPgIVEU1bkqxDsBxgiEWuvtfhK6sNiDS0A==}
+ engines: {node: '>=16.0.0'}
+
+ '@aws-sdk/credential-provider-ini@3.577.0':
+ resolution: {integrity: sha512-q7lHPtv6BjRvChUE3m0tIaEZKxPTaZ1B3lKxGYsFl3VLAu5N8yGCUKwuA1izf4ucT+LyKscVGqK6VDZx1ev3nw==}
+ engines: {node: '>=16.0.0'}
+ peerDependencies:
+ '@aws-sdk/client-sts': ^3.577.0
+
+ '@aws-sdk/credential-provider-node@3.577.0':
+ resolution: {integrity: sha512-epZ1HOMsrXBNczc0HQpv0VMjqAEpc09DUA7Rg3gUJfn8umhML7A7bXnUyqPA+S54q397UYg1leQKdSn23OiwQQ==}
+ engines: {node: '>=16.0.0'}
+
+ '@aws-sdk/credential-provider-process@3.577.0':
+ resolution: {integrity: sha512-Gin6BWtOiXxIgITrJ3Nwc+Y2P1uVT6huYR4EcbA/DJUPWyO0n9y5UFLewPvVbLkRn15JeEqErBLUrHclkiOKtw==}
+ engines: {node: '>=16.0.0'}
+
+ '@aws-sdk/credential-provider-sso@3.577.0':
+ resolution: {integrity: sha512-iVm5SQvS7EgZTJsRaqUOmDQpBQPPPat42SCbWFvFQOLrl8qewq8OP94hFS5w2mP62zngeYzqhJnDel79HXbxew==}
+ engines: {node: '>=16.0.0'}
+
+ '@aws-sdk/credential-provider-web-identity@3.577.0':
+ resolution: {integrity: sha512-ZGHGNRaCtJJmszb9UTnC7izNCtRUttdPlLdMkh41KPS32vfdrBDHs1JrpbZijItRj1xKuOXsiYSXLAaHGcLh8Q==}
+ engines: {node: '>=16.0.0'}
+ peerDependencies:
+ '@aws-sdk/client-sts': ^3.577.0
+
+ '@aws-sdk/middleware-host-header@3.577.0':
+ resolution: {integrity: sha512-9ca5MJz455CODIVXs0/sWmJm7t3QO4EUa1zf8pE8grLpzf0J94bz/skDWm37Pli13T3WaAQBHCTiH2gUVfCsWg==}
+ engines: {node: '>=16.0.0'}
+
+ '@aws-sdk/middleware-logger@3.577.0':
+ resolution: {integrity: sha512-aPFGpGjTZcJYk+24bg7jT4XdIp42mFXSuPt49lw5KygefLyJM/sB0bKKqPYYivW0rcuZ9brQ58eZUNthrzYAvg==}
+ engines: {node: '>=16.0.0'}
+
+ '@aws-sdk/middleware-recursion-detection@3.577.0':
+ resolution: {integrity: sha512-pn3ZVEd2iobKJlR3H+bDilHjgRnNrQ6HMmK9ZzZw89Ckn3Dcbv48xOv4RJvu0aU8SDLl/SNCxppKjeLDTPGBNA==}
+ engines: {node: '>=16.0.0'}
+
+ '@aws-sdk/middleware-user-agent@3.577.0':
+ resolution: {integrity: sha512-P55HAXgwmiHHpFx5JEPvOnAbfhN7v6sWv9PBQs+z2tC7QiBcPS0cdJR6PfV7J1n4VPK52/OnrK3l9VxdQ7Ms0g==}
+ engines: {node: '>=16.0.0'}
+
+ '@aws-sdk/region-config-resolver@3.577.0':
+ resolution: {integrity: sha512-4ChCFACNwzqx/xjg3zgFcW8Ali6R9C95cFECKWT/7CUM1D0MGvkclSH2cLarmHCmJgU6onKkJroFtWp0kHhgyg==}
+ engines: {node: '>=16.0.0'}
+
+ '@aws-sdk/token-providers@3.577.0':
+ resolution: {integrity: sha512-0CkIZpcC3DNQJQ1hDjm2bdSy/Xjs7Ny5YvSsacasGOkNfk+FdkiQy6N67bZX3Zbc9KIx+Nz4bu3iDeNSNplnnQ==}
+ engines: {node: '>=16.0.0'}
+ peerDependencies:
+ '@aws-sdk/client-sso-oidc': ^3.577.0
+
+ '@aws-sdk/types@3.577.0':
+ resolution: {integrity: sha512-FT2JZES3wBKN/alfmhlo+3ZOq/XJ0C7QOZcDNrpKjB0kqYoKjhVKZ/Hx6ArR0czkKfHzBBEs6y40ebIHx2nSmA==}
+ engines: {node: '>=16.0.0'}
+
+ '@aws-sdk/util-endpoints@3.577.0':
+ resolution: {integrity: sha512-FjuUz1Kdy4Zly2q/c58tpdqHd6z7iOdU/caYzoc8jwgAHBDBbIJNQLCU9hXJnPV2M8pWxQDyIZsoVwtmvErPzw==}
+ engines: {node: '>=16.0.0'}
+
+ '@aws-sdk/util-locate-window@3.568.0':
+ resolution: {integrity: sha512-3nh4TINkXYr+H41QaPelCceEB2FXP3fxp93YZXB/kqJvX0U9j0N0Uk45gvsjmEPzG8XxkPEeLIfT2I1M7A6Lig==}
+ engines: {node: '>=16.0.0'}
+
+ '@aws-sdk/util-user-agent-browser@3.577.0':
+ resolution: {integrity: sha512-zEAzHgR6HWpZOH7xFgeJLc6/CzMcx4nxeQolZxVZoB5pPaJd3CjyRhZN0xXeZB0XIRCWmb4yJBgyiugXLNMkLA==}
+
+ '@aws-sdk/util-user-agent-node@3.577.0':
+ resolution: {integrity: sha512-XqvtFjbSMtycZTWVwDe8DRWovuoMbA54nhUoZwVU6rW9OSD6NZWGR512BUGHFaWzW0Wg8++Dj10FrKTG2XtqfA==}
+ engines: {node: '>=16.0.0'}
+ peerDependencies:
+ aws-crt: '>=1.0.0'
+ peerDependenciesMeta:
+ aws-crt:
+ optional: true
+
+ '@aws-sdk/util-utf8-browser@3.259.0':
+ resolution: {integrity: sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==}
+
+ '@balena/dockerignore@1.0.2':
+ resolution: {integrity: sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==}
+
+ '@cloudflare/kv-asset-handler@0.3.2':
+ resolution: {integrity: sha512-EeEjMobfuJrwoctj7FA1y1KEbM0+Q1xSjobIEyie9k4haVEBB7vkDvsasw1pM3rO39mL2akxIAzLMUAtrMHZhA==}
+ engines: {node: '>=16.13'}
+
+ '@cloudflare/workerd-darwin-64@1.20240512.0':
+ resolution: {integrity: sha512-VMp+CsSHFALQiBzPdQ5dDI4T1qwLu0mQ0aeKVNDosXjueN0f3zj/lf+mFil5/9jBbG3t4mG0y+6MMnalP9Lobw==}
+ engines: {node: '>=16'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@cloudflare/workerd-darwin-arm64@1.20240512.0':
+ resolution: {integrity: sha512-lZktXGmzMrB5rJqY9+PmnNfv1HKlj/YLZwMjPfF0WVKHUFdvQbAHsi7NlKv6mW9uIvlZnS+K4sIkWc0MDXcRnA==}
+ engines: {node: '>=16'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@cloudflare/workerd-linux-64@1.20240512.0':
+ resolution: {integrity: sha512-wrHvqCZZqXz6Y3MUTn/9pQNsvaoNjbJpuA6vcXsXu8iCzJi911iVW2WUEBX+MpUWD+mBIP0oXni5tTlhkokOPw==}
+ engines: {node: '>=16'}
+ cpu: [x64]
+ os: [linux]
+
+ '@cloudflare/workerd-linux-arm64@1.20240512.0':
+ resolution: {integrity: sha512-YPezHMySL9J9tFdzxz390eBswQ//QJNYcZolz9Dgvb3FEfdpK345cE/bsWbMOqw5ws2f82l388epoenghtYvAg==}
+ engines: {node: '>=16'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@cloudflare/workerd-windows-64@1.20240512.0':
+ resolution: {integrity: sha512-SxKapDrIYSscMR7lGIp/av0l6vokjH4xQ9ACxHgXh+OdOus9azppSmjaPyw4/ePvg7yqpkaNjf9o258IxWtvKQ==}
+ engines: {node: '>=16'}
+ cpu: [x64]
+ os: [win32]
+
+ '@cloudflare/workers-types@4.20240512.0':
+ resolution: {integrity: sha512-o2yTEWg+YK/I1t/Me+dA0oarO0aCbjibp6wSeaw52DSE9tDyKJ7S+Qdyw/XsMrKn4t8kF6f/YOba+9O4MJfW9w==}
+
+ '@colors/colors@1.5.0':
+ resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==}
+ engines: {node: '>=0.1.90'}
+
+ '@cspotcode/source-map-support@0.8.1':
+ resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==}
+ engines: {node: '>=12'}
+
+ '@electric-sql/pglite@0.1.5':
+ resolution: {integrity: sha512-eymv4ONNvoPZQTvOQIi5dbpR+J5HzEv0qQH9o/y3gvNheJV/P/NFcrbsfJZYTsDKoq7DKrTiFNexsRkJKy8x9Q==}
+
+ '@esbuild-kit/core-utils@3.3.2':
+ resolution: {integrity: sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==}
+
+ '@esbuild-kit/esm-loader@2.6.5':
+ resolution: {integrity: sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA==}
+
+ '@esbuild-plugins/node-globals-polyfill@0.2.3':
+ resolution: {integrity: sha512-r3MIryXDeXDOZh7ih1l/yE9ZLORCd5e8vWg02azWRGj5SPTuoh69A2AIyn0Z31V/kHBfZ4HgWJ+OK3GTTwLmnw==}
+ peerDependencies:
+ esbuild: '*'
+
+ '@esbuild-plugins/node-modules-polyfill@0.2.2':
+ resolution: {integrity: sha512-LXV7QsWJxRuMYvKbiznh+U1ilIop3g2TeKRzUxOG5X3YITc8JyyTa90BmLwqqv0YnX4v32CSlG+vsziZp9dMvA==}
+ peerDependencies:
+ esbuild: '*'
+
+ '@esbuild/aix-ppc64@0.19.12':
+ resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==}
+ engines: {node: '>=12'}
+ cpu: [ppc64]
+ os: [aix]
+
+ '@esbuild/aix-ppc64@0.20.2':
+ resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==}
+ engines: {node: '>=12'}
+ cpu: [ppc64]
+ os: [aix]
+
+ '@esbuild/android-arm64@0.17.19':
+ resolution: {integrity: sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [android]
+
+ '@esbuild/android-arm64@0.18.20':
+ resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [android]
+
+ '@esbuild/android-arm64@0.19.12':
+ resolution: {integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [android]
+
+ '@esbuild/android-arm64@0.20.2':
+ resolution: {integrity: sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [android]
+
+ '@esbuild/android-arm@0.17.19':
+ resolution: {integrity: sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [android]
+
+ '@esbuild/android-arm@0.18.20':
+ resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [android]
+
+ '@esbuild/android-arm@0.19.12':
+ resolution: {integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [android]
+
+ '@esbuild/android-arm@0.20.2':
+ resolution: {integrity: sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [android]
+
+ '@esbuild/android-x64@0.17.19':
+ resolution: {integrity: sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [android]
+
+ '@esbuild/android-x64@0.18.20':
+ resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [android]
+
+ '@esbuild/android-x64@0.19.12':
+ resolution: {integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [android]
+
+ '@esbuild/android-x64@0.20.2':
+ resolution: {integrity: sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [android]
+
+ '@esbuild/darwin-arm64@0.17.19':
+ resolution: {integrity: sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@esbuild/darwin-arm64@0.18.20':
+ resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@esbuild/darwin-arm64@0.19.12':
+ resolution: {integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@esbuild/darwin-arm64@0.20.2':
+ resolution: {integrity: sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@esbuild/darwin-x64@0.17.19':
+ resolution: {integrity: sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@esbuild/darwin-x64@0.18.20':
+ resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@esbuild/darwin-x64@0.19.12':
+ resolution: {integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@esbuild/darwin-x64@0.20.2':
+ resolution: {integrity: sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@esbuild/freebsd-arm64@0.17.19':
+ resolution: {integrity: sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-arm64@0.18.20':
+ resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-arm64@0.19.12':
+ resolution: {integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-arm64@0.20.2':
+ resolution: {integrity: sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-x64@0.17.19':
+ resolution: {integrity: sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-x64@0.18.20':
+ resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-x64@0.19.12':
+ resolution: {integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-x64@0.20.2':
+ resolution: {integrity: sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@esbuild/linux-arm64@0.17.19':
+ resolution: {integrity: sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@esbuild/linux-arm64@0.18.20':
+ resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@esbuild/linux-arm64@0.19.12':
+ resolution: {integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@esbuild/linux-arm64@0.20.2':
+ resolution: {integrity: sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@esbuild/linux-arm@0.17.19':
+ resolution: {integrity: sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [linux]
+
+ '@esbuild/linux-arm@0.18.20':
+ resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [linux]
+
+ '@esbuild/linux-arm@0.19.12':
+ resolution: {integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [linux]
+
+ '@esbuild/linux-arm@0.20.2':
+ resolution: {integrity: sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [linux]
+
+ '@esbuild/linux-ia32@0.17.19':
+ resolution: {integrity: sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [linux]
+
+ '@esbuild/linux-ia32@0.18.20':
+ resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [linux]
+
+ '@esbuild/linux-ia32@0.19.12':
+ resolution: {integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [linux]
+
+ '@esbuild/linux-ia32@0.20.2':
+ resolution: {integrity: sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [linux]
+
+ '@esbuild/linux-loong64@0.14.54':
+ resolution: {integrity: sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw==}
+ engines: {node: '>=12'}
+ cpu: [loong64]
+ os: [linux]
+
+ '@esbuild/linux-loong64@0.17.19':
+ resolution: {integrity: sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==}
+ engines: {node: '>=12'}
+ cpu: [loong64]
+ os: [linux]
+
+ '@esbuild/linux-loong64@0.18.20':
+ resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==}
+ engines: {node: '>=12'}
+ cpu: [loong64]
+ os: [linux]
+
+ '@esbuild/linux-loong64@0.19.12':
+ resolution: {integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==}
+ engines: {node: '>=12'}
+ cpu: [loong64]
+ os: [linux]
+
+ '@esbuild/linux-loong64@0.20.2':
+ resolution: {integrity: sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==}
+ engines: {node: '>=12'}
+ cpu: [loong64]
+ os: [linux]
+
+ '@esbuild/linux-mips64el@0.17.19':
+ resolution: {integrity: sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==}
+ engines: {node: '>=12'}
+ cpu: [mips64el]
+ os: [linux]
+
+ '@esbuild/linux-mips64el@0.18.20':
+ resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==}
+ engines: {node: '>=12'}
+ cpu: [mips64el]
+ os: [linux]
+
+ '@esbuild/linux-mips64el@0.19.12':
+ resolution: {integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==}
+ engines: {node: '>=12'}
+ cpu: [mips64el]
+ os: [linux]
+
+ '@esbuild/linux-mips64el@0.20.2':
+ resolution: {integrity: sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==}
+ engines: {node: '>=12'}
+ cpu: [mips64el]
+ os: [linux]
+
+ '@esbuild/linux-ppc64@0.17.19':
+ resolution: {integrity: sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==}
+ engines: {node: '>=12'}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@esbuild/linux-ppc64@0.18.20':
+ resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==}
+ engines: {node: '>=12'}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@esbuild/linux-ppc64@0.19.12':
+ resolution: {integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==}
+ engines: {node: '>=12'}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@esbuild/linux-ppc64@0.20.2':
+ resolution: {integrity: sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==}
+ engines: {node: '>=12'}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@esbuild/linux-riscv64@0.17.19':
+ resolution: {integrity: sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==}
+ engines: {node: '>=12'}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@esbuild/linux-riscv64@0.18.20':
+ resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==}
+ engines: {node: '>=12'}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@esbuild/linux-riscv64@0.19.12':
+ resolution: {integrity: sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==}
+ engines: {node: '>=12'}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@esbuild/linux-riscv64@0.20.2':
+ resolution: {integrity: sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==}
+ engines: {node: '>=12'}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@esbuild/linux-s390x@0.17.19':
+ resolution: {integrity: sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==}
+ engines: {node: '>=12'}
+ cpu: [s390x]
+ os: [linux]
+
+ '@esbuild/linux-s390x@0.18.20':
+ resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==}
+ engines: {node: '>=12'}
+ cpu: [s390x]
+ os: [linux]
+
+ '@esbuild/linux-s390x@0.19.12':
+ resolution: {integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==}
+ engines: {node: '>=12'}
+ cpu: [s390x]
+ os: [linux]
+
+ '@esbuild/linux-s390x@0.20.2':
+ resolution: {integrity: sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==}
+ engines: {node: '>=12'}
+ cpu: [s390x]
+ os: [linux]
+
+ '@esbuild/linux-x64@0.17.19':
+ resolution: {integrity: sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [linux]
+
+ '@esbuild/linux-x64@0.18.20':
+ resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [linux]
+
+ '@esbuild/linux-x64@0.19.12':
+ resolution: {integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [linux]
+
+ '@esbuild/linux-x64@0.20.2':
+ resolution: {integrity: sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [linux]
+
+ '@esbuild/netbsd-x64@0.17.19':
+ resolution: {integrity: sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [netbsd]
+
+ '@esbuild/netbsd-x64@0.18.20':
+ resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [netbsd]
+
+ '@esbuild/netbsd-x64@0.19.12':
+ resolution: {integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [netbsd]
+
+ '@esbuild/netbsd-x64@0.20.2':
+ resolution: {integrity: sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [netbsd]
+
+ '@esbuild/openbsd-x64@0.17.19':
+ resolution: {integrity: sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [openbsd]
+
+ '@esbuild/openbsd-x64@0.18.20':
+ resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [openbsd]
+
+ '@esbuild/openbsd-x64@0.19.12':
+ resolution: {integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [openbsd]
+
+ '@esbuild/openbsd-x64@0.20.2':
+ resolution: {integrity: sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [openbsd]
+
+ '@esbuild/sunos-x64@0.17.19':
+ resolution: {integrity: sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [sunos]
+
+ '@esbuild/sunos-x64@0.18.20':
+ resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [sunos]
+
+ '@esbuild/sunos-x64@0.19.12':
+ resolution: {integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [sunos]
+
+ '@esbuild/sunos-x64@0.20.2':
+ resolution: {integrity: sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [sunos]
+
+ '@esbuild/win32-arm64@0.17.19':
+ resolution: {integrity: sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@esbuild/win32-arm64@0.18.20':
+ resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@esbuild/win32-arm64@0.19.12':
+ resolution: {integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@esbuild/win32-arm64@0.20.2':
+ resolution: {integrity: sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@esbuild/win32-ia32@0.17.19':
+ resolution: {integrity: sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [win32]
+
+ '@esbuild/win32-ia32@0.18.20':
+ resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [win32]
+
+ '@esbuild/win32-ia32@0.19.12':
+ resolution: {integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [win32]
+
+ '@esbuild/win32-ia32@0.20.2':
+ resolution: {integrity: sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [win32]
+
+ '@esbuild/win32-x64@0.17.19':
+ resolution: {integrity: sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [win32]
+
+ '@esbuild/win32-x64@0.18.20':
+ resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [win32]
+
+ '@esbuild/win32-x64@0.19.12':
+ resolution: {integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [win32]
+
+ '@esbuild/win32-x64@0.20.2':
+ resolution: {integrity: sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [win32]
+
+ '@eslint-community/eslint-utils@4.4.0':
+ resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ peerDependencies:
+ eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
+
+ '@eslint-community/regexpp@4.10.0':
+ resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==}
+ engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
+
+ '@eslint/eslintrc@2.1.4':
+ resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+
+ '@eslint/js@8.57.0':
+ resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+
+ '@ewoudenberg/difflib@0.1.0':
+ resolution: {integrity: sha512-OU5P5mJyD3OoWYMWY+yIgwvgNS9cFAU10f+DDuvtogcWQOoJIsQ4Hy2McSfUfhKjq8L0FuWVb4Rt7kgA+XK86A==}
+
+ '@fastify/busboy@2.1.1':
+ resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==}
+ engines: {node: '>=14'}
+
+ '@hono/node-server@1.11.1':
+ resolution: {integrity: sha512-GW1Iomhmm1o4Z+X57xGby8A35Cu9UZLL7pSMdqDBkD99U5cywff8F+8hLk5aBTzNubnsFAvWQ/fZjNwPsEn9lA==}
+ engines: {node: '>=18.14.1'}
+
+ '@hono/zod-validator@0.2.1':
+ resolution: {integrity: sha512-HFoxln7Q6JsE64qz2WBS28SD33UB2alp3aRKmcWnNLDzEL1BLsWfbdX6e1HIiUprHYTIXf5y7ax8eYidKUwyaA==}
+ peerDependencies:
+ hono: '>=3.9.0'
+ zod: ^3.19.1
+
+ '@humanwhocodes/config-array@0.11.14':
+ resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==}
+ engines: {node: '>=10.10.0'}
+
+ '@humanwhocodes/module-importer@1.0.1':
+ resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
+ engines: {node: '>=12.22'}
+
+ '@humanwhocodes/object-schema@2.0.3':
+ resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==}
+
+ '@isaacs/cliui@8.0.2':
+ resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
+ engines: {node: '>=12'}
+
+ '@jest/schemas@29.6.3':
+ resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ '@jridgewell/gen-mapping@0.3.5':
+ resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==}
+ engines: {node: '>=6.0.0'}
+
+ '@jridgewell/resolve-uri@3.1.2':
+ resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
+ engines: {node: '>=6.0.0'}
+
+ '@jridgewell/set-array@1.2.1':
+ resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}
+ engines: {node: '>=6.0.0'}
+
+ '@jridgewell/sourcemap-codec@1.4.15':
+ resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
+
+ '@jridgewell/trace-mapping@0.3.25':
+ resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
+
+ '@jridgewell/trace-mapping@0.3.9':
+ resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==}
+
+ '@libsql/client@0.4.3':
+ resolution: {integrity: sha512-AUYKnSPqAsFBVWBvmtrb4dG3pQlvTKT92eztAest9wQU2iJkabH8WzHLDb3dKFWKql7/kiCqvBQUVpozDwhekQ==}
+
+ '@libsql/core@0.4.3':
+ resolution: {integrity: sha512-r28iYBtaLBW9RRgXPFh6cGCsVI/rwRlOzSOpAu/1PVTm6EJ3t233pUf97jETVHU0vjdr1d8VvV6fKAvJkokqCw==}
+
+ '@libsql/darwin-arm64@0.2.0':
+ resolution: {integrity: sha512-+qyT2W/n5CFH1YZWv2mxW4Fsoo4dX9Z9M/nvbQqZ7H84J8hVegvVAsIGYzcK8xAeMEcpU5yGKB1Y9NoDY4hOSQ==}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@libsql/darwin-x64@0.2.0':
+ resolution: {integrity: sha512-hwmO2mF1n8oDHKFrUju6Jv+n9iFtTf5JUK+xlnIE3Td0ZwGC/O1R/Z/btZTd9nD+vsvakC8SJT7/Q6YlWIkhEw==}
+ cpu: [x64]
+ os: [darwin]
+
+ '@libsql/hrana-client@0.5.6':
+ resolution: {integrity: sha512-mjQoAmejZ1atG+M3YR2ZW+rg6ceBByH/S/h17ZoYZkqbWrvohFhXyz2LFxj++ARMoY9m6w3RJJIRdJdmnEUlFg==}
+
+ '@libsql/isomorphic-fetch@0.1.12':
+ resolution: {integrity: sha512-MRo4UcmjAGAa3ac56LoD5OE13m2p0lu0VEtZC2NZMcogM/jc5fU9YtMQ3qbPjFJ+u2BBjFZgMPkQaLS1dlMhpg==}
+
+ '@libsql/isomorphic-ws@0.1.5':
+ resolution: {integrity: sha512-DtLWIH29onUYR00i0GlQ3UdcTRC6EP4u9w/h9LxpUZJWRMARk6dQwZ6Jkd+QdwVpuAOrdxt18v0K2uIYR3fwFg==}
+
+ '@libsql/linux-arm64-gnu@0.2.0':
+ resolution: {integrity: sha512-1w2lPXIYtnBaK5t/Ej5E8x7lPiE+jP3KATI/W4yei5Z/ONJh7jQW5PJ7sYU95vTME3hWEM1FXN6kvzcpFAte7w==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@libsql/linux-arm64-musl@0.2.0':
+ resolution: {integrity: sha512-lkblBEJ7xuNiWNjP8DDq0rqoWccszfkUS7Efh5EjJ+GDWdCBVfh08mPofIZg0fZVLWQCY3j+VZCG1qZfATBizg==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@libsql/linux-x64-gnu@0.2.0':
+ resolution: {integrity: sha512-+x/d289KeJydwOhhqSxKT+6MSQTCfLltzOpTzPccsvdt5fxg8CBi+gfvEJ4/XW23Sa+9bc7zodFP0i6MOlxX7w==}
+ cpu: [x64]
+ os: [linux]
+
+ '@libsql/linux-x64-musl@0.2.0':
+ resolution: {integrity: sha512-5Xn0c5A6vKf9D1ASpgk7mef//FuY7t5Lktj/eiU4n3ryxG+6WTpqstTittJUgepVjcleLPYxIhQAYeYwTYH1IQ==}
+ cpu: [x64]
+ os: [linux]
+
+ '@libsql/win32-x64-msvc@0.2.0':
+ resolution: {integrity: sha512-rpK+trBIpRST15m3cMYg5aPaX7kvCIottxY7jZPINkKAaScvfbn9yulU/iZUM9YtuK96Y1ZmvwyVIK/Y5DzoMQ==}
+ cpu: [x64]
+ os: [win32]
+
+ '@neon-rs/load@0.0.4':
+ resolution: {integrity: sha512-kTPhdZyTQxB+2wpiRcFWrDcejc4JI6tkPuS7UZCG4l6Zvc5kU/gGQ/ozvHTh1XR5tS+UlfAfGuPajjzQjCiHCw==}
+
+ '@neondatabase/serverless@0.7.2':
+ resolution: {integrity: sha512-wU3WA2uTyNO7wjPs3Mg0G01jztAxUxzd9/mskMmtPwPTjf7JKWi9AW5/puOGXLxmZ9PVgRFeBVRVYq5nBPhsCg==}
+
+ '@neondatabase/serverless@0.9.3':
+ resolution: {integrity: sha512-6ZBK8asl2Z3+ADEaELvbaVVGVlmY1oAzkxxZfpmXPKFuJhbDN+5fU3zYBamsahS/Ch1zE+CVWB3R+8QEI2LMSw==}
+
+ '@nodelib/fs.scandir@2.1.5':
+ resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
+ engines: {node: '>= 8'}
+
+ '@nodelib/fs.stat@2.0.5':
+ resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
+ engines: {node: '>= 8'}
+
+ '@nodelib/fs.walk@1.2.8':
+ resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
+ engines: {node: '>= 8'}
+
+ '@originjs/vite-plugin-commonjs@1.0.3':
+ resolution: {integrity: sha512-KuEXeGPptM2lyxdIEJ4R11+5ztipHoE7hy8ClZt3PYaOVQ/pyngd2alaSrPnwyFeOW1UagRBaQ752aA1dTMdOQ==}
+
+ '@pkgjs/parseargs@0.11.0':
+ resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
+ engines: {node: '>=14'}
+
+ '@pkgr/core@0.1.1':
+ resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==}
+ engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
+
+ '@planetscale/database@1.18.0':
+ resolution: {integrity: sha512-t2XdOfrVgcF7AW791FtdPS27NyNqcE1SpoXgk3HpziousvUMsJi4Q6NL3JyOBpsMOrvk94749o8yyonvX5quPw==}
+ engines: {node: '>=16'}
+
+ '@rollup/rollup-android-arm-eabi@4.17.2':
+ resolution: {integrity: sha512-NM0jFxY8bB8QLkoKxIQeObCaDlJKewVlIEkuyYKm5An1tdVZ966w2+MPQ2l8LBZLjR+SgyV+nRkTIunzOYBMLQ==}
+ cpu: [arm]
+ os: [android]
+
+ '@rollup/rollup-android-arm64@4.17.2':
+ resolution: {integrity: sha512-yeX/Usk7daNIVwkq2uGoq2BYJKZY1JfyLTaHO/jaiSwi/lsf8fTFoQW/n6IdAsx5tx+iotu2zCJwz8MxI6D/Bw==}
+ cpu: [arm64]
+ os: [android]
+
+ '@rollup/rollup-darwin-arm64@4.17.2':
+ resolution: {integrity: sha512-kcMLpE6uCwls023+kknm71ug7MZOrtXo+y5p/tsg6jltpDtgQY1Eq5sGfHcQfb+lfuKwhBmEURDga9N0ol4YPw==}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@rollup/rollup-darwin-x64@4.17.2':
+ resolution: {integrity: sha512-AtKwD0VEx0zWkL0ZjixEkp5tbNLzX+FCqGG1SvOu993HnSz4qDI6S4kGzubrEJAljpVkhRSlg5bzpV//E6ysTQ==}
+ cpu: [x64]
+ os: [darwin]
+
+ '@rollup/rollup-linux-arm-gnueabihf@4.17.2':
+ resolution: {integrity: sha512-3reX2fUHqN7sffBNqmEyMQVj/CKhIHZd4y631duy0hZqI8Qoqf6lTtmAKvJFYa6bhU95B1D0WgzHkmTg33In0A==}
+ cpu: [arm]
+ os: [linux]
+
+ '@rollup/rollup-linux-arm-musleabihf@4.17.2':
+ resolution: {integrity: sha512-uSqpsp91mheRgw96xtyAGP9FW5ChctTFEoXP0r5FAzj/3ZRv3Uxjtc7taRQSaQM/q85KEKjKsZuiZM3GyUivRg==}
+ cpu: [arm]
+ os: [linux]
+
+ '@rollup/rollup-linux-arm64-gnu@4.17.2':
+ resolution: {integrity: sha512-EMMPHkiCRtE8Wdk3Qhtciq6BndLtstqZIroHiiGzB3C5LDJmIZcSzVtLRbwuXuUft1Cnv+9fxuDtDxz3k3EW2A==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@rollup/rollup-linux-arm64-musl@4.17.2':
+ resolution: {integrity: sha512-NMPylUUZ1i0z/xJUIx6VUhISZDRT+uTWpBcjdv0/zkp7b/bQDF+NfnfdzuTiB1G6HTodgoFa93hp0O1xl+/UbA==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@rollup/rollup-linux-powerpc64le-gnu@4.17.2':
+ resolution: {integrity: sha512-T19My13y8uYXPw/L/k0JYaX1fJKFT/PWdXiHr8mTbXWxjVF1t+8Xl31DgBBvEKclw+1b00Chg0hxE2O7bTG7GQ==}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@rollup/rollup-linux-riscv64-gnu@4.17.2':
+ resolution: {integrity: sha512-BOaNfthf3X3fOWAB+IJ9kxTgPmMqPPH5f5k2DcCsRrBIbWnaJCgX2ll77dV1TdSy9SaXTR5iDXRL8n7AnoP5cg==}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@rollup/rollup-linux-s390x-gnu@4.17.2':
+ resolution: {integrity: sha512-W0UP/x7bnn3xN2eYMql2T/+wpASLE5SjObXILTMPUBDB/Fg/FxC+gX4nvCfPBCbNhz51C+HcqQp2qQ4u25ok6g==}
+ cpu: [s390x]
+ os: [linux]
+
+ '@rollup/rollup-linux-x64-gnu@4.17.2':
+ resolution: {integrity: sha512-Hy7pLwByUOuyaFC6mAr7m+oMC+V7qyifzs/nW2OJfC8H4hbCzOX07Ov0VFk/zP3kBsELWNFi7rJtgbKYsav9QQ==}
+ cpu: [x64]
+ os: [linux]
+
+ '@rollup/rollup-linux-x64-musl@4.17.2':
+ resolution: {integrity: sha512-h1+yTWeYbRdAyJ/jMiVw0l6fOOm/0D1vNLui9iPuqgRGnXA0u21gAqOyB5iHjlM9MMfNOm9RHCQ7zLIzT0x11Q==}
+ cpu: [x64]
+ os: [linux]
+
+ '@rollup/rollup-win32-arm64-msvc@4.17.2':
+ resolution: {integrity: sha512-tmdtXMfKAjy5+IQsVtDiCfqbynAQE/TQRpWdVataHmhMb9DCoJxp9vLcCBjEQWMiUYxO1QprH/HbY9ragCEFLA==}
+ cpu: [arm64]
+ os: [win32]
+
+ '@rollup/rollup-win32-ia32-msvc@4.17.2':
+ resolution: {integrity: sha512-7II/QCSTAHuE5vdZaQEwJq2ZACkBpQDOmQsE6D6XUbnBHW8IAhm4eTufL6msLJorzrHDFv3CF8oCA/hSIRuZeQ==}
+ cpu: [ia32]
+ os: [win32]
+
+ '@rollup/rollup-win32-x64-msvc@4.17.2':
+ resolution: {integrity: sha512-TGGO7v7qOq4CYmSBVEYpI1Y5xDuCEnbVC5Vth8mOsW0gDSzxNrVERPc790IGHsrT2dQSimgMr9Ub3Y1Jci5/8w==}
+ cpu: [x64]
+ os: [win32]
+
+ '@sinclair/typebox@0.27.8':
+ resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==}
+
+ '@sindresorhus/is@4.6.0':
+ resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==}
+ engines: {node: '>=10'}
+
+ '@smithy/abort-controller@3.0.0':
+ resolution: {integrity: sha512-p6GlFGBt9K4MYLu72YuJ523NVR4A8oHlC5M2JO6OmQqN8kAc/uh1JqLE+FizTokrSJGg0CSvC+BrsmGzKtsZKA==}
+ engines: {node: '>=16.0.0'}
+
+ '@smithy/config-resolver@3.0.0':
+ resolution: {integrity: sha512-2GzOfADwYLQugYkKQhIyZyQlM05K+tMKvRnc6eFfZcpJGRfKoMUMYdPlBKmqHwQFXQKBrGV6cxL9oymWgDzvFw==}
+ engines: {node: '>=16.0.0'}
+
+ '@smithy/core@2.0.1':
+ resolution: {integrity: sha512-rcMkjvwxH/bER+oZUPR0yTA0ELD6m3A+d92+CFkdF6HJFCBB1bXo7P5pm21L66XwTN01B6bUhSCQ7cymWRD8zg==}
+ engines: {node: '>=16.0.0'}
+
+ '@smithy/credential-provider-imds@3.0.0':
+ resolution: {integrity: sha512-lfmBiFQcA3FsDAPxNfY0L7CawcWtbyWsBOHo34nF095728JLkBX4Y9q/VPPE2r7fqMVK+drmDigqE2/SSQeVRA==}
+ engines: {node: '>=16.0.0'}
+
+ '@smithy/fetch-http-handler@3.0.1':
+ resolution: {integrity: sha512-uaH74i5BDj+rBwoQaXioKpI0SHBJFtOVwzrCpxZxphOW0ki5jhj7dXvDMYM2IJem8TpdFvS2iC08sjOblfFGFg==}
+
+ '@smithy/hash-node@3.0.0':
+ resolution: {integrity: sha512-84qXstNemP3XS5jcof0el6+bDfjzuvhJPQTEfro3lgtbCtKgzPm3MgiS6ehXVPjeQ5+JS0HqmTz8f/RYfzHVxw==}
+ engines: {node: '>=16.0.0'}
+
+ '@smithy/invalid-dependency@3.0.0':
+ resolution: {integrity: sha512-F6wBBaEFgJzj0s4KUlliIGPmqXemwP6EavgvDqYwCH40O5Xr2iMHvS8todmGVZtuJCorBkXsYLyTu4PuizVq5g==}
+
+ '@smithy/is-array-buffer@3.0.0':
+ resolution: {integrity: sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==}
+ engines: {node: '>=16.0.0'}
+
+ '@smithy/middleware-content-length@3.0.0':
+ resolution: {integrity: sha512-3C4s4d/iGobgCtk2tnWW6+zSTOBg1PRAm2vtWZLdriwTroFbbWNSr3lcyzHdrQHnEXYCC5K52EbpfodaIUY8sg==}
+ engines: {node: '>=16.0.0'}
+
+ '@smithy/middleware-endpoint@3.0.0':
+ resolution: {integrity: sha512-aXOAWztw/5qAfp0NcA2OWpv6ZI/E+Dh9mByif7i91D/0iyYNUcKvskmXiowKESFkuZ7PIMd3VOR4fTibZDs2OQ==}
+ engines: {node: '>=16.0.0'}
+
+ '@smithy/middleware-retry@3.0.1':
+ resolution: {integrity: sha512-hBhSEuL841FhJBK/19WpaGk5YWSzFk/P2UaVjANGKRv3eYNO8Y1lANWgqnuPWjOyCEWMPr58vELFDWpxvRKANw==}
+ engines: {node: '>=16.0.0'}
+
+ '@smithy/middleware-serde@3.0.0':
+ resolution: {integrity: sha512-I1vKG1foI+oPgG9r7IMY1S+xBnmAn1ISqployvqkwHoSb8VPsngHDTOgYGYBonuOKndaWRUGJZrKYYLB+Ane6w==}
+ engines: {node: '>=16.0.0'}
+
+ '@smithy/middleware-stack@3.0.0':
+ resolution: {integrity: sha512-+H0jmyfAyHRFXm6wunskuNAqtj7yfmwFB6Fp37enytp2q047/Od9xetEaUbluyImOlGnGpaVGaVfjwawSr+i6Q==}
+ engines: {node: '>=16.0.0'}
+
+ '@smithy/node-config-provider@3.0.0':
+ resolution: {integrity: sha512-buqfaSdDh0zo62EPLf8rGDvcpKwGpO5ho4bXS2cdFhlOta7tBkWJt+O5uiaAeICfIOfPclNOndshDNSanX2X9g==}
+ engines: {node: '>=16.0.0'}
+
+ '@smithy/node-http-handler@3.0.0':
+ resolution: {integrity: sha512-3trD4r7NOMygwLbUJo4eodyQuypAWr7uvPnebNJ9a70dQhVn+US8j/lCnvoJS6BXfZeF7PkkkI0DemVJw+n+eQ==}
+ engines: {node: '>=16.0.0'}
+
+ '@smithy/property-provider@3.0.0':
+ resolution: {integrity: sha512-LmbPgHBswdXCrkWWuUwBm9w72S2iLWyC/5jet9/Y9cGHtzqxi+GVjfCfahkvNV4KXEwgnH8EMpcrD9RUYe0eLQ==}
+ engines: {node: '>=16.0.0'}
+
+ '@smithy/protocol-http@4.0.0':
+ resolution: {integrity: sha512-qOQZOEI2XLWRWBO9AgIYuHuqjZ2csyr8/IlgFDHDNuIgLAMRx2Bl8ck5U5D6Vh9DPdoaVpuzwWMa0xcdL4O/AQ==}
+ engines: {node: '>=16.0.0'}
+
+ '@smithy/querystring-builder@3.0.0':
+ resolution: {integrity: sha512-bW8Fi0NzyfkE0TmQphDXr1AmBDbK01cA4C1Z7ggwMAU5RDz5AAv/KmoRwzQAS0kxXNf/D2ALTEgwK0U2c4LtRg==}
+ engines: {node: '>=16.0.0'}
+
+ '@smithy/querystring-parser@3.0.0':
+ resolution: {integrity: sha512-UzHwthk0UEccV4dHzPySnBy34AWw3V9lIqUTxmozQ+wPDAO9csCWMfOLe7V9A2agNYy7xE+Pb0S6K/J23JSzfQ==}
+ engines: {node: '>=16.0.0'}
+
+ '@smithy/service-error-classification@3.0.0':
+ resolution: {integrity: sha512-3BsBtOUt2Gsnc3X23ew+r2M71WwtpHfEDGhHYHSDg6q1t8FrWh15jT25DLajFV1H+PpxAJ6gqe9yYeRUsmSdFA==}
+ engines: {node: '>=16.0.0'}
+
+ '@smithy/shared-ini-file-loader@3.0.0':
+ resolution: {integrity: sha512-REVw6XauXk8xE4zo5aGL7Rz4ywA8qNMUn8RtWeTRQsgAlmlvbJ7CEPBcaXU2NDC3AYBgYAXrGyWD8XrN8UGDog==}
+ engines: {node: '>=16.0.0'}
+
+ '@smithy/signature-v4@3.0.0':
+ resolution: {integrity: sha512-kXFOkNX+BQHe2qnLxpMEaCRGap9J6tUGLzc3A9jdn+nD4JdMwCKTJ+zFwQ20GkY+mAXGatyTw3HcoUlR39HwmA==}
+ engines: {node: '>=16.0.0'}
+
+ '@smithy/smithy-client@3.0.1':
+ resolution: {integrity: sha512-KAiFY4Y4jdHxR+4zerH/VBhaFKM8pbaVmJZ/CWJRwtM/CmwzTfXfvYwf6GoUwiHepdv+lwiOXCuOl6UBDUEINw==}
+ engines: {node: '>=16.0.0'}
+
+ '@smithy/types@3.0.0':
+ resolution: {integrity: sha512-VvWuQk2RKFuOr98gFhjca7fkBS+xLLURT8bUjk5XQoV0ZLm7WPwWPPY3/AwzTLuUBDeoKDCthfe1AsTUWaSEhw==}
+ engines: {node: '>=16.0.0'}
+
+ '@smithy/url-parser@3.0.0':
+ resolution: {integrity: sha512-2XLazFgUu+YOGHtWihB3FSLAfCUajVfNBXGGYjOaVKjLAuAxx3pSBY3hBgLzIgB17haf59gOG3imKqTy8mcrjw==}
+
+ '@smithy/util-base64@3.0.0':
+ resolution: {integrity: sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==}
+ engines: {node: '>=16.0.0'}
+
+ '@smithy/util-body-length-browser@3.0.0':
+ resolution: {integrity: sha512-cbjJs2A1mLYmqmyVl80uoLTJhAcfzMOyPgjwAYusWKMdLeNtzmMz9YxNl3/jRLoxSS3wkqkf0jwNdtXWtyEBaQ==}
+
+ '@smithy/util-body-length-node@3.0.0':
+ resolution: {integrity: sha512-Tj7pZ4bUloNUP6PzwhN7K386tmSmEET9QtQg0TgdNOnxhZvCssHji+oZTUIuzxECRfG8rdm2PMw2WCFs6eIYkA==}
+ engines: {node: '>=16.0.0'}
+
+ '@smithy/util-buffer-from@3.0.0':
+ resolution: {integrity: sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==}
+ engines: {node: '>=16.0.0'}
+
+ '@smithy/util-config-provider@3.0.0':
+ resolution: {integrity: sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ==}
+ engines: {node: '>=16.0.0'}
+
+ '@smithy/util-defaults-mode-browser@3.0.1':
+ resolution: {integrity: sha512-nW5kEzdJn1Bn5TF+gOPHh2rcPli8JU9vSSXLbfg7uPnfR1TMRQqs9zlYRhIb87NeSxIbpdXOI94tvXSy+fvDYg==}
+ engines: {node: '>= 10.0.0'}
+
+ '@smithy/util-defaults-mode-node@3.0.1':
+ resolution: {integrity: sha512-TFk+Qb+elLc/MOhtSp+50fstyfZ6avQbgH2d96xUBpeScu+Al9elxv+UFAjaTHe0HQe5n+wem8ZLpXvU8lwV6Q==}
+ engines: {node: '>= 10.0.0'}
+
+ '@smithy/util-endpoints@2.0.0':
+ resolution: {integrity: sha512-+exaXzEY3DNt2qtA2OtRNSDlVrE4p32j1JSsQkzA5AdP0YtJNjkYbYhJxkFmPYcjI1abuwopOZCwUmv682QkiQ==}
+ engines: {node: '>=16.0.0'}
+
+ '@smithy/util-hex-encoding@3.0.0':
+ resolution: {integrity: sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==}
+ engines: {node: '>=16.0.0'}
+
+ '@smithy/util-middleware@3.0.0':
+ resolution: {integrity: sha512-q5ITdOnV2pXHSVDnKWrwgSNTDBAMHLptFE07ua/5Ty5WJ11bvr0vk2a7agu7qRhrCFRQlno5u3CneU5EELK+DQ==}
+ engines: {node: '>=16.0.0'}
+
+ '@smithy/util-retry@3.0.0':
+ resolution: {integrity: sha512-nK99bvJiziGv/UOKJlDvFF45F00WgPLKVIGUfAK+mDhzVN2hb/S33uW2Tlhg5PVBoqY7tDVqL0zmu4OxAHgo9g==}
+ engines: {node: '>=16.0.0'}
+
+ '@smithy/util-stream@3.0.1':
+ resolution: {integrity: sha512-7F7VNNhAsfMRA8I986YdOY5fE0/T1/ZjFF6OLsqkvQVNP3vZ/szYDfGCyphb7ioA09r32K/0qbSFfNFU68aSzA==}
+ engines: {node: '>=16.0.0'}
+
+ '@smithy/util-uri-escape@3.0.0':
+ resolution: {integrity: sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==}
+ engines: {node: '>=16.0.0'}
+
+ '@smithy/util-utf8@3.0.0':
+ resolution: {integrity: sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==}
+ engines: {node: '>=16.0.0'}
+
+ '@types/better-sqlite3@7.6.10':
+ resolution: {integrity: sha512-TZBjD+yOsyrUJGmcUj6OS3JADk3+UZcNv3NOBqGkM09bZdi28fNZw8ODqbMOLfKCu7RYCO62/ldq1iHbzxqoPw==}
+
+ '@types/docker-modem@3.0.6':
+ resolution: {integrity: sha512-yKpAGEuKRSS8wwx0joknWxsmLha78wNMe9R2S3UNsVOkZded8UqOrV8KoeDXoXsjndxwyF3eIhyClGbO1SEhEg==}
+
+ '@types/dockerode@3.3.29':
+ resolution: {integrity: sha512-5PRRq/yt5OT/Jf77ltIdz4EiR9+VLnPF+HpU4xGFwUqmV24Co2HKBNW3w+slqZ1CYchbcDeqJASHDYWzZCcMiQ==}
+
+ '@types/estree@1.0.5':
+ resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==}
+
+ '@types/fs-extra@11.0.4':
+ resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==}
+
+ '@types/glob@8.1.0':
+ resolution: {integrity: sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==}
+
+ '@types/json-diff@1.0.3':
+ resolution: {integrity: sha512-Qvxm8fpRMv/1zZR3sQWImeRK2mBYJji20xF51Fq9Gt//Ed18u0x6/FNLogLS1xhfUWTEmDyqveJqn95ltB6Kvw==}
+
+ '@types/jsonfile@6.1.4':
+ resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==}
+
+ '@types/minimatch@5.1.2':
+ resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==}
+
+ '@types/minimist@1.2.5':
+ resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==}
+
+ '@types/node-fetch@2.6.11':
+ resolution: {integrity: sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==}
+
+ '@types/node-forge@1.3.11':
+ resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==}
+
+ '@types/node@18.19.33':
+ resolution: {integrity: sha512-NR9+KrpSajr2qBVp/Yt5TU/rp+b5Mayi3+OlMlcg2cVCfRmcG5PWZ7S4+MG9PZ5gWBoc9Pd0BKSRViuBCRPu0A==}
+
+ '@types/pg@8.11.6':
+ resolution: {integrity: sha512-/2WmmBXHLsfRqzfHW7BNZ8SbYzE8OSk7i3WjFYvfgRHj7S1xj+16Je5fUKv3lVdVzk/zn9TXOqf+avFCFIE0yQ==}
+
+ '@types/pg@8.6.6':
+ resolution: {integrity: sha512-O2xNmXebtwVekJDD+02udOncjVcMZQuTEQEMpKJ0ZRf5E7/9JJX3izhKUcUifBkyKpljyUM6BTgy2trmviKlpw==}
+
+ '@types/pluralize@0.0.33':
+ resolution: {integrity: sha512-JOqsl+ZoCpP4e8TDke9W79FDcSgPAR0l6pixx2JHkhnRjvShyYiAYw2LVsnA7K08Y6DeOnaU6ujmENO4os/cYg==}
+
+ '@types/ps-tree@1.1.6':
+ resolution: {integrity: sha512-PtrlVaOaI44/3pl3cvnlK+GxOM3re2526TJvPvh7W+keHIXdV4TE0ylpPBAcvFQCbGitaTXwL9u+RF7qtVeazQ==}
+
+ '@types/semver@7.5.8':
+ resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==}
+
+ '@types/ssh2@1.15.0':
+ resolution: {integrity: sha512-YcT8jP5F8NzWeevWvcyrrLB3zcneVjzYY9ZDSMAMboI+2zR1qYWFhwsyOFVzT7Jorn67vqxC0FRiw8YyG9P1ww==}
+
+ '@types/uuid@9.0.8':
+ resolution: {integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==}
+
+ '@types/which@3.0.3':
+ resolution: {integrity: sha512-2C1+XoY0huExTbs8MQv1DuS5FS86+SEjdM9F/+GS61gg5Hqbtj8ZiDSx8MfWcyei907fIPbfPGCOrNUTnVHY1g==}
+
+ '@types/ws@8.5.10':
+ resolution: {integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==}
+
+ '@typescript-eslint/eslint-plugin@7.10.0':
+ resolution: {integrity: sha512-PzCr+a/KAef5ZawX7nbyNwBDtM1HdLIT53aSA2DDlxmxMngZ43O8SIePOeX8H5S+FHXeI6t97mTt/dDdzY4Fyw==}
+ engines: {node: ^18.18.0 || >=20.0.0}
+ peerDependencies:
+ '@typescript-eslint/parser': ^7.0.0
+ eslint: ^8.56.0
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ '@typescript-eslint/parser@7.10.0':
+ resolution: {integrity: sha512-2EjZMA0LUW5V5tGQiaa2Gys+nKdfrn2xiTIBLR4fxmPmVSvgPcKNW+AE/ln9k0A4zDUti0J/GZXMDupQoI+e1w==}
+ engines: {node: ^18.18.0 || >=20.0.0}
+ peerDependencies:
+ eslint: ^8.56.0
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ '@typescript-eslint/scope-manager@7.10.0':
+ resolution: {integrity: sha512-7L01/K8W/VGl7noe2mgH0K7BE29Sq6KAbVmxurj8GGaPDZXPr8EEQ2seOeAS+mEV9DnzxBQB6ax6qQQ5C6P4xg==}
+ engines: {node: ^18.18.0 || >=20.0.0}
+
+ '@typescript-eslint/type-utils@7.10.0':
+ resolution: {integrity: sha512-D7tS4WDkJWrVkuzgm90qYw9RdgBcrWmbbRkrLA4d7Pg3w0ttVGDsvYGV19SH8gPR5L7OtcN5J1hTtyenO9xE9g==}
+ engines: {node: ^18.18.0 || >=20.0.0}
+ peerDependencies:
+ eslint: ^8.56.0
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ '@typescript-eslint/types@7.10.0':
+ resolution: {integrity: sha512-7fNj+Ya35aNyhuqrA1E/VayQX9Elwr8NKZ4WueClR3KwJ7Xx9jcCdOrLW04h51de/+gNbyFMs+IDxh5xIwfbNg==}
+ engines: {node: ^18.18.0 || >=20.0.0}
+
+ '@typescript-eslint/typescript-estree@7.10.0':
+ resolution: {integrity: sha512-LXFnQJjL9XIcxeVfqmNj60YhatpRLt6UhdlFwAkjNc6jSUlK8zQOl1oktAP8PlWFzPQC1jny/8Bai3/HPuvN5g==}
+ engines: {node: ^18.18.0 || >=20.0.0}
+ peerDependencies:
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ '@typescript-eslint/utils@7.10.0':
+ resolution: {integrity: sha512-olzif1Fuo8R8m/qKkzJqT7qwy16CzPRWBvERS0uvyc+DHd8AKbO4Jb7kpAvVzMmZm8TrHnI7hvjN4I05zow+tg==}
+ engines: {node: ^18.18.0 || >=20.0.0}
+ peerDependencies:
+ eslint: ^8.56.0
+
+ '@typescript-eslint/visitor-keys@7.10.0':
+ resolution: {integrity: sha512-9ntIVgsi6gg6FIq9xjEO4VQJvwOqA3jaBFQJ/6TK5AvEup2+cECI6Fh7QiBxmfMHXU0V0J4RyPeOU1VDNzl9cg==}
+ engines: {node: ^18.18.0 || >=20.0.0}
+
+ '@ungap/structured-clone@1.2.0':
+ resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==}
+
+ '@vercel/postgres@0.8.0':
+ resolution: {integrity: sha512-/QUV9ExwaNdKooRjOQqvrKNVnRvsaXeukPNI5DB1ovUTesglfR/fparw7ngo1KUWWKIVpEj2TRrA+ObRHRdaLg==}
+ engines: {node: '>=14.6'}
+
+ '@vitest/expect@1.6.0':
+ resolution: {integrity: sha512-ixEvFVQjycy/oNgHjqsL6AZCDduC+tflRluaHIzKIsdbzkLn2U/iBnVeJwB6HsIjQBdfMR8Z0tRxKUsvFJEeWQ==}
+
+ '@vitest/runner@1.6.0':
+ resolution: {integrity: sha512-P4xgwPjwesuBiHisAVz/LSSZtDjOTPYZVmNAnpHHSR6ONrf8eCJOFRvUwdHn30F5M1fxhqtl7QZQUk2dprIXAg==}
+
+ '@vitest/snapshot@1.6.0':
+ resolution: {integrity: sha512-+Hx43f8Chus+DCmygqqfetcAZrDJwvTj0ymqjQq4CvmpKFSTVteEOBzCusu1x2tt4OJcvBflyHUE0DZSLgEMtQ==}
+
+ '@vitest/spy@1.6.0':
+ resolution: {integrity: sha512-leUTap6B/cqi/bQkXUu6bQV5TZPx7pmMBKBQiI0rJA8c3pB56ZsaTbREnF7CJfmvAS4V2cXIBAh/3rVwrrCYgw==}
+
+ '@vitest/utils@1.6.0':
+ resolution: {integrity: sha512-21cPiuGMoMZwiOHa2i4LXkMkMkCGzA+MVFV70jRwHo95dL4x/ts5GZhML1QWuy7yfp3WzK3lRvZi3JnXTYqrBw==}
+
+ acorn-jsx@5.3.2:
+ resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
+ peerDependencies:
+ acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
+
+ acorn-walk@8.3.2:
+ resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==}
+ engines: {node: '>=0.4.0'}
+
+ acorn@8.11.3:
+ resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==}
+ engines: {node: '>=0.4.0'}
+ hasBin: true
+
+ aggregate-error@4.0.1:
+ resolution: {integrity: sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==}
+ engines: {node: '>=12'}
+
+ ajv@6.12.6:
+ resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
+
+ ansi-escapes@6.2.1:
+ resolution: {integrity: sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==}
+ engines: {node: '>=14.16'}
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-regex@6.0.1:
+ resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==}
+ engines: {node: '>=12'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ ansi-styles@5.2.0:
+ resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==}
+ engines: {node: '>=10'}
+
+ ansi-styles@6.2.1:
+ resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
+ engines: {node: '>=12'}
+
+ ansicolors@0.3.2:
+ resolution: {integrity: sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==}
+
+ any-promise@1.3.0:
+ resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==}
+
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+
+ argparse@1.0.10:
+ resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==}
+
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+ array-find-index@1.0.2:
+ resolution: {integrity: sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==}
+ engines: {node: '>=0.10.0'}
+
+ array-union@2.1.0:
+ resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
+ engines: {node: '>=8'}
+
+ arrgv@1.0.2:
+ resolution: {integrity: sha512-a4eg4yhp7mmruZDQFqVMlxNRFGi/i1r87pt8SDHy0/I8PqSXoUTlWZRdAZo0VXgvEARcujbtTk8kiZRi1uDGRw==}
+ engines: {node: '>=8.0.0'}
+
+ arrify@3.0.0:
+ resolution: {integrity: sha512-tLkvA81vQG/XqE2mjDkGQHoOINtMHtysSnemrmoGe6PydDPMRbVugqyk4A6V/WDWEfm3l+0d8anA9r8cv/5Jaw==}
+ engines: {node: '>=12'}
+
+ as-table@1.0.55:
+ resolution: {integrity: sha512-xvsWESUJn0JN421Xb9MQw6AsMHRCUknCe0Wjlxvjud80mU4E6hQf1A6NzQKcYNmYw62MfzEtXc+badstZP3JpQ==}
+
+ asn1@0.2.6:
+ resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==}
+
+ assertion-error@1.1.0:
+ resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
+
+ asynckit@0.4.0:
+ resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
+
+ ava@5.3.1:
+ resolution: {integrity: sha512-Scv9a4gMOXB6+ni4toLuhAm9KYWEjsgBglJl+kMGI5+IVDt120CCDZyB5HNU9DjmLI2t4I0GbnxGLmmRfGTJGg==}
+ engines: {node: '>=14.19 <15 || >=16.15 <17 || >=18'}
+ hasBin: true
+ peerDependencies:
+ '@ava/typescript': '*'
+ peerDependenciesMeta:
+ '@ava/typescript':
+ optional: true
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
+ bcrypt-pbkdf@1.0.2:
+ resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==}
+
+ better-sqlite3@9.6.0:
+ resolution: {integrity: sha512-yR5HATnqeYNVnkaUTf4bOP2dJSnyhP4puJN/QPRyx4YkBEEUxib422n2XzPqDEHjQQqazoYoADdAm5vE15+dAQ==}
+
+ binary-extensions@2.3.0:
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+ engines: {node: '>=8'}
+
+ bindings@1.5.0:
+ resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==}
+
+ bl@4.1.0:
+ resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==}
+
+ blake3-wasm@2.1.5:
+ resolution: {integrity: sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==}
+
+ blueimp-md5@2.19.0:
+ resolution: {integrity: sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w==}
+
+ bowser@2.11.0:
+ resolution: {integrity: sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==}
+
+ brace-expansion@1.1.11:
+ resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+
+ brace-expansion@2.0.1:
+ resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
+
+ braces@3.0.2:
+ resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
+ engines: {node: '>=8'}
+
+ buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
+ buffer@5.7.1:
+ resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
+
+ bufferutil@4.0.8:
+ resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==}
+ engines: {node: '>=6.14.2'}
+
+ buildcheck@0.0.6:
+ resolution: {integrity: sha512-8f9ZJCUXyT1M35Jx7MkBgmBMo3oHTTBIPLiY9xyL0pl3T5RwcPEY8cUHr5LBNfu/fk6c2T4DJZuVM/8ZZT2D2A==}
+ engines: {node: '>=10.0.0'}
+
+ bundle-require@4.1.0:
+ resolution: {integrity: sha512-FeArRFM+ziGkRViKRnSTbHZc35dgmR9yNog05Kn0+ItI59pOAISGvnnIwW1WgFZQW59IxD9QpJnUPkdIPfZuXg==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ peerDependencies:
+ esbuild: '>=0.17'
+
+ cac@6.7.14:
+ resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
+ engines: {node: '>=8'}
+
+ callsites@3.1.0:
+ resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
+ engines: {node: '>=6'}
+
+ callsites@4.1.0:
+ resolution: {integrity: sha512-aBMbD1Xxay75ViYezwT40aQONfr+pSXTHwNKvIXhXD6+LY3F1dLIcceoC5OZKBVHbXcysz1hL9D2w0JJIMXpUw==}
+ engines: {node: '>=12.20'}
+
+ camelcase@7.0.1:
+ resolution: {integrity: sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==}
+ engines: {node: '>=14.16'}
+
+ capnp-ts@0.7.0:
+ resolution: {integrity: sha512-XKxXAC3HVPv7r674zP0VC3RTXz+/JKhfyw94ljvF80yynK6VkTnqE3jMuN8b3dUVmmc43TjyxjW4KTsmB3c86g==}
+
+ cardinal@2.1.1:
+ resolution: {integrity: sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw==}
+ hasBin: true
+
+ cbor@8.1.0:
+ resolution: {integrity: sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==}
+ engines: {node: '>=12.19'}
+
+ chai@4.4.1:
+ resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==}
+ engines: {node: '>=4'}
+
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+
+ chalk@5.3.0:
+ resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==}
+ engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
+
+ char-regex@1.0.2:
+ resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==}
+ engines: {node: '>=10'}
+
+ check-error@1.0.3:
+ resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==}
+
+ chokidar@3.6.0:
+ resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
+ engines: {node: '>= 8.10.0'}
+
+ chownr@1.1.4:
+ resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==}
+
+ chunkd@2.0.1:
+ resolution: {integrity: sha512-7d58XsFmOq0j6el67Ug9mHf9ELUXsQXYJBkyxhH/k+6Ke0qXRnv0kbemx+Twc6fRJ07C49lcbdgm9FL1Ei/6SQ==}
+
+ ci-info@3.9.0:
+ resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==}
+ engines: {node: '>=8'}
+
+ ci-parallel-vars@1.0.1:
+ resolution: {integrity: sha512-uvzpYrpmidaoxvIQHM+rKSrigjOe9feHYbw4uOI2gdfe1C3xIlxO+kVXq83WQWNniTf8bAxVpy+cQeFQsMERKg==}
+
+ clean-stack@4.2.0:
+ resolution: {integrity: sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==}
+ engines: {node: '>=12'}
+
+ clean-yaml-object@0.1.0:
+ resolution: {integrity: sha512-3yONmlN9CSAkzNwnRCiJQ7Q2xK5mWuEfL3PuTZcAUzhObbXsfsnMptJzXwz93nc5zn9V9TwCVMmV7w4xsm43dw==}
+ engines: {node: '>=0.10.0'}
+
+ cli-color@2.0.4:
+ resolution: {integrity: sha512-zlnpg0jNcibNrO7GG9IeHH7maWFeCz+Ja1wx/7tZNU5ASSSSZ+/qZciM0/LHCYxSdqv5h2sdbQ/PXYdOuetXvA==}
+ engines: {node: '>=0.10'}
+
+ cli-table3@0.6.5:
+ resolution: {integrity: sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==}
+ engines: {node: 10.* || >= 12.*}
+
+ cli-truncate@3.1.0:
+ resolution: {integrity: sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ cliui@8.0.1:
+ resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
+ engines: {node: '>=12'}
+
+ code-excerpt@4.0.0:
+ resolution: {integrity: sha512-xxodCmBen3iy2i0WtAK8FlFNrRzjUqjRsMfho58xT/wvZU1YTM3fCnRjcy1gJPMepaRlgm/0e6w8SpWHpn3/cA==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ colors@1.4.0:
+ resolution: {integrity: sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==}
+ engines: {node: '>=0.1.90'}
+
+ combined-stream@1.0.8:
+ resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
+ engines: {node: '>= 0.8'}
+
+ commander@10.0.1:
+ resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==}
+ engines: {node: '>=14'}
+
+ commander@12.1.0:
+ resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==}
+ engines: {node: '>=18'}
+
+ commander@4.1.1:
+ resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
+ engines: {node: '>= 6'}
+
+ commander@9.5.0:
+ resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==}
+ engines: {node: ^12.20.0 || >=14}
+
+ common-path-prefix@3.0.0:
+ resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==}
+
+ concat-map@0.0.1:
+ resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
+
+ concordance@5.0.4:
+ resolution: {integrity: sha512-OAcsnTEYu1ARJqWVGwf4zh4JDfHZEaSNlNccFmt8YjB2l/n19/PF2viLINHc57vO4FKIAFl2FWASIGZZWZ2Kxw==}
+ engines: {node: '>=10.18.0 <11 || >=12.14.0 <13 || >=14'}
+
+ confbox@0.1.7:
+ resolution: {integrity: sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA==}
+
+ convert-to-spaces@2.0.1:
+ resolution: {integrity: sha512-rcQ1bsQO9799wq24uE5AM2tAILy4gXGIK/njFWcVQkGNZ96edlpY+A7bjwvzjYvLDyzmG1MmMLZhpcsb+klNMQ==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ cookie@0.5.0:
+ resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==}
+ engines: {node: '>= 0.6'}
+
+ copy-anything@3.0.5:
+ resolution: {integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==}
+ engines: {node: '>=12.13'}
+
+ cpu-features@0.0.10:
+ resolution: {integrity: sha512-9IkYqtX3YHPCzoVg1Py+o9057a3i0fp7S530UWokCSaFVTc7CwXPRiOjRjBQQ18ZCNafx78YfnG+HALxtVmOGA==}
+ engines: {node: '>=10.0.0'}
+
+ cross-spawn@7.0.3:
+ resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
+ engines: {node: '>= 8'}
+
+ currently-unhandled@0.4.1:
+ resolution: {integrity: sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==}
+ engines: {node: '>=0.10.0'}
+
+ d@1.0.2:
+ resolution: {integrity: sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==}
+ engines: {node: '>=0.12'}
+
+ data-uri-to-buffer@2.0.2:
+ resolution: {integrity: sha512-ND9qDTLc6diwj+Xe5cdAgVTbLVdXbtxTJRXRhli8Mowuaan+0EJOtdqJ0QCHNSSPyoXGx9HX2/VMnKeC34AChA==}
+
+ data-uri-to-buffer@4.0.1:
+ resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==}
+ engines: {node: '>= 12'}
+
+ date-time@3.1.0:
+ resolution: {integrity: sha512-uqCUKXE5q1PNBXjPqvwhwJf9SwMoAHBgWJ6DcrnS5o+W2JOiIILl0JEdVD8SGujrNS02GGxgwAg2PN2zONgtjg==}
+ engines: {node: '>=6'}
+
+ debug@4.3.4:
+ resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ decompress-response@6.0.0:
+ resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==}
+ engines: {node: '>=10'}
+
+ deep-eql@4.1.3:
+ resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==}
+ engines: {node: '>=6'}
+
+ deep-extend@0.6.0:
+ resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==}
+ engines: {node: '>=4.0.0'}
+
+ deep-is@0.1.4:
+ resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
+
+ delayed-stream@1.0.0:
+ resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
+ engines: {node: '>=0.4.0'}
+
+ denque@2.1.0:
+ resolution: {integrity: sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==}
+ engines: {node: '>=0.10'}
+
+ detect-libc@2.0.2:
+ resolution: {integrity: sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==}
+ engines: {node: '>=8'}
+
+ detect-libc@2.0.3:
+ resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==}
+ engines: {node: '>=8'}
+
+ diff-sequences@29.6.3:
+ resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ difflib@0.2.4:
+ resolution: {integrity: sha512-9YVwmMb0wQHQNr5J9m6BSj6fk4pfGITGQOOs+D9Fl+INODWFOfvhIU1hNv6GgR1RBoC/9NJcwu77zShxV0kT7w==}
+
+ dir-glob@3.0.1:
+ resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
+ engines: {node: '>=8'}
+
+ docker-modem@3.0.8:
+ resolution: {integrity: sha512-f0ReSURdM3pcKPNS30mxOHSbaFLcknGmQjwSfmbcdOw1XWKXVhukM3NJHhr7NpY9BIyyWQb0EBo3KQvvuU5egQ==}
+ engines: {node: '>= 8.0'}
+
+ dockerode@3.3.5:
+ resolution: {integrity: sha512-/0YNa3ZDNeLr/tSckmD69+Gq+qVNhvKfAHNeZJBnp7EOP6RGKV8ORrJHkUn20So5wU+xxT7+1n5u8PjHbfjbSA==}
+ engines: {node: '>= 8.0'}
+
+ doctrine@3.0.0:
+ resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
+ engines: {node: '>=6.0.0'}
+
+ dotenv@16.4.5:
+ resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==}
+ engines: {node: '>=12'}
+
+ dreamopt@0.8.0:
+ resolution: {integrity: sha512-vyJTp8+mC+G+5dfgsY+r3ckxlz+QMX40VjPQsZc5gxVAxLmi64TBoVkP54A/pRAXMXsbu2GMMBrZPxNv23waMg==}
+ engines: {node: '>=0.4.0'}
+
+ drizzle-kit@0.21.2:
+ resolution: {integrity: sha512-U87IhZyCt/9d0ZT/Na3KFJVY31tSxtTx/n9UMcWFpW/5c2Ede39xiCG5efNV/0iimsv97UIRtDI0ldLBW5lbcg==}
+ hasBin: true
+
+ drizzle-orm@0.32.0-85c8008:
+ resolution: {integrity: sha512-gHLqGZz0eqAvSw4vq46sHRV8qLHxrbuCVlwaVZ1t4ntyH8csyCKEXTWO78cBJwYUpz7BCSzqVX+5ZYa/QM+/Gw==}
+ peerDependencies:
+ '@aws-sdk/client-rds-data': '>=3'
+ '@cloudflare/workers-types': '>=3'
+ '@electric-sql/pglite': '>=0.1.1'
+ '@libsql/client': '*'
+ '@neondatabase/serverless': '>=0.1'
+ '@op-engineering/op-sqlite': '>=2'
+ '@opentelemetry/api': ^1.4.1
+ '@planetscale/database': '>=1'
+ '@tidbcloud/serverless': '*'
+ '@types/better-sqlite3': '*'
+ '@types/pg': '*'
+ '@types/react': '>=18'
+ '@types/sql.js': '*'
+ '@vercel/postgres': '>=0.8.0'
+ '@xata.io/client': '*'
+ better-sqlite3: '>=7'
+ bun-types: '*'
+ expo-sqlite: '>=13.2.0'
+ knex: '*'
+ kysely: '*'
+ mysql2: '>=2'
+ pg: '>=8'
+ postgres: '>=3'
+ react: '>=18'
+ sql.js: '>=1'
+ sqlite3: '>=5'
+ peerDependenciesMeta:
+ '@aws-sdk/client-rds-data':
+ optional: true
+ '@cloudflare/workers-types':
+ optional: true
+ '@electric-sql/pglite':
+ optional: true
+ '@libsql/client':
+ optional: true
+ '@neondatabase/serverless':
+ optional: true
+ '@op-engineering/op-sqlite':
+ optional: true
+ '@opentelemetry/api':
+ optional: true
+ '@planetscale/database':
+ optional: true
+ '@tidbcloud/serverless':
+ optional: true
+ '@types/better-sqlite3':
+ optional: true
+ '@types/pg':
+ optional: true
+ '@types/react':
+ optional: true
+ '@types/sql.js':
+ optional: true
+ '@vercel/postgres':
+ optional: true
+ '@xata.io/client':
+ optional: true
+ better-sqlite3:
+ optional: true
+ bun-types:
+ optional: true
+ expo-sqlite:
+ optional: true
+ knex:
+ optional: true
+ kysely:
+ optional: true
+ mysql2:
+ optional: true
+ pg:
+ optional: true
+ postgres:
+ optional: true
+ react:
+ optional: true
+ sql.js:
+ optional: true
+ sqlite3:
+ optional: true
+
+ duplexer@0.1.2:
+ resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==}
+
+ eastasianwidth@0.2.0:
+ resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
+
+ emittery@1.0.3:
+ resolution: {integrity: sha512-tJdCJitoy2lrC2ldJcqN4vkqJ00lT+tOWNT1hBJjO/3FDMJa5TTIiYGCKGkn/WfCyOzUMObeohbVTj00fhiLiA==}
+ engines: {node: '>=14.16'}
+
+ emoji-regex@8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+
+ emoji-regex@9.2.2:
+ resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
+
+ emojilib@2.4.0:
+ resolution: {integrity: sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw==}
+
+ end-of-stream@1.4.4:
+ resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==}
+
+ env-paths@3.0.0:
+ resolution: {integrity: sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ es5-ext@0.10.64:
+ resolution: {integrity: sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==}
+ engines: {node: '>=0.10'}
+
+ es6-iterator@2.0.3:
+ resolution: {integrity: sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==}
+
+ es6-symbol@3.1.4:
+ resolution: {integrity: sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==}
+ engines: {node: '>=0.12'}
+
+ es6-weak-map@2.0.3:
+ resolution: {integrity: sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==}
+
+ esbuild-android-64@0.14.54:
+ resolution: {integrity: sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [android]
+
+ esbuild-android-arm64@0.14.54:
+ resolution: {integrity: sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [android]
+
+ esbuild-darwin-64@0.14.54:
+ resolution: {integrity: sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [darwin]
+
+ esbuild-darwin-arm64@0.14.54:
+ resolution: {integrity: sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [darwin]
+
+ esbuild-freebsd-64@0.14.54:
+ resolution: {integrity: sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [freebsd]
+
+ esbuild-freebsd-arm64@0.14.54:
+ resolution: {integrity: sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [freebsd]
+
+ esbuild-linux-32@0.14.54:
+ resolution: {integrity: sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [linux]
+
+ esbuild-linux-64@0.14.54:
+ resolution: {integrity: sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [linux]
+
+ esbuild-linux-arm64@0.14.54:
+ resolution: {integrity: sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [linux]
+
+ esbuild-linux-arm@0.14.54:
+ resolution: {integrity: sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [linux]
+
+ esbuild-linux-mips64le@0.14.54:
+ resolution: {integrity: sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw==}
+ engines: {node: '>=12'}
+ cpu: [mips64el]
+ os: [linux]
+
+ esbuild-linux-ppc64le@0.14.54:
+ resolution: {integrity: sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ==}
+ engines: {node: '>=12'}
+ cpu: [ppc64]
+ os: [linux]
+
+ esbuild-linux-riscv64@0.14.54:
+ resolution: {integrity: sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg==}
+ engines: {node: '>=12'}
+ cpu: [riscv64]
+ os: [linux]
+
+ esbuild-linux-s390x@0.14.54:
+ resolution: {integrity: sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA==}
+ engines: {node: '>=12'}
+ cpu: [s390x]
+ os: [linux]
+
+ esbuild-netbsd-64@0.14.54:
+ resolution: {integrity: sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [netbsd]
+
+ esbuild-node-externals@1.13.1:
+ resolution: {integrity: sha512-ho4Lokc6iMB1lWbb2tWJ6otien+3Kfoaxe0fy7NUNgVuLnfmlW+GRINftTVUGtTVY/dapuwUu/CvFylYNwzkMA==}
+ engines: {node: '>=12'}
+ peerDependencies:
+ esbuild: 0.12 - 0.21
+
+ esbuild-openbsd-64@0.14.54:
+ resolution: {integrity: sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [openbsd]
+
+ esbuild-register@3.5.0:
+ resolution: {integrity: sha512-+4G/XmakeBAsvJuDugJvtyF1x+XJT4FMocynNpxrvEBViirpfUn2PgNpCHedfWhF4WokNsO/OvMKrmJOIJsI5A==}
+ peerDependencies:
+ esbuild: '>=0.12 <1'
+
+ esbuild-sunos-64@0.14.54:
+ resolution: {integrity: sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [sunos]
+
+ esbuild-windows-32@0.14.54:
+ resolution: {integrity: sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [win32]
+
+ esbuild-windows-64@0.14.54:
+ resolution: {integrity: sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [win32]
+
+ esbuild-windows-arm64@0.14.54:
+ resolution: {integrity: sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [win32]
+
+ esbuild@0.14.54:
+ resolution: {integrity: sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA==}
+ engines: {node: '>=12'}
+ hasBin: true
+
+ esbuild@0.17.19:
+ resolution: {integrity: sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==}
+ engines: {node: '>=12'}
+ hasBin: true
+
+ esbuild@0.18.20:
+ resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==}
+ engines: {node: '>=12'}
+ hasBin: true
+
+ esbuild@0.19.12:
+ resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==}
+ engines: {node: '>=12'}
+ hasBin: true
+
+ esbuild@0.20.2:
+ resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==}
+ engines: {node: '>=12'}
+ hasBin: true
+
+ escalade@3.1.2:
+ resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==}
+ engines: {node: '>=6'}
+
+ escape-string-regexp@2.0.0:
+ resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==}
+ engines: {node: '>=8'}
+
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
+ escape-string-regexp@5.0.0:
+ resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
+ engines: {node: '>=12'}
+
+ eslint-config-prettier@9.1.0:
+ resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==}
+ hasBin: true
+ peerDependencies:
+ eslint: '>=7.0.0'
+
+ eslint-plugin-prettier@5.1.3:
+ resolution: {integrity: sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==}
+ engines: {node: ^14.18.0 || >=16.0.0}
+ peerDependencies:
+ '@types/eslint': '>=8.0.0'
+ eslint: '>=8.0.0'
+ eslint-config-prettier: '*'
+ prettier: '>=3.0.0'
+ peerDependenciesMeta:
+ '@types/eslint':
+ optional: true
+ eslint-config-prettier:
+ optional: true
+
+ eslint-scope@7.2.2:
+ resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+
+ eslint-visitor-keys@3.4.3:
+ resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+
+ eslint@8.57.0:
+ resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ hasBin: true
+
+ esniff@2.0.1:
+ resolution: {integrity: sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==}
+ engines: {node: '>=0.10'}
+
+ espree@9.6.1:
+ resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+
+ esprima@4.0.1:
+ resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
+ engines: {node: '>=4'}
+ hasBin: true
+
+ esquery@1.5.0:
+ resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==}
+ engines: {node: '>=0.10'}
+
+ esrecurse@4.3.0:
+ resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
+ engines: {node: '>=4.0'}
+
+ estraverse@5.3.0:
+ resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
+ engines: {node: '>=4.0'}
+
+ estree-walker@0.6.1:
+ resolution: {integrity: sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==}
+
+ estree-walker@3.0.3:
+ resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
+
+ esutils@2.0.3:
+ resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
+ engines: {node: '>=0.10.0'}
+
+ event-emitter@0.3.5:
+ resolution: {integrity: sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==}
+
+ event-stream@3.3.4:
+ resolution: {integrity: sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==}
+
+ execa@5.1.1:
+ resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==}
+ engines: {node: '>=10'}
+
+ execa@8.0.1:
+ resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==}
+ engines: {node: '>=16.17'}
+
+ exit-hook@2.2.1:
+ resolution: {integrity: sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==}
+ engines: {node: '>=6'}
+
+ expand-template@2.0.3:
+ resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==}
+ engines: {node: '>=6'}
+
+ ext@1.7.0:
+ resolution: {integrity: sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==}
+
+ fast-deep-equal@3.1.3:
+ resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
+
+ fast-diff@1.3.0:
+ resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==}
+
+ fast-glob@3.3.2:
+ resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==}
+ engines: {node: '>=8.6.0'}
+
+ fast-json-stable-stringify@2.1.0:
+ resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
+
+ fast-levenshtein@2.0.6:
+ resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
+
+ fast-xml-parser@4.2.5:
+ resolution: {integrity: sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==}
+ hasBin: true
+
+ fastq@1.17.1:
+ resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==}
+
+ fetch-blob@3.2.0:
+ resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==}
+ engines: {node: ^12.20 || >= 14.13}
+
+ fflate@0.8.2:
+ resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==}
+
+ figures@5.0.0:
+ resolution: {integrity: sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg==}
+ engines: {node: '>=14'}
+
+ file-entry-cache@6.0.1:
+ resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==}
+ engines: {node: ^10.12.0 || >=12.0.0}
+
+ file-uri-to-path@1.0.0:
+ resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
+
+ fill-range@7.1.1:
+ resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
+ engines: {node: '>=8'}
+
+ find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+
+ find-up@6.3.0:
+ resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ flat-cache@3.2.0:
+ resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==}
+ engines: {node: ^10.12.0 || >=12.0.0}
+
+ flatted@3.3.1:
+ resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==}
+
+ foreground-child@3.1.1:
+ resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==}
+ engines: {node: '>=14'}
+
+ form-data@4.0.0:
+ resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==}
+ engines: {node: '>= 6'}
+
+ formdata-polyfill@4.0.10:
+ resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==}
+ engines: {node: '>=12.20.0'}
+
+ from@0.1.7:
+ resolution: {integrity: sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==}
+
+ fs-constants@1.0.0:
+ resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==}
+
+ fs-extra@11.2.0:
+ resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==}
+ engines: {node: '>=14.14'}
+
+ fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ function-bind@1.1.2:
+ resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
+
+ fx@34.0.0:
+ resolution: {integrity: sha512-/fZih3/WLsrtlaj2mahjWxAmyuikmcl3D5kKPqLtFmEilLsy9wp0+/vEmfvYXXhwJc+ajtCFDCf+yttXmPMHSQ==}
+ hasBin: true
+
+ generate-function@2.3.1:
+ resolution: {integrity: sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==}
+
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
+ get-func-name@2.0.2:
+ resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
+
+ get-port@6.1.2:
+ resolution: {integrity: sha512-BrGGraKm2uPqurfGVj/z97/zv8dPleC6x9JBNRTrDNtCkkRF4rPwrQXFgL7+I+q8QSdU4ntLQX2D7KIxSy8nGw==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ get-source@2.0.12:
+ resolution: {integrity: sha512-X5+4+iD+HoSeEED+uwrQ07BOQr0kEDFMVqqpBuI+RaZBpBpHCuXxo70bjar6f0b0u/DQJsJ7ssurpP0V60Az+w==}
+
+ get-stream@6.0.1:
+ resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
+ engines: {node: '>=10'}
+
+ get-stream@8.0.1:
+ resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==}
+ engines: {node: '>=16'}
+
+ get-tsconfig@4.7.5:
+ resolution: {integrity: sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==}
+
+ github-from-package@0.0.0:
+ resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==}
+
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+
+ glob-parent@6.0.2:
+ resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
+ engines: {node: '>=10.13.0'}
+
+ glob-to-regexp@0.4.1:
+ resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==}
+
+ glob@10.3.15:
+ resolution: {integrity: sha512-0c6RlJt1TICLyvJYIApxb8GsXoai0KUP7AxKKAtsYXdgJR1mGEUa7DgwShbdk1nly0PYoZj01xd4hzbq3fsjpw==}
+ engines: {node: '>=16 || 14 >=14.18'}
+ hasBin: true
+
+ glob@7.2.3:
+ resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
+
+ glob@8.1.0:
+ resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==}
+ engines: {node: '>=12'}
+
+ globals@13.24.0:
+ resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==}
+ engines: {node: '>=8'}
+
+ globby@11.1.0:
+ resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
+ engines: {node: '>=10'}
+
+ globby@13.2.2:
+ resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ globrex@0.1.2:
+ resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==}
+
+ graceful-fs@4.2.11:
+ resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
+
+ graphemer@1.4.0:
+ resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
+
+ hanji@0.0.5:
+ resolution: {integrity: sha512-Abxw1Lq+TnYiL4BueXqMau222fPSPMFtya8HdpWsz/xVAhifXou71mPh/kY2+08RgFcVccjG3uZHs6K5HAe3zw==}
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ hasown@2.0.2:
+ resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
+ engines: {node: '>= 0.4'}
+
+ heap@0.2.7:
+ resolution: {integrity: sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==}
+
+ hono@4.3.9:
+ resolution: {integrity: sha512-6c5LVE23HnIS8iBhY+XPmYJlPeeClznOi7mBNsAsJCgxo8Ciz75LTjqRUf5wv4RYq8kL+1KPLUZHCtKmbZssNg==}
+ engines: {node: '>=16.0.0'}
+
+ human-signals@2.1.0:
+ resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==}
+ engines: {node: '>=10.17.0'}
+
+ human-signals@5.0.0:
+ resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==}
+ engines: {node: '>=16.17.0'}
+
+ iconv-lite@0.6.3:
+ resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
+ engines: {node: '>=0.10.0'}
+
+ ieee754@1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+
+ ignore-by-default@2.1.0:
+ resolution: {integrity: sha512-yiWd4GVmJp0Q6ghmM2B/V3oZGRmjrKLXvHR3TE1nfoXsmoggllfZUQe74EN0fJdPFZu2NIvNdrMMLm3OsV7Ohw==}
+ engines: {node: '>=10 <11 || >=12 <13 || >=14'}
+
+ ignore@5.3.1:
+ resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==}
+ engines: {node: '>= 4'}
+
+ import-fresh@3.3.0:
+ resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
+ engines: {node: '>=6'}
+
+ imurmurhash@0.1.4:
+ resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
+ engines: {node: '>=0.8.19'}
+
+ indent-string@5.0.0:
+ resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==}
+ engines: {node: '>=12'}
+
+ inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ ini@1.3.8:
+ resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==}
+
+ irregular-plurals@3.5.0:
+ resolution: {integrity: sha512-1ANGLZ+Nkv1ptFb2pa8oG8Lem4krflKuX/gINiHJHjJUKaJHk/SXk5x6K3J+39/p0h1RQ2saROclJJ+QLvETCQ==}
+ engines: {node: '>=8'}
+
+ is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+
+ is-core-module@2.13.1:
+ resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==}
+
+ is-error@2.2.2:
+ resolution: {integrity: sha512-IOQqts/aHWbiisY5DuPJQ0gcbvaLFCa7fBa9xoLfxBZvQ+ZI/Zh9xoI7Gk+G64N0FdK4AbibytHht2tWgpJWLg==}
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ is-fullwidth-code-point@4.0.0:
+ resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==}
+ engines: {node: '>=12'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-path-inside@3.0.3:
+ resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
+ engines: {node: '>=8'}
+
+ is-plain-object@5.0.0:
+ resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==}
+ engines: {node: '>=0.10.0'}
+
+ is-promise@2.2.2:
+ resolution: {integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==}
+
+ is-promise@4.0.0:
+ resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==}
+
+ is-property@1.0.2:
+ resolution: {integrity: sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==}
+
+ is-stream@2.0.1:
+ resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}
+ engines: {node: '>=8'}
+
+ is-stream@3.0.0:
+ resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ is-unicode-supported@1.3.0:
+ resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==}
+ engines: {node: '>=12'}
+
+ is-what@4.1.16:
+ resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==}
+ engines: {node: '>=12.13'}
+
+ isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ jackspeak@2.3.6:
+ resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==}
+ engines: {node: '>=14'}
+
+ joycon@3.1.1:
+ resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==}
+ engines: {node: '>=10'}
+
+ js-base64@3.7.7:
+ resolution: {integrity: sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==}
+
+ js-string-escape@1.0.1:
+ resolution: {integrity: sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg==}
+ engines: {node: '>= 0.8'}
+
+ js-tokens@9.0.0:
+ resolution: {integrity: sha512-WriZw1luRMlmV3LGJaR6QOJjWwgLUTf89OwT2lUOyjX2dJGBwgmIkbcz+7WFZjrZM635JOIR517++e/67CP9dQ==}
+
+ js-yaml@3.14.1:
+ resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==}
+ hasBin: true
+
+ js-yaml@4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ hasBin: true
+
+ json-buffer@3.0.1:
+ resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
+
+ json-diff@0.9.0:
+ resolution: {integrity: sha512-cVnggDrVkAAA3OvFfHpFEhOnmcsUpleEKq4d4O8sQWWSH40MBrWstKigVB1kGrgLWzuom+7rRdaCsnBD6VyObQ==}
+ hasBin: true
+
+ json-diff@1.0.6:
+ resolution: {integrity: sha512-tcFIPRdlc35YkYdGxcamJjllUhXWv4n2rK9oJ2RsAzV4FBkuV4ojKEDgcZ+kpKxDmJKv+PFK65+1tVVOnSeEqA==}
+ hasBin: true
+
+ json-schema-traverse@0.4.1:
+ resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
+
+ json-stable-stringify-without-jsonify@1.0.1:
+ resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
+
+ jsonfile@6.1.0:
+ resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==}
+
+ keyv@4.5.4:
+ resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
+
+ levn@0.4.1:
+ resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
+ engines: {node: '>= 0.8.0'}
+
+ libsql@0.2.0:
+ resolution: {integrity: sha512-ELBRqhpJx5Dap0187zKQnntZyk4EjlDHSrjIVL8t+fQ5e8IxbQTeYgZgigMjB1EvrETdkm0Y0VxBGhzPQ+t0Jg==}
+ cpu: [x64, arm64]
+ os: [darwin, linux, win32]
+
+ lilconfig@3.1.1:
+ resolution: {integrity: sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==}
+ engines: {node: '>=14'}
+
+ lines-and-columns@1.2.4:
+ resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
+
+ load-json-file@7.0.1:
+ resolution: {integrity: sha512-Gnxj3ev3mB5TkVBGad0JM6dmLiQL+o0t23JPBZ9sd+yvSLk05mFoqKBw5N8gbbkU4TNXyqCgIrl/VM17OgUIgQ==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ load-tsconfig@0.2.5:
+ resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ local-pkg@0.5.0:
+ resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==}
+ engines: {node: '>=14'}
+
+ locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+
+ locate-path@7.2.0:
+ resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ lodash.merge@4.6.2:
+ resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
+
+ lodash.sortby@4.7.0:
+ resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==}
+
+ lodash.throttle@4.1.1:
+ resolution: {integrity: sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==}
+
+ lodash@4.17.21:
+ resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
+
+ long@4.0.0:
+ resolution: {integrity: sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==}
+
+ loupe@2.3.7:
+ resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==}
+
+ lru-cache@10.2.2:
+ resolution: {integrity: sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==}
+ engines: {node: 14 || >=16.14}
+
+ lru-cache@6.0.0:
+ resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
+ engines: {node: '>=10'}
+
+ lru-cache@7.18.3:
+ resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==}
+ engines: {node: '>=12'}
+
+ lru-queue@0.1.0:
+ resolution: {integrity: sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==}
+
+ magic-string@0.25.9:
+ resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==}
+
+ magic-string@0.30.10:
+ resolution: {integrity: sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==}
+
+ map-age-cleaner@0.1.3:
+ resolution: {integrity: sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==}
+ engines: {node: '>=6'}
+
+ map-stream@0.1.0:
+ resolution: {integrity: sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==}
+
+ marked-terminal@6.2.0:
+ resolution: {integrity: sha512-ubWhwcBFHnXsjYNsu+Wndpg0zhY4CahSpPlA70PlO0rR9r2sZpkyU+rkCsOWH+KMEkx847UpALON+HWgxowFtw==}
+ engines: {node: '>=16.0.0'}
+ peerDependencies:
+ marked: '>=1 <12'
+
+ marked@9.1.6:
+ resolution: {integrity: sha512-jcByLnIFkd5gSXZmjNvS1TlmRhCXZjIzHYlaGkPlLIekG55JDR2Z4va9tZwCiP+/RDERiNhMOFu01xd6O5ct1Q==}
+ engines: {node: '>= 16'}
+ hasBin: true
+
+ matcher@5.0.0:
+ resolution: {integrity: sha512-s2EMBOWtXFc8dgqvoAzKJXxNHibcdJMV0gwqKUaw9E2JBJuGUK7DrNKrA6g/i+v72TT16+6sVm5mS3thaMLQUw==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ md5-hex@3.0.1:
+ resolution: {integrity: sha512-BUiRtTtV39LIJwinWBjqVsU9xhdnz7/i889V859IBFpuqGAj6LuOvHv5XLbgZ2R7ptJoJaEcxkv88/h25T7Ciw==}
+ engines: {node: '>=8'}
+
+ mem@9.0.2:
+ resolution: {integrity: sha512-F2t4YIv9XQUBHt6AOJ0y7lSmP1+cY7Fm1DRh9GClTGzKST7UWLMx6ly9WZdLH/G/ppM5RL4MlQfRT71ri9t19A==}
+ engines: {node: '>=12.20'}
+
+ memoizee@0.4.15:
+ resolution: {integrity: sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==}
+
+ merge-stream@2.0.0:
+ resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
+
+ merge2@1.4.1:
+ resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
+ engines: {node: '>= 8'}
+
+ micromatch@4.0.5:
+ resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
+ engines: {node: '>=8.6'}
+
+ mime-db@1.52.0:
+ resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
+ engines: {node: '>= 0.6'}
+
+ mime-types@2.1.35:
+ resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
+ engines: {node: '>= 0.6'}
+
+ mime@3.0.0:
+ resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==}
+ engines: {node: '>=10.0.0'}
+ hasBin: true
+
+ mimic-fn@2.1.0:
+ resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
+ engines: {node: '>=6'}
+
+ mimic-fn@4.0.0:
+ resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==}
+ engines: {node: '>=12'}
+
+ mimic-response@3.1.0:
+ resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==}
+ engines: {node: '>=10'}
+
+ miniflare@3.20240512.0:
+ resolution: {integrity: sha512-X0PlKR0AROKpxFoJNmRtCMIuJxj+ngEcyTOlEokj2rAQ0TBwUhB4/1uiPvdI6ofW5NugPOD1uomAv+gLjwsLDQ==}
+ engines: {node: '>=16.13'}
+ hasBin: true
+
+ minimatch@3.1.2:
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+
+ minimatch@5.1.6:
+ resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==}
+ engines: {node: '>=10'}
+
+ minimatch@7.4.6:
+ resolution: {integrity: sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==}
+ engines: {node: '>=10'}
+
+ minimatch@9.0.4:
+ resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==}
+ engines: {node: '>=16 || 14 >=14.17'}
+
+ minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+
+ minipass@7.1.1:
+ resolution: {integrity: sha512-UZ7eQ+h8ywIRAW1hIEl2AqdwzJucU/Kp59+8kkZeSvafXhZjul247BvIJjEVFVeON6d7lM46XX1HXCduKAS8VA==}
+ engines: {node: '>=16 || 14 >=14.17'}
+
+ mkdirp-classic@0.5.3:
+ resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==}
+
+ mlly@1.7.0:
+ resolution: {integrity: sha512-U9SDaXGEREBYQgfejV97coK0UL1r+qnF2SyO9A3qcI8MzKnsIFKHNVEkrDyNncQTKQQumsasmeq84eNMdBfsNQ==}
+
+ ms@2.1.2:
+ resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ mustache@4.2.0:
+ resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==}
+ hasBin: true
+
+ mysql2@2.3.3:
+ resolution: {integrity: sha512-wxJUev6LgMSgACDkb/InIFxDprRa6T95+VEoR+xPvtngtccNH2dGjEB/fVZ8yg1gWv1510c9CvXuJHi5zUm0ZA==}
+ engines: {node: '>= 8.0'}
+
+ mz@2.7.0:
+ resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==}
+
+ named-placeholders@1.1.3:
+ resolution: {integrity: sha512-eLoBxg6wE/rZkJPhU/xRX1WTpkFEwDJEN96oxFrTsqBdbT5ec295Q+CoHrL9IT0DipqKhmGcaZmwOt8OON5x1w==}
+ engines: {node: '>=12.0.0'}
+
+ nan@2.19.0:
+ resolution: {integrity: sha512-nO1xXxfh/RWNxfd/XPfbIfFk5vgLsAxUR9y5O0cHMJu/AW9U95JLXqthYHjEp+8gQ5p96K9jUp8nbVOxCdRbtw==}
+
+ nanoid@3.3.7:
+ resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+
+ napi-build-utils@1.0.2:
+ resolution: {integrity: sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==}
+
+ natural-compare@1.4.0:
+ resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
+
+ next-tick@1.1.0:
+ resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==}
+
+ node-abi@3.62.0:
+ resolution: {integrity: sha512-CPMcGa+y33xuL1E0TcNIu4YyaZCxnnvkVaEXrsosR3FxN+fV8xvb7Mzpb7IgKler10qeMkE6+Dp8qJhpzdq35g==}
+ engines: {node: '>=10'}
+
+ node-domexception@1.0.0:
+ resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==}
+ engines: {node: '>=10.5.0'}
+
+ node-emoji@2.1.3:
+ resolution: {integrity: sha512-E2WEOVsgs7O16zsURJ/eH8BqhF029wGpEOnv7Urwdo2wmQanOACwJQh0devF9D9RhoZru0+9JXIS0dBXIAz+lA==}
+ engines: {node: '>=18'}
+
+ node-fetch@2.7.0:
+ resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
+ engines: {node: 4.x || >=6.0.0}
+ peerDependencies:
+ encoding: ^0.1.0
+ peerDependenciesMeta:
+ encoding:
+ optional: true
+
+ node-fetch@3.3.1:
+ resolution: {integrity: sha512-cRVc/kyto/7E5shrWca1Wsea4y6tL9iYJE5FBCius3JQfb/4P4I295PfhgbJQBLTx6lATE4z+wK0rPM4VS2uow==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ node-fetch@3.3.2:
+ resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ node-forge@1.3.1:
+ resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==}
+ engines: {node: '>= 6.13.0'}
+
+ node-gyp-build@4.8.1:
+ resolution: {integrity: sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==}
+ hasBin: true
+
+ nofilter@3.1.0:
+ resolution: {integrity: sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==}
+ engines: {node: '>=12.19'}
+
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ npm-run-path@4.0.1:
+ resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==}
+ engines: {node: '>=8'}
+
+ npm-run-path@5.3.0:
+ resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ object-assign@4.1.1:
+ resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
+ engines: {node: '>=0.10.0'}
+
+ obuf@1.1.2:
+ resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
+ onetime@5.1.2:
+ resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
+ engines: {node: '>=6'}
+
+ onetime@6.0.0:
+ resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==}
+ engines: {node: '>=12'}
+
+ optionator@0.9.4:
+ resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
+ engines: {node: '>= 0.8.0'}
+
+ p-defer@1.0.0:
+ resolution: {integrity: sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==}
+ engines: {node: '>=4'}
+
+ p-event@5.0.1:
+ resolution: {integrity: sha512-dd589iCQ7m1L0bmC5NLlVYfy3TbBEsMUfWx9PyAgPeIcFZ/E2yaTZ4Rz4MiBmmJShviiftHVXOqfnfzJ6kyMrQ==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
+ p-limit@4.0.0:
+ resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ p-limit@5.0.0:
+ resolution: {integrity: sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==}
+ engines: {node: '>=18'}
+
+ p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+
+ p-locate@6.0.0:
+ resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ p-map@5.5.0:
+ resolution: {integrity: sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg==}
+ engines: {node: '>=12'}
+
+ p-timeout@5.1.0:
+ resolution: {integrity: sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==}
+ engines: {node: '>=12'}
+
+ parent-module@1.0.1:
+ resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
+ engines: {node: '>=6'}
+
+ parse-ms@3.0.0:
+ resolution: {integrity: sha512-Tpb8Z7r7XbbtBTrM9UhpkzzaMrqA2VXMT3YChzYltwV3P3pM6t8wl7TvpMnSTosz1aQAdVib7kdoys7vYOPerw==}
+ engines: {node: '>=12'}
+
+ path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+
+ path-exists@5.0.0:
+ resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ path-is-absolute@1.0.1:
+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+ engines: {node: '>=0.10.0'}
+
+ path-key@3.1.1:
+ resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
+ engines: {node: '>=8'}
+
+ path-key@4.0.0:
+ resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==}
+ engines: {node: '>=12'}
+
+ path-parse@1.0.7:
+ resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
+
+ path-scurry@1.11.1:
+ resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
+ engines: {node: '>=16 || 14 >=14.18'}
+
+ path-to-regexp@6.2.2:
+ resolution: {integrity: sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw==}
+
+ path-type@4.0.0:
+ resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
+ engines: {node: '>=8'}
+
+ pathe@1.1.2:
+ resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==}
+
+ pathval@1.1.1:
+ resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
+
+ pause-stream@0.0.11:
+ resolution: {integrity: sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==}
+
+ pg-cloudflare@1.1.1:
+ resolution: {integrity: sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q==}
+
+ pg-connection-string@2.6.4:
+ resolution: {integrity: sha512-v+Z7W/0EO707aNMaAEfiGnGL9sxxumwLl2fJvCQtMn9Fxsg+lPpPkdcyBSv/KFgpGdYkMfn+EI1Or2EHjpgLCA==}
+
+ pg-int8@1.0.1:
+ resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==}
+ engines: {node: '>=4.0.0'}
+
+ pg-numeric@1.0.2:
+ resolution: {integrity: sha512-BM/Thnrw5jm2kKLE5uJkXqqExRUY/toLHda65XgFTBTFYZyopbKjBe29Ii3RbkvlsMoFwD+tHeGaCjjv0gHlyw==}
+ engines: {node: '>=4'}
+
+ pg-pool@3.6.2:
+ resolution: {integrity: sha512-Htjbg8BlwXqSBQ9V8Vjtc+vzf/6fVUuak/3/XXKA9oxZprwW3IMDQTGHP+KDmVL7rtd+R1QjbnCFPuTHm3G4hg==}
+ peerDependencies:
+ pg: '>=8.0'
+
+ pg-protocol@1.6.1:
+ resolution: {integrity: sha512-jPIlvgoD63hrEuihvIg+tJhoGjUsLPn6poJY9N5CnlPd91c2T18T/9zBtLxZSb1EhYxBRoZJtzScCaWlYLtktg==}
+
+ pg-types@2.2.0:
+ resolution: {integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==}
+ engines: {node: '>=4'}
+
+ pg-types@4.0.2:
+ resolution: {integrity: sha512-cRL3JpS3lKMGsKaWndugWQoLOCoP+Cic8oseVcbr0qhPzYD5DWXK+RZ9LY9wxRf7RQia4SCwQlXk0q6FCPrVng==}
+ engines: {node: '>=10'}
+
+ pg@8.11.5:
+ resolution: {integrity: sha512-jqgNHSKL5cbDjFlHyYsCXmQDrfIX/3RsNwYqpd4N0Kt8niLuNoRNH+aazv6cOd43gPh9Y4DjQCtb+X0MH0Hvnw==}
+ engines: {node: '>= 8.0.0'}
+ peerDependencies:
+ pg-native: '>=3.0.1'
+ peerDependenciesMeta:
+ pg-native:
+ optional: true
+
+ pgpass@1.0.5:
+ resolution: {integrity: sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==}
+
+ picocolors@1.0.1:
+ resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==}
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ pirates@4.0.6:
+ resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==}
+ engines: {node: '>= 6'}
+
+ pkg-conf@4.0.0:
+ resolution: {integrity: sha512-7dmgi4UY4qk+4mj5Cd8v/GExPo0K+SlY+hulOSdfZ/T6jVH6//y7NtzZo5WrfhDBxuQ0jCa7fLZmNaNh7EWL/w==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ pkg-types@1.1.1:
+ resolution: {integrity: sha512-ko14TjmDuQJ14zsotODv7dBlwxKhUKQEhuhmbqo1uCi9BB0Z2alo/wAXg6q1dTR5TyuqYyWhjtfe/Tsh+X28jQ==}
+
+ plur@5.1.0:
+ resolution: {integrity: sha512-VP/72JeXqak2KiOzjgKtQen5y3IZHn+9GOuLDafPv0eXa47xq0At93XahYBs26MsifCQ4enGKwbjBTKgb9QJXg==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ pluralize@8.0.0:
+ resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==}
+ engines: {node: '>=4'}
+
+ postcss-load-config@4.0.2:
+ resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==}
+ engines: {node: '>= 14'}
+ peerDependencies:
+ postcss: '>=8.0.9'
+ ts-node: '>=9.0.0'
+ peerDependenciesMeta:
+ postcss:
+ optional: true
+ ts-node:
+ optional: true
+
+ postcss@8.4.38:
+ resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==}
+ engines: {node: ^10 || ^12 || >=14}
+
+ postgres-array@2.0.0:
+ resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==}
+ engines: {node: '>=4'}
+
+ postgres-array@3.0.2:
+ resolution: {integrity: sha512-6faShkdFugNQCLwucjPcY5ARoW1SlbnrZjmGl0IrrqewpvxvhSLHimCVzqeuULCbG0fQv7Dtk1yDbG3xv7Veog==}
+ engines: {node: '>=12'}
+
+ postgres-bytea@1.0.0:
+ resolution: {integrity: sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==}
+ engines: {node: '>=0.10.0'}
+
+ postgres-bytea@3.0.0:
+ resolution: {integrity: sha512-CNd4jim9RFPkObHSjVHlVrxoVQXz7quwNFpz7RY1okNNme49+sVyiTvTRobiLV548Hx/hb1BG+iE7h9493WzFw==}
+ engines: {node: '>= 6'}
+
+ postgres-date@1.0.7:
+ resolution: {integrity: sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==}
+ engines: {node: '>=0.10.0'}
+
+ postgres-date@2.1.0:
+ resolution: {integrity: sha512-K7Juri8gtgXVcDfZttFKVmhglp7epKb1K4pgrkLxehjqkrgPhfG6OO8LHLkfaqkbpjNRnra018XwAr1yQFWGcA==}
+ engines: {node: '>=12'}
+
+ postgres-interval@1.2.0:
+ resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==}
+ engines: {node: '>=0.10.0'}
+
+ postgres-interval@3.0.0:
+ resolution: {integrity: sha512-BSNDnbyZCXSxgA+1f5UU2GmwhoI0aU5yMxRGO8CdFEcY2BQF9xm/7MqKnYoM1nJDk8nONNWDk9WeSmePFhQdlw==}
+ engines: {node: '>=12'}
+
+ postgres-range@1.1.4:
+ resolution: {integrity: sha512-i/hbxIE9803Alj/6ytL7UHQxRvZkI9O4Sy+J3HGc4F4oo/2eQAjTSNJ0bfxyse3bH0nuVesCk+3IRLaMtG3H6w==}
+
+ postgres@3.4.4:
+ resolution: {integrity: sha512-IbyN+9KslkqcXa8AO9fxpk97PA4pzewvpi2B3Dwy9u4zpV32QicaEdgmF3eSQUzdRk7ttDHQejNgAEr4XoeH4A==}
+ engines: {node: '>=12'}
+
+ prebuild-install@7.1.2:
+ resolution: {integrity: sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==}
+ engines: {node: '>=10'}
+ hasBin: true
+
+ prelude-ls@1.2.1:
+ resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
+ engines: {node: '>= 0.8.0'}
+
+ prettier-linter-helpers@1.0.0:
+ resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==}
+ engines: {node: '>=6.0.0'}
+
+ prettier@2.8.8:
+ resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==}
+ engines: {node: '>=10.13.0'}
+ hasBin: true
+
+ pretty-format@29.7.0:
+ resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ pretty-ms@8.0.0:
+ resolution: {integrity: sha512-ASJqOugUF1bbzI35STMBUpZqdfYKlJugy6JBziGi2EE+AL5JPJGSzvpeVXojxrr0ViUYoToUjb5kjSEGf7Y83Q==}
+ engines: {node: '>=14.16'}
+
+ printable-characters@1.0.42:
+ resolution: {integrity: sha512-dKp+C4iXWK4vVYZmYSd0KBH5F/h1HoZRsbJ82AVKRO3PEo8L4lBS/vLwhVtpwwuYcoIsVY+1JYKR268yn480uQ==}
+
+ ps-tree@1.2.0:
+ resolution: {integrity: sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==}
+ engines: {node: '>= 0.10'}
+ hasBin: true
+
+ pump@3.0.0:
+ resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==}
+
+ punycode@2.3.1:
+ resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
+ engines: {node: '>=6'}
+
+ queue-microtask@1.2.3:
+ resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
+
+ rc@1.2.8:
+ resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==}
+ hasBin: true
+
+ react-is@18.3.1:
+ resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==}
+
+ readable-stream@3.6.2:
+ resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
+ engines: {node: '>= 6'}
+
+ readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+
+ redeyed@2.1.1:
+ resolution: {integrity: sha512-FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ==}
+
+ require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+
+ resolve-cwd@3.0.0:
+ resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==}
+ engines: {node: '>=8'}
+
+ resolve-from@4.0.0:
+ resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
+ engines: {node: '>=4'}
+
+ resolve-from@5.0.0:
+ resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==}
+ engines: {node: '>=8'}
+
+ resolve-pkg-maps@1.0.0:
+ resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}
+
+ resolve.exports@2.0.2:
+ resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==}
+ engines: {node: '>=10'}
+
+ resolve@1.22.8:
+ resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==}
+ hasBin: true
+
+ reusify@1.0.4:
+ resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
+ engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
+
+ rimraf@3.0.2:
+ resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
+ hasBin: true
+
+ rollup-plugin-inject@3.0.2:
+ resolution: {integrity: sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w==}
+ deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-inject.
+
+ rollup-plugin-node-polyfills@0.2.1:
+ resolution: {integrity: sha512-4kCrKPTJ6sK4/gLL/U5QzVT8cxJcofO0OU74tnB19F40cmuAKSzH5/siithxlofFEjwvw1YAhPmbvGNA6jEroA==}
+
+ rollup-pluginutils@2.8.2:
+ resolution: {integrity: sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==}
+
+ rollup@4.17.2:
+ resolution: {integrity: sha512-/9ClTJPByC0U4zNLowV1tMBe8yMEAxewtR3cUNX5BoEpGH3dQEWpJLr6CLp0fPdYRF/fzVOgvDb1zXuakwF5kQ==}
+ engines: {node: '>=18.0.0', npm: '>=8.0.0'}
+ hasBin: true
+
+ run-parallel@1.2.0:
+ resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
+
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ safer-buffer@2.1.2:
+ resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
+
+ selfsigned@2.4.1:
+ resolution: {integrity: sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==}
+ engines: {node: '>=10'}
+
+ semver@7.6.2:
+ resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==}
+ engines: {node: '>=10'}
+ hasBin: true
+
+ seq-queue@0.0.5:
+ resolution: {integrity: sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==}
+
+ serialize-error@7.0.1:
+ resolution: {integrity: sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==}
+ engines: {node: '>=10'}
+
+ shebang-command@2.0.0:
+ resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
+ engines: {node: '>=8'}
+
+ shebang-regex@3.0.0:
+ resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
+ engines: {node: '>=8'}
+
+ siginfo@2.0.0:
+ resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==}
+
+ signal-exit@3.0.7:
+ resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
+
+ signal-exit@4.1.0:
+ resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
+ engines: {node: '>=14'}
+
+ simple-concat@1.0.1:
+ resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==}
+
+ simple-get@4.0.1:
+ resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==}
+
+ sisteransi@1.0.5:
+ resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==}
+
+ skin-tone@2.0.0:
+ resolution: {integrity: sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA==}
+ engines: {node: '>=8'}
+
+ slash@3.0.0:
+ resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
+ engines: {node: '>=8'}
+
+ slash@4.0.0:
+ resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==}
+ engines: {node: '>=12'}
+
+ slice-ansi@5.0.0:
+ resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==}
+ engines: {node: '>=12'}
+
+ source-map-js@1.2.0:
+ resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==}
+ engines: {node: '>=0.10.0'}
+
+ source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ source-map@0.8.0-beta.0:
+ resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==}
+ engines: {node: '>= 8'}
+
+ sourcemap-codec@1.4.8:
+ resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==}
+ deprecated: Please use @jridgewell/sourcemap-codec instead
+
+ split-ca@1.0.1:
+ resolution: {integrity: sha512-Q5thBSxp5t8WPTTJQS59LrGqOZqOsrhDGDVm8azCqIBjSBd7nd9o2PM+mDulQQkh8h//4U6hFZnc/mul8t5pWQ==}
+
+ split2@4.2.0:
+ resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==}
+ engines: {node: '>= 10.x'}
+
+ split@0.3.3:
+ resolution: {integrity: sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==}
+
+ sprintf-js@1.0.3:
+ resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
+
+ sqlstring@2.3.3:
+ resolution: {integrity: sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==}
+ engines: {node: '>= 0.6'}
+
+ ssh2@1.15.0:
+ resolution: {integrity: sha512-C0PHgX4h6lBxYx7hcXwu3QWdh4tg6tZZsTfXcdvc5caW/EMxaB4H9dWsl7qk+F7LAW762hp8VbXOX7x4xUYvEw==}
+ engines: {node: '>=10.16.0'}
+
+ stack-utils@2.0.6:
+ resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==}
+ engines: {node: '>=10'}
+
+ stackback@0.0.2:
+ resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==}
+
+ stacktracey@2.1.8:
+ resolution: {integrity: sha512-Kpij9riA+UNg7TnphqjH7/CzctQ/owJGNbFkfEeve4Z4uxT5+JapVLFXcsurIfN34gnTWZNJ/f7NMG0E8JDzTw==}
+
+ std-env@3.7.0:
+ resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==}
+
+ stoppable@1.1.0:
+ resolution: {integrity: sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==}
+ engines: {node: '>=4', npm: '>=6'}
+
+ stream-combiner@0.0.4:
+ resolution: {integrity: sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==}
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ string-width@5.1.2:
+ resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
+ engines: {node: '>=12'}
+
+ string_decoder@1.3.0:
+ resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ strip-ansi@7.1.0:
+ resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
+ engines: {node: '>=12'}
+
+ strip-final-newline@2.0.0:
+ resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==}
+ engines: {node: '>=6'}
+
+ strip-final-newline@3.0.0:
+ resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==}
+ engines: {node: '>=12'}
+
+ strip-json-comments@2.0.1:
+ resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==}
+ engines: {node: '>=0.10.0'}
+
+ strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+
+ strip-literal@2.1.0:
+ resolution: {integrity: sha512-Op+UycaUt/8FbN/Z2TWPBLge3jWrP3xj10f3fnYxf052bKuS3EKs1ZQcVGjnEMdsNVAM+plXRdmjrZ/KgG3Skw==}
+
+ strnum@1.0.5:
+ resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==}
+
+ sucrase@3.35.0:
+ resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==}
+ engines: {node: '>=16 || 14 >=14.17'}
+ hasBin: true
+
+ superjson@2.2.1:
+ resolution: {integrity: sha512-8iGv75BYOa0xRJHK5vRLEjE2H/i4lulTjzpUXic3Eg8akftYjkmQDa8JARQ42rlczXyFR3IeRoeFCc7RxHsYZA==}
+ engines: {node: '>=16'}
+
+ supertap@3.0.1:
+ resolution: {integrity: sha512-u1ZpIBCawJnO+0QePsEiOknOfCRq0yERxiAchT0i4li0WHNUJbf0evXXSXOcCAR4M8iMDoajXYmstm/qO81Isw==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+
+ supports-hyperlinks@3.0.0:
+ resolution: {integrity: sha512-QBDPHyPQDRTy9ku4URNGY5Lah8PAaXs6tAAwp55sL5WCsSW7GIfdf6W5ixfziW+t7wh3GVvHyHHyQ1ESsoRvaA==}
+ engines: {node: '>=14.18'}
+
+ supports-preserve-symlinks-flag@1.0.0:
+ resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
+ engines: {node: '>= 0.4'}
+
+ synckit@0.8.8:
+ resolution: {integrity: sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==}
+ engines: {node: ^14.18.0 || >=16.0.0}
+
+ tar-fs@2.0.1:
+ resolution: {integrity: sha512-6tzWDMeroL87uF/+lin46k+Q+46rAJ0SyPGz7OW7wTgblI273hsBqk2C1j0/xNadNLKDTUL9BukSjB7cwgmlPA==}
+
+ tar-fs@2.1.1:
+ resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==}
+
+ tar-stream@2.2.0:
+ resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==}
+ engines: {node: '>=6'}
+
+ temp-dir@3.0.0:
+ resolution: {integrity: sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==}
+ engines: {node: '>=14.16'}
+
+ text-table@0.2.0:
+ resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
+
+ thenify-all@1.6.0:
+ resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==}
+ engines: {node: '>=0.8'}
+
+ thenify@3.3.1:
+ resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==}
+
+ through@2.3.8:
+ resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
+
+ time-zone@1.0.0:
+ resolution: {integrity: sha512-TIsDdtKo6+XrPtiTm1ssmMngN1sAhyKnTO2kunQWqNPWIVvCm15Wmw4SWInwTVgJ5u/Tr04+8Ei9TNcw4x4ONA==}
+ engines: {node: '>=4'}
+
+ timers-ext@0.1.7:
+ resolution: {integrity: sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==}
+
+ tinybench@2.8.0:
+ resolution: {integrity: sha512-1/eK7zUnIklz4JUUlL+658n58XO2hHLQfSk1Zf2LKieUjxidN16eKFEoDEfjHc3ohofSSqK3X5yO6VGb6iW8Lw==}
+
+ tinypool@0.8.4:
+ resolution: {integrity: sha512-i11VH5gS6IFeLY3gMBQ00/MmLncVP7JLXOw1vlgkytLmJK7QnEr7NXf0LBdxfmNPAeyetukOk0bOYrJrFGjYJQ==}
+ engines: {node: '>=14.0.0'}
+
+ tinyspy@2.2.1:
+ resolution: {integrity: sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==}
+ engines: {node: '>=14.0.0'}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ tr46@0.0.3:
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+
+ tr46@1.0.1:
+ resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==}
+
+ tree-kill@1.2.2:
+ resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==}
+ hasBin: true
+
+ ts-api-utils@1.3.0:
+ resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==}
+ engines: {node: '>=16'}
+ peerDependencies:
+ typescript: '>=4.2.0'
+
+ ts-expose-internals-conditionally@1.0.0-empty.0:
+ resolution: {integrity: sha512-F8m9NOF6ZhdOClDVdlM8gj3fDCav4ZIFSs/EI3ksQbAAXVSCN/Jh5OCJDDZWBuBy9psFc6jULGDlPwjMYMhJDw==}
+
+ ts-interface-checker@0.1.13:
+ resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}
+
+ tsconfck@3.0.3:
+ resolution: {integrity: sha512-4t0noZX9t6GcPTfBAbIbbIU4pfpCwh0ueq3S4O/5qXI1VwK1outmxhe9dOiEWqMz3MW2LKgDTpqWV+37IWuVbA==}
+ engines: {node: ^18 || >=20}
+ hasBin: true
+ peerDependencies:
+ typescript: ^5.0.0
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ tslib@1.14.1:
+ resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
+
+ tslib@2.6.2:
+ resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==}
+
+ tsup@8.0.2:
+ resolution: {integrity: sha512-NY8xtQXdH7hDUAZwcQdY/Vzlw9johQsaqf7iwZ6g1DOUlFYQ5/AtVAjTvihhEyeRlGo4dLRVHtrRaL35M1daqQ==}
+ engines: {node: '>=18'}
+ hasBin: true
+ peerDependencies:
+ '@microsoft/api-extractor': ^7.36.0
+ '@swc/core': ^1
+ postcss: ^8.4.12
+ typescript: '>=4.5.0'
+ peerDependenciesMeta:
+ '@microsoft/api-extractor':
+ optional: true
+ '@swc/core':
+ optional: true
+ postcss:
+ optional: true
+ typescript:
+ optional: true
+
+ tsx@3.14.0:
+ resolution: {integrity: sha512-xHtFaKtHxM9LOklMmJdI3BEnQq/D5F73Of2E1GDrITi9sgoVkvIsrQUTY1G8FlmGtA+awCI4EBlTRRYxkL2sRg==}
+ hasBin: true
+
+ tunnel-agent@0.6.0:
+ resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==}
+
+ tweetnacl@0.14.5:
+ resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==}
+
+ type-check@0.4.0:
+ resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
+ engines: {node: '>= 0.8.0'}
+
+ type-detect@4.0.8:
+ resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==}
+ engines: {node: '>=4'}
+
+ type-fest@0.13.1:
+ resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==}
+ engines: {node: '>=10'}
+
+ type-fest@0.20.2:
+ resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==}
+ engines: {node: '>=10'}
+
+ type@2.7.2:
+ resolution: {integrity: sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==}
+
+ typescript@5.3.3:
+ resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==}
+ engines: {node: '>=14.17'}
+ hasBin: true
+
+ typescript@5.4.5:
+ resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==}
+ engines: {node: '>=14.17'}
+ hasBin: true
+
+ ufo@1.5.3:
+ resolution: {integrity: sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==}
+
+ undici-types@5.26.5:
+ resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
+
+ undici@5.28.4:
+ resolution: {integrity: sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==}
+ engines: {node: '>=14.0'}
+
+ unicode-emoji-modifier-base@1.0.0:
+ resolution: {integrity: sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g==}
+ engines: {node: '>=4'}
+
+ universalify@2.0.1:
+ resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==}
+ engines: {node: '>= 10.0.0'}
+
+ uri-js@4.4.1:
+ resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
+
+ utf-8-validate@6.0.3:
+ resolution: {integrity: sha512-uIuGf9TWQ/y+0Lp+KGZCMuJWc3N9BHA+l/UmHd/oUHwJJDeysyTRxNQVkbzsIWfGFbRe3OcgML/i0mvVRPOyDA==}
+ engines: {node: '>=6.14.2'}
+
+ util-deprecate@1.0.2:
+ resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
+
+ uuid@9.0.1:
+ resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==}
+ hasBin: true
+
+ validate-npm-package-name@5.0.1:
+ resolution: {integrity: sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+ vite-node@1.6.0:
+ resolution: {integrity: sha512-de6HJgzC+TFzOu0NTC4RAIsyf/DY/ibWDYQUcuEA84EMHhcefTUGkjFHKKEJhQN4A+6I0u++kr3l36ZF2d7XRw==}
+ engines: {node: ^18.0.0 || >=20.0.0}
+ hasBin: true
+
+ vite-tsconfig-paths@4.3.2:
+ resolution: {integrity: sha512-0Vd/a6po6Q+86rPlntHye7F31zA2URZMbH8M3saAZ/xR9QoGN/L21bxEGfXdWmFdNkqPpRdxFT7nmNe12e9/uA==}
+ peerDependencies:
+ vite: '*'
+ peerDependenciesMeta:
+ vite:
+ optional: true
+
+ vite@5.2.11:
+ resolution: {integrity: sha512-HndV31LWW05i1BLPMUCE1B9E9GFbOu1MbenhS58FuK6owSO5qHm7GiCotrNY1YE5rMeQSFBGmT5ZaLEjFizgiQ==}
+ engines: {node: ^18.0.0 || >=20.0.0}
+ hasBin: true
+ peerDependencies:
+ '@types/node': ^18.0.0 || >=20.0.0
+ less: '*'
+ lightningcss: ^1.21.0
+ sass: '*'
+ stylus: '*'
+ sugarss: '*'
+ terser: ^5.4.0
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+ less:
+ optional: true
+ lightningcss:
+ optional: true
+ sass:
+ optional: true
+ stylus:
+ optional: true
+ sugarss:
+ optional: true
+ terser:
+ optional: true
+
+ vitest@1.6.0:
+ resolution: {integrity: sha512-H5r/dN06swuFnzNFhq/dnz37bPXnq8xB2xB5JOVk8K09rUtoeNN+LHWkoQ0A/i3hvbUKKcCei9KpbxqHMLhLLA==}
+ engines: {node: ^18.0.0 || >=20.0.0}
+ hasBin: true
+ peerDependencies:
+ '@edge-runtime/vm': '*'
+ '@types/node': ^18.0.0 || >=20.0.0
+ '@vitest/browser': 1.6.0
+ '@vitest/ui': 1.6.0
+ happy-dom: '*'
+ jsdom: '*'
+ peerDependenciesMeta:
+ '@edge-runtime/vm':
+ optional: true
+ '@types/node':
+ optional: true
+ '@vitest/browser':
+ optional: true
+ '@vitest/ui':
+ optional: true
+ happy-dom:
+ optional: true
+ jsdom:
+ optional: true
+
+ web-streams-polyfill@3.3.3:
+ resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==}
+ engines: {node: '>= 8'}
+
+ webidl-conversions@3.0.1:
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+
+ webidl-conversions@4.0.2:
+ resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==}
+
+ webpod@0.0.2:
+ resolution: {integrity: sha512-cSwwQIeg8v4i3p4ajHhwgR7N6VyxAf+KYSSsY6Pd3aETE+xEU4vbitz7qQkB0I321xnhDdgtxuiSfk5r/FVtjg==}
+ hasBin: true
+
+ well-known-symbols@2.0.0:
+ resolution: {integrity: sha512-ZMjC3ho+KXo0BfJb7JgtQ5IBuvnShdlACNkKkdsqBmYw3bPAaJfPeYUo6tLUaT5tG/Gkh7xkpBhKRQ9e7pyg9Q==}
+ engines: {node: '>=6'}
+
+ whatwg-url@5.0.0:
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+
+ whatwg-url@7.1.0:
+ resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==}
+
+ which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+
+ which@3.0.1:
+ resolution: {integrity: sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+ hasBin: true
+
+ why-is-node-running@2.2.2:
+ resolution: {integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ word-wrap@1.2.5:
+ resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
+ engines: {node: '>=0.10.0'}
+
+ wordwrap@1.0.0:
+ resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==}
+
+ workerd@1.20240512.0:
+ resolution: {integrity: sha512-VUBmR1PscAPHEE0OF/G2K7/H1gnr9aDWWZzdkIgWfNKkv8dKFCT75H+GJtUHjfwqz3rYCzaNZmatSXOpLGpF8A==}
+ engines: {node: '>=16'}
+ hasBin: true
+
+ wrangler@3.57.0:
+ resolution: {integrity: sha512-izK3AZtlFoTq8N0EZjLOQ7hqwsjaXCc1cbNKuhsLJjDX1jB1YZBDPhIhtXL4VVzkJAcH+0Zw2gguOePFCHNaxw==}
+ engines: {node: '>=16.17.0'}
+ hasBin: true
+ peerDependencies:
+ '@cloudflare/workers-types': ^4.20240512.0
+ peerDependenciesMeta:
+ '@cloudflare/workers-types':
+ optional: true
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrap-ansi@8.1.0:
+ resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
+ engines: {node: '>=12'}
+
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ write-file-atomic@5.0.1:
+ resolution: {integrity: sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+ ws@8.14.2:
+ resolution: {integrity: sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ ws@8.17.0:
+ resolution: {integrity: sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ xtend@4.0.2:
+ resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
+ engines: {node: '>=0.4'}
+
+ xxhash-wasm@1.0.2:
+ resolution: {integrity: sha512-ibF0Or+FivM9lNrg+HGJfVX8WJqgo+kCLDc4vx6xMeTce7Aj+DLttKbxxRR/gNLSAelRc1omAPlJ77N/Jem07A==}
+
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+
+ yallist@4.0.0:
+ resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
+
+ yaml@2.4.2:
+ resolution: {integrity: sha512-B3VqDZ+JAg1nZpaEmWtTXUlBneoGx6CPM9b0TENK6aoSu5t73dItudwdgmi6tHlIZZId4dZ9skcAQ2UbcyAeVA==}
+ engines: {node: '>= 14'}
+ hasBin: true
+
+ yargs-parser@21.1.1:
+ resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
+ engines: {node: '>=12'}
+
+ yargs@17.7.2:
+ resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
+ engines: {node: '>=12'}
+
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
+ yocto-queue@1.0.0:
+ resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==}
+ engines: {node: '>=12.20'}
+
+ youch@3.3.3:
+ resolution: {integrity: sha512-qSFXUk3UZBLfggAW3dJKg0BMblG5biqSF8M34E06o5CSsZtH92u9Hqmj2RzGiHDi64fhe83+4tENFP2DB6t6ZA==}
+
+ zod@3.23.8:
+ resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==}
+
+ zx@7.2.3:
+ resolution: {integrity: sha512-QODu38nLlYXg/B/Gw7ZKiZrvPkEsjPN3LQ5JFXM7h0JvwhEdPNNl+4Ao1y4+o3CLNiDUNcwzQYZ4/Ko7kKzCMA==}
+ engines: {node: '>= 16.0.0'}
+ hasBin: true
+
+snapshots:
+
+ '@andrewbranch/untar.js@1.0.3': {}
+
+ '@arethetypeswrong/cli@0.15.3':
+ dependencies:
+ '@arethetypeswrong/core': 0.15.1
+ chalk: 4.1.2
+ cli-table3: 0.6.5
+ commander: 10.0.1
+ marked: 9.1.6
+ marked-terminal: 6.2.0(marked@9.1.6)
+ semver: 7.6.2
+
+ '@arethetypeswrong/core@0.15.1':
+ dependencies:
+ '@andrewbranch/untar.js': 1.0.3
+ fflate: 0.8.2
+ semver: 7.6.2
+ ts-expose-internals-conditionally: 1.0.0-empty.0
+ typescript: 5.3.3
+ validate-npm-package-name: 5.0.1
+
+ '@aws-crypto/ie11-detection@3.0.0':
+ dependencies:
+ tslib: 1.14.1
+
+ '@aws-crypto/sha256-browser@3.0.0':
+ dependencies:
+ '@aws-crypto/ie11-detection': 3.0.0
+ '@aws-crypto/sha256-js': 3.0.0
+ '@aws-crypto/supports-web-crypto': 3.0.0
+ '@aws-crypto/util': 3.0.0
+ '@aws-sdk/types': 3.577.0
+ '@aws-sdk/util-locate-window': 3.568.0
+ '@aws-sdk/util-utf8-browser': 3.259.0
+ tslib: 1.14.1
+
+ '@aws-crypto/sha256-js@3.0.0':
+ dependencies:
+ '@aws-crypto/util': 3.0.0
+ '@aws-sdk/types': 3.577.0
+ tslib: 1.14.1
+
+ '@aws-crypto/supports-web-crypto@3.0.0':
+ dependencies:
+ tslib: 1.14.1
+
+ '@aws-crypto/util@3.0.0':
+ dependencies:
+ '@aws-sdk/types': 3.577.0
+ '@aws-sdk/util-utf8-browser': 3.259.0
+ tslib: 1.14.1
+
+ '@aws-sdk/client-rds-data@3.577.0':
+ dependencies:
+ '@aws-crypto/sha256-browser': 3.0.0
+ '@aws-crypto/sha256-js': 3.0.0
+ '@aws-sdk/client-sso-oidc': 3.577.0(@aws-sdk/client-sts@3.577.0)
+ '@aws-sdk/client-sts': 3.577.0
+ '@aws-sdk/core': 3.576.0
+ '@aws-sdk/credential-provider-node': 3.577.0(@aws-sdk/client-sso-oidc@3.577.0(@aws-sdk/client-sts@3.577.0))(@aws-sdk/client-sts@3.577.0)
+ '@aws-sdk/middleware-host-header': 3.577.0
+ '@aws-sdk/middleware-logger': 3.577.0
+ '@aws-sdk/middleware-recursion-detection': 3.577.0
+ '@aws-sdk/middleware-user-agent': 3.577.0
+ '@aws-sdk/region-config-resolver': 3.577.0
+ '@aws-sdk/types': 3.577.0
+ '@aws-sdk/util-endpoints': 3.577.0
+ '@aws-sdk/util-user-agent-browser': 3.577.0
+ '@aws-sdk/util-user-agent-node': 3.577.0
+ '@smithy/config-resolver': 3.0.0
+ '@smithy/core': 2.0.1
+ '@smithy/fetch-http-handler': 3.0.1
+ '@smithy/hash-node': 3.0.0
+ '@smithy/invalid-dependency': 3.0.0
+ '@smithy/middleware-content-length': 3.0.0
+ '@smithy/middleware-endpoint': 3.0.0
+ '@smithy/middleware-retry': 3.0.1
+ '@smithy/middleware-serde': 3.0.0
+ '@smithy/middleware-stack': 3.0.0
+ '@smithy/node-config-provider': 3.0.0
+ '@smithy/node-http-handler': 3.0.0
+ '@smithy/protocol-http': 4.0.0
+ '@smithy/smithy-client': 3.0.1
+ '@smithy/types': 3.0.0
+ '@smithy/url-parser': 3.0.0
+ '@smithy/util-base64': 3.0.0
+ '@smithy/util-body-length-browser': 3.0.0
+ '@smithy/util-body-length-node': 3.0.0
+ '@smithy/util-defaults-mode-browser': 3.0.1
+ '@smithy/util-defaults-mode-node': 3.0.1
+ '@smithy/util-endpoints': 2.0.0
+ '@smithy/util-middleware': 3.0.0
+ '@smithy/util-retry': 3.0.0
+ '@smithy/util-utf8': 3.0.0
+ tslib: 2.6.2
+ transitivePeerDependencies:
+ - aws-crt
+
+ '@aws-sdk/client-sso-oidc@3.577.0(@aws-sdk/client-sts@3.577.0)':
+ dependencies:
+ '@aws-crypto/sha256-browser': 3.0.0
+ '@aws-crypto/sha256-js': 3.0.0
+ '@aws-sdk/client-sts': 3.577.0
+ '@aws-sdk/core': 3.576.0
+ '@aws-sdk/credential-provider-node': 3.577.0(@aws-sdk/client-sso-oidc@3.577.0(@aws-sdk/client-sts@3.577.0))(@aws-sdk/client-sts@3.577.0)
+ '@aws-sdk/middleware-host-header': 3.577.0
+ '@aws-sdk/middleware-logger': 3.577.0
+ '@aws-sdk/middleware-recursion-detection': 3.577.0
+ '@aws-sdk/middleware-user-agent': 3.577.0
+ '@aws-sdk/region-config-resolver': 3.577.0
+ '@aws-sdk/types': 3.577.0
+ '@aws-sdk/util-endpoints': 3.577.0
+ '@aws-sdk/util-user-agent-browser': 3.577.0
+ '@aws-sdk/util-user-agent-node': 3.577.0
+ '@smithy/config-resolver': 3.0.0
+ '@smithy/core': 2.0.1
+ '@smithy/fetch-http-handler': 3.0.1
+ '@smithy/hash-node': 3.0.0
+ '@smithy/invalid-dependency': 3.0.0
+ '@smithy/middleware-content-length': 3.0.0
+ '@smithy/middleware-endpoint': 3.0.0
+ '@smithy/middleware-retry': 3.0.1
+ '@smithy/middleware-serde': 3.0.0
+ '@smithy/middleware-stack': 3.0.0
+ '@smithy/node-config-provider': 3.0.0
+ '@smithy/node-http-handler': 3.0.0
+ '@smithy/protocol-http': 4.0.0
+ '@smithy/smithy-client': 3.0.1
+ '@smithy/types': 3.0.0
+ '@smithy/url-parser': 3.0.0
+ '@smithy/util-base64': 3.0.0
+ '@smithy/util-body-length-browser': 3.0.0
+ '@smithy/util-body-length-node': 3.0.0
+ '@smithy/util-defaults-mode-browser': 3.0.1
+ '@smithy/util-defaults-mode-node': 3.0.1
+ '@smithy/util-endpoints': 2.0.0
+ '@smithy/util-middleware': 3.0.0
+ '@smithy/util-retry': 3.0.0
+ '@smithy/util-utf8': 3.0.0
+ tslib: 2.6.2
+ transitivePeerDependencies:
+ - '@aws-sdk/client-sts'
+ - aws-crt
+
+ '@aws-sdk/client-sso@3.577.0':
+ dependencies:
+ '@aws-crypto/sha256-browser': 3.0.0
+ '@aws-crypto/sha256-js': 3.0.0
+ '@aws-sdk/core': 3.576.0
+ '@aws-sdk/middleware-host-header': 3.577.0
+ '@aws-sdk/middleware-logger': 3.577.0
+ '@aws-sdk/middleware-recursion-detection': 3.577.0
+ '@aws-sdk/middleware-user-agent': 3.577.0
+ '@aws-sdk/region-config-resolver': 3.577.0
+ '@aws-sdk/types': 3.577.0
+ '@aws-sdk/util-endpoints': 3.577.0
+ '@aws-sdk/util-user-agent-browser': 3.577.0
+ '@aws-sdk/util-user-agent-node': 3.577.0
+ '@smithy/config-resolver': 3.0.0
+ '@smithy/core': 2.0.1
+ '@smithy/fetch-http-handler': 3.0.1
+ '@smithy/hash-node': 3.0.0
+ '@smithy/invalid-dependency': 3.0.0
+ '@smithy/middleware-content-length': 3.0.0
+ '@smithy/middleware-endpoint': 3.0.0
+ '@smithy/middleware-retry': 3.0.1
+ '@smithy/middleware-serde': 3.0.0
+ '@smithy/middleware-stack': 3.0.0
+ '@smithy/node-config-provider': 3.0.0
+ '@smithy/node-http-handler': 3.0.0
+ '@smithy/protocol-http': 4.0.0
+ '@smithy/smithy-client': 3.0.1
+ '@smithy/types': 3.0.0
+ '@smithy/url-parser': 3.0.0
+ '@smithy/util-base64': 3.0.0
+ '@smithy/util-body-length-browser': 3.0.0
+ '@smithy/util-body-length-node': 3.0.0
+ '@smithy/util-defaults-mode-browser': 3.0.1
+ '@smithy/util-defaults-mode-node': 3.0.1
+ '@smithy/util-endpoints': 2.0.0
+ '@smithy/util-middleware': 3.0.0
+ '@smithy/util-retry': 3.0.0
+ '@smithy/util-utf8': 3.0.0
+ tslib: 2.6.2
+ transitivePeerDependencies:
+ - aws-crt
+
+ '@aws-sdk/client-sts@3.577.0':
+ dependencies:
+ '@aws-crypto/sha256-browser': 3.0.0
+ '@aws-crypto/sha256-js': 3.0.0
+ '@aws-sdk/client-sso-oidc': 3.577.0(@aws-sdk/client-sts@3.577.0)
+ '@aws-sdk/core': 3.576.0
+ '@aws-sdk/credential-provider-node': 3.577.0(@aws-sdk/client-sso-oidc@3.577.0(@aws-sdk/client-sts@3.577.0))(@aws-sdk/client-sts@3.577.0)
+ '@aws-sdk/middleware-host-header': 3.577.0
+ '@aws-sdk/middleware-logger': 3.577.0
+ '@aws-sdk/middleware-recursion-detection': 3.577.0
+ '@aws-sdk/middleware-user-agent': 3.577.0
+ '@aws-sdk/region-config-resolver': 3.577.0
+ '@aws-sdk/types': 3.577.0
+ '@aws-sdk/util-endpoints': 3.577.0
+ '@aws-sdk/util-user-agent-browser': 3.577.0
+ '@aws-sdk/util-user-agent-node': 3.577.0
+ '@smithy/config-resolver': 3.0.0
+ '@smithy/core': 2.0.1
+ '@smithy/fetch-http-handler': 3.0.1
+ '@smithy/hash-node': 3.0.0
+ '@smithy/invalid-dependency': 3.0.0
+ '@smithy/middleware-content-length': 3.0.0
+ '@smithy/middleware-endpoint': 3.0.0
+ '@smithy/middleware-retry': 3.0.1
+ '@smithy/middleware-serde': 3.0.0
+ '@smithy/middleware-stack': 3.0.0
+ '@smithy/node-config-provider': 3.0.0
+ '@smithy/node-http-handler': 3.0.0
+ '@smithy/protocol-http': 4.0.0
+ '@smithy/smithy-client': 3.0.1
+ '@smithy/types': 3.0.0
+ '@smithy/url-parser': 3.0.0
+ '@smithy/util-base64': 3.0.0
+ '@smithy/util-body-length-browser': 3.0.0
+ '@smithy/util-body-length-node': 3.0.0
+ '@smithy/util-defaults-mode-browser': 3.0.1
+ '@smithy/util-defaults-mode-node': 3.0.1
+ '@smithy/util-endpoints': 2.0.0
+ '@smithy/util-middleware': 3.0.0
+ '@smithy/util-retry': 3.0.0
+ '@smithy/util-utf8': 3.0.0
+ tslib: 2.6.2
+ transitivePeerDependencies:
+ - aws-crt
+
+ '@aws-sdk/core@3.576.0':
+ dependencies:
+ '@smithy/core': 2.0.1
+ '@smithy/protocol-http': 4.0.0
+ '@smithy/signature-v4': 3.0.0
+ '@smithy/smithy-client': 3.0.1
+ '@smithy/types': 3.0.0
+ fast-xml-parser: 4.2.5
+ tslib: 2.6.2
+
+ '@aws-sdk/credential-provider-env@3.577.0':
+ dependencies:
+ '@aws-sdk/types': 3.577.0
+ '@smithy/property-provider': 3.0.0
+ '@smithy/types': 3.0.0
+ tslib: 2.6.2
+
+ '@aws-sdk/credential-provider-http@3.577.0':
+ dependencies:
+ '@aws-sdk/types': 3.577.0
+ '@smithy/fetch-http-handler': 3.0.1
+ '@smithy/node-http-handler': 3.0.0
+ '@smithy/property-provider': 3.0.0
+ '@smithy/protocol-http': 4.0.0
+ '@smithy/smithy-client': 3.0.1
+ '@smithy/types': 3.0.0
+ '@smithy/util-stream': 3.0.1
+ tslib: 2.6.2
+
+ '@aws-sdk/credential-provider-ini@3.577.0(@aws-sdk/client-sso-oidc@3.577.0(@aws-sdk/client-sts@3.577.0))(@aws-sdk/client-sts@3.577.0)':
+ dependencies:
+ '@aws-sdk/client-sts': 3.577.0
+ '@aws-sdk/credential-provider-env': 3.577.0
+ '@aws-sdk/credential-provider-process': 3.577.0
+ '@aws-sdk/credential-provider-sso': 3.577.0(@aws-sdk/client-sso-oidc@3.577.0(@aws-sdk/client-sts@3.577.0))
+ '@aws-sdk/credential-provider-web-identity': 3.577.0(@aws-sdk/client-sts@3.577.0)
+ '@aws-sdk/types': 3.577.0
+ '@smithy/credential-provider-imds': 3.0.0
+ '@smithy/property-provider': 3.0.0
+ '@smithy/shared-ini-file-loader': 3.0.0
+ '@smithy/types': 3.0.0
+ tslib: 2.6.2
+ transitivePeerDependencies:
+ - '@aws-sdk/client-sso-oidc'
+ - aws-crt
+
+ '@aws-sdk/credential-provider-node@3.577.0(@aws-sdk/client-sso-oidc@3.577.0(@aws-sdk/client-sts@3.577.0))(@aws-sdk/client-sts@3.577.0)':
+ dependencies:
+ '@aws-sdk/credential-provider-env': 3.577.0
+ '@aws-sdk/credential-provider-http': 3.577.0
+ '@aws-sdk/credential-provider-ini': 3.577.0(@aws-sdk/client-sso-oidc@3.577.0(@aws-sdk/client-sts@3.577.0))(@aws-sdk/client-sts@3.577.0)
+ '@aws-sdk/credential-provider-process': 3.577.0
+ '@aws-sdk/credential-provider-sso': 3.577.0(@aws-sdk/client-sso-oidc@3.577.0(@aws-sdk/client-sts@3.577.0))
+ '@aws-sdk/credential-provider-web-identity': 3.577.0(@aws-sdk/client-sts@3.577.0)
+ '@aws-sdk/types': 3.577.0
+ '@smithy/credential-provider-imds': 3.0.0
+ '@smithy/property-provider': 3.0.0
+ '@smithy/shared-ini-file-loader': 3.0.0
+ '@smithy/types': 3.0.0
+ tslib: 2.6.2
+ transitivePeerDependencies:
+ - '@aws-sdk/client-sso-oidc'
+ - '@aws-sdk/client-sts'
+ - aws-crt
+
+ '@aws-sdk/credential-provider-process@3.577.0':
+ dependencies:
+ '@aws-sdk/types': 3.577.0
+ '@smithy/property-provider': 3.0.0
+ '@smithy/shared-ini-file-loader': 3.0.0
+ '@smithy/types': 3.0.0
+ tslib: 2.6.2
+
+ '@aws-sdk/credential-provider-sso@3.577.0(@aws-sdk/client-sso-oidc@3.577.0(@aws-sdk/client-sts@3.577.0))':
+ dependencies:
+ '@aws-sdk/client-sso': 3.577.0
+ '@aws-sdk/token-providers': 3.577.0(@aws-sdk/client-sso-oidc@3.577.0(@aws-sdk/client-sts@3.577.0))
+ '@aws-sdk/types': 3.577.0
+ '@smithy/property-provider': 3.0.0
+ '@smithy/shared-ini-file-loader': 3.0.0
+ '@smithy/types': 3.0.0
+ tslib: 2.6.2
+ transitivePeerDependencies:
+ - '@aws-sdk/client-sso-oidc'
+ - aws-crt
+
+ '@aws-sdk/credential-provider-web-identity@3.577.0(@aws-sdk/client-sts@3.577.0)':
+ dependencies:
+ '@aws-sdk/client-sts': 3.577.0
+ '@aws-sdk/types': 3.577.0
+ '@smithy/property-provider': 3.0.0
+ '@smithy/types': 3.0.0
+ tslib: 2.6.2
+
+ '@aws-sdk/middleware-host-header@3.577.0':
+ dependencies:
+ '@aws-sdk/types': 3.577.0
+ '@smithy/protocol-http': 4.0.0
+ '@smithy/types': 3.0.0
+ tslib: 2.6.2
+
+ '@aws-sdk/middleware-logger@3.577.0':
+ dependencies:
+ '@aws-sdk/types': 3.577.0
+ '@smithy/types': 3.0.0
+ tslib: 2.6.2
+
+ '@aws-sdk/middleware-recursion-detection@3.577.0':
+ dependencies:
+ '@aws-sdk/types': 3.577.0
+ '@smithy/protocol-http': 4.0.0
+ '@smithy/types': 3.0.0
+ tslib: 2.6.2
+
+ '@aws-sdk/middleware-user-agent@3.577.0':
+ dependencies:
+ '@aws-sdk/types': 3.577.0
+ '@aws-sdk/util-endpoints': 3.577.0
+ '@smithy/protocol-http': 4.0.0
+ '@smithy/types': 3.0.0
+ tslib: 2.6.2
+
+ '@aws-sdk/region-config-resolver@3.577.0':
+ dependencies:
+ '@aws-sdk/types': 3.577.0
+ '@smithy/node-config-provider': 3.0.0
+ '@smithy/types': 3.0.0
+ '@smithy/util-config-provider': 3.0.0
+ '@smithy/util-middleware': 3.0.0
+ tslib: 2.6.2
+
+ '@aws-sdk/token-providers@3.577.0(@aws-sdk/client-sso-oidc@3.577.0(@aws-sdk/client-sts@3.577.0))':
+ dependencies:
+ '@aws-sdk/client-sso-oidc': 3.577.0(@aws-sdk/client-sts@3.577.0)
+ '@aws-sdk/types': 3.577.0
+ '@smithy/property-provider': 3.0.0
+ '@smithy/shared-ini-file-loader': 3.0.0
+ '@smithy/types': 3.0.0
+ tslib: 2.6.2
+
+ '@aws-sdk/types@3.577.0':
+ dependencies:
+ '@smithy/types': 3.0.0
+ tslib: 2.6.2
+
+ '@aws-sdk/util-endpoints@3.577.0':
+ dependencies:
+ '@aws-sdk/types': 3.577.0
+ '@smithy/types': 3.0.0
+ '@smithy/util-endpoints': 2.0.0
+ tslib: 2.6.2
+
+ '@aws-sdk/util-locate-window@3.568.0':
+ dependencies:
+ tslib: 2.6.2
+
+ '@aws-sdk/util-user-agent-browser@3.577.0':
+ dependencies:
+ '@aws-sdk/types': 3.577.0
+ '@smithy/types': 3.0.0
+ bowser: 2.11.0
+ tslib: 2.6.2
+
+ '@aws-sdk/util-user-agent-node@3.577.0':
+ dependencies:
+ '@aws-sdk/types': 3.577.0
+ '@smithy/node-config-provider': 3.0.0
+ '@smithy/types': 3.0.0
+ tslib: 2.6.2
+
+ '@aws-sdk/util-utf8-browser@3.259.0':
+ dependencies:
+ tslib: 2.6.2
+
+ '@balena/dockerignore@1.0.2': {}
+
+ '@cloudflare/kv-asset-handler@0.3.2':
+ dependencies:
+ mime: 3.0.0
+
+ '@cloudflare/workerd-darwin-64@1.20240512.0':
+ optional: true
+
+ '@cloudflare/workerd-darwin-arm64@1.20240512.0':
+ optional: true
+
+ '@cloudflare/workerd-linux-64@1.20240512.0':
+ optional: true
+
+ '@cloudflare/workerd-linux-arm64@1.20240512.0':
+ optional: true
+
+ '@cloudflare/workerd-windows-64@1.20240512.0':
+ optional: true
+
+ '@cloudflare/workers-types@4.20240512.0': {}
+
+ '@colors/colors@1.5.0':
+ optional: true
+
+ '@cspotcode/source-map-support@0.8.1':
+ dependencies:
+ '@jridgewell/trace-mapping': 0.3.9
+
+ '@electric-sql/pglite@0.1.5': {}
+
+ '@esbuild-kit/core-utils@3.3.2':
+ dependencies:
+ esbuild: 0.18.20
+ source-map-support: 0.5.21
+
+ '@esbuild-kit/esm-loader@2.6.5':
+ dependencies:
+ '@esbuild-kit/core-utils': 3.3.2
+ get-tsconfig: 4.7.5
+
+ '@esbuild-plugins/node-globals-polyfill@0.2.3(esbuild@0.17.19)':
+ dependencies:
+ esbuild: 0.17.19
+
+ '@esbuild-plugins/node-modules-polyfill@0.2.2(esbuild@0.17.19)':
+ dependencies:
+ esbuild: 0.17.19
+ escape-string-regexp: 4.0.0
+ rollup-plugin-node-polyfills: 0.2.1
+
+ '@esbuild/aix-ppc64@0.19.12':
+ optional: true
+
+ '@esbuild/aix-ppc64@0.20.2':
+ optional: true
+
+ '@esbuild/android-arm64@0.17.19':
+ optional: true
+
+ '@esbuild/android-arm64@0.18.20':
+ optional: true
+
+ '@esbuild/android-arm64@0.19.12':
+ optional: true
+
+ '@esbuild/android-arm64@0.20.2':
+ optional: true
+
+ '@esbuild/android-arm@0.17.19':
+ optional: true
+
+ '@esbuild/android-arm@0.18.20':
+ optional: true
+
+ '@esbuild/android-arm@0.19.12':
+ optional: true
+
+ '@esbuild/android-arm@0.20.2':
+ optional: true
+
+ '@esbuild/android-x64@0.17.19':
+ optional: true
+
+ '@esbuild/android-x64@0.18.20':
+ optional: true
+
+ '@esbuild/android-x64@0.19.12':
+ optional: true
+
+ '@esbuild/android-x64@0.20.2':
+ optional: true
+
+ '@esbuild/darwin-arm64@0.17.19':
+ optional: true
+
+ '@esbuild/darwin-arm64@0.18.20':
+ optional: true
+
+ '@esbuild/darwin-arm64@0.19.12':
+ optional: true
+
+ '@esbuild/darwin-arm64@0.20.2':
+ optional: true
+
+ '@esbuild/darwin-x64@0.17.19':
+ optional: true
+
+ '@esbuild/darwin-x64@0.18.20':
+ optional: true
+
+ '@esbuild/darwin-x64@0.19.12':
+ optional: true
+
+ '@esbuild/darwin-x64@0.20.2':
+ optional: true
+
+ '@esbuild/freebsd-arm64@0.17.19':
+ optional: true
+
+ '@esbuild/freebsd-arm64@0.18.20':
+ optional: true
+
+ '@esbuild/freebsd-arm64@0.19.12':
+ optional: true
+
+ '@esbuild/freebsd-arm64@0.20.2':
+ optional: true
+
+ '@esbuild/freebsd-x64@0.17.19':
+ optional: true
+
+ '@esbuild/freebsd-x64@0.18.20':
+ optional: true
+
+ '@esbuild/freebsd-x64@0.19.12':
+ optional: true
+
+ '@esbuild/freebsd-x64@0.20.2':
+ optional: true
+
+ '@esbuild/linux-arm64@0.17.19':
+ optional: true
+
+ '@esbuild/linux-arm64@0.18.20':
+ optional: true
+
+ '@esbuild/linux-arm64@0.19.12':
+ optional: true
+
+ '@esbuild/linux-arm64@0.20.2':
+ optional: true
+
+ '@esbuild/linux-arm@0.17.19':
+ optional: true
+
+ '@esbuild/linux-arm@0.18.20':
+ optional: true
+
+ '@esbuild/linux-arm@0.19.12':
+ optional: true
+
+ '@esbuild/linux-arm@0.20.2':
+ optional: true
+
+ '@esbuild/linux-ia32@0.17.19':
+ optional: true
+
+ '@esbuild/linux-ia32@0.18.20':
+ optional: true
+
+ '@esbuild/linux-ia32@0.19.12':
+ optional: true
+
+ '@esbuild/linux-ia32@0.20.2':
+ optional: true
+
+ '@esbuild/linux-loong64@0.14.54':
+ optional: true
+
+ '@esbuild/linux-loong64@0.17.19':
+ optional: true
+
+ '@esbuild/linux-loong64@0.18.20':
+ optional: true
+
+ '@esbuild/linux-loong64@0.19.12':
+ optional: true
+
+ '@esbuild/linux-loong64@0.20.2':
+ optional: true
+
+ '@esbuild/linux-mips64el@0.17.19':
+ optional: true
+
+ '@esbuild/linux-mips64el@0.18.20':
+ optional: true
+
+ '@esbuild/linux-mips64el@0.19.12':
+ optional: true
+
+ '@esbuild/linux-mips64el@0.20.2':
+ optional: true
+
+ '@esbuild/linux-ppc64@0.17.19':
+ optional: true
+
+ '@esbuild/linux-ppc64@0.18.20':
+ optional: true
+
+ '@esbuild/linux-ppc64@0.19.12':
+ optional: true
+
+ '@esbuild/linux-ppc64@0.20.2':
+ optional: true
+
+ '@esbuild/linux-riscv64@0.17.19':
+ optional: true
+
+ '@esbuild/linux-riscv64@0.18.20':
+ optional: true
+
+ '@esbuild/linux-riscv64@0.19.12':
+ optional: true
+
+ '@esbuild/linux-riscv64@0.20.2':
+ optional: true
+
+ '@esbuild/linux-s390x@0.17.19':
+ optional: true
+
+ '@esbuild/linux-s390x@0.18.20':
+ optional: true
+
+ '@esbuild/linux-s390x@0.19.12':
+ optional: true
+
+ '@esbuild/linux-s390x@0.20.2':
+ optional: true
+
+ '@esbuild/linux-x64@0.17.19':
+ optional: true
+
+ '@esbuild/linux-x64@0.18.20':
+ optional: true
+
+ '@esbuild/linux-x64@0.19.12':
+ optional: true
+
+ '@esbuild/linux-x64@0.20.2':
+ optional: true
+
+ '@esbuild/netbsd-x64@0.17.19':
+ optional: true
+
+ '@esbuild/netbsd-x64@0.18.20':
+ optional: true
+
+ '@esbuild/netbsd-x64@0.19.12':
+ optional: true
+
+ '@esbuild/netbsd-x64@0.20.2':
+ optional: true
+
+ '@esbuild/openbsd-x64@0.17.19':
+ optional: true
+
+ '@esbuild/openbsd-x64@0.18.20':
+ optional: true
+
+ '@esbuild/openbsd-x64@0.19.12':
+ optional: true
+
+ '@esbuild/openbsd-x64@0.20.2':
+ optional: true
+
+ '@esbuild/sunos-x64@0.17.19':
+ optional: true
+
+ '@esbuild/sunos-x64@0.18.20':
+ optional: true
+
+ '@esbuild/sunos-x64@0.19.12':
+ optional: true
+
+ '@esbuild/sunos-x64@0.20.2':
+ optional: true
+
+ '@esbuild/win32-arm64@0.17.19':
+ optional: true
+
+ '@esbuild/win32-arm64@0.18.20':
+ optional: true
+
+ '@esbuild/win32-arm64@0.19.12':
+ optional: true
+
+ '@esbuild/win32-arm64@0.20.2':
+ optional: true
+
+ '@esbuild/win32-ia32@0.17.19':
+ optional: true
+
+ '@esbuild/win32-ia32@0.18.20':
+ optional: true
+
+ '@esbuild/win32-ia32@0.19.12':
+ optional: true
+
+ '@esbuild/win32-ia32@0.20.2':
+ optional: true
+
+ '@esbuild/win32-x64@0.17.19':
+ optional: true
+
+ '@esbuild/win32-x64@0.18.20':
+ optional: true
+
+ '@esbuild/win32-x64@0.19.12':
+ optional: true
+
+ '@esbuild/win32-x64@0.20.2':
+ optional: true
+
+ '@eslint-community/eslint-utils@4.4.0(eslint@8.57.0)':
+ dependencies:
+ eslint: 8.57.0
+ eslint-visitor-keys: 3.4.3
+
+ '@eslint-community/regexpp@4.10.0': {}
+
+ '@eslint/eslintrc@2.1.4':
+ dependencies:
+ ajv: 6.12.6
+ debug: 4.3.4
+ espree: 9.6.1
+ globals: 13.24.0
+ ignore: 5.3.1
+ import-fresh: 3.3.0
+ js-yaml: 4.1.0
+ minimatch: 3.1.2
+ strip-json-comments: 3.1.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@eslint/js@8.57.0': {}
+
+ '@ewoudenberg/difflib@0.1.0':
+ dependencies:
+ heap: 0.2.7
+
+ '@fastify/busboy@2.1.1': {}
+
+ '@hono/node-server@1.11.1': {}
+
+ '@hono/zod-validator@0.2.1(hono@4.3.9)(zod@3.23.8)':
+ dependencies:
+ hono: 4.3.9
+ zod: 3.23.8
+
+ '@humanwhocodes/config-array@0.11.14':
+ dependencies:
+ '@humanwhocodes/object-schema': 2.0.3
+ debug: 4.3.4
+ minimatch: 3.1.2
+ transitivePeerDependencies:
+ - supports-color
+
+ '@humanwhocodes/module-importer@1.0.1': {}
+
+ '@humanwhocodes/object-schema@2.0.3': {}
+
+ '@isaacs/cliui@8.0.2':
+ dependencies:
+ string-width: 5.1.2
+ string-width-cjs: string-width@4.2.3
+ strip-ansi: 7.1.0
+ strip-ansi-cjs: strip-ansi@6.0.1
+ wrap-ansi: 8.1.0
+ wrap-ansi-cjs: wrap-ansi@7.0.0
+
+ '@jest/schemas@29.6.3':
+ dependencies:
+ '@sinclair/typebox': 0.27.8
+
+ '@jridgewell/gen-mapping@0.3.5':
+ dependencies:
+ '@jridgewell/set-array': 1.2.1
+ '@jridgewell/sourcemap-codec': 1.4.15
+ '@jridgewell/trace-mapping': 0.3.25
+
+ '@jridgewell/resolve-uri@3.1.2': {}
+
+ '@jridgewell/set-array@1.2.1': {}
+
+ '@jridgewell/sourcemap-codec@1.4.15': {}
+
+ '@jridgewell/trace-mapping@0.3.25':
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.2
+ '@jridgewell/sourcemap-codec': 1.4.15
+
+ '@jridgewell/trace-mapping@0.3.9':
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.2
+ '@jridgewell/sourcemap-codec': 1.4.15
+
+ '@libsql/client@0.4.3(bufferutil@4.0.8)(utf-8-validate@6.0.3)':
+ dependencies:
+ '@libsql/core': 0.4.3
+ '@libsql/hrana-client': 0.5.6(bufferutil@4.0.8)(utf-8-validate@6.0.3)
+ js-base64: 3.7.7
+ optionalDependencies:
+ libsql: 0.2.0
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ '@libsql/core@0.4.3':
+ dependencies:
+ js-base64: 3.7.7
+
+ '@libsql/darwin-arm64@0.2.0':
+ optional: true
+
+ '@libsql/darwin-x64@0.2.0':
+ optional: true
+
+ '@libsql/hrana-client@0.5.6(bufferutil@4.0.8)(utf-8-validate@6.0.3)':
+ dependencies:
+ '@libsql/isomorphic-fetch': 0.1.12
+ '@libsql/isomorphic-ws': 0.1.5(bufferutil@4.0.8)(utf-8-validate@6.0.3)
+ js-base64: 3.7.7
+ node-fetch: 3.3.2
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
+ '@libsql/isomorphic-fetch@0.1.12':
+ dependencies:
+ '@types/node-fetch': 2.6.11
+ node-fetch: 2.7.0
+ transitivePeerDependencies:
+ - encoding
+
+ '@libsql/isomorphic-ws@0.1.5(bufferutil@4.0.8)(utf-8-validate@6.0.3)':
+ dependencies:
+ '@types/ws': 8.5.10
+ ws: 8.17.0(bufferutil@4.0.8)(utf-8-validate@6.0.3)
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ '@libsql/linux-arm64-gnu@0.2.0':
+ optional: true
+
+ '@libsql/linux-arm64-musl@0.2.0':
+ optional: true
+
+ '@libsql/linux-x64-gnu@0.2.0':
+ optional: true
+
+ '@libsql/linux-x64-musl@0.2.0':
+ optional: true
+
+ '@libsql/win32-x64-msvc@0.2.0':
+ optional: true
+
+ '@neon-rs/load@0.0.4':
+ optional: true
+
+ '@neondatabase/serverless@0.7.2':
+ dependencies:
+ '@types/pg': 8.6.6
+
+ '@neondatabase/serverless@0.9.3':
+ dependencies:
+ '@types/pg': 8.11.6
+
+ '@nodelib/fs.scandir@2.1.5':
+ dependencies:
+ '@nodelib/fs.stat': 2.0.5
+ run-parallel: 1.2.0
+
+ '@nodelib/fs.stat@2.0.5': {}
+
+ '@nodelib/fs.walk@1.2.8':
+ dependencies:
+ '@nodelib/fs.scandir': 2.1.5
+ fastq: 1.17.1
+
+ '@originjs/vite-plugin-commonjs@1.0.3':
+ dependencies:
+ esbuild: 0.14.54
+
+ '@pkgjs/parseargs@0.11.0':
+ optional: true
+
+ '@pkgr/core@0.1.1': {}
+
+ '@planetscale/database@1.18.0': {}
+
+ '@rollup/rollup-android-arm-eabi@4.17.2':
+ optional: true
+
+ '@rollup/rollup-android-arm64@4.17.2':
+ optional: true
+
+ '@rollup/rollup-darwin-arm64@4.17.2':
+ optional: true
+
+ '@rollup/rollup-darwin-x64@4.17.2':
+ optional: true
+
+ '@rollup/rollup-linux-arm-gnueabihf@4.17.2':
+ optional: true
+
+ '@rollup/rollup-linux-arm-musleabihf@4.17.2':
+ optional: true
+
+ '@rollup/rollup-linux-arm64-gnu@4.17.2':
+ optional: true
+
+ '@rollup/rollup-linux-arm64-musl@4.17.2':
+ optional: true
+
+ '@rollup/rollup-linux-powerpc64le-gnu@4.17.2':
+ optional: true
+
+ '@rollup/rollup-linux-riscv64-gnu@4.17.2':
+ optional: true
+
+ '@rollup/rollup-linux-s390x-gnu@4.17.2':
+ optional: true
+
+ '@rollup/rollup-linux-x64-gnu@4.17.2':
+ optional: true
+
+ '@rollup/rollup-linux-x64-musl@4.17.2':
+ optional: true
+
+ '@rollup/rollup-win32-arm64-msvc@4.17.2':
+ optional: true
+
+ '@rollup/rollup-win32-ia32-msvc@4.17.2':
+ optional: true
+
+ '@rollup/rollup-win32-x64-msvc@4.17.2':
+ optional: true
+
+ '@sinclair/typebox@0.27.8': {}
+
+ '@sindresorhus/is@4.6.0': {}
+
+ '@smithy/abort-controller@3.0.0':
+ dependencies:
+ '@smithy/types': 3.0.0
+ tslib: 2.6.2
+
+ '@smithy/config-resolver@3.0.0':
+ dependencies:
+ '@smithy/node-config-provider': 3.0.0
+ '@smithy/types': 3.0.0
+ '@smithy/util-config-provider': 3.0.0
+ '@smithy/util-middleware': 3.0.0
+ tslib: 2.6.2
+
+ '@smithy/core@2.0.1':
+ dependencies:
+ '@smithy/middleware-endpoint': 3.0.0
+ '@smithy/middleware-retry': 3.0.1
+ '@smithy/middleware-serde': 3.0.0
+ '@smithy/protocol-http': 4.0.0
+ '@smithy/smithy-client': 3.0.1
+ '@smithy/types': 3.0.0
+ '@smithy/util-middleware': 3.0.0
+ tslib: 2.6.2
+
+ '@smithy/credential-provider-imds@3.0.0':
+ dependencies:
+ '@smithy/node-config-provider': 3.0.0
+ '@smithy/property-provider': 3.0.0
+ '@smithy/types': 3.0.0
+ '@smithy/url-parser': 3.0.0
+ tslib: 2.6.2
+
+ '@smithy/fetch-http-handler@3.0.1':
+ dependencies:
+ '@smithy/protocol-http': 4.0.0
+ '@smithy/querystring-builder': 3.0.0
+ '@smithy/types': 3.0.0
+ '@smithy/util-base64': 3.0.0
+ tslib: 2.6.2
+
+ '@smithy/hash-node@3.0.0':
+ dependencies:
+ '@smithy/types': 3.0.0
+ '@smithy/util-buffer-from': 3.0.0
+ '@smithy/util-utf8': 3.0.0
+ tslib: 2.6.2
+
+ '@smithy/invalid-dependency@3.0.0':
+ dependencies:
+ '@smithy/types': 3.0.0
+ tslib: 2.6.2
+
+ '@smithy/is-array-buffer@3.0.0':
+ dependencies:
+ tslib: 2.6.2
+
+ '@smithy/middleware-content-length@3.0.0':
+ dependencies:
+ '@smithy/protocol-http': 4.0.0
+ '@smithy/types': 3.0.0
+ tslib: 2.6.2
+
+ '@smithy/middleware-endpoint@3.0.0':
+ dependencies:
+ '@smithy/middleware-serde': 3.0.0
+ '@smithy/node-config-provider': 3.0.0
+ '@smithy/shared-ini-file-loader': 3.0.0
+ '@smithy/types': 3.0.0
+ '@smithy/url-parser': 3.0.0
+ '@smithy/util-middleware': 3.0.0
+ tslib: 2.6.2
+
+ '@smithy/middleware-retry@3.0.1':
+ dependencies:
+ '@smithy/node-config-provider': 3.0.0
+ '@smithy/protocol-http': 4.0.0
+ '@smithy/service-error-classification': 3.0.0
+ '@smithy/smithy-client': 3.0.1
+ '@smithy/types': 3.0.0
+ '@smithy/util-middleware': 3.0.0
+ '@smithy/util-retry': 3.0.0
+ tslib: 2.6.2
+ uuid: 9.0.1
+
+ '@smithy/middleware-serde@3.0.0':
+ dependencies:
+ '@smithy/types': 3.0.0
+ tslib: 2.6.2
+
+ '@smithy/middleware-stack@3.0.0':
+ dependencies:
+ '@smithy/types': 3.0.0
+ tslib: 2.6.2
+
+ '@smithy/node-config-provider@3.0.0':
+ dependencies:
+ '@smithy/property-provider': 3.0.0
+ '@smithy/shared-ini-file-loader': 3.0.0
+ '@smithy/types': 3.0.0
+ tslib: 2.6.2
+
+ '@smithy/node-http-handler@3.0.0':
+ dependencies:
+ '@smithy/abort-controller': 3.0.0
+ '@smithy/protocol-http': 4.0.0
+ '@smithy/querystring-builder': 3.0.0
+ '@smithy/types': 3.0.0
+ tslib: 2.6.2
+
+ '@smithy/property-provider@3.0.0':
+ dependencies:
+ '@smithy/types': 3.0.0
+ tslib: 2.6.2
+
+ '@smithy/protocol-http@4.0.0':
+ dependencies:
+ '@smithy/types': 3.0.0
+ tslib: 2.6.2
+
+ '@smithy/querystring-builder@3.0.0':
+ dependencies:
+ '@smithy/types': 3.0.0
+ '@smithy/util-uri-escape': 3.0.0
+ tslib: 2.6.2
+
+ '@smithy/querystring-parser@3.0.0':
+ dependencies:
+ '@smithy/types': 3.0.0
+ tslib: 2.6.2
+
+ '@smithy/service-error-classification@3.0.0':
+ dependencies:
+ '@smithy/types': 3.0.0
+
+ '@smithy/shared-ini-file-loader@3.0.0':
+ dependencies:
+ '@smithy/types': 3.0.0
+ tslib: 2.6.2
+
+ '@smithy/signature-v4@3.0.0':
+ dependencies:
+ '@smithy/is-array-buffer': 3.0.0
+ '@smithy/types': 3.0.0
+ '@smithy/util-hex-encoding': 3.0.0
+ '@smithy/util-middleware': 3.0.0
+ '@smithy/util-uri-escape': 3.0.0
+ '@smithy/util-utf8': 3.0.0
+ tslib: 2.6.2
+
+ '@smithy/smithy-client@3.0.1':
+ dependencies:
+ '@smithy/middleware-endpoint': 3.0.0
+ '@smithy/middleware-stack': 3.0.0
+ '@smithy/protocol-http': 4.0.0
+ '@smithy/types': 3.0.0
+ '@smithy/util-stream': 3.0.1
+ tslib: 2.6.2
+
+ '@smithy/types@3.0.0':
+ dependencies:
+ tslib: 2.6.2
+
+ '@smithy/url-parser@3.0.0':
+ dependencies:
+ '@smithy/querystring-parser': 3.0.0
+ '@smithy/types': 3.0.0
+ tslib: 2.6.2
+
+ '@smithy/util-base64@3.0.0':
+ dependencies:
+ '@smithy/util-buffer-from': 3.0.0
+ '@smithy/util-utf8': 3.0.0
+ tslib: 2.6.2
+
+ '@smithy/util-body-length-browser@3.0.0':
+ dependencies:
+ tslib: 2.6.2
+
+ '@smithy/util-body-length-node@3.0.0':
+ dependencies:
+ tslib: 2.6.2
+
+ '@smithy/util-buffer-from@3.0.0':
+ dependencies:
+ '@smithy/is-array-buffer': 3.0.0
+ tslib: 2.6.2
+
+ '@smithy/util-config-provider@3.0.0':
+ dependencies:
+ tslib: 2.6.2
+
+ '@smithy/util-defaults-mode-browser@3.0.1':
+ dependencies:
+ '@smithy/property-provider': 3.0.0
+ '@smithy/smithy-client': 3.0.1
+ '@smithy/types': 3.0.0
+ bowser: 2.11.0
+ tslib: 2.6.2
+
+ '@smithy/util-defaults-mode-node@3.0.1':
+ dependencies:
+ '@smithy/config-resolver': 3.0.0
+ '@smithy/credential-provider-imds': 3.0.0
+ '@smithy/node-config-provider': 3.0.0
+ '@smithy/property-provider': 3.0.0
+ '@smithy/smithy-client': 3.0.1
+ '@smithy/types': 3.0.0
+ tslib: 2.6.2
+
+ '@smithy/util-endpoints@2.0.0':
+ dependencies:
+ '@smithy/node-config-provider': 3.0.0
+ '@smithy/types': 3.0.0
+ tslib: 2.6.2
+
+ '@smithy/util-hex-encoding@3.0.0':
+ dependencies:
+ tslib: 2.6.2
+
+ '@smithy/util-middleware@3.0.0':
+ dependencies:
+ '@smithy/types': 3.0.0
+ tslib: 2.6.2
+
+ '@smithy/util-retry@3.0.0':
+ dependencies:
+ '@smithy/service-error-classification': 3.0.0
+ '@smithy/types': 3.0.0
+ tslib: 2.6.2
+
+ '@smithy/util-stream@3.0.1':
+ dependencies:
+ '@smithy/fetch-http-handler': 3.0.1
+ '@smithy/node-http-handler': 3.0.0
+ '@smithy/types': 3.0.0
+ '@smithy/util-base64': 3.0.0
+ '@smithy/util-buffer-from': 3.0.0
+ '@smithy/util-hex-encoding': 3.0.0
+ '@smithy/util-utf8': 3.0.0
+ tslib: 2.6.2
+
+ '@smithy/util-uri-escape@3.0.0':
+ dependencies:
+ tslib: 2.6.2
+
+ '@smithy/util-utf8@3.0.0':
+ dependencies:
+ '@smithy/util-buffer-from': 3.0.0
+ tslib: 2.6.2
+
+ '@types/better-sqlite3@7.6.10':
+ dependencies:
+ '@types/node': 18.19.33
+
+ '@types/docker-modem@3.0.6':
+ dependencies:
+ '@types/node': 18.19.33
+ '@types/ssh2': 1.15.0
+
+ '@types/dockerode@3.3.29':
+ dependencies:
+ '@types/docker-modem': 3.0.6
+ '@types/node': 18.19.33
+ '@types/ssh2': 1.15.0
+
+ '@types/estree@1.0.5': {}
+
+ '@types/fs-extra@11.0.4':
+ dependencies:
+ '@types/jsonfile': 6.1.4
+ '@types/node': 18.19.33
+
+ '@types/glob@8.1.0':
+ dependencies:
+ '@types/minimatch': 5.1.2
+ '@types/node': 18.19.33
+
+ '@types/json-diff@1.0.3': {}
+
+ '@types/jsonfile@6.1.4':
+ dependencies:
+ '@types/node': 18.19.33
+
+ '@types/minimatch@5.1.2': {}
+
+ '@types/minimist@1.2.5': {}
+
+ '@types/node-fetch@2.6.11':
+ dependencies:
+ '@types/node': 18.19.33
+ form-data: 4.0.0
+
+ '@types/node-forge@1.3.11':
+ dependencies:
+ '@types/node': 18.19.33
+
+ '@types/node@18.19.33':
+ dependencies:
+ undici-types: 5.26.5
+
+ '@types/pg@8.11.6':
+ dependencies:
+ '@types/node': 18.19.33
+ pg-protocol: 1.6.1
+ pg-types: 4.0.2
+
+ '@types/pg@8.6.6':
+ dependencies:
+ '@types/node': 18.19.33
+ pg-protocol: 1.6.1
+ pg-types: 2.2.0
+
+ '@types/pluralize@0.0.33': {}
+
+ '@types/ps-tree@1.1.6': {}
+
+ '@types/semver@7.5.8': {}
+
+ '@types/ssh2@1.15.0':
+ dependencies:
+ '@types/node': 18.19.33
+
+ '@types/uuid@9.0.8': {}
+
+ '@types/which@3.0.3': {}
+
+ '@types/ws@8.5.10':
+ dependencies:
+ '@types/node': 18.19.33
+
+ '@typescript-eslint/eslint-plugin@7.10.0(@typescript-eslint/parser@7.10.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)':
+ dependencies:
+ '@eslint-community/regexpp': 4.10.0
+ '@typescript-eslint/parser': 7.10.0(eslint@8.57.0)(typescript@5.4.5)
+ '@typescript-eslint/scope-manager': 7.10.0
+ '@typescript-eslint/type-utils': 7.10.0(eslint@8.57.0)(typescript@5.4.5)
+ '@typescript-eslint/utils': 7.10.0(eslint@8.57.0)(typescript@5.4.5)
+ '@typescript-eslint/visitor-keys': 7.10.0
+ eslint: 8.57.0
+ graphemer: 1.4.0
+ ignore: 5.3.1
+ natural-compare: 1.4.0
+ ts-api-utils: 1.3.0(typescript@5.4.5)
+ optionalDependencies:
+ typescript: 5.4.5
+ transitivePeerDependencies:
+ - supports-color
+
+ '@typescript-eslint/parser@7.10.0(eslint@8.57.0)(typescript@5.4.5)':
+ dependencies:
+ '@typescript-eslint/scope-manager': 7.10.0
+ '@typescript-eslint/types': 7.10.0
+ '@typescript-eslint/typescript-estree': 7.10.0(typescript@5.4.5)
+ '@typescript-eslint/visitor-keys': 7.10.0
+ debug: 4.3.4
+ eslint: 8.57.0
+ optionalDependencies:
+ typescript: 5.4.5
+ transitivePeerDependencies:
+ - supports-color
+
+ '@typescript-eslint/scope-manager@7.10.0':
+ dependencies:
+ '@typescript-eslint/types': 7.10.0
+ '@typescript-eslint/visitor-keys': 7.10.0
+
+ '@typescript-eslint/type-utils@7.10.0(eslint@8.57.0)(typescript@5.4.5)':
+ dependencies:
+ '@typescript-eslint/typescript-estree': 7.10.0(typescript@5.4.5)
+ '@typescript-eslint/utils': 7.10.0(eslint@8.57.0)(typescript@5.4.5)
+ debug: 4.3.4
+ eslint: 8.57.0
+ ts-api-utils: 1.3.0(typescript@5.4.5)
+ optionalDependencies:
+ typescript: 5.4.5
+ transitivePeerDependencies:
+ - supports-color
+
+ '@typescript-eslint/types@7.10.0': {}
+
+ '@typescript-eslint/typescript-estree@7.10.0(typescript@5.4.5)':
+ dependencies:
+ '@typescript-eslint/types': 7.10.0
+ '@typescript-eslint/visitor-keys': 7.10.0
+ debug: 4.3.4
+ globby: 11.1.0
+ is-glob: 4.0.3
+ minimatch: 9.0.4
+ semver: 7.6.2
+ ts-api-utils: 1.3.0(typescript@5.4.5)
+ optionalDependencies:
+ typescript: 5.4.5
+ transitivePeerDependencies:
+ - supports-color
+
+ '@typescript-eslint/utils@7.10.0(eslint@8.57.0)(typescript@5.4.5)':
+ dependencies:
+ '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
+ '@typescript-eslint/scope-manager': 7.10.0
+ '@typescript-eslint/types': 7.10.0
+ '@typescript-eslint/typescript-estree': 7.10.0(typescript@5.4.5)
+ eslint: 8.57.0
+ transitivePeerDependencies:
+ - supports-color
+ - typescript
+
+ '@typescript-eslint/visitor-keys@7.10.0':
+ dependencies:
+ '@typescript-eslint/types': 7.10.0
+ eslint-visitor-keys: 3.4.3
+
+ '@ungap/structured-clone@1.2.0': {}
+
+ '@vercel/postgres@0.8.0':
+ dependencies:
+ '@neondatabase/serverless': 0.7.2
+ bufferutil: 4.0.8
+ utf-8-validate: 6.0.3
+ ws: 8.14.2(bufferutil@4.0.8)(utf-8-validate@6.0.3)
+
+ '@vitest/expect@1.6.0':
+ dependencies:
+ '@vitest/spy': 1.6.0
+ '@vitest/utils': 1.6.0
+ chai: 4.4.1
+
+ '@vitest/runner@1.6.0':
+ dependencies:
+ '@vitest/utils': 1.6.0
+ p-limit: 5.0.0
+ pathe: 1.1.2
+
+ '@vitest/snapshot@1.6.0':
+ dependencies:
+ magic-string: 0.30.10
+ pathe: 1.1.2
+ pretty-format: 29.7.0
+
+ '@vitest/spy@1.6.0':
+ dependencies:
+ tinyspy: 2.2.1
+
+ '@vitest/utils@1.6.0':
+ dependencies:
+ diff-sequences: 29.6.3
+ estree-walker: 3.0.3
+ loupe: 2.3.7
+ pretty-format: 29.7.0
+
+ acorn-jsx@5.3.2(acorn@8.11.3):
+ dependencies:
+ acorn: 8.11.3
+
+ acorn-walk@8.3.2: {}
+
+ acorn@8.11.3: {}
+
+ aggregate-error@4.0.1:
+ dependencies:
+ clean-stack: 4.2.0
+ indent-string: 5.0.0
+
+ ajv@6.12.6:
+ dependencies:
+ fast-deep-equal: 3.1.3
+ fast-json-stable-stringify: 2.1.0
+ json-schema-traverse: 0.4.1
+ uri-js: 4.4.1
+
+ ansi-escapes@6.2.1: {}
+
+ ansi-regex@5.0.1: {}
+
+ ansi-regex@6.0.1: {}
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ ansi-styles@5.2.0: {}
+
+ ansi-styles@6.2.1: {}
+
+ ansicolors@0.3.2: {}
+
+ any-promise@1.3.0: {}
+
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+
+ argparse@1.0.10:
+ dependencies:
+ sprintf-js: 1.0.3
+
+ argparse@2.0.1: {}
+
+ array-find-index@1.0.2: {}
+
+ array-union@2.1.0: {}
+
+ arrgv@1.0.2: {}
+
+ arrify@3.0.0: {}
+
+ as-table@1.0.55:
+ dependencies:
+ printable-characters: 1.0.42
+
+ asn1@0.2.6:
+ dependencies:
+ safer-buffer: 2.1.2
+
+ assertion-error@1.1.0: {}
+
+ asynckit@0.4.0: {}
+
+ ava@5.3.1:
+ dependencies:
+ acorn: 8.11.3
+ acorn-walk: 8.3.2
+ ansi-styles: 6.2.1
+ arrgv: 1.0.2
+ arrify: 3.0.0
+ callsites: 4.1.0
+ cbor: 8.1.0
+ chalk: 5.3.0
+ chokidar: 3.6.0
+ chunkd: 2.0.1
+ ci-info: 3.9.0
+ ci-parallel-vars: 1.0.1
+ clean-yaml-object: 0.1.0
+ cli-truncate: 3.1.0
+ code-excerpt: 4.0.0
+ common-path-prefix: 3.0.0
+ concordance: 5.0.4
+ currently-unhandled: 0.4.1
+ debug: 4.3.4
+ emittery: 1.0.3
+ figures: 5.0.0
+ globby: 13.2.2
+ ignore-by-default: 2.1.0
+ indent-string: 5.0.0
+ is-error: 2.2.2
+ is-plain-object: 5.0.0
+ is-promise: 4.0.0
+ matcher: 5.0.0
+ mem: 9.0.2
+ ms: 2.1.3
+ p-event: 5.0.1
+ p-map: 5.5.0
+ picomatch: 2.3.1
+ pkg-conf: 4.0.0
+ plur: 5.1.0
+ pretty-ms: 8.0.0
+ resolve-cwd: 3.0.0
+ stack-utils: 2.0.6
+ strip-ansi: 7.1.0
+ supertap: 3.0.1
+ temp-dir: 3.0.0
+ write-file-atomic: 5.0.1
+ yargs: 17.7.2
+ transitivePeerDependencies:
+ - supports-color
+
+ balanced-match@1.0.2: {}
+
+ base64-js@1.5.1: {}
+
+ bcrypt-pbkdf@1.0.2:
+ dependencies:
+ tweetnacl: 0.14.5
+
+ better-sqlite3@9.6.0:
+ dependencies:
+ bindings: 1.5.0
+ prebuild-install: 7.1.2
+
+ binary-extensions@2.3.0: {}
+
+ bindings@1.5.0:
+ dependencies:
+ file-uri-to-path: 1.0.0
+
+ bl@4.1.0:
+ dependencies:
+ buffer: 5.7.1
+ inherits: 2.0.4
+ readable-stream: 3.6.2
+
+ blake3-wasm@2.1.5: {}
+
+ blueimp-md5@2.19.0: {}
+
+ bowser@2.11.0: {}
+
+ brace-expansion@1.1.11:
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
+
+ brace-expansion@2.0.1:
+ dependencies:
+ balanced-match: 1.0.2
+
+ braces@3.0.2:
+ dependencies:
+ fill-range: 7.1.1
+
+ buffer-from@1.1.2: {}
+
+ buffer@5.7.1:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ bufferutil@4.0.8:
+ dependencies:
+ node-gyp-build: 4.8.1
+
+ buildcheck@0.0.6:
+ optional: true
+
+ bundle-require@4.1.0(esbuild@0.19.12):
+ dependencies:
+ esbuild: 0.19.12
+ load-tsconfig: 0.2.5
+
+ cac@6.7.14: {}
+
+ callsites@3.1.0: {}
+
+ callsites@4.1.0: {}
+
+ camelcase@7.0.1: {}
+
+ capnp-ts@0.7.0:
+ dependencies:
+ debug: 4.3.4
+ tslib: 2.6.2
+ transitivePeerDependencies:
+ - supports-color
+
+ cardinal@2.1.1:
+ dependencies:
+ ansicolors: 0.3.2
+ redeyed: 2.1.1
+
+ cbor@8.1.0:
+ dependencies:
+ nofilter: 3.1.0
+
+ chai@4.4.1:
+ dependencies:
+ assertion-error: 1.1.0
+ check-error: 1.0.3
+ deep-eql: 4.1.3
+ get-func-name: 2.0.2
+ loupe: 2.3.7
+ pathval: 1.1.1
+ type-detect: 4.0.8
+
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ chalk@5.3.0: {}
+
+ char-regex@1.0.2: {}
+
+ check-error@1.0.3:
+ dependencies:
+ get-func-name: 2.0.2
+
+ chokidar@3.6.0:
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.2
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ chownr@1.1.4: {}
+
+ chunkd@2.0.1: {}
+
+ ci-info@3.9.0: {}
+
+ ci-parallel-vars@1.0.1: {}
+
+ clean-stack@4.2.0:
+ dependencies:
+ escape-string-regexp: 5.0.0
+
+ clean-yaml-object@0.1.0: {}
+
+ cli-color@2.0.4:
+ dependencies:
+ d: 1.0.2
+ es5-ext: 0.10.64
+ es6-iterator: 2.0.3
+ memoizee: 0.4.15
+ timers-ext: 0.1.7
+
+ cli-table3@0.6.5:
+ dependencies:
+ string-width: 4.2.3
+ optionalDependencies:
+ '@colors/colors': 1.5.0
+
+ cli-truncate@3.1.0:
+ dependencies:
+ slice-ansi: 5.0.0
+ string-width: 5.1.2
+
+ cliui@8.0.1:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ code-excerpt@4.0.0:
+ dependencies:
+ convert-to-spaces: 2.0.1
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.4: {}
+
+ colors@1.4.0: {}
+
+ combined-stream@1.0.8:
+ dependencies:
+ delayed-stream: 1.0.0
+
+ commander@10.0.1: {}
+
+ commander@12.1.0: {}
+
+ commander@4.1.1: {}
+
+ commander@9.5.0: {}
+
+ common-path-prefix@3.0.0: {}
+
+ concat-map@0.0.1: {}
+
+ concordance@5.0.4:
+ dependencies:
+ date-time: 3.1.0
+ esutils: 2.0.3
+ fast-diff: 1.3.0
+ js-string-escape: 1.0.1
+ lodash: 4.17.21
+ md5-hex: 3.0.1
+ semver: 7.6.2
+ well-known-symbols: 2.0.0
+
+ confbox@0.1.7: {}
+
+ convert-to-spaces@2.0.1: {}
+
+ cookie@0.5.0: {}
+
+ copy-anything@3.0.5:
+ dependencies:
+ is-what: 4.1.16
+
+ cpu-features@0.0.10:
+ dependencies:
+ buildcheck: 0.0.6
+ nan: 2.19.0
+ optional: true
+
+ cross-spawn@7.0.3:
+ dependencies:
+ path-key: 3.1.1
+ shebang-command: 2.0.0
+ which: 2.0.2
+
+ currently-unhandled@0.4.1:
+ dependencies:
+ array-find-index: 1.0.2
+
+ d@1.0.2:
+ dependencies:
+ es5-ext: 0.10.64
+ type: 2.7.2
+
+ data-uri-to-buffer@2.0.2: {}
+
+ data-uri-to-buffer@4.0.1: {}
+
+ date-time@3.1.0:
+ dependencies:
+ time-zone: 1.0.0
+
+ debug@4.3.4:
+ dependencies:
+ ms: 2.1.2
+
+ decompress-response@6.0.0:
+ dependencies:
+ mimic-response: 3.1.0
+
+ deep-eql@4.1.3:
+ dependencies:
+ type-detect: 4.0.8
+
+ deep-extend@0.6.0: {}
+
+ deep-is@0.1.4: {}
+
+ delayed-stream@1.0.0: {}
+
+ denque@2.1.0: {}
+
+ detect-libc@2.0.2:
+ optional: true
+
+ detect-libc@2.0.3: {}
+
+ diff-sequences@29.6.3: {}
+
+ difflib@0.2.4(patch_hash=jq4t3ysdpnbunjeje4v7nrqn2q):
+ dependencies:
+ heap: 0.2.7
+
+ dir-glob@3.0.1:
+ dependencies:
+ path-type: 4.0.0
+
+ docker-modem@3.0.8:
+ dependencies:
+ debug: 4.3.4
+ readable-stream: 3.6.2
+ split-ca: 1.0.1
+ ssh2: 1.15.0
+ transitivePeerDependencies:
+ - supports-color
+
+ dockerode@3.3.5:
+ dependencies:
+ '@balena/dockerignore': 1.0.2
+ docker-modem: 3.0.8
+ tar-fs: 2.0.1
+ transitivePeerDependencies:
+ - supports-color
+
+ doctrine@3.0.0:
+ dependencies:
+ esutils: 2.0.3
+
+ dotenv@16.4.5: {}
+
+ dreamopt@0.8.0:
+ dependencies:
+ wordwrap: 1.0.0
+
+ drizzle-kit@0.21.2:
+ dependencies:
+ '@esbuild-kit/esm-loader': 2.6.5
+ commander: 9.5.0
+ env-paths: 3.0.0
+ esbuild: 0.19.12
+ esbuild-register: 3.5.0(esbuild@0.19.12)
+ glob: 8.1.0
+ hanji: 0.0.5
+ json-diff: 0.9.0
+ zod: 3.23.8
+ transitivePeerDependencies:
+ - supports-color
+
+ drizzle-orm@0.32.0-85c8008(@aws-sdk/client-rds-data@3.577.0)(@cloudflare/workers-types@4.20240512.0)(@electric-sql/pglite@0.1.5)(@libsql/client@0.4.3(bufferutil@4.0.8)(utf-8-validate@6.0.3))(@neondatabase/serverless@0.9.3)(@planetscale/database@1.18.0)(@types/better-sqlite3@7.6.10)(@types/pg@8.11.6)(@vercel/postgres@0.8.0)(better-sqlite3@9.6.0)(mysql2@2.3.3)(pg@8.11.5)(postgres@3.4.4):
+ optionalDependencies:
+ '@aws-sdk/client-rds-data': 3.577.0
+ '@cloudflare/workers-types': 4.20240512.0
+ '@electric-sql/pglite': 0.1.5
+ '@libsql/client': 0.4.3(bufferutil@4.0.8)(utf-8-validate@6.0.3)
+ '@neondatabase/serverless': 0.9.3
+ '@planetscale/database': 1.18.0
+ '@types/better-sqlite3': 7.6.10
+ '@types/pg': 8.11.6
+ '@vercel/postgres': 0.8.0
+ better-sqlite3: 9.6.0
+ mysql2: 2.3.3
+ pg: 8.11.5
+ postgres: 3.4.4
+
+ duplexer@0.1.2: {}
+
+ eastasianwidth@0.2.0: {}
+
+ emittery@1.0.3: {}
+
+ emoji-regex@8.0.0: {}
+
+ emoji-regex@9.2.2: {}
+
+ emojilib@2.4.0: {}
+
+ end-of-stream@1.4.4:
+ dependencies:
+ once: 1.4.0
+
+ env-paths@3.0.0: {}
+
+ es5-ext@0.10.64:
+ dependencies:
+ es6-iterator: 2.0.3
+ es6-symbol: 3.1.4
+ esniff: 2.0.1
+ next-tick: 1.1.0
+
+ es6-iterator@2.0.3:
+ dependencies:
+ d: 1.0.2
+ es5-ext: 0.10.64
+ es6-symbol: 3.1.4
+
+ es6-symbol@3.1.4:
+ dependencies:
+ d: 1.0.2
+ ext: 1.7.0
+
+ es6-weak-map@2.0.3:
+ dependencies:
+ d: 1.0.2
+ es5-ext: 0.10.64
+ es6-iterator: 2.0.3
+ es6-symbol: 3.1.4
+
+ esbuild-android-64@0.14.54:
+ optional: true
+
+ esbuild-android-arm64@0.14.54:
+ optional: true
+
+ esbuild-darwin-64@0.14.54:
+ optional: true
+
+ esbuild-darwin-arm64@0.14.54:
+ optional: true
+
+ esbuild-freebsd-64@0.14.54:
+ optional: true
+
+ esbuild-freebsd-arm64@0.14.54:
+ optional: true
+
+ esbuild-linux-32@0.14.54:
+ optional: true
+
+ esbuild-linux-64@0.14.54:
+ optional: true
+
+ esbuild-linux-arm64@0.14.54:
+ optional: true
+
+ esbuild-linux-arm@0.14.54:
+ optional: true
+
+ esbuild-linux-mips64le@0.14.54:
+ optional: true
+
+ esbuild-linux-ppc64le@0.14.54:
+ optional: true
+
+ esbuild-linux-riscv64@0.14.54:
+ optional: true
+
+ esbuild-linux-s390x@0.14.54:
+ optional: true
+
+ esbuild-netbsd-64@0.14.54:
+ optional: true
+
+ esbuild-node-externals@1.13.1(esbuild@0.19.12):
+ dependencies:
+ esbuild: 0.19.12
+ find-up: 5.0.0
+ tslib: 2.6.2
+
+ esbuild-openbsd-64@0.14.54:
+ optional: true
+
+ esbuild-register@3.5.0(esbuild@0.19.12):
+ dependencies:
+ debug: 4.3.4
+ esbuild: 0.19.12
+ transitivePeerDependencies:
+ - supports-color
+
+ esbuild-sunos-64@0.14.54:
+ optional: true
+
+ esbuild-windows-32@0.14.54:
+ optional: true
+
+ esbuild-windows-64@0.14.54:
+ optional: true
+
+ esbuild-windows-arm64@0.14.54:
+ optional: true
+
+ esbuild@0.14.54:
+ optionalDependencies:
+ '@esbuild/linux-loong64': 0.14.54
+ esbuild-android-64: 0.14.54
+ esbuild-android-arm64: 0.14.54
+ esbuild-darwin-64: 0.14.54
+ esbuild-darwin-arm64: 0.14.54
+ esbuild-freebsd-64: 0.14.54
+ esbuild-freebsd-arm64: 0.14.54
+ esbuild-linux-32: 0.14.54
+ esbuild-linux-64: 0.14.54
+ esbuild-linux-arm: 0.14.54
+ esbuild-linux-arm64: 0.14.54
+ esbuild-linux-mips64le: 0.14.54
+ esbuild-linux-ppc64le: 0.14.54
+ esbuild-linux-riscv64: 0.14.54
+ esbuild-linux-s390x: 0.14.54
+ esbuild-netbsd-64: 0.14.54
+ esbuild-openbsd-64: 0.14.54
+ esbuild-sunos-64: 0.14.54
+ esbuild-windows-32: 0.14.54
+ esbuild-windows-64: 0.14.54
+ esbuild-windows-arm64: 0.14.54
+
+ esbuild@0.17.19:
+ optionalDependencies:
+ '@esbuild/android-arm': 0.17.19
+ '@esbuild/android-arm64': 0.17.19
+ '@esbuild/android-x64': 0.17.19
+ '@esbuild/darwin-arm64': 0.17.19
+ '@esbuild/darwin-x64': 0.17.19
+ '@esbuild/freebsd-arm64': 0.17.19
+ '@esbuild/freebsd-x64': 0.17.19
+ '@esbuild/linux-arm': 0.17.19
+ '@esbuild/linux-arm64': 0.17.19
+ '@esbuild/linux-ia32': 0.17.19
+ '@esbuild/linux-loong64': 0.17.19
+ '@esbuild/linux-mips64el': 0.17.19
+ '@esbuild/linux-ppc64': 0.17.19
+ '@esbuild/linux-riscv64': 0.17.19
+ '@esbuild/linux-s390x': 0.17.19
+ '@esbuild/linux-x64': 0.17.19
+ '@esbuild/netbsd-x64': 0.17.19
+ '@esbuild/openbsd-x64': 0.17.19
+ '@esbuild/sunos-x64': 0.17.19
+ '@esbuild/win32-arm64': 0.17.19
+ '@esbuild/win32-ia32': 0.17.19
+ '@esbuild/win32-x64': 0.17.19
+
+ esbuild@0.18.20:
+ optionalDependencies:
+ '@esbuild/android-arm': 0.18.20
+ '@esbuild/android-arm64': 0.18.20
+ '@esbuild/android-x64': 0.18.20
+ '@esbuild/darwin-arm64': 0.18.20
+ '@esbuild/darwin-x64': 0.18.20
+ '@esbuild/freebsd-arm64': 0.18.20
+ '@esbuild/freebsd-x64': 0.18.20
+ '@esbuild/linux-arm': 0.18.20
+ '@esbuild/linux-arm64': 0.18.20
+ '@esbuild/linux-ia32': 0.18.20
+ '@esbuild/linux-loong64': 0.18.20
+ '@esbuild/linux-mips64el': 0.18.20
+ '@esbuild/linux-ppc64': 0.18.20
+ '@esbuild/linux-riscv64': 0.18.20
+ '@esbuild/linux-s390x': 0.18.20
+ '@esbuild/linux-x64': 0.18.20
+ '@esbuild/netbsd-x64': 0.18.20
+ '@esbuild/openbsd-x64': 0.18.20
+ '@esbuild/sunos-x64': 0.18.20
+ '@esbuild/win32-arm64': 0.18.20
+ '@esbuild/win32-ia32': 0.18.20
+ '@esbuild/win32-x64': 0.18.20
+
+ esbuild@0.19.12:
+ optionalDependencies:
+ '@esbuild/aix-ppc64': 0.19.12
+ '@esbuild/android-arm': 0.19.12
+ '@esbuild/android-arm64': 0.19.12
+ '@esbuild/android-x64': 0.19.12
+ '@esbuild/darwin-arm64': 0.19.12
+ '@esbuild/darwin-x64': 0.19.12
+ '@esbuild/freebsd-arm64': 0.19.12
+ '@esbuild/freebsd-x64': 0.19.12
+ '@esbuild/linux-arm': 0.19.12
+ '@esbuild/linux-arm64': 0.19.12
+ '@esbuild/linux-ia32': 0.19.12
+ '@esbuild/linux-loong64': 0.19.12
+ '@esbuild/linux-mips64el': 0.19.12
+ '@esbuild/linux-ppc64': 0.19.12
+ '@esbuild/linux-riscv64': 0.19.12
+ '@esbuild/linux-s390x': 0.19.12
+ '@esbuild/linux-x64': 0.19.12
+ '@esbuild/netbsd-x64': 0.19.12
+ '@esbuild/openbsd-x64': 0.19.12
+ '@esbuild/sunos-x64': 0.19.12
+ '@esbuild/win32-arm64': 0.19.12
+ '@esbuild/win32-ia32': 0.19.12
+ '@esbuild/win32-x64': 0.19.12
+
+ esbuild@0.20.2:
+ optionalDependencies:
+ '@esbuild/aix-ppc64': 0.20.2
+ '@esbuild/android-arm': 0.20.2
+ '@esbuild/android-arm64': 0.20.2
+ '@esbuild/android-x64': 0.20.2
+ '@esbuild/darwin-arm64': 0.20.2
+ '@esbuild/darwin-x64': 0.20.2
+ '@esbuild/freebsd-arm64': 0.20.2
+ '@esbuild/freebsd-x64': 0.20.2
+ '@esbuild/linux-arm': 0.20.2
+ '@esbuild/linux-arm64': 0.20.2
+ '@esbuild/linux-ia32': 0.20.2
+ '@esbuild/linux-loong64': 0.20.2
+ '@esbuild/linux-mips64el': 0.20.2
+ '@esbuild/linux-ppc64': 0.20.2
+ '@esbuild/linux-riscv64': 0.20.2
+ '@esbuild/linux-s390x': 0.20.2
+ '@esbuild/linux-x64': 0.20.2
+ '@esbuild/netbsd-x64': 0.20.2
+ '@esbuild/openbsd-x64': 0.20.2
+ '@esbuild/sunos-x64': 0.20.2
+ '@esbuild/win32-arm64': 0.20.2
+ '@esbuild/win32-ia32': 0.20.2
+ '@esbuild/win32-x64': 0.20.2
+
+ escalade@3.1.2: {}
+
+ escape-string-regexp@2.0.0: {}
+
+ escape-string-regexp@4.0.0: {}
+
+ escape-string-regexp@5.0.0: {}
+
+ eslint-config-prettier@9.1.0(eslint@8.57.0):
+ dependencies:
+ eslint: 8.57.0
+
+ eslint-plugin-prettier@5.1.3(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@2.8.8):
+ dependencies:
+ eslint: 8.57.0
+ prettier: 2.8.8
+ prettier-linter-helpers: 1.0.0
+ synckit: 0.8.8
+ optionalDependencies:
+ eslint-config-prettier: 9.1.0(eslint@8.57.0)
+
+ eslint-scope@7.2.2:
+ dependencies:
+ esrecurse: 4.3.0
+ estraverse: 5.3.0
+
+ eslint-visitor-keys@3.4.3: {}
+
+ eslint@8.57.0:
+ dependencies:
+ '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
+ '@eslint-community/regexpp': 4.10.0
+ '@eslint/eslintrc': 2.1.4
+ '@eslint/js': 8.57.0
+ '@humanwhocodes/config-array': 0.11.14
+ '@humanwhocodes/module-importer': 1.0.1
+ '@nodelib/fs.walk': 1.2.8
+ '@ungap/structured-clone': 1.2.0
+ ajv: 6.12.6
+ chalk: 4.1.2
+ cross-spawn: 7.0.3
+ debug: 4.3.4
+ doctrine: 3.0.0
+ escape-string-regexp: 4.0.0
+ eslint-scope: 7.2.2
+ eslint-visitor-keys: 3.4.3
+ espree: 9.6.1
+ esquery: 1.5.0
+ esutils: 2.0.3
+ fast-deep-equal: 3.1.3
+ file-entry-cache: 6.0.1
+ find-up: 5.0.0
+ glob-parent: 6.0.2
+ globals: 13.24.0
+ graphemer: 1.4.0
+ ignore: 5.3.1
+ imurmurhash: 0.1.4
+ is-glob: 4.0.3
+ is-path-inside: 3.0.3
+ js-yaml: 4.1.0
+ json-stable-stringify-without-jsonify: 1.0.1
+ levn: 0.4.1
+ lodash.merge: 4.6.2
+ minimatch: 3.1.2
+ natural-compare: 1.4.0
+ optionator: 0.9.4
+ strip-ansi: 6.0.1
+ text-table: 0.2.0
+ transitivePeerDependencies:
+ - supports-color
+
+ esniff@2.0.1:
+ dependencies:
+ d: 1.0.2
+ es5-ext: 0.10.64
+ event-emitter: 0.3.5
+ type: 2.7.2
+
+ espree@9.6.1:
+ dependencies:
+ acorn: 8.11.3
+ acorn-jsx: 5.3.2(acorn@8.11.3)
+ eslint-visitor-keys: 3.4.3
+
+ esprima@4.0.1: {}
+
+ esquery@1.5.0:
+ dependencies:
+ estraverse: 5.3.0
+
+ esrecurse@4.3.0:
+ dependencies:
+ estraverse: 5.3.0
+
+ estraverse@5.3.0: {}
+
+ estree-walker@0.6.1: {}
+
+ estree-walker@3.0.3:
+ dependencies:
+ '@types/estree': 1.0.5
+
+ esutils@2.0.3: {}
+
+ event-emitter@0.3.5:
+ dependencies:
+ d: 1.0.2
+ es5-ext: 0.10.64
+
+ event-stream@3.3.4:
+ dependencies:
+ duplexer: 0.1.2
+ from: 0.1.7
+ map-stream: 0.1.0
+ pause-stream: 0.0.11
+ split: 0.3.3
+ stream-combiner: 0.0.4
+ through: 2.3.8
+
+ execa@5.1.1:
+ dependencies:
+ cross-spawn: 7.0.3
+ get-stream: 6.0.1
+ human-signals: 2.1.0
+ is-stream: 2.0.1
+ merge-stream: 2.0.0
+ npm-run-path: 4.0.1
+ onetime: 5.1.2
+ signal-exit: 3.0.7
+ strip-final-newline: 2.0.0
+
+ execa@8.0.1:
+ dependencies:
+ cross-spawn: 7.0.3
+ get-stream: 8.0.1
+ human-signals: 5.0.0
+ is-stream: 3.0.0
+ merge-stream: 2.0.0
+ npm-run-path: 5.3.0
+ onetime: 6.0.0
+ signal-exit: 4.1.0
+ strip-final-newline: 3.0.0
+
+ exit-hook@2.2.1: {}
+
+ expand-template@2.0.3: {}
+
+ ext@1.7.0:
+ dependencies:
+ type: 2.7.2
+
+ fast-deep-equal@3.1.3: {}
+
+ fast-diff@1.3.0: {}
+
+ fast-glob@3.3.2:
+ dependencies:
+ '@nodelib/fs.stat': 2.0.5
+ '@nodelib/fs.walk': 1.2.8
+ glob-parent: 5.1.2
+ merge2: 1.4.1
+ micromatch: 4.0.5
+
+ fast-json-stable-stringify@2.1.0: {}
+
+ fast-levenshtein@2.0.6: {}
+
+ fast-xml-parser@4.2.5:
+ dependencies:
+ strnum: 1.0.5
+
+ fastq@1.17.1:
+ dependencies:
+ reusify: 1.0.4
+
+ fetch-blob@3.2.0:
+ dependencies:
+ node-domexception: 1.0.0
+ web-streams-polyfill: 3.3.3
+
+ fflate@0.8.2: {}
+
+ figures@5.0.0:
+ dependencies:
+ escape-string-regexp: 5.0.0
+ is-unicode-supported: 1.3.0
+
+ file-entry-cache@6.0.1:
+ dependencies:
+ flat-cache: 3.2.0
+
+ file-uri-to-path@1.0.0: {}
+
+ fill-range@7.1.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ find-up@5.0.0:
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+
+ find-up@6.3.0:
+ dependencies:
+ locate-path: 7.2.0
+ path-exists: 5.0.0
+
+ flat-cache@3.2.0:
+ dependencies:
+ flatted: 3.3.1
+ keyv: 4.5.4
+ rimraf: 3.0.2
+
+ flatted@3.3.1: {}
+
+ foreground-child@3.1.1:
+ dependencies:
+ cross-spawn: 7.0.3
+ signal-exit: 4.1.0
+
+ form-data@4.0.0:
+ dependencies:
+ asynckit: 0.4.0
+ combined-stream: 1.0.8
+ mime-types: 2.1.35
+
+ formdata-polyfill@4.0.10:
+ dependencies:
+ fetch-blob: 3.2.0
+
+ from@0.1.7: {}
+
+ fs-constants@1.0.0: {}
+
+ fs-extra@11.2.0:
+ dependencies:
+ graceful-fs: 4.2.11
+ jsonfile: 6.1.0
+ universalify: 2.0.1
+
+ fs.realpath@1.0.0: {}
+
+ fsevents@2.3.3:
+ optional: true
+
+ function-bind@1.1.2: {}
+
+ fx@34.0.0: {}
+
+ generate-function@2.3.1:
+ dependencies:
+ is-property: 1.0.2
+
+ get-caller-file@2.0.5: {}
+
+ get-func-name@2.0.2: {}
+
+ get-port@6.1.2: {}
+
+ get-source@2.0.12:
+ dependencies:
+ data-uri-to-buffer: 2.0.2
+ source-map: 0.6.1
+
+ get-stream@6.0.1: {}
+
+ get-stream@8.0.1: {}
+
+ get-tsconfig@4.7.5:
+ dependencies:
+ resolve-pkg-maps: 1.0.0
+
+ github-from-package@0.0.0: {}
+
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob-parent@6.0.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob-to-regexp@0.4.1: {}
+
+ glob@10.3.15:
+ dependencies:
+ foreground-child: 3.1.1
+ jackspeak: 2.3.6
+ minimatch: 9.0.4
+ minipass: 7.1.1
+ path-scurry: 1.11.1
+
+ glob@7.2.3:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.2
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+
+ glob@8.1.0:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 5.1.6
+ once: 1.4.0
+
+ globals@13.24.0:
+ dependencies:
+ type-fest: 0.20.2
+
+ globby@11.1.0:
+ dependencies:
+ array-union: 2.1.0
+ dir-glob: 3.0.1
+ fast-glob: 3.3.2
+ ignore: 5.3.1
+ merge2: 1.4.1
+ slash: 3.0.0
+
+ globby@13.2.2:
+ dependencies:
+ dir-glob: 3.0.1
+ fast-glob: 3.3.2
+ ignore: 5.3.1
+ merge2: 1.4.1
+ slash: 4.0.0
+
+ globrex@0.1.2: {}
+
+ graceful-fs@4.2.11: {}
+
+ graphemer@1.4.0: {}
+
+ hanji@0.0.5:
+ dependencies:
+ lodash.throttle: 4.1.1
+ sisteransi: 1.0.5
+
+ has-flag@4.0.0: {}
+
+ hasown@2.0.2:
+ dependencies:
+ function-bind: 1.1.2
+
+ heap@0.2.7: {}
+
+ hono@4.3.9: {}
+
+ human-signals@2.1.0: {}
+
+ human-signals@5.0.0: {}
+
+ iconv-lite@0.6.3:
+ dependencies:
+ safer-buffer: 2.1.2
+
+ ieee754@1.2.1: {}
+
+ ignore-by-default@2.1.0: {}
+
+ ignore@5.3.1: {}
+
+ import-fresh@3.3.0:
+ dependencies:
+ parent-module: 1.0.1
+ resolve-from: 4.0.0
+
+ imurmurhash@0.1.4: {}
+
+ indent-string@5.0.0: {}
+
+ inflight@1.0.6:
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+
+ inherits@2.0.4: {}
+
+ ini@1.3.8: {}
+
+ irregular-plurals@3.5.0: {}
+
+ is-binary-path@2.1.0:
+ dependencies:
+ binary-extensions: 2.3.0
+
+ is-core-module@2.13.1:
+ dependencies:
+ hasown: 2.0.2
+
+ is-error@2.2.2: {}
+
+ is-extglob@2.1.1: {}
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-fullwidth-code-point@4.0.0: {}
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-number@7.0.0: {}
+
+ is-path-inside@3.0.3: {}
+
+ is-plain-object@5.0.0: {}
+
+ is-promise@2.2.2: {}
+
+ is-promise@4.0.0: {}
+
+ is-property@1.0.2: {}
+
+ is-stream@2.0.1: {}
+
+ is-stream@3.0.0: {}
+
+ is-unicode-supported@1.3.0: {}
+
+ is-what@4.1.16: {}
+
+ isexe@2.0.0: {}
+
+ jackspeak@2.3.6:
+ dependencies:
+ '@isaacs/cliui': 8.0.2
+ optionalDependencies:
+ '@pkgjs/parseargs': 0.11.0
+
+ joycon@3.1.1: {}
+
+ js-base64@3.7.7: {}
+
+ js-string-escape@1.0.1: {}
+
+ js-tokens@9.0.0: {}
+
+ js-yaml@3.14.1:
+ dependencies:
+ argparse: 1.0.10
+ esprima: 4.0.1
+
+ js-yaml@4.1.0:
+ dependencies:
+ argparse: 2.0.1
+
+ json-buffer@3.0.1: {}
+
+ json-diff@0.9.0:
+ dependencies:
+ cli-color: 2.0.4
+ difflib: 0.2.4(patch_hash=jq4t3ysdpnbunjeje4v7nrqn2q)
+ dreamopt: 0.8.0
+
+ json-diff@1.0.6:
+ dependencies:
+ '@ewoudenberg/difflib': 0.1.0
+ colors: 1.4.0
+ dreamopt: 0.8.0
+
+ json-schema-traverse@0.4.1: {}
+
+ json-stable-stringify-without-jsonify@1.0.1: {}
+
+ jsonfile@6.1.0:
+ dependencies:
+ universalify: 2.0.1
+ optionalDependencies:
+ graceful-fs: 4.2.11
+
+ keyv@4.5.4:
+ dependencies:
+ json-buffer: 3.0.1
+
+ levn@0.4.1:
+ dependencies:
+ prelude-ls: 1.2.1
+ type-check: 0.4.0
+
+ libsql@0.2.0:
+ dependencies:
+ '@neon-rs/load': 0.0.4
+ detect-libc: 2.0.2
+ optionalDependencies:
+ '@libsql/darwin-arm64': 0.2.0
+ '@libsql/darwin-x64': 0.2.0
+ '@libsql/linux-arm64-gnu': 0.2.0
+ '@libsql/linux-arm64-musl': 0.2.0
+ '@libsql/linux-x64-gnu': 0.2.0
+ '@libsql/linux-x64-musl': 0.2.0
+ '@libsql/win32-x64-msvc': 0.2.0
+ optional: true
+
+ lilconfig@3.1.1: {}
+
+ lines-and-columns@1.2.4: {}
+
+ load-json-file@7.0.1: {}
+
+ load-tsconfig@0.2.5: {}
+
+ local-pkg@0.5.0:
+ dependencies:
+ mlly: 1.7.0
+ pkg-types: 1.1.1
+
+ locate-path@6.0.0:
+ dependencies:
+ p-locate: 5.0.0
+
+ locate-path@7.2.0:
+ dependencies:
+ p-locate: 6.0.0
+
+ lodash.merge@4.6.2: {}
+
+ lodash.sortby@4.7.0: {}
+
+ lodash.throttle@4.1.1: {}
+
+ lodash@4.17.21: {}
+
+ long@4.0.0: {}
+
+ loupe@2.3.7:
+ dependencies:
+ get-func-name: 2.0.2
+
+ lru-cache@10.2.2: {}
+
+ lru-cache@6.0.0:
+ dependencies:
+ yallist: 4.0.0
+
+ lru-cache@7.18.3: {}
+
+ lru-queue@0.1.0:
+ dependencies:
+ es5-ext: 0.10.64
+
+ magic-string@0.25.9:
+ dependencies:
+ sourcemap-codec: 1.4.8
+
+ magic-string@0.30.10:
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.4.15
+
+ map-age-cleaner@0.1.3:
+ dependencies:
+ p-defer: 1.0.0
+
+ map-stream@0.1.0: {}
+
+ marked-terminal@6.2.0(marked@9.1.6):
+ dependencies:
+ ansi-escapes: 6.2.1
+ cardinal: 2.1.1
+ chalk: 5.3.0
+ cli-table3: 0.6.5
+ marked: 9.1.6
+ node-emoji: 2.1.3
+ supports-hyperlinks: 3.0.0
+
+ marked@9.1.6: {}
+
+ matcher@5.0.0:
+ dependencies:
+ escape-string-regexp: 5.0.0
+
+ md5-hex@3.0.1:
+ dependencies:
+ blueimp-md5: 2.19.0
+
+ mem@9.0.2:
+ dependencies:
+ map-age-cleaner: 0.1.3
+ mimic-fn: 4.0.0
+
+ memoizee@0.4.15:
+ dependencies:
+ d: 1.0.2
+ es5-ext: 0.10.64
+ es6-weak-map: 2.0.3
+ event-emitter: 0.3.5
+ is-promise: 2.2.2
+ lru-queue: 0.1.0
+ next-tick: 1.1.0
+ timers-ext: 0.1.7
+
+ merge-stream@2.0.0: {}
+
+ merge2@1.4.1: {}
+
+ micromatch@4.0.5:
+ dependencies:
+ braces: 3.0.2
+ picomatch: 2.3.1
+
+ mime-db@1.52.0: {}
+
+ mime-types@2.1.35:
+ dependencies:
+ mime-db: 1.52.0
+
+ mime@3.0.0: {}
+
+ mimic-fn@2.1.0: {}
+
+ mimic-fn@4.0.0: {}
+
+ mimic-response@3.1.0: {}
+
+ miniflare@3.20240512.0(bufferutil@4.0.8)(utf-8-validate@6.0.3):
+ dependencies:
+ '@cspotcode/source-map-support': 0.8.1
+ acorn: 8.11.3
+ acorn-walk: 8.3.2
+ capnp-ts: 0.7.0
+ exit-hook: 2.2.1
+ glob-to-regexp: 0.4.1
+ stoppable: 1.1.0
+ undici: 5.28.4
+ workerd: 1.20240512.0
+ ws: 8.17.0(bufferutil@4.0.8)(utf-8-validate@6.0.3)
+ youch: 3.3.3
+ zod: 3.23.8
+ transitivePeerDependencies:
+ - bufferutil
+ - supports-color
+ - utf-8-validate
+
+ minimatch@3.1.2:
+ dependencies:
+ brace-expansion: 1.1.11
+
+ minimatch@5.1.6:
+ dependencies:
+ brace-expansion: 2.0.1
+
+ minimatch@7.4.6:
+ dependencies:
+ brace-expansion: 2.0.1
+
+ minimatch@9.0.4:
+ dependencies:
+ brace-expansion: 2.0.1
+
+ minimist@1.2.8: {}
+
+ minipass@7.1.1: {}
+
+ mkdirp-classic@0.5.3: {}
+
+ mlly@1.7.0:
+ dependencies:
+ acorn: 8.11.3
+ pathe: 1.1.2
+ pkg-types: 1.1.1
+ ufo: 1.5.3
+
+ ms@2.1.2: {}
+
+ ms@2.1.3: {}
+
+ mustache@4.2.0: {}
+
+ mysql2@2.3.3:
+ dependencies:
+ denque: 2.1.0
+ generate-function: 2.3.1
+ iconv-lite: 0.6.3
+ long: 4.0.0
+ lru-cache: 6.0.0
+ named-placeholders: 1.1.3
+ seq-queue: 0.0.5
+ sqlstring: 2.3.3
+
+ mz@2.7.0:
+ dependencies:
+ any-promise: 1.3.0
+ object-assign: 4.1.1
+ thenify-all: 1.6.0
+
+ named-placeholders@1.1.3:
+ dependencies:
+ lru-cache: 7.18.3
+
+ nan@2.19.0:
+ optional: true
+
+ nanoid@3.3.7: {}
+
+ napi-build-utils@1.0.2: {}
+
+ natural-compare@1.4.0: {}
+
+ next-tick@1.1.0: {}
+
+ node-abi@3.62.0:
+ dependencies:
+ semver: 7.6.2
+
+ node-domexception@1.0.0: {}
+
+ node-emoji@2.1.3:
+ dependencies:
+ '@sindresorhus/is': 4.6.0
+ char-regex: 1.0.2
+ emojilib: 2.4.0
+ skin-tone: 2.0.0
+
+ node-fetch@2.7.0:
+ dependencies:
+ whatwg-url: 5.0.0
+
+ node-fetch@3.3.1:
+ dependencies:
+ data-uri-to-buffer: 4.0.1
+ fetch-blob: 3.2.0
+ formdata-polyfill: 4.0.10
+
+ node-fetch@3.3.2:
+ dependencies:
+ data-uri-to-buffer: 4.0.1
+ fetch-blob: 3.2.0
+ formdata-polyfill: 4.0.10
+
+ node-forge@1.3.1: {}
+
+ node-gyp-build@4.8.1: {}
+
+ nofilter@3.1.0: {}
+
+ normalize-path@3.0.0: {}
+
+ npm-run-path@4.0.1:
+ dependencies:
+ path-key: 3.1.1
+
+ npm-run-path@5.3.0:
+ dependencies:
+ path-key: 4.0.0
+
+ object-assign@4.1.1: {}
+
+ obuf@1.1.2: {}
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
+ onetime@5.1.2:
+ dependencies:
+ mimic-fn: 2.1.0
+
+ onetime@6.0.0:
+ dependencies:
+ mimic-fn: 4.0.0
+
+ optionator@0.9.4:
+ dependencies:
+ deep-is: 0.1.4
+ fast-levenshtein: 2.0.6
+ levn: 0.4.1
+ prelude-ls: 1.2.1
+ type-check: 0.4.0
+ word-wrap: 1.2.5
+
+ p-defer@1.0.0: {}
+
+ p-event@5.0.1:
+ dependencies:
+ p-timeout: 5.1.0
+
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
+ p-limit@4.0.0:
+ dependencies:
+ yocto-queue: 1.0.0
+
+ p-limit@5.0.0:
+ dependencies:
+ yocto-queue: 1.0.0
+
+ p-locate@5.0.0:
+ dependencies:
+ p-limit: 3.1.0
+
+ p-locate@6.0.0:
+ dependencies:
+ p-limit: 4.0.0
+
+ p-map@5.5.0:
+ dependencies:
+ aggregate-error: 4.0.1
+
+ p-timeout@5.1.0: {}
+
+ parent-module@1.0.1:
+ dependencies:
+ callsites: 3.1.0
+
+ parse-ms@3.0.0: {}
+
+ path-exists@4.0.0: {}
+
+ path-exists@5.0.0: {}
+
+ path-is-absolute@1.0.1: {}
+
+ path-key@3.1.1: {}
+
+ path-key@4.0.0: {}
+
+ path-parse@1.0.7: {}
+
+ path-scurry@1.11.1:
+ dependencies:
+ lru-cache: 10.2.2
+ minipass: 7.1.1
+
+ path-to-regexp@6.2.2: {}
+
+ path-type@4.0.0: {}
+
+ pathe@1.1.2: {}
+
+ pathval@1.1.1: {}
+
+ pause-stream@0.0.11:
+ dependencies:
+ through: 2.3.8
+
+ pg-cloudflare@1.1.1:
+ optional: true
+
+ pg-connection-string@2.6.4: {}
+
+ pg-int8@1.0.1: {}
+
+ pg-numeric@1.0.2: {}
+
+ pg-pool@3.6.2(pg@8.11.5):
+ dependencies:
+ pg: 8.11.5
+
+ pg-protocol@1.6.1: {}
+
+ pg-types@2.2.0:
+ dependencies:
+ pg-int8: 1.0.1
+ postgres-array: 2.0.0
+ postgres-bytea: 1.0.0
+ postgres-date: 1.0.7
+ postgres-interval: 1.2.0
+
+ pg-types@4.0.2:
+ dependencies:
+ pg-int8: 1.0.1
+ pg-numeric: 1.0.2
+ postgres-array: 3.0.2
+ postgres-bytea: 3.0.0
+ postgres-date: 2.1.0
+ postgres-interval: 3.0.0
+ postgres-range: 1.1.4
+
+ pg@8.11.5:
+ dependencies:
+ pg-connection-string: 2.6.4
+ pg-pool: 3.6.2(pg@8.11.5)
+ pg-protocol: 1.6.1
+ pg-types: 2.2.0
+ pgpass: 1.0.5
+ optionalDependencies:
+ pg-cloudflare: 1.1.1
+
+ pgpass@1.0.5:
+ dependencies:
+ split2: 4.2.0
+
+ picocolors@1.0.1: {}
+
+ picomatch@2.3.1: {}
+
+ pirates@4.0.6: {}
+
+ pkg-conf@4.0.0:
+ dependencies:
+ find-up: 6.3.0
+ load-json-file: 7.0.1
+
+ pkg-types@1.1.1:
+ dependencies:
+ confbox: 0.1.7
+ mlly: 1.7.0
+ pathe: 1.1.2
+
+ plur@5.1.0:
+ dependencies:
+ irregular-plurals: 3.5.0
+
+ pluralize@8.0.0: {}
+
+ postcss-load-config@4.0.2(postcss@8.4.38):
+ dependencies:
+ lilconfig: 3.1.1
+ yaml: 2.4.2
+ optionalDependencies:
+ postcss: 8.4.38
+
+ postcss@8.4.38:
+ dependencies:
+ nanoid: 3.3.7
+ picocolors: 1.0.1
+ source-map-js: 1.2.0
+
+ postgres-array@2.0.0: {}
+
+ postgres-array@3.0.2: {}
+
+ postgres-bytea@1.0.0: {}
+
+ postgres-bytea@3.0.0:
+ dependencies:
+ obuf: 1.1.2
+
+ postgres-date@1.0.7: {}
+
+ postgres-date@2.1.0: {}
+
+ postgres-interval@1.2.0:
+ dependencies:
+ xtend: 4.0.2
+
+ postgres-interval@3.0.0: {}
+
+ postgres-range@1.1.4: {}
+
+ postgres@3.4.4: {}
+
+ prebuild-install@7.1.2:
+ dependencies:
+ detect-libc: 2.0.3
+ expand-template: 2.0.3
+ github-from-package: 0.0.0
+ minimist: 1.2.8
+ mkdirp-classic: 0.5.3
+ napi-build-utils: 1.0.2
+ node-abi: 3.62.0
+ pump: 3.0.0
+ rc: 1.2.8
+ simple-get: 4.0.1
+ tar-fs: 2.1.1
+ tunnel-agent: 0.6.0
+
+ prelude-ls@1.2.1: {}
+
+ prettier-linter-helpers@1.0.0:
+ dependencies:
+ fast-diff: 1.3.0
+
+ prettier@2.8.8: {}
+
+ pretty-format@29.7.0:
+ dependencies:
+ '@jest/schemas': 29.6.3
+ ansi-styles: 5.2.0
+ react-is: 18.3.1
+
+ pretty-ms@8.0.0:
+ dependencies:
+ parse-ms: 3.0.0
+
+ printable-characters@1.0.42: {}
+
+ ps-tree@1.2.0:
+ dependencies:
+ event-stream: 3.3.4
+
+ pump@3.0.0:
+ dependencies:
+ end-of-stream: 1.4.4
+ once: 1.4.0
+
+ punycode@2.3.1: {}
+
+ queue-microtask@1.2.3: {}
+
+ rc@1.2.8:
+ dependencies:
+ deep-extend: 0.6.0
+ ini: 1.3.8
+ minimist: 1.2.8
+ strip-json-comments: 2.0.1
+
+ react-is@18.3.1: {}
+
+ readable-stream@3.6.2:
+ dependencies:
+ inherits: 2.0.4
+ string_decoder: 1.3.0
+ util-deprecate: 1.0.2
+
+ readdirp@3.6.0:
+ dependencies:
+ picomatch: 2.3.1
+
+ redeyed@2.1.1:
+ dependencies:
+ esprima: 4.0.1
+
+ require-directory@2.1.1: {}
+
+ resolve-cwd@3.0.0:
+ dependencies:
+ resolve-from: 5.0.0
+
+ resolve-from@4.0.0: {}
+
+ resolve-from@5.0.0: {}
+
+ resolve-pkg-maps@1.0.0: {}
+
+ resolve.exports@2.0.2: {}
+
+ resolve@1.22.8:
+ dependencies:
+ is-core-module: 2.13.1
+ path-parse: 1.0.7
+ supports-preserve-symlinks-flag: 1.0.0
+
+ reusify@1.0.4: {}
+
+ rimraf@3.0.2:
+ dependencies:
+ glob: 7.2.3
+
+ rollup-plugin-inject@3.0.2:
+ dependencies:
+ estree-walker: 0.6.1
+ magic-string: 0.25.9
+ rollup-pluginutils: 2.8.2
+
+ rollup-plugin-node-polyfills@0.2.1:
+ dependencies:
+ rollup-plugin-inject: 3.0.2
+
+ rollup-pluginutils@2.8.2:
+ dependencies:
+ estree-walker: 0.6.1
+
+ rollup@4.17.2:
+ dependencies:
+ '@types/estree': 1.0.5
+ optionalDependencies:
+ '@rollup/rollup-android-arm-eabi': 4.17.2
+ '@rollup/rollup-android-arm64': 4.17.2
+ '@rollup/rollup-darwin-arm64': 4.17.2
+ '@rollup/rollup-darwin-x64': 4.17.2
+ '@rollup/rollup-linux-arm-gnueabihf': 4.17.2
+ '@rollup/rollup-linux-arm-musleabihf': 4.17.2
+ '@rollup/rollup-linux-arm64-gnu': 4.17.2
+ '@rollup/rollup-linux-arm64-musl': 4.17.2
+ '@rollup/rollup-linux-powerpc64le-gnu': 4.17.2
+ '@rollup/rollup-linux-riscv64-gnu': 4.17.2
+ '@rollup/rollup-linux-s390x-gnu': 4.17.2
+ '@rollup/rollup-linux-x64-gnu': 4.17.2
+ '@rollup/rollup-linux-x64-musl': 4.17.2
+ '@rollup/rollup-win32-arm64-msvc': 4.17.2
+ '@rollup/rollup-win32-ia32-msvc': 4.17.2
+ '@rollup/rollup-win32-x64-msvc': 4.17.2
+ fsevents: 2.3.3
+
+ run-parallel@1.2.0:
+ dependencies:
+ queue-microtask: 1.2.3
+
+ safe-buffer@5.2.1: {}
+
+ safer-buffer@2.1.2: {}
+
+ selfsigned@2.4.1:
+ dependencies:
+ '@types/node-forge': 1.3.11
+ node-forge: 1.3.1
+
+ semver@7.6.2: {}
+
+ seq-queue@0.0.5: {}
+
+ serialize-error@7.0.1:
+ dependencies:
+ type-fest: 0.13.1
+
+ shebang-command@2.0.0:
+ dependencies:
+ shebang-regex: 3.0.0
+
+ shebang-regex@3.0.0: {}
+
+ siginfo@2.0.0: {}
+
+ signal-exit@3.0.7: {}
+
+ signal-exit@4.1.0: {}
+
+ simple-concat@1.0.1: {}
+
+ simple-get@4.0.1:
+ dependencies:
+ decompress-response: 6.0.0
+ once: 1.4.0
+ simple-concat: 1.0.1
+
+ sisteransi@1.0.5: {}
+
+ skin-tone@2.0.0:
+ dependencies:
+ unicode-emoji-modifier-base: 1.0.0
+
+ slash@3.0.0: {}
+
+ slash@4.0.0: {}
+
+ slice-ansi@5.0.0:
+ dependencies:
+ ansi-styles: 6.2.1
+ is-fullwidth-code-point: 4.0.0
+
+ source-map-js@1.2.0: {}
+
+ source-map-support@0.5.21:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ source-map@0.6.1: {}
+
+ source-map@0.8.0-beta.0:
+ dependencies:
+ whatwg-url: 7.1.0
+
+ sourcemap-codec@1.4.8: {}
+
+ split-ca@1.0.1: {}
+
+ split2@4.2.0: {}
+
+ split@0.3.3:
+ dependencies:
+ through: 2.3.8
+
+ sprintf-js@1.0.3: {}
+
+ sqlstring@2.3.3: {}
+
+ ssh2@1.15.0:
+ dependencies:
+ asn1: 0.2.6
+ bcrypt-pbkdf: 1.0.2
+ optionalDependencies:
+ cpu-features: 0.0.10
+ nan: 2.19.0
+
+ stack-utils@2.0.6:
+ dependencies:
+ escape-string-regexp: 2.0.0
+
+ stackback@0.0.2: {}
+
+ stacktracey@2.1.8:
+ dependencies:
+ as-table: 1.0.55
+ get-source: 2.0.12
+
+ std-env@3.7.0: {}
+
+ stoppable@1.1.0: {}
+
+ stream-combiner@0.0.4:
+ dependencies:
+ duplexer: 0.1.2
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ string-width@5.1.2:
+ dependencies:
+ eastasianwidth: 0.2.0
+ emoji-regex: 9.2.2
+ strip-ansi: 7.1.0
+
+ string_decoder@1.3.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-ansi@7.1.0:
+ dependencies:
+ ansi-regex: 6.0.1
+
+ strip-final-newline@2.0.0: {}
+
+ strip-final-newline@3.0.0: {}
+
+ strip-json-comments@2.0.1: {}
+
+ strip-json-comments@3.1.1: {}
+
+ strip-literal@2.1.0:
+ dependencies:
+ js-tokens: 9.0.0
+
+ strnum@1.0.5: {}
+
+ sucrase@3.35.0:
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.5
+ commander: 4.1.1
+ glob: 10.3.15
+ lines-and-columns: 1.2.4
+ mz: 2.7.0
+ pirates: 4.0.6
+ ts-interface-checker: 0.1.13
+
+ superjson@2.2.1:
+ dependencies:
+ copy-anything: 3.0.5
+
+ supertap@3.0.1:
+ dependencies:
+ indent-string: 5.0.0
+ js-yaml: 3.14.1
+ serialize-error: 7.0.1
+ strip-ansi: 7.1.0
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-hyperlinks@3.0.0:
+ dependencies:
+ has-flag: 4.0.0
+ supports-color: 7.2.0
+
+ supports-preserve-symlinks-flag@1.0.0: {}
+
+ synckit@0.8.8:
+ dependencies:
+ '@pkgr/core': 0.1.1
+ tslib: 2.6.2
+
+ tar-fs@2.0.1:
+ dependencies:
+ chownr: 1.1.4
+ mkdirp-classic: 0.5.3
+ pump: 3.0.0
+ tar-stream: 2.2.0
+
+ tar-fs@2.1.1:
+ dependencies:
+ chownr: 1.1.4
+ mkdirp-classic: 0.5.3
+ pump: 3.0.0
+ tar-stream: 2.2.0
+
+ tar-stream@2.2.0:
+ dependencies:
+ bl: 4.1.0
+ end-of-stream: 1.4.4
+ fs-constants: 1.0.0
+ inherits: 2.0.4
+ readable-stream: 3.6.2
+
+ temp-dir@3.0.0: {}
+
+ text-table@0.2.0: {}
+
+ thenify-all@1.6.0:
+ dependencies:
+ thenify: 3.3.1
+
+ thenify@3.3.1:
+ dependencies:
+ any-promise: 1.3.0
+
+ through@2.3.8: {}
+
+ time-zone@1.0.0: {}
+
+ timers-ext@0.1.7:
+ dependencies:
+ es5-ext: 0.10.64
+ next-tick: 1.1.0
+
+ tinybench@2.8.0: {}
+
+ tinypool@0.8.4: {}
+
+ tinyspy@2.2.1: {}
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ tr46@0.0.3: {}
+
+ tr46@1.0.1:
+ dependencies:
+ punycode: 2.3.1
+
+ tree-kill@1.2.2: {}
+
+ ts-api-utils@1.3.0(typescript@5.4.5):
+ dependencies:
+ typescript: 5.4.5
+
+ ts-expose-internals-conditionally@1.0.0-empty.0: {}
+
+ ts-interface-checker@0.1.13: {}
+
+ tsconfck@3.0.3(typescript@5.4.5):
+ optionalDependencies:
+ typescript: 5.4.5
+
+ tslib@1.14.1: {}
+
+ tslib@2.6.2: {}
+
+ tsup@8.0.2(postcss@8.4.38)(typescript@5.4.5):
+ dependencies:
+ bundle-require: 4.1.0(esbuild@0.19.12)
+ cac: 6.7.14
+ chokidar: 3.6.0
+ debug: 4.3.4
+ esbuild: 0.19.12
+ execa: 5.1.1
+ globby: 11.1.0
+ joycon: 3.1.1
+ postcss-load-config: 4.0.2(postcss@8.4.38)
+ resolve-from: 5.0.0
+ rollup: 4.17.2
+ source-map: 0.8.0-beta.0
+ sucrase: 3.35.0
+ tree-kill: 1.2.2
+ optionalDependencies:
+ postcss: 8.4.38
+ typescript: 5.4.5
+ transitivePeerDependencies:
+ - supports-color
+ - ts-node
+
+ tsx@3.14.0:
+ dependencies:
+ esbuild: 0.18.20
+ get-tsconfig: 4.7.5
+ source-map-support: 0.5.21
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ tunnel-agent@0.6.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ tweetnacl@0.14.5: {}
+
+ type-check@0.4.0:
+ dependencies:
+ prelude-ls: 1.2.1
+
+ type-detect@4.0.8: {}
+
+ type-fest@0.13.1: {}
+
+ type-fest@0.20.2: {}
+
+ type@2.7.2: {}
+
+ typescript@5.3.3: {}
+
+ typescript@5.4.5: {}
+
+ ufo@1.5.3: {}
+
+ undici-types@5.26.5: {}
+
+ undici@5.28.4:
+ dependencies:
+ '@fastify/busboy': 2.1.1
+
+ unicode-emoji-modifier-base@1.0.0: {}
+
+ universalify@2.0.1: {}
+
+ uri-js@4.4.1:
+ dependencies:
+ punycode: 2.3.1
+
+ utf-8-validate@6.0.3:
+ dependencies:
+ node-gyp-build: 4.8.1
+
+ util-deprecate@1.0.2: {}
+
+ uuid@9.0.1: {}
+
+ validate-npm-package-name@5.0.1: {}
+
+ vite-node@1.6.0(@types/node@18.19.33):
+ dependencies:
+ cac: 6.7.14
+ debug: 4.3.4
+ pathe: 1.1.2
+ picocolors: 1.0.1
+ vite: 5.2.11(@types/node@18.19.33)
+ transitivePeerDependencies:
+ - '@types/node'
+ - less
+ - lightningcss
+ - sass
+ - stylus
+ - sugarss
+ - supports-color
+ - terser
+
+ vite-tsconfig-paths@4.3.2(typescript@5.4.5)(vite@5.2.11(@types/node@18.19.33)):
+ dependencies:
+ debug: 4.3.4
+ globrex: 0.1.2
+ tsconfck: 3.0.3(typescript@5.4.5)
+ optionalDependencies:
+ vite: 5.2.11(@types/node@18.19.33)
+ transitivePeerDependencies:
+ - supports-color
+ - typescript
+
+ vite@5.2.11(@types/node@18.19.33):
+ dependencies:
+ esbuild: 0.20.2
+ postcss: 8.4.38
+ rollup: 4.17.2
+ optionalDependencies:
+ '@types/node': 18.19.33
+ fsevents: 2.3.3
+
+ vitest@1.6.0(@types/node@18.19.33):
+ dependencies:
+ '@vitest/expect': 1.6.0
+ '@vitest/runner': 1.6.0
+ '@vitest/snapshot': 1.6.0
+ '@vitest/spy': 1.6.0
+ '@vitest/utils': 1.6.0
+ acorn-walk: 8.3.2
+ chai: 4.4.1
+ debug: 4.3.4
+ execa: 8.0.1
+ local-pkg: 0.5.0
+ magic-string: 0.30.10
+ pathe: 1.1.2
+ picocolors: 1.0.1
+ std-env: 3.7.0
+ strip-literal: 2.1.0
+ tinybench: 2.8.0
+ tinypool: 0.8.4
+ vite: 5.2.11(@types/node@18.19.33)
+ vite-node: 1.6.0(@types/node@18.19.33)
+ why-is-node-running: 2.2.2
+ optionalDependencies:
+ '@types/node': 18.19.33
+ transitivePeerDependencies:
+ - less
+ - lightningcss
+ - sass
+ - stylus
+ - sugarss
+ - supports-color
+ - terser
+
+ web-streams-polyfill@3.3.3: {}
+
+ webidl-conversions@3.0.1: {}
+
+ webidl-conversions@4.0.2: {}
+
+ webpod@0.0.2: {}
+
+ well-known-symbols@2.0.0: {}
+
+ whatwg-url@5.0.0:
+ dependencies:
+ tr46: 0.0.3
+ webidl-conversions: 3.0.1
+
+ whatwg-url@7.1.0:
+ dependencies:
+ lodash.sortby: 4.7.0
+ tr46: 1.0.1
+ webidl-conversions: 4.0.2
+
+ which@2.0.2:
+ dependencies:
+ isexe: 2.0.0
+
+ which@3.0.1:
+ dependencies:
+ isexe: 2.0.0
+
+ why-is-node-running@2.2.2:
+ dependencies:
+ siginfo: 2.0.0
+ stackback: 0.0.2
+
+ word-wrap@1.2.5: {}
+
+ wordwrap@1.0.0: {}
+
+ workerd@1.20240512.0:
+ optionalDependencies:
+ '@cloudflare/workerd-darwin-64': 1.20240512.0
+ '@cloudflare/workerd-darwin-arm64': 1.20240512.0
+ '@cloudflare/workerd-linux-64': 1.20240512.0
+ '@cloudflare/workerd-linux-arm64': 1.20240512.0
+ '@cloudflare/workerd-windows-64': 1.20240512.0
+
+ wrangler@3.57.0(@cloudflare/workers-types@4.20240512.0)(bufferutil@4.0.8)(utf-8-validate@6.0.3):
+ dependencies:
+ '@cloudflare/kv-asset-handler': 0.3.2
+ '@esbuild-plugins/node-globals-polyfill': 0.2.3(esbuild@0.17.19)
+ '@esbuild-plugins/node-modules-polyfill': 0.2.2(esbuild@0.17.19)
+ blake3-wasm: 2.1.5
+ chokidar: 3.6.0
+ esbuild: 0.17.19
+ miniflare: 3.20240512.0(bufferutil@4.0.8)(utf-8-validate@6.0.3)
+ nanoid: 3.3.7
+ path-to-regexp: 6.2.2
+ resolve: 1.22.8
+ resolve.exports: 2.0.2
+ selfsigned: 2.4.1
+ source-map: 0.6.1
+ xxhash-wasm: 1.0.2
+ optionalDependencies:
+ '@cloudflare/workers-types': 4.20240512.0
+ fsevents: 2.3.3
+ transitivePeerDependencies:
+ - bufferutil
+ - supports-color
+ - utf-8-validate
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrap-ansi@8.1.0:
+ dependencies:
+ ansi-styles: 6.2.1
+ string-width: 5.1.2
+ strip-ansi: 7.1.0
+
+ wrappy@1.0.2: {}
+
+ write-file-atomic@5.0.1:
+ dependencies:
+ imurmurhash: 0.1.4
+ signal-exit: 4.1.0
+
+ ws@8.14.2(bufferutil@4.0.8)(utf-8-validate@6.0.3):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 6.0.3
+
+ ws@8.17.0(bufferutil@4.0.8)(utf-8-validate@6.0.3):
+ optionalDependencies:
+ bufferutil: 4.0.8
+ utf-8-validate: 6.0.3
+
+ xtend@4.0.2: {}
+
+ xxhash-wasm@1.0.2: {}
+
+ y18n@5.0.8: {}
+
+ yallist@4.0.0: {}
+
+ yaml@2.4.2: {}
+
+ yargs-parser@21.1.1: {}
+
+ yargs@17.7.2:
+ dependencies:
+ cliui: 8.0.1
+ escalade: 3.1.2
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 21.1.1
+
+ yocto-queue@0.1.0: {}
+
+ yocto-queue@1.0.0: {}
+
+ youch@3.3.3:
+ dependencies:
+ cookie: 0.5.0
+ mustache: 4.2.0
+ stacktracey: 2.1.8
+
+ zod@3.23.8: {}
+
+ zx@7.2.3:
+ dependencies:
+ '@types/fs-extra': 11.0.4
+ '@types/minimist': 1.2.5
+ '@types/node': 18.19.33
+ '@types/ps-tree': 1.1.6
+ '@types/which': 3.0.3
+ chalk: 5.3.0
+ fs-extra: 11.2.0
+ fx: 34.0.0
+ globby: 13.2.2
+ minimist: 1.2.8
+ node-fetch: 3.3.1
+ ps-tree: 1.2.0
+ webpod: 0.0.2
+ which: 3.0.1
+ yaml: 2.4.2
diff --git a/drizzle-kit/schema.ts b/drizzle-kit/schema.ts
new file mode 100644
index 000000000..e69de29bb
diff --git a/drizzle-kit/src/cli/commands/introspect.ts b/drizzle-kit/src/cli/commands/introspect.ts
index 9b5a044f6..3558bf83c 100644
--- a/drizzle-kit/src/cli/commands/introspect.ts
+++ b/drizzle-kit/src/cli/commands/introspect.ts
@@ -25,7 +25,6 @@ import {
} from '../../snapshotsDiffer';
import { prepareOutFolder } from '../../utils';
import type { Casing, Prefix } from '../validations/common';
-import { LibSQLCredentials } from '../validations/libsql';
import type { MysqlCredentials } from '../validations/mysql';
import type { PostgresCredentials } from '../validations/postgres';
import { SingleStoreCredentials } from '../validations/singlestore';
@@ -203,7 +202,6 @@ export const introspectMysql = async (
const schema = { id: originUUID, prevId: '', ...res } as MySqlSchema;
const ts = mysqlSchemaToTypeScript(schema, casing);
const relationsTs = relationsToTypeScript(schema, casing);
- const { internal, ...schemaWithoutInternals } = schema;
const schemaFile = join(out, 'schema.ts');
writeFileSync(schemaFile, ts.file);
@@ -471,117 +469,6 @@ export const introspectSqlite = async (
process.exit(0);
};
-export const introspectLibSQL = async (
- casing: Casing,
- out: string,
- breakpoints: boolean,
- credentials: LibSQLCredentials,
- tablesFilter: string[],
- prefix: Prefix,
-) => {
- const { connectToLibSQL } = await import('../connections');
- const db = await connectToLibSQL(credentials);
-
- const matchers = tablesFilter.map((it) => {
- return new Minimatch(it);
- });
-
- const filter = (tableName: string) => {
- if (matchers.length === 0) return true;
-
- let flags: boolean[] = [];
-
- for (let matcher of matchers) {
- if (matcher.negate) {
- if (!matcher.match(tableName)) {
- flags.push(false);
- }
- }
-
- if (matcher.match(tableName)) {
- flags.push(true);
- }
- }
-
- if (flags.length > 0) {
- return flags.every(Boolean);
- }
- return false;
- };
-
- const progress = new IntrospectProgress();
- const res = await renderWithTask(
- progress,
- fromSqliteDatabase(db, filter, (stage, count, status) => {
- progress.update(stage, count, status);
- }),
- );
-
- const schema = { id: originUUID, prevId: '', ...res } as SQLiteSchema;
- const ts = sqliteSchemaToTypeScript(schema, casing);
- const relationsTs = relationsToTypeScript(schema, casing);
-
- // check orm and orm-pg api version
-
- const schemaFile = join(out, 'schema.ts');
- writeFileSync(schemaFile, ts.file);
- const relationsFile = join(out, 'relations.ts');
- writeFileSync(relationsFile, relationsTs.file);
- console.log();
-
- const { snapshots, journal } = prepareOutFolder(out, 'sqlite');
-
- if (snapshots.length === 0) {
- const { sqlStatements, _meta } = await applySqliteSnapshotsDiff(
- squashSqliteScheme(drySQLite),
- squashSqliteScheme(schema),
- tablesResolver,
- columnsResolver,
- drySQLite,
- schema,
- );
-
- writeResult({
- cur: schema,
- sqlStatements,
- journal,
- _meta,
- outFolder: out,
- breakpoints,
- type: 'introspect',
- prefixMode: prefix,
- });
- } else {
- render(
- `[${
- chalk.blue(
- 'i',
- )
- }] No SQL generated, you already have migrations in project`,
- );
- }
-
- render(
- `[${
- chalk.green(
- '✓',
- )
- }] You schema file is ready ➜ ${chalk.bold.underline.blue(schemaFile)} 🚀`,
- );
- render(
- `[${
- chalk.green(
- '✓',
- )
- }] You relations file is ready ➜ ${
- chalk.bold.underline.blue(
- relationsFile,
- )
- } 🚀`,
- );
- process.exit(0);
-};
-
const withCasing = (value: string, casing: Casing) => {
if (casing === 'preserve') {
return value;
diff --git a/drizzle-kit/src/cli/commands/libSqlPushUtils.ts b/drizzle-kit/src/cli/commands/libSqlPushUtils.ts
deleted file mode 100644
index 01bb61334..000000000
--- a/drizzle-kit/src/cli/commands/libSqlPushUtils.ts
+++ /dev/null
@@ -1,346 +0,0 @@
-import chalk from 'chalk';
-
-import { JsonStatement } from 'src/jsonStatements';
-import { findAddedAndRemoved, SQLiteDB } from 'src/utils';
-import { SQLiteSchemaInternal, SQLiteSchemaSquashed, SQLiteSquasher } from '../../serializer/sqliteSchema';
-import {
- CreateSqliteIndexConvertor,
- fromJson,
- LibSQLModifyColumn,
- SQLiteCreateTableConvertor,
- SQLiteDropTableConvertor,
- SqliteRenameTableConvertor,
-} from '../../sqlgenerator';
-
-export const getOldTableName = (
- tableName: string,
- meta: SQLiteSchemaInternal['_meta'],
-) => {
- for (const key of Object.keys(meta.tables)) {
- const value = meta.tables[key];
- if (`"${tableName}"` === value) {
- return key.substring(1, key.length - 1);
- }
- }
- return tableName;
-};
-
-export const _moveDataStatements = (
- tableName: string,
- json: SQLiteSchemaSquashed,
- dataLoss: boolean = false,
-) => {
- const statements: string[] = [];
-
- const newTableName = `__new_${tableName}`;
-
- // create table statement from a new json2 with proper name
- const tableColumns = Object.values(json.tables[tableName].columns);
- const referenceData = Object.values(json.tables[tableName].foreignKeys);
- const compositePKs = Object.values(
- json.tables[tableName].compositePrimaryKeys,
- ).map((it) => SQLiteSquasher.unsquashPK(it));
-
- const fks = referenceData.map((it) => SQLiteSquasher.unsquashPushFK(it));
-
- // create new table
- statements.push(
- new SQLiteCreateTableConvertor().convert({
- type: 'sqlite_create_table',
- tableName: newTableName,
- columns: tableColumns,
- referenceData: fks,
- compositePKs,
- }),
- );
-
- // move data
- if (!dataLoss) {
- const columns = Object.keys(json.tables[tableName].columns).map(
- (c) => `"${c}"`,
- );
-
- statements.push(
- `INSERT INTO \`${newTableName}\`(${
- columns.join(
- ', ',
- )
- }) SELECT ${columns.join(', ')} FROM \`${tableName}\`;`,
- );
- }
-
- statements.push(
- new SQLiteDropTableConvertor().convert({
- type: 'drop_table',
- tableName: tableName,
- schema: '',
- }),
- );
-
- // rename table
- statements.push(
- new SqliteRenameTableConvertor().convert({
- fromSchema: '',
- tableNameFrom: newTableName,
- tableNameTo: tableName,
- toSchema: '',
- type: 'rename_table',
- }),
- );
-
- for (const idx of Object.values(json.tables[tableName].indexes)) {
- statements.push(
- new CreateSqliteIndexConvertor().convert({
- type: 'create_index',
- tableName: tableName,
- schema: '',
- data: idx,
- }),
- );
- }
- return statements;
-};
-
-export const libSqlLogSuggestionsAndReturn = async (
- connection: SQLiteDB,
- statements: JsonStatement[],
- json1: SQLiteSchemaSquashed,
- json2: SQLiteSchemaSquashed,
- meta: SQLiteSchemaInternal['_meta'],
-) => {
- let shouldAskForApprove = false;
- const statementsToExecute: string[] = [];
- const infoToPrint: string[] = [];
-
- const tablesToRemove: string[] = [];
- const columnsToRemove: string[] = [];
- const tablesToTruncate: string[] = [];
-
- for (const statement of statements) {
- if (statement.type === 'drop_table') {
- const res = await connection.query<{ count: string }>(
- `select count(*) as count from \`${statement.tableName}\``,
- );
- const count = Number(res[0].count);
- if (count > 0) {
- infoToPrint.push(
- `· You're about to delete ${
- chalk.underline(
- statement.tableName,
- )
- } table with ${count} items`,
- );
- tablesToRemove.push(statement.tableName);
- shouldAskForApprove = true;
- }
- const fromJsonStatement = fromJson([statement], 'turso', 'push', json2);
- statementsToExecute.push(
- ...(Array.isArray(fromJsonStatement) ? fromJsonStatement : [fromJsonStatement]),
- );
- } else if (statement.type === 'alter_table_drop_column') {
- const tableName = statement.tableName;
-
- const res = await connection.query<{ count: string }>(
- `select count(*) as count from \`${tableName}\``,
- );
- const count = Number(res[0].count);
- if (count > 0) {
- infoToPrint.push(
- `· You're about to delete ${
- chalk.underline(
- statement.columnName,
- )
- } column in ${tableName} table with ${count} items`,
- );
- columnsToRemove.push(`${tableName}_${statement.columnName}`);
- shouldAskForApprove = true;
- }
-
- const fromJsonStatement = fromJson([statement], 'turso', 'push', json2);
- statementsToExecute.push(
- ...(Array.isArray(fromJsonStatement) ? fromJsonStatement : [fromJsonStatement]),
- );
- } else if (
- statement.type === 'sqlite_alter_table_add_column'
- && statement.column.notNull
- && !statement.column.default
- ) {
- const newTableName = statement.tableName;
- const res = await connection.query<{ count: string }>(
- `select count(*) as count from \`${newTableName}\``,
- );
- const count = Number(res[0].count);
- if (count > 0) {
- infoToPrint.push(
- `· You're about to add not-null ${
- chalk.underline(
- statement.column.name,
- )
- } column without default value, which contains ${count} items`,
- );
-
- tablesToTruncate.push(newTableName);
- statementsToExecute.push(`delete from ${newTableName};`);
-
- shouldAskForApprove = true;
- }
-
- const fromJsonStatement = fromJson([statement], 'turso', 'push', json2);
- statementsToExecute.push(
- ...(Array.isArray(fromJsonStatement) ? fromJsonStatement : [fromJsonStatement]),
- );
- } else if (statement.type === 'alter_table_alter_column_set_notnull') {
- const tableName = statement.tableName;
-
- if (
- statement.type === 'alter_table_alter_column_set_notnull'
- && typeof statement.columnDefault === 'undefined'
- ) {
- const res = await connection.query<{ count: string }>(
- `select count(*) as count from \`${tableName}\``,
- );
- const count = Number(res[0].count);
- if (count > 0) {
- infoToPrint.push(
- `· You're about to add not-null constraint to ${
- chalk.underline(
- statement.columnName,
- )
- } column without default value, which contains ${count} items`,
- );
-
- tablesToTruncate.push(tableName);
- statementsToExecute.push(`delete from \`${tableName}\``);
- shouldAskForApprove = true;
- }
- }
-
- const modifyStatements = new LibSQLModifyColumn().convert(statement, json2);
-
- statementsToExecute.push(
- ...(Array.isArray(modifyStatements) ? modifyStatements : [modifyStatements]),
- );
- } else if (statement.type === 'recreate_table') {
- const tableName = statement.tableName;
-
- let dataLoss = false;
-
- const oldTableName = getOldTableName(tableName, meta);
-
- const prevColumnNames = Object.keys(json1.tables[oldTableName].columns);
- const currentColumnNames = Object.keys(json2.tables[tableName].columns);
- const { removedColumns, addedColumns } = findAddedAndRemoved(
- prevColumnNames,
- currentColumnNames,
- );
-
- if (removedColumns.length) {
- for (const removedColumn of removedColumns) {
- const res = await connection.query<{ count: string }>(
- `select count(\`${tableName}\`.\`${removedColumn}\`) as count from \`${tableName}\``,
- );
-
- const count = Number(res[0].count);
- if (count > 0) {
- infoToPrint.push(
- `· You're about to delete ${
- chalk.underline(
- removedColumn,
- )
- } column in ${tableName} table with ${count} items`,
- );
- columnsToRemove.push(removedColumn);
- shouldAskForApprove = true;
- }
- }
- }
-
- if (addedColumns.length) {
- for (const addedColumn of addedColumns) {
- const [res] = await connection.query<{ count: string }>(
- `select count(*) as count from \`${tableName}\``,
- );
-
- const columnConf = json2.tables[tableName].columns[addedColumn];
-
- const count = Number(res.count);
- if (count > 0 && columnConf.notNull && !columnConf.default) {
- dataLoss = true;
-
- infoToPrint.push(
- `· You're about to add not-null ${
- chalk.underline(
- addedColumn,
- )
- } column without default value to table, which contains ${count} items`,
- );
- shouldAskForApprove = true;
- tablesToTruncate.push(tableName);
-
- statementsToExecute.push(`DELETE FROM \`${tableName}\`;`);
- }
- }
- }
-
- // check if some tables referencing current for pragma
- const tablesReferencingCurrent: string[] = [];
-
- for (const table of Object.values(json2.tables)) {
- const tablesRefs = Object.values(json2.tables[table.name].foreignKeys)
- .filter((t) => SQLiteSquasher.unsquashPushFK(t).tableTo === tableName)
- .map((it) => SQLiteSquasher.unsquashPushFK(it).tableFrom);
-
- tablesReferencingCurrent.push(...tablesRefs);
- }
-
- if (!tablesReferencingCurrent.length) {
- statementsToExecute.push(..._moveDataStatements(tableName, json2, dataLoss));
- continue;
- }
-
- // recreate table
- statementsToExecute.push(
- ..._moveDataStatements(tableName, json2, dataLoss),
- );
- } else if (
- statement.type === 'alter_table_alter_column_set_generated'
- || statement.type === 'alter_table_alter_column_drop_generated'
- ) {
- const tableName = statement.tableName;
-
- const res = await connection.query<{ count: string }>(
- `select count("${statement.columnName}") as count from \`${tableName}\``,
- );
- const count = Number(res[0].count);
- if (count > 0) {
- infoToPrint.push(
- `· You're about to delete ${
- chalk.underline(
- statement.columnName,
- )
- } column in ${tableName} table with ${count} items`,
- );
- columnsToRemove.push(`${tableName}_${statement.columnName}`);
- shouldAskForApprove = true;
- }
- const fromJsonStatement = fromJson([statement], 'turso', 'push', json2);
- statementsToExecute.push(
- ...(Array.isArray(fromJsonStatement) ? fromJsonStatement : [fromJsonStatement]),
- );
- } else {
- const fromJsonStatement = fromJson([statement], 'turso', 'push', json2);
- statementsToExecute.push(
- ...(Array.isArray(fromJsonStatement) ? fromJsonStatement : [fromJsonStatement]),
- );
- }
- }
-
- return {
- statementsToExecute: [...new Set(statementsToExecute)],
- shouldAskForApprove,
- infoToPrint,
- columnsToRemove: [...new Set(columnsToRemove)],
- tablesToTruncate: [...new Set(tablesToTruncate)],
- tablesToRemove: [...new Set(tablesToRemove)],
- };
-};
diff --git a/drizzle-kit/src/cli/commands/migrate.ts b/drizzle-kit/src/cli/commands/migrate.ts
index 6fd9120ae..726c8ed4b 100644
--- a/drizzle-kit/src/cli/commands/migrate.ts
+++ b/drizzle-kit/src/cli/commands/migrate.ts
@@ -20,7 +20,6 @@ import { MySqlSchema, mysqlSchema, squashMysqlScheme } from '../../serializer/my
import { PgSchema, pgSchema, squashPgScheme } from '../../serializer/pgSchema';
import { SQLiteSchema, sqliteSchema, squashSqliteScheme } from '../../serializer/sqliteSchema';
import {
- applyLibSQLSnapshotsDiff,
applyMysqlSnapshotsDiff,
applyPgSnapshotsDiff,
applySingleStoreSnapshotsDiff,
@@ -397,7 +396,7 @@ export const prepareAndMigrateMysql = async (config: GenerateConfig) => {
};
// Not needed for now
-function mySingleStoreSchemaSuggestions(
+function singleStoreSchemaSuggestions(
curSchema: TypeOf,
prevSchema: TypeOf,
) {
@@ -599,65 +598,6 @@ export const prepareAndMigrateSqlite = async (config: GenerateConfig) => {
}
};
-export const prepareAndMigrateLibSQL = async (config: GenerateConfig) => {
- const outFolder = config.out;
- const schemaPath = config.schema;
-
- try {
- assertV1OutFolder(outFolder);
-
- const { snapshots, journal } = prepareMigrationFolder(outFolder, 'sqlite');
- const { prev, cur, custom } = await prepareSqliteMigrationSnapshot(
- snapshots,
- schemaPath,
- );
-
- const validatedPrev = sqliteSchema.parse(prev);
- const validatedCur = sqliteSchema.parse(cur);
-
- if (config.custom) {
- writeResult({
- cur: custom,
- sqlStatements: [],
- journal,
- outFolder,
- name: config.name,
- breakpoints: config.breakpoints,
- bundle: config.bundle,
- type: 'custom',
- prefixMode: config.prefix,
- });
- return;
- }
-
- const squashedPrev = squashSqliteScheme(validatedPrev);
- const squashedCur = squashSqliteScheme(validatedCur);
-
- const { sqlStatements, _meta } = await applyLibSQLSnapshotsDiff(
- squashedPrev,
- squashedCur,
- tablesResolver,
- columnsResolver,
- validatedPrev,
- validatedCur,
- );
-
- writeResult({
- cur,
- sqlStatements,
- journal,
- _meta,
- outFolder,
- name: config.name,
- breakpoints: config.breakpoints,
- bundle: config.bundle,
- prefixMode: config.prefix,
- });
- } catch (e) {
- console.error(e);
- }
-};
-
export const prepareSQLitePush = async (
schemaPath: string | string[],
snapshot: SQLiteSchema,
@@ -689,37 +629,6 @@ export const prepareSQLitePush = async (
};
};
-export const prepareLibSQLPush = async (
- schemaPath: string | string[],
- snapshot: SQLiteSchema,
-) => {
- const { prev, cur } = await prepareSQLiteDbPushSnapshot(snapshot, schemaPath);
-
- const validatedPrev = sqliteSchema.parse(prev);
- const validatedCur = sqliteSchema.parse(cur);
-
- const squashedPrev = squashSqliteScheme(validatedPrev, 'push');
- const squashedCur = squashSqliteScheme(validatedCur, 'push');
-
- const { sqlStatements, statements, _meta } = await applyLibSQLSnapshotsDiff(
- squashedPrev,
- squashedCur,
- tablesResolver,
- columnsResolver,
- validatedPrev,
- validatedCur,
- 'push',
- );
-
- return {
- sqlStatements,
- statements,
- squashedPrev,
- squashedCur,
- meta: _meta,
- };
-};
-
const freeeeeeze = (obj: any) => {
Object.freeze(obj);
for (let key in obj) {
diff --git a/drizzle-kit/src/cli/commands/push.ts b/drizzle-kit/src/cli/commands/push.ts
index 0cb3a8d28..f1b6f7739 100644
--- a/drizzle-kit/src/cli/commands/push.ts
+++ b/drizzle-kit/src/cli/commands/push.ts
@@ -2,13 +2,11 @@ import chalk from 'chalk';
import { render } from 'hanji';
import { fromJson } from '../../sqlgenerator';
import { Select } from '../selector-ui';
-import { LibSQLCredentials } from '../validations/libsql';
import type { MysqlCredentials } from '../validations/mysql';
import { withStyle } from '../validations/outputs';
import type { PostgresCredentials } from '../validations/postgres';
import { SingleStoreCredentials } from '../validations/singlestore';
import type { SqliteCredentials } from '../validations/sqlite';
-import { libSqlLogSuggestionsAndReturn } from './libSqlPushUtils';
import {
filterStatements as mySqlFilterStatements,
logSuggestionsAndReturn as mySqlLogSuggestionsAndReturn,
@@ -436,12 +434,11 @@ export const sqlitePush = async (
tablesToRemove,
tablesToTruncate,
infoToPrint,
- schemasToRemove,
} = await sqliteSuggestions(
db,
statements.statements,
- statements.squashedPrev,
statements.squashedCur,
+ statements.squashedPrev,
statements.meta!,
);
@@ -521,114 +518,10 @@ export const sqlitePush = async (
await db.query('rollback');
process.exit(1);
}
+ } else if (credentials.driver === 'turso') {
+ await db.batch!(statementsToExecute.map((it) => ({ query: it })));
}
render(`[${chalk.green('✓')}] Changes applied`);
}
}
};
-
-export const libSQLPush = async (
- schemaPath: string | string[],
- verbose: boolean,
- strict: boolean,
- credentials: LibSQLCredentials,
- tablesFilter: string[],
- force: boolean,
-) => {
- const { connectToLibSQL } = await import('../connections');
- const { sqlitePushIntrospect } = await import('./sqliteIntrospect');
-
- const db = await connectToLibSQL(credentials);
- const { schema } = await sqlitePushIntrospect(db, tablesFilter);
-
- const { prepareLibSQLPush } = await import('./migrate');
-
- const statements = await prepareLibSQLPush(schemaPath, schema);
-
- if (statements.sqlStatements.length === 0) {
- render(`\n[${chalk.blue('i')}] No changes detected`);
- } else {
- const {
- shouldAskForApprove,
- statementsToExecute,
- columnsToRemove,
- tablesToRemove,
- tablesToTruncate,
- infoToPrint,
- } = await libSqlLogSuggestionsAndReturn(
- db,
- statements.statements,
- statements.squashedPrev,
- statements.squashedCur,
- statements.meta!,
- );
-
- if (verbose && statementsToExecute.length > 0) {
- console.log();
- console.log(
- withStyle.warning('You are about to execute current statements:'),
- );
- console.log();
- console.log(statementsToExecute.map((s) => chalk.blue(s)).join('\n'));
- console.log();
- }
-
- if (!force && strict) {
- if (!shouldAskForApprove) {
- const { status, data } = await render(
- new Select(['No, abort', `Yes, I want to execute all statements`]),
- );
- if (data?.index === 0) {
- render(`[${chalk.red('x')}] All changes were aborted`);
- process.exit(0);
- }
- }
- }
-
- if (!force && shouldAskForApprove) {
- console.log(withStyle.warning('Found data-loss statements:'));
- console.log(infoToPrint.join('\n'));
- console.log();
- console.log(
- chalk.red.bold(
- 'THIS ACTION WILL CAUSE DATA LOSS AND CANNOT BE REVERTED\n',
- ),
- );
-
- console.log(chalk.white('Do you still want to push changes?'));
-
- const { status, data } = await render(
- new Select([
- 'No, abort',
- `Yes, I want to${
- tablesToRemove.length > 0
- ? ` remove ${tablesToRemove.length} ${tablesToRemove.length > 1 ? 'tables' : 'table'},`
- : ' '
- }${
- columnsToRemove.length > 0
- ? ` remove ${columnsToRemove.length} ${columnsToRemove.length > 1 ? 'columns' : 'column'},`
- : ' '
- }${
- tablesToTruncate.length > 0
- ? ` truncate ${tablesToTruncate.length} ${tablesToTruncate.length > 1 ? 'tables' : 'table'}`
- : ''
- }`
- .trimEnd()
- .replace(/(^,)|(,$)/g, '')
- .replace(/ +(?= )/g, ''),
- ]),
- );
- if (data?.index === 0) {
- render(`[${chalk.red('x')}] All changes were aborted`);
- process.exit(0);
- }
- }
-
- if (statementsToExecute.length === 0) {
- render(`\n[${chalk.blue('i')}] No changes detected`);
- } else {
- await db.batchWithPragma!(statementsToExecute);
- render(`[${chalk.green('✓')}] Changes applied`);
- }
- }
-};
diff --git a/drizzle-kit/src/cli/commands/sqlitePushUtils.ts b/drizzle-kit/src/cli/commands/sqlitePushUtils.ts
index bcc2d19db..d11a4ce62 100644
--- a/drizzle-kit/src/cli/commands/sqlitePushUtils.ts
+++ b/drizzle-kit/src/cli/commands/sqlitePushUtils.ts
@@ -10,7 +10,7 @@ import {
} from '../../sqlgenerator';
import type { JsonStatement } from '../../jsonStatements';
-import { findAddedAndRemoved, type SQLiteDB } from '../../utils';
+import type { SQLiteDB } from '../../utils';
export const _moveDataStatements = (
tableName: string,
@@ -19,7 +19,16 @@ export const _moveDataStatements = (
) => {
const statements: string[] = [];
- const newTableName = `__new_${tableName}`;
+ // rename table to __old_${tablename}
+ statements.push(
+ new SqliteRenameTableConvertor().convert({
+ type: 'rename_table',
+ tableNameFrom: tableName,
+ tableNameTo: `__old_push_${tableName}`,
+ fromSchema: '',
+ toSchema: '',
+ }),
+ );
// create table statement from a new json2 with proper name
const tableColumns = Object.values(json.tables[tableName].columns);
@@ -30,11 +39,10 @@ export const _moveDataStatements = (
const fks = referenceData.map((it) => SQLiteSquasher.unsquashPushFK(it));
- // create new table
statements.push(
new SQLiteCreateTableConvertor().convert({
type: 'sqlite_create_table',
- tableName: newTableName,
+ tableName: tableName,
columns: tableColumns,
referenceData: fks,
compositePKs,
@@ -43,38 +51,19 @@ export const _moveDataStatements = (
// move data
if (!dataLoss) {
- const columns = Object.keys(json.tables[tableName].columns).map(
- (c) => `"${c}"`,
- );
-
statements.push(
- `INSERT INTO \`${newTableName}\`(${
- columns.join(
- ', ',
- )
- }) SELECT ${columns.join(', ')} FROM \`${tableName}\`;`,
+ `INSERT INTO "${tableName}" SELECT * FROM "__old_push_${tableName}";`,
);
}
-
+ // drop table with name __old_${tablename}
statements.push(
new SQLiteDropTableConvertor().convert({
type: 'drop_table',
- tableName: tableName,
+ tableName: `__old_push_${tableName}`,
schema: '',
}),
);
- // rename table
- statements.push(
- new SqliteRenameTableConvertor().convert({
- fromSchema: '',
- tableNameFrom: newTableName,
- tableNameTo: tableName,
- toSchema: '',
- type: 'rename_table',
- }),
- );
-
for (const idx of Object.values(json.tables[tableName].indexes)) {
statements.push(
new CreateSqliteIndexConvertor().convert({
@@ -131,6 +120,8 @@ export const logSuggestionsAndReturn = async (
const schemasToRemove: string[] = [];
const tablesToTruncate: string[] = [];
+ const tablesContext: Record = {};
+
for (const statement of statements) {
if (statement.type === 'drop_table') {
const res = await connection.query<{ count: string }>(
@@ -148,159 +139,248 @@ export const logSuggestionsAndReturn = async (
tablesToRemove.push(statement.tableName);
shouldAskForApprove = true;
}
+ const stmnt = fromJson([statement], 'sqlite')[0];
+ statementsToExecute.push(stmnt);
+ } else if (statement.type === 'alter_table_drop_column') {
+ const newTableName = getOldTableName(statement.tableName, meta);
- const fromJsonStatement = fromJson([statement], 'sqlite', 'push');
- statementsToExecute.push(
- ...(Array.isArray(fromJsonStatement) ? fromJsonStatement : [fromJsonStatement]),
+ const columnIsPartOfPk = Object.values(
+ json1.tables[newTableName].compositePrimaryKeys,
+ ).find((c) => SQLiteSquasher.unsquashPK(c).includes(statement.columnName));
+
+ const columnIsPartOfIndex = Object.values(
+ json1.tables[newTableName].indexes,
+ ).find((c) => SQLiteSquasher.unsquashIdx(c).columns.includes(statement.columnName));
+
+ const columnIsPk = json1.tables[newTableName].columns[statement.columnName].primaryKey;
+
+ const columnIsPartOfFk = Object.values(
+ json1.tables[newTableName].foreignKeys,
+ ).find((t) =>
+ SQLiteSquasher.unsquashPushFK(t).columnsFrom.includes(
+ statement.columnName,
+ )
);
- } else if (statement.type === 'alter_table_drop_column') {
- const tableName = statement.tableName;
- const columnName = statement.columnName;
const res = await connection.query<{ count: string }>(
- `select count(\`${tableName}\`.\`${columnName}\`) as count from \`${tableName}\``,
+ `select count(*) as count from \`${newTableName}\``,
);
const count = Number(res[0].count);
if (count > 0) {
infoToPrint.push(
`· You're about to delete ${
chalk.underline(
- columnName,
+ statement.columnName,
)
- } column in ${tableName} table with ${count} items`,
+ } column in ${newTableName} table with ${count} items`,
);
- columnsToRemove.push(`${tableName}_${statement.columnName}`);
+ columnsToRemove.push(`${newTableName}_${statement.columnName}`);
shouldAskForApprove = true;
}
- const fromJsonStatement = fromJson([statement], 'sqlite', 'push');
- statementsToExecute.push(
- ...(Array.isArray(fromJsonStatement) ? fromJsonStatement : [fromJsonStatement]),
- );
- } else if (
- statement.type === 'sqlite_alter_table_add_column'
- && (statement.column.notNull && !statement.column.default)
- ) {
- const tableName = statement.tableName;
- const columnName = statement.column.name;
- const res = await connection.query<{ count: string }>(
- `select count(*) as count from \`${tableName}\``,
- );
- const count = Number(res[0].count);
- if (count > 0) {
- infoToPrint.push(
- `· You're about to add not-null ${
- chalk.underline(
- columnName,
+ if (
+ columnIsPk
+ || columnIsPartOfPk
+ || columnIsPartOfIndex
+ || columnIsPartOfFk
+ ) {
+ tablesContext[newTableName] = [
+ ..._moveDataStatements(statement.tableName, json2, true),
+ ];
+ // check table that have fk to this table
+
+ const tablesReferncingCurrent: string[] = [];
+
+ for (const table of Object.values(json1.tables)) {
+ const tablesRefs = Object.values(json1.tables[table.name].foreignKeys)
+ .filter(
+ (t) => SQLiteSquasher.unsquashPushFK(t).tableTo === newTableName,
)
- } column without default value, which contains ${count} items`,
- );
+ .map((t) => SQLiteSquasher.unsquashPushFK(t).tableFrom);
- tablesToTruncate.push(tableName);
- statementsToExecute.push(`delete from ${tableName};`);
+ tablesReferncingCurrent.push(...tablesRefs);
+ }
- shouldAskForApprove = true;
+ const uniqueTableRefs = [...new Set(tablesReferncingCurrent)];
+
+ for (const table of uniqueTableRefs) {
+ if (typeof tablesContext[table] === 'undefined') {
+ tablesContext[table] = [..._moveDataStatements(table, json2)];
+ }
+ }
+ } else {
+ if (typeof tablesContext[newTableName] === 'undefined') {
+ const stmnt = fromJson([statement], 'sqlite')[0];
+ statementsToExecute.push(stmnt);
+ }
}
+ } else if (statement.type === 'sqlite_alter_table_add_column') {
+ const newTableName = getOldTableName(statement.tableName, meta);
+ if (statement.column.notNull && !statement.column.default) {
+ const res = await connection.query<{ count: string }>(
+ `select count(*) as count from \`${newTableName}\``,
+ );
+ const count = Number(res[0].count);
+ if (count > 0) {
+ infoToPrint.push(
+ `· You're about to add not-null ${
+ chalk.underline(
+ statement.column.name,
+ )
+ } column without default value, which contains ${count} items`,
+ );
- const fromJsonStatement = fromJson([statement], 'sqlite', 'push');
- statementsToExecute.push(
- ...(Array.isArray(fromJsonStatement) ? fromJsonStatement : [fromJsonStatement]),
- );
- } else if (statement.type === 'recreate_table') {
- const tableName = statement.tableName;
- const oldTableName = getOldTableName(tableName, meta);
+ tablesToTruncate.push(newTableName);
+ statementsToExecute.push(`delete from ${newTableName};`);
- let dataLoss = false;
+ shouldAskForApprove = true;
+ }
+ }
+ if (statement.column.primaryKey) {
+ tablesContext[newTableName] = [
+ ..._moveDataStatements(statement.tableName, json2, true),
+ ];
+ const tablesReferncingCurrent: string[] = [];
+
+ for (const table of Object.values(json1.tables)) {
+ const tablesRefs = Object.values(json1.tables[table.name].foreignKeys)
+ .filter(
+ (t) => SQLiteSquasher.unsquashPushFK(t).tableTo === newTableName,
+ )
+ .map((t) => SQLiteSquasher.unsquashPushFK(t).tableFrom);
- const prevColumnNames = Object.keys(json1.tables[oldTableName].columns);
- const currentColumnNames = Object.keys(json2.tables[tableName].columns);
- const { removedColumns, addedColumns } = findAddedAndRemoved(
- prevColumnNames,
- currentColumnNames,
- );
+ tablesReferncingCurrent.push(...tablesRefs);
+ }
+
+ const uniqueTableRefs = [...new Set(tablesReferncingCurrent)];
- if (removedColumns.length) {
- for (const removedColumn of removedColumns) {
+ for (const table of uniqueTableRefs) {
+ if (typeof tablesContext[table] === 'undefined') {
+ tablesContext[table] = [..._moveDataStatements(table, json2)];
+ }
+ }
+ } else {
+ if (typeof tablesContext[newTableName] === 'undefined') {
+ const stmnt = fromJson([statement], 'sqlite')[0];
+ statementsToExecute.push(stmnt);
+ }
+ }
+ } else if (
+ statement.type === 'alter_table_alter_column_set_type'
+ || statement.type === 'alter_table_alter_column_set_default'
+ || statement.type === 'alter_table_alter_column_drop_default'
+ || statement.type === 'alter_table_alter_column_set_notnull'
+ || statement.type === 'alter_table_alter_column_drop_notnull'
+ || statement.type === 'alter_table_alter_column_drop_autoincrement'
+ || statement.type === 'alter_table_alter_column_set_autoincrement'
+ || statement.type === 'alter_table_alter_column_drop_pk'
+ || statement.type === 'alter_table_alter_column_set_pk'
+ ) {
+ if (
+ !(
+ statement.type === 'alter_table_alter_column_set_notnull'
+ && statement.columnPk
+ )
+ ) {
+ const newTableName = getOldTableName(statement.tableName, meta);
+ if (
+ statement.type === 'alter_table_alter_column_set_notnull'
+ && typeof statement.columnDefault === 'undefined'
+ ) {
const res = await connection.query<{ count: string }>(
- `select count(\`${tableName}\`.\`${removedColumn}\`) as count from \`${tableName}\``,
+ `select count(*) as count from \`${newTableName}\``,
);
-
const count = Number(res[0].count);
if (count > 0) {
infoToPrint.push(
- `· You're about to delete ${
+ `· You're about to add not-null constraint to ${
chalk.underline(
- removedColumn,
+ statement.columnName,
)
- } column in ${tableName} table with ${count} items`,
+ } column without default value, which contains ${count} items`,
);
- columnsToRemove.push(removedColumn);
+
+ tablesToTruncate.push(newTableName);
shouldAskForApprove = true;
}
- }
- }
-
- if (addedColumns.length) {
- for (const addedColumn of addedColumns) {
- const [res] = await connection.query<{ count: string }>(
- `select count(*) as count from \`${tableName}\``,
+ tablesContext[newTableName] = _moveDataStatements(
+ statement.tableName,
+ json1,
+ true,
);
-
- const columnConf = json2.tables[tableName].columns[addedColumn];
-
- const count = Number(res.count);
- if (count > 0 && columnConf.notNull && !columnConf.default) {
- dataLoss = true;
- infoToPrint.push(
- `· You're about to add not-null ${
- chalk.underline(
- addedColumn,
- )
- } column without default value to table, which contains ${count} items`,
+ } else {
+ if (typeof tablesContext[newTableName] === 'undefined') {
+ tablesContext[newTableName] = _moveDataStatements(
+ statement.tableName,
+ json1,
);
- shouldAskForApprove = true;
- tablesToTruncate.push(tableName);
-
- statementsToExecute.push(`DELETE FROM \`${tableName}\`;`);
}
}
- }
- // check if some tables referencing current for pragma
- const tablesReferencingCurrent: string[] = [];
+ const tablesReferncingCurrent: string[] = [];
- for (const table of Object.values(json2.tables)) {
- const tablesRefs = Object.values(json2.tables[table.name].foreignKeys)
- .filter((t) => SQLiteSquasher.unsquashPushFK(t).tableTo === tableName)
- .map((it) => SQLiteSquasher.unsquashPushFK(it).tableFrom);
+ for (const table of Object.values(json1.tables)) {
+ const tablesRefs = Object.values(json1.tables[table.name].foreignKeys)
+ .filter(
+ (t) => SQLiteSquasher.unsquashPushFK(t).tableTo === newTableName,
+ )
+ .map((t) => {
+ return getNewTableName(
+ SQLiteSquasher.unsquashPushFK(t).tableFrom,
+ meta,
+ );
+ });
+
+ tablesReferncingCurrent.push(...tablesRefs);
+ }
- tablesReferencingCurrent.push(...tablesRefs);
- }
+ const uniqueTableRefs = [...new Set(tablesReferncingCurrent)];
- if (!tablesReferencingCurrent.length) {
- statementsToExecute.push(..._moveDataStatements(tableName, json2, dataLoss));
- continue;
+ for (const table of uniqueTableRefs) {
+ if (typeof tablesContext[table] === 'undefined') {
+ tablesContext[table] = [..._moveDataStatements(table, json1)];
+ }
+ }
}
+ } else if (
+ statement.type === 'create_reference'
+ || statement.type === 'delete_reference'
+ || statement.type === 'alter_reference'
+ ) {
+ const fk = SQLiteSquasher.unsquashPushFK(statement.data);
- const [{ foreign_keys: pragmaState }] = await connection.query<{
- foreign_keys: number;
- }>(`PRAGMA foreign_keys;`);
-
- if (pragmaState) {
- statementsToExecute.push(`PRAGMA foreign_keys=OFF;`);
+ if (typeof tablesContext[statement.tableName] === 'undefined') {
+ tablesContext[statement.tableName] = _moveDataStatements(
+ statement.tableName,
+ json2,
+ );
}
- statementsToExecute.push(..._moveDataStatements(tableName, json2, dataLoss));
- if (pragmaState) {
- statementsToExecute.push(`PRAGMA foreign_keys=ON;`);
+ } else if (
+ statement.type === 'create_composite_pk'
+ || statement.type === 'alter_composite_pk'
+ || statement.type === 'delete_composite_pk'
+ || statement.type === 'create_unique_constraint'
+ || statement.type === 'delete_unique_constraint'
+ ) {
+ const newTableName = getOldTableName(statement.tableName, meta);
+ if (typeof tablesContext[newTableName] === 'undefined') {
+ tablesContext[newTableName] = _moveDataStatements(
+ statement.tableName,
+ json2,
+ );
}
} else {
- const fromJsonStatement = fromJson([statement], 'sqlite', 'push');
- statementsToExecute.push(
- ...(Array.isArray(fromJsonStatement) ? fromJsonStatement : [fromJsonStatement]),
- );
+ const stmnt = fromJson([statement], 'sqlite');
+ if (typeof stmnt !== 'undefined') {
+ statementsToExecute.push(...stmnt);
+ }
}
}
+ for (const context of Object.values(tablesContext)) {
+ statementsToExecute.push(...context);
+ }
+
return {
statementsToExecute,
shouldAskForApprove,
diff --git a/drizzle-kit/src/cli/commands/utils.ts b/drizzle-kit/src/cli/commands/utils.ts
index 25e80ed4d..e8a8f2b95 100644
--- a/drizzle-kit/src/cli/commands/utils.ts
+++ b/drizzle-kit/src/cli/commands/utils.ts
@@ -16,11 +16,6 @@ import {
Prefix,
wrapParam,
} from '../validations/common';
-import {
- LibSQLCredentials,
- libSQLCredentials,
- printConfigConnectionIssues as printIssuesLibSql,
-} from '../validations/libsql';
import {
MysqlCredentials,
mysqlCredentials,
@@ -221,14 +216,6 @@ export const preparePushConfig = async (
dialect: 'sqlite';
credentials: SqliteCredentials;
}
- | {
- dialect: 'turso';
- credentials: LibSQLCredentials;
- }
- | {
- dialect: 'singlestore';
- credentials: SingleStoreCredentials;
- }
| {
dialect: 'singlestore';
credentials: SingleStoreCredentials;
@@ -368,24 +355,6 @@ export const preparePushConfig = async (
};
}
- if (config.dialect === 'turso') {
- const parsed = libSQLCredentials.safeParse(config);
- if (!parsed.success) {
- printIssuesSqlite(config, 'pull');
- process.exit(1);
- }
- return {
- dialect: 'turso',
- schemaPath: config.schema,
- strict: config.strict ?? false,
- verbose: config.verbose ?? false,
- force: (options.force as boolean) ?? false,
- credentials: parsed.data,
- tablesFilter,
- schemasFilter,
- };
- }
-
assertUnreachable(config.dialect);
};
@@ -410,14 +379,6 @@ export const preparePullConfig = async (
dialect: 'singlestore';
credentials: SingleStoreCredentials;
}
- | {
- dialect: 'turso';
- credentials: LibSQLCredentials;
- }
- | {
- dialect: 'singlestore';
- credentials: SingleStoreCredentials;
- }
) & {
out: string;
breakpoints: boolean;
@@ -542,24 +503,6 @@ export const preparePullConfig = async (
};
}
- if (dialect === 'turso') {
- const parsed = libSQLCredentials.safeParse(config);
- if (!parsed.success) {
- printIssuesLibSql(config, 'pull');
- process.exit(1);
- }
- return {
- dialect,
- out: config.out,
- breakpoints: config.breakpoints,
- casing: config.casing,
- credentials: parsed.data,
- tablesFilter,
- schemasFilter,
- prefix: config.migrations?.prefix || 'index',
- };
- }
-
assertUnreachable(dialect);
};
@@ -646,22 +589,6 @@ export const prepareStudioConfig = async (options: Record) => {
};
}
- if (dialect === 'turso') {
- const parsed = libSQLCredentials.safeParse(flattened);
- if (!parsed.success) {
- printIssuesLibSql(flattened as Record, 'studio');
- process.exit(1);
- }
- const credentials = parsed.data;
- return {
- dialect,
- schema,
- host,
- port,
- credentials,
- };
- }
-
assertUnreachable(dialect);
};
@@ -747,21 +674,6 @@ export const prepareMigrateConfig = async (configPath: string | undefined) => {
table,
};
}
- if (dialect === 'turso') {
- const parsed = libSQLCredentials.safeParse(flattened);
- if (!parsed.success) {
- printIssuesLibSql(flattened as Record, 'migrate');
- process.exit(1);
- }
- const credentials = parsed.data;
- return {
- dialect,
- out,
- credentials,
- schema,
- table,
- };
- }
assertUnreachable(dialect);
};
diff --git a/drizzle-kit/src/cli/connections.ts b/drizzle-kit/src/cli/connections.ts
index fccc7def8..3357bf146 100644
--- a/drizzle-kit/src/cli/connections.ts
+++ b/drizzle-kit/src/cli/connections.ts
@@ -5,17 +5,8 @@ import fetch from 'node-fetch';
import ws from 'ws';
import { assertUnreachable } from '../global';
import type { ProxyParams } from '../serializer/studio';
-import {
- type DB,
- LibSQLDB,
- normalisePGliteUrl,
- normaliseSQLiteUrl,
- type Proxy,
- type SQLiteDB,
- type SqliteProxy,
-} from '../utils';
+import { type DB, normalisePGliteUrl, normaliseSQLiteUrl, type Proxy, type SQLiteDB, type SqliteProxy } from '../utils';
import { assertPackages, checkPackage } from './utils';
-import { LibSQLCredentials } from './validations/libsql';
import type { MysqlCredentials } from './validations/mysql';
import { withStyle } from './validations/outputs';
import type { PostgresCredentials } from './validations/postgres';
@@ -492,7 +483,56 @@ export const connectToSQLite = async (
> => {
if ('driver' in credentials) {
const { driver } = credentials;
- if (driver === 'd1-http') {
+ if (driver === 'turso') {
+ assertPackages('@libsql/client');
+ const { createClient } = await import('@libsql/client');
+ const { drizzle } = await import('drizzle-orm/libsql');
+ const { migrate } = await import('drizzle-orm/libsql/migrator');
+
+ const client = createClient({
+ url: credentials.url,
+ authToken: credentials.authToken,
+ });
+
+ const drzl = drizzle(client);
+ const migrateFn = async (config: MigrationConfig) => {
+ return migrate(drzl, config);
+ };
+
+ const db: SQLiteDB = {
+ query: async (sql: string, params?: any[]) => {
+ const res = await client.execute({ sql, args: params || [] });
+ return res.rows as T[];
+ },
+ run: async (query: string) => {
+ await client.execute(query);
+ },
+ batch: async (
+ queries: { query: string; values?: any[] | undefined }[],
+ ) => {
+ await client.batch(
+ queries.map((it) => ({ sql: it.query, args: it.values ?? [] })),
+ );
+ },
+ };
+ const proxy: SqliteProxy = {
+ proxy: async (params: ProxyParams) => {
+ const preparedParams = prepareSqliteParams(params.params);
+ const result = await client.execute({
+ sql: params.sql,
+ args: preparedParams,
+ });
+
+ if (params.mode === 'array') {
+ return result.rows.map((row) => Object.values(row));
+ } else {
+ return result.rows;
+ }
+ },
+ };
+
+ return { ...db, ...proxy, migrate: migrateFn };
+ } else if (driver === 'd1-http') {
const { drizzle } = await import('drizzle-orm/sqlite-proxy');
const { migrate } = await import('drizzle-orm/sqlite-proxy/migrator');
@@ -669,70 +709,12 @@ export const connectToSQLite = async (
};
return { ...db, ...proxy, migrate: migrateFn };
}
-
console.log(
"Please install either 'better-sqlite3' or '@libsql/client' for Drizzle Kit to connect to SQLite databases",
);
process.exit(1);
};
-export const connectToLibSQL = async (credentials: LibSQLCredentials): Promise<
- & LibSQLDB
- & SqliteProxy
- & { migrate: (config: MigrationConfig) => Promise }
-> => {
- if (await checkPackage('@libsql/client')) {
- const { createClient } = await import('@libsql/client');
- const { drizzle } = await import('drizzle-orm/libsql');
- const { migrate } = await import('drizzle-orm/libsql/migrator');
-
- const client = createClient({
- url: normaliseSQLiteUrl(credentials.url, 'libsql'),
- authToken: credentials.authToken,
- });
- const drzl = drizzle(client);
- const migrateFn = async (config: MigrationConfig) => {
- return migrate(drzl, config);
- };
-
- const db: LibSQLDB = {
- query: async (sql: string, params?: any[]) => {
- const res = await client.execute({ sql, args: params || [] });
- return res.rows as T[];
- },
- run: async (query: string) => {
- await client.execute(query);
- },
- batchWithPragma: async (queries: string[]) => {
- await client.migrate(queries);
- },
- };
-
- const proxy: SqliteProxy = {
- proxy: async (params: ProxyParams) => {
- const preparedParams = prepareSqliteParams(params.params);
- const result = await client.execute({
- sql: params.sql,
- args: preparedParams,
- });
-
- if (params.mode === 'array') {
- return result.rows.map((row) => Object.values(row));
- } else {
- return result.rows;
- }
- },
- };
-
- return { ...db, ...proxy, migrate: migrateFn };
- }
-
- console.log(
- "Please install '@libsql/client' for Drizzle Kit to connect to LibSQL databases",
- );
- process.exit(1);
-};
-
const parseSingleStoreCredentials = (credentials: SingleStoreCredentials) => {
if ('url' in credentials) {
const url = credentials.url;
diff --git a/drizzle-kit/src/cli/schema.ts b/drizzle-kit/src/cli/schema.ts
index 6b7bcb560..d8958f7c1 100644
--- a/drizzle-kit/src/cli/schema.ts
+++ b/drizzle-kit/src/cli/schema.ts
@@ -1,20 +1,11 @@
-import { boolean, command, number, string } from '@drizzle-team/brocli';
import chalk from 'chalk';
-import 'dotenv/config';
-import { mkdirSync } from 'fs';
-import { renderWithTask } from 'hanji';
-import { dialects } from 'src/schemaValidator';
+import { checkHandler } from './commands/check';
+import { assertOrmCoreVersion, assertPackages, assertStudioNodeVersion, ormVersionGt } from './utils';
import '../@types/utils';
-import { assertUnreachable } from '../global';
-import { drizzleForLibSQL, drizzleForSingleStore, prepareSingleStoreSchema, type Setup } from '../serializer/studio';
import { assertV1OutFolder } from '../utils';
-import { certs } from '../utils/certs';
-import { checkHandler } from './commands/check';
import { dropMigration } from './commands/drop';
-import { prepareAndMigrateSingleStore } from './commands/migrate';
import { upMysqlHandler } from './commands/mysqlUp';
import { upPgHandler } from './commands/pgUp';
-import { upSinglestoreHandler } from './commands/singlestoreUp';
import { upSqliteHandler } from './commands/sqliteUp';
import {
prepareCheckParams,
@@ -25,14 +16,22 @@ import {
preparePushConfig,
prepareStudioConfig,
} from './commands/utils';
-import { assertOrmCoreVersion, assertPackages, assertStudioNodeVersion, ormVersionGt } from './utils';
import { assertCollisions, drivers, prefixes } from './validations/common';
import { withStyle } from './validations/outputs';
+import 'dotenv/config';
+import { boolean, command, number, string } from '@drizzle-team/brocli';
+import { mkdirSync } from 'fs';
+import { renderWithTask } from 'hanji';
+import { dialects } from 'src/schemaValidator';
+import { assertUnreachable } from '../global';
+import { drizzleForSingleStore, prepareSingleStoreSchema, type Setup } from '../serializer/studio';
+import { certs } from '../utils/certs';
+import { upSinglestoreHandler } from './commands/singlestoreUp';
import { grey, MigrateProgress } from './views';
const optionDialect = string('dialect')
.enum(...dialects)
- .desc(`Database dialect: 'postgresql', 'mysql', 'sqlite' or 'turso'`);
+ .desc(`Database dialect: 'postgresql', 'mysql', 'sqlite' or 'singlestore'`);
const optionOut = string().desc("Output folder, 'drizzle' by default");
const optionConfig = string().desc('Path to drizzle config file');
const optionBreakpoints = boolean().desc(
@@ -79,7 +78,7 @@ export const generate = command({
prepareAndMigratePg,
prepareAndMigrateMysql,
prepareAndMigrateSqlite,
- prepareAndMigrateLibSQL,
+ prepareAndMigrateSingleStore,
} = await import('./commands/migrate');
const dialect = opts.dialect;
@@ -89,10 +88,8 @@ export const generate = command({
await prepareAndMigrateMysql(opts);
} else if (dialect === 'sqlite') {
await prepareAndMigrateSqlite(opts);
- } else if (dialect === 'turso') {
- await prepareAndMigrateLibSQL(opts);
} else if (dialect === 'singlestore') {
- await prepareAndMigrateSingleStore(opts);
+ await prepareAndMigrateSqlite(opts);
} else {
assertUnreachable(dialect);
}
@@ -155,20 +152,20 @@ export const migrate = command({
migrationsSchema: schema,
}),
);
- } else if (dialect === 'sqlite') {
- const { connectToSQLite } = await import('./connections');
- const { migrate } = await connectToSQLite(credentials);
+ } else if (dialect === 'singlestore') {
+ const { connectToSingleStore } = await import('./connections');
+ const { migrate } = await connectToSingleStore(credentials);
await renderWithTask(
new MigrateProgress(),
migrate({
- migrationsFolder: opts.out,
+ migrationsFolder: out,
migrationsTable: table,
migrationsSchema: schema,
}),
);
- } else if (dialect === 'turso') {
- const { connectToLibSQL } = await import('./connections');
- const { migrate } = await connectToLibSQL(credentials);
+ } else if (dialect === 'sqlite') {
+ const { connectToSQLite } = await import('./connections');
+ const { migrate } = await connectToSQLite(credentials);
await renderWithTask(
new MigrateProgress(),
migrate({
@@ -177,17 +174,6 @@ export const migrate = command({
migrationsSchema: schema,
}),
);
- } else if (dialect === 'singlestore') {
- const { connectToSingleStore } = await import('./connections');
- const { migrate } = await connectToSingleStore(credentials);
- await renderWithTask(
- new MigrateProgress(),
- migrate({
- migrationsFolder: out,
- migrationsTable: table,
- migrationsSchema: schema,
- }),
- );
} else {
assertUnreachable(dialect);
}
@@ -333,16 +319,6 @@ export const push = command({
tablesFilter,
force,
);
- } else if (dialect === 'turso') {
- const { libSQLPush } = await import('./commands/push');
- await libSQLPush(
- schemaPath,
- verbose,
- strict,
- credentials,
- tablesFilter,
- force,
- );
} else if (dialect === 'singlestore') {
const { singlestorePush } = await import('./commands/push');
await singlestorePush(
@@ -408,12 +384,12 @@ export const up = command({
upMysqlHandler(out);
}
- if (dialect === 'singlestore') {
- upSinglestoreHandler(out);
+ if (dialect === 'sqlite') {
+ upSqliteHandler(out);
}
- if (dialect === 'sqlite' || dialect === 'turso') {
- upSqliteHandler(out);
+ if (dialect === 'singlestore') {
+ upSinglestoreHandler(out);
}
},
});
@@ -536,16 +512,6 @@ export const pull = command({
tablesFilter,
prefix,
);
- } else if (dialect === 'turso') {
- const { introspectLibSQL } = await import('./commands/introspect');
- await introspectLibSQL(
- casing,
- out,
- breakpoints,
- credentials,
- tablesFilter,
- prefix,
- );
} else if (dialect === 'singlestore') {
const { introspectSingleStore } = await import('./commands/introspect');
await introspectSingleStore(
@@ -616,6 +582,8 @@ export const studio = command({
drizzleForMySQL,
prepareSQLiteSchema,
drizzleForSQLite,
+ prepareSingleStoreSchema,
+ drizzleForSingleStore,
} = await import('../serializer/studio');
let setup: Setup;
@@ -656,11 +624,6 @@ export const studio = command({
? await prepareSQLiteSchema(schemaPath)
: { schema: {}, relations: {}, files: [] };
setup = await drizzleForSQLite(credentials, schema, relations, files);
- } else if (dialect === 'turso') {
- const { schema, relations, files } = schemaPath
- ? await prepareSQLiteSchema(schemaPath)
- : { schema: {}, relations: {}, files: [] };
- setup = await drizzleForLibSQL(credentials, schema, relations, files);
} else if (dialect === 'singlestore') {
const { schema, relations, files } = schemaPath
? await prepareSingleStoreSchema(schemaPath)
diff --git a/drizzle-kit/src/cli/utils.ts b/drizzle-kit/src/cli/utils.ts
index 0a5d7862e..f7e7a2ae9 100644
--- a/drizzle-kit/src/cli/utils.ts
+++ b/drizzle-kit/src/cli/utils.ts
@@ -74,7 +74,7 @@ export const assertEitherPackage = async (
process.exit(1);
};
-const requiredApiVersion = 8;
+const requiredApiVersion = 7;
export const assertOrmCoreVersion = async () => {
try {
const { compatibilityVersion } = await import('drizzle-orm/version');
diff --git a/drizzle-kit/src/cli/validations/common.ts b/drizzle-kit/src/cli/validations/common.ts
index 3a2701e37..a7307f4d6 100644
--- a/drizzle-kit/src/cli/validations/common.ts
+++ b/drizzle-kit/src/cli/validations/common.ts
@@ -61,6 +61,7 @@ export const assertCollisions = <
};
export const sqliteDriversLiterals = [
+ literal('turso'),
literal('d1-http'),
literal('expo'),
] as const;
@@ -155,7 +156,7 @@ export const configPushSchema = object({
});
export type CliConfig = TypeOf;
-export const drivers = ['d1-http', 'expo', 'aws-data-api', 'pglite'] as const;
+export const drivers = ['turso', 'd1-http', 'expo', 'aws-data-api', 'pglite'] as const;
export type Driver = (typeof drivers)[number];
const _: Driver = '' as TypeOf;
diff --git a/drizzle-kit/src/cli/validations/libsql.ts b/drizzle-kit/src/cli/validations/libsql.ts
deleted file mode 100644
index a9b03c168..000000000
--- a/drizzle-kit/src/cli/validations/libsql.ts
+++ /dev/null
@@ -1,27 +0,0 @@
-import { softAssertUnreachable } from 'src/global';
-import { object, string, TypeOf } from 'zod';
-import { error } from '../views';
-import { wrapParam } from './common';
-
-export const libSQLCredentials = object({
- url: string().min(1),
- authToken: string().min(1).optional(),
-});
-
-export type LibSQLCredentials = {
- url: string;
- authToken?: string;
-};
-
-const _: LibSQLCredentials = {} as TypeOf;
-
-export const printConfigConnectionIssues = (
- options: Record,
- command: 'generate' | 'migrate' | 'push' | 'pull' | 'studio',
-) => {
- let text = `Please provide required params for 'turso' dialect:\n`;
- console.log(error(text));
- console.log(wrapParam('url', options.url));
- console.log(wrapParam('authToken', options.authToken, true, 'secret'));
- process.exit(1);
-};
diff --git a/drizzle-kit/src/cli/validations/outputs.ts b/drizzle-kit/src/cli/validations/outputs.ts
index 8bb0f08ef..ad0423b97 100644
--- a/drizzle-kit/src/cli/validations/outputs.ts
+++ b/drizzle-kit/src/cli/validations/outputs.ts
@@ -26,7 +26,7 @@ export const outputs = {
),
noDialect: () =>
withStyle.error(
- `Please specify 'dialect' param in config, either of 'pg', 'mysql', 'sqlite' of 'singlestore'. It will help drizzle to know how to query you database. You can read more about drizzle.config: https://orm.drizzle.team/kit-docs/config-reference`,
+ `Please specify 'dialect' param in config, either of 'pg', 'mysql', 'sqlite' or singlestore`,
),
},
common: {
diff --git a/drizzle-kit/src/cli/validations/sqlite.ts b/drizzle-kit/src/cli/validations/sqlite.ts
index 54178fd4a..b6ad062d5 100644
--- a/drizzle-kit/src/cli/validations/sqlite.ts
+++ b/drizzle-kit/src/cli/validations/sqlite.ts
@@ -25,6 +25,11 @@ export const sqliteCredentials = union([
]);
export type SqliteCredentials =
+ | {
+ driver: 'turso';
+ url: string;
+ authToken: string;
+ }
| {
driver: 'd1-http';
accountId: string;
diff --git a/drizzle-kit/src/index.ts b/drizzle-kit/src/index.ts
index dc0c6274c..9fab4bcb8 100644
--- a/drizzle-kit/src/index.ts
+++ b/drizzle-kit/src/index.ts
@@ -128,7 +128,8 @@ export type Config =
}
& (
| {
- dialect: Verify;
+ dialect: Verify;
+ driver: Verify;
dbCredentials: {
url: string;
authToken?: string;
@@ -230,7 +231,7 @@ export type Config =
* **Config** usage:
*
* `dialect` - mandatory and is responsible for explicitly providing a databse dialect you are using for all the commands
- * *Possible values*: `postgresql`, `mysql`, `sqlite`
+ * *Possible values*: `postgresql`, `mysql`, `sqlite`, `singlestore`
*
* See https://orm.drizzle.team/kit-docs/config-reference#dialect
*
@@ -271,7 +272,7 @@ export type Config =
*
* `breakpoints` - param lets you enable/disable SQL statement breakpoints in generated migrations.
* It’s optional and true by default, it’s necessary to properly apply migrations on databases,
- * that do not support multiple DDL alternation statements in one transaction(MySQL, SQLite) and
+ * that do not support multiple DDL alternation statements in one transaction(MySQL, SQLite, SingleStore) and
* Drizzle ORM has to apply them sequentially one by one.
*
* See https://orm.drizzle.team/kit-docs/config-reference#breakpoints
diff --git a/drizzle-kit/src/jsonStatements.ts b/drizzle-kit/src/jsonStatements.ts
index b27785d9a..090b0cdde 100644
--- a/drizzle-kit/src/jsonStatements.ts
+++ b/drizzle-kit/src/jsonStatements.ts
@@ -1,16 +1,10 @@
import chalk from 'chalk';
-import { getNewTableName } from './cli/commands/sqlitePushUtils';
import { warning } from './cli/views';
import { CommonSquashedSchema } from './schemaValidator';
import { MySqlKitInternals, MySqlSchema, MySqlSquasher } from './serializer/mysqlSchema';
import { Index, PgSchema, PgSquasher } from './serializer/pgSchema';
import { SingleStoreKitInternals, SingleStoreSchema, SingleStoreSquasher } from './serializer/singlestoreSchema';
-import {
- SQLiteKitInternals,
- SQLiteSchemaInternal,
- SQLiteSchemaSquashed,
- SQLiteSquasher,
-} from './serializer/sqliteSchema';
+import { SQLiteKitInternals, SQLiteSquasher } from './serializer/sqliteSchema';
import { AlteredColumn, Column, Sequence, Table } from './snapshotsDiffer';
export interface JsonSqliteCreateTableStatement {
@@ -41,23 +35,6 @@ export interface JsonCreateTableStatement {
internals?: MySqlKitInternals | SingleStoreKitInternals;
}
-export interface JsonRecreateTableStatement {
- type: 'recreate_table';
- tableName: string;
- columns: Column[];
- referenceData: {
- name: string;
- tableFrom: string;
- columnsFrom: string[];
- tableTo: string;
- columnsTo: string[];
- onUpdate?: string | undefined;
- onDelete?: string | undefined;
- }[];
- compositePKs: string[][];
- uniqueConstraints?: string[];
-}
-
export interface JsonDropTableStatement {
type: 'drop_table';
tableName: string;
@@ -196,10 +173,6 @@ export interface JsonReferenceStatement {
data: string;
schema: string;
tableName: string;
- isMulticolumn?: boolean;
- columnNotNull?: boolean;
- columnDefault?: string;
- columnType?: string;
// fromTable: string;
// fromColumns: string[];
// toTable: string;
@@ -546,7 +519,6 @@ export type JsonAlterColumnStatement =
| JsonAlterColumnDropIdentityStatement;
export type JsonStatement =
- | JsonRecreateTableStatement
| JsonAlterColumnStatement
| JsonCreateTableStatement
| JsonDropTableStatement
@@ -2050,55 +2022,6 @@ export const prepareSqliteAlterColumns = (
`${tableName}_${columnName}`
];
- if (column.autoincrement?.type === 'added') {
- statements.push({
- type: 'alter_table_alter_column_set_autoincrement',
- tableName,
- columnName,
- schema,
- newDataType: columnType,
- columnDefault,
- columnOnUpdate,
- columnNotNull,
- columnAutoIncrement,
- columnPk,
- });
- }
-
- if (column.autoincrement?.type === 'changed') {
- const type = column.autoincrement.new
- ? 'alter_table_alter_column_set_autoincrement'
- : 'alter_table_alter_column_drop_autoincrement';
-
- statements.push({
- type,
- tableName,
- columnName,
- schema,
- newDataType: columnType,
- columnDefault,
- columnOnUpdate,
- columnNotNull,
- columnAutoIncrement,
- columnPk,
- });
- }
-
- if (column.autoincrement?.type === 'deleted') {
- statements.push({
- type: 'alter_table_alter_column_drop_autoincrement',
- tableName,
- columnName,
- schema,
- newDataType: columnType,
- columnDefault,
- columnOnUpdate,
- columnNotNull,
- columnAutoIncrement,
- columnPk,
- });
- }
-
if (typeof column.name !== 'string') {
statements.push({
type: 'alter_table_rename_column',
@@ -2406,54 +2329,6 @@ export const prepareCreateReferencesJson = (
};
});
};
-export const prepareLibSQLCreateReferencesJson = (
- tableName: string,
- schema: string,
- foreignKeys: Record,
- json2: SQLiteSchemaSquashed,
- action?: 'push',
-): JsonCreateReferenceStatement[] => {
- return Object.values(foreignKeys).map((fkData) => {
- const { columnsFrom, tableFrom, columnsTo } = action === 'push'
- ? SQLiteSquasher.unsquashPushFK(fkData)
- : SQLiteSquasher.unsquashFK(fkData);
-
- // When trying to alter table in lib sql it is necessary to pass all config for column like "NOT NULL", "DEFAULT", etc.
- // If it is multicolumn reference it is not possible to pass this data for all columns
- // Pass multicolumn flag for sql statements to not generate migration
- let isMulticolumn = false;
-
- if (columnsFrom.length > 1 || columnsTo.length > 1) {
- isMulticolumn = true;
-
- return {
- type: 'create_reference',
- tableName,
- data: fkData,
- schema,
- isMulticolumn,
- };
- }
-
- const columnFrom = columnsFrom[0];
-
- const {
- notNull: columnNotNull,
- default: columnDefault,
- type: columnType,
- } = json2.tables[tableFrom].columns[columnFrom];
-
- return {
- type: 'create_reference',
- tableName,
- data: fkData,
- schema,
- columnNotNull,
- columnDefault,
- columnType,
- };
- });
-};
export const prepareDropReferencesJson = (
tableName: string,
@@ -2469,77 +2344,6 @@ export const prepareDropReferencesJson = (
};
});
};
-export const prepareLibSQLDropReferencesJson = (
- tableName: string,
- schema: string,
- foreignKeys: Record,
- json2: SQLiteSchemaSquashed,
- meta: SQLiteSchemaInternal['_meta'],
- action?: 'push',
-): JsonDeleteReferenceStatement[] => {
- const statements = Object.values(foreignKeys).map((fkData) => {
- const { columnsFrom, tableFrom, columnsTo, name, tableTo, onDelete, onUpdate } = action === 'push'
- ? SQLiteSquasher.unsquashPushFK(fkData)
- : SQLiteSquasher.unsquashFK(fkData);
-
- // If all columns from where were references were deleted -> skip this logic
- // Drop columns will cover this scenario
- const keys = Object.keys(json2.tables[tableName].columns);
- const filtered = columnsFrom.filter((it) => keys.includes(it));
- const fullDrop = filtered.length === 0;
- if (fullDrop) return;
-
- // When trying to alter table in lib sql it is necessary to pass all config for column like "NOT NULL", "DEFAULT", etc.
- // If it is multicolumn reference it is not possible to pass this data for all columns
- // Pass multicolumn flag for sql statements to not generate migration
- let isMulticolumn = false;
-
- if (columnsFrom.length > 1 || columnsTo.length > 1) {
- isMulticolumn = true;
-
- return {
- type: 'delete_reference',
- tableName,
- data: fkData,
- schema,
- isMulticolumn,
- };
- }
-
- const columnFrom = columnsFrom[0];
- const newTableName = getNewTableName(tableFrom, meta);
-
- const {
- notNull: columnNotNull,
- default: columnDefault,
- type: columnType,
- } = json2.tables[newTableName].columns[columnFrom];
-
- const fkToSquash = {
- columnsFrom,
- columnsTo,
- name,
- tableFrom: newTableName,
- tableTo,
- onDelete,
- onUpdate,
- };
- const foreignKey = action === 'push'
- ? SQLiteSquasher.squashPushFK(fkToSquash)
- : SQLiteSquasher.squashFK(fkToSquash);
- return {
- type: 'delete_reference',
- tableName,
- data: foreignKey,
- schema,
- columnNotNull,
- columnDefault,
- columnType,
- };
- });
-
- return statements.filter((it) => it) as JsonDeleteReferenceStatement[];
-};
// alter should create 2 statements. It's important to make only 1 sql per statement(for breakpoints)
export const prepareAlterReferencesJson = (
diff --git a/drizzle-kit/src/schemaValidator.ts b/drizzle-kit/src/schemaValidator.ts
index e91b5ab11..712252f37 100644
--- a/drizzle-kit/src/schemaValidator.ts
+++ b/drizzle-kit/src/schemaValidator.ts
@@ -4,7 +4,7 @@ import { pgSchema, pgSchemaSquashed } from './serializer/pgSchema';
import { singlestoreSchema, singlestoreSchemaSquashed } from './serializer/singlestoreSchema';
import { sqliteSchema, SQLiteSchemaSquashed } from './serializer/sqliteSchema';
-export const dialects = ['postgresql', 'mysql', 'sqlite', 'turso', 'singlestore'] as const;
+export const dialects = ['postgresql', 'mysql', 'sqlite', 'singlestore'] as const;
export const dialect = enumType(dialects);
export type Dialect = (typeof dialects)[number];
diff --git a/drizzle-kit/src/serializer/sqliteSerializer.ts b/drizzle-kit/src/serializer/sqliteSerializer.ts
index 41edd78a9..ce544235b 100644
--- a/drizzle-kit/src/serializer/sqliteSerializer.ts
+++ b/drizzle-kit/src/serializer/sqliteSerializer.ts
@@ -363,6 +363,7 @@ export const fromDatabase = async (
) => void,
): Promise => {
const result: Record = {};
+
const columns = await db.query<{
tableName: string;
columnName: string;
diff --git a/drizzle-kit/src/serializer/studio.ts b/drizzle-kit/src/serializer/studio.ts
index 12ea8207c..5515e6f59 100644
--- a/drizzle-kit/src/serializer/studio.ts
+++ b/drizzle-kit/src/serializer/studio.ts
@@ -25,7 +25,6 @@ import fs from 'fs';
import { Hono } from 'hono';
import { cors } from 'hono/cors';
import { createServer } from 'node:https';
-import { LibSQLCredentials } from 'src/cli/validations/libsql';
import { assertUnreachable } from 'src/global';
import superjson from 'superjson';
import { z } from 'zod';
@@ -343,6 +342,8 @@ export const drizzleForSQLite = async (
const { driver } = credentials;
if (driver === 'd1-http') {
dbUrl = `d1-http://${credentials.accountId}/${credentials.databaseId}/${credentials.token}`;
+ } else if (driver === 'turso') {
+ dbUrl = `turso://${credentials.url}/${credentials.authToken}`;
} else {
assertUnreachable(driver);
}
@@ -363,32 +364,6 @@ export const drizzleForSQLite = async (
schemaFiles,
};
};
-export const drizzleForLibSQL = async (
- credentials: LibSQLCredentials,
- sqliteSchema: Record>,
- relations: Record,
- schemaFiles?: SchemaFile[],
-): Promise => {
- const { connectToLibSQL } = await import('../cli/connections');
-
- const sqliteDB = await connectToLibSQL(credentials);
- const customDefaults = getCustomDefaults(sqliteSchema);
-
- let dbUrl: string = `turso://${credentials.url}/${credentials.authToken}`;
-
- const dbHash = createHash('sha256').update(dbUrl).digest('hex');
-
- return {
- dbHash,
- dialect: 'sqlite',
- driver: undefined,
- proxy: sqliteDB.proxy,
- customDefaults,
- schema: sqliteSchema,
- relations,
- schemaFiles,
- };
-};
export const drizzleForSingleStore = async (
credentials: SingleStoreCredentials,
diff --git a/drizzle-kit/src/snapshotsDiffer.ts b/drizzle-kit/src/snapshotsDiffer.ts
index 6f27a2505..11d126013 100644
--- a/drizzle-kit/src/snapshotsDiffer.ts
+++ b/drizzle-kit/src/snapshotsDiffer.ts
@@ -63,8 +63,6 @@ import {
prepareDropReferencesJson,
prepareDropSequenceJson,
prepareDropTableJson,
- prepareLibSQLCreateReferencesJson,
- prepareLibSQLDropReferencesJson,
prepareMoveEnumJson,
prepareMoveSequenceJson,
prepareMySqlCreateTableJson,
@@ -87,7 +85,6 @@ import { MySqlSchema, MySqlSchemaSquashed, MySqlSquasher } from './serializer/my
import { PgSchema, PgSchemaSquashed, sequenceSquashed } from './serializer/pgSchema';
import { SingleStoreSchema, SingleStoreSchemaSquashed, SingleStoreSquasher } from './serializer/singlestoreSchema';
import { SQLiteSchema, SQLiteSchemaSquashed, SQLiteSquasher } from './serializer/sqliteSchema';
-import { libSQLCombineStatements, sqliteCombineStatements } from './statementCombiner';
import { copy, prepareMigrationMeta } from './utils';
const makeChanged = (schema: T) => {
@@ -2471,8 +2468,7 @@ export const applySqliteSnapshotsDiff = async (
jsonStatements.push(...jsonAlteredUniqueConstraints);
- const combinedJsonStatements = sqliteCombineStatements(jsonStatements, json2, action);
- const sqlStatements = fromJson(combinedJsonStatements, 'sqlite');
+ const sqlStatements = fromJson(jsonStatements, 'sqlite');
const uniqueSqlStatements: string[] = [];
sqlStatements.forEach((ss) => {
@@ -2488,428 +2484,7 @@ export const applySqliteSnapshotsDiff = async (
const _meta = prepareMigrationMeta([], rTables, rColumns);
return {
- statements: combinedJsonStatements,
- sqlStatements: uniqueSqlStatements,
- _meta,
- };
-};
-
-export const applyLibSQLSnapshotsDiff = async (
- json1: SQLiteSchemaSquashed,
- json2: SQLiteSchemaSquashed,
- tablesResolver: (
- input: ResolverInput,
- ) => Promise>,
- columnsResolver: (
- input: ColumnsResolverInput,
- ) => Promise>,
- prevFull: SQLiteSchema,
- curFull: SQLiteSchema,
- action?: 'push',
-): Promise<{
- statements: JsonStatement[];
- sqlStatements: string[];
- _meta:
- | {
- schemas: {};
- tables: {};
- columns: {};
- }
- | undefined;
-}> => {
- const tablesDiff = diffSchemasOrTables(json1.tables, json2.tables);
- const {
- created: createdTables,
- deleted: deletedTables,
- renamed: renamedTables,
- } = await tablesResolver({
- created: tablesDiff.added,
- deleted: tablesDiff.deleted,
- });
-
- const tablesPatchedSnap1 = copy(json1);
- tablesPatchedSnap1.tables = mapEntries(tablesPatchedSnap1.tables, (_, it) => {
- const { name } = nameChangeFor(it, renamedTables);
- it.name = name;
- return [name, it];
- });
-
- const res = diffColumns(tablesPatchedSnap1.tables, json2.tables);
-
- const columnRenames = [] as {
- table: string;
- renames: { from: Column; to: Column }[];
- }[];
-
- const columnCreates = [] as {
- table: string;
- columns: Column[];
- }[];
-
- const columnDeletes = [] as {
- table: string;
- columns: Column[];
- }[];
-
- for (let entry of Object.values(res)) {
- const { renamed, created, deleted } = await columnsResolver({
- tableName: entry.name,
- schema: entry.schema,
- deleted: entry.columns.deleted,
- created: entry.columns.added,
- });
-
- if (created.length > 0) {
- columnCreates.push({
- table: entry.name,
- columns: created,
- });
- }
-
- if (deleted.length > 0) {
- columnDeletes.push({
- table: entry.name,
- columns: deleted,
- });
- }
-
- if (renamed.length > 0) {
- columnRenames.push({
- table: entry.name,
- renames: renamed,
- });
- }
- }
-
- const columnRenamesDict = columnRenames.reduce(
- (acc, it) => {
- acc[it.table] = it.renames;
- return acc;
- },
- {} as Record<
- string,
- {
- from: Named;
- to: Named;
- }[]
- >,
- );
-
- const columnsPatchedSnap1 = copy(tablesPatchedSnap1);
- columnsPatchedSnap1.tables = mapEntries(
- columnsPatchedSnap1.tables,
- (tableKey, tableValue) => {
- const patchedColumns = mapKeys(
- tableValue.columns,
- (columnKey, column) => {
- const rens = columnRenamesDict[tableValue.name] || [];
- const newName = columnChangeFor(columnKey, rens);
- column.name = newName;
- return newName;
- },
- );
-
- tableValue.columns = patchedColumns;
- return [tableKey, tableValue];
- },
- );
-
- const diffResult = applyJsonDiff(columnsPatchedSnap1, json2);
-
- const typedResult = diffResultSchemeSQLite.parse(diffResult);
-
- // Map array of objects to map
- const tablesMap: {
- [key: string]: (typeof typedResult.alteredTablesWithColumns)[number];
- } = {};
-
- typedResult.alteredTablesWithColumns.forEach((obj) => {
- tablesMap[obj.name] = obj;
- });
-
- const jsonCreateTables = createdTables.map((it) => {
- return prepareSQLiteCreateTable(it, action);
- });
-
- const jsonCreateIndexesForCreatedTables = createdTables
- .map((it) => {
- return prepareCreateIndexesJson(
- it.name,
- it.schema,
- it.indexes,
- curFull.internal,
- );
- })
- .flat();
-
- const jsonDropTables = deletedTables.map((it) => {
- return prepareDropTableJson(it);
- });
-
- const jsonRenameTables = renamedTables.map((it) => {
- return prepareRenameTableJson(it.from, it.to);
- });
-
- const jsonRenameColumnsStatements: JsonRenameColumnStatement[] = columnRenames
- .map((it) => prepareRenameColumns(it.table, '', it.renames))
- .flat();
-
- const jsonDropColumnsStatemets: JsonDropColumnStatement[] = columnDeletes
- .map((it) => _prepareDropColumns(it.table, '', it.columns))
- .flat();
-
- const jsonAddColumnsStatemets: JsonSqliteAddColumnStatement[] = columnCreates
- .map((it) => {
- return _prepareSqliteAddColumns(
- it.table,
- it.columns,
- tablesMap[it.table] && tablesMap[it.table].addedForeignKeys
- ? Object.values(tablesMap[it.table].addedForeignKeys)
- : [],
- );
- })
- .flat();
-
- const rColumns = jsonRenameColumnsStatements.map((it) => {
- const tableName = it.tableName;
- const schema = it.schema;
- return {
- from: { schema, table: tableName, column: it.oldColumnName },
- to: { schema, table: tableName, column: it.newColumnName },
- };
- });
-
- const rTables = renamedTables.map((it) => {
- return { from: it.from, to: it.to };
- });
-
- const _meta = prepareMigrationMeta([], rTables, rColumns);
-
- const allAltered = typedResult.alteredTablesWithColumns;
-
- const jsonAddedCompositePKs: JsonCreateCompositePK[] = [];
- const jsonDeletedCompositePKs: JsonDeleteCompositePK[] = [];
- const jsonAlteredCompositePKs: JsonAlterCompositePK[] = [];
-
- const jsonAddedUniqueConstraints: JsonCreateUniqueConstraint[] = [];
- const jsonDeletedUniqueConstraints: JsonDeleteUniqueConstraint[] = [];
- const jsonAlteredUniqueConstraints: JsonAlterUniqueConstraint[] = [];
-
- allAltered.forEach((it) => {
- // This part is needed to make sure that same columns in a table are not triggered for change
- // there is a case where orm and kit are responsible for pk name generation and one of them is not sorting name
- // We double-check that pk with same set of columns are both in added and deleted diffs
- let addedColumns: string[] = [];
- for (const addedPkName of Object.keys(it.addedCompositePKs)) {
- const addedPkColumns = it.addedCompositePKs[addedPkName];
- addedColumns = SQLiteSquasher.unsquashPK(addedPkColumns);
- }
-
- let deletedColumns: string[] = [];
- for (const deletedPkName of Object.keys(it.deletedCompositePKs)) {
- const deletedPkColumns = it.deletedCompositePKs[deletedPkName];
- deletedColumns = SQLiteSquasher.unsquashPK(deletedPkColumns);
- }
-
- // Don't need to sort, but need to add tests for it
- // addedColumns.sort();
- // deletedColumns.sort();
-
- const doPerformDeleteAndCreate = JSON.stringify(addedColumns) !== JSON.stringify(deletedColumns);
-
- let addedCompositePKs: JsonCreateCompositePK[] = [];
- let deletedCompositePKs: JsonDeleteCompositePK[] = [];
- let alteredCompositePKs: JsonAlterCompositePK[] = [];
- if (doPerformDeleteAndCreate) {
- addedCompositePKs = prepareAddCompositePrimaryKeySqlite(
- it.name,
- it.addedCompositePKs,
- );
- deletedCompositePKs = prepareDeleteCompositePrimaryKeySqlite(
- it.name,
- it.deletedCompositePKs,
- );
- }
- alteredCompositePKs = prepareAlterCompositePrimaryKeySqlite(
- it.name,
- it.alteredCompositePKs,
- );
-
- // add logic for unique constraints
- let addedUniqueConstraints: JsonCreateUniqueConstraint[] = [];
- let deletedUniqueConstraints: JsonDeleteUniqueConstraint[] = [];
- let alteredUniqueConstraints: JsonAlterUniqueConstraint[] = [];
-
- addedUniqueConstraints = prepareAddUniqueConstraint(
- it.name,
- it.schema,
- it.addedUniqueConstraints,
- );
-
- deletedUniqueConstraints = prepareDeleteUniqueConstraint(
- it.name,
- it.schema,
- it.deletedUniqueConstraints,
- );
- if (it.alteredUniqueConstraints) {
- const added: Record = {};
- const deleted: Record = {};
- for (const k of Object.keys(it.alteredUniqueConstraints)) {
- added[k] = it.alteredUniqueConstraints[k].__new;
- deleted[k] = it.alteredUniqueConstraints[k].__old;
- }
- addedUniqueConstraints.push(
- ...prepareAddUniqueConstraint(it.name, it.schema, added),
- );
- deletedUniqueConstraints.push(
- ...prepareDeleteUniqueConstraint(it.name, it.schema, deleted),
- );
- }
-
- jsonAddedCompositePKs.push(...addedCompositePKs);
- jsonDeletedCompositePKs.push(...deletedCompositePKs);
- jsonAlteredCompositePKs.push(...alteredCompositePKs);
-
- jsonAddedUniqueConstraints.push(...addedUniqueConstraints);
- jsonDeletedUniqueConstraints.push(...deletedUniqueConstraints);
- jsonAlteredUniqueConstraints.push(...alteredUniqueConstraints);
- });
-
- const jsonTableAlternations = allAltered
- .map((it) => {
- return prepareSqliteAlterColumns(it.name, it.schema, it.altered, json2);
- })
- .flat();
-
- const jsonCreateIndexesForAllAlteredTables = allAltered
- .map((it) => {
- return prepareCreateIndexesJson(
- it.name,
- it.schema,
- it.addedIndexes || {},
- curFull.internal,
- );
- })
- .flat();
-
- const jsonDropIndexesForAllAlteredTables = allAltered
- .map((it) => {
- return prepareDropIndexesJson(
- it.name,
- it.schema,
- it.deletedIndexes || {},
- );
- })
- .flat();
-
- allAltered.forEach((it) => {
- const droppedIndexes = Object.keys(it.alteredIndexes).reduce(
- (current, item: string) => {
- current[item] = it.alteredIndexes[item].__old;
- return current;
- },
- {} as Record,
- );
- const createdIndexes = Object.keys(it.alteredIndexes).reduce(
- (current, item: string) => {
- current[item] = it.alteredIndexes[item].__new;
- return current;
- },
- {} as Record,
- );
-
- jsonCreateIndexesForAllAlteredTables.push(
- ...prepareCreateIndexesJson(
- it.name,
- it.schema,
- createdIndexes || {},
- curFull.internal,
- ),
- );
- jsonDropIndexesForAllAlteredTables.push(
- ...prepareDropIndexesJson(it.name, it.schema, droppedIndexes || {}),
- );
- });
-
- const jsonReferencesForAllAlteredTables: JsonReferenceStatement[] = allAltered
- .map((it) => {
- const forAdded = prepareLibSQLCreateReferencesJson(
- it.name,
- it.schema,
- it.addedForeignKeys,
- json2,
- action,
- );
-
- const forAltered = prepareLibSQLDropReferencesJson(
- it.name,
- it.schema,
- it.deletedForeignKeys,
- json2,
- _meta,
- action,
- );
-
- const alteredFKs = prepareAlterReferencesJson(it.name, it.schema, it.alteredForeignKeys);
-
- return [...forAdded, ...forAltered, ...alteredFKs];
- })
- .flat();
-
- const jsonCreatedReferencesForAlteredTables = jsonReferencesForAllAlteredTables.filter(
- (t) => t.type === 'create_reference',
- );
- const jsonDroppedReferencesForAlteredTables = jsonReferencesForAllAlteredTables.filter(
- (t) => t.type === 'delete_reference',
- );
-
- const jsonStatements: JsonStatement[] = [];
- jsonStatements.push(...jsonCreateTables);
-
- jsonStatements.push(...jsonDropTables);
- jsonStatements.push(...jsonRenameTables);
- jsonStatements.push(...jsonRenameColumnsStatements);
-
- jsonStatements.push(...jsonDroppedReferencesForAlteredTables);
-
- // Will need to drop indexes before changing any columns in table
- // Then should go column alternations and then index creation
- jsonStatements.push(...jsonDropIndexesForAllAlteredTables);
-
- jsonStatements.push(...jsonDeletedCompositePKs);
- jsonStatements.push(...jsonTableAlternations);
- jsonStatements.push(...jsonAddedCompositePKs);
- jsonStatements.push(...jsonAddColumnsStatemets);
-
- jsonStatements.push(...jsonCreateIndexesForCreatedTables);
- jsonStatements.push(...jsonCreateIndexesForAllAlteredTables);
-
- jsonStatements.push(...jsonCreatedReferencesForAlteredTables);
-
- jsonStatements.push(...jsonDropColumnsStatemets);
-
- jsonStatements.push(...jsonAlteredCompositePKs);
-
- jsonStatements.push(...jsonAlteredUniqueConstraints);
-
- const combinedJsonStatements = libSQLCombineStatements(jsonStatements, json2, action);
-
- const sqlStatements = fromJson(
- combinedJsonStatements,
- 'turso',
- action,
- json2,
- );
-
- const uniqueSqlStatements: string[] = [];
- sqlStatements.forEach((ss) => {
- if (!uniqueSqlStatements.includes(ss)) {
- uniqueSqlStatements.push(ss);
- }
- });
-
- return {
- statements: combinedJsonStatements,
+ statements: jsonStatements,
sqlStatements: uniqueSqlStatements,
_meta,
};
diff --git a/drizzle-kit/src/sqlgenerator.ts b/drizzle-kit/src/sqlgenerator.ts
index f1e783a50..07b24b6c9 100644
--- a/drizzle-kit/src/sqlgenerator.ts
+++ b/drizzle-kit/src/sqlgenerator.ts
@@ -42,7 +42,6 @@ import {
JsonDropTableStatement,
JsonMoveSequenceStatement,
JsonPgCreateIndexStatement,
- JsonRecreateTableStatement,
JsonRenameColumnStatement,
JsonRenameSchema,
JsonRenameSequenceStatement,
@@ -55,7 +54,7 @@ import { Dialect } from './schemaValidator';
import { MySqlSquasher } from './serializer/mysqlSchema';
import { PgSquasher } from './serializer/pgSchema';
import { SingleStoreSquasher } from './serializer/singlestoreSchema';
-import { SQLiteSchemaSquashed, SQLiteSquasher } from './serializer/sqliteSchema';
+import { SQLiteSquasher } from './serializer/sqliteSchema';
export const pgNativeTypes = new Set([
'uuid',
@@ -128,15 +127,8 @@ const isPgNativeType = (it: string) => {
};
abstract class Convertor {
- abstract can(
- statement: JsonStatement,
- dialect: Dialect,
- ): boolean;
- abstract convert(
- statement: JsonStatement,
- json2?: SQLiteSchemaSquashed,
- action?: 'push',
- ): string | string[];
+ abstract can(statement: JsonStatement, dialect: Dialect): boolean;
+ abstract convert(statement: JsonStatement): string | string[];
}
class PgCreateTableConvertor extends Convertor {
@@ -390,7 +382,7 @@ class SingleStoreCreateTableConvertor extends Convertor {
export class SQLiteCreateTableConvertor extends Convertor {
can(statement: JsonStatement, dialect: Dialect): boolean {
- return statement.type === 'sqlite_create_table' && (dialect === 'sqlite' || dialect === 'turso');
+ return statement.type === 'sqlite_create_table' && dialect === 'sqlite';
}
convert(st: JsonSqliteCreateTableStatement) {
@@ -896,7 +888,7 @@ class SingleStoreDropTableConvertor extends Convertor {
export class SQLiteDropTableConvertor extends Convertor {
can(statement: JsonStatement, dialect: Dialect): boolean {
- return statement.type === 'drop_table' && (dialect === 'sqlite' || dialect === 'turso');
+ return statement.type === 'drop_table' && dialect === 'sqlite';
}
convert(statement: JsonDropTableStatement) {
@@ -922,7 +914,7 @@ class PgRenameTableConvertor extends Convertor {
export class SqliteRenameTableConvertor extends Convertor {
can(statement: JsonStatement, dialect: Dialect): boolean {
- return statement.type === 'rename_table' && (dialect === 'sqlite' || dialect === 'turso');
+ return statement.type === 'rename_table' && dialect === 'sqlite';
}
convert(statement: JsonRenameTableStatement) {
@@ -1000,13 +992,13 @@ class SingleStoreAlterTableRenameColumnConvertor extends Convertor {
class SQLiteAlterTableRenameColumnConvertor extends Convertor {
can(statement: JsonStatement, dialect: Dialect): boolean {
return (
- statement.type === 'alter_table_rename_column' && (dialect === 'sqlite' || dialect === 'turso')
+ statement.type === 'alter_table_rename_column' && dialect === 'sqlite'
);
}
convert(statement: JsonRenameColumnStatement) {
const { tableName, oldColumnName, newColumnName } = statement;
- return `ALTER TABLE \`${tableName}\` RENAME COLUMN "${oldColumnName}" TO "${newColumnName}";`;
+ return `ALTER TABLE \`${tableName}\` RENAME COLUMN \`${oldColumnName}\` TO \`${newColumnName}\`;`;
}
}
@@ -1052,7 +1044,7 @@ class SingleStoreAlterTableDropColumnConvertor extends Convertor {
class SQLiteAlterTableDropColumnConvertor extends Convertor {
can(statement: JsonStatement, dialect: Dialect): boolean {
- return statement.type === 'alter_table_drop_column' && (dialect === 'sqlite' || dialect === 'turso');
+ return statement.type === 'alter_table_drop_column' && dialect === 'sqlite';
}
convert(statement: JsonDropColumnStatement) {
@@ -1193,7 +1185,7 @@ class SingleStoreAlterTableAddColumnConvertor extends Convertor {
export class SQLiteAlterTableAddColumnConvertor extends Convertor {
can(statement: JsonStatement, dialect: Dialect): boolean {
return (
- statement.type === 'sqlite_alter_table_add_column' && (dialect === 'sqlite' || dialect === 'turso')
+ statement.type === 'sqlite_alter_table_add_column' && dialect === 'sqlite'
);
}
@@ -1240,6 +1232,26 @@ class PgAlterTableAlterColumnSetTypeConvertor extends Convertor {
}
}
+class SQLiteAlterTableAlterColumnSetTypeConvertor extends Convertor {
+ can(statement: JsonStatement, dialect: Dialect): boolean {
+ return (
+ statement.type === 'alter_table_alter_column_set_type'
+ && dialect === 'sqlite'
+ );
+ }
+
+ convert(statement: JsonAlterColumnTypeStatement) {
+ return (
+ '/*\n SQLite does not support "Changing existing column type" out of the box, we do not generate automatic migration for that, so it has to be done manually'
+ + '\n Please refer to: https://www.techonthenet.com/sqlite/tables/alter_table.php'
+ + '\n https://www.sqlite.org/lang_altertable.html'
+ + '\n https://stackoverflow.com/questions/2083543/modify-a-columns-type-in-sqlite3'
+ + "\n\n Due to that we don't generate migration automatically and it has to be done manually"
+ + '\n*/'
+ );
+ }
+}
+
class PgAlterTableAlterColumnSetDefaultConvertor extends Convertor {
can(statement: JsonStatement, dialect: Dialect): boolean {
return (
@@ -1259,6 +1271,26 @@ class PgAlterTableAlterColumnSetDefaultConvertor extends Convertor {
}
}
+class SqliteAlterTableAlterColumnSetDefaultConvertor extends Convertor {
+ can(statement: JsonStatement, dialect: Dialect): boolean {
+ return (
+ statement.type === 'alter_table_alter_column_set_default'
+ && dialect === 'sqlite'
+ );
+ }
+
+ convert(statement: JsonAlterColumnSetDefaultStatement) {
+ return (
+ '/*\n SQLite does not support "Set default to column" out of the box, we do not generate automatic migration for that, so it has to be done manually'
+ + '\n Please refer to: https://www.techonthenet.com/sqlite/tables/alter_table.php'
+ + '\n https://www.sqlite.org/lang_altertable.html'
+ + '\n https://stackoverflow.com/questions/2083543/modify-a-columns-type-in-sqlite3'
+ + "\n\n Due to that we don't generate migration automatically and it has to be done manually"
+ + '\n*/'
+ );
+ }
+}
+
class PgAlterTableAlterColumnDropDefaultConvertor extends Convertor {
can(statement: JsonStatement, dialect: Dialect): boolean {
return (
@@ -1398,7 +1430,7 @@ class SqliteAlterTableAlterColumnDropGeneratedConvertor extends Convertor {
can(statement: JsonStatement, dialect: Dialect): boolean {
return (
statement.type === 'alter_table_alter_column_drop_generated'
- && (dialect === 'sqlite' || dialect === 'turso')
+ && dialect === 'sqlite'
);
}
@@ -1447,7 +1479,7 @@ class SqliteAlterTableAlterColumnSetExpressionConvertor extends Convertor {
can(statement: JsonStatement, dialect: Dialect): boolean {
return (
statement.type === 'alter_table_alter_column_set_generated'
- && (dialect === 'sqlite' || dialect === 'turso')
+ && dialect === 'sqlite'
);
}
@@ -1496,7 +1528,7 @@ class SqliteAlterTableAlterColumnAlterGeneratedConvertor extends Convertor {
can(statement: JsonStatement, dialect: Dialect): boolean {
return (
statement.type === 'alter_table_alter_column_alter_generated'
- && (dialect === 'sqlite' || dialect === 'turso')
+ && dialect === 'sqlite'
);
}
@@ -1643,119 +1675,6 @@ class MySqlAlterTableDropPk extends Convertor {
}
}
-type LibSQLModifyColumnStatement =
- | JsonAlterColumnTypeStatement
- | JsonAlterColumnDropNotNullStatement
- | JsonAlterColumnSetNotNullStatement
- | JsonAlterColumnSetDefaultStatement
- | JsonAlterColumnDropDefaultStatement;
-
-export class LibSQLModifyColumn extends Convertor {
- can(statement: JsonStatement, dialect: Dialect): boolean {
- return (
- (statement.type === 'alter_table_alter_column_set_type'
- || statement.type === 'alter_table_alter_column_drop_notnull'
- || statement.type === 'alter_table_alter_column_set_notnull'
- || statement.type === 'alter_table_alter_column_set_default'
- || statement.type === 'alter_table_alter_column_drop_default')
- && dialect === 'turso'
- );
- }
-
- convert(statement: LibSQLModifyColumnStatement, json2: SQLiteSchemaSquashed) {
- const { tableName, columnName } = statement;
-
- let columnType = ``;
- let columnDefault: any = '';
- let columnNotNull = '';
-
- const sqlStatements: string[] = [];
-
- // collect index info
- const indexes: {
- name: string;
- tableName: string;
- columns: string[];
- isUnique: boolean;
- where?: string | undefined;
- }[] = [];
- for (const table of Object.values(json2.tables)) {
- for (const index of Object.values(table.indexes)) {
- const unsquashed = SQLiteSquasher.unsquashIdx(index);
- sqlStatements.push(`DROP INDEX IF EXISTS "${unsquashed.name}";`);
- indexes.push({ ...unsquashed, tableName: table.name });
- }
- }
-
- switch (statement.type) {
- case 'alter_table_alter_column_set_type':
- columnType = ` ${statement.newDataType}`;
-
- columnDefault = statement.columnDefault
- ? ` DEFAULT ${statement.columnDefault}`
- : '';
-
- columnNotNull = statement.columnNotNull ? ` NOT NULL` : '';
-
- break;
- case 'alter_table_alter_column_drop_notnull':
- columnType = ` ${statement.newDataType}`;
-
- columnDefault = statement.columnDefault
- ? ` DEFAULT ${statement.columnDefault}`
- : '';
-
- columnNotNull = '';
- break;
- case 'alter_table_alter_column_set_notnull':
- columnType = ` ${statement.newDataType}`;
-
- columnDefault = statement.columnDefault
- ? ` DEFAULT ${statement.columnDefault}`
- : '';
-
- columnNotNull = ` NOT NULL`;
- break;
- case 'alter_table_alter_column_set_default':
- columnType = ` ${statement.newDataType}`;
-
- columnDefault = ` DEFAULT ${statement.newDefaultValue}`;
-
- columnNotNull = statement.columnNotNull ? ` NOT NULL` : '';
- break;
- case 'alter_table_alter_column_drop_default':
- columnType = ` ${statement.newDataType}`;
-
- columnDefault = '';
-
- columnNotNull = statement.columnNotNull ? ` NOT NULL` : '';
- break;
- }
-
- // Seems like getting value from simple json2 shanpshot makes dates be dates
- columnDefault = columnDefault instanceof Date
- ? columnDefault.toISOString()
- : columnDefault;
-
- sqlStatements.push(
- `ALTER TABLE \`${tableName}\` ALTER COLUMN "${columnName}" TO "${columnName}"${columnType}${columnNotNull}${columnDefault};`,
- );
-
- for (const index of indexes) {
- const indexPart = index.isUnique ? 'UNIQUE INDEX' : 'INDEX';
- const whereStatement = index.where ? ` WHERE ${index.where}` : '';
- const uniqueString = index.columns.map((it) => `\`${it}\``).join(',');
- const tableName = index.tableName;
-
- sqlStatements.push(
- `CREATE ${indexPart} \`${index.name}\` ON \`${tableName}\` (${uniqueString})${whereStatement};`,
- );
- }
-
- return sqlStatements;
- }
-}
-
type MySqlModifyColumnStatement =
| JsonAlterColumnDropNotNullStatement
| JsonAlterColumnSetNotNullStatement
@@ -2362,6 +2281,7 @@ class PgAlterTableCreateCompositePrimaryKeyConvertor extends Convertor {
}");`;
}
}
+
class PgAlterTableDeleteCompositePrimaryKeyConvertor extends Convertor {
can(statement: JsonStatement, dialect: Dialect): boolean {
return statement.type === 'delete_composite_pk' && dialect === 'postgresql';
@@ -2621,6 +2541,66 @@ class PgAlterTableAlterColumnSetNotNullConvertor extends Convertor {
}
}
+class SqliteAlterTableAlterColumnSetNotNullConvertor extends Convertor {
+ can(statement: JsonStatement, dialect: Dialect): boolean {
+ return (
+ statement.type === 'alter_table_alter_column_set_notnull'
+ && dialect === 'sqlite'
+ );
+ }
+
+ convert(statement: JsonAlterColumnSetNotNullStatement) {
+ return (
+ '/*\n SQLite does not support "Set not null to column" out of the box, we do not generate automatic migration for that, so it has to be done manually'
+ + '\n Please refer to: https://www.techonthenet.com/sqlite/tables/alter_table.php'
+ + '\n https://www.sqlite.org/lang_altertable.html'
+ + '\n https://stackoverflow.com/questions/2083543/modify-a-columns-type-in-sqlite3'
+ + "\n\n Due to that we don't generate migration automatically and it has to be done manually"
+ + '\n*/'
+ );
+ }
+}
+
+class SqliteAlterTableAlterColumnSetAutoincrementConvertor extends Convertor {
+ can(statement: JsonStatement, dialect: Dialect): boolean {
+ return (
+ statement.type === 'alter_table_alter_column_set_autoincrement'
+ && dialect === 'sqlite'
+ );
+ }
+
+ convert(statement: JsonAlterColumnSetAutoincrementStatement) {
+ return (
+ '/*\n SQLite does not support "Set autoincrement to a column" out of the box, we do not generate automatic migration for that, so it has to be done manually'
+ + '\n Please refer to: https://www.techonthenet.com/sqlite/tables/alter_table.php'
+ + '\n https://www.sqlite.org/lang_altertable.html'
+ + '\n https://stackoverflow.com/questions/2083543/modify-a-columns-type-in-sqlite3'
+ + "\n\n Due to that we don't generate migration automatically and it has to be done manually"
+ + '\n*/'
+ );
+ }
+}
+
+class SqliteAlterTableAlterColumnDropAutoincrementConvertor extends Convertor {
+ can(statement: JsonStatement, dialect: Dialect): boolean {
+ return (
+ statement.type === 'alter_table_alter_column_drop_autoincrement'
+ && dialect === 'sqlite'
+ );
+ }
+
+ convert(statement: JsonAlterColumnDropAutoincrementStatement) {
+ return (
+ '/*\n SQLite does not support "Drop autoincrement from a column" out of the box, we do not generate automatic migration for that, so it has to be done manually'
+ + '\n Please refer to: https://www.techonthenet.com/sqlite/tables/alter_table.php'
+ + '\n https://www.sqlite.org/lang_altertable.html'
+ + '\n https://stackoverflow.com/questions/2083543/modify-a-columns-type-in-sqlite3'
+ + "\n\n Due to that we don't generate migration automatically and it has to be done manually"
+ + '\n*/'
+ );
+ }
+}
+
class PgAlterTableAlterColumnDropNotNullConvertor extends Convertor {
can(statement: JsonStatement, dialect: Dialect): boolean {
return (
@@ -2640,6 +2620,26 @@ class PgAlterTableAlterColumnDropNotNullConvertor extends Convertor {
}
}
+class SqliteAlterTableAlterColumnDropNotNullConvertor extends Convertor {
+ can(statement: JsonStatement, dialect: Dialect): boolean {
+ return (
+ statement.type === 'alter_table_alter_column_drop_notnull'
+ && dialect === 'sqlite'
+ );
+ }
+
+ convert(statement: JsonAlterColumnDropNotNullStatement) {
+ return (
+ '/*\n SQLite does not support "Drop not null from column" out of the box, we do not generate automatic migration for that, so it has to be done manually'
+ + '\n Please refer to: https://www.techonthenet.com/sqlite/tables/alter_table.php'
+ + '\n https://www.sqlite.org/lang_altertable.html'
+ + '\n https://stackoverflow.com/questions/2083543/modify-a-columns-type-in-sqlite3'
+ + "\n\n Due to that we don't generate migration automatically and it has to be done manually"
+ + '\n*/'
+ );
+ }
+}
+
// FK
class PgCreateForeignKeyConvertor extends Convertor {
can(statement: JsonStatement, dialect: Dialect): boolean {
@@ -2682,36 +2682,19 @@ class PgCreateForeignKeyConvertor extends Convertor {
}
}
-class LibSQLCreateForeignKeyConvertor extends Convertor {
+class SqliteCreateForeignKeyConvertor extends Convertor {
can(statement: JsonStatement, dialect: Dialect): boolean {
- return (
- statement.type === 'create_reference'
- && dialect === 'turso'
- );
+ return statement.type === 'create_reference' && dialect === 'sqlite';
}
- convert(
- statement: JsonCreateReferenceStatement,
- json2?: SQLiteSchemaSquashed,
- action?: 'push',
- ): string {
- const { columnsFrom, columnsTo, tableFrom, onDelete, onUpdate, tableTo } = action === 'push'
- ? SQLiteSquasher.unsquashPushFK(statement.data)
- : SQLiteSquasher.unsquashFK(statement.data);
- const { columnDefault, columnNotNull, columnType } = statement;
-
- const onDeleteStatement = onDelete ? ` ON DELETE ${onDelete}` : '';
- const onUpdateStatement = onUpdate ? ` ON UPDATE ${onUpdate}` : '';
- const columnsDefaultValue = columnDefault
- ? ` DEFAULT ${columnDefault}`
- : '';
- const columnNotNullValue = columnNotNull ? ` NOT NULL` : '';
- const columnTypeValue = columnType ? ` ${columnType}` : '';
-
- const columnFrom = columnsFrom[0];
- const columnTo = columnsTo[0];
-
- return `ALTER TABLE \`${tableFrom}\` ALTER COLUMN "${columnFrom}" TO "${columnFrom}"${columnTypeValue}${columnNotNullValue}${columnsDefaultValue} REFERENCES ${tableTo}(${columnTo})${onDeleteStatement}${onUpdateStatement};`;
+ convert(statement: JsonCreateReferenceStatement): string {
+ return (
+ '/*\n SQLite does not support "Creating foreign key on existing column" out of the box, we do not generate automatic migration for that, so it has to be done manually'
+ + '\n Please refer to: https://www.techonthenet.com/sqlite/tables/alter_table.php'
+ + '\n https://www.sqlite.org/lang_altertable.html'
+ + "\n\n Due to that we don't generate migration automatically and it has to be done manually"
+ + '\n*/'
+ );
}
}
@@ -2786,6 +2769,22 @@ class PgAlterForeignKeyConvertor extends Convertor {
}
}
+class SqliteAlterForeignKeyConvertor extends Convertor {
+ can(statement: JsonStatement, dialect: Dialect): boolean {
+ return statement.type === 'alter_reference' && dialect === 'sqlite';
+ }
+
+ convert(statement: JsonAlterReferenceStatement): string {
+ return (
+ '/*\n SQLite does not support "Changing existing foreign key" out of the box, we do not generate automatic migration for that, so it has to be done manually'
+ + '\n Please refer to: https://www.techonthenet.com/sqlite/tables/alter_table.php'
+ + '\n https://www.sqlite.org/lang_altertable.html'
+ + "\n\n Due to that we don't generate migration automatically and it has to be done manually"
+ + '\n*/'
+ );
+ }
+}
+
class PgDeleteForeignKeyConvertor extends Convertor {
can(statement: JsonStatement, dialect: Dialect): boolean {
return statement.type === 'delete_reference' && dialect === 'postgresql';
@@ -2803,6 +2802,22 @@ class PgDeleteForeignKeyConvertor extends Convertor {
}
}
+class SqliteDeleteForeignKeyConvertor extends Convertor {
+ can(statement: JsonStatement, dialect: Dialect): boolean {
+ return statement.type === 'delete_reference' && dialect === 'sqlite';
+ }
+
+ convert(statement: JsonDeleteReferenceStatement): string {
+ return (
+ '/*\n SQLite does not support "Dropping foreign key" out of the box, we do not generate automatic migration for that, so it has to be done manually'
+ + '\n Please refer to: https://www.techonthenet.com/sqlite/tables/alter_table.php'
+ + '\n https://www.sqlite.org/lang_altertable.html'
+ + "\n\n Due to that we don't generate migration automatically and it has to be done manually"
+ + '\n*/'
+ );
+ }
+}
+
class MySqlDeleteForeignKeyConvertor extends Convertor {
can(statement: JsonStatement, dialect: Dialect): boolean {
return statement.type === 'delete_reference' && dialect === 'mysql';
@@ -2924,7 +2939,7 @@ class CreateSingleStoreIndexConvertor extends Convertor {
export class CreateSqliteIndexConvertor extends Convertor {
can(statement: JsonStatement, dialect: Dialect): boolean {
- return statement.type === 'create_index' && (dialect === 'sqlite' || dialect === 'turso');
+ return statement.type === 'create_index' && dialect === 'sqlite';
}
convert(statement: JsonCreateIndexStatement): string {
@@ -3046,7 +3061,7 @@ class PgAlterTableRemoveFromSchemaConvertor extends Convertor {
export class SqliteDropIndexConvertor extends Convertor {
can(statement: JsonStatement, dialect: Dialect): boolean {
- return statement.type === 'drop_index' && (dialect === 'sqlite' || dialect === 'turso');
+ return statement.type === 'drop_index' && dialect === 'sqlite';
}
convert(statement: JsonDropIndexStatement): string {
@@ -3077,132 +3092,11 @@ class SingleStoreDropIndexConvertor extends Convertor {
}
}
-class SQLiteRecreateTableConvertor extends Convertor {
- can(statement: JsonStatement, dialect: Dialect): boolean {
- return (
- statement.type === 'recreate_table' && dialect === 'sqlite'
- );
- }
-
- convert(statement: JsonRecreateTableStatement): string | string[] {
- const { tableName, columns, compositePKs, referenceData } = statement;
-
- const columnNames = columns.map((it) => `"${it.name}"`).join(', ');
- const newTableName = `__new_${tableName}`;
-
- const sqlStatements: string[] = [];
-
- sqlStatements.push(`PRAGMA foreign_keys=OFF;`);
-
- // create new table
- sqlStatements.push(
- new SQLiteCreateTableConvertor().convert({
- type: 'sqlite_create_table',
- tableName: newTableName,
- columns,
- referenceData,
- compositePKs,
- }),
- );
-
- // migrate data
- sqlStatements.push(
- `INSERT INTO \`${newTableName}\`(${columnNames}) SELECT ${columnNames} FROM \`${tableName}\`;`,
- );
-
- // drop table
- sqlStatements.push(
- new SQLiteDropTableConvertor().convert({
- type: 'drop_table',
- tableName: tableName,
- schema: '',
- }),
- );
-
- // rename table
- sqlStatements.push(
- new SqliteRenameTableConvertor().convert({
- fromSchema: '',
- tableNameFrom: newTableName,
- tableNameTo: tableName,
- toSchema: '',
- type: 'rename_table',
- }),
- );
-
- sqlStatements.push(`PRAGMA foreign_keys=ON;`);
-
- return sqlStatements;
- }
-}
-
-class LibSQLRecreateTableConvertor extends Convertor {
- can(statement: JsonStatement, dialect: Dialect): boolean {
- return (
- statement.type === 'recreate_table'
- && dialect === 'turso'
- );
- }
-
- convert(statement: JsonRecreateTableStatement): string[] {
- const { tableName, columns, compositePKs, referenceData } = statement;
-
- const columnNames = columns.map((it) => `"${it.name}"`).join(', ');
- const newTableName = `__new_${tableName}`;
-
- const sqlStatements: string[] = [];
-
- sqlStatements.push(`PRAGMA foreign_keys=OFF;`);
-
- // create new table
- sqlStatements.push(
- new SQLiteCreateTableConvertor().convert({
- type: 'sqlite_create_table',
- tableName: newTableName,
- columns,
- referenceData,
- compositePKs,
- }),
- );
-
- // migrate data
- sqlStatements.push(
- `INSERT INTO \`${newTableName}\`(${columnNames}) SELECT ${columnNames} FROM \`${tableName}\`;`,
- );
-
- // drop table
- sqlStatements.push(
- new SQLiteDropTableConvertor().convert({
- type: 'drop_table',
- tableName: tableName,
- schema: '',
- }),
- );
-
- // rename table
- sqlStatements.push(
- new SqliteRenameTableConvertor().convert({
- fromSchema: '',
- tableNameFrom: newTableName,
- tableNameTo: tableName,
- toSchema: '',
- type: 'rename_table',
- }),
- );
-
- sqlStatements.push(`PRAGMA foreign_keys=ON;`);
-
- return sqlStatements;
- }
-}
-
const convertors: Convertor[] = [];
convertors.push(new PgCreateTableConvertor());
convertors.push(new MySqlCreateTableConvertor());
convertors.push(new SingleStoreCreateTableConvertor());
convertors.push(new SQLiteCreateTableConvertor());
-convertors.push(new SQLiteRecreateTableConvertor());
-convertors.push(new LibSQLRecreateTableConvertor());
convertors.push(new CreateTypeEnumConvertor());
@@ -3281,7 +3175,6 @@ convertors.push(new SqliteAlterTableAlterColumnAlterGeneratedConvertor());
convertors.push(new SqliteAlterTableAlterColumnSetExpressionConvertor());
convertors.push(new MySqlModifyColumn());
-convertors.push(new LibSQLModifyColumn());
// convertors.push(new MySqlAlterTableAlterColumnSetDefaultConvertor());
// convertors.push(new MySqlAlterTableAlterColumnDropDefaultConvertor());
@@ -3302,12 +3195,31 @@ convertors.push(new PgAlterTableSetSchemaConvertor());
convertors.push(new PgAlterTableSetNewSchemaConvertor());
convertors.push(new PgAlterTableRemoveFromSchemaConvertor());
-convertors.push(new LibSQLCreateForeignKeyConvertor());
+// Unhandled sqlite queries, so they will appear last
+convertors.push(new SQLiteAlterTableAlterColumnSetTypeConvertor());
+convertors.push(new SqliteAlterForeignKeyConvertor());
+convertors.push(new SqliteDeleteForeignKeyConvertor());
+convertors.push(new SqliteCreateForeignKeyConvertor());
+
+convertors.push(new SQLiteAlterTableAddUniqueConstraintConvertor());
+convertors.push(new SQLiteAlterTableDropUniqueConstraintConvertor());
convertors.push(new PgAlterTableAlterColumnDropGenerated());
convertors.push(new PgAlterTableAlterColumnSetGenerated());
convertors.push(new PgAlterTableAlterColumnAlterGenerated());
+convertors.push(new SqliteAlterTableAlterColumnSetNotNullConvertor());
+convertors.push(new SqliteAlterTableAlterColumnDropNotNullConvertor());
+convertors.push(new SqliteAlterTableAlterColumnSetDefaultConvertor());
+convertors.push(new SqliteAlterTableAlterColumnDropDefaultConvertor());
+
+convertors.push(new SqliteAlterTableAlterColumnSetAutoincrementConvertor());
+convertors.push(new SqliteAlterTableAlterColumnDropAutoincrementConvertor());
+
+convertors.push(new SqliteAlterTableCreateCompositePrimaryKeyConvertor());
+convertors.push(new SqliteAlterTableDeleteCompositePrimaryKeyConvertor());
+convertors.push(new SqliteAlterTableAlterCompositePrimaryKeyConvertor());
+
convertors.push(new PgAlterTableCreateCompositePrimaryKeyConvertor());
convertors.push(new PgAlterTableDeleteCompositePrimaryKeyConvertor());
convertors.push(new PgAlterTableAlterCompositePrimaryKeyConvertor());
@@ -3324,41 +3236,26 @@ convertors.push(new SingleStoreAlterTableCreateCompositePrimaryKeyConvertor());
convertors.push(new SingleStoreAlterTableAddPk());
convertors.push(new SingleStoreAlterTableAlterCompositePrimaryKeyConvertor());
-// overloads for turso driver
-export function fromJson(
- statements: JsonStatement[],
- dialect: Exclude,
-): string[];
-export function fromJson(
- statements: JsonStatement[],
- dialect: 'sqlite' | 'turso',
- action?: 'push',
- json2?: SQLiteSchemaSquashed,
-): string[];
-
-export function fromJson(
- statements: JsonStatement[],
- dialect: Dialect,
- action?: 'push',
- json2?: SQLiteSchemaSquashed,
-) {
+export const fromJson = (statements: JsonStatement[], dialect: Dialect) => {
const result = statements
.flatMap((statement) => {
const filtered = convertors.filter((it) => {
+ // console.log(statement, dialect)
return it.can(statement, dialect);
});
const convertor = filtered.length === 1 ? filtered[0] : undefined;
if (!convertor) {
+ // console.log("no convertor:", statement.type, dialect);
return '';
}
- return convertor.convert(statement, json2, action);
+ return convertor.convert(statement);
})
.filter((it) => it !== '');
return result;
-}
+};
// blog.yo1.dog/updating-enum-values-in-postgresql-the-safe-and-easy-way/
// test case for enum altering
diff --git a/drizzle-kit/src/statementCombiner.ts b/drizzle-kit/src/statementCombiner.ts
deleted file mode 100644
index 2f7b6ddbe..000000000
--- a/drizzle-kit/src/statementCombiner.ts
+++ /dev/null
@@ -1,450 +0,0 @@
-import {
- JsonCreateIndexStatement,
- JsonRecreateTableStatement,
- JsonStatement,
- prepareCreateIndexesJson,
-} from './jsonStatements';
-import { SQLiteSchemaSquashed, SQLiteSquasher } from './serializer/sqliteSchema';
-
-export const prepareLibSQLRecreateTable = (
- table: SQLiteSchemaSquashed['tables'][keyof SQLiteSchemaSquashed['tables']],
- action?: 'push',
-): (JsonRecreateTableStatement | JsonCreateIndexStatement)[] => {
- const { name, columns, uniqueConstraints, indexes } = table;
-
- const composites: string[][] = Object.values(table.compositePrimaryKeys).map(
- (it) => SQLiteSquasher.unsquashPK(it),
- );
-
- const references: string[] = Object.values(table.foreignKeys);
- const fks = references.map((it) =>
- action === 'push' ? SQLiteSquasher.unsquashPushFK(it) : SQLiteSquasher.unsquashFK(it)
- );
-
- const statements: (JsonRecreateTableStatement | JsonCreateIndexStatement)[] = [
- {
- type: 'recreate_table',
- tableName: name,
- columns: Object.values(columns),
- compositePKs: composites,
- referenceData: fks,
- uniqueConstraints: Object.values(uniqueConstraints),
- },
- ];
-
- if (Object.keys(indexes).length) {
- statements.push(...prepareCreateIndexesJson(name, '', indexes));
- }
- return statements;
-};
-
-export const prepareSQLiteRecreateTable = (
- table: SQLiteSchemaSquashed['tables'][keyof SQLiteSchemaSquashed['tables']],
- action?: 'push',
-): JsonStatement[] => {
- const { name, columns, uniqueConstraints, indexes } = table;
-
- const composites: string[][] = Object.values(table.compositePrimaryKeys).map(
- (it) => SQLiteSquasher.unsquashPK(it),
- );
-
- const references: string[] = Object.values(table.foreignKeys);
- const fks = references.map((it) =>
- action === 'push' ? SQLiteSquasher.unsquashPushFK(it) : SQLiteSquasher.unsquashFK(it)
- );
-
- const statements: JsonStatement[] = [
- {
- type: 'recreate_table',
- tableName: name,
- columns: Object.values(columns),
- compositePKs: composites,
- referenceData: fks,
- uniqueConstraints: Object.values(uniqueConstraints),
- },
- ];
-
- if (Object.keys(indexes).length) {
- statements.push(...prepareCreateIndexesJson(name, '', indexes));
- }
- return statements;
-};
-
-export const libSQLCombineStatements = (
- statements: JsonStatement[],
- json2: SQLiteSchemaSquashed,
- action?: 'push',
-) => {
- // const tablesContext: Record = {};
- const newStatements: Record = {};
- for (const statement of statements) {
- if (
- statement.type === 'alter_table_alter_column_drop_autoincrement'
- || statement.type === 'alter_table_alter_column_set_autoincrement'
- || statement.type === 'alter_table_alter_column_drop_pk'
- || statement.type === 'alter_table_alter_column_set_pk'
- || statement.type === 'create_composite_pk'
- || statement.type === 'alter_composite_pk'
- || statement.type === 'delete_composite_pk'
- ) {
- const tableName = statement.tableName;
-
- const statementsForTable = newStatements[tableName];
-
- if (!statementsForTable) {
- newStatements[tableName] = prepareLibSQLRecreateTable(json2.tables[tableName], action);
-
- continue;
- }
-
- if (!statementsForTable.some(({ type }) => type === 'recreate_table')) {
- const wasRename = statementsForTable.some(({ type }) => type === 'rename_table');
- const preparedStatements = prepareLibSQLRecreateTable(json2.tables[tableName], action);
-
- if (wasRename) {
- newStatements[tableName].push(...preparedStatements);
- } else {
- newStatements[tableName] = preparedStatements;
- }
-
- continue;
- }
-
- continue;
- }
-
- if (
- statement.type === 'alter_table_alter_column_set_type'
- || statement.type === 'alter_table_alter_column_drop_notnull'
- || statement.type === 'alter_table_alter_column_set_notnull'
- || statement.type === 'alter_table_alter_column_set_default'
- || statement.type === 'alter_table_alter_column_drop_default'
- ) {
- const { tableName, columnName, columnPk } = statement;
-
- // const columnIsPartOfUniqueIndex = Object.values(
- // json2.tables[tableName].indexes,
- // ).some((it) => {
- // const unsquashIndex = SQLiteSquasher.unsquashIdx(it);
-
- // return (
- // unsquashIndex.columns.includes(columnName) && unsquashIndex.isUnique
- // );
- // });
-
- const columnIsPartOfForeignKey = Object.values(
- json2.tables[tableName].foreignKeys,
- ).some((it) => {
- const unsquashFk = action === 'push' ? SQLiteSquasher.unsquashPushFK(it) : SQLiteSquasher.unsquashFK(it);
-
- return (
- unsquashFk.columnsFrom.includes(columnName)
- );
- });
-
- const statementsForTable = newStatements[tableName];
-
- if (
- !statementsForTable && (columnIsPartOfForeignKey || columnPk)
- ) {
- newStatements[tableName] = prepareLibSQLRecreateTable(json2.tables[tableName], action);
- continue;
- }
-
- if (
- statementsForTable && (columnIsPartOfForeignKey || columnPk)
- ) {
- if (!statementsForTable.some(({ type }) => type === 'recreate_table')) {
- const wasRename = statementsForTable.some(({ type }) => type === 'rename_table');
- const preparedStatements = prepareLibSQLRecreateTable(json2.tables[tableName], action);
-
- if (wasRename) {
- newStatements[tableName].push(...preparedStatements);
- } else {
- newStatements[tableName] = preparedStatements;
- }
- }
- continue;
- }
- if (
- statementsForTable && !(columnIsPartOfForeignKey || columnPk)
- ) {
- if (!statementsForTable.some(({ type }) => type === 'recreate_table')) {
- newStatements[tableName].push(statement);
- }
- continue;
- }
-
- newStatements[tableName] = [statement];
-
- continue;
- }
-
- if (statement.type === 'create_reference') {
- const tableName = statement.tableName;
-
- const data = action === 'push'
- ? SQLiteSquasher.unsquashPushFK(statement.data)
- : SQLiteSquasher.unsquashFK(statement.data);
-
- const statementsForTable = newStatements[tableName];
-
- if (!statementsForTable) {
- newStatements[tableName] = statement.isMulticolumn
- ? prepareLibSQLRecreateTable(json2.tables[tableName], action)
- : [statement];
-
- continue;
- }
-
- // if add column with reference -> skip create_reference statement
- if (
- !statement.isMulticolumn
- && statementsForTable.some((st) =>
- st.type === 'sqlite_alter_table_add_column' && st.column.name === data.columnsFrom[0]
- )
- ) {
- continue;
- }
-
- if (statement.isMulticolumn) {
- if (!statementsForTable.some(({ type }) => type === 'recreate_table')) {
- const wasRename = statementsForTable.some(({ type }) => type === 'rename_table');
- const preparedStatements = prepareLibSQLRecreateTable(json2.tables[tableName], action);
-
- if (wasRename) {
- newStatements[tableName].push(...preparedStatements);
- } else {
- newStatements[tableName] = preparedStatements;
- }
-
- continue;
- }
-
- continue;
- }
-
- if (!statementsForTable.some(({ type }) => type === 'recreate_table')) {
- newStatements[tableName].push(statement);
- }
-
- continue;
- }
-
- if (statement.type === 'delete_reference') {
- const tableName = statement.tableName;
-
- const statementsForTable = newStatements[tableName];
-
- if (!statementsForTable) {
- newStatements[tableName] = prepareLibSQLRecreateTable(json2.tables[tableName], action);
- continue;
- }
-
- if (!statementsForTable.some(({ type }) => type === 'recreate_table')) {
- const wasRename = statementsForTable.some(({ type }) => type === 'rename_table');
- const preparedStatements = prepareLibSQLRecreateTable(json2.tables[tableName], action);
-
- if (wasRename) {
- newStatements[tableName].push(...preparedStatements);
- } else {
- newStatements[tableName] = preparedStatements;
- }
-
- continue;
- }
-
- continue;
- }
-
- if (statement.type === 'sqlite_alter_table_add_column' && statement.column.primaryKey) {
- const tableName = statement.tableName;
-
- const statementsForTable = newStatements[tableName];
-
- if (!statementsForTable) {
- newStatements[tableName] = prepareLibSQLRecreateTable(json2.tables[tableName], action);
- continue;
- }
-
- if (!statementsForTable.some(({ type }) => type === 'recreate_table')) {
- const wasRename = statementsForTable.some(({ type }) => type === 'rename_table');
- const preparedStatements = prepareLibSQLRecreateTable(json2.tables[tableName], action);
-
- if (wasRename) {
- newStatements[tableName].push(...preparedStatements);
- } else {
- newStatements[tableName] = preparedStatements;
- }
-
- continue;
- }
-
- continue;
- }
-
- const tableName = statement.type === 'rename_table'
- ? statement.tableNameTo
- : (statement as { tableName: string }).tableName;
- const statementsForTable = newStatements[tableName];
-
- if (!statementsForTable) {
- newStatements[tableName] = [statement];
- continue;
- }
-
- if (!statementsForTable.some(({ type }) => type === 'recreate_table')) {
- newStatements[tableName].push(statement);
- }
- }
-
- const combinedStatements = Object.values(newStatements).flat();
- const renamedTables = combinedStatements.filter((it) => it.type === 'rename_table');
- const renamedColumns = combinedStatements.filter((it) => it.type === 'alter_table_rename_column');
-
- const rest = combinedStatements.filter((it) => it.type !== 'rename_table' && it.type !== 'alter_table_rename_column');
-
- return [...renamedTables, ...renamedColumns, ...rest];
-};
-
-export const sqliteCombineStatements = (
- statements: JsonStatement[],
- json2: SQLiteSchemaSquashed,
- action?: 'push',
-) => {
- // const tablesContext: Record = {};
- const newStatements: Record = {};
- for (const statement of statements) {
- if (
- statement.type === 'alter_table_alter_column_set_type'
- || statement.type === 'alter_table_alter_column_set_default'
- || statement.type === 'alter_table_alter_column_drop_default'
- || statement.type === 'alter_table_alter_column_set_notnull'
- || statement.type === 'alter_table_alter_column_drop_notnull'
- || statement.type === 'alter_table_alter_column_drop_autoincrement'
- || statement.type === 'alter_table_alter_column_set_autoincrement'
- || statement.type === 'alter_table_alter_column_drop_pk'
- || statement.type === 'alter_table_alter_column_set_pk'
- || statement.type === 'delete_reference'
- || statement.type === 'alter_reference'
- || statement.type === 'create_composite_pk'
- || statement.type === 'alter_composite_pk'
- || statement.type === 'delete_composite_pk'
- || statement.type === 'create_unique_constraint'
- || statement.type === 'delete_unique_constraint'
- ) {
- const tableName = statement.tableName;
-
- const statementsForTable = newStatements[tableName];
-
- if (!statementsForTable) {
- newStatements[tableName] = prepareLibSQLRecreateTable(json2.tables[tableName], action);
- continue;
- }
-
- if (!statementsForTable.some(({ type }) => type === 'recreate_table')) {
- const wasRename = statementsForTable.some(({ type }) => type === 'rename_table');
- const preparedStatements = prepareLibSQLRecreateTable(json2.tables[tableName], action);
-
- if (wasRename) {
- newStatements[tableName].push(...preparedStatements);
- } else {
- newStatements[tableName] = preparedStatements;
- }
-
- continue;
- }
-
- continue;
- }
-
- if (statement.type === 'sqlite_alter_table_add_column' && statement.column.primaryKey) {
- const tableName = statement.tableName;
-
- const statementsForTable = newStatements[tableName];
-
- if (!statementsForTable) {
- newStatements[tableName] = prepareLibSQLRecreateTable(json2.tables[tableName], action);
- continue;
- }
-
- if (!statementsForTable.some(({ type }) => type === 'recreate_table')) {
- const wasRename = statementsForTable.some(({ type }) => type === 'rename_table');
- const preparedStatements = prepareLibSQLRecreateTable(json2.tables[tableName], action);
-
- if (wasRename) {
- newStatements[tableName].push(...preparedStatements);
- } else {
- newStatements[tableName] = preparedStatements;
- }
-
- continue;
- }
-
- continue;
- }
-
- if (statement.type === 'create_reference') {
- const tableName = statement.tableName;
-
- const data = action === 'push'
- ? SQLiteSquasher.unsquashPushFK(statement.data)
- : SQLiteSquasher.unsquashFK(statement.data);
- const statementsForTable = newStatements[tableName];
-
- if (!statementsForTable) {
- newStatements[tableName] = prepareSQLiteRecreateTable(json2.tables[tableName], action);
- continue;
- }
-
- // if add column with reference -> skip create_reference statement
- if (
- data.columnsFrom.length === 1
- && statementsForTable.some((st) =>
- st.type === 'sqlite_alter_table_add_column' && st.column.name === data.columnsFrom[0]
- )
- ) {
- continue;
- }
-
- if (!statementsForTable.some(({ type }) => type === 'recreate_table')) {
- const wasRename = statementsForTable.some(({ type }) => type === 'rename_table');
- const preparedStatements = prepareLibSQLRecreateTable(json2.tables[tableName], action);
-
- if (wasRename) {
- newStatements[tableName].push(...preparedStatements);
- } else {
- newStatements[tableName] = preparedStatements;
- }
-
- continue;
- }
-
- continue;
- }
-
- const tableName = statement.type === 'rename_table'
- ? statement.tableNameTo
- : (statement as { tableName: string }).tableName;
-
- const statementsForTable = newStatements[tableName];
-
- if (!statementsForTable) {
- newStatements[tableName] = [statement];
- continue;
- }
-
- if (!statementsForTable.some(({ type }) => type === 'recreate_table')) {
- newStatements[tableName].push(statement);
- }
- }
-
- const combinedStatements = Object.values(newStatements).flat();
-
- const renamedTables = combinedStatements.filter((it) => it.type === 'rename_table');
- const renamedColumns = combinedStatements.filter((it) => it.type === 'alter_table_rename_column');
-
- const rest = combinedStatements.filter((it) => it.type !== 'rename_table' && it.type !== 'alter_table_rename_column');
-
- return [...renamedTables, ...renamedColumns, ...rest];
-};
diff --git a/drizzle-kit/src/utils.ts b/drizzle-kit/src/utils.ts
index 71454550e..b14bad5b2 100644
--- a/drizzle-kit/src/utils.ts
+++ b/drizzle-kit/src/utils.ts
@@ -26,12 +26,9 @@ export type DB = {
export type SQLiteDB = {
query: (sql: string, params?: any[]) => Promise;
run(query: string): Promise;
-};
-
-export type LibSQLDB = {
- query: (sql: string, params?: any[]) => Promise;
- run(query: string): Promise;
- batchWithPragma?(queries: string[]): Promise;
+ batch?(
+ queries: { query: string; values?: any[] | undefined }[],
+ ): Promise;
};
export const copy = (it: T): T => {
@@ -119,8 +116,6 @@ const validatorForDialect = (dialect: Dialect) => {
return { validator: backwardCompatiblePgSchema, version: 7 };
case 'sqlite':
return { validator: backwardCompatibleSqliteSchema, version: 6 };
- case 'turso':
- return { validator: backwardCompatibleSqliteSchema, version: 6 };
case 'mysql':
return { validator: backwardCompatibleMysqlSchema, version: 5 };
case 'singlestore':
@@ -349,13 +344,3 @@ export const normalisePGliteUrl = (
export function isPgArrayType(sqlType: string) {
return sqlType.match(/.*\[\d*\].*|.*\[\].*/g) !== null;
}
-
-export function findAddedAndRemoved(columnNames1: string[], columnNames2: string[]) {
- const set1 = new Set(columnNames1);
- const set2 = new Set(columnNames2);
-
- const addedColumns = columnNames2.filter((it) => !set1.has(it));
- const removedColumns = columnNames1.filter((it) => !set2.has(it));
-
- return { addedColumns, removedColumns };
-}
diff --git a/drizzle-kit/tests/cli-generate.test.ts b/drizzle-kit/tests/cli-generate.test.ts
index 56a3a0d04..3e5c0fc22 100644
--- a/drizzle-kit/tests/cli-generate.test.ts
+++ b/drizzle-kit/tests/cli-generate.test.ts
@@ -62,7 +62,6 @@ test('generate #2', async (t) => {
test('generate #3', async (t) => {
const res = await brotest(generate, '');
-
if (res.type !== 'handler') assert.fail(res.type, 'handler');
expect(res.options).toStrictEqual({
dialect: 'postgresql',
diff --git a/drizzle-kit/tests/cli-migrate.test.ts b/drizzle-kit/tests/cli-migrate.test.ts
index 1425691f0..a4ffec2f0 100644
--- a/drizzle-kit/tests/cli-migrate.test.ts
+++ b/drizzle-kit/tests/cli-migrate.test.ts
@@ -31,10 +31,11 @@ test('migrate #2', async (t) => {
const res = await brotest(migrate, '--config=turso.config.ts');
if (res.type !== 'handler') assert.fail(res.type, 'handler');
expect(res.options).toStrictEqual({
- dialect: 'turso',
+ dialect: 'sqlite',
out: 'drizzle',
credentials: {
authToken: 'token',
+ driver: 'turso',
url: 'turso.dev',
},
schema: undefined, // drizzle migrations table schema
diff --git a/drizzle-kit/tests/cli-push.test.ts b/drizzle-kit/tests/cli-push.test.ts
index f5b84fdce..1a4bde66d 100644
--- a/drizzle-kit/tests/cli-push.test.ts
+++ b/drizzle-kit/tests/cli-push.test.ts
@@ -34,9 +34,10 @@ test('push #2', async (t) => {
const res = await brotest(push, '--config=turso.config.ts');
if (res.type !== 'handler') assert.fail(res.type, 'handler');
expect(res.options).toStrictEqual({
- dialect: 'turso',
+ dialect: 'sqlite',
credentials: {
authToken: 'token',
+ driver: 'turso',
url: 'turso.dev',
},
force: false,
diff --git a/drizzle-kit/tests/cli/turso.config.ts b/drizzle-kit/tests/cli/turso.config.ts
index 85efe5934..089e4d216 100644
--- a/drizzle-kit/tests/cli/turso.config.ts
+++ b/drizzle-kit/tests/cli/turso.config.ts
@@ -2,7 +2,8 @@ import { defineConfig } from '../../src';
export default defineConfig({
schema: './schema.ts',
- dialect: 'turso',
+ dialect: 'sqlite',
+ driver: 'turso',
dbCredentials: {
url: 'turso.dev',
authToken: 'token',
diff --git a/drizzle-kit/tests/libsql-statements.test.ts b/drizzle-kit/tests/libsql-statements.test.ts
deleted file mode 100644
index 8221e52e0..000000000
--- a/drizzle-kit/tests/libsql-statements.test.ts
+++ /dev/null
@@ -1,982 +0,0 @@
-import { foreignKey, index, int, integer, sqliteTable, text, uniqueIndex } from 'drizzle-orm/sqlite-core';
-import { JsonRecreateTableStatement } from 'src/jsonStatements';
-import { expect, test } from 'vitest';
-import { diffTestSchemasLibSQL } from './schemaDiffer';
-
-test('drop autoincrement', async (t) => {
- const schema1 = {
- users: sqliteTable('users', {
- id: int('id').primaryKey({ autoIncrement: true }),
- }),
- };
-
- const schema2 = {
- users: sqliteTable('users', {
- id: int('id').primaryKey({ autoIncrement: false }),
- }),
- };
-
- const { statements } = await diffTestSchemasLibSQL(schema1, schema2, []);
-
- expect(statements.length).toBe(1);
- expect(statements[0]).toStrictEqual({
- columns: [{
- autoincrement: false,
- generated: undefined,
- name: 'id',
- notNull: true,
- primaryKey: true,
- type: 'integer',
- }],
- compositePKs: [],
- referenceData: [],
- tableName: 'users',
- type: 'recreate_table',
- uniqueConstraints: [],
- });
-});
-
-test('set autoincrement', async (t) => {
- const schema1 = {
- users: sqliteTable('users', {
- id: int('id').primaryKey({ autoIncrement: false }),
- }),
- };
-
- const schema2 = {
- users: sqliteTable('users', {
- id: int('id').primaryKey({ autoIncrement: true }),
- }),
- };
-
- const { statements } = await diffTestSchemasLibSQL(schema1, schema2, []);
-
- expect(statements.length).toBe(1);
- expect(statements[0]).toStrictEqual({
- columns: [{
- autoincrement: true,
- generated: undefined,
- name: 'id',
- notNull: true,
- primaryKey: true,
- type: 'integer',
- }],
- compositePKs: [],
- referenceData: [],
- tableName: 'users',
- type: 'recreate_table',
- uniqueConstraints: [],
- });
-});
-
-test('set not null', async (t) => {
- const schema1 = {
- users: sqliteTable('users', {
- id: int('id').primaryKey({ autoIncrement: true }),
- name: text('name'),
- }),
- };
-
- const schema2 = {
- users: sqliteTable('users', {
- id: int('id').primaryKey({ autoIncrement: true }),
- name: text('name').notNull(),
- }),
- };
-
- const { statements, sqlStatements } = await diffTestSchemasLibSQL(
- schema1,
- schema2,
- [],
- );
-
- expect(statements.length).toBe(1);
- expect(statements[0]).toStrictEqual({
- type: 'alter_table_alter_column_set_notnull',
- tableName: 'users',
- columnName: 'name',
- schema: '',
- newDataType: 'text',
- columnDefault: undefined,
- columnOnUpdate: undefined,
- columnNotNull: true,
- columnAutoIncrement: false,
- columnPk: false,
- });
-
- expect(sqlStatements.length).toBe(1);
- expect(sqlStatements[0]).toBe(
- `ALTER TABLE \`users\` ALTER COLUMN "name" TO "name" text NOT NULL;`,
- );
-});
-
-test('drop not null', async (t) => {
- const schema1 = {
- users: sqliteTable('users', {
- id: int('id').primaryKey({ autoIncrement: true }),
- name: text('name').notNull(),
- }),
- };
-
- const schema2 = {
- users: sqliteTable('users', {
- id: int('id').primaryKey({ autoIncrement: true }),
- name: text('name'),
- }),
- };
-
- const { statements, sqlStatements } = await diffTestSchemasLibSQL(
- schema1,
- schema2,
- [],
- );
-
- expect(statements.length).toBe(1);
- expect(statements[0]).toStrictEqual({
- type: 'alter_table_alter_column_drop_notnull',
- tableName: 'users',
- columnName: 'name',
- schema: '',
- newDataType: 'text',
- columnDefault: undefined,
- columnOnUpdate: undefined,
- columnNotNull: false,
- columnAutoIncrement: false,
- columnPk: false,
- });
-
- expect(sqlStatements.length).toBe(1);
- expect(sqlStatements[0]).toBe(
- `ALTER TABLE \`users\` ALTER COLUMN "name" TO "name" text;`,
- );
-});
-
-test('set default. set not null. add column', async (t) => {
- const schema1 = {
- users: sqliteTable('users', {
- id: int('id').primaryKey({ autoIncrement: true }),
- name: text('name'),
- }),
- };
-
- const schema2 = {
- users: sqliteTable('users', {
- id: int('id').primaryKey({ autoIncrement: true }),
- name: text('name').notNull().default('name'),
- age: int('age').notNull(),
- }),
- };
-
- const { statements, sqlStatements } = await diffTestSchemasLibSQL(
- schema1,
- schema2,
- [],
- );
-
- expect(statements.length).toBe(3);
- expect(statements[0]).toStrictEqual({
- type: 'alter_table_alter_column_set_default',
- tableName: 'users',
- columnName: 'name',
- newDefaultValue: "'name'",
- schema: '',
- newDataType: 'text',
- columnOnUpdate: undefined,
- columnNotNull: true,
- columnAutoIncrement: false,
- columnPk: false,
- });
- expect(statements[1]).toStrictEqual({
- type: 'alter_table_alter_column_set_notnull',
- tableName: 'users',
- columnName: 'name',
- schema: '',
- newDataType: 'text',
- columnDefault: "'name'",
- columnOnUpdate: undefined,
- columnNotNull: true,
- columnAutoIncrement: false,
- columnPk: false,
- });
- expect(statements[2]).toStrictEqual({
- type: 'sqlite_alter_table_add_column',
- tableName: 'users',
- referenceData: undefined,
- column: {
- name: 'age',
- type: 'integer',
- primaryKey: false,
- notNull: true,
- autoincrement: false,
- },
- });
-
- expect(sqlStatements.length).toBe(2);
- expect(sqlStatements[0]).toBe(
- `ALTER TABLE \`users\` ALTER COLUMN "name" TO "name" text NOT NULL DEFAULT 'name';`,
- );
- expect(sqlStatements[1]).toBe(
- `ALTER TABLE \`users\` ADD \`age\` integer NOT NULL;`,
- );
-});
-
-test('drop default. drop not null', async (t) => {
- const schema1 = {
- users: sqliteTable('users', {
- id: int('id').primaryKey({ autoIncrement: true }),
- name: text('name').notNull().default('name'),
- }),
- };
-
- const schema2 = {
- users: sqliteTable('users', {
- id: int('id').primaryKey({ autoIncrement: true }),
- name: text('name'),
- }),
- };
-
- const { statements, sqlStatements } = await diffTestSchemasLibSQL(
- schema1,
- schema2,
- [],
- );
-
- expect(statements.length).toBe(2);
- expect(statements[0]).toStrictEqual({
- type: 'alter_table_alter_column_drop_default',
- tableName: 'users',
- columnName: 'name',
- schema: '',
- newDataType: 'text',
- columnDefault: undefined,
- columnOnUpdate: undefined,
- columnNotNull: false,
- columnAutoIncrement: false,
- columnPk: false,
- });
- expect(statements[1]).toStrictEqual({
- type: 'alter_table_alter_column_drop_notnull',
- tableName: 'users',
- columnName: 'name',
- schema: '',
- newDataType: 'text',
- columnDefault: undefined,
- columnOnUpdate: undefined,
- columnNotNull: false,
- columnAutoIncrement: false,
- columnPk: false,
- });
-
- expect(sqlStatements.length).toBe(1);
- expect(sqlStatements[0]).toBe(
- `ALTER TABLE \`users\` ALTER COLUMN "name" TO "name" text;`,
- );
-});
-
-test('set data type. set default', async (t) => {
- const schema1 = {
- users: sqliteTable('users', {
- id: int('id').primaryKey({ autoIncrement: true }),
- name: text('name'),
- }),
- };
-
- const schema2 = {
- users: sqliteTable('users', {
- id: int('id').primaryKey({ autoIncrement: true }),
- name: int('name').default(123),
- }),
- };
-
- const { statements, sqlStatements } = await diffTestSchemasLibSQL(
- schema1,
- schema2,
- [],
- );
-
- expect(statements.length).toBe(2);
- expect(statements[0]).toStrictEqual({
- type: 'alter_table_alter_column_set_type',
- tableName: 'users',
- columnName: 'name',
- newDataType: 'integer',
- oldDataType: 'text',
- schema: '',
- columnDefault: 123,
- columnOnUpdate: undefined,
- columnNotNull: false,
- columnAutoIncrement: false,
- columnPk: false,
- });
- expect(statements[1]).toStrictEqual({
- type: 'alter_table_alter_column_set_default',
- tableName: 'users',
- columnName: 'name',
- schema: '',
- newDataType: 'integer',
- newDefaultValue: 123,
- columnOnUpdate: undefined,
- columnNotNull: false,
- columnAutoIncrement: false,
- columnPk: false,
- });
-
- expect(sqlStatements.length).toBe(1);
- expect(sqlStatements[0]).toBe(
- `ALTER TABLE \`users\` ALTER COLUMN "name" TO "name" integer DEFAULT 123;`,
- );
-});
-
-test('add foriegn key', async (t) => {
- const schema = {
- table: sqliteTable('table', {
- id: int('id').primaryKey({ autoIncrement: true }),
- name: text('name'),
- }),
- };
-
- const schema1 = {
- users: sqliteTable('users', {
- id: int('id').primaryKey({ autoIncrement: true }),
- tableId: int('table_id'),
- }),
- };
-
- const schema2 = {
- users: sqliteTable('users', {
- id: int('id').primaryKey({ autoIncrement: true }),
- tableId: int('table_id').references(() => schema.table.id),
- }),
- };
-
- const { statements, sqlStatements } = await diffTestSchemasLibSQL(
- schema1,
- schema2,
- [],
- );
-
- expect(statements.length).toBe(1);
- expect(statements[0]).toStrictEqual({
- type: 'create_reference',
- tableName: 'users',
- data: 'users_table_id_table_id_fk;users;table_id;table;id;no action;no action',
- schema: '',
- columnNotNull: false,
- columnDefault: undefined,
- columnType: 'integer',
- });
-
- expect(sqlStatements.length).toBe(1);
- expect(sqlStatements[0]).toBe(
- `ALTER TABLE \`users\` ALTER COLUMN "table_id" TO "table_id" integer REFERENCES table(id) ON DELETE no action ON UPDATE no action;`,
- );
-});
-
-test('drop foriegn key', async (t) => {
- const schema = {
- table: sqliteTable('table', {
- id: int('id').primaryKey({ autoIncrement: true }),
- name: text('name'),
- }),
- };
-
- const schema1 = {
- users: sqliteTable('users', {
- id: int('id').primaryKey({ autoIncrement: true }),
- tableId: int('table_id').references(() => schema.table.id, {
- onDelete: 'cascade',
- }),
- }),
- };
-
- const schema2 = {
- users: sqliteTable('users', {
- id: int('id').primaryKey({ autoIncrement: true }),
- tableId: int('table_id'),
- }),
- };
-
- const { statements, sqlStatements } = await diffTestSchemasLibSQL(
- schema1,
- schema2,
- [],
- );
-
- expect(statements.length).toBe(1);
- expect(statements[0]).toStrictEqual({
- columns: [
- {
- autoincrement: true,
- generated: undefined,
- name: 'id',
- notNull: true,
- primaryKey: true,
- type: 'integer',
- },
- {
- autoincrement: false,
- generated: undefined,
- name: 'table_id',
- notNull: false,
- primaryKey: false,
- type: 'integer',
- },
- ],
- compositePKs: [],
- referenceData: [],
- tableName: 'users',
- type: 'recreate_table',
- uniqueConstraints: [],
- });
-
- expect(sqlStatements.length).toBe(6);
- expect(sqlStatements[0]).toBe(`PRAGMA foreign_keys=OFF;`);
- expect(sqlStatements[1]).toBe(`CREATE TABLE \`__new_users\` (
-\t\`id\` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
-\t\`table_id\` integer
-);\n`);
- expect(sqlStatements[2]).toBe(
- `INSERT INTO \`__new_users\`("id", "table_id") SELECT "id", "table_id" FROM \`users\`;`,
- );
- expect(sqlStatements[3]).toBe(`DROP TABLE \`users\`;`);
- expect(sqlStatements[4]).toBe(
- `ALTER TABLE \`__new_users\` RENAME TO \`users\`;`,
- );
- expect(sqlStatements[5]).toBe(`PRAGMA foreign_keys=ON;`);
-});
-
-test('alter foriegn key', async (t) => {
- const tableRef = sqliteTable('table', {
- id: int('id').primaryKey({ autoIncrement: true }),
- name: text('name'),
- });
- const tableRef2 = sqliteTable('table2', {
- id: int('id').primaryKey({ autoIncrement: true }),
- name: text('name'),
- });
-
- const schema1 = {
- users: sqliteTable('users', {
- id: int('id').primaryKey({ autoIncrement: true }),
- tableId: int('table_id').references(() => tableRef.id, {
- onDelete: 'cascade',
- }),
- }),
- };
-
- const schema2 = {
- users: sqliteTable('users', {
- id: int('id').primaryKey({ autoIncrement: true }),
- tableId: int('table_id').references(() => tableRef2.id),
- }),
- };
-
- const { statements, sqlStatements } = await diffTestSchemasLibSQL(
- schema1,
- schema2,
- [],
- );
-
- expect(statements.length).toBe(1);
- expect(statements[0]).toStrictEqual({
- columns: [
- {
- autoincrement: true,
- generated: undefined,
- name: 'id',
- notNull: true,
- primaryKey: true,
- type: 'integer',
- },
- {
- autoincrement: false,
- generated: undefined,
- name: 'table_id',
- notNull: false,
- primaryKey: false,
- type: 'integer',
- },
- ],
- compositePKs: [],
- referenceData: [
- {
- columnsFrom: ['table_id'],
- columnsTo: ['id'],
- name: 'users_table_id_table2_id_fk',
- onDelete: 'no action',
- onUpdate: 'no action',
- tableFrom: 'users',
- tableTo: 'table2',
- },
- ],
- tableName: 'users',
- type: 'recreate_table',
- uniqueConstraints: [],
- });
-
- expect(sqlStatements.length).toBe(6);
- expect(sqlStatements[0]).toBe(`PRAGMA foreign_keys=OFF;`);
- expect(sqlStatements[1]).toBe(`CREATE TABLE \`__new_users\` (
-\t\`id\` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
-\t\`table_id\` integer,
-\tFOREIGN KEY (\`table_id\`) REFERENCES \`table2\`(\`id\`) ON UPDATE no action ON DELETE no action
-);\n`);
- expect(sqlStatements[2]).toBe(
- `INSERT INTO \`__new_users\`("id", "table_id") SELECT "id", "table_id" FROM \`users\`;`,
- );
- expect(sqlStatements[3]).toBe(
- 'DROP TABLE `users`;',
- );
- expect(sqlStatements[4]).toBe(
- 'ALTER TABLE `__new_users` RENAME TO `users`;',
- );
- expect(sqlStatements[5]).toBe(`PRAGMA foreign_keys=ON;`);
-});
-
-test('add foriegn key for multiple columns', async (t) => {
- const tableRef = sqliteTable('table', {
- id: int('id').primaryKey({ autoIncrement: true }),
- age: int('age'),
- age1: int('age_1'),
- });
-
- const schema1 = {
- users: sqliteTable('users', {
- id: int('id').primaryKey({ autoIncrement: true }),
- column: int('column'),
- column1: int('column_1'),
- }),
- tableRef,
- };
-
- const schema2 = {
- tableRef,
- users: sqliteTable(
- 'users',
- {
- id: int('id').primaryKey({ autoIncrement: true }),
- column: int('column'),
- column1: int('column_1'),
- },
- (table) => ({
- foreignKey: foreignKey({
- columns: [table.column, table.column1],
- foreignColumns: [tableRef.age, tableRef.age1],
- }),
- }),
- ),
- };
- const { statements, sqlStatements } = await diffTestSchemasLibSQL(
- schema1,
- schema2,
- [],
- );
-
- expect(statements.length).toBe(1);
- expect(statements[0]).toStrictEqual({
- columns: [
- {
- autoincrement: true,
- generated: undefined,
- name: 'id',
- notNull: true,
- primaryKey: true,
- type: 'integer',
- },
- {
- autoincrement: false,
- generated: undefined,
- name: 'column',
- notNull: false,
- primaryKey: false,
- type: 'integer',
- },
- {
- autoincrement: false,
- generated: undefined,
- name: 'column_1',
- notNull: false,
- primaryKey: false,
- type: 'integer',
- },
- ],
- compositePKs: [],
- referenceData: [
- {
- columnsFrom: ['column', 'column_1'],
- columnsTo: ['age', 'age_1'],
- name: 'users_column_column_1_table_age_age_1_fk',
- onDelete: 'no action',
- onUpdate: 'no action',
- tableFrom: 'users',
- tableTo: 'table',
- },
- ],
- tableName: 'users',
- type: 'recreate_table',
- uniqueConstraints: [],
- } as JsonRecreateTableStatement);
-
- expect(sqlStatements.length).toBe(6);
- expect(sqlStatements[0]).toBe(`PRAGMA foreign_keys=OFF;`);
- expect(sqlStatements[1]).toBe(
- `CREATE TABLE \`__new_users\` (
-\t\`id\` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
-\t\`column\` integer,
-\t\`column_1\` integer,
-\tFOREIGN KEY (\`column\`,\`column_1\`) REFERENCES \`table\`(\`age\`,\`age_1\`) ON UPDATE no action ON DELETE no action
-);\n`,
- );
- expect(sqlStatements[2]).toBe(
- `INSERT INTO \`__new_users\`("id", "column", "column_1") SELECT "id", "column", "column_1" FROM \`users\`;`,
- );
- expect(sqlStatements[3]).toBe(`DROP TABLE \`users\`;`);
- expect(sqlStatements[4]).toBe(
- `ALTER TABLE \`__new_users\` RENAME TO \`users\`;`,
- );
- expect(sqlStatements[5]).toBe(`PRAGMA foreign_keys=ON;`);
-});
-
-test('drop foriegn key for multiple columns', async (t) => {
- const tableRef = sqliteTable('table', {
- id: int('id').primaryKey({ autoIncrement: true }),
- age: int('age'),
- age1: int('age_1'),
- });
-
- const schema1 = {
- users: sqliteTable(
- 'users',
- {
- id: int('id').primaryKey({ autoIncrement: true }),
- column: int('column'),
- column1: int('column_1'),
- },
- (table) => ({
- foreignKey: foreignKey({
- columns: [table.column, table.column1],
- foreignColumns: [tableRef.age, tableRef.age1],
- }),
- }),
- ),
- tableRef,
- };
-
- const schema2 = {
- users: sqliteTable('users', {
- id: int('id').primaryKey({ autoIncrement: true }),
- column: int('column'),
- column1: int('column_1'),
- }),
- tableRef,
- };
- const { statements, sqlStatements } = await diffTestSchemasLibSQL(
- schema1,
- schema2,
- [],
- );
-
- expect(statements.length).toBe(1);
- expect(statements[0]).toStrictEqual({
- columns: [
- {
- autoincrement: true,
- generated: undefined,
- name: 'id',
- notNull: true,
- primaryKey: true,
- type: 'integer',
- },
- {
- autoincrement: false,
- generated: undefined,
- name: 'column',
- notNull: false,
- primaryKey: false,
- type: 'integer',
- },
- {
- autoincrement: false,
- generated: undefined,
- name: 'column_1',
- notNull: false,
- primaryKey: false,
- type: 'integer',
- },
- ],
- compositePKs: [],
- referenceData: [],
- tableName: 'users',
- type: 'recreate_table',
- uniqueConstraints: [],
- });
-
- expect(sqlStatements.length).toBe(6);
- expect(sqlStatements[0]).toBe(`PRAGMA foreign_keys=OFF;`);
- expect(sqlStatements[1]).toBe(
- `CREATE TABLE \`__new_users\` (
-\t\`id\` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
-\t\`column\` integer,
-\t\`column_1\` integer
-);\n`,
- );
- expect(sqlStatements[2]).toBe(
- `INSERT INTO \`__new_users\`("id", "column", "column_1") SELECT "id", "column", "column_1" FROM \`users\`;`,
- );
- expect(sqlStatements[3]).toBe(`DROP TABLE \`users\`;`);
- expect(sqlStatements[4]).toBe(
- `ALTER TABLE \`__new_users\` RENAME TO \`users\`;`,
- );
- expect(sqlStatements[5]).toBe(`PRAGMA foreign_keys=ON;`);
-});
-
-test('alter column drop generated', async (t) => {
- const from = {
- users: sqliteTable('table', {
- id: int('id').primaryKey().notNull(),
- name: text('name').generatedAlwaysAs('drizzle is the best').notNull(),
- }),
- };
-
- const to = {
- users: sqliteTable('table', {
- id: int('id').primaryKey().notNull(),
- name: text('name').notNull(),
- }),
- };
-
- const { statements, sqlStatements } = await diffTestSchemasLibSQL(
- from,
- to,
- [],
- );
-
- expect(statements.length).toBe(1);
- expect(statements[0]).toStrictEqual({
- columnAutoIncrement: false,
- columnDefault: undefined,
- columnGenerated: undefined,
- columnName: 'name',
- columnNotNull: true,
- columnOnUpdate: undefined,
- columnPk: false,
- newDataType: 'text',
- schema: '',
- tableName: 'table',
- type: 'alter_table_alter_column_drop_generated',
- });
-
- expect(sqlStatements.length).toBe(2);
- expect(sqlStatements[0]).toBe(`ALTER TABLE \`table\` DROP COLUMN \`name\`;`);
- expect(sqlStatements[1]).toBe(
- `ALTER TABLE \`table\` ADD \`name\` text NOT NULL;`,
- );
-});
-
-test('recreate table with nested references', async (t) => {
- let users = sqliteTable('users', {
- id: int('id').primaryKey({ autoIncrement: true }),
- name: text('name'),
- age: integer('age'),
- });
- let subscriptions = sqliteTable('subscriptions', {
- id: int('id').primaryKey({ autoIncrement: true }),
- userId: integer('user_id').references(() => users.id),
- customerId: text('customer_id'),
- });
- const schema1 = {
- users: users,
- subscriptions: subscriptions,
- subscriptionMetadata: sqliteTable('subscriptions_metadata', {
- id: int('id').primaryKey({ autoIncrement: true }),
- subscriptionId: text('subscription_id').references(
- () => subscriptions.id,
- ),
- }),
- };
-
- users = sqliteTable('users', {
- id: int('id').primaryKey({ autoIncrement: false }),
- name: text('name'),
- age: integer('age'),
- });
- const schema2 = {
- users: users,
- subscriptions: subscriptions,
- subscriptionMetadata: sqliteTable('subscriptions_metadata', {
- id: int('id').primaryKey({ autoIncrement: true }),
- subscriptionId: text('subscription_id').references(
- () => subscriptions.id,
- ),
- }),
- };
-
- const { statements, sqlStatements } = await diffTestSchemasLibSQL(
- schema1,
- schema2,
- [],
- );
-
- expect(statements.length).toBe(1);
- expect(statements[0]).toStrictEqual({
- columns: [
- {
- autoincrement: false,
- generated: undefined,
- name: 'id',
- notNull: true,
- primaryKey: true,
- type: 'integer',
- },
- {
- autoincrement: false,
- generated: undefined,
- name: 'name',
- notNull: false,
- primaryKey: false,
- type: 'text',
- },
- {
- autoincrement: false,
- generated: undefined,
- name: 'age',
- notNull: false,
- primaryKey: false,
- type: 'integer',
- },
- ],
- compositePKs: [],
- referenceData: [],
- tableName: 'users',
- type: 'recreate_table',
- uniqueConstraints: [],
- });
-
- expect(sqlStatements.length).toBe(6);
- expect(sqlStatements[0]).toBe(`PRAGMA foreign_keys=OFF;`);
- expect(sqlStatements[1]).toBe(`CREATE TABLE \`__new_users\` (
-\t\`id\` integer PRIMARY KEY NOT NULL,
-\t\`name\` text,
-\t\`age\` integer
-);\n`);
- expect(sqlStatements[2]).toBe(
- `INSERT INTO \`__new_users\`("id", "name", "age") SELECT "id", "name", "age" FROM \`users\`;`,
- );
- expect(sqlStatements[3]).toBe(`DROP TABLE \`users\`;`);
- expect(sqlStatements[4]).toBe(
- `ALTER TABLE \`__new_users\` RENAME TO \`users\`;`,
- );
- expect(sqlStatements[5]).toBe(`PRAGMA foreign_keys=ON;`);
-});
-
-test('set not null with index', async (t) => {
- const schema1 = {
- users: sqliteTable('users', {
- id: int('id').primaryKey({ autoIncrement: true }),
- name: text('name'),
- }, (table) => ({
- someIndex: index('users_name_index').on(table.name),
- })),
- };
-
- const schema2 = {
- users: sqliteTable('users', {
- id: int('id').primaryKey({ autoIncrement: true }),
- name: text('name').notNull(),
- }, (table) => ({
- someIndex: index('users_name_index').on(table.name),
- })),
- };
-
- const { statements, sqlStatements } = await diffTestSchemasLibSQL(
- schema1,
- schema2,
- [],
- );
-
- expect(statements.length).toBe(1);
- expect(statements[0]).toStrictEqual({
- type: 'alter_table_alter_column_set_notnull',
- tableName: 'users',
- columnName: 'name',
- schema: '',
- newDataType: 'text',
- columnDefault: undefined,
- columnOnUpdate: undefined,
- columnNotNull: true,
- columnAutoIncrement: false,
- columnPk: false,
- });
-
- expect(sqlStatements.length).toBe(3);
- expect(sqlStatements[0]).toBe(
- `DROP INDEX IF EXISTS "users_name_index";`,
- );
- expect(sqlStatements[1]).toBe(
- `ALTER TABLE \`users\` ALTER COLUMN "name" TO "name" text NOT NULL;`,
- );
- expect(sqlStatements[2]).toBe(
- `CREATE INDEX \`users_name_index\` ON \`users\` (\`name\`);`,
- );
-});
-
-test('drop not null with two indexes', async (t) => {
- const schema1 = {
- users: sqliteTable('users', {
- id: int('id').primaryKey({ autoIncrement: true }),
- name: text('name').notNull(),
- age: int('age').notNull(),
- }, (table) => ({
- someUniqeIndex: uniqueIndex('users_name_unique').on(table.name),
- someIndex: index('users_age_index').on(table.age),
- })),
- };
-
- const schema2 = {
- users: sqliteTable('users', {
- id: int('id').primaryKey({ autoIncrement: true }),
- name: text('name'),
- age: int('age').notNull(),
- }, (table) => ({
- someUniqeIndex: uniqueIndex('users_name_unique').on(table.name),
- someIndex: index('users_age_index').on(table.age),
- })),
- };
-
- const { statements, sqlStatements } = await diffTestSchemasLibSQL(
- schema1,
- schema2,
- [],
- );
-
- expect(statements.length).toBe(1);
- expect(statements[0]).toStrictEqual({
- type: 'alter_table_alter_column_drop_notnull',
- tableName: 'users',
- columnName: 'name',
- schema: '',
- newDataType: 'text',
- columnDefault: undefined,
- columnOnUpdate: undefined,
- columnNotNull: false,
- columnAutoIncrement: false,
- columnPk: false,
- });
-
- expect(sqlStatements.length).toBe(5);
- expect(sqlStatements[0]).toBe(
- `DROP INDEX IF EXISTS "users_name_unique";`,
- );
- expect(sqlStatements[1]).toBe(
- `DROP INDEX IF EXISTS "users_age_index";`,
- );
- expect(sqlStatements[2]).toBe(
- `ALTER TABLE \`users\` ALTER COLUMN "name" TO "name" text;`,
- );
- expect(sqlStatements[3]).toBe(
- `CREATE UNIQUE INDEX \`users_name_unique\` ON \`users\` (\`name\`);`,
- );
- expect(sqlStatements[4]).toBe(
- `CREATE INDEX \`users_age_index\` ON \`users\` (\`age\`);`,
- );
-});
diff --git a/drizzle-kit/tests/migrate/libsq-schema.ts b/drizzle-kit/tests/migrate/libsq-schema.ts
deleted file mode 100644
index 5cb344d51..000000000
--- a/drizzle-kit/tests/migrate/libsq-schema.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-import { integer, sqliteTable, text } from 'drizzle-orm/sqlite-core';
-
-export const users = sqliteTable('users', {
- id: integer('id').primaryKey().notNull(),
- name: text('name').notNull(),
-});
diff --git a/drizzle-kit/tests/migrate/libsql-migrate.test.ts b/drizzle-kit/tests/migrate/libsql-migrate.test.ts
deleted file mode 100644
index b937b644f..000000000
--- a/drizzle-kit/tests/migrate/libsql-migrate.test.ts
+++ /dev/null
@@ -1,58 +0,0 @@
-import { createClient } from '@libsql/client';
-import { connectToLibSQL } from 'src/cli/connections';
-import { expect, test } from 'vitest';
-
-test('validate migrate function', async () => {
- const credentials = {
- url: ':memory:',
- };
- const { migrate, query } = await connectToLibSQL(credentials);
-
- await migrate({ migrationsFolder: 'tests/migrate/migrations' });
-
- const res = await query(`PRAGMA table_info("users");`);
-
- expect(res).toStrictEqual([{
- cid: 0,
- name: 'id',
- type: 'INTEGER',
- notnull: 0,
- dflt_value: null,
- pk: 0,
- }, {
- cid: 1,
- name: 'name',
- type: 'INTEGER',
- notnull: 1,
- dflt_value: null,
- pk: 0,
- }]);
-});
-
-// test('validate migrate function', async () => {
-// const credentials = {
-// url: '',
-// authToken: '',
-// };
-// const { migrate, query } = await connectToLibSQL(credentials);
-
-// await migrate({ migrationsFolder: 'tests/migrate/migrations' });
-
-// const res = await query(`PRAGMA table_info("users");`);
-
-// expect(res).toStrictEqual([{
-// cid: 0,
-// name: 'id',
-// type: 'INTEGER',
-// notnull: 0,
-// dflt_value: null,
-// pk: 0,
-// }, {
-// cid: 1,
-// name: 'name',
-// type: 'INTEGER',
-// notnull: 1,
-// dflt_value: null,
-// pk: 0,
-// }]);
-// });
diff --git a/drizzle-kit/tests/migrate/migrations/0000_little_blizzard.sql b/drizzle-kit/tests/migrate/migrations/0000_little_blizzard.sql
deleted file mode 100644
index 9de0a139d..000000000
--- a/drizzle-kit/tests/migrate/migrations/0000_little_blizzard.sql
+++ /dev/null
@@ -1,4 +0,0 @@
-CREATE TABLE `users` (
- `id` integer PRIMARY KEY NOT NULL,
- `name` text NOT NULL
-);
diff --git a/drizzle-kit/tests/migrate/migrations/0001_nebulous_storm.sql b/drizzle-kit/tests/migrate/migrations/0001_nebulous_storm.sql
deleted file mode 100644
index 4309a05c2..000000000
--- a/drizzle-kit/tests/migrate/migrations/0001_nebulous_storm.sql
+++ /dev/null
@@ -1,10 +0,0 @@
-PRAGMA foreign_keys=OFF;--> statement-breakpoint
-CREATE TABLE `__new_users` (
- `id` integer,
- `name` integer NOT NULL
-);
---> statement-breakpoint
-INSERT INTO `__new_users`("id", "name") SELECT "id", "name" FROM `users`;--> statement-breakpoint
-DROP TABLE `users`;--> statement-breakpoint
-ALTER TABLE `__new_users` RENAME TO `users`;--> statement-breakpoint
-PRAGMA foreign_keys=ON;
\ No newline at end of file
diff --git a/drizzle-kit/tests/migrate/migrations/meta/0000_snapshot.json b/drizzle-kit/tests/migrate/migrations/meta/0000_snapshot.json
deleted file mode 100644
index 599d02b91..000000000
--- a/drizzle-kit/tests/migrate/migrations/meta/0000_snapshot.json
+++ /dev/null
@@ -1,40 +0,0 @@
-{
- "version": "6",
- "dialect": "sqlite",
- "id": "2bd46776-9e41-4a6c-b617-5c600bb176f2",
- "prevId": "00000000-0000-0000-0000-000000000000",
- "tables": {
- "users": {
- "name": "users",
- "columns": {
- "id": {
- "name": "id",
- "type": "integer",
- "primaryKey": true,
- "notNull": true,
- "autoincrement": false
- },
- "name": {
- "name": "name",
- "type": "text",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- }
- },
- "indexes": {},
- "foreignKeys": {},
- "compositePrimaryKeys": {},
- "uniqueConstraints": {}
- }
- },
- "enums": {},
- "_meta": {
- "schemas": {},
- "tables": {},
- "columns": {}
- },
- "internal": {
- "indexes": {}
- }
-}
\ No newline at end of file
diff --git a/drizzle-kit/tests/migrate/migrations/meta/0001_snapshot.json b/drizzle-kit/tests/migrate/migrations/meta/0001_snapshot.json
deleted file mode 100644
index e3b26ba14..000000000
--- a/drizzle-kit/tests/migrate/migrations/meta/0001_snapshot.json
+++ /dev/null
@@ -1,40 +0,0 @@
-{
- "version": "6",
- "dialect": "sqlite",
- "id": "6c0ec455-42fd-47fd-a22c-4bb4551e1358",
- "prevId": "2bd46776-9e41-4a6c-b617-5c600bb176f2",
- "tables": {
- "users": {
- "name": "users",
- "columns": {
- "id": {
- "name": "id",
- "type": "integer",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "name": {
- "name": "name",
- "type": "integer",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- }
- },
- "indexes": {},
- "foreignKeys": {},
- "compositePrimaryKeys": {},
- "uniqueConstraints": {}
- }
- },
- "enums": {},
- "_meta": {
- "schemas": {},
- "tables": {},
- "columns": {}
- },
- "internal": {
- "indexes": {}
- }
-}
\ No newline at end of file
diff --git a/drizzle-kit/tests/migrate/migrations/meta/_journal.json b/drizzle-kit/tests/migrate/migrations/meta/_journal.json
deleted file mode 100644
index c836eb194..000000000
--- a/drizzle-kit/tests/migrate/migrations/meta/_journal.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "version": "7",
- "dialect": "sqlite",
- "entries": [
- {
- "idx": 0,
- "version": "6",
- "when": 1725358702427,
- "tag": "0000_little_blizzard",
- "breakpoints": true
- },
- {
- "idx": 1,
- "version": "6",
- "when": 1725358713033,
- "tag": "0001_nebulous_storm",
- "breakpoints": true
- }
- ]
-}
\ No newline at end of file
diff --git a/drizzle-kit/tests/push/libsql.test.ts b/drizzle-kit/tests/push/libsql.test.ts
deleted file mode 100644
index 89ec008ca..000000000
--- a/drizzle-kit/tests/push/libsql.test.ts
+++ /dev/null
@@ -1,1049 +0,0 @@
-import { createClient } from '@libsql/client';
-import chalk from 'chalk';
-import { sql } from 'drizzle-orm';
-import {
- blob,
- foreignKey,
- getTableConfig,
- index,
- int,
- integer,
- numeric,
- real,
- sqliteTable,
- text,
- uniqueIndex,
-} from 'drizzle-orm/sqlite-core';
-import { diffTestSchemasPushLibSQL } from 'tests/schemaDiffer';
-import { expect, test } from 'vitest';
-
-test('nothing changed in schema', async (t) => {
- const turso = createClient({
- url: ':memory:',
- });
-
- const users = sqliteTable('users', {
- id: integer('id').primaryKey().notNull(),
- name: text('name').notNull(),
- email: text('email'),
- textJson: text('text_json', { mode: 'json' }),
- blobJon: blob('blob_json', { mode: 'json' }),
- blobBigInt: blob('blob_bigint', { mode: 'bigint' }),
- numeric: numeric('numeric'),
- createdAt: integer('created_at', { mode: 'timestamp' }),
- createdAtMs: integer('created_at_ms', { mode: 'timestamp_ms' }),
- real: real('real'),
- text: text('text', { length: 255 }),
- role: text('role', { enum: ['admin', 'user'] }).default('user'),
- isConfirmed: integer('is_confirmed', {
- mode: 'boolean',
- }),
- });
-
- const schema1 = {
- users,
-
- customers: sqliteTable('customers', {
- id: integer('id').primaryKey(),
- address: text('address').notNull(),
- isConfirmed: integer('is_confirmed', { mode: 'boolean' }),
- registrationDate: integer('registration_date', { mode: 'timestamp_ms' })
- .notNull()
- .$defaultFn(() => new Date()),
- userId: integer('user_id')
- .references(() => users.id)
- .notNull(),
- }),
-
- posts: sqliteTable('posts', {
- id: integer('id').primaryKey(),
- content: text('content'),
- authorId: integer('author_id'),
- }),
- };
-
- const {
- sqlStatements,
- statements,
- columnsToRemove,
- infoToPrint,
- shouldAskForApprove,
- tablesToRemove,
- tablesToTruncate,
- } = await diffTestSchemasPushLibSQL(turso, schema1, schema1, [], false);
- expect(sqlStatements.length).toBe(0);
- expect(statements.length).toBe(0);
- expect(columnsToRemove!.length).toBe(0);
- expect(infoToPrint!.length).toBe(0);
- expect(shouldAskForApprove).toBe(false);
- expect(tablesToRemove!.length).toBe(0);
- expect(tablesToTruncate!.length).toBe(0);
- expect(shouldAskForApprove).toBe(false);
-});
-
-test('added, dropped index', async (t) => {
- const turso = createClient({
- url: ':memory:',
- });
-
- const users = sqliteTable('users', {
- id: integer('id').primaryKey().notNull(),
- name: text('name').notNull(),
- email: text('email'),
- textJson: text('text_json', { mode: 'json' }),
- blobJon: blob('blob_json', { mode: 'json' }),
- blobBigInt: blob('blob_bigint', { mode: 'bigint' }),
- numeric: numeric('numeric'),
- createdAt: integer('created_at', { mode: 'timestamp' }),
- createdAtMs: integer('created_at_ms', { mode: 'timestamp_ms' }),
- real: real('real'),
- text: text('text', { length: 255 }),
- role: text('role', { enum: ['admin', 'user'] }).default('user'),
- isConfirmed: integer('is_confirmed', {
- mode: 'boolean',
- }),
- });
-
- const schema1 = {
- users,
- customers: sqliteTable(
- 'customers',
- {
- id: integer('id').primaryKey(),
- address: text('address').notNull(),
- isConfirmed: integer('is_confirmed', { mode: 'boolean' }),
- registrationDate: integer('registration_date', { mode: 'timestamp_ms' })
- .notNull()
- .$defaultFn(() => new Date()),
- userId: integer('user_id').notNull(),
- },
- (table) => ({
- uniqueIndex: uniqueIndex('customers_address_unique').on(table.address),
- }),
- ),
-
- posts: sqliteTable('posts', {
- id: integer('id').primaryKey(),
- content: text('content'),
- authorId: integer('author_id'),
- }),
- };
-
- const schema2 = {
- users,
- customers: sqliteTable(
- 'customers',
- {
- id: integer('id').primaryKey(),
- address: text('address').notNull(),
- isConfirmed: integer('is_confirmed', { mode: 'boolean' }),
- registrationDate: integer('registration_date', { mode: 'timestamp_ms' })
- .notNull()
- .$defaultFn(() => new Date()),
- userId: integer('user_id').notNull(),
- },
- (table) => ({
- uniqueIndex: uniqueIndex('customers_is_confirmed_unique').on(
- table.isConfirmed,
- ),
- }),
- ),
-
- posts: sqliteTable('posts', {
- id: integer('id').primaryKey(),
- content: text('content'),
- authorId: integer('author_id'),
- }),
- };
-
- const {
- sqlStatements,
- statements,
- columnsToRemove,
- infoToPrint,
- shouldAskForApprove,
- tablesToRemove,
- tablesToTruncate,
- } = await diffTestSchemasPushLibSQL(turso, schema1, schema2, [], false);
-
- expect(statements.length).toBe(2);
- expect(statements[0]).toStrictEqual({
- type: 'drop_index',
- tableName: 'customers',
- data: 'customers_address_unique;address;true;',
- schema: '',
- });
- expect(statements[1]).toStrictEqual({
- type: 'create_index',
- tableName: 'customers',
- data: 'customers_is_confirmed_unique;is_confirmed;true;',
- schema: '',
- internal: { indexes: {} },
- });
-
- expect(sqlStatements.length).toBe(2);
- expect(sqlStatements[0]).toBe(
- `DROP INDEX IF EXISTS \`customers_address_unique\`;`,
- );
- expect(sqlStatements[1]).toBe(
- `CREATE UNIQUE INDEX \`customers_is_confirmed_unique\` ON \`customers\` (\`is_confirmed\`);`,
- );
-
- expect(columnsToRemove!.length).toBe(0);
- expect(infoToPrint!.length).toBe(0);
- expect(shouldAskForApprove).toBe(false);
- expect(tablesToRemove!.length).toBe(0);
- expect(tablesToTruncate!.length).toBe(0);
-});
-
-test('added column not null and without default to table with data', async (t) => {
- const turso = createClient({
- url: ':memory:',
- });
-
- const schema1 = {
- companies: sqliteTable('companies', {
- id: integer('id').primaryKey(),
- name: text('name').notNull(),
- }),
- };
-
- const schema2 = {
- companies: sqliteTable('companies', {
- id: integer('id').primaryKey(),
- name: text('name').notNull(),
- age: integer('age').notNull(),
- }),
- };
-
- const table = getTableConfig(schema1.companies);
-
- const seedStatements = [
- `INSERT INTO \`${table.name}\` ("${schema1.companies.name.name}") VALUES ('drizzle');`,
- `INSERT INTO \`${table.name}\` ("${schema1.companies.name.name}") VALUES ('turso');`,
- ];
-
- const {
- statements,
- sqlStatements,
- columnsToRemove,
- infoToPrint,
- shouldAskForApprove,
- tablesToRemove,
- tablesToTruncate,
- } = await diffTestSchemasPushLibSQL(
- turso,
- schema1,
- schema2,
- [],
- false,
- seedStatements,
- );
-
- expect(statements.length).toBe(1);
- expect(statements[0]).toStrictEqual({
- type: 'sqlite_alter_table_add_column',
- tableName: 'companies',
- column: {
- name: 'age',
- type: 'integer',
- primaryKey: false,
- notNull: true,
- autoincrement: false,
- },
- referenceData: undefined,
- });
-
- expect(sqlStatements.length).toBe(2);
- expect(sqlStatements[0]).toBe(`delete from companies;`);
- expect(sqlStatements[1]).toBe(
- `ALTER TABLE \`companies\` ADD \`age\` integer NOT NULL;`,
- );
-
- expect(columnsToRemove!.length).toBe(0);
- expect(infoToPrint!.length).toBe(1);
- expect(infoToPrint![0]).toBe(
- `· You're about to add not-null ${
- chalk.underline(
- 'age',
- )
- } column without default value, which contains 2 items`,
- );
- expect(shouldAskForApprove).toBe(true);
- expect(tablesToRemove!.length).toBe(0);
- expect(tablesToTruncate!.length).toBe(1);
- expect(tablesToTruncate![0]).toBe('companies');
-});
-
-test('added column not null and without default to table without data', async (t) => {
- const turso = createClient({
- url: ':memory:',
- });
-
- const schema1 = {
- companies: sqliteTable('companies', {
- id: integer('id').primaryKey(),
- name: text('name').notNull(),
- }),
- };
-
- const schema2 = {
- companies: sqliteTable('companies', {
- id: integer('id').primaryKey(),
- name: text('name').notNull(),
- age: integer('age').notNull(),
- }),
- };
-
- const {
- sqlStatements,
- statements,
- columnsToRemove,
- infoToPrint,
- shouldAskForApprove,
- tablesToRemove,
- tablesToTruncate,
- } = await diffTestSchemasPushLibSQL(turso, schema1, schema2, [], false);
-
- expect(statements.length).toBe(1);
- expect(statements[0]).toStrictEqual({
- type: 'sqlite_alter_table_add_column',
- tableName: 'companies',
- column: {
- name: 'age',
- type: 'integer',
- primaryKey: false,
- notNull: true,
- autoincrement: false,
- },
- referenceData: undefined,
- });
-
- expect(sqlStatements.length).toBe(1);
- expect(sqlStatements[0]).toBe(
- `ALTER TABLE \`companies\` ADD \`age\` integer NOT NULL;`,
- );
-
- expect(infoToPrint!.length).toBe(0);
- expect(columnsToRemove!.length).toBe(0);
- expect(shouldAskForApprove).toBe(false);
- expect(tablesToRemove!.length).toBe(0);
- expect(tablesToTruncate!.length).toBe(0);
-});
-
-test('drop autoincrement. drop column with data', async (t) => {
- const turso = createClient({
- url: ':memory:',
- });
-
- const schema1 = {
- companies: sqliteTable('companies', {
- id: integer('id').primaryKey({ autoIncrement: true }),
- name: text('name'),
- }),
- };
-
- const schema2 = {
- companies: sqliteTable('companies', {
- id: integer('id').primaryKey({ autoIncrement: false }),
- }),
- };
-
- const table = getTableConfig(schema1.companies);
- const seedStatements = [
- `INSERT INTO \`${table.name}\` ("${schema1.companies.id.name}", "${schema1.companies.name.name}") VALUES (1, 'drizzle');`,
- `INSERT INTO \`${table.name}\` ("${schema1.companies.id.name}", "${schema1.companies.name.name}") VALUES (2, 'turso');`,
- ];
-
- const {
- sqlStatements,
- statements,
- columnsToRemove,
- infoToPrint,
- shouldAskForApprove,
- tablesToRemove,
- tablesToTruncate,
- } = await diffTestSchemasPushLibSQL(
- turso,
- schema1,
- schema2,
- [],
- false,
- seedStatements,
- );
-
- expect(statements.length).toBe(1);
- expect(statements[0]).toStrictEqual({
- type: 'recreate_table',
- tableName: 'companies',
- columns: [
- {
- name: 'id',
- type: 'integer',
- autoincrement: false,
- notNull: true,
- primaryKey: true,
- generated: undefined,
- },
- ],
- compositePKs: [],
- referenceData: [],
- uniqueConstraints: [],
- });
-
- expect(sqlStatements.length).toBe(4);
- expect(sqlStatements[0]).toBe(
- `CREATE TABLE \`__new_companies\` (
-\t\`id\` integer PRIMARY KEY NOT NULL
-);\n`,
- );
- expect(sqlStatements[1]).toBe(`INSERT INTO \`__new_companies\`("id") SELECT "id" FROM \`companies\`;`);
- expect(sqlStatements[2]).toBe(`DROP TABLE \`companies\`;`);
- expect(sqlStatements[3]).toBe(
- `ALTER TABLE \`__new_companies\` RENAME TO \`companies\`;`,
- );
-
- expect(columnsToRemove!.length).toBe(1);
- expect(infoToPrint!.length).toBe(1);
- expect(infoToPrint![0]).toBe(
- `· You're about to delete ${
- chalk.underline(
- 'name',
- )
- } column in companies table with 2 items`,
- );
- expect(shouldAskForApprove).toBe(true);
- expect(tablesToRemove!.length).toBe(0);
- expect(tablesToTruncate!.length).toBe(0);
-});
-
-test('change autoincrement. table is part of foreign key', async (t) => {
- const turso = createClient({
- url: ':memory:',
- });
-
- const companies1 = sqliteTable('companies', {
- id: integer('id').primaryKey({ autoIncrement: true }),
- });
- const users1 = sqliteTable('users', {
- id: integer('id').primaryKey({ autoIncrement: true }),
- name: text('name').unique(),
- companyId: integer('company_id').references(() => companies1.id),
- });
- const schema1 = {
- companies: companies1,
- users: users1,
- };
-
- const companies2 = sqliteTable('companies', {
- id: integer('id').primaryKey({ autoIncrement: false }),
- });
- const users2 = sqliteTable('users', {
- id: integer('id').primaryKey({ autoIncrement: true }),
- name: text('name').unique(),
- companyId: integer('company_id').references(() => companies2.id),
- });
- const schema2 = {
- companies: companies2,
- users: users2,
- };
-
- const { name: usersTableName } = getTableConfig(users1);
- const { name: companiesTableName } = getTableConfig(companies1);
- const seedStatements = [
- `INSERT INTO \`${usersTableName}\` ("${schema1.users.name.name}") VALUES ('drizzle');`,
- `INSERT INTO \`${usersTableName}\` ("${schema1.users.name.name}") VALUES ('turso');`,
- `INSERT INTO \`${companiesTableName}\` ("${schema1.companies.id.name}") VALUES (1);`,
- `INSERT INTO \`${companiesTableName}\` ("${schema1.companies.id.name}") VALUES (2);`,
- ];
-
- const {
- statements,
- sqlStatements,
- columnsToRemove,
- infoToPrint,
- shouldAskForApprove,
- tablesToRemove,
- tablesToTruncate,
- } = await diffTestSchemasPushLibSQL(
- turso,
- schema1,
- schema2,
- [],
- false,
- seedStatements,
- );
-
- expect(statements.length).toBe(1);
- expect(statements[0]).toStrictEqual({
- type: 'recreate_table',
- tableName: 'companies',
- columns: [
- {
- name: 'id',
- type: 'integer',
- autoincrement: false,
- notNull: true,
- primaryKey: true,
- generated: undefined,
- },
- ],
- compositePKs: [],
- referenceData: [],
- uniqueConstraints: [],
- });
-
- expect(sqlStatements.length).toBe(4);
- expect(sqlStatements[0]).toBe(
- `CREATE TABLE \`__new_companies\` (
-\t\`id\` integer PRIMARY KEY NOT NULL
-);\n`,
- );
- expect(sqlStatements[1]).toBe(
- `INSERT INTO \`__new_companies\`("id") SELECT "id" FROM \`companies\`;`,
- );
- expect(sqlStatements[2]).toBe(`DROP TABLE \`companies\`;`);
- expect(sqlStatements[3]).toBe(
- `ALTER TABLE \`__new_companies\` RENAME TO \`companies\`;`,
- );
-
- expect(columnsToRemove!.length).toBe(0);
- expect(infoToPrint!.length).toBe(0);
- expect(shouldAskForApprove).toBe(false);
- expect(tablesToRemove!.length).toBe(0);
- expect(tablesToTruncate!.length).toBe(0);
-});
-
-test('drop not null, add not null', async (t) => {
- const turso = createClient({
- url: ':memory:',
- });
-
- const schema1 = {
- users: sqliteTable('users', {
- id: int('id').primaryKey({ autoIncrement: true }),
- name: text('name').notNull(),
- }),
- posts: sqliteTable(
- 'posts',
- {
- id: int('id').primaryKey({ autoIncrement: true }),
- name: text('name'),
- userId: int('user_id'),
- },
- ),
- };
-
- const schema2 = {
- users: sqliteTable('users', {
- id: int('id').primaryKey({ autoIncrement: true }),
- name: text('name'),
- }),
- posts: sqliteTable(
- 'posts',
- {
- id: int('id').primaryKey({ autoIncrement: true }),
- name: text('name').notNull(),
- userId: int('user_id'),
- },
- ),
- };
- const {
- statements,
- sqlStatements,
- columnsToRemove,
- infoToPrint,
- shouldAskForApprove,
- tablesToRemove,
- tablesToTruncate,
- } = await diffTestSchemasPushLibSQL(
- turso,
- schema1,
- schema2,
- [],
- );
-
- expect(statements!.length).toBe(2);
- expect(statements![0]).toStrictEqual({
- columnAutoIncrement: false,
- columnDefault: undefined,
- columnName: 'name',
- columnNotNull: false,
- columnOnUpdate: undefined,
- columnPk: false,
- newDataType: 'text',
- schema: '',
- tableName: 'users',
- type: 'alter_table_alter_column_drop_notnull',
- });
- expect(statements![1]).toStrictEqual({
- columnAutoIncrement: false,
- columnDefault: undefined,
- columnName: 'name',
- columnNotNull: true,
- columnOnUpdate: undefined,
- columnPk: false,
- newDataType: 'text',
- schema: '',
- tableName: 'posts',
- type: 'alter_table_alter_column_set_notnull',
- });
- expect(sqlStatements!.length).toBe(2);
- expect(sqlStatements![0]).toBe(`ALTER TABLE \`users\` ALTER COLUMN "name" TO "name" text;`);
- expect(sqlStatements![1]).toBe(`ALTER TABLE \`posts\` ALTER COLUMN "name" TO "name" text NOT NULL;`);
- expect(columnsToRemove!.length).toBe(0);
- expect(infoToPrint!.length).toBe(0);
- expect(shouldAskForApprove).toBe(false);
- expect(tablesToRemove!.length).toBe(0);
- expect(tablesToTruncate!.length).toBe(0);
-});
-
-test('drop table with data', async (t) => {
- const turso = createClient({
- url: ':memory:',
- });
-
- const schema1 = {
- users: sqliteTable('users', {
- id: int('id').primaryKey({ autoIncrement: true }),
- name: text('name').notNull(),
- }),
- posts: sqliteTable(
- 'posts',
- {
- id: int('id').primaryKey({ autoIncrement: true }),
- name: text('name'),
- userId: int('user_id'),
- },
- ),
- };
-
- const schema2 = {
- posts: sqliteTable(
- 'posts',
- {
- id: int('id').primaryKey({ autoIncrement: true }),
- name: text('name'),
- userId: int('user_id'),
- },
- ),
- };
-
- const seedStatements = [
- `INSERT INTO \`users\` ("name") VALUES ('drizzle')`,
- ];
- const {
- statements,
- sqlStatements,
- columnsToRemove,
- infoToPrint,
- shouldAskForApprove,
- tablesToRemove,
- tablesToTruncate,
- } = await diffTestSchemasPushLibSQL(
- turso,
- schema1,
- schema2,
- [],
- false,
- seedStatements,
- );
-
- expect(statements!.length).toBe(1);
- expect(statements![0]).toStrictEqual({
- schema: undefined,
- tableName: 'users',
- type: 'drop_table',
- });
-
- expect(sqlStatements!.length).toBe(1);
- expect(sqlStatements![0]).toBe(`DROP TABLE \`users\`;`);
- expect(columnsToRemove!.length).toBe(0);
- expect(infoToPrint!.length).toBe(1);
- expect(infoToPrint![0]).toBe(`· You're about to delete ${chalk.underline('users')} table with 1 items`);
- expect(shouldAskForApprove).toBe(true);
- expect(tablesToRemove!.length).toBe(1);
- expect(tablesToRemove![0]).toBe('users');
- expect(tablesToTruncate!.length).toBe(0);
-});
-
-test('recreate table with nested references', async (t) => {
- const turso = createClient({
- url: ':memory:',
- });
-
- let users = sqliteTable('users', {
- id: int('id').primaryKey({ autoIncrement: true }),
- name: text('name'),
- age: integer('age'),
- });
- let subscriptions = sqliteTable('subscriptions', {
- id: int('id').primaryKey({ autoIncrement: true }),
- userId: integer('user_id').references(() => users.id),
- customerId: text('customer_id'),
- });
- const schema1 = {
- users: users,
- subscriptions: subscriptions,
- subscriptionMetadata: sqliteTable('subscriptions_metadata', {
- id: int('id').primaryKey({ autoIncrement: true }),
- subscriptionId: text('subscription_id').references(
- () => subscriptions.id,
- ),
- }),
- };
-
- users = sqliteTable('users', {
- id: int('id').primaryKey({ autoIncrement: false }),
- name: text('name'),
- age: integer('age'),
- });
- const schema2 = {
- users: users,
- subscriptions: subscriptions,
- subscriptionMetadata: sqliteTable('subscriptions_metadata', {
- id: int('id').primaryKey({ autoIncrement: true }),
- subscriptionId: text('subscription_id').references(
- () => subscriptions.id,
- ),
- }),
- };
-
- const {
- statements,
- sqlStatements,
- columnsToRemove,
- infoToPrint,
- shouldAskForApprove,
- tablesToRemove,
- tablesToTruncate,
- } = await diffTestSchemasPushLibSQL(turso, schema1, schema2, []);
-
- expect(statements!.length).toBe(1);
- expect(statements![0]).toStrictEqual({
- columns: [
- {
- autoincrement: false,
- name: 'id',
- notNull: true,
- generated: undefined,
- primaryKey: true,
- type: 'integer',
- },
- {
- autoincrement: false,
- name: 'name',
- notNull: false,
- generated: undefined,
- primaryKey: false,
- type: 'text',
- },
- {
- autoincrement: false,
- name: 'age',
- notNull: false,
- generated: undefined,
- primaryKey: false,
- type: 'integer',
- },
- ],
- compositePKs: [],
- referenceData: [],
- tableName: 'users',
- type: 'recreate_table',
- uniqueConstraints: [],
- });
-
- expect(sqlStatements!.length).toBe(4);
- expect(sqlStatements![0]).toBe(`CREATE TABLE \`__new_users\` (
-\t\`id\` integer PRIMARY KEY NOT NULL,
-\t\`name\` text,
-\t\`age\` integer
-);\n`);
- expect(sqlStatements![1]).toBe(
- `INSERT INTO \`__new_users\`("id", "name", "age") SELECT "id", "name", "age" FROM \`users\`;`,
- );
- expect(sqlStatements![2]).toBe(`DROP TABLE \`users\`;`);
- expect(sqlStatements![3]).toBe(
- `ALTER TABLE \`__new_users\` RENAME TO \`users\`;`,
- );
-
- expect(columnsToRemove!.length).toBe(0);
- expect(infoToPrint!.length).toBe(0);
- expect(shouldAskForApprove).toBe(false);
- expect(tablesToRemove!.length).toBe(0);
- expect(tablesToTruncate!.length).toBe(0);
-});
-
-test('recreate table with added column not null and without default', async (t) => {
- const turso = createClient({
- url: ':memory:',
- });
-
- const schema1 = {
- users: sqliteTable('users', {
- id: int('id').primaryKey({ autoIncrement: true }),
- name: text('name'),
- age: integer('age'),
- }),
- };
-
- const schema2 = {
- users: sqliteTable('users', {
- id: int('id').primaryKey({ autoIncrement: false }),
- name: text('name'),
- age: integer('age'),
- newColumn: text('new_column').notNull(),
- }),
- };
-
- const seedStatements = [
- `INSERT INTO \`users\` ("name", "age") VALUES ('drizzle', 12)`,
- `INSERT INTO \`users\` ("name", "age") VALUES ('turso', 12)`,
- ];
-
- const {
- statements,
- sqlStatements,
- columnsToRemove,
- infoToPrint,
- shouldAskForApprove,
- tablesToRemove,
- tablesToTruncate,
- } = await diffTestSchemasPushLibSQL(
- turso,
- schema1,
- schema2,
- [],
- false,
- seedStatements,
- );
-
- expect(statements!.length).toBe(1);
- expect(statements![0]).toStrictEqual({
- columns: [
- {
- autoincrement: false,
- name: 'id',
- notNull: true,
- generated: undefined,
- primaryKey: true,
- type: 'integer',
- },
- {
- autoincrement: false,
- name: 'name',
- notNull: false,
- generated: undefined,
- primaryKey: false,
- type: 'text',
- },
- {
- autoincrement: false,
- name: 'age',
- notNull: false,
- generated: undefined,
- primaryKey: false,
- type: 'integer',
- },
- {
- autoincrement: false,
- name: 'new_column',
- notNull: true,
- generated: undefined,
- primaryKey: false,
- type: 'text',
- },
- ],
- compositePKs: [],
- referenceData: [],
- tableName: 'users',
- type: 'recreate_table',
- uniqueConstraints: [],
- });
-
- expect(sqlStatements!.length).toBe(4);
- expect(sqlStatements[0]).toBe('DELETE FROM \`users\`;');
- expect(sqlStatements![1]).toBe(`CREATE TABLE \`__new_users\` (
-\t\`id\` integer PRIMARY KEY NOT NULL,
-\t\`name\` text,
-\t\`age\` integer,
-\t\`new_column\` text NOT NULL
-);\n`);
- expect(sqlStatements![2]).toBe(`DROP TABLE \`users\`;`);
- expect(sqlStatements![3]).toBe(
- `ALTER TABLE \`__new_users\` RENAME TO \`users\`;`,
- );
-
- expect(columnsToRemove!.length).toBe(0);
- expect(infoToPrint!.length).toBe(1);
- expect(infoToPrint![0]).toBe(
- `· You're about to add not-null ${
- chalk.underline('new_column')
- } column without default value to table, which contains 2 items`,
- );
- expect(shouldAskForApprove).toBe(true);
- expect(tablesToRemove!.length).toBe(0);
- expect(tablesToTruncate!.length).toBe(1);
- expect(tablesToTruncate![0]).toBe('users');
-});
-
-test('set not null with index', async (t) => {
- const turso = createClient({
- url: ':memory:',
- });
-
- const schema1 = {
- users: sqliteTable('users', {
- id: int('id').primaryKey({ autoIncrement: true }),
- name: text('name'),
- }, (table) => ({
- someIndex: index('users_name_index').on(table.name),
- })),
- };
-
- const schema2 = {
- users: sqliteTable('users', {
- id: int('id').primaryKey({ autoIncrement: true }),
- name: text('name').notNull(),
- }, (table) => ({
- someIndex: index('users_name_index').on(table.name),
- })),
- };
-
- const {
- statements,
- sqlStatements,
- columnsToRemove,
- infoToPrint,
- shouldAskForApprove,
- tablesToRemove,
- tablesToTruncate,
- } = await diffTestSchemasPushLibSQL(
- turso,
- schema1,
- schema2,
- [],
- );
-
- expect(statements!.length).toBe(1);
- expect(statements![0]).toStrictEqual({
- columnAutoIncrement: false,
- columnDefault: undefined,
- columnName: 'name',
- columnNotNull: true,
- columnOnUpdate: undefined,
- columnPk: false,
- newDataType: 'text',
- schema: '',
- tableName: 'users',
- type: 'alter_table_alter_column_set_notnull',
- });
-
- expect(statements.length).toBe(1);
- expect(statements[0]).toStrictEqual({
- type: 'alter_table_alter_column_set_notnull',
- tableName: 'users',
- columnName: 'name',
- schema: '',
- newDataType: 'text',
- columnDefault: undefined,
- columnOnUpdate: undefined,
- columnNotNull: true,
- columnAutoIncrement: false,
- columnPk: false,
- });
-
- expect(sqlStatements.length).toBe(3);
- expect(sqlStatements[0]).toBe(
- `DROP INDEX IF EXISTS "users_name_index";`,
- );
- expect(sqlStatements[1]).toBe(
- `ALTER TABLE \`users\` ALTER COLUMN "name" TO "name" text NOT NULL;`,
- );
- expect(sqlStatements[2]).toBe(
- `CREATE INDEX \`users_name_index\` ON \`users\` (\`name\`);`,
- );
- expect(columnsToRemove!.length).toBe(0), expect(infoToPrint!.length).toBe(0);
- expect(shouldAskForApprove).toBe(false);
- expect(tablesToRemove!.length).toBe(0);
- expect(tablesToTruncate!.length).toBe(0);
-});
-
-test('drop not null with two indexes', async (t) => {
- const turso = createClient({
- url: ':memory:',
- });
-
- const schema1 = {
- users: sqliteTable('users', {
- id: int('id').primaryKey({ autoIncrement: true }),
- name: text('name').notNull(),
- age: int('age').notNull(),
- }, (table) => ({
- someUniqeIndex: uniqueIndex('users_name_unique').on(table.name),
- someIndex: index('users_age_index').on(table.age),
- })),
- };
-
- const schema2 = {
- users: sqliteTable('users', {
- id: int('id').primaryKey({ autoIncrement: true }),
- name: text('name'),
- age: int('age').notNull(),
- }, (table) => ({
- someUniqeIndex: uniqueIndex('users_name_unique').on(table.name),
- someIndex: index('users_age_index').on(table.age),
- })),
- };
-
- const {
- statements,
- sqlStatements,
- columnsToRemove,
- infoToPrint,
- shouldAskForApprove,
- tablesToRemove,
- tablesToTruncate,
- } = await diffTestSchemasPushLibSQL(
- turso,
- schema1,
- schema2,
- [],
- );
-
- expect(statements.length).toBe(1);
- expect(statements[0]).toStrictEqual({
- type: 'alter_table_alter_column_drop_notnull',
- tableName: 'users',
- columnName: 'name',
- schema: '',
- newDataType: 'text',
- columnDefault: undefined,
- columnOnUpdate: undefined,
- columnNotNull: false,
- columnAutoIncrement: false,
- columnPk: false,
- });
-
- expect(sqlStatements.length).toBe(5);
- expect(sqlStatements[0]).toBe(
- `DROP INDEX IF EXISTS "users_name_unique";`,
- );
- expect(sqlStatements[1]).toBe(
- `DROP INDEX IF EXISTS "users_age_index";`,
- );
- expect(sqlStatements[2]).toBe(
- `ALTER TABLE \`users\` ALTER COLUMN "name" TO "name" text;`,
- );
- expect(sqlStatements[3]).toBe(
- `CREATE UNIQUE INDEX \`users_name_unique\` ON \`users\` (\`name\`);`,
- );
- expect(sqlStatements[4]).toBe(
- `CREATE INDEX \`users_age_index\` ON \`users\` (\`age\`);`,
- );
- expect(columnsToRemove!.length).toBe(0), expect(infoToPrint!.length).toBe(0);
- expect(shouldAskForApprove).toBe(false);
- expect(tablesToRemove!.length).toBe(0);
- expect(tablesToTruncate!.length).toBe(0);
-});
diff --git a/drizzle-kit/tests/push/sqlite.test.ts b/drizzle-kit/tests/push/sqlite.test.ts
index aea5cd379..cf468d3ec 100644
--- a/drizzle-kit/tests/push/sqlite.test.ts
+++ b/drizzle-kit/tests/push/sqlite.test.ts
@@ -1,630 +1,384 @@
import Database from 'better-sqlite3';
-import chalk from 'chalk';
-import {
- blob,
- foreignKey,
- getTableConfig,
- int,
- integer,
- numeric,
- real,
- sqliteTable,
- text,
- uniqueIndex,
-} from 'drizzle-orm/sqlite-core';
+import { SQL, sql } from 'drizzle-orm';
+import { blob, foreignKey, int, integer, numeric, real, sqliteTable, text } from 'drizzle-orm/sqlite-core';
import { diffTestSchemasPushSqlite } from 'tests/schemaDiffer';
import { expect, test } from 'vitest';
+import { DialectSuite, run } from './common';
+
+const sqliteSuite: DialectSuite = {
+ addBasicIndexes: function(context?: any): Promise {
+ return {} as any;
+ },
+ changeIndexFields: function(context?: any): Promise {
+ return {} as any;
+ },
+ dropIndex: function(context?: any): Promise {
+ return {} as any;
+ },
+
+ async allTypes() {
+ const sqlite = new Database(':memory:');
+
+ const Users = sqliteTable('users', {
+ id: integer('id').primaryKey().notNull(),
+ name: text('name').notNull(),
+ email: text('email'),
+ textJson: text('text_json', { mode: 'json' }),
+ blobJon: blob('blob_json', { mode: 'json' }),
+ blobBigInt: blob('blob_bigint', { mode: 'bigint' }),
+ numeric: numeric('numeric'),
+ createdAt: integer('created_at', { mode: 'timestamp' }),
+ createdAtMs: integer('created_at_ms', { mode: 'timestamp_ms' }),
+ real: real('real'),
+ text: text('text', { length: 255 }),
+ role: text('role', { enum: ['admin', 'user'] }).default('user'),
+ isConfirmed: integer('is_confirmed', {
+ mode: 'boolean',
+ }),
+ });
-test('nothing changed in schema', async (t) => {
- const client = new Database(':memory:');
-
- const users = sqliteTable('users', {
- id: integer('id').primaryKey().notNull(),
- name: text('name').notNull(),
- email: text('email'),
- textJson: text('text_json', { mode: 'json' }),
- blobJon: blob('blob_json', { mode: 'json' }),
- blobBigInt: blob('blob_bigint', { mode: 'bigint' }),
- numeric: numeric('numeric'),
- createdAt: integer('created_at', { mode: 'timestamp' }),
- createdAtMs: integer('created_at_ms', { mode: 'timestamp_ms' }),
- real: real('real'),
- text: text('text', { length: 255 }),
- role: text('role', { enum: ['admin', 'user'] }).default('user'),
- isConfirmed: integer('is_confirmed', {
- mode: 'boolean',
- }),
- });
-
- const schema1 = {
- users,
-
- customers: sqliteTable('customers', {
- id: integer('id').primaryKey(),
- address: text('address').notNull(),
- isConfirmed: integer('is_confirmed', { mode: 'boolean' }),
- registrationDate: integer('registration_date', { mode: 'timestamp_ms' })
- .notNull()
- .$defaultFn(() => new Date()),
- userId: integer('user_id')
- .references(() => users.id)
- .notNull(),
- }),
-
- posts: sqliteTable('posts', {
- id: integer('id').primaryKey(),
- content: text('content'),
- authorId: integer('author_id'),
- }),
- };
-
- const {
- sqlStatements,
- statements,
- columnsToRemove,
- infoToPrint,
- shouldAskForApprove,
- tablesToRemove,
- tablesToTruncate,
- } = await diffTestSchemasPushSqlite(client, schema1, schema1, [], false);
- expect(sqlStatements.length).toBe(0);
- expect(statements.length).toBe(0);
- expect(columnsToRemove!.length).toBe(0);
- expect(infoToPrint!.length).toBe(0);
- expect(shouldAskForApprove).toBe(false);
- expect(tablesToRemove!.length).toBe(0);
- expect(tablesToTruncate!.length).toBe(0);
- expect(shouldAskForApprove).toBe(false);
-});
-
-test('dropped, added unique index', async (t) => {
- const client = new Database(':memory:');
-
- const users = sqliteTable('users', {
- id: integer('id').primaryKey().notNull(),
- name: text('name').notNull(),
- email: text('email'),
- textJson: text('text_json', { mode: 'json' }),
- blobJon: blob('blob_json', { mode: 'json' }),
- blobBigInt: blob('blob_bigint', { mode: 'bigint' }),
- numeric: numeric('numeric'),
- createdAt: integer('created_at', { mode: 'timestamp' }),
- createdAtMs: integer('created_at_ms', { mode: 'timestamp_ms' }),
- real: real('real'),
- text: text('text', { length: 255 }),
- role: text('role', { enum: ['admin', 'user'] }).default('user'),
- isConfirmed: integer('is_confirmed', {
- mode: 'boolean',
- }),
- });
+ const schema1 = {
+ Users,
- const schema1 = {
- users,
-
- customers: sqliteTable(
- 'customers',
- {
+ Customers: sqliteTable('customers', {
id: integer('id').primaryKey(),
- address: text('address').notNull().unique(),
+ address: text('address').notNull(),
isConfirmed: integer('is_confirmed', { mode: 'boolean' }),
registrationDate: integer('registration_date', { mode: 'timestamp_ms' })
.notNull()
.$defaultFn(() => new Date()),
- userId: integer('user_id').notNull(),
- },
- (table) => ({
- uniqueIndex: uniqueIndex('customers_address_unique').on(table.address),
+ userId: integer('user_id')
+ .references(() => Users.id)
+ .notNull(),
}),
- ),
-
- posts: sqliteTable('posts', {
- id: integer('id').primaryKey(),
- content: text('content'),
- authorId: integer('author_id'),
- }),
- };
-
- const schema2 = {
- users,
- customers: sqliteTable(
- 'customers',
- {
+ Posts: sqliteTable('posts', {
id: integer('id').primaryKey(),
- address: text('address').notNull(),
- isConfirmed: integer('is_confirmed', { mode: 'boolean' }),
- registrationDate: integer('registration_date', { mode: 'timestamp_ms' })
+ content: text('content'),
+ authorId: integer('author_id'),
+ }),
+ };
+
+ const { statements } = await diffTestSchemasPushSqlite(
+ sqlite,
+ schema1,
+ schema1,
+ [],
+ false,
+ );
+ expect(statements.length).toBe(0);
+ },
+ indexesToBeNotTriggered: function(context?: any): Promise {
+ return {} as any;
+ },
+ indexesTestCase1: function(context?: any): Promise {
+ return {} as any;
+ },
+ async case1(): Promise {
+ const sqlite = new Database(':memory:');
+
+ const schema1 = {
+ users: sqliteTable('users', {
+ id: text('id').notNull().primaryKey(),
+ firstName: text('first_name').notNull(),
+ lastName: text('last_name').notNull(),
+ username: text('username').notNull().unique(),
+ email: text('email').notNull().unique(),
+ password: text('password').notNull(),
+ avatarUrl: text('avatar_url').notNull(),
+ postsCount: integer('posts_count').notNull().default(0),
+ followersCount: integer('followers_count').notNull().default(0),
+ followingsCount: integer('followings_count').notNull().default(0),
+ createdAt: integer('created_at').notNull(),
+ }),
+ };
+
+ const schema2 = {
+ users: sqliteTable('users', {
+ id: text('id').notNull().primaryKey(),
+ firstName: text('first_name').notNull(),
+ lastName: text('last_name').notNull(),
+ username: text('username').notNull().unique(),
+ email: text('email').notNull().unique(),
+ password: text('password').notNull(),
+ avatarUrl: text('avatar_url').notNull(),
+ followersCount: integer('followers_count').notNull().default(0),
+ followingsCount: integer('followings_count').notNull().default(0),
+ createdAt: integer('created_at').notNull(),
+ }),
+ };
+
+ const { statements } = await diffTestSchemasPushSqlite(
+ sqlite,
+ schema1,
+ schema2,
+ [],
+ false,
+ );
+ expect(statements.length).toBe(1);
+ expect(statements[0]).toStrictEqual({
+ type: 'alter_table_drop_column',
+ tableName: 'users',
+ columnName: 'posts_count',
+ schema: '',
+ });
+ },
+ addNotNull: function(context?: any): Promise {
+ return {} as any;
+ },
+ addNotNullWithDataNoRollback: function(context?: any): Promise {
+ return {} as any;
+ },
+ addBasicSequences: function(context?: any): Promise {
+ return {} as any;
+ },
+ // ---
+ addGeneratedColumn: async function(context?: any): Promise {
+ const sqlite = new Database(':memory:');
+
+ const from = {
+ users: sqliteTable('users', {
+ id: int('id'),
+ id2: int('id2'),
+ name: text('name'),
+ }),
+ };
+ const to = {
+ users: sqliteTable('users', {
+ id: int('id'),
+ id2: int('id2'),
+ name: text('name'),
+ generatedName: text('gen_name').generatedAlwaysAs(
+ (): SQL => sql`${to.users.name} || 'hello'`,
+ { mode: 'stored' },
+ ),
+ }),
+ };
+
+ const { statements, sqlStatements } = await diffTestSchemasPushSqlite(
+ sqlite,
+ from,
+ to,
+ [],
+ );
+
+ expect(statements).toStrictEqual([]);
+ expect(sqlStatements).toStrictEqual([]);
+ },
+ addGeneratedToColumn: async function(context?: any): Promise {
+ const sqlite = new Database(':memory:');
+
+ const from = {
+ users: sqliteTable('users', {
+ id: int('id'),
+ id2: int('id2'),
+ name: text('name'),
+ generatedName: text('gen_name').notNull(),
+ generatedName1: text('gen_name1'),
+ }),
+ };
+ const to = {
+ users: sqliteTable('users', {
+ id: int('id'),
+ id2: int('id2'),
+ name: text('name'),
+ generatedName: text('gen_name')
.notNull()
- .$defaultFn(() => new Date()),
- userId: integer('user_id').notNull(),
- },
- (table) => ({
- uniqueIndex: uniqueIndex('customers_is_confirmed_unique').on(
- table.isConfirmed,
+ .generatedAlwaysAs((): SQL => sql`${to.users.name} || 'hello'`, {
+ mode: 'stored',
+ }),
+ generatedName1: text('gen_name1').generatedAlwaysAs(
+ (): SQL => sql`${to.users.name} || 'hello'`,
+ { mode: 'virtual' },
),
}),
- ),
-
- posts: sqliteTable('posts', {
- id: integer('id').primaryKey(),
- content: text('content'),
- authorId: integer('author_id'),
- }),
- };
-
- const {
- sqlStatements,
- statements,
- columnsToRemove,
- infoToPrint,
- shouldAskForApprove,
- tablesToRemove,
- tablesToTruncate,
- } = await diffTestSchemasPushSqlite(client, schema1, schema2, [], false);
- expect(statements.length).toBe(2);
- expect(statements[0]).toStrictEqual({
- type: 'drop_index',
- tableName: 'customers',
- data: 'customers_address_unique;address;true;',
- schema: '',
- });
- expect(statements[1]).toStrictEqual({
- type: 'create_index',
- tableName: 'customers',
- data: 'customers_is_confirmed_unique;is_confirmed;true;',
- schema: '',
- internal: {
- indexes: {},
- },
- });
-
- expect(sqlStatements.length).toBe(2);
- expect(sqlStatements[0]).toBe(
- `DROP INDEX IF EXISTS \`customers_address_unique\`;`,
- );
- expect(sqlStatements[1]).toBe(
- `CREATE UNIQUE INDEX \`customers_is_confirmed_unique\` ON \`customers\` (\`is_confirmed\`);`,
- );
-
- expect(columnsToRemove!.length).toBe(0);
- expect(infoToPrint!.length).toBe(0);
- expect(shouldAskForApprove).toBe(false);
- expect(tablesToRemove!.length).toBe(0);
- expect(tablesToTruncate!.length).toBe(0);
-});
-
-test('added column not null and without default to table with data', async (t) => {
- const client = new Database(':memory:');
-
- const schema1 = {
- companies: sqliteTable('companies', {
- id: integer('id').primaryKey(),
- name: text('name').notNull(),
- }),
- };
-
- const schema2 = {
- companies: sqliteTable('companies', {
- id: integer('id').primaryKey(),
- name: text('name').notNull(),
- age: integer('age').notNull(),
- }),
- };
-
- const table = getTableConfig(schema1.companies);
- const seedStatements = [
- `INSERT INTO \`${table.name}\` ("${schema1.companies.name.name}") VALUES ('drizzle');`,
- `INSERT INTO \`${table.name}\` ("${schema1.companies.name.name}") VALUES ('turso');`,
- ];
-
- const {
- statements,
- sqlStatements,
- columnsToRemove,
- infoToPrint,
- shouldAskForApprove,
- tablesToRemove,
- tablesToTruncate,
- } = await diffTestSchemasPushSqlite(
- client,
- schema1,
- schema2,
- [],
- false,
- seedStatements,
- );
-
- expect(statements.length).toBe(1);
- expect(statements[0]).toStrictEqual({
- type: 'sqlite_alter_table_add_column',
- tableName: 'companies',
- column: {
- name: 'age',
- type: 'integer',
- primaryKey: false,
- notNull: true,
- autoincrement: false,
- },
- referenceData: undefined,
- });
- expect(sqlStatements.length).toBe(2);
- expect(sqlStatements[0]).toBe(`delete from companies;`);
- expect(sqlStatements[1]).toBe(
- `ALTER TABLE \`companies\` ADD \`age\` integer NOT NULL;`,
- );
-
- expect(columnsToRemove!.length).toBe(0);
- expect(infoToPrint!.length).toBe(1);
- expect(infoToPrint![0]).toBe(
- `· You're about to add not-null ${
- chalk.underline(
- 'age',
- )
- } column without default value, which contains 2 items`,
- );
- expect(shouldAskForApprove).toBe(true);
- expect(tablesToRemove!.length).toBe(0);
- expect(tablesToTruncate!.length).toBe(1);
- expect(tablesToTruncate![0]).toBe('companies');
-});
-
-test('added column not null and without default to table without data', async (t) => {
- const turso = new Database(':memory:');
-
- const schema1 = {
- companies: sqliteTable('companies', {
- id: integer('id').primaryKey(),
- name: text('name').notNull(),
- }),
- };
-
- const schema2 = {
- companies: sqliteTable('companies', {
- id: integer('id').primaryKey(),
- name: text('name').notNull(),
- age: integer('age').notNull(),
- }),
- };
-
- const {
- sqlStatements,
- statements,
- columnsToRemove,
- infoToPrint,
- shouldAskForApprove,
- tablesToRemove,
- tablesToTruncate,
- } = await diffTestSchemasPushSqlite(turso, schema1, schema2, [], false);
-
- expect(statements.length).toBe(1);
- expect(statements[0]).toStrictEqual({
- type: 'sqlite_alter_table_add_column',
- tableName: 'companies',
- column: {
- name: 'age',
- type: 'integer',
- primaryKey: false,
- notNull: true,
- autoincrement: false,
- },
- referenceData: undefined,
- });
-
- expect(sqlStatements.length).toBe(1);
- expect(sqlStatements[0]).toBe(
- `ALTER TABLE \`companies\` ADD \`age\` integer NOT NULL;`,
- );
-
- expect(infoToPrint!.length).toBe(0);
- expect(columnsToRemove!.length).toBe(0);
- expect(shouldAskForApprove).toBe(false);
- expect(tablesToRemove!.length).toBe(0);
- expect(tablesToTruncate!.length).toBe(0);
-});
-
-test('drop autoincrement. drop column with data', async (t) => {
- const turso = new Database(':memory:');
-
- const schema1 = {
- companies: sqliteTable('companies', {
- id: integer('id').primaryKey({ autoIncrement: true }),
- name: text('name'),
- }),
- };
-
- const schema2 = {
- companies: sqliteTable('companies', {
- id: integer('id').primaryKey({ autoIncrement: false }),
- }),
- };
+ };
- const table = getTableConfig(schema1.companies);
- const seedStatements = [
- `INSERT INTO \`${table.name}\` ("${schema1.companies.id.name}", "${schema1.companies.name.name}") VALUES (1, 'drizzle');`,
- `INSERT INTO \`${table.name}\` ("${schema1.companies.id.name}", "${schema1.companies.name.name}") VALUES (2, 'turso');`,
- ];
+ const { statements, sqlStatements } = await diffTestSchemasPushSqlite(
+ sqlite,
+ from,
+ to,
+ [],
+ );
- const {
- sqlStatements,
- statements,
- columnsToRemove,
- infoToPrint,
- shouldAskForApprove,
- tablesToRemove,
- tablesToTruncate,
- } = await diffTestSchemasPushSqlite(
- turso,
- schema1,
- schema2,
- [],
- false,
- seedStatements,
- );
-
- expect(statements.length).toBe(1);
- expect(statements[0]).toStrictEqual({
- type: 'recreate_table',
- tableName: 'companies',
- columns: [
+ expect(statements).toStrictEqual([
{
- name: 'id',
- type: 'integer',
- autoincrement: false,
- notNull: true,
- primaryKey: true,
- generated: undefined,
+ columnAutoIncrement: false,
+ columnDefault: undefined,
+ columnGenerated: {
+ as: '("name" || \'hello\')',
+ type: 'virtual',
+ },
+ columnName: 'gen_name1',
+ columnNotNull: false,
+ columnOnUpdate: undefined,
+ columnPk: false,
+ newDataType: 'text',
+ schema: '',
+ tableName: 'users',
+ type: 'alter_table_alter_column_set_generated',
},
- ],
- compositePKs: [],
- referenceData: [],
- uniqueConstraints: [],
- });
-
- expect(sqlStatements.length).toBe(4);
- expect(sqlStatements[0]).toBe(
- `CREATE TABLE \`__new_companies\` (
-\t\`id\` integer PRIMARY KEY NOT NULL
-);\n`,
- );
- expect(sqlStatements[1]).toBe(
- `INSERT INTO \`__new_companies\`("id") SELECT "id" FROM \`companies\`;`,
- );
- expect(sqlStatements[2]).toBe(`DROP TABLE \`companies\`;`);
- expect(sqlStatements[3]).toBe(
- `ALTER TABLE \`__new_companies\` RENAME TO \`companies\`;`,
- );
-
- expect(columnsToRemove!.length).toBe(1);
- expect(columnsToRemove![0]).toBe('name');
- expect(infoToPrint!.length).toBe(1);
- expect(infoToPrint![0]).toBe(
- `· You're about to delete ${
- chalk.underline(
- 'name',
- )
- } column in companies table with 2 items`,
- );
- expect(shouldAskForApprove).toBe(true);
- expect(tablesToRemove!.length).toBe(0);
- expect(tablesToTruncate!.length).toBe(0);
-});
-
-test('drop autoincrement. drop column with data with pragma off', async (t) => {
- const client = new Database(':memory:');
-
- client.exec('PRAGMA foreign_keys=OFF;');
-
- const users = sqliteTable('users', {
- id: integer('id').primaryKey({ autoIncrement: true }),
- });
- const schema1 = {
- companies: sqliteTable('companies', {
- id: integer('id').primaryKey({ autoIncrement: true }),
- name: text('name'),
- user_id: integer('user_id').references(() => users.id),
- }),
- };
-
- const schema2 = {
- companies: sqliteTable('companies', {
- id: integer('id').primaryKey({ autoIncrement: false }),
- user_id: integer('user_id').references(() => users.id),
- }),
- };
+ ]);
+ expect(sqlStatements).toStrictEqual([
+ 'ALTER TABLE `users` DROP COLUMN `gen_name1`;',
+ 'ALTER TABLE `users` ADD `gen_name1` text GENERATED ALWAYS AS ("name" || \'hello\') VIRTUAL;',
+ ]);
+
+ for (const st of sqlStatements) {
+ sqlite.exec(st);
+ }
+ },
+ dropGeneratedConstraint: async function(context?: any): Promise {
+ const sqlite = new Database(':memory:');
+
+ const from = {
+ users: sqliteTable('users', {
+ id: int('id'),
+ id2: int('id2'),
+ name: text('name'),
+ generatedName: text('gen_name').generatedAlwaysAs(
+ (): SQL => sql`${to.users.name} || 'hello'`,
+ { mode: 'stored' },
+ ),
+ generatedName1: text('gen_name1').generatedAlwaysAs(
+ (): SQL => sql`${to.users.name} || 'hello'`,
+ { mode: 'virtual' },
+ ),
+ }),
+ };
+ const to = {
+ users: sqliteTable('users', {
+ id: int('id'),
+ id2: int('id2'),
+ name: text('name'),
+ generatedName: text('gen_name'),
+ generatedName1: text('gen_name1'),
+ }),
+ };
- const table = getTableConfig(schema1.companies);
- const seedStatements = [
- `INSERT INTO \`${table.name}\` ("${schema1.companies.id.name}", "${schema1.companies.name.name}") VALUES (1, 'drizzle');`,
- `INSERT INTO \`${table.name}\` ("${schema1.companies.id.name}", "${schema1.companies.name.name}") VALUES (2, 'turso');`,
- ];
+ const { statements, sqlStatements } = await diffTestSchemasPushSqlite(
+ sqlite,
+ from,
+ to,
+ [],
+ );
- const {
- sqlStatements,
- statements,
- columnsToRemove,
- infoToPrint,
- shouldAskForApprove,
- tablesToRemove,
- tablesToTruncate,
- } = await diffTestSchemasPushSqlite(
- client,
- schema1,
- schema2,
- [],
- false,
- seedStatements,
- );
-
- expect(statements.length).toBe(1);
- expect(statements[0]).toStrictEqual({
- type: 'recreate_table',
- tableName: 'companies',
- columns: [
- {
- name: 'id',
- type: 'integer',
- autoincrement: false,
- notNull: true,
- primaryKey: true,
- generated: undefined,
- },
+ expect(statements).toStrictEqual([
{
- name: 'user_id',
- type: 'integer',
- autoincrement: false,
- notNull: false,
- primaryKey: false,
- generated: undefined,
+ columnAutoIncrement: false,
+ columnDefault: undefined,
+ columnGenerated: undefined,
+ columnName: 'gen_name',
+ columnNotNull: false,
+ columnOnUpdate: undefined,
+ columnPk: false,
+ newDataType: 'text',
+ schema: '',
+ tableName: 'users',
+ type: 'alter_table_alter_column_drop_generated',
},
- ],
- compositePKs: [],
- referenceData: [
{
- columnsFrom: [
- 'user_id',
- ],
- columnsTo: [
- 'id',
- ],
- name: '',
- onDelete: 'no action',
- onUpdate: 'no action',
- tableFrom: 'companies',
- tableTo: 'users',
+ columnAutoIncrement: false,
+ columnDefault: undefined,
+ columnGenerated: undefined,
+ columnName: 'gen_name1',
+ columnNotNull: false,
+ columnOnUpdate: undefined,
+ columnPk: false,
+ newDataType: 'text',
+ schema: '',
+ tableName: 'users',
+ type: 'alter_table_alter_column_drop_generated',
},
- ],
- uniqueConstraints: [],
- });
-
- expect(sqlStatements.length).toBe(4);
- expect(sqlStatements[0]).toBe(
- `CREATE TABLE \`__new_companies\` (
-\t\`id\` integer PRIMARY KEY NOT NULL,
-\t\`user_id\` integer,
-\tFOREIGN KEY (\`user_id\`) REFERENCES \`users\`(\`id\`) ON UPDATE no action ON DELETE no action
-);\n`,
- );
- expect(sqlStatements[1]).toBe(
- `INSERT INTO \`__new_companies\`("id", "user_id") SELECT "id", "user_id" FROM \`companies\`;`,
- );
- expect(sqlStatements[2]).toBe(`DROP TABLE \`companies\`;`);
- expect(sqlStatements[3]).toBe(
- `ALTER TABLE \`__new_companies\` RENAME TO \`companies\`;`,
- );
-
- expect(columnsToRemove!.length).toBe(1);
- expect(infoToPrint!.length).toBe(1);
- expect(infoToPrint![0]).toBe(
- `· You're about to delete ${
- chalk.underline(
- 'name',
- )
- } column in companies table with 2 items`,
- );
- expect(shouldAskForApprove).toBe(true);
- expect(tablesToRemove!.length).toBe(0);
- expect(tablesToTruncate!.length).toBe(0);
-});
-
-test('change autoincrement. other table references current', async (t) => {
- const client = new Database(':memory:');
-
- const companies1 = sqliteTable('companies', {
- id: integer('id').primaryKey({ autoIncrement: true }),
- });
- const users1 = sqliteTable('users', {
- id: integer('id').primaryKey({ autoIncrement: true }),
- name: text('name').unique(),
- companyId: text('company_id').references(() => companies1.id),
- });
- const schema1 = {
- companies: companies1,
- users: users1,
- };
-
- const companies2 = sqliteTable('companies', {
- id: integer('id').primaryKey({ autoIncrement: false }),
- });
- const users2 = sqliteTable('users', {
- id: integer('id').primaryKey({ autoIncrement: true }),
- name: text('name').unique(),
- companyId: text('company_id').references(() => companies1.id),
- });
- const schema2 = {
- companies: companies2,
- users: users2,
- };
-
- const { name: usersTableName } = getTableConfig(users1);
- const { name: companiesTableName } = getTableConfig(companies1);
- const seedStatements = [
- `INSERT INTO \`${usersTableName}\` ("${schema1.users.name.name}") VALUES ('drizzle');`,
- `INSERT INTO \`${usersTableName}\` ("${schema1.users.name.name}") VALUES ('turso');`,
- `INSERT INTO \`${companiesTableName}\` ("${schema1.companies.id.name}") VALUES ('1');`,
- `INSERT INTO \`${companiesTableName}\` ("${schema1.companies.id.name}") VALUES ('2');`,
- ];
+ ]);
+ expect(sqlStatements).toStrictEqual([
+ 'ALTER TABLE `users` DROP COLUMN `gen_name`;',
+ 'ALTER TABLE `users` ADD `gen_name` text;',
+ 'ALTER TABLE `users` DROP COLUMN `gen_name1`;',
+ 'ALTER TABLE `users` ADD `gen_name1` text;',
+ ]);
+
+ for (const st of sqlStatements) {
+ sqlite.exec(st);
+ }
+ },
+ alterGeneratedConstraint: async function(context?: any): Promise {
+ const sqlite = new Database(':memory:');
+
+ const from = {
+ users: sqliteTable('users', {
+ id: int('id'),
+ id2: int('id2'),
+ name: text('name'),
+ generatedName: text('gen_name').generatedAlwaysAs(
+ (): SQL => sql`${to.users.name} || 'hello'`,
+ { mode: 'stored' },
+ ),
+ generatedName1: text('gen_name1').generatedAlwaysAs(
+ (): SQL => sql`${to.users.name} || 'hello'`,
+ { mode: 'virtual' },
+ ),
+ }),
+ };
+ const to = {
+ users: sqliteTable('users', {
+ id: int('id'),
+ id2: int('id2'),
+ name: text('name'),
+ generatedName: text('gen_name').generatedAlwaysAs(
+ (): SQL => sql`${to.users.name}`,
+ { mode: 'stored' },
+ ),
+ generatedName1: text('gen_name1').generatedAlwaysAs(
+ (): SQL => sql`${to.users.name}`,
+ { mode: 'virtual' },
+ ),
+ }),
+ };
- const {
- statements,
- sqlStatements,
- columnsToRemove,
- infoToPrint,
- shouldAskForApprove,
- tablesToRemove,
- tablesToTruncate,
- } = await diffTestSchemasPushSqlite(
- client,
- schema1,
- schema2,
- [],
- false,
- seedStatements,
- );
+ const { statements, sqlStatements } = await diffTestSchemasPushSqlite(
+ sqlite,
+ from,
+ to,
+ [],
+ );
- expect(statements.length).toBe(1);
- expect(statements[0]).toStrictEqual({
- type: 'recreate_table',
- tableName: 'companies',
- columns: [
+ expect(statements).toStrictEqual([
{
- name: 'id',
- type: 'integer',
- autoincrement: false,
- notNull: true,
- primaryKey: true,
- generated: undefined,
+ columnAutoIncrement: false,
+ columnDefault: undefined,
+ columnGenerated: {
+ as: '("name")',
+ type: 'virtual',
+ },
+ columnName: 'gen_name1',
+ columnNotNull: false,
+ columnOnUpdate: undefined,
+ columnPk: false,
+ newDataType: 'text',
+ schema: '',
+ tableName: 'users',
+ type: 'alter_table_alter_column_alter_generated',
},
- ],
- compositePKs: [],
- referenceData: [],
- uniqueConstraints: [],
- });
-
- expect(sqlStatements.length).toBe(6);
- expect(sqlStatements[0]).toBe(`PRAGMA foreign_keys=OFF;`);
- expect(sqlStatements[1]).toBe(
- `CREATE TABLE \`__new_companies\` (
-\t\`id\` integer PRIMARY KEY NOT NULL
-);\n`,
- );
- expect(sqlStatements[2]).toBe(
- `INSERT INTO \`__new_companies\`("id") SELECT "id" FROM \`companies\`;`,
- );
- expect(sqlStatements[3]).toBe(`DROP TABLE \`companies\`;`);
- expect(sqlStatements[4]).toBe(
- `ALTER TABLE \`__new_companies\` RENAME TO \`companies\`;`,
- );
- expect(sqlStatements[5]).toBe(`PRAGMA foreign_keys=ON;`);
-
- expect(columnsToRemove!.length).toBe(0);
- expect(infoToPrint!.length).toBe(0);
- expect(shouldAskForApprove).toBe(false);
- expect(tablesToRemove!.length).toBe(0);
- expect(tablesToTruncate!.length).toBe(0);
-});
+ ]);
+ expect(sqlStatements).toStrictEqual([
+ 'ALTER TABLE `users` DROP COLUMN `gen_name1`;',
+ 'ALTER TABLE `users` ADD `gen_name1` text GENERATED ALWAYS AS ("name") VIRTUAL;',
+ ]);
+
+ for (const st of sqlStatements) {
+ sqlite.exec(st);
+ }
+ },
+ createTableWithGeneratedConstraint: function(context?: any): Promise {
+ return {} as any;
+ },
+};
+
+run(sqliteSuite);
test('create table with custom name references', async (t) => {
- const client = new Database(':memory:');
+ const sqlite = new Database(':memory:');
const users = sqliteTable('users', {
id: int('id').primaryKey({ autoIncrement: true }),
@@ -670,7 +424,7 @@ test('create table with custom name references', async (t) => {
};
const { sqlStatements } = await diffTestSchemasPushSqlite(
- client,
+ sqlite,
schema1,
schema2,
[],
@@ -678,613 +432,3 @@ test('create table with custom name references', async (t) => {
expect(sqlStatements!.length).toBe(0);
});
-
-test('drop not null, add not null', async (t) => {
- const client = new Database(':memory:');
-
- const schema1 = {
- users: sqliteTable('users', {
- id: int('id').primaryKey({ autoIncrement: true }),
- name: text('name').notNull(),
- }),
- posts: sqliteTable('posts', {
- id: int('id').primaryKey({ autoIncrement: true }),
- name: text('name'),
- userId: int('user_id'),
- }),
- };
-
- const schema2 = {
- users: sqliteTable('users', {
- id: int('id').primaryKey({ autoIncrement: true }),
- name: text('name'),
- }),
- posts: sqliteTable('posts', {
- id: int('id').primaryKey({ autoIncrement: true }),
- name: text('name').notNull(),
- userId: int('user_id'),
- }),
- };
- const {
- statements,
- sqlStatements,
- columnsToRemove,
- infoToPrint,
- shouldAskForApprove,
- tablesToRemove,
- tablesToTruncate,
- } = await diffTestSchemasPushSqlite(client, schema1, schema2, []);
-
- expect(statements!.length).toBe(2);
- expect(statements![0]).toStrictEqual({
- columns: [
- {
- autoincrement: true,
- generated: undefined,
- name: 'id',
- notNull: true,
- primaryKey: true,
- type: 'integer',
- },
- {
- autoincrement: false,
- generated: undefined,
- name: 'name',
- notNull: false,
- primaryKey: false,
- type: 'text',
- },
- ],
- compositePKs: [],
- referenceData: [],
- tableName: 'users',
- type: 'recreate_table',
- uniqueConstraints: [],
- });
- expect(statements![1]).toStrictEqual({
- columns: [
- {
- autoincrement: true,
- generated: undefined,
- name: 'id',
- notNull: true,
- primaryKey: true,
- type: 'integer',
- },
- {
- autoincrement: false,
- generated: undefined,
- name: 'name',
- notNull: true,
- primaryKey: false,
- type: 'text',
- },
- {
- autoincrement: false,
- generated: undefined,
- name: 'user_id',
- notNull: false,
- primaryKey: false,
- type: 'integer',
- },
- ],
- compositePKs: [],
- referenceData: [],
- tableName: 'posts',
- type: 'recreate_table',
- uniqueConstraints: [],
- });
-
- expect(sqlStatements.length).toBe(8);
- expect(sqlStatements[0]).toBe(`CREATE TABLE \`__new_users\` (
-\t\`id\` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
-\t\`name\` text
-);\n`);
- expect(sqlStatements[1]).toBe(
- `INSERT INTO \`__new_users\`("id", "name") SELECT "id", "name" FROM \`users\`;`,
- );
- expect(sqlStatements[2]).toBe(`DROP TABLE \`users\`;`);
- expect(sqlStatements[3]).toBe(
- `ALTER TABLE \`__new_users\` RENAME TO \`users\`;`,
- );
-
- expect(sqlStatements![4]).toBe(`CREATE TABLE \`__new_posts\` (
-\t\`id\` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
-\t\`name\` text NOT NULL,
-\t\`user_id\` integer
-);\n`);
- expect(sqlStatements![5]).toBe(
- `INSERT INTO \`__new_posts\`("id", "name", "user_id") SELECT "id", "name", "user_id" FROM \`posts\`;`,
- );
- expect(sqlStatements![6]).toBe(`DROP TABLE \`posts\`;`);
- expect(sqlStatements![7]).toBe(
- `ALTER TABLE \`__new_posts\` RENAME TO \`posts\`;`,
- );
-
- expect(columnsToRemove!.length).toBe(0);
- expect(infoToPrint!.length).toBe(0);
- expect(shouldAskForApprove).toBe(false);
- expect(tablesToRemove!.length).toBe(0);
- expect(tablesToTruncate!.length).toBe(0);
-});
-
-test('rename table and change data type', async (t) => {
- const client = new Database(':memory:');
-
- const schema1 = {
- users: sqliteTable('old_users', {
- id: int('id').primaryKey({ autoIncrement: true }),
- age: text('age'),
- }),
- };
-
- const schema2 = {
- users: sqliteTable('new_users', {
- id: int('id').primaryKey({ autoIncrement: true }),
- age: integer('age'),
- }),
- };
- const {
- statements,
- sqlStatements,
- columnsToRemove,
- infoToPrint,
- shouldAskForApprove,
- tablesToRemove,
- tablesToTruncate,
- } = await diffTestSchemasPushSqlite(client, schema1, schema2, [
- 'public.old_users->public.new_users',
- ]);
-
- expect(statements!.length).toBe(2);
- expect(statements![0]).toStrictEqual({
- fromSchema: undefined,
- tableNameFrom: 'old_users',
- tableNameTo: 'new_users',
- toSchema: undefined,
- type: 'rename_table',
- });
- expect(statements![1]).toStrictEqual({
- columns: [
- {
- autoincrement: true,
- name: 'id',
- notNull: true,
- generated: undefined,
- primaryKey: true,
- type: 'integer',
- },
- {
- autoincrement: false,
- name: 'age',
- notNull: false,
- generated: undefined,
- primaryKey: false,
- type: 'integer',
- },
- ],
- compositePKs: [],
- referenceData: [],
- tableName: 'new_users',
- type: 'recreate_table',
- uniqueConstraints: [],
- });
-
- expect(sqlStatements!.length).toBe(5);
- expect(sqlStatements![0]).toBe(
- `ALTER TABLE \`old_users\` RENAME TO \`new_users\`;`,
- );
- expect(sqlStatements[1]).toBe(`CREATE TABLE \`__new_new_users\` (
-\t\`id\` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
-\t\`age\` integer
-);\n`);
- expect(sqlStatements![2]).toBe(
- `INSERT INTO \`__new_new_users\`("id", "age") SELECT "id", "age" FROM \`new_users\`;`,
- );
- expect(sqlStatements![3]).toBe(`DROP TABLE \`new_users\`;`);
- expect(sqlStatements![4]).toBe(
- `ALTER TABLE \`__new_new_users\` RENAME TO \`new_users\`;`,
- );
-
- expect(columnsToRemove!.length).toBe(0);
- expect(infoToPrint!.length).toBe(0);
- expect(shouldAskForApprove).toBe(false);
- expect(tablesToRemove!.length).toBe(0);
- expect(tablesToTruncate!.length).toBe(0);
-});
-
-test('rename column and change data type', async (t) => {
- const client = new Database(':memory:');
-
- const schema1 = {
- users: sqliteTable('users', {
- id: int('id').primaryKey({ autoIncrement: true }),
- name: text('name'),
- }),
- };
-
- const schema2 = {
- users: sqliteTable('users', {
- id: int('id').primaryKey({ autoIncrement: true }),
- age: integer('age'),
- }),
- };
- const {
- statements,
- sqlStatements,
- columnsToRemove,
- infoToPrint,
- shouldAskForApprove,
- tablesToRemove,
- tablesToTruncate,
- } = await diffTestSchemasPushSqlite(client, schema1, schema2, [
- 'public.users.name->public.users.age',
- ]);
-
- expect(statements!.length).toBe(1);
- expect(statements![0]).toStrictEqual({
- columns: [
- {
- autoincrement: true,
- name: 'id',
- notNull: true,
- generated: undefined,
- primaryKey: true,
- type: 'integer',
- },
- {
- autoincrement: false,
- name: 'age',
- notNull: false,
- generated: undefined,
- primaryKey: false,
- type: 'integer',
- },
- ],
- compositePKs: [],
- referenceData: [],
- tableName: 'users',
- type: 'recreate_table',
- uniqueConstraints: [],
- });
-
- expect(sqlStatements!.length).toBe(4);
- expect(sqlStatements![0]).toBe(`CREATE TABLE \`__new_users\` (
-\t\`id\` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
-\t\`age\` integer
-);\n`);
- expect(sqlStatements![1]).toBe(
- `INSERT INTO \`__new_users\`("id", "age") SELECT "id", "age" FROM \`users\`;`,
- );
- expect(sqlStatements![2]).toBe(`DROP TABLE \`users\`;`);
- expect(sqlStatements![3]).toBe(
- `ALTER TABLE \`__new_users\` RENAME TO \`users\`;`,
- );
-
- expect(columnsToRemove!.length).toBe(0);
- expect(infoToPrint!.length).toBe(0);
- expect(shouldAskForApprove).toBe(false);
- expect(tablesToRemove!.length).toBe(0);
- expect(tablesToTruncate!.length).toBe(0);
-});
-
-test('recreate table with nested references', async (t) => {
- const client = new Database(':memory:');
-
- let users = sqliteTable('users', {
- id: int('id').primaryKey({ autoIncrement: true }),
- name: text('name'),
- age: integer('age'),
- });
- let subscriptions = sqliteTable('subscriptions', {
- id: int('id').primaryKey({ autoIncrement: true }),
- userId: integer('user_id').references(() => users.id),
- customerId: text('customer_id'),
- });
- const schema1 = {
- users: users,
- subscriptions: subscriptions,
- subscriptionMetadata: sqliteTable('subscriptions_metadata', {
- id: int('id').primaryKey({ autoIncrement: true }),
- subscriptionId: text('subscription_id').references(
- () => subscriptions.id,
- ),
- }),
- };
-
- users = sqliteTable('users', {
- id: int('id').primaryKey({ autoIncrement: false }),
- name: text('name'),
- age: integer('age'),
- });
- const schema2 = {
- users: users,
- subscriptions: subscriptions,
- subscriptionMetadata: sqliteTable('subscriptions_metadata', {
- id: int('id').primaryKey({ autoIncrement: true }),
- subscriptionId: text('subscription_id').references(
- () => subscriptions.id,
- ),
- }),
- };
-
- const {
- statements,
- sqlStatements,
- columnsToRemove,
- infoToPrint,
- shouldAskForApprove,
- tablesToRemove,
- tablesToTruncate,
- } = await diffTestSchemasPushSqlite(client, schema1, schema2, [
- 'public.users.name->public.users.age',
- ]);
-
- expect(statements!.length).toBe(1);
- expect(statements![0]).toStrictEqual({
- columns: [
- {
- autoincrement: false,
- name: 'id',
- notNull: true,
- generated: undefined,
- primaryKey: true,
- type: 'integer',
- },
- {
- autoincrement: false,
- name: 'name',
- notNull: false,
- generated: undefined,
- primaryKey: false,
- type: 'text',
- },
- {
- autoincrement: false,
- name: 'age',
- notNull: false,
- generated: undefined,
- primaryKey: false,
- type: 'integer',
- },
- ],
- compositePKs: [],
- referenceData: [],
- tableName: 'users',
- type: 'recreate_table',
- uniqueConstraints: [],
- });
-
- expect(sqlStatements!.length).toBe(6);
- expect(sqlStatements[0]).toBe('PRAGMA foreign_keys=OFF;');
- expect(sqlStatements![1]).toBe(`CREATE TABLE \`__new_users\` (
-\t\`id\` integer PRIMARY KEY NOT NULL,
-\t\`name\` text,
-\t\`age\` integer
-);\n`);
- expect(sqlStatements![2]).toBe(
- `INSERT INTO \`__new_users\`("id", "name", "age") SELECT "id", "name", "age" FROM \`users\`;`,
- );
- expect(sqlStatements![3]).toBe(`DROP TABLE \`users\`;`);
- expect(sqlStatements![4]).toBe(
- `ALTER TABLE \`__new_users\` RENAME TO \`users\`;`,
- );
- expect(sqlStatements[5]).toBe('PRAGMA foreign_keys=ON;');
-
- expect(columnsToRemove!.length).toBe(0);
- expect(infoToPrint!.length).toBe(0);
- expect(shouldAskForApprove).toBe(false);
- expect(tablesToRemove!.length).toBe(0);
- expect(tablesToTruncate!.length).toBe(0);
-});
-
-test('recreate table with added column not null and without default with data', async (t) => {
- const client = new Database(':memory:');
-
- const schema1 = {
- users: sqliteTable('users', {
- id: int('id').primaryKey({ autoIncrement: true }),
- name: text('name'),
- age: integer('age'),
- }),
- };
-
- const schema2 = {
- users: sqliteTable('users', {
- id: int('id').primaryKey({ autoIncrement: false }),
- name: text('name'),
- age: integer('age'),
- newColumn: text('new_column').notNull(),
- }),
- };
-
- const seedStatements = [
- `INSERT INTO \`users\` ("name", "age") VALUES ('drizzle', 12)`,
- `INSERT INTO \`users\` ("name", "age") VALUES ('turso', 12)`,
- ];
-
- const {
- statements,
- sqlStatements,
- columnsToRemove,
- infoToPrint,
- shouldAskForApprove,
- tablesToRemove,
- tablesToTruncate,
- } = await diffTestSchemasPushSqlite(
- client,
- schema1,
- schema2,
- [],
- false,
- seedStatements,
- );
-
- expect(statements!.length).toBe(1);
- expect(statements![0]).toStrictEqual({
- columns: [
- {
- autoincrement: false,
- name: 'id',
- notNull: true,
- generated: undefined,
- primaryKey: true,
- type: 'integer',
- },
- {
- autoincrement: false,
- name: 'name',
- notNull: false,
- generated: undefined,
- primaryKey: false,
- type: 'text',
- },
- {
- autoincrement: false,
- name: 'age',
- notNull: false,
- generated: undefined,
- primaryKey: false,
- type: 'integer',
- },
- {
- autoincrement: false,
- name: 'new_column',
- notNull: true,
- generated: undefined,
- primaryKey: false,
- type: 'text',
- },
- ],
- compositePKs: [],
- referenceData: [],
- tableName: 'users',
- type: 'recreate_table',
- uniqueConstraints: [],
- });
-
- expect(sqlStatements!.length).toBe(4);
- expect(sqlStatements[0]).toBe('DELETE FROM \`users\`;');
- expect(sqlStatements![1]).toBe(`CREATE TABLE \`__new_users\` (
-\t\`id\` integer PRIMARY KEY NOT NULL,
-\t\`name\` text,
-\t\`age\` integer,
-\t\`new_column\` text NOT NULL
-);\n`);
- expect(sqlStatements![2]).toBe(`DROP TABLE \`users\`;`);
- expect(sqlStatements![3]).toBe(
- `ALTER TABLE \`__new_users\` RENAME TO \`users\`;`,
- );
-
- expect(columnsToRemove!.length).toBe(0);
- expect(infoToPrint!.length).toBe(1);
- expect(infoToPrint![0]).toBe(
- `· You're about to add not-null ${
- chalk.underline('new_column')
- } column without default value to table, which contains 2 items`,
- );
- expect(shouldAskForApprove).toBe(true);
- expect(tablesToRemove!.length).toBe(0);
- expect(tablesToTruncate!.length).toBe(1);
- expect(tablesToTruncate![0]).toBe('users');
-});
-
-test('recreate table with added column not null and without default with data', async (t) => {
- const client = new Database(':memory:');
-
- const schema1 = {
- users: sqliteTable('users', {
- id: int('id').primaryKey({ autoIncrement: true }),
- name: text('name'),
- age: integer('age'),
- }),
- };
-
- const schema2 = {
- users: sqliteTable('users', {
- id: int('id').primaryKey({ autoIncrement: false }),
- name: text('name'),
- age: integer('age'),
- newColumn: text('new_column').notNull(),
- }),
- };
-
- const {
- statements,
- sqlStatements,
- columnsToRemove,
- infoToPrint,
- shouldAskForApprove,
- tablesToRemove,
- tablesToTruncate,
- } = await diffTestSchemasPushSqlite(
- client,
- schema1,
- schema2,
- [],
- );
-
- expect(statements!.length).toBe(1);
- expect(statements![0]).toStrictEqual({
- columns: [
- {
- autoincrement: false,
- name: 'id',
- notNull: true,
- generated: undefined,
- primaryKey: true,
- type: 'integer',
- },
- {
- autoincrement: false,
- name: 'name',
- notNull: false,
- generated: undefined,
- primaryKey: false,
- type: 'text',
- },
- {
- autoincrement: false,
- name: 'age',
- notNull: false,
- generated: undefined,
- primaryKey: false,
- type: 'integer',
- },
- {
- autoincrement: false,
- name: 'new_column',
- notNull: true,
- generated: undefined,
- primaryKey: false,
- type: 'text',
- },
- ],
- compositePKs: [],
- referenceData: [],
- tableName: 'users',
- type: 'recreate_table',
- uniqueConstraints: [],
- });
-
- expect(sqlStatements!.length).toBe(4);
- expect(sqlStatements![0]).toBe(`CREATE TABLE \`__new_users\` (
-\t\`id\` integer PRIMARY KEY NOT NULL,
-\t\`name\` text,
-\t\`age\` integer,
-\t\`new_column\` text NOT NULL
-);\n`);
- expect(sqlStatements[1]).toBe(
- 'INSERT INTO `__new_users`("id", "name", "age", "new_column") SELECT "id", "name", "age", "new_column" FROM `users`;',
- );
- expect(sqlStatements![2]).toBe(`DROP TABLE \`users\`;`);
- expect(sqlStatements![3]).toBe(
- `ALTER TABLE \`__new_users\` RENAME TO \`users\`;`,
- );
-
- expect(columnsToRemove!.length).toBe(0);
- expect(infoToPrint!.length).toBe(0);
- expect(shouldAskForApprove).toBe(false);
- expect(tablesToRemove!.length).toBe(0);
- expect(tablesToTruncate!.length).toBe(0);
-});
diff --git a/drizzle-kit/tests/schemaDiffer.ts b/drizzle-kit/tests/schemaDiffer.ts
index 3223ca5e7..f300fc68c 100644
--- a/drizzle-kit/tests/schemaDiffer.ts
+++ b/drizzle-kit/tests/schemaDiffer.ts
@@ -1,5 +1,4 @@
import { PGlite } from '@electric-sql/pglite';
-import { Client } from '@libsql/client/.';
import { Database } from 'better-sqlite3';
import { is } from 'drizzle-orm';
import { MySqlSchema, MySqlTable } from 'drizzle-orm/mysql-core';
@@ -8,7 +7,6 @@ import { SingleStoreSchema, SingleStoreTable } from 'drizzle-orm/singlestore-cor
import { SQLiteTable } from 'drizzle-orm/sqlite-core';
import * as fs from 'fs';
import { Connection } from 'mysql2/promise';
-import { libSqlLogSuggestionsAndReturn } from 'src/cli/commands/libSqlPushUtils';
import {
columnsResolver,
enumsResolver,
@@ -38,7 +36,6 @@ import { prepareFromSqliteImports } from 'src/serializer/sqliteImports';
import { sqliteSchema, squashSqliteScheme } from 'src/serializer/sqliteSchema';
import { fromDatabase as fromSqliteDatabase, generateSqliteSnapshot } from 'src/serializer/sqliteSerializer';
import {
- applyLibSQLSnapshotsDiff,
applyMysqlSnapshotsDiff,
applyPgSnapshotsDiff,
applySingleStoreSnapshotsDiff,
@@ -961,18 +958,11 @@ export const diffTestSchemasPushSqlite = async (
right: SqliteSchema,
renamesArr: string[],
cli: boolean = false,
- seedStatements: string[] = [],
) => {
const { sqlStatements } = await applySqliteDiffs(left, 'push');
-
for (const st of sqlStatements) {
client.exec(st);
}
-
- for (const st of seedStatements) {
- client.exec(st);
- }
-
// do introspect into PgSchemaInternal
const introspectedSchema = await fromSqliteDatabase(
{
@@ -986,9 +976,9 @@ export const diffTestSchemasPushSqlite = async (
undefined,
);
- const rightTables = Object.values(right).filter((it) => is(it, SQLiteTable)) as SQLiteTable[];
+ const leftTables = Object.values(right).filter((it) => is(it, SQLiteTable)) as SQLiteTable[];
- const serialized2 = generateSqliteSnapshot(rightTables);
+ const serialized2 = generateSqliteSnapshot(leftTables);
const { version: v1, dialect: d1, ...rest1 } = introspectedSchema;
const { version: v2, dialect: d2, ...rest2 } = serialized2;
@@ -1025,15 +1015,7 @@ export const diffTestSchemasPushSqlite = async (
'push',
);
- const {
- statementsToExecute,
- columnsToRemove,
- infoToPrint,
- schemasToRemove,
- shouldAskForApprove,
- tablesToRemove,
- tablesToTruncate,
- } = await logSuggestionsAndReturn(
+ const { statementsToExecute } = await logSuggestionsAndReturn(
{
query: async (sql: string, params: any[] = []) => {
return client.prepare(sql).bind(params).all() as T[];
@@ -1048,16 +1030,7 @@ export const diffTestSchemasPushSqlite = async (
_meta!,
);
- return {
- sqlStatements: statementsToExecute,
- statements,
- columnsToRemove,
- infoToPrint,
- schemasToRemove,
- shouldAskForApprove,
- tablesToRemove,
- tablesToTruncate,
- };
+ return { sqlStatements: statementsToExecute, statements };
} else {
const { sqlStatements, statements } = await applySqliteSnapshotsDiff(
sn1,
@@ -1072,122 +1045,6 @@ export const diffTestSchemasPushSqlite = async (
}
};
-export async function diffTestSchemasPushLibSQL(
- client: Client,
- left: SqliteSchema,
- right: SqliteSchema,
- renamesArr: string[],
- cli: boolean = false,
- seedStatements: string[] = [],
-) {
- const { sqlStatements } = await applyLibSQLDiffs(left, 'push');
-
- for (const st of sqlStatements) {
- await client.execute(st);
- }
-
- for (const st of seedStatements) {
- await client.execute(st);
- }
-
- const introspectedSchema = await fromSqliteDatabase(
- {
- query: async (sql: string, params?: any[]) => {
- const res = await client.execute({ sql, args: params || [] });
- return res.rows as T[];
- },
- run: async (query: string) => {
- await client.execute(query);
- },
- },
- undefined,
- );
-
- const leftTables = Object.values(right).filter((it) => is(it, SQLiteTable)) as SQLiteTable[];
-
- const serialized2 = generateSqliteSnapshot(leftTables);
-
- const { version: v1, dialect: d1, ...rest1 } = introspectedSchema;
- const { version: v2, dialect: d2, ...rest2 } = serialized2;
-
- const sch1 = {
- version: '6',
- dialect: 'sqlite',
- id: '0',
- prevId: '0',
- ...rest1,
- } as const;
-
- const sch2 = {
- version: '6',
- dialect: 'sqlite',
- id: '0',
- prevId: '0',
- ...rest2,
- } as const;
-
- const sn1 = squashSqliteScheme(sch1, 'push');
- const sn2 = squashSqliteScheme(sch2, 'push');
-
- const renames = new Set(renamesArr);
-
- if (!cli) {
- const { sqlStatements, statements, _meta } = await applyLibSQLSnapshotsDiff(
- sn1,
- sn2,
- testTablesResolver(renames),
- testColumnsResolver(renames),
- sch1,
- sch2,
- 'push',
- );
-
- const {
- statementsToExecute,
- columnsToRemove,
- infoToPrint,
- shouldAskForApprove,
- tablesToRemove,
- tablesToTruncate,
- } = await libSqlLogSuggestionsAndReturn(
- {
- query: async (sql: string, params?: any[]) => {
- const res = await client.execute({ sql, args: params || [] });
- return res.rows as T[];
- },
- run: async (query: string) => {
- await client.execute(query);
- },
- },
- statements,
- sn1,
- sn2,
- _meta!,
- );
-
- return {
- sqlStatements: statementsToExecute,
- statements,
- columnsToRemove,
- infoToPrint,
- shouldAskForApprove,
- tablesToRemove,
- tablesToTruncate,
- };
- } else {
- const { sqlStatements, statements } = await applyLibSQLSnapshotsDiff(
- sn1,
- sn2,
- tablesResolver,
- columnsResolver,
- sch1,
- sch2,
- 'push',
- );
- return { sqlStatements, statements };
- }
-}
-
export const applySqliteDiffs = async (
sn: SqliteSchema,
action?: 'push' | undefined,
@@ -1236,54 +1093,6 @@ export const applySqliteDiffs = async (
return { sqlStatements, statements };
};
-export const applyLibSQLDiffs = async (
- sn: SqliteSchema,
- action?: 'push' | undefined,
-) => {
- const dryRun = {
- version: '6',
- dialect: 'sqlite',
- id: '0',
- prevId: '0',
- tables: {},
- enums: {},
- schemas: {},
- _meta: {
- schemas: {},
- tables: {},
- columns: {},
- },
- } as const;
-
- const tables = Object.values(sn).filter((it) => is(it, SQLiteTable)) as SQLiteTable[];
-
- const serialized1 = generateSqliteSnapshot(tables);
-
- const { version: v1, dialect: d1, ...rest1 } = serialized1;
-
- const sch1 = {
- version: '6',
- dialect: 'sqlite',
- id: '0',
- prevId: '0',
- ...rest1,
- } as const;
-
- const sn1 = squashSqliteScheme(sch1, action);
-
- const { sqlStatements, statements } = await applyLibSQLSnapshotsDiff(
- dryRun,
- sn1,
- testTablesResolver(new Set()),
- testColumnsResolver(new Set()),
- dryRun,
- sch1,
- action,
- );
-
- return { sqlStatements, statements };
-};
-
export const diffTestSchemasSqlite = async (
left: SqliteSchema,
right: SqliteSchema,
@@ -1344,66 +1153,6 @@ export const diffTestSchemasSqlite = async (
return { sqlStatements, statements };
};
-export const diffTestSchemasLibSQL = async (
- left: SqliteSchema,
- right: SqliteSchema,
- renamesArr: string[],
- cli: boolean = false,
-) => {
- const leftTables = Object.values(left).filter((it) => is(it, SQLiteTable)) as SQLiteTable[];
-
- const rightTables = Object.values(right).filter((it) => is(it, SQLiteTable)) as SQLiteTable[];
-
- const serialized1 = generateSqliteSnapshot(leftTables);
- const serialized2 = generateSqliteSnapshot(rightTables);
-
- const { version: v1, dialect: d1, ...rest1 } = serialized1;
- const { version: v2, dialect: d2, ...rest2 } = serialized2;
-
- const sch1 = {
- version: '6',
- dialect: 'sqlite',
- id: '0',
- prevId: '0',
- ...rest1,
- } as const;
-
- const sch2 = {
- version: '6',
- dialect: 'sqlite',
- id: '0',
- prevId: '0',
- ...rest2,
- } as const;
-
- const sn1 = squashSqliteScheme(sch1);
- const sn2 = squashSqliteScheme(sch2);
-
- const renames = new Set(renamesArr);
-
- if (!cli) {
- const { sqlStatements, statements } = await applyLibSQLSnapshotsDiff(
- sn1,
- sn2,
- testTablesResolver(renames),
- testColumnsResolver(renames),
- sch1,
- sch2,
- );
- return { sqlStatements, statements };
- }
-
- const { sqlStatements, statements } = await applyLibSQLSnapshotsDiff(
- sn1,
- sn2,
- tablesResolver,
- columnsResolver,
- sch1,
- sch2,
- );
- return { sqlStatements, statements };
-};
-
// --- Introspect to file helpers ---
export const introspectPgToFile = async (
diff --git a/drizzle-kit/tests/sqlite-columns.test.ts b/drizzle-kit/tests/sqlite-columns.test.ts
index 04dbb940c..8a258072a 100644
--- a/drizzle-kit/tests/sqlite-columns.test.ts
+++ b/drizzle-kit/tests/sqlite-columns.test.ts
@@ -8,7 +8,6 @@ import {
sqliteTable,
text,
} from 'drizzle-orm/sqlite-core';
-import { JsonCreateIndexStatement, JsonRecreateTableStatement } from 'src/jsonStatements';
import { expect, test } from 'vitest';
import { diffTestSchemasSqlite } from './schemaDiffer';
@@ -224,7 +223,7 @@ test('add columns #5', async (t) => {
const { statements } = await diffTestSchemasSqlite(schema1, schema2, []);
// TODO: Fix here
- expect(statements.length).toBe(1);
+ expect(statements.length).toBe(2);
expect(statements[0]).toStrictEqual({
type: 'sqlite_alter_table_add_column',
tableName: 'users',
@@ -333,38 +332,12 @@ test('add foreign key #1', async (t) => {
const { statements } = await diffTestSchemasSqlite(schema1, schema2, []);
expect(statements.length).toBe(1);
- expect(statements[0]).toStrictEqual(
- {
- type: 'recreate_table',
- columns: [{
- autoincrement: true,
- generated: undefined,
- name: 'id',
- notNull: true,
- primaryKey: true,
- type: 'integer',
- }, {
- autoincrement: false,
- generated: undefined,
- name: 'report_to',
- notNull: false,
- primaryKey: false,
- type: 'integer',
- }],
- compositePKs: [],
- referenceData: [{
- columnsFrom: ['report_to'],
- columnsTo: ['id'],
- name: 'users_report_to_users_id_fk',
- tableFrom: 'users',
- tableTo: 'users',
- onDelete: 'no action',
- onUpdate: 'no action',
- }],
- tableName: 'users',
- uniqueConstraints: [],
- } as JsonRecreateTableStatement,
- );
+ expect(statements[0]).toStrictEqual({
+ type: 'create_reference',
+ tableName: 'users',
+ schema: '',
+ data: 'users_report_to_users_id_fk;users;report_to;users;id;no action;no action',
+ });
});
test('add foreign key #2', async (t) => {
@@ -398,35 +371,11 @@ test('add foreign key #2', async (t) => {
expect(statements.length).toBe(1);
expect(statements[0]).toStrictEqual({
- type: 'recreate_table',
- columns: [{
- autoincrement: true,
- generated: undefined,
- name: 'id',
- notNull: true,
- primaryKey: true,
- type: 'integer',
- }, {
- autoincrement: false,
- generated: undefined,
- name: 'report_to',
- notNull: false,
- primaryKey: false,
- type: 'integer',
- }],
- compositePKs: [],
- referenceData: [{
- columnsFrom: ['report_to'],
- columnsTo: ['id'],
- name: 'reportee_fk',
- tableFrom: 'users',
- tableTo: 'users',
- onDelete: 'no action',
- onUpdate: 'no action',
- }],
+ type: 'create_reference',
tableName: 'users',
- uniqueConstraints: [],
- } as JsonRecreateTableStatement);
+ schema: '',
+ data: 'reportee_fk;users;report_to;users;id;no action;no action',
+ });
});
test('alter column change name #1', async (t) => {
@@ -564,26 +513,9 @@ test('alter table add composite pk', async (t) => {
expect(statements.length).toBe(1);
expect(statements[0]).toStrictEqual({
- type: 'recreate_table',
- columns: [{
- autoincrement: false,
- generated: undefined,
- name: 'id1',
- notNull: false,
- primaryKey: false,
- type: 'integer',
- }, {
- autoincrement: false,
- generated: undefined,
- name: 'id2',
- notNull: false,
- primaryKey: false,
- type: 'integer',
- }],
- compositePKs: [['id1', 'id2']],
- referenceData: [],
+ type: 'create_composite_pk',
tableName: 'table',
- uniqueConstraints: [],
+ data: 'id1,id2',
});
});
@@ -608,19 +540,16 @@ test('alter column drop not null', async (t) => {
expect(statements.length).toBe(1);
expect(statements[0]).toStrictEqual({
- type: 'recreate_table',
- columns: [{
- autoincrement: false,
- generated: undefined,
- name: 'name',
- notNull: false,
- primaryKey: false,
- type: 'text',
- }],
- compositePKs: [],
- referenceData: [],
+ type: 'alter_table_alter_column_drop_notnull',
tableName: 'table',
- uniqueConstraints: [],
+ columnName: 'name',
+ schema: '',
+ newDataType: 'text',
+ columnDefault: undefined,
+ columnOnUpdate: undefined,
+ columnNotNull: false,
+ columnAutoIncrement: false,
+ columnPk: false,
});
});
@@ -645,19 +574,16 @@ test('alter column add not null', async (t) => {
expect(statements.length).toBe(1);
expect(statements[0]).toStrictEqual({
- type: 'recreate_table',
- columns: [{
- autoincrement: false,
- generated: undefined,
- name: 'name',
- notNull: true,
- primaryKey: false,
- type: 'text',
- }],
- compositePKs: [],
- referenceData: [],
+ type: 'alter_table_alter_column_set_notnull',
tableName: 'table',
- uniqueConstraints: [],
+ columnName: 'name',
+ schema: '',
+ newDataType: 'text',
+ columnDefault: undefined,
+ columnOnUpdate: undefined,
+ columnNotNull: true,
+ columnAutoIncrement: false,
+ columnPk: false,
});
});
@@ -682,20 +608,16 @@ test('alter column add default', async (t) => {
expect(statements.length).toBe(1);
expect(statements[0]).toStrictEqual({
- type: 'recreate_table',
- columns: [{
- autoincrement: false,
- generated: undefined,
- name: 'name',
- notNull: false,
- primaryKey: false,
- type: 'text',
- default: "'dan'",
- }],
- compositePKs: [],
- referenceData: [],
+ type: 'alter_table_alter_column_set_default',
tableName: 'table',
- uniqueConstraints: [],
+ columnName: 'name',
+ schema: '',
+ newDataType: 'text',
+ columnNotNull: false,
+ columnOnUpdate: undefined,
+ columnAutoIncrement: false,
+ newDefaultValue: "'dan'",
+ columnPk: false,
});
});
@@ -720,19 +642,16 @@ test('alter column drop default', async (t) => {
expect(statements.length).toBe(1);
expect(statements[0]).toStrictEqual({
- type: 'recreate_table',
- columns: [{
- autoincrement: false,
- generated: undefined,
- name: 'name',
- notNull: false,
- primaryKey: false,
- type: 'text',
- }],
- compositePKs: [],
- referenceData: [],
+ type: 'alter_table_alter_column_drop_default',
tableName: 'table',
- uniqueConstraints: [],
+ columnName: 'name',
+ schema: '',
+ newDataType: 'text',
+ columnNotNull: false,
+ columnOnUpdate: undefined,
+ columnDefault: undefined,
+ columnAutoIncrement: false,
+ columnPk: false,
});
});
@@ -755,84 +674,32 @@ test('alter column add default not null', async (t) => {
[],
);
- expect(statements.length).toBe(1);
+ expect(statements.length).toBe(2);
expect(statements[0]).toStrictEqual({
- type: 'recreate_table',
- columns: [{
- autoincrement: false,
- generated: undefined,
- name: 'name',
- notNull: true,
- primaryKey: false,
- type: 'text',
- default: "'dan'",
- }],
- compositePKs: [],
- referenceData: [],
+ columnAutoIncrement: false,
+ columnName: 'name',
+ columnNotNull: true,
+ columnOnUpdate: undefined,
+ columnPk: false,
+ newDataType: 'text',
+ newDefaultValue: "'dan'",
+ schema: '',
tableName: 'table',
- uniqueConstraints: [],
+ type: 'alter_table_alter_column_set_default',
});
-});
-test('alter column add default not null with indexes', async (t) => {
- const from = {
- users: sqliteTable('table', {
- name: text('name'),
- }, (table) => ({
- someIndex: index('index_name').on(table.name),
- })),
- };
-
- const to = {
- users: sqliteTable('table', {
- name: text('name').notNull().default('dan'),
- }, (table) => ({
- someIndex: index('index_name').on(table.name),
- })),
- };
-
- const { statements, sqlStatements } = await diffTestSchemasSqlite(
- from,
- to,
- [],
- );
-
- expect(statements.length).toBe(2);
expect(statements[0]).toStrictEqual({
- type: 'recreate_table',
- columns: [{
- autoincrement: false,
- generated: undefined,
- name: 'name',
- notNull: true,
- primaryKey: false,
- type: 'text',
- default: "'dan'",
- }],
- compositePKs: [],
- referenceData: [],
- tableName: 'table',
- uniqueConstraints: [],
- });
- expect(statements[1]).toStrictEqual({
- data: 'index_name;name;false;',
+ columnAutoIncrement: false,
+ columnName: 'name',
+ columnNotNull: true,
+ columnOnUpdate: undefined,
+ columnPk: false,
+ newDataType: 'text',
+ newDefaultValue: "'dan'",
schema: '',
tableName: 'table',
- type: 'create_index',
- internal: undefined,
+ type: 'alter_table_alter_column_set_default',
});
- expect(sqlStatements.length).toBe(7);
- expect(sqlStatements[0]).toBe(`PRAGMA foreign_keys=OFF;`);
- expect(sqlStatements[1]).toBe(`CREATE TABLE \`__new_table\` (
-\t\`name\` text DEFAULT 'dan' NOT NULL
-);\n`);
- expect(sqlStatements[2]).toBe(
- `INSERT INTO \`__new_table\`("name") SELECT "name" FROM \`table\`;`,
- );
- expect(sqlStatements[3]).toBe(`DROP TABLE \`table\`;`);
- expect(sqlStatements[4]).toBe(`ALTER TABLE \`__new_table\` RENAME TO \`table\`;`);
- expect(sqlStatements[5]).toBe(`PRAGMA foreign_keys=ON;`);
- expect(sqlStatements[6]).toBe(`CREATE INDEX \`index_name\` ON \`table\` (\`name\`);`);
});
test('alter column drop default not null', async (t) => {
@@ -854,162 +721,30 @@ test('alter column drop default not null', async (t) => {
[],
);
- expect(statements.length).toBe(1);
+ expect(statements.length).toBe(2);
expect(statements[0]).toStrictEqual({
- type: 'recreate_table',
- columns: [{
- autoincrement: false,
- generated: undefined,
- name: 'name',
- notNull: false,
- primaryKey: false,
- type: 'text',
- }],
- compositePKs: [],
- referenceData: [],
+ columnAutoIncrement: false,
+ columnDefault: undefined,
+ columnName: 'name',
+ columnNotNull: false,
+ columnOnUpdate: undefined,
+ columnPk: false,
+ newDataType: 'text',
+ schema: '',
tableName: 'table',
- uniqueConstraints: [],
+ type: 'alter_table_alter_column_drop_default',
});
- expect(sqlStatements.length).toBe(6);
- expect(sqlStatements[0]).toBe(`PRAGMA foreign_keys=OFF;`);
- expect(sqlStatements[1]).toBe(`CREATE TABLE \`__new_table\` (
-\t\`name\` text
-);\n`);
- expect(sqlStatements[2]).toBe(
- `INSERT INTO \`__new_table\`("name") SELECT "name" FROM \`table\`;`,
- );
- expect(sqlStatements[3]).toBe(`DROP TABLE \`table\`;`);
- expect(sqlStatements[4]).toBe(`ALTER TABLE \`__new_table\` RENAME TO \`table\`;`);
- expect(sqlStatements[5]).toBe(`PRAGMA foreign_keys=ON;`);
-});
-test('alter column drop generated', async (t) => {
- const from = {
- users: sqliteTable('table', {
- id: int('id').primaryKey().notNull(),
- name: text('name').generatedAlwaysAs('drizzle is the best').notNull(),
- }),
- };
-
- const to = {
- users: sqliteTable('table', {
- id: int('id').primaryKey().notNull(),
- name: text('name').notNull(),
- }),
- };
-
- const { statements, sqlStatements } = await diffTestSchemasSqlite(
- from,
- to,
- [],
- );
-
- expect(statements.length).toBe(1);
expect(statements[0]).toStrictEqual({
columnAutoIncrement: false,
columnDefault: undefined,
- columnGenerated: undefined,
columnName: 'name',
- columnNotNull: true,
+ columnNotNull: false,
columnOnUpdate: undefined,
columnPk: false,
newDataType: 'text',
schema: '',
tableName: 'table',
- type: 'alter_table_alter_column_drop_generated',
+ type: 'alter_table_alter_column_drop_default',
});
-
- expect(sqlStatements.length).toBe(2);
- expect(sqlStatements[0]).toBe(`ALTER TABLE \`table\` DROP COLUMN \`name\`;`);
- expect(sqlStatements[1]).toBe(`ALTER TABLE \`table\` ADD \`name\` text NOT NULL;`);
-});
-
-test('recreate table with nested references', async (t) => {
- let users = sqliteTable('users', {
- id: int('id').primaryKey({ autoIncrement: true }),
- name: text('name'),
- age: integer('age'),
- });
- let subscriptions = sqliteTable('subscriptions', {
- id: int('id').primaryKey({ autoIncrement: true }),
- userId: integer('user_id').references(() => users.id),
- customerId: text('customer_id'),
- });
- const schema1 = {
- users: users,
- subscriptions: subscriptions,
- subscriptionMetadata: sqliteTable('subscriptions_metadata', {
- id: int('id').primaryKey({ autoIncrement: true }),
- subscriptionId: text('subscription_id').references(() => subscriptions.id),
- }),
- };
-
- users = sqliteTable('users', {
- id: int('id').primaryKey({ autoIncrement: false }),
- name: text('name'),
- age: integer('age'),
- });
- const schema2 = {
- users: users,
- subscriptions: subscriptions,
- subscriptionMetadata: sqliteTable('subscriptions_metadata', {
- id: int('id').primaryKey({ autoIncrement: true }),
- subscriptionId: text('subscription_id').references(() => subscriptions.id),
- }),
- };
-
- const { statements, sqlStatements } = await diffTestSchemasSqlite(
- schema1,
- schema2,
- [],
- );
-
- expect(statements.length).toBe(1);
- expect(statements[0]).toStrictEqual({
- columns: [
- {
- autoincrement: false,
- generated: undefined,
- name: 'id',
- notNull: true,
- primaryKey: true,
- type: 'integer',
- },
- {
- autoincrement: false,
- generated: undefined,
- name: 'name',
- notNull: false,
- primaryKey: false,
- type: 'text',
- },
- {
- autoincrement: false,
- generated: undefined,
- name: 'age',
- notNull: false,
- primaryKey: false,
- type: 'integer',
- },
- ],
- compositePKs: [],
- referenceData: [],
- tableName: 'users',
- type: 'recreate_table',
- uniqueConstraints: [],
- });
-
- expect(sqlStatements.length).toBe(6);
- expect(sqlStatements[0]).toBe(`PRAGMA foreign_keys=OFF;`);
- expect(sqlStatements[1]).toBe(`CREATE TABLE \`__new_users\` (
-\t\`id\` integer PRIMARY KEY NOT NULL,
-\t\`name\` text,
-\t\`age\` integer
-);\n`);
- expect(sqlStatements[2]).toBe(
- `INSERT INTO \`__new_users\`("id", "name", "age") SELECT "id", "name", "age" FROM \`users\`;`,
- );
- expect(sqlStatements[3]).toBe(`DROP TABLE \`users\`;`);
- expect(sqlStatements[4]).toBe(`ALTER TABLE \`__new_users\` RENAME TO \`users\`;`);
- expect(sqlStatements[5]).toBe(`PRAGMA foreign_keys=ON;`);
});
diff --git a/drizzle-kit/tests/sqlite-tables.test.ts b/drizzle-kit/tests/sqlite-tables.test.ts
index aa44908ba..d7781f150 100644
--- a/drizzle-kit/tests/sqlite-tables.test.ts
+++ b/drizzle-kit/tests/sqlite-tables.test.ts
@@ -162,13 +162,6 @@ test('add table #7', async () => {
expect(statements.length).toBe(2);
expect(statements[0]).toStrictEqual({
- type: 'rename_table',
- tableNameFrom: 'users1',
- tableNameTo: 'users2',
- fromSchema: undefined,
- toSchema: undefined,
- });
- expect(statements[1]).toStrictEqual({
type: 'sqlite_create_table',
tableName: 'users',
columns: [],
@@ -176,6 +169,13 @@ test('add table #7', async () => {
uniqueConstraints: [],
referenceData: [],
});
+ expect(statements[1]).toStrictEqual({
+ type: 'rename_table',
+ tableNameFrom: 'users1',
+ tableNameTo: 'users2',
+ fromSchema: undefined,
+ toSchema: undefined,
+ });
});
test('add table #8', async () => {
diff --git a/drizzle-kit/tests/statements-combiner/libsql-statements-combiner.test.ts b/drizzle-kit/tests/statements-combiner/libsql-statements-combiner.test.ts
deleted file mode 100644
index 47447decd..000000000
--- a/drizzle-kit/tests/statements-combiner/libsql-statements-combiner.test.ts
+++ /dev/null
@@ -1,1749 +0,0 @@
-import { JsonAddColumnStatement, JsonSqliteAddColumnStatement, JsonStatement } from 'src/jsonStatements';
-import { SQLiteSchemaSquashed } from 'src/serializer/sqliteSchema';
-import { SQLiteAlterTableAddColumnConvertor } from 'src/sqlgenerator';
-import { libSQLCombineStatements } from 'src/statementCombiner';
-import { expect, test } from 'vitest';
-
-/**
- * ! before:
- *
- * user: {
- * id INT;
- * first_name INT;
- * iq INT;
- * PRIMARY KEY (id, iq)
- * INDEXES: {
- * UNIQUE id;
- * }
- * }
- *
- * ! after:
- *
- * new_user: {
- * id INT;
- * first_name INT;
- * iq INT;
- * PRIMARY KEY (id, iq)
- * INDEXES: {}
- * }
- *
- * rename table and drop unique index
- * expect to get "rename_table" statement and then "recreate_table"
- */
-test(`rename table and drop index`, async (t) => {
- const statements: JsonStatement[] = [
- {
- type: 'rename_table',
- fromSchema: '',
- toSchema: '',
- tableNameFrom: 'user',
- tableNameTo: 'new_user',
- },
- {
- type: 'drop_index',
- tableName: 'new_user',
- data: 'user_first_name_unique;first_name;true;',
- schema: '',
- },
- ];
- const json1: SQLiteSchemaSquashed = {
- version: '6',
- dialect: 'sqlite',
- tables: {
- user: {
- name: 'user',
- columns: {
- id: {
- name: 'id',
- type: 'int',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- first_name: {
- name: 'first_name',
- type: 'int',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- iq: {
- name: 'iq',
- type: 'int',
- primaryKey: false,
- notNull: true,
- autoincrement: false,
- },
- },
- indexes: {
- user_first_name_unique: 'user_first_name_unique;first_name;true;',
- },
- foreignKeys: {},
- compositePrimaryKeys: {
- user_id_iq_pk: 'id,iq',
- },
- uniqueConstraints: {},
- },
- },
- enums: {},
- };
- const json2: SQLiteSchemaSquashed = {
- version: '6',
- dialect: 'sqlite',
- tables: {
- new_user: {
- name: 'new_user',
- columns: {
- id: {
- name: 'id',
- type: 'int',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- first_name: {
- name: 'first_name',
- type: 'int',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- iq: {
- name: 'iq',
- type: 'int',
- primaryKey: false,
- notNull: true,
- autoincrement: false,
- },
- },
- indexes: {},
- foreignKeys: {},
- compositePrimaryKeys: {
- new_user_id_iq_pk: 'id,iq',
- },
- uniqueConstraints: {},
- },
- },
- enums: {},
- };
-
- const newJsonStatements = [
- {
- type: 'rename_table',
- fromSchema: '',
- toSchema: '',
- tableNameFrom: 'user',
- tableNameTo: 'new_user',
- },
- {
- type: 'drop_index',
- tableName: 'new_user',
- data: 'user_first_name_unique;first_name;true;',
- schema: '',
- },
- ];
- expect(libSQLCombineStatements(statements, json2)).toStrictEqual(
- newJsonStatements,
- );
-});
-
-/**
- * ! before:
- *
- * autoincrement1: {
- * id INT PRIMARY KEY;
- * }
- *
- * autoincrement2: {
- * id INT PRIMARY KEY AUTOINCREMENT;
- * }
- *
- * dropNotNull: {
- * id INT NOT NULL;
- * }
- *
- * ! after:
- *
- * autoincrement1: {
- * id INT PRIMARY KEY AUTOINCREMENT;
- * }
- *
- * autoincrement2: {
- * id INT PRI {
- const statements: JsonStatement[] = [
- {
- type: 'alter_table_alter_column_set_autoincrement',
- tableName: 'autoincrement1',
- columnName: 'id',
- schema: '',
- newDataType: 'int',
- columnDefault: undefined,
- columnOnUpdate: undefined,
- columnNotNull: true,
- columnAutoIncrement: true,
- columnPk: true,
- } as unknown as JsonStatement,
- {
- type: 'alter_table_alter_column_drop_autoincrement',
- tableName: 'autoincrement2',
- columnName: 'id',
- schema: '',
- newDataType: 'int',
- columnDefault: undefined,
- columnOnUpdate: undefined,
- columnNotNull: true,
- columnAutoIncrement: false,
- columnPk: true,
- } as unknown as JsonStatement,
- {
- type: 'alter_table_alter_column_drop_notnull',
- tableName: 'dropNotNull',
- columnName: 'id',
- schema: '',
- newDataType: 'int',
- columnDefault: undefined,
- columnOnUpdate: undefined,
- columnNotNull: false,
- columnAutoIncrement: false,
- columnPk: false,
- } as unknown as JsonStatement,
- ];
- const json1: SQLiteSchemaSquashed = {
- version: '6',
- dialect: 'sqlite',
- tables: {
- autoincrement1: {
- name: 'autoincrement1',
- columns: {
- id: {
- name: 'id',
- type: 'int',
- primaryKey: true,
- notNull: true,
- autoincrement: false,
- },
- },
- indexes: {},
- foreignKeys: {},
- compositePrimaryKeys: {},
- uniqueConstraints: {},
- },
- autoincrement2: {
- name: 'autoincrement2',
- columns: {
- id: {
- name: 'id',
- type: 'int',
- primaryKey: true,
- notNull: false,
- autoincrement: true,
- },
- },
- indexes: {},
- foreignKeys: {},
- compositePrimaryKeys: {},
- uniqueConstraints: {},
- },
- dropNotNull: {
- name: 'dropNotNull',
- columns: {
- id: {
- name: 'id',
- type: 'int',
- primaryKey: false,
- notNull: true,
- autoincrement: false,
- },
- },
- indexes: {},
- foreignKeys: {},
- compositePrimaryKeys: {},
- uniqueConstraints: {},
- },
- },
- enums: {},
- };
- const json2: SQLiteSchemaSquashed = {
- version: '6',
- dialect: 'sqlite',
- tables: {
- autoincrement1: {
- name: 'autoincrement1',
- columns: {
- id: {
- name: 'id',
- type: 'int',
- primaryKey: true,
- notNull: true,
- autoincrement: true,
- },
- },
- indexes: {},
- foreignKeys: {},
- compositePrimaryKeys: {},
- uniqueConstraints: {},
- },
- autoincrement2: {
- name: 'autoincrement2',
- columns: {
- id: {
- name: 'id',
- type: 'int',
- primaryKey: true,
- notNull: true,
- autoincrement: false,
- },
- },
- indexes: {},
- foreignKeys: {},
- compositePrimaryKeys: {},
- uniqueConstraints: {},
- },
- dropNotNull: {
- name: 'dropNotNull',
- columns: {
- id: {
- name: 'id',
- type: 'int',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- },
- indexes: {},
- foreignKeys: {},
- compositePrimaryKeys: {},
- uniqueConstraints: {},
- },
- },
- enums: {},
- };
-
- const newJsonStatements = [
- {
- type: 'recreate_table',
- tableName: 'autoincrement1',
- columns: [
- {
- name: 'id',
- type: 'int',
- primaryKey: true,
- notNull: true,
- autoincrement: true,
- },
- ],
- compositePKs: [],
- referenceData: [],
- uniqueConstraints: [],
- },
- {
- type: 'recreate_table',
- tableName: 'autoincrement2',
- columns: [
- {
- name: 'id',
- type: 'int',
- primaryKey: true,
- notNull: true,
- autoincrement: false,
- },
- ],
- compositePKs: [],
- referenceData: [],
- uniqueConstraints: [],
- },
- {
- type: 'alter_table_alter_column_drop_notnull',
- tableName: 'dropNotNull',
- columnName: 'id',
- schema: '',
- newDataType: 'int',
- columnDefault: undefined,
- columnOnUpdate: undefined,
- columnNotNull: false,
- columnAutoIncrement: false,
- columnPk: false,
- },
- ];
- expect(libSQLCombineStatements(statements, json2)).toStrictEqual(
- newJsonStatements,
- );
-});
-
-/**
- * ! before:
- *
- * pk1: {
- * id INT;
- * }
- *
- * pk2: {
- * id INT PRIMARY KEY;
- * }
- *
- * ref_table: {
- * id INT;
- * }
- *
- * create_reference: {
- * id INT;
- * }
- *
- * ! after:
- *
- * pk1: {
- * id INT PRIMARY KEY;
- * }
- *
- * pk2: {
- * id INT;
- * }
- *
- * ref_table: {
- * id INT;
- * }
- *
- * create_reference: {
- * id INT -> ref_table INT;
- * }
- *
- * drop primary key for pk2
- * set primary key for pk1
- * "create_reference" reference on "ref_table"
- *
- * expect to:
- * - "recreate_table" statement for pk1
- * - "recreate_table" statement for pk2
- * - "create_reference" statement for create_reference
- */
-test(`drop and set primary key. create reference`, async (t) => {
- const statements: JsonStatement[] = [
- {
- type: 'alter_table_alter_column_set_pk',
- tableName: 'pk1',
- schema: '',
- columnName: 'id',
- },
- {
- type: 'alter_table_alter_column_set_notnull',
- tableName: 'pk1',
- columnName: 'id',
- schema: '',
- newDataType: 'int',
- columnDefault: undefined,
- columnOnUpdate: undefined,
- columnNotNull: true,
- columnAutoIncrement: false,
- columnPk: true,
- } as unknown as JsonStatement,
- {
- type: 'alter_table_alter_column_drop_pk',
- tableName: 'pk2',
- columnName: 'id',
- schema: '',
- },
- {
- type: 'alter_table_alter_column_drop_notnull',
- tableName: 'pk2',
- columnName: 'id',
- schema: '',
- newDataType: 'int',
- columnDefault: undefined,
- columnOnUpdate: undefined,
- columnNotNull: false,
- columnAutoIncrement: false,
- columnPk: false,
- } as unknown as JsonStatement,
- {
- type: 'create_reference',
- tableName: 'create_reference',
- data: 'create_reference_id_ref_table_id_fk;create_reference;id;ref_table;id;no action;no action',
- schema: '',
- columnNotNull: false,
- columnDefault: undefined,
- columnType: 'int',
- },
- ];
- const json1: SQLiteSchemaSquashed = {
- version: '6',
- dialect: 'sqlite',
- tables: {
- create_reference: {
- name: 'create_reference',
- columns: {
- id: {
- name: 'id',
- type: 'int',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- },
- indexes: {},
- foreignKeys: {},
- compositePrimaryKeys: {},
- uniqueConstraints: {},
- },
- pk1: {
- name: 'pk1',
- columns: {
- id: {
- name: 'id',
- type: 'int',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- },
- indexes: {},
- foreignKeys: {},
- compositePrimaryKeys: {},
- uniqueConstraints: {},
- },
- pk2: {
- name: 'pk2',
- columns: {
- id: {
- name: 'id',
- type: 'int',
- primaryKey: true,
- notNull: true,
- autoincrement: false,
- },
- },
- indexes: {},
- foreignKeys: {},
- compositePrimaryKeys: {},
- uniqueConstraints: {},
- },
- ref_table: {
- name: 'ref_table',
- columns: {
- id: {
- name: 'id',
- type: 'int',
- primaryKey: true,
- notNull: true,
- autoincrement: false,
- },
- },
- indexes: {},
- foreignKeys: {},
- compositePrimaryKeys: {},
- uniqueConstraints: {},
- },
- },
- enums: {},
- };
- const json2: SQLiteSchemaSquashed = {
- version: '6',
- dialect: 'sqlite',
- tables: {
- create_reference: {
- name: 'create_reference',
- columns: {
- id: {
- name: 'id',
- type: 'int',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- },
- indexes: {},
- foreignKeys: {
- create_reference_id_ref_table_id_fk:
- 'create_reference_id_ref_table_id_fk;create_reference;id;ref_table;id;no action;no action',
- },
- compositePrimaryKeys: {},
- uniqueConstraints: {},
- },
- pk1: {
- name: 'pk1',
- columns: {
- id: {
- name: 'id',
- type: 'int',
- primaryKey: true,
- notNull: true,
- autoincrement: false,
- },
- },
- indexes: {},
- foreignKeys: {},
- compositePrimaryKeys: {},
- uniqueConstraints: {},
- },
- pk2: {
- name: 'pk2',
- columns: {
- id: {
- name: 'id',
- type: 'int',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- },
- indexes: {},
- foreignKeys: {},
- compositePrimaryKeys: {},
- uniqueConstraints: {},
- },
- ref_table: {
- name: 'ref_table',
- columns: {
- id: {
- name: 'id',
- type: 'int',
- primaryKey: true,
- notNull: true,
- autoincrement: false,
- },
- },
- indexes: {},
- foreignKeys: {},
- compositePrimaryKeys: {},
- uniqueConstraints: {},
- },
- },
- enums: {},
- };
-
- const newJsonStatements = [
- {
- type: 'recreate_table',
- tableName: 'pk1',
- columns: [
- {
- name: 'id',
- type: 'int',
- primaryKey: true,
- notNull: true,
- autoincrement: false,
- },
- ],
- compositePKs: [],
- referenceData: [],
- uniqueConstraints: [],
- },
- {
- type: 'recreate_table',
- tableName: 'pk2',
- columns: [
- {
- name: 'id',
- type: 'int',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- ],
- compositePKs: [],
- referenceData: [],
- uniqueConstraints: [],
- },
- {
- type: 'create_reference',
- tableName: 'create_reference',
- data: 'create_reference_id_ref_table_id_fk;create_reference;id;ref_table;id;no action;no action',
- schema: '',
- columnNotNull: false,
- columnDefault: undefined,
- columnType: 'int',
- },
- ];
- expect(libSQLCombineStatements(statements, json2)).toStrictEqual(
- newJsonStatements,
- );
-});
-
-/**
- * ! before:
- *
- * fk1: {
- * fk_id INT;
- * fk_id1 INT;
- * }
- *
- * fk2: {
- * fk2_id INT; -> composite reference on ref_table id INT
- * fk2_id1 INT; -> composite reference on ref_table id1 INT
- * }
- *
- * ref_table: {
- * id INT;
- * id1 INT;
- * }
- *
- * ! after:
- *
- * fk1: {
- * fk_id INT; -> composite reference on ref_table id INT
- * fk_id1 INT; -> composite reference on ref_table id1 INT
- * }
- *
- * fk2: {
- * fk2_id INT;
- * fk2_id1 INT;
- * }
- *
- * ref_table: {
- * id INT;
- * id1 INT;
- * }
- *
- * set multi column reference for fk1
- * drop multi column reference for fk2
- *
- * expect to:
- * - "recreate_table" statement for fk1
- * - "recreate_table" statement for fk2
- */
-test(`set and drop multiple columns reference`, async (t) => {
- const statements: JsonStatement[] = [
- {
- type: 'delete_reference',
- tableName: 'fk1',
- data: 'fk1_fk_id_fk_id1_ref_table_id_id1_fk;fk1;fk_id,fk_id1;ref_table;id,id1;no action;no action',
- schema: '',
- isMulticolumn: true,
- },
- {
- type: 'create_reference',
- tableName: 'fk2',
- data: 'fk2_fk2_id_fk2_id1_ref_table_id_id1_fk;fk2;fk2_id,fk2_id1;ref_table;id,id1;no action;no action',
- schema: '',
- isMulticolumn: true,
- },
- ];
- const json1: SQLiteSchemaSquashed = {
- version: '6',
- dialect: 'sqlite',
- tables: {
- fk1: {
- name: 'fk1',
- columns: {
- fk_id: {
- name: 'fk_id',
- type: 'int',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- fk_id1: {
- name: 'fk_id1',
- type: 'int',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- },
- indexes: {},
- foreignKeys: {
- fk1_fk_id_fk_id1_ref_table_id_id1_fk:
- 'fk1_fk_id_fk_id1_ref_table_id_id1_fk;fk1;fk_id,fk_id1;ref_table;id,id1;no action;no action',
- },
- compositePrimaryKeys: {},
- uniqueConstraints: {},
- },
- fk2: {
- name: 'fk2',
- columns: {
- fk2_id: {
- name: 'fk2_id',
- type: 'int',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- fk2_id1: {
- name: 'fk2_id1',
- type: 'int',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- },
- indexes: {},
- foreignKeys: {},
- compositePrimaryKeys: {},
- uniqueConstraints: {},
- },
- ref_table: {
- name: 'ref_table',
- columns: {
- id: {
- name: 'id',
- type: 'int',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- id1: {
- name: 'id1',
- type: 'int',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- },
- indexes: {},
- foreignKeys: {},
- compositePrimaryKeys: {},
- uniqueConstraints: {},
- },
- },
- enums: {},
- };
- const json2: SQLiteSchemaSquashed = {
- version: '6',
- dialect: 'sqlite',
- tables: {
- fk1: {
- name: 'fk1',
- columns: {
- fk_id: {
- name: 'fk_id',
- type: 'int',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- fk_id1: {
- name: 'fk_id1',
- type: 'int',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- },
- indexes: {},
- foreignKeys: {},
- compositePrimaryKeys: {},
- uniqueConstraints: {},
- },
- fk2: {
- name: 'fk2',
- columns: {
- fk2_id: {
- name: 'fk2_id',
- type: 'int',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- fk2_id1: {
- name: 'fk2_id1',
- type: 'int',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- },
- indexes: {},
- foreignKeys: {
- fk2_fk2_id_fk2_id1_ref_table_id_id1_fk:
- 'fk2_fk2_id_fk2_id1_ref_table_id_id1_fk;fk2;fk2_id,fk2_id1;ref_table;id,id1;no action;no action',
- },
- compositePrimaryKeys: {},
- uniqueConstraints: {},
- },
- ref_table: {
- name: 'ref_table',
- columns: {
- id: {
- name: 'id',
- type: 'int',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- id1: {
- name: 'id1',
- type: 'int',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- },
- indexes: {},
- foreignKeys: {},
- compositePrimaryKeys: {},
- uniqueConstraints: {},
- },
- },
- enums: {},
- };
-
- const newJsonStatements = [
- {
- type: 'recreate_table',
- tableName: 'fk1',
- columns: [
- {
- name: 'fk_id',
- type: 'int',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- {
- name: 'fk_id1',
- type: 'int',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- ],
- compositePKs: [],
- referenceData: [],
- uniqueConstraints: [],
- },
- {
- type: 'recreate_table',
- tableName: 'fk2',
- columns: [
- {
- name: 'fk2_id',
- type: 'int',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- {
- name: 'fk2_id1',
- type: 'int',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- ],
- compositePKs: [],
- referenceData: [
- {
- name: 'fk2_fk2_id_fk2_id1_ref_table_id_id1_fk',
- tableFrom: 'fk2',
- tableTo: 'ref_table',
- columnsFrom: ['fk2_id', 'fk2_id1'],
- columnsTo: ['id', 'id1'],
- onDelete: 'no action',
- onUpdate: 'no action',
- },
- ],
- uniqueConstraints: [],
- },
- ];
- expect(libSQLCombineStatements(statements, json2)).toStrictEqual(
- newJsonStatements,
- );
-});
-
-/**
- * ! before:
- *
- * pk: {
- * pk TEXT PRIMARY KEY;
- * }
- *
- * simple: {
- * simple TEXT;
- * }
- *
- * unique: {
- * unique INT UNIQUE;
- * }
- *
- * ! after:
- *
- * pk: {
- * pk INT PRIMARY KEY;
- * }
- *
- * simple: {
- * simple INT;
- * }
- *
- * unique: {
- * unique TEXT UNIQUE;
- * }
- *
- * set new type for primary key column
- * set new type for unique column
- * set new type for column without pk or unique
- *
- * expect to:
- * - "recreate_table" statement for pk
- * - "recreate_table" statement for unique
- * - "alter_table_alter_column_set_type" statement for simple
- * - "create_index" statement for unique
- */
-test(`set new type for primary key, unique and normal column`, async (t) => {
- const statements: JsonStatement[] = [
- {
- type: 'alter_table_alter_column_set_type',
- tableName: 'pk',
- columnName: 'pk',
- newDataType: 'int',
- oldDataType: 'text',
- schema: '',
- columnDefault: undefined,
- columnOnUpdate: undefined,
- columnNotNull: true,
- columnAutoIncrement: false,
- columnPk: true,
- } as unknown as JsonStatement,
- {
- type: 'alter_table_alter_column_set_type',
- tableName: 'simple',
- columnName: 'simple',
- newDataType: 'int',
- oldDataType: 'text',
- schema: '',
- columnDefault: undefined,
- columnOnUpdate: undefined,
- columnNotNull: false,
- columnAutoIncrement: false,
- columnPk: false,
- } as unknown as JsonStatement,
- {
- type: 'alter_table_alter_column_set_type',
- tableName: 'unique',
- columnName: 'unique',
- newDataType: 'text',
- oldDataType: 'int',
- schema: '',
- columnDefault: undefined,
- columnOnUpdate: undefined,
- columnNotNull: false,
- columnAutoIncrement: false,
- columnPk: false,
- } as unknown as JsonStatement,
- ];
- const json1: SQLiteSchemaSquashed = {
- version: '6',
- dialect: 'sqlite',
- tables: {
- pk: {
- name: 'pk',
- columns: {
- pk: {
- name: 'pk',
- type: 'text',
- primaryKey: true,
- notNull: true,
- autoincrement: false,
- },
- },
- indexes: {},
- foreignKeys: {},
- compositePrimaryKeys: {},
- uniqueConstraints: {},
- },
- simple: {
- name: 'simple',
- columns: {
- simple: {
- name: 'simple',
- type: 'text',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- },
- indexes: {},
- foreignKeys: {},
- compositePrimaryKeys: {},
- uniqueConstraints: {},
- },
- unique: {
- name: 'unique',
- columns: {
- unique: {
- name: 'unique',
- type: 'int',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- },
- indexes: {
- unique_unique_unique: 'unique_unique_unique;unique;true;',
- },
- foreignKeys: {},
- compositePrimaryKeys: {},
- uniqueConstraints: {},
- },
- },
- enums: {},
- };
- const json2: SQLiteSchemaSquashed = {
- version: '6',
- dialect: 'sqlite',
- tables: {
- pk: {
- name: 'pk',
- columns: {
- pk: {
- name: 'pk',
- type: 'int',
- primaryKey: true,
- notNull: true,
- autoincrement: false,
- },
- },
- indexes: {},
- foreignKeys: {},
- compositePrimaryKeys: {},
- uniqueConstraints: {},
- },
- simple: {
- name: 'simple',
- columns: {
- simple: {
- name: 'simple',
- type: 'int',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- },
- indexes: {},
- foreignKeys: {},
- compositePrimaryKeys: {},
- uniqueConstraints: {},
- },
- unique: {
- name: 'unique',
- columns: {
- unique: {
- name: 'unique',
- type: 'text',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- },
- indexes: {
- unique_unique_unique: 'unique_unique_unique;unique;true;',
- },
- foreignKeys: {},
- compositePrimaryKeys: {},
- uniqueConstraints: {},
- },
- },
- enums: {},
- };
-
- const newJsonStatements = [
- {
- type: 'recreate_table',
- tableName: 'pk',
- columns: [
- {
- name: 'pk',
- type: 'int',
- primaryKey: true,
- notNull: true,
- autoincrement: false,
- },
- ],
- compositePKs: [],
- referenceData: [],
- uniqueConstraints: [],
- },
- {
- type: 'alter_table_alter_column_set_type',
- tableName: 'simple',
- columnName: 'simple',
- newDataType: 'int',
- oldDataType: 'text',
- schema: '',
- columnDefault: undefined,
- columnOnUpdate: undefined,
- columnNotNull: false,
- columnAutoIncrement: false,
- columnPk: false,
- },
- {
- type: 'alter_table_alter_column_set_type',
- tableName: 'unique',
- columnName: 'unique',
- newDataType: 'text',
- oldDataType: 'int',
- schema: '',
- columnDefault: undefined,
- columnOnUpdate: undefined,
- columnNotNull: false,
- columnAutoIncrement: false,
- columnPk: false,
- },
- ];
- expect(libSQLCombineStatements(statements, json2)).toStrictEqual(
- newJsonStatements,
- );
-});
-
-test(`add columns. set fk`, async (t) => {
- const statements: JsonStatement[] = [
- {
- type: 'sqlite_alter_table_add_column',
- tableName: 'ref',
- column: {
- name: 'test',
- type: 'integer',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- referenceData: undefined,
- },
- {
- type: 'sqlite_alter_table_add_column',
- tableName: 'ref',
- column: {
- name: 'test1',
- type: 'integer',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- referenceData: undefined,
- },
- {
- type: 'create_reference',
- tableName: 'ref',
- data: 'ref_new_age_user_new_age_fk;ref;new_age;user;new_age;no action;no action',
- schema: '',
- columnNotNull: false,
- columnDefault: undefined,
- columnType: 'integer',
- },
- ];
- const json1: SQLiteSchemaSquashed = {
- version: '6',
- dialect: 'sqlite',
- tables: {
- ref: {
- name: 'ref',
- columns: {
- id1: {
- name: 'id1',
- type: 'text',
- primaryKey: false,
- notNull: true,
- autoincrement: false,
- },
- new_age: {
- name: 'new_age',
- type: 'integer',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- },
- indexes: {},
- foreignKeys: {},
- compositePrimaryKeys: {},
- uniqueConstraints: {},
- },
- user: {
- name: 'user',
- columns: {
- id1: {
- name: 'id1',
- type: 'text',
- primaryKey: false,
- notNull: true,
- autoincrement: false,
- },
- new_age: {
- name: 'new_age',
- type: 'integer',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- },
- indexes: {},
- foreignKeys: {},
- compositePrimaryKeys: {},
- uniqueConstraints: {},
- },
- },
- enums: {},
- };
- const json2: SQLiteSchemaSquashed = {
- version: '6',
- dialect: 'sqlite',
- tables: {
- ref: {
- name: 'ref',
- columns: {
- id1: {
- name: 'id1',
- type: 'text',
- primaryKey: false,
- notNull: true,
- autoincrement: false,
- },
- new_age: {
- name: 'new_age',
- type: 'integer',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- test: {
- name: 'test',
- type: 'integer',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- test1: {
- name: 'test1',
- type: 'integer',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- },
- indexes: {},
- foreignKeys: {
- ref_new_age_user_new_age_fk: 'ref_new_age_user_new_age_fk;ref;new_age;user;new_age;no action;no action',
- },
- compositePrimaryKeys: {},
- uniqueConstraints: {},
- },
- user: {
- name: 'user',
- columns: {
- id1: {
- name: 'id1',
- type: 'text',
- primaryKey: false,
- notNull: true,
- autoincrement: false,
- },
- new_age: {
- name: 'new_age',
- type: 'integer',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- },
- indexes: {},
- foreignKeys: {},
- compositePrimaryKeys: {},
- uniqueConstraints: {},
- },
- },
- enums: {},
- };
-
- const newJsonStatements = [
- {
- type: 'sqlite_alter_table_add_column',
- tableName: 'ref',
- column: {
- name: 'test',
- type: 'integer',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- referenceData: undefined,
- },
- {
- type: 'sqlite_alter_table_add_column',
- tableName: 'ref',
- column: {
- name: 'test1',
- type: 'integer',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- referenceData: undefined,
- },
- {
- type: 'create_reference',
- tableName: 'ref',
- data: 'ref_new_age_user_new_age_fk;ref;new_age;user;new_age;no action;no action',
- schema: '',
- columnNotNull: false,
- columnDefault: undefined,
- columnType: 'integer',
- },
- ];
- expect(libSQLCombineStatements(statements, json2)).toStrictEqual(
- newJsonStatements,
- );
-});
-
-test(`add column and fk`, async (t) => {
- const statements: JsonStatement[] = [
- {
- type: 'sqlite_alter_table_add_column',
- tableName: 'ref',
- column: {
- name: 'test1',
- type: 'integer',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- referenceData: 'ref_test1_user_new_age_fk;ref;test1;user;new_age;no action;no action',
- },
- {
- type: 'create_reference',
- tableName: 'ref',
- data: 'ref_test1_user_new_age_fk;ref;test1;user;new_age;no action;no action',
- schema: '',
- columnNotNull: false,
- columnDefault: undefined,
- columnType: 'integer',
- },
- ];
- const json1: SQLiteSchemaSquashed = {
- version: '6',
- dialect: 'sqlite',
- tables: {
- ref: {
- name: 'ref',
- columns: {
- id1: {
- name: 'id1',
- type: 'text',
- primaryKey: false,
- notNull: true,
- autoincrement: false,
- },
- new_age: {
- name: 'new_age',
- type: 'integer',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- test1: {
- name: 'test1',
- type: 'integer',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- },
- indexes: {},
- foreignKeys: {
- ref_test1_user_new_age_fk: 'ref_test1_user_new_age_fk;ref;test1;user;new_age;no action;no action',
- },
- compositePrimaryKeys: {},
- uniqueConstraints: {},
- },
- user: {
- name: 'user',
- columns: {
- id1: {
- name: 'id1',
- type: 'text',
- primaryKey: false,
- notNull: true,
- autoincrement: false,
- },
- new_age: {
- name: 'new_age',
- type: 'integer',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- },
- indexes: {},
- foreignKeys: {},
- compositePrimaryKeys: {},
- uniqueConstraints: {},
- },
- },
- enums: {},
- };
- const json2: SQLiteSchemaSquashed = {
- version: '6',
- dialect: 'sqlite',
- tables: {
- ref: {
- name: 'ref',
- columns: {
- id1: {
- name: 'id1',
- type: 'text',
- primaryKey: false,
- notNull: true,
- autoincrement: false,
- },
- new_age: {
- name: 'new_age',
- type: 'integer',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- test: {
- name: 'test',
- type: 'integer',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- test1: {
- name: 'test1',
- type: 'integer',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- },
- indexes: {},
- foreignKeys: {
- ref_new_age_user_new_age_fk: 'ref_new_age_user_new_age_fk;ref;new_age;user;new_age;no action;no action',
- },
- compositePrimaryKeys: {},
- uniqueConstraints: {},
- },
- user: {
- name: 'user',
- columns: {
- id1: {
- name: 'id1',
- type: 'text',
- primaryKey: false,
- notNull: true,
- autoincrement: false,
- },
- new_age: {
- name: 'new_age',
- type: 'integer',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- },
- indexes: {},
- foreignKeys: {},
- compositePrimaryKeys: {},
- uniqueConstraints: {},
- },
- },
- enums: {},
- };
-
- const newJsonStatements = [
- {
- type: 'sqlite_alter_table_add_column',
- tableName: 'ref',
- column: {
- name: 'test1',
- type: 'integer',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- referenceData: 'ref_test1_user_new_age_fk;ref;test1;user;new_age;no action;no action',
- },
- ];
- expect(libSQLCombineStatements(statements, json2)).toStrictEqual(
- newJsonStatements,
- );
-});
-
-test(`add column and fk`, async (t) => {
- const statements: JsonStatement[] = [
- {
- type: 'sqlite_alter_table_add_column',
- tableName: 'ref',
- column: {
- name: 'test1',
- type: 'integer',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- referenceData: 'ref_test1_user_new_age_fk;ref;test1;user;new_age;no action;no action',
- },
- {
- type: 'create_reference',
- tableName: 'ref',
- data: 'ref_test1_user_new_age_fk;ref;test1;user;new_age;no action;no action',
- schema: '',
- columnNotNull: false,
- columnDefault: undefined,
- columnType: 'integer',
- },
- ];
- const json1: SQLiteSchemaSquashed = {
- version: '6',
- dialect: 'sqlite',
- tables: {
- ref: {
- name: 'ref',
- columns: {
- id1: {
- name: 'id1',
- type: 'text',
- primaryKey: false,
- notNull: true,
- autoincrement: false,
- },
- new_age: {
- name: 'new_age',
- type: 'integer',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- test1: {
- name: 'test1',
- type: 'integer',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- },
- indexes: {},
- foreignKeys: {
- ref_test1_user_new_age_fk: 'ref_test1_user_new_age_fk;ref;test1;user;new_age;no action;no action',
- },
- compositePrimaryKeys: {},
- uniqueConstraints: {},
- },
- user: {
- name: 'user',
- columns: {
- id1: {
- name: 'id1',
- type: 'text',
- primaryKey: false,
- notNull: true,
- autoincrement: false,
- },
- new_age: {
- name: 'new_age',
- type: 'integer',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- },
- indexes: {},
- foreignKeys: {},
- compositePrimaryKeys: {},
- uniqueConstraints: {},
- },
- },
- enums: {},
- };
- const json2: SQLiteSchemaSquashed = {
- version: '6',
- dialect: 'sqlite',
- tables: {
- ref: {
- name: 'ref',
- columns: {
- id1: {
- name: 'id1',
- type: 'text',
- primaryKey: false,
- notNull: true,
- autoincrement: false,
- },
- new_age: {
- name: 'new_age',
- type: 'integer',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- test: {
- name: 'test',
- type: 'integer',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- test1: {
- name: 'test1',
- type: 'integer',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- },
- indexes: {},
- foreignKeys: {
- ref_new_age_user_new_age_fk: 'ref_new_age_user_new_age_fk;ref;new_age;user;new_age;no action;no action',
- },
- compositePrimaryKeys: {},
- uniqueConstraints: {},
- },
- user: {
- name: 'user',
- columns: {
- id1: {
- name: 'id1',
- type: 'text',
- primaryKey: false,
- notNull: true,
- autoincrement: false,
- },
- new_age: {
- name: 'new_age',
- type: 'integer',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- },
- indexes: {},
- foreignKeys: {},
- compositePrimaryKeys: {},
- uniqueConstraints: {},
- },
- },
- enums: {},
- };
-
- const newJsonStatements = [
- {
- type: 'sqlite_alter_table_add_column',
- tableName: 'ref',
- column: {
- name: 'test1',
- type: 'integer',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- referenceData: 'ref_test1_user_new_age_fk;ref;test1;user;new_age;no action;no action',
- },
- ];
- expect(libSQLCombineStatements(statements, json2)).toStrictEqual(
- newJsonStatements,
- );
-});
diff --git a/drizzle-kit/tests/statements-combiner/sqlite-statements-combiner.test.ts b/drizzle-kit/tests/statements-combiner/sqlite-statements-combiner.test.ts
deleted file mode 100644
index 2fcaf6436..000000000
--- a/drizzle-kit/tests/statements-combiner/sqlite-statements-combiner.test.ts
+++ /dev/null
@@ -1,1170 +0,0 @@
-import { JsonStatement } from 'src/jsonStatements';
-import { SQLiteSchemaSquashed } from 'src/serializer/sqliteSchema';
-import { sqliteCombineStatements } from 'src/statementCombiner';
-import { expect, test } from 'vitest';
-
-test(`renamed column and altered this column type`, async (t) => {
- const statements: JsonStatement[] = [
- {
- type: 'alter_table_rename_column',
- tableName: 'user',
- oldColumnName: 'lastName',
- newColumnName: 'lastName123',
- schema: '',
- },
- {
- type: 'alter_table_alter_column_set_type',
- tableName: 'user',
- columnName: 'lastName123',
- newDataType: 'int',
- oldDataType: 'text',
- schema: '',
- columnDefault: undefined,
- columnOnUpdate: undefined,
- columnNotNull: false,
- columnAutoIncrement: false,
- columnPk: false,
- columnIsUnique: false,
- } as unknown as JsonStatement,
- ];
- const json1: SQLiteSchemaSquashed = {
- version: '6',
- dialect: 'sqlite',
- tables: {
- user: {
- name: 'user',
- columns: {
- firstName: {
- name: 'firstName',
- type: 'int',
- primaryKey: true,
- notNull: true,
- autoincrement: false,
- },
- lastName: {
- name: 'lastName',
- type: 'text',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- test: {
- name: 'test',
- type: 'text',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- },
- indexes: {},
- foreignKeys: {},
- compositePrimaryKeys: {},
- uniqueConstraints: {},
- },
- },
- enums: {},
- };
- const json2: SQLiteSchemaSquashed = {
- version: '6',
- dialect: 'sqlite',
- tables: {
- user: {
- name: 'user',
- columns: {
- firstName: {
- name: 'firstName',
- type: 'int',
- primaryKey: true,
- notNull: true,
- autoincrement: false,
- },
- lastName: {
- name: 'lastName123',
- type: 'int',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- test: {
- name: 'test',
- type: 'int',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- },
- indexes: {},
- foreignKeys: {},
- compositePrimaryKeys: {},
- uniqueConstraints: {},
- },
- },
- enums: {},
- };
-
- const newJsonStatements = [
- {
- type: 'recreate_table',
- tableName: 'user',
- columns: [
- {
- name: 'firstName',
- type: 'int',
- primaryKey: true,
- notNull: true,
- autoincrement: false,
- },
- {
- name: 'lastName123',
- type: 'int',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- {
- name: 'test',
- type: 'int',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- ],
- compositePKs: [],
- referenceData: [],
- uniqueConstraints: [],
- },
- ];
- expect(sqliteCombineStatements(statements, json2)).toStrictEqual(
- newJsonStatements,
- );
-});
-
-test(`renamed column and droped column "test"`, async (t) => {
- const statements: JsonStatement[] = [
- {
- type: 'alter_table_rename_column',
- tableName: 'user',
- oldColumnName: 'lastName',
- newColumnName: 'lastName123',
- schema: '',
- },
- {
- type: 'alter_table_drop_column',
- tableName: 'user',
- columnName: 'test',
- schema: '',
- },
- ];
- const json1: SQLiteSchemaSquashed = {
- version: '6',
- dialect: 'sqlite',
- tables: {
- user: {
- name: 'user',
- columns: {
- firstName: {
- name: 'firstName',
- type: 'int',
- primaryKey: true,
- notNull: true,
- autoincrement: false,
- },
- lastName: {
- name: 'lastName',
- type: 'text',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- test: {
- name: 'test',
- type: 'text',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- },
- indexes: {},
- foreignKeys: {},
- compositePrimaryKeys: {},
- uniqueConstraints: {},
- },
- },
- enums: {},
- };
- const json2: SQLiteSchemaSquashed = {
- version: '6',
- dialect: 'sqlite',
- tables: {
- user: {
- name: 'user',
- columns: {
- firstName: {
- name: 'firstName',
- type: 'int',
- primaryKey: true,
- notNull: true,
- autoincrement: false,
- },
- lastName: {
- name: 'lastName123',
- type: 'int',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- test: {
- name: 'test',
- type: 'int',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- },
- indexes: {},
- foreignKeys: {},
- compositePrimaryKeys: {},
- uniqueConstraints: {},
- },
- },
- enums: {},
- };
-
- const newJsonStatements: JsonStatement[] = [
- {
- type: 'alter_table_rename_column',
- tableName: 'user',
- oldColumnName: 'lastName',
- newColumnName: 'lastName123',
- schema: '',
- },
- {
- type: 'alter_table_drop_column',
- tableName: 'user',
- columnName: 'test',
- schema: '',
- },
- ];
- expect(sqliteCombineStatements(statements, json2)).toStrictEqual(
- newJsonStatements,
- );
-});
-
-test(`droped column that is part of composite pk`, async (t) => {
- const statements: JsonStatement[] = [
- { type: 'delete_composite_pk', tableName: 'user', data: 'id,iq' },
- {
- type: 'alter_table_alter_column_set_pk',
- tableName: 'user',
- schema: '',
- columnName: 'id',
- },
- {
- type: 'alter_table_drop_column',
- tableName: 'user',
- columnName: 'iq',
- schema: '',
- },
- ];
- const json1: SQLiteSchemaSquashed = {
- version: '6',
- dialect: 'sqlite',
- tables: {
- user: {
- name: 'user',
- columns: {
- id: {
- name: 'id',
- type: 'int',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- first_nam: {
- name: 'first_nam',
- type: 'text',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- iq: {
- name: 'iq',
- type: 'int',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- },
- indexes: {},
- foreignKeys: {},
- compositePrimaryKeys: {
- user_id_iq_pk: 'id,iq',
- },
- uniqueConstraints: {},
- },
- },
- enums: {},
- };
- const json2: SQLiteSchemaSquashed = {
- version: '6',
- dialect: 'sqlite',
- tables: {
- user: {
- name: 'user',
- columns: {
- id: {
- name: 'id',
- type: 'int',
- primaryKey: true,
- notNull: false,
- autoincrement: false,
- },
- first_nam: {
- name: 'first_nam',
- type: 'text',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- },
- indexes: {},
- foreignKeys: {},
- compositePrimaryKeys: {},
- uniqueConstraints: {},
- },
- },
- enums: {},
- };
-
- const newJsonStatements: JsonStatement[] = [
- {
- type: 'recreate_table',
- tableName: 'user',
- columns: [
- {
- name: 'id',
- type: 'int',
- primaryKey: true,
- notNull: false,
- autoincrement: false,
- },
- {
- name: 'first_nam',
- type: 'text',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- ],
- compositePKs: [],
- referenceData: [],
- uniqueConstraints: [],
- },
- ];
- expect(sqliteCombineStatements(statements, json2)).toStrictEqual(
- newJsonStatements,
- );
-});
-
-test(`drop column "ref"."name", rename column "ref"."age". dropped primary key "user"."id". Set not null to "user"."iq"`, async (t) => {
- const statements: JsonStatement[] = [
- {
- type: 'alter_table_rename_column',
- tableName: 'ref',
- oldColumnName: 'age',
- newColumnName: 'age1',
- schema: '',
- },
- {
- type: 'alter_table_alter_column_drop_pk',
- tableName: 'user',
- columnName: 'id',
- schema: '',
- },
- {
- type: 'alter_table_alter_column_drop_autoincrement',
- tableName: 'user',
- columnName: 'id',
- schema: '',
- newDataType: 'int',
- columnDefault: undefined,
- columnOnUpdate: undefined,
- columnNotNull: false,
- columnAutoIncrement: false,
- columnPk: false,
- } as unknown as JsonStatement,
- {
- type: 'alter_table_alter_column_drop_notnull',
- tableName: 'user',
- columnName: 'id',
- schema: '',
- newDataType: 'int',
- columnDefault: undefined,
- columnOnUpdate: undefined,
- columnNotNull: false,
- columnAutoIncrement: false,
- columnPk: false,
- } as unknown as JsonStatement,
- {
- type: 'alter_table_alter_column_set_notnull',
- tableName: 'user',
- columnName: 'iq',
- schema: '',
- newDataType: 'int',
- columnDefault: undefined,
- columnOnUpdate: undefined,
- columnNotNull: true,
- columnAutoIncrement: false,
- columnPk: false,
- } as unknown as JsonStatement,
- {
- type: 'alter_table_drop_column',
- tableName: 'ref',
- columnName: 'text',
- schema: '',
- },
- ];
- const json1: SQLiteSchemaSquashed = {
- version: '6',
- dialect: 'sqlite',
- tables: {
- ref: {
- name: 'ref',
- columns: {
- id: {
- name: 'id',
- type: 'int',
- primaryKey: true,
- notNull: true,
- autoincrement: true,
- },
- user_iq: {
- name: 'user_iq',
- type: 'text',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- name: {
- name: 'name',
- type: 'text',
- primaryKey: false,
- notNull: true,
- autoincrement: false,
- },
- age: {
- name: 'age',
- type: 'int',
- primaryKey: false,
- notNull: true,
- autoincrement: false,
- },
- },
- indexes: {},
- foreignKeys: {
- ref_user_iq_user_iq_fk: 'ref_user_iq_user_iq_fk;ref;user_iq;user;iq;no action;no action',
- },
- compositePrimaryKeys: {},
- uniqueConstraints: {},
- },
- user: {
- name: 'user',
- columns: {
- id: {
- name: 'id',
- type: 'int',
- primaryKey: true,
- notNull: true,
- autoincrement: true,
- },
- first_name: {
- name: 'first_name',
- type: 'text',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- iq: {
- name: 'iq',
- type: 'int',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- },
- indexes: {},
- foreignKeys: {},
- compositePrimaryKeys: {},
- uniqueConstraints: {},
- },
- },
- enums: {},
- };
- const json2: SQLiteSchemaSquashed = {
- version: '6',
- dialect: 'sqlite',
- tables: {
- ref: {
- name: 'ref',
- columns: {
- id: {
- name: 'id',
- type: 'int',
- primaryKey: true,
- notNull: true,
- autoincrement: false,
- },
- user_iq: {
- name: 'user_iq',
- type: 'text',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- age1: {
- name: 'age1',
- type: 'int',
- primaryKey: false,
- notNull: true,
- autoincrement: false,
- },
- },
- indexes: {},
- foreignKeys: {
- ref_user_iq_user_iq_fk: 'ref_user_iq_user_iq_fk;ref;user_iq;user;iq;no action;no action',
- },
- compositePrimaryKeys: {},
- uniqueConstraints: {},
- },
- user: {
- name: 'user',
- columns: {
- id: {
- name: 'id',
- type: 'int',
- primaryKey: false,
- notNull: true,
- autoincrement: false,
- },
- first_name: {
- name: 'first_name',
- type: 'text',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- iq: {
- name: 'iq',
- type: 'int',
- primaryKey: false,
- notNull: true,
- autoincrement: false,
- },
- },
- indexes: {},
- foreignKeys: {},
- compositePrimaryKeys: {},
- uniqueConstraints: {},
- },
- },
- enums: {},
- };
-
- const newJsonStatements: JsonStatement[] = [
- {
- type: 'alter_table_rename_column',
- tableName: 'ref',
- oldColumnName: 'age',
- newColumnName: 'age1',
- schema: '',
- },
- {
- type: 'alter_table_drop_column',
- tableName: 'ref',
- columnName: 'text',
- schema: '',
- },
- {
- type: 'recreate_table',
- tableName: 'user',
- columns: [
- {
- name: 'id',
- type: 'int',
- primaryKey: false,
- notNull: true,
- autoincrement: false,
- },
- {
- name: 'first_name',
- type: 'text',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- {
- name: 'iq',
- type: 'int',
- primaryKey: false,
- notNull: true,
- autoincrement: false,
- },
- ],
- compositePKs: [],
- referenceData: [],
- uniqueConstraints: [],
- },
- ];
-
- expect(sqliteCombineStatements(statements, json2)).toStrictEqual(
- newJsonStatements,
- );
-});
-
-test(`create reference on exising column (table includes unique index). expect to recreate column and recreate index`, async (t) => {
- const statements: JsonStatement[] = [
- {
- type: 'create_reference',
- tableName: 'unique',
- data: 'unique_ref_pk_pk_pk_fk;unique;ref_pk;pk;pk;no action;no action',
- schema: '',
- },
- ];
- const json1: SQLiteSchemaSquashed = {
- version: '6',
- dialect: 'sqlite',
- tables: {
- pk: {
- name: 'pk',
- columns: {
- pk: {
- name: 'pk',
- type: 'int',
- primaryKey: true,
- notNull: true,
- autoincrement: false,
- },
- },
- indexes: {},
- foreignKeys: {},
- compositePrimaryKeys: {},
- uniqueConstraints: {},
- },
- unique: {
- name: 'unique',
- columns: {
- unique: {
- name: 'unique',
- type: 'text',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- ref_pk: {
- name: 'ref_pk',
- type: 'int',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- },
- indexes: {
- unique_unique_unique: 'unique_unique_unique;unique;true;',
- },
- foreignKeys: {},
- compositePrimaryKeys: {},
- uniqueConstraints: {},
- },
- },
- enums: {},
- };
- const json2: SQLiteSchemaSquashed = {
- version: '6',
- dialect: 'sqlite',
- tables: {
- pk: {
- name: 'pk',
- columns: {
- pk: {
- name: 'pk',
- type: 'int',
- primaryKey: true,
- notNull: true,
- autoincrement: false,
- },
- },
- indexes: {},
- foreignKeys: {},
- compositePrimaryKeys: {},
- uniqueConstraints: {},
- },
- unique: {
- name: 'unique',
- columns: {
- unique: {
- name: 'unique',
- type: 'text',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- ref_pk: {
- name: 'ref_pk',
- type: 'int',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- },
- indexes: {
- unique_unique_unique: 'unique_unique_unique;unique;true;',
- },
- foreignKeys: {
- unique_ref_pk_pk_pk_fk: 'unique_ref_pk_pk_pk_fk;unique;ref_pk;pk;pk;no action;no action',
- },
- compositePrimaryKeys: {},
- uniqueConstraints: {},
- },
- },
- enums: {},
- };
-
- const newJsonStatements: JsonStatement[] = [
- {
- type: 'recreate_table',
- tableName: 'unique',
- columns: [
- {
- name: 'unique',
- type: 'text',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- {
- name: 'ref_pk',
- type: 'int',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- ],
- compositePKs: [],
- referenceData: [
- {
- name: 'unique_ref_pk_pk_pk_fk',
- tableFrom: 'unique',
- tableTo: 'pk',
- columnsFrom: ['ref_pk'],
- columnsTo: ['pk'],
- onDelete: 'no action',
- onUpdate: 'no action',
- },
- ],
- uniqueConstraints: [],
- },
- {
- data: 'unique_unique_unique;unique;true;',
- internal: undefined,
- schema: '',
- tableName: 'unique',
- type: 'create_index',
- },
- ];
-
- expect(sqliteCombineStatements(statements, json2)).toStrictEqual(
- newJsonStatements,
- );
-});
-
-test(`add columns. set fk`, async (t) => {
- const statements: JsonStatement[] = [
- {
- type: 'sqlite_alter_table_add_column',
- tableName: 'ref',
- column: {
- name: 'test',
- type: 'integer',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- referenceData: undefined,
- },
- {
- type: 'sqlite_alter_table_add_column',
- tableName: 'ref',
- column: {
- name: 'test1',
- type: 'integer',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- referenceData: undefined,
- },
- {
- type: 'create_reference',
- tableName: 'ref',
- data: 'ref_new_age_user_new_age_fk;ref;new_age;user;new_age;no action;no action',
- schema: '',
- columnNotNull: false,
- columnDefault: undefined,
- columnType: 'integer',
- },
- ];
- const json1: SQLiteSchemaSquashed = {
- version: '6',
- dialect: 'sqlite',
- tables: {
- ref: {
- name: 'ref',
- columns: {
- id1: {
- name: 'id1',
- type: 'text',
- primaryKey: false,
- notNull: true,
- autoincrement: false,
- },
- new_age: {
- name: 'new_age',
- type: 'integer',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- },
- indexes: {},
- foreignKeys: {},
- compositePrimaryKeys: {},
- uniqueConstraints: {},
- },
- user: {
- name: 'user',
- columns: {
- id1: {
- name: 'id1',
- type: 'text',
- primaryKey: false,
- notNull: true,
- autoincrement: false,
- },
- new_age: {
- name: 'new_age',
- type: 'integer',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- },
- indexes: {},
- foreignKeys: {},
- compositePrimaryKeys: {},
- uniqueConstraints: {},
- },
- },
- enums: {},
- };
- const json2: SQLiteSchemaSquashed = {
- version: '6',
- dialect: 'sqlite',
- tables: {
- ref: {
- name: 'ref',
- columns: {
- id1: {
- name: 'id1',
- type: 'text',
- primaryKey: false,
- notNull: true,
- autoincrement: false,
- },
- new_age: {
- name: 'new_age',
- type: 'integer',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- test: {
- name: 'test',
- type: 'integer',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- test1: {
- name: 'test1',
- type: 'integer',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- },
- indexes: {},
- foreignKeys: {
- ref_new_age_user_new_age_fk: 'ref_new_age_user_new_age_fk;ref;new_age;user;new_age;no action;no action',
- },
- compositePrimaryKeys: {},
- uniqueConstraints: {},
- },
- user: {
- name: 'user',
- columns: {
- id1: {
- name: 'id1',
- type: 'text',
- primaryKey: false,
- notNull: true,
- autoincrement: false,
- },
- new_age: {
- name: 'new_age',
- type: 'integer',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- },
- indexes: {},
- foreignKeys: {},
- compositePrimaryKeys: {},
- uniqueConstraints: {},
- },
- },
- enums: {},
- };
-
- const newJsonStatements = [
- {
- columns: [
- {
- autoincrement: false,
- name: 'id1',
- notNull: true,
- primaryKey: false,
- type: 'text',
- },
- {
- autoincrement: false,
- name: 'new_age',
- notNull: false,
- primaryKey: false,
- type: 'integer',
- },
- {
- autoincrement: false,
- name: 'test',
- notNull: false,
- primaryKey: false,
- type: 'integer',
- },
- {
- autoincrement: false,
- name: 'test1',
- notNull: false,
- primaryKey: false,
- type: 'integer',
- },
- ],
- compositePKs: [],
- referenceData: [
- {
- columnsFrom: [
- 'new_age',
- ],
- columnsTo: [
- 'new_age',
- ],
- name: 'ref_new_age_user_new_age_fk',
- onDelete: 'no action',
- onUpdate: 'no action',
- tableFrom: 'ref',
- tableTo: 'user',
- },
- ],
- tableName: 'ref',
- type: 'recreate_table',
- uniqueConstraints: [],
- },
- ];
- expect(sqliteCombineStatements(statements, json2)).toStrictEqual(
- newJsonStatements,
- );
-});
-
-test(`add column and fk`, async (t) => {
- const statements: JsonStatement[] = [
- {
- type: 'sqlite_alter_table_add_column',
- tableName: 'ref',
- column: {
- name: 'test1',
- type: 'integer',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- referenceData: 'ref_test1_user_new_age_fk;ref;test1;user;new_age;no action;no action',
- },
- {
- type: 'create_reference',
- tableName: 'ref',
- data: 'ref_test1_user_new_age_fk;ref;test1;user;new_age;no action;no action',
- schema: '',
- columnNotNull: false,
- columnDefault: undefined,
- columnType: 'integer',
- },
- ];
- const json1: SQLiteSchemaSquashed = {
- version: '6',
- dialect: 'sqlite',
- tables: {
- ref: {
- name: 'ref',
- columns: {
- id1: {
- name: 'id1',
- type: 'text',
- primaryKey: false,
- notNull: true,
- autoincrement: false,
- },
- new_age: {
- name: 'new_age',
- type: 'integer',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- test1: {
- name: 'test1',
- type: 'integer',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- },
- indexes: {},
- foreignKeys: {
- ref_test1_user_new_age_fk: 'ref_test1_user_new_age_fk;ref;test1;user;new_age;no action;no action',
- },
- compositePrimaryKeys: {},
- uniqueConstraints: {},
- },
- user: {
- name: 'user',
- columns: {
- id1: {
- name: 'id1',
- type: 'text',
- primaryKey: false,
- notNull: true,
- autoincrement: false,
- },
- new_age: {
- name: 'new_age',
- type: 'integer',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- },
- indexes: {},
- foreignKeys: {},
- compositePrimaryKeys: {},
- uniqueConstraints: {},
- },
- },
- enums: {},
- };
- const json2: SQLiteSchemaSquashed = {
- version: '6',
- dialect: 'sqlite',
- tables: {
- ref: {
- name: 'ref',
- columns: {
- id1: {
- name: 'id1',
- type: 'text',
- primaryKey: false,
- notNull: true,
- autoincrement: false,
- },
- new_age: {
- name: 'new_age',
- type: 'integer',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- test: {
- name: 'test',
- type: 'integer',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- test1: {
- name: 'test1',
- type: 'integer',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- },
- indexes: {},
- foreignKeys: {
- ref_new_age_user_new_age_fk: 'ref_new_age_user_new_age_fk;ref;new_age;user;new_age;no action;no action',
- },
- compositePrimaryKeys: {},
- uniqueConstraints: {},
- },
- user: {
- name: 'user',
- columns: {
- id1: {
- name: 'id1',
- type: 'text',
- primaryKey: false,
- notNull: true,
- autoincrement: false,
- },
- new_age: {
- name: 'new_age',
- type: 'integer',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- },
- indexes: {},
- foreignKeys: {},
- compositePrimaryKeys: {},
- uniqueConstraints: {},
- },
- },
- enums: {},
- };
-
- const newJsonStatements = [
- {
- type: 'sqlite_alter_table_add_column',
- tableName: 'ref',
- column: {
- name: 'test1',
- type: 'integer',
- primaryKey: false,
- notNull: false,
- autoincrement: false,
- },
- referenceData: 'ref_test1_user_new_age_fk;ref;test1;user;new_age;no action;no action',
- },
- ];
- expect(sqliteCombineStatements(statements, json2)).toStrictEqual(
- newJsonStatements,
- );
-});
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 1ae78961d..7e8189ffe 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -45,7 +45,7 @@ importers:
version: link:drizzle-orm/dist
drizzle-orm-old:
specifier: npm:drizzle-orm@^0.27.2
- version: drizzle-orm@0.27.2(@aws-sdk/client-rds-data@3.583.0)(@cloudflare/workers-types@4.20240524.0)(@libsql/client@0.10.0)(@neondatabase/serverless@0.9.3)(@opentelemetry/api@1.8.0)(@planetscale/database@1.18.0)(@types/better-sqlite3@7.6.10)(@types/pg@8.11.6)(@types/sql.js@1.4.9)(@vercel/postgres@0.8.0)(better-sqlite3@9.6.0)(bun-types@1.0.3)(knex@2.5.1(better-sqlite3@9.6.0)(mysql2@3.11.0)(pg@8.11.5)(sqlite3@5.1.7))(kysely@0.25.0)(mysql2@3.11.0)(pg@8.11.5)(postgres@3.4.4)(sql.js@1.10.3)(sqlite3@5.1.7)
+ version: drizzle-orm@0.27.2(@aws-sdk/client-rds-data@3.583.0)(@cloudflare/workers-types@4.20240524.0)(@libsql/client@0.10.0(bufferutil@4.0.8)(utf-8-validate@6.0.3))(@neondatabase/serverless@0.9.3)(@opentelemetry/api@1.8.0)(@planetscale/database@1.18.0)(@types/better-sqlite3@7.6.10)(@types/pg@8.11.6)(@types/sql.js@1.4.9)(@vercel/postgres@0.8.0)(better-sqlite3@9.6.0)(bun-types@1.0.3)(knex@2.5.1(better-sqlite3@9.6.0)(mysql2@3.11.0)(pg@8.11.5)(sqlite3@5.1.7))(kysely@0.25.0)(mysql2@3.11.0)(pg@8.11.5)(postgres@3.4.4)(sql.js@1.10.3)(sqlite3@5.1.7)
eslint:
specifier: ^8.50.0
version: 8.50.0
@@ -78,7 +78,7 @@ importers:
version: 0.8.16(typescript@5.4.5(patch_hash=q3iy4fwdhi5sis3wty7d4nbsme))
tsup:
specifier: ^7.2.0
- version: 7.2.0(postcss@8.4.39)(ts-node@10.9.2(typescript@5.4.5(patch_hash=q3iy4fwdhi5sis3wty7d4nbsme)))(typescript@5.4.5(patch_hash=q3iy4fwdhi5sis3wty7d4nbsme))
+ version: 7.2.0(postcss@8.4.39)(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5(patch_hash=q3iy4fwdhi5sis3wty7d4nbsme)))(typescript@5.4.5(patch_hash=q3iy4fwdhi5sis3wty7d4nbsme))
tsx:
specifier: ^4.10.5
version: 4.10.5
@@ -123,8 +123,8 @@ importers:
specifier: ^0.2.1
version: 0.2.2(hono@4.5.0)(zod@3.23.7)
'@libsql/client':
- specifier: ^0.10.0
- version: 0.10.0(bufferutil@4.0.8)(utf-8-validate@6.0.3)
+ specifier: ^0.4.2
+ version: 0.4.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@6.0.3)
'@neondatabase/serverless':
specifier: ^0.9.1
version: 0.9.3
@@ -182,9 +182,6 @@ importers:
better-sqlite3:
specifier: ^9.4.3
version: 9.6.0
- bun-types:
- specifier: ^0.6.6
- version: 0.6.14
camelcase:
specifier: ^7.0.1
version: 7.0.1
@@ -3084,22 +3081,44 @@ packages:
'@libsql/client@0.10.0':
resolution: {integrity: sha512-2ERn08T4XOVx34yBtUPq0RDjAdd9TJ5qNH/izugr208ml2F94mk92qC64kXyDVQINodWJvp3kAdq6P4zTtCZ7g==}
+ '@libsql/client@0.4.3':
+ resolution: {integrity: sha512-AUYKnSPqAsFBVWBvmtrb4dG3pQlvTKT92eztAest9wQU2iJkabH8WzHLDb3dKFWKql7/kiCqvBQUVpozDwhekQ==}
+
'@libsql/core@0.10.0':
resolution: {integrity: sha512-rqynAXGaiSpTsykOZdBtI1N4z4O+KZ6mt33K/aHeXAY0gSIfK/ctxuWa0Y1Bjo4FMz1idBTCXz4Ps5kITOvZZw==}
+ '@libsql/core@0.4.3':
+ resolution: {integrity: sha512-r28iYBtaLBW9RRgXPFh6cGCsVI/rwRlOzSOpAu/1PVTm6EJ3t233pUf97jETVHU0vjdr1d8VvV6fKAvJkokqCw==}
+
+ '@libsql/darwin-arm64@0.2.0':
+ resolution: {integrity: sha512-+qyT2W/n5CFH1YZWv2mxW4Fsoo4dX9Z9M/nvbQqZ7H84J8hVegvVAsIGYzcK8xAeMEcpU5yGKB1Y9NoDY4hOSQ==}
+ cpu: [arm64]
+ os: [darwin]
+
'@libsql/darwin-arm64@0.4.5':
resolution: {integrity: sha512-xLdnn0NrgSk6OMi716FFs/27Hs33jtSd2fkKi/72Ey/qBtPWcB1BMurDQekzi0yAcfQTjGqIz7tpOibyjiEPyQ==}
cpu: [arm64]
os: [darwin]
+ '@libsql/darwin-x64@0.2.0':
+ resolution: {integrity: sha512-hwmO2mF1n8oDHKFrUju6Jv+n9iFtTf5JUK+xlnIE3Td0ZwGC/O1R/Z/btZTd9nD+vsvakC8SJT7/Q6YlWIkhEw==}
+ cpu: [x64]
+ os: [darwin]
+
'@libsql/darwin-x64@0.4.5':
resolution: {integrity: sha512-rZsEWj0H7oCqd5Y2pe0RzKmuQXC2OB1RbnFy4CvjeAjT6MP6mFp+Vx9mTCAUuJMhuoSVMsFPUJRpAQznl9E3Tg==}
cpu: [x64]
os: [darwin]
+ '@libsql/hrana-client@0.5.6':
+ resolution: {integrity: sha512-mjQoAmejZ1atG+M3YR2ZW+rg6ceBByH/S/h17ZoYZkqbWrvohFhXyz2LFxj++ARMoY9m6w3RJJIRdJdmnEUlFg==}
+
'@libsql/hrana-client@0.6.2':
resolution: {integrity: sha512-MWxgD7mXLNf9FXXiM0bc90wCjZSpErWKr5mGza7ERy2FJNNMXd7JIOv+DepBA1FQTIfI8TFO4/QDYgaQC0goNw==}
+ '@libsql/isomorphic-fetch@0.1.12':
+ resolution: {integrity: sha512-MRo4UcmjAGAa3ac56LoD5OE13m2p0lu0VEtZC2NZMcogM/jc5fU9YtMQ3qbPjFJ+u2BBjFZgMPkQaLS1dlMhpg==}
+
'@libsql/isomorphic-fetch@0.2.5':
resolution: {integrity: sha512-8s/B2TClEHms2yb+JGpsVRTPBfy1ih/Pq6h6gvyaNcYnMVJvgQRY7wAa8U2nD0dppbCuDU5evTNMEhrQ17ZKKg==}
engines: {node: '>=18.0.0'}
@@ -3107,26 +3126,51 @@ packages:
'@libsql/isomorphic-ws@0.1.5':
resolution: {integrity: sha512-DtLWIH29onUYR00i0GlQ3UdcTRC6EP4u9w/h9LxpUZJWRMARk6dQwZ6Jkd+QdwVpuAOrdxt18v0K2uIYR3fwFg==}
+ '@libsql/linux-arm64-gnu@0.2.0':
+ resolution: {integrity: sha512-1w2lPXIYtnBaK5t/Ej5E8x7lPiE+jP3KATI/W4yei5Z/ONJh7jQW5PJ7sYU95vTME3hWEM1FXN6kvzcpFAte7w==}
+ cpu: [arm64]
+ os: [linux]
+
'@libsql/linux-arm64-gnu@0.4.5':
resolution: {integrity: sha512-VR09iu6KWGJ6fauCn59u/jJ9OA+/A2yQ0dr2HDN2zkRueLC6D2oGYt4gPfLZPFKf+WJpVMtIhNfd+Ru9MMaFkA==}
cpu: [arm64]
os: [linux]
+ '@libsql/linux-arm64-musl@0.2.0':
+ resolution: {integrity: sha512-lkblBEJ7xuNiWNjP8DDq0rqoWccszfkUS7Efh5EjJ+GDWdCBVfh08mPofIZg0fZVLWQCY3j+VZCG1qZfATBizg==}
+ cpu: [arm64]
+ os: [linux]
+
'@libsql/linux-arm64-musl@0.4.5':
resolution: {integrity: sha512-74hvD5ej4rBshhxFGNYU16a3m8B/NjIPvhlZ/flG1Oeydfo6AuUXSSNFi+H5+zi9/uWuzyz5TLVeQcraoUV10A==}
cpu: [arm64]
os: [linux]
+ '@libsql/linux-x64-gnu@0.2.0':
+ resolution: {integrity: sha512-+x/d289KeJydwOhhqSxKT+6MSQTCfLltzOpTzPccsvdt5fxg8CBi+gfvEJ4/XW23Sa+9bc7zodFP0i6MOlxX7w==}
+ cpu: [x64]
+ os: [linux]
+
'@libsql/linux-x64-gnu@0.4.5':
resolution: {integrity: sha512-gb5WObGO3+rbuG8h9font1N02iF+zgYAgY0wNa8BNiZ5A9UolZKFxiqGFS7eHaAYfemHJKKTT+aAt3X2p5TibA==}
cpu: [x64]
os: [linux]
+ '@libsql/linux-x64-musl@0.2.0':
+ resolution: {integrity: sha512-5Xn0c5A6vKf9D1ASpgk7mef//FuY7t5Lktj/eiU4n3ryxG+6WTpqstTittJUgepVjcleLPYxIhQAYeYwTYH1IQ==}
+ cpu: [x64]
+ os: [linux]
+
'@libsql/linux-x64-musl@0.4.5':
resolution: {integrity: sha512-JfyE6OVC5X4Nr4cFF77VhB1o+hBRxAqYT9YdeqnWdAQSYc/ASi5HnRALLAQEsGacFPZZ32pixfraQmPE3iJFfw==}
cpu: [x64]
os: [linux]
+ '@libsql/win32-x64-msvc@0.2.0':
+ resolution: {integrity: sha512-rpK+trBIpRST15m3cMYg5aPaX7kvCIottxY7jZPINkKAaScvfbn9yulU/iZUM9YtuK96Y1ZmvwyVIK/Y5DzoMQ==}
+ cpu: [x64]
+ os: [win32]
+
'@libsql/win32-x64-msvc@0.4.5':
resolution: {integrity: sha512-57GGurNJhOhq3XIopLdGnCoQ4kQAcmbmzzFoC4tpvDE/KSbwZ/13zqJWhQA41nMGk/PKM1XKfKmbIybKx1+eqA==}
cpu: [x64]
@@ -4019,6 +4063,9 @@ packages:
'@types/minimist@1.2.2':
resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==}
+ '@types/node-fetch@2.6.11':
+ resolution: {integrity: sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==}
+
'@types/node-forge@1.3.11':
resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==}
@@ -7052,9 +7099,13 @@ packages:
resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
engines: {node: '>= 0.8.0'}
+ libsql@0.2.0:
+ resolution: {integrity: sha512-ELBRqhpJx5Dap0187zKQnntZyk4EjlDHSrjIVL8t+fQ5e8IxbQTeYgZgigMjB1EvrETdkm0Y0VxBGhzPQ+t0Jg==}
+ cpu: [x64, arm64]
+ os: [darwin, linux, win32]
+
libsql@0.4.5:
resolution: {integrity: sha512-sorTJV6PNt94Wap27Sai5gtVLIea4Otb2LUiAUyr3p6BPOScGMKGt5F1b5X/XgkNtcsDKeX5qfeBDj+PdShclQ==}
- cpu: [x64, arm64, wasm32]
os: [darwin, linux, win32]
lighthouse-logger@1.4.2:
@@ -10071,7 +10122,7 @@ snapshots:
'@aws-crypto/sha256-browser': 3.0.0
'@aws-crypto/sha256-js': 3.0.0
'@aws-sdk/client-sso-oidc': 3.569.0
- '@aws-sdk/client-sts': 3.569.0
+ '@aws-sdk/client-sts': 3.569.0(@aws-sdk/client-sso-oidc@3.569.0)
'@aws-sdk/core': 3.567.0
'@aws-sdk/credential-provider-node': 3.569.0(@aws-sdk/client-sso-oidc@3.569.0)(@aws-sdk/client-sts@3.569.0)
'@aws-sdk/middleware-host-header': 3.567.0
@@ -10166,8 +10217,8 @@ snapshots:
dependencies:
'@aws-crypto/sha256-browser': 3.0.0
'@aws-crypto/sha256-js': 3.0.0
- '@aws-sdk/client-sso-oidc': 3.583.0(@aws-sdk/client-sts@3.583.0)
- '@aws-sdk/client-sts': 3.583.0
+ '@aws-sdk/client-sso-oidc': 3.583.0
+ '@aws-sdk/client-sts': 3.583.0(@aws-sdk/client-sso-oidc@3.583.0)
'@aws-sdk/core': 3.582.0
'@aws-sdk/credential-provider-node': 3.583.0(@aws-sdk/client-sso-oidc@3.583.0)(@aws-sdk/client-sts@3.583.0)
'@aws-sdk/middleware-host-header': 3.577.0
@@ -10212,7 +10263,7 @@ snapshots:
dependencies:
'@aws-crypto/sha256-browser': 3.0.0
'@aws-crypto/sha256-js': 3.0.0
- '@aws-sdk/client-sts': 3.569.0
+ '@aws-sdk/client-sts': 3.569.0(@aws-sdk/client-sso-oidc@3.569.0)
'@aws-sdk/core': 3.567.0
'@aws-sdk/credential-provider-node': 3.569.0(@aws-sdk/client-sso-oidc@3.569.0)(@aws-sdk/client-sts@3.569.0)
'@aws-sdk/middleware-host-header': 3.567.0
@@ -10253,11 +10304,11 @@ snapshots:
transitivePeerDependencies:
- aws-crt
- '@aws-sdk/client-sso-oidc@3.583.0(@aws-sdk/client-sts@3.583.0)':
+ '@aws-sdk/client-sso-oidc@3.583.0':
dependencies:
'@aws-crypto/sha256-browser': 3.0.0
'@aws-crypto/sha256-js': 3.0.0
- '@aws-sdk/client-sts': 3.583.0
+ '@aws-sdk/client-sts': 3.583.0(@aws-sdk/client-sso-oidc@3.583.0)
'@aws-sdk/core': 3.582.0
'@aws-sdk/credential-provider-node': 3.583.0(@aws-sdk/client-sso-oidc@3.583.0)(@aws-sdk/client-sts@3.583.0)
'@aws-sdk/middleware-host-header': 3.577.0
@@ -10296,7 +10347,6 @@ snapshots:
'@smithy/util-utf8': 3.0.0
tslib: 2.6.2
transitivePeerDependencies:
- - '@aws-sdk/client-sts'
- aws-crt
'@aws-sdk/client-sso@3.478.0':
@@ -10472,58 +10522,13 @@ snapshots:
transitivePeerDependencies:
- aws-crt
- '@aws-sdk/client-sts@3.569.0':
- dependencies:
- '@aws-crypto/sha256-browser': 3.0.0
- '@aws-crypto/sha256-js': 3.0.0
- '@aws-sdk/client-sso-oidc': 3.569.0
- '@aws-sdk/core': 3.567.0
- '@aws-sdk/credential-provider-node': 3.569.0(@aws-sdk/client-sso-oidc@3.569.0)(@aws-sdk/client-sts@3.569.0)
- '@aws-sdk/middleware-host-header': 3.567.0
- '@aws-sdk/middleware-logger': 3.568.0
- '@aws-sdk/middleware-recursion-detection': 3.567.0
- '@aws-sdk/middleware-user-agent': 3.567.0
- '@aws-sdk/region-config-resolver': 3.567.0
- '@aws-sdk/types': 3.567.0
- '@aws-sdk/util-endpoints': 3.567.0
- '@aws-sdk/util-user-agent-browser': 3.567.0
- '@aws-sdk/util-user-agent-node': 3.568.0
- '@smithy/config-resolver': 2.2.0
- '@smithy/core': 1.4.2
- '@smithy/fetch-http-handler': 2.5.0
- '@smithy/hash-node': 2.2.0
- '@smithy/invalid-dependency': 2.2.0
- '@smithy/middleware-content-length': 2.2.0
- '@smithy/middleware-endpoint': 2.5.1
- '@smithy/middleware-retry': 2.3.1
- '@smithy/middleware-serde': 2.3.0
- '@smithy/middleware-stack': 2.2.0
- '@smithy/node-config-provider': 2.3.0
- '@smithy/node-http-handler': 2.5.0
- '@smithy/protocol-http': 3.3.0
- '@smithy/smithy-client': 2.5.1
- '@smithy/types': 2.12.0
- '@smithy/url-parser': 2.2.0
- '@smithy/util-base64': 2.3.0
- '@smithy/util-body-length-browser': 2.2.0
- '@smithy/util-body-length-node': 2.3.0
- '@smithy/util-defaults-mode-browser': 2.2.1
- '@smithy/util-defaults-mode-node': 2.3.1
- '@smithy/util-endpoints': 1.2.0
- '@smithy/util-middleware': 2.2.0
- '@smithy/util-retry': 2.2.0
- '@smithy/util-utf8': 2.3.0
- tslib: 2.6.2
- transitivePeerDependencies:
- - aws-crt
-
'@aws-sdk/client-sts@3.569.0(@aws-sdk/client-sso-oidc@3.569.0)':
dependencies:
'@aws-crypto/sha256-browser': 3.0.0
'@aws-crypto/sha256-js': 3.0.0
'@aws-sdk/client-sso-oidc': 3.569.0
'@aws-sdk/core': 3.567.0
- '@aws-sdk/credential-provider-node': 3.569.0(@aws-sdk/client-sso-oidc@3.569.0)(@aws-sdk/client-sts@3.569.0(@aws-sdk/client-sso-oidc@3.569.0))
+ '@aws-sdk/credential-provider-node': 3.569.0(@aws-sdk/client-sso-oidc@3.569.0)(@aws-sdk/client-sts@3.569.0)
'@aws-sdk/middleware-host-header': 3.567.0
'@aws-sdk/middleware-logger': 3.568.0
'@aws-sdk/middleware-recursion-detection': 3.567.0
@@ -10563,11 +10568,11 @@ snapshots:
- '@aws-sdk/client-sso-oidc'
- aws-crt
- '@aws-sdk/client-sts@3.583.0':
+ '@aws-sdk/client-sts@3.583.0(@aws-sdk/client-sso-oidc@3.583.0)':
dependencies:
'@aws-crypto/sha256-browser': 3.0.0
'@aws-crypto/sha256-js': 3.0.0
- '@aws-sdk/client-sso-oidc': 3.583.0(@aws-sdk/client-sts@3.583.0)
+ '@aws-sdk/client-sso-oidc': 3.583.0
'@aws-sdk/core': 3.582.0
'@aws-sdk/credential-provider-node': 3.583.0(@aws-sdk/client-sso-oidc@3.583.0)(@aws-sdk/client-sts@3.583.0)
'@aws-sdk/middleware-host-header': 3.577.0
@@ -10606,6 +10611,7 @@ snapshots:
'@smithy/util-utf8': 3.0.0
tslib: 2.6.2
transitivePeerDependencies:
+ - '@aws-sdk/client-sso-oidc'
- aws-crt
'@aws-sdk/core@3.477.0':
@@ -10707,23 +10713,6 @@ snapshots:
transitivePeerDependencies:
- aws-crt
- '@aws-sdk/credential-provider-ini@3.568.0(@aws-sdk/client-sso-oidc@3.569.0)(@aws-sdk/client-sts@3.569.0(@aws-sdk/client-sso-oidc@3.569.0))':
- dependencies:
- '@aws-sdk/client-sts': 3.569.0(@aws-sdk/client-sso-oidc@3.569.0)
- '@aws-sdk/credential-provider-env': 3.568.0
- '@aws-sdk/credential-provider-process': 3.568.0
- '@aws-sdk/credential-provider-sso': 3.568.0(@aws-sdk/client-sso-oidc@3.569.0)
- '@aws-sdk/credential-provider-web-identity': 3.568.0(@aws-sdk/client-sts@3.569.0(@aws-sdk/client-sso-oidc@3.569.0))
- '@aws-sdk/types': 3.567.0
- '@smithy/credential-provider-imds': 2.3.0
- '@smithy/property-provider': 2.2.0
- '@smithy/shared-ini-file-loader': 2.4.0
- '@smithy/types': 2.12.0
- tslib: 2.6.2
- transitivePeerDependencies:
- - '@aws-sdk/client-sso-oidc'
- - aws-crt
-
'@aws-sdk/credential-provider-ini@3.568.0(@aws-sdk/client-sso-oidc@3.569.0)(@aws-sdk/client-sts@3.569.0)':
dependencies:
'@aws-sdk/client-sts': 3.569.0(@aws-sdk/client-sso-oidc@3.569.0)
@@ -10747,7 +10736,7 @@ snapshots:
'@aws-sdk/credential-provider-env': 3.568.0
'@aws-sdk/credential-provider-process': 3.568.0
'@aws-sdk/credential-provider-sso': 3.568.0(@aws-sdk/client-sso-oidc@3.583.0)
- '@aws-sdk/credential-provider-web-identity': 3.568.0(@aws-sdk/client-sts@3.569.0(@aws-sdk/client-sso-oidc@3.569.0))
+ '@aws-sdk/credential-provider-web-identity': 3.568.0(@aws-sdk/client-sts@3.569.0)
'@aws-sdk/types': 3.567.0
'@smithy/credential-provider-imds': 2.3.0
'@smithy/property-provider': 2.2.0
@@ -10760,7 +10749,7 @@ snapshots:
'@aws-sdk/credential-provider-ini@3.583.0(@aws-sdk/client-sso-oidc@3.583.0)(@aws-sdk/client-sts@3.583.0)':
dependencies:
- '@aws-sdk/client-sts': 3.583.0
+ '@aws-sdk/client-sts': 3.583.0(@aws-sdk/client-sso-oidc@3.583.0)
'@aws-sdk/credential-provider-env': 3.577.0
'@aws-sdk/credential-provider-process': 3.577.0
'@aws-sdk/credential-provider-sso': 3.583.0(@aws-sdk/client-sso-oidc@3.583.0)
@@ -10791,25 +10780,6 @@ snapshots:
transitivePeerDependencies:
- aws-crt
- '@aws-sdk/credential-provider-node@3.569.0(@aws-sdk/client-sso-oidc@3.569.0)(@aws-sdk/client-sts@3.569.0(@aws-sdk/client-sso-oidc@3.569.0))':
- dependencies:
- '@aws-sdk/credential-provider-env': 3.568.0
- '@aws-sdk/credential-provider-http': 3.568.0
- '@aws-sdk/credential-provider-ini': 3.568.0(@aws-sdk/client-sso-oidc@3.569.0)(@aws-sdk/client-sts@3.569.0(@aws-sdk/client-sso-oidc@3.569.0))
- '@aws-sdk/credential-provider-process': 3.568.0
- '@aws-sdk/credential-provider-sso': 3.568.0(@aws-sdk/client-sso-oidc@3.569.0)
- '@aws-sdk/credential-provider-web-identity': 3.568.0(@aws-sdk/client-sts@3.569.0(@aws-sdk/client-sso-oidc@3.569.0))
- '@aws-sdk/types': 3.567.0
- '@smithy/credential-provider-imds': 2.3.0
- '@smithy/property-provider': 2.2.0
- '@smithy/shared-ini-file-loader': 2.4.0
- '@smithy/types': 2.12.0
- tslib: 2.6.2
- transitivePeerDependencies:
- - '@aws-sdk/client-sso-oidc'
- - '@aws-sdk/client-sts'
- - aws-crt
-
'@aws-sdk/credential-provider-node@3.569.0(@aws-sdk/client-sso-oidc@3.569.0)(@aws-sdk/client-sts@3.569.0)':
dependencies:
'@aws-sdk/credential-provider-env': 3.568.0
@@ -10836,7 +10806,7 @@ snapshots:
'@aws-sdk/credential-provider-ini': 3.568.0(@aws-sdk/client-sso-oidc@3.583.0)(@aws-sdk/client-sts@3.569.0(@aws-sdk/client-sso-oidc@3.569.0))
'@aws-sdk/credential-provider-process': 3.568.0
'@aws-sdk/credential-provider-sso': 3.568.0(@aws-sdk/client-sso-oidc@3.583.0)
- '@aws-sdk/credential-provider-web-identity': 3.568.0(@aws-sdk/client-sts@3.569.0(@aws-sdk/client-sso-oidc@3.569.0))
+ '@aws-sdk/credential-provider-web-identity': 3.568.0(@aws-sdk/client-sts@3.569.0)
'@aws-sdk/types': 3.567.0
'@smithy/credential-provider-imds': 2.3.0
'@smithy/property-provider': 2.2.0
@@ -10949,17 +10919,9 @@ snapshots:
'@smithy/types': 2.12.0
tslib: 2.6.2
- '@aws-sdk/credential-provider-web-identity@3.568.0(@aws-sdk/client-sts@3.569.0(@aws-sdk/client-sso-oidc@3.569.0))':
- dependencies:
- '@aws-sdk/client-sts': 3.569.0(@aws-sdk/client-sso-oidc@3.569.0)
- '@aws-sdk/types': 3.567.0
- '@smithy/property-provider': 2.2.0
- '@smithy/types': 2.12.0
- tslib: 2.6.2
-
'@aws-sdk/credential-provider-web-identity@3.568.0(@aws-sdk/client-sts@3.569.0)':
dependencies:
- '@aws-sdk/client-sts': 3.569.0
+ '@aws-sdk/client-sts': 3.569.0(@aws-sdk/client-sso-oidc@3.569.0)
'@aws-sdk/types': 3.567.0
'@smithy/property-provider': 2.2.0
'@smithy/types': 2.12.0
@@ -10967,7 +10929,7 @@ snapshots:
'@aws-sdk/credential-provider-web-identity@3.577.0(@aws-sdk/client-sts@3.583.0)':
dependencies:
- '@aws-sdk/client-sts': 3.583.0
+ '@aws-sdk/client-sts': 3.583.0(@aws-sdk/client-sso-oidc@3.583.0)
'@aws-sdk/types': 3.577.0
'@smithy/property-provider': 3.0.0
'@smithy/types': 3.0.0
@@ -10985,7 +10947,7 @@ snapshots:
'@aws-sdk/credential-provider-node': 3.569.0(@aws-sdk/client-sso-oidc@3.583.0)(@aws-sdk/client-sts@3.569.0(@aws-sdk/client-sso-oidc@3.569.0))
'@aws-sdk/credential-provider-process': 3.568.0
'@aws-sdk/credential-provider-sso': 3.568.0(@aws-sdk/client-sso-oidc@3.583.0)
- '@aws-sdk/credential-provider-web-identity': 3.568.0(@aws-sdk/client-sts@3.569.0(@aws-sdk/client-sso-oidc@3.569.0))
+ '@aws-sdk/credential-provider-web-identity': 3.568.0(@aws-sdk/client-sts@3.569.0)
'@aws-sdk/types': 3.567.0
'@smithy/credential-provider-imds': 2.3.0
'@smithy/property-provider': 2.2.0
@@ -11168,7 +11130,7 @@ snapshots:
'@aws-sdk/token-providers@3.568.0(@aws-sdk/client-sso-oidc@3.583.0)':
dependencies:
- '@aws-sdk/client-sso-oidc': 3.583.0(@aws-sdk/client-sts@3.583.0)
+ '@aws-sdk/client-sso-oidc': 3.583.0
'@aws-sdk/types': 3.567.0
'@smithy/property-provider': 2.2.0
'@smithy/shared-ini-file-loader': 2.4.0
@@ -11177,7 +11139,7 @@ snapshots:
'@aws-sdk/token-providers@3.577.0(@aws-sdk/client-sso-oidc@3.583.0)':
dependencies:
- '@aws-sdk/client-sso-oidc': 3.583.0(@aws-sdk/client-sts@3.583.0)
+ '@aws-sdk/client-sso-oidc': 3.583.0
'@aws-sdk/types': 3.577.0
'@smithy/property-provider': 3.0.0
'@smithy/shared-ini-file-loader': 3.0.0
@@ -13298,16 +13260,49 @@ snapshots:
- bufferutil
- utf-8-validate
+ '@libsql/client@0.4.3(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@6.0.3)':
+ dependencies:
+ '@libsql/core': 0.4.3
+ '@libsql/hrana-client': 0.5.6(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@6.0.3)
+ js-base64: 3.7.7
+ optionalDependencies:
+ libsql: 0.2.0
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
'@libsql/core@0.10.0':
dependencies:
js-base64: 3.7.7
+ '@libsql/core@0.4.3':
+ dependencies:
+ js-base64: 3.7.7
+
+ '@libsql/darwin-arm64@0.2.0':
+ optional: true
+
'@libsql/darwin-arm64@0.4.5':
optional: true
+ '@libsql/darwin-x64@0.2.0':
+ optional: true
+
'@libsql/darwin-x64@0.4.5':
optional: true
+ '@libsql/hrana-client@0.5.6(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@6.0.3)':
+ dependencies:
+ '@libsql/isomorphic-fetch': 0.1.12(encoding@0.1.13)
+ '@libsql/isomorphic-ws': 0.1.5(bufferutil@4.0.8)(utf-8-validate@6.0.3)
+ js-base64: 3.7.7
+ node-fetch: 3.3.2
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - utf-8-validate
+
'@libsql/hrana-client@0.6.2(bufferutil@4.0.8)(utf-8-validate@6.0.3)':
dependencies:
'@libsql/isomorphic-fetch': 0.2.5
@@ -13318,6 +13313,13 @@ snapshots:
- bufferutil
- utf-8-validate
+ '@libsql/isomorphic-fetch@0.1.12(encoding@0.1.13)':
+ dependencies:
+ '@types/node-fetch': 2.6.11
+ node-fetch: 2.7.0(encoding@0.1.13)
+ transitivePeerDependencies:
+ - encoding
+
'@libsql/isomorphic-fetch@0.2.5': {}
'@libsql/isomorphic-ws@0.1.5(bufferutil@4.0.8)(utf-8-validate@6.0.3)':
@@ -13328,18 +13330,33 @@ snapshots:
- bufferutil
- utf-8-validate
+ '@libsql/linux-arm64-gnu@0.2.0':
+ optional: true
+
'@libsql/linux-arm64-gnu@0.4.5':
optional: true
+ '@libsql/linux-arm64-musl@0.2.0':
+ optional: true
+
'@libsql/linux-arm64-musl@0.4.5':
optional: true
+ '@libsql/linux-x64-gnu@0.2.0':
+ optional: true
+
'@libsql/linux-x64-gnu@0.4.5':
optional: true
+ '@libsql/linux-x64-musl@0.2.0':
+ optional: true
+
'@libsql/linux-x64-musl@0.4.5':
optional: true
+ '@libsql/win32-x64-msvc@0.2.0':
+ optional: true
+
'@libsql/win32-x64-msvc@0.4.5':
optional: true
@@ -14600,6 +14617,11 @@ snapshots:
'@types/minimist@1.2.2': {}
+ '@types/node-fetch@2.6.11':
+ dependencies:
+ '@types/node': 20.12.12
+ form-data: 4.0.0
+
'@types/node-forge@1.3.11':
dependencies:
'@types/node': 20.12.12
@@ -15035,7 +15057,7 @@ snapshots:
pathe: 1.1.2
picocolors: 1.0.1
sirv: 2.0.4
- vitest: 1.6.0(@types/node@20.12.12)(@vitest/ui@1.6.0)(lightningcss@1.25.1)(terser@5.31.0)
+ vitest: 1.6.0(@types/node@18.19.33)(@vitest/ui@1.6.0)(lightningcss@1.25.1)(terser@5.31.0)
'@vitest/utils@1.6.0':
dependencies:
@@ -16224,7 +16246,7 @@ snapshots:
transitivePeerDependencies:
- supports-color
- drizzle-orm@0.27.2(@aws-sdk/client-rds-data@3.583.0)(@cloudflare/workers-types@4.20240524.0)(@libsql/client@0.10.0)(@neondatabase/serverless@0.9.3)(@opentelemetry/api@1.8.0)(@planetscale/database@1.18.0)(@types/better-sqlite3@7.6.10)(@types/pg@8.11.6)(@types/sql.js@1.4.9)(@vercel/postgres@0.8.0)(better-sqlite3@9.6.0)(bun-types@1.0.3)(knex@2.5.1(better-sqlite3@9.6.0)(mysql2@3.11.0)(pg@8.11.5)(sqlite3@5.1.7))(kysely@0.25.0)(mysql2@3.11.0)(pg@8.11.5)(postgres@3.4.4)(sql.js@1.10.3)(sqlite3@5.1.7):
+ drizzle-orm@0.27.2(@aws-sdk/client-rds-data@3.583.0)(@cloudflare/workers-types@4.20240524.0)(@libsql/client@0.10.0(bufferutil@4.0.8)(utf-8-validate@6.0.3))(@neondatabase/serverless@0.9.3)(@opentelemetry/api@1.8.0)(@planetscale/database@1.18.0)(@types/better-sqlite3@7.6.10)(@types/pg@8.11.6)(@types/sql.js@1.4.9)(@vercel/postgres@0.8.0)(better-sqlite3@9.6.0)(bun-types@1.0.3)(knex@2.5.1(better-sqlite3@9.6.0)(mysql2@3.11.0)(pg@8.11.5)(sqlite3@5.1.7))(kysely@0.25.0)(mysql2@3.11.0)(pg@8.11.5)(postgres@3.4.4)(sql.js@1.10.3)(sqlite3@5.1.7):
optionalDependencies:
'@aws-sdk/client-rds-data': 3.583.0
'@cloudflare/workers-types': 4.20240524.0
@@ -18265,6 +18287,20 @@ snapshots:
prelude-ls: 1.2.1
type-check: 0.4.0
+ libsql@0.2.0:
+ dependencies:
+ '@neon-rs/load': 0.0.4
+ detect-libc: 2.0.2
+ optionalDependencies:
+ '@libsql/darwin-arm64': 0.2.0
+ '@libsql/darwin-x64': 0.2.0
+ '@libsql/linux-arm64-gnu': 0.2.0
+ '@libsql/linux-arm64-musl': 0.2.0
+ '@libsql/linux-x64-gnu': 0.2.0
+ '@libsql/linux-x64-musl': 0.2.0
+ '@libsql/win32-x64-msvc': 0.2.0
+ optional: true
+
libsql@0.4.5:
dependencies:
'@neon-rs/load': 0.0.4
@@ -19424,7 +19460,7 @@ snapshots:
possible-typed-array-names@1.0.0: {}
- postcss-load-config@4.0.1(postcss@8.4.39)(ts-node@10.9.2(typescript@5.4.5(patch_hash=q3iy4fwdhi5sis3wty7d4nbsme))):
+ postcss-load-config@4.0.1(postcss@8.4.39)(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5(patch_hash=q3iy4fwdhi5sis3wty7d4nbsme))):
dependencies:
lilconfig: 2.1.0
yaml: 2.3.1
@@ -20685,7 +20721,7 @@ snapshots:
tslib@2.6.2: {}
- tsup@7.2.0(postcss@8.4.39)(ts-node@10.9.2(typescript@5.4.5(patch_hash=q3iy4fwdhi5sis3wty7d4nbsme)))(typescript@5.4.5(patch_hash=q3iy4fwdhi5sis3wty7d4nbsme)):
+ tsup@7.2.0(postcss@8.4.39)(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5(patch_hash=q3iy4fwdhi5sis3wty7d4nbsme)))(typescript@5.4.5(patch_hash=q3iy4fwdhi5sis3wty7d4nbsme)):
dependencies:
bundle-require: 4.0.2(esbuild@0.18.20)
cac: 6.7.14
@@ -20695,7 +20731,7 @@ snapshots:
execa: 5.1.1
globby: 11.1.0
joycon: 3.1.1
- postcss-load-config: 4.0.1(postcss@8.4.39)(ts-node@10.9.2(typescript@5.4.5(patch_hash=q3iy4fwdhi5sis3wty7d4nbsme)))
+ postcss-load-config: 4.0.1(postcss@8.4.39)(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.4.5(patch_hash=q3iy4fwdhi5sis3wty7d4nbsme)))
resolve-from: 5.0.0
rollup: 3.27.2
source-map: 0.8.0-beta.0