From 53d4dd29b6db4a7c62a71970cd2cadf9a42535df Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ond=C5=99ej=20=C5=A0vanda?=
<46406259+Papooch@users.noreply.github.com>
Date: Mon, 22 Jan 2024 20:59:04 +0100
Subject: [PATCH] feat: add Knex transactional adapter (#107)
---
.../01-transactional/02-knex-adapter.md | 95 ++++
.../01-transactional/index.md | 3 +-
.../transactional-adapter-knex/.gitignore | 1 +
.../transactional-adapter-knex/README.md | 5 +
.../transactional-adapter-knex/jest.config.js | 17 +
.../transactional-adapter-knex/package.json | 67 +++
.../transactional-adapter-knex/src/index.ts | 1 +
.../src/lib/transactional-adapter-knex.ts | 33 ++
.../test/docker-compose.yml | 10 +
.../test/transactional-adapter-knex.spec.ts | 181 +++++++
.../transactional-adapter-knex/tsconfig.json | 8 +
tsconfig.json | 5 +-
yarn.lock | 511 +++++++++++++++++-
13 files changed, 921 insertions(+), 16 deletions(-)
create mode 100644 docs/docs/06_plugins/01_available-plugins/01-transactional/02-knex-adapter.md
create mode 100644 packages/transactional-adapters/transactional-adapter-knex/.gitignore
create mode 100644 packages/transactional-adapters/transactional-adapter-knex/README.md
create mode 100644 packages/transactional-adapters/transactional-adapter-knex/jest.config.js
create mode 100644 packages/transactional-adapters/transactional-adapter-knex/package.json
create mode 100644 packages/transactional-adapters/transactional-adapter-knex/src/index.ts
create mode 100644 packages/transactional-adapters/transactional-adapter-knex/src/lib/transactional-adapter-knex.ts
create mode 100644 packages/transactional-adapters/transactional-adapter-knex/test/docker-compose.yml
create mode 100644 packages/transactional-adapters/transactional-adapter-knex/test/transactional-adapter-knex.spec.ts
create mode 100644 packages/transactional-adapters/transactional-adapter-knex/tsconfig.json
diff --git a/docs/docs/06_plugins/01_available-plugins/01-transactional/02-knex-adapter.md b/docs/docs/06_plugins/01_available-plugins/01-transactional/02-knex-adapter.md
new file mode 100644
index 0000000..13b54d1
--- /dev/null
+++ b/docs/docs/06_plugins/01_available-plugins/01-transactional/02-knex-adapter.md
@@ -0,0 +1,95 @@
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
+
+# Knex adapter
+
+## Installation
+
+
+
+
+```bash
+npm install @nestjs-cls/transactional-adapter-knex
+```
+
+
+
+
+```bash
+yarn add @nestjs-cls/transactional-adapter-knex
+```
+
+
+
+
+```bash
+pnpm add @nestjs-cls/transactional-adapter-knex
+```
+
+
+
+
+## Registration
+
+```ts
+ClsModule.forRoot({
+ plugins: [
+ new ClsPluginTransactional({
+ imports: [
+ // module in which the Knex is provided
+ KnexModule
+ ],
+ adapter: new TransactionalAdapterKnex({
+ // the injection token of the Knex client
+ knexInstanceToken: KNEX,
+ }),
+ }),
+ ],
+}),
+```
+
+## Typing & usage
+
+The `tx` property on the `TransactionHost` is typed as `Knex`.
+
+## Example
+
+```ts title="user.service.ts"
+@Injectable()
+class UserService {
+ constructor(private readonly userRepository: UserRepository) {}
+
+ @Transactional()
+ async runTransaction() {
+ // highlight-start
+ // both methods are executed in the same transaction
+ const user = await this.userRepository.createUser('John');
+ const foundUser = await this.userRepository.getUserById(r1.id);
+ // highlight-end
+ assert(foundUser.id === user.id);
+ }
+}
+```
+
+```ts title="user.repository.ts"
+@Injectable()
+class UserRepository {
+ constructor(
+ private readonly txHost: TransactionHost,
+ ) {}
+
+ async getUserById(id: number) {
+ // highlight-start
+ // txHost.tx is typed as Knex
+ return this.txHost.tx('user').where({ id }).first();
+ // highlight-end
+ }
+
+ async createUser(name: string) {
+ return this.txHost
+ .tx('user')
+ .insert({ name: name, email: `${name}@email.com` })
+ .returning('*');
+ }
+}
+```
diff --git a/docs/docs/06_plugins/01_available-plugins/01-transactional/index.md b/docs/docs/06_plugins/01_available-plugins/01-transactional/index.md
index 1ec6e23..bd586ca 100644
--- a/docs/docs/06_plugins/01_available-plugins/01-transactional/index.md
+++ b/docs/docs/06_plugins/01_available-plugins/01-transactional/index.md
@@ -38,7 +38,8 @@ The plugin works in conjunction with various adapters that provide the actual tr
Adapters for the following libraries are available:
-- Prisma (see [prisma-adapter](./01-prisma-adapter.md))
+- Prisma (see [@nestjs-cls/transactional-adapter-prisma](./01-prisma-adapter.md))
+- Knex (see [@nestjs-cls/transactional-adapter-knex](./02-knex-adapter.md))
Adapters _will not_ be implemented for the following libraries:
diff --git a/packages/transactional-adapters/transactional-adapter-knex/.gitignore b/packages/transactional-adapters/transactional-adapter-knex/.gitignore
new file mode 100644
index 0000000..884e3de
--- /dev/null
+++ b/packages/transactional-adapters/transactional-adapter-knex/.gitignore
@@ -0,0 +1 @@
+test.db
\ No newline at end of file
diff --git a/packages/transactional-adapters/transactional-adapter-knex/README.md b/packages/transactional-adapters/transactional-adapter-knex/README.md
new file mode 100644
index 0000000..2c5eecc
--- /dev/null
+++ b/packages/transactional-adapters/transactional-adapter-knex/README.md
@@ -0,0 +1,5 @@
+# @nestjs-cls/transactional-adapter-prisma
+
+Pg (node-postgres) adapter for the `@nestjs-cls/transactional` plugin.
+
+### ➡️ [Go to the documentation website](https://papooch.github.io/nestjs-cls/plugins/available-plugins/transactional) 📖
diff --git a/packages/transactional-adapters/transactional-adapter-knex/jest.config.js b/packages/transactional-adapters/transactional-adapter-knex/jest.config.js
new file mode 100644
index 0000000..61cb57e
--- /dev/null
+++ b/packages/transactional-adapters/transactional-adapter-knex/jest.config.js
@@ -0,0 +1,17 @@
+module.exports = {
+ moduleFileExtensions: ['js', 'json', 'ts'],
+ rootDir: '.',
+ testRegex: '.*\\.spec\\.ts$',
+ transform: {
+ '^.+\\.ts$': 'ts-jest',
+ },
+ collectCoverageFrom: ['src/**/*.ts'],
+ coverageDirectory: '../coverage',
+ testEnvironment: 'node',
+ globals: {
+ 'ts-jest': {
+ isolatedModules: true,
+ maxWorkers: 1,
+ },
+ },
+};
diff --git a/packages/transactional-adapters/transactional-adapter-knex/package.json b/packages/transactional-adapters/transactional-adapter-knex/package.json
new file mode 100644
index 0000000..bf54451
--- /dev/null
+++ b/packages/transactional-adapters/transactional-adapter-knex/package.json
@@ -0,0 +1,67 @@
+{
+ "name": "@nestjs-cls/transactional-adapter-knex",
+ "version": "1.0.0",
+ "description": "A Knex adapter for @nestjs-cls/transactional",
+ "author": "papooch",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "publishConfig": {
+ "access": "public"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/Papooch/nestjs-cls.git"
+ },
+ "homepage": "https://papooch.github.io/nestjs-cls/",
+ "keywords": [
+ "nest",
+ "nestjs",
+ "cls",
+ "continuation-local-storage",
+ "als",
+ "AsyncLocalStorage",
+ "async_hooks",
+ "request context",
+ "async context"
+ ],
+ "main": "dist/src/index.js",
+ "types": "dist/src/index.d.ts",
+ "files": [
+ "dist/src/**/!(*.spec).d.ts",
+ "dist/src/**/!(*.spec).js"
+ ],
+ "scripts": {
+ "prepack": "cp ../../../LICENSE ./LICENSE",
+ "prebuild": "rimraf dist",
+ "build": "tsc",
+ "test": "jest",
+ "test:watch": "jest --watch",
+ "test:cov": "jest --coverage"
+ },
+ "peerDependencies": {
+ "@nestjs-cls/transactional": "workspace:^1",
+ "knex": "^3",
+ "nestjs-cls": "workspace:^4"
+ },
+ "devDependencies": {
+ "@nestjs/cli": "^10.0.2",
+ "@nestjs/common": "^10.0.0",
+ "@nestjs/core": "^10.0.0",
+ "@nestjs/testing": "^10.0.0",
+ "@types/jest": "^28.1.2",
+ "@types/node": "^18.0.0",
+ "jest": "^28.1.1",
+ "knex": "^3.1.0",
+ "reflect-metadata": "^0.1.13",
+ "rimraf": "^3.0.2",
+ "rxjs": "^7.5.5",
+ "sqlite3": "^5.1.7",
+ "ts-jest": "^28.0.5",
+ "ts-loader": "^9.3.0",
+ "ts-node": "^10.8.1",
+ "tsconfig-paths": "^4.0.0",
+ "typescript": "~4.8.0"
+ }
+}
\ No newline at end of file
diff --git a/packages/transactional-adapters/transactional-adapter-knex/src/index.ts b/packages/transactional-adapters/transactional-adapter-knex/src/index.ts
new file mode 100644
index 0000000..c5026f1
--- /dev/null
+++ b/packages/transactional-adapters/transactional-adapter-knex/src/index.ts
@@ -0,0 +1 @@
+export * from './lib/transactional-adapter-knex';
diff --git a/packages/transactional-adapters/transactional-adapter-knex/src/lib/transactional-adapter-knex.ts b/packages/transactional-adapters/transactional-adapter-knex/src/lib/transactional-adapter-knex.ts
new file mode 100644
index 0000000..39a3bc3
--- /dev/null
+++ b/packages/transactional-adapters/transactional-adapter-knex/src/lib/transactional-adapter-knex.ts
@@ -0,0 +1,33 @@
+import { TransactionalAdapter } from '@nestjs-cls/transactional';
+import { Knex } from 'knex';
+
+export interface KnexTransactionalAdapterOptions {
+ /**
+ * The injection token for the Knex instance.
+ */
+ knexInstanceToken: any;
+}
+
+export class TransactionalAdapterKnex
+ implements TransactionalAdapter
+{
+ connectionToken: any;
+
+ constructor(options: KnexTransactionalAdapterOptions) {
+ this.connectionToken = options.knexInstanceToken;
+ }
+
+ optionsFactory = (knexInstance: Knex) => ({
+ wrapWithTransaction: async (
+ options: Knex.TransactionConfig,
+ fn: (...args: any[]) => Promise,
+ setClient: (client?: Knex) => void,
+ ) => {
+ return knexInstance.transaction((trx) => {
+ setClient(trx);
+ return fn();
+ }, options);
+ },
+ getFallbackInstance: () => knexInstance,
+ });
+}
diff --git a/packages/transactional-adapters/transactional-adapter-knex/test/docker-compose.yml b/packages/transactional-adapters/transactional-adapter-knex/test/docker-compose.yml
new file mode 100644
index 0000000..d28f3da
--- /dev/null
+++ b/packages/transactional-adapters/transactional-adapter-knex/test/docker-compose.yml
@@ -0,0 +1,10 @@
+services:
+ db:
+ image: postgres:15
+ ports:
+ - 5432:5432
+ environment:
+ POSTGRES_USER: postgres
+ POSTGRES_PASSWORD: postgres
+ POSTGRES_DB: postgres
+
\ No newline at end of file
diff --git a/packages/transactional-adapters/transactional-adapter-knex/test/transactional-adapter-knex.spec.ts b/packages/transactional-adapters/transactional-adapter-knex/test/transactional-adapter-knex.spec.ts
new file mode 100644
index 0000000..0c05cf0
--- /dev/null
+++ b/packages/transactional-adapters/transactional-adapter-knex/test/transactional-adapter-knex.spec.ts
@@ -0,0 +1,181 @@
+import {
+ ClsPluginTransactional,
+ Transactional,
+ TransactionHost,
+} from '@nestjs-cls/transactional';
+import { Inject, Injectable, Module } from '@nestjs/common';
+import { Test, TestingModule } from '@nestjs/testing';
+import { ClsModule } from 'nestjs-cls';
+import Knex from 'knex';
+import { TransactionalAdapterKnex } from '../src';
+
+const KNEX = 'KNEX';
+
+@Injectable()
+class UserRepository {
+ constructor(
+ private readonly txHost: TransactionHost,
+ ) {}
+
+ async getUserById(id: number) {
+ return this.txHost.tx('user').where({ id }).first();
+ }
+
+ async createUser(name: string) {
+ const created = await this.txHost
+ .tx('user')
+ .insert({ name: name, email: `${name}@email.com` })
+ .returning('*');
+ return created[0] ?? null;
+ }
+}
+
+@Injectable()
+class UserService {
+ constructor(
+ private readonly userRepository: UserRepository,
+ private readonly txHost: TransactionHost,
+ @Inject(KNEX)
+ private readonly knex: Knex.Knex,
+ ) {}
+
+ @Transactional()
+ async transactionWithDecorator() {
+ const r1 = await this.userRepository.createUser('John');
+ const r2 = await this.userRepository.getUserById(r1.id);
+ return { r1, r2 };
+ }
+
+ @Transactional({
+ isolationLevel: 'serializable',
+ })
+ async transactionWithDecoratorWithOptions() {
+ const r1 = await this.userRepository.createUser('James');
+ const r2 =
+ (await this.knex('user').where({ id: r1.id }).first()) ?? null;
+ const r3 = await this.userRepository.getUserById(r1.id);
+ return { r1, r2, r3 };
+ }
+
+ async transactionWithFunctionWrapper() {
+ return this.txHost.withTransaction(
+ {
+ isolationLevel: 'serializable',
+ },
+ async () => {
+ const r1 = await this.userRepository.createUser('Joe');
+ const r2 =
+ (await this.knex('user').where({ id: r1.id }).first()) ??
+ null;
+ const r3 = await this.userRepository.getUserById(r1.id);
+ return { r1, r2, r3 };
+ },
+ );
+ }
+
+ @Transactional()
+ async transactionWithDecoratorError() {
+ await this.userRepository.createUser('Nobody');
+ throw new Error('Rollback');
+ }
+}
+
+const knex = Knex({
+ client: 'sqlite',
+ connection: {
+ filename: 'test.db',
+ },
+ useNullAsDefault: true,
+ pool: { min: 1, max: 2 },
+});
+
+@Module({
+ providers: [
+ {
+ provide: KNEX,
+ useValue: knex,
+ },
+ ],
+ exports: [KNEX],
+})
+class KnexModule {}
+
+@Module({
+ imports: [
+ KnexModule,
+ ClsModule.forRoot({
+ plugins: [
+ new ClsPluginTransactional({
+ imports: [KnexModule],
+ adapter: new TransactionalAdapterKnex({
+ knexInstanceToken: KNEX,
+ }),
+ }),
+ ],
+ }),
+ ],
+ providers: [UserService, UserRepository],
+})
+class AppModule {}
+
+describe('Transactional', () => {
+ let module: TestingModule;
+ let callingService: UserService;
+
+ beforeAll(async () => {
+ await knex.schema.dropTableIfExists('user');
+ await knex.schema.createTable('user', (table) => {
+ table.increments('id');
+ table.string('name');
+ table.string('email');
+ });
+ });
+
+ beforeEach(async () => {
+ module = await Test.createTestingModule({
+ imports: [AppModule],
+ }).compile();
+ await module.init();
+ callingService = module.get(UserService);
+ });
+
+ afterAll(async () => {
+ await knex.destroy();
+ });
+
+ describe('TransactionalAdapterKnex', () => {
+ it('should run a transaction with the default options with a decorator', async () => {
+ const { r1, r2 } = await callingService.transactionWithDecorator();
+ expect(r1).toEqual(r2);
+ const users = await knex('user');
+ expect(users).toEqual(expect.arrayContaining([r1]));
+ });
+
+ it('should run a transaction with the specified options with a decorator', async () => {
+ const { r1, r2, r3 } =
+ await callingService.transactionWithDecoratorWithOptions();
+ expect(r1).toEqual(r3);
+ expect(r2).toBeNull();
+ const users = await knex('user');
+ expect(users).toEqual(expect.arrayContaining([r1]));
+ });
+ it('should run a transaction with the specified options with a function wrapper', async () => {
+ const { r1, r2, r3 } =
+ await callingService.transactionWithFunctionWrapper();
+ expect(r1).toEqual(r3);
+ expect(r2).toBeNull();
+ const users = await knex('user');
+ expect(users).toEqual(expect.arrayContaining([r1]));
+ });
+
+ it('should rollback a transaction on error', async () => {
+ await expect(
+ callingService.transactionWithDecoratorError(),
+ ).rejects.toThrow(new Error('Rollback'));
+ const users = await knex('user');
+ expect(users).toEqual(
+ expect.not.arrayContaining([{ name: 'Nobody' }]),
+ );
+ });
+ });
+});
diff --git a/packages/transactional-adapters/transactional-adapter-knex/tsconfig.json b/packages/transactional-adapters/transactional-adapter-knex/tsconfig.json
new file mode 100644
index 0000000..bbc28fb
--- /dev/null
+++ b/packages/transactional-adapters/transactional-adapter-knex/tsconfig.json
@@ -0,0 +1,8 @@
+{
+ "extends": "../../../tsconfig.json",
+ "compilerOptions": {
+ "outDir": "dist",
+ "rootDir": "."
+ },
+ "include": ["src/**/*.ts", "test/**/*.ts"]
+}
diff --git a/tsconfig.json b/tsconfig.json
index 1e036ee..d181c78 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -28,8 +28,11 @@
{
"path": "packages/transactional"
},
+ {
+ "path": "packages/transactional-adapters/transactional-adapter-knex"
+ },
{
"path": "packages/transactional-adapters/transactional-adapter-prisma"
}
]
-}
+}
\ No newline at end of file
diff --git a/yarn.lock b/yarn.lock
index 5d27887..b4fad24 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -3886,6 +3886,13 @@ __metadata:
languageName: node
linkType: hard
+"@gar/promisify@npm:^1.0.1":
+ version: 1.1.3
+ resolution: "@gar/promisify@npm:1.1.3"
+ checksum: 0b3c9958d3cd17f4add3574975e3115ae05dc7f1298a60810414b16f6f558c137b5fb3cd3905df380bacfd955ec13f67c1e6710cbb5c246a7e8d65a8289b2bff
+ languageName: node
+ linkType: hard
+
"@goldstack/utils-typescript-references@npm:^0.3.9":
version: 0.3.9
resolution: "@goldstack/utils-typescript-references@npm:0.3.9"
@@ -4645,6 +4652,34 @@ __metadata:
languageName: node
linkType: hard
+"@nestjs-cls/transactional-adapter-knex@workspace:packages/transactional-adapters/transactional-adapter-knex":
+ version: 0.0.0-use.local
+ resolution: "@nestjs-cls/transactional-adapter-knex@workspace:packages/transactional-adapters/transactional-adapter-knex"
+ dependencies:
+ "@nestjs/cli": "npm:^10.0.2"
+ "@nestjs/common": "npm:^10.0.0"
+ "@nestjs/core": "npm:^10.0.0"
+ "@nestjs/testing": "npm:^10.0.0"
+ "@types/jest": "npm:^28.1.2"
+ "@types/node": "npm:^18.0.0"
+ jest: "npm:^28.1.1"
+ knex: "npm:^3.1.0"
+ reflect-metadata: "npm:^0.1.13"
+ rimraf: "npm:^3.0.2"
+ rxjs: "npm:^7.5.5"
+ sqlite3: "npm:^5.1.7"
+ ts-jest: "npm:^28.0.5"
+ ts-loader: "npm:^9.3.0"
+ ts-node: "npm:^10.8.1"
+ tsconfig-paths: "npm:^4.0.0"
+ typescript: "npm:~4.8.0"
+ peerDependencies:
+ "@nestjs-cls/transactional": "workspace:^1"
+ knex: ^3
+ nestjs-cls: "workspace:^4"
+ languageName: unknown
+ linkType: soft
+
"@nestjs-cls/transactional-adapter-prisma@workspace:packages/transactional-adapters/transactional-adapter-prisma":
version: 0.0.0-use.local
resolution: "@nestjs-cls/transactional-adapter-prisma@workspace:packages/transactional-adapters/transactional-adapter-prisma"
@@ -4667,9 +4702,9 @@ __metadata:
tsconfig-paths: "npm:^4.0.0"
typescript: "npm:~4.8.0"
peerDependencies:
- "@nestjs-cls/transactional": "workspace:^1.0.1"
+ "@nestjs-cls/transactional": "workspace:^1"
"@prisma/client": "> 4 < 6"
- nestjs-cls: "workspace:^4.0.1"
+ nestjs-cls: "workspace:^4"
prisma: "> 4 < 6"
languageName: unknown
linkType: soft
@@ -4697,7 +4732,7 @@ __metadata:
peerDependencies:
"@nestjs/common": "> 7.0.0 < 11"
"@nestjs/core": "> 7.0.0 < 11"
- nestjs-cls: "workspace:^4.0.1"
+ nestjs-cls: "workspace:^4"
reflect-metadata: "*"
rxjs: ">= 7"
languageName: unknown
@@ -5013,6 +5048,16 @@ __metadata:
languageName: node
linkType: hard
+"@npmcli/fs@npm:^1.0.0":
+ version: 1.1.1
+ resolution: "@npmcli/fs@npm:1.1.1"
+ dependencies:
+ "@gar/promisify": "npm:^1.0.1"
+ semver: "npm:^7.3.5"
+ checksum: 4143c317a7542af9054018b71601e3c3392e6704e884561229695f099a71336cbd580df9a9ffb965d0024bf0ed593189ab58900fd1714baef1c9ee59c738c3e2
+ languageName: node
+ linkType: hard
+
"@npmcli/fs@npm:^3.1.0":
version: 3.1.0
resolution: "@npmcli/fs@npm:3.1.0"
@@ -5022,6 +5067,16 @@ __metadata:
languageName: node
linkType: hard
+"@npmcli/move-file@npm:^1.0.1":
+ version: 1.1.2
+ resolution: "@npmcli/move-file@npm:1.1.2"
+ dependencies:
+ mkdirp: "npm:^1.0.4"
+ rimraf: "npm:^3.0.2"
+ checksum: 02e946f3dafcc6743132fe2e0e2b585a96ca7265653a38df5a3e53fcf26c7c7a57fc0f861d7c689a23fdb6d6836c7eea5050c8086abf3c994feb2208d1514ff0
+ languageName: node
+ linkType: hard
+
"@nuxtjs/opencollective@npm:0.3.2":
version: 0.3.2
resolution: "@nuxtjs/opencollective@npm:0.3.2"
@@ -5566,6 +5621,13 @@ __metadata:
languageName: node
linkType: hard
+"@tootallnate/once@npm:1":
+ version: 1.1.2
+ resolution: "@tootallnate/once@npm:1.1.2"
+ checksum: 8fe4d006e90422883a4fa9339dd05a83ff626806262e1710cee5758d493e8cbddf2db81c0e4690636dc840b02c9fda62877866ea774ebd07c1777ed5fafbdec6
+ languageName: node
+ linkType: hard
+
"@tootallnate/once@npm:2":
version: 2.0.0
resolution: "@tootallnate/once@npm:2.0.0"
@@ -7303,6 +7365,15 @@ __metadata:
languageName: node
linkType: hard
+"agentkeepalive@npm:^4.1.3":
+ version: 4.5.0
+ resolution: "agentkeepalive@npm:4.5.0"
+ dependencies:
+ humanize-ms: "npm:^1.2.1"
+ checksum: 394ea19f9710f230722996e156607f48fdf3a345133b0b1823244b7989426c16019a428b56c82d3eabef616e938812981d9009f4792ecc66bd6a59e991c62612
+ languageName: node
+ linkType: hard
+
"agentkeepalive@npm:^4.2.1":
version: 4.3.0
resolution: "agentkeepalive@npm:4.3.0"
@@ -7976,6 +8047,15 @@ __metadata:
languageName: node
linkType: hard
+"bindings@npm:^1.5.0":
+ version: 1.5.0
+ resolution: "bindings@npm:1.5.0"
+ dependencies:
+ file-uri-to-path: "npm:1.0.0"
+ checksum: 3dab2491b4bb24124252a91e656803eac24292473e56554e35bbfe3cc1875332cfa77600c3bac7564049dc95075bf6fcc63a4609920ff2d64d0fe405fcf0d4ba
+ languageName: node
+ linkType: hard
+
"bl@npm:^4.0.3, bl@npm:^4.1.0":
version: 4.1.0
resolution: "bl@npm:4.1.0"
@@ -8209,6 +8289,32 @@ __metadata:
languageName: node
linkType: hard
+"cacache@npm:^15.2.0":
+ version: 15.3.0
+ resolution: "cacache@npm:15.3.0"
+ dependencies:
+ "@npmcli/fs": "npm:^1.0.0"
+ "@npmcli/move-file": "npm:^1.0.1"
+ chownr: "npm:^2.0.0"
+ fs-minipass: "npm:^2.0.0"
+ glob: "npm:^7.1.4"
+ infer-owner: "npm:^1.0.4"
+ lru-cache: "npm:^6.0.0"
+ minipass: "npm:^3.1.1"
+ minipass-collect: "npm:^1.0.2"
+ minipass-flush: "npm:^1.0.5"
+ minipass-pipeline: "npm:^1.2.2"
+ mkdirp: "npm:^1.0.3"
+ p-map: "npm:^4.0.0"
+ promise-inflight: "npm:^1.0.1"
+ rimraf: "npm:^3.0.2"
+ ssri: "npm:^8.0.1"
+ tar: "npm:^6.0.2"
+ unique-filename: "npm:^1.1.1"
+ checksum: 886fcc0acc4f6fd5cd142d373d8276267bc6d655d7c4ce60726fbbec10854de3395ee19bbf9e7e73308cdca9fdad0ad55060ff3bd16c6d4165c5b8d21515e1d8
+ languageName: node
+ linkType: hard
+
"cacache@npm:^17.0.0":
version: 17.1.3
resolution: "cacache@npm:17.1.3"
@@ -8493,6 +8599,13 @@ __metadata:
languageName: node
linkType: hard
+"chownr@npm:^1.1.1":
+ version: 1.1.4
+ resolution: "chownr@npm:1.1.4"
+ checksum: ed57952a84cc0c802af900cf7136de643d3aba2eecb59d29344bc2f3f9bf703a301b9d84cdc71f82c3ffc9ccde831b0d92f5b45f91727d6c9da62f23aef9d9db
+ languageName: node
+ linkType: hard
+
"chownr@npm:^2.0.0":
version: 2.0.0
resolution: "chownr@npm:2.0.0"
@@ -8772,6 +8885,13 @@ __metadata:
languageName: node
linkType: hard
+"colorette@npm:2.0.19":
+ version: 2.0.19
+ resolution: "colorette@npm:2.0.19"
+ checksum: 2bcc9134095750fece6e88167011499b964b78bf0ea953469130ddb1dba3c8fe6c03debb0ae181e710e2be10900d117460f980483a7df4ba4a1bac3b182ecb64
+ languageName: node
+ linkType: hard
+
"colorette@npm:^2.0.10":
version: 2.0.20
resolution: "colorette@npm:2.0.20"
@@ -9473,7 +9593,7 @@ __metadata:
languageName: node
linkType: hard
-"debug@npm:4, debug@npm:^4.0.0, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4":
+"debug@npm:4, debug@npm:4.3.4, debug@npm:^4.0.0, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4":
version: 4.3.4
resolution: "debug@npm:4.3.4"
dependencies:
@@ -9697,6 +9817,13 @@ __metadata:
languageName: node
linkType: hard
+"detect-libc@npm:^2.0.0":
+ version: 2.0.2
+ resolution: "detect-libc@npm:2.0.2"
+ checksum: a9f4ffcd2701525c589617d98afe5a5d0676c8ea82bcc4ed6f3747241b79f781d36437c59a5e855254c864d36a3e9f8276568b6b531c28d6e53b093a15703f11
+ languageName: node
+ linkType: hard
+
"detect-newline@npm:^3.0.0":
version: 3.1.0
resolution: "detect-newline@npm:3.1.0"
@@ -10050,7 +10177,7 @@ __metadata:
languageName: node
linkType: hard
-"encoding@npm:^0.1.13":
+"encoding@npm:^0.1.12, encoding@npm:^0.1.13":
version: 0.1.13
resolution: "encoding@npm:0.1.13"
dependencies:
@@ -10291,6 +10418,13 @@ __metadata:
languageName: node
linkType: hard
+"esm@npm:^3.2.25":
+ version: 3.2.25
+ resolution: "esm@npm:3.2.25"
+ checksum: 8e60e8075506a7ce28681c30c8f54623fe18a251c364cd481d86719fc77f58aa055b293d80632d9686d5408aaf865ffa434897dc9fd9153c8b3f469fad23f094
+ languageName: node
+ linkType: hard
+
"espree@npm:^9.6.0":
version: 9.6.1
resolution: "espree@npm:9.6.1"
@@ -10512,6 +10646,13 @@ __metadata:
languageName: node
linkType: hard
+"expand-template@npm:^2.0.3":
+ version: 2.0.3
+ resolution: "expand-template@npm:2.0.3"
+ checksum: 1c9e7afe9acadf9d373301d27f6a47b34e89b3391b1ef38b7471d381812537ef2457e620ae7f819d2642ce9c43b189b3583813ec395e2938319abe356a9b2f51
+ languageName: node
+ linkType: hard
+
"expect@npm:^28.0.0, expect@npm:^28.1.3":
version: 28.1.3
resolution: "expect@npm:28.1.3"
@@ -10855,6 +10996,13 @@ __metadata:
languageName: node
linkType: hard
+"file-uri-to-path@npm:1.0.0":
+ version: 1.0.0
+ resolution: "file-uri-to-path@npm:1.0.0"
+ checksum: 3b545e3a341d322d368e880e1c204ef55f1d45cdea65f7efc6c6ce9e0c4d22d802d5629320eb779d006fe59624ac17b0e848d83cc5af7cd101f206cb704f5519
+ languageName: node
+ linkType: hard
+
"filesize@npm:^8.0.6":
version: 8.0.7
resolution: "filesize@npm:8.0.7"
@@ -11319,6 +11467,13 @@ __metadata:
languageName: node
linkType: hard
+"getopts@npm:2.3.0":
+ version: 2.3.0
+ resolution: "getopts@npm:2.3.0"
+ checksum: edbcbd7020e9d87dc41e4ad9add5eb3873ae61339a62431bd92a461be2c0eaa9ec33b6fd0d67fa1b44feedffcf1cf28d6f9dbdb7d604cb1617eaba146a33cbca
+ languageName: node
+ linkType: hard
+
"git-up@npm:^7.0.0":
version: 7.0.0
resolution: "git-up@npm:7.0.0"
@@ -11338,6 +11493,13 @@ __metadata:
languageName: node
linkType: hard
+"github-from-package@npm:0.0.0":
+ version: 0.0.0
+ resolution: "github-from-package@npm:0.0.0"
+ checksum: 737ee3f52d0a27e26332cde85b533c21fcdc0b09fb716c3f8e522cfaa9c600d4a631dec9fcde179ec9d47cca89017b7848ed4d6ae6b6b78f936c06825b1fcc12
+ languageName: node
+ linkType: hard
+
"github-slugger@npm:^1.5.0":
version: 1.5.0
resolution: "github-slugger@npm:1.5.0"
@@ -12182,7 +12344,7 @@ __metadata:
languageName: node
linkType: hard
-"http-cache-semantics@npm:^4.0.0, http-cache-semantics@npm:^4.1.1":
+"http-cache-semantics@npm:^4.0.0, http-cache-semantics@npm:^4.1.0, http-cache-semantics@npm:^4.1.1":
version: 4.1.1
resolution: "http-cache-semantics@npm:4.1.1"
checksum: ce1319b8a382eb3cbb4a37c19f6bfe14e5bb5be3d09079e885e8c513ab2d3cd9214902f8a31c9dc4e37022633ceabfc2d697405deeaf1b8f3552bb4ed996fdfc
@@ -12228,6 +12390,17 @@ __metadata:
languageName: node
linkType: hard
+"http-proxy-agent@npm:^4.0.1":
+ version: 4.0.1
+ resolution: "http-proxy-agent@npm:4.0.1"
+ dependencies:
+ "@tootallnate/once": "npm:1"
+ agent-base: "npm:6"
+ debug: "npm:4"
+ checksum: 4fa4774d65b5331814b74ac05cefea56854fc0d5989c80b13432c1b0d42a14c9f4342ca3ad9f0359a52e78da12b1744c9f8a28e50042136ea9171675d972a5fd
+ languageName: node
+ linkType: hard
+
"http-proxy-agent@npm:^5.0.0":
version: 5.0.0
resolution: "http-proxy-agent@npm:5.0.0"
@@ -12430,6 +12603,13 @@ __metadata:
languageName: node
linkType: hard
+"infer-owner@npm:^1.0.4":
+ version: 1.0.4
+ resolution: "infer-owner@npm:1.0.4"
+ checksum: a7b241e3149c26e37474e3435779487f42f36883711f198c45794703c7556bc38af224088bd4d1a221a45b8208ae2c2bcf86200383621434d0c099304481c5b9
+ languageName: node
+ linkType: hard
+
"infima@npm:0.2.0-alpha.43":
version: 0.2.0-alpha.43
resolution: "infima@npm:0.2.0-alpha.43"
@@ -13752,6 +13932,45 @@ __metadata:
languageName: node
linkType: hard
+"knex@npm:^3.1.0":
+ version: 3.1.0
+ resolution: "knex@npm:3.1.0"
+ dependencies:
+ colorette: "npm:2.0.19"
+ commander: "npm:^10.0.0"
+ debug: "npm:4.3.4"
+ escalade: "npm:^3.1.1"
+ esm: "npm:^3.2.25"
+ get-package-type: "npm:^0.1.0"
+ getopts: "npm:2.3.0"
+ interpret: "npm:^2.2.0"
+ lodash: "npm:^4.17.21"
+ pg-connection-string: "npm:2.6.2"
+ rechoir: "npm:^0.8.0"
+ resolve-from: "npm:^5.0.0"
+ tarn: "npm:^3.0.2"
+ tildify: "npm:2.0.0"
+ peerDependenciesMeta:
+ better-sqlite3:
+ optional: true
+ mysql:
+ optional: true
+ mysql2:
+ optional: true
+ pg:
+ optional: true
+ pg-native:
+ optional: true
+ sqlite3:
+ optional: true
+ tedious:
+ optional: true
+ bin:
+ knex: bin/cli.js
+ checksum: d8a1f99fad143c6057e94759b2ae700ae661a0b0b2385f643011962ef501dcc7b32cfdb5bda66ef81283ca56f13630f47691c579ce66ad0e8128e209533c3785
+ languageName: node
+ linkType: hard
+
"latest-version@npm:^7.0.0":
version: 7.0.0
resolution: "latest-version@npm:7.0.0"
@@ -14097,6 +14316,30 @@ __metadata:
languageName: node
linkType: hard
+"make-fetch-happen@npm:^9.1.0":
+ version: 9.1.0
+ resolution: "make-fetch-happen@npm:9.1.0"
+ dependencies:
+ agentkeepalive: "npm:^4.1.3"
+ cacache: "npm:^15.2.0"
+ http-cache-semantics: "npm:^4.1.0"
+ http-proxy-agent: "npm:^4.0.1"
+ https-proxy-agent: "npm:^5.0.0"
+ is-lambda: "npm:^1.0.1"
+ lru-cache: "npm:^6.0.0"
+ minipass: "npm:^3.1.3"
+ minipass-collect: "npm:^1.0.2"
+ minipass-fetch: "npm:^1.3.2"
+ minipass-flush: "npm:^1.0.5"
+ minipass-pipeline: "npm:^1.2.4"
+ negotiator: "npm:^0.6.2"
+ promise-retry: "npm:^2.0.1"
+ socks-proxy-agent: "npm:^6.0.0"
+ ssri: "npm:^8.0.0"
+ checksum: 2c737faf6a7f67077679da548b5bfeeef890595bf8c4323a1f76eae355d27ebb33dcf9cf1a673f944cf2f2a7cbf4e2b09f0a0a62931737728f210d902c6be966
+ languageName: node
+ linkType: hard
+
"makeerror@npm:1.0.12":
version: 1.0.12
resolution: "makeerror@npm:1.0.12"
@@ -15162,7 +15405,7 @@ __metadata:
languageName: node
linkType: hard
-"minimist@npm:^1.2.0, minimist@npm:^1.2.5, minimist@npm:^1.2.6":
+"minimist@npm:^1.2.0, minimist@npm:^1.2.3, minimist@npm:^1.2.5, minimist@npm:^1.2.6":
version: 1.2.8
resolution: "minimist@npm:1.2.8"
checksum: 19d3fcdca050087b84c2029841a093691a91259a47def2f18222f41e7645a0b7c44ef4b40e88a1e58a40c84d2ef0ee6047c55594d298146d0eb3f6b737c20ce6
@@ -15178,6 +15421,21 @@ __metadata:
languageName: node
linkType: hard
+"minipass-fetch@npm:^1.3.2":
+ version: 1.4.1
+ resolution: "minipass-fetch@npm:1.4.1"
+ dependencies:
+ encoding: "npm:^0.1.12"
+ minipass: "npm:^3.1.0"
+ minipass-sized: "npm:^1.0.3"
+ minizlib: "npm:^2.0.0"
+ dependenciesMeta:
+ encoding:
+ optional: true
+ checksum: a43da7401cd7c4f24b993887d41bd37d097356083b0bb836fd655916467463a1e6e9e553b2da4fcbe8745bf23d40c8b884eab20745562199663b3e9060cd8e7a
+ languageName: node
+ linkType: hard
+
"minipass-fetch@npm:^3.0.0":
version: 3.0.3
resolution: "minipass-fetch@npm:3.0.3"
@@ -15202,7 +15460,7 @@ __metadata:
languageName: node
linkType: hard
-"minipass-pipeline@npm:^1.2.4":
+"minipass-pipeline@npm:^1.2.2, minipass-pipeline@npm:^1.2.4":
version: 1.2.4
resolution: "minipass-pipeline@npm:1.2.4"
dependencies:
@@ -15220,7 +15478,7 @@ __metadata:
languageName: node
linkType: hard
-"minipass@npm:^3.0.0":
+"minipass@npm:^3.0.0, minipass@npm:^3.1.0, minipass@npm:^3.1.1, minipass@npm:^3.1.3":
version: 3.3.6
resolution: "minipass@npm:3.3.6"
dependencies:
@@ -15250,7 +15508,7 @@ __metadata:
languageName: node
linkType: hard
-"minizlib@npm:^2.1.1, minizlib@npm:^2.1.2":
+"minizlib@npm:^2.0.0, minizlib@npm:^2.1.1, minizlib@npm:^2.1.2":
version: 2.1.2
resolution: "minizlib@npm:2.1.2"
dependencies:
@@ -15260,6 +15518,13 @@ __metadata:
languageName: node
linkType: hard
+"mkdirp-classic@npm:^0.5.2, mkdirp-classic@npm:^0.5.3":
+ version: 0.5.3
+ resolution: "mkdirp-classic@npm:0.5.3"
+ checksum: 95371d831d196960ddc3833cc6907e6b8f67ac5501a6582f47dfae5eb0f092e9f8ce88e0d83afcae95d6e2b61a01741ba03714eeafb6f7a6e9dcc158ac85b168
+ languageName: node
+ linkType: hard
+
"mkdirp@npm:0.3.0":
version: 0.3.0
resolution: "mkdirp@npm:0.3.0"
@@ -15278,7 +15543,7 @@ __metadata:
languageName: node
linkType: hard
-"mkdirp@npm:^1.0.3":
+"mkdirp@npm:^1.0.3, mkdirp@npm:^1.0.4":
version: 1.0.4
resolution: "mkdirp@npm:1.0.4"
bin:
@@ -15404,6 +15669,13 @@ __metadata:
languageName: node
linkType: hard
+"napi-build-utils@npm:^1.0.1":
+ version: 1.0.2
+ resolution: "napi-build-utils@npm:1.0.2"
+ checksum: 37fd2cd0ff2ad20073ce78d83fd718a740d568b225924e753ae51cb69d68f330c80544d487e5e5bd18e28702ed2ca469c2424ad948becd1862c1b0209542b2e9
+ languageName: node
+ linkType: hard
+
"natural-compare-lite@npm:^1.4.0":
version: 1.4.0
resolution: "natural-compare-lite@npm:1.4.0"
@@ -15418,7 +15690,7 @@ __metadata:
languageName: node
linkType: hard
-"negotiator@npm:0.6.3, negotiator@npm:^0.6.3":
+"negotiator@npm:0.6.3, negotiator@npm:^0.6.2, negotiator@npm:^0.6.3":
version: 0.6.3
resolution: "negotiator@npm:0.6.3"
checksum: 3ec9fd413e7bf071c937ae60d572bc67155262068ed522cf4b3be5edbe6ddf67d095ec03a3a14ebf8fc8e95f8e1d61be4869db0dbb0de696f6b837358bd43fc2
@@ -15518,6 +15790,15 @@ __metadata:
languageName: node
linkType: hard
+"node-abi@npm:^3.3.0":
+ version: 3.54.0
+ resolution: "node-abi@npm:3.54.0"
+ dependencies:
+ semver: "npm:^7.3.5"
+ checksum: 9ebbb21e6951aa51e831549ed62b68dc56bcc10f6b21ffd04195a16a6abf5ddfc48b6ae5e3334720fe4459cafde5ec8103025902efff5599d0539f8656fc694e
+ languageName: node
+ linkType: hard
+
"node-abort-controller@npm:^3.0.1, node-abort-controller@npm:^3.1.1":
version: 3.1.1
resolution: "node-abort-controller@npm:3.1.1"
@@ -15525,6 +15806,15 @@ __metadata:
languageName: node
linkType: hard
+"node-addon-api@npm:^7.0.0":
+ version: 7.1.0
+ resolution: "node-addon-api@npm:7.1.0"
+ dependencies:
+ node-gyp: "npm:latest"
+ checksum: 2e096ab079e3c46d33b0e252386e9c239c352f7cc6d75363d9a3c00bdff34c1a5da170da861917512843f213c32d024ced9dc9552b968029786480d18727ec66
+ languageName: node
+ linkType: hard
+
"node-emoji@npm:1.11.0":
version: 1.11.0
resolution: "node-emoji@npm:1.11.0"
@@ -15567,6 +15857,26 @@ __metadata:
languageName: node
linkType: hard
+"node-gyp@npm:8.x":
+ version: 8.4.1
+ resolution: "node-gyp@npm:8.4.1"
+ dependencies:
+ env-paths: "npm:^2.2.0"
+ glob: "npm:^7.1.4"
+ graceful-fs: "npm:^4.2.6"
+ make-fetch-happen: "npm:^9.1.0"
+ nopt: "npm:^5.0.0"
+ npmlog: "npm:^6.0.0"
+ rimraf: "npm:^3.0.2"
+ semver: "npm:^7.3.5"
+ tar: "npm:^6.1.2"
+ which: "npm:^2.0.2"
+ bin:
+ node-gyp: bin/node-gyp.js
+ checksum: 80ef333b3a882eb6a2695a8e08f31d618f4533eff192864e4a3a16b67ff0abc9d8c1d5fac0395550ec699326b9248c5e2b3be178492f7f4d1ccf97d2cf948021
+ languageName: node
+ linkType: hard
+
"node-gyp@npm:latest":
version: 9.4.0
resolution: "node-gyp@npm:9.4.0"
@@ -15627,6 +15937,17 @@ __metadata:
languageName: node
linkType: hard
+"nopt@npm:^5.0.0":
+ version: 5.0.0
+ resolution: "nopt@npm:5.0.0"
+ dependencies:
+ abbrev: "npm:1"
+ bin:
+ nopt: bin/nopt.js
+ checksum: fc5c4f07155cb455bf5fc3dd149fac421c1a40fd83c6bfe83aa82b52f02c17c5e88301321318adaa27611c8a6811423d51d29deaceab5fa158b585a61a551061
+ languageName: node
+ linkType: hard
+
"nopt@npm:^6.0.0":
version: 6.0.0
resolution: "nopt@npm:6.0.0"
@@ -16241,6 +16562,13 @@ __metadata:
languageName: node
linkType: hard
+"pg-connection-string@npm:2.6.2":
+ version: 2.6.2
+ resolution: "pg-connection-string@npm:2.6.2"
+ checksum: e8fdea74fcc8bdc3d7c5c6eadd9425fdba7e67fb7fe836f9c0cecad94c8984e435256657d1d8ce0483d1fedef667e7a57e32449a63cb805cb0289fc34b62da35
+ languageName: node
+ linkType: hard
+
"picocolors@npm:^1.0.0":
version: 1.0.0
resolution: "picocolors@npm:1.0.0"
@@ -16790,6 +17118,28 @@ __metadata:
languageName: node
linkType: hard
+"prebuild-install@npm:^7.1.1":
+ version: 7.1.1
+ resolution: "prebuild-install@npm:7.1.1"
+ dependencies:
+ detect-libc: "npm:^2.0.0"
+ expand-template: "npm:^2.0.3"
+ github-from-package: "npm:0.0.0"
+ minimist: "npm:^1.2.3"
+ mkdirp-classic: "npm:^0.5.3"
+ napi-build-utils: "npm:^1.0.1"
+ node-abi: "npm:^3.3.0"
+ pump: "npm:^3.0.0"
+ rc: "npm:^1.2.7"
+ simple-get: "npm:^4.0.0"
+ tar-fs: "npm:^2.0.0"
+ tunnel-agent: "npm:^0.6.0"
+ bin:
+ prebuild-install: bin.js
+ checksum: 6dc70f36b0f4adcb2fe0ed38d874ab28b571fb1a9725d769e8ba3f64a15831e58462de09f3e6e64569bcc4a3e03b9328b56faa0d45fe10ae1574478814536c76
+ languageName: node
+ linkType: hard
+
"prelude-ls@npm:^1.2.1":
version: 1.2.1
resolution: "prelude-ls@npm:1.2.1"
@@ -16895,6 +17245,13 @@ __metadata:
languageName: node
linkType: hard
+"promise-inflight@npm:^1.0.1":
+ version: 1.0.1
+ resolution: "promise-inflight@npm:1.0.1"
+ checksum: d179d148d98fbff3d815752fa9a08a87d3190551d1420f17c4467f628214db12235ae068d98cd001f024453676d8985af8f28f002345646c4ece4600a79620bc
+ languageName: node
+ linkType: hard
+
"promise-retry@npm:^2.0.1":
version: 2.0.1
resolution: "promise-retry@npm:2.0.1"
@@ -17123,7 +17480,7 @@ __metadata:
languageName: node
linkType: hard
-"rc@npm:1.2.8":
+"rc@npm:1.2.8, rc@npm:^1.2.7":
version: 1.2.8
resolution: "rc@npm:1.2.8"
dependencies:
@@ -18349,6 +18706,24 @@ __metadata:
languageName: node
linkType: hard
+"simple-concat@npm:^1.0.0":
+ version: 1.0.1
+ resolution: "simple-concat@npm:1.0.1"
+ checksum: 62f7508e674414008910b5397c1811941d457dfa0db4fd5aa7fa0409eb02c3609608dfcd7508cace75b3a0bf67a2a77990711e32cd213d2c76f4fd12ee86d776
+ languageName: node
+ linkType: hard
+
+"simple-get@npm:^4.0.0":
+ version: 4.0.1
+ resolution: "simple-get@npm:4.0.1"
+ dependencies:
+ decompress-response: "npm:^6.0.0"
+ once: "npm:^1.3.1"
+ simple-concat: "npm:^1.0.0"
+ checksum: b0649a581dbca741babb960423248899203165769747142033479a7dc5e77d7b0fced0253c731cd57cf21e31e4d77c9157c3069f4448d558ebc96cf9e1eebcf0
+ languageName: node
+ linkType: hard
+
"single-user-cache@npm:^0.6.0":
version: 0.6.0
resolution: "single-user-cache@npm:0.6.0"
@@ -18442,6 +18817,17 @@ __metadata:
languageName: node
linkType: hard
+"socks-proxy-agent@npm:^6.0.0":
+ version: 6.2.1
+ resolution: "socks-proxy-agent@npm:6.2.1"
+ dependencies:
+ agent-base: "npm:^6.0.2"
+ debug: "npm:^4.3.3"
+ socks: "npm:^2.6.2"
+ checksum: d75c1cf1fdd7f8309a43a77f84409b793fc0f540742ef915154e70ac09a08b0490576fe85d4f8d68bbf80e604a62957a17ab5ef50d312fe1442b0ab6f8f6e6f6
+ languageName: node
+ linkType: hard
+
"socks-proxy-agent@npm:^7.0.0":
version: 7.0.0
resolution: "socks-proxy-agent@npm:7.0.0"
@@ -18618,6 +19004,27 @@ __metadata:
languageName: node
linkType: hard
+"sqlite3@npm:^5.1.7":
+ version: 5.1.7
+ resolution: "sqlite3@npm:5.1.7"
+ dependencies:
+ bindings: "npm:^1.5.0"
+ node-addon-api: "npm:^7.0.0"
+ node-gyp: "npm:8.x"
+ prebuild-install: "npm:^7.1.1"
+ tar: "npm:^6.1.11"
+ peerDependencies:
+ node-gyp: 8.x
+ dependenciesMeta:
+ node-gyp:
+ optional: true
+ peerDependenciesMeta:
+ node-gyp:
+ optional: true
+ checksum: 10daab5d7854bd0ec3c7690c00359cd3444eabc869b68c68dcb61374a8fa5e2f4be06cf0aba78f7a16336d49e83e4631e8af98f8bd33c772fe8d60b45fa60bc1
+ languageName: node
+ linkType: hard
+
"srcset@npm:^4.0.0":
version: 4.0.0
resolution: "srcset@npm:4.0.0"
@@ -18643,6 +19050,15 @@ __metadata:
languageName: node
linkType: hard
+"ssri@npm:^8.0.0, ssri@npm:^8.0.1":
+ version: 8.0.1
+ resolution: "ssri@npm:8.0.1"
+ dependencies:
+ minipass: "npm:^3.1.1"
+ checksum: 5cfae216ae02dcd154d1bbed2d0a60038a4b3a2fcaac3c7e47401ff4e058e551ee74cfdba618871bf168cd583db7b8324f94af6747d4303b73cd4c3f6dc5c9c2
+ languageName: node
+ linkType: hard
+
"stable@npm:^0.1.8":
version: 0.1.8
resolution: "stable@npm:0.1.8"
@@ -18996,7 +19412,19 @@ __metadata:
languageName: node
linkType: hard
-"tar-stream@npm:^2.0.1":
+"tar-fs@npm:^2.0.0":
+ version: 2.1.1
+ resolution: "tar-fs@npm:2.1.1"
+ dependencies:
+ chownr: "npm:^1.1.1"
+ mkdirp-classic: "npm:^0.5.2"
+ pump: "npm:^3.0.0"
+ tar-stream: "npm:^2.1.4"
+ checksum: 871d26a934bfb7beeae4c4d8a09689f530b565f79bd0cf489823ff0efa3705da01278160da10bb006d1a793fa0425cf316cec029b32a9159eacbeaff4965fb6d
+ languageName: node
+ linkType: hard
+
+"tar-stream@npm:^2.0.1, tar-stream@npm:^2.1.4":
version: 2.2.0
resolution: "tar-stream@npm:2.2.0"
dependencies:
@@ -19009,6 +19437,20 @@ __metadata:
languageName: node
linkType: hard
+"tar@npm:^6.0.2":
+ version: 6.2.0
+ resolution: "tar@npm:6.2.0"
+ dependencies:
+ chownr: "npm:^2.0.0"
+ fs-minipass: "npm:^2.0.0"
+ minipass: "npm:^5.0.0"
+ minizlib: "npm:^2.1.1"
+ mkdirp: "npm:^1.0.3"
+ yallist: "npm:^4.0.0"
+ checksum: 02ca064a1a6b4521fef88c07d389ac0936730091f8c02d30ea60d472e0378768e870769ab9e986d87807bfee5654359cf29ff4372746cc65e30cbddc352660d8
+ languageName: node
+ linkType: hard
+
"tar@npm:^6.0.5, tar@npm:^6.1.11, tar@npm:^6.1.2":
version: 6.1.15
resolution: "tar@npm:6.1.15"
@@ -19023,6 +19465,13 @@ __metadata:
languageName: node
linkType: hard
+"tarn@npm:^3.0.2":
+ version: 3.0.2
+ resolution: "tarn@npm:3.0.2"
+ checksum: ea2344e3d21936111176375bd6f34eba69a38ef1bc59434d523fd313166f8a28a47b0a847846c119f72dcf2c1e1231596d74ac3fcfc3cc73966b3d293a327269
+ languageName: node
+ linkType: hard
+
"tau-prolog@npm:^0.2.66":
version: 0.2.81
resolution: "tau-prolog@npm:0.2.81"
@@ -19186,6 +19635,13 @@ __metadata:
languageName: node
linkType: hard
+"tildify@npm:2.0.0":
+ version: 2.0.0
+ resolution: "tildify@npm:2.0.0"
+ checksum: 57961810a6915f47bdba7da7fa66a5f12597a0495fa016785de197b02e7ba9994ffebb30569294061bbf6d9395c6b1319d830076221e5a3f49f1318bc749565c
+ languageName: node
+ linkType: hard
+
"tiny-glob@npm:0.2.9":
version: 0.2.9
resolution: "tiny-glob@npm:0.2.9"
@@ -19482,6 +19938,15 @@ __metadata:
languageName: node
linkType: hard
+"tunnel-agent@npm:^0.6.0":
+ version: 0.6.0
+ resolution: "tunnel-agent@npm:0.6.0"
+ dependencies:
+ safe-buffer: "npm:^5.0.1"
+ checksum: 4c7a1b813e7beae66fdbf567a65ec6d46313643753d0beefb3c7973d66fcec3a1e7f39759f0a0b4465883499c6dc8b0750ab8b287399af2e583823e40410a17a
+ languageName: node
+ linkType: hard
+
"tunnel@npm:^0.0.6":
version: 0.0.6
resolution: "tunnel@npm:0.0.6"
@@ -19762,6 +20227,15 @@ __metadata:
languageName: node
linkType: hard
+"unique-filename@npm:^1.1.1":
+ version: 1.1.1
+ resolution: "unique-filename@npm:1.1.1"
+ dependencies:
+ unique-slug: "npm:^2.0.0"
+ checksum: d005bdfaae6894da8407c4de2b52f38b3c58ec86e79fc2ee19939da3085374413b073478ec54e721dc8e32b102cf9e50d0481b8331abdc62202e774b789ea874
+ languageName: node
+ linkType: hard
+
"unique-filename@npm:^3.0.0":
version: 3.0.0
resolution: "unique-filename@npm:3.0.0"
@@ -19771,6 +20245,15 @@ __metadata:
languageName: node
linkType: hard
+"unique-slug@npm:^2.0.0":
+ version: 2.0.2
+ resolution: "unique-slug@npm:2.0.2"
+ dependencies:
+ imurmurhash: "npm:^0.1.4"
+ checksum: 9eabc51680cf0b8b197811a48857e41f1364b25362300c1ff636c0eca5ec543a92a38786f59cf0697e62c6f814b11ecbe64e8093db71246468a1f03b80c83970
+ languageName: node
+ linkType: hard
+
"unique-slug@npm:^4.0.0":
version: 4.0.0
resolution: "unique-slug@npm:4.0.0"