mirror of https://github.com/boxyhq/jackson.git
Feature/typeorm migrations (#141)
* updated typeorm * renamed connection * updated migration scripts to new TypeORM version (v3) * typeorm and mongo -migrations and namespace column * update the mongo migration file * remove the camelcase * remove camelcase * rename the file * renaming migration files * folder restructuring and add migrate-mongo package * correcting path and minor changes * merging db name with URL * changing ts to js for mongo * migration automation with env variable * using custom scripts for migration * Dockerfile fixes * bootstrap script fixes and still need ts-node migrate-mongo in dockerfile * running migration in CI/CD * turning down planetscale * migration related fixes for namespace * Migration & bootstrap changes * reverting minor change * bootstrap.sh will only run in docker env * bootstrap RUN_MIGRATION env variable will use true * migration fixes * migration changes * removed console logs * planetscale migration fixes * copied back old files, tweaks to filenames * add index for namespace * restore older migration scripts * formatting * aligned timestamps * updated mysql, mariadb, mssql, planetscale namespace migrations * We'll run migrate manually as a separate step/container * forgot to add migrate.sh * bumped up timestamp * Enable planetscale testing * Revert planetscale test and comment config object * Revert deletions in Dockerfile * Update maria, mssql, mysql, ps, pg, sql namespace migrations * Cleanup * Add runMigration env to support manual run * Minor tweak * Ensure sql data migrations run after schema changes * Fix mssql namespace data migration query * Sync lock file * Update mongo timestamp * Set env for npm mongo migration script * [sql] Populate namespace column for synchronize: true instances * Rename `DB_RUN_MIGRATION` -> `DB_MANUAL_MIGRATION` * [mongo] Populate namespace for already deployed instances * Cleanup migrate.sh * [bash -> sh] bash does not work inside docker * Optimise migration artifacts * Source packages from global path * Copy npm from build context - excludes node_modules via .dockerignore * Remove redundant copy step * added swc packages * fresh package-lock * fresh package-lock * added migratepg job to skaffold fixes in migrate.sh to exit with error when migration fails * cleanup * added migratepg to demo skaffold as well * turn on planetscale tests --------- Co-authored-by: Deepak Prabhakara <deepak@boxyhq.com> Co-authored-by: Utkarsh Mehta <ukrocks.mehta@gmail.com> Co-authored-by: Aswin V <vaswin91@gmail.com>
This commit is contained in:
parent
aa83c4f477
commit
0b99c7d667
|
@ -18,6 +18,8 @@ DB_CLEANUP_LIMIT=1000
|
|||
DB_PAGE_LIMIT=50
|
||||
# You can use openssl to generate a random 32 character key: openssl rand -base64 24
|
||||
DB_ENCRYPTION_KEY=
|
||||
# Uncomment below if you wish to run DB migrations manually.
|
||||
#DB_MANUAL_MIGRATION=true
|
||||
|
||||
# Admin Portal settings
|
||||
# SMTP details for Magic Links
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
node_modules
|
||||
dist
|
||||
npm/dist
|
||||
npm/dist
|
||||
npm/migration
|
11
Dockerfile
11
Dockerfile
|
@ -10,7 +10,7 @@ WORKDIR /app
|
|||
# Install dependencies based on the preferred package manager
|
||||
COPY package.json package-lock.json ./
|
||||
COPY npm npm
|
||||
COPY prebuild.ts prebuild.ts
|
||||
COPY migrate.sh prebuild.ts ./
|
||||
RUN npm run custom-install
|
||||
|
||||
|
||||
|
@ -31,7 +31,6 @@ ENV NEXT_TELEMETRY_DISABLED 1
|
|||
|
||||
RUN npm run build
|
||||
|
||||
|
||||
# Production image, copy all the files and run next
|
||||
FROM $NODEJS_IMAGE AS runner
|
||||
WORKDIR /app
|
||||
|
@ -53,8 +52,12 @@ COPY --from=builder /app/public ./public
|
|||
# https://nextjs.org/docs/advanced-features/output-file-tracing
|
||||
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
|
||||
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
|
||||
|
||||
|
||||
# Support for DB migration
|
||||
COPY --from=builder --chown=nextjs:nodejs /app/migrate.sh ./migrate.sh
|
||||
COPY npm npm
|
||||
RUN chmod +x migrate.sh
|
||||
# mongodb peer dependency would be automatically installed for migrate-mongo
|
||||
RUN npm install -g ts-node migrate-mongo typeorm reflect-metadata mssql mysql2 pg
|
||||
USER nextjs
|
||||
|
||||
EXPOSE 5225
|
||||
|
|
|
@ -16,7 +16,7 @@ spec:
|
|||
spec:
|
||||
containers:
|
||||
- name: jackson
|
||||
image: boxyhq/jackson:tagwillbereplaced
|
||||
image: boxyhq/jackson-local
|
||||
imagePullPolicy: IfNotPresent
|
||||
startupProbe:
|
||||
httpGet:
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: jackson
|
||||
spec:
|
||||
replicas: 1
|
||||
template:
|
||||
spec:
|
||||
containers:
|
||||
- name: jackson
|
||||
image: boxyhq/jackson:tagwillbereplaced
|
||||
imagePullPolicy: IfNotPresent
|
|
@ -7,6 +7,10 @@ resources:
|
|||
- ./mocksaml-secrets.yaml
|
||||
- ./mocksaml-deployment.yaml
|
||||
|
||||
patches:
|
||||
- ./jackson-deployment.yaml
|
||||
- ./migratepg-job.yaml
|
||||
|
||||
images:
|
||||
- name: boxyhq/jackson
|
||||
newTag: 1.13.0
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
apiVersion: batch/v1
|
||||
kind: Job
|
||||
metadata:
|
||||
name: jackson-migrate-pg
|
||||
spec:
|
||||
template:
|
||||
spec:
|
||||
restartPolicy: 'OnFailure'
|
||||
containers:
|
||||
- name: db
|
||||
image: boxyhq/jackson:tagwillbereplaced
|
||||
imagePullPolicy: IfNotPresent
|
||||
command:
|
||||
- /bin/sh
|
||||
- migrate.sh
|
||||
envFrom:
|
||||
- secretRef:
|
||||
name: jackson
|
|
@ -6,6 +6,7 @@ bases:
|
|||
|
||||
resources:
|
||||
- ./secrets.yaml
|
||||
- ./migratepg-job.yaml
|
||||
|
||||
commonLabels:
|
||||
jacksondev: '1'
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
apiVersion: batch/v1
|
||||
kind: Job
|
||||
metadata:
|
||||
name: jackson-migrate-pg
|
||||
spec:
|
||||
template:
|
||||
spec:
|
||||
restartPolicy: 'OnFailure'
|
||||
containers:
|
||||
- name: db
|
||||
image: boxyhq/jackson-local
|
||||
imagePullPolicy: IfNotPresent
|
||||
command:
|
||||
- /bin/sh
|
||||
- migrate.sh
|
||||
envFrom:
|
||||
- secretRef:
|
||||
name: jackson
|
|
@ -34,3 +34,4 @@ stringData:
|
|||
RETRACED_EXTERNAL_URL: 'http://localhost:3000/auditlog'
|
||||
RETRACED_ADMIN_ROOT_TOKEN: 'dev'
|
||||
BOXYHQ_LICENSE_KEY: ''
|
||||
DB_MANUAL_MIGRATION: 'true'
|
||||
|
|
|
@ -43,6 +43,7 @@ const db: DatabaseOption = {
|
|||
readCapacityUnits: process.env.DB_DYNAMODB_RCUS ? Number(process.env.DB_DYNAMODB_RCUS) : undefined,
|
||||
writeCapacityUnits: process.env.DB_DYNAMODB_RCUS ? Number(process.env.DB_DYNAMODB_WCUS) : undefined,
|
||||
},
|
||||
manualMigration: process.env.DB_MANUAL_MIGRATION === 'true',
|
||||
};
|
||||
|
||||
const jacksonOptions: JacksonOption = {
|
||||
|
|
|
@ -0,0 +1,21 @@
|
|||
#!/bin/sh
|
||||
|
||||
echo "Initiating Migration..."
|
||||
export NODE_PATH=$(npm root -g)
|
||||
|
||||
cd ./npm
|
||||
if [ "$DB_ENGINE" = "mongo" ]
|
||||
then
|
||||
migrate-mongo up
|
||||
else
|
||||
ts-node --transpile-only --project tsconfig.json $NODE_PATH/typeorm/cli.js migration:run -d ./typeorm.ts
|
||||
fi
|
||||
if [ $? -eq 1 ]
|
||||
then
|
||||
echo "Migration Failed..."
|
||||
exit 1
|
||||
fi
|
||||
echo "Migration Finished..."
|
||||
|
||||
cd ..
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
const config = {
|
||||
mongodb: {
|
||||
url: process.env.DB_URL || 'mongodb://localhost:27017/jackson',
|
||||
options: {
|
||||
useNewUrlParser: true, // removes a deprecation warning when connecting
|
||||
useUnifiedTopology: true, // removes a deprecating warning when connecting
|
||||
// connectTimeoutMS: 3600000, // increase connection timeout to 1 hour
|
||||
// socketTimeoutMS: 3600000, // increase socket timeout to 1 hour
|
||||
},
|
||||
},
|
||||
|
||||
migrationsDir: 'migration/mongo',
|
||||
changelogCollectionName: 'changelog',
|
||||
migrationFileExtension: '.js',
|
||||
// Enable the algorithm to create a checksum of the file contents and use that in the comparison to determine
|
||||
// if the file should be run. Requires that scripts are coded to be run multiple times.
|
||||
useFileHash: false,
|
||||
// Don't change this, unless you know what you're doing
|
||||
moduleSystem: 'commonjs',
|
||||
};
|
||||
|
||||
module.exports = config;
|
|
@ -1,23 +0,0 @@
|
|||
import {MigrationInterface, QueryRunner} from "typeorm";
|
||||
|
||||
export class Initial1640877418166 implements MigrationInterface {
|
||||
name = 'Initial1640877418166'
|
||||
|
||||
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(`CREATE TABLE \`jackson_store\` (\`key\` varchar(1500) NOT NULL, \`value\` text NOT NULL, \`iv\` varchar(64) NULL, \`tag\` varchar(64) NULL, PRIMARY KEY (\`key\`)) ENGINE=InnoDB`);
|
||||
await queryRunner.query(`CREATE TABLE \`jackson_index\` (\`id\` int NOT NULL AUTO_INCREMENT, \`key\` varchar(1500) NOT NULL, \`storeKey\` varchar(1500) NOT NULL, INDEX \`_jackson_index_key\` (\`key\`), INDEX \`_jackson_index_key_store\` (\`key\`, \`storeKey\`), PRIMARY KEY (\`id\`)) ENGINE=InnoDB`);
|
||||
await queryRunner.query(`CREATE TABLE \`jackson_ttl\` (\`key\` varchar(1500) NOT NULL, \`expiresAt\` bigint NOT NULL, INDEX \`_jackson_ttl_expires_at\` (\`expiresAt\`), PRIMARY KEY (\`key\`)) ENGINE=InnoDB`);
|
||||
await queryRunner.query(`ALTER TABLE \`jackson_index\` ADD CONSTRAINT \`FK_937b040fb2592b4671cbde09e83\` FOREIGN KEY (\`storeKey\`) REFERENCES \`jackson_store\`(\`key\`) ON DELETE CASCADE ON UPDATE NO ACTION`);
|
||||
}
|
||||
|
||||
public async down(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(`ALTER TABLE \`jackson_index\` DROP FOREIGN KEY \`FK_937b040fb2592b4671cbde09e83\``);
|
||||
await queryRunner.query(`DROP INDEX \`_jackson_ttl_expires_at\` ON \`jackson_ttl\``);
|
||||
await queryRunner.query(`DROP TABLE \`jackson_ttl\``);
|
||||
await queryRunner.query(`DROP INDEX \`_jackson_index_key_store\` ON \`jackson_index\``);
|
||||
await queryRunner.query(`DROP INDEX \`_jackson_index_key\` ON \`jackson_index\``);
|
||||
await queryRunner.query(`DROP TABLE \`jackson_index\``);
|
||||
await queryRunner.query(`DROP TABLE \`jackson_store\``);
|
||||
}
|
||||
|
||||
}
|
|
@ -1,16 +0,0 @@
|
|||
import {MigrationInterface, QueryRunner} from "typeorm";
|
||||
|
||||
export class createdAt1644332636666 implements MigrationInterface {
|
||||
name = 'createdAt1644332636666'
|
||||
|
||||
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(`ALTER TABLE \`jackson_store\` ADD \`createdAt\` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP()`);
|
||||
await queryRunner.query(`ALTER TABLE \`jackson_store\` ADD \`modifiedAt\` timestamp NULL`);
|
||||
}
|
||||
|
||||
public async down(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(`ALTER TABLE \`jackson_store\` DROP COLUMN \`modifiedAt\``);
|
||||
await queryRunner.query(`ALTER TABLE \`jackson_store\` DROP COLUMN \`createdAt\``);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
import { MigrationInterface, QueryRunner } from "typeorm";
|
||||
|
||||
export class MdNamespace1692767993709 implements MigrationInterface {
|
||||
name = 'MdNamespace1692767993709'
|
||||
|
||||
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(`ALTER TABLE \`jackson_store\` ADD \`namespace\` varchar(64) NULL`);
|
||||
await queryRunner.query(`CREATE INDEX \`_jackson_store_namespace\` ON \`jackson_store\` (\`namespace\`)`);
|
||||
}
|
||||
|
||||
public async down(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(`DROP INDEX \`_jackson_store_namespace\` ON \`jackson_store\``);
|
||||
await queryRunner.query(`ALTER TABLE \`jackson_store\` DROP COLUMN \`namespace\``);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,23 @@
|
|||
module.exports = {
|
||||
async up(db, client) {
|
||||
const collection = db.collection('jacksonStore');
|
||||
const response = await collection.distinct('_id', {});
|
||||
const searchTerm = ':';
|
||||
for (const k in response) {
|
||||
const key = response[k].toString();
|
||||
const tokens2 = key.split(searchTerm).slice(0, 2);
|
||||
const value = tokens2.join(searchTerm);
|
||||
await db.collection('jacksonStore').updateOne({ _id: key }, {$set: { namespace: value }});
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
async down(db, client) {
|
||||
const collection = db.collection('jacksonStore');
|
||||
const response = await collection.distinct('_id', {});
|
||||
for (const k in response) {
|
||||
const key = response[k].toString();
|
||||
await db.collection('jacksonStore').updateOne({ _id: key }, {$set: { namespace: '' }});
|
||||
}
|
||||
}
|
||||
};
|
|
@ -0,0 +1,16 @@
|
|||
import { MigrationInterface, QueryRunner } from "typeorm";
|
||||
|
||||
export class MssNamespace1692767993709 implements MigrationInterface {
|
||||
name = 'MssNamespace1692767993709'
|
||||
|
||||
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(`ALTER TABLE "jackson_store" ADD "namespace" varchar(64)`);
|
||||
await queryRunner.query(`CREATE INDEX "_jackson_store_namespace" ON "jackson_store" ("namespace") `);
|
||||
}
|
||||
|
||||
public async down(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(`DROP INDEX "_jackson_store_namespace" ON "jackson_store"`);
|
||||
await queryRunner.query(`ALTER TABLE "jackson_store" DROP COLUMN "namespace"`);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,25 @@
|
|||
import { MigrationInterface, QueryRunner } from "typeorm"
|
||||
|
||||
export class namespace1692817789888 implements MigrationInterface {
|
||||
name = 'namespace1692817789888'
|
||||
|
||||
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||
const response = await queryRunner.query("select jackson.[key] from jackson_store jackson")
|
||||
const searchTerm = ':';
|
||||
for (const k in response) {
|
||||
const key = response[k].key;
|
||||
const tokens2 = key.split(searchTerm).slice(0, 2);
|
||||
const value = tokens2.join(searchTerm);
|
||||
queryRunner.query(`update jackson_store set namespace = '${value}' where jackson_store.[key] = '${key}'`)
|
||||
}
|
||||
}
|
||||
|
||||
public async down(queryRunner: QueryRunner): Promise<void> {
|
||||
const response = await queryRunner.query("select jackson.[key] from jackson_store jackson")
|
||||
for (const k in response) {
|
||||
const key = response[k].key;
|
||||
queryRunner.query(`update jackson_store set namespace = NULL where jackson_store.[key] = '${key}'`)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -1,23 +0,0 @@
|
|||
import {MigrationInterface, QueryRunner} from "typeorm";
|
||||
|
||||
export class Initial1640877358925 implements MigrationInterface {
|
||||
name = 'Initial1640877358925'
|
||||
|
||||
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(`CREATE TABLE \`jackson_store\` (\`key\` varchar(1500) NOT NULL, \`value\` text NOT NULL, \`iv\` varchar(64) NULL, \`tag\` varchar(64) NULL, PRIMARY KEY (\`key\`)) ENGINE=InnoDB`);
|
||||
await queryRunner.query(`CREATE TABLE \`jackson_index\` (\`id\` int NOT NULL AUTO_INCREMENT, \`key\` varchar(1500) NOT NULL, \`storeKey\` varchar(1500) NOT NULL, INDEX \`_jackson_index_key\` (\`key\`), INDEX \`_jackson_index_key_store\` (\`key\`, \`storeKey\`), PRIMARY KEY (\`id\`)) ENGINE=InnoDB`);
|
||||
await queryRunner.query(`CREATE TABLE \`jackson_ttl\` (\`key\` varchar(1500) NOT NULL, \`expiresAt\` bigint NOT NULL, INDEX \`_jackson_ttl_expires_at\` (\`expiresAt\`), PRIMARY KEY (\`key\`)) ENGINE=InnoDB`);
|
||||
await queryRunner.query(`ALTER TABLE \`jackson_index\` ADD CONSTRAINT \`FK_937b040fb2592b4671cbde09e83\` FOREIGN KEY (\`storeKey\`) REFERENCES \`jackson_store\`(\`key\`) ON DELETE CASCADE ON UPDATE NO ACTION`);
|
||||
}
|
||||
|
||||
public async down(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(`ALTER TABLE \`jackson_index\` DROP FOREIGN KEY \`FK_937b040fb2592b4671cbde09e83\``);
|
||||
await queryRunner.query(`DROP INDEX \`_jackson_ttl_expires_at\` ON \`jackson_ttl\``);
|
||||
await queryRunner.query(`DROP TABLE \`jackson_ttl\``);
|
||||
await queryRunner.query(`DROP INDEX \`_jackson_index_key_store\` ON \`jackson_index\``);
|
||||
await queryRunner.query(`DROP INDEX \`_jackson_index_key\` ON \`jackson_index\``);
|
||||
await queryRunner.query(`DROP TABLE \`jackson_index\``);
|
||||
await queryRunner.query(`DROP TABLE \`jackson_store\``);
|
||||
}
|
||||
|
||||
}
|
|
@ -1,16 +0,0 @@
|
|||
import {MigrationInterface, QueryRunner} from "typeorm";
|
||||
|
||||
export class createdAt1644332641078 implements MigrationInterface {
|
||||
name = 'createdAt1644332641078'
|
||||
|
||||
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(`ALTER TABLE \`jackson_store\` ADD \`createdAt\` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP`);
|
||||
await queryRunner.query(`ALTER TABLE \`jackson_store\` ADD \`modifiedAt\` timestamp NULL`);
|
||||
}
|
||||
|
||||
public async down(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(`ALTER TABLE \`jackson_store\` DROP COLUMN \`modifiedAt\``);
|
||||
await queryRunner.query(`ALTER TABLE \`jackson_store\` DROP COLUMN \`createdAt\``);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
import { MigrationInterface, QueryRunner } from "typeorm";
|
||||
|
||||
export class msNamespace1692767993709 implements MigrationInterface {
|
||||
name = 'msNamespace1692767993709'
|
||||
|
||||
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(`ALTER TABLE \`jackson_store\` ADD \`namespace\` varchar(64) NULL`);
|
||||
await queryRunner.query(`CREATE INDEX \`_jackson_store_namespace\` ON \`jackson_store\` (\`namespace\`)`);
|
||||
}
|
||||
|
||||
public async down(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(`DROP INDEX \`_jackson_store_namespace\` ON \`jackson_store\``);
|
||||
await queryRunner.query(`ALTER TABLE \`jackson_store\` DROP COLUMN \`namespace\``);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
import { MigrationInterface, QueryRunner } from "typeorm";
|
||||
|
||||
export class MsNamespace1692767993709 implements MigrationInterface {
|
||||
name = 'MsNamespace1692767993709'
|
||||
|
||||
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(`ALTER TABLE \`jackson_store\` ADD \`namespace\` varchar(64) NULL`);
|
||||
await queryRunner.query(`CREATE INDEX \`_jackson_store_namespace\` ON \`jackson_store\` (\`namespace\`)`);
|
||||
}
|
||||
|
||||
public async down(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(`DROP INDEX \`_jackson_store_namespace\` ON \`jackson_store\``);
|
||||
await queryRunner.query(`ALTER TABLE \`jackson_store\` DROP COLUMN \`namespace\``);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
import { MigrationInterface, QueryRunner } from "typeorm";
|
||||
|
||||
export class PgNamespace1692767993709 implements MigrationInterface {
|
||||
name = 'PgNamespace1692767993709'
|
||||
|
||||
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(`ALTER TABLE "jackson_store" ADD "namespace" character varying(64)`);
|
||||
await queryRunner.query(`CREATE INDEX "_jackson_store_namespace" ON "jackson_store" ("namespace") `);
|
||||
}
|
||||
|
||||
public async down(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(`DROP INDEX "public"."_jackson_store_namespace"`);
|
||||
await queryRunner.query(`ALTER TABLE "jackson_store" DROP COLUMN "namespace"`);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,25 @@
|
|||
import { MigrationInterface, QueryRunner } from "typeorm"
|
||||
|
||||
export class namespace1692817789888 implements MigrationInterface {
|
||||
name = 'namespace1692817789888'
|
||||
|
||||
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||
const response = await queryRunner.query("select jackson.key from jackson_store jackson")
|
||||
const searchTerm = ':';
|
||||
for (const k in response) {
|
||||
const key = response[k].key;
|
||||
const tokens2 = key.split(searchTerm).slice(0, 2);
|
||||
const value = tokens2.join(searchTerm);
|
||||
queryRunner.query(`update jackson_store set namespace = '${value}' where jackson_store.key = '${key}'`)
|
||||
}
|
||||
}
|
||||
|
||||
public async down(queryRunner: QueryRunner): Promise<void> {
|
||||
const response = await queryRunner.query("select jackson.key from jackson_store jackson")
|
||||
for (const k in response) {
|
||||
const key = response[k].key;
|
||||
queryRunner.query(`update jackson_store set namespace = NULL where jackson_store.key = '${key}'`)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -41,6 +41,7 @@
|
|||
"@types/sinon": "10.0.19",
|
||||
"@types/tap": "15.0.9",
|
||||
"cross-env": "7.0.3",
|
||||
"migrate-mongo": "10.0.0",
|
||||
"nock": "13.3.4",
|
||||
"sinon": "16.1.0",
|
||||
"tap": "18.5.0",
|
||||
|
@ -80,8 +81,7 @@
|
|||
},
|
||||
"node_modules/@aws-crypto/crc32": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-3.0.0.tgz",
|
||||
"integrity": "sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==",
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"@aws-crypto/util": "^3.0.0",
|
||||
"@aws-sdk/types": "^3.222.0",
|
||||
|
@ -90,8 +90,7 @@
|
|||
},
|
||||
"node_modules/@aws-crypto/crc32/node_modules/tslib": {
|
||||
"version": "1.14.1",
|
||||
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
|
||||
"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
|
||||
"license": "0BSD"
|
||||
},
|
||||
"node_modules/@aws-crypto/ie11-detection": {
|
||||
"version": "3.0.0",
|
||||
|
@ -509,8 +508,7 @@
|
|||
},
|
||||
"node_modules/@aws-sdk/endpoint-cache": {
|
||||
"version": "3.310.0",
|
||||
"resolved": "https://registry.npmjs.org/@aws-sdk/endpoint-cache/-/endpoint-cache-3.310.0.tgz",
|
||||
"integrity": "sha512-y3wipforet41EDTI0vnzxILqwAGll1KfI5qcdX9pXF/WF1f+3frcOtPiWtQEZQpy4czRogKm3BHo70QBYAZxlQ==",
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"mnemonist": "0.38.3",
|
||||
"tslib": "^2.5.0"
|
||||
|
@ -1032,6 +1030,16 @@
|
|||
"xmlbuilder": "15.1.1"
|
||||
}
|
||||
},
|
||||
"node_modules/@colors/colors": {
|
||||
"version": "1.5.0",
|
||||
"resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz",
|
||||
"integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"engines": {
|
||||
"node": ">=0.1.90"
|
||||
}
|
||||
},
|
||||
"node_modules/@cspotcode/source-map-support": {
|
||||
"version": "0.8.1",
|
||||
"dev": true,
|
||||
|
@ -1885,11 +1893,11 @@
|
|||
"license": "(Unlicense OR Apache-2.0)"
|
||||
},
|
||||
"node_modules/@smithy/abort-controller": {
|
||||
"version": "2.0.10",
|
||||
"resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.10.tgz",
|
||||
"integrity": "sha512-xn7PnFD3m4rQIG00h1lPuDVnC2QMtTFhzRLX3y56KkgFaCysS7vpNevNBgmNUtmJ4eVFc+66Zucwo2KDLdicOg==",
|
||||
"version": "2.0.11",
|
||||
"resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.11.tgz",
|
||||
"integrity": "sha512-MSzE1qR2JNyb7ot3blIOT3O3H0Jn06iNDEgHRaqZUwBgx5EG+VIx24Y21tlKofzYryIOcWpIohLrIIyocD6LMA==",
|
||||
"dependencies": {
|
||||
"@smithy/types": "^2.3.4",
|
||||
"@smithy/types": "^2.3.5",
|
||||
"tslib": "^2.5.0"
|
||||
},
|
||||
"engines": {
|
||||
|
@ -1897,14 +1905,14 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@smithy/config-resolver": {
|
||||
"version": "2.0.11",
|
||||
"resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.0.11.tgz",
|
||||
"integrity": "sha512-q97FnlUmbai1c4JlQJgLVBsvSxgV/7Nvg/JK76E1nRq/U5UM56Eqo3dn2fY7JibqgJLg4LPsGdwtIyqyOk35CQ==",
|
||||
"version": "2.0.14",
|
||||
"resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.0.14.tgz",
|
||||
"integrity": "sha512-K1K+FuWQoy8j/G7lAmK85o03O89s2Vvh6kMFmzEmiHUoQCRH1rzbDtMnGNiaMHeSeYJ6y79IyTusdRG+LuWwtg==",
|
||||
"dependencies": {
|
||||
"@smithy/node-config-provider": "^2.0.13",
|
||||
"@smithy/types": "^2.3.4",
|
||||
"@smithy/node-config-provider": "^2.1.1",
|
||||
"@smithy/types": "^2.3.5",
|
||||
"@smithy/util-config-provider": "^2.0.0",
|
||||
"@smithy/util-middleware": "^2.0.3",
|
||||
"@smithy/util-middleware": "^2.0.4",
|
||||
"tslib": "^2.5.0"
|
||||
},
|
||||
"engines": {
|
||||
|
@ -1912,14 +1920,14 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@smithy/credential-provider-imds": {
|
||||
"version": "2.0.13",
|
||||
"resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.0.13.tgz",
|
||||
"integrity": "sha512-/xe3wNoC4j+BeTemH9t2gSKLBfyZmk8LXB2pQm/TOEYi+QhBgT+PSolNDfNAhrR68eggNE17uOimsrnwSkCt4w==",
|
||||
"version": "2.0.16",
|
||||
"resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.0.16.tgz",
|
||||
"integrity": "sha512-tKa2xF+69TvGxJT+lnJpGrKxUuAZDLYXFhqnPEgnHz+psTpkpcB4QRjHj63+uj83KaeFJdTfW201eLZeRn6FfA==",
|
||||
"dependencies": {
|
||||
"@smithy/node-config-provider": "^2.0.13",
|
||||
"@smithy/property-provider": "^2.0.11",
|
||||
"@smithy/types": "^2.3.4",
|
||||
"@smithy/url-parser": "^2.0.10",
|
||||
"@smithy/node-config-provider": "^2.1.1",
|
||||
"@smithy/property-provider": "^2.0.12",
|
||||
"@smithy/types": "^2.3.5",
|
||||
"@smithy/url-parser": "^2.0.11",
|
||||
"tslib": "^2.5.0"
|
||||
},
|
||||
"engines": {
|
||||
|
@ -1927,34 +1935,34 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@smithy/eventstream-codec": {
|
||||
"version": "2.0.10",
|
||||
"resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.0.10.tgz",
|
||||
"integrity": "sha512-3SSDgX2nIsFwif6m+I4+ar4KDcZX463Noes8ekBgQHitULiWvaDZX8XqPaRQSQ4bl1vbeVXHklJfv66MnVO+lw==",
|
||||
"version": "2.0.11",
|
||||
"resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.0.11.tgz",
|
||||
"integrity": "sha512-BQCTjxhCYRZIfXapa2LmZSaH8QUBGwMZw7XRN83hrdixbLjIcj+o549zjkedFS07Ve2TlvWUI6BTzP+nv7snBA==",
|
||||
"dependencies": {
|
||||
"@aws-crypto/crc32": "3.0.0",
|
||||
"@smithy/types": "^2.3.4",
|
||||
"@smithy/types": "^2.3.5",
|
||||
"@smithy/util-hex-encoding": "^2.0.0",
|
||||
"tslib": "^2.5.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@smithy/fetch-http-handler": {
|
||||
"version": "2.2.1",
|
||||
"resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.2.1.tgz",
|
||||
"integrity": "sha512-bXyM8PBAIKxVV++2ZSNBEposTDjFQ31XWOdHED+2hWMNvJHUoQqFbECg/uhcVOa6vHie2/UnzIZfXBSTpDBnEw==",
|
||||
"version": "2.2.2",
|
||||
"resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.2.2.tgz",
|
||||
"integrity": "sha512-K7aRtRuaBjzlk+jWWeyfDTLAmRRvmA4fU8eHUXtjsuEDgi3f356ZE32VD2ssxIH13RCLVZbXMt5h7wHzYiSuVA==",
|
||||
"dependencies": {
|
||||
"@smithy/protocol-http": "^3.0.6",
|
||||
"@smithy/querystring-builder": "^2.0.10",
|
||||
"@smithy/types": "^2.3.4",
|
||||
"@smithy/protocol-http": "^3.0.7",
|
||||
"@smithy/querystring-builder": "^2.0.11",
|
||||
"@smithy/types": "^2.3.5",
|
||||
"@smithy/util-base64": "^2.0.0",
|
||||
"tslib": "^2.5.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@smithy/hash-node": {
|
||||
"version": "2.0.10",
|
||||
"resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.0.10.tgz",
|
||||
"integrity": "sha512-jSTf6uzPk/Vf+8aQ7tVXeHfjxe9wRXSCqIZcBymSDTf7/YrVxniBdpyN74iI8ZUOx/Pyagc81OK5FROLaEjbXQ==",
|
||||
"version": "2.0.11",
|
||||
"resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.0.11.tgz",
|
||||
"integrity": "sha512-PbleVugN2tbhl1ZoNWVrZ1oTFFas/Hq+s6zGO8B9bv4w/StTriTKA9W+xZJACOj9X7zwfoTLbscM+avCB1KqOQ==",
|
||||
"dependencies": {
|
||||
"@smithy/types": "^2.3.4",
|
||||
"@smithy/types": "^2.3.5",
|
||||
"@smithy/util-buffer-from": "^2.0.0",
|
||||
"@smithy/util-utf8": "^2.0.0",
|
||||
"tslib": "^2.5.0"
|
||||
|
@ -1964,11 +1972,11 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@smithy/invalid-dependency": {
|
||||
"version": "2.0.10",
|
||||
"resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.0.10.tgz",
|
||||
"integrity": "sha512-zw9p/zsmJ2cFcW4KMz3CJoznlbRvEA6HG2mvEaX5eAca5dq4VGI2MwPDTfmteC/GsnURS4ogoMQ0p6aHM2SDVQ==",
|
||||
"version": "2.0.11",
|
||||
"resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.0.11.tgz",
|
||||
"integrity": "sha512-zazq99ujxYv/NOf9zh7xXbNgzoVLsqE0wle8P/1zU/XdhPi/0zohTPKWUzIxjGdqb5hkkwfBkNkl5H+LE0mvgw==",
|
||||
"dependencies": {
|
||||
"@smithy/types": "^2.3.4",
|
||||
"@smithy/types": "^2.3.5",
|
||||
"tslib": "^2.5.0"
|
||||
}
|
||||
},
|
||||
|
@ -1983,12 +1991,12 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@smithy/middleware-content-length": {
|
||||
"version": "2.0.12",
|
||||
"resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.0.12.tgz",
|
||||
"integrity": "sha512-QRhJTo5TjG7oF7np6yY4ZO9GDKFVzU/GtcqUqyEa96bLHE3yZHgNmsolOQ97pfxPHmFhH4vDP//PdpAIN3uI1Q==",
|
||||
"version": "2.0.13",
|
||||
"resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.0.13.tgz",
|
||||
"integrity": "sha512-Md2kxWpaec3bXp1oERFPQPBhOXCkGSAF7uc1E+4rkwjgw3/tqAXRtbjbggu67HJdwaif76As8AV6XxbD1HzqTQ==",
|
||||
"dependencies": {
|
||||
"@smithy/protocol-http": "^3.0.6",
|
||||
"@smithy/types": "^2.3.4",
|
||||
"@smithy/protocol-http": "^3.0.7",
|
||||
"@smithy/types": "^2.3.5",
|
||||
"tslib": "^2.5.0"
|
||||
},
|
||||
"engines": {
|
||||
|
@ -1996,14 +2004,14 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@smithy/middleware-endpoint": {
|
||||
"version": "2.0.10",
|
||||
"resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.0.10.tgz",
|
||||
"integrity": "sha512-O6m4puZc16xfenotZUHL4bRlMrwf4gTp+0I5l954M5KNd3dOK18P+FA/IIUgnXF/dX6hlCUcJkBp7nAzwrePKA==",
|
||||
"version": "2.0.11",
|
||||
"resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.0.11.tgz",
|
||||
"integrity": "sha512-mCugsvB15up6fqpzUEpMT4CuJmFkEI+KcozA7QMzYguXCaIilyMKsyxgamwmr+o7lo3QdjN0//XLQ9bWFL129g==",
|
||||
"dependencies": {
|
||||
"@smithy/middleware-serde": "^2.0.10",
|
||||
"@smithy/types": "^2.3.4",
|
||||
"@smithy/url-parser": "^2.0.10",
|
||||
"@smithy/util-middleware": "^2.0.3",
|
||||
"@smithy/middleware-serde": "^2.0.11",
|
||||
"@smithy/types": "^2.3.5",
|
||||
"@smithy/url-parser": "^2.0.11",
|
||||
"@smithy/util-middleware": "^2.0.4",
|
||||
"tslib": "^2.5.0"
|
||||
},
|
||||
"engines": {
|
||||
|
@ -2011,16 +2019,16 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@smithy/middleware-retry": {
|
||||
"version": "2.0.13",
|
||||
"resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.0.13.tgz",
|
||||
"integrity": "sha512-zuOva8xgWC7KYG8rEXyWIcZv2GWszO83DCTU6IKcf/FKu6OBmSE+EYv3EUcCGY+GfiwCX0EyJExC9Lpq9b0w5Q==",
|
||||
"version": "2.0.16",
|
||||
"resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.0.16.tgz",
|
||||
"integrity": "sha512-Br5+0yoiMS0ugiOAfJxregzMMGIRCbX4PYo1kDHtLgvkA/d++aHbnHB819m5zOIAMPvPE7AThZgcsoK+WOsUTA==",
|
||||
"dependencies": {
|
||||
"@smithy/node-config-provider": "^2.0.13",
|
||||
"@smithy/protocol-http": "^3.0.6",
|
||||
"@smithy/service-error-classification": "^2.0.3",
|
||||
"@smithy/types": "^2.3.4",
|
||||
"@smithy/util-middleware": "^2.0.3",
|
||||
"@smithy/util-retry": "^2.0.3",
|
||||
"@smithy/node-config-provider": "^2.1.1",
|
||||
"@smithy/protocol-http": "^3.0.7",
|
||||
"@smithy/service-error-classification": "^2.0.4",
|
||||
"@smithy/types": "^2.3.5",
|
||||
"@smithy/util-middleware": "^2.0.4",
|
||||
"@smithy/util-retry": "^2.0.4",
|
||||
"tslib": "^2.5.0",
|
||||
"uuid": "^8.3.2"
|
||||
},
|
||||
|
@ -2029,11 +2037,11 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@smithy/middleware-serde": {
|
||||
"version": "2.0.10",
|
||||
"resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.0.10.tgz",
|
||||
"integrity": "sha512-+A0AFqs768256H/BhVEsBF6HijFbVyAwYRVXY/izJFkTalVWJOp4JA0YdY0dpXQd+AlW0tzs+nMQCE1Ew+DcgQ==",
|
||||
"version": "2.0.11",
|
||||
"resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.0.11.tgz",
|
||||
"integrity": "sha512-NuxnjMyf4zQqhwwdh0OTj5RqpnuT6HcH5Xg5GrPijPcKzc2REXVEVK4Yyk8ckj8ez1XSj/bCmJ+oNjmqB02GWA==",
|
||||
"dependencies": {
|
||||
"@smithy/types": "^2.3.4",
|
||||
"@smithy/types": "^2.3.5",
|
||||
"tslib": "^2.5.0"
|
||||
},
|
||||
"engines": {
|
||||
|
@ -2041,11 +2049,11 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@smithy/middleware-stack": {
|
||||
"version": "2.0.4",
|
||||
"resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.0.4.tgz",
|
||||
"integrity": "sha512-MW0KNKfh8ZGLagMZnxcLJWPNXoKqW6XV/st5NnCBmmA2e2JhrUjU0AJ5Ca/yjTyNEKs3xH7AQDwp1YmmpEpmQQ==",
|
||||
"version": "2.0.5",
|
||||
"resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.0.5.tgz",
|
||||
"integrity": "sha512-bVQU/rZzBY7CbSxIrDTGZYnBWKtIw+PL/cRc9B7etZk1IKSOe0NvKMJyWllfhfhrTeMF6eleCzOihIQympAvPw==",
|
||||
"dependencies": {
|
||||
"@smithy/types": "^2.3.4",
|
||||
"@smithy/types": "^2.3.5",
|
||||
"tslib": "^2.5.0"
|
||||
},
|
||||
"engines": {
|
||||
|
@ -2053,13 +2061,13 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@smithy/node-config-provider": {
|
||||
"version": "2.0.13",
|
||||
"resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.0.13.tgz",
|
||||
"integrity": "sha512-pPpLqYuJcOq1sj1EGu+DoZK47DUS4gepqSTNgRezmrjnzNlSU2/Dcc9Ebzs+WZ0Z5vXKazuE+k+NksFLo07/AA==",
|
||||
"version": "2.1.1",
|
||||
"resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.1.1.tgz",
|
||||
"integrity": "sha512-1lF6s1YWBi1LBu2O30tD3jyTgMtuvk/Z1twzXM4GPYe4dmZix4nNREPJIPOcfFikNU2o0eTYP80+izx5F2jIJA==",
|
||||
"dependencies": {
|
||||
"@smithy/property-provider": "^2.0.11",
|
||||
"@smithy/shared-ini-file-loader": "^2.0.12",
|
||||
"@smithy/types": "^2.3.4",
|
||||
"@smithy/property-provider": "^2.0.12",
|
||||
"@smithy/shared-ini-file-loader": "^2.2.0",
|
||||
"@smithy/types": "^2.3.5",
|
||||
"tslib": "^2.5.0"
|
||||
},
|
||||
"engines": {
|
||||
|
@ -2067,14 +2075,14 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@smithy/node-http-handler": {
|
||||
"version": "2.1.6",
|
||||
"resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.1.6.tgz",
|
||||
"integrity": "sha512-NspvD3aCwiUNtoSTcVHz0RZz1tQ/SaRIe1KPF+r0mAdCZ9eWuhIeJT8ZNPYa1ITn7/Lgg64IyFjqPynZ8KnYQw==",
|
||||
"version": "2.1.7",
|
||||
"resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.1.7.tgz",
|
||||
"integrity": "sha512-PQIKZXlp3awCDn/xNlCSTFE7aYG/5Tx33M05NfQmWYeB5yV1GZZOSz4dXpwiNJYTXb9jPqjl+ueXXkwtEluFFA==",
|
||||
"dependencies": {
|
||||
"@smithy/abort-controller": "^2.0.10",
|
||||
"@smithy/protocol-http": "^3.0.6",
|
||||
"@smithy/querystring-builder": "^2.0.10",
|
||||
"@smithy/types": "^2.3.4",
|
||||
"@smithy/abort-controller": "^2.0.11",
|
||||
"@smithy/protocol-http": "^3.0.7",
|
||||
"@smithy/querystring-builder": "^2.0.11",
|
||||
"@smithy/types": "^2.3.5",
|
||||
"tslib": "^2.5.0"
|
||||
},
|
||||
"engines": {
|
||||
|
@ -2082,11 +2090,11 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@smithy/property-provider": {
|
||||
"version": "2.0.11",
|
||||
"resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.11.tgz",
|
||||
"integrity": "sha512-kzuOadu6XvrnlF1iXofpKXYmo4oe19st9/DE8f5gHNaFepb4eTkR8gD8BSdTnNnv7lxfv6uOwZPg4VS6hemX1w==",
|
||||
"version": "2.0.12",
|
||||
"resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.12.tgz",
|
||||
"integrity": "sha512-Un/OvvuQ1Kg8WYtoMCicfsFFuHb/TKL3pCA6ZIo/WvNTJTR94RtoRnL7mY4XkkUAoFMyf6KjcQJ76y1FX7S5rw==",
|
||||
"dependencies": {
|
||||
"@smithy/types": "^2.3.4",
|
||||
"@smithy/types": "^2.3.5",
|
||||
"tslib": "^2.5.0"
|
||||
},
|
||||
"engines": {
|
||||
|
@ -2094,11 +2102,11 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@smithy/protocol-http": {
|
||||
"version": "3.0.6",
|
||||
"resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.6.tgz",
|
||||
"integrity": "sha512-F0jAZzwznMmHaggiZgc7YoS08eGpmLvhVktY/Taz6+OAOHfyIqWSDNgFqYR+WHW9z5fp2XvY4mEUrQgYMQ71jw==",
|
||||
"version": "3.0.7",
|
||||
"resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.7.tgz",
|
||||
"integrity": "sha512-HnZW8y+r66ntYueCDbLqKwWcMNWW8o3eVpSrHNluwtBJ/EUWfQHRKSiu6vZZtc6PGfPQWgVfucoCE/C3QufMAA==",
|
||||
"dependencies": {
|
||||
"@smithy/types": "^2.3.4",
|
||||
"@smithy/types": "^2.3.5",
|
||||
"tslib": "^2.5.0"
|
||||
},
|
||||
"engines": {
|
||||
|
@ -2106,11 +2114,11 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@smithy/querystring-builder": {
|
||||
"version": "2.0.10",
|
||||
"resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.0.10.tgz",
|
||||
"integrity": "sha512-uujJGp8jzrrU1UHme8sUKEbawQTcTmUWsh8rbGXYD/lMwNLQ+9jQ9dMDWbbH9Hpoa9RER1BeL/38WzGrbpob2w==",
|
||||
"version": "2.0.11",
|
||||
"resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.0.11.tgz",
|
||||
"integrity": "sha512-b4kEbVMxpmfv2VWUITn2otckTi7GlMteZQxi+jlwedoATOGEyrCJPfRcYQJjbCi3fZ2QTfh3PcORvB27+j38Yg==",
|
||||
"dependencies": {
|
||||
"@smithy/types": "^2.3.4",
|
||||
"@smithy/types": "^2.3.5",
|
||||
"@smithy/util-uri-escape": "^2.0.0",
|
||||
"tslib": "^2.5.0"
|
||||
},
|
||||
|
@ -2119,11 +2127,11 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@smithy/querystring-parser": {
|
||||
"version": "2.0.10",
|
||||
"resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.10.tgz",
|
||||
"integrity": "sha512-WSD4EU60Q8scacT5PIpx4Bahn6nWpt+MiYLcBkFt6fOj7AssrNeaNIU2Z0g40ftVmrwLcEOIKGX92ynbVDb3ZA==",
|
||||
"version": "2.0.11",
|
||||
"resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.11.tgz",
|
||||
"integrity": "sha512-YXe7jhi7s3dQ0Fu9dLoY/gLu6NCyy8tBWJL/v2c9i7/RLpHgKT+uT96/OqZkHizCJ4kr0ZD46tzMjql/o60KLg==",
|
||||
"dependencies": {
|
||||
"@smithy/types": "^2.3.4",
|
||||
"@smithy/types": "^2.3.5",
|
||||
"tslib": "^2.5.0"
|
||||
},
|
||||
"engines": {
|
||||
|
@ -2131,22 +2139,22 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@smithy/service-error-classification": {
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.0.3.tgz",
|
||||
"integrity": "sha512-b+m4QCHXb7oKAkM/jHwHrl5gpqhFoMTHF643L0/vAEkegrcUWyh1UjyoHttuHcP5FnHVVy4EtpPtLkEYD+xMFw==",
|
||||
"version": "2.0.4",
|
||||
"resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.0.4.tgz",
|
||||
"integrity": "sha512-77506l12I5gxTZqBkx3Wb0RqMG81bMYLaVQ+EqIWFwQDJRs5UFeXogKxSKojCmz1wLUziHZQXm03MBzPQiumQw==",
|
||||
"dependencies": {
|
||||
"@smithy/types": "^2.3.4"
|
||||
"@smithy/types": "^2.3.5"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=14.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@smithy/shared-ini-file-loader": {
|
||||
"version": "2.0.12",
|
||||
"resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.0.12.tgz",
|
||||
"integrity": "sha512-umi0wc4UBGYullAgYNUVfGLgVpxQyES47cnomTqzCKeKO5oudO4hyDNj+wzrOjqDFwK2nWYGVgS8Y0JgGietrw==",
|
||||
"version": "2.2.0",
|
||||
"resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.2.0.tgz",
|
||||
"integrity": "sha512-xFXqs4vAb5BdkzHSRrTapFoaqS4/3m/CGZzdw46fBjYZ0paYuLAoMY60ICCn1FfGirG+PiJ3eWcqJNe4/SkfyA==",
|
||||
"dependencies": {
|
||||
"@smithy/types": "^2.3.4",
|
||||
"@smithy/types": "^2.3.5",
|
||||
"tslib": "^2.5.0"
|
||||
},
|
||||
"engines": {
|
||||
|
@ -2154,9 +2162,10 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@smithy/signature-v4": {
|
||||
"version": "2.0.10",
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.0.10.tgz",
|
||||
"integrity": "sha512-S6gcP4IXfO/VMswovrhxPpqvQvMal7ZRjM4NvblHSPpE5aNBYx67UkHFF3kg0hR3tJKqNpBGbxwq0gzpdHKLRA==",
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"@smithy/eventstream-codec": "^2.0.10",
|
||||
"@smithy/is-array-buffer": "^2.0.0",
|
||||
|
@ -2172,13 +2181,13 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@smithy/smithy-client": {
|
||||
"version": "2.1.9",
|
||||
"resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.1.9.tgz",
|
||||
"integrity": "sha512-HTicQSn/lOcXKJT+DKJ4YMu51S6PzbWsO8Z6Pwueo30mSoFKXg5P0BDkg2VCDqCVR0mtddM/F6hKhjW6YAV/yg==",
|
||||
"version": "2.1.10",
|
||||
"resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.1.10.tgz",
|
||||
"integrity": "sha512-2OEmZDiW1Z196QHuQZ5M6cBE8FCSG0H2HADP1G+DY8P3agsvb0YJyfhyKuJbxIQy15tr3eDAK6FOrlbxgKOOew==",
|
||||
"dependencies": {
|
||||
"@smithy/middleware-stack": "^2.0.4",
|
||||
"@smithy/types": "^2.3.4",
|
||||
"@smithy/util-stream": "^2.0.14",
|
||||
"@smithy/middleware-stack": "^2.0.5",
|
||||
"@smithy/types": "^2.3.5",
|
||||
"@smithy/util-stream": "^2.0.15",
|
||||
"tslib": "^2.5.0"
|
||||
},
|
||||
"engines": {
|
||||
|
@ -2186,9 +2195,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@smithy/types": {
|
||||
"version": "2.3.4",
|
||||
"resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.3.4.tgz",
|
||||
"integrity": "sha512-D7xlM9FOMFyFw7YnMXn9dK2KuN6+JhnrZwVt1fWaIu8hCk5CigysweeIT/H/nCo4YV+s8/oqUdLfexbkPZtvqw==",
|
||||
"version": "2.3.5",
|
||||
"resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.3.5.tgz",
|
||||
"integrity": "sha512-ehyDt8M9hehyxrLQGoA1BGPou8Js1Ocoh5M0ngDhJMqbFmNK5N6Xhr9/ZExWkyIW8XcGkiMPq3ZUEE0ScrhbuQ==",
|
||||
"dependencies": {
|
||||
"tslib": "^2.5.0"
|
||||
},
|
||||
|
@ -2197,12 +2206,12 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@smithy/url-parser": {
|
||||
"version": "2.0.10",
|
||||
"resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.10.tgz",
|
||||
"integrity": "sha512-4TXQFGjHcqru8aH5VRB4dSnOFKCYNX6SR1Do6fwxZ+ExT2onLsh2W77cHpks7ma26W5jv6rI1u7d0+KX9F0aOw==",
|
||||
"version": "2.0.11",
|
||||
"resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.11.tgz",
|
||||
"integrity": "sha512-h89yXMCCF+S5k9XIoKltMIWTYj+FcEkU/IIFZ6RtE222fskOTL4Iak6ZRG+ehSvZDt8yKEcxqheTDq7JvvtK3g==",
|
||||
"dependencies": {
|
||||
"@smithy/querystring-parser": "^2.0.10",
|
||||
"@smithy/types": "^2.3.4",
|
||||
"@smithy/querystring-parser": "^2.0.11",
|
||||
"@smithy/types": "^2.3.5",
|
||||
"tslib": "^2.5.0"
|
||||
}
|
||||
},
|
||||
|
@ -2247,8 +2256,7 @@
|
|||
},
|
||||
"node_modules/@smithy/util-config-provider": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-2.0.0.tgz",
|
||||
"integrity": "sha512-xCQ6UapcIWKxXHEU4Mcs2s7LcFQRiU3XEluM2WcCjjBtQkUN71Tb+ydGmJFPxMUrW/GWMgQEEGipLym4XG0jZg==",
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"tslib": "^2.5.0"
|
||||
},
|
||||
|
@ -2257,13 +2265,13 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@smithy/util-defaults-mode-browser": {
|
||||
"version": "2.0.13",
|
||||
"resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.13.tgz",
|
||||
"integrity": "sha512-UmmOdUzaQjqdsl1EjbpEaQxM0VDFqTj6zDuI26/hXN7L/a1k1koTwkYpogHMvunDX3fjrQusg5gv1Td4UsGyog==",
|
||||
"version": "2.0.14",
|
||||
"resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.14.tgz",
|
||||
"integrity": "sha512-NupG7SWUucm3vJrvlpt9jG1XeoPJphjcivgcUUXhDJbUPy4F04LhlTiAhWSzwlCNcF8OJsMvZ/DWbpYD3pselw==",
|
||||
"dependencies": {
|
||||
"@smithy/property-provider": "^2.0.11",
|
||||
"@smithy/smithy-client": "^2.1.9",
|
||||
"@smithy/types": "^2.3.4",
|
||||
"@smithy/property-provider": "^2.0.12",
|
||||
"@smithy/smithy-client": "^2.1.10",
|
||||
"@smithy/types": "^2.3.5",
|
||||
"bowser": "^2.11.0",
|
||||
"tslib": "^2.5.0"
|
||||
},
|
||||
|
@ -2272,16 +2280,16 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@smithy/util-defaults-mode-node": {
|
||||
"version": "2.0.15",
|
||||
"resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.15.tgz",
|
||||
"integrity": "sha512-g6J7MHAibVPMTlXyH3mL+Iet4lMJKFVhsOhJmn+IKG81uy9m42CkRSDlwdQSJAcprLQBIaOPdFxNXQvrg2w1Uw==",
|
||||
"version": "2.0.18",
|
||||
"resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.18.tgz",
|
||||
"integrity": "sha512-+3jMom/b/Cdp21tDnY4vKu249Al+G/P0HbRbct7/aSZDlROzv1tksaYukon6UUv7uoHn+/McqnsvqZHLlqvQ0g==",
|
||||
"dependencies": {
|
||||
"@smithy/config-resolver": "^2.0.11",
|
||||
"@smithy/credential-provider-imds": "^2.0.13",
|
||||
"@smithy/node-config-provider": "^2.0.13",
|
||||
"@smithy/property-provider": "^2.0.11",
|
||||
"@smithy/smithy-client": "^2.1.9",
|
||||
"@smithy/types": "^2.3.4",
|
||||
"@smithy/config-resolver": "^2.0.14",
|
||||
"@smithy/credential-provider-imds": "^2.0.16",
|
||||
"@smithy/node-config-provider": "^2.1.1",
|
||||
"@smithy/property-provider": "^2.0.12",
|
||||
"@smithy/smithy-client": "^2.1.10",
|
||||
"@smithy/types": "^2.3.5",
|
||||
"tslib": "^2.5.0"
|
||||
},
|
||||
"engines": {
|
||||
|
@ -2290,8 +2298,7 @@
|
|||
},
|
||||
"node_modules/@smithy/util-hex-encoding": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.0.0.tgz",
|
||||
"integrity": "sha512-c5xY+NUnFqG6d7HFh1IFfrm3mGl29lC+vF+geHv4ToiuJCBmIfzx6IeHLg+OgRdPFKDXIw6pvi+p3CsscaMcMA==",
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"tslib": "^2.5.0"
|
||||
},
|
||||
|
@ -2300,11 +2307,11 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@smithy/util-middleware": {
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.0.3.tgz",
|
||||
"integrity": "sha512-+FOCFYOxd2HO7v/0hkFSETKf7FYQWa08wh/x/4KUeoVBnLR4juw8Qi+TTqZI6E2h5LkzD9uOaxC9lAjrpVzaaA==",
|
||||
"version": "2.0.4",
|
||||
"resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.0.4.tgz",
|
||||
"integrity": "sha512-Pbu6P4MBwRcjrLgdTR1O4Y3c0sTZn2JdOiJNcgL7EcIStcQodj+6ZTXtbyU/WTEU3MV2NMA10LxFc3AWHZ3+4A==",
|
||||
"dependencies": {
|
||||
"@smithy/types": "^2.3.4",
|
||||
"@smithy/types": "^2.3.5",
|
||||
"tslib": "^2.5.0"
|
||||
},
|
||||
"engines": {
|
||||
|
@ -2312,12 +2319,12 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@smithy/util-retry": {
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.0.3.tgz",
|
||||
"integrity": "sha512-gw+czMnj82i+EaH7NL7XKkfX/ZKrCS2DIWwJFPKs76bMgkhf0y1C94Lybn7f8GkBI9lfIOUdPYtzm19zQOC8sw==",
|
||||
"version": "2.0.4",
|
||||
"resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.0.4.tgz",
|
||||
"integrity": "sha512-b+n1jBBKc77C1E/zfBe1Zo7S9OXGBiGn55N0apfhZHxPUP/fMH5AhFUUcWaJh7NAnah284M5lGkBKuhnr3yK5w==",
|
||||
"dependencies": {
|
||||
"@smithy/service-error-classification": "^2.0.3",
|
||||
"@smithy/types": "^2.3.4",
|
||||
"@smithy/service-error-classification": "^2.0.4",
|
||||
"@smithy/types": "^2.3.5",
|
||||
"tslib": "^2.5.0"
|
||||
},
|
||||
"engines": {
|
||||
|
@ -2325,13 +2332,13 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@smithy/util-stream": {
|
||||
"version": "2.0.14",
|
||||
"resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.0.14.tgz",
|
||||
"integrity": "sha512-XjvlDYe+9DieXhLf7p+EgkXwFtl34kHZcWfHnc5KaILbhyVfDLWuqKTFx6WwCFqb01iFIig8trGwExRIqqkBYg==",
|
||||
"version": "2.0.15",
|
||||
"resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.0.15.tgz",
|
||||
"integrity": "sha512-A/hkYJPH2N5MCWYvky4tTpQihpYAEzqnUfxDyG3L/yMndy/2sLvxnyQal9Opuj1e9FiKSTeMyjnU9xxZGs0mRw==",
|
||||
"dependencies": {
|
||||
"@smithy/fetch-http-handler": "^2.2.1",
|
||||
"@smithy/node-http-handler": "^2.1.6",
|
||||
"@smithy/types": "^2.3.4",
|
||||
"@smithy/fetch-http-handler": "^2.2.2",
|
||||
"@smithy/node-http-handler": "^2.1.7",
|
||||
"@smithy/types": "^2.3.5",
|
||||
"@smithy/util-base64": "^2.0.0",
|
||||
"@smithy/util-buffer-from": "^2.0.0",
|
||||
"@smithy/util-hex-encoding": "^2.0.0",
|
||||
|
@ -2344,8 +2351,7 @@
|
|||
},
|
||||
"node_modules/@smithy/util-uri-escape": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.0.0.tgz",
|
||||
"integrity": "sha512-ebkxsqinSdEooQduuk9CbKcI+wheijxEb3utGXkCoYQkJnwTnLbH1JXGimJtUkQwNQbsbuYwG2+aFVyZf5TLaw==",
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"tslib": "^2.5.0"
|
||||
},
|
||||
|
@ -2365,12 +2371,12 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@smithy/util-waiter": {
|
||||
"version": "2.0.10",
|
||||
"resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-2.0.10.tgz",
|
||||
"integrity": "sha512-yQjwWVrwYw+/f3hFQccE3zZF7lk6N6xtNcA6jvhWFYhnyKAm6B2mX8Gzftl0TbgoPUpzCvKYlvhaEpVtRpVfVw==",
|
||||
"version": "2.0.11",
|
||||
"resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-2.0.11.tgz",
|
||||
"integrity": "sha512-8SJWUl9O1YhjC77EccgltI3q4XZQp3vp9DGEW6o0OdkUcwqm/H4qOLnMkA2n+NDojuM5Iia2jWoCdbluIiG7TA==",
|
||||
"dependencies": {
|
||||
"@smithy/abort-controller": "^2.0.10",
|
||||
"@smithy/types": "^2.3.4",
|
||||
"@smithy/abort-controller": "^2.0.11",
|
||||
"@smithy/types": "^2.3.5",
|
||||
"tslib": "^2.5.0"
|
||||
},
|
||||
"engines": {
|
||||
|
@ -3285,8 +3291,7 @@
|
|||
},
|
||||
"node_modules/bowser": {
|
||||
"version": "2.11.0",
|
||||
"resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz",
|
||||
"integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA=="
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/brace-expansion": {
|
||||
"version": "2.0.1",
|
||||
|
@ -3669,6 +3674,21 @@
|
|||
"node": ">=10"
|
||||
}
|
||||
},
|
||||
"node_modules/cli-table3": {
|
||||
"version": "0.6.3",
|
||||
"resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz",
|
||||
"integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"string-width": "^4.2.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": "10.* || >= 12.*"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"@colors/colors": "1.5.0"
|
||||
}
|
||||
},
|
||||
"node_modules/cli-truncate": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz",
|
||||
|
@ -4219,6 +4239,15 @@
|
|||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/fn-args": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/fn-args/-/fn-args-5.0.0.tgz",
|
||||
"integrity": "sha512-CtbfI3oFFc3nbdIoHycrfbrxiGgxXBXXuyOl49h47JawM1mYrqpiRqnH5CB2mBatdXvHHOUO6a+RiAuuvKt0lw==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/follow-redirects": {
|
||||
"version": "1.15.2",
|
||||
"funding": [
|
||||
|
@ -4292,6 +4321,20 @@
|
|||
}
|
||||
]
|
||||
},
|
||||
"node_modules/fs-extra": {
|
||||
"version": "10.1.0",
|
||||
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz",
|
||||
"integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"graceful-fs": "^4.2.0",
|
||||
"jsonfile": "^6.0.1",
|
||||
"universalify": "^2.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/fs-minipass": {
|
||||
"version": "3.0.3",
|
||||
"resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz",
|
||||
|
@ -4493,6 +4536,8 @@
|
|||
},
|
||||
"node_modules/google-auth-library/node_modules/agent-base": {
|
||||
"version": "7.1.0",
|
||||
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz",
|
||||
"integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"debug": "^4.3.4"
|
||||
|
@ -4503,6 +4548,8 @@
|
|||
},
|
||||
"node_modules/google-auth-library/node_modules/gaxios": {
|
||||
"version": "6.1.1",
|
||||
"resolved": "https://registry.npmjs.org/gaxios/-/gaxios-6.1.1.tgz",
|
||||
"integrity": "sha512-bw8smrX+XlAoo9o1JAksBwX+hi/RG15J+NTSxmNPIclKC3ZVK6C2afwY8OSdRvOK0+ZLecUJYtj2MmjOt3Dm0w==",
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"extend": "^3.0.2",
|
||||
|
@ -4527,6 +4574,8 @@
|
|||
},
|
||||
"node_modules/google-auth-library/node_modules/https-proxy-agent": {
|
||||
"version": "7.0.2",
|
||||
"resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz",
|
||||
"integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"agent-base": "^7.0.2",
|
||||
|
@ -4553,6 +4602,8 @@
|
|||
},
|
||||
"node_modules/googleapis-common/node_modules/agent-base": {
|
||||
"version": "7.1.0",
|
||||
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz",
|
||||
"integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"debug": "^4.3.4"
|
||||
|
@ -4563,6 +4614,8 @@
|
|||
},
|
||||
"node_modules/googleapis-common/node_modules/gaxios": {
|
||||
"version": "6.1.1",
|
||||
"resolved": "https://registry.npmjs.org/gaxios/-/gaxios-6.1.1.tgz",
|
||||
"integrity": "sha512-bw8smrX+XlAoo9o1JAksBwX+hi/RG15J+NTSxmNPIclKC3ZVK6C2afwY8OSdRvOK0+ZLecUJYtj2MmjOt3Dm0w==",
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"extend": "^3.0.2",
|
||||
|
@ -4576,6 +4629,8 @@
|
|||
},
|
||||
"node_modules/googleapis-common/node_modules/https-proxy-agent": {
|
||||
"version": "7.0.2",
|
||||
"resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz",
|
||||
"integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"agent-base": "^7.0.2",
|
||||
|
@ -4621,6 +4676,8 @@
|
|||
},
|
||||
"node_modules/gtoken/node_modules/agent-base": {
|
||||
"version": "7.1.0",
|
||||
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz",
|
||||
"integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"debug": "^4.3.4"
|
||||
|
@ -4631,6 +4688,8 @@
|
|||
},
|
||||
"node_modules/gtoken/node_modules/gaxios": {
|
||||
"version": "6.1.1",
|
||||
"resolved": "https://registry.npmjs.org/gaxios/-/gaxios-6.1.1.tgz",
|
||||
"integrity": "sha512-bw8smrX+XlAoo9o1JAksBwX+hi/RG15J+NTSxmNPIclKC3ZVK6C2afwY8OSdRvOK0+ZLecUJYtj2MmjOt3Dm0w==",
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"extend": "^3.0.2",
|
||||
|
@ -4644,6 +4703,8 @@
|
|||
},
|
||||
"node_modules/gtoken/node_modules/https-proxy-agent": {
|
||||
"version": "7.0.2",
|
||||
"resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz",
|
||||
"integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"agent-base": "^7.0.2",
|
||||
|
@ -4740,6 +4801,8 @@
|
|||
},
|
||||
"node_modules/hash-base/node_modules/readable-stream": {
|
||||
"version": "3.6.2",
|
||||
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
|
||||
"integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"inherits": "^2.0.3",
|
||||
|
@ -5456,6 +5519,18 @@
|
|||
"node": ">=6"
|
||||
}
|
||||
},
|
||||
"node_modules/jsonfile": {
|
||||
"version": "6.1.0",
|
||||
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
|
||||
"integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"universalify": "^2.0.0"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"graceful-fs": "^4.1.6"
|
||||
}
|
||||
},
|
||||
"node_modules/jsonparse": {
|
||||
"version": "1.3.1",
|
||||
"resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
|
||||
|
@ -5710,6 +5785,39 @@
|
|||
"version": "1.5.0",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/migrate-mongo": {
|
||||
"version": "10.0.0",
|
||||
"resolved": "https://registry.npmjs.org/migrate-mongo/-/migrate-mongo-10.0.0.tgz",
|
||||
"integrity": "sha512-QA/bBKNMq/FmuK3fDbgwfNoW2riiU1wLDWGXv/tGhUItPLGqcciPPmu29SrnYAzRKMOVaGEXxzmrBs1zp5cQ7Q==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"cli-table3": "^0.6.1",
|
||||
"commander": "^9.1.0",
|
||||
"date-fns": "^2.28.0",
|
||||
"fn-args": "^5.0.0",
|
||||
"fs-extra": "^10.0.1",
|
||||
"lodash": "^4.17.21",
|
||||
"p-each-series": "^2.2.0"
|
||||
},
|
||||
"bin": {
|
||||
"migrate-mongo": "bin/migrate-mongo.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"mongodb": "^4.4.1 || ^5.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/migrate-mongo/node_modules/commander": {
|
||||
"version": "9.5.0",
|
||||
"resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz",
|
||||
"integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": "^12.20.0 || >=14"
|
||||
}
|
||||
},
|
||||
"node_modules/mime-db": {
|
||||
"version": "1.52.0",
|
||||
"license": "MIT",
|
||||
|
@ -5966,8 +6074,7 @@
|
|||
},
|
||||
"node_modules/mnemonist": {
|
||||
"version": "0.38.3",
|
||||
"resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.3.tgz",
|
||||
"integrity": "sha512-2K9QYubXx/NAjv4VLq1d1Ly8pWNC5L3BrixtdkyTegXWJIqY+zLNDhhX/A+ZwWt70tB1S8H4BE8FLYEFyNoOBw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"obliterator": "^1.6.1"
|
||||
}
|
||||
|
@ -6486,8 +6593,7 @@
|
|||
},
|
||||
"node_modules/obliterator": {
|
||||
"version": "1.6.1",
|
||||
"resolved": "https://registry.npmjs.org/obliterator/-/obliterator-1.6.1.tgz",
|
||||
"integrity": "sha512-9WXswnqINnnhOG/5SLimUlzuU1hFJUc8zkwyD59Sd+dPOMf05PmnYG/d6Q7HZ+KmgkZJa1PxRso6QdM3sTNHig=="
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/oidc-token-hash": {
|
||||
"version": "5.0.3",
|
||||
|
@ -6556,6 +6662,18 @@
|
|||
"url": "https://github.com/sponsors/panva"
|
||||
}
|
||||
},
|
||||
"node_modules/p-each-series": {
|
||||
"version": "2.2.0",
|
||||
"resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz",
|
||||
"integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/p-limit": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
|
||||
|
@ -8432,6 +8550,15 @@
|
|||
"node": "^14.17.0 || ^16.13.0 || >=18.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/universalify": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
|
||||
"integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">= 10.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/url-template": {
|
||||
"version": "2.0.8",
|
||||
"license": "BSD"
|
||||
|
@ -8453,9 +8580,9 @@
|
|||
"license": "MIT"
|
||||
},
|
||||
"node_modules/v8-to-istanbul": {
|
||||
"version": "9.1.3",
|
||||
"resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.3.tgz",
|
||||
"integrity": "sha512-9lDD+EVI2fjFsMWXc6dy5JJzBsVTcQ2fVkfBvncZ6xJWG9wtBhOldG+mHkSL0+V1K/xgZz0JDO5UT5hFwHUghg==",
|
||||
"version": "9.1.2",
|
||||
"resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.2.tgz",
|
||||
"integrity": "sha512-ZGBe7VAivuuoQXTeckpbYKTdtjXGcm3ZUHXC0PAk0CzFyuYvwi73a58iEKI3GkGD1c3EHc+EgfR1w5pgbfzJlQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@jridgewell/trace-mapping": "^0.3.12",
|
||||
|
|
|
@ -20,13 +20,16 @@
|
|||
"build": "tsc -p tsconfig.build.json",
|
||||
"db:migration:generate:postgres": "ts-node --transpile-only ./node_modules/typeorm/cli.js migration:generate -d typeorm.ts migration/postgres/pg_${MIGRATION_NAME}",
|
||||
"db:migration:generate:mysql": "cross-env DB_TYPE=mysql DB_URL=mysql://root:mysql@localhost:3307/mysql ts-node --transpile-only ./node_modules/typeorm/cli.js migration:generate -d typeorm.ts migration/mysql/ms_${MIGRATION_NAME}",
|
||||
"db:migration:generate:planetscale": "cross-env DB_ENGINE=planetscale DB_URL=mysql://root:mysql@localhost:3307/mysql ts-node --transpile-only ./node_modules/typeorm/cli.js migration:generate -d typeorm.ts migration/mysql/ms_${MIGRATION_NAME}",
|
||||
"db:migration:generate:planetscale": "cross-env DB_ENGINE=planetscale DB_URL=mysql://root:mysql@localhost:3307/mysql ts-node --transpile-only ./node_modules/typeorm/cli.js migration:generate -d typeorm.ts migration/planetscale/ms_${MIGRATION_NAME}",
|
||||
"db:migration:generate:mariadb": "cross-env DB_TYPE=mariadb DB_URL=mariadb://root@localhost:3306/mysql ts-node --transpile-only ./node_modules/typeorm/cli.js migration:generate -d typeorm.ts migration/mariadb/md_${MIGRATION_NAME}",
|
||||
"db:migration:generate:mongo": "migrate-mongo create ${MIGRATION_NAME}",
|
||||
"db:migration:generate:mssql": "cross-env DB_TYPE=mssql DB_URL='sqlserver://localhost:1433;database=master;username=sa;password=123ABabc!' ts-node --transpile-only ./node_modules/typeorm/cli.js migration:generate -d typeorm.ts migration/mssql/mss_${MIGRATION_NAME}",
|
||||
"db:migration:run:postgres": "ts-node --transpile-only ./node_modules/typeorm/cli.js migration:run -d typeorm.ts",
|
||||
"db:migration:run:mysql": "cross-env DB_TYPE=mysql DB_URL=mysql://root:mysql@localhost:3307/mysql ts-node --transpile-only ./node_modules/typeorm/cli.js migration:run -d typeorm.ts",
|
||||
"db:migration:run:planetscale": "cross-env DB_SSL=true DB_ENGINE=planetscale DB_URL=${PLANETSCALE_URL} ts-node --transpile-only ./node_modules/typeorm/cli.js migration:run -d typeorm.ts",
|
||||
"db:migration:run:mariadb": "cross-env DB_TYPE=mariadb DB_URL=mariadb://root@localhost:3306/mysql ts-node --transpile-only ./node_modules/typeorm/cli.js migration:run -d typeorm.ts",
|
||||
"db:migration:run:mongo": "cross-env DB_URL='mongodb://localhost:27017/jackson' migrate-mongo up",
|
||||
"db:migration:revert:mongo": "cross-env DB_URL='mongodb://localhost:27017/jackson migrate-mongo down",
|
||||
"db:migration:run:mssql": "cross-env DB_TYPE=mssql DB_URL='sqlserver://localhost:1433;database=master;username=sa;password=123ABabc!' ts-node --transpile-only ./node_modules/typeorm/cli.js migration:run -d typeorm.ts",
|
||||
"prepublishOnly": "npm run build",
|
||||
"test": "cross-env BOXYHQ_NO_ANALYTICS=1 tap --timeout=0 --allow-incomplete-coverage --allow-empty-coverage test/**/*.test.ts",
|
||||
|
@ -68,6 +71,7 @@
|
|||
"@types/sinon": "10.0.19",
|
||||
"@types/tap": "15.0.9",
|
||||
"cross-env": "7.0.3",
|
||||
"migrate-mongo": "10.0.0",
|
||||
"nock": "13.3.4",
|
||||
"sinon": "16.1.0",
|
||||
"tap": "18.5.0",
|
||||
|
|
|
@ -11,6 +11,7 @@ export default function defaultDb(opts: JacksonOption) {
|
|||
opts.db.dynamodb.region = opts.db.dynamodb.region || 'us-east-1';
|
||||
opts.db.dynamodb.readCapacityUnits = opts.db.dynamodb.readCapacityUnits || 5;
|
||||
opts.db.dynamodb.writeCapacityUnits = opts.db.dynamodb.writeCapacityUnits || 5;
|
||||
opts.db.manualMigration = opts.db.manualMigration || false;
|
||||
|
||||
return opts;
|
||||
}
|
||||
|
|
|
@ -6,6 +6,7 @@ type _Document = {
|
|||
value: Encrypted;
|
||||
expiresAt?: Date;
|
||||
modifiedAt: string;
|
||||
namespace: string;
|
||||
indexes: string[];
|
||||
};
|
||||
|
||||
|
@ -34,10 +35,38 @@ class Mongo implements DatabaseDriver {
|
|||
|
||||
await this.collection.createIndex({ indexes: 1 });
|
||||
await this.collection.createIndex({ expiresAt: 1 }, { expireAfterSeconds: 1 });
|
||||
await this.collection.createIndex({ namespace: 1 });
|
||||
|
||||
// eslint-disable-next-line no-constant-condition
|
||||
while (true) {
|
||||
try {
|
||||
if (!this.options.manualMigration) {
|
||||
await this.indexNamespace();
|
||||
}
|
||||
break;
|
||||
} catch (err) {
|
||||
console.error(
|
||||
`error in index namespace execution for db engine: ${this.options.engine}, err: ${err}`
|
||||
);
|
||||
await dbutils.sleep(1000);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
async indexNamespace() {
|
||||
const docs = await this.collection.find({ namespace: { $exists: false } }).toArray();
|
||||
const searchTerm = ':';
|
||||
|
||||
for (const doc of docs || []) {
|
||||
const tokens2 = doc._id.toString().split(searchTerm).slice(0, 2);
|
||||
const namespace = tokens2.join(searchTerm);
|
||||
await this.collection.updateOne({ _id: doc._id }, { $set: { namespace } });
|
||||
}
|
||||
}
|
||||
|
||||
async get(namespace: string, key: string): Promise<any> {
|
||||
const res = await this.collection.findOne({
|
||||
_id: dbutils.key(namespace, key) as any,
|
||||
|
@ -51,9 +80,8 @@ class Mongo implements DatabaseDriver {
|
|||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
async getAll(namespace: string, pageOffset?: number, pageLimit?: number, _?: string): Promise<Records> {
|
||||
const _namespaceMatch = new RegExp(`^${namespace}:.*`);
|
||||
const docs = await this.collection
|
||||
.find({ _id: _namespaceMatch }, { sort: { createdAt: -1 }, skip: pageOffset, limit: pageLimit })
|
||||
.find({ namespace: namespace }, { sort: { createdAt: -1 }, skip: pageOffset, limit: pageLimit })
|
||||
.toArray();
|
||||
|
||||
if (docs) {
|
||||
|
@ -102,7 +130,7 @@ class Mongo implements DatabaseDriver {
|
|||
if (ttl) {
|
||||
doc.expiresAt = new Date(Date.now() + ttl * 1000);
|
||||
}
|
||||
|
||||
doc.namespace = namespace;
|
||||
// no ttl support for secondary indexes
|
||||
for (const idx of indexes || []) {
|
||||
const idxKey = dbutils.keyForIndex(namespace, idx);
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import { Entity, Column } from 'typeorm';
|
||||
import { Entity, Column, Index } from 'typeorm';
|
||||
|
||||
@Entity({ name: 'jackson_store' })
|
||||
export class JacksonStore {
|
||||
|
@ -40,4 +40,12 @@ export class JacksonStore {
|
|||
nullable: true,
|
||||
})
|
||||
modifiedAt?: string;
|
||||
|
||||
@Index('_jackson_store_namespace')
|
||||
@Column({
|
||||
type: 'varchar',
|
||||
length: 64,
|
||||
nullable: true,
|
||||
})
|
||||
namespace?: string;
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import { Entity, Column } from 'typeorm';
|
||||
import { Entity, Column, Index } from 'typeorm';
|
||||
|
||||
@Entity({ name: 'jackson_store' })
|
||||
export class JacksonStore {
|
||||
|
@ -40,4 +40,12 @@ export class JacksonStore {
|
|||
nullable: true,
|
||||
})
|
||||
modifiedAt?: string;
|
||||
|
||||
@Index('_jackson_store_namespace')
|
||||
@Column({
|
||||
type: 'varchar',
|
||||
length: 64,
|
||||
nullable: true,
|
||||
})
|
||||
namespace?: string;
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import { Entity, Column } from 'typeorm';
|
||||
import { Entity, Column, Index } from 'typeorm';
|
||||
|
||||
@Entity({ name: 'jackson_store' })
|
||||
export class JacksonStore {
|
||||
|
@ -40,4 +40,12 @@ export class JacksonStore {
|
|||
nullable: true,
|
||||
})
|
||||
modifiedAt?: string;
|
||||
|
||||
@Index('_jackson_store_namespace')
|
||||
@Column({
|
||||
type: 'varchar',
|
||||
length: 64,
|
||||
nullable: true,
|
||||
})
|
||||
namespace?: string;
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import { Entity, Column } from 'typeorm';
|
||||
import { Entity, Column, Index } from 'typeorm';
|
||||
|
||||
@Entity({ name: 'jackson_store' })
|
||||
export class JacksonStore {
|
||||
|
@ -40,4 +40,12 @@ export class JacksonStore {
|
|||
nullable: true,
|
||||
})
|
||||
modifiedAt?: string;
|
||||
|
||||
@Index('_jackson_store_namespace')
|
||||
@Column({
|
||||
type: 'varchar',
|
||||
length: 64,
|
||||
nullable: true,
|
||||
})
|
||||
namespace?: string;
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
require('reflect-metadata');
|
||||
|
||||
import { DatabaseDriver, DatabaseOption, Index, Encrypted, Records } from '../../typings';
|
||||
import { DataSource, DataSourceOptions, Like, In } from 'typeorm';
|
||||
import { DataSource, DataSourceOptions, In, IsNull } from 'typeorm';
|
||||
import * as dbutils from '../utils';
|
||||
import * as mssql from './mssql';
|
||||
|
||||
|
@ -26,12 +26,14 @@ class Sql implements DatabaseDriver {
|
|||
|
||||
async init({ JacksonStore, JacksonIndex, JacksonTTL }): Promise<Sql> {
|
||||
const sqlType = this.options.engine === 'planetscale' ? 'mysql' : this.options.type!;
|
||||
// Synchronize by default for non-planetscale engines only if migrations are not set to run
|
||||
const synchronize = this.options.engine !== 'planetscale' && !this.options.manualMigration;
|
||||
|
||||
while (true) {
|
||||
try {
|
||||
const baseOpts = {
|
||||
type: sqlType,
|
||||
synchronize: this.options.engine !== 'planetscale',
|
||||
synchronize,
|
||||
logging: ['error'],
|
||||
entities: [JacksonStore, JacksonIndex, JacksonTTL],
|
||||
};
|
||||
|
@ -72,6 +74,21 @@ class Sql implements DatabaseDriver {
|
|||
this.indexRepository = this.dataSource.getRepository(JacksonIndex);
|
||||
this.ttlRepository = this.dataSource.getRepository(JacksonTTL);
|
||||
|
||||
while (true) {
|
||||
try {
|
||||
if (synchronize) {
|
||||
await this.indexNamespace();
|
||||
}
|
||||
break;
|
||||
} catch (err) {
|
||||
console.error(
|
||||
`error in index namespace execution for engine: ${this.options.engine}, type: ${sqlType} err: ${err}`
|
||||
);
|
||||
await dbutils.sleep(1000);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if (this.options.ttl && this.options.cleanupLimit) {
|
||||
this.ttlCleanup = async () => {
|
||||
const now = Date.now();
|
||||
|
@ -110,6 +127,23 @@ class Sql implements DatabaseDriver {
|
|||
return this;
|
||||
}
|
||||
|
||||
async indexNamespace() {
|
||||
const res = await this.storeRepository.find({
|
||||
where: {
|
||||
namespace: IsNull(),
|
||||
},
|
||||
select: ['key'],
|
||||
});
|
||||
const searchTerm = ':';
|
||||
|
||||
for (const r of res) {
|
||||
const key = r.key;
|
||||
const tokens2 = key.split(searchTerm).slice(0, 2);
|
||||
const value = tokens2.join(searchTerm);
|
||||
await this.storeRepository.update({ key }, { namespace: value });
|
||||
}
|
||||
}
|
||||
|
||||
async get(namespace: string, key: string): Promise<any> {
|
||||
const res = await this.storeRepository.findOneBy({
|
||||
key: dbutils.key(namespace, key),
|
||||
|
@ -130,7 +164,7 @@ class Sql implements DatabaseDriver {
|
|||
async getAll(namespace: string, pageOffset?: number, pageLimit?: number, _?: string): Promise<Records> {
|
||||
const skipOffsetAndLimitValue = !dbutils.isNumeric(pageOffset) && !dbutils.isNumeric(pageLimit);
|
||||
const res = await this.storeRepository.find({
|
||||
where: { key: Like(`%${namespace}%`) },
|
||||
where: { namespace: namespace },
|
||||
select: ['value', 'iv', 'tag'],
|
||||
order: {
|
||||
['createdAt']: 'DESC',
|
||||
|
@ -194,6 +228,7 @@ class Sql implements DatabaseDriver {
|
|||
store.iv = val.iv;
|
||||
store.tag = val.tag;
|
||||
store.modifiedAt = new Date().toISOString();
|
||||
store.namespace = namespace;
|
||||
await transactionalEntityManager.save(store);
|
||||
|
||||
if (ttl) {
|
||||
|
|
|
@ -378,6 +378,7 @@ export interface DatabaseOption {
|
|||
readCapacityUnits?: number;
|
||||
writeCapacityUnits?: number;
|
||||
};
|
||||
manualMigration?: boolean;
|
||||
}
|
||||
|
||||
export interface JacksonOption {
|
||||
|
|
|
@ -43,7 +43,10 @@ const baseOpts = {
|
|||
migrationsTableName: '_jackson_migrations',
|
||||
logging: 'all',
|
||||
entities: [`src/db/${entitiesDir}/entity/**/*.ts`],
|
||||
migrations: [`migration/${migrationsDir}/**/*.ts`],
|
||||
migrations:
|
||||
type === 'mssql'
|
||||
? [`migration/${migrationsDir}/**/*.ts`]
|
||||
: [`migration/${migrationsDir}/**/*.ts`, `migration/sql/**/*.ts`],
|
||||
};
|
||||
|
||||
if (type === 'mssql') {
|
||||
|
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue