From 676b11ea3edae7a6eb892011e23fb06a07ee5fc6 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Thu, 1 May 2025 09:44:39 +0200 Subject: [PATCH 001/123] add esbuild conifguration for dht-node and database --- .github/workflows/test_database.yml | 2 +- .github/workflows/test_dht_node.yml | 4 ++-- database/esbuild.config.ts | 28 ++++++++++++++++++++++++++++ database/package.json | 14 +++++++------- dht-node/Dockerfile | 2 +- dht-node/esbuild.config.ts | 13 +++++++++++++ dht-node/package.json | 13 +++++++------ 7 files changed, 59 insertions(+), 17 deletions(-) create mode 100644 database/esbuild.config.ts create mode 100644 dht-node/esbuild.config.ts diff --git a/.github/workflows/test_database.yml b/.github/workflows/test_database.yml index a412390c4..641f7f459 100644 --- a/.github/workflows/test_database.yml +++ b/.github/workflows/test_database.yml @@ -82,4 +82,4 @@ jobs: run: cd out && yarn install --frozen-lockfile --production=false - name: Database | Lint - run: cd out && turbo lint \ No newline at end of file + run: cd out && turbo lint build typecheck \ No newline at end of file diff --git a/.github/workflows/test_dht_node.yml b/.github/workflows/test_dht_node.yml index 9ff2e9121..b475dbcf4 100644 --- a/.github/workflows/test_dht_node.yml +++ b/.github/workflows/test_dht_node.yml @@ -65,10 +65,10 @@ jobs: - name: Wait for MariaDB to be ready run: docker run --rm --network gradido_internal-net busybox sh -c 'until nc -z mariadb 3306; do echo waiting for db; sleep 1; done;' - - name: run unit test & lint & build + - name: run unit test & lint & build & typecheck id: test run: | - cd out && turbo dht-node#lint dht-node#test + cd out && turbo dht-node#lint dht-node#test dht-node#build dht-node#typecheck echo "success=$([ $? -eq 0 ] && echo true || echo false)" >> $GITHUB_OUTPUT lint: diff --git a/database/esbuild.config.ts b/database/esbuild.config.ts new file mode 100644 index 000000000..ebdb10e2a --- /dev/null +++ b/database/esbuild.config.ts @@ -0,0 +1,28 @@ +import { build } from 'esbuild' +import fs from 'node:fs' +import { latestDbVersion } from './src/config/detectLastDBVersion' + +build({ + entryPoints: ['entity/index.ts'], + bundle: true, + target: 'node18.20.7', + platform: 'node', + packages: 'external', + outdir: './build', + plugins: [ + { + // hardcode last db version string into index.ts, before parsing + name: 'replace-latest-db-version-import', + setup(build) { + build.onLoad({ filter: /index\.ts$/ }, async (args) => { + let source = await fs.promises.readFile(args.path, 'utf8') + source = source.replace( + /import\s*\{\s*latestDbVersion\s*\}\s*from\s*['"][^'"]+['"]/, + `const latestDbVersion = "${latestDbVersion}";`, + ) + return { contents: source, loader: 'ts' } + }) + }, + }, + ], +}) diff --git a/database/package.json b/database/package.json index e68157f62..fe8b4e5c0 100644 --- a/database/package.json +++ b/database/package.json @@ -2,12 +2,12 @@ "name": "database", "version": "2.5.1", "description": "Gradido Database Tool to execute database migrations", - "main": "./build/entity/index.js", - "types": "./build/entity/index.d.ts", + "main": "./build/index.js", + "types": "./entity/index.ts", "exports": { ".": { - "import": "./build/entity/index.js", - "require": "./build/entity/index.js" + "import": "./build/index.js", + "require": "./build/index.js" } }, "repository": "https://github.com/gradido/gradido/database", @@ -15,8 +15,8 @@ "license": "Apache-2.0", "private": false, "scripts": { - "build": "mkdirp build/src/config/ && ncp src/config build/src/config && tsc --build", - "clean": "tsc --build --clean", + "build": "tsx ./esbuild.config.ts", + "typecheck": "tsc --noEmit", "up": "cross-env TZ=UTC tsx src/index.ts up", "down": "cross-env TZ=UTC tsx src/index.ts down", "reset": "cross-env TZ=UTC tsx src/index.ts reset", @@ -32,10 +32,10 @@ "@types/faker": "^5.5.9", "@types/geojson": "^7946.0.13", "@types/node": "^17.0.21", + "esbuild": "^0.25.2", "mkdirp": "^3.0.1", "ncp": "^2.0.0", "prettier": "^2.8.7", - "ts-node": "^10.9.2", "tsx": "^4.19.3", "typescript": "^4.9.5" }, diff --git a/dht-node/Dockerfile b/dht-node/Dockerfile index 7f132b451..00e781ec4 100644 --- a/dht-node/Dockerfile +++ b/dht-node/Dockerfile @@ -77,7 +77,7 @@ RUN yarn install --frozen-lockfile --production=false \ # Build the project COPY --chown=app:app --from=builder /app/out/full/ . -RUN turbo build +RUN turbo build typecheck ################################################################################## # TEST ########################################################################### diff --git a/dht-node/esbuild.config.ts b/dht-node/esbuild.config.ts new file mode 100644 index 000000000..ae8fb1ade --- /dev/null +++ b/dht-node/esbuild.config.ts @@ -0,0 +1,13 @@ +import { build } from 'esbuild' + +build({ + entryPoints: ['src/index.ts'], + outdir: 'build', + platform: 'node', + target: 'node18.20.7', + bundle: true, + keepNames: true, + // legalComments: 'inline', + external: ['udx-native', 'sodium-native'], + minify: true, +}) diff --git a/dht-node/package.json b/dht-node/package.json index 0f844a29c..97a081d49 100644 --- a/dht-node/package.json +++ b/dht-node/package.json @@ -8,10 +8,10 @@ "license": "Apache-2.0", "private": false, "scripts": { - "build": "tsc --build", - "clean": "tsc --build --clean", - "start": "cross-env TZ=UTC TS_NODE_BASEURL=./build node -r tsconfig-paths/register build/src/index.js", - "dev": "cross-env TZ=UTC nodemon -w src --ext ts --exec ts-node -r dotenv/config -r tsconfig-paths/register src/index.ts", + "build": "tsx esbuild.config.ts", + "start": "cross-env TZ=UTC node build/index.js", + "dev": "cross-env TZ=UTC tsx watch src/index.ts", + "typecheck": "tsc --noEmit", "lint": "biome check --error-on-warnings .", "lint:fix": "biome check --error-on-warnings . --write", "test": "cross-env TZ=UTC NODE_ENV=development DB_DATABASE=gradido_test_dht jest --runInBand --forceExit --detectOpenHandles" @@ -33,13 +33,14 @@ "@types/jest": "27.5.1", "@types/node": "^17.0.21", "@types/uuid": "^8.3.4", - "jest": "27.5.1", "@biomejs/biome": "1.9.4", "@types/dotenv": "^8.2.0", "@types/joi": "^17.2.3", + "esbuild": "^0.25.2", + "jest": "27.5.1", "prettier": "^2.8.7", + "tsx": "^4.19.3", "ts-jest": "27.1.4", - "ts-node": "^10.9.2", "typescript": "^4.9.4" }, "engines": { From 8d3cc2224dace7857455d706a3b2feba0e0598a3 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Thu, 1 May 2025 09:54:59 +0200 Subject: [PATCH 002/123] add missing table row types, needed for esbuild --- database/entity/0001-init_db/Migration.ts | 2 +- .../LoginEmailOptIn.ts | 10 ++--- .../LoginElopageBuys.ts | 10 +++-- .../TransactionLink.ts | 6 +-- .../AdminPendingCreation.ts | 4 +- .../Transaction.ts | 1 + .../ContributionLink.ts | 12 +++--- .../entity/0063-event_link_fields/Event.ts | 23 ++++++----- .../Transaction.ts | 1 + .../0069-add_user_roles_table/UserRole.ts | 11 +++-- .../DltTransaction.ts | 10 ++++- .../Transaction.ts | 1 + .../PendingTransaction.ts | 9 +++-- .../Transaction.ts | 7 ++-- .../Contribution.ts | 28 +++++++------ .../ContributionMessage.ts | 10 ++--- .../UserContact.ts | 40 ++++++++++++++++--- .../FederatedCommunity.ts | 4 +- .../User.ts | 27 ++++++++++--- .../0086-add_community_location/Community.ts | 2 +- database/entity/index.ts | 2 +- 21 files changed, 145 insertions(+), 75 deletions(-) diff --git a/database/entity/0001-init_db/Migration.ts b/database/entity/0001-init_db/Migration.ts index 2aa79ae9f..13c848b07 100644 --- a/database/entity/0001-init_db/Migration.ts +++ b/database/entity/0001-init_db/Migration.ts @@ -5,7 +5,7 @@ export class Migration extends BaseEntity { @PrimaryGeneratedColumn() // This is actually not a primary column version: number - @Column({ length: 256, nullable: true, default: null }) + @Column({ type: 'varchar', length: 256, nullable: true, default: null }) fileName: string @Column({ type: 'datetime', default: () => 'CURRENT_TIMESTAMP' }) diff --git a/database/entity/0003-login_server_tables/LoginEmailOptIn.ts b/database/entity/0003-login_server_tables/LoginEmailOptIn.ts index 60717d2c2..46f74e7de 100644 --- a/database/entity/0003-login_server_tables/LoginEmailOptIn.ts +++ b/database/entity/0003-login_server_tables/LoginEmailOptIn.ts @@ -6,21 +6,21 @@ export class LoginEmailOptIn extends BaseEntity { @PrimaryGeneratedColumn('increment', { unsigned: true }) id: number - @Column({ name: 'user_id' }) + @Column({ name: 'user_id', type: 'bigint', unsigned: true, nullable: false }) userId: number @Column({ name: 'verification_code', type: 'bigint', unsigned: true, unique: true }) verificationCode: BigInt - @Column({ name: 'email_opt_in_type_id' }) + @Column({ name: 'email_opt_in_type_id', type: 'int', unsigned: true, nullable: false }) emailOptInTypeId: number - @Column({ name: 'created', default: () => 'CURRENT_TIMESTAMP' }) + @Column({ name: 'created', type: 'datetime', default: () => 'CURRENT_TIMESTAMP' }) createdAt: Date - @Column({ name: 'resend_count', default: 0 }) + @Column({ name: 'resend_count', type: 'int', unsigned: true, default: 0 }) resendCount: number - @Column({ name: 'updated', default: () => 'CURRENT_TIMESTAMP' }) + @Column({ name: 'updated', type: 'datetime', default: () => 'CURRENT_TIMESTAMP' }) updatedAt: Date } diff --git a/database/entity/0021-elopagebuys_fields_nullable/LoginElopageBuys.ts b/database/entity/0021-elopagebuys_fields_nullable/LoginElopageBuys.ts index 45d82ad7c..18dbe7961 100644 --- a/database/entity/0021-elopagebuys_fields_nullable/LoginElopageBuys.ts +++ b/database/entity/0021-elopagebuys_fields_nullable/LoginElopageBuys.ts @@ -20,11 +20,12 @@ export class LoginElopageBuys extends BaseEntity { @Column({ type: 'int', width: 11, name: 'product_id', nullable: true, default: null }) productId: number | null - @Column({ name: 'product_price', nullable: false }) + @Column({ name: 'product_price', type: 'int', nullable: false }) productPrice: number @Column({ name: 'payer_email', + type: 'varchar', length: 255, nullable: false, charset: 'utf8', @@ -34,6 +35,7 @@ export class LoginElopageBuys extends BaseEntity { @Column({ name: 'publisher_email', + type: 'varchar', length: 255, nullable: false, charset: 'utf8', @@ -41,12 +43,12 @@ export class LoginElopageBuys extends BaseEntity { }) publisherEmail: string - @Column({ nullable: false }) + @Column({ type: 'bool', nullable: false }) payed: boolean - @Column({ name: 'success_date', nullable: false }) + @Column({ name: 'success_date', type: 'datetime', nullable: false }) successDate: Date - @Column({ length: 255, nullable: false }) + @Column({ type: 'varchar', length: 255, nullable: false }) event: string } diff --git a/database/entity/0031-remove_sendEmail_from_transaction_link/TransactionLink.ts b/database/entity/0031-remove_sendEmail_from_transaction_link/TransactionLink.ts index 585b42612..104d6e1bc 100644 --- a/database/entity/0031-remove_sendEmail_from_transaction_link/TransactionLink.ts +++ b/database/entity/0031-remove_sendEmail_from_transaction_link/TransactionLink.ts @@ -7,7 +7,7 @@ export class TransactionLink extends BaseEntity { @PrimaryGeneratedColumn('increment', { unsigned: true }) id: number - @Column({ unsigned: true, nullable: false }) + @Column({ type: 'bigint', unsigned: true, nullable: false }) userId: number @Column({ @@ -29,10 +29,10 @@ export class TransactionLink extends BaseEntity { }) holdAvailableAmount: Decimal - @Column({ length: 255, nullable: false, collation: 'utf8mb4_unicode_ci' }) + @Column({ type: 'varchar', length: 255, nullable: false, collation: 'utf8mb4_unicode_ci' }) memo: string - @Column({ length: 24, nullable: false, collation: 'utf8mb4_unicode_ci' }) + @Column({ type: 'varchar', length: 24, nullable: false, collation: 'utf8mb4_unicode_ci' }) code: string @Column({ diff --git a/database/entity/0035-admin_pending_creations_decimal/AdminPendingCreation.ts b/database/entity/0035-admin_pending_creations_decimal/AdminPendingCreation.ts index f2d0d1386..b56b5ac47 100644 --- a/database/entity/0035-admin_pending_creations_decimal/AdminPendingCreation.ts +++ b/database/entity/0035-admin_pending_creations_decimal/AdminPendingCreation.ts @@ -7,7 +7,7 @@ export class AdminPendingCreation extends BaseEntity { @PrimaryGeneratedColumn('increment', { unsigned: true }) id: number - @Column({ unsigned: true, nullable: false }) + @Column({ type: 'bigint', unsigned: true, nullable: false }) userId: number @Column({ type: 'datetime', default: () => 'CURRENT_TIMESTAMP' }) @@ -16,7 +16,7 @@ export class AdminPendingCreation extends BaseEntity { @Column({ type: 'datetime', nullable: false }) date: Date - @Column({ length: 255, nullable: false, collation: 'utf8mb4_unicode_ci' }) + @Column({ type: 'varchar', length: 255, nullable: false, collation: 'utf8mb4_unicode_ci' }) memo: string @Column({ diff --git a/database/entity/0036-unique_previous_in_transactions/Transaction.ts b/database/entity/0036-unique_previous_in_transactions/Transaction.ts index eef845330..efa376cbe 100644 --- a/database/entity/0036-unique_previous_in_transactions/Transaction.ts +++ b/database/entity/0036-unique_previous_in_transactions/Transaction.ts @@ -1,3 +1,4 @@ +/* eslint-disable no-use-before-define */ import { Decimal } from 'decimal.js-light' import { BaseEntity, Column, Entity, JoinColumn, OneToOne, PrimaryGeneratedColumn } from 'typeorm' import { DecimalTransformer } from '../../src/typeorm/DecimalTransformer' diff --git a/database/entity/0038-add_contribution_links_table/ContributionLink.ts b/database/entity/0038-add_contribution_links_table/ContributionLink.ts index f64b92208..479aff51a 100644 --- a/database/entity/0038-add_contribution_links_table/ContributionLink.ts +++ b/database/entity/0038-add_contribution_links_table/ContributionLink.ts @@ -7,10 +7,10 @@ export class ContributionLink extends BaseEntity { @PrimaryGeneratedColumn('increment', { unsigned: true }) id: number - @Column({ length: 100, nullable: false, collation: 'utf8mb4_unicode_ci' }) + @Column({ type: 'varchar', length: 100, nullable: false, collation: 'utf8mb4_unicode_ci' }) name: string - @Column({ length: 255, nullable: false, collation: 'utf8mb4_unicode_ci' }) + @Column({ type: 'varchar', length: 255, nullable: false, collation: 'utf8mb4_unicode_ci' }) memo: string @Column({ name: 'valid_from', type: 'datetime', nullable: false }) @@ -28,10 +28,10 @@ export class ContributionLink extends BaseEntity { }) amount: Decimal - @Column({ length: 12, nullable: false, collation: 'utf8mb4_unicode_ci' }) + @Column({ type: 'varchar', length: 12, nullable: false, collation: 'utf8mb4_unicode_ci' }) cycle: string - @Column({ name: 'max_per_cycle', unsigned: true, nullable: false, default: 1 }) + @Column({ name: 'max_per_cycle', type: 'int', unsigned: true, nullable: false, default: 1 }) maxPerCycle: number @Column({ @@ -77,10 +77,10 @@ export class ContributionLink extends BaseEntity { @Column({ name: 'created_at', type: 'datetime', default: () => 'CURRENT_TIMESTAMP' }) createdAt: Date - @DeleteDateColumn({ name: 'deleted_at' }) + @DeleteDateColumn({ name: 'deleted_at', type: 'datetime' }) deletedAt: Date | null - @Column({ length: 24, nullable: false, collation: 'utf8mb4_unicode_ci' }) + @Column({ type: 'varchar', length: 24, nullable: false, collation: 'utf8mb4_unicode_ci' }) code: string @Column({ name: 'link_enabled', type: 'boolean', default: true }) diff --git a/database/entity/0063-event_link_fields/Event.ts b/database/entity/0063-event_link_fields/Event.ts index d84adac1c..ce125b8df 100644 --- a/database/entity/0063-event_link_fields/Event.ts +++ b/database/entity/0063-event_link_fields/Event.ts @@ -21,7 +21,7 @@ export class Event extends BaseEntity { @PrimaryGeneratedColumn('increment', { unsigned: true }) id: number - @Column({ length: 100, nullable: false, collation: 'utf8mb4_unicode_ci' }) + @Column({ type: 'varchar', length: 100, nullable: false, collation: 'utf8mb4_unicode_ci' }) type: string @CreateDateColumn({ @@ -32,56 +32,61 @@ export class Event extends BaseEntity { }) createdAt: Date - @Column({ name: 'affected_user_id', unsigned: true, nullable: false }) + @Column({ name: 'affected_user_id', type: 'bigint', unsigned: true, nullable: false }) affectedUserId: number @ManyToOne(() => User) @JoinColumn({ name: 'affected_user_id', referencedColumnName: 'id' }) affectedUser: User - @Column({ name: 'acting_user_id', unsigned: true, nullable: false }) + @Column({ name: 'acting_user_id', type: 'bigint', unsigned: true, nullable: false }) actingUserId: number @ManyToOne(() => User) @JoinColumn({ name: 'acting_user_id', referencedColumnName: 'id' }) actingUser: User - @Column({ name: 'involved_user_id', type: 'int', unsigned: true, nullable: true }) + @Column({ name: 'involved_user_id', type: 'bigint', unsigned: true, nullable: true }) involvedUserId: number | null @ManyToOne(() => User) @JoinColumn({ name: 'involved_user_id', referencedColumnName: 'id' }) involvedUser: User | null - @Column({ name: 'involved_transaction_id', type: 'int', unsigned: true, nullable: true }) + @Column({ name: 'involved_transaction_id', type: 'bigint', unsigned: true, nullable: true }) involvedTransactionId: number | null @ManyToOne(() => Transaction) @JoinColumn({ name: 'involved_transaction_id', referencedColumnName: 'id' }) involvedTransaction: Transaction | null - @Column({ name: 'involved_contribution_id', type: 'int', unsigned: true, nullable: true }) + @Column({ name: 'involved_contribution_id', type: 'bigint', unsigned: true, nullable: true }) involvedContributionId: number | null @ManyToOne(() => Contribution) @JoinColumn({ name: 'involved_contribution_id', referencedColumnName: 'id' }) involvedContribution: Contribution | null - @Column({ name: 'involved_contribution_message_id', type: 'int', unsigned: true, nullable: true }) + @Column({ + name: 'involved_contribution_message_id', + type: 'bigint', + unsigned: true, + nullable: true, + }) involvedContributionMessageId: number | null @ManyToOne(() => ContributionMessage) @JoinColumn({ name: 'involved_contribution_message_id', referencedColumnName: 'id' }) involvedContributionMessage: ContributionMessage | null - @Column({ name: 'involved_transaction_link_id', type: 'int', unsigned: true, nullable: true }) + @Column({ name: 'involved_transaction_link_id', type: 'bigint', unsigned: true, nullable: true }) involvedTransactionLinkId: number | null @ManyToOne(() => TransactionLink) @JoinColumn({ name: 'involved_transaction_link_id', referencedColumnName: 'id' }) involvedTransactionLink: TransactionLink | null - @Column({ name: 'involved_contribution_link_id', type: 'int', unsigned: true, nullable: true }) + @Column({ name: 'involved_contribution_link_id', type: 'bigint', unsigned: true, nullable: true }) involvedContributionLinkId: number | null @ManyToOne(() => ContributionLink) diff --git a/database/entity/0066-x-community-sendcoins-transactions_table/Transaction.ts b/database/entity/0066-x-community-sendcoins-transactions_table/Transaction.ts index 905f17830..9c798f7c9 100644 --- a/database/entity/0066-x-community-sendcoins-transactions_table/Transaction.ts +++ b/database/entity/0066-x-community-sendcoins-transactions_table/Transaction.ts @@ -1,3 +1,4 @@ +/* eslint-disable no-use-before-define */ import { Decimal } from 'decimal.js-light' import { BaseEntity, Column, Entity, JoinColumn, OneToOne, PrimaryGeneratedColumn } from 'typeorm' import { DecimalTransformer } from '../../src/typeorm/DecimalTransformer' diff --git a/database/entity/0069-add_user_roles_table/UserRole.ts b/database/entity/0069-add_user_roles_table/UserRole.ts index 4d1e3f87d..536248da0 100644 --- a/database/entity/0069-add_user_roles_table/UserRole.ts +++ b/database/entity/0069-add_user_roles_table/UserRole.ts @@ -9,13 +9,18 @@ export class UserRole extends BaseEntity { @Column({ name: 'user_id', type: 'int', unsigned: true, nullable: false }) userId: number - @Column({ length: 40, nullable: false, collation: 'utf8mb4_unicode_ci' }) + @Column({ type: 'varchar', length: 40, nullable: false, collation: 'utf8mb4_unicode_ci' }) role: string - @Column({ name: 'created_at', default: () => 'CURRENT_TIMESTAMP(3)', nullable: false }) + @Column({ + name: 'created_at', + type: 'datetime', + default: () => 'CURRENT_TIMESTAMP(3)', + nullable: false, + }) createdAt: Date - @Column({ name: 'updated_at', nullable: true, default: null, type: 'datetime' }) + @Column({ name: 'updated_at', type: 'datetime', nullable: true, default: null }) updatedAt: Date | null @ManyToOne( diff --git a/database/entity/0070-add_dlt_transactions_table/DltTransaction.ts b/database/entity/0070-add_dlt_transactions_table/DltTransaction.ts index c2f28593a..afd9ba9a1 100644 --- a/database/entity/0070-add_dlt_transactions_table/DltTransaction.ts +++ b/database/entity/0070-add_dlt_transactions_table/DltTransaction.ts @@ -11,6 +11,7 @@ export class DltTransaction extends BaseEntity { @Column({ name: 'message_id', + type: 'varchar', length: 64, nullable: true, default: null, @@ -21,10 +22,15 @@ export class DltTransaction extends BaseEntity { @Column({ name: 'verified', type: 'bool', nullable: false, default: false }) verified: boolean - @Column({ name: 'created_at', default: () => 'CURRENT_TIMESTAMP(3)', nullable: false }) + @Column({ + name: 'created_at', + type: 'datetime', + default: () => 'CURRENT_TIMESTAMP(3)', + nullable: false, + }) createdAt: Date - @Column({ name: 'verified_at', nullable: true, default: null, type: 'datetime' }) + @Column({ name: 'verified_at', type: 'datetime', nullable: true, default: null }) verifiedAt: Date | null @OneToOne( diff --git a/database/entity/0070-add_dlt_transactions_table/Transaction.ts b/database/entity/0070-add_dlt_transactions_table/Transaction.ts index 4620ad231..23fcca475 100644 --- a/database/entity/0070-add_dlt_transactions_table/Transaction.ts +++ b/database/entity/0070-add_dlt_transactions_table/Transaction.ts @@ -1,3 +1,4 @@ +/* eslint-disable no-use-before-define */ import { Decimal } from 'decimal.js-light' import { BaseEntity, Column, Entity, JoinColumn, OneToOne, PrimaryGeneratedColumn } from 'typeorm' import { DecimalTransformer } from '../../src/typeorm/DecimalTransformer' diff --git a/database/entity/0071-add-pending_transactions-table/PendingTransaction.ts b/database/entity/0071-add-pending_transactions-table/PendingTransaction.ts index 65febfded..7c06b173b 100644 --- a/database/entity/0071-add-pending_transactions-table/PendingTransaction.ts +++ b/database/entity/0071-add-pending_transactions-table/PendingTransaction.ts @@ -1,3 +1,4 @@ +/* eslint-disable no-use-before-define */ import { Decimal } from 'decimal.js-light' import { BaseEntity, Column, Entity, PrimaryGeneratedColumn } from 'typeorm' import { DecimalTransformer } from '../../src/typeorm/DecimalTransformer' @@ -7,13 +8,13 @@ export class PendingTransaction extends BaseEntity { @PrimaryGeneratedColumn('increment', { unsigned: true }) id: number - @Column({ name: 'state', unsigned: true, nullable: false }) + @Column({ name: 'state', type: 'int', unsigned: true, nullable: false }) state: number @Column({ type: 'int', unsigned: true, unique: true, nullable: true, default: null }) previous: number | null - @Column({ name: 'type_id', unsigned: true, nullable: false }) + @Column({ name: 'type_id', type: 'int', unsigned: true, nullable: false }) typeId: number @Column({ @@ -68,13 +69,13 @@ export class PendingTransaction extends BaseEntity { }) decayStart: Date | null - @Column({ length: 255, nullable: false, collation: 'utf8mb4_unicode_ci' }) + @Column({ type: 'varchar', length: 255, nullable: false, collation: 'utf8mb4_unicode_ci' }) memo: string @Column({ name: 'creation_date', type: 'datetime', nullable: true, default: null }) creationDate: Date | null - @Column({ name: 'user_id', unsigned: true, nullable: false }) + @Column({ name: 'user_id', type: 'bigint', unsigned: true, nullable: false }) userId: number @Column({ diff --git a/database/entity/0072-add_communityuuid_to_transactions_table/Transaction.ts b/database/entity/0072-add_communityuuid_to_transactions_table/Transaction.ts index f3e3b2281..18450ba21 100644 --- a/database/entity/0072-add_communityuuid_to_transactions_table/Transaction.ts +++ b/database/entity/0072-add_communityuuid_to_transactions_table/Transaction.ts @@ -1,3 +1,4 @@ +/* eslint-disable no-use-before-define */ import { Decimal } from 'decimal.js-light' import { BaseEntity, Column, Entity, JoinColumn, OneToOne, PrimaryGeneratedColumn } from 'typeorm' import { DecimalTransformer } from '../../src/typeorm/DecimalTransformer' @@ -12,7 +13,7 @@ export class Transaction extends BaseEntity { @Column({ type: 'int', unsigned: true, unique: true, nullable: true, default: null }) previous: number | null - @Column({ name: 'type_id', unsigned: true, nullable: false }) + @Column({ name: 'type_id', type: 'int', unsigned: true, nullable: false }) typeId: number @Column({ @@ -67,13 +68,13 @@ export class Transaction extends BaseEntity { }) decayStart: Date | null - @Column({ length: 255, nullable: false, collation: 'utf8mb4_unicode_ci' }) + @Column({ type: 'varchar', length: 255, nullable: false, collation: 'utf8mb4_unicode_ci' }) memo: string @Column({ name: 'creation_date', type: 'datetime', nullable: true, default: null }) creationDate: Date | null - @Column({ name: 'user_id', unsigned: true, nullable: false }) + @Column({ name: 'user_id', type: 'bigint', unsigned: true, nullable: false }) userId: number @Column({ diff --git a/database/entity/0078-move_resubmission_date/Contribution.ts b/database/entity/0078-move_resubmission_date/Contribution.ts index 6de8f74d7..3e134a653 100644 --- a/database/entity/0078-move_resubmission_date/Contribution.ts +++ b/database/entity/0078-move_resubmission_date/Contribution.ts @@ -20,7 +20,7 @@ export class Contribution extends BaseEntity { @PrimaryGeneratedColumn('increment', { unsigned: true }) id: number - @Column({ unsigned: true, nullable: false, name: 'user_id' }) + @Column({ type: 'bigint', unsigned: true, nullable: false, name: 'user_id' }) userId: number @ManyToOne( @@ -39,7 +39,7 @@ export class Contribution extends BaseEntity { @Column({ type: 'datetime', nullable: false, name: 'contribution_date' }) contributionDate: Date - @Column({ length: 255, nullable: false, collation: 'utf8mb4_unicode_ci' }) + @Column({ type: 'varchar', length: 255, nullable: false, collation: 'utf8mb4_unicode_ci' }) memo: string @Column({ @@ -51,26 +51,27 @@ export class Contribution extends BaseEntity { }) amount: Decimal - @Column({ unsigned: true, nullable: true, name: 'moderator_id' }) + @Column({ type: 'bigint', unsigned: true, nullable: true, name: 'moderator_id' }) moderatorId: number - @Column({ unsigned: true, nullable: true, name: 'contribution_link_id' }) + @Column({ type: 'bigint', unsigned: true, nullable: true, name: 'contribution_link_id' }) contributionLinkId: number - @Column({ unsigned: true, nullable: true, name: 'confirmed_by' }) + @Column({ type: 'bigint', unsigned: true, nullable: true, name: 'confirmed_by' }) confirmedBy: number - @Column({ nullable: true, name: 'confirmed_at' }) + @Column({ type: 'datetime', nullable: true, name: 'confirmed_at' }) confirmedAt: Date - @Column({ unsigned: true, nullable: true, name: 'denied_by' }) + @Column({ type: 'bigint', unsigned: true, nullable: true, name: 'denied_by' }) deniedBy: number - @Column({ nullable: true, name: 'denied_at' }) + @Column({ type: 'datetime', nullable: true, name: 'denied_at' }) deniedAt: Date @Column({ name: 'contribution_type', + type: 'varchar', length: 12, nullable: false, collation: 'utf8mb4_unicode_ci', @@ -79,25 +80,26 @@ export class Contribution extends BaseEntity { @Column({ name: 'contribution_status', + type: 'varchar', length: 12, nullable: false, collation: 'utf8mb4_unicode_ci', }) contributionStatus: string - @Column({ unsigned: true, nullable: true, name: 'transaction_id' }) + @Column({ type: 'bigint', unsigned: true, nullable: true, name: 'transaction_id' }) transactionId: number - @Column({ nullable: true, name: 'updated_at' }) + @Column({ type: 'datetime', nullable: true, name: 'updated_at' }) updatedAt: Date - @Column({ nullable: true, unsigned: true, name: 'updated_by', type: 'int' }) + @Column({ type: 'bigint', nullable: true, unsigned: true, name: 'updated_by' }) updatedBy: number | null - @DeleteDateColumn({ name: 'deleted_at' }) + @DeleteDateColumn({ type: 'datetime', name: 'deleted_at' }) deletedAt: Date | null - @DeleteDateColumn({ unsigned: true, nullable: true, name: 'deleted_by' }) + @DeleteDateColumn({ type: 'bigint', unsigned: true, nullable: true, name: 'deleted_by' }) deletedBy: number @OneToMany( diff --git a/database/entity/0078-move_resubmission_date/ContributionMessage.ts b/database/entity/0078-move_resubmission_date/ContributionMessage.ts index 1c5e89f92..adf60d437 100644 --- a/database/entity/0078-move_resubmission_date/ContributionMessage.ts +++ b/database/entity/0078-move_resubmission_date/ContributionMessage.ts @@ -21,7 +21,7 @@ export class ContributionMessage extends BaseEntity { id: number @Index() - @Column({ name: 'contribution_id', unsigned: true, nullable: false }) + @Column({ name: 'contribution_id', type: 'bigint', unsigned: true, nullable: false }) contributionId: number @ManyToOne( @@ -31,7 +31,7 @@ export class ContributionMessage extends BaseEntity { @JoinColumn({ name: 'contribution_id' }) contribution: Contribution - @Column({ name: 'user_id', unsigned: true, nullable: false }) + @Column({ name: 'user_id', type: 'bigint', unsigned: true, nullable: false }) userId: number @ManyToOne( @@ -41,7 +41,7 @@ export class ContributionMessage extends BaseEntity { @JoinColumn({ name: 'user_id' }) user: User - @Column({ length: 2000, nullable: false, collation: 'utf8mb4_unicode_ci' }) + @Column({ type: 'varchar', length: 2000, nullable: false, collation: 'utf8mb4_unicode_ci' }) message: string @CreateDateColumn() @@ -55,10 +55,10 @@ export class ContributionMessage extends BaseEntity { @DeleteDateColumn({ name: 'deleted_at' }) deletedAt: Date | null - @Column({ name: 'deleted_by', default: null, unsigned: true, nullable: true }) + @Column({ name: 'deleted_by', type: 'bigint', default: null, unsigned: true, nullable: true }) deletedBy: number - @Column({ length: 12, nullable: false, collation: 'utf8mb4_unicode_ci' }) + @Column({ type: 'varchar', length: 12, nullable: false, collation: 'utf8mb4_unicode_ci' }) type: string @Column({ name: 'is_moderator', type: 'bool', nullable: false, default: false }) diff --git a/database/entity/0082-introduce_gms_registration/UserContact.ts b/database/entity/0082-introduce_gms_registration/UserContact.ts index 740d6e6c9..eabcf89eb 100644 --- a/database/entity/0082-introduce_gms_registration/UserContact.ts +++ b/database/entity/0082-introduce_gms_registration/UserContact.ts @@ -17,6 +17,7 @@ export class UserContact extends BaseEntity { @Column({ name: 'type', + type: 'varchar', length: 100, nullable: true, default: null, @@ -33,7 +34,13 @@ export class UserContact extends BaseEntity { @Column({ name: 'user_id', type: 'int', unsigned: true, nullable: false }) userId: number - @Column({ length: 255, unique: true, nullable: false, collation: 'utf8mb4_unicode_ci' }) + @Column({ + type: 'varchar', + length: 255, + unique: true, + nullable: false, + collation: 'utf8mb4_unicode_ci', + }) email: string @Column({ name: 'gms_publish_email', type: 'bool', nullable: false, default: false }) @@ -42,10 +49,22 @@ export class UserContact extends BaseEntity { @Column({ name: 'email_verification_code', type: 'bigint', unsigned: true, unique: true }) emailVerificationCode: string - @Column({ name: 'email_opt_in_type_id' }) + @Column({ + name: 'email_opt_in_type_id', + type: 'int', + unsigned: true, + nullable: false, + default: 0, + }) emailOptInTypeId: number - @Column({ name: 'email_resend_count' }) + @Column({ + name: 'email_resend_count', + type: 'int', + unsigned: true, + nullable: false, + default: 0, + }) emailResendCount: number @Column({ name: 'email_checked', type: 'bool', nullable: false, default: false }) @@ -53,6 +72,7 @@ export class UserContact extends BaseEntity { @Column({ name: 'country_code', + type: 'varchar', length: 255, unique: false, nullable: true, @@ -60,13 +80,23 @@ export class UserContact extends BaseEntity { }) countryCode: string - @Column({ length: 255, unique: false, nullable: true, collation: 'utf8mb4_unicode_ci' }) + @Column({ + type: 'varchar', + length: 255, + unique: false, + nullable: true, + collation: 'utf8mb4_unicode_ci', + }) phone: string @Column({ name: 'gms_publish_phone', type: 'int', unsigned: true, nullable: false, default: 0 }) gmsPublishPhone: number - @CreateDateColumn({ name: 'created_at', default: () => 'CURRENT_TIMESTAMP(3)', nullable: false }) + @CreateDateColumn({ + name: 'created_at', + default: () => 'CURRENT_TIMESTAMP(3)', + nullable: false, + }) createdAt: Date @UpdateDateColumn({ diff --git a/database/entity/0083-join_community_federated_communities/FederatedCommunity.ts b/database/entity/0083-join_community_federated_communities/FederatedCommunity.ts index 1f077bd5f..b0edfca91 100644 --- a/database/entity/0083-join_community_federated_communities/FederatedCommunity.ts +++ b/database/entity/0083-join_community_federated_communities/FederatedCommunity.ts @@ -21,10 +21,10 @@ export class FederatedCommunity extends BaseEntity { @Column({ name: 'public_key', type: 'binary', length: 32, default: null, nullable: true }) publicKey: Buffer - @Column({ name: 'api_version', length: 10, nullable: false }) + @Column({ name: 'api_version', type: 'varchar', length: 10, nullable: false }) apiVersion: string - @Column({ name: 'end_point', length: 255, nullable: false }) + @Column({ name: 'end_point', type: 'varchar', length: 255, nullable: false }) endPoint: string @Column({ name: 'last_announced_at', type: 'datetime', nullable: true }) diff --git a/database/entity/0084-introduce_humhub_registration/User.ts b/database/entity/0084-introduce_humhub_registration/User.ts index d192d3805..c12a7dcfd 100644 --- a/database/entity/0084-introduce_humhub_registration/User.ts +++ b/database/entity/0084-introduce_humhub_registration/User.ts @@ -27,6 +27,7 @@ export class User extends BaseEntity { @Column({ name: 'gradido_id', + type: 'char', length: 36, nullable: false, collation: 'utf8mb4_unicode_ci', @@ -51,6 +52,7 @@ export class User extends BaseEntity { @Column({ name: 'alias', + type: 'varchar', length: 20, nullable: true, default: null, @@ -70,6 +72,7 @@ export class User extends BaseEntity { @Column({ name: 'first_name', + type: 'varchar', length: 255, nullable: true, default: null, @@ -79,6 +82,7 @@ export class User extends BaseEntity { @Column({ name: 'last_name', + type: 'varchar', length: 255, nullable: true, default: null, @@ -92,10 +96,15 @@ export class User extends BaseEntity { @Column({ name: 'humhub_publish_name', type: 'int', unsigned: true, nullable: false, default: 0 }) humhubPublishName: number - @Column({ name: 'created_at', default: () => 'CURRENT_TIMESTAMP(3)', nullable: false }) + @Column({ + name: 'created_at', + type: 'datetime', + default: () => 'CURRENT_TIMESTAMP(3)', + nullable: false, + }) createdAt: Date - @DeleteDateColumn({ name: 'deleted_at', nullable: true }) + @DeleteDateColumn({ name: 'deleted_at', type: 'datetime', nullable: true }) deletedAt: Date | null @Column({ type: 'bigint', default: 0, unsigned: true }) @@ -110,7 +119,13 @@ export class User extends BaseEntity { }) passwordEncryptionType: number - @Column({ length: 4, default: 'de', collation: 'utf8mb4_unicode_ci', nullable: false }) + @Column({ + type: 'varchar', + length: 4, + default: 'de', + collation: 'utf8mb4_unicode_ci', + nullable: false, + }) language: string @Column({ type: 'bool', default: false }) @@ -126,19 +141,19 @@ export class User extends BaseEntity { @JoinColumn({ name: 'user_id' }) userRoles: UserRole[] - @Column({ name: 'referrer_id', type: 'int', unsigned: true, nullable: true, default: null }) + @Column({ name: 'referrer_id', type: 'bigint', unsigned: true, nullable: true, default: null }) referrerId?: number | null @Column({ name: 'contribution_link_id', - type: 'int', + type: 'bigint', unsigned: true, nullable: true, default: null, }) contributionLinkId?: number | null - @Column({ name: 'publisher_id', default: 0 }) + @Column({ name: 'publisher_id', type: 'bigint', unsigned: true, default: 0 }) publisherId: number @Column({ name: 'gms_allowed', type: 'bool', default: true }) diff --git a/database/entity/0086-add_community_location/Community.ts b/database/entity/0086-add_community_location/Community.ts index 374ea6a99..8c3a5c229 100644 --- a/database/entity/0086-add_community_location/Community.ts +++ b/database/entity/0086-add_community_location/Community.ts @@ -21,7 +21,7 @@ export class Community extends BaseEntity { @Column({ name: 'foreign', type: 'bool', nullable: false, default: true }) foreign: boolean - @Column({ name: 'url', length: 255, nullable: false }) + @Column({ name: 'url', type: 'varchar', length: 255, nullable: false }) url: string @Column({ name: 'public_key', type: 'binary', length: 32, nullable: false }) diff --git a/database/entity/index.ts b/database/entity/index.ts index fa7063a8e..71329b6ee 100644 --- a/database/entity/index.ts +++ b/database/entity/index.ts @@ -1,5 +1,4 @@ import { latestDbVersion } from '../src/config/detectLastDBVersion' -import { PendingTransaction } from './0071-add-pending_transactions-table/PendingTransaction' import { Community } from './Community' import { Contribution } from './Contribution' import { ContributionLink } from './ContributionLink' @@ -11,6 +10,7 @@ import { LoginElopageBuys } from './LoginElopageBuys' import { LoginEmailOptIn } from './LoginEmailOptIn' import { Migration } from './Migration' import { OpenaiThreads } from './OpenaiThreads' +import { PendingTransaction } from './PendingTransaction' import { ProjectBranding } from './ProjectBranding' import { Transaction } from './Transaction' import { TransactionLink } from './TransactionLink' From 9249d6826351bedb9182ac9e427264733d7df370 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Thu, 1 May 2025 10:03:51 +0200 Subject: [PATCH 003/123] add esbuild for federation --- .github/workflows/test_federation.yml | 2 +- federation/Dockerfile | 8 +++++++- federation/esbuild.config.ts | 13 +++++++++++++ federation/package.json | 8 ++++---- 4 files changed, 25 insertions(+), 6 deletions(-) create mode 100644 federation/esbuild.config.ts diff --git a/.github/workflows/test_federation.yml b/.github/workflows/test_federation.yml index 1c31a7d5c..4236ddfbd 100644 --- a/.github/workflows/test_federation.yml +++ b/.github/workflows/test_federation.yml @@ -68,7 +68,7 @@ jobs: - name: Federation | Unit tests id: test run: | - cd out && turbo federation#lint federation#test + cd out && turbo federation#lint federation#test federation#build federation#typecheck echo "success=$([ $? -eq 0 ] && echo true || echo false)" >> $GITHUB_OUTPUT lint: diff --git a/federation/Dockerfile b/federation/Dockerfile index a586e2006..e22a98f67 100644 --- a/federation/Dockerfile +++ b/federation/Dockerfile @@ -75,7 +75,7 @@ RUN yarn install --frozen-lockfile --production=false \ # Build the project COPY --chown=app:app --from=builder /app/out/full/ . -RUN turbo build +RUN turbo build typecheck ################################################################################## # TEST ########################################################################### @@ -95,6 +95,12 @@ FROM base as production # Copy "binary"-files from build image COPY --chown=app:app --from=installer ${DOCKER_WORKDIR}/federation/build/src/index.js ./index.js +# We also install the native node_modules which cannot be bundled +# TODO: find a elegant way to use the right versions from yarn.lock +RUN yarn add sodium-native@4.0.0 \ + && rm -rf /tmp/* ~/.cache node_modules/.cache \ + && yarn cache clean + # Copy log4js-config.json to provide log configuration COPY --chown=app:app --from=installer ${DOCKER_WORKDIR}/federation/log4js-config.json ./log4js-config.json diff --git a/federation/esbuild.config.ts b/federation/esbuild.config.ts new file mode 100644 index 000000000..38ca5b58d --- /dev/null +++ b/federation/esbuild.config.ts @@ -0,0 +1,13 @@ +import { build } from 'esbuild' + +build({ + entryPoints: ['src/index.ts'], + outdir: 'build', + platform: 'node', + target: 'node18.20.7', + bundle: true, + keepNames: true, + // legalComments: 'inline', + external: ['sodium-native'], + minify: true, +}) diff --git a/federation/package.json b/federation/package.json index 6b8ed519d..b3bb8f652 100644 --- a/federation/package.json +++ b/federation/package.json @@ -8,11 +8,11 @@ "license": "Apache-2.0", "private": false, "scripts": { - "build": "tsc --build", - "clean": "tsc --build --clean", - "start": "cross-env TZ=UTC TS_NODE_BASEURL=./build node -r tsconfig-paths/register build/src/index.js", + "build": "tsx esbuild.config.ts", + "start": "cross-env TZ=UTC node build/index.js", + "dev": "cross-env TZ=UTC tsx watch src/index.ts", + "typecheck": "tsc --noEmit", "test": "cross-env TZ=UTC NODE_ENV=development DB_DATABASE=gradido_test_federation jest --runInBand --forceExit --detectOpenHandles", - "dev": "cross-env TZ=UTC nodemon -w src --ext ts --exec ts-node -r dotenv/config -r tsconfig-paths/register src/index.ts", "lint": "biome check --error-on-warnings .", "lint:fix": "biome check --error-on-warnings . --write" }, From dab0b95c6f67627eed40f955d64be4a0fdba1bba Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Thu, 1 May 2025 10:08:43 +0200 Subject: [PATCH 004/123] update backend packages --- backend/esbuild.config.ts | 13 +++ backend/package.json | 6 +- bun.lock | 75 +++-------------- database/package.json | 2 - dht-node/package.json | 2 - federation/package.json | 4 +- yarn.lock | 167 ++------------------------------------ 7 files changed, 35 insertions(+), 234 deletions(-) create mode 100644 backend/esbuild.config.ts diff --git a/backend/esbuild.config.ts b/backend/esbuild.config.ts new file mode 100644 index 000000000..38ca5b58d --- /dev/null +++ b/backend/esbuild.config.ts @@ -0,0 +1,13 @@ +import { build } from 'esbuild' + +build({ + entryPoints: ['src/index.ts'], + outdir: 'build', + platform: 'node', + target: 'node18.20.7', + bundle: true, + keepNames: true, + // legalComments: 'inline', + external: ['sodium-native'], + minify: true, +}) diff --git a/backend/package.json b/backend/package.json index 891129a09..1cb3deaca 100644 --- a/backend/package.json +++ b/backend/package.json @@ -72,17 +72,13 @@ "@types/sodium-native": "^2.3.5", "@types/uuid": "^8.3.4", "apollo-server-testing": "^2.25.2", + "esbuild": "^0.25.2", "faker": "^5.5.3", "graphql-tag": "^2.12.6", "jest": "27.2.4", "klicktipp-api": "^1.0.2", - "mkdirp": "^3.0.1", - "ncp": "^2.0.0", - "nodemon": "^2.0.7", "prettier": "^3.5.3", "ts-jest": "27.0.5", - "ts-node": "^10.9.2", - "tsconfig-paths": "^4.1.1", "typescript": "^4.9.5" }, "nodemonConfig": { diff --git a/bun.lock b/bun.lock index ba2d1a6d4..cf380e4f4 100644 --- a/bun.lock +++ b/bun.lock @@ -134,17 +134,13 @@ "@types/sodium-native": "^2.3.5", "@types/uuid": "^8.3.4", "apollo-server-testing": "^2.25.2", + "esbuild": "^0.25.2", "faker": "^5.5.3", "graphql-tag": "^2.12.6", "jest": "27.2.4", "klicktipp-api": "^1.0.2", - "mkdirp": "^3.0.1", - "ncp": "^2.0.0", - "nodemon": "^2.0.7", "prettier": "^3.5.3", "ts-jest": "27.0.5", - "ts-node": "^10.9.2", - "tsconfig-paths": "^4.1.1", "typescript": "^4.9.5", }, }, @@ -182,10 +178,8 @@ "@types/faker": "^5.5.9", "@types/geojson": "^7946.0.13", "@types/node": "^17.0.21", - "mkdirp": "^3.0.1", - "ncp": "^2.0.0", + "esbuild": "^0.25.2", "prettier": "^2.8.7", - "ts-node": "^10.9.2", "tsx": "^4.19.3", "typescript": "^4.9.5", }, @@ -201,8 +195,6 @@ "dotenv": "10.0.0", "joi": "^17.13.3", "log4js": "^6.7.1", - "nodemon": "^2.0.20", - "tsconfig-paths": "^4.1.2", "typeorm": "^0.3.16", "uuid": "^8.3.2", }, @@ -213,10 +205,11 @@ "@types/joi": "^17.2.3", "@types/node": "^17.0.21", "@types/uuid": "^8.3.4", + "esbuild": "^0.25.2", "jest": "27.5.1", "prettier": "^2.8.7", "ts-jest": "27.1.4", - "ts-node": "^10.9.2", + "tsx": "^4.19.3", "typescript": "^4.9.4", }, }, @@ -257,13 +250,11 @@ "@types/sodium-native": "^2.3.5", "@types/uuid": "^8.3.4", "apollo-server-testing": "2.25.2", + "esbuild": "^0.25.2", "graphql-tag": "^2.12.6", "jest": "27.2.4", - "nodemon": "^2.0.7", "prettier": "^3.5.3", "ts-jest": "27.0.5", - "ts-node": "^10.9.2", - "tsconfig-paths": "^4.1.1", "typescript": "^4.9.5", }, }, @@ -1848,8 +1839,6 @@ "ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], - "ignore-by-default": ["ignore-by-default@1.0.1", "", {}, "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA=="], - "immutable": ["immutable@5.1.1", "", {}, "sha512-3jatXi9ObIsPGr3N5hGw/vWWcTkq6hUYhpQz4k0wLC+owqWi/LiugIw9x0EdNZ2yGedKN/HzePiBvaJRXa0Ujg=="], "import-cwd": ["import-cwd@3.0.0", "", { "dependencies": { "import-from": "^3.0.0" } }, "sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg=="], @@ -2204,8 +2193,6 @@ "mitt": ["mitt@3.0.1", "", {}, "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw=="], - "mkdirp": ["mkdirp@3.0.1", "", { "bin": { "mkdirp": "dist/cjs/src/bin.js" } }, "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg=="], - "mlly": ["mlly@1.7.4", "", { "dependencies": { "acorn": "^8.14.0", "pathe": "^2.0.1", "pkg-types": "^1.3.0", "ufo": "^1.5.4" } }, "sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw=="], "mock-apollo-client": ["mock-apollo-client@1.3.1", "", { "peerDependencies": { "@apollo/client": "^3.0.0" } }, "sha512-jBl1YGofh9RpTUFfShwIumiry5qRkR1LYW12K1iZ576kMFh03psHTRiuY2k3dT6cUQ28RAK4gRFl9lVloazGhA=="], @@ -2234,8 +2221,6 @@ "natural-compare": ["natural-compare@1.4.0", "", {}, "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw=="], - "ncp": ["ncp@2.0.0", "", { "bin": { "ncp": "./bin/ncp" } }, "sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA=="], - "nearley": ["nearley@2.20.1", "", { "dependencies": { "commander": "^2.19.0", "moo": "^0.5.0", "railroad-diagrams": "^1.0.0", "randexp": "0.4.6" }, "bin": { "nearleyc": "bin/nearleyc.js", "nearley-test": "bin/nearley-test.js", "nearley-unparse": "bin/nearley-unparse.js", "nearley-railroad": "bin/nearley-railroad.js" } }, "sha512-+Mc8UaAebFzgV+KpI5n7DasuuQCHA89dmwm7JXw3TV43ukfNQ9DnBH3Mdb2g/I4Fdxc26pwimBWvjIw0UAILSQ=="], "negotiator": ["negotiator@0.6.3", "", {}, "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg=="], @@ -2264,8 +2249,6 @@ "nodemailer": ["nodemailer@6.10.1", "", {}, "sha512-Z+iLaBGVaSjbIzQ4pX6XV41HrooLsQ10ZWPUehGmuantvzWoDVBnmsdUcOIDM1t+yPor5pDhVlDESgOMEGxhHA=="], - "nodemon": ["nodemon@2.0.22", "", { "dependencies": { "chokidar": "^3.5.2", "debug": "^3.2.7", "ignore-by-default": "^1.0.1", "minimatch": "^3.1.2", "pstree.remy": "^1.1.8", "semver": "^5.7.1", "simple-update-notifier": "^1.0.7", "supports-color": "^5.5.0", "touch": "^3.1.0", "undefsafe": "^2.0.5" }, "bin": { "nodemon": "bin/nodemon.js" } }, "sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ=="], - "noise-curve-ed": ["noise-curve-ed@2.1.0", "", { "dependencies": { "b4a": "^1.1.0", "nanoassert": "^2.0.0", "sodium-universal": "^5.0.0" } }, "sha512-zAzJx+VwZM3w6EA1hTmDhJfvAnCeBQn/1FAeZ0LtGxCcCtlAK/uJXQVF/eDVUOaAZ286lHlx77WJ+qj9SmsRRg=="], "noise-handshake": ["noise-handshake@3.1.0", "", { "dependencies": { "b4a": "^1.1.0", "nanoassert": "^2.0.0", "sodium-universal": "^4.0.0" } }, "sha512-0S1qkUvMbTvZCfgr/vSkVT84YyvI4Q0OLwSc5BFxVmjaePrxAwVeXeJDY3A7N/7+qj95gZ15LaNoP9ZnBXH5Lw=="], @@ -2436,8 +2419,6 @@ "psl": ["psl@1.15.0", "", { "dependencies": { "punycode": "^2.3.1" } }, "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w=="], - "pstree.remy": ["pstree.remy@1.1.8", "", {}, "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w=="], - "pug": ["pug@3.0.3", "", { "dependencies": { "pug-code-gen": "^3.0.3", "pug-filters": "^4.0.0", "pug-lexer": "^5.0.1", "pug-linker": "^4.0.0", "pug-load": "^3.0.0", "pug-parser": "^6.0.0", "pug-runtime": "^3.0.1", "pug-strip-comments": "^2.0.0" } }, "sha512-uBi6kmc9f3SZ3PXxqcHiUZLmIXgfgWooKWXcwSGwQd2Zi5Rb0bT14+8CJjJgI8AB+nndLaNgHGrcc6bPIB665g=="], "pug-attrs": ["pug-attrs@3.0.0", "", { "dependencies": { "constantinople": "^4.0.1", "js-stringify": "^1.0.2", "pug-runtime": "^3.0.0" } }, "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA=="], @@ -2620,8 +2601,6 @@ "signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], - "simple-update-notifier": ["simple-update-notifier@1.1.0", "", { "dependencies": { "semver": "~7.0.0" } }, "sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg=="], - "sisteransi": ["sisteransi@1.0.5", "", {}, "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg=="], "slash": ["slash@3.0.0", "", {}, "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q=="], @@ -2712,7 +2691,7 @@ "superjson": ["superjson@2.2.2", "", { "dependencies": { "copy-anything": "^3.0.2" } }, "sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q=="], - "supports-color": ["supports-color@5.5.0", "", { "dependencies": { "has-flag": "^3.0.0" } }, "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow=="], + "supports-color": ["supports-color@8.1.1", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="], "supports-hyperlinks": ["supports-hyperlinks@3.2.0", "", { "dependencies": { "has-flag": "^4.0.0", "supports-color": "^7.0.0" } }, "sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig=="], @@ -2782,8 +2761,6 @@ "toposort": ["toposort@2.0.2", "", {}, "sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg=="], - "touch": ["touch@3.1.1", "", { "bin": { "nodetouch": "bin/nodetouch.js" } }, "sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA=="], - "tough-cookie": ["tough-cookie@5.1.2", "", { "dependencies": { "tldts": "^6.1.32" } }, "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A=="], "tr46": ["tr46@5.1.1", "", { "dependencies": { "punycode": "^2.3.1" } }, "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw=="], @@ -2802,7 +2779,7 @@ "ts-node": ["ts-node@10.9.2", "", { "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", "@tsconfig/node12": "^1.0.7", "@tsconfig/node14": "^1.0.0", "@tsconfig/node16": "^1.0.2", "acorn": "^8.4.1", "acorn-walk": "^8.1.1", "arg": "^4.1.0", "create-require": "^1.1.0", "diff": "^4.0.1", "make-error": "^1.1.1", "v8-compile-cache-lib": "^3.0.1", "yn": "3.1.1" }, "peerDependencies": { "@swc/core": ">=1.2.50", "@swc/wasm": ">=1.2.50", "@types/node": "*", "typescript": ">=2.7" }, "optionalPeers": ["@swc/core", "@swc/wasm"], "bin": { "ts-node": "dist/bin.js", "ts-script": "dist/bin-script-deprecated.js", "ts-node-cwd": "dist/bin-cwd.js", "ts-node-esm": "dist/bin-esm.js", "ts-node-script": "dist/bin-script.js", "ts-node-transpile-only": "dist/bin-transpile.js" } }, "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ=="], - "tsconfig-paths": ["tsconfig-paths@4.2.0", "", { "dependencies": { "json5": "^2.2.2", "minimist": "^1.2.6", "strip-bom": "^3.0.0" } }, "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg=="], + "tsconfig-paths": ["tsconfig-paths@3.15.0", "", { "dependencies": { "@types/json5": "^0.0.29", "json5": "^1.0.2", "minimist": "^1.2.6", "strip-bom": "^3.0.0" } }, "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg=="], "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], @@ -2864,8 +2841,6 @@ "unctx": ["unctx@2.4.1", "", { "dependencies": { "acorn": "^8.14.0", "estree-walker": "^3.0.3", "magic-string": "^0.30.17", "unplugin": "^2.1.0" } }, "sha512-AbaYw0Nm4mK4qjhns67C+kgxR2YWiwlDBPzxrN8h8C6VtAdCgditAY5Dezu3IJy4XVqAnbrXt9oQJvsn3fyozg=="], - "undefsafe": ["undefsafe@2.0.5", "", {}, "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA=="], - "underscore": ["underscore@1.13.7", "", {}, "sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g=="], "underscore.deep": ["underscore.deep@0.5.3", "", { "peerDependencies": { "underscore": "1.x" } }, "sha512-4OuSOlFNkiVFVc3khkeG112Pdu1gbitMj7t9B9ENb61uFmN70Jq7Iluhi3oflcSgexkKfDdJ5XAJET2gEq6ikA=="], @@ -3282,8 +3257,6 @@ "citty/consola": ["consola@3.4.2", "", {}, "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA=="], - "concurrently/supports-color": ["supports-color@8.1.1", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="], - "css-select/domhandler": ["domhandler@4.3.1", "", { "dependencies": { "domelementtype": "^2.2.0" } }, "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ=="], "css-select/domutils": ["domutils@2.8.0", "", { "dependencies": { "dom-serializer": "^1.0.1", "domelementtype": "^2.2.0", "domhandler": "^4.2.0" } }, "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A=="], @@ -3322,8 +3295,6 @@ "eslint-plugin-import/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], - "eslint-plugin-import/tsconfig-paths": ["tsconfig-paths@3.15.0", "", { "dependencies": { "@types/json5": "^0.0.29", "json5": "^1.0.2", "minimist": "^1.2.6", "strip-bom": "^3.0.0" } }, "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg=="], - "eslint-plugin-node/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "eslint-plugin-vue/eslint-utils": ["eslint-utils@3.0.0", "", { "dependencies": { "eslint-visitor-keys": "^2.0.0" }, "peerDependencies": { "eslint": ">=5" } }, "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA=="], @@ -3410,8 +3381,6 @@ "jest-worker/jest-util": ["jest-util@29.7.0", "", { "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", "graceful-fs": "^4.2.9", "picomatch": "^2.2.3" } }, "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA=="], - "jest-worker/supports-color": ["supports-color@8.1.1", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="], - "js-beautify/glob": ["glob@10.4.5", "", { "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", "minimatch": "^9.0.4", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" } }, "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg=="], "jsdom/parse5": ["parse5@7.3.0", "", { "dependencies": { "entities": "^6.0.0" } }, "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw=="], @@ -3440,12 +3409,6 @@ "node-fetch/whatwg-url": ["whatwg-url@5.0.0", "", { "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw=="], - "nodemon/chokidar": ["chokidar@3.6.0", "", { "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw=="], - - "nodemon/debug": ["debug@3.2.7", "", { "dependencies": { "ms": "^2.1.1" } }, "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="], - - "nodemon/semver": ["semver@5.7.2", "", { "bin": { "semver": "bin/semver" } }, "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g=="], - "noise-curve-ed/sodium-universal": ["sodium-universal@5.0.1", "", { "dependencies": { "sodium-native": "^5.0.1" }, "peerDependencies": { "sodium-javascript": "~0.8.0" }, "optionalPeers": ["sodium-javascript"] }, "sha512-rv+aH+tnKB5H0MAc2UadHShLMslpJsc4wjdnHRtiSIEYpOetCgu8MS4ExQRia+GL/MK3uuCyZPeEsi+J3h+Q+Q=="], "nypm/consola": ["consola@3.4.2", "", {}, "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA=="], @@ -3486,8 +3449,6 @@ "send/encodeurl": ["encodeurl@1.0.2", "", {}, "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w=="], - "simple-update-notifier/semver": ["semver@7.0.0", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A=="], - "sodium-secretstream/sodium-universal": ["sodium-universal@5.0.1", "", { "dependencies": { "sodium-native": "^5.0.1" }, "peerDependencies": { "sodium-javascript": "~0.8.0" }, "optionalPeers": ["sodium-javascript"] }, "sha512-rv+aH+tnKB5H0MAc2UadHShLMslpJsc4wjdnHRtiSIEYpOetCgu8MS4ExQRia+GL/MK3uuCyZPeEsi+J3h+Q+Q=="], "sodium-universal/sodium-native": ["sodium-native@4.3.3", "", { "dependencies": { "require-addon": "^1.1.0" } }, "sha512-OnxSlN3uyY8D0EsLHpmm2HOFmKddQVvEMmsakCrXUzSd8kjjbzL413t4ZNF3n0UxSwNgwTyUvkmZHTfuCeiYSw=="], @@ -3520,8 +3481,6 @@ "subscriptions-transport-ws/ws": ["ws@7.5.10", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": "^5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ=="], - "supports-color/has-flag": ["has-flag@3.0.0", "", {}, "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw=="], - "supports-hyperlinks/supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], "table/ajv": ["ajv@8.17.1", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g=="], @@ -3540,6 +3499,8 @@ "tinyglobby/picomatch": ["picomatch@4.0.2", "", {}, "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg=="], + "tsconfig-paths/json5": ["json5@1.0.2", "", { "dependencies": { "minimist": "^1.2.0" }, "bin": { "json5": "lib/cli.js" } }, "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA=="], + "type-graphql/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], "typeorm/dotenv": ["dotenv@16.5.0", "", {}, "sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg=="], @@ -3638,8 +3599,6 @@ "@istanbuljs/load-nyc-config/js-yaml/argparse": ["argparse@1.0.10", "", { "dependencies": { "sprintf-js": "~1.0.2" } }, "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg=="], - "@jest/reporters/jest-worker/supports-color": ["supports-color@8.1.1", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="], - "@jest/transform/write-file-atomic/signal-exit": ["signal-exit@3.0.7", "", {}, "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="], "@nuxt/kit/pkg-types/confbox": ["confbox@0.2.2", "", {}, "sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ=="], @@ -3678,8 +3637,6 @@ "editorconfig/minimatch/brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="], - "eslint-plugin-import/tsconfig-paths/json5": ["json5@1.0.2", "", { "dependencies": { "minimist": "^1.2.0" }, "bin": { "json5": "lib/cli.js" } }, "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA=="], - "eslint-plugin-vue/eslint-utils/eslint-visitor-keys": ["eslint-visitor-keys@2.1.0", "", {}, "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw=="], "express/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], @@ -3730,10 +3687,6 @@ "jest-environment-jsdom/jsdom/xml-name-validator": ["xml-name-validator@3.0.0", "", {}, "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw=="], - "jest-haste-map/jest-worker/supports-color": ["supports-color@8.1.1", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="], - - "jest-runner/jest-worker/supports-color": ["supports-color@8.1.1", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="], - "jest-worker/jest-util/@jest/types": ["@jest/types@29.6.3", "", { "dependencies": { "@jest/schemas": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", "@types/yargs": "^17.0.8", "chalk": "^4.0.0" } }, "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw=="], "js-beautify/glob/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], @@ -3748,10 +3701,6 @@ "node-fetch/whatwg-url/webidl-conversions": ["webidl-conversions@3.0.1", "", {}, "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="], - "nodemon/chokidar/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], - - "nodemon/chokidar/readdirp": ["readdirp@3.6.0", "", { "dependencies": { "picomatch": "^2.2.1" } }, "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA=="], - "noise-curve-ed/sodium-universal/sodium-native": ["sodium-native@5.0.1", "", { "dependencies": { "require-addon": "^1.1.0", "which-runtime": "^1.2.1" } }, "sha512-Q305aUXc0OzK7VVRvWkeEQJQIHs6slhFwWpyqLB5iJqhpyt2lYIVu96Y6PQ7TABIlWXVF3YiWDU3xS2Snkus+g=="], "nypm/pkg-types/confbox": ["confbox@0.2.2", "", {}, "sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ=="], @@ -3786,8 +3735,6 @@ "terser-webpack-plugin/jest-worker/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], - "terser-webpack-plugin/jest-worker/supports-color": ["supports-color@8.1.1", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="], - "test-exclude/minimatch/brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="], "typeorm/glob/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], @@ -3852,6 +3799,8 @@ "vue-apollo/chalk/escape-string-regexp": ["escape-string-regexp@1.0.5", "", {}, "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg=="], + "vue-apollo/chalk/supports-color": ["supports-color@5.5.0", "", { "dependencies": { "has-flag": "^3.0.0" } }, "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow=="], + "web-resource-inliner/htmlparser2/domhandler": ["domhandler@3.3.0", "", { "dependencies": { "domelementtype": "^2.0.1" } }, "sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA=="], "web-resource-inliner/htmlparser2/domutils": ["domutils@2.8.0", "", { "dependencies": { "dom-serializer": "^1.0.1", "domelementtype": "^2.2.0", "domhandler": "^4.2.0" } }, "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A=="], @@ -3922,6 +3871,8 @@ "vue-apollo/chalk/ansi-styles/color-convert": ["color-convert@1.9.3", "", { "dependencies": { "color-name": "1.1.3" } }, "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg=="], + "vue-apollo/chalk/supports-color/has-flag": ["has-flag@3.0.0", "", {}, "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw=="], + "web-resource-inliner/htmlparser2/domutils/dom-serializer": ["dom-serializer@1.4.1", "", { "dependencies": { "domelementtype": "^2.0.1", "domhandler": "^4.2.0", "entities": "^2.0.0" } }, "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag=="], "web-resource-inliner/htmlparser2/domutils/domhandler": ["domhandler@4.3.1", "", { "dependencies": { "domelementtype": "^2.2.0" } }, "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ=="], diff --git a/database/package.json b/database/package.json index fe8b4e5c0..25021a09d 100644 --- a/database/package.json +++ b/database/package.json @@ -33,8 +33,6 @@ "@types/geojson": "^7946.0.13", "@types/node": "^17.0.21", "esbuild": "^0.25.2", - "mkdirp": "^3.0.1", - "ncp": "^2.0.0", "prettier": "^2.8.7", "tsx": "^4.19.3", "typescript": "^4.9.5" diff --git a/dht-node/package.json b/dht-node/package.json index 97a081d49..ced561310 100644 --- a/dht-node/package.json +++ b/dht-node/package.json @@ -24,8 +24,6 @@ "dotenv": "10.0.0", "joi": "^17.13.3", "log4js": "^6.7.1", - "nodemon": "^2.0.20", - "tsconfig-paths": "^4.1.2", "typeorm": "^0.3.16", "uuid": "^8.3.2" }, diff --git a/federation/package.json b/federation/package.json index b3bb8f652..f77c70775 100644 --- a/federation/package.json +++ b/federation/package.json @@ -50,13 +50,11 @@ "@types/sodium-native": "^2.3.5", "@types/uuid": "^8.3.4", "apollo-server-testing": "2.25.2", + "esbuild": "^0.25.2", "graphql-tag": "^2.12.6", "jest": "27.2.4", - "nodemon": "^2.0.7", "prettier": "^3.5.3", "ts-jest": "27.0.5", - "ts-node": "^10.9.2", - "tsconfig-paths": "^4.1.1", "typescript": "^4.9.5" }, "nodemonConfig": { diff --git a/yarn.lock b/yarn.lock index f350f0362..b97a52c87 100644 --- a/yarn.lock +++ b/yarn.lock @@ -435,13 +435,6 @@ resolved "https://registry.yarnpkg.com/@biomejs/cli-win32-x64/-/cli-win32-x64-1.9.4.tgz#4c7afa90e3970213599b4095e62f87e5972b2340" integrity sha512-8Y5wMhVIPaWe6jw2H+KlEm4wP/f7EW3810ZLmDlrEEy5KvBsb9ECEfu/kMWD484ijfQ8+nIi0giMgu9g1UAuuA== -"@cspotcode/source-map-support@^0.8.0": - version "0.8.1" - resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" - integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== - dependencies: - "@jridgewell/trace-mapping" "0.3.9" - "@csstools/color-helpers@^5.0.2": version "5.0.2" resolved "https://registry.yarnpkg.com/@csstools/color-helpers/-/color-helpers-5.0.2.tgz#82592c9a7c2b83c293d9161894e2a6471feb97b8" @@ -1304,7 +1297,7 @@ "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.24" -"@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0": +"@jridgewell/resolve-uri@^3.1.0": version "3.1.2" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== @@ -1327,14 +1320,6 @@ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== -"@jridgewell/trace-mapping@0.3.9": - version "0.3.9" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" - integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== - dependencies: - "@jridgewell/resolve-uri" "^3.0.3" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping@^0.3.23", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": version "0.3.25" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" @@ -1829,26 +1814,6 @@ resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== -"@tsconfig/node10@^1.0.7": - version "1.0.11" - resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.11.tgz#6ee46400685f130e278128c7b38b7e031ff5b2f2" - integrity sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw== - -"@tsconfig/node12@^1.0.7": - version "1.0.11" - resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" - integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== - -"@tsconfig/node14@^1.0.0": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" - integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== - -"@tsconfig/node16@^1.0.2": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" - integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== - "@types/accepts@*", "@types/accepts@^1.3.5": version "1.3.7" resolved "https://registry.yarnpkg.com/@types/accepts/-/accepts-1.3.7.tgz#3b98b1889d2b2386604c2bbbe62e4fb51e95b265" @@ -2877,19 +2842,12 @@ acorn-walk@^7.1.1: resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== -acorn-walk@^8.1.1: - version "8.3.4" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.4.tgz#794dd169c3977edf4ba4ea47583587c5866236b7" - integrity sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g== - dependencies: - acorn "^8.11.0" - acorn@^7.1.1: version "7.4.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^8.11.0, acorn@^8.12.1, acorn@^8.14.0, acorn@^8.14.1, acorn@^8.2.4, acorn@^8.4.1, acorn@^8.5.0, acorn@^8.8.2, acorn@^8.9.0: +acorn@^8.12.1, acorn@^8.14.0, acorn@^8.14.1, acorn@^8.2.4, acorn@^8.5.0, acorn@^8.8.2, acorn@^8.9.0: version "8.14.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.1.tgz#721d5dc10f7d5b5609a891773d47731796935dfb" integrity sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg== @@ -3258,11 +3216,6 @@ app-root-path@^3.1.0: resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-3.1.0.tgz#5971a2fc12ba170369a7a1ef018c71e6e47c2e86" integrity sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA== -arg@^4.1.0: - version "4.1.3" - resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" - integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== - argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" @@ -3916,7 +3869,7 @@ cheerio@1.0.0-rc.10: parse5-htmlparser2-tree-adapter "^6.0.1" tslib "^2.2.0" -chokidar@^3.5.2, chokidar@^3.6.0: +chokidar@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== @@ -4221,11 +4174,6 @@ cosmiconfig@^9.0.0: js-yaml "^4.1.0" parse-json "^5.2.0" -create-require@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" - integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== - cross-env@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-7.0.3.tgz#865264b29677dc015ba8418918965dd232fc54cf" @@ -4560,11 +4508,6 @@ diff-sequences@^27.5.1: resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.5.1.tgz#eaecc0d327fd68c8d9672a1e64ab8dccb2ef5327" integrity sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ== -diff@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" - integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== - dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" @@ -6420,11 +6363,6 @@ ieee754@^1.2.1: resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== -ignore-by-default@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" - integrity sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA== - ignore@^5.0.5, ignore@^5.1.1, ignore@^5.2.0, ignore@^5.2.4: version "5.3.2" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" @@ -7476,7 +7414,7 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== -json5@2.x, json5@^2.1.3, json5@^2.2.2, json5@^2.2.3: +json5@2.x, json5@^2.1.3, json5@^2.2.3: version "2.2.3" resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== @@ -7852,7 +7790,7 @@ make-dir@^4.0.0: dependencies: semver "^7.5.3" -make-error@1.x, make-error@^1.1.1: +make-error@1.x: version "1.3.6" resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== @@ -8007,11 +7945,6 @@ mitt@^3.0.1: resolved "https://registry.yarnpkg.com/mitt/-/mitt-3.0.1.tgz#ea36cf0cc30403601ae074c8f77b7092cdab36d1" integrity sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw== -mkdirp@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-3.0.1.tgz#e44e4c5607fb279c168241713cc6e0fea9adcb50" - integrity sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg== - mlly@^1.2.0, mlly@^1.7.3, mlly@^1.7.4: version "1.7.4" resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.7.4.tgz#3d7295ea2358ec7a271eaa5d000a0f84febe100f" @@ -8116,11 +8049,6 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== -ncp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ncp/-/ncp-2.0.0.tgz#195a21d6c46e361d2fb1281ba38b91e9df7bdbb3" - integrity sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA== - nearley@^2.20.1: version "2.20.1" resolved "https://registry.yarnpkg.com/nearley/-/nearley-2.20.1.tgz#246cd33eff0d012faf197ff6774d7ac78acdd474" @@ -8209,22 +8137,6 @@ nodemailer@^6.6.5, nodemailer@^6.7.7, nodemailer@^6.9.13: resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-6.10.1.tgz#cbc434c54238f83a51c07eabd04e2b3e832da623" integrity sha512-Z+iLaBGVaSjbIzQ4pX6XV41HrooLsQ10ZWPUehGmuantvzWoDVBnmsdUcOIDM1t+yPor5pDhVlDESgOMEGxhHA== -nodemon@^2.0.20, nodemon@^2.0.7: - version "2.0.22" - resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-2.0.22.tgz#182c45c3a78da486f673d6c1702e00728daf5258" - integrity sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ== - dependencies: - chokidar "^3.5.2" - debug "^3.2.7" - ignore-by-default "^1.0.1" - minimatch "^3.1.2" - pstree.remy "^1.1.8" - semver "^5.7.1" - simple-update-notifier "^1.0.7" - supports-color "^5.5.0" - touch "^3.1.0" - undefsafe "^2.0.5" - noise-curve-ed@^2.0.0, noise-curve-ed@^2.0.1: version "2.1.0" resolved "https://registry.yarnpkg.com/noise-curve-ed/-/noise-curve-ed-2.1.0.tgz#38ab0748439baa0f21d49c78d7b8be3d5bb94f42" @@ -8919,11 +8831,6 @@ psl@^1.1.33: dependencies: punycode "^2.3.1" -pstree.remy@^1.1.8: - version "1.1.8" - resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a" - integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== - pug-attrs@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pug-attrs/-/pug-attrs-3.0.0.tgz#b10451e0348165e31fad1cc23ebddd9dc7347c41" @@ -9501,7 +9408,7 @@ semver@7.x, semver@^7.0.0, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^ resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.1.tgz#abd5098d82b18c6c81f6074ff2647fd3e7220c9f" integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA== -semver@^5.5.0, semver@^5.7.1: +semver@^5.5.0: version "5.7.2" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== @@ -9511,11 +9418,6 @@ semver@^6.1.0, semver@^6.3.0, semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@~7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" - integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== - send@0.19.0: version "0.19.0" resolved "https://registry.yarnpkg.com/send/-/send-0.19.0.tgz#bbc5a388c8ea6c048967049dbeac0e4a3f09d7f8" @@ -9697,13 +9599,6 @@ signal-exit@^4.0.1: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== -simple-update-notifier@^1.0.7: - version "1.1.0" - resolved "https://registry.yarnpkg.com/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz#67694c121de354af592b347cdba798463ed49c82" - integrity sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg== - dependencies: - semver "~7.0.0" - sisteransi@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" @@ -10127,7 +10022,7 @@ superjson@^2.2.2: dependencies: copy-anything "^3.0.2" -supports-color@^5.3.0, supports-color@^5.5.0: +supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== @@ -10389,11 +10284,6 @@ toposort@^2.0.2: resolved "https://registry.yarnpkg.com/toposort/-/toposort-2.0.2.tgz#ae21768175d1559d48bef35420b2f4962f09c330" integrity sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg== -touch@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.1.tgz#097a23d7b161476435e5c1344a95c0f75b4a5694" - integrity sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA== - tough-cookie@^4.0.0: version "4.1.4" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.4.tgz#945f1461b45b5a8c76821c33ea49c3ac192c1b36" @@ -10500,25 +10390,6 @@ ts-mysql-migrate@^1.0.2: "@types/mysql" "^2.15.8" mysql "^2.18.1" -ts-node@^10.9.2: - version "10.9.2" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.2.tgz#70f021c9e185bccdca820e26dc413805c101c71f" - integrity sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ== - dependencies: - "@cspotcode/source-map-support" "^0.8.0" - "@tsconfig/node10" "^1.0.7" - "@tsconfig/node12" "^1.0.7" - "@tsconfig/node14" "^1.0.0" - "@tsconfig/node16" "^1.0.2" - acorn "^8.4.1" - acorn-walk "^8.1.1" - arg "^4.1.0" - create-require "^1.1.0" - diff "^4.0.1" - make-error "^1.1.1" - v8-compile-cache-lib "^3.0.1" - yn "3.1.1" - tsconfig-paths@^3.15.0: version "3.15.0" resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" @@ -10529,15 +10400,6 @@ tsconfig-paths@^3.15.0: minimist "^1.2.6" strip-bom "^3.0.0" -tsconfig-paths@^4.1.1, tsconfig-paths@^4.1.2: - version "4.2.0" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz#ef78e19039133446d244beac0fd6a1632e2d107c" - integrity sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg== - dependencies: - json5 "^2.2.2" - minimist "^1.2.6" - strip-bom "^3.0.0" - tslib@^1.10.0, tslib@^1.9.3: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" @@ -10794,11 +10656,6 @@ unctx@^2.4.1: magic-string "^0.30.17" unplugin "^2.1.0" -undefsafe@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.5.tgz#38733b9327bdcd226db889fb723a6efd162e6e2c" - integrity sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA== - underscore.deep@~0.5.1: version "0.5.3" resolved "https://registry.yarnpkg.com/underscore.deep/-/underscore.deep-0.5.3.tgz#210969d58025339cecabd2a2ad8c3e8925e5c095" @@ -11002,11 +10859,6 @@ uuid@^9.0.0, uuid@^9.0.1: resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== -v8-compile-cache-lib@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" - integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== - v8-to-istanbul@^8.1.0: version "8.1.1" resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz#77b752fd3975e31bbcef938f85e9bd1c7a8d60ed" @@ -11715,11 +11567,6 @@ yargs@^17.7.2: y18n "^5.0.5" yargs-parser "^21.1.1" -yn@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" - integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== - yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" From 6571beeecf328f31ceab2ff00285f3af2b14c877 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Thu, 1 May 2025 10:16:48 +0200 Subject: [PATCH 005/123] backend build with esbuild is working --- .github/workflows/test_backend.yml | 2 +- backend/esbuild.config.ts | 4 +++- backend/package.json | 11 ++++++----- backend/src/index.ts | 1 + bun.lock | 3 +++ yarn.lock | 5 +++++ 6 files changed, 19 insertions(+), 7 deletions(-) diff --git a/.github/workflows/test_backend.yml b/.github/workflows/test_backend.yml index 09a16eaef..0d1d629dd 100644 --- a/.github/workflows/test_backend.yml +++ b/.github/workflows/test_backend.yml @@ -69,7 +69,7 @@ jobs: - name: Backend | Unit tests id: test run: | - cd out && turbo backend#lint backend#test + cd out && turbo backend#lint backend#test backend#build backend#typecheck echo "success=$([ $? -eq 0 ] && echo true || echo false)" >> $GITHUB_OUTPUT lint: diff --git a/backend/esbuild.config.ts b/backend/esbuild.config.ts index 38ca5b58d..a475d3b52 100644 --- a/backend/esbuild.config.ts +++ b/backend/esbuild.config.ts @@ -1,3 +1,4 @@ +import { esbuildDecorators } from '@anatine/esbuild-decorators' import { build } from 'esbuild' build({ @@ -8,6 +9,7 @@ build({ bundle: true, keepNames: true, // legalComments: 'inline', - external: ['sodium-native'], + external: ['reflect-metadata', 'sodium-native', 'email-templates'], + plugins: [esbuildDecorators()], minify: true, }) diff --git a/backend/package.json b/backend/package.json index 1cb3deaca..075563751 100644 --- a/backend/package.json +++ b/backend/package.json @@ -8,10 +8,10 @@ "license": "Apache-2.0", "private": false, "scripts": { - "build": "tsc --build && mkdirp build/src/emails/templates/ && ncp src/emails/templates build/src/emails/templates && mkdirp build/src/locales/ && ncp src/locales build/src/locales", - "clean": "tsc --build --clean", - "start": "cross-env TZ=UTC TS_NODE_BASEURL=./build node -r tsconfig-paths/register build/src/index.js", - "dev": "cross-env TZ=UTC nodemon -w src --ext ts,pug,json,css --exec ts-node -r tsconfig-paths/register src/index.ts", + "build": "tsx esbuild.config.ts", + "start": "cross-env TZ=UTC node build/index.js", + "dev": "cross-env TZ=UTC tsx watch src/index.ts", + "typecheck": "tsc --noEmit", "lint": "biome check --error-on-warnings .", "lint:fix": "biome check --error-on-warnings . --write", "test": "cross-env TZ=UTC NODE_ENV=development DB_DATABASE=gradido_test_backend jest --runInBand --forceExit --detectOpenHandles", @@ -60,9 +60,10 @@ "xregexp": "^5.1.1" }, "devDependencies": { + "@anatine/esbuild-decorators": "^0.2.19", + "@biomejs/biome": "1.9.4", "@types/email-templates": "^10.0.4", "@types/express": "^4.17.21", - "@biomejs/biome": "1.9.4", "@types/faker": "^5.5.9", "@types/i18n": "^0.13.4", "@types/jest": "27.0.2", diff --git a/backend/src/index.ts b/backend/src/index.ts index 9b1b72ba5..01f7f47a3 100644 --- a/backend/src/index.ts +++ b/backend/src/index.ts @@ -1,3 +1,4 @@ +import 'reflect-metadata' import { CONFIG } from './config' import { startValidateCommunities } from './federation/validateCommunities' import { createServer } from './server/createServer' diff --git a/bun.lock b/bun.lock index cf380e4f4..88e4ee180 100644 --- a/bun.lock +++ b/bun.lock @@ -122,6 +122,7 @@ "xregexp": "^5.1.1", }, "devDependencies": { + "@anatine/esbuild-decorators": "^0.2.19", "@biomejs/biome": "1.9.4", "@types/email-templates": "^10.0.4", "@types/express": "^4.17.21", @@ -355,6 +356,8 @@ "packages": { "@ampproject/remapping": ["@ampproject/remapping@2.3.0", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw=="], + "@anatine/esbuild-decorators": ["@anatine/esbuild-decorators@0.2.19", "", { "peerDependencies": { "esbuild": "~0.14.29" } }, "sha512-pyj6ULyMacyzpDqlnbS2OCkOqxcVgk8IqiTMRJ5CrsF8Yl1azvlX/AM6xWR8UzHKUYDlWOw5mOpos3+7KKR0Lw=="], + "@antfu/install-pkg": ["@antfu/install-pkg@0.4.1", "", { "dependencies": { "package-manager-detector": "^0.2.0", "tinyexec": "^0.3.0" } }, "sha512-T7yB5QNG29afhWVkVq7XeIMBa5U/vs9mX69YqayXypPRmYzUmzwnYltplHmPtZ4HPCn+sQKeXW8I47wCbuBOjw=="], "@antfu/utils": ["@antfu/utils@0.7.10", "", {}, "sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww=="], diff --git a/yarn.lock b/yarn.lock index b97a52c87..526c35245 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10,6 +10,11 @@ "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.24" +"@anatine/esbuild-decorators@^0.2.19": + version "0.2.19" + resolved "https://registry.yarnpkg.com/@anatine/esbuild-decorators/-/esbuild-decorators-0.2.19.tgz#d4137182abfdf0e6de680f69b447492813b62ef4" + integrity sha512-pyj6ULyMacyzpDqlnbS2OCkOqxcVgk8IqiTMRJ5CrsF8Yl1azvlX/AM6xWR8UzHKUYDlWOw5mOpos3+7KKR0Lw== + "@antfu/install-pkg@^0.4.1": version "0.4.1" resolved "https://registry.yarnpkg.com/@antfu/install-pkg/-/install-pkg-0.4.1.tgz#d1d7f3be96ecdb41581629cafe8626d1748c0cf1" From 5867b9f7907f808636844ba7b160592ca4204c93 Mon Sep 17 00:00:00 2001 From: Einhornimmond Date: Fri, 2 May 2025 07:51:49 +0200 Subject: [PATCH 006/123] wait for mailserver --- .github/workflows/test_e2e.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test_e2e.yml b/.github/workflows/test_e2e.yml index 64dc7f524..992f2d698 100644 --- a/.github/workflows/test_e2e.yml +++ b/.github/workflows/test_e2e.yml @@ -59,8 +59,10 @@ jobs: sudo nginx -t sudo systemctl start nginx - - name: wait for nginx to be ready - run: until nc -z 127.0.0.1 80; do echo waiting for nginx; sleep 1; done; + - name: wait for nginx and mailserver to be ready + run: | + until nc -z 127.0.0.1 80; do echo waiting for nginx; sleep 1; done; + until nc -z 127.0.0.1 1025; do echo waiting for mailserver; sleep 1; done; - name: End-to-end tests | run tests id: e2e-tests From 1ec1a7d0d17c2e11edd355f41353c7c47279805f Mon Sep 17 00:00:00 2001 From: Einhornimmond Date: Fri, 2 May 2025 07:56:54 +0200 Subject: [PATCH 007/123] transfer env vars to turbo --- .github/workflows/test_e2e.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test_e2e.yml b/.github/workflows/test_e2e.yml index 992f2d698..eeae17439 100644 --- a/.github/workflows/test_e2e.yml +++ b/.github/workflows/test_e2e.yml @@ -39,7 +39,7 @@ jobs: cp .env.test_e2e .env cd .. bun turbo backend#build frontend#build - bun turbo backend#start frontend#start & + bun turbo backend#start frontend#start --env-mode=loose & - name: End-to-end tests | prepare run: | From 8cc538d97e7bab5a85839cb36e409ecc8f573f05 Mon Sep 17 00:00:00 2001 From: Einhornimmond Date: Fri, 2 May 2025 08:25:23 +0200 Subject: [PATCH 008/123] try to use bun --- .github/workflows/test_backend.yml | 2 +- .github/workflows/test_dht_node.yml | 2 +- .github/workflows/test_federation.yml | 2 +- backend/Dockerfile | 6 ++- backend/package.json | 14 +++--- bun.lock | 29 ++++++++++- config-schema/package.json | 1 + database/package.json | 18 +++---- dht-node/Dockerfile | 2 +- dht-node/package.json | 15 +++--- federation/Dockerfile | 2 +- federation/package.json | 7 +-- yarn.lock | 72 +++++++++++++++++++++++++++ 13 files changed, 139 insertions(+), 33 deletions(-) diff --git a/.github/workflows/test_backend.yml b/.github/workflows/test_backend.yml index 0d1d629dd..74abd0403 100644 --- a/.github/workflows/test_backend.yml +++ b/.github/workflows/test_backend.yml @@ -33,7 +33,7 @@ jobs: uses: actions/checkout@v3 - name: Backend | Build 'test' image - run: docker build -f ./backend/Dockerfile --target test -t "gradido/backend:test" . + run: docker build -f ./backend/Dockerfile --target production -t "gradido/backend:production" . unit_test: if: needs.files-changed.outputs.backend == 'true' || needs.files-changed.outputs.database == 'true' || needs.files-changed.outputs.docker-compose == 'true' || needs.files-changed.outputs.mariadb == 'true' || needs.files-changed.outputs.config == 'true' diff --git a/.github/workflows/test_dht_node.yml b/.github/workflows/test_dht_node.yml index b475dbcf4..6aee0b4cc 100644 --- a/.github/workflows/test_dht_node.yml +++ b/.github/workflows/test_dht_node.yml @@ -32,7 +32,7 @@ jobs: uses: actions/checkout@v3 - name: Build 'test' image (typecheck & build) - run: docker build --target test -t "gradido/dht-node:test" -f dht-node/Dockerfile . + run: docker build --target production -t "gradido/dht-node:production" -f dht-node/Dockerfile . unit_test: name: Unit Tests - DHT Node diff --git a/.github/workflows/test_federation.yml b/.github/workflows/test_federation.yml index 4236ddfbd..46350853c 100644 --- a/.github/workflows/test_federation.yml +++ b/.github/workflows/test_federation.yml @@ -32,7 +32,7 @@ jobs: uses: actions/checkout@v3 - name: Build `test` image - run: docker build --target test -t "gradido/federation:test" -f federation/Dockerfile . + run: docker build --target production -t "gradido/federation:production" -f federation/Dockerfile . unit_test: name: Unit Tests - Federation diff --git a/backend/Dockerfile b/backend/Dockerfile index 558369ccd..0344322da 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -94,7 +94,11 @@ CMD /bin/sh -c "turbo backend#test --env-mode=loose" FROM base as production # Copy "binary"-files from build image -COPY --chown=app:app --from=installer ${DOCKER_WORKDIR}/backend/build/src/index.js ./index.js +COPY --chown=app:app --from=installer ${DOCKER_WORKDIR}/backend/build/index.js ./index.js + +RUN yarn add sodium-native@4.0.0 \ + && rm -rf /tmp/* ~/.cache node_modules/.cache \ + && yarn cache clean # Copy log4js-config.json to provide log configuration COPY --chown=app:app --from=installer ${DOCKER_WORKDIR}/backend/log4js-config.json ./log4js-config.json diff --git a/backend/package.json b/backend/package.json index 075563751..d8258fd7d 100644 --- a/backend/package.json +++ b/backend/package.json @@ -8,17 +8,17 @@ "license": "Apache-2.0", "private": false, "scripts": { - "build": "tsx esbuild.config.ts", - "start": "cross-env TZ=UTC node build/index.js", - "dev": "cross-env TZ=UTC tsx watch src/index.ts", + "build": "bun esbuild.config.ts", + "start": "cross-env TZ=UTC NODE_ENV=production bun build/index.js", + "dev": "cross-env TZ=UTC bun --hot src/index.ts", "typecheck": "tsc --noEmit", "lint": "biome check --error-on-warnings .", "lint:fix": "biome check --error-on-warnings . --write", "test": "cross-env TZ=UTC NODE_ENV=development DB_DATABASE=gradido_test_backend jest --runInBand --forceExit --detectOpenHandles", - "seed": "cross-env TZ=UTC NODE_ENV=development ts-node -r tsconfig-paths/register src/seeds/index.ts", - "klicktipp": "cross-env TZ=UTC NODE_ENV=development ts-node -r tsconfig-paths/register src/util/executeKlicktipp.ts", - "gmsusers": "cross-env TZ=UTC NODE_ENV=development ts-node -r tsconfig-paths/register src/apis/gms/ExportUsers.ts", - "humhubUserExport": "cross-env TZ=UTC NODE_ENV=development ts-node -r tsconfig-paths/register src/apis/humhub/ExportUsers.ts", + "seed": "cross-env TZ=UTC NODE_ENV=development bun src/seeds/index.ts", + "klicktipp": "cross-env TZ=UTC NODE_ENV=development bun src/util/executeKlicktipp.ts", + "gmsusers": "cross-env TZ=UTC NODE_ENV=development bun src/apis/gms/ExportUsers.ts", + "humhubUserExport": "cross-env TZ=UTC NODE_ENV=development bun src/apis/humhub/ExportUsers.ts", "locales": "scripts/sort.sh" }, "dependencies": { diff --git a/bun.lock b/bun.lock index 88e4ee180..ce2c061de 100644 --- a/bun.lock +++ b/bun.lock @@ -154,6 +154,7 @@ "devDependencies": { "@biomejs/biome": "1.9.4", "@types/node": "^17.0.21", + "bun": "^1.2.11", "esbuild": "^0.25.2", "typescript": "^4.9.5", }, @@ -179,9 +180,9 @@ "@types/faker": "^5.5.9", "@types/geojson": "^7946.0.13", "@types/node": "^17.0.21", + "bun": "^1.2.11", "esbuild": "^0.25.2", "prettier": "^2.8.7", - "tsx": "^4.19.3", "typescript": "^4.9.5", }, }, @@ -206,6 +207,7 @@ "@types/joi": "^17.2.3", "@types/node": "^17.0.21", "@types/uuid": "^8.3.4", + "bun": "^1.2.11", "esbuild": "^0.25.2", "jest": "27.5.1", "prettier": "^2.8.7", @@ -251,6 +253,7 @@ "@types/sodium-native": "^2.3.5", "@types/uuid": "^8.3.4", "apollo-server-testing": "2.25.2", + "bun": "^1.2.11", "esbuild": "^0.25.2", "graphql-tag": "^2.12.6", "jest": "27.2.4", @@ -664,6 +667,28 @@ "@one-ini/wasm": ["@one-ini/wasm@0.1.1", "", {}, "sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw=="], + "@oven/bun-darwin-aarch64": ["@oven/bun-darwin-aarch64@1.2.11", "", { "os": "darwin", "cpu": "arm64" }, "sha512-LN7gshxqEHJ1LA0B43Z56Ts3LxRjp2LrIz45FIgeKWE81PYglR9NMNou90gFuYlUtMyarSk6MV9Jdvo2kFnn8Q=="], + + "@oven/bun-darwin-x64": ["@oven/bun-darwin-x64@1.2.11", "", { "os": "darwin", "cpu": "x64" }, "sha512-AmmlGdQmzORFeUZRa2Ki9UWYTt5ZGUwTp0z+H0uR4bYHy7sQhpDbNKtZcfKKuLRQ6P23DKc3Lpo+yhR0cg7prg=="], + + "@oven/bun-darwin-x64-baseline": ["@oven/bun-darwin-x64-baseline@1.2.11", "", { "os": "darwin", "cpu": "x64" }, "sha512-ksZJzq0Id3YsGcs++QnL1oGYjqY5XNihR0MscZ+M4YYruvVKHKim9Aql46+TI55YmKD810HVpeLolIeeTl2JUg=="], + + "@oven/bun-linux-aarch64": ["@oven/bun-linux-aarch64@1.2.11", "", { "os": "linux", "cpu": "arm64" }, "sha512-jNQ5F6o9qC/KNhBnyxnjVRfiTxZB7thvZ7T+oPZSNh1IV8UWDunEGmUdOqSqoPsigpXHRjbV3DKJKN+YaPQCCA=="], + + "@oven/bun-linux-aarch64-musl": ["@oven/bun-linux-aarch64-musl@1.2.11", "", { "os": "linux", "cpu": "none" }, "sha512-A/h7WxC2GbNus8fupz5EHsD8YugG19uW9GQWDf4tk0YWYuSaUOCP14JYbXbiJ48OFELWNchEc/2azajH+votbA=="], + + "@oven/bun-linux-x64": ["@oven/bun-linux-x64@1.2.11", "", { "os": "linux", "cpu": "x64" }, "sha512-6pH556SgOR2UOgWQfEiYI3DWgkm7T+L9fmBe2dfEYrKCEu/TbXZXOJeMi943NSMIiT3q2gVwlCEdoxZwedQs4A=="], + + "@oven/bun-linux-x64-baseline": ["@oven/bun-linux-x64-baseline@1.2.11", "", { "os": "linux", "cpu": "x64" }, "sha512-xswex8EPmzX8BqbNXpiwgrpDkaD/FMIaxD85EIBaaksi6I8nln2kzEmlO/uVhbFAn9PPWydi3Q+FCcNnJGRazQ=="], + + "@oven/bun-linux-x64-musl": ["@oven/bun-linux-x64-musl@1.2.11", "", { "os": "linux", "cpu": "x64" }, "sha512-yF1Urgsy8xkQu8iAd03ORxuZ/DWrNPCST2r1EVIwjHuzpZ3o2odKjnE9Hnwsq+wcWdCRsakqL/muILB/9aCxeQ=="], + + "@oven/bun-linux-x64-musl-baseline": ["@oven/bun-linux-x64-musl-baseline@1.2.11", "", { "os": "linux", "cpu": "x64" }, "sha512-YYglLgFkHwNMjECCyM/kZDUZa6UW3ssVtg5k6+8QU1Rp5cPF+0SBlGGTr5ho2lFkNn/ylKmwyuqE1tB45zgVvA=="], + + "@oven/bun-windows-x64": ["@oven/bun-windows-x64@1.2.11", "", { "os": "win32", "cpu": "x64" }, "sha512-5mGVsGSS8JWBq8IHXGvFJ7rlET4XCUdDTKEaLLq3O1YaqyZZiPMQFnU70MfkpjPe4stRDZ+/NWBRNDMaNTYQxw=="], + + "@oven/bun-windows-x64-baseline": ["@oven/bun-windows-x64-baseline@1.2.11", "", { "os": "win32", "cpu": "x64" }, "sha512-uzappBblyA3GlX0PDENU1HTPZR82tzPuNd5jumTiDQ22FZmc2ZqCYTIZ/ngwHKOHDD6Rxdsux8+9EXgVS51G2w=="], + "@parcel/watcher": ["@parcel/watcher@2.5.1", "", { "dependencies": { "detect-libc": "^1.0.3", "is-glob": "^4.0.3", "micromatch": "^4.0.5", "node-addon-api": "^7.0.0" }, "optionalDependencies": { "@parcel/watcher-android-arm64": "2.5.1", "@parcel/watcher-darwin-arm64": "2.5.1", "@parcel/watcher-darwin-x64": "2.5.1", "@parcel/watcher-freebsd-x64": "2.5.1", "@parcel/watcher-linux-arm-glibc": "2.5.1", "@parcel/watcher-linux-arm-musl": "2.5.1", "@parcel/watcher-linux-arm64-glibc": "2.5.1", "@parcel/watcher-linux-arm64-musl": "2.5.1", "@parcel/watcher-linux-x64-glibc": "2.5.1", "@parcel/watcher-linux-x64-musl": "2.5.1", "@parcel/watcher-win32-arm64": "2.5.1", "@parcel/watcher-win32-ia32": "2.5.1", "@parcel/watcher-win32-x64": "2.5.1" } }, "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg=="], "@parcel/watcher-android-arm64": ["@parcel/watcher-android-arm64@2.5.1", "", { "os": "android", "cpu": "arm64" }, "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA=="], @@ -1236,6 +1261,8 @@ "builtins": ["builtins@5.1.0", "", { "dependencies": { "semver": "^7.0.0" } }, "sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg=="], + "bun": ["bun@1.2.11", "", { "optionalDependencies": { "@oven/bun-darwin-aarch64": "1.2.11", "@oven/bun-darwin-x64": "1.2.11", "@oven/bun-darwin-x64-baseline": "1.2.11", "@oven/bun-linux-aarch64": "1.2.11", "@oven/bun-linux-aarch64-musl": "1.2.11", "@oven/bun-linux-x64": "1.2.11", "@oven/bun-linux-x64-baseline": "1.2.11", "@oven/bun-linux-x64-musl": "1.2.11", "@oven/bun-linux-x64-musl-baseline": "1.2.11", "@oven/bun-windows-x64": "1.2.11", "@oven/bun-windows-x64-baseline": "1.2.11" }, "os": [ "linux", "win32", "darwin", ], "cpu": [ "x64", "arm64", ], "bin": { "bun": "bin/bun.exe", "bunx": "bin/bun.exe" } }, "sha512-9brVfsp6/TYVsE3lCl1MUxoyKhvljqyL1MNPErgwsOaS9g4Gzi2nY+W5WtRAXGzLrgz5jzsoGHHwyH/rTeRCIg=="], + "busboy": ["busboy@0.3.1", "", { "dependencies": { "dicer": "0.3.0" } }, "sha512-y7tTxhGKXcyBxRKAni+awqx8uqaJKrSFSNFSeRG5CsWNdmy2BIK+6VGWEW7TZnIO/533mtMEA4rOevQV815YJw=="], "bytes": ["bytes@3.1.2", "", {}, "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="], diff --git a/config-schema/package.json b/config-schema/package.json index 28e9494c2..22c17000c 100644 --- a/config-schema/package.json +++ b/config-schema/package.json @@ -23,6 +23,7 @@ "devDependencies": { "@biomejs/biome": "1.9.4", "@types/node": "^17.0.21", + "bun": "^1.2.11", "esbuild": "^0.25.2", "typescript": "^4.9.5" }, diff --git a/database/package.json b/database/package.json index 25021a09d..e6a9769b5 100644 --- a/database/package.json +++ b/database/package.json @@ -15,26 +15,26 @@ "license": "Apache-2.0", "private": false, "scripts": { - "build": "tsx ./esbuild.config.ts", + "build": "bun ./esbuild.config.ts", "typecheck": "tsc --noEmit", - "up": "cross-env TZ=UTC tsx src/index.ts up", - "down": "cross-env TZ=UTC tsx src/index.ts down", - "reset": "cross-env TZ=UTC tsx src/index.ts reset", - "clear": "cross-env TZ=UTC tsx src/index.ts clear", + "up": "cross-env TZ=UTC bun src/index.ts up", + "down": "cross-env TZ=UTC bun src/index.ts down", + "reset": "cross-env TZ=UTC bun src/index.ts reset", + "clear": "cross-env TZ=UTC bun src/index.ts clear", "lint": "biome check --error-on-warnings .", "lint:fix": "biome check --error-on-warnings . --write", - "up:backend_test": "cross-env TZ=UTC DB_DATABASE=gradido_test_backend tsx src/index.ts up", - "up:federation_test": "cross-env TZ=UTC DB_DATABASE=gradido_test_federation tsx src/index.ts up", - "up:dht_test": "cross-env TZ=UTC DB_DATABASE=gradido_test_dht tsx src/index.ts up" + "up:backend_test": "cross-env TZ=UTC DB_DATABASE=gradido_test_backend bun src/index.ts up", + "up:federation_test": "cross-env TZ=UTC DB_DATABASE=gradido_test_federation bun src/index.ts up", + "up:dht_test": "cross-env TZ=UTC DB_DATABASE=gradido_test_dht bun src/index.ts up" }, "devDependencies": { "@biomejs/biome": "1.9.4", "@types/faker": "^5.5.9", "@types/geojson": "^7946.0.13", "@types/node": "^17.0.21", + "bun": "^1.2.11", "esbuild": "^0.25.2", "prettier": "^2.8.7", - "tsx": "^4.19.3", "typescript": "^4.9.5" }, "dependencies": { diff --git a/dht-node/Dockerfile b/dht-node/Dockerfile index 00e781ec4..e57914d8d 100644 --- a/dht-node/Dockerfile +++ b/dht-node/Dockerfile @@ -94,7 +94,7 @@ CMD /bin/sh -c "turbo dht-node#test --env-mode=loose" FROM base as production # Copy "binary"-files from build image -COPY --chown=app:app --from=installer ${DOCKER_WORKDIR}/dht-node/build/src/index.js ./index.js +COPY --chown=app:app --from=installer ${DOCKER_WORKDIR}/dht-node/build/index.js ./index.js # We also install the native node_modules which cannot be bundled # TODO: find a elegant way to use the right versions from yarn.lock diff --git a/dht-node/package.json b/dht-node/package.json index ced561310..603f77ac6 100644 --- a/dht-node/package.json +++ b/dht-node/package.json @@ -8,9 +8,9 @@ "license": "Apache-2.0", "private": false, "scripts": { - "build": "tsx esbuild.config.ts", - "start": "cross-env TZ=UTC node build/index.js", - "dev": "cross-env TZ=UTC tsx watch src/index.ts", + "build": "bun esbuild.config.ts", + "start": "cross-env TZ=UTC bun build/index.js", + "dev": "cross-env TZ=UTC bun --hot src/index.ts", "typecheck": "tsc --noEmit", "lint": "biome check --error-on-warnings .", "lint:fix": "biome check --error-on-warnings . --write", @@ -28,17 +28,18 @@ "uuid": "^8.3.2" }, "devDependencies": { - "@types/jest": "27.5.1", - "@types/node": "^17.0.21", - "@types/uuid": "^8.3.4", "@biomejs/biome": "1.9.4", "@types/dotenv": "^8.2.0", + "@types/jest": "27.5.1", "@types/joi": "^17.2.3", + "@types/node": "^17.0.21", + "@types/uuid": "^8.3.4", + "bun": "^1.2.11", "esbuild": "^0.25.2", "jest": "27.5.1", "prettier": "^2.8.7", - "tsx": "^4.19.3", "ts-jest": "27.1.4", + "tsx": "^4.19.3", "typescript": "^4.9.4" }, "engines": { diff --git a/federation/Dockerfile b/federation/Dockerfile index e22a98f67..e08ba2a4a 100644 --- a/federation/Dockerfile +++ b/federation/Dockerfile @@ -93,7 +93,7 @@ CMD /bin/sh -c "turbo federation#test --env-mode=loose" FROM base as production # Copy "binary"-files from build image -COPY --chown=app:app --from=installer ${DOCKER_WORKDIR}/federation/build/src/index.js ./index.js +COPY --chown=app:app --from=installer ${DOCKER_WORKDIR}/federation/build/index.js ./index.js # We also install the native node_modules which cannot be bundled # TODO: find a elegant way to use the right versions from yarn.lock diff --git a/federation/package.json b/federation/package.json index f77c70775..27c87a97b 100644 --- a/federation/package.json +++ b/federation/package.json @@ -8,9 +8,9 @@ "license": "Apache-2.0", "private": false, "scripts": { - "build": "tsx esbuild.config.ts", - "start": "cross-env TZ=UTC node build/index.js", - "dev": "cross-env TZ=UTC tsx watch src/index.ts", + "build": "bun esbuild.config.ts", + "start": "cross-env TZ=UTC bun build/index.js", + "dev": "cross-env TZ=UTC bun --hot src/index.ts", "typecheck": "tsc --noEmit", "test": "cross-env TZ=UTC NODE_ENV=development DB_DATABASE=gradido_test_federation jest --runInBand --forceExit --detectOpenHandles", "lint": "biome check --error-on-warnings .", @@ -50,6 +50,7 @@ "@types/sodium-native": "^2.3.5", "@types/uuid": "^8.3.4", "apollo-server-testing": "2.25.2", + "bun": "^1.2.11", "esbuild": "^0.25.2", "graphql-tag": "^2.12.6", "jest": "27.2.4", diff --git a/yarn.lock b/yarn.lock index 526c35245..b26133772 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1478,6 +1478,61 @@ resolved "https://registry.yarnpkg.com/@one-ini/wasm/-/wasm-0.1.1.tgz#6013659736c9dbfccc96e8a9c2b3de317df39323" integrity sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw== +"@oven/bun-darwin-aarch64@1.2.11": + version "1.2.11" + resolved "https://registry.yarnpkg.com/@oven/bun-darwin-aarch64/-/bun-darwin-aarch64-1.2.11.tgz#c9331e918d7ed235d459a76183eb2040c5655f92" + integrity sha512-LN7gshxqEHJ1LA0B43Z56Ts3LxRjp2LrIz45FIgeKWE81PYglR9NMNou90gFuYlUtMyarSk6MV9Jdvo2kFnn8Q== + +"@oven/bun-darwin-x64-baseline@1.2.11": + version "1.2.11" + resolved "https://registry.yarnpkg.com/@oven/bun-darwin-x64-baseline/-/bun-darwin-x64-baseline-1.2.11.tgz#82793c47a3e5ef162eaed704968e486d24f85ce4" + integrity sha512-ksZJzq0Id3YsGcs++QnL1oGYjqY5XNihR0MscZ+M4YYruvVKHKim9Aql46+TI55YmKD810HVpeLolIeeTl2JUg== + +"@oven/bun-darwin-x64@1.2.11": + version "1.2.11" + resolved "https://registry.yarnpkg.com/@oven/bun-darwin-x64/-/bun-darwin-x64-1.2.11.tgz#ca476d3f1081a3f4467f9ce32a83362634668508" + integrity sha512-AmmlGdQmzORFeUZRa2Ki9UWYTt5ZGUwTp0z+H0uR4bYHy7sQhpDbNKtZcfKKuLRQ6P23DKc3Lpo+yhR0cg7prg== + +"@oven/bun-linux-aarch64-musl@1.2.11": + version "1.2.11" + resolved "https://registry.yarnpkg.com/@oven/bun-linux-aarch64-musl/-/bun-linux-aarch64-musl-1.2.11.tgz#f6301215469271c9766180deabc30de59e399a84" + integrity sha512-A/h7WxC2GbNus8fupz5EHsD8YugG19uW9GQWDf4tk0YWYuSaUOCP14JYbXbiJ48OFELWNchEc/2azajH+votbA== + +"@oven/bun-linux-aarch64@1.2.11": + version "1.2.11" + resolved "https://registry.yarnpkg.com/@oven/bun-linux-aarch64/-/bun-linux-aarch64-1.2.11.tgz#302e52e9495777fd614f8653043d256c25323e2f" + integrity sha512-jNQ5F6o9qC/KNhBnyxnjVRfiTxZB7thvZ7T+oPZSNh1IV8UWDunEGmUdOqSqoPsigpXHRjbV3DKJKN+YaPQCCA== + +"@oven/bun-linux-x64-baseline@1.2.11": + version "1.2.11" + resolved "https://registry.yarnpkg.com/@oven/bun-linux-x64-baseline/-/bun-linux-x64-baseline-1.2.11.tgz#47ef9ac80b61468051dd32c41588297ee770559e" + integrity sha512-xswex8EPmzX8BqbNXpiwgrpDkaD/FMIaxD85EIBaaksi6I8nln2kzEmlO/uVhbFAn9PPWydi3Q+FCcNnJGRazQ== + +"@oven/bun-linux-x64-musl-baseline@1.2.11": + version "1.2.11" + resolved "https://registry.yarnpkg.com/@oven/bun-linux-x64-musl-baseline/-/bun-linux-x64-musl-baseline-1.2.11.tgz#55367cc107e3fe889f2a0d77972a0c571b23168e" + integrity sha512-YYglLgFkHwNMjECCyM/kZDUZa6UW3ssVtg5k6+8QU1Rp5cPF+0SBlGGTr5ho2lFkNn/ylKmwyuqE1tB45zgVvA== + +"@oven/bun-linux-x64-musl@1.2.11": + version "1.2.11" + resolved "https://registry.yarnpkg.com/@oven/bun-linux-x64-musl/-/bun-linux-x64-musl-1.2.11.tgz#b9ce1b8a3faa797da91c5ca05467323dd1cd5be0" + integrity sha512-yF1Urgsy8xkQu8iAd03ORxuZ/DWrNPCST2r1EVIwjHuzpZ3o2odKjnE9Hnwsq+wcWdCRsakqL/muILB/9aCxeQ== + +"@oven/bun-linux-x64@1.2.11": + version "1.2.11" + resolved "https://registry.yarnpkg.com/@oven/bun-linux-x64/-/bun-linux-x64-1.2.11.tgz#92fc67493587c2b5249f8145954b36bacca55e3a" + integrity sha512-6pH556SgOR2UOgWQfEiYI3DWgkm7T+L9fmBe2dfEYrKCEu/TbXZXOJeMi943NSMIiT3q2gVwlCEdoxZwedQs4A== + +"@oven/bun-windows-x64-baseline@1.2.11": + version "1.2.11" + resolved "https://registry.yarnpkg.com/@oven/bun-windows-x64-baseline/-/bun-windows-x64-baseline-1.2.11.tgz#cb33ed8c8b5240f7dacd7e794dd411853dea64f7" + integrity sha512-uzappBblyA3GlX0PDENU1HTPZR82tzPuNd5jumTiDQ22FZmc2ZqCYTIZ/ngwHKOHDD6Rxdsux8+9EXgVS51G2w== + +"@oven/bun-windows-x64@1.2.11": + version "1.2.11" + resolved "https://registry.yarnpkg.com/@oven/bun-windows-x64/-/bun-windows-x64-1.2.11.tgz#9c91880f0047b9cd555a6fe4826d86b506c7a5cf" + integrity sha512-5mGVsGSS8JWBq8IHXGvFJ7rlET4XCUdDTKEaLLq3O1YaqyZZiPMQFnU70MfkpjPe4stRDZ+/NWBRNDMaNTYQxw== + "@parcel/watcher-android-arm64@2.5.1": version "2.5.1" resolved "https://registry.yarnpkg.com/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz#507f836d7e2042f798c7d07ad19c3546f9848ac1" @@ -3700,6 +3755,23 @@ builtins@^5.0.1: dependencies: semver "^7.0.0" +bun@^1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/bun/-/bun-1.2.11.tgz#eb423adada0b562a04b30a3224c11657f5d99bc1" + integrity sha512-9brVfsp6/TYVsE3lCl1MUxoyKhvljqyL1MNPErgwsOaS9g4Gzi2nY+W5WtRAXGzLrgz5jzsoGHHwyH/rTeRCIg== + optionalDependencies: + "@oven/bun-darwin-aarch64" "1.2.11" + "@oven/bun-darwin-x64" "1.2.11" + "@oven/bun-darwin-x64-baseline" "1.2.11" + "@oven/bun-linux-aarch64" "1.2.11" + "@oven/bun-linux-aarch64-musl" "1.2.11" + "@oven/bun-linux-x64" "1.2.11" + "@oven/bun-linux-x64-baseline" "1.2.11" + "@oven/bun-linux-x64-musl" "1.2.11" + "@oven/bun-linux-x64-musl-baseline" "1.2.11" + "@oven/bun-windows-x64" "1.2.11" + "@oven/bun-windows-x64-baseline" "1.2.11" + busboy@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/busboy/-/busboy-0.3.1.tgz#170899274c5bf38aae27d5c62b71268cd585fd1b" From 06e53256b3b4f75a12935b50eabe7d9de44ddba4 Mon Sep 17 00:00:00 2001 From: Einhornimmond Date: Sat, 3 May 2025 07:11:20 +0200 Subject: [PATCH 009/123] add build:bun (experimental) slightly faster and smaller as esbuild --- config-schema/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config-schema/package.json b/config-schema/package.json index 22c17000c..b1ad43a9c 100644 --- a/config-schema/package.json +++ b/config-schema/package.json @@ -16,6 +16,7 @@ "private": true, "scripts": { "build": "esbuild src/index.ts --outdir=build --platform=node --target=node18.20.7 --bundle --packages=external", + "build:bun": "bun build --outdir=build --platform=bun --bundle --packages=external src/index.ts", "typecheck": "tsc --noEmit", "lint": "biome check --error-on-warnings .", "lint:fix": "biome check --error-on-warnings . --write" @@ -23,7 +24,6 @@ "devDependencies": { "@biomejs/biome": "1.9.4", "@types/node": "^17.0.21", - "bun": "^1.2.11", "esbuild": "^0.25.2", "typescript": "^4.9.5" }, From d831380a1e26a9407af578d931395d3c4df1743a Mon Sep 17 00:00:00 2001 From: Einhornimmond Date: Sat, 3 May 2025 07:28:09 +0200 Subject: [PATCH 010/123] add bun:build to database --- database/bun.build.ts | 26 ++++++++++++++++++++++++++ database/package.json | 19 +++++++++++-------- 2 files changed, 37 insertions(+), 8 deletions(-) create mode 100644 database/bun.build.ts diff --git a/database/bun.build.ts b/database/bun.build.ts new file mode 100644 index 000000000..20ba3d74d --- /dev/null +++ b/database/bun.build.ts @@ -0,0 +1,26 @@ +import fs from 'node:fs' +import { latestDbVersion } from './src/config/detectLastDBVersion' + +await Bun.build({ + entrypoints: ['entity/index.ts'], + bundle: true, + target: 'bun', + packages: 'external', + outdir: './build', + plugins: [ + { + // hardcode last db version string into index.ts, before parsing + name: 'replace-latest-db-version-import', + setup(build) { + build.onLoad({ filter: /index\.ts$/ }, async (args) => { + let source = await fs.promises.readFile(args.path, 'utf8') + source = source.replace( + /import\s*\{\s*latestDbVersion\s*\}\s*from\s*['"][^'"]+['"]/, + `const latestDbVersion = "${latestDbVersion}";`, + ) + return { contents: source, loader: 'ts' } + }) + }, + }, + ], +}) diff --git a/database/package.json b/database/package.json index e6a9769b5..dec179a4d 100644 --- a/database/package.json +++ b/database/package.json @@ -15,26 +15,29 @@ "license": "Apache-2.0", "private": false, "scripts": { - "build": "bun ./esbuild.config.ts", + "build": "tsx ./esbuild.config.ts", + "build:bun": "bun ./bun.build.ts", "typecheck": "tsc --noEmit", - "up": "cross-env TZ=UTC bun src/index.ts up", - "down": "cross-env TZ=UTC bun src/index.ts down", - "reset": "cross-env TZ=UTC bun src/index.ts reset", - "clear": "cross-env TZ=UTC bun src/index.ts clear", + "up": "cross-env TZ=UTC tsx src/index.ts up", + "down": "cross-env TZ=UTC tsx src/index.ts down", + "reset": "cross-env TZ=UTC tsx src/index.ts reset", + "clear": "cross-env TZ=UTC tsx src/index.ts clear", "lint": "biome check --error-on-warnings .", "lint:fix": "biome check --error-on-warnings . --write", - "up:backend_test": "cross-env TZ=UTC DB_DATABASE=gradido_test_backend bun src/index.ts up", - "up:federation_test": "cross-env TZ=UTC DB_DATABASE=gradido_test_federation bun src/index.ts up", - "up:dht_test": "cross-env TZ=UTC DB_DATABASE=gradido_test_dht bun src/index.ts up" + "up:backend_test": "cross-env TZ=UTC DB_DATABASE=gradido_test_backend tsx src/index.ts up", + "up:federation_test": "cross-env TZ=UTC DB_DATABASE=gradido_test_federation tsx src/index.ts up", + "up:dht_test": "cross-env TZ=UTC DB_DATABASE=gradido_test_dht tsx src/index.ts up" }, "devDependencies": { "@biomejs/biome": "1.9.4", + "@types/bun": "^1.2.11", "@types/faker": "^5.5.9", "@types/geojson": "^7946.0.13", "@types/node": "^17.0.21", "bun": "^1.2.11", "esbuild": "^0.25.2", "prettier": "^2.8.7", + "tsx": "^4.19.4", "typescript": "^4.9.5" }, "dependencies": { From f1e619f3a267c507e28c04e6d4d3e11e71c2f07b Mon Sep 17 00:00:00 2001 From: Einhornimmond Date: Sat, 3 May 2025 07:47:58 +0200 Subject: [PATCH 011/123] remove bun for database, bun isn't compatible with current entity setup, joins lead to circular includes --- database/bun.build.ts | 26 -------------------------- database/package.json | 2 -- 2 files changed, 28 deletions(-) delete mode 100644 database/bun.build.ts diff --git a/database/bun.build.ts b/database/bun.build.ts deleted file mode 100644 index 20ba3d74d..000000000 --- a/database/bun.build.ts +++ /dev/null @@ -1,26 +0,0 @@ -import fs from 'node:fs' -import { latestDbVersion } from './src/config/detectLastDBVersion' - -await Bun.build({ - entrypoints: ['entity/index.ts'], - bundle: true, - target: 'bun', - packages: 'external', - outdir: './build', - plugins: [ - { - // hardcode last db version string into index.ts, before parsing - name: 'replace-latest-db-version-import', - setup(build) { - build.onLoad({ filter: /index\.ts$/ }, async (args) => { - let source = await fs.promises.readFile(args.path, 'utf8') - source = source.replace( - /import\s*\{\s*latestDbVersion\s*\}\s*from\s*['"][^'"]+['"]/, - `const latestDbVersion = "${latestDbVersion}";`, - ) - return { contents: source, loader: 'ts' } - }) - }, - }, - ], -}) diff --git a/database/package.json b/database/package.json index dec179a4d..a0190bee4 100644 --- a/database/package.json +++ b/database/package.json @@ -16,7 +16,6 @@ "private": false, "scripts": { "build": "tsx ./esbuild.config.ts", - "build:bun": "bun ./bun.build.ts", "typecheck": "tsc --noEmit", "up": "cross-env TZ=UTC tsx src/index.ts up", "down": "cross-env TZ=UTC tsx src/index.ts down", @@ -34,7 +33,6 @@ "@types/faker": "^5.5.9", "@types/geojson": "^7946.0.13", "@types/node": "^17.0.21", - "bun": "^1.2.11", "esbuild": "^0.25.2", "prettier": "^2.8.7", "tsx": "^4.19.4", From 769fb702ae1dad63df6865d6dbfcdbe74ac42e28 Mon Sep 17 00:00:00 2001 From: Einhornimmond Date: Sat, 3 May 2025 07:57:34 +0200 Subject: [PATCH 012/123] dht-node replace tsx with bun, dev with bun, but build with esbuild --- dht-node/package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/dht-node/package.json b/dht-node/package.json index 603f77ac6..143dcd0e7 100644 --- a/dht-node/package.json +++ b/dht-node/package.json @@ -39,7 +39,6 @@ "jest": "27.5.1", "prettier": "^2.8.7", "ts-jest": "27.1.4", - "tsx": "^4.19.3", "typescript": "^4.9.4" }, "engines": { From ce09a0faa762a5154083ad7955eae4117421435e Mon Sep 17 00:00:00 2001 From: Einhornimmond Date: Sat, 3 May 2025 08:00:58 +0200 Subject: [PATCH 013/123] update package lock files --- bun.lock | 68 ++++++++++++++++++++++++++++++++++++------- yarn.lock | 87 ++++++++++++++++++++++++++++++++++++++++++++++++++----- 2 files changed, 136 insertions(+), 19 deletions(-) diff --git a/bun.lock b/bun.lock index ce2c061de..069e87da9 100644 --- a/bun.lock +++ b/bun.lock @@ -140,8 +140,10 @@ "graphql-tag": "^2.12.6", "jest": "27.2.4", "klicktipp-api": "^1.0.2", + "nodemon": "^2.0.7", "prettier": "^3.5.3", "ts-jest": "27.0.5", + "tsconfig-paths": "^4.1.1", "typescript": "^4.9.5", }, }, @@ -177,12 +179,13 @@ }, "devDependencies": { "@biomejs/biome": "1.9.4", + "@types/bun": "^1.2.11", "@types/faker": "^5.5.9", "@types/geojson": "^7946.0.13", "@types/node": "^17.0.21", - "bun": "^1.2.11", "esbuild": "^0.25.2", "prettier": "^2.8.7", + "tsx": "^4.19.4", "typescript": "^4.9.5", }, }, @@ -212,7 +215,6 @@ "jest": "27.5.1", "prettier": "^2.8.7", "ts-jest": "27.1.4", - "tsx": "^4.19.3", "typescript": "^4.9.4", }, }, @@ -245,6 +247,7 @@ "uuid": "8.3.2", }, "devDependencies": { + "@anatine/esbuild-decorators": "^0.2.19", "@biomejs/biome": "1.9.4", "@types/express": "4.17.21", "@types/jest": "27.0.2", @@ -259,6 +262,7 @@ "jest": "27.2.4", "prettier": "^3.5.3", "ts-jest": "27.0.5", + "tsx": "^4.19.4", "typescript": "^4.9.5", }, }, @@ -825,6 +829,8 @@ "@types/body-parser": ["@types/body-parser@1.19.5", "", { "dependencies": { "@types/connect": "*", "@types/node": "*" } }, "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg=="], + "@types/bun": ["@types/bun@1.2.11", "", { "dependencies": { "bun-types": "1.2.11" } }, "sha512-ZLbbI91EmmGwlWTRWuV6J19IUiUC5YQ3TCEuSHI3usIP75kuoA8/0PVF+LTrbEnVc8JIhpElWOxv1ocI1fJBbw=="], + "@types/connect": ["@types/connect@3.4.38", "", { "dependencies": { "@types/node": "*" } }, "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug=="], "@types/content-disposition": ["@types/content-disposition@0.5.8", "", {}, "sha512-QVSSvno3dE0MgO76pJhmv4Qyi/j0Yk9pBp0Y7TJ2Tlj+KCgJWY6qX7nnxCOLkZ3VYRSIk1WTxCvwUSdx6CCLdg=="], @@ -1263,6 +1269,8 @@ "bun": ["bun@1.2.11", "", { "optionalDependencies": { "@oven/bun-darwin-aarch64": "1.2.11", "@oven/bun-darwin-x64": "1.2.11", "@oven/bun-darwin-x64-baseline": "1.2.11", "@oven/bun-linux-aarch64": "1.2.11", "@oven/bun-linux-aarch64-musl": "1.2.11", "@oven/bun-linux-x64": "1.2.11", "@oven/bun-linux-x64-baseline": "1.2.11", "@oven/bun-linux-x64-musl": "1.2.11", "@oven/bun-linux-x64-musl-baseline": "1.2.11", "@oven/bun-windows-x64": "1.2.11", "@oven/bun-windows-x64-baseline": "1.2.11" }, "os": [ "linux", "win32", "darwin", ], "cpu": [ "x64", "arm64", ], "bin": { "bun": "bin/bun.exe", "bunx": "bin/bun.exe" } }, "sha512-9brVfsp6/TYVsE3lCl1MUxoyKhvljqyL1MNPErgwsOaS9g4Gzi2nY+W5WtRAXGzLrgz5jzsoGHHwyH/rTeRCIg=="], + "bun-types": ["bun-types@1.2.11", "", { "dependencies": { "@types/node": "*" } }, "sha512-dbkp5Lo8HDrXkLrONm6bk+yiiYQSntvFUzQp0v3pzTAsXk6FtgVMjdQ+lzFNVAmQFUkPQZ3WMZqH5tTo+Dp/IA=="], + "busboy": ["busboy@0.3.1", "", { "dependencies": { "dicer": "0.3.0" } }, "sha512-y7tTxhGKXcyBxRKAni+awqx8uqaJKrSFSNFSeRG5CsWNdmy2BIK+6VGWEW7TZnIO/533mtMEA4rOevQV815YJw=="], "bytes": ["bytes@3.1.2", "", {}, "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="], @@ -1869,6 +1877,8 @@ "ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], + "ignore-by-default": ["ignore-by-default@1.0.1", "", {}, "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA=="], + "immutable": ["immutable@5.1.1", "", {}, "sha512-3jatXi9ObIsPGr3N5hGw/vWWcTkq6hUYhpQz4k0wLC+owqWi/LiugIw9x0EdNZ2yGedKN/HzePiBvaJRXa0Ujg=="], "import-cwd": ["import-cwd@3.0.0", "", { "dependencies": { "import-from": "^3.0.0" } }, "sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg=="], @@ -2279,6 +2289,8 @@ "nodemailer": ["nodemailer@6.10.1", "", {}, "sha512-Z+iLaBGVaSjbIzQ4pX6XV41HrooLsQ10ZWPUehGmuantvzWoDVBnmsdUcOIDM1t+yPor5pDhVlDESgOMEGxhHA=="], + "nodemon": ["nodemon@2.0.22", "", { "dependencies": { "chokidar": "^3.5.2", "debug": "^3.2.7", "ignore-by-default": "^1.0.1", "minimatch": "^3.1.2", "pstree.remy": "^1.1.8", "semver": "^5.7.1", "simple-update-notifier": "^1.0.7", "supports-color": "^5.5.0", "touch": "^3.1.0", "undefsafe": "^2.0.5" }, "bin": { "nodemon": "bin/nodemon.js" } }, "sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ=="], + "noise-curve-ed": ["noise-curve-ed@2.1.0", "", { "dependencies": { "b4a": "^1.1.0", "nanoassert": "^2.0.0", "sodium-universal": "^5.0.0" } }, "sha512-zAzJx+VwZM3w6EA1hTmDhJfvAnCeBQn/1FAeZ0LtGxCcCtlAK/uJXQVF/eDVUOaAZ286lHlx77WJ+qj9SmsRRg=="], "noise-handshake": ["noise-handshake@3.1.0", "", { "dependencies": { "b4a": "^1.1.0", "nanoassert": "^2.0.0", "sodium-universal": "^4.0.0" } }, "sha512-0S1qkUvMbTvZCfgr/vSkVT84YyvI4Q0OLwSc5BFxVmjaePrxAwVeXeJDY3A7N/7+qj95gZ15LaNoP9ZnBXH5Lw=="], @@ -2449,6 +2461,8 @@ "psl": ["psl@1.15.0", "", { "dependencies": { "punycode": "^2.3.1" } }, "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w=="], + "pstree.remy": ["pstree.remy@1.1.8", "", {}, "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w=="], + "pug": ["pug@3.0.3", "", { "dependencies": { "pug-code-gen": "^3.0.3", "pug-filters": "^4.0.0", "pug-lexer": "^5.0.1", "pug-linker": "^4.0.0", "pug-load": "^3.0.0", "pug-parser": "^6.0.0", "pug-runtime": "^3.0.1", "pug-strip-comments": "^2.0.0" } }, "sha512-uBi6kmc9f3SZ3PXxqcHiUZLmIXgfgWooKWXcwSGwQd2Zi5Rb0bT14+8CJjJgI8AB+nndLaNgHGrcc6bPIB665g=="], "pug-attrs": ["pug-attrs@3.0.0", "", { "dependencies": { "constantinople": "^4.0.1", "js-stringify": "^1.0.2", "pug-runtime": "^3.0.0" } }, "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA=="], @@ -2631,6 +2645,8 @@ "signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], + "simple-update-notifier": ["simple-update-notifier@1.1.0", "", { "dependencies": { "semver": "~7.0.0" } }, "sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg=="], + "sisteransi": ["sisteransi@1.0.5", "", {}, "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg=="], "slash": ["slash@3.0.0", "", {}, "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q=="], @@ -2721,7 +2737,7 @@ "superjson": ["superjson@2.2.2", "", { "dependencies": { "copy-anything": "^3.0.2" } }, "sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q=="], - "supports-color": ["supports-color@8.1.1", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="], + "supports-color": ["supports-color@5.5.0", "", { "dependencies": { "has-flag": "^3.0.0" } }, "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow=="], "supports-hyperlinks": ["supports-hyperlinks@3.2.0", "", { "dependencies": { "has-flag": "^4.0.0", "supports-color": "^7.0.0" } }, "sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig=="], @@ -2791,6 +2807,8 @@ "toposort": ["toposort@2.0.2", "", {}, "sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg=="], + "touch": ["touch@3.1.1", "", { "bin": { "nodetouch": "bin/nodetouch.js" } }, "sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA=="], + "tough-cookie": ["tough-cookie@5.1.2", "", { "dependencies": { "tldts": "^6.1.32" } }, "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A=="], "tr46": ["tr46@5.1.1", "", { "dependencies": { "punycode": "^2.3.1" } }, "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw=="], @@ -2809,11 +2827,11 @@ "ts-node": ["ts-node@10.9.2", "", { "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", "@tsconfig/node12": "^1.0.7", "@tsconfig/node14": "^1.0.0", "@tsconfig/node16": "^1.0.2", "acorn": "^8.4.1", "acorn-walk": "^8.1.1", "arg": "^4.1.0", "create-require": "^1.1.0", "diff": "^4.0.1", "make-error": "^1.1.1", "v8-compile-cache-lib": "^3.0.1", "yn": "3.1.1" }, "peerDependencies": { "@swc/core": ">=1.2.50", "@swc/wasm": ">=1.2.50", "@types/node": "*", "typescript": ">=2.7" }, "optionalPeers": ["@swc/core", "@swc/wasm"], "bin": { "ts-node": "dist/bin.js", "ts-script": "dist/bin-script-deprecated.js", "ts-node-cwd": "dist/bin-cwd.js", "ts-node-esm": "dist/bin-esm.js", "ts-node-script": "dist/bin-script.js", "ts-node-transpile-only": "dist/bin-transpile.js" } }, "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ=="], - "tsconfig-paths": ["tsconfig-paths@3.15.0", "", { "dependencies": { "@types/json5": "^0.0.29", "json5": "^1.0.2", "minimist": "^1.2.6", "strip-bom": "^3.0.0" } }, "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg=="], + "tsconfig-paths": ["tsconfig-paths@4.2.0", "", { "dependencies": { "json5": "^2.2.2", "minimist": "^1.2.6", "strip-bom": "^3.0.0" } }, "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg=="], "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], - "tsx": ["tsx@4.19.3", "", { "dependencies": { "esbuild": "~0.25.0", "get-tsconfig": "^4.7.5" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "bin": { "tsx": "dist/cli.mjs" } }, "sha512-4H8vUNGNjQ4V2EOoGw005+c+dGuPSnhpPBPHBtsZdGZBk/iJb4kguGlPWaZTZ3q5nMtFOEsY0nRDlh9PJyd6SQ=="], + "tsx": ["tsx@4.19.4", "", { "dependencies": { "esbuild": "~0.25.0", "get-tsconfig": "^4.7.5" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "bin": { "tsx": "dist/cli.mjs" } }, "sha512-gK5GVzDkJK1SI1zwHf32Mqxf2tSJkNx+eYcNly5+nHvWqXUJYUkWBQtKauoESz3ymezAI++ZwT855x5p5eop+Q=="], "tua-body-scroll-lock": ["tua-body-scroll-lock@1.5.3", "", {}, "sha512-44W12iqek41kZuTdpEUt3JTUsMx0IxfTajXWfQyMLgzsPaMYUPZLcJkwa4P0x24h5DQ3lYvDuYvphBo4+L0t4w=="], @@ -2871,6 +2889,8 @@ "unctx": ["unctx@2.4.1", "", { "dependencies": { "acorn": "^8.14.0", "estree-walker": "^3.0.3", "magic-string": "^0.30.17", "unplugin": "^2.1.0" } }, "sha512-AbaYw0Nm4mK4qjhns67C+kgxR2YWiwlDBPzxrN8h8C6VtAdCgditAY5Dezu3IJy4XVqAnbrXt9oQJvsn3fyozg=="], + "undefsafe": ["undefsafe@2.0.5", "", {}, "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA=="], + "underscore": ["underscore@1.13.7", "", {}, "sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g=="], "underscore.deep": ["underscore.deep@0.5.3", "", { "peerDependencies": { "underscore": "1.x" } }, "sha512-4OuSOlFNkiVFVc3khkeG112Pdu1gbitMj7t9B9ENb61uFmN70Jq7Iluhi3oflcSgexkKfDdJ5XAJET2gEq6ikA=="], @@ -3263,6 +3283,8 @@ "brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], + "bun-types/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "c12/confbox": ["confbox@0.2.2", "", {}, "sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ=="], "c12/dotenv": ["dotenv@16.5.0", "", {}, "sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg=="], @@ -3287,6 +3309,8 @@ "citty/consola": ["consola@3.4.2", "", {}, "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA=="], + "concurrently/supports-color": ["supports-color@8.1.1", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="], + "css-select/domhandler": ["domhandler@4.3.1", "", { "dependencies": { "domelementtype": "^2.2.0" } }, "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ=="], "css-select/domutils": ["domutils@2.8.0", "", { "dependencies": { "dom-serializer": "^1.0.1", "domelementtype": "^2.2.0", "domhandler": "^4.2.0" } }, "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A=="], @@ -3325,6 +3349,8 @@ "eslint-plugin-import/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + "eslint-plugin-import/tsconfig-paths": ["tsconfig-paths@3.15.0", "", { "dependencies": { "@types/json5": "^0.0.29", "json5": "^1.0.2", "minimist": "^1.2.6", "strip-bom": "^3.0.0" } }, "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg=="], + "eslint-plugin-node/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "eslint-plugin-vue/eslint-utils": ["eslint-utils@3.0.0", "", { "dependencies": { "eslint-visitor-keys": "^2.0.0" }, "peerDependencies": { "eslint": ">=5" } }, "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA=="], @@ -3411,6 +3437,8 @@ "jest-worker/jest-util": ["jest-util@29.7.0", "", { "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", "graceful-fs": "^4.2.9", "picomatch": "^2.2.3" } }, "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA=="], + "jest-worker/supports-color": ["supports-color@8.1.1", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="], + "js-beautify/glob": ["glob@10.4.5", "", { "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", "minimatch": "^9.0.4", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" } }, "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg=="], "jsdom/parse5": ["parse5@7.3.0", "", { "dependencies": { "entities": "^6.0.0" } }, "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw=="], @@ -3439,6 +3467,12 @@ "node-fetch/whatwg-url": ["whatwg-url@5.0.0", "", { "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw=="], + "nodemon/chokidar": ["chokidar@3.6.0", "", { "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw=="], + + "nodemon/debug": ["debug@3.2.7", "", { "dependencies": { "ms": "^2.1.1" } }, "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="], + + "nodemon/semver": ["semver@5.7.2", "", { "bin": { "semver": "bin/semver" } }, "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g=="], + "noise-curve-ed/sodium-universal": ["sodium-universal@5.0.1", "", { "dependencies": { "sodium-native": "^5.0.1" }, "peerDependencies": { "sodium-javascript": "~0.8.0" }, "optionalPeers": ["sodium-javascript"] }, "sha512-rv+aH+tnKB5H0MAc2UadHShLMslpJsc4wjdnHRtiSIEYpOetCgu8MS4ExQRia+GL/MK3uuCyZPeEsi+J3h+Q+Q=="], "nypm/consola": ["consola@3.4.2", "", {}, "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA=="], @@ -3479,6 +3513,8 @@ "send/encodeurl": ["encodeurl@1.0.2", "", {}, "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w=="], + "simple-update-notifier/semver": ["semver@7.0.0", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A=="], + "sodium-secretstream/sodium-universal": ["sodium-universal@5.0.1", "", { "dependencies": { "sodium-native": "^5.0.1" }, "peerDependencies": { "sodium-javascript": "~0.8.0" }, "optionalPeers": ["sodium-javascript"] }, "sha512-rv+aH+tnKB5H0MAc2UadHShLMslpJsc4wjdnHRtiSIEYpOetCgu8MS4ExQRia+GL/MK3uuCyZPeEsi+J3h+Q+Q=="], "sodium-universal/sodium-native": ["sodium-native@4.3.3", "", { "dependencies": { "require-addon": "^1.1.0" } }, "sha512-OnxSlN3uyY8D0EsLHpmm2HOFmKddQVvEMmsakCrXUzSd8kjjbzL413t4ZNF3n0UxSwNgwTyUvkmZHTfuCeiYSw=="], @@ -3511,6 +3547,8 @@ "subscriptions-transport-ws/ws": ["ws@7.5.10", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": "^5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ=="], + "supports-color/has-flag": ["has-flag@3.0.0", "", {}, "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw=="], + "supports-hyperlinks/supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], "table/ajv": ["ajv@8.17.1", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g=="], @@ -3529,8 +3567,6 @@ "tinyglobby/picomatch": ["picomatch@4.0.2", "", {}, "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg=="], - "tsconfig-paths/json5": ["json5@1.0.2", "", { "dependencies": { "minimist": "^1.2.0" }, "bin": { "json5": "lib/cli.js" } }, "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA=="], - "type-graphql/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], "typeorm/dotenv": ["dotenv@16.5.0", "", {}, "sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg=="], @@ -3629,6 +3665,8 @@ "@istanbuljs/load-nyc-config/js-yaml/argparse": ["argparse@1.0.10", "", { "dependencies": { "sprintf-js": "~1.0.2" } }, "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg=="], + "@jest/reporters/jest-worker/supports-color": ["supports-color@8.1.1", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="], + "@jest/transform/write-file-atomic/signal-exit": ["signal-exit@3.0.7", "", {}, "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="], "@nuxt/kit/pkg-types/confbox": ["confbox@0.2.2", "", {}, "sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ=="], @@ -3667,6 +3705,8 @@ "editorconfig/minimatch/brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="], + "eslint-plugin-import/tsconfig-paths/json5": ["json5@1.0.2", "", { "dependencies": { "minimist": "^1.2.0" }, "bin": { "json5": "lib/cli.js" } }, "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA=="], + "eslint-plugin-vue/eslint-utils/eslint-visitor-keys": ["eslint-visitor-keys@2.1.0", "", {}, "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw=="], "express/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], @@ -3717,6 +3757,10 @@ "jest-environment-jsdom/jsdom/xml-name-validator": ["xml-name-validator@3.0.0", "", {}, "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw=="], + "jest-haste-map/jest-worker/supports-color": ["supports-color@8.1.1", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="], + + "jest-runner/jest-worker/supports-color": ["supports-color@8.1.1", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="], + "jest-worker/jest-util/@jest/types": ["@jest/types@29.6.3", "", { "dependencies": { "@jest/schemas": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", "@types/yargs": "^17.0.8", "chalk": "^4.0.0" } }, "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw=="], "js-beautify/glob/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], @@ -3731,6 +3775,10 @@ "node-fetch/whatwg-url/webidl-conversions": ["webidl-conversions@3.0.1", "", {}, "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="], + "nodemon/chokidar/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], + + "nodemon/chokidar/readdirp": ["readdirp@3.6.0", "", { "dependencies": { "picomatch": "^2.2.1" } }, "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA=="], + "noise-curve-ed/sodium-universal/sodium-native": ["sodium-native@5.0.1", "", { "dependencies": { "require-addon": "^1.1.0", "which-runtime": "^1.2.1" } }, "sha512-Q305aUXc0OzK7VVRvWkeEQJQIHs6slhFwWpyqLB5iJqhpyt2lYIVu96Y6PQ7TABIlWXVF3YiWDU3xS2Snkus+g=="], "nypm/pkg-types/confbox": ["confbox@0.2.2", "", {}, "sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ=="], @@ -3765,6 +3813,8 @@ "terser-webpack-plugin/jest-worker/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "terser-webpack-plugin/jest-worker/supports-color": ["supports-color@8.1.1", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="], + "test-exclude/minimatch/brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="], "typeorm/glob/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], @@ -3829,8 +3879,6 @@ "vue-apollo/chalk/escape-string-regexp": ["escape-string-regexp@1.0.5", "", {}, "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg=="], - "vue-apollo/chalk/supports-color": ["supports-color@5.5.0", "", { "dependencies": { "has-flag": "^3.0.0" } }, "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow=="], - "web-resource-inliner/htmlparser2/domhandler": ["domhandler@3.3.0", "", { "dependencies": { "domelementtype": "^2.0.1" } }, "sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA=="], "web-resource-inliner/htmlparser2/domutils": ["domutils@2.8.0", "", { "dependencies": { "dom-serializer": "^1.0.1", "domelementtype": "^2.2.0", "domhandler": "^4.2.0" } }, "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A=="], @@ -3901,8 +3949,6 @@ "vue-apollo/chalk/ansi-styles/color-convert": ["color-convert@1.9.3", "", { "dependencies": { "color-name": "1.1.3" } }, "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg=="], - "vue-apollo/chalk/supports-color/has-flag": ["has-flag@3.0.0", "", {}, "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw=="], - "web-resource-inliner/htmlparser2/domutils/dom-serializer": ["dom-serializer@1.4.1", "", { "dependencies": { "domelementtype": "^2.0.1", "domhandler": "^4.2.0", "entities": "^2.0.0" } }, "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag=="], "web-resource-inliner/htmlparser2/domutils/domhandler": ["domhandler@4.3.1", "", { "dependencies": { "domelementtype": "^2.2.0" } }, "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ=="], diff --git a/yarn.lock b/yarn.lock index b26133772..54f9a55ee 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1930,6 +1930,13 @@ "@types/connect" "*" "@types/node" "*" +"@types/bun@^1.2.11": + version "1.2.11" + resolved "https://registry.yarnpkg.com/@types/bun/-/bun-1.2.11.tgz#44e9e941fa246a96b5cf5bdce7e733976e5cfb7a" + integrity sha512-ZLbbI91EmmGwlWTRWuV6J19IUiUC5YQ3TCEuSHI3usIP75kuoA8/0PVF+LTrbEnVc8JIhpElWOxv1ocI1fJBbw== + dependencies: + bun-types "1.2.11" + "@types/connect@*": version "3.4.38" resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.38.tgz#5ba7f3bc4fbbdeaff8dded952e5ff2cc53f8d858" @@ -3755,6 +3762,13 @@ builtins@^5.0.1: dependencies: semver "^7.0.0" +bun-types@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/bun-types/-/bun-types-1.2.11.tgz#98b480e0271b1ea6f0161db2712a359e5b3828fe" + integrity sha512-dbkp5Lo8HDrXkLrONm6bk+yiiYQSntvFUzQp0v3pzTAsXk6FtgVMjdQ+lzFNVAmQFUkPQZ3WMZqH5tTo+Dp/IA== + dependencies: + "@types/node" "*" + bun@^1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/bun/-/bun-1.2.11.tgz#eb423adada0b562a04b30a3224c11657f5d99bc1" @@ -3946,7 +3960,7 @@ cheerio@1.0.0-rc.10: parse5-htmlparser2-tree-adapter "^6.0.1" tslib "^2.2.0" -chokidar@^3.6.0: +chokidar@^3.5.2, chokidar@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== @@ -6440,6 +6454,11 @@ ieee754@^1.2.1: resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== +ignore-by-default@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" + integrity sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA== + ignore@^5.0.5, ignore@^5.1.1, ignore@^5.2.0, ignore@^5.2.4: version "5.3.2" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" @@ -7491,7 +7510,7 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== -json5@2.x, json5@^2.1.3, json5@^2.2.3: +json5@2.x, json5@^2.1.3, json5@^2.2.2, json5@^2.2.3: version "2.2.3" resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== @@ -8214,6 +8233,22 @@ nodemailer@^6.6.5, nodemailer@^6.7.7, nodemailer@^6.9.13: resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-6.10.1.tgz#cbc434c54238f83a51c07eabd04e2b3e832da623" integrity sha512-Z+iLaBGVaSjbIzQ4pX6XV41HrooLsQ10ZWPUehGmuantvzWoDVBnmsdUcOIDM1t+yPor5pDhVlDESgOMEGxhHA== +nodemon@^2.0.7: + version "2.0.22" + resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-2.0.22.tgz#182c45c3a78da486f673d6c1702e00728daf5258" + integrity sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ== + dependencies: + chokidar "^3.5.2" + debug "^3.2.7" + ignore-by-default "^1.0.1" + minimatch "^3.1.2" + pstree.remy "^1.1.8" + semver "^5.7.1" + simple-update-notifier "^1.0.7" + supports-color "^5.5.0" + touch "^3.1.0" + undefsafe "^2.0.5" + noise-curve-ed@^2.0.0, noise-curve-ed@^2.0.1: version "2.1.0" resolved "https://registry.yarnpkg.com/noise-curve-ed/-/noise-curve-ed-2.1.0.tgz#38ab0748439baa0f21d49c78d7b8be3d5bb94f42" @@ -8908,6 +8943,11 @@ psl@^1.1.33: dependencies: punycode "^2.3.1" +pstree.remy@^1.1.8: + version "1.1.8" + resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a" + integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== + pug-attrs@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pug-attrs/-/pug-attrs-3.0.0.tgz#b10451e0348165e31fad1cc23ebddd9dc7347c41" @@ -9485,7 +9525,7 @@ semver@7.x, semver@^7.0.0, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^ resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.1.tgz#abd5098d82b18c6c81f6074ff2647fd3e7220c9f" integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA== -semver@^5.5.0: +semver@^5.5.0, semver@^5.7.1: version "5.7.2" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== @@ -9495,6 +9535,11 @@ semver@^6.1.0, semver@^6.3.0, semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== +semver@~7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" + integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== + send@0.19.0: version "0.19.0" resolved "https://registry.yarnpkg.com/send/-/send-0.19.0.tgz#bbc5a388c8ea6c048967049dbeac0e4a3f09d7f8" @@ -9676,6 +9721,13 @@ signal-exit@^4.0.1: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== +simple-update-notifier@^1.0.7: + version "1.1.0" + resolved "https://registry.yarnpkg.com/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz#67694c121de354af592b347cdba798463ed49c82" + integrity sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg== + dependencies: + semver "~7.0.0" + sisteransi@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" @@ -10099,7 +10151,7 @@ superjson@^2.2.2: dependencies: copy-anything "^3.0.2" -supports-color@^5.3.0: +supports-color@^5.3.0, supports-color@^5.5.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== @@ -10361,6 +10413,11 @@ toposort@^2.0.2: resolved "https://registry.yarnpkg.com/toposort/-/toposort-2.0.2.tgz#ae21768175d1559d48bef35420b2f4962f09c330" integrity sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg== +touch@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.1.tgz#097a23d7b161476435e5c1344a95c0f75b4a5694" + integrity sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA== + tough-cookie@^4.0.0: version "4.1.4" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.4.tgz#945f1461b45b5a8c76821c33ea49c3ac192c1b36" @@ -10477,6 +10534,15 @@ tsconfig-paths@^3.15.0: minimist "^1.2.6" strip-bom "^3.0.0" +tsconfig-paths@^4.1.1: + version "4.2.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz#ef78e19039133446d244beac0fd6a1632e2d107c" + integrity sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg== + dependencies: + json5 "^2.2.2" + minimist "^1.2.6" + strip-bom "^3.0.0" + tslib@^1.10.0, tslib@^1.9.3: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" @@ -10487,10 +10553,10 @@ tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.2.0, tslib@^2.3.0, tslib@^2.5 resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== -tsx@^4.19.3: - version "4.19.3" - resolved "https://registry.yarnpkg.com/tsx/-/tsx-4.19.3.tgz#2bdbcb87089374d933596f8645615142ed727666" - integrity sha512-4H8vUNGNjQ4V2EOoGw005+c+dGuPSnhpPBPHBtsZdGZBk/iJb4kguGlPWaZTZ3q5nMtFOEsY0nRDlh9PJyd6SQ== +tsx@^4.19.4: + version "4.19.4" + resolved "https://registry.yarnpkg.com/tsx/-/tsx-4.19.4.tgz#647b4141f4fdd9d773a9b564876773d2846901f4" + integrity sha512-gK5GVzDkJK1SI1zwHf32Mqxf2tSJkNx+eYcNly5+nHvWqXUJYUkWBQtKauoESz3ymezAI++ZwT855x5p5eop+Q== dependencies: esbuild "~0.25.0" get-tsconfig "^4.7.5" @@ -10733,6 +10799,11 @@ unctx@^2.4.1: magic-string "^0.30.17" unplugin "^2.1.0" +undefsafe@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.5.tgz#38733b9327bdcd226db889fb723a6efd162e6e2c" + integrity sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA== + underscore.deep@~0.5.1: version "0.5.3" resolved "https://registry.yarnpkg.com/underscore.deep/-/underscore.deep-0.5.3.tgz#210969d58025339cecabd2a2ad8c3e8925e5c095" From 4376281353f9952aab5943bd58444b74edfe4d4d Mon Sep 17 00:00:00 2001 From: Einhornimmond Date: Sat, 3 May 2025 08:01:34 +0200 Subject: [PATCH 014/123] add bun in package.json --- config-schema/package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/config-schema/package.json b/config-schema/package.json index b1ad43a9c..6eb4d3086 100644 --- a/config-schema/package.json +++ b/config-schema/package.json @@ -24,6 +24,7 @@ "devDependencies": { "@biomejs/biome": "1.9.4", "@types/node": "^17.0.21", + "bun": "^1.2.11", "esbuild": "^0.25.2", "typescript": "^4.9.5" }, From e65bb3ce6bc0c02f0ff899bb89aff591d903fbb1 Mon Sep 17 00:00:00 2001 From: Einhornimmond Date: Sat, 3 May 2025 08:03:14 +0200 Subject: [PATCH 015/123] make bun default and only build system for config --- config-schema/package.json | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/config-schema/package.json b/config-schema/package.json index 6eb4d3086..0fa00d80d 100644 --- a/config-schema/package.json +++ b/config-schema/package.json @@ -15,8 +15,7 @@ "license": "Apache-2.0", "private": true, "scripts": { - "build": "esbuild src/index.ts --outdir=build --platform=node --target=node18.20.7 --bundle --packages=external", - "build:bun": "bun build --outdir=build --platform=bun --bundle --packages=external src/index.ts", + "build": "bun build --outdir=build --platform=bun --bundle --packages=external src/index.ts", "typecheck": "tsc --noEmit", "lint": "biome check --error-on-warnings .", "lint:fix": "biome check --error-on-warnings . --write" @@ -25,7 +24,6 @@ "@biomejs/biome": "1.9.4", "@types/node": "^17.0.21", "bun": "^1.2.11", - "esbuild": "^0.25.2", "typescript": "^4.9.5" }, "dependencies": { From cd15411fe6afb8c23fa5cbb78e81a259191d2471 Mon Sep 17 00:00:00 2001 From: Einhornimmond Date: Sat, 3 May 2025 18:45:14 +0200 Subject: [PATCH 016/123] mid-work --- backend/package.json | 4 +++- bun.lock | 11 ----------- config-schema/package.json | 7 ++++--- database/package.json | 6 ++---- dht-node/package.json | 3 +-- federation/esbuild.config.ts | 13 ------------- federation/package.json | 8 +++----- federation/tsconfig.json | 2 +- yarn.lock | 14 -------------- 9 files changed, 14 insertions(+), 54 deletions(-) delete mode 100644 federation/esbuild.config.ts diff --git a/backend/package.json b/backend/package.json index d8258fd7d..8314e3e1e 100644 --- a/backend/package.json +++ b/backend/package.json @@ -10,7 +10,7 @@ "scripts": { "build": "bun esbuild.config.ts", "start": "cross-env TZ=UTC NODE_ENV=production bun build/index.js", - "dev": "cross-env TZ=UTC bun --hot src/index.ts", + "dev": "cross-env TZ=UTC nodemon -w src --ext ts,pug,json,css --exec ts-node -r tsconfig-paths/register src/index.ts", "typecheck": "tsc --noEmit", "lint": "biome check --error-on-warnings .", "lint:fix": "biome check --error-on-warnings . --write", @@ -78,7 +78,9 @@ "graphql-tag": "^2.12.6", "jest": "27.2.4", "klicktipp-api": "^1.0.2", + "nodemon": "^2.0.7", "prettier": "^3.5.3", + "tsconfig-paths": "^4.1.1", "ts-jest": "27.0.5", "typescript": "^4.9.5" }, diff --git a/bun.lock b/bun.lock index 069e87da9..4d5cd0b88 100644 --- a/bun.lock +++ b/bun.lock @@ -157,7 +157,6 @@ "@biomejs/biome": "1.9.4", "@types/node": "^17.0.21", "bun": "^1.2.11", - "esbuild": "^0.25.2", "typescript": "^4.9.5", }, }, @@ -179,7 +178,6 @@ }, "devDependencies": { "@biomejs/biome": "1.9.4", - "@types/bun": "^1.2.11", "@types/faker": "^5.5.9", "@types/geojson": "^7946.0.13", "@types/node": "^17.0.21", @@ -247,7 +245,6 @@ "uuid": "8.3.2", }, "devDependencies": { - "@anatine/esbuild-decorators": "^0.2.19", "@biomejs/biome": "1.9.4", "@types/express": "4.17.21", "@types/jest": "27.0.2", @@ -256,8 +253,6 @@ "@types/sodium-native": "^2.3.5", "@types/uuid": "^8.3.4", "apollo-server-testing": "2.25.2", - "bun": "^1.2.11", - "esbuild": "^0.25.2", "graphql-tag": "^2.12.6", "jest": "27.2.4", "prettier": "^3.5.3", @@ -829,8 +824,6 @@ "@types/body-parser": ["@types/body-parser@1.19.5", "", { "dependencies": { "@types/connect": "*", "@types/node": "*" } }, "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg=="], - "@types/bun": ["@types/bun@1.2.11", "", { "dependencies": { "bun-types": "1.2.11" } }, "sha512-ZLbbI91EmmGwlWTRWuV6J19IUiUC5YQ3TCEuSHI3usIP75kuoA8/0PVF+LTrbEnVc8JIhpElWOxv1ocI1fJBbw=="], - "@types/connect": ["@types/connect@3.4.38", "", { "dependencies": { "@types/node": "*" } }, "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug=="], "@types/content-disposition": ["@types/content-disposition@0.5.8", "", {}, "sha512-QVSSvno3dE0MgO76pJhmv4Qyi/j0Yk9pBp0Y7TJ2Tlj+KCgJWY6qX7nnxCOLkZ3VYRSIk1WTxCvwUSdx6CCLdg=="], @@ -1269,8 +1262,6 @@ "bun": ["bun@1.2.11", "", { "optionalDependencies": { "@oven/bun-darwin-aarch64": "1.2.11", "@oven/bun-darwin-x64": "1.2.11", "@oven/bun-darwin-x64-baseline": "1.2.11", "@oven/bun-linux-aarch64": "1.2.11", "@oven/bun-linux-aarch64-musl": "1.2.11", "@oven/bun-linux-x64": "1.2.11", "@oven/bun-linux-x64-baseline": "1.2.11", "@oven/bun-linux-x64-musl": "1.2.11", "@oven/bun-linux-x64-musl-baseline": "1.2.11", "@oven/bun-windows-x64": "1.2.11", "@oven/bun-windows-x64-baseline": "1.2.11" }, "os": [ "linux", "win32", "darwin", ], "cpu": [ "x64", "arm64", ], "bin": { "bun": "bin/bun.exe", "bunx": "bin/bun.exe" } }, "sha512-9brVfsp6/TYVsE3lCl1MUxoyKhvljqyL1MNPErgwsOaS9g4Gzi2nY+W5WtRAXGzLrgz5jzsoGHHwyH/rTeRCIg=="], - "bun-types": ["bun-types@1.2.11", "", { "dependencies": { "@types/node": "*" } }, "sha512-dbkp5Lo8HDrXkLrONm6bk+yiiYQSntvFUzQp0v3pzTAsXk6FtgVMjdQ+lzFNVAmQFUkPQZ3WMZqH5tTo+Dp/IA=="], - "busboy": ["busboy@0.3.1", "", { "dependencies": { "dicer": "0.3.0" } }, "sha512-y7tTxhGKXcyBxRKAni+awqx8uqaJKrSFSNFSeRG5CsWNdmy2BIK+6VGWEW7TZnIO/533mtMEA4rOevQV815YJw=="], "bytes": ["bytes@3.1.2", "", {}, "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="], @@ -3283,8 +3274,6 @@ "brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], - "bun-types/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], - "c12/confbox": ["confbox@0.2.2", "", {}, "sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ=="], "c12/dotenv": ["dotenv@16.5.0", "", {}, "sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg=="], diff --git a/config-schema/package.json b/config-schema/package.json index 0fa00d80d..f3ceed498 100644 --- a/config-schema/package.json +++ b/config-schema/package.json @@ -4,6 +4,7 @@ "description": "Gradido Config for validate config", "main": "./build/index.js", "types": "./src/index.ts", + "type": "module", "exports": { ".": { "import": "./build/index.js", @@ -15,7 +16,7 @@ "license": "Apache-2.0", "private": true, "scripts": { - "build": "bun build --outdir=build --platform=bun --bundle --packages=external src/index.ts", + "build": "esbuild src/index.ts --outdir=build --platform=node --target=node18.20.7 --bundle --packages=external", "typecheck": "tsc --noEmit", "lint": "biome check --error-on-warnings .", "lint:fix": "biome check --error-on-warnings . --write" @@ -23,11 +24,11 @@ "devDependencies": { "@biomejs/biome": "1.9.4", "@types/node": "^17.0.21", - "bun": "^1.2.11", "typescript": "^4.9.5" }, "dependencies": { - "joi": "^17.13.3" + "joi": "^17.13.3", + "esbuild": "^0.25.2" }, "engines": { "node": ">=18" diff --git a/database/package.json b/database/package.json index a0190bee4..101e02edb 100644 --- a/database/package.json +++ b/database/package.json @@ -29,24 +29,22 @@ }, "devDependencies": { "@biomejs/biome": "1.9.4", - "@types/bun": "^1.2.11", "@types/faker": "^5.5.9", "@types/geojson": "^7946.0.13", "@types/node": "^17.0.21", - "esbuild": "^0.25.2", - "prettier": "^2.8.7", - "tsx": "^4.19.4", "typescript": "^4.9.5" }, "dependencies": { "@types/uuid": "^8.3.4", "cross-env": "^7.0.3", "decimal.js-light": "^2.5.1", + "esbuild": "^0.25.2", "dotenv": "^10.0.0", "geojson": "^0.5.0", "mysql2": "^2.3.0", "reflect-metadata": "^0.1.13", "ts-mysql-migrate": "^1.0.2", + "tsx": "^4.19.4", "typeorm": "^0.3.16", "uuid": "^8.3.2", "wkx": "^0.5.0" diff --git a/dht-node/package.json b/dht-node/package.json index 143dcd0e7..caf7f2b17 100644 --- a/dht-node/package.json +++ b/dht-node/package.json @@ -22,6 +22,7 @@ "cross-env": "^7.0.3", "database": "*", "dotenv": "10.0.0", + "esbuild": "^0.25.2", "joi": "^17.13.3", "log4js": "^6.7.1", "typeorm": "^0.3.16", @@ -34,8 +35,6 @@ "@types/joi": "^17.2.3", "@types/node": "^17.0.21", "@types/uuid": "^8.3.4", - "bun": "^1.2.11", - "esbuild": "^0.25.2", "jest": "27.5.1", "prettier": "^2.8.7", "ts-jest": "27.1.4", diff --git a/federation/esbuild.config.ts b/federation/esbuild.config.ts deleted file mode 100644 index 38ca5b58d..000000000 --- a/federation/esbuild.config.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { build } from 'esbuild' - -build({ - entryPoints: ['src/index.ts'], - outdir: 'build', - platform: 'node', - target: 'node18.20.7', - bundle: true, - keepNames: true, - // legalComments: 'inline', - external: ['sodium-native'], - minify: true, -}) diff --git a/federation/package.json b/federation/package.json index 27c87a97b..ed56cc1ea 100644 --- a/federation/package.json +++ b/federation/package.json @@ -6,10 +6,10 @@ "repository": "https://github.com/gradido/gradido/federation", "author": "Gradido Academy - https://www.gradido.net", "license": "Apache-2.0", + "private": false, "scripts": { - "build": "bun esbuild.config.ts", - "start": "cross-env TZ=UTC bun build/index.js", + "start": "cross-env TZ=UTC bun src/index.ts", "dev": "cross-env TZ=UTC bun --hot src/index.ts", "typecheck": "tsc --noEmit", "test": "cross-env TZ=UTC NODE_ENV=development DB_DATABASE=gradido_test_federation jest --runInBand --forceExit --detectOpenHandles", @@ -41,7 +41,7 @@ "typeorm": "^0.3.16", "uuid": "8.3.2" }, - "devDependencies": { + "devDependencies": { "@biomejs/biome": "1.9.4", "@types/express": "4.17.21", "@types/jest": "27.0.2", @@ -50,8 +50,6 @@ "@types/sodium-native": "^2.3.5", "@types/uuid": "^8.3.4", "apollo-server-testing": "2.25.2", - "bun": "^1.2.11", - "esbuild": "^0.25.2", "graphql-tag": "^2.12.6", "jest": "27.2.4", "prettier": "^3.5.3", diff --git a/federation/tsconfig.json b/federation/tsconfig.json index 8bdf9906a..f72262d8e 100644 --- a/federation/tsconfig.json +++ b/federation/tsconfig.json @@ -83,5 +83,5 @@ /* Advanced Options */ "skipLibCheck": true, /* Skip type checking of declaration files. */ "forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */ - } + }, } diff --git a/yarn.lock b/yarn.lock index 54f9a55ee..c092ac4e9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1930,13 +1930,6 @@ "@types/connect" "*" "@types/node" "*" -"@types/bun@^1.2.11": - version "1.2.11" - resolved "https://registry.yarnpkg.com/@types/bun/-/bun-1.2.11.tgz#44e9e941fa246a96b5cf5bdce7e733976e5cfb7a" - integrity sha512-ZLbbI91EmmGwlWTRWuV6J19IUiUC5YQ3TCEuSHI3usIP75kuoA8/0PVF+LTrbEnVc8JIhpElWOxv1ocI1fJBbw== - dependencies: - bun-types "1.2.11" - "@types/connect@*": version "3.4.38" resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.38.tgz#5ba7f3bc4fbbdeaff8dded952e5ff2cc53f8d858" @@ -3762,13 +3755,6 @@ builtins@^5.0.1: dependencies: semver "^7.0.0" -bun-types@1.2.11: - version "1.2.11" - resolved "https://registry.yarnpkg.com/bun-types/-/bun-types-1.2.11.tgz#98b480e0271b1ea6f0161db2712a359e5b3828fe" - integrity sha512-dbkp5Lo8HDrXkLrONm6bk+yiiYQSntvFUzQp0v3pzTAsXk6FtgVMjdQ+lzFNVAmQFUkPQZ3WMZqH5tTo+Dp/IA== - dependencies: - "@types/node" "*" - bun@^1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/bun/-/bun-1.2.11.tgz#eb423adada0b562a04b30a3224c11657f5d99bc1" From 5459daf98d42a0876df2d7c4a2d0fc5f7d3cfe79 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Sun, 4 May 2025 06:50:03 +0200 Subject: [PATCH 017/123] put back build:bun --- config-schema/package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/config-schema/package.json b/config-schema/package.json index f3ceed498..534c91b9a 100644 --- a/config-schema/package.json +++ b/config-schema/package.json @@ -17,6 +17,7 @@ "private": true, "scripts": { "build": "esbuild src/index.ts --outdir=build --platform=node --target=node18.20.7 --bundle --packages=external", + "build:bun": "bun build src/index.ts --outdir=build --target=bun --packages=external", "typecheck": "tsc --noEmit", "lint": "biome check --error-on-warnings .", "lint:fix": "biome check --error-on-warnings . --write" From 184e7acbc4851aa1d6028847e73ed6a50f535ad6 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Sun, 4 May 2025 07:43:00 +0200 Subject: [PATCH 018/123] make bun compatible and also compatible with higher graphql version --- federation/src/graphql/api/1_0/schema.ts | 14 ++++++++++++++ federation/src/graphql/api/1_1/schema.ts | 14 ++++++++++++++ federation/src/graphql/api/schema.ts | 17 ++++++++++++++--- federation/src/graphql/schema.ts | 2 +- 4 files changed, 43 insertions(+), 4 deletions(-) create mode 100644 federation/src/graphql/api/1_0/schema.ts create mode 100644 federation/src/graphql/api/1_1/schema.ts diff --git a/federation/src/graphql/api/1_0/schema.ts b/federation/src/graphql/api/1_0/schema.ts new file mode 100644 index 000000000..9d106fefc --- /dev/null +++ b/federation/src/graphql/api/1_0/schema.ts @@ -0,0 +1,14 @@ +import { NonEmptyArray } from 'type-graphql' +import { AuthenticationResolver } from './resolver/AuthenticationResolver' +import { PublicCommunityInfoResolver } from './resolver/PublicCommunityInfoResolver' +import { PublicKeyResolver } from './resolver/PublicKeyResolver' +import { SendCoinsResolver } from './resolver/SendCoinsResolver' + +export const getApiResolvers = (): NonEmptyArray => { + return [ + AuthenticationResolver, + PublicCommunityInfoResolver, + PublicKeyResolver, + SendCoinsResolver, + ] +} diff --git a/federation/src/graphql/api/1_1/schema.ts b/federation/src/graphql/api/1_1/schema.ts new file mode 100644 index 000000000..dc16ad475 --- /dev/null +++ b/federation/src/graphql/api/1_1/schema.ts @@ -0,0 +1,14 @@ +import { NonEmptyArray } from 'type-graphql' +import { AuthenticationResolver } from "../1_0/resolver/AuthenticationResolver" +import { PublicCommunityInfoResolver } from "../1_0/resolver/PublicCommunityInfoResolver" +import { SendCoinsResolver } from "../1_0/resolver/SendCoinsResolver" +import { PublicKeyResolver } from "./resolver/PublicKeyResolver" + +export const getApiResolvers = (): NonEmptyArray => { + return [ + AuthenticationResolver, + PublicCommunityInfoResolver, + PublicKeyResolver, + SendCoinsResolver, + ] +} \ No newline at end of file diff --git a/federation/src/graphql/api/schema.ts b/federation/src/graphql/api/schema.ts index 84e756af3..661e203d2 100644 --- a/federation/src/graphql/api/schema.ts +++ b/federation/src/graphql/api/schema.ts @@ -1,9 +1,20 @@ -import path from 'node:path' import { federationLogger as logger } from '@/server/logger' +import { NonEmptyArray } from 'type-graphql' // config import { CONFIG } from '../../config' +import { getApiResolvers as getApiResolvers_1_0 } from './1_0/schema' +import { getApiResolvers as getApiResolvers_1_1 } from './1_1/schema' -export const getApiResolvers = (): string => { +export const getApiResolvers = (): NonEmptyArray => { logger.info(`getApiResolvers...${CONFIG.FEDERATION_API}`) - return path.join(__dirname, `./${CONFIG.FEDERATION_API}/resolver/*Resolver.{ts,js}`) + + if (CONFIG.FEDERATION_API === '1_0') { + return getApiResolvers_1_0() + } + + if (CONFIG.FEDERATION_API === '1_1') { + return getApiResolvers_1_1() + } + + throw new Error(`Unknown API version: ${CONFIG.FEDERATION_API}`) } diff --git a/federation/src/graphql/schema.ts b/federation/src/graphql/schema.ts index 64a35dd76..a5d498048 100644 --- a/federation/src/graphql/schema.ts +++ b/federation/src/graphql/schema.ts @@ -8,7 +8,7 @@ import { DecimalScalar } from './scalar/Decimal' export const schema = async (): Promise => { return await buildSchema({ - resolvers: [getApiResolvers()], + resolvers: getApiResolvers(), // authChecker: isAuthorized, scalarsMap: [{ type: Decimal, scalar: DecimalScalar }], /* From 2daf8866bc9660ae1622ea7513e996ee6fda4946 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Sun, 4 May 2025 10:24:33 +0200 Subject: [PATCH 019/123] add readme, full config --- backend/.gitignore | 1 + backend/Dockerfile | 6 +- backend/README.md | 4 - backend/esbuild.config.ts | 2 +- backend/package.json | 30 +- backend/src/graphql/schema.ts | 31 +- backend/src/server/localization.ts | 3 +- backend/tsconfig.json | 4 + bun.lock | 290 ++++++++-- config-schema/README.md | 4 + config-schema/package.json | 1 - database/README.md | 46 +- dht-node/Dockerfile | 2 +- dht-node/README.md | 9 + dht-node/package.json | 23 +- federation/Dockerfile | 2 +- federation/README.md | 13 + federation/esbuild.config.ts | 15 + federation/package.json | 9 +- yarn.lock | 878 +++++++++++++++++++++++++---- 20 files changed, 1174 insertions(+), 199 deletions(-) create mode 100644 config-schema/README.md create mode 100644 dht-node/README.md create mode 100644 federation/README.md create mode 100644 federation/esbuild.config.ts diff --git a/backend/.gitignore b/backend/.gitignore index 6eadcc884..5435dd5ff 100644 --- a/backend/.gitignore +++ b/backend/.gitignore @@ -2,6 +2,7 @@ /.env /.env.bak /build/ +/locales/ package-json.lock coverage # emacs diff --git a/backend/Dockerfile b/backend/Dockerfile index 0344322da..4dee9953c 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -96,12 +96,14 @@ FROM base as production # Copy "binary"-files from build image COPY --chown=app:app --from=installer ${DOCKER_WORKDIR}/backend/build/index.js ./index.js -RUN yarn add sodium-native@4.0.0 \ +RUN yarn add sodium-native@4.0.0 email-templates@10.0.1 \ && rm -rf /tmp/* ~/.cache node_modules/.cache \ && yarn cache clean # Copy log4js-config.json to provide log configuration COPY --chown=app:app --from=installer ${DOCKER_WORKDIR}/backend/log4js-config.json ./log4js-config.json +# Copy locales +COPY --chown=app:app --from=installer ${DOCKER_WORKDIR}/backend/locales ./locales # Run command -CMD ["node", "index.js"] \ No newline at end of file +CMD ["TZ=UTC", "node", "index.js"] \ No newline at end of file diff --git a/backend/README.md b/backend/README.md index b27ab16d9..6305e8a96 100644 --- a/backend/README.md +++ b/backend/README.md @@ -2,10 +2,6 @@ ## Project setup -```bash -yarn install -``` - ## Seed DB ```bash diff --git a/backend/esbuild.config.ts b/backend/esbuild.config.ts index a475d3b52..73d0a0c12 100644 --- a/backend/esbuild.config.ts +++ b/backend/esbuild.config.ts @@ -9,7 +9,7 @@ build({ bundle: true, keepNames: true, // legalComments: 'inline', - external: ['reflect-metadata', 'sodium-native', 'email-templates'], + external: ['sodium-native', 'email-templates'], plugins: [esbuildDecorators()], minify: true, }) diff --git a/backend/package.json b/backend/package.json index 8314e3e1e..7fd3a4962 100644 --- a/backend/package.json +++ b/backend/package.json @@ -8,20 +8,23 @@ "license": "Apache-2.0", "private": false, "scripts": { - "build": "bun esbuild.config.ts", - "start": "cross-env TZ=UTC NODE_ENV=production bun build/index.js", - "dev": "cross-env TZ=UTC nodemon -w src --ext ts,pug,json,css --exec ts-node -r tsconfig-paths/register src/index.ts", + "build": "ts-node ./esbuild.config.ts && mkdirp build/templates/ && ncp src/emails/templates build/templates && mkdirp locales/ && ncp src/locales locales", + "clean": "tsc --build --clean", + "start:node": "cross-env TZ=UTC NODE_ENV=production TS_NODE_BASEURL=./build node -r tsconfig-paths/register build/src/index.js", + "start": "cross-env TZ=UTC NODE_ENV=production node build/index.js", + "dev": "cross-env TZ=UTC nodemon -w src --ext ts,pug,json,css -r tsconfig-paths/register src/index.ts", "typecheck": "tsc --noEmit", "lint": "biome check --error-on-warnings .", "lint:fix": "biome check --error-on-warnings . --write", "test": "cross-env TZ=UTC NODE_ENV=development DB_DATABASE=gradido_test_backend jest --runInBand --forceExit --detectOpenHandles", - "seed": "cross-env TZ=UTC NODE_ENV=development bun src/seeds/index.ts", - "klicktipp": "cross-env TZ=UTC NODE_ENV=development bun src/util/executeKlicktipp.ts", - "gmsusers": "cross-env TZ=UTC NODE_ENV=development bun src/apis/gms/ExportUsers.ts", - "humhubUserExport": "cross-env TZ=UTC NODE_ENV=development bun src/apis/humhub/ExportUsers.ts", + "seed": "cross-env TZ=UTC NODE_ENV=development ts-node -r tsconfig-paths/register src/seeds/index.ts", + "klicktipp": "cross-env TZ=UTC NODE_ENV=development ts-node -r tsconfig-paths/register src/util/executeKlicktipp.ts", + "gmsusers": "cross-env TZ=UTC NODE_ENV=development ts-node -r tsconfig-paths/register src/apis/gms/ExportUsers.ts", + "humhubUserExport": "cross-env TZ=UTC NODE_ENV=development ts-node -r tsconfig-paths/register src/apis/humhub/ExportUsers.ts", "locales": "scripts/sort.sh" }, "dependencies": { + "@anatine/esbuild-decorators": "^0.2.19", "apollo-server-express": "^2.25.2", "await-semaphore": "^0.1.3", "axios": "^0.21.1", @@ -33,6 +36,7 @@ "decimal.js-light": "^2.5.1", "dotenv": "^10.0.0", "email-templates": "^10.0.1", + "esbuild": "^0.25.2", "express": "^4.17.21", "express-slow-down": "^2.0.1", "graphql": "^15.10.1", @@ -45,13 +49,16 @@ "jose": "^4.14.4", "lodash.clonedeep": "^4.5.0", "log4js": "^6.7.1", - "mysql2": "^2.3.0", + "mkdirp": "^3.0.1", + "ncp": "^2.0.0", "nodemailer": "^6.6.5", "openai": "^4.87.3", "pug": "^3.0.2", "random-bigint": "^0.0.1", "reflect-metadata": "^0.1.13", "sodium-native": "^3.4.1", + "ts-node": "^10.9.2", + "tsconfig-paths": "^4.1.1", "type-graphql": "^1.1.1", "typed-rest-client": "^1.8.11", "typeorm": "^0.3.16", @@ -60,8 +67,10 @@ "xregexp": "^5.1.1" }, "devDependencies": { - "@anatine/esbuild-decorators": "^0.2.19", "@biomejs/biome": "1.9.4", + "@swc/cli": "^0.7.3", + "@swc/core": "^1.11.24", + "@swc/helpers": "^0.5.17", "@types/email-templates": "^10.0.4", "@types/express": "^4.17.21", "@types/faker": "^5.5.9", @@ -73,14 +82,13 @@ "@types/sodium-native": "^2.3.5", "@types/uuid": "^8.3.4", "apollo-server-testing": "^2.25.2", - "esbuild": "^0.25.2", "faker": "^5.5.3", "graphql-tag": "^2.12.6", "jest": "27.2.4", "klicktipp-api": "^1.0.2", "nodemon": "^2.0.7", "prettier": "^3.5.3", - "tsconfig-paths": "^4.1.1", + "regenerator-runtime": "^0.14.1", "ts-jest": "27.0.5", "typescript": "^4.9.5" }, diff --git a/backend/src/graphql/schema.ts b/backend/src/graphql/schema.ts index bcb8081a6..6652f0d39 100644 --- a/backend/src/graphql/schema.ts +++ b/backend/src/graphql/schema.ts @@ -1,5 +1,3 @@ -import path from 'path' - import { Decimal } from 'decimal.js-light' import { GraphQLSchema } from 'graphql' import { buildSchema } from 'type-graphql' @@ -7,12 +5,39 @@ import { buildSchema } from 'type-graphql' import { Location } from '@model/Location' import { isAuthorized } from './directive/isAuthorized' +import { AiChatResolver } from './resolver/AiChatResolver' +import { BalanceResolver } from './resolver/BalanceResolver' +import { CommunityResolver } from './resolver/CommunityResolver' +import { ContributionLinkResolver } from './resolver/ContributionLinkResolver' +import { ContributionMessageResolver } from './resolver/ContributionMessageResolver' +import { ContributionResolver } from './resolver/ContributionResolver' +import { GdtResolver } from './resolver/GdtResolver' +import { KlicktippResolver } from './resolver/KlicktippResolver' +import { ProjectBrandingResolver } from './resolver/ProjectBrandingResolver' +import { StatisticsResolver } from './resolver/StatisticsResolver' +import { TransactionLinkResolver } from './resolver/TransactionLinkResolver' +import { TransactionResolver } from './resolver/TransactionResolver' +import { UserResolver } from './resolver/UserResolver' import { DecimalScalar } from './scalar/Decimal' import { LocationScalar } from './scalar/Location' export const schema = async (): Promise => { return buildSchema({ - resolvers: [path.join(__dirname, 'resolver', `!(*.test).{js,ts}`)], + resolvers: [ + AiChatResolver, + BalanceResolver, + CommunityResolver, + ContributionLinkResolver, + ContributionMessageResolver, + ContributionResolver, + GdtResolver, + KlicktippResolver, + ProjectBrandingResolver, + StatisticsResolver, + TransactionLinkResolver, + TransactionResolver, + UserResolver, + ], authChecker: isAuthorized, scalarsMap: [ { type: Decimal, scalar: DecimalScalar }, diff --git a/backend/src/server/localization.ts b/backend/src/server/localization.ts index 59ba4cfce..8e533576a 100644 --- a/backend/src/server/localization.ts +++ b/backend/src/server/localization.ts @@ -1,5 +1,4 @@ -import path from 'path' - +import path from 'node:path' import i18n from 'i18n' import { backendLogger } from './logger' diff --git a/backend/tsconfig.json b/backend/tsconfig.json index 1ae65b49b..79bdd2cf3 100644 --- a/backend/tsconfig.json +++ b/backend/tsconfig.json @@ -80,9 +80,13 @@ /* Experimental Options */ "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ + "resolveJsonModule": true, /* Advanced Options */ "skipLibCheck": true, /* Skip type checking of declaration files. */ "forceConsistentCasingInFileNames": true, /* Disallow inconsistently-cased references to the same file. */ + }, + "ts-node": { + "swc": true } } diff --git a/bun.lock b/bun.lock index 4d5cd0b88..89c5f8789 100644 --- a/bun.lock +++ b/bun.lock @@ -84,6 +84,7 @@ "name": "backend", "version": "2.5.1", "dependencies": { + "@anatine/esbuild-decorators": "^0.2.19", "apollo-server-express": "^2.25.2", "await-semaphore": "^0.1.3", "axios": "^0.21.1", @@ -95,6 +96,7 @@ "decimal.js-light": "^2.5.1", "dotenv": "^10.0.0", "email-templates": "^10.0.1", + "esbuild": "^0.25.2", "express": "^4.17.21", "express-slow-down": "^2.0.1", "graphql": "^15.10.1", @@ -107,13 +109,16 @@ "jose": "^4.14.4", "lodash.clonedeep": "^4.5.0", "log4js": "^6.7.1", - "mysql2": "^2.3.0", + "mkdirp": "^3.0.1", + "ncp": "^2.0.0", "nodemailer": "^6.6.5", "openai": "^4.87.3", "pug": "^3.0.2", "random-bigint": "^0.0.1", "reflect-metadata": "^0.1.13", "sodium-native": "^3.4.1", + "ts-node": "^10.9.2", + "tsconfig-paths": "^4.1.1", "type-graphql": "^1.1.1", "typed-rest-client": "^1.8.11", "typeorm": "^0.3.16", @@ -122,8 +127,10 @@ "xregexp": "^5.1.1", }, "devDependencies": { - "@anatine/esbuild-decorators": "^0.2.19", "@biomejs/biome": "1.9.4", + "@swc/cli": "^0.7.3", + "@swc/core": "^1.11.24", + "@swc/helpers": "^0.5.17", "@types/email-templates": "^10.0.4", "@types/express": "^4.17.21", "@types/faker": "^5.5.9", @@ -135,15 +142,14 @@ "@types/sodium-native": "^2.3.5", "@types/uuid": "^8.3.4", "apollo-server-testing": "^2.25.2", - "esbuild": "^0.25.2", "faker": "^5.5.3", "graphql-tag": "^2.12.6", "jest": "27.2.4", "klicktipp-api": "^1.0.2", "nodemon": "^2.0.7", "prettier": "^3.5.3", + "regenerator-runtime": "^0.14.1", "ts-jest": "27.0.5", - "tsconfig-paths": "^4.1.1", "typescript": "^4.9.5", }, }, @@ -151,12 +157,12 @@ "name": "config-schema", "version": "1.0.0", "dependencies": { + "esbuild": "^0.25.2", "joi": "^17.13.3", }, "devDependencies": { "@biomejs/biome": "1.9.4", "@types/node": "^17.0.21", - "bun": "^1.2.11", "typescript": "^4.9.5", }, }, @@ -168,10 +174,12 @@ "cross-env": "^7.0.3", "decimal.js-light": "^2.5.1", "dotenv": "^10.0.0", + "esbuild": "^0.25.2", "geojson": "^0.5.0", "mysql2": "^2.3.0", "reflect-metadata": "^0.1.13", "ts-mysql-migrate": "^1.0.2", + "tsx": "^4.19.4", "typeorm": "^0.3.16", "uuid": "^8.3.2", "wkx": "^0.5.0", @@ -181,9 +189,6 @@ "@types/faker": "^5.5.9", "@types/geojson": "^7946.0.13", "@types/node": "^17.0.21", - "esbuild": "^0.25.2", - "prettier": "^2.8.7", - "tsx": "^4.19.4", "typescript": "^4.9.5", }, }, @@ -191,35 +196,36 @@ "name": "dht-node", "version": "2.5.1", "dependencies": { - "@hyperswarm/dht": "^6.4.4", + "@hyperswarm/dht": "^6.5.1", "config-schema": "*", "cross-env": "^7.0.3", "database": "*", "dotenv": "10.0.0", + "esbuild": "^0.25.3", "joi": "^17.13.3", - "log4js": "^6.7.1", - "typeorm": "^0.3.16", + "log4js": "^6.9.1", + "tsx": "^4.19.4", + "typeorm": "^0.3.22", "uuid": "^8.3.2", }, "devDependencies": { "@biomejs/biome": "1.9.4", - "@types/dotenv": "^8.2.0", + "@types/dotenv": "^8.2.3", "@types/jest": "27.5.1", "@types/joi": "^17.2.3", - "@types/node": "^17.0.21", + "@types/node": "^17.0.45", "@types/uuid": "^8.3.4", - "bun": "^1.2.11", - "esbuild": "^0.25.2", "jest": "27.5.1", - "prettier": "^2.8.7", + "prettier": "^2.8.8", "ts-jest": "27.1.4", - "typescript": "^4.9.4", + "typescript": "^4.9.5", }, }, "federation": { "name": "federation", "version": "2.5.1", "dependencies": { + "@anatine/esbuild-decorators": "^0.2.19", "apollo-server-express": "^2.25.2", "await-semaphore": "0.1.3", "class-validator": "^0.13.2", @@ -240,6 +246,7 @@ "log4js": "^6.7.1", "reflect-metadata": "^0.1.13", "sodium-native": "^3.3.0", + "tsx": "^4.19.4", "type-graphql": "^1.1.1", "typeorm": "^0.3.16", "uuid": "8.3.2", @@ -257,7 +264,6 @@ "jest": "27.2.4", "prettier": "^3.5.3", "ts-jest": "27.0.5", - "tsx": "^4.19.4", "typescript": "^4.9.5", }, }, @@ -656,6 +662,40 @@ "@morev/vue-transitions": ["@morev/vue-transitions@3.0.5", "", { "dependencies": { "@morev/utils": "^3.11.1", "@nuxt/kit": "^3.13.2" }, "peerDependencies": { "vue": "^2.6.14 || >=3" }, "bin": { "vue-transitions-version-fix": "bin/fix.js", "vue-transitions-version-switch": "bin/switch.js" } }, "sha512-V+2HGHBb5MSOa0GGZ7V1wb3AExr4XcNLl98txdGNTsnhbqy4JRaFMaIsdo4zdaD9ShRZgBSZyZbujabxS50DSw=="], + "@napi-rs/nice": ["@napi-rs/nice@1.0.1", "", { "optionalDependencies": { "@napi-rs/nice-android-arm-eabi": "1.0.1", "@napi-rs/nice-android-arm64": "1.0.1", "@napi-rs/nice-darwin-arm64": "1.0.1", "@napi-rs/nice-darwin-x64": "1.0.1", "@napi-rs/nice-freebsd-x64": "1.0.1", "@napi-rs/nice-linux-arm-gnueabihf": "1.0.1", "@napi-rs/nice-linux-arm64-gnu": "1.0.1", "@napi-rs/nice-linux-arm64-musl": "1.0.1", "@napi-rs/nice-linux-ppc64-gnu": "1.0.1", "@napi-rs/nice-linux-riscv64-gnu": "1.0.1", "@napi-rs/nice-linux-s390x-gnu": "1.0.1", "@napi-rs/nice-linux-x64-gnu": "1.0.1", "@napi-rs/nice-linux-x64-musl": "1.0.1", "@napi-rs/nice-win32-arm64-msvc": "1.0.1", "@napi-rs/nice-win32-ia32-msvc": "1.0.1", "@napi-rs/nice-win32-x64-msvc": "1.0.1" } }, "sha512-zM0mVWSXE0a0h9aKACLwKmD6nHcRiKrPpCfvaKqG1CqDEyjEawId0ocXxVzPMCAm6kkWr2P025msfxXEnt8UGQ=="], + + "@napi-rs/nice-android-arm-eabi": ["@napi-rs/nice-android-arm-eabi@1.0.1", "", { "os": "android", "cpu": "arm" }, "sha512-5qpvOu5IGwDo7MEKVqqyAxF90I6aLj4n07OzpARdgDRfz8UbBztTByBp0RC59r3J1Ij8uzYi6jI7r5Lws7nn6w=="], + + "@napi-rs/nice-android-arm64": ["@napi-rs/nice-android-arm64@1.0.1", "", { "os": "android", "cpu": "arm64" }, "sha512-GqvXL0P8fZ+mQqG1g0o4AO9hJjQaeYG84FRfZaYjyJtZZZcMjXW5TwkL8Y8UApheJgyE13TQ4YNUssQaTgTyvA=="], + + "@napi-rs/nice-darwin-arm64": ["@napi-rs/nice-darwin-arm64@1.0.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-91k3HEqUl2fsrz/sKkuEkscj6EAj3/eZNCLqzD2AA0TtVbkQi8nqxZCZDMkfklULmxLkMxuUdKe7RvG/T6s2AA=="], + + "@napi-rs/nice-darwin-x64": ["@napi-rs/nice-darwin-x64@1.0.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-jXnMleYSIR/+TAN/p5u+NkCA7yidgswx5ftqzXdD5wgy/hNR92oerTXHc0jrlBisbd7DpzoaGY4cFD7Sm5GlgQ=="], + + "@napi-rs/nice-freebsd-x64": ["@napi-rs/nice-freebsd-x64@1.0.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-j+iJ/ezONXRQsVIB/FJfwjeQXX7A2tf3gEXs4WUGFrJjpe/z2KB7sOv6zpkm08PofF36C9S7wTNuzHZ/Iiccfw=="], + + "@napi-rs/nice-linux-arm-gnueabihf": ["@napi-rs/nice-linux-arm-gnueabihf@1.0.1", "", { "os": "linux", "cpu": "arm" }, "sha512-G8RgJ8FYXYkkSGQwywAUh84m946UTn6l03/vmEXBYNJxQJcD+I3B3k5jmjFG/OPiU8DfvxutOP8bi+F89MCV7Q=="], + + "@napi-rs/nice-linux-arm64-gnu": ["@napi-rs/nice-linux-arm64-gnu@1.0.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-IMDak59/W5JSab1oZvmNbrms3mHqcreaCeClUjwlwDr0m3BoR09ZiN8cKFBzuSlXgRdZ4PNqCYNeGQv7YMTjuA=="], + + "@napi-rs/nice-linux-arm64-musl": ["@napi-rs/nice-linux-arm64-musl@1.0.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-wG8fa2VKuWM4CfjOjjRX9YLIbysSVV1S3Kgm2Fnc67ap/soHBeYZa6AGMeR5BJAylYRjnoVOzV19Cmkco3QEPw=="], + + "@napi-rs/nice-linux-ppc64-gnu": ["@napi-rs/nice-linux-ppc64-gnu@1.0.1", "", { "os": "linux", "cpu": "ppc64" }, "sha512-lxQ9WrBf0IlNTCA9oS2jg/iAjQyTI6JHzABV664LLrLA/SIdD+I1i3Mjf7TsnoUbgopBcCuDztVLfJ0q9ubf6Q=="], + + "@napi-rs/nice-linux-riscv64-gnu": ["@napi-rs/nice-linux-riscv64-gnu@1.0.1", "", { "os": "linux", "cpu": "none" }, "sha512-3xs69dO8WSWBb13KBVex+yvxmUeEsdWexxibqskzoKaWx9AIqkMbWmE2npkazJoopPKX2ULKd8Fm9veEn0g4Ig=="], + + "@napi-rs/nice-linux-s390x-gnu": ["@napi-rs/nice-linux-s390x-gnu@1.0.1", "", { "os": "linux", "cpu": "s390x" }, "sha512-lMFI3i9rlW7hgToyAzTaEybQYGbQHDrpRkg+1gJWEpH0PLAQoZ8jiY0IzakLfNWnVda1eTYYlxxFYzW8Rqczkg=="], + + "@napi-rs/nice-linux-x64-gnu": ["@napi-rs/nice-linux-x64-gnu@1.0.1", "", { "os": "linux", "cpu": "x64" }, "sha512-XQAJs7DRN2GpLN6Fb+ZdGFeYZDdGl2Fn3TmFlqEL5JorgWKrQGRUrpGKbgZ25UeZPILuTKJ+OowG2avN8mThBA=="], + + "@napi-rs/nice-linux-x64-musl": ["@napi-rs/nice-linux-x64-musl@1.0.1", "", { "os": "linux", "cpu": "x64" }, "sha512-/rodHpRSgiI9o1faq9SZOp/o2QkKQg7T+DK0R5AkbnI/YxvAIEHf2cngjYzLMQSQgUhxym+LFr+UGZx4vK4QdQ=="], + + "@napi-rs/nice-win32-arm64-msvc": ["@napi-rs/nice-win32-arm64-msvc@1.0.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-rEcz9vZymaCB3OqEXoHnp9YViLct8ugF+6uO5McifTedjq4QMQs3DHz35xBEGhH3gJWEsXMUbzazkz5KNM5YUg=="], + + "@napi-rs/nice-win32-ia32-msvc": ["@napi-rs/nice-win32-ia32-msvc@1.0.1", "", { "os": "win32", "cpu": "ia32" }, "sha512-t7eBAyPUrWL8su3gDxw9xxxqNwZzAqKo0Szv3IjVQd1GpXXVkb6vBBQUuxfIYaXMzZLwlxRQ7uzM2vdUE9ULGw=="], + + "@napi-rs/nice-win32-x64-msvc": ["@napi-rs/nice-win32-x64-msvc@1.0.1", "", { "os": "win32", "cpu": "x64" }, "sha512-JlF+uDcatt3St2ntBG8H02F1mM45i5SF9W+bIKiReVE6wiy3o16oBP/yxt+RZ+N6LbCImJXJ6bXNO2kn9AXicg=="], + "@nodelib/fs.scandir": ["@nodelib/fs.scandir@2.1.5", "", { "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g=="], "@nodelib/fs.stat": ["@nodelib/fs.stat@2.0.5", "", {}, "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="], @@ -666,28 +706,6 @@ "@one-ini/wasm": ["@one-ini/wasm@0.1.1", "", {}, "sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw=="], - "@oven/bun-darwin-aarch64": ["@oven/bun-darwin-aarch64@1.2.11", "", { "os": "darwin", "cpu": "arm64" }, "sha512-LN7gshxqEHJ1LA0B43Z56Ts3LxRjp2LrIz45FIgeKWE81PYglR9NMNou90gFuYlUtMyarSk6MV9Jdvo2kFnn8Q=="], - - "@oven/bun-darwin-x64": ["@oven/bun-darwin-x64@1.2.11", "", { "os": "darwin", "cpu": "x64" }, "sha512-AmmlGdQmzORFeUZRa2Ki9UWYTt5ZGUwTp0z+H0uR4bYHy7sQhpDbNKtZcfKKuLRQ6P23DKc3Lpo+yhR0cg7prg=="], - - "@oven/bun-darwin-x64-baseline": ["@oven/bun-darwin-x64-baseline@1.2.11", "", { "os": "darwin", "cpu": "x64" }, "sha512-ksZJzq0Id3YsGcs++QnL1oGYjqY5XNihR0MscZ+M4YYruvVKHKim9Aql46+TI55YmKD810HVpeLolIeeTl2JUg=="], - - "@oven/bun-linux-aarch64": ["@oven/bun-linux-aarch64@1.2.11", "", { "os": "linux", "cpu": "arm64" }, "sha512-jNQ5F6o9qC/KNhBnyxnjVRfiTxZB7thvZ7T+oPZSNh1IV8UWDunEGmUdOqSqoPsigpXHRjbV3DKJKN+YaPQCCA=="], - - "@oven/bun-linux-aarch64-musl": ["@oven/bun-linux-aarch64-musl@1.2.11", "", { "os": "linux", "cpu": "none" }, "sha512-A/h7WxC2GbNus8fupz5EHsD8YugG19uW9GQWDf4tk0YWYuSaUOCP14JYbXbiJ48OFELWNchEc/2azajH+votbA=="], - - "@oven/bun-linux-x64": ["@oven/bun-linux-x64@1.2.11", "", { "os": "linux", "cpu": "x64" }, "sha512-6pH556SgOR2UOgWQfEiYI3DWgkm7T+L9fmBe2dfEYrKCEu/TbXZXOJeMi943NSMIiT3q2gVwlCEdoxZwedQs4A=="], - - "@oven/bun-linux-x64-baseline": ["@oven/bun-linux-x64-baseline@1.2.11", "", { "os": "linux", "cpu": "x64" }, "sha512-xswex8EPmzX8BqbNXpiwgrpDkaD/FMIaxD85EIBaaksi6I8nln2kzEmlO/uVhbFAn9PPWydi3Q+FCcNnJGRazQ=="], - - "@oven/bun-linux-x64-musl": ["@oven/bun-linux-x64-musl@1.2.11", "", { "os": "linux", "cpu": "x64" }, "sha512-yF1Urgsy8xkQu8iAd03ORxuZ/DWrNPCST2r1EVIwjHuzpZ3o2odKjnE9Hnwsq+wcWdCRsakqL/muILB/9aCxeQ=="], - - "@oven/bun-linux-x64-musl-baseline": ["@oven/bun-linux-x64-musl-baseline@1.2.11", "", { "os": "linux", "cpu": "x64" }, "sha512-YYglLgFkHwNMjECCyM/kZDUZa6UW3ssVtg5k6+8QU1Rp5cPF+0SBlGGTr5ho2lFkNn/ylKmwyuqE1tB45zgVvA=="], - - "@oven/bun-windows-x64": ["@oven/bun-windows-x64@1.2.11", "", { "os": "win32", "cpu": "x64" }, "sha512-5mGVsGSS8JWBq8IHXGvFJ7rlET4XCUdDTKEaLLq3O1YaqyZZiPMQFnU70MfkpjPe4stRDZ+/NWBRNDMaNTYQxw=="], - - "@oven/bun-windows-x64-baseline": ["@oven/bun-windows-x64-baseline@1.2.11", "", { "os": "win32", "cpu": "x64" }, "sha512-uzappBblyA3GlX0PDENU1HTPZR82tzPuNd5jumTiDQ22FZmc2ZqCYTIZ/ngwHKOHDD6Rxdsux8+9EXgVS51G2w=="], - "@parcel/watcher": ["@parcel/watcher@2.5.1", "", { "dependencies": { "detect-libc": "^1.0.3", "is-glob": "^4.0.3", "micromatch": "^4.0.5", "node-addon-api": "^7.0.0" }, "optionalDependencies": { "@parcel/watcher-android-arm64": "2.5.1", "@parcel/watcher-darwin-arm64": "2.5.1", "@parcel/watcher-darwin-x64": "2.5.1", "@parcel/watcher-freebsd-x64": "2.5.1", "@parcel/watcher-linux-arm-glibc": "2.5.1", "@parcel/watcher-linux-arm-musl": "2.5.1", "@parcel/watcher-linux-arm64-glibc": "2.5.1", "@parcel/watcher-linux-arm64-musl": "2.5.1", "@parcel/watcher-linux-x64-glibc": "2.5.1", "@parcel/watcher-linux-x64-musl": "2.5.1", "@parcel/watcher-win32-arm64": "2.5.1", "@parcel/watcher-win32-ia32": "2.5.1", "@parcel/watcher-win32-x64": "2.5.1" } }, "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg=="], "@parcel/watcher-android-arm64": ["@parcel/watcher-android-arm64@2.5.1", "", { "os": "android", "cpu": "arm64" }, "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA=="], @@ -786,6 +804,8 @@ "@rtsao/scc": ["@rtsao/scc@1.1.0", "", {}, "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g=="], + "@sec-ant/readable-stream": ["@sec-ant/readable-stream@0.4.1", "", {}, "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg=="], + "@selderee/plugin-htmlparser2": ["@selderee/plugin-htmlparser2@0.6.0", "", { "dependencies": { "domhandler": "^4.2.0", "selderee": "^0.6.0" } }, "sha512-J3jpy002TyBjd4N/p6s+s90eX42H2eRhK3SbsZuvTDv977/E8p2U3zikdiehyJja66do7FlxLomZLPlvl2/xaA=="], "@sideway/address": ["@sideway/address@4.1.5", "", { "dependencies": { "@hapi/hoek": "^9.0.0" } }, "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q=="], @@ -796,12 +816,48 @@ "@sinclair/typebox": ["@sinclair/typebox@0.27.8", "", {}, "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA=="], + "@sindresorhus/is": ["@sindresorhus/is@5.6.0", "", {}, "sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g=="], + "@sinonjs/commons": ["@sinonjs/commons@1.8.6", "", { "dependencies": { "type-detect": "4.0.8" } }, "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ=="], "@sinonjs/fake-timers": ["@sinonjs/fake-timers@8.1.0", "", { "dependencies": { "@sinonjs/commons": "^1.7.0" } }, "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg=="], "@sqltools/formatter": ["@sqltools/formatter@1.2.5", "", {}, "sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw=="], + "@swc/cli": ["@swc/cli@0.7.3", "", { "dependencies": { "@swc/counter": "^0.1.3", "@xhmikosr/bin-wrapper": "^13.0.5", "commander": "^8.3.0", "fast-glob": "^3.2.5", "minimatch": "^9.0.3", "piscina": "^4.3.1", "semver": "^7.3.8", "slash": "3.0.0", "source-map": "^0.7.3" }, "peerDependencies": { "@swc/core": "^1.2.66", "chokidar": "^4.0.1" }, "optionalPeers": ["chokidar"], "bin": { "swc": "bin/swc.js", "swcx": "bin/swcx.js", "spack": "bin/spack.js" } }, "sha512-rnVXNnlURjdOuPaBIwZ3TmBA44BF/eP0j154LanlgPEYfau74ige7cpKlKkZr1IBqMOG99lAnYNxQipDWA3hdg=="], + + "@swc/core": ["@swc/core@1.11.24", "", { "dependencies": { "@swc/counter": "^0.1.3", "@swc/types": "^0.1.21" }, "optionalDependencies": { "@swc/core-darwin-arm64": "1.11.24", "@swc/core-darwin-x64": "1.11.24", "@swc/core-linux-arm-gnueabihf": "1.11.24", "@swc/core-linux-arm64-gnu": "1.11.24", "@swc/core-linux-arm64-musl": "1.11.24", "@swc/core-linux-x64-gnu": "1.11.24", "@swc/core-linux-x64-musl": "1.11.24", "@swc/core-win32-arm64-msvc": "1.11.24", "@swc/core-win32-ia32-msvc": "1.11.24", "@swc/core-win32-x64-msvc": "1.11.24" }, "peerDependencies": { "@swc/helpers": ">=0.5.17" }, "optionalPeers": ["@swc/helpers"] }, "sha512-MaQEIpfcEMzx3VWWopbofKJvaraqmL6HbLlw2bFZ7qYqYw3rkhM0cQVEgyzbHtTWwCwPMFZSC2DUbhlZgrMfLg=="], + + "@swc/core-darwin-arm64": ["@swc/core-darwin-arm64@1.11.24", "", { "os": "darwin", "cpu": "arm64" }, "sha512-dhtVj0PC1APOF4fl5qT2neGjRLgHAAYfiVP8poJelhzhB/318bO+QCFWAiimcDoyMgpCXOhTp757gnoJJrheWA=="], + + "@swc/core-darwin-x64": ["@swc/core-darwin-x64@1.11.24", "", { "os": "darwin", "cpu": "x64" }, "sha512-H/3cPs8uxcj2Fe3SoLlofN5JG6Ny5bl8DuZ6Yc2wr7gQFBmyBkbZEz+sPVgsID7IXuz7vTP95kMm1VL74SO5AQ=="], + + "@swc/core-linux-arm-gnueabihf": ["@swc/core-linux-arm-gnueabihf@1.11.24", "", { "os": "linux", "cpu": "arm" }, "sha512-PHJgWEpCsLo/NGj+A2lXZ2mgGjsr96ULNW3+T3Bj2KTc8XtMUkE8tmY2Da20ItZOvPNC/69KroU7edyo1Flfbw=="], + + "@swc/core-linux-arm64-gnu": ["@swc/core-linux-arm64-gnu@1.11.24", "", { "os": "linux", "cpu": "arm64" }, "sha512-C2FJb08+n5SD4CYWCTZx1uR88BN41ZieoHvI8A55hfVf2woT8+6ZiBzt74qW2g+ntZ535Jts5VwXAKdu41HpBg=="], + + "@swc/core-linux-arm64-musl": ["@swc/core-linux-arm64-musl@1.11.24", "", { "os": "linux", "cpu": "arm64" }, "sha512-ypXLIdszRo0re7PNNaXN0+2lD454G8l9LPK/rbfRXnhLWDBPURxzKlLlU/YGd2zP98wPcVooMmegRSNOKfvErw=="], + + "@swc/core-linux-x64-gnu": ["@swc/core-linux-x64-gnu@1.11.24", "", { "os": "linux", "cpu": "x64" }, "sha512-IM7d+STVZD48zxcgo69L0yYptfhaaE9cMZ+9OoMxirNafhKKXwoZuufol1+alEFKc+Wbwp+aUPe/DeWC/Lh3dg=="], + + "@swc/core-linux-x64-musl": ["@swc/core-linux-x64-musl@1.11.24", "", { "os": "linux", "cpu": "x64" }, "sha512-DZByJaMVzSfjQKKQn3cqSeqwy6lpMaQDQQ4HPlch9FWtDx/dLcpdIhxssqZXcR2rhaQVIaRQsCqwV6orSDGAGw=="], + + "@swc/core-win32-arm64-msvc": ["@swc/core-win32-arm64-msvc@1.11.24", "", { "os": "win32", "cpu": "arm64" }, "sha512-Q64Ytn23y9aVDKN5iryFi8mRgyHw3/kyjTjT4qFCa8AEb5sGUuSj//AUZ6c0J7hQKMHlg9do5Etvoe61V98/JQ=="], + + "@swc/core-win32-ia32-msvc": ["@swc/core-win32-ia32-msvc@1.11.24", "", { "os": "win32", "cpu": "ia32" }, "sha512-9pKLIisE/Hh2vJhGIPvSoTK4uBSPxNVyXHmOrtdDot4E1FUUI74Vi8tFdlwNbaj8/vusVnb8xPXsxF1uB0VgiQ=="], + + "@swc/core-win32-x64-msvc": ["@swc/core-win32-x64-msvc@1.11.24", "", { "os": "win32", "cpu": "x64" }, "sha512-sybnXtOsdB+XvzVFlBVGgRHLqp3yRpHK7CrmpuDKszhj/QhmsaZzY/GHSeALlMtLup13M0gqbcQvsTNlAHTg3w=="], + + "@swc/counter": ["@swc/counter@0.1.3", "", {}, "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ=="], + + "@swc/helpers": ["@swc/helpers@0.5.17", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A=="], + + "@swc/types": ["@swc/types@0.1.21", "", { "dependencies": { "@swc/counter": "^0.1.3" } }, "sha512-2YEtj5HJVbKivud9N4bpPBAyZhj4S2Ipe5LkUG94alTpr7in/GU/EARgPAd3BwU+YOmFVJC2+kjqhGRi3r0ZpQ=="], + + "@szmarczak/http-timer": ["@szmarczak/http-timer@5.0.1", "", { "dependencies": { "defer-to-connect": "^2.0.1" } }, "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw=="], + + "@tokenizer/token": ["@tokenizer/token@0.3.0", "", {}, "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A=="], + "@tootallnate/once": ["@tootallnate/once@1.1.2", "", {}, "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw=="], "@tsconfig/node10": ["@tsconfig/node10@1.0.11", "", {}, "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw=="], @@ -860,6 +916,8 @@ "@types/http-assert": ["@types/http-assert@1.5.6", "", {}, "sha512-TTEwmtjgVbYAzZYWyeHPrrtWnfVkm8tQkP8P21uQifPgMRgjrow3XDEYqucuC8SKZJT7pUnhU/JymvjggxO9vw=="], + "@types/http-cache-semantics": ["@types/http-cache-semantics@4.0.4", "", {}, "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA=="], + "@types/http-errors": ["@types/http-errors@2.0.4", "", {}, "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA=="], "@types/i18n": ["@types/i18n@0.13.12", "", {}, "sha512-iAd2QjKh+0ToBXocmCS3m38GskiaGzmSV1MTQz2GaOraqSqBiLf46J7u3EGINl+st+Uk4lO3OL7QyIjTJlrWIg=="], @@ -1040,6 +1098,26 @@ "@wry/trie": ["@wry/trie@0.5.0", "", { "dependencies": { "tslib": "^2.3.0" } }, "sha512-FNoYzHawTMk/6KMQoEG5O4PuioX19UbwdQKF44yw0nLfOypfQdjtfZzo/UIJWAJ23sNIFbD1Ug9lbaDGMwbqQA=="], + "@xhmikosr/archive-type": ["@xhmikosr/archive-type@7.0.0", "", { "dependencies": { "file-type": "^19.0.0" } }, "sha512-sIm84ZneCOJuiy3PpWR5bxkx3HaNt1pqaN+vncUBZIlPZCq8ASZH+hBVdu5H8znR7qYC6sKwx+ie2Q7qztJTxA=="], + + "@xhmikosr/bin-check": ["@xhmikosr/bin-check@7.0.3", "", { "dependencies": { "execa": "^5.1.1", "isexe": "^2.0.0" } }, "sha512-4UnCLCs8DB+itHJVkqFp9Zjg+w/205/J2j2wNBsCEAm/BuBmtua2hhUOdAMQE47b1c7P9Xmddj0p+X1XVsfHsA=="], + + "@xhmikosr/bin-wrapper": ["@xhmikosr/bin-wrapper@13.0.5", "", { "dependencies": { "@xhmikosr/bin-check": "^7.0.3", "@xhmikosr/downloader": "^15.0.1", "@xhmikosr/os-filter-obj": "^3.0.0", "bin-version-check": "^5.1.0" } }, "sha512-DT2SAuHDeOw0G5bs7wZbQTbf4hd8pJ14tO0i4cWhRkIJfgRdKmMfkDilpaJ8uZyPA0NVRwasCNAmMJcWA67osw=="], + + "@xhmikosr/decompress": ["@xhmikosr/decompress@10.0.1", "", { "dependencies": { "@xhmikosr/decompress-tar": "^8.0.1", "@xhmikosr/decompress-tarbz2": "^8.0.1", "@xhmikosr/decompress-targz": "^8.0.1", "@xhmikosr/decompress-unzip": "^7.0.0", "graceful-fs": "^4.2.11", "make-dir": "^4.0.0", "strip-dirs": "^3.0.0" } }, "sha512-6uHnEEt5jv9ro0CDzqWlFgPycdE+H+kbJnwyxgZregIMLQ7unQSCNVsYG255FoqU8cP46DyggI7F7LohzEl8Ag=="], + + "@xhmikosr/decompress-tar": ["@xhmikosr/decompress-tar@8.0.1", "", { "dependencies": { "file-type": "^19.0.0", "is-stream": "^2.0.1", "tar-stream": "^3.1.7" } }, "sha512-dpEgs0cQKJ2xpIaGSO0hrzz3Kt8TQHYdizHsgDtLorWajuHJqxzot9Hbi0huRxJuAGG2qiHSQkwyvHHQtlE+fg=="], + + "@xhmikosr/decompress-tarbz2": ["@xhmikosr/decompress-tarbz2@8.0.2", "", { "dependencies": { "@xhmikosr/decompress-tar": "^8.0.1", "file-type": "^19.6.0", "is-stream": "^2.0.1", "seek-bzip": "^2.0.0", "unbzip2-stream": "^1.4.3" } }, "sha512-p5A2r/AVynTQSsF34Pig6olt9CvRj6J5ikIhzUd3b57pUXyFDGtmBstcw+xXza0QFUh93zJsmY3zGeNDlR2AQQ=="], + + "@xhmikosr/decompress-targz": ["@xhmikosr/decompress-targz@8.0.1", "", { "dependencies": { "@xhmikosr/decompress-tar": "^8.0.1", "file-type": "^19.0.0", "is-stream": "^2.0.1" } }, "sha512-mvy5AIDIZjQ2IagMI/wvauEiSNHhu/g65qpdM4EVoYHUJBAmkQWqcPJa8Xzi1aKVTmOA5xLJeDk7dqSjlHq8Mg=="], + + "@xhmikosr/decompress-unzip": ["@xhmikosr/decompress-unzip@7.0.0", "", { "dependencies": { "file-type": "^19.0.0", "get-stream": "^6.0.1", "yauzl": "^3.1.2" } }, "sha512-GQMpzIpWTsNr6UZbISawsGI0hJ4KA/mz5nFq+cEoPs12UybAqZWKbyIaZZyLbJebKl5FkLpsGBkrplJdjvUoSQ=="], + + "@xhmikosr/downloader": ["@xhmikosr/downloader@15.0.1", "", { "dependencies": { "@xhmikosr/archive-type": "^7.0.0", "@xhmikosr/decompress": "^10.0.1", "content-disposition": "^0.5.4", "defaults": "^3.0.0", "ext-name": "^5.0.0", "file-type": "^19.0.0", "filenamify": "^6.0.0", "get-stream": "^6.0.1", "got": "^13.0.0" } }, "sha512-fiuFHf3Dt6pkX8HQrVBsK0uXtkgkVlhrZEh8b7VgoDqFf+zrgFBPyrwCqE/3nDwn3hLeNz+BsrS7q3mu13Lp1g=="], + + "@xhmikosr/os-filter-obj": ["@xhmikosr/os-filter-obj@3.0.0", "", { "dependencies": { "arch": "^3.0.0" } }, "sha512-siPY6BD5dQ2SZPl3I0OZBHL27ZqZvLEosObsZRQ1NUB8qcxegwt0T9eKtV96JMFQpIz1elhkzqOg4c/Ri6Dp9A=="], + "@xtuc/ieee754": ["@xtuc/ieee754@1.2.0", "", {}, "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA=="], "@xtuc/long": ["@xtuc/long@4.2.2", "", {}, "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ=="], @@ -1132,6 +1210,8 @@ "app-root-path": ["app-root-path@3.1.0", "", {}, "sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA=="], + "arch": ["arch@3.0.0", "", {}, "sha512-AmIAC+Wtm2AU8lGfTtHsw0Y9Qtftx2YXEEtiBP10xFUtMOA+sHHx6OAddyL52mUKh1vsXQ6/w1mVDptZCyUt4Q=="], + "arg": ["arg@4.1.3", "", {}, "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA=="], "argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], @@ -1222,6 +1302,10 @@ "bignumber.js": ["bignumber.js@9.0.0", "", {}, "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A=="], + "bin-version": ["bin-version@6.0.0", "", { "dependencies": { "execa": "^5.0.0", "find-versions": "^5.0.0" } }, "sha512-nk5wEsP4RiKjG+vF+uG8lFsEn4d7Y6FVDamzzftSunXOoOcOOkzcWdKVlGgFFwlUQCj63SgnUkLLGF8v7lufhw=="], + + "bin-version-check": ["bin-version-check@5.1.0", "", { "dependencies": { "bin-version": "^6.0.0", "semver": "^7.5.3", "semver-truncate": "^3.0.0" } }, "sha512-bYsvMqJ8yNGILLz1KP9zKLzQ6YpljV3ln1gqhuLkUtyfGi3qXKGuK2p+U4NAvjVFzDFiBBtOpCOSFNuYYEGZ5g=="], + "binary-extensions": ["binary-extensions@2.3.0", "", {}, "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw=="], "birpc": ["birpc@2.3.0", "", {}, "sha512-ijbtkn/F3Pvzb6jHypHRyve2QApOCZDR25D/VnkY2G/lBNcXCTsnsCxgY4k4PkVB7zfwzYbY3O9Lcqe3xufS5g=="], @@ -1254,14 +1338,14 @@ "buffer": ["buffer@6.0.3", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" } }, "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA=="], + "buffer-crc32": ["buffer-crc32@0.2.13", "", {}, "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ=="], + "buffer-from": ["buffer-from@1.1.2", "", {}, "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="], "builtin-modules": ["builtin-modules@3.3.0", "", {}, "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw=="], "builtins": ["builtins@5.1.0", "", { "dependencies": { "semver": "^7.0.0" } }, "sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg=="], - "bun": ["bun@1.2.11", "", { "optionalDependencies": { "@oven/bun-darwin-aarch64": "1.2.11", "@oven/bun-darwin-x64": "1.2.11", "@oven/bun-darwin-x64-baseline": "1.2.11", "@oven/bun-linux-aarch64": "1.2.11", "@oven/bun-linux-aarch64-musl": "1.2.11", "@oven/bun-linux-x64": "1.2.11", "@oven/bun-linux-x64-baseline": "1.2.11", "@oven/bun-linux-x64-musl": "1.2.11", "@oven/bun-linux-x64-musl-baseline": "1.2.11", "@oven/bun-windows-x64": "1.2.11", "@oven/bun-windows-x64-baseline": "1.2.11" }, "os": [ "linux", "win32", "darwin", ], "cpu": [ "x64", "arm64", ], "bin": { "bun": "bin/bun.exe", "bunx": "bin/bun.exe" } }, "sha512-9brVfsp6/TYVsE3lCl1MUxoyKhvljqyL1MNPErgwsOaS9g4Gzi2nY+W5WtRAXGzLrgz5jzsoGHHwyH/rTeRCIg=="], - "busboy": ["busboy@0.3.1", "", { "dependencies": { "dicer": "0.3.0" } }, "sha512-y7tTxhGKXcyBxRKAni+awqx8uqaJKrSFSNFSeRG5CsWNdmy2BIK+6VGWEW7TZnIO/533mtMEA4rOevQV815YJw=="], "bytes": ["bytes@3.1.2", "", {}, "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="], @@ -1272,6 +1356,10 @@ "cacheable": ["cacheable@1.8.10", "", { "dependencies": { "hookified": "^1.8.1", "keyv": "^5.3.2" } }, "sha512-0ZnbicB/N2R6uziva8l6O6BieBklArWyiGx4GkwAhLKhSHyQtRfM9T1nx7HHuHDKkYB/efJQhz3QJ6x/YqoZzA=="], + "cacheable-lookup": ["cacheable-lookup@7.0.0", "", {}, "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w=="], + + "cacheable-request": ["cacheable-request@10.2.14", "", { "dependencies": { "@types/http-cache-semantics": "^4.0.2", "get-stream": "^6.0.1", "http-cache-semantics": "^4.1.1", "keyv": "^4.5.3", "mimic-response": "^4.0.0", "normalize-url": "^8.0.0", "responselike": "^3.0.0" } }, "sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ=="], + "call-bind": ["call-bind@1.0.8", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", "get-intrinsic": "^1.2.4", "set-function-length": "^1.2.2" } }, "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww=="], "call-bind-apply-helpers": ["call-bind-apply-helpers@1.0.2", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" } }, "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ=="], @@ -1428,6 +1516,8 @@ "decimal.js-light": ["decimal.js-light@2.5.1", "", {}, "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg=="], + "decompress-response": ["decompress-response@6.0.0", "", { "dependencies": { "mimic-response": "^3.1.0" } }, "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ=="], + "dedent": ["dedent@0.7.0", "", {}, "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA=="], "deep-eql": ["deep-eql@5.0.2", "", {}, "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q=="], @@ -1438,6 +1528,10 @@ "deepmerge": ["deepmerge@4.3.1", "", {}, "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A=="], + "defaults": ["defaults@3.0.0", "", {}, "sha512-RsqXDEAALjfRTro+IFNKpcPCt0/Cy2FqHSIlnomiJp9YGadpQnrtbRpSgN2+np21qHcIKiva4fiOQGjS9/qR/A=="], + + "defer-to-connect": ["defer-to-connect@2.0.1", "", {}, "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg=="], + "define-data-property": ["define-data-property@1.1.4", "", { "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "gopd": "^1.0.1" } }, "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A=="], "define-properties": ["define-properties@1.2.1", "", { "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" } }, "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg=="], @@ -1644,6 +1738,10 @@ "exsolve": ["exsolve@1.0.5", "", {}, "sha512-pz5dvkYYKQ1AHVrgOzBKWeP4u4FRb3a6DNK2ucr0OoNwYIU4QWsJ+NM36LLzORT+z845MzKHHhpXiUF5nvQoJg=="], + "ext-list": ["ext-list@2.2.2", "", { "dependencies": { "mime-db": "^1.28.0" } }, "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA=="], + + "ext-name": ["ext-name@5.0.0", "", { "dependencies": { "ext-list": "^2.0.0", "sort-keys-length": "^1.0.0" } }, "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ=="], + "extend-object": ["extend-object@1.0.0", "", {}, "sha512-0dHDIXC7y7LDmCh/lp1oYkmv73K25AMugQI07r8eFopkW6f7Ufn1q+ETMsJjnV9Am14SlElkqy3O92r6xEaxPw=="], "extract-files": ["extract-files@9.0.0", "", {}, "sha512-CvdFfHkC95B4bBBk36hcEmvdR2awOdhhVUYH6S/zrVj3477zven/fJMYg7121h4T1xHZC+tetUpubpAhxwI7hQ=="], @@ -1682,14 +1780,22 @@ "file-entry-cache": ["file-entry-cache@6.0.1", "", { "dependencies": { "flat-cache": "^3.0.4" } }, "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg=="], + "file-type": ["file-type@19.6.0", "", { "dependencies": { "get-stream": "^9.0.1", "strtok3": "^9.0.1", "token-types": "^6.0.0", "uint8array-extras": "^1.3.0" } }, "sha512-VZR5I7k5wkD0HgFnMsq5hOsSc710MJMu5Nc5QYsbe38NN5iPV/XTObYLc/cpttRTf6lX538+5uO1ZQRhYibiZQ=="], + "filelist": ["filelist@1.0.4", "", { "dependencies": { "minimatch": "^5.0.1" } }, "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q=="], + "filename-reserved-regex": ["filename-reserved-regex@3.0.0", "", {}, "sha512-hn4cQfU6GOT/7cFHXBqeBg2TbrMBgdD0kcjLhvSQYYwm3s4B6cjvBfb7nBALJLAXqmU5xajSa7X2NnUud/VCdw=="], + + "filenamify": ["filenamify@6.0.0", "", { "dependencies": { "filename-reserved-regex": "^3.0.0" } }, "sha512-vqIlNogKeyD3yzrm0yhRMQg8hOVwYcYRfjEoODd49iCprMn4HL85gK3HcykQE53EPIpX3HcAbGA5ELQv216dAQ=="], + "fill-range": ["fill-range@7.1.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg=="], "finalhandler": ["finalhandler@1.3.1", "", { "dependencies": { "debug": "2.6.9", "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "on-finished": "2.4.1", "parseurl": "~1.3.3", "statuses": "2.0.1", "unpipe": "~1.0.0" } }, "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ=="], "find-up": ["find-up@5.0.0", "", { "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" } }, "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng=="], + "find-versions": ["find-versions@5.1.0", "", { "dependencies": { "semver-regex": "^4.0.5" } }, "sha512-+iwzCJ7C5v5KgcBuueqVoNiHVoQpwiUK5XFLjf0affFTep+Wcw93tPvmb8tqujDNmzhBDPddnWV/qgWSXgq+Hg=="], + "fixpack": ["fixpack@4.0.0", "", { "dependencies": { "alce": "1.2.0", "chalk": "^3.0.0", "detect-indent": "^6.0.0", "detect-newline": "^3.1.0", "extend-object": "^1.0.0", "rc": "^1.2.8" }, "bin": { "fixpack": "bin/fixpack" } }, "sha512-5SM1+H2CcuJ3gGEwTiVo/+nd/hYpNj9Ch3iMDOQ58ndY+VGQ2QdvaUTkd3otjZvYnd/8LF/HkJ5cx7PBq0orCQ=="], "flat-cache": ["flat-cache@3.2.0", "", { "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.3", "rimraf": "^3.0.2" } }, "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw=="], @@ -1780,6 +1886,8 @@ "gopd": ["gopd@1.2.0", "", {}, "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="], + "got": ["got@13.0.0", "", { "dependencies": { "@sindresorhus/is": "^5.2.0", "@szmarczak/http-timer": "^5.0.1", "cacheable-lookup": "^7.0.0", "cacheable-request": "^10.2.8", "decompress-response": "^6.0.0", "form-data-encoder": "^2.1.2", "get-stream": "^6.0.1", "http2-wrapper": "^2.1.10", "lowercase-keys": "^3.0.0", "p-cancelable": "^3.0.0", "responselike": "^3.0.0" } }, "sha512-XfBk1CxOOScDcMr9O1yKkNaQyy865NbYs+F7dr4H0LZMVgCj2Le59k6PqbNHoL5ToeaEQUYh6c6yMfVcc6SJxA=="], + "graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="], "graphemer": ["graphemer@1.4.0", "", {}, "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag=="], @@ -1844,10 +1952,14 @@ "htmlparser2": ["htmlparser2@8.0.2", "", { "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.3", "domutils": "^3.0.1", "entities": "^4.4.0" } }, "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA=="], + "http-cache-semantics": ["http-cache-semantics@4.1.1", "", {}, "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ=="], + "http-errors": ["http-errors@2.0.0", "", { "dependencies": { "depd": "2.0.0", "inherits": "2.0.4", "setprototypeof": "1.2.0", "statuses": "2.0.1", "toidentifier": "1.0.1" } }, "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ=="], "http-proxy-agent": ["http-proxy-agent@7.0.2", "", { "dependencies": { "agent-base": "^7.1.0", "debug": "^4.3.4" } }, "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig=="], + "http2-wrapper": ["http2-wrapper@2.2.1", "", { "dependencies": { "quick-lru": "^5.1.1", "resolve-alpn": "^1.2.0" } }, "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ=="], + "https-proxy-agent": ["https-proxy-agent@7.0.6", "", { "dependencies": { "agent-base": "^7.1.2", "debug": "4" } }, "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw=="], "human-signals": ["human-signals@2.1.0", "", {}, "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw=="], @@ -1888,6 +2000,8 @@ "ini": ["ini@1.3.8", "", {}, "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="], + "inspect-with-kind": ["inspect-with-kind@1.0.5", "", { "dependencies": { "kind-of": "^6.0.2" } }, "sha512-MAQUJuIo7Xqk8EVNP+6d3CKq9c80hi4tjIbIAT6lmGW9W6WzlHiu9PS8uSuUYU+Do+j1baiFp3H25XEVxDIG2g=="], + "internal-slot": ["internal-slot@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "hasown": "^2.0.2", "side-channel": "^1.1.0" } }, "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw=="], "ipaddr.js": ["ipaddr.js@1.9.1", "", {}, "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="], @@ -1940,6 +2054,8 @@ "is-path-inside": ["is-path-inside@3.0.3", "", {}, "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ=="], + "is-plain-obj": ["is-plain-obj@1.1.0", "", {}, "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg=="], + "is-plain-object": ["is-plain-object@5.0.0", "", {}, "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q=="], "is-potential-custom-element-name": ["is-potential-custom-element-name@1.0.1", "", {}, "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ=="], @@ -2166,6 +2282,8 @@ "lower-case": ["lower-case@2.0.2", "", { "dependencies": { "tslib": "^2.0.3" } }, "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg=="], + "lowercase-keys": ["lowercase-keys@3.0.0", "", {}, "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ=="], + "lru-cache": ["lru-cache@6.0.0", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA=="], "magic-string": ["magic-string@0.30.17", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0" } }, "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA=="], @@ -2216,6 +2334,8 @@ "mimic-fn": ["mimic-fn@2.1.0", "", {}, "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="], + "mimic-response": ["mimic-response@4.0.0", "", {}, "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg=="], + "minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], "minimist": ["minimist@1.2.8", "", {}, "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="], @@ -2224,6 +2344,8 @@ "mitt": ["mitt@3.0.1", "", {}, "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw=="], + "mkdirp": ["mkdirp@3.0.1", "", { "bin": { "mkdirp": "dist/cjs/src/bin.js" } }, "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg=="], + "mlly": ["mlly@1.7.4", "", { "dependencies": { "acorn": "^8.14.0", "pathe": "^2.0.1", "pkg-types": "^1.3.0", "ufo": "^1.5.4" } }, "sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw=="], "mock-apollo-client": ["mock-apollo-client@1.3.1", "", { "peerDependencies": { "@apollo/client": "^3.0.0" } }, "sha512-jBl1YGofh9RpTUFfShwIumiry5qRkR1LYW12K1iZ576kMFh03psHTRiuY2k3dT6cUQ28RAK4gRFl9lVloazGhA=="], @@ -2252,6 +2374,8 @@ "natural-compare": ["natural-compare@1.4.0", "", {}, "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw=="], + "ncp": ["ncp@2.0.0", "", { "bin": { "ncp": "./bin/ncp" } }, "sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA=="], + "nearley": ["nearley@2.20.1", "", { "dependencies": { "commander": "^2.19.0", "moo": "^0.5.0", "railroad-diagrams": "^1.0.0", "randexp": "0.4.6" }, "bin": { "nearleyc": "bin/nearleyc.js", "nearley-test": "bin/nearley-test.js", "nearley-unparse": "bin/nearley-unparse.js", "nearley-railroad": "bin/nearley-railroad.js" } }, "sha512-+Mc8UaAebFzgV+KpI5n7DasuuQCHA89dmwm7JXw3TV43ukfNQ9DnBH3Mdb2g/I4Fdxc26pwimBWvjIw0UAILSQ=="], "negotiator": ["negotiator@0.6.3", "", {}, "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg=="], @@ -2292,6 +2416,8 @@ "normalize-range": ["normalize-range@0.1.2", "", {}, "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA=="], + "normalize-url": ["normalize-url@8.0.1", "", {}, "sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w=="], + "npm-run-path": ["npm-run-path@4.0.1", "", { "dependencies": { "path-key": "^3.0.0" } }, "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw=="], "nth-check": ["nth-check@2.1.1", "", { "dependencies": { "boolbase": "^1.0.0" } }, "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w=="], @@ -2336,6 +2462,8 @@ "own-keys": ["own-keys@1.0.1", "", { "dependencies": { "get-intrinsic": "^1.2.6", "object-keys": "^1.1.1", "safe-push-apply": "^1.0.0" } }, "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg=="], + "p-cancelable": ["p-cancelable@3.0.0", "", {}, "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw=="], + "p-event": ["p-event@4.2.0", "", { "dependencies": { "p-timeout": "^3.1.0" } }, "sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ=="], "p-finally": ["p-finally@1.0.0", "", {}, "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow=="], @@ -2392,6 +2520,10 @@ "peberminta": ["peberminta@0.9.0", "", {}, "sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ=="], + "peek-readable": ["peek-readable@5.4.2", "", {}, "sha512-peBp3qZyuS6cNIJ2akRNG1uo1WJ1d0wTxg/fxMdZ0BqCVhx242bSFHM9eNqflfJVS9SsgkzgT/1UgnsurBOTMg=="], + + "pend": ["pend@1.2.0", "", {}, "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg=="], + "perfect-debounce": ["perfect-debounce@1.0.0", "", {}, "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA=="], "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], @@ -2402,6 +2534,8 @@ "pirates": ["pirates@4.0.7", "", {}, "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA=="], + "piscina": ["piscina@4.9.2", "", { "optionalDependencies": { "@napi-rs/nice": "^1.0.1" } }, "sha512-Fq0FERJWFEUpB4eSY59wSNwXD4RYqR+nR/WiEVcZW8IWfVBxJJafcgTEZDQo8k3w0sUarJ8RyVbbUF4GQ2LGbQ=="], + "pkg-dir": ["pkg-dir@4.2.0", "", { "dependencies": { "find-up": "^4.0.0" } }, "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ=="], "pkg-types": ["pkg-types@1.3.1", "", { "dependencies": { "confbox": "^0.1.8", "mlly": "^1.7.4", "pathe": "^2.0.1" } }, "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ=="], @@ -2496,6 +2630,8 @@ "queue-microtask": ["queue-microtask@1.2.3", "", {}, "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="], + "quick-lru": ["quick-lru@5.1.1", "", {}, "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA=="], + "railroad-diagrams": ["railroad-diagrams@1.0.0", "", {}, "sha512-cz93DjNeLY0idrCNOH6PviZGRN9GJhsdm9hpn1YCS879fj4W+x5IFJhhkRZcwVgMmFF7R82UA/7Oh+R8lLZg6A=="], "randexp": ["randexp@0.4.6", "", { "dependencies": { "discontinuous-range": "1.0.0", "ret": "~0.1.10" } }, "sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ=="], @@ -2544,6 +2680,8 @@ "resolve": ["resolve@1.22.10", "", { "dependencies": { "is-core-module": "^2.16.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w=="], + "resolve-alpn": ["resolve-alpn@1.2.1", "", {}, "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g=="], + "resolve-cwd": ["resolve-cwd@3.0.0", "", { "dependencies": { "resolve-from": "^5.0.0" } }, "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg=="], "resolve-from": ["resolve-from@5.0.0", "", {}, "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw=="], @@ -2552,6 +2690,8 @@ "resolve.exports": ["resolve.exports@1.1.1", "", {}, "sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ=="], + "responselike": ["responselike@3.0.0", "", { "dependencies": { "lowercase-keys": "^3.0.0" } }, "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg=="], + "ret": ["ret@0.1.15", "", {}, "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg=="], "retry": ["retry@0.13.1", "", {}, "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg=="], @@ -2594,10 +2734,16 @@ "scule": ["scule@1.3.0", "", {}, "sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g=="], + "seek-bzip": ["seek-bzip@2.0.0", "", { "dependencies": { "commander": "^6.0.0" }, "bin": { "seek-bunzip": "bin/seek-bunzip", "seek-table": "bin/seek-bzip-table" } }, "sha512-SMguiTnYrhpLdk3PwfzHeotrcwi8bNV4iemL9tx9poR/yeaMYwB9VzR1w7b57DuWpuqR8n6oZboi0hj3AxZxQg=="], + "selderee": ["selderee@0.6.0", "", { "dependencies": { "parseley": "^0.7.0" } }, "sha512-ibqWGV5aChDvfVdqNYuaJP/HnVBhlRGSRrlbttmlMpHcLuTqqbMH36QkSs9GEgj5M88JDYLI8eyP94JaQ8xRlg=="], "semver": ["semver@7.7.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA=="], + "semver-regex": ["semver-regex@4.0.5", "", {}, "sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw=="], + + "semver-truncate": ["semver-truncate@3.0.0", "", { "dependencies": { "semver": "^7.3.5" } }, "sha512-LJWA9kSvMolR51oDE6PN3kALBNaUdkxzAGcexw8gjMA8xr5zUqK0JiR3CgARSqanYF3Z1YHvsErb1KDgh+v7Rg=="], + "send": ["send@0.19.0", "", { "dependencies": { "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", "http-errors": "2.0.0", "mime": "1.6.0", "ms": "2.1.3", "on-finished": "2.4.1", "range-parser": "~1.2.1", "statuses": "2.0.1" } }, "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw=="], "seq-queue": ["seq-queue@0.0.5", "", {}, "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q=="], @@ -2652,7 +2798,11 @@ "sodium-universal": ["sodium-universal@4.0.1", "", { "dependencies": { "sodium-native": "^4.0.0" }, "peerDependencies": { "sodium-javascript": "~0.8.0" }, "optionalPeers": ["sodium-javascript"] }, "sha512-sNp13PrxYLaUFHTGoDKkSDFvoEu51bfzE12RwGlqU1fcrkpAOK0NvizaJzOWV0Omtk9me2+Pnbjcf/l0efxuGQ=="], - "source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], + "sort-keys": ["sort-keys@1.1.2", "", { "dependencies": { "is-plain-obj": "^1.0.0" } }, "sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg=="], + + "sort-keys-length": ["sort-keys-length@1.0.1", "", { "dependencies": { "sort-keys": "^1.0.0" } }, "sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw=="], + + "source-map": ["source-map@0.7.4", "", {}, "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA=="], "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], @@ -2700,6 +2850,8 @@ "strip-bom": ["strip-bom@3.0.0", "", {}, "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA=="], + "strip-dirs": ["strip-dirs@3.0.0", "", { "dependencies": { "inspect-with-kind": "^1.0.5", "is-plain-obj": "^1.1.0" } }, "sha512-I0sdgcFTfKQlUPZyAqPJmSG3HLO9rWDFnxonnIbskYNM3DwFOeTNB5KzVq3dA1GdRAc/25b5Y7UO2TQfKWw4aQ=="], + "strip-eof": ["strip-eof@1.0.0", "", {}, "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q=="], "strip-final-newline": ["strip-final-newline@2.0.0", "", {}, "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA=="], @@ -2708,6 +2860,8 @@ "strip-literal": ["strip-literal@3.0.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA=="], + "strtok3": ["strtok3@9.1.1", "", { "dependencies": { "@tokenizer/token": "^0.3.0", "peek-readable": "^5.3.1" } }, "sha512-FhwotcEqjr241ZbjFzjlIYg6c5/L/s4yBGWSMvJ9UoExiSqL+FnFA/CaeZx17WGaZMS/4SOZp8wH18jSS4R4lw=="], + "stylelint": ["stylelint@16.19.1", "", { "dependencies": { "@csstools/css-parser-algorithms": "^3.0.4", "@csstools/css-tokenizer": "^3.0.3", "@csstools/media-query-list-parser": "^4.0.2", "@csstools/selector-specificity": "^5.0.0", "@dual-bundle/import-meta-resolve": "^4.1.0", "balanced-match": "^2.0.0", "colord": "^2.9.3", "cosmiconfig": "^9.0.0", "css-functions-list": "^3.2.3", "css-tree": "^3.1.0", "debug": "^4.3.7", "fast-glob": "^3.3.3", "fastest-levenshtein": "^1.0.16", "file-entry-cache": "^10.0.8", "global-modules": "^2.0.0", "globby": "^11.1.0", "globjoin": "^0.1.4", "html-tags": "^3.3.1", "ignore": "^7.0.3", "imurmurhash": "^0.1.4", "is-plain-object": "^5.0.0", "known-css-properties": "^0.36.0", "mathml-tag-names": "^2.1.3", "meow": "^13.2.0", "micromatch": "^4.0.8", "normalize-path": "^3.0.0", "picocolors": "^1.1.1", "postcss": "^8.5.3", "postcss-resolve-nested-selector": "^0.1.6", "postcss-safe-parser": "^7.0.1", "postcss-selector-parser": "^7.1.0", "postcss-value-parser": "^4.2.0", "resolve-from": "^5.0.0", "string-width": "^4.2.3", "supports-hyperlinks": "^3.2.0", "svg-tags": "^1.0.0", "table": "^6.9.0", "write-file-atomic": "^5.0.1" }, "bin": { "stylelint": "bin/stylelint.mjs" } }, "sha512-C1SlPZNMKl+d/C867ZdCRthrS+6KuZ3AoGW113RZCOL0M8xOGpgx7G70wq7lFvqvm4dcfdGFVLB/mNaLFChRKw=="], "stylelint-config-html": ["stylelint-config-html@1.1.0", "", { "peerDependencies": { "postcss-html": "^1.0.0", "stylelint": ">=14.0.0" } }, "sha512-IZv4IVESjKLumUGi+HWeb7skgO6/g4VMuAYrJdlqQFndgbj6WJAXPhaysvBiXefX79upBdQVumgYcdd17gCpjQ=="], @@ -2746,6 +2900,8 @@ "tapable": ["tapable@2.2.1", "", {}, "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ=="], + "tar-stream": ["tar-stream@3.1.7", "", { "dependencies": { "b4a": "^1.6.4", "fast-fifo": "^1.2.0", "streamx": "^2.15.0" } }, "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ=="], + "terminal-link": ["terminal-link@2.1.1", "", { "dependencies": { "ansi-escapes": "^4.2.1", "supports-hyperlinks": "^2.0.0" } }, "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ=="], "terser": ["terser@5.39.0", "", { "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, "bin": { "terser": "bin/terser" } }, "sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw=="], @@ -2762,6 +2918,8 @@ "throttle-debounce": ["throttle-debounce@5.0.2", "", {}, "sha512-B71/4oyj61iNH0KeCamLuE2rmKuTO5byTOSVwECM5FA7TiAiAW+UqTKZ9ERueC4qvgSttUhdmq1mXC3kJqGX7A=="], + "through": ["through@2.3.8", "", {}, "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg=="], + "time-ordered-set": ["time-ordered-set@2.0.1", "", {}, "sha512-VJEKmgSN2UiOLB8BpN8Sh2b9LGMHTP5OPrQRpnKjvOheOyzk0mufbjzjKTIG2gO4A+Y+vDJ+0TcLbpUmMLsg8A=="], "timeout-refresh": ["timeout-refresh@2.0.1", "", {}, "sha512-SVqEcMZBsZF9mA78rjzCrYrUs37LMJk3ShZ851ygZYW1cMeIjs9mL57KO6Iv5mmjSQnOe/29/VAfGXo+oRCiVw=="], @@ -2796,6 +2954,8 @@ "token-stream": ["token-stream@1.0.0", "", {}, "sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg=="], + "token-types": ["token-types@6.0.0", "", { "dependencies": { "@tokenizer/token": "^0.3.0", "ieee754": "^1.2.1" } }, "sha512-lbDrTLVsHhOMljPscd0yitpozq7Ga2M5Cvez5AjGg8GASBjtt6iERCAJ93yommPmz62fb45oFIXHEZ3u9bfJEA=="], + "toposort": ["toposort@2.0.2", "", {}, "sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg=="], "touch": ["touch@3.1.1", "", { "bin": { "nodetouch": "bin/nodetouch.js" } }, "sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA=="], @@ -2876,8 +3036,12 @@ "uglify-js": ["uglify-js@3.19.3", "", { "bin": { "uglifyjs": "bin/uglifyjs" } }, "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ=="], + "uint8array-extras": ["uint8array-extras@1.4.0", "", {}, "sha512-ZPtzy0hu4cZjv3z5NW9gfKnNLjoz4y6uv4HlelAjDK7sY/xOkKZv9xK/WQpcsBB3jEybChz9DPC2U/+cusjJVQ=="], + "unbox-primitive": ["unbox-primitive@1.1.0", "", { "dependencies": { "call-bound": "^1.0.3", "has-bigints": "^1.0.2", "has-symbols": "^1.1.0", "which-boxed-primitive": "^1.1.1" } }, "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw=="], + "unbzip2-stream": ["unbzip2-stream@1.4.3", "", { "dependencies": { "buffer": "^5.2.1", "through": "^2.3.8" } }, "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg=="], + "unctx": ["unctx@2.4.1", "", { "dependencies": { "acorn": "^8.14.0", "estree-walker": "^3.0.3", "magic-string": "^0.30.17", "unplugin": "^2.1.0" } }, "sha512-AbaYw0Nm4mK4qjhns67C+kgxR2YWiwlDBPzxrN8h8C6VtAdCgditAY5Dezu3IJy4XVqAnbrXt9oQJvsn3fyozg=="], "undefsafe": ["undefsafe@2.0.5", "", {}, "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA=="], @@ -3058,6 +3222,8 @@ "yargs-parser": ["yargs-parser@20.2.9", "", {}, "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w=="], + "yauzl": ["yauzl@3.2.0", "", { "dependencies": { "buffer-crc32": "~0.2.3", "pend": "~1.2.0" } }, "sha512-Ow9nuGZE+qp1u4JIPvg+uCiUr7xGQWdff7JQSk5VGYTAZMDe2q8lxJ10ygv10qmSj031Ty/6FNJpLO4o1Sgc+w=="], + "yn": ["yn@3.1.1", "", {}, "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q=="], "yocto-queue": ["yocto-queue@0.1.0", "", {}, "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="], @@ -3144,8 +3310,14 @@ "@jest/reporters/jest-worker": ["jest-worker@27.5.1", "", { "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" } }, "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg=="], + "@jest/reporters/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], + + "@jest/source-map/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], + "@jest/transform/convert-source-map": ["convert-source-map@1.9.0", "", {}, "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A=="], + "@jest/transform/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], + "@jest/transform/write-file-atomic": ["write-file-atomic@3.0.3", "", { "dependencies": { "imurmurhash": "^0.1.4", "is-typedarray": "^1.0.0", "signal-exit": "^3.0.2", "typedarray-to-buffer": "^3.1.5" } }, "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q=="], "@jest/types/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], @@ -3166,6 +3338,10 @@ "@selderee/plugin-htmlparser2/domhandler": ["domhandler@4.3.1", "", { "dependencies": { "domelementtype": "^2.2.0" } }, "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ=="], + "@swc/cli/commander": ["commander@8.3.0", "", {}, "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww=="], + + "@swc/cli/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], + "@types/accepts/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], "@types/body-parser/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], @@ -3268,6 +3444,8 @@ "babel-plugin-istanbul/test-exclude": ["test-exclude@6.0.0", "", { "dependencies": { "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", "minimatch": "^3.0.4" } }, "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w=="], + "backend/regenerator-runtime": ["regenerator-runtime@0.14.1", "", {}, "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw=="], + "body-parser/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], "body-parser/iconv-lite": ["iconv-lite@0.4.24", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3" } }, "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA=="], @@ -3298,6 +3476,8 @@ "citty/consola": ["consola@3.4.2", "", {}, "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA=="], + "clean-css/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], + "concurrently/supports-color": ["supports-color@8.1.1", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="], "css-select/domhandler": ["domhandler@4.3.1", "", { "dependencies": { "domelementtype": "^2.2.0" } }, "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ=="], @@ -3306,7 +3486,7 @@ "cssstyle/rrweb-cssom": ["rrweb-cssom@0.8.0", "", {}, "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw=="], - "database/prettier": ["prettier@2.8.8", "", { "bin": { "prettier": "bin-prettier.js" } }, "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q=="], + "decompress-response/mimic-response": ["mimic-response@3.1.0", "", {}, "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ=="], "dht-node/@types/jest": ["@types/jest@27.5.1", "", { "dependencies": { "jest-matcher-utils": "^27.0.0", "pretty-format": "^27.0.0" } }, "sha512-fUy7YRpT+rHXto1YlL+J9rs0uLGyiqVt3ZOTQR+4ROc47yNl8WLdVLgUloBRhOxP1PZvguHl44T3H0wAWxahYQ=="], @@ -3326,6 +3506,8 @@ "editorconfig/minimatch": ["minimatch@9.0.1", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w=="], + "escodegen/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], + "eslint/@eslint/eslintrc": ["@eslint/eslintrc@2.1.4", "", { "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", "espree": "^9.6.0", "globals": "^13.19.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" } }, "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ=="], "eslint-import-resolver-node/debug": ["debug@3.2.7", "", { "dependencies": { "ms": "^2.1.1" } }, "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="], @@ -3356,6 +3538,8 @@ "federation/helmet": ["helmet@7.2.0", "", {}, "sha512-ZRiwvN089JfMXokizgqEPXsl2Guk094yExfoDXR0cBYWxtBbaSww/w+vT4WEJsBW2iTUi1GgZ6swmoug3Oy4Xw=="], + "file-type/get-stream": ["get-stream@9.0.1", "", { "dependencies": { "@sec-ant/readable-stream": "^0.4.1", "is-stream": "^4.0.1" } }, "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA=="], + "filelist/minimatch": ["minimatch@5.1.6", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g=="], "finalhandler/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], @@ -3372,10 +3556,14 @@ "globals/type-fest": ["type-fest@0.20.2", "", {}, "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ=="], + "got/form-data-encoder": ["form-data-encoder@2.1.4", "", {}, "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw=="], + "graphql-request/form-data": ["form-data@3.0.3", "", { "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "es-set-tostringtag": "^2.1.0", "mime-types": "^2.1.35" } }, "sha512-q5YBMeWy6E2Un0nMGWMgI65MAKtaylxfNJGJxpGh45YDciZB4epbWpaAfImil6CPAPTYB4sh0URQNDRIZG5F2w=="], "graphql-tools/uuid": ["uuid@3.4.0", "", { "bin": { "uuid": "./bin/uuid" } }, "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="], + "handlebars/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], + "html-minifier-terser/commander": ["commander@8.3.0", "", {}, "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww=="], "html-to-text/htmlparser2": ["htmlparser2@6.1.0", "", { "dependencies": { "domelementtype": "^2.0.1", "domhandler": "^4.0.0", "domutils": "^2.5.2", "entities": "^2.0.0" } }, "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A=="], @@ -3498,6 +3686,8 @@ "schema-utils/ajv": ["ajv@8.17.1", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g=="], + "seek-bzip/commander": ["commander@6.2.1", "", {}, "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA=="], + "send/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], "send/encodeurl": ["encodeurl@1.0.2", "", {}, "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w=="], @@ -3508,6 +3698,8 @@ "sodium-universal/sodium-native": ["sodium-native@4.3.3", "", { "dependencies": { "require-addon": "^1.1.0" } }, "sha512-OnxSlN3uyY8D0EsLHpmm2HOFmKddQVvEMmsakCrXUzSd8kjjbzL413t4ZNF3n0UxSwNgwTyUvkmZHTfuCeiYSw=="], + "source-map-support/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], + "stack-utils/escape-string-regexp": ["escape-string-regexp@2.0.0", "", {}, "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w=="], "streamroller/fs-extra": ["fs-extra@8.1.0", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", "universalify": "^0.1.0" } }, "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g=="], @@ -3564,6 +3756,8 @@ "typeorm/uuid": ["uuid@11.1.0", "", { "bin": { "uuid": "dist/esm/bin/uuid" } }, "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A=="], + "unbzip2-stream/buffer": ["buffer@5.7.1", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" } }, "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ=="], + "unctx/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], "unctx/unplugin": ["unplugin@2.3.2", "", { "dependencies": { "acorn": "^8.14.1", "picomatch": "^4.0.2", "webpack-virtual-modules": "^0.6.2" } }, "sha512-3n7YA46rROb3zSj8fFxtxC/PqoyvYQ0llwz9wtUPUutr9ig09C8gGo5CWCwHrUzlqC1LLR43kxp5vEIyH1ac1w=="], @@ -3592,8 +3786,6 @@ "v8-to-istanbul/convert-source-map": ["convert-source-map@1.9.0", "", {}, "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A=="], - "v8-to-istanbul/source-map": ["source-map@0.7.4", "", {}, "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA=="], - "vee-validate/@vue/devtools-api": ["@vue/devtools-api@7.7.6", "", { "dependencies": { "@vue/devtools-kit": "^7.7.6" } }, "sha512-b2Xx0KvXZObePpXPYHvBRRJLDQn5nhKjXh7vUhMEtWxz1AYNFOVIsh5+HLP8xDGL7sy+Q7hXeUxPHB/KgbtsPw=="], "vee-validate/type-fest": ["type-fest@4.40.1", "", {}, "sha512-9YvLNnORDpI+vghLU/Nf+zSv0kL47KbVJ1o3sKgoTefl6i+zebxbiDQWoe/oWWqPhIgQdRZRT1KA9sCPL810SA=="], @@ -3660,6 +3852,8 @@ "@nuxt/kit/pkg-types/confbox": ["confbox@0.2.2", "", {}, "sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ=="], + "@swc/cli/minimatch/brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="], + "@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="], "@typescript-eslint/utils/@typescript-eslint/scope-manager/@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@7.18.0", "", { "dependencies": { "@typescript-eslint/types": "7.18.0", "eslint-visitor-keys": "^3.4.3" } }, "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg=="], @@ -3700,6 +3894,8 @@ "express/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], + "file-type/get-stream/is-stream": ["is-stream@4.0.1", "", {}, "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A=="], + "filelist/minimatch/brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="], "finalhandler/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], @@ -3884,6 +4080,8 @@ "@istanbuljs/load-nyc-config/find-up/locate-path/p-locate": ["p-locate@4.1.0", "", { "dependencies": { "p-limit": "^2.2.0" } }, "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A=="], + "@swc/cli/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], + "@typescript-eslint/typescript-estree/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], "@typescript-eslint/utils/@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="], diff --git a/config-schema/README.md b/config-schema/README.md new file mode 100644 index 000000000..7a3aa7d9d --- /dev/null +++ b/config-schema/README.md @@ -0,0 +1,4 @@ +# config-schema + +## Bun-Compatibility +Full bun compatible \ No newline at end of file diff --git a/config-schema/package.json b/config-schema/package.json index 534c91b9a..e0cccb0eb 100644 --- a/config-schema/package.json +++ b/config-schema/package.json @@ -4,7 +4,6 @@ "description": "Gradido Config for validate config", "main": "./build/index.js", "types": "./src/index.ts", - "type": "module", "exports": { ".": { "import": "./build/index.js", diff --git a/database/README.md b/database/README.md index e951f4530..780545381 100644 --- a/database/README.md +++ b/database/README.md @@ -1,39 +1,51 @@ # database -## Project setup +## Bun-Compatibility -```bash -yarn install +This module uses `TypeORM` and `ts-mysql-migrate`. Bun currently has several issues running it: + +### Known Issues + +1. **`Geometry` type not recognized** + `Geometry` must be imported as type: + ```ts + import type { Geometry } from 'typeorm' + ``` +2. **Circular imports between entities** +Bun fails when two entities import each other (e.g., via @ManyToOne / @OneToMany). Node.js tolerates this, Bun does not. + +3. ts-mysql-migrate **breaks** +Bun crashes due to unsupported module.parent.parent.require(): +```ts +TypeError: undefined is not an object (evaluating 'module.parent.parent.require') ``` -## Upgrade migrations production +## Upgrade migrations ```bash yarn up ``` -## Upgrade migrations development - -```bash -yarn dev_up -``` - -## Downgrade migrations production +## Downgrade migrations ```bash yarn down ``` -## Downgrade migrations development - -```bash -yarn dev_down -``` ## Reset database ```bash -yarn dev_reset +yarn reset ``` Runs all down migrations and after this all up migrations. + +## Clear database +call truncate for all tables + +```bash +yarn clear +``` + + diff --git a/dht-node/Dockerfile b/dht-node/Dockerfile index e57914d8d..a1096b9c7 100644 --- a/dht-node/Dockerfile +++ b/dht-node/Dockerfile @@ -106,4 +106,4 @@ RUN yarn add udx-native@1.5.3 sodium-native@4.0.0 \ COPY --chown=app:app --from=installer ${DOCKER_WORKDIR}/dht-node/log4js-config.json ./log4js-config.json # Run command -CMD ["node", "index.js"] \ No newline at end of file +CMD ["TZ=UTC", "node", "index.js"] \ No newline at end of file diff --git a/dht-node/README.md b/dht-node/README.md new file mode 100644 index 000000000..88a2ca570 --- /dev/null +++ b/dht-node/README.md @@ -0,0 +1,9 @@ +# DHT-Node + +## Bun-Compatibility + +### Crash on NAPI module using `uv_interface_addresses` + +Bun crashes when a NAPI module tries to call `uv_interface_addresses`, a libuv function currently unsupported: + +Bun is working hard to support all NAPI module calls diff --git a/dht-node/package.json b/dht-node/package.json index caf7f2b17..cc78e0053 100644 --- a/dht-node/package.json +++ b/dht-node/package.json @@ -8,37 +8,38 @@ "license": "Apache-2.0", "private": false, "scripts": { - "build": "bun esbuild.config.ts", - "start": "cross-env TZ=UTC bun build/index.js", - "dev": "cross-env TZ=UTC bun --hot src/index.ts", + "build": "tsx esbuild.config.ts", + "start": "cross-env TZ=UTC NODE_ENV=production node build/index.js", + "dev": "cross-env TZ=UTC tsx watch src/index.ts", "typecheck": "tsc --noEmit", "lint": "biome check --error-on-warnings .", "lint:fix": "biome check --error-on-warnings . --write", "test": "cross-env TZ=UTC NODE_ENV=development DB_DATABASE=gradido_test_dht jest --runInBand --forceExit --detectOpenHandles" }, "dependencies": { - "@hyperswarm/dht": "^6.4.4", + "@hyperswarm/dht": "^6.5.1", "config-schema": "*", "cross-env": "^7.0.3", "database": "*", "dotenv": "10.0.0", - "esbuild": "^0.25.2", + "esbuild": "^0.25.3", "joi": "^17.13.3", - "log4js": "^6.7.1", - "typeorm": "^0.3.16", + "log4js": "^6.9.1", + "tsx": "^4.19.4", + "typeorm": "^0.3.22", "uuid": "^8.3.2" }, "devDependencies": { "@biomejs/biome": "1.9.4", - "@types/dotenv": "^8.2.0", + "@types/dotenv": "^8.2.3", "@types/jest": "27.5.1", "@types/joi": "^17.2.3", - "@types/node": "^17.0.21", + "@types/node": "^17.0.45", "@types/uuid": "^8.3.4", "jest": "27.5.1", - "prettier": "^2.8.7", + "prettier": "^2.8.8", "ts-jest": "27.1.4", - "typescript": "^4.9.4" + "typescript": "^4.9.5" }, "engines": { "node": ">=18" diff --git a/federation/Dockerfile b/federation/Dockerfile index e08ba2a4a..35fc6af98 100644 --- a/federation/Dockerfile +++ b/federation/Dockerfile @@ -105,4 +105,4 @@ RUN yarn add sodium-native@4.0.0 \ COPY --chown=app:app --from=installer ${DOCKER_WORKDIR}/federation/log4js-config.json ./log4js-config.json # Run command -CMD ["node", "index.js"] \ No newline at end of file +CMD ["TZ=UTC", "node", "index.js"] \ No newline at end of file diff --git a/federation/README.md b/federation/README.md new file mode 100644 index 000000000..f4ee3ecda --- /dev/null +++ b/federation/README.md @@ -0,0 +1,13 @@ +# Federation + +## Bun-Compatibility + +### Known Issue: Bun's --minify breaks mysql2 compatibility + +``` +error: Received packet in the wrong sequence. + fatal: true, + code: "PROTOCOL_INCORRECT_PACKET_SEQUENCE" + +``` +This issue seems to be caused by bun aggressively optimizing or minifying binary operations in the mysql2 authentication layer (Buffer, crypto, xor, etc.), resulting in corrupted packet handling. \ No newline at end of file diff --git a/federation/esbuild.config.ts b/federation/esbuild.config.ts new file mode 100644 index 000000000..b4154f008 --- /dev/null +++ b/federation/esbuild.config.ts @@ -0,0 +1,15 @@ +import { esbuildDecorators } from '@anatine/esbuild-decorators' +import { build } from 'esbuild' + +build({ + entryPoints: ['src/index.ts'], + outdir: 'build', + platform: 'node', + target: 'node18.20.7', + bundle: true, + keepNames: true, + // legalComments: 'inline', + external: ['sodium-native'], + plugins: [esbuildDecorators()], + minify: true, +}) \ No newline at end of file diff --git a/federation/package.json b/federation/package.json index ed56cc1ea..0f595c27b 100644 --- a/federation/package.json +++ b/federation/package.json @@ -9,14 +9,18 @@ "private": false, "scripts": { - "start": "cross-env TZ=UTC bun src/index.ts", - "dev": "cross-env TZ=UTC bun --hot src/index.ts", + "build": "tsx ./esbuild.config.ts", + "start": "cross-env TZ=UTC NODE_ENV=production node build/index.js", + "start:bun": "cross-env TZ=UTC NODE_ENV=production bun build/index.js", + "dev": "cross-env TZ=UTC tsx watch src/index.ts", + "dev:bun": "cross-env TZ=UTC bun --hot src/index.ts", "typecheck": "tsc --noEmit", "test": "cross-env TZ=UTC NODE_ENV=development DB_DATABASE=gradido_test_federation jest --runInBand --forceExit --detectOpenHandles", "lint": "biome check --error-on-warnings .", "lint:fix": "biome check --error-on-warnings . --write" }, "dependencies": { + "@anatine/esbuild-decorators": "^0.2.19", "apollo-server-express": "^2.25.2", "await-semaphore": "0.1.3", "class-validator": "^0.13.2", @@ -37,6 +41,7 @@ "log4js": "^6.7.1", "reflect-metadata": "^0.1.13", "sodium-native": "^3.3.0", + "tsx": "^4.19.4", "type-graphql": "^1.1.1", "typeorm": "^0.3.16", "uuid": "8.3.2" diff --git a/yarn.lock b/yarn.lock index c092ac4e9..22ac25cd1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -440,6 +440,13 @@ resolved "https://registry.yarnpkg.com/@biomejs/cli-win32-x64/-/cli-win32-x64-1.9.4.tgz#4c7afa90e3970213599b4095e62f87e5972b2340" integrity sha512-8Y5wMhVIPaWe6jw2H+KlEm4wP/f7EW3810ZLmDlrEEy5KvBsb9ECEfu/kMWD484ijfQ8+nIi0giMgu9g1UAuuA== +"@cspotcode/source-map-support@^0.8.0": + version "0.8.1" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" + integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== + dependencies: + "@jridgewell/trace-mapping" "0.3.9" + "@csstools/color-helpers@^5.0.2": version "5.0.2" resolved "https://registry.yarnpkg.com/@csstools/color-helpers/-/color-helpers-5.0.2.tgz#82592c9a7c2b83c293d9161894e2a6471feb97b8" @@ -823,7 +830,7 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3" integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== -"@hyperswarm/dht@^6.4.4": +"@hyperswarm/dht@^6.5.1": version "6.5.1" resolved "https://registry.yarnpkg.com/@hyperswarm/dht/-/dht-6.5.1.tgz#07e144590f532c2f872e3617117d17f266b2f7a4" integrity sha512-TTTOzuwqbmXNwl+b2FXeHCoR2QS1sqxQvqXwv2i54sdEkKmF8f8t4U8PsRGk5PUO3qA6GxlMThvXixg9Fgs4Yw== @@ -1302,7 +1309,7 @@ "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.24" -"@jridgewell/resolve-uri@^3.1.0": +"@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0": version "3.1.2" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== @@ -1325,6 +1332,14 @@ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== +"@jridgewell/trace-mapping@0.3.9": + version "0.3.9" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" + integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping@^0.3.23", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": version "0.3.25" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" @@ -1424,6 +1439,108 @@ "@morev/utils" "^3.11.1" "@nuxt/kit" "^3.13.2" +"@napi-rs/nice-android-arm-eabi@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-android-arm-eabi/-/nice-android-arm-eabi-1.0.1.tgz#9a0cba12706ff56500df127d6f4caf28ddb94936" + integrity sha512-5qpvOu5IGwDo7MEKVqqyAxF90I6aLj4n07OzpARdgDRfz8UbBztTByBp0RC59r3J1Ij8uzYi6jI7r5Lws7nn6w== + +"@napi-rs/nice-android-arm64@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-android-arm64/-/nice-android-arm64-1.0.1.tgz#32fc32e9649bd759d2a39ad745e95766f6759d2f" + integrity sha512-GqvXL0P8fZ+mQqG1g0o4AO9hJjQaeYG84FRfZaYjyJtZZZcMjXW5TwkL8Y8UApheJgyE13TQ4YNUssQaTgTyvA== + +"@napi-rs/nice-darwin-arm64@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-darwin-arm64/-/nice-darwin-arm64-1.0.1.tgz#d3c44c51b94b25a82d45803e2255891e833e787b" + integrity sha512-91k3HEqUl2fsrz/sKkuEkscj6EAj3/eZNCLqzD2AA0TtVbkQi8nqxZCZDMkfklULmxLkMxuUdKe7RvG/T6s2AA== + +"@napi-rs/nice-darwin-x64@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-darwin-x64/-/nice-darwin-x64-1.0.1.tgz#f1b1365a8370c6a6957e90085a9b4873d0e6a957" + integrity sha512-jXnMleYSIR/+TAN/p5u+NkCA7yidgswx5ftqzXdD5wgy/hNR92oerTXHc0jrlBisbd7DpzoaGY4cFD7Sm5GlgQ== + +"@napi-rs/nice-freebsd-x64@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-freebsd-x64/-/nice-freebsd-x64-1.0.1.tgz#4280f081efbe0b46c5165fdaea8b286e55a8f89e" + integrity sha512-j+iJ/ezONXRQsVIB/FJfwjeQXX7A2tf3gEXs4WUGFrJjpe/z2KB7sOv6zpkm08PofF36C9S7wTNuzHZ/Iiccfw== + +"@napi-rs/nice-linux-arm-gnueabihf@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-linux-arm-gnueabihf/-/nice-linux-arm-gnueabihf-1.0.1.tgz#07aec23a9467ed35eb7602af5e63d42c5d7bd473" + integrity sha512-G8RgJ8FYXYkkSGQwywAUh84m946UTn6l03/vmEXBYNJxQJcD+I3B3k5jmjFG/OPiU8DfvxutOP8bi+F89MCV7Q== + +"@napi-rs/nice-linux-arm64-gnu@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-linux-arm64-gnu/-/nice-linux-arm64-gnu-1.0.1.tgz#038a77134cc6df3c48059d5a5e199d6f50fb9a90" + integrity sha512-IMDak59/W5JSab1oZvmNbrms3mHqcreaCeClUjwlwDr0m3BoR09ZiN8cKFBzuSlXgRdZ4PNqCYNeGQv7YMTjuA== + +"@napi-rs/nice-linux-arm64-musl@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-linux-arm64-musl/-/nice-linux-arm64-musl-1.0.1.tgz#715d0906582ba0cff025109f42e5b84ea68c2bcc" + integrity sha512-wG8fa2VKuWM4CfjOjjRX9YLIbysSVV1S3Kgm2Fnc67ap/soHBeYZa6AGMeR5BJAylYRjnoVOzV19Cmkco3QEPw== + +"@napi-rs/nice-linux-ppc64-gnu@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-linux-ppc64-gnu/-/nice-linux-ppc64-gnu-1.0.1.tgz#ac1c8f781c67b0559fa7a1cd4ae3ca2299dc3d06" + integrity sha512-lxQ9WrBf0IlNTCA9oS2jg/iAjQyTI6JHzABV664LLrLA/SIdD+I1i3Mjf7TsnoUbgopBcCuDztVLfJ0q9ubf6Q== + +"@napi-rs/nice-linux-riscv64-gnu@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-linux-riscv64-gnu/-/nice-linux-riscv64-gnu-1.0.1.tgz#b0a430549acfd3920ffd28ce544e2fe17833d263" + integrity sha512-3xs69dO8WSWBb13KBVex+yvxmUeEsdWexxibqskzoKaWx9AIqkMbWmE2npkazJoopPKX2ULKd8Fm9veEn0g4Ig== + +"@napi-rs/nice-linux-s390x-gnu@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-linux-s390x-gnu/-/nice-linux-s390x-gnu-1.0.1.tgz#5b95caf411ad72a965885217db378c4d09733e97" + integrity sha512-lMFI3i9rlW7hgToyAzTaEybQYGbQHDrpRkg+1gJWEpH0PLAQoZ8jiY0IzakLfNWnVda1eTYYlxxFYzW8Rqczkg== + +"@napi-rs/nice-linux-x64-gnu@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-linux-x64-gnu/-/nice-linux-x64-gnu-1.0.1.tgz#a98cdef517549f8c17a83f0236a69418a90e77b7" + integrity sha512-XQAJs7DRN2GpLN6Fb+ZdGFeYZDdGl2Fn3TmFlqEL5JorgWKrQGRUrpGKbgZ25UeZPILuTKJ+OowG2avN8mThBA== + +"@napi-rs/nice-linux-x64-musl@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-linux-x64-musl/-/nice-linux-x64-musl-1.0.1.tgz#5e26843eafa940138aed437c870cca751c8a8957" + integrity sha512-/rodHpRSgiI9o1faq9SZOp/o2QkKQg7T+DK0R5AkbnI/YxvAIEHf2cngjYzLMQSQgUhxym+LFr+UGZx4vK4QdQ== + +"@napi-rs/nice-win32-arm64-msvc@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-win32-arm64-msvc/-/nice-win32-arm64-msvc-1.0.1.tgz#bd62617d02f04aa30ab1e9081363856715f84cd8" + integrity sha512-rEcz9vZymaCB3OqEXoHnp9YViLct8ugF+6uO5McifTedjq4QMQs3DHz35xBEGhH3gJWEsXMUbzazkz5KNM5YUg== + +"@napi-rs/nice-win32-ia32-msvc@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-win32-ia32-msvc/-/nice-win32-ia32-msvc-1.0.1.tgz#b8b7aad552a24836027473d9b9f16edaeabecf18" + integrity sha512-t7eBAyPUrWL8su3gDxw9xxxqNwZzAqKo0Szv3IjVQd1GpXXVkb6vBBQUuxfIYaXMzZLwlxRQ7uzM2vdUE9ULGw== + +"@napi-rs/nice-win32-x64-msvc@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-win32-x64-msvc/-/nice-win32-x64-msvc-1.0.1.tgz#37d8718b8f722f49067713e9f1e85540c9a3dd09" + integrity sha512-JlF+uDcatt3St2ntBG8H02F1mM45i5SF9W+bIKiReVE6wiy3o16oBP/yxt+RZ+N6LbCImJXJ6bXNO2kn9AXicg== + +"@napi-rs/nice@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice/-/nice-1.0.1.tgz#483d3ff31e5661829a1efb4825591a135c3bfa7d" + integrity sha512-zM0mVWSXE0a0h9aKACLwKmD6nHcRiKrPpCfvaKqG1CqDEyjEawId0ocXxVzPMCAm6kkWr2P025msfxXEnt8UGQ== + optionalDependencies: + "@napi-rs/nice-android-arm-eabi" "1.0.1" + "@napi-rs/nice-android-arm64" "1.0.1" + "@napi-rs/nice-darwin-arm64" "1.0.1" + "@napi-rs/nice-darwin-x64" "1.0.1" + "@napi-rs/nice-freebsd-x64" "1.0.1" + "@napi-rs/nice-linux-arm-gnueabihf" "1.0.1" + "@napi-rs/nice-linux-arm64-gnu" "1.0.1" + "@napi-rs/nice-linux-arm64-musl" "1.0.1" + "@napi-rs/nice-linux-ppc64-gnu" "1.0.1" + "@napi-rs/nice-linux-riscv64-gnu" "1.0.1" + "@napi-rs/nice-linux-s390x-gnu" "1.0.1" + "@napi-rs/nice-linux-x64-gnu" "1.0.1" + "@napi-rs/nice-linux-x64-musl" "1.0.1" + "@napi-rs/nice-win32-arm64-msvc" "1.0.1" + "@napi-rs/nice-win32-ia32-msvc" "1.0.1" + "@napi-rs/nice-win32-x64-msvc" "1.0.1" + "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" @@ -1478,61 +1595,6 @@ resolved "https://registry.yarnpkg.com/@one-ini/wasm/-/wasm-0.1.1.tgz#6013659736c9dbfccc96e8a9c2b3de317df39323" integrity sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw== -"@oven/bun-darwin-aarch64@1.2.11": - version "1.2.11" - resolved "https://registry.yarnpkg.com/@oven/bun-darwin-aarch64/-/bun-darwin-aarch64-1.2.11.tgz#c9331e918d7ed235d459a76183eb2040c5655f92" - integrity sha512-LN7gshxqEHJ1LA0B43Z56Ts3LxRjp2LrIz45FIgeKWE81PYglR9NMNou90gFuYlUtMyarSk6MV9Jdvo2kFnn8Q== - -"@oven/bun-darwin-x64-baseline@1.2.11": - version "1.2.11" - resolved "https://registry.yarnpkg.com/@oven/bun-darwin-x64-baseline/-/bun-darwin-x64-baseline-1.2.11.tgz#82793c47a3e5ef162eaed704968e486d24f85ce4" - integrity sha512-ksZJzq0Id3YsGcs++QnL1oGYjqY5XNihR0MscZ+M4YYruvVKHKim9Aql46+TI55YmKD810HVpeLolIeeTl2JUg== - -"@oven/bun-darwin-x64@1.2.11": - version "1.2.11" - resolved "https://registry.yarnpkg.com/@oven/bun-darwin-x64/-/bun-darwin-x64-1.2.11.tgz#ca476d3f1081a3f4467f9ce32a83362634668508" - integrity sha512-AmmlGdQmzORFeUZRa2Ki9UWYTt5ZGUwTp0z+H0uR4bYHy7sQhpDbNKtZcfKKuLRQ6P23DKc3Lpo+yhR0cg7prg== - -"@oven/bun-linux-aarch64-musl@1.2.11": - version "1.2.11" - resolved "https://registry.yarnpkg.com/@oven/bun-linux-aarch64-musl/-/bun-linux-aarch64-musl-1.2.11.tgz#f6301215469271c9766180deabc30de59e399a84" - integrity sha512-A/h7WxC2GbNus8fupz5EHsD8YugG19uW9GQWDf4tk0YWYuSaUOCP14JYbXbiJ48OFELWNchEc/2azajH+votbA== - -"@oven/bun-linux-aarch64@1.2.11": - version "1.2.11" - resolved "https://registry.yarnpkg.com/@oven/bun-linux-aarch64/-/bun-linux-aarch64-1.2.11.tgz#302e52e9495777fd614f8653043d256c25323e2f" - integrity sha512-jNQ5F6o9qC/KNhBnyxnjVRfiTxZB7thvZ7T+oPZSNh1IV8UWDunEGmUdOqSqoPsigpXHRjbV3DKJKN+YaPQCCA== - -"@oven/bun-linux-x64-baseline@1.2.11": - version "1.2.11" - resolved "https://registry.yarnpkg.com/@oven/bun-linux-x64-baseline/-/bun-linux-x64-baseline-1.2.11.tgz#47ef9ac80b61468051dd32c41588297ee770559e" - integrity sha512-xswex8EPmzX8BqbNXpiwgrpDkaD/FMIaxD85EIBaaksi6I8nln2kzEmlO/uVhbFAn9PPWydi3Q+FCcNnJGRazQ== - -"@oven/bun-linux-x64-musl-baseline@1.2.11": - version "1.2.11" - resolved "https://registry.yarnpkg.com/@oven/bun-linux-x64-musl-baseline/-/bun-linux-x64-musl-baseline-1.2.11.tgz#55367cc107e3fe889f2a0d77972a0c571b23168e" - integrity sha512-YYglLgFkHwNMjECCyM/kZDUZa6UW3ssVtg5k6+8QU1Rp5cPF+0SBlGGTr5ho2lFkNn/ylKmwyuqE1tB45zgVvA== - -"@oven/bun-linux-x64-musl@1.2.11": - version "1.2.11" - resolved "https://registry.yarnpkg.com/@oven/bun-linux-x64-musl/-/bun-linux-x64-musl-1.2.11.tgz#b9ce1b8a3faa797da91c5ca05467323dd1cd5be0" - integrity sha512-yF1Urgsy8xkQu8iAd03ORxuZ/DWrNPCST2r1EVIwjHuzpZ3o2odKjnE9Hnwsq+wcWdCRsakqL/muILB/9aCxeQ== - -"@oven/bun-linux-x64@1.2.11": - version "1.2.11" - resolved "https://registry.yarnpkg.com/@oven/bun-linux-x64/-/bun-linux-x64-1.2.11.tgz#92fc67493587c2b5249f8145954b36bacca55e3a" - integrity sha512-6pH556SgOR2UOgWQfEiYI3DWgkm7T+L9fmBe2dfEYrKCEu/TbXZXOJeMi943NSMIiT3q2gVwlCEdoxZwedQs4A== - -"@oven/bun-windows-x64-baseline@1.2.11": - version "1.2.11" - resolved "https://registry.yarnpkg.com/@oven/bun-windows-x64-baseline/-/bun-windows-x64-baseline-1.2.11.tgz#cb33ed8c8b5240f7dacd7e794dd411853dea64f7" - integrity sha512-uzappBblyA3GlX0PDENU1HTPZR82tzPuNd5jumTiDQ22FZmc2ZqCYTIZ/ngwHKOHDD6Rxdsux8+9EXgVS51G2w== - -"@oven/bun-windows-x64@1.2.11": - version "1.2.11" - resolved "https://registry.yarnpkg.com/@oven/bun-windows-x64/-/bun-windows-x64-1.2.11.tgz#9c91880f0047b9cd555a6fe4826d86b506c7a5cf" - integrity sha512-5mGVsGSS8JWBq8IHXGvFJ7rlET4XCUdDTKEaLLq3O1YaqyZZiPMQFnU70MfkpjPe4stRDZ+/NWBRNDMaNTYQxw== - "@parcel/watcher-android-arm64@2.5.1": version "2.5.1" resolved "https://registry.yarnpkg.com/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz#507f836d7e2042f798c7d07ad19c3546f9848ac1" @@ -1812,6 +1874,11 @@ resolved "https://registry.yarnpkg.com/@rtsao/scc/-/scc-1.1.0.tgz#927dd2fae9bc3361403ac2c7a00c32ddce9ad7e8" integrity sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g== +"@sec-ant/readable-stream@^0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz#60de891bb126abfdc5410fdc6166aca065f10a0c" + integrity sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg== + "@selderee/plugin-htmlparser2@^0.11.0": version "0.11.0" resolved "https://registry.yarnpkg.com/@selderee/plugin-htmlparser2/-/plugin-htmlparser2-0.11.0.tgz#d5b5e29a7ba6d3958a1972c7be16f4b2c188c517" @@ -1850,6 +1917,11 @@ resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== +"@sindresorhus/is@^5.2.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-5.6.0.tgz#41dd6093d34652cddb5d5bdeee04eafc33826668" + integrity sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g== + "@sinonjs/commons@^1.7.0": version "1.8.6" resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.6.tgz#80c516a4dc264c2a69115e7578d62581ff455ed9" @@ -1869,11 +1941,146 @@ resolved "https://registry.yarnpkg.com/@sqltools/formatter/-/formatter-1.2.5.tgz#3abc203c79b8c3e90fd6c156a0c62d5403520e12" integrity sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw== +"@swc/cli@^0.7.3": + version "0.7.3" + resolved "https://registry.yarnpkg.com/@swc/cli/-/cli-0.7.3.tgz#853d9b997bdfb9f58ba5dcb8e23e82ac5dfd8d53" + integrity sha512-rnVXNnlURjdOuPaBIwZ3TmBA44BF/eP0j154LanlgPEYfau74ige7cpKlKkZr1IBqMOG99lAnYNxQipDWA3hdg== + dependencies: + "@swc/counter" "^0.1.3" + "@xhmikosr/bin-wrapper" "^13.0.5" + commander "^8.3.0" + fast-glob "^3.2.5" + minimatch "^9.0.3" + piscina "^4.3.1" + semver "^7.3.8" + slash "3.0.0" + source-map "^0.7.3" + +"@swc/core-darwin-arm64@1.11.24": + version "1.11.24" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.11.24.tgz#c9fcc9c4bad0511fed26210449556d2b33fb2d9a" + integrity sha512-dhtVj0PC1APOF4fl5qT2neGjRLgHAAYfiVP8poJelhzhB/318bO+QCFWAiimcDoyMgpCXOhTp757gnoJJrheWA== + +"@swc/core-darwin-x64@1.11.24": + version "1.11.24" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.11.24.tgz#048ea3ee43281264a62fccb5a944b76d1c56eb24" + integrity sha512-H/3cPs8uxcj2Fe3SoLlofN5JG6Ny5bl8DuZ6Yc2wr7gQFBmyBkbZEz+sPVgsID7IXuz7vTP95kMm1VL74SO5AQ== + +"@swc/core-linux-arm-gnueabihf@1.11.24": + version "1.11.24" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.11.24.tgz#f01ba657a81c67d8fb9f681712e65abf1324cec6" + integrity sha512-PHJgWEpCsLo/NGj+A2lXZ2mgGjsr96ULNW3+T3Bj2KTc8XtMUkE8tmY2Da20ItZOvPNC/69KroU7edyo1Flfbw== + +"@swc/core-linux-arm64-gnu@1.11.24": + version "1.11.24" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.11.24.tgz#9aefca7f7f87c8312c2fa714c1eb731411d8596c" + integrity sha512-C2FJb08+n5SD4CYWCTZx1uR88BN41ZieoHvI8A55hfVf2woT8+6ZiBzt74qW2g+ntZ535Jts5VwXAKdu41HpBg== + +"@swc/core-linux-arm64-musl@1.11.24": + version "1.11.24" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.11.24.tgz#e4805484779bbc59b639eab4f8e45166f3d7a4f7" + integrity sha512-ypXLIdszRo0re7PNNaXN0+2lD454G8l9LPK/rbfRXnhLWDBPURxzKlLlU/YGd2zP98wPcVooMmegRSNOKfvErw== + +"@swc/core-linux-x64-gnu@1.11.24": + version "1.11.24" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.11.24.tgz#e8d8cc50a49903880944379590b73733e150a5d4" + integrity sha512-IM7d+STVZD48zxcgo69L0yYptfhaaE9cMZ+9OoMxirNafhKKXwoZuufol1+alEFKc+Wbwp+aUPe/DeWC/Lh3dg== + +"@swc/core-linux-x64-musl@1.11.24": + version "1.11.24" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.11.24.tgz#f3c46212eb8a793f6a42a36b2a9017a9b1462737" + integrity sha512-DZByJaMVzSfjQKKQn3cqSeqwy6lpMaQDQQ4HPlch9FWtDx/dLcpdIhxssqZXcR2rhaQVIaRQsCqwV6orSDGAGw== + +"@swc/core-win32-arm64-msvc@1.11.24": + version "1.11.24" + resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.11.24.tgz#b1c3327d81a5f94415ac0b1713e192df1c121fbd" + integrity sha512-Q64Ytn23y9aVDKN5iryFi8mRgyHw3/kyjTjT4qFCa8AEb5sGUuSj//AUZ6c0J7hQKMHlg9do5Etvoe61V98/JQ== + +"@swc/core-win32-ia32-msvc@1.11.24": + version "1.11.24" + resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.11.24.tgz#6a944dd6111ec5fae3cf5925b73701e49b109edc" + integrity sha512-9pKLIisE/Hh2vJhGIPvSoTK4uBSPxNVyXHmOrtdDot4E1FUUI74Vi8tFdlwNbaj8/vusVnb8xPXsxF1uB0VgiQ== + +"@swc/core-win32-x64-msvc@1.11.24": + version "1.11.24" + resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.11.24.tgz#eebb5d5ece2710aeb25cc58bd7c5c4c2c046f030" + integrity sha512-sybnXtOsdB+XvzVFlBVGgRHLqp3yRpHK7CrmpuDKszhj/QhmsaZzY/GHSeALlMtLup13M0gqbcQvsTNlAHTg3w== + +"@swc/core@^1.11.24": + version "1.11.24" + resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.11.24.tgz#340425648296964f815c940b8da00fcdb1ff2abd" + integrity sha512-MaQEIpfcEMzx3VWWopbofKJvaraqmL6HbLlw2bFZ7qYqYw3rkhM0cQVEgyzbHtTWwCwPMFZSC2DUbhlZgrMfLg== + dependencies: + "@swc/counter" "^0.1.3" + "@swc/types" "^0.1.21" + optionalDependencies: + "@swc/core-darwin-arm64" "1.11.24" + "@swc/core-darwin-x64" "1.11.24" + "@swc/core-linux-arm-gnueabihf" "1.11.24" + "@swc/core-linux-arm64-gnu" "1.11.24" + "@swc/core-linux-arm64-musl" "1.11.24" + "@swc/core-linux-x64-gnu" "1.11.24" + "@swc/core-linux-x64-musl" "1.11.24" + "@swc/core-win32-arm64-msvc" "1.11.24" + "@swc/core-win32-ia32-msvc" "1.11.24" + "@swc/core-win32-x64-msvc" "1.11.24" + +"@swc/counter@^0.1.3": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@swc/counter/-/counter-0.1.3.tgz#cc7463bd02949611c6329596fccd2b0ec782b0e9" + integrity sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ== + +"@swc/helpers@^0.5.17": + version "0.5.17" + resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.17.tgz#5a7be95ac0f0bf186e7e6e890e7a6f6cda6ce971" + integrity sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A== + dependencies: + tslib "^2.8.0" + +"@swc/types@^0.1.21": + version "0.1.21" + resolved "https://registry.yarnpkg.com/@swc/types/-/types-0.1.21.tgz#6fcadbeca1d8bc89e1ab3de4948cef12344a38c0" + integrity sha512-2YEtj5HJVbKivud9N4bpPBAyZhj4S2Ipe5LkUG94alTpr7in/GU/EARgPAd3BwU+YOmFVJC2+kjqhGRi3r0ZpQ== + dependencies: + "@swc/counter" "^0.1.3" + +"@szmarczak/http-timer@^5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-5.0.1.tgz#c7c1bf1141cdd4751b0399c8fc7b8b664cd5be3a" + integrity sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw== + dependencies: + defer-to-connect "^2.0.1" + +"@tokenizer/token@^0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@tokenizer/token/-/token-0.3.0.tgz#fe98a93fe789247e998c75e74e9c7c63217aa276" + integrity sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A== + "@tootallnate/once@1": version "1.1.2" resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== +"@tsconfig/node10@^1.0.7": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.11.tgz#6ee46400685f130e278128c7b38b7e031ff5b2f2" + integrity sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw== + +"@tsconfig/node12@^1.0.7": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" + integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== + +"@tsconfig/node14@^1.0.0": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" + integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== + +"@tsconfig/node16@^1.0.2": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" + integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== + "@types/accepts@*", "@types/accepts@^1.3.5": version "1.3.7" resolved "https://registry.yarnpkg.com/@types/accepts/-/accepts-1.3.7.tgz#3b98b1889d2b2386604c2bbbe62e4fb51e95b265" @@ -1957,7 +2164,7 @@ resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.10.tgz#61cc8469849e5bcdd0c7044122265c39cec10cf4" integrity sha512-C7srjHiVG3Ey1nR6d511dtDkCEjxuN9W1HWAEjGq8kpcwmNM6JJkpC0xvabM7BXTG2wDq8Eu33iH9aQKa7IvLQ== -"@types/dotenv@^8.2.0": +"@types/dotenv@^8.2.3": version "8.2.3" resolved "https://registry.yarnpkg.com/@types/dotenv/-/dotenv-8.2.3.tgz#c97b3c5b2e97ff3873793a000999e86cd66ff354" integrity sha512-g2FXjlDX/cYuc5CiQvyU/6kkbP1JtmGzh0obW50zD7OKeILVL0NSpPWLXVfqoAGQjom2/SLLx9zHq0KXvD6mbw== @@ -2075,6 +2282,11 @@ resolved "https://registry.yarnpkg.com/@types/http-assert/-/http-assert-1.5.6.tgz#b6b657c38a2350d21ce213139f33b03b2b5fa431" integrity sha512-TTEwmtjgVbYAzZYWyeHPrrtWnfVkm8tQkP8P21uQifPgMRgjrow3XDEYqucuC8SKZJT7pUnhU/JymvjggxO9vw== +"@types/http-cache-semantics@^4.0.2": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz#b979ebad3919799c979b17c72621c0bc0a31c6c4" + integrity sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA== + "@types/http-errors@*": version "2.0.4" resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.4.tgz#7eb47726c391b7345a6ec35ad7f4de469cf5ba4f" @@ -2234,7 +2446,7 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-14.18.63.tgz#1788fa8da838dbb5f9ea994b834278205db6ca2b" integrity sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ== -"@types/node@^17.0.21": +"@types/node@^17.0.21", "@types/node@^17.0.45": version "17.0.45" resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.45.tgz#2c0fafd78705e7a18b7906b5201a522719dc5190" integrity sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw== @@ -2849,6 +3061,104 @@ dependencies: tslib "^2.3.0" +"@xhmikosr/archive-type@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@xhmikosr/archive-type/-/archive-type-7.0.0.tgz#74746a210b59d7d8a77aa69a422f0dae025b3798" + integrity sha512-sIm84ZneCOJuiy3PpWR5bxkx3HaNt1pqaN+vncUBZIlPZCq8ASZH+hBVdu5H8znR7qYC6sKwx+ie2Q7qztJTxA== + dependencies: + file-type "^19.0.0" + +"@xhmikosr/bin-check@^7.0.3": + version "7.0.3" + resolved "https://registry.yarnpkg.com/@xhmikosr/bin-check/-/bin-check-7.0.3.tgz#9ce53f339db419f08e799f4c55b82b38ede13c95" + integrity sha512-4UnCLCs8DB+itHJVkqFp9Zjg+w/205/J2j2wNBsCEAm/BuBmtua2hhUOdAMQE47b1c7P9Xmddj0p+X1XVsfHsA== + dependencies: + execa "^5.1.1" + isexe "^2.0.0" + +"@xhmikosr/bin-wrapper@^13.0.5": + version "13.0.5" + resolved "https://registry.yarnpkg.com/@xhmikosr/bin-wrapper/-/bin-wrapper-13.0.5.tgz#2f5804ac0a3331df11d76d08dab3a3eb674ef0df" + integrity sha512-DT2SAuHDeOw0G5bs7wZbQTbf4hd8pJ14tO0i4cWhRkIJfgRdKmMfkDilpaJ8uZyPA0NVRwasCNAmMJcWA67osw== + dependencies: + "@xhmikosr/bin-check" "^7.0.3" + "@xhmikosr/downloader" "^15.0.1" + "@xhmikosr/os-filter-obj" "^3.0.0" + bin-version-check "^5.1.0" + +"@xhmikosr/decompress-tar@^8.0.1": + version "8.0.1" + resolved "https://registry.yarnpkg.com/@xhmikosr/decompress-tar/-/decompress-tar-8.0.1.tgz#ca9cc65453b5ac59bb5eb897b6f1390a4905b565" + integrity sha512-dpEgs0cQKJ2xpIaGSO0hrzz3Kt8TQHYdizHsgDtLorWajuHJqxzot9Hbi0huRxJuAGG2qiHSQkwyvHHQtlE+fg== + dependencies: + file-type "^19.0.0" + is-stream "^2.0.1" + tar-stream "^3.1.7" + +"@xhmikosr/decompress-tarbz2@^8.0.1": + version "8.0.2" + resolved "https://registry.yarnpkg.com/@xhmikosr/decompress-tarbz2/-/decompress-tarbz2-8.0.2.tgz#1c19b4a59585321a7c64ab0ff1f85f92b66fca1a" + integrity sha512-p5A2r/AVynTQSsF34Pig6olt9CvRj6J5ikIhzUd3b57pUXyFDGtmBstcw+xXza0QFUh93zJsmY3zGeNDlR2AQQ== + dependencies: + "@xhmikosr/decompress-tar" "^8.0.1" + file-type "^19.6.0" + is-stream "^2.0.1" + seek-bzip "^2.0.0" + unbzip2-stream "^1.4.3" + +"@xhmikosr/decompress-targz@^8.0.1": + version "8.0.1" + resolved "https://registry.yarnpkg.com/@xhmikosr/decompress-targz/-/decompress-targz-8.0.1.tgz#54dbd48e83861db43857970c2fcdbd431371e95b" + integrity sha512-mvy5AIDIZjQ2IagMI/wvauEiSNHhu/g65qpdM4EVoYHUJBAmkQWqcPJa8Xzi1aKVTmOA5xLJeDk7dqSjlHq8Mg== + dependencies: + "@xhmikosr/decompress-tar" "^8.0.1" + file-type "^19.0.0" + is-stream "^2.0.1" + +"@xhmikosr/decompress-unzip@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@xhmikosr/decompress-unzip/-/decompress-unzip-7.0.0.tgz#dcf9417829bf9fe474f6064513017949915e14c0" + integrity sha512-GQMpzIpWTsNr6UZbISawsGI0hJ4KA/mz5nFq+cEoPs12UybAqZWKbyIaZZyLbJebKl5FkLpsGBkrplJdjvUoSQ== + dependencies: + file-type "^19.0.0" + get-stream "^6.0.1" + yauzl "^3.1.2" + +"@xhmikosr/decompress@^10.0.1": + version "10.0.1" + resolved "https://registry.yarnpkg.com/@xhmikosr/decompress/-/decompress-10.0.1.tgz#63650498b4f3dd0fb5ee645dc5a35e1a7baad632" + integrity sha512-6uHnEEt5jv9ro0CDzqWlFgPycdE+H+kbJnwyxgZregIMLQ7unQSCNVsYG255FoqU8cP46DyggI7F7LohzEl8Ag== + dependencies: + "@xhmikosr/decompress-tar" "^8.0.1" + "@xhmikosr/decompress-tarbz2" "^8.0.1" + "@xhmikosr/decompress-targz" "^8.0.1" + "@xhmikosr/decompress-unzip" "^7.0.0" + graceful-fs "^4.2.11" + make-dir "^4.0.0" + strip-dirs "^3.0.0" + +"@xhmikosr/downloader@^15.0.1": + version "15.0.1" + resolved "https://registry.yarnpkg.com/@xhmikosr/downloader/-/downloader-15.0.1.tgz#5dd34cf8aa8ce5f1e156e03188f7ba65abfa45c6" + integrity sha512-fiuFHf3Dt6pkX8HQrVBsK0uXtkgkVlhrZEh8b7VgoDqFf+zrgFBPyrwCqE/3nDwn3hLeNz+BsrS7q3mu13Lp1g== + dependencies: + "@xhmikosr/archive-type" "^7.0.0" + "@xhmikosr/decompress" "^10.0.1" + content-disposition "^0.5.4" + defaults "^3.0.0" + ext-name "^5.0.0" + file-type "^19.0.0" + filenamify "^6.0.0" + get-stream "^6.0.1" + got "^13.0.0" + +"@xhmikosr/os-filter-obj@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@xhmikosr/os-filter-obj/-/os-filter-obj-3.0.0.tgz#917d380868d03ce853f90a919716ef73f6b26808" + integrity sha512-siPY6BD5dQ2SZPl3I0OZBHL27ZqZvLEosObsZRQ1NUB8qcxegwt0T9eKtV96JMFQpIz1elhkzqOg4c/Ri6Dp9A== + dependencies: + arch "^3.0.0" + "@xtuc/ieee754@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" @@ -2902,12 +3212,19 @@ acorn-walk@^7.1.1: resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== +acorn-walk@^8.1.1: + version "8.3.4" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.4.tgz#794dd169c3977edf4ba4ea47583587c5866236b7" + integrity sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g== + dependencies: + acorn "^8.11.0" + acorn@^7.1.1: version "7.4.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^8.12.1, acorn@^8.14.0, acorn@^8.14.1, acorn@^8.2.4, acorn@^8.5.0, acorn@^8.8.2, acorn@^8.9.0: +acorn@^8.11.0, acorn@^8.12.1, acorn@^8.14.0, acorn@^8.14.1, acorn@^8.2.4, acorn@^8.4.1, acorn@^8.5.0, acorn@^8.8.2, acorn@^8.9.0: version "8.14.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.1.tgz#721d5dc10f7d5b5609a891773d47731796935dfb" integrity sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg== @@ -3276,6 +3593,16 @@ app-root-path@^3.1.0: resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-3.1.0.tgz#5971a2fc12ba170369a7a1ef018c71e6e47c2e86" integrity sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA== +arch@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/arch/-/arch-3.0.0.tgz#a44e7077da4615fc5f1e3da21fbfc201d2c1817c" + integrity sha512-AmIAC+Wtm2AU8lGfTtHsw0Y9Qtftx2YXEEtiBP10xFUtMOA+sHHx6OAddyL52mUKh1vsXQ6/w1mVDptZCyUt4Q== + +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" @@ -3618,6 +3945,23 @@ bignumber.js@9.0.0: resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.0.tgz#805880f84a329b5eac6e7cb6f8274b6d82bdf075" integrity sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A== +bin-version-check@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/bin-version-check/-/bin-version-check-5.1.0.tgz#788e80e036a87313f8be7908bc20e5abe43f0837" + integrity sha512-bYsvMqJ8yNGILLz1KP9zKLzQ6YpljV3ln1gqhuLkUtyfGi3qXKGuK2p+U4NAvjVFzDFiBBtOpCOSFNuYYEGZ5g== + dependencies: + bin-version "^6.0.0" + semver "^7.5.3" + semver-truncate "^3.0.0" + +bin-version@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/bin-version/-/bin-version-6.0.0.tgz#08ecbe5fc87898b441425e145f9e105064d00315" + integrity sha512-nk5wEsP4RiKjG+vF+uG8lFsEn4d7Y6FVDamzzftSunXOoOcOOkzcWdKVlGgFFwlUQCj63SgnUkLLGF8v7lufhw== + dependencies: + execa "^5.0.0" + find-versions "^5.0.0" + binary-extensions@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" @@ -3730,11 +4074,24 @@ bser@2.1.1: dependencies: node-int64 "^0.4.0" +buffer-crc32@~0.2.3: + version "0.2.13" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== + buffer-from@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== +buffer@^5.2.1: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + buffer@^6.0.3: version "6.0.3" resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" @@ -3755,23 +4112,6 @@ builtins@^5.0.1: dependencies: semver "^7.0.0" -bun@^1.2.11: - version "1.2.11" - resolved "https://registry.yarnpkg.com/bun/-/bun-1.2.11.tgz#eb423adada0b562a04b30a3224c11657f5d99bc1" - integrity sha512-9brVfsp6/TYVsE3lCl1MUxoyKhvljqyL1MNPErgwsOaS9g4Gzi2nY+W5WtRAXGzLrgz5jzsoGHHwyH/rTeRCIg== - optionalDependencies: - "@oven/bun-darwin-aarch64" "1.2.11" - "@oven/bun-darwin-x64" "1.2.11" - "@oven/bun-darwin-x64-baseline" "1.2.11" - "@oven/bun-linux-aarch64" "1.2.11" - "@oven/bun-linux-aarch64-musl" "1.2.11" - "@oven/bun-linux-x64" "1.2.11" - "@oven/bun-linux-x64-baseline" "1.2.11" - "@oven/bun-linux-x64-musl" "1.2.11" - "@oven/bun-linux-x64-musl-baseline" "1.2.11" - "@oven/bun-windows-x64" "1.2.11" - "@oven/bun-windows-x64-baseline" "1.2.11" - busboy@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/busboy/-/busboy-0.3.1.tgz#170899274c5bf38aae27d5c62b71268cd585fd1b" @@ -3807,6 +4147,24 @@ cac@^6.7.14: resolved "https://registry.yarnpkg.com/cac/-/cac-6.7.14.tgz#804e1e6f506ee363cb0e3ccbb09cad5dd9870959" integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ== +cacheable-lookup@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz#3476a8215d046e5a3202a9209dd13fec1f933a27" + integrity sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w== + +cacheable-request@^10.2.8: + version "10.2.14" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-10.2.14.tgz#eb915b665fda41b79652782df3f553449c406b9d" + integrity sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ== + dependencies: + "@types/http-cache-semantics" "^4.0.2" + get-stream "^6.0.1" + http-cache-semantics "^4.1.1" + keyv "^4.5.3" + mimic-response "^4.0.0" + normalize-url "^8.0.0" + responselike "^3.0.0" + cacheable@^1.8.9: version "1.8.10" resolved "https://registry.yarnpkg.com/cacheable/-/cacheable-1.8.10.tgz#c1b36260240d812912a6d3503da3a6e00166f75c" @@ -4089,7 +4447,7 @@ commander@^2.19.0, commander@^2.20.0, commander@^2.20.3: resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== -commander@^6.1.0: +commander@^6.0.0, commander@^6.1.0: version "6.2.1" resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== @@ -4184,7 +4542,7 @@ constantinople@^4.0.1: "@babel/parser" "^7.6.0" "@babel/types" "^7.6.1" -content-disposition@0.5.4: +content-disposition@0.5.4, content-disposition@^0.5.4: version "0.5.4" resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== @@ -4251,6 +4609,11 @@ cosmiconfig@^9.0.0: js-yaml "^4.1.0" parse-json "^5.2.0" +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + cross-env@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-7.0.3.tgz#865264b29677dc015ba8418918965dd232fc54cf" @@ -4458,6 +4821,13 @@ decimal.js@^10.2.1, decimal.js@^10.4.3: resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.5.0.tgz#0f371c7cf6c4898ce0afb09836db73cd82010f22" integrity sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw== +decompress-response@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" + integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== + dependencies: + mimic-response "^3.1.0" + dedent@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" @@ -4483,6 +4853,16 @@ deepmerge@^4.2.2, deepmerge@^4.3.1: resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== +defaults@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-3.0.0.tgz#60b9e0003df1018737c2ce3f4289d8f64786c9c4" + integrity sha512-RsqXDEAALjfRTro+IFNKpcPCt0/Cy2FqHSIlnomiJp9YGadpQnrtbRpSgN2+np21qHcIKiva4fiOQGjS9/qR/A== + +defer-to-connect@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" + integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== + define-data-property@^1.0.1, define-data-property@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" @@ -4585,6 +4965,11 @@ diff-sequences@^27.5.1: resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.5.1.tgz#eaecc0d327fd68c8d9672a1e64ab8dccb2ef5327" integrity sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ== +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" @@ -5004,7 +5389,7 @@ esbuild@^0.21.3: "@esbuild/win32-ia32" "0.21.5" "@esbuild/win32-x64" "0.21.5" -esbuild@^0.25.2, esbuild@~0.25.0: +esbuild@^0.25.2, esbuild@^0.25.3, esbuild@~0.25.0: version "0.25.3" resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.25.3.tgz#371f7cb41283e5b2191a96047a7a89562965a285" integrity sha512-qKA6Pvai73+M2FtftpNKRxJ78GIjmFXFxd/1DVBqGo/qNhLSfv+G12n9pNoWdytJC8U00TrViOwpjT0zgqQS8Q== @@ -5425,7 +5810,7 @@ execa@^0.10.0: signal-exit "^3.0.0" strip-eof "^1.0.0" -execa@^5.0.0: +execa@^5.0.0, execa@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== @@ -5514,6 +5899,21 @@ exsolve@^1.0.1, exsolve@^1.0.4, exsolve@^1.0.5: resolved "https://registry.yarnpkg.com/exsolve/-/exsolve-1.0.5.tgz#1f5b6b4fe82ad6b28a173ccb955a635d77859dcf" integrity sha512-pz5dvkYYKQ1AHVrgOzBKWeP4u4FRb3a6DNK2ucr0OoNwYIU4QWsJ+NM36LLzORT+z845MzKHHhpXiUF5nvQoJg== +ext-list@^2.0.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/ext-list/-/ext-list-2.2.2.tgz#0b98e64ed82f5acf0f2931babf69212ef52ddd37" + integrity sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA== + dependencies: + mime-db "^1.28.0" + +ext-name@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ext-name/-/ext-name-5.0.0.tgz#70781981d183ee15d13993c8822045c506c8f0a6" + integrity sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ== + dependencies: + ext-list "^2.0.0" + sort-keys-length "^1.0.0" + extend-object@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/extend-object/-/extend-object-1.0.0.tgz#42514f84015d1356caf5187969dfb2bc1bda0823" @@ -5549,12 +5949,12 @@ fast-equals@^5.0.1: resolved "https://registry.yarnpkg.com/fast-equals/-/fast-equals-5.2.2.tgz#885d7bfb079fac0ce0e8450374bce29e9b742484" integrity sha512-V7/RktU11J3I36Nwq2JnZEM7tNm17eBJz+u25qdxBZeCKiX6BkVSZQjwWIr+IobgnZy+ag73tTZgZi7tr0LrBw== -fast-fifo@^1.1.0, fast-fifo@^1.3.2: +fast-fifo@^1.1.0, fast-fifo@^1.2.0, fast-fifo@^1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/fast-fifo/-/fast-fifo-1.3.2.tgz#286e31de96eb96d38a97899815740ba2a4f3640c" integrity sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ== -fast-glob@^3.2.11, fast-glob@^3.2.12, fast-glob@^3.2.9, fast-glob@^3.3.2, fast-glob@^3.3.3: +fast-glob@^3.2.11, fast-glob@^3.2.12, fast-glob@^3.2.5, fast-glob@^3.2.9, fast-glob@^3.3.2, fast-glob@^3.3.3: version "3.3.3" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818" integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== @@ -5623,6 +6023,16 @@ file-entry-cache@^6.0.1: dependencies: flat-cache "^3.0.4" +file-type@^19.0.0, file-type@^19.6.0: + version "19.6.0" + resolved "https://registry.yarnpkg.com/file-type/-/file-type-19.6.0.tgz#b43d8870453363891884cf5e79bb3e4464f2efd3" + integrity sha512-VZR5I7k5wkD0HgFnMsq5hOsSc710MJMu5Nc5QYsbe38NN5iPV/XTObYLc/cpttRTf6lX538+5uO1ZQRhYibiZQ== + dependencies: + get-stream "^9.0.1" + strtok3 "^9.0.1" + token-types "^6.0.0" + uint8array-extras "^1.3.0" + filelist@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" @@ -5630,6 +6040,18 @@ filelist@^1.0.4: dependencies: minimatch "^5.0.1" +filename-reserved-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/filename-reserved-regex/-/filename-reserved-regex-3.0.0.tgz#3d5dd6d4e2d73a3fed2ebc4cd0b3448869a081f7" + integrity sha512-hn4cQfU6GOT/7cFHXBqeBg2TbrMBgdD0kcjLhvSQYYwm3s4B6cjvBfb7nBALJLAXqmU5xajSa7X2NnUud/VCdw== + +filenamify@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/filenamify/-/filenamify-6.0.0.tgz#38def94098c62154c42a41d822650f5f55bcbac2" + integrity sha512-vqIlNogKeyD3yzrm0yhRMQg8hOVwYcYRfjEoODd49iCprMn4HL85gK3HcykQE53EPIpX3HcAbGA5ELQv216dAQ== + dependencies: + filename-reserved-regex "^3.0.0" + fill-range@^7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" @@ -5666,6 +6088,13 @@ find-up@^5.0.0: locate-path "^6.0.0" path-exists "^4.0.0" +find-versions@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/find-versions/-/find-versions-5.1.0.tgz#973f6739ce20f5e439a27eba8542a4b236c8e685" + integrity sha512-+iwzCJ7C5v5KgcBuueqVoNiHVoQpwiUK5XFLjf0affFTep+Wcw93tPvmb8tqujDNmzhBDPddnWV/qgWSXgq+Hg== + dependencies: + semver-regex "^4.0.5" + fixpack@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/fixpack/-/fixpack-4.0.0.tgz#28b9fb8ca04f89aab382021cfa826b36dc381dfd" @@ -5736,6 +6165,11 @@ form-data-encoder@1.7.2: resolved "https://registry.yarnpkg.com/form-data-encoder/-/form-data-encoder-1.7.2.tgz#1f1ae3dccf58ed4690b86d87e4f57c654fbab040" integrity sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A== +form-data-encoder@^2.1.2: + version "2.1.4" + resolved "https://registry.yarnpkg.com/form-data-encoder/-/form-data-encoder-2.1.4.tgz#261ea35d2a70d48d30ec7a9603130fa5515e9cd5" + integrity sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw== + form-data@^3.0.0: version "3.0.3" resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.3.tgz#349c8f2c9d8f8f0c879ee0eb7cc0d300018d6b09" @@ -5902,11 +6336,19 @@ get-stream@^3.0.0: resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" integrity sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ== -get-stream@^6.0.0: +get-stream@^6.0.0, get-stream@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== +get-stream@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-9.0.1.tgz#95157d21df8eb90d1647102b63039b1df60ebd27" + integrity sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA== + dependencies: + "@sec-ant/readable-stream" "^0.4.1" + is-stream "^4.0.1" + get-symbol-description@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.1.0.tgz#7bdd54e0befe8ffc9f3b4e203220d9f1e881b6ee" @@ -6041,6 +6483,23 @@ gopd@^1.0.1, gopd@^1.2.0: resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== +got@^13.0.0: + version "13.0.0" + resolved "https://registry.yarnpkg.com/got/-/got-13.0.0.tgz#a2402862cef27a5d0d1b07c0fb25d12b58175422" + integrity sha512-XfBk1CxOOScDcMr9O1yKkNaQyy865NbYs+F7dr4H0LZMVgCj2Le59k6PqbNHoL5ToeaEQUYh6c6yMfVcc6SJxA== + dependencies: + "@sindresorhus/is" "^5.2.0" + "@szmarczak/http-timer" "^5.0.1" + cacheable-lookup "^7.0.0" + cacheable-request "^10.2.8" + decompress-response "^6.0.0" + form-data-encoder "^2.1.2" + get-stream "^6.0.1" + http2-wrapper "^2.1.10" + lowercase-keys "^3.0.0" + p-cancelable "^3.0.0" + responselike "^3.0.0" + graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.11, graceful-fs@^4.2.4, graceful-fs@^4.2.9: version "4.2.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" @@ -6319,6 +6778,11 @@ htmlparser2@^8.0.0, htmlparser2@^8.0.2: domutils "^3.0.1" entities "^4.4.0" +http-cache-semantics@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" + integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== + http-errors@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" @@ -6358,6 +6822,14 @@ http-proxy-agent@^7.0.2: agent-base "^7.1.0" debug "^4.3.4" +http2-wrapper@^2.1.10: + version "2.2.1" + resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-2.2.1.tgz#310968153dcdedb160d8b72114363ef5fce1f64a" + integrity sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ== + dependencies: + quick-lru "^5.1.1" + resolve-alpn "^1.2.0" + https-proxy-agent@^5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" @@ -6435,7 +6907,7 @@ identity-obj-proxy@^3.0.0: dependencies: harmony-reflect "^1.4.6" -ieee754@^1.2.1: +ieee754@^1.1.13, ieee754@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== @@ -6513,6 +6985,13 @@ ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== +inspect-with-kind@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/inspect-with-kind/-/inspect-with-kind-1.0.5.tgz#fce151d4ce89722c82ca8e9860bb96f9167c316c" + integrity sha512-MAQUJuIo7Xqk8EVNP+6d3CKq9c80hi4tjIbIAT6lmGW9W6WzlHiu9PS8uSuUYU+Do+j1baiFp3H25XEVxDIG2g== + dependencies: + kind-of "^6.0.2" + internal-slot@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.1.0.tgz#1eac91762947d2f7056bc838d93e13b2e9604961" @@ -6692,6 +7171,11 @@ is-path-inside@^3.0.3: resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== +is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== + is-plain-object@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" @@ -6739,11 +7223,16 @@ is-stream@^1.1.0: resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== -is-stream@^2.0.0: +is-stream@^2.0.0, is-stream@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== +is-stream@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-4.0.1.tgz#375cf891e16d2e4baec250b85926cffc14720d9b" + integrity sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A== + is-string@^1.0.7, is-string@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.1.1.tgz#92ea3f3d5c5b6e039ca8677e5ac8d07ea773cbb9" @@ -7760,7 +8249,7 @@ lodash@4.x, lodash@^4.17.11, lodash@^4.17.21, lodash@^4.7.0: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -log4js@^6.7.1: +log4js@^6.7.1, log4js@^6.9.1: version "6.9.1" resolved "https://registry.yarnpkg.com/log4js/-/log4js-6.9.1.tgz#aba5a3ff4e7872ae34f8b4c533706753709e38b6" integrity sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g== @@ -7800,6 +8289,11 @@ lower-case@^2.0.2: dependencies: tslib "^2.0.3" +lowercase-keys@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-3.0.0.tgz#c5e7d442e37ead247ae9db117a9d0a467c89d4f2" + integrity sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ== + lru-cache@^10.2.0, lru-cache@^10.4.3: version "10.4.3" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" @@ -7872,7 +8366,7 @@ make-dir@^4.0.0: dependencies: semver "^7.5.3" -make-error@1.x: +make-error@1.x, make-error@^1.1.1: version "1.3.6" resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== @@ -7962,6 +8456,11 @@ mime-db@1.52.0: resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== +mime-db@^1.28.0: + version "1.54.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.54.0.tgz#cddb3ee4f9c64530dff640236661d42cb6a314f5" + integrity sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ== + mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.35, mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.35" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" @@ -7984,6 +8483,16 @@ mimic-fn@^2.1.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== +mimic-response@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" + integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== + +mimic-response@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-4.0.0.tgz#35468b19e7c75d10f5165ea25e75a5ceea7cf70f" + integrity sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg== + minimatch@9.0.1: version "9.0.1" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.1.tgz#8a555f541cf976c622daf078bb28f29fb927c253" @@ -8005,7 +8514,7 @@ minimatch@^5.0.1: dependencies: brace-expansion "^2.0.1" -minimatch@^9.0.4, minimatch@^9.0.5: +minimatch@^9.0.3, minimatch@^9.0.4, minimatch@^9.0.5: version "9.0.5" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== @@ -8027,6 +8536,11 @@ mitt@^3.0.1: resolved "https://registry.yarnpkg.com/mitt/-/mitt-3.0.1.tgz#ea36cf0cc30403601ae074c8f77b7092cdab36d1" integrity sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw== +mkdirp@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-3.0.1.tgz#e44e4c5607fb279c168241713cc6e0fea9adcb50" + integrity sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg== + mlly@^1.2.0, mlly@^1.7.3, mlly@^1.7.4: version "1.7.4" resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.7.4.tgz#3d7295ea2358ec7a271eaa5d000a0f84febe100f" @@ -8131,6 +8645,11 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== +ncp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ncp/-/ncp-2.0.0.tgz#195a21d6c46e361d2fb1281ba38b91e9df7bdbb3" + integrity sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA== + nearley@^2.20.1: version "2.20.1" resolved "https://registry.yarnpkg.com/nearley/-/nearley-2.20.1.tgz#246cd33eff0d012faf197ff6774d7ac78acdd474" @@ -8279,6 +8798,11 @@ normalize-range@^0.1.2: resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== +normalize-url@^8.0.0: + version "8.0.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-8.0.1.tgz#9b7d96af9836577c58f5883e939365fa15623a4a" + integrity sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w== + npm-run-path@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" @@ -8480,6 +9004,11 @@ own-keys@^1.0.1: object-keys "^1.1.1" safe-push-apply "^1.0.0" +p-cancelable@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-3.0.0.tgz#63826694b54d61ca1c20ebcb6d3ecf5e14cd8050" + integrity sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw== + p-event@4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/p-event/-/p-event-4.2.0.tgz#af4b049c8acd91ae81083ebd1e6f5cae2044c1b5" @@ -8697,6 +9226,16 @@ peberminta@^0.9.0: resolved "https://registry.yarnpkg.com/peberminta/-/peberminta-0.9.0.tgz#8ec9bc0eb84b7d368126e71ce9033501dca2a352" integrity sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ== +peek-readable@^5.3.1: + version "5.4.2" + resolved "https://registry.yarnpkg.com/peek-readable/-/peek-readable-5.4.2.tgz#aff1e1ba27a7d6911ddb103f35252ffc1787af49" + integrity sha512-peBp3qZyuS6cNIJ2akRNG1uo1WJ1d0wTxg/fxMdZ0BqCVhx242bSFHM9eNqflfJVS9SsgkzgT/1UgnsurBOTMg== + +pend@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" + integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== + perfect-debounce@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/perfect-debounce/-/perfect-debounce-1.0.0.tgz#9c2e8bc30b169cc984a58b7d5b28049839591d2a" @@ -8727,6 +9266,13 @@ pirates@^4.0.4: resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.7.tgz#643b4a18c4257c8a65104b73f3049ce9a0a15e22" integrity sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA== +piscina@^4.3.1: + version "4.9.2" + resolved "https://registry.yarnpkg.com/piscina/-/piscina-4.9.2.tgz#80f2c2375231720337c703e443941adfac8caf75" + integrity sha512-Fq0FERJWFEUpB4eSY59wSNwXD4RYqR+nR/WiEVcZW8IWfVBxJJafcgTEZDQo8k3w0sUarJ8RyVbbUF4GQ2LGbQ== + optionalDependencies: + "@napi-rs/nice" "^1.0.1" + pkg-dir@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" @@ -8839,7 +9385,7 @@ prettier-linter-helpers@^1.0.0: dependencies: fast-diff "^1.1.2" -prettier@^2.8.7: +prettier@^2.8.8: version "2.8.8" resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== @@ -9097,6 +9643,11 @@ queue-microtask@^1.2.2: resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== +quick-lru@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" + integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== + railroad-diagrams@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz#eb7e6267548ddedfb899c1b90e57374559cddb7e" @@ -9221,7 +9772,7 @@ regenerator-runtime@^0.13.7, regenerator-runtime@^0.13.9: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== -regenerator-runtime@^0.14.0: +regenerator-runtime@^0.14.0, regenerator-runtime@^0.14.1: version "0.14.1" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== @@ -9276,6 +9827,11 @@ requires-port@^1.0.0: resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== +resolve-alpn@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" + integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== + resolve-cwd@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" @@ -9312,6 +9868,13 @@ resolve@^1.10.1, resolve@^1.15.1, resolve@^1.20.0, resolve@^1.22.2, resolve@^1.2 path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" +responselike@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-3.0.0.tgz#20decb6c298aff0dbee1c355ca95461d42823626" + integrity sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg== + dependencies: + lowercase-keys "^3.0.0" + ret@~0.1.10: version "0.1.15" resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" @@ -9492,6 +10055,13 @@ scule@^1.3.0: resolved "https://registry.yarnpkg.com/scule/-/scule-1.3.0.tgz#6efbd22fd0bb801bdcc585c89266a7d2daa8fbd3" integrity sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g== +seek-bzip@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/seek-bzip/-/seek-bzip-2.0.0.tgz#f0478ab6acd0ac72345d18dc7525dd84d3c706a2" + integrity sha512-SMguiTnYrhpLdk3PwfzHeotrcwi8bNV4iemL9tx9poR/yeaMYwB9VzR1w7b57DuWpuqR8n6oZboi0hj3AxZxQg== + dependencies: + commander "^6.0.0" + selderee@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/selderee/-/selderee-0.11.0.tgz#6af0c7983e073ad3e35787ffe20cefd9daf0ec8a" @@ -9506,7 +10076,19 @@ selderee@^0.6.0: dependencies: parseley "^0.7.0" -semver@7.x, semver@^7.0.0, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0, semver@^7.7.1: +semver-regex@^4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/semver-regex/-/semver-regex-4.0.5.tgz#fbfa36c7ba70461311f5debcb3928821eb4f9180" + integrity sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw== + +semver-truncate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/semver-truncate/-/semver-truncate-3.0.0.tgz#0e3b4825d4a4225d8ae6e7c72231182b42edba40" + integrity sha512-LJWA9kSvMolR51oDE6PN3kALBNaUdkxzAGcexw8gjMA8xr5zUqK0JiR3CgARSqanYF3Z1YHvsErb1KDgh+v7Rg== + dependencies: + semver "^7.3.5" + +semver@7.x, semver@^7.0.0, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0, semver@^7.7.1: version "7.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.1.tgz#abd5098d82b18c6c81f6074ff2647fd3e7220c9f" integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA== @@ -9719,7 +10301,7 @@ sisteransi@^1.0.5: resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== -slash@^3.0.0: +slash@3.0.0, slash@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== @@ -9782,6 +10364,20 @@ sodium-universal@^5.0.0: dependencies: sodium-native "^5.0.1" +sort-keys-length@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/sort-keys-length/-/sort-keys-length-1.0.1.tgz#9cb6f4f4e9e48155a6aa0671edd336ff1479a188" + integrity sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw== + dependencies: + sort-keys "^1.0.0" + +sort-keys@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" + integrity sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg== + dependencies: + is-plain-obj "^1.0.0" + "source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.1, source-map-js@^1.0.2, source-map-js@^1.2.0, source-map-js@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" @@ -9871,7 +10467,7 @@ streamsearch@0.1.2: resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-0.1.2.tgz#808b9d0e56fc273d809ba57338e929919a1a9f1a" integrity sha512-jos8u++JKm0ARcSUTAZXOVC0mSox7Bhn6sBgty73P1f3JGf7yG2clTbBNHUdde/kdvP2FESam+vM6l8jBrNxHA== -streamx@^2.12.4, streamx@^2.13.2, streamx@^2.14.0: +streamx@^2.12.4, streamx@^2.13.2, streamx@^2.14.0, streamx@^2.15.0: version "2.22.0" resolved "https://registry.yarnpkg.com/streamx/-/streamx-2.22.0.tgz#cd7b5e57c95aaef0ff9b2aef7905afa62ec6e4a7" integrity sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw== @@ -9986,6 +10582,14 @@ strip-bom@^4.0.0: resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== +strip-dirs@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-dirs/-/strip-dirs-3.0.0.tgz#7c9a5d7822ce079a9db40387a4b20d5654746f42" + integrity sha512-I0sdgcFTfKQlUPZyAqPJmSG3HLO9rWDFnxonnIbskYNM3DwFOeTNB5KzVq3dA1GdRAc/25b5Y7UO2TQfKWw4aQ== + dependencies: + inspect-with-kind "^1.0.5" + is-plain-obj "^1.1.0" + strip-eof@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" @@ -10013,6 +10617,14 @@ strip-literal@^3.0.0: dependencies: js-tokens "^9.0.1" +strtok3@^9.0.1: + version "9.1.1" + resolved "https://registry.yarnpkg.com/strtok3/-/strtok3-9.1.1.tgz#f8feb188b3fcdbf9b8819cc9211a824c3731df38" + integrity sha512-FhwotcEqjr241ZbjFzjlIYg6c5/L/s4yBGWSMvJ9UoExiSqL+FnFA/CaeZx17WGaZMS/4SOZp8wH18jSS4R4lw== + dependencies: + "@tokenizer/token" "^0.3.0" + peek-readable "^5.3.1" + stylelint-config-html@>=1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/stylelint-config-html/-/stylelint-config-html-1.1.0.tgz#999db19aea713b7ff6dde92ada76e4c1bd812b66" @@ -10223,6 +10835,15 @@ tapable@^2.1.1, tapable@^2.2.0: resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== +tar-stream@^3.1.7: + version "3.1.7" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-3.1.7.tgz#24b3fb5eabada19fe7338ed6d26e5f7c482e792b" + integrity sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ== + dependencies: + b4a "^1.6.4" + fast-fifo "^1.2.0" + streamx "^2.15.0" + terminal-link@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" @@ -10297,6 +10918,11 @@ throttle-debounce@^5.0.0: resolved "https://registry.yarnpkg.com/throttle-debounce/-/throttle-debounce-5.0.2.tgz#ec5549d84e053f043c9fd0f2a6dd892ff84456b1" integrity sha512-B71/4oyj61iNH0KeCamLuE2rmKuTO5byTOSVwECM5FA7TiAiAW+UqTKZ9ERueC4qvgSttUhdmq1mXC3kJqGX7A== +through@^2.3.8: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== + time-ordered-set@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/time-ordered-set/-/time-ordered-set-2.0.1.tgz#66327419aa983a6e8c8f9e1b6832f721462c95b7" @@ -10394,6 +11020,14 @@ token-stream@1.0.0: resolved "https://registry.yarnpkg.com/token-stream/-/token-stream-1.0.0.tgz#cc200eab2613f4166d27ff9afc7ca56d49df6eb4" integrity sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg== +token-types@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/token-types/-/token-types-6.0.0.tgz#1ab26be1ef9c434853500c071acfe5c8dd6544a3" + integrity sha512-lbDrTLVsHhOMljPscd0yitpozq7Ga2M5Cvez5AjGg8GASBjtt6iERCAJ93yommPmz62fb45oFIXHEZ3u9bfJEA== + dependencies: + "@tokenizer/token" "^0.3.0" + ieee754 "^1.2.1" + toposort@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/toposort/-/toposort-2.0.2.tgz#ae21768175d1559d48bef35420b2f4962f09c330" @@ -10510,6 +11144,25 @@ ts-mysql-migrate@^1.0.2: "@types/mysql" "^2.15.8" mysql "^2.18.1" +ts-node@^10.9.2: + version "10.9.2" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.2.tgz#70f021c9e185bccdca820e26dc413805c101c71f" + integrity sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ== + dependencies: + "@cspotcode/source-map-support" "^0.8.0" + "@tsconfig/node10" "^1.0.7" + "@tsconfig/node12" "^1.0.7" + "@tsconfig/node14" "^1.0.0" + "@tsconfig/node16" "^1.0.2" + acorn "^8.4.1" + acorn-walk "^8.1.1" + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + v8-compile-cache-lib "^3.0.1" + yn "3.1.1" + tsconfig-paths@^3.15.0: version "3.15.0" resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" @@ -10534,7 +11187,7 @@ tslib@^1.10.0, tslib@^1.9.3: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.2.0, tslib@^2.3.0, tslib@^2.5.0, tslib@^2.8.1: +tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.2.0, tslib@^2.3.0, tslib@^2.5.0, tslib@^2.8.0, tslib@^2.8.1: version "2.8.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== @@ -10716,7 +11369,7 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" -typeorm@^0.3.16: +typeorm@^0.3.16, typeorm@^0.3.22: version "0.3.22" resolved "https://registry.yarnpkg.com/typeorm/-/typeorm-0.3.22.tgz#74b56af4a495b6c8eda887dc9aa4670782b991ff" integrity sha512-P/Tsz3UpJ9+K0oryC0twK5PO27zejLYYwMsE8SISfZc1lVHX+ajigiOyWsKbuXpEFMjD9z7UjLzY3+ElVOMMDA== @@ -10735,7 +11388,7 @@ typeorm@^0.3.16: uuid "^11.1.0" yargs "^17.7.2" -typescript@^4.9.4, typescript@^4.9.5: +typescript@^4.9.5: version "4.9.5" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== @@ -10765,6 +11418,11 @@ uglify-js@^3.1.4: resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.19.3.tgz#82315e9bbc6f2b25888858acd1fff8441035b77f" integrity sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ== +uint8array-extras@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/uint8array-extras/-/uint8array-extras-1.4.0.tgz#e42a678a6dd335ec2d21661333ed42f44ae7cc74" + integrity sha512-ZPtzy0hu4cZjv3z5NW9gfKnNLjoz4y6uv4HlelAjDK7sY/xOkKZv9xK/WQpcsBB3jEybChz9DPC2U/+cusjJVQ== + unbox-primitive@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.1.0.tgz#8d9d2c9edeea8460c7f35033a88867944934d1e2" @@ -10775,6 +11433,14 @@ unbox-primitive@^1.1.0: has-symbols "^1.1.0" which-boxed-primitive "^1.1.1" +unbzip2-stream@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz#b0da04c4371311df771cdc215e87f2130991ace7" + integrity sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg== + dependencies: + buffer "^5.2.1" + through "^2.3.8" + unctx@^2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/unctx/-/unctx-2.4.1.tgz#93346a98d4a38c64cc5861f6098f4ce7c6f8164a" @@ -10993,6 +11659,11 @@ uuid@^9.0.0, uuid@^9.0.1: resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== +v8-compile-cache-lib@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" + integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== + v8-to-istanbul@^8.1.0: version "8.1.1" resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz#77b752fd3975e31bbcef938f85e9bd1c7a8d60ed" @@ -11701,6 +12372,19 @@ yargs@^17.7.2: y18n "^5.0.5" yargs-parser "^21.1.1" +yauzl@^3.1.2: + version "3.2.0" + resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-3.2.0.tgz#7b6cb548f09a48a6177ea0be8ece48deb7da45c0" + integrity sha512-Ow9nuGZE+qp1u4JIPvg+uCiUr7xGQWdff7JQSk5VGYTAZMDe2q8lxJ10ygv10qmSj031Ty/6FNJpLO4o1Sgc+w== + dependencies: + buffer-crc32 "~0.2.3" + pend "~1.2.0" + +yn@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" From ed45f662f36bbf9a8efc88ef59c24f461d4962da Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Sun, 4 May 2025 10:28:01 +0200 Subject: [PATCH 020/123] fix lint --- backend/src/graphql/schema.ts | 2 +- federation/src/graphql/api/1_0/schema.ts | 7 +------ federation/src/graphql/api/1_1/schema.ts | 17 ++++++----------- 3 files changed, 8 insertions(+), 18 deletions(-) diff --git a/backend/src/graphql/schema.ts b/backend/src/graphql/schema.ts index 6652f0d39..6a0e3db5e 100644 --- a/backend/src/graphql/schema.ts +++ b/backend/src/graphql/schema.ts @@ -29,7 +29,7 @@ export const schema = async (): Promise => { CommunityResolver, ContributionLinkResolver, ContributionMessageResolver, - ContributionResolver, + ContributionResolver, GdtResolver, KlicktippResolver, ProjectBrandingResolver, diff --git a/federation/src/graphql/api/1_0/schema.ts b/federation/src/graphql/api/1_0/schema.ts index 9d106fefc..7b88fba5c 100644 --- a/federation/src/graphql/api/1_0/schema.ts +++ b/federation/src/graphql/api/1_0/schema.ts @@ -5,10 +5,5 @@ import { PublicKeyResolver } from './resolver/PublicKeyResolver' import { SendCoinsResolver } from './resolver/SendCoinsResolver' export const getApiResolvers = (): NonEmptyArray => { - return [ - AuthenticationResolver, - PublicCommunityInfoResolver, - PublicKeyResolver, - SendCoinsResolver, - ] + return [AuthenticationResolver, PublicCommunityInfoResolver, PublicKeyResolver, SendCoinsResolver] } diff --git a/federation/src/graphql/api/1_1/schema.ts b/federation/src/graphql/api/1_1/schema.ts index dc16ad475..07871cefa 100644 --- a/federation/src/graphql/api/1_1/schema.ts +++ b/federation/src/graphql/api/1_1/schema.ts @@ -1,14 +1,9 @@ import { NonEmptyArray } from 'type-graphql' -import { AuthenticationResolver } from "../1_0/resolver/AuthenticationResolver" -import { PublicCommunityInfoResolver } from "../1_0/resolver/PublicCommunityInfoResolver" -import { SendCoinsResolver } from "../1_0/resolver/SendCoinsResolver" -import { PublicKeyResolver } from "./resolver/PublicKeyResolver" +import { AuthenticationResolver } from '../1_0/resolver/AuthenticationResolver' +import { PublicCommunityInfoResolver } from '../1_0/resolver/PublicCommunityInfoResolver' +import { SendCoinsResolver } from '../1_0/resolver/SendCoinsResolver' +import { PublicKeyResolver } from './resolver/PublicKeyResolver' export const getApiResolvers = (): NonEmptyArray => { - return [ - AuthenticationResolver, - PublicCommunityInfoResolver, - PublicKeyResolver, - SendCoinsResolver, - ] -} \ No newline at end of file + return [AuthenticationResolver, PublicCommunityInfoResolver, PublicKeyResolver, SendCoinsResolver] +} From be65b99b047cd221a7c4462f6e32afa9717c43dd Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Sun, 4 May 2025 10:43:58 +0200 Subject: [PATCH 021/123] finetuning workflows --- .github/workflows/lint.yml | 28 ++++++++++++++++++++++++++++ .github/workflows/test_e2e.yml | 3 ++- frontend/package.json | 1 - frontend/turbo.json | 3 --- 4 files changed, 30 insertions(+), 5 deletions(-) create mode 100644 .github/workflows/lint.yml diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml new file mode 100644 index 000000000..0a3179b26 --- /dev/null +++ b/.github/workflows/lint.yml @@ -0,0 +1,28 @@ +name: Linting with biomejs + +on: push + +jobs: + lint: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Setup Biome + uses: biomejs/setup-biome@v2 + with: + version: latest + - name: Lint - Config-Schema + run: biome ci ./config-schema + - name: Lint - Backend + run: biome ci ./backend + - name: Lint - Frontend + run: biome ci ./frontend + - name: Lint - Admin + run: biome ci ./admin + - name: Lint - Database + run: biome ci ./database + - name: Lint - DHT Node + run: biome ci ./dht-node + - name: Lint - Federation + run: biome ci ./federation \ No newline at end of file diff --git a/.github/workflows/test_e2e.yml b/.github/workflows/test_e2e.yml index eeae17439..a0d442c5a 100644 --- a/.github/workflows/test_e2e.yml +++ b/.github/workflows/test_e2e.yml @@ -38,7 +38,8 @@ jobs: cd backend cp .env.test_e2e .env cd .. - bun turbo backend#build frontend#build + bun turbo backend#build + bun turbo frontend#build bun turbo backend#start frontend#start --env-mode=loose & - name: End-to-end tests | prepare diff --git a/frontend/package.json b/frontend/package.json index bbcf535da..38f709479 100755 --- a/frontend/package.json +++ b/frontend/package.json @@ -4,7 +4,6 @@ "private": true, "scripts": { "dev": "concurrently \"yarn watch-scss\" \"vite\"", - "prebuild": "yarn compile-scss", "build": "vite build", "start": "vite preview", "postbuild": "uname | grep -q Linux && find build -type f -regex '.*\\.\\(html\\|js\\|css\\|svg\\|json\\)' -exec gzip -9 -k {} + || echo 'Skip precompress on non-Linux'", diff --git a/frontend/turbo.json b/frontend/turbo.json index 4b0b2727c..13d3bc9f8 100644 --- a/frontend/turbo.json +++ b/frontend/turbo.json @@ -11,9 +11,6 @@ "cache": false, "persistent": true }, - "dev": { - "dependsOn": ["compile-scss"] - }, "build": { "dependsOn": ["compile-scss"] } From 8238e6972c5fd740f04f83026e1a0bb64a844276 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Sun, 4 May 2025 10:54:52 +0200 Subject: [PATCH 022/123] try if status check needs to be a job or can be a step --- .github/workflows/lint.yml | 6 +----- .github/workflows/test_backend.yml | 28 ++++------------------------ .github/workflows/test_config.yml | 6 +++--- .github/workflows/test_database.yml | 4 ++-- 4 files changed, 10 insertions(+), 34 deletions(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 0a3179b26..1c6be871f 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -16,11 +16,7 @@ jobs: run: biome ci ./config-schema - name: Lint - Backend run: biome ci ./backend - - name: Lint - Frontend - run: biome ci ./frontend - - name: Lint - Admin - run: biome ci ./admin - - name: Lint - Database + - name: Lint - Database Up run: biome ci ./database - name: Lint - DHT Node run: biome ci ./dht-node diff --git a/.github/workflows/test_backend.yml b/.github/workflows/test_backend.yml index 74abd0403..33d345dc4 100644 --- a/.github/workflows/test_backend.yml +++ b/.github/workflows/test_backend.yml @@ -40,8 +40,6 @@ jobs: name: Unit tests - Backend needs: files-changed runs-on: ubuntu-latest - outputs: - test-success: ${{ steps.test.outputs.success }} steps: - name: Set Node.js version uses: actions/setup-node@v4 @@ -63,29 +61,11 @@ jobs: - name: install dependencies run: cd out && yarn install --frozen-lockfile --production=false + - name: Locales - Backend + run: cd out && yarn locales + - name: Wait for MariaDB to be ready run: docker run --rm --network gradido_internal-net busybox sh -c 'until nc -z mariadb 3306; do echo waiting for db; sleep 1; done;' - name: Backend | Unit tests - id: test - run: | - cd out && turbo backend#lint backend#test backend#build backend#typecheck - echo "success=$([ $? -eq 0 ] && echo true || echo false)" >> $GITHUB_OUTPUT - - lint: - if: needs.files-changed.outputs.backend == 'true' - name: Lint - Backend - needs: [files-changed, unit_test] - runs-on: ubuntu-latest - steps: - - name: Check result from previous step - run: if [ "${{ needs.unit_test.outputs.test-success }}" != "true" ]; then exit 1; fi - - locales: - if: needs.files-changed.outputs.backend == 'true' - name: Locales - Backend - needs: [files-changed, unit_test] - runs-on: ubuntu-latest - steps: - - name: Check result from previous step - run: if [ "${{ needs.unit_test.outputs.test-success }}" != "true" ]; then exit 1; fi + run: cd out && turbo backend#test backend#build backend#typecheck \ No newline at end of file diff --git a/.github/workflows/test_config.yml b/.github/workflows/test_config.yml index b52291694..8a681ab4c 100644 --- a/.github/workflows/test_config.yml +++ b/.github/workflows/test_config.yml @@ -21,7 +21,7 @@ jobs: list-files: shell build: - name: typecheck and lint - Config-Schema + name: typecheck - Config-Schema if: needs.files-changed.outputs.config == 'true' || needs.files-changed.outputs.docker-compose == 'true' needs: files-changed runs-on: ubuntu-latest @@ -38,6 +38,6 @@ jobs: - name: install dependencies run: cd out && yarn install --frozen-lockfile --production=false - - name: typecheck and lint - run: cd out && turbo typecheck lint + - name: typecheck + run: cd out && turbo typecheck diff --git a/.github/workflows/test_database.yml b/.github/workflows/test_database.yml index 641f7f459..4b1c4886c 100644 --- a/.github/workflows/test_database.yml +++ b/.github/workflows/test_database.yml @@ -81,5 +81,5 @@ jobs: - name: install dependencies run: cd out && yarn install --frozen-lockfile --production=false - - name: Database | Lint - run: cd out && turbo lint build typecheck \ No newline at end of file + - name: Database + run: cd out && turbo build typecheck \ No newline at end of file From 7d4e5932df43d02789fb3723e930b09aa7266b86 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Sun, 4 May 2025 10:59:51 +0200 Subject: [PATCH 023/123] let run inside module folder to use individuell biome configs --- .github/workflows/lint.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 1c6be871f..08a41579d 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -13,12 +13,12 @@ jobs: with: version: latest - name: Lint - Config-Schema - run: biome ci ./config-schema + run: cd ./config-schema && biome ci . - name: Lint - Backend - run: biome ci ./backend + run: cd ./backend && biome ci . - name: Lint - Database Up - run: biome ci ./database + run: cd ./database && biome ci . - name: Lint - DHT Node - run: biome ci ./dht-node + run: cd ./dht-node && biome ci . - name: Lint - Federation - run: biome ci ./federation \ No newline at end of file + run: cd ./federation && biome ci . \ No newline at end of file From bba30533b5b0d5ef579ee5ab35b573b2450d96b2 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Sun, 4 May 2025 11:08:01 +0200 Subject: [PATCH 024/123] move linting complete into extra job --- .github/workflows/lint.yml | 71 +++++++++++++++++++++++++-- .github/workflows/test_backend.yml | 2 +- .github/workflows/test_dht_node.yml | 15 +----- .github/workflows/test_federation.yml | 15 +----- 4 files changed, 69 insertions(+), 34 deletions(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 08a41579d..57bef6de0 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -5,6 +5,12 @@ on: push jobs: lint: runs-on: ubuntu-latest + outputs: + config-schema: ${{ steps.changes.outputs.config-schema }} + backend: ${{ steps.changes.outputs.backend }} + database: ${{ steps.changes.outputs.database }} + dht-node: ${{ steps.changes.outputs.dht-node }} + federation: ${{ steps.changes.outputs.federation }} steps: - name: Checkout uses: actions/checkout@v4 @@ -13,12 +19,67 @@ jobs: with: version: latest - name: Lint - Config-Schema - run: cd ./config-schema && biome ci . + id: config-schema + run: | + cd ./config-schema && biome ci . + echo "success=$([ $? -eq 0 ] && echo true || echo false)" >> $GITHUB_OUTPUT - name: Lint - Backend - run: cd ./backend && biome ci . + id: backend + run: | + cd ./backend && biome ci . + echo "success=$([ $? -eq 0 ] && echo true || echo false)" >> $GITHUB_OUTPUT - name: Lint - Database Up - run: cd ./database && biome ci . + id: database + run: | + cd ./database && biome ci . + echo "success=$([ $? -eq 0 ] && echo true || echo false)" >> $GITHUB_OUTPUT - name: Lint - DHT Node - run: cd ./dht-node && biome ci . + id: dht-node + run: | + cd ./dht-node && biome ci . + echo "success=$([ $? -eq 0 ] && echo true || echo false)" >> $GITHUB_OUTPUT - name: Lint - Federation - run: cd ./federation && biome ci . \ No newline at end of file + id: federation + run: | + cd ./federation && biome ci . + echo "success=$([ $? -eq 0 ] && echo true || echo false)" >> $GITHUB_OUTPUT + + lint_config_schema: + name: Lint - Config-Schema + needs: lint + runs-on: ubuntu-latest + steps: + - name: Check result from previous step + run: if [ "${{ needs.lint.outputs.config-schema }}" != "true" ]; then exit 1; fi + + lint_backend: + name: Lint - Backend + needs: lint + runs-on: ubuntu-latest + steps: + - name: Check result from previous step + run: if [ "${{ needs.lint.outputs.backend }}" != "true" ]; then exit 1; fi + + lint_database: + name: Lint - Database Up + needs: lint + runs-on: ubuntu-latest + steps: + - name: Check result from previous step + run: if [ "${{ needs.lint.outputs.database }}" != "true" ]; then exit 1; fi + + lint_dht_node: + name: Lint - DHT Node + needs: lint + runs-on: ubuntu-latest + steps: + - name: Check result from previous step + run: if [ "${{ needs.lint.outputs.dht-node }}" != "true" ]; then exit 1; fi + + lint_federation: + name: Lint - Federation + needs: lint + runs-on: ubuntu-latest + steps: + - name: Check result from previous step + run: if [ "${{ needs.lint.outputs.federation }}" != "true" ]; then exit 1; fi \ No newline at end of file diff --git a/.github/workflows/test_backend.yml b/.github/workflows/test_backend.yml index 33d345dc4..6c3dae05b 100644 --- a/.github/workflows/test_backend.yml +++ b/.github/workflows/test_backend.yml @@ -62,7 +62,7 @@ jobs: run: cd out && yarn install --frozen-lockfile --production=false - name: Locales - Backend - run: cd out && yarn locales + run: cd out/backend && yarn locales - name: Wait for MariaDB to be ready run: docker run --rm --network gradido_internal-net busybox sh -c 'until nc -z mariadb 3306; do echo waiting for db; sleep 1; done;' diff --git a/.github/workflows/test_dht_node.yml b/.github/workflows/test_dht_node.yml index 6aee0b4cc..1fd2045bf 100644 --- a/.github/workflows/test_dht_node.yml +++ b/.github/workflows/test_dht_node.yml @@ -39,8 +39,6 @@ jobs: if: needs.files-changed.outputs.config == 'true' || needs.files-changed.outputs.database == 'true' || needs.files-changed.outputs.dht_node == 'true' || needs.files-changed.outputs.docker-compose == 'true' needs: files-changed runs-on: ubuntu-latest - outputs: - test-success: ${{ steps.test.outputs.success }} steps: - name: Set Node.js version uses: actions/setup-node@v4 @@ -66,16 +64,5 @@ jobs: run: docker run --rm --network gradido_internal-net busybox sh -c 'until nc -z mariadb 3306; do echo waiting for db; sleep 1; done;' - name: run unit test & lint & build & typecheck - id: test - run: | - cd out && turbo dht-node#lint dht-node#test dht-node#build dht-node#typecheck - echo "success=$([ $? -eq 0 ] && echo true || echo false)" >> $GITHUB_OUTPUT + run: cd out && turbo dht-node#lint dht-node#test dht-node#build dht-node#typecheck - lint: - name: Lint - DHT Node - if: needs.files-changed.outputs.dht_node == 'true' - needs: [files-changed, unit_test] - runs-on: ubuntu-latest - steps: - - name: Check result from previous step - run: if [ "${{ needs.unit_test.outputs.test-success }}" != "true" ]; then exit 1; fi diff --git a/.github/workflows/test_federation.yml b/.github/workflows/test_federation.yml index 46350853c..bd670912c 100644 --- a/.github/workflows/test_federation.yml +++ b/.github/workflows/test_federation.yml @@ -39,8 +39,6 @@ jobs: if: needs.files-changed.outputs.database == 'true' || needs.files-changed.outputs.docker-compose == 'true' || needs.files-changed.outputs.federation == 'true' || needs.files-changed.outputs.mariadb == 'true' needs: files-changed runs-on: ubuntu-latest - outputs: - test-success: ${{ steps.test.outputs.success }} steps: - name: Set Node.js version uses: actions/setup-node@v4 @@ -67,15 +65,4 @@ jobs: - name: Federation | Unit tests id: test - run: | - cd out && turbo federation#lint federation#test federation#build federation#typecheck - echo "success=$([ $? -eq 0 ] && echo true || echo false)" >> $GITHUB_OUTPUT - - lint: - name: Lint - Federation - if: needs.files-changed.outputs.federation == 'true' - needs: [files-changed, unit_test] - runs-on: ubuntu-latest - steps: - - name: Check result from previous step - run: if [ "${{ needs.unit_test.outputs.test-success }}" != "true" ]; then exit 1; fi + run: cd out && turbo federation#lint federation#test federation#build federation#typecheck \ No newline at end of file From 88711008faf6b4c052083af1dd6ee743525be3ce Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Sun, 4 May 2025 11:28:19 +0200 Subject: [PATCH 025/123] fix test --- .../1_1/resolver/PublicKeyResolver.test.ts | 2 +- .../api/1_1/resolver/PublicKeyResolver.ts | 23 +++++++++++++++---- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/federation/src/graphql/api/1_1/resolver/PublicKeyResolver.test.ts b/federation/src/graphql/api/1_1/resolver/PublicKeyResolver.test.ts index 2c8452de5..2c2b3bb48 100644 --- a/federation/src/graphql/api/1_1/resolver/PublicKeyResolver.test.ts +++ b/federation/src/graphql/api/1_1/resolver/PublicKeyResolver.test.ts @@ -35,7 +35,7 @@ describe('PublicKeyResolver', () => { beforeEach(async () => { const homeCom = new DbFederatedCommunity() homeCom.foreign = false - homeCom.apiVersion = '1_0' + homeCom.apiVersion = '1_1' homeCom.endPoint = 'endpoint-url' homeCom.publicKey = Buffer.from( '9f6dcd0d985cc7105cd71c3417d9c291b126c8ca90513197de02191f928ef713', diff --git a/federation/src/graphql/api/1_1/resolver/PublicKeyResolver.ts b/federation/src/graphql/api/1_1/resolver/PublicKeyResolver.ts index 3cc9ed62b..6e621eb59 100644 --- a/federation/src/graphql/api/1_1/resolver/PublicKeyResolver.ts +++ b/federation/src/graphql/api/1_1/resolver/PublicKeyResolver.ts @@ -1,6 +1,21 @@ -import { Resolver } from 'type-graphql' - -import { PublicKeyResolver as PublicKeyResolver_1_0 } from '../../1_0/resolver/PublicKeyResolver' +import { federationLogger as logger } from '@/server/logger' +import { FederatedCommunity as DbFederatedCommunity } from 'database' +import { Query, Resolver } from 'type-graphql' +import { GetPublicKeyResult } from '../../1_0/model/GetPublicKeyResult' @Resolver() -export class PublicKeyResolver extends PublicKeyResolver_1_0 {} +export class PublicKeyResolver { + @Query(() => GetPublicKeyResult) + async getPublicKey(): Promise { + logger.debug(`getPublicKey() via apiVersion=1_0 ...`) + const homeCom = await DbFederatedCommunity.findOneOrFail({ + where: { + foreign: false, + apiVersion: '1_1', + }, + }) + const publicKeyHex = homeCom.publicKey.toString('hex') + logger.debug(`getPublicKey()-1_1... return publicKey=${publicKeyHex}`) + return new GetPublicKeyResult(publicKeyHex) + } +} From ef49d4c687c92c3cdf79df15851a5ff464e3dabc Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Sun, 4 May 2025 11:39:16 +0200 Subject: [PATCH 026/123] biome --- .github/workflows/lint.yml | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 57bef6de0..24f7b362a 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -21,27 +21,33 @@ jobs: - name: Lint - Config-Schema id: config-schema run: | - cd ./config-schema && biome ci . + cd ./config-schema + biome ci . + echo $? echo "success=$([ $? -eq 0 ] && echo true || echo false)" >> $GITHUB_OUTPUT - name: Lint - Backend id: backend run: | - cd ./backend && biome ci . + cd ./backend + biome ci . echo "success=$([ $? -eq 0 ] && echo true || echo false)" >> $GITHUB_OUTPUT - name: Lint - Database Up id: database run: | - cd ./database && biome ci . + cd ./database + biome ci . echo "success=$([ $? -eq 0 ] && echo true || echo false)" >> $GITHUB_OUTPUT - name: Lint - DHT Node id: dht-node run: | - cd ./dht-node && biome ci . + cd ./dht-node + biome ci . echo "success=$([ $? -eq 0 ] && echo true || echo false)" >> $GITHUB_OUTPUT - name: Lint - Federation id: federation run: | - cd ./federation && biome ci . + cd ./federation + biome ci . echo "success=$([ $? -eq 0 ] && echo true || echo false)" >> $GITHUB_OUTPUT lint_config_schema: From b3783f5cb6f9c15a8d9d518ed60d0bd6f71db355 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Sun, 4 May 2025 11:46:00 +0200 Subject: [PATCH 027/123] fix action definition error --- .github/workflows/lint.yml | 10 +++++----- .github/workflows/test_backend.yml | 14 +++++++++++++- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 24f7b362a..4ff2632e4 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -6,11 +6,11 @@ jobs: lint: runs-on: ubuntu-latest outputs: - config-schema: ${{ steps.changes.outputs.config-schema }} - backend: ${{ steps.changes.outputs.backend }} - database: ${{ steps.changes.outputs.database }} - dht-node: ${{ steps.changes.outputs.dht-node }} - federation: ${{ steps.changes.outputs.federation }} + config-schema: ${{ steps.config-schema.outputs.success }} + backend: ${{ steps.backend.outputs.success }} + database: ${{ steps.database.outputs.success }} + dht-node: ${{ steps.dht-node.outputs.success }} + federation: ${{ steps.federation.outputs.success }} steps: - name: Checkout uses: actions/checkout@v4 diff --git a/.github/workflows/test_backend.yml b/.github/workflows/test_backend.yml index 6c3dae05b..96c6ecfd8 100644 --- a/.github/workflows/test_backend.yml +++ b/.github/workflows/test_backend.yml @@ -68,4 +68,16 @@ jobs: run: docker run --rm --network gradido_internal-net busybox sh -c 'until nc -z mariadb 3306; do echo waiting for db; sleep 1; done;' - name: Backend | Unit tests - run: cd out && turbo backend#test backend#build backend#typecheck \ No newline at end of file + run: cd out && turbo backend#test backend#build backend#typecheck + + locales: + if: needs.files-changed.outputs.backend == 'true' + name: Locales - Backend + needs: files-changed + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v3 + + - name: Backend | Locales + run: cd out/backend && yarn locales \ No newline at end of file From e48026d8e67c08e2e5dd20bde0ad70f19dd0ebea Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Sun, 4 May 2025 11:46:59 +0200 Subject: [PATCH 028/123] fix wrong path --- .github/workflows/test_backend.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test_backend.yml b/.github/workflows/test_backend.yml index 96c6ecfd8..0f9383e1b 100644 --- a/.github/workflows/test_backend.yml +++ b/.github/workflows/test_backend.yml @@ -80,4 +80,4 @@ jobs: uses: actions/checkout@v3 - name: Backend | Locales - run: cd out/backend && yarn locales \ No newline at end of file + run: cd backend && yarn locales \ No newline at end of file From 25aa28f984a0c71f3e9fe9a5f50abe81f34a286a Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Sun, 4 May 2025 12:11:45 +0200 Subject: [PATCH 029/123] try out --- .github/workflows/test_admin_interface.yml | 25 +++++++++++++++++----- .github/workflows/test_frontend.yml | 9 +++++--- 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/.github/workflows/test_admin_interface.yml b/.github/workflows/test_admin_interface.yml index 91d7bf5da..32c586e5d 100644 --- a/.github/workflows/test_admin_interface.yml +++ b/.github/workflows/test_admin_interface.yml @@ -61,6 +61,12 @@ jobs: - name: install dependencies run: cd out && yarn install --frozen-lockfile --production=false + - name: upload out + uses: actions/upload-artifact@v4 + with: + name: out + path: out + - name: Admin Interface | Unit tests id: test run: | @@ -73,8 +79,17 @@ jobs: needs: [files-changed, unit_test] runs-on: ubuntu-latest steps: - - name: Check result from previous step - run: if [ "${{ needs.unit_test.outputs.test-success }}" != "true" ]; then exit 1; fi + - name: download out + uses: actions/download-artifact@v4 + with: + name: out + path: out + + - name: run lint + run: cd out && yarn lint + + #- name: Check result from previous step + # run: if [ "${{ needs.unit_test.outputs.test-success }}" != "true" ]; then exit 1; fi stylelint: if: needs.files-changed.outputs.admin == 'true' @@ -91,11 +106,11 @@ jobs: locales: if: needs.files-changed.outputs.admin == 'true' name: Locales - Admin Interface - needs: [files-changed, unit_test] + needs: files-changed runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v3 - - name: Check result from previous step - run: if [ "${{ needs.unit_test.outputs.test-success }}" != "true" ]; then exit 1; fi \ No newline at end of file + - name: Admin Interface | Locales + run: cd admin && yarn locales \ No newline at end of file diff --git a/.github/workflows/test_frontend.yml b/.github/workflows/test_frontend.yml index c10d3f6cf..dd376427e 100644 --- a/.github/workflows/test_frontend.yml +++ b/.github/workflows/test_frontend.yml @@ -88,8 +88,11 @@ jobs: locales: if: needs.files-changed.outputs.frontend == 'true' name: Locales - Frontend - needs: [files-changed, unit_test] + needs: files-changed runs-on: ubuntu-latest steps: - - name: Check result from previous step - run: if [ "${{ needs.unit_test.outputs.test-success }}" != "true" ]; then exit 1; fi + - name: Checkout code + uses: actions/checkout@v3 + + - name: Frontend | Locales + run: cd frontend && yarn locales From 115946c8cd669538d2a56d298885a51113aa9e32 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Sun, 4 May 2025 12:15:46 +0200 Subject: [PATCH 030/123] check compression speed --- .github/workflows/test_admin_interface.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/test_admin_interface.yml b/.github/workflows/test_admin_interface.yml index 32c586e5d..f5781de50 100644 --- a/.github/workflows/test_admin_interface.yml +++ b/.github/workflows/test_admin_interface.yml @@ -66,6 +66,7 @@ jobs: with: name: out path: out + compression-level: 2 - name: Admin Interface | Unit tests id: test @@ -104,9 +105,7 @@ jobs: run: if [ "${{ needs.unit_test.outputs.test-success }}" != "true" ]; then exit 1; fi locales: - if: needs.files-changed.outputs.admin == 'true' name: Locales - Admin Interface - needs: files-changed runs-on: ubuntu-latest steps: - name: Checkout code From 1d96e774975367b8625e49ee578e59d08cc839d1 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Sun, 4 May 2025 12:29:17 +0200 Subject: [PATCH 031/123] remove artifact experiments, move eslint of e2e to devDependencies --- .github/workflows/test_admin_interface.yml | 28 +++++----------------- .github/workflows/test_e2e.yml | 2 +- e2e-tests/package.json | 12 ++++++---- 3 files changed, 14 insertions(+), 28 deletions(-) diff --git a/.github/workflows/test_admin_interface.yml b/.github/workflows/test_admin_interface.yml index f5781de50..7108bd0b1 100644 --- a/.github/workflows/test_admin_interface.yml +++ b/.github/workflows/test_admin_interface.yml @@ -61,13 +61,6 @@ jobs: - name: install dependencies run: cd out && yarn install --frozen-lockfile --production=false - - name: upload out - uses: actions/upload-artifact@v4 - with: - name: out - path: out - compression-level: 2 - - name: Admin Interface | Unit tests id: test run: | @@ -75,27 +68,16 @@ jobs: echo "success=$([ $? -eq 0 ] && echo true || echo false)" >> $GITHUB_OUTPUT lint: - if: needs.files-changed.outputs.admin == 'true' name: Lint - Admin Interface - needs: [files-changed, unit_test] + needs: unit_test runs-on: ubuntu-latest steps: - - name: download out - uses: actions/download-artifact@v4 - with: - name: out - path: out - - - name: run lint - run: cd out && yarn lint - - #- name: Check result from previous step - # run: if [ "${{ needs.unit_test.outputs.test-success }}" != "true" ]; then exit 1; fi + - name: Check result from previous step + run: if [ "${{ needs.unit_test.outputs.test-success }}" != "true" ]; then exit 1; fi stylelint: - if: needs.files-changed.outputs.admin == 'true' name: Stylelint - Admin Interface - needs: [files-changed, unit_test] + needs: unit_test runs-on: ubuntu-latest steps: - name: Checkout code @@ -105,7 +87,9 @@ jobs: run: if [ "${{ needs.unit_test.outputs.test-success }}" != "true" ]; then exit 1; fi locales: + if: needs.files-changed.outputs.admin == 'true' name: Locales - Admin Interface + needs: files-changed runs-on: ubuntu-latest steps: - name: Checkout code diff --git a/.github/workflows/test_e2e.yml b/.github/workflows/test_e2e.yml index a0d442c5a..c792f9a0b 100644 --- a/.github/workflows/test_e2e.yml +++ b/.github/workflows/test_e2e.yml @@ -48,7 +48,7 @@ jobs: chmod +x /opt/cucumber-json-formatter sudo ln -fs /opt/cucumber-json-formatter /usr/bin/cucumber-json-formatter cd e2e-tests/ - bun install + bun install --production - name: wait for frontend and backend to be ready run: | diff --git a/e2e-tests/package.json b/e2e-tests/package.json index e2ecbb4f9..0cd40035a 100644 --- a/e2e-tests/package.json +++ b/e2e-tests/package.json @@ -29,9 +29,14 @@ "dependencies": { "@badeball/cypress-cucumber-preprocessor": "^18.0.1", "@cypress/browserify-preprocessor": "^3.0.2", + "cypress": "^12.16.0", + "jwt-decode": "^3.1.2", + "multiple-cucumber-html-reporter": "^3.4.0", + "typescript": "^4.7.4" + }, + "devDependencies": { "@typescript-eslint/eslint-plugin": "^5.38.0", "@typescript-eslint/parser": "^5.38.0", - "cypress": "^12.16.0", "eslint": "^8.23.1", "eslint-config-prettier": "^8.3.0", "eslint-config-standard": "^16.0.3", @@ -41,9 +46,6 @@ "eslint-plugin-node": "^11.1.0", "eslint-plugin-prettier": "^4.2.1", "eslint-plugin-promise": "^6.1.1", - "jwt-decode": "^3.1.2", - "multiple-cucumber-html-reporter": "^3.4.0", - "prettier": "^2.7.1", - "typescript": "^4.7.4" + "prettier": "^2.7.1" } } From bd91966b2bbcf235654fd54ec164d6581e918000 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Sun, 4 May 2025 14:42:24 +0200 Subject: [PATCH 032/123] try out typecheck sepaerat from test --- .github/workflows/test_backend.yml | 51 ++++++++++++++++++++++-------- 1 file changed, 38 insertions(+), 13 deletions(-) diff --git a/.github/workflows/test_backend.yml b/.github/workflows/test_backend.yml index 0f9383e1b..d62477811 100644 --- a/.github/workflows/test_backend.yml +++ b/.github/workflows/test_backend.yml @@ -61,23 +61,48 @@ jobs: - name: install dependencies run: cd out && yarn install --frozen-lockfile --production=false - - name: Locales - Backend - run: cd out/backend && yarn locales - - name: Wait for MariaDB to be ready run: docker run --rm --network gradido_internal-net busybox sh -c 'until nc -z mariadb 3306; do echo waiting for db; sleep 1; done;' - name: Backend | Unit tests - run: cd out && turbo backend#test backend#build backend#typecheck + run: cd out && turbo backend#test backend#build + + typecheck: + if: needs.files-changed.outputs.backend == 'true' + name: Typecheck - Backend + needs: files-changed + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v3 + + - name: Set Node.js version + uses: actions/setup-node@v4 + with: + node-version: '18.20.7' + + - name: Install turbo + run: yarn global add turbo@^2 + + - name: Prune backend with turbos help + run: turbo prune backend + + - name: install dependencies + run: | + cd out && yarn install --frozen-lockfile --production=true + cd backend && yarn add typescript + + - name: Backend | Typecheck + run: cd out && turbo backend#typecheck locales: - if: needs.files-changed.outputs.backend == 'true' - name: Locales - Backend - needs: files-changed - runs-on: ubuntu-latest - steps: - - name: Checkout code - uses: actions/checkout@v3 + if: needs.files-changed.outputs.backend == 'true' + name: Locales - Backend + needs: files-changed + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v3 - - name: Backend | Locales - run: cd backend && yarn locales \ No newline at end of file + - name: Backend | Locales + run: cd backend && yarn locales \ No newline at end of file From 328eaac8b0566f787699d61332732f1fc50cb301 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Sun, 4 May 2025 14:50:45 +0200 Subject: [PATCH 033/123] try bun instead of turbo prune and yarn install --- .github/workflows/test_backend.yml | 26 +++++++++----------------- backend/turbo.json | 3 +++ 2 files changed, 12 insertions(+), 17 deletions(-) diff --git a/.github/workflows/test_backend.yml b/.github/workflows/test_backend.yml index d62477811..8d94de276 100644 --- a/.github/workflows/test_backend.yml +++ b/.github/workflows/test_backend.yml @@ -47,25 +47,22 @@ jobs: node-version: '18.20.7' - name: Checkout code - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: docker-compose mariadb run: docker compose -f docker-compose.yml -f docker-compose.test.yml up --detach --no-deps mariadb - - - name: Install turbo - run: yarn global add turbo@^2 - - name: Prune backend with turbos help - run: turbo prune backend + - name: install bun + uses: oven-sh/setup-bun@v2 - name: install dependencies - run: cd out && yarn install --frozen-lockfile --production=false + run: bun install --frozen-lockfile --production=false - name: Wait for MariaDB to be ready run: docker run --rm --network gradido_internal-net busybox sh -c 'until nc -z mariadb 3306; do echo waiting for db; sleep 1; done;' - name: Backend | Unit tests - run: cd out && turbo backend#test backend#build + run: bun turbo backend#test backend#build typecheck: if: needs.files-changed.outputs.backend == 'true' @@ -81,19 +78,14 @@ jobs: with: node-version: '18.20.7' - - name: Install turbo - run: yarn global add turbo@^2 - - - name: Prune backend with turbos help - run: turbo prune backend + - name: install bun + uses: oven-sh/setup-bun@v2 - name: install dependencies - run: | - cd out && yarn install --frozen-lockfile --production=true - cd backend && yarn add typescript + run: bun install --frozen-lockfile --production=true - name: Backend | Typecheck - run: cd out && turbo backend#typecheck + run: bun turbo backend#typecheck locales: if: needs.files-changed.outputs.backend == 'true' diff --git a/backend/turbo.json b/backend/turbo.json index f519af680..7427fa978 100644 --- a/backend/turbo.json +++ b/backend/turbo.json @@ -9,6 +9,9 @@ "lint": { "dependsOn": ["locales", "database#build"] }, + "typecheck": { + "dependsOn": ["database#build", "config-schema#build"] + }, "test": { "dependsOn": ["database#up:backend_test", "config-schema#build", "database#build"] }, From b851b882ef26e3049936481f01fcd35f8eabbfe8 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Sun, 4 May 2025 14:52:52 +0200 Subject: [PATCH 034/123] fix problem with bun --- .github/workflows/test_backend.yml | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/.github/workflows/test_backend.yml b/.github/workflows/test_backend.yml index 8d94de276..983961060 100644 --- a/.github/workflows/test_backend.yml +++ b/.github/workflows/test_backend.yml @@ -56,13 +56,13 @@ jobs: uses: oven-sh/setup-bun@v2 - name: install dependencies - run: bun install --frozen-lockfile --production=false + run: bun install --frozen-lockfile - name: Wait for MariaDB to be ready run: docker run --rm --network gradido_internal-net busybox sh -c 'until nc -z mariadb 3306; do echo waiting for db; sleep 1; done;' - name: Backend | Unit tests - run: bun turbo backend#test backend#build + run: bun turbo backend#test typecheck: if: needs.files-changed.outputs.backend == 'true' @@ -82,10 +82,12 @@ jobs: uses: oven-sh/setup-bun@v2 - name: install dependencies - run: bun install --frozen-lockfile --production=true + run: | + bun install --frozen-lockfile --production + cd backend && bun add typescript - name: Backend | Typecheck - run: bun turbo backend#typecheck + run: bun turbo backend#typecheck backend#build locales: if: needs.files-changed.outputs.backend == 'true' From 000ec3acdc20d16771b514334f08942fd5954f40 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Sun, 4 May 2025 14:55:30 +0200 Subject: [PATCH 035/123] full bun install --- .github/workflows/test_backend.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/test_backend.yml b/.github/workflows/test_backend.yml index 983961060..0dd68d762 100644 --- a/.github/workflows/test_backend.yml +++ b/.github/workflows/test_backend.yml @@ -82,9 +82,7 @@ jobs: uses: oven-sh/setup-bun@v2 - name: install dependencies - run: | - bun install --frozen-lockfile --production - cd backend && bun add typescript + run: bun install --frozen-lockfile - name: Backend | Typecheck run: bun turbo backend#typecheck backend#build From 6ce638bbc96c7c919ef2053c8431af0e15f12a8b Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Sun, 4 May 2025 15:07:44 +0200 Subject: [PATCH 036/123] try out slightly improvements --- .github/workflows/test_admin_interface.yml | 11 ++--- .github/workflows/test_backend.yml | 2 +- .github/workflows/test_dht_node.yml | 6 +-- .github/workflows/test_federation.yml | 4 +- .github/workflows/test_frontend.yml | 51 +++++++++++++--------- 5 files changed, 41 insertions(+), 33 deletions(-) diff --git a/.github/workflows/test_admin_interface.yml b/.github/workflows/test_admin_interface.yml index 7108bd0b1..a2d1fe5ef 100644 --- a/.github/workflows/test_admin_interface.yml +++ b/.github/workflows/test_admin_interface.yml @@ -52,19 +52,16 @@ jobs: - name: Checkout code uses: actions/checkout@v3 - - name: Install turbo - run: yarn global add turbo@^2 - - - name: Prune admin with turbos help - run: turbo prune admin + - name: install bun + uses: oven-sh/setup-bun@v2 - name: install dependencies - run: cd out && yarn install --frozen-lockfile --production=false + run: bun install --frozen-lockfile - name: Admin Interface | Unit tests id: test run: | - cd out && turbo admin#test admin#lint + bun turbo admin#test admin#lint echo "success=$([ $? -eq 0 ] && echo true || echo false)" >> $GITHUB_OUTPUT lint: diff --git a/.github/workflows/test_backend.yml b/.github/workflows/test_backend.yml index 0dd68d762..5eaaf58d1 100644 --- a/.github/workflows/test_backend.yml +++ b/.github/workflows/test_backend.yml @@ -59,7 +59,7 @@ jobs: run: bun install --frozen-lockfile - name: Wait for MariaDB to be ready - run: docker run --rm --network gradido_internal-net busybox sh -c 'until nc -z mariadb 3306; do echo waiting for db; sleep 1; done;' + run: until nc -z localhost 3306; do echo waiting for db; sleep 1; done; - name: Backend | Unit tests run: bun turbo backend#test diff --git a/.github/workflows/test_dht_node.yml b/.github/workflows/test_dht_node.yml index 1fd2045bf..95d0d5af4 100644 --- a/.github/workflows/test_dht_node.yml +++ b/.github/workflows/test_dht_node.yml @@ -61,8 +61,8 @@ jobs: run: cd out && yarn install --frozen-lockfile --production=false - name: Wait for MariaDB to be ready - run: docker run --rm --network gradido_internal-net busybox sh -c 'until nc -z mariadb 3306; do echo waiting for db; sleep 1; done;' + run: until nc -z localhost 3306; do echo waiting for db; sleep 1; done; - - name: run unit test & lint & build & typecheck - run: cd out && turbo dht-node#lint dht-node#test dht-node#build dht-node#typecheck + - name: run unit test & build & typecheck + run: cd out && turbo dht-node#test dht-node#build dht-node#typecheck diff --git a/.github/workflows/test_federation.yml b/.github/workflows/test_federation.yml index bd670912c..25f8eaab5 100644 --- a/.github/workflows/test_federation.yml +++ b/.github/workflows/test_federation.yml @@ -61,8 +61,8 @@ jobs: run: cd out && yarn install --frozen-lockfile --production=false - name: Wait for MariaDB to be ready - run: docker run --rm --network gradido_internal-net busybox sh -c 'until nc -z mariadb 3306; do echo waiting for db; sleep 1; done;' + run: until nc -z localhost 3306; do echo waiting for db; sleep 1; done; - name: Federation | Unit tests id: test - run: cd out && turbo federation#lint federation#test federation#build federation#typecheck \ No newline at end of file + run: cd out && turbo federation#test federation#build federation#typecheck \ No newline at end of file diff --git a/.github/workflows/test_frontend.yml b/.github/workflows/test_frontend.yml index dd376427e..4853ec0d7 100644 --- a/.github/workflows/test_frontend.yml +++ b/.github/workflows/test_frontend.yml @@ -41,8 +41,6 @@ jobs: name: Unit Tests - Frontend needs: files-changed runs-on: ubuntu-latest - outputs: - test-success: ${{ steps.test.outputs.success }} steps: - name: Set Node.js version uses: actions/setup-node@v4 @@ -50,40 +48,53 @@ jobs: node-version: '18.20.7' - name: Checkout code - uses: actions/checkout@v3 - - - name: Install turbo - run: yarn global add turbo@^2 - - - name: Prune frontend with turbos help - run: turbo prune frontend + uses: actions/checkout@v4 + + - name: install bun + uses: oven-sh/setup-bun@v2 - name: install dependencies - run: cd out && yarn install --frozen-lockfile --production=false + run: bun install --frozen-lockfile - name: Frontend | Unit tests - id: test - run: | - cd out && turbo frontend#test frontend#lint - echo "success=$([ $? -eq 0 ] && echo true || echo false)" >> $GITHUB_OUTPUT + run: bun turbo frontend#test lint: - if: needs.files-changed.outputs.frontend == 'true' + if: needs.files-changed.outputs.config == 'true' || needs.files-changed.outputs.frontend == 'true' name: Lint - Frontend - needs: [files-changed, unit_test] + needs: files-changed runs-on: ubuntu-latest + outputs: + success: ${{ steps.lint.outputs.success }} steps: - - name: Check result from previous step - run: if [ "${{ needs.unit_test.outputs.test-success }}" != "true" ]; then exit 1; fi + - name: Set Node.js version + uses: actions/setup-node@v4 + with: + node-version: '18.20.7' + + - name: Checkout code + uses: actions/checkout@v4 + + - name: install bun + uses: oven-sh/setup-bun@v2 + + - name: install dependencies + run: bun install --frozen-lockfile + + - name: Frontend | Lint + id: lint + run: | + bun turbo frontend#lint + echo "success=$([ $? -eq 0 ] && echo true || echo false)" >> $GITHUB_OUTPUT stylelint: if: needs.files-changed.outputs.frontend == 'true' name: Stylelint - Frontend - needs: [files-changed, unit_test] + needs: [files-changed, lint] runs-on: ubuntu-latest steps: - name: Check result from previous step - run: if [ "${{ needs.unit_test.outputs.test-success }}" != "true" ]; then exit 1; fi + run: if [ "${{ needs.lint.outputs.success }}" != "true" ]; then exit 1; fi locales: if: needs.files-changed.outputs.frontend == 'true' From e7b1c19bc8a0d0ed73aeaa98283be3e47af47831 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Mon, 5 May 2025 11:25:50 +0200 Subject: [PATCH 037/123] add husky to project for using versioned git hooks --- .github/workflows/test_e2e.yml | 2 +- .gitignore | 1 + .husky/post-checkout | 7 +++++++ .husky/pre-commit | 1 + bun.lock | 4 ++++ package.json | 18 +++++++++++------- yarn.lock | 5 +++++ 7 files changed, 30 insertions(+), 8 deletions(-) create mode 100644 .husky/post-checkout create mode 100644 .husky/pre-commit diff --git a/.github/workflows/test_e2e.yml b/.github/workflows/test_e2e.yml index c792f9a0b..5015e3887 100644 --- a/.github/workflows/test_e2e.yml +++ b/.github/workflows/test_e2e.yml @@ -23,7 +23,7 @@ jobs: sudo cp ./nginx/e2e-test.conf /etc/nginx/sites-available/default - name: wait for database to be ready - run: docker run --rm --network gradido_internal-net busybox sh -c 'until nc -z mariadb 3306; do echo waiting for db; sleep 1; done;' + run: until nc -z localhost 3306; do echo waiting for db; sleep 1; done; - name: Boot up test system | seed backend run: bun turbo seed diff --git a/.gitignore b/.gitignore index 149d8d245..68f604c8c 100644 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,7 @@ nbproject .metadata /out/* /.env +.env.git package-lock.json /deployment/bare_metal/.env /deployment/bare_metal/nginx/sites-available/gradido.conf diff --git a/.husky/post-checkout b/.husky/post-checkout new file mode 100644 index 000000000..c7b7eeade --- /dev/null +++ b/.husky/post-checkout @@ -0,0 +1,7 @@ +#!/bin/bash +echo "Writing build metadata to .env.git" +cat > .env.git <=18" - } + } } diff --git a/yarn.lock b/yarn.lock index 22ac25cd1..cde6da2bc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6858,6 +6858,11 @@ humanize-ms@^1.2.1: dependencies: ms "^2.0.0" +husky@^9.1.7: + version "9.1.7" + resolved "https://registry.yarnpkg.com/husky/-/husky-9.1.7.tgz#d46a38035d101b46a70456a850ff4201344c0b2d" + integrity sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA== + hypercore-crypto@^3.3.0, hypercore-crypto@^3.3.1: version "3.6.0" resolved "https://registry.yarnpkg.com/hypercore-crypto/-/hypercore-crypto-3.6.0.tgz#6986cc4038339c4402282bbdf33a4fe2dea98db7" From ba4f711574d8203f32102b9ef4faf5899c9d1ab4 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Mon, 5 May 2025 13:25:20 +0200 Subject: [PATCH 038/123] update admin Docker for development and production use --- .env.git | 3 + .gitignore | 1 - .husky/post-checkout | 7 --- .husky/pre-commit | 1 - admin/.dockerignore | 3 +- admin/Dockerfile | 31 ++++++++-- bun.lock | 5 +- docker-compose.override.yml | 109 +++++++----------------------------- docker-compose.yml | 75 +++++++------------------ nginx/Dockerfile | 9 ++- nginx/gradido.conf | 8 +-- package.json | 6 +- yarn.lock | 5 -- 13 files changed, 88 insertions(+), 175 deletions(-) create mode 100644 .env.git delete mode 100644 .husky/post-checkout delete mode 100644 .husky/pre-commit diff --git a/.env.git b/.env.git new file mode 100644 index 000000000..9146fae2d --- /dev/null +++ b/.env.git @@ -0,0 +1,3 @@ +BUILD_COMMIT=e7b1c19bc8a0d0ed73aeaa98283be3e47af47831 +BUILD_COMMIT_SHORT=e7b1c19bc +BUILD_VERSION=b2.3.1.1425-861-ge7b1c19bc diff --git a/.gitignore b/.gitignore index 68f604c8c..149d8d245 100644 --- a/.gitignore +++ b/.gitignore @@ -9,7 +9,6 @@ nbproject .metadata /out/* /.env -.env.git package-lock.json /deployment/bare_metal/.env /deployment/bare_metal/nginx/sites-available/gradido.conf diff --git a/.husky/post-checkout b/.husky/post-checkout deleted file mode 100644 index c7b7eeade..000000000 --- a/.husky/post-checkout +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash -echo "Writing build metadata to .env.git" -cat > .env.git <=18" diff --git a/yarn.lock b/yarn.lock index cde6da2bc..22ac25cd1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6858,11 +6858,6 @@ humanize-ms@^1.2.1: dependencies: ms "^2.0.0" -husky@^9.1.7: - version "9.1.7" - resolved "https://registry.yarnpkg.com/husky/-/husky-9.1.7.tgz#d46a38035d101b46a70456a850ff4201344c0b2d" - integrity sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA== - hypercore-crypto@^3.3.0, hypercore-crypto@^3.3.1: version "3.6.0" resolved "https://registry.yarnpkg.com/hypercore-crypto/-/hypercore-crypto-3.6.0.tgz#6986cc4038339c4402282bbdf33a4fe2dea98db7" From 53ec5ba7f48326ba304c16e5722647a2ed83a359 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Mon, 5 May 2025 13:39:30 +0200 Subject: [PATCH 039/123] fix frontend and backend --- backend/Dockerfile | 22 ++++++++++++++++++---- backend/package.json | 1 - docker-compose.yml | 16 ++++------------ frontend/Dockerfile | 30 +++++++++++++++++++++++++----- 4 files changed, 47 insertions(+), 22 deletions(-) diff --git a/backend/Dockerfile b/backend/Dockerfile index 4dee9953c..ff2ce19b4 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -16,6 +16,8 @@ ENV BUILD_COMMIT="0000000" ENV NODE_ENV="production" ## App relevant Envs ENV PORT="4000" +## Timezone +ENV TZ=UTC # Labels LABEL org.label-schema.build-date="${BUILD_DATE}" @@ -33,6 +35,9 @@ LABEL maintainer="support@gradido.net" # Install Additional Software ## install: git #RUN apk --no-cache add git +RUN yarn global add bun +# Add bun's global bin directory to PATH +ENV PATH="/root/.bun/bin:${PATH}" # Settings ## Expose Container Port @@ -42,6 +47,14 @@ EXPOSE ${PORT} RUN mkdir -p ${DOCKER_WORKDIR} WORKDIR ${DOCKER_WORKDIR} +################################################################################## +# Development #################################################################### +################################################################################## +FROM base AS development + + +# Run command +CMD /bin/sh -c "bun install --frozen-lockfile && bun turbo backend#dev --env-mode=loose" ################################################################################## # Base with turbo ################################################################ @@ -49,9 +62,8 @@ WORKDIR ${DOCKER_WORKDIR} FROM base as turbo-base RUN apk update && apk add --no-cache libc6-compat \ - && yarn global add turbo@^2 \ - && rm -rf /tmp/* ~/.cache node_modules/.cache \ - && yarn cache clean + && bun add --global turbo@^2 \ + && rm -rf /tmp/* ~/.cache node_modules/.cache ################################################################################## # BUILDER (create partly monorepo only with data needed by backend) ############## @@ -105,5 +117,7 @@ COPY --chown=app:app --from=installer ${DOCKER_WORKDIR}/backend/log4js-config.js # Copy locales COPY --chown=app:app --from=installer ${DOCKER_WORKDIR}/backend/locales ./locales +ENV NODE_ENV=production + # Run command -CMD ["TZ=UTC", "node", "index.js"] \ No newline at end of file +CMD ["node", "index.js"] \ No newline at end of file diff --git a/backend/package.json b/backend/package.json index 7fd3a4962..84cd523c3 100644 --- a/backend/package.json +++ b/backend/package.json @@ -10,7 +10,6 @@ "scripts": { "build": "ts-node ./esbuild.config.ts && mkdirp build/templates/ && ncp src/emails/templates build/templates && mkdirp locales/ && ncp src/locales locales", "clean": "tsc --build --clean", - "start:node": "cross-env TZ=UTC NODE_ENV=production TS_NODE_BASEURL=./build node -r tsconfig-paths/register build/src/index.js", "start": "cross-env TZ=UTC NODE_ENV=production node build/index.js", "dev": "cross-env TZ=UTC nodemon -w src --ext ts,pug,json,css -r tsconfig-paths/register src/index.ts", "typecheck": "tsc --noEmit", diff --git a/docker-compose.yml b/docker-compose.yml index d5ea2548f..bcee473ef 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -10,9 +10,7 @@ services: ######################################################## frontend: # name the image so that it cannot be found in a DockerHub repository, otherwise it will not be built locally from the 'dockerfile' but pulled from there - image: gradido/frontend:local-production - env_file: - - .env.git + image: gradido/frontend:local-production build: context: ./ dockerfile: ./frontend/Dockerfile @@ -93,8 +91,6 @@ services: backend: # name the image so that it cannot be found in a DockerHub repository, otherwise it will not be built locally from the 'dockerfile' but pulled from there image: gradido/backend:local-production - env_file: - - .env.git build: # since we have to include the entities from ./database we cannot define the context as ./backend # this might blow build image size to the moon ?! @@ -114,7 +110,7 @@ services: - BUILD_DATE - BUILD_VERSION - BUILD_COMMIT - - NODE_ENV="production" + - NODE_ENV=production - DB_HOST=mariadb # Application only envs #env_file: @@ -129,8 +125,6 @@ services: dht-node: # name the image so that it cannot be found in a DockerHub repository, otherwise it will not be built locally from the 'dockerfile' but pulled from there image: gradido/dht-node:local-production - env_file: - - .env.git build: # since we have to include the entities from ./database we cannot define the context as ./backend # this might blow build image size to the moon ?! @@ -172,6 +166,8 @@ services: context: . dockerfile: ./dlt-connector/Dockerfile target: production + profiles: + - dlt networks: - internal-net - external-net @@ -197,8 +193,6 @@ services: federation: # name the image so that it cannot be found in a DockerHub repository, otherwise it will not be built locally from the 'dockerfile' but pulled from there image: gradido/federation:local-production - env_file: - - .env.git build: # since we have to include the entities from ./database we cannot define the context as ./federation # this might blow build image size to the moon ?! @@ -233,8 +227,6 @@ services: database: # name the image so that it cannot be found in a DockerHub repository, otherwise it will not be built locally from the 'dockerfile' but pulled from there image: gradido/database:local-up - env_file: - - .env.git build: context: . dockerfile: ./database/Dockerfile diff --git a/frontend/Dockerfile b/frontend/Dockerfile index 09a5bb8b9..9482d8e88 100644 --- a/frontend/Dockerfile +++ b/frontend/Dockerfile @@ -19,6 +19,8 @@ ENV BUILD_COMMIT_SHORT=${BUILD_COMMIT_SHORT} ENV NODE_ENV="production" ## App relevant Envs ENV PORT="3000" +## Timezone +ENV TZ=UTC # Labels LABEL org.label-schema.build-date="${BUILD_DATE}" @@ -35,7 +37,10 @@ LABEL maintainer="support@ogradido.net" # Install Additional Software ## install: node-gyp dependencies -RUN apk --no-cache add g++ make python3 +#RUN apk --no-cache add g++ make python3 +RUN yarn global add bun +# Add bun's global bin directory to PATH +ENV PATH="/root/.bun/bin:${PATH}" # Settings ## Expose Container Port @@ -45,16 +50,27 @@ EXPOSE ${PORT} RUN mkdir -p ${DOCKER_WORKDIR} WORKDIR ${DOCKER_WORKDIR} + +################################################################################## +# Development #################################################################### +################################################################################## +FROM base AS development + +# used for getting git commit hash direct from .git +RUN apk update && apk add --no-cache git + +# Run command +CMD /bin/sh -c "bun install --frozen-lockfile && bun turbo frontend#dev --env-mode=loose" + + ################################################################################## # Base with turbo ################################################################ ################################################################################## FROM base as turbo-base RUN apk update && apk add --no-cache libc6-compat \ - && yarn global add turbo@^2 \ - && rm -rf /tmp/* ~/.cache node_modules/.cache \ - && yarn cache clean - + && bun add --global turbo@^2 \ + && rm -rf /tmp/* ~/.cache node_modules/.cache ################################################################################## # BUILDER (create partly monorepo only with data needed by frontend) ############# @@ -77,6 +93,10 @@ RUN yarn install --frozen-lockfile --production=false \ # Build the project COPY --chown=app:app --from=builder /app/out/full/ . +# TODO: get the actually git commit hash into docker +ENV BUILD_COMMIT='deadbeefdeadbeefdeadbeefdeadbeefdeadbeef' +ENV BUILD_COMMIT_SHORT='deadbeef' +ENV BUILD_VERSION='broken' RUN turbo build --env-mode=loose ################################################################################## From 3cba25df172b9d9936d5f8f0b1b8097ed2518790 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Mon, 5 May 2025 19:11:48 +0200 Subject: [PATCH 040/123] refactor docker --- .dockerignore | 4 +- .github/workflows/test_admin_interface.yml | 6 +- .github/workflows/test_backend.yml | 8 ++- .github/workflows/test_config.yml | 11 ++-- .github/workflows/test_database.yml | 30 +++++---- .github/workflows/test_dht_node.yml | 15 +++-- .github/workflows/test_federation.yml | 13 ++-- .github/workflows/test_frontend.yml | 10 +-- Dockerfile | 39 +++++++++++- admin/Dockerfile | 66 ++++++++------------ backend/Dockerfile | 69 ++++++++------------- backend/esbuild.config.ts | 5 +- backend/src/config/index.ts | 6 +- backend/src/password/EncryptionWorker.ts | 8 +-- backend/src/password/EncryptorUtils.ts | 33 +++++----- bun.lock | 5 +- database/Dockerfile | 2 + dht-node/Dockerfile | 71 ++++++++++++---------- dht-node/esbuild.config.ts | 1 + dht-node/package.json | 4 +- docker-compose.override.yml | 27 +++++--- docker-compose.yml | 16 ++--- federation/Dockerfile | 66 ++++++++++---------- federation/package.json | 10 ++- federation/tsconfig.json | 3 + frontend/Dockerfile | 58 ++++++++---------- frontend/turbo.json | 5 +- scripts/clean-prebuilds.sh | 36 +++++++++++ 28 files changed, 342 insertions(+), 285 deletions(-) create mode 100755 scripts/clean-prebuilds.sh diff --git a/.dockerignore b/.dockerignore index 01c8b1b48..8a354191d 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,3 +1,5 @@ **/node_modules **/build -**/coverage \ No newline at end of file +**/coverage +.git +**/.turbo \ No newline at end of file diff --git a/.github/workflows/test_admin_interface.yml b/.github/workflows/test_admin_interface.yml index a2d1fe5ef..b9d62a5ad 100644 --- a/.github/workflows/test_admin_interface.yml +++ b/.github/workflows/test_admin_interface.yml @@ -56,12 +56,14 @@ jobs: uses: oven-sh/setup-bun@v2 - name: install dependencies - run: bun install --frozen-lockfile + run: | + bun install --filter admin --frozen-lockfile + bun install --global turbo@^2 - name: Admin Interface | Unit tests id: test run: | - bun turbo admin#test admin#lint + turbo admin#test admin#lint echo "success=$([ $? -eq 0 ] && echo true || echo false)" >> $GITHUB_OUTPUT lint: diff --git a/.github/workflows/test_backend.yml b/.github/workflows/test_backend.yml index 5eaaf58d1..f177668f8 100644 --- a/.github/workflows/test_backend.yml +++ b/.github/workflows/test_backend.yml @@ -56,7 +56,7 @@ jobs: uses: oven-sh/setup-bun@v2 - name: install dependencies - run: bun install --frozen-lockfile + run: bun install --filter backend --frozen-lockfile - name: Wait for MariaDB to be ready run: until nc -z localhost 3306; do echo waiting for db; sleep 1; done; @@ -82,10 +82,12 @@ jobs: uses: oven-sh/setup-bun@v2 - name: install dependencies - run: bun install --frozen-lockfile + run: | + bun install --filter backend --frozen-lockfile + bun install --global turbo@^2 - name: Backend | Typecheck - run: bun turbo backend#typecheck backend#build + run: turbo backend#typecheck backend#build locales: if: needs.files-changed.outputs.backend == 'true' diff --git a/.github/workflows/test_config.yml b/.github/workflows/test_config.yml index 8a681ab4c..5ba0832c6 100644 --- a/.github/workflows/test_config.yml +++ b/.github/workflows/test_config.yml @@ -29,15 +29,12 @@ jobs: - name: Checkout code uses: actions/checkout@v3 - - name: Install turbo - run: yarn global add turbo@^2 - - - name: Prune config with turbos help - run: turbo prune config-schema + - name: install bun + uses: oven-sh/setup-bun@v2 - name: install dependencies - run: cd out && yarn install --frozen-lockfile --production=false + run: bun install --filter config-schema --frozen-lockfile - name: typecheck - run: cd out && turbo typecheck + run: cd config-schema && yarn typecheck diff --git a/.github/workflows/test_database.yml b/.github/workflows/test_database.yml index 4b1c4886c..5a448e434 100644 --- a/.github/workflows/test_database.yml +++ b/.github/workflows/test_database.yml @@ -45,23 +45,22 @@ jobs: - name: Database | docker-compose run: docker compose -f docker-compose.yml -f docker-compose.test.yml up --detach mariadb - - name: Install turbo - run: yarn global add turbo@^2 - - - name: Prune database with turbos help - run: turbo prune database + - name: install bun + uses: oven-sh/setup-bun@v2 - name: install dependencies - run: cd out && yarn install --frozen-lockfile --production=false + run: | + bun install --filter database --frozen-lockfile + bun install --global turbo@^2 - name: Wait for MariaDB to be ready run: docker run --rm --network gradido_internal-net busybox sh -c 'until nc -z mariadb 3306; do echo waiting for db; sleep 1; done;' - name: Database | up - run: cd out && turbo up + run: turbo up - name: Database | reset - run: cd out && turbo reset + run: turbo reset lint: if: needs.files-changed.outputs.database == 'true' @@ -72,14 +71,13 @@ jobs: - name: Checkout code uses: actions/checkout@v3 - - name: Install turbo - run: yarn global add turbo@^2 - - - name: Prune database with turbos help - run: turbo prune database + - name: install bun + uses: oven-sh/setup-bun@v2 - name: install dependencies - run: cd out && yarn install --frozen-lockfile --production=false + run: | + bun install --filter database --frozen-lockfile + bun install --global turbo@^2 - - name: Database - run: cd out && turbo build typecheck \ No newline at end of file + - name: Database | build & typecheck + run: turbo database#build database#typecheck \ No newline at end of file diff --git a/.github/workflows/test_dht_node.yml b/.github/workflows/test_dht_node.yml index 95d0d5af4..8968609eb 100644 --- a/.github/workflows/test_dht_node.yml +++ b/.github/workflows/test_dht_node.yml @@ -46,23 +46,22 @@ jobs: node-version: '18.20.7' - name: Checkout code - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: docker-compose mariadb run: docker compose -f docker-compose.yml -f docker-compose.test.yml up --detach --no-deps mariadb - - name: Install turbo - run: yarn global add turbo@^2 - - - name: Prune dht-node with turbos help - run: turbo prune dht-node + - name: install bun + uses: oven-sh/setup-bun@v2 - name: install dependencies - run: cd out && yarn install --frozen-lockfile --production=false + run: | + bun install --filter dht-node --frozen-lockfile + bun install --global turbo@^2 - name: Wait for MariaDB to be ready run: until nc -z localhost 3306; do echo waiting for db; sleep 1; done; - name: run unit test & build & typecheck - run: cd out && turbo dht-node#test dht-node#build dht-node#typecheck + run: turbo dht-node#test dht-node#build dht-node#typecheck diff --git a/.github/workflows/test_federation.yml b/.github/workflows/test_federation.yml index 25f8eaab5..d139b9d27 100644 --- a/.github/workflows/test_federation.yml +++ b/.github/workflows/test_federation.yml @@ -51,18 +51,17 @@ jobs: - name: docker-compose mariadb run: docker compose -f docker-compose.yml -f docker-compose.test.yml up --detach --no-deps mariadb - - name: Install turbo - run: yarn global add turbo@^2 - - - name: Prune federation with turbos help - run: turbo prune federation + - name: install bun + uses: oven-sh/setup-bun@v2 - name: install dependencies - run: cd out && yarn install --frozen-lockfile --production=false + run: | + bun install --filter federation --frozen-lockfile + bun install --global turbo@^2 - name: Wait for MariaDB to be ready run: until nc -z localhost 3306; do echo waiting for db; sleep 1; done; - name: Federation | Unit tests id: test - run: cd out && turbo federation#test federation#build federation#typecheck \ No newline at end of file + run: turbo federation#test federation#build federation#typecheck \ No newline at end of file diff --git a/.github/workflows/test_frontend.yml b/.github/workflows/test_frontend.yml index 4853ec0d7..2f8931c5d 100644 --- a/.github/workflows/test_frontend.yml +++ b/.github/workflows/test_frontend.yml @@ -54,10 +54,10 @@ jobs: uses: oven-sh/setup-bun@v2 - name: install dependencies - run: bun install --frozen-lockfile + run: bun install --filter frontend --frozen-lockfile - name: Frontend | Unit tests - run: bun turbo frontend#test + run: cd frontend && yarn test lint: if: needs.files-changed.outputs.config == 'true' || needs.files-changed.outputs.frontend == 'true' @@ -79,12 +79,14 @@ jobs: uses: oven-sh/setup-bun@v2 - name: install dependencies - run: bun install --frozen-lockfile + run: | + bun install --filter frontend --frozen-lockfile + bun install --global turbo@^2 - name: Frontend | Lint id: lint run: | - bun turbo frontend#lint + turbo frontend#lint echo "success=$([ $? -eq 0 ] && echo true || echo false)" >> $GITHUB_OUTPUT stylelint: diff --git a/Dockerfile b/Dockerfile index 5d714b472..dda955621 100644 --- a/Dockerfile +++ b/Dockerfile @@ -147,7 +147,7 @@ COPY --chown=app:app --from=build /app/backend ./backend COPY --chown=app:app --from=build /app/frontend ./frontend COPY --chown=app:app --from=build /app/admin ./admin COPY --chown=app:app --from=build /app/database ./database -COPY --chown=app:app --from=build /app/config ./config +COPY --chown=app:app --from=build /app/config-schema ./config-schema COPY --chown=app:app --from=build /app/federation ./federation COPY --chown=app:app --from=build /app/dht-node ./dht-node @@ -158,4 +158,39 @@ EXPOSE ${FRONTEND_MODULE_PORT} EXPOSE ${ADMIN_MODULE_PORT} # Command to start -CMD ["turbo", "start", "--env-mode=loose"] \ No newline at end of file +CMD ["turbo", "start", "--env-mode=loose"] + +################################################################################## +# FINAL PRODUCTION IMAGE ######################################################### +################################################################################## +FROM node:18.20.7-alpine3.21 as production-slim + +ENV TURBO_CACHE_DIR=/tmp/turbo +ENV DOCKER_WORKDIR="/app" +ENV NODE_ENV="production" +ENV DB_HOST=mariadb +WORKDIR ${DOCKER_WORKDIR} + +# Ports exposen +EXPOSE ${BACKEND_PORT} +EXPOSE ${FEDERATION_PORT} +EXPOSE ${FRONTEND_MODULE_PORT} +EXPOSE ${ADMIN_MODULE_PORT} + +# Copy only the build artifacts from the previous build stage +COPY --chown=app:app --from=build /app/backend/build ./backend/build +COPY --chown=app:app --from=build /app/backend/locales ./backend/locales +COPY --chown=app:app --from=build /app/backend/log4js-config.json ./backend/log4js-config.json + +COPY --chown=app:app --from=build /app/dht-node/build ./dht-node/build +COPY --chown=app:app --from=build /app/dht-node/log4js-config.json ./dht-node/log4js-config.json + +COPY --chown=app:app --from=build /app/federation/build ./federation/build +COPY --chown=app:app --from=build /app/federation/log4js-config.json ./federation/log4js-config.json + +COPY --chown=app:app --from=build /app/frontend/build ./frontend +COPY --chown=app:app --from=build /app/admin/build ./admin + +RUN yarn global add udx-native@1.5.3 sodium-native@4.0.0 + +CMD ["turbo", "start", "--env-mode=loose"] diff --git a/admin/Dockerfile b/admin/Dockerfile index 8f0a9b8ea..0fa88c333 100644 --- a/admin/Dockerfile +++ b/admin/Dockerfile @@ -17,7 +17,8 @@ ENV BUILD_COMMIT=${BUILD_COMMIT} ARG BUILD_COMMIT_SHORT ENV BUILD_COMMIT_SHORT=${BUILD_COMMIT_SHORT} ## SET NODE_ENV -ARG NODE_ENV="production" +ARG NODE_ENV=production +ENV NODE_ENV=${NODE_ENV} ## App relevant Envs ENV PORT="8080" ## Timezone @@ -40,9 +41,6 @@ LABEL maintainer="support@ogradido.net" ## install: git #RUN apk --no-cache add git # RUN bun add --global yarn@1.22.20 -RUN yarn global add bun -# Add bun's global bin directory to PATH -ENV PATH="/root/.bun/bin:${PATH}" # Settings ## Expose Container Port @@ -52,57 +50,49 @@ EXPOSE ${PORT} RUN mkdir -p ${DOCKER_WORKDIR} WORKDIR ${DOCKER_WORKDIR} +################################################################################## +# BUN ############################################################################ +################################################################################## +FROM base as bun-base + +RUN apk update && apk add --no-cache curl tar bash +RUN curl -fsSL https://bun.sh/install | bash +# Add bun's global bin directory to PATH +ENV PATH="/root/.bun/bin:${PATH}" + ################################################################################## # Development #################################################################### ################################################################################## -FROM base AS development +FROM bun-base AS development # used for getting git commit hash direct from .git RUN apk update && apk add --no-cache git # Run command -CMD /bin/sh -c "bun install --frozen-lockfile && bun turbo admin#dev --env-mode=loose" +CMD /bin/sh -c "bun install --filter admin --no-cache --frozen-lockfile \ + && bun install --global --no-cache --no-save turbo@^2 \ + && turbo admin#dev --env-mode=loose" + ################################################################################## -# Base with turbo ################################################################ +# Build ########################################################################## ################################################################################## -FROM base as turbo-base - -RUN apk update && apk add --no-cache libc6-compat \ - && bun add --global turbo@^2 \ - && rm -rf /tmp/* ~/.cache node_modules/.cache - -################################################################################## -# BUILDER (create partly monorepo only with data needed by admin) ################ -################################################################################## -FROM turbo-base as builder +FROM bun-base as build COPY --chown=app:app . . -RUN turbo prune admin --docker +RUN bun install --filter admin --no-cache --frozen-lockfile \ +&& bun install --global turbo@^2 -################################################################################## -# INSTALLER (create production image) ############################################ -################################################################################## -FROM turbo-base AS installer - -# First install the dependencies (as they change less often) -COPY --chown=app:app --from=builder /app/out/json/ . -RUN yarn install --frozen-lockfile --production=false \ - && rm -rf /tmp/* ~/.cache node_modules/.cache \ - && yarn cache clean - -# Build the project -COPY --chown=app:app --from=builder /app/out/full/ . # TODO: get the actually git commit hash into docker -ENV BUILD_COMMIT='deadbeefdeadbeefdeadbeefdeadbeefdeadbeef' -ENV BUILD_COMMIT_SHORT='deadbeef' -ENV BUILD_VERSION='broken' -RUN turbo build --env-mode=loose +ENV BUILD_COMMIT=deadbeefdeadbeefdeadbeefdeadbeefdeadbeef +ENV BUILD_COMMIT_SHORT=deadbeef +ENV BUILD_VERSION=broken +RUN turbo admin#build --env-mode=loose ################################################################################## # TEST ########################################################################### ################################################################################## -FROM installer as test +FROM build as test # Run command CMD /bin/sh -c "turbo admin#test --env-mode=loose" @@ -112,11 +102,9 @@ CMD /bin/sh -c "turbo admin#test --env-mode=loose" ################################################################################## FROM lipanski/docker-static-website:latest as production -EXPOSE 8080 - # tiny static webserver # https://lipanski.com/posts/smallest-docker-image-static-website # copy builded frontend files -COPY --from=installer /app/admin/build/ ./admin/ +COPY --from=build /app/admin/build/ ./admin/ diff --git a/backend/Dockerfile b/backend/Dockerfile index ff2ce19b4..6d126fa25 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -13,7 +13,7 @@ ENV BUILD_VERSION="0.0.0.0" ## We cannot do `$(git rev-parse --short HEAD)` here so we default to 0000000 ENV BUILD_COMMIT="0000000" ## SET NODE_ENV -ENV NODE_ENV="production" +ENV NODE_ENV=production ## App relevant Envs ENV PORT="4000" ## Timezone @@ -35,9 +35,7 @@ LABEL maintainer="support@gradido.net" # Install Additional Software ## install: git #RUN apk --no-cache add git -RUN yarn global add bun -# Add bun's global bin directory to PATH -ENV PATH="/root/.bun/bin:${PATH}" + # Settings ## Expose Container Port @@ -47,77 +45,62 @@ EXPOSE ${PORT} RUN mkdir -p ${DOCKER_WORKDIR} WORKDIR ${DOCKER_WORKDIR} +################################################################################## +# BUN ############################################################################ +################################################################################## +FROM base as bun-base + +RUN apk update && apk add --no-cache curl tar bash +RUN curl -fsSL https://bun.sh/install | bash +# Add bun's global bin directory to PATH +ENV PATH="/root/.bun/bin:${PATH}" + ################################################################################## # Development #################################################################### ################################################################################## -FROM base AS development - +FROM bun-base AS development # Run command -CMD /bin/sh -c "bun install --frozen-lockfile && bun turbo backend#dev --env-mode=loose" +CMD /bin/sh -c "bun install --filter backend --no-cache --frozen-lockfile \ + && bun install --global --no-cache --no-save turbo@^2 \ + && turbo backend#dev --env-mode=loose" ################################################################################## -# Base with turbo ################################################################ +# Build ########################################################################## ################################################################################## -FROM base as turbo-base - -RUN apk update && apk add --no-cache libc6-compat \ - && bun add --global turbo@^2 \ - && rm -rf /tmp/* ~/.cache node_modules/.cache - -################################################################################## -# BUILDER (create partly monorepo only with data needed by backend) ############## -################################################################################## -FROM turbo-base as builder +FROM bun-base as build COPY --chown=app:app . . -RUN turbo prune backend --docker - - -################################################################################## -# INSTALLER (create production image) ############################################ -################################################################################## -FROM turbo-base AS installer - -# First install the dependencies (as they change less often) -COPY --chown=app:app --from=builder /app/out/json/ . -RUN yarn install --frozen-lockfile --production=false \ - && rm -rf /tmp/* ~/.cache node_modules/.cache \ - && yarn cache clean - -# Build the project -COPY --chown=app:app --from=builder /app/out/full/ . -RUN turbo build +RUN bun install --filter backend --no-cache --frozen-lockfile \ + && bun install --global --no-cache --no-save turbo@^2 \ + && turbo backend#build backend#typecheck --env-mode=loose ################################################################################## # TEST ########################################################################### ################################################################################## -FROM installer as test +FROM build as test ENV DB_HOST=mariadb # Run command CMD /bin/sh -c "turbo backend#test --env-mode=loose" - ################################################################################## # PRODUCTION (Does contain only "binary"- and static-files to reduce image size) # ################################################################################## FROM base as production # Copy "binary"-files from build image -COPY --chown=app:app --from=installer ${DOCKER_WORKDIR}/backend/build/index.js ./index.js +COPY --chown=app:app --from=build ${DOCKER_WORKDIR}/backend/build/index.js ./index.js RUN yarn add sodium-native@4.0.0 email-templates@10.0.1 \ && rm -rf /tmp/* ~/.cache node_modules/.cache \ && yarn cache clean # Copy log4js-config.json to provide log configuration -COPY --chown=app:app --from=installer ${DOCKER_WORKDIR}/backend/log4js-config.json ./log4js-config.json +COPY --chown=app:app --from=build ${DOCKER_WORKDIR}/backend/log4js-config.json ./log4js-config.json # Copy locales -COPY --chown=app:app --from=installer ${DOCKER_WORKDIR}/backend/locales ./locales - -ENV NODE_ENV=production +COPY --chown=app:app --from=build ${DOCKER_WORKDIR}/backend/locales ./locales # Run command -CMD ["node", "index.js"] \ No newline at end of file +CMD ["node", "index.js"] diff --git a/backend/esbuild.config.ts b/backend/esbuild.config.ts index 73d0a0c12..9b545dc4d 100644 --- a/backend/esbuild.config.ts +++ b/backend/esbuild.config.ts @@ -2,7 +2,7 @@ import { esbuildDecorators } from '@anatine/esbuild-decorators' import { build } from 'esbuild' build({ - entryPoints: ['src/index.ts'], + entryPoints: ['src/index.ts', 'src/password/EncryptionWorker.ts'], outdir: 'build', platform: 'node', target: 'node18.20.7', @@ -11,5 +11,6 @@ build({ // legalComments: 'inline', external: ['sodium-native', 'email-templates'], plugins: [esbuildDecorators()], - minify: true, + minify: false, + sourcemap: true, }) diff --git a/backend/src/config/index.ts b/backend/src/config/index.ts index ab07e7fa2..10688a236 100644 --- a/backend/src/config/index.ts +++ b/backend/src/config/index.ts @@ -76,12 +76,12 @@ const community = { const loginServer = { LOGIN_APP_SECRET: process.env.LOGIN_APP_SECRET ?? '21ffbbc616fe', LOGIN_SERVER_KEY: process.env.LOGIN_SERVER_KEY ?? 'a51ef8ac7ef1abf162fb7a65261acd7a', - USE_CRYPTO_WORKER: process.env.USE_CRYPTO_WORKER ?? false, + USE_CRYPTO_WORKER: process.env.USE_CRYPTO_WORKER === 'true', } const email = { - EMAIL: process.env.EMAIL === 'true' || false, - EMAIL_TEST_MODUS: process.env.EMAIL_TEST_MODUS === 'true' || false, + EMAIL: process.env.EMAIL === 'true', + EMAIL_TEST_MODUS: process.env.EMAIL_TEST_MODUS === 'true', EMAIL_TEST_RECEIVER: process.env.EMAIL_TEST_RECEIVER ?? 'stage1@gradido.net', EMAIL_USERNAME: process.env.EMAIL_USERNAME ?? '', EMAIL_SENDER: process.env.EMAIL_SENDER ?? 'info@gradido.net', diff --git a/backend/src/password/EncryptionWorker.ts b/backend/src/password/EncryptionWorker.ts index 34f33226f..391883883 100644 --- a/backend/src/password/EncryptionWorker.ts +++ b/backend/src/password/EncryptionWorker.ts @@ -1,7 +1,5 @@ import { worker } from 'workerpool' -import { CONFIG } from '@/config' - import { crypto_box_SEEDBYTES, crypto_hash_sha512_BYTES, @@ -15,7 +13,7 @@ import { crypto_shorthash_BYTES, } from 'sodium-native' -export const SecretKeyCryptographyCreateKey = ( +export const SecretKeyCryptographyCreateKeyFunc = ( salt: string, password: string, configLoginAppSecret: Buffer, @@ -46,8 +44,8 @@ export const SecretKeyCryptographyCreateKey = ( return encryptionKeyHash.readBigUInt64LE() } -if (CONFIG.USE_CRYPTO_WORKER === true && typeof process.send === 'function') { +if (process.env.USE_CRYPTO_WORKER === 'true' && typeof process.send === 'function') { worker({ - SecretKeyCryptographyCreateKey, + SecretKeyCryptographyCreateKeyFunc, }) } diff --git a/backend/src/password/EncryptorUtils.ts b/backend/src/password/EncryptorUtils.ts index 45f15e6dd..53e217078 100644 --- a/backend/src/password/EncryptorUtils.ts +++ b/backend/src/password/EncryptorUtils.ts @@ -1,5 +1,5 @@ -import { cpus } from 'os' -import path from 'path' +import { cpus } from 'node:os' +import path from 'node:path' import { User } from 'database' import { Pool, pool } from 'workerpool' @@ -12,7 +12,7 @@ import { backendLogger as logger } from '@/server/logger' import { crypto_shorthash_KEYBYTES } from 'sodium-native' -import { SecretKeyCryptographyCreateKey as SecretKeyCryptographyCreateKeySync } from './EncryptionWorker' +import { SecretKeyCryptographyCreateKeyFunc } from './EncryptionWorker' const configLoginAppSecret = Buffer.from(CONFIG.LOGIN_APP_SECRET, 'hex') const configLoginServerKey = Buffer.from(CONFIG.LOGIN_SERVER_KEY, 'hex') @@ -21,12 +21,8 @@ let encryptionWorkerPool: Pool | undefined if (CONFIG.USE_CRYPTO_WORKER === true) { encryptionWorkerPool = pool( - path.join(__dirname, '..', '..', 'build', 'src', 'password', '/EncryptionWorker.js'), - { - // TODO: put maxQueueSize into config - maxQueueSize: 30 * cpus().length, - }, - ) + path.join(__dirname, '..', 'build', 'password', 'EncryptionWorker.js'), + { maxQueueSize: 30 * cpus().length }) } // We will reuse this for changePassword @@ -52,22 +48,20 @@ export const SecretKeyCryptographyCreateKey = async ( crypto_shorthash_KEYBYTES, ) } - let result: Promise + let result: bigint if (encryptionWorkerPool) { - result = (await encryptionWorkerPool.exec('SecretKeyCryptographyCreateKey', [ + result = await encryptionWorkerPool.exec('SecretKeyCryptographyCreateKeyFunc', [ salt, password, configLoginAppSecret, configLoginServerKey, - ])) as Promise + ]) } else { - result = Promise.resolve( - SecretKeyCryptographyCreateKeySync( - salt, - password, - configLoginAppSecret, - configLoginServerKey, - ), + result = SecretKeyCryptographyCreateKeyFunc( + salt, + password, + configLoginAppSecret, + configLoginServerKey, ) } return result @@ -75,6 +69,7 @@ export const SecretKeyCryptographyCreateKey = async ( // pool is throwing this error // throw new Error('Max queue size of ' + this.maxQueueSize + ' reached'); // will be shown in frontend to user + console.log(JSON.stringify(e, null, 2)) throw new LogError('Server is full, please try again in 10 minutes.', e) } } diff --git a/bun.lock b/bun.lock index 632c5fe78..9e1319a73 100644 --- a/bun.lock +++ b/bun.lock @@ -247,13 +247,16 @@ "log4js": "^6.7.1", "reflect-metadata": "^0.1.13", "sodium-native": "^3.3.0", - "tsx": "^4.19.4", + "tsconfig-paths": "^4.1.1", "type-graphql": "^1.1.1", "typeorm": "^0.3.16", "uuid": "8.3.2", }, "devDependencies": { "@biomejs/biome": "1.9.4", + "@swc/cli": "^0.7.3", + "@swc/core": "^1.11.24", + "@swc/helpers": "^0.5.17", "@types/express": "4.17.21", "@types/jest": "27.0.2", "@types/lodash.clonedeep": "^4.5.6", diff --git a/database/Dockerfile b/database/Dockerfile index 311bd3443..4d226f068 100644 --- a/database/Dockerfile +++ b/database/Dockerfile @@ -14,6 +14,8 @@ ENV BUILD_VERSION="0.0.0.0" ENV BUILD_COMMIT="0000000" ## SET NODE_ENV ENV NODE_ENV="production" +## Timezone +ENV TZ=UTC # Labels LABEL org.label-schema.build-date="${BUILD_DATE}" diff --git a/dht-node/Dockerfile b/dht-node/Dockerfile index a1096b9c7..a219600b3 100644 --- a/dht-node/Dockerfile +++ b/dht-node/Dockerfile @@ -1,7 +1,8 @@ ################################################################################## # BASE ########################################################################### ################################################################################## -FROM node:18.20.7-alpine3.21 as base +FROM node:18.20.7-bookworm-slim as base +#FROM node:18.20.7-alpine3.21 as base #FROM ubuntu:latest as base # ENVs (available in production aswell, can be overwritten by commandline or env file) @@ -17,6 +18,8 @@ ENV BUILD_COMMIT="0000000" ENV NODE_ENV="production" ## App relevant Envs #ENV PORT="5000" +## Timezone +ENV TZ=UTC # Labels LABEL org.label-schema.build-date="${BUILD_DATE}" @@ -46,43 +49,42 @@ LABEL maintainer="support@gradido.net" RUN mkdir -p ${DOCKER_WORKDIR} WORKDIR ${DOCKER_WORKDIR} -################################################################################## -# Base with turbo ################################################################ -################################################################################## -FROM base as turbo-base -RUN apk update && apk add --no-cache libc6-compat \ - && yarn global add turbo@^2 \ - && rm -rf /tmp/* ~/.cache node_modules/.cache \ - && yarn cache clean +################################################################################## +# BUN ############################################################################ +################################################################################## +FROM base as bun-base + +RUN apt update && apt install -y --no-install-recommends ca-certificates curl bash unzip +#RUN apk update && apk add --no-cache curl tar bash +RUN curl -fsSL https://bun.sh/install | bash +# Add bun's global bin directory to PATH +ENV PATH="/root/.bun/bin:${PATH}" + +################################################################################## +# Development #################################################################### +################################################################################## +FROM bun-base AS development + +# Run command +CMD /bin/sh -c "bun install --filter dht-node --no-cache --frozen-lockfile \ + && bun install --global --no-cache --no-save turbo@^2 \ + && turbo dht-node#dev --env-mode=loose" ################################################################################## # BUILDER (create partly monorepo only with data needed by dht-node) ############# ################################################################################## -FROM turbo-base as builder +FROM bun-base as build COPY --chown=app:app . . -RUN turbo prune dht-node --docker +RUN bun install --filter dht-node --no-cache --frozen-lockfile \ + && bun install --global --no-cache --no-save turbo@^2 \ + && turbo dht-node#build dht-node#typecheck --env-mode=loose -################################################################################## -# INSTALLER (create production image) ############################################ -################################################################################## -FROM turbo-base AS installer - -# First install the dependencies (as they change less often) -COPY --chown=app:app --from=builder /app/out/json/ . -RUN yarn install --frozen-lockfile --production=false \ - && rm -rf /tmp/* ~/.cache node_modules/.cache \ - && yarn cache clean - -# Build the project -COPY --chown=app:app --from=builder /app/out/full/ . -RUN turbo build typecheck - ################################################################################## # TEST ########################################################################### ################################################################################## -FROM installer as test +FROM build as test ENV DB_HOST=mariadb # Run command @@ -94,16 +96,19 @@ CMD /bin/sh -c "turbo dht-node#test --env-mode=loose" FROM base as production # Copy "binary"-files from build image -COPY --chown=app:app --from=installer ${DOCKER_WORKDIR}/dht-node/build/index.js ./index.js +COPY --chown=app:app --from=build ${DOCKER_WORKDIR}/dht-node/build/index.js ./index.js +COPY --chown=app:app --from=build ${DOCKER_WORKDIR}/scripts/clean-prebuilds.sh ./clean-prebuilds.sh +#COPY --chown=app:app --from=build ${DOCKER_WORKDIR}/dht-node/package.json ./package.json # We also install the native node_modules which cannot be bundled # TODO: find a elegant way to use the right versions from yarn.lock -RUN yarn add udx-native@1.5.3 sodium-native@4.0.0 \ +RUN yarn add @hyperswarm/dht@^6.5.1 \ && rm -rf /tmp/* ~/.cache node_modules/.cache \ - && yarn cache clean + && yarn cache clean \ + && ./clean-prebuilds.sh # Copy log4js-config.json to provide log configuration -COPY --chown=app:app --from=installer ${DOCKER_WORKDIR}/dht-node/log4js-config.json ./log4js-config.json - +COPY --chown=app:app --from=build ${DOCKER_WORKDIR}/dht-node/log4js-config.json ./log4js-config.json +ENV DB_HOST=mariadb # Run command -CMD ["TZ=UTC", "node", "index.js"] \ No newline at end of file +CMD ["node", "index.js"] \ No newline at end of file diff --git a/dht-node/esbuild.config.ts b/dht-node/esbuild.config.ts index ae8fb1ade..8e0c6583a 100644 --- a/dht-node/esbuild.config.ts +++ b/dht-node/esbuild.config.ts @@ -10,4 +10,5 @@ build({ // legalComments: 'inline', external: ['udx-native', 'sodium-native'], minify: true, + sourcemap: false, }) diff --git a/dht-node/package.json b/dht-node/package.json index cc78e0053..c7d662622 100644 --- a/dht-node/package.json +++ b/dht-node/package.json @@ -22,10 +22,8 @@ "cross-env": "^7.0.3", "database": "*", "dotenv": "10.0.0", - "esbuild": "^0.25.3", "joi": "^17.13.3", "log4js": "^6.9.1", - "tsx": "^4.19.4", "typeorm": "^0.3.22", "uuid": "^8.3.2" }, @@ -36,9 +34,11 @@ "@types/joi": "^17.2.3", "@types/node": "^17.0.45", "@types/uuid": "^8.3.4", + "esbuild": "^0.25.3", "jest": "27.5.1", "prettier": "^2.8.8", "ts-jest": "27.1.4", + "tsx": "^4.19.4", "typescript": "^4.9.5" }, "engines": { diff --git a/docker-compose.override.yml b/docker-compose.override.yml index e3a3dafe8..4cb2ec4b7 100644 --- a/docker-compose.override.yml +++ b/docker-compose.override.yml @@ -14,7 +14,7 @@ services: volumes: # This makes sure the docker container has its own node modules. # Therefore it is possible to have a different node version on the host machine - - node_modules:/app/node_modules + - node_modules_frontend:/app/node_modules - turbo_cache:/tmp/turbo # bind the local folder to the docker to allow live reload - .:/app @@ -33,7 +33,7 @@ services: volumes: # This makes sure the docker container has its own node modules. # Therefore it is possible to have a different node version on the host machine - - node_modules:/app/node_modules + - node_modules_admin:/app/node_modules - turbo_cache:/tmp/turbo # bind the local folder to the docker to allow live reload - .:/app @@ -54,7 +54,7 @@ services: volumes: # This makes sure the docker container has its own node modules. # Therefore it is possible to have a different node version on the host machine - - node_modules:/app/node_modules + - node_modules_backend:/app/node_modules - turbo_cache:/tmp/turbo # bind the local folder to the docker to allow live reload - .:/app @@ -71,11 +71,11 @@ services: - external-net - internal-net environment: - - NODE_ENV="development" + - NODE_ENV=development volumes: # This makes sure the docker container has its own node modules. # Therefore it is possible to have a different node version on the host machine - - node_modules:/app/node_modules + - node_modules_dht:/app/node_modules - turbo_cache:/tmp/turbo # bind the local folder to the docker to allow live reload - .:/app @@ -113,11 +113,11 @@ services: - external-net - internal-net environment: - - NODE_ENV="development" + - NODE_ENV=development volumes: # This makes sure the docker container has its own node modules. # Therefore it is possible to have a different node version on the host machine - - node_modules:/app/node_modules + - node_modules_federation:/app/node_modules - turbo_cache:/tmp/turbo # bind the local folder to the docker to allow live reload - .:/app @@ -135,11 +135,11 @@ services: build: target: up environment: - - NODE_ENV="development" + - NODE_ENV=development volumes: # This makes sure the docker container has its own node modules. # Therefore it is possible to have a different node version on the host machine - - node_modules:/app/node_modules + - node_modules_database:/app/node_modules - turbo_cache:/tmp/turbo # bind the local folder to the docker to allow live reload - ./database:/app @@ -212,7 +212,14 @@ services: volumes: node_modules: + node_modules_dht: + node_modules_admin: + node_modules_frontend: + node_modules_backend: + node_modules_federation: + node_modules_database: dlt_connector_modules: dlt-database_node_modules: dlt-database_build: - turbo_cache: \ No newline at end of file + turbo_cache: + turbo_cache_dht: \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index bcee473ef..6e3b80786 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -23,7 +23,7 @@ services: - external-net - internal-net ports: - - 3000:${FRONTEND_MODULE_PORT:-3000} + - ${FRONTEND_MODULE_PORT:-3000}:3000 environment: # Envs used in Dockerfile # - DOCKER_WORKDIR="/app" @@ -54,7 +54,7 @@ services: - external-net - internal-net ports: - - 3000:${ADMIN_MODULE_PORT:-8080} + - ${ADMIN_MODULE_PORT:-8080}:3000 environment: - BUILD_COMMIT=${BUILD_COMMIT} - BUILD_COMMIT_SHORT=${BUILD_COMMIT_SHORT} @@ -100,7 +100,7 @@ services: networks: - internal-net ports: - - 4000:${BACKEND_PORT:-4000} + - ${BACKEND_PORT:-4000}:4000 depends_on: - mariadb environment: @@ -145,7 +145,7 @@ services: - BUILD_DATE - BUILD_VERSION - BUILD_COMMIT - - NODE_ENV="production" + - NODE_ENV=production - DB_HOST=mariadb # Application only envs #env_file: @@ -203,7 +203,7 @@ services: - internal-net - external-net ports: - - 5010:${FEDERATION_PORT:-5010} + - ${FEDERATION_PORT:-5010}:5010 depends_on: - mariadb environment: @@ -212,7 +212,7 @@ services: - BUILD_DATE - BUILD_VERSION - BUILD_COMMIT - - NODE_ENV="production" + - NODE_ENV=production - DB_HOST=mariadb # Application only envs #env_file: @@ -231,6 +231,8 @@ services: context: . dockerfile: ./database/Dockerfile target: up + profiles: + - migration depends_on: - mariadb networks: @@ -242,7 +244,7 @@ services: - BUILD_DATE - BUILD_VERSION - BUILD_COMMIT - - NODE_ENV="production" + - NODE_ENV=production - DB_HOST=mariadb # Application only envs #env_file: diff --git a/federation/Dockerfile b/federation/Dockerfile index 35fc6af98..fcdad2136 100644 --- a/federation/Dockerfile +++ b/federation/Dockerfile @@ -13,10 +13,12 @@ ENV BUILD_VERSION="0.0.0.0" ## We cannot do `$(git rev-parse --short HEAD)` here so we default to 0000000 ENV BUILD_COMMIT="0000000" ## SET NODE_ENV -ENV NODE_ENV="production" +ENV NODE_ENV=production ## App relevant Envs ENV PORT="5010" # ENV PORT="${env.FEDERATION_PORT}" +## Timezone +ENV TZ=UTC # Labels LABEL org.label-schema.build-date="${BUILD_DATE}" @@ -43,44 +45,42 @@ EXPOSE ${PORT} RUN mkdir -p ${DOCKER_WORKDIR} WORKDIR ${DOCKER_WORKDIR} -################################################################################## -# Base with turbo ################################################################ -################################################################################## -FROM base as turbo-base - -RUN apk update && apk add --no-cache libc6-compat \ - && yarn global add turbo@^2 \ - && rm -rf /tmp/* ~/.cache node_modules/.cache \ - && yarn cache clean ################################################################################## -# BUILDER (create partly monorepo only with data needed by federation) ########### +# BUN ############################################################################ ################################################################################## -FROM turbo-base as builder +FROM base as bun-base + +RUN apk update && apk add --no-cache curl tar bash +RUN curl -fsSL https://bun.sh/install | bash +# Add bun's global bin directory to PATH +ENV PATH="/root/.bun/bin:${PATH}" + +################################################################################## +# Development #################################################################### +################################################################################## +FROM bun-base AS development + +# Run command +CMD /bin/sh -c "bun install --filter federation --no-cache --frozen-lockfile \ + && bun install --global --no-cache --no-save turbo@^2 \ + && turbo federation#dev --env-mode=loose" + + +################################################################################## +# Build ########################################################################## +################################################################################## +FROM bun-base as build COPY --chown=app:app . . -RUN turbo prune federation --docker - - -################################################################################## -# INSTALLER (create production image) ############################################ -################################################################################## -FROM turbo-base AS installer - -# First install the dependencies (as they change less often) -COPY --chown=app:app --from=builder /app/out/json/ . -RUN yarn install --frozen-lockfile --production=false \ - && rm -rf /tmp/* ~/.cache node_modules/.cache \ - && yarn cache clean - -# Build the project -COPY --chown=app:app --from=builder /app/out/full/ . -RUN turbo build typecheck +RUN bun install --filter federation --no-cache --frozen-lockfile \ + && bun install --global --no-cache --no-save turbo@^2 \ + && turbo federation#build federation#typecheck --env-mode=loose ################################################################################## # TEST ########################################################################### ################################################################################## -FROM installer as test +FROM build as test ENV DB_HOST=mariadb @@ -93,7 +93,7 @@ CMD /bin/sh -c "turbo federation#test --env-mode=loose" FROM base as production # Copy "binary"-files from build image -COPY --chown=app:app --from=installer ${DOCKER_WORKDIR}/federation/build/index.js ./index.js +COPY --chown=app:app --from=build ${DOCKER_WORKDIR}/federation/build/index.js ./index.js # We also install the native node_modules which cannot be bundled # TODO: find a elegant way to use the right versions from yarn.lock @@ -102,7 +102,7 @@ RUN yarn add sodium-native@4.0.0 \ && yarn cache clean # Copy log4js-config.json to provide log configuration -COPY --chown=app:app --from=installer ${DOCKER_WORKDIR}/federation/log4js-config.json ./log4js-config.json +COPY --chown=app:app --from=build ${DOCKER_WORKDIR}/federation/log4js-config.json ./log4js-config.json # Run command -CMD ["TZ=UTC", "node", "index.js"] \ No newline at end of file +CMD ["node", "index.js"] \ No newline at end of file diff --git a/federation/package.json b/federation/package.json index 0f595c27b..9d2acb858 100644 --- a/federation/package.json +++ b/federation/package.json @@ -9,10 +9,10 @@ "private": false, "scripts": { - "build": "tsx ./esbuild.config.ts", + "build": "ts-node ./esbuild.config.ts", "start": "cross-env TZ=UTC NODE_ENV=production node build/index.js", "start:bun": "cross-env TZ=UTC NODE_ENV=production bun build/index.js", - "dev": "cross-env TZ=UTC tsx watch src/index.ts", + "dev": "cross-env TZ=UTC nodemon -w src --ext ts,json,css -r tsconfig-paths/register src/index.ts", "dev:bun": "cross-env TZ=UTC bun --hot src/index.ts", "typecheck": "tsc --noEmit", "test": "cross-env TZ=UTC NODE_ENV=development DB_DATABASE=gradido_test_federation jest --runInBand --forceExit --detectOpenHandles", @@ -41,13 +41,16 @@ "log4js": "^6.7.1", "reflect-metadata": "^0.1.13", "sodium-native": "^3.3.0", - "tsx": "^4.19.4", + "tsconfig-paths": "^4.1.1", "type-graphql": "^1.1.1", "typeorm": "^0.3.16", "uuid": "8.3.2" }, "devDependencies": { "@biomejs/biome": "1.9.4", + "@swc/cli": "^0.7.3", + "@swc/core": "^1.11.24", + "@swc/helpers": "^0.5.17", "@types/express": "4.17.21", "@types/jest": "27.0.2", "@types/lodash.clonedeep": "^4.5.6", @@ -57,6 +60,7 @@ "apollo-server-testing": "2.25.2", "graphql-tag": "^2.12.6", "jest": "27.2.4", + "nodemon": "^2.0.7", "prettier": "^3.5.3", "ts-jest": "27.0.5", "typescript": "^4.9.5" diff --git a/federation/tsconfig.json b/federation/tsconfig.json index f72262d8e..2d0e18ed8 100644 --- a/federation/tsconfig.json +++ b/federation/tsconfig.json @@ -84,4 +84,7 @@ "skipLibCheck": true, /* Skip type checking of declaration files. */ "forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */ }, + "ts-node": { + "swc": true + } } diff --git a/frontend/Dockerfile b/frontend/Dockerfile index 9482d8e88..3bf6af01c 100644 --- a/frontend/Dockerfile +++ b/frontend/Dockerfile @@ -16,7 +16,8 @@ ENV BUILD_COMMIT=${BUILD_COMMIT} ARG BUILD_COMMIT_SHORT ENV BUILD_COMMIT_SHORT=${BUILD_COMMIT_SHORT} ## SET NODE_ENV -ENV NODE_ENV="production" +ARG NODE_ENV=production +ENV NODE_ENV=${NODE_ENV} ## App relevant Envs ENV PORT="3000" ## Timezone @@ -38,7 +39,6 @@ LABEL maintainer="support@ogradido.net" # Install Additional Software ## install: node-gyp dependencies #RUN apk --no-cache add g++ make python3 -RUN yarn global add bun # Add bun's global bin directory to PATH ENV PATH="/root/.bun/bin:${PATH}" @@ -50,59 +50,49 @@ EXPOSE ${PORT} RUN mkdir -p ${DOCKER_WORKDIR} WORKDIR ${DOCKER_WORKDIR} +################################################################################## +# BUN ############################################################################ +################################################################################## +FROM base as bun-base + +RUN apk update && apk add --no-cache curl tar bash +RUN curl -fsSL https://bun.sh/install | bash +# Add bun's global bin directory to PATH +ENV PATH="/root/.bun/bin:${PATH}" + ################################################################################## # Development #################################################################### ################################################################################## -FROM base AS development +FROM bun-base AS development # used for getting git commit hash direct from .git RUN apk update && apk add --no-cache git # Run command -CMD /bin/sh -c "bun install --frozen-lockfile && bun turbo frontend#dev --env-mode=loose" - - -################################################################################## -# Base with turbo ################################################################ -################################################################################## -FROM base as turbo-base - -RUN apk update && apk add --no-cache libc6-compat \ - && bun add --global turbo@^2 \ - && rm -rf /tmp/* ~/.cache node_modules/.cache - -################################################################################## -# BUILDER (create partly monorepo only with data needed by frontend) ############# -################################################################################## -FROM turbo-base as builder - -COPY --chown=app:app . . -RUN turbo prune frontend --docker +CMD /bin/sh -c "bun install --filter frontend --no-cache --frozen-lockfile \ + && bun install --global --no-cache --no-save turbo@^2 \ + && turbo frontend#dev --env-mode=loose" ################################################################################## # INSTALLER (create production image) ############################################ ################################################################################## -FROM turbo-base AS installer +FROM bun-base AS build + +COPY --chown=app:app . . +RUN bun install --filter frontend --no-cache --frozen-lockfile \ + && bun install --global turbo@^2 -# First install the dependencies (as they change less often) -COPY --chown=app:app --from=builder /app/out/json/ . -RUN yarn install --frozen-lockfile --production=false \ - && rm -rf /tmp/* ~/.cache node_modules/.cache \ - && yarn cache clean - -# Build the project -COPY --chown=app:app --from=builder /app/out/full/ . # TODO: get the actually git commit hash into docker ENV BUILD_COMMIT='deadbeefdeadbeefdeadbeefdeadbeefdeadbeef' ENV BUILD_COMMIT_SHORT='deadbeef' ENV BUILD_VERSION='broken' -RUN turbo build --env-mode=loose +RUN turbo frontend#build --env-mode=loose ################################################################################## # TEST ########################################################################### ################################################################################## -FROM installer as test +FROM build as test # Run command CMD /bin/sh -c "turbo frontend#test --env-mode=loose" @@ -117,5 +107,5 @@ FROM lipanski/docker-static-website:latest as production # https://lipanski.com/posts/smallest-docker-image-static-website # copy builded frontend files -COPY --from=installer /app/frontend/build/ . +COPY --from=build /app/frontend/build/ . diff --git a/frontend/turbo.json b/frontend/turbo.json index 13d3bc9f8..771b65a25 100644 --- a/frontend/turbo.json +++ b/frontend/turbo.json @@ -12,7 +12,10 @@ "persistent": true }, "build": { - "dependsOn": ["compile-scss"] + "dependsOn": ["compile-scss", "^build"], + "outputs": ["build/**"], + "cache": true } } } + \ No newline at end of file diff --git a/scripts/clean-prebuilds.sh b/scripts/clean-prebuilds.sh new file mode 100755 index 000000000..d1afd92f0 --- /dev/null +++ b/scripts/clean-prebuilds.sh @@ -0,0 +1,36 @@ +#!/bin/sh + +# Determine the current platform +ARCH=$(uname -m) +PLATFORM="" + +case "$ARCH" in + x86_64) + PLATFORM="linux-x64" + ;; + aarch64 | arm64) + PLATFORM="linux-arm64" + ;; + *) + echo "Sorry, your architecture is not on the guest list: $ARCH" + exit 1 + ;; +esac + +echo "Platform detected: $PLATFORM" + +# Find all prebuilds folders +find node_modules -type d -name prebuilds | while read prebuild_dir; do + echo "Processing: $prebuild_dir" + + for subdir in "$prebuild_dir"/*; do + [ -d "$subdir" ] || continue + foldername=$(basename "$subdir") + if [ "$foldername" != "$PLATFORM" ]; then + echo " ➜ Deleting: $subdir (you won't miss it)" + rm -rf "$subdir" + else + echo " ✓ Keeping: $subdir (it's a keeper)" + fi + done +done From b95920f354388378357cf3f9842dce5cf6baa2c2 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Mon, 5 May 2025 20:15:06 +0200 Subject: [PATCH 041/123] small fixes --- .github/workflows/test_admin_interface.yml | 2 +- .github/workflows/test_backend.yml | 8 +++++--- .github/workflows/test_database.yml | 2 +- .github/workflows/test_dht_node.yml | 2 +- .github/workflows/test_federation.yml | 2 +- .github/workflows/test_frontend.yml | 2 +- backend/src/password/EncryptorUtils.ts | 4 ++-- bun.lock | 1 + frontend/turbo.json | 1 - 9 files changed, 13 insertions(+), 11 deletions(-) diff --git a/.github/workflows/test_admin_interface.yml b/.github/workflows/test_admin_interface.yml index b9d62a5ad..2026b487a 100644 --- a/.github/workflows/test_admin_interface.yml +++ b/.github/workflows/test_admin_interface.yml @@ -58,7 +58,7 @@ jobs: - name: install dependencies run: | bun install --filter admin --frozen-lockfile - bun install --global turbo@^2 + bun install --global --no-save turbo@^2 - name: Admin Interface | Unit tests id: test diff --git a/.github/workflows/test_backend.yml b/.github/workflows/test_backend.yml index f177668f8..7c4d25026 100644 --- a/.github/workflows/test_backend.yml +++ b/.github/workflows/test_backend.yml @@ -56,13 +56,15 @@ jobs: uses: oven-sh/setup-bun@v2 - name: install dependencies - run: bun install --filter backend --frozen-lockfile + run: | + bun install --filter backend --frozen-lockfile + bun install --global --no-save turbo@^2 - name: Wait for MariaDB to be ready run: until nc -z localhost 3306; do echo waiting for db; sleep 1; done; - name: Backend | Unit tests - run: bun turbo backend#test + run: turbo backend#test typecheck: if: needs.files-changed.outputs.backend == 'true' @@ -84,7 +86,7 @@ jobs: - name: install dependencies run: | bun install --filter backend --frozen-lockfile - bun install --global turbo@^2 + bun install --global --no-save turbo@^2 - name: Backend | Typecheck run: turbo backend#typecheck backend#build diff --git a/.github/workflows/test_database.yml b/.github/workflows/test_database.yml index 5a448e434..9347ba30a 100644 --- a/.github/workflows/test_database.yml +++ b/.github/workflows/test_database.yml @@ -51,7 +51,7 @@ jobs: - name: install dependencies run: | bun install --filter database --frozen-lockfile - bun install --global turbo@^2 + bun install --global --no-save turbo@^2 - name: Wait for MariaDB to be ready run: docker run --rm --network gradido_internal-net busybox sh -c 'until nc -z mariadb 3306; do echo waiting for db; sleep 1; done;' diff --git a/.github/workflows/test_dht_node.yml b/.github/workflows/test_dht_node.yml index 8968609eb..ba733290d 100644 --- a/.github/workflows/test_dht_node.yml +++ b/.github/workflows/test_dht_node.yml @@ -57,7 +57,7 @@ jobs: - name: install dependencies run: | bun install --filter dht-node --frozen-lockfile - bun install --global turbo@^2 + bun install --global --no-save turbo@^2 - name: Wait for MariaDB to be ready run: until nc -z localhost 3306; do echo waiting for db; sleep 1; done; diff --git a/.github/workflows/test_federation.yml b/.github/workflows/test_federation.yml index d139b9d27..7dfd36c81 100644 --- a/.github/workflows/test_federation.yml +++ b/.github/workflows/test_federation.yml @@ -57,7 +57,7 @@ jobs: - name: install dependencies run: | bun install --filter federation --frozen-lockfile - bun install --global turbo@^2 + bun install --global --no-save turbo@^2 - name: Wait for MariaDB to be ready run: until nc -z localhost 3306; do echo waiting for db; sleep 1; done; diff --git a/.github/workflows/test_frontend.yml b/.github/workflows/test_frontend.yml index 2f8931c5d..9691e4694 100644 --- a/.github/workflows/test_frontend.yml +++ b/.github/workflows/test_frontend.yml @@ -81,7 +81,7 @@ jobs: - name: install dependencies run: | bun install --filter frontend --frozen-lockfile - bun install --global turbo@^2 + bun install --global --no-save turbo@^2 - name: Frontend | Lint id: lint diff --git a/backend/src/password/EncryptorUtils.ts b/backend/src/password/EncryptorUtils.ts index 53e217078..afb706cfb 100644 --- a/backend/src/password/EncryptorUtils.ts +++ b/backend/src/password/EncryptorUtils.ts @@ -22,7 +22,8 @@ let encryptionWorkerPool: Pool | undefined if (CONFIG.USE_CRYPTO_WORKER === true) { encryptionWorkerPool = pool( path.join(__dirname, '..', 'build', 'password', 'EncryptionWorker.js'), - { maxQueueSize: 30 * cpus().length }) + { maxQueueSize: 30 * cpus().length }, + ) } // We will reuse this for changePassword @@ -69,7 +70,6 @@ export const SecretKeyCryptographyCreateKey = async ( // pool is throwing this error // throw new Error('Max queue size of ' + this.maxQueueSize + ' reached'); // will be shown in frontend to user - console.log(JSON.stringify(e, null, 2)) throw new LogError('Server is full, please try again in 10 minutes.', e) } } diff --git a/bun.lock b/bun.lock index 9e1319a73..dd1f2f413 100644 --- a/bun.lock +++ b/bun.lock @@ -266,6 +266,7 @@ "apollo-server-testing": "2.25.2", "graphql-tag": "^2.12.6", "jest": "27.2.4", + "nodemon": "^2.0.7", "prettier": "^3.5.3", "ts-jest": "27.0.5", "typescript": "^4.9.5", diff --git a/frontend/turbo.json b/frontend/turbo.json index 771b65a25..434acaba2 100644 --- a/frontend/turbo.json +++ b/frontend/turbo.json @@ -18,4 +18,3 @@ } } } - \ No newline at end of file From e32d7da3fdbed5d4845af25c4a09835bf2e04c96 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Tue, 6 May 2025 10:04:57 +0200 Subject: [PATCH 042/123] tweek dht-node docker --- bun.lock | 23 +++++++++++--------- dht-node/Dockerfile | 43 ++++++++++++++++++++++++++++++++++---- dht-node/README.md | 8 +++++++ dht-node/esbuild.config.ts | 2 +- dht-node/package.json | 22 ++++++++++--------- 5 files changed, 73 insertions(+), 25 deletions(-) diff --git a/bun.lock b/bun.lock index 9e1319a73..cee6b05ce 100644 --- a/bun.lock +++ b/bun.lock @@ -197,29 +197,31 @@ "name": "dht-node", "version": "2.5.1", "dependencies": { - "@hyperswarm/dht": "^6.5.1", - "config-schema": "*", "cross-env": "^7.0.3", - "database": "*", - "dotenv": "10.0.0", - "esbuild": "^0.25.3", - "joi": "^17.13.3", - "log4js": "^6.9.1", - "tsx": "^4.19.4", - "typeorm": "^0.3.22", - "uuid": "^8.3.2", + "dht-rpc": "6.18.1", + "sodium-universal": "4.0.1", }, "devDependencies": { "@biomejs/biome": "1.9.4", + "@hyperswarm/dht": "6.5.1", "@types/dotenv": "^8.2.3", "@types/jest": "27.5.1", "@types/joi": "^17.2.3", "@types/node": "^17.0.45", "@types/uuid": "^8.3.4", + "config-schema": "*", + "database": "*", + "dotenv": "10.0.0", + "esbuild": "^0.25.3", "jest": "27.5.1", + "joi": "^17.13.3", + "log4js": "^6.9.1", "prettier": "^2.8.8", "ts-jest": "27.1.4", + "tsx": "^4.19.4", + "typeorm": "^0.3.22", "typescript": "^4.9.5", + "uuid": "^8.3.2", }, }, "federation": { @@ -266,6 +268,7 @@ "apollo-server-testing": "2.25.2", "graphql-tag": "^2.12.6", "jest": "27.2.4", + "nodemon": "^2.0.7", "prettier": "^3.5.3", "ts-jest": "27.0.5", "typescript": "^4.9.5", diff --git a/dht-node/Dockerfile b/dht-node/Dockerfile index a219600b3..ccdeb631a 100644 --- a/dht-node/Dockerfile +++ b/dht-node/Dockerfile @@ -71,15 +71,20 @@ CMD /bin/sh -c "bun install --filter dht-node --no-cache --frozen-lockfile \ && bun install --global --no-cache --no-save turbo@^2 \ && turbo dht-node#dev --env-mode=loose" +################################################################################## +# Basic Image with bun setup and project and source code ######################### +################################################################################## +FROM bun-base as bun-base-src +COPY --chown=app:app . . + ################################################################################## # BUILDER (create partly monorepo only with data needed by dht-node) ############# ################################################################################## -FROM bun-base as build +FROM bun-base-src as build -COPY --chown=app:app . . RUN bun install --filter dht-node --no-cache --frozen-lockfile \ - && bun install --global --no-cache --no-save turbo@^2 \ - && turbo dht-node#build dht-node#typecheck --env-mode=loose + && bun install --global --no-cache --no-save turbo@^2 +RUN turbo dht-node#build dht-node#typecheck --env-mode=loose ################################################################################## # TEST ########################################################################### @@ -90,11 +95,41 @@ ENV DB_HOST=mariadb # Run command CMD /bin/sh -c "turbo dht-node#test --env-mode=loose" +################################################################################## +# install only node modules needed for running bundle ############################ +################################################################################## +FROM bun-base-src as production-node-modules + +# add node_modules from production_node_modules +RUN bun install --filter dht-node --production --frozen-lockfile --no-cache \ + && rm -rf /tmp/* ~/.cache node_modules/.cache \ + && ./scripts/clean-prebuilds.sh + ################################################################################## # PRODUCTION (Does contain only "binary"- and static-files to reduce image size) # ################################################################################## FROM base as production +# Copy "binary"-files from build image +COPY --chown=app:app --from=build ${DOCKER_WORKDIR}/dht-node/build/index.js ./index.js + +# add node_modules from production_node_modules +COPY --chown=app:app --from=production-node-modules ${DOCKER_WORKDIR}/node_modules ./node_modules + +# Copy log4js-config.json to provide log configuration +COPY --chown=app:app --from=build ${DOCKER_WORKDIR}/dht-node/log4js-config.json ./log4js-config.json +ENV DB_HOST=mariadb +ENV TZ=UTC +# Run command +CMD ["node", "index.js"] + + +################################################################################## +# PRODUCTION (Does contain only "binary"- and static-files to reduce image size) # +# Experimental, install only some node_modules which can't be bundled ############ +################################################################################## +FROM base as production-small + # Copy "binary"-files from build image COPY --chown=app:app --from=build ${DOCKER_WORKDIR}/dht-node/build/index.js ./index.js COPY --chown=app:app --from=build ${DOCKER_WORKDIR}/scripts/clean-prebuilds.sh ./clean-prebuilds.sh diff --git a/dht-node/README.md b/dht-node/README.md index 88a2ca570..3affa9a49 100644 --- a/dht-node/README.md +++ b/dht-node/README.md @@ -7,3 +7,11 @@ Bun crashes when a NAPI module tries to call `uv_interface_addresses`, a libuv function currently unsupported: Bun is working hard to support all NAPI module calls + +## Production Build +Package.json dependencies contain only node_modules which cannot be bundled because of native node modules or needed for run start script. They are manually picked from @hyperswarm/dht +dependencies. The versions should be updated, if @hyperswarm/dht is updated. +The goal is to get a really small footprint for the production image. It is also possible to use in bare_metal setup. + +### Bare Metal minimal setup +For a minimal bare metal production setup, look into [Dockerfile](Dockerfile) in the production step. diff --git a/dht-node/esbuild.config.ts b/dht-node/esbuild.config.ts index 8e0c6583a..f38039c43 100644 --- a/dht-node/esbuild.config.ts +++ b/dht-node/esbuild.config.ts @@ -8,7 +8,7 @@ build({ bundle: true, keepNames: true, // legalComments: 'inline', - external: ['udx-native', 'sodium-native'], + external: ['dht-rpc', 'sodium-universal'], minify: true, sourcemap: false, }) diff --git a/dht-node/package.json b/dht-node/package.json index c7d662622..966734066 100644 --- a/dht-node/package.json +++ b/dht-node/package.json @@ -17,29 +17,31 @@ "test": "cross-env TZ=UTC NODE_ENV=development DB_DATABASE=gradido_test_dht jest --runInBand --forceExit --detectOpenHandles" }, "dependencies": { - "@hyperswarm/dht": "^6.5.1", - "config-schema": "*", - "cross-env": "^7.0.3", - "database": "*", - "dotenv": "10.0.0", - "joi": "^17.13.3", - "log4js": "^6.9.1", - "typeorm": "^0.3.22", - "uuid": "^8.3.2" + "dht-rpc": "6.18.1", + "sodium-universal": "4.0.1", + "cross-env": "^7.0.3" }, "devDependencies": { "@biomejs/biome": "1.9.4", + "@hyperswarm/dht": "6.5.1", "@types/dotenv": "^8.2.3", "@types/jest": "27.5.1", "@types/joi": "^17.2.3", "@types/node": "^17.0.45", "@types/uuid": "^8.3.4", + "config-schema": "*", + "database": "*", + "dotenv": "10.0.0", "esbuild": "^0.25.3", "jest": "27.5.1", + "joi": "^17.13.3", + "log4js": "^6.9.1", "prettier": "^2.8.8", "ts-jest": "27.1.4", "tsx": "^4.19.4", - "typescript": "^4.9.5" + "typeorm": "^0.3.22", + "typescript": "^4.9.5", + "uuid": "^8.3.2" }, "engines": { "node": ">=18" From 419b21fdfdd22487138136b6ac8b3b7e65e5dad1 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Tue, 6 May 2025 10:10:01 +0200 Subject: [PATCH 043/123] remove unused code --- .github/workflows/test_dht_node.yml | 2 +- dht-node/Dockerfile | 34 ++++------------------------- 2 files changed, 5 insertions(+), 31 deletions(-) diff --git a/.github/workflows/test_dht_node.yml b/.github/workflows/test_dht_node.yml index 8968609eb..4e2daf2d2 100644 --- a/.github/workflows/test_dht_node.yml +++ b/.github/workflows/test_dht_node.yml @@ -31,7 +31,7 @@ jobs: - name: Checkout code uses: actions/checkout@v3 - - name: Build 'test' image (typecheck & build) + - name: Build 'production' image run: docker build --target production -t "gradido/dht-node:production" -f dht-node/Dockerfile . unit_test: diff --git a/dht-node/Dockerfile b/dht-node/Dockerfile index ccdeb631a..0b28c992c 100644 --- a/dht-node/Dockerfile +++ b/dht-node/Dockerfile @@ -1,8 +1,8 @@ ################################################################################## # BASE ########################################################################### ################################################################################## -FROM node:18.20.7-bookworm-slim as base -#FROM node:18.20.7-alpine3.21 as base +#FROM node:18.20.7-bookworm-slim as base +FROM node:18.20.7-alpine3.21 as base #FROM ubuntu:latest as base # ENVs (available in production aswell, can be overwritten by commandline or env file) @@ -20,6 +20,7 @@ ENV NODE_ENV="production" #ENV PORT="5000" ## Timezone ENV TZ=UTC +ENV DB_HOST=mariadb # Labels LABEL org.label-schema.build-date="${BUILD_DATE}" @@ -91,7 +92,6 @@ RUN turbo dht-node#build dht-node#typecheck --env-mode=loose ################################################################################## FROM build as test -ENV DB_HOST=mariadb # Run command CMD /bin/sh -c "turbo dht-node#test --env-mode=loose" @@ -118,32 +118,6 @@ COPY --chown=app:app --from=production-node-modules ${DOCKER_WORKDIR}/node_modul # Copy log4js-config.json to provide log configuration COPY --chown=app:app --from=build ${DOCKER_WORKDIR}/dht-node/log4js-config.json ./log4js-config.json -ENV DB_HOST=mariadb -ENV TZ=UTC + # Run command CMD ["node", "index.js"] - - -################################################################################## -# PRODUCTION (Does contain only "binary"- and static-files to reduce image size) # -# Experimental, install only some node_modules which can't be bundled ############ -################################################################################## -FROM base as production-small - -# Copy "binary"-files from build image -COPY --chown=app:app --from=build ${DOCKER_WORKDIR}/dht-node/build/index.js ./index.js -COPY --chown=app:app --from=build ${DOCKER_WORKDIR}/scripts/clean-prebuilds.sh ./clean-prebuilds.sh -#COPY --chown=app:app --from=build ${DOCKER_WORKDIR}/dht-node/package.json ./package.json - -# We also install the native node_modules which cannot be bundled -# TODO: find a elegant way to use the right versions from yarn.lock -RUN yarn add @hyperswarm/dht@^6.5.1 \ - && rm -rf /tmp/* ~/.cache node_modules/.cache \ - && yarn cache clean \ - && ./clean-prebuilds.sh - -# Copy log4js-config.json to provide log configuration -COPY --chown=app:app --from=build ${DOCKER_WORKDIR}/dht-node/log4js-config.json ./log4js-config.json -ENV DB_HOST=mariadb -# Run command -CMD ["node", "index.js"] \ No newline at end of file From 102f5b18530deebb2f1d812337d827d61a322402 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Tue, 6 May 2025 10:56:15 +0200 Subject: [PATCH 044/123] back to bookworm --- dht-node/Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dht-node/Dockerfile b/dht-node/Dockerfile index 0b28c992c..b98acc61d 100644 --- a/dht-node/Dockerfile +++ b/dht-node/Dockerfile @@ -1,8 +1,8 @@ ################################################################################## # BASE ########################################################################### ################################################################################## -#FROM node:18.20.7-bookworm-slim as base -FROM node:18.20.7-alpine3.21 as base +FROM node:18.20.7-bookworm-slim as base +#FROM node:18.20.7-alpine3.21 as base #FROM ubuntu:latest as base # ENVs (available in production aswell, can be overwritten by commandline or env file) From 07f062a43baff934308fe2f05594628847a2af01 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Tue, 6 May 2025 11:38:15 +0200 Subject: [PATCH 045/123] fix admin import config --- admin/src/config/index.js | 2 +- admin/src/config/schema.js | 6 +++--- admin/{vite.config.js => vite.config.mjs} | 5 ++--- 3 files changed, 6 insertions(+), 7 deletions(-) rename admin/{vite.config.js => vite.config.mjs} (98%) diff --git a/admin/src/config/index.js b/admin/src/config/index.js index 37d98c606..d64ba6f5f 100644 --- a/admin/src/config/index.js +++ b/admin/src/config/index.js @@ -2,7 +2,7 @@ // The whole contents is exposed to the client // Load Package Details for some default values -const pkg = require('../../package') +import pkg from '../../package' const version = { ADMIN_MODULE_PROTOCOL: process.env.ADMIN_MODULE_PROTOCOL ?? 'http', diff --git a/admin/src/config/schema.js b/admin/src/config/schema.js index 2d0617122..d461a7cb4 100644 --- a/admin/src/config/schema.js +++ b/admin/src/config/schema.js @@ -1,4 +1,4 @@ -const { +import { APP_VERSION, BUILD_COMMIT, BUILD_COMMIT_SHORT, @@ -10,8 +10,8 @@ const { NODE_ENV, OPENAI_ACTIVE, PRODUCTION, -} = require('config-schema') -const Joi = require('joi') +} from 'config-schema' +import Joi from 'joi' module.exports = Joi.object({ APP_VERSION, diff --git a/admin/vite.config.js b/admin/vite.config.mjs similarity index 98% rename from admin/vite.config.js rename to admin/vite.config.mjs index 1499b2090..992626334 100644 --- a/admin/vite.config.js +++ b/admin/vite.config.mjs @@ -7,18 +7,17 @@ import IconsResolve from 'unplugin-icons/resolver' import { BootstrapVueNextResolver } from 'bootstrap-vue-next' import EnvironmentPlugin from 'vite-plugin-environment' import schema from './src/config/schema' +import CONFIG from './src/config' import { execSync } from 'node:child_process' import { existsSync, constants } from 'node:fs' import { validate, browserUrls } from 'config-schema' -import path from 'node:path' +import path from 'node:path' import dotenv from 'dotenv' dotenv.config() // load env vars from .env -const CONFIG = require('./src/config') - export default defineConfig(async ({ command }) => { const { vitePluginGraphqlLoader } = await import('vite-plugin-graphql-loader') if (command === 'serve') { From bbfb7fdd8b37ebb51dddf3a372e0aa9ef20d999b Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Tue, 6 May 2025 11:39:54 +0200 Subject: [PATCH 046/123] fix import config for frontend --- frontend/src/config/index.js | 2 +- frontend/src/config/schema.js | 8 ++++---- frontend/{vite.config.js => vite.config.mjs} | 0 3 files changed, 5 insertions(+), 5 deletions(-) rename frontend/{vite.config.js => vite.config.mjs} (100%) diff --git a/frontend/src/config/index.js b/frontend/src/config/index.js index 0ee64509e..727760353 100644 --- a/frontend/src/config/index.js +++ b/frontend/src/config/index.js @@ -2,7 +2,7 @@ // The whole contents is exposed to the client // Load Package Details for some default values -const pkg = require('../../package') +import pkg from '../../package' const constants = { DECAY_START_TIME: new Date('2021-05-13 17:46:31-0000'), // GMT+0 diff --git a/frontend/src/config/schema.js b/frontend/src/config/schema.js index 1e3accb41..d3c0e8414 100644 --- a/frontend/src/config/schema.js +++ b/frontend/src/config/schema.js @@ -1,11 +1,11 @@ -const { +import { APP_VERSION, BUILD_COMMIT, BUILD_COMMIT_SHORT, COMMUNITY_DESCRIPTION, + COMMUNITY_LOCATION, COMMUNITY_NAME, COMMUNITY_SUPPORT_MAIL, - COMMUNITY_LOCATION, COMMUNITY_URL, DEBUG, DECAY_START_TIME, @@ -14,8 +14,8 @@ const { HUMHUB_ACTIVE, NODE_ENV, PRODUCTION, -} = require('config-schema') -const Joi = require('joi') +} from 'config-schema' +import Joi from 'joi' // console.log(commonSchema) diff --git a/frontend/vite.config.js b/frontend/vite.config.mjs similarity index 100% rename from frontend/vite.config.js rename to frontend/vite.config.mjs From 503ff978a6ea71729f2ced4dd150273ad6510ed6 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Tue, 6 May 2025 17:15:08 +0200 Subject: [PATCH 047/123] refactor docker setup --- .github/workflows/test_backend.yml | 3 - .github/workflows/test_database.yml | 7 +- .github/workflows/test_dht_node.yml | 3 - .github/workflows/test_e2e.yml | 3 - .github/workflows/test_federation.yml | 3 - README.md | 30 ++ admin/Dockerfile | 19 +- backend/Dockerfile | 40 +- backend/esbuild.config.ts | 6 +- backend/package.json | 114 +++-- backend/src/password/EncryptionWorker.d.ts | 7 + ...ncryptionWorker.ts => EncryptionWorker.js} | 24 +- backend/src/password/EncryptorUtils.ts | 4 +- backend/src/password/__mocks__/worker.js | 0 backend/src/password/worker.js | 7 + backend/src/server/createServer.ts | 19 +- backend/src/typeorm/DBVersion.ts | 27 +- biome.json | 9 +- bun.lock | 426 +++++++++--------- database/Dockerfile | 65 +-- database/src/clear.ts | 14 +- database/src/prepare.ts | 27 +- dht-node/Dockerfile | 2 +- dht-node/src/index.ts | 16 +- dht-node/src/typeorm/DBVersion.ts | 27 +- dht-node/test/helpers.ts | 23 +- docker-compose.override.yml | 17 +- docker-compose.yml | 28 +- federation/Dockerfile | 40 +- federation/package.json | 56 ++- federation/src/server/createServer.ts | 19 +- federation/src/typeorm/DBVersion.ts | 26 +- frontend/Dockerfile | 19 +- nginx/Dockerfile | 3 +- nginx/admin.conf | 14 + nginx/frontend.conf | 12 + yarn.lock | 8 +- 37 files changed, 631 insertions(+), 536 deletions(-) create mode 100644 backend/src/password/EncryptionWorker.d.ts rename backend/src/password/{EncryptionWorker.ts => EncryptionWorker.js} (72%) create mode 100644 backend/src/password/__mocks__/worker.js create mode 100644 backend/src/password/worker.js create mode 100644 nginx/admin.conf create mode 100644 nginx/frontend.conf diff --git a/.github/workflows/test_backend.yml b/.github/workflows/test_backend.yml index 7c4d25026..ca3ce0e69 100644 --- a/.github/workflows/test_backend.yml +++ b/.github/workflows/test_backend.yml @@ -60,9 +60,6 @@ jobs: bun install --filter backend --frozen-lockfile bun install --global --no-save turbo@^2 - - name: Wait for MariaDB to be ready - run: until nc -z localhost 3306; do echo waiting for db; sleep 1; done; - - name: Backend | Unit tests run: turbo backend#test diff --git a/.github/workflows/test_database.yml b/.github/workflows/test_database.yml index 9347ba30a..ac313ff34 100644 --- a/.github/workflows/test_database.yml +++ b/.github/workflows/test_database.yml @@ -30,8 +30,8 @@ jobs: - name: Checkout code uses: actions/checkout@v3 - - name: Database | Build 'up' image - run: docker build --target up -t "gradido/database:up" -f database/Dockerfile . + - name: Database | Build image + run: docker build --target build -t "gradido/database:build" -f database/Dockerfile . database_migration_test: if: needs.files-changed.outputs.database == 'true' || needs.files-changed.outputs.docker-compose == 'true' || needs.files-changed.outputs.mariadb == 'true' @@ -53,9 +53,6 @@ jobs: bun install --filter database --frozen-lockfile bun install --global --no-save turbo@^2 - - name: Wait for MariaDB to be ready - run: docker run --rm --network gradido_internal-net busybox sh -c 'until nc -z mariadb 3306; do echo waiting for db; sleep 1; done;' - - name: Database | up run: turbo up diff --git a/.github/workflows/test_dht_node.yml b/.github/workflows/test_dht_node.yml index f454c9cff..bdde2d22f 100644 --- a/.github/workflows/test_dht_node.yml +++ b/.github/workflows/test_dht_node.yml @@ -59,9 +59,6 @@ jobs: bun install --filter dht-node --frozen-lockfile bun install --global --no-save turbo@^2 - - name: Wait for MariaDB to be ready - run: until nc -z localhost 3306; do echo waiting for db; sleep 1; done; - - name: run unit test & build & typecheck run: turbo dht-node#test dht-node#build dht-node#typecheck diff --git a/.github/workflows/test_e2e.yml b/.github/workflows/test_e2e.yml index 5015e3887..0f1fe278c 100644 --- a/.github/workflows/test_e2e.yml +++ b/.github/workflows/test_e2e.yml @@ -22,9 +22,6 @@ jobs: bun install sudo cp ./nginx/e2e-test.conf /etc/nginx/sites-available/default - - name: wait for database to be ready - run: until nc -z localhost 3306; do echo waiting for db; sleep 1; done; - - name: Boot up test system | seed backend run: bun turbo seed diff --git a/.github/workflows/test_federation.yml b/.github/workflows/test_federation.yml index 7dfd36c81..18cceed89 100644 --- a/.github/workflows/test_federation.yml +++ b/.github/workflows/test_federation.yml @@ -59,9 +59,6 @@ jobs: bun install --filter federation --frozen-lockfile bun install --global --no-save turbo@^2 - - name: Wait for MariaDB to be ready - run: until nc -z localhost 3306; do echo waiting for db; sleep 1; done; - - name: Federation | Unit tests id: test run: turbo federation#test federation#build federation#typecheck \ No newline at end of file diff --git a/README.md b/README.md index 36782e704..d39282678 100644 --- a/README.md +++ b/README.md @@ -145,6 +145,36 @@ bun install Note that some modules are still not fully compatible with Bun. Therefore, continue using **Yarn** for development if you run into any issues. +### EMFILE: too many open files +With +```bash +yarn docker_dev +``` +or also +```bash +turbo dev +``` +Many files will be watched by the various services. +This can lead to this error: **EMFILE: too many open files** +If increasing ulimit don't help, consider starting only the services on +which you are working on in dev mode and the rest in production mode. + +For example if you are only working on the frontend, you can start the frontend in dev mode and the rest in production mode: +```bash +yarn docker_dev frontend +``` +and in another bash +```bash +yarn docker backend admin database nginx --no-deps +``` +or local with turbo +```bash +turbo frontend#dev backend#start admin#start --env-mode=loose +``` + +Tip: for local setup use a local nginx server with similar config like docker nginx [nginx.conf](./nginx/gradido.conf) but replace docker image name with localhost + + ## Services defined in this package - [frontend](./frontend) Wallet frontend diff --git a/admin/Dockerfile b/admin/Dockerfile index 0fa88c333..3069db630 100644 --- a/admin/Dockerfile +++ b/admin/Dockerfile @@ -10,12 +10,13 @@ ENV DOCKER_WORKDIR="/app" ## We Cannot do `$(date -u +'%Y-%m-%dT%H:%M:%SZ')` here so we use unix timestamp=0 ENV BUILD_DATE="1970-01-01T00:00:00.00Z" ## We cannot do $(npm run version).${BUILD_NUMBER} here so we default to 0.0.0.0 +# TODO: get the actually git commit hash into docker ARG BUILD_VERSION -ENV BUILD_VERSION=${BUILD_VERSION} +ENV BUILD_VERSION=${BUILD_VERSION:-'broken'} ARG BUILD_COMMIT -ENV BUILD_COMMIT=${BUILD_COMMIT} +ENV BUILD_COMMIT=${BUILD_COMMIT:-'deadbeefdeadbeefdeadbeefdeadbeefdeadbeef'} ARG BUILD_COMMIT_SHORT -ENV BUILD_COMMIT_SHORT=${BUILD_COMMIT_SHORT} +ENV BUILD_COMMIT_SHORT=${BUILD_COMMIT_SHORT:-'deadbeef'} ## SET NODE_ENV ARG NODE_ENV=production ENV NODE_ENV=${NODE_ENV} @@ -83,10 +84,6 @@ COPY --chown=app:app . . RUN bun install --filter admin --no-cache --frozen-lockfile \ && bun install --global turbo@^2 -# TODO: get the actually git commit hash into docker -ENV BUILD_COMMIT=deadbeefdeadbeefdeadbeefdeadbeefdeadbeef -ENV BUILD_COMMIT_SHORT=deadbeef -ENV BUILD_VERSION=broken RUN turbo admin#build --env-mode=loose ################################################################################## @@ -100,11 +97,11 @@ CMD /bin/sh -c "turbo admin#test --env-mode=loose" ################################################################################## # PRODUCTION (Does contain only "binary"- and static-files to reduce image size) # ################################################################################## -FROM lipanski/docker-static-website:latest as production +FROM nginx:1.28.0-alpine3.21-slim as production -# tiny static webserver -# https://lipanski.com/posts/smallest-docker-image-static-website +COPY ./nginx/admin.conf /etc/nginx/conf.d/default.conf + +WORKDIR /app # copy builded frontend files COPY --from=build /app/admin/build/ ./admin/ - diff --git a/backend/Dockerfile b/backend/Dockerfile index 6d126fa25..4c1ceb36e 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -1,7 +1,9 @@ ################################################################################## # BASE ########################################################################### ################################################################################## -FROM node:18.20.7-alpine3.21 as base +FROM node:18.20.7-bookworm-slim as base +#FROM node:18.20.7-alpine3.21 as base +# change to alpine after sodium-native ship with native alpine build # ENVs (available in production aswell, can be overwritten by commandline or env file) ## DOCKER_WORKDIR would be a classical ARG, but that is not multi layer persistent - shame @@ -18,6 +20,7 @@ ENV NODE_ENV=production ENV PORT="4000" ## Timezone ENV TZ=UTC +ENV DB_HOST=mariadb # Labels LABEL org.label-schema.build-date="${BUILD_DATE}" @@ -50,7 +53,8 @@ WORKDIR ${DOCKER_WORKDIR} ################################################################################## FROM base as bun-base -RUN apk update && apk add --no-cache curl tar bash +RUN apt update && apt install -y --no-install-recommends ca-certificates curl bash unzip +#RUN apk update && apk add --no-cache curl tar bash RUN curl -fsSL https://bun.sh/install | bash # Add bun's global bin directory to PATH ENV PATH="/root/.bun/bin:${PATH}" @@ -65,26 +69,39 @@ CMD /bin/sh -c "bun install --filter backend --no-cache --frozen-lockfile \ && bun install --global --no-cache --no-save turbo@^2 \ && turbo backend#dev --env-mode=loose" +################################################################################## +# Basic Image with bun setup and project and source code ######################### +################################################################################## +FROM bun-base as bun-base-src +COPY --chown=app:app . . + ################################################################################## # Build ########################################################################## ################################################################################## -FROM bun-base as build +FROM bun-base-src as build -COPY --chown=app:app . . RUN bun install --filter backend --no-cache --frozen-lockfile \ - && bun install --global --no-cache --no-save turbo@^2 \ - && turbo backend#build backend#typecheck --env-mode=loose + && bun install --global --no-cache --no-save turbo@^2 +RUN turbo backend#build backend#typecheck --env-mode=loose ################################################################################## # TEST ########################################################################### ################################################################################## FROM build as test -ENV DB_HOST=mariadb - # Run command CMD /bin/sh -c "turbo backend#test --env-mode=loose" +################################################################################## +# install only node modules needed for running bundle ############################ +################################################################################## +FROM bun-base-src as production-node-modules + +# add node_modules from production_node_modules +RUN bun install --filter backend --production --frozen-lockfile --no-cache \ + && rm -rf /tmp/* ~/.cache node_modules/.cache \ + && ./scripts/clean-prebuilds.sh + ################################################################################## # PRODUCTION (Does contain only "binary"- and static-files to reduce image size) # ################################################################################## @@ -92,10 +109,9 @@ FROM base as production # Copy "binary"-files from build image COPY --chown=app:app --from=build ${DOCKER_WORKDIR}/backend/build/index.js ./index.js - -RUN yarn add sodium-native@4.0.0 email-templates@10.0.1 \ - && rm -rf /tmp/* ~/.cache node_modules/.cache \ - && yarn cache clean +COPY --chown=app:app --from=build ${DOCKER_WORKDIR}/backend/build/worker.js ./worker.js +# add node_modules from production_node_modules +COPY --chown=app:app --from=production-node-modules ${DOCKER_WORKDIR}/node_modules ./node_modules # Copy log4js-config.json to provide log configuration COPY --chown=app:app --from=build ${DOCKER_WORKDIR}/backend/log4js-config.json ./log4js-config.json diff --git a/backend/esbuild.config.ts b/backend/esbuild.config.ts index 9b545dc4d..87efef48e 100644 --- a/backend/esbuild.config.ts +++ b/backend/esbuild.config.ts @@ -2,15 +2,15 @@ import { esbuildDecorators } from '@anatine/esbuild-decorators' import { build } from 'esbuild' build({ - entryPoints: ['src/index.ts', 'src/password/EncryptionWorker.ts'], + entryPoints: ['src/index.ts', 'src/password/worker.js'], outdir: 'build', platform: 'node', target: 'node18.20.7', bundle: true, keepNames: true, + entryNames: '[name]', // legalComments: 'inline', external: ['sodium-native', 'email-templates'], plugins: [esbuildDecorators()], - minify: false, - sourcemap: true, + minify: true, }) diff --git a/backend/package.json b/backend/package.json index 84cd523c3..83336620a 100644 --- a/backend/package.json +++ b/backend/package.json @@ -1,71 +1,37 @@ { "name": "backend", "version": "2.5.1", - "description": "Gradido unified backend providing an API-Service for Gradido Transactions", - "main": "src/index.ts", - "repository": "https://github.com/gradido/gradido/backend", - "author": "Gradido Academy - https://www.gradido.net", - "license": "Apache-2.0", "private": false, + "description": "Gradido unified backend providing an API-Service for Gradido Transactions", + "repository": "https://github.com/gradido/gradido/backend", + "license": "Apache-2.0", + "author": "Gradido Academy - https://www.gradido.net", + "main": "src/index.ts", "scripts": { "build": "ts-node ./esbuild.config.ts && mkdirp build/templates/ && ncp src/emails/templates build/templates && mkdirp locales/ && ncp src/locales locales", "clean": "tsc --build --clean", - "start": "cross-env TZ=UTC NODE_ENV=production node build/index.js", "dev": "cross-env TZ=UTC nodemon -w src --ext ts,pug,json,css -r tsconfig-paths/register src/index.ts", - "typecheck": "tsc --noEmit", - "lint": "biome check --error-on-warnings .", - "lint:fix": "biome check --error-on-warnings . --write", - "test": "cross-env TZ=UTC NODE_ENV=development DB_DATABASE=gradido_test_backend jest --runInBand --forceExit --detectOpenHandles", - "seed": "cross-env TZ=UTC NODE_ENV=development ts-node -r tsconfig-paths/register src/seeds/index.ts", - "klicktipp": "cross-env TZ=UTC NODE_ENV=development ts-node -r tsconfig-paths/register src/util/executeKlicktipp.ts", "gmsusers": "cross-env TZ=UTC NODE_ENV=development ts-node -r tsconfig-paths/register src/apis/gms/ExportUsers.ts", "humhubUserExport": "cross-env TZ=UTC NODE_ENV=development ts-node -r tsconfig-paths/register src/apis/humhub/ExportUsers.ts", - "locales": "scripts/sort.sh" + "klicktipp": "cross-env TZ=UTC NODE_ENV=development ts-node -r tsconfig-paths/register src/util/executeKlicktipp.ts", + "lint": "biome check --error-on-warnings .", + "lint:fix": "biome check --error-on-warnings . --write", + "locales": "scripts/sort.sh", + "seed": "cross-env TZ=UTC NODE_ENV=development ts-node -r tsconfig-paths/register src/seeds/index.ts", + "start": "cross-env TZ=UTC NODE_ENV=production node build/index.js", + "test": "cross-env TZ=UTC NODE_ENV=development DB_DATABASE=gradido_test_backend jest --runInBand --forceExit --detectOpenHandles", + "typecheck": "tsc --noEmit" + }, + "nodemonConfig": { + "ignore": ["**/*.test.ts"] }, "dependencies": { - "@anatine/esbuild-decorators": "^0.2.19", - "apollo-server-express": "^2.25.2", - "await-semaphore": "^0.1.3", - "axios": "^0.21.1", - "class-validator": "^0.13.1", - "config-schema": "*", - "cors": "^2.8.5", "cross-env": "^7.0.3", - "database": "*", - "decimal.js-light": "^2.5.1", - "dotenv": "^10.0.0", "email-templates": "^10.0.1", - "esbuild": "^0.25.2", - "express": "^4.17.21", - "express-slow-down": "^2.0.1", - "graphql": "^15.10.1", - "graphql-parse-resolve-info": "^4.13.1", - "graphql-request": "5.0.0", - "graphql-type-json": "0.3.2", - "helmet": "^5.1.1", - "i18n": "^0.15.1", - "joi": "^17.13.3", - "jose": "^4.14.4", - "lodash.clonedeep": "^4.5.0", - "log4js": "^6.7.1", - "mkdirp": "^3.0.1", - "ncp": "^2.0.0", - "nodemailer": "^6.6.5", - "openai": "^4.87.3", - "pug": "^3.0.2", - "random-bigint": "^0.0.1", - "reflect-metadata": "^0.1.13", - "sodium-native": "^3.4.1", - "ts-node": "^10.9.2", - "tsconfig-paths": "^4.1.1", - "type-graphql": "^1.1.1", - "typed-rest-client": "^1.8.11", - "typeorm": "^0.3.16", - "uuid": "^8.3.2", - "workerpool": "^9.2.0", - "xregexp": "^5.1.1" + "sodium-native": "^3.4.1" }, "devDependencies": { + "@anatine/esbuild-decorators": "^0.2.19", "@biomejs/biome": "1.9.4", "@swc/cli": "^0.7.3", "@swc/core": "^1.11.24", @@ -80,21 +46,53 @@ "@types/nodemailer": "^6.4.4", "@types/sodium-native": "^2.3.5", "@types/uuid": "^8.3.4", + "apollo-server-express": "^2.25.2", "apollo-server-testing": "^2.25.2", + "await-semaphore": "^0.1.3", + "axios": "^0.21.1", + "class-validator": "^0.13.1", + "config-schema": "*", + "cors": "^2.8.5", + "database": "*", + "decimal.js-light": "^2.5.1", + "dotenv": "^10.0.0", + "esbuild": "^0.25.2", + "express": "^4.17.21", + "express-slow-down": "^2.0.1", "faker": "^5.5.3", + "graphql": "^15.10.1", + "graphql-parse-resolve-info": "^4.13.1", + "graphql-request": "5.0.0", "graphql-tag": "^2.12.6", + "graphql-type-json": "0.3.2", + "helmet": "^5.1.1", + "i18n": "^0.15.1", "jest": "27.2.4", + "joi": "^17.13.3", + "jose": "^4.14.4", "klicktipp-api": "^1.0.2", + "lodash.clonedeep": "^4.5.0", + "log4js": "^6.7.1", + "mkdirp": "^3.0.1", + "ncp": "^2.0.0", + "nodemailer": "^6.6.5", "nodemon": "^2.0.7", + "openai": "^4.87.3", "prettier": "^3.5.3", + "pug": "^3.0.2", + "random-bigint": "^0.0.1", + "reflect-metadata": "^0.1.13", "regenerator-runtime": "^0.14.1", "ts-jest": "27.0.5", - "typescript": "^4.9.5" - }, - "nodemonConfig": { - "ignore": [ - "**/*.test.ts" - ] + "ts-node": "^10.9.2", + "tsconfig-paths": "^4.1.1", + "type-graphql": "^1.1.1", + "typed-rest-client": "^1.8.11", + "typeorm": "^0.3.16", + "typescript": "^4.9.5", + "uuid": "^8.3.2", + "workerpool": "^9.2.0", + "xregexp": "^5.1.1" }, "engines": { "node": ">=18" diff --git a/backend/src/password/EncryptionWorker.d.ts b/backend/src/password/EncryptionWorker.d.ts new file mode 100644 index 000000000..f97c4cc12 --- /dev/null +++ b/backend/src/password/EncryptionWorker.d.ts @@ -0,0 +1,7 @@ + +export function SecretKeyCryptographyCreateKeyFunc( + salt: string, + password: string, + configLoginAppSecret: Buffer, + configLoginServerKey: Buffer +): bigint; \ No newline at end of file diff --git a/backend/src/password/EncryptionWorker.ts b/backend/src/password/EncryptionWorker.js similarity index 72% rename from backend/src/password/EncryptionWorker.ts rename to backend/src/password/EncryptionWorker.js index 391883883..4df14f3fa 100644 --- a/backend/src/password/EncryptionWorker.ts +++ b/backend/src/password/EncryptionWorker.js @@ -1,6 +1,4 @@ -import { worker } from 'workerpool' - -import { +const { crypto_box_SEEDBYTES, crypto_hash_sha512_BYTES, crypto_hash_sha512_STATEBYTES, @@ -11,14 +9,14 @@ import { crypto_pwhash_SALTBYTES, crypto_shorthash, crypto_shorthash_BYTES, -} from 'sodium-native' +} = require('sodium-native') -export const SecretKeyCryptographyCreateKeyFunc = ( - salt: string, - password: string, - configLoginAppSecret: Buffer, - configLoginServerKey: Buffer, -): bigint => { +exports.SecretKeyCryptographyCreateKeyFunc = ( + salt, + password, + configLoginAppSecret, + configLoginServerKey, +) => { const state = Buffer.alloc(crypto_hash_sha512_STATEBYTES) crypto_hash_sha512_init(state) crypto_hash_sha512_update(state, Buffer.from(salt)) @@ -43,9 +41,3 @@ export const SecretKeyCryptographyCreateKeyFunc = ( crypto_shorthash(encryptionKeyHash, encryptionKey, configLoginServerKey) return encryptionKeyHash.readBigUInt64LE() } - -if (process.env.USE_CRYPTO_WORKER === 'true' && typeof process.send === 'function') { - worker({ - SecretKeyCryptographyCreateKeyFunc, - }) -} diff --git a/backend/src/password/EncryptorUtils.ts b/backend/src/password/EncryptorUtils.ts index afb706cfb..8e8e22495 100644 --- a/backend/src/password/EncryptorUtils.ts +++ b/backend/src/password/EncryptorUtils.ts @@ -12,7 +12,7 @@ import { backendLogger as logger } from '@/server/logger' import { crypto_shorthash_KEYBYTES } from 'sodium-native' -import { SecretKeyCryptographyCreateKeyFunc } from './EncryptionWorker' +import { SecretKeyCryptographyCreateKeyFunc } from './EncryptionWorker.js' const configLoginAppSecret = Buffer.from(CONFIG.LOGIN_APP_SECRET, 'hex') const configLoginServerKey = Buffer.from(CONFIG.LOGIN_SERVER_KEY, 'hex') @@ -21,7 +21,7 @@ let encryptionWorkerPool: Pool | undefined if (CONFIG.USE_CRYPTO_WORKER === true) { encryptionWorkerPool = pool( - path.join(__dirname, '..', 'build', 'password', 'EncryptionWorker.js'), + path.join(__dirname, 'worker.js'), { maxQueueSize: 30 * cpus().length }, ) } diff --git a/backend/src/password/__mocks__/worker.js b/backend/src/password/__mocks__/worker.js new file mode 100644 index 000000000..e69de29bb diff --git a/backend/src/password/worker.js b/backend/src/password/worker.js new file mode 100644 index 000000000..3ba062313 --- /dev/null +++ b/backend/src/password/worker.js @@ -0,0 +1,7 @@ +const { worker } = require('workerpool') +const { SecretKeyCryptographyCreateKeyFunc } = require('./EncryptionWorker') + +worker({ + SecretKeyCryptographyCreateKeyFunc, +}) + diff --git a/backend/src/server/createServer.ts b/backend/src/server/createServer.ts index be68f8cee..fec8fa3b7 100644 --- a/backend/src/server/createServer.ts +++ b/backend/src/server/createServer.ts @@ -7,8 +7,7 @@ import { Connection as DbConnection } from 'typeorm' import { CONFIG } from '@/config' import { schema } from '@/graphql/schema' -import { checkDBVersion } from '@/typeorm/DBVersion' -import { Connection } from '@/typeorm/connection' +import { checkDBVersionUntil } from '@/typeorm/DBVersion' import { elopageWebhook } from '@/webhook/elopage' import { gmsWebhook } from '@/webhook/gms' @@ -35,19 +34,11 @@ export const createServer = async ( logger.addContext('user', 'unknown') logger.debug('createServer...') - // open mysql connection - const con = await Connection.getInstance() - if (!con?.isConnected) { - logger.fatal(`Couldn't open connection to database!`) - throw new Error(`Fatal: Couldn't open connection to database`) - } - + // open mariadb connection, retry connecting with mariadb // check for correct database version - const dbVersion = await checkDBVersion(CONFIG.DB_VERSION) - if (!dbVersion) { - logger.fatal('Fatal: Database Version incorrect') - throw new Error('Fatal: Database Version incorrect') - } + // retry max 15 times, wait 500 ms between tries + // TODO: move variables into config + const con = await checkDBVersionUntil(15, 500) // Express Server const app = express() diff --git a/backend/src/typeorm/DBVersion.ts b/backend/src/typeorm/DBVersion.ts index ba7460785..6eaa7fb07 100644 --- a/backend/src/typeorm/DBVersion.ts +++ b/backend/src/typeorm/DBVersion.ts @@ -2,6 +2,31 @@ import { Migration } from 'database' import { backendLogger as logger } from '@/server/logger' +import { CONFIG } from '@/config' +import { Connection } from '@/typeorm/connection' +import { Connection as DbConnection } from 'typeorm' + +async function checkDBVersionUntil(maxRetries = 15, delayMs = 500): Promise { + for (let attempt = 1; attempt <= maxRetries; attempt++) { + try { + const connection = await Connection.getInstance() + if (connection?.isInitialized) { + const dbVersion = await checkDBVersion(CONFIG.DB_VERSION) + if (dbVersion) { + logger.info('Database connection and version check succeeded.') + return connection + } + } + } catch (err) { + logger.warn(`Attempt ${attempt}: Waiting for DB...`, err) + } + await new Promise(resolve => setTimeout(resolve, delayMs)) + } + + logger.fatal(`Fatal: Could not connect to database or version check failed after ${maxRetries} attempts.`) + throw new Error('Fatal: Database not ready.') +} + const getDBVersion = async (): Promise => { try { const [dbVersion] = await Migration.find({ order: { version: 'DESC' }, take: 1 }) @@ -25,4 +50,4 @@ const checkDBVersion = async (DB_VERSION: string): Promise => { return true } -export { checkDBVersion, getDBVersion } +export { checkDBVersion, getDBVersion, checkDBVersionUntil } diff --git a/biome.json b/biome.json index 7549528fb..0f2cc7978 100644 --- a/biome.json +++ b/biome.json @@ -4,7 +4,14 @@ "files": { "ignoreUnknown": false, "ignore": ["build", "node_modules", "coverage"], - "include": ["./src/**/*.js", "./src/**/*.ts", "./entity/**/*.ts", "./logging/**/*.ts", "./migrations/**/*.ts"] + "include": [ + "package.json", + "./src/**/*.js", + "./src/**/*.ts", + "./entity/**/*.ts", + "./logging/**/*.ts", + "./migrations/**/*.ts" + ] }, "formatter": { "enabled": true, diff --git a/bun.lock b/bun.lock index cee6b05ce..cf44149ae 100644 --- a/bun.lock +++ b/bun.lock @@ -85,49 +85,12 @@ "name": "backend", "version": "2.5.1", "dependencies": { - "@anatine/esbuild-decorators": "^0.2.19", - "apollo-server-express": "^2.25.2", - "await-semaphore": "^0.1.3", - "axios": "^0.21.1", - "class-validator": "^0.13.1", - "config-schema": "*", - "cors": "^2.8.5", "cross-env": "^7.0.3", - "database": "*", - "decimal.js-light": "^2.5.1", - "dotenv": "^10.0.0", "email-templates": "^10.0.1", - "esbuild": "^0.25.2", - "express": "^4.17.21", - "express-slow-down": "^2.0.1", - "graphql": "^15.10.1", - "graphql-parse-resolve-info": "^4.13.1", - "graphql-request": "5.0.0", - "graphql-type-json": "0.3.2", - "helmet": "^5.1.1", - "i18n": "^0.15.1", - "joi": "^17.13.3", - "jose": "^4.14.4", - "lodash.clonedeep": "^4.5.0", - "log4js": "^6.7.1", - "mkdirp": "^3.0.1", - "ncp": "^2.0.0", - "nodemailer": "^6.6.5", - "openai": "^4.87.3", - "pug": "^3.0.2", - "random-bigint": "^0.0.1", - "reflect-metadata": "^0.1.13", "sodium-native": "^3.4.1", - "ts-node": "^10.9.2", - "tsconfig-paths": "^4.1.1", - "type-graphql": "^1.1.1", - "typed-rest-client": "^1.8.11", - "typeorm": "^0.3.16", - "uuid": "^8.3.2", - "workerpool": "^9.2.0", - "xregexp": "^5.1.1", }, "devDependencies": { + "@anatine/esbuild-decorators": "^0.2.19", "@biomejs/biome": "1.9.4", "@swc/cli": "^0.7.3", "@swc/core": "^1.11.24", @@ -142,16 +105,53 @@ "@types/nodemailer": "^6.4.4", "@types/sodium-native": "^2.3.5", "@types/uuid": "^8.3.4", + "apollo-server-express": "^2.25.2", "apollo-server-testing": "^2.25.2", + "await-semaphore": "^0.1.3", + "axios": "^0.21.1", + "class-validator": "^0.13.1", + "config-schema": "*", + "cors": "^2.8.5", + "database": "*", + "decimal.js-light": "^2.5.1", + "dotenv": "^10.0.0", + "esbuild": "^0.25.2", + "express": "^4.17.21", + "express-slow-down": "^2.0.1", "faker": "^5.5.3", + "graphql": "^15.10.1", + "graphql-parse-resolve-info": "^4.13.1", + "graphql-request": "5.0.0", "graphql-tag": "^2.12.6", + "graphql-type-json": "0.3.2", + "helmet": "^5.1.1", + "i18n": "^0.15.1", "jest": "27.2.4", + "joi": "^17.13.3", + "jose": "^4.14.4", "klicktipp-api": "^1.0.2", + "lodash.clonedeep": "^4.5.0", + "log4js": "^6.7.1", + "mkdirp": "^3.0.1", + "ncp": "^2.0.0", + "nodemailer": "^6.6.5", "nodemon": "^2.0.7", + "openai": "^4.87.3", "prettier": "^3.5.3", + "pug": "^3.0.2", + "random-bigint": "^0.0.1", + "reflect-metadata": "^0.1.13", "regenerator-runtime": "^0.14.1", "ts-jest": "27.0.5", + "ts-node": "^10.9.2", + "tsconfig-paths": "^4.1.1", + "type-graphql": "^1.1.1", + "typed-rest-client": "^1.8.11", + "typeorm": "^0.3.16", "typescript": "^4.9.5", + "uuid": "^8.3.2", + "workerpool": "^9.2.0", + "xregexp": "^5.1.1", }, }, "config-schema": { @@ -228,33 +228,11 @@ "name": "federation", "version": "2.5.1", "dependencies": { - "@anatine/esbuild-decorators": "^0.2.19", - "apollo-server-express": "^2.25.2", - "await-semaphore": "0.1.3", - "class-validator": "^0.13.2", - "config-schema": "*", - "cors": "2.8.5", "cross-env": "^7.0.3", - "database": "*", - "decimal.js-light": "^2.5.1", - "dotenv": "10.0.0", - "express": "^4.17.21", - "express-slow-down": "^2.0.1", - "graphql": "15.10.1", - "graphql-request": "5.0.0", - "graphql-scalars": "^1.24.2", - "helmet": "^7.1.0", - "joi": "^17.13.3", - "lodash.clonedeep": "^4.5.0", - "log4js": "^6.7.1", - "reflect-metadata": "^0.1.13", - "sodium-native": "^3.3.0", - "tsconfig-paths": "^4.1.1", - "type-graphql": "^1.1.1", - "typeorm": "^0.3.16", - "uuid": "8.3.2", + "sodium-native": "^3.4.1", }, "devDependencies": { + "@anatine/esbuild-decorators": "^0.2.19", "@biomejs/biome": "1.9.4", "@swc/cli": "^0.7.3", "@swc/core": "^1.11.24", @@ -265,13 +243,35 @@ "@types/node": "^17.0.21", "@types/sodium-native": "^2.3.5", "@types/uuid": "^8.3.4", + "apollo-server-express": "^2.25.2", "apollo-server-testing": "2.25.2", + "await-semaphore": "0.1.3", + "class-validator": "^0.13.2", + "config-schema": "*", + "cors": "2.8.5", + "database": "*", + "decimal.js-light": "^2.5.1", + "dotenv": "10.0.0", + "express": "^4.17.21", + "express-slow-down": "^2.0.1", + "graphql": "15.10.1", + "graphql-request": "5.0.0", + "graphql-scalars": "^1.24.2", "graphql-tag": "^2.12.6", + "helmet": "^7.1.0", "jest": "27.2.4", + "joi": "^17.13.3", + "lodash.clonedeep": "^4.5.0", + "log4js": "^6.7.1", "nodemon": "^2.0.7", "prettier": "^3.5.3", + "reflect-metadata": "^0.1.13", "ts-jest": "27.0.5", + "tsconfig-paths": "^4.1.1", + "type-graphql": "^1.1.1", + "typeorm": "^0.3.16", "typescript": "^4.9.5", + "uuid": "8.3.2", }, }, "frontend": { @@ -387,33 +387,33 @@ "@apollographql/graphql-upload-8-fork": ["@apollographql/graphql-upload-8-fork@8.1.4", "", { "dependencies": { "@types/express": "*", "@types/fs-capacitor": "^2.0.0", "@types/koa": "*", "busboy": "^0.3.1", "fs-capacitor": "^2.0.4", "http-errors": "^1.7.3", "object-path": "^0.11.4" }, "peerDependencies": { "graphql": "0.13.1 - 15" } }, "sha512-lHAj/PUegYu02zza9Pg0bQQYH5I0ah1nyIzu2YIqOv41P0vu3GCBISAmQCfFHThK7N3dy7dLFPhoKcXlXRLPoQ=="], - "@asamuzakjp/css-color": ["@asamuzakjp/css-color@3.1.5", "", { "dependencies": { "@csstools/css-calc": "^2.1.3", "@csstools/css-color-parser": "^3.0.9", "@csstools/css-parser-algorithms": "^3.0.4", "@csstools/css-tokenizer": "^3.0.3", "lru-cache": "^10.4.3" } }, "sha512-w7AmVyTTiU41fNLsFDf+gA2Dwtbx2EJtn2pbJNAGSRAg50loXy1uLXA3hEpD8+eydcomTurw09tq5/AyceCaGg=="], + "@asamuzakjp/css-color": ["@asamuzakjp/css-color@3.1.7", "", { "dependencies": { "@csstools/css-calc": "^2.1.3", "@csstools/css-color-parser": "^3.0.9", "@csstools/css-parser-algorithms": "^3.0.4", "@csstools/css-tokenizer": "^3.0.3", "lru-cache": "^10.4.3" } }, "sha512-Ok5fYhtwdyJQmU1PpEv6Si7Y+A4cYb8yNM9oiIJC9TzXPMuN9fvdonKJqcnz9TbFqV6bQ8z0giRq0iaOpGZV2g=="], - "@babel/code-frame": ["@babel/code-frame@7.26.2", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.25.9", "js-tokens": "^4.0.0", "picocolors": "^1.0.0" } }, "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ=="], + "@babel/code-frame": ["@babel/code-frame@7.27.1", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg=="], - "@babel/compat-data": ["@babel/compat-data@7.26.8", "", {}, "sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ=="], + "@babel/compat-data": ["@babel/compat-data@7.27.1", "", {}, "sha512-Q+E+rd/yBzNQhXkG+zQnF58e4zoZfBedaxwzPmicKsiK3nt8iJYrSrDbjwFFDGC4f+rPafqRaPH6TsDoSvMf7A=="], - "@babel/core": ["@babel/core@7.26.10", "", { "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.26.2", "@babel/generator": "^7.26.10", "@babel/helper-compilation-targets": "^7.26.5", "@babel/helper-module-transforms": "^7.26.0", "@babel/helpers": "^7.26.10", "@babel/parser": "^7.26.10", "@babel/template": "^7.26.9", "@babel/traverse": "^7.26.10", "@babel/types": "^7.26.10", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ=="], + "@babel/core": ["@babel/core@7.27.1", "", { "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.27.1", "@babel/helper-compilation-targets": "^7.27.1", "@babel/helper-module-transforms": "^7.27.1", "@babel/helpers": "^7.27.1", "@babel/parser": "^7.27.1", "@babel/template": "^7.27.1", "@babel/traverse": "^7.27.1", "@babel/types": "^7.27.1", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-IaaGWsQqfsQWVLqMn9OB92MNN7zukfVA4s7KKAI0KfrrDsZ0yhi5uV4baBuLuN7n3vsZpwP8asPPcVwApxvjBQ=="], - "@babel/generator": ["@babel/generator@7.27.0", "", { "dependencies": { "@babel/parser": "^7.27.0", "@babel/types": "^7.27.0", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^3.0.2" } }, "sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw=="], + "@babel/generator": ["@babel/generator@7.27.1", "", { "dependencies": { "@babel/parser": "^7.27.1", "@babel/types": "^7.27.1", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^3.0.2" } }, "sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w=="], - "@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.27.0", "", { "dependencies": { "@babel/compat-data": "^7.26.8", "@babel/helper-validator-option": "^7.25.9", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA=="], + "@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.27.1", "", { "dependencies": { "@babel/compat-data": "^7.27.1", "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-2YaDd/Rd9E598B5+WIc8wJPmWETiiJXFYVE60oX8FDohv7rAUU3CQj+A1MgeEmcsk2+dQuEjIe/GDvig0SqL4g=="], - "@babel/helper-module-imports": ["@babel/helper-module-imports@7.25.9", "", { "dependencies": { "@babel/traverse": "^7.25.9", "@babel/types": "^7.25.9" } }, "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw=="], + "@babel/helper-module-imports": ["@babel/helper-module-imports@7.27.1", "", { "dependencies": { "@babel/traverse": "^7.27.1", "@babel/types": "^7.27.1" } }, "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w=="], - "@babel/helper-module-transforms": ["@babel/helper-module-transforms@7.26.0", "", { "dependencies": { "@babel/helper-module-imports": "^7.25.9", "@babel/helper-validator-identifier": "^7.25.9", "@babel/traverse": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw=="], + "@babel/helper-module-transforms": ["@babel/helper-module-transforms@7.27.1", "", { "dependencies": { "@babel/helper-module-imports": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1", "@babel/traverse": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-9yHn519/8KvTU5BjTVEEeIM3w9/2yXNKoD82JifINImhpKkARMJKPP59kLo+BafpdN5zgNeIcS4jsGDmd3l58g=="], - "@babel/helper-plugin-utils": ["@babel/helper-plugin-utils@7.26.5", "", {}, "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg=="], + "@babel/helper-plugin-utils": ["@babel/helper-plugin-utils@7.27.1", "", {}, "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw=="], - "@babel/helper-string-parser": ["@babel/helper-string-parser@7.25.9", "", {}, "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA=="], + "@babel/helper-string-parser": ["@babel/helper-string-parser@7.27.1", "", {}, "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="], - "@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.25.9", "", {}, "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ=="], + "@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.27.1", "", {}, "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow=="], - "@babel/helper-validator-option": ["@babel/helper-validator-option@7.25.9", "", {}, "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw=="], + "@babel/helper-validator-option": ["@babel/helper-validator-option@7.27.1", "", {}, "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg=="], - "@babel/helpers": ["@babel/helpers@7.27.0", "", { "dependencies": { "@babel/template": "^7.27.0", "@babel/types": "^7.27.0" } }, "sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg=="], + "@babel/helpers": ["@babel/helpers@7.27.1", "", { "dependencies": { "@babel/template": "^7.27.1", "@babel/types": "^7.27.1" } }, "sha512-FCvFTm0sWV8Fxhpp2McP5/W53GPllQ9QeQ7SiqGWjMf/LVG07lFa5+pgK05IRhVwtvafT22KF+ZSnM9I545CvQ=="], - "@babel/parser": ["@babel/parser@7.27.0", "", { "dependencies": { "@babel/types": "^7.27.0" }, "bin": "./bin/babel-parser.js" }, "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg=="], + "@babel/parser": ["@babel/parser@7.27.1", "", { "dependencies": { "@babel/types": "^7.27.1" }, "bin": "./bin/babel-parser.js" }, "sha512-I0dZ3ZpCrJ1c04OqlNsQcKiZlsrXf/kkE4FXzID9rIOYICsAbA8mMDzhW/luRNAHdCNt7os/u8wenklZDlUVUQ=="], "@babel/plugin-syntax-async-generators": ["@babel/plugin-syntax-async-generators@7.8.4", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw=="], @@ -423,7 +423,7 @@ "@babel/plugin-syntax-class-static-block": ["@babel/plugin-syntax-class-static-block@7.14.5", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw=="], - "@babel/plugin-syntax-import-attributes": ["@babel/plugin-syntax-import-attributes@7.26.0", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A=="], + "@babel/plugin-syntax-import-attributes": ["@babel/plugin-syntax-import-attributes@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww=="], "@babel/plugin-syntax-import-meta": ["@babel/plugin-syntax-import-meta@7.10.4", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g=="], @@ -445,17 +445,17 @@ "@babel/plugin-syntax-top-level-await": ["@babel/plugin-syntax-top-level-await@7.14.5", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw=="], - "@babel/plugin-syntax-typescript": ["@babel/plugin-syntax-typescript@7.25.9", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ=="], + "@babel/plugin-syntax-typescript": ["@babel/plugin-syntax-typescript@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ=="], - "@babel/runtime": ["@babel/runtime@7.27.0", "", { "dependencies": { "regenerator-runtime": "^0.14.0" } }, "sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw=="], + "@babel/runtime": ["@babel/runtime@7.27.1", "", {}, "sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog=="], - "@babel/runtime-corejs3": ["@babel/runtime-corejs3@7.27.0", "", { "dependencies": { "core-js-pure": "^3.30.2", "regenerator-runtime": "^0.14.0" } }, "sha512-UWjX6t+v+0ckwZ50Y5ShZLnlk95pP5MyW/pon9tiYzl3+18pkTHTFNTKr7rQbfRXPkowt2QAn30o1b6oswszew=="], + "@babel/runtime-corejs3": ["@babel/runtime-corejs3@7.27.1", "", { "dependencies": { "core-js-pure": "^3.30.2" } }, "sha512-909rVuj3phpjW6y0MCXAZ5iNeORePa6ldJvp2baWGcTjwqbBDDz6xoS5JHJ7lS88NlwLYj07ImL/8IUMtDZzTA=="], - "@babel/template": ["@babel/template@7.27.0", "", { "dependencies": { "@babel/code-frame": "^7.26.2", "@babel/parser": "^7.27.0", "@babel/types": "^7.27.0" } }, "sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA=="], + "@babel/template": ["@babel/template@7.27.1", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/parser": "^7.27.1", "@babel/types": "^7.27.1" } }, "sha512-Fyo3ghWMqkHHpHQCoBs2VnYjR4iWFFjguTDEqA5WgZDOrFesVjMhMM2FSqTKSoUSDO1VQtavj8NFpdRBEvJTtg=="], - "@babel/traverse": ["@babel/traverse@7.27.0", "", { "dependencies": { "@babel/code-frame": "^7.26.2", "@babel/generator": "^7.27.0", "@babel/parser": "^7.27.0", "@babel/template": "^7.27.0", "@babel/types": "^7.27.0", "debug": "^4.3.1", "globals": "^11.1.0" } }, "sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA=="], + "@babel/traverse": ["@babel/traverse@7.27.1", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.27.1", "@babel/parser": "^7.27.1", "@babel/template": "^7.27.1", "@babel/types": "^7.27.1", "debug": "^4.3.1", "globals": "^11.1.0" } }, "sha512-ZCYtZciz1IWJB4U61UPu4KEaqyfj+r5T1Q5mqPo+IBpcG9kHv30Z0aD8LXPgC1trYa6rK0orRyAhqUgk4MjmEg=="], - "@babel/types": ["@babel/types@7.27.0", "", { "dependencies": { "@babel/helper-string-parser": "^7.25.9", "@babel/helper-validator-identifier": "^7.25.9" } }, "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg=="], + "@babel/types": ["@babel/types@7.27.1", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" } }, "sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q=="], "@bcoe/v8-coverage": ["@bcoe/v8-coverage@0.2.3", "", {}, "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw=="], @@ -495,57 +495,57 @@ "@dual-bundle/import-meta-resolve": ["@dual-bundle/import-meta-resolve@4.1.0", "", {}, "sha512-+nxncfwHM5SgAtrVzgpzJOI1ol0PkumhVo469KCf9lUi21IGcY90G98VuHm9VRrUypmAzawAHO9bs6hqeADaVg=="], - "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.3", "", { "os": "aix", "cpu": "ppc64" }, "sha512-W8bFfPA8DowP8l//sxjJLSLkD8iEjMc7cBVyP+u4cEv9sM7mdUCkgsj+t0n/BWPFtv7WWCN5Yzj0N6FJNUUqBQ=="], + "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.4", "", { "os": "aix", "cpu": "ppc64" }, "sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q=="], - "@esbuild/android-arm": ["@esbuild/android-arm@0.25.3", "", { "os": "android", "cpu": "arm" }, "sha512-PuwVXbnP87Tcff5I9ngV0lmiSu40xw1At6i3GsU77U7cjDDB4s0X2cyFuBiDa1SBk9DnvWwnGvVaGBqoFWPb7A=="], + "@esbuild/android-arm": ["@esbuild/android-arm@0.25.4", "", { "os": "android", "cpu": "arm" }, "sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ=="], - "@esbuild/android-arm64": ["@esbuild/android-arm64@0.25.3", "", { "os": "android", "cpu": "arm64" }, "sha512-XelR6MzjlZuBM4f5z2IQHK6LkK34Cvv6Rj2EntER3lwCBFdg6h2lKbtRjpTTsdEjD/WSe1q8UyPBXP1x3i/wYQ=="], + "@esbuild/android-arm64": ["@esbuild/android-arm64@0.25.4", "", { "os": "android", "cpu": "arm64" }, "sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A=="], - "@esbuild/android-x64": ["@esbuild/android-x64@0.25.3", "", { "os": "android", "cpu": "x64" }, "sha512-ogtTpYHT/g1GWS/zKM0cc/tIebFjm1F9Aw1boQ2Y0eUQ+J89d0jFY//s9ei9jVIlkYi8AfOjiixcLJSGNSOAdQ=="], + "@esbuild/android-x64": ["@esbuild/android-x64@0.25.4", "", { "os": "android", "cpu": "x64" }, "sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ=="], - "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.25.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-eESK5yfPNTqpAmDfFWNsOhmIOaQA59tAcF/EfYvo5/QWQCzXn5iUSOnqt3ra3UdzBv073ykTtmeLJZGt3HhA+w=="], + "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.25.4", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g=="], - "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.25.3", "", { "os": "darwin", "cpu": "x64" }, "sha512-Kd8glo7sIZtwOLcPbW0yLpKmBNWMANZhrC1r6K++uDR2zyzb6AeOYtI6udbtabmQpFaxJ8uduXMAo1gs5ozz8A=="], + "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.25.4", "", { "os": "darwin", "cpu": "x64" }, "sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A=="], - "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.25.3", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-EJiyS70BYybOBpJth3M0KLOus0n+RRMKTYzhYhFeMwp7e/RaajXvP+BWlmEXNk6uk+KAu46j/kaQzr6au+JcIw=="], + "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.25.4", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ=="], - "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.25.3", "", { "os": "freebsd", "cpu": "x64" }, "sha512-Q+wSjaLpGxYf7zC0kL0nDlhsfuFkoN+EXrx2KSB33RhinWzejOd6AvgmP5JbkgXKmjhmpfgKZq24pneodYqE8Q=="], + "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.25.4", "", { "os": "freebsd", "cpu": "x64" }, "sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ=="], - "@esbuild/linux-arm": ["@esbuild/linux-arm@0.25.3", "", { "os": "linux", "cpu": "arm" }, "sha512-dUOVmAUzuHy2ZOKIHIKHCm58HKzFqd+puLaS424h6I85GlSDRZIA5ycBixb3mFgM0Jdh+ZOSB6KptX30DD8YOQ=="], + "@esbuild/linux-arm": ["@esbuild/linux-arm@0.25.4", "", { "os": "linux", "cpu": "arm" }, "sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ=="], - "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.25.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-xCUgnNYhRD5bb1C1nqrDV1PfkwgbswTTBRbAd8aH5PhYzikdf/ddtsYyMXFfGSsb/6t6QaPSzxtbfAZr9uox4A=="], + "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.25.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ=="], - "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.25.3", "", { "os": "linux", "cpu": "ia32" }, "sha512-yplPOpczHOO4jTYKmuYuANI3WhvIPSVANGcNUeMlxH4twz/TeXuzEP41tGKNGWJjuMhotpGabeFYGAOU2ummBw=="], + "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.25.4", "", { "os": "linux", "cpu": "ia32" }, "sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ=="], - "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.25.3", "", { "os": "linux", "cpu": "none" }, "sha512-P4BLP5/fjyihmXCELRGrLd793q/lBtKMQl8ARGpDxgzgIKJDRJ/u4r1A/HgpBpKpKZelGct2PGI4T+axcedf6g=="], + "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.25.4", "", { "os": "linux", "cpu": "none" }, "sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA=="], - "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.25.3", "", { "os": "linux", "cpu": "none" }, "sha512-eRAOV2ODpu6P5divMEMa26RRqb2yUoYsuQQOuFUexUoQndm4MdpXXDBbUoKIc0iPa4aCO7gIhtnYomkn2x+bag=="], + "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.25.4", "", { "os": "linux", "cpu": "none" }, "sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg=="], - "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.25.3", "", { "os": "linux", "cpu": "ppc64" }, "sha512-ZC4jV2p7VbzTlnl8nZKLcBkfzIf4Yad1SJM4ZMKYnJqZFD4rTI+pBG65u8ev4jk3/MPwY9DvGn50wi3uhdaghg=="], + "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.25.4", "", { "os": "linux", "cpu": "ppc64" }, "sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag=="], - "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.25.3", "", { "os": "linux", "cpu": "none" }, "sha512-LDDODcFzNtECTrUUbVCs6j9/bDVqy7DDRsuIXJg6so+mFksgwG7ZVnTruYi5V+z3eE5y+BJZw7VvUadkbfg7QA=="], + "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.25.4", "", { "os": "linux", "cpu": "none" }, "sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA=="], - "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.25.3", "", { "os": "linux", "cpu": "s390x" }, "sha512-s+w/NOY2k0yC2p9SLen+ymflgcpRkvwwa02fqmAwhBRI3SC12uiS10edHHXlVWwfAagYSY5UpmT/zISXPMW3tQ=="], + "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.25.4", "", { "os": "linux", "cpu": "s390x" }, "sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g=="], - "@esbuild/linux-x64": ["@esbuild/linux-x64@0.25.3", "", { "os": "linux", "cpu": "x64" }, "sha512-nQHDz4pXjSDC6UfOE1Fw9Q8d6GCAd9KdvMZpfVGWSJztYCarRgSDfOVBY5xwhQXseiyxapkiSJi/5/ja8mRFFA=="], + "@esbuild/linux-x64": ["@esbuild/linux-x64@0.25.4", "", { "os": "linux", "cpu": "x64" }, "sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA=="], - "@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.25.3", "", { "os": "none", "cpu": "arm64" }, "sha512-1QaLtOWq0mzK6tzzp0jRN3eccmN3hezey7mhLnzC6oNlJoUJz4nym5ZD7mDnS/LZQgkrhEbEiTn515lPeLpgWA=="], + "@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.25.4", "", { "os": "none", "cpu": "arm64" }, "sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ=="], - "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.25.3", "", { "os": "none", "cpu": "x64" }, "sha512-i5Hm68HXHdgv8wkrt+10Bc50zM0/eonPb/a/OFVfB6Qvpiirco5gBA5bz7S2SHuU+Y4LWn/zehzNX14Sp4r27g=="], + "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.25.4", "", { "os": "none", "cpu": "x64" }, "sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw=="], - "@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.25.3", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-zGAVApJEYTbOC6H/3QBr2mq3upG/LBEXr85/pTtKiv2IXcgKV0RT0QA/hSXZqSvLEpXeIxah7LczB4lkiYhTAQ=="], + "@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.25.4", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A=="], - "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.25.3", "", { "os": "openbsd", "cpu": "x64" }, "sha512-fpqctI45NnCIDKBH5AXQBsD0NDPbEFczK98hk/aa6HJxbl+UtLkJV2+Bvy5hLSLk3LHmqt0NTkKNso1A9y1a4w=="], + "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.25.4", "", { "os": "openbsd", "cpu": "x64" }, "sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw=="], - "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.25.3", "", { "os": "sunos", "cpu": "x64" }, "sha512-ROJhm7d8bk9dMCUZjkS8fgzsPAZEjtRJqCAmVgB0gMrvG7hfmPmz9k1rwO4jSiblFjYmNvbECL9uhaPzONMfgA=="], + "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.25.4", "", { "os": "sunos", "cpu": "x64" }, "sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q=="], - "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.25.3", "", { "os": "win32", "cpu": "arm64" }, "sha512-YWcow8peiHpNBiIXHwaswPnAXLsLVygFwCB3A7Bh5jRkIBFWHGmNQ48AlX4xDvQNoMZlPYzjVOQDYEzWCqufMQ=="], + "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.25.4", "", { "os": "win32", "cpu": "arm64" }, "sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ=="], - "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.25.3", "", { "os": "win32", "cpu": "ia32" }, "sha512-qspTZOIGoXVS4DpNqUYUs9UxVb04khS1Degaw/MnfMe7goQ3lTfQ13Vw4qY/Nj0979BGvMRpAYbs/BAxEvU8ew=="], + "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.25.4", "", { "os": "win32", "cpu": "ia32" }, "sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg=="], - "@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.3", "", { "os": "win32", "cpu": "x64" }, "sha512-ICgUR+kPimx0vvRzf+N/7L7tVSQeE3BYY+NhHRHXS1kBuPO7z2+7ea2HbhDyZdTephgvNvKrlDDKUexuCVBVvg=="], + "@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.4", "", { "os": "win32", "cpu": "x64" }, "sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ=="], - "@eslint-community/eslint-utils": ["@eslint-community/eslint-utils@4.6.1", "", { "dependencies": { "eslint-visitor-keys": "^3.4.3" }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, "sha512-KTsJMmobmbrFLe3LDh0PC2FXpcSYJt/MLjlkh/9LEnmKYLSYmT/0EW9JWANjeoemiuZrmogti0tW5Ch+qNUYDw=="], + "@eslint-community/eslint-utils": ["@eslint-community/eslint-utils@4.7.0", "", { "dependencies": { "eslint-visitor-keys": "^3.4.3" }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw=="], "@eslint-community/regexpp": ["@eslint-community/regexpp@4.12.1", "", {}, "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ=="], @@ -573,9 +573,9 @@ "@hyperswarm/secret-stream": ["@hyperswarm/secret-stream@6.8.1", "", { "dependencies": { "b4a": "^1.1.0", "hypercore-crypto": "^3.3.1", "noise-curve-ed": "^2.0.1", "noise-handshake": "^4.0.0", "sodium-secretstream": "^1.1.0", "sodium-universal": "^5.0.0", "streamx": "^2.14.0", "timeout-refresh": "^2.0.0", "unslab": "^1.3.0" } }, "sha512-F3fr8CKB6za9Ac7ifjgAe07qnnesl5kS0MtLsyKxA1Og8E+FZykdwLpgoLjnEa7G6E1L56lASLr42E4kd20sog=="], - "@iconify-json/arcticons": ["@iconify-json/arcticons@1.2.23", "", { "dependencies": { "@iconify/types": "*" } }, "sha512-j7VE1opFBApOxZeEcrSKhIgpUa6GHesuUgIBoWOoyRaslMqIKZh8ob7KGKRiZyB+R6+rxbEo3/6l7GBl7Ls7jw=="], + "@iconify-json/arcticons": ["@iconify-json/arcticons@1.2.24", "", { "dependencies": { "@iconify/types": "*" } }, "sha512-l5mQELXr9Sv87DPmEcUJ3Ub1qNbRKpr4ax+0LoBbYmHU+osTdJ3FNgTH04/VKMKp2+95MNbA5Tt6gwgPkj5FNQ=="], - "@iconify-json/bi": ["@iconify-json/bi@1.2.2", "", { "dependencies": { "@iconify/types": "*" } }, "sha512-f/Wm+RTdBosw3cI/gmg5uSFmdumkw2thUk4qVFS56jTerdal6wqWnWAbRTSJJ/vhH9/y16pRKnvE8F2+M23dzw=="], + "@iconify-json/bi": ["@iconify-json/bi@1.2.3", "", { "dependencies": { "@iconify/types": "*" } }, "sha512-pDNU9mIKDfvVEGxWsExiuVEqyhyJ5q5bOwBTgtM7I2hGk9ACQaiogMaA6lBRJ82sJPj+Uv21Oi+ujThGnMW2jA=="], "@iconify-json/fa": ["@iconify-json/fa@1.2.1", "", { "dependencies": { "@iconify/types": "*" } }, "sha512-aY2+tQNWq5ch+ShtAz3KKbNrFfwf4BPrXvyN7S4/lcf6Wms+kIxsd7C7KortzHZhoBnbhVN+qo+YUWLW7rLs9Q=="], @@ -585,7 +585,7 @@ "@iconify-json/mdi": ["@iconify-json/mdi@1.2.3", "", { "dependencies": { "@iconify/types": "*" } }, "sha512-O3cLwbDOK7NNDf2ihaQOH5F9JglnulNDFV7WprU2dSoZu3h3cWH//h74uQAB87brHmvFVxIOkuBX2sZSzYhScg=="], - "@iconify/json": ["@iconify/json@2.2.332", "", { "dependencies": { "@iconify/types": "*", "pathe": "^1.1.2" } }, "sha512-bIaEG2ecvYiq/lwBF0KIOCEW5zMyBx1WOmBubetZwvKNs+gXbV3ocLCjT3xWBFSD4v29BRpqdtoVOpUlIfDK+g=="], + "@iconify/json": ["@iconify/json@2.2.335", "", { "dependencies": { "@iconify/types": "*", "pathe": "^1.1.2" } }, "sha512-EOUM9843cxiwA19cORaz6t+fpn1LhZr5la+Oot7gzt8M5SRjOqvXfMZKcc/VkytRHaaNd2y0dKhA8H7/sP1stQ=="], "@iconify/types": ["@iconify/types@2.0.0", "", {}, "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg=="], @@ -709,7 +709,7 @@ "@nodelib/fs.walk": ["@nodelib/fs.walk@1.2.8", "", { "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg=="], - "@nuxt/kit": ["@nuxt/kit@3.17.0", "", { "dependencies": { "c12": "^3.0.3", "consola": "^3.4.2", "defu": "^6.1.4", "destr": "^2.0.5", "errx": "^0.1.0", "exsolve": "^1.0.5", "ignore": "^7.0.4", "jiti": "^2.4.2", "klona": "^2.0.6", "knitwork": "^1.2.0", "mlly": "^1.7.4", "ohash": "^2.0.11", "pathe": "^2.0.3", "pkg-types": "^2.1.0", "scule": "^1.3.0", "semver": "^7.7.1", "std-env": "^3.9.0", "tinyglobby": "^0.2.13", "ufo": "^1.6.1", "unctx": "^2.4.1", "unimport": "^5.0.0", "untyped": "^2.0.0" } }, "sha512-+aS+Enqqo2qSbyl0APPPxX8BPYsaRcZ8dFRbpCOfK38lv2ckoHKCWNkT8L/7q2w+1pjNZaxlUoW9Mku1vdEb/A=="], + "@nuxt/kit": ["@nuxt/kit@3.17.2", "", { "dependencies": { "c12": "^3.0.3", "consola": "^3.4.2", "defu": "^6.1.4", "destr": "^2.0.5", "errx": "^0.1.0", "exsolve": "^1.0.5", "ignore": "^7.0.4", "jiti": "^2.4.2", "klona": "^2.0.6", "knitwork": "^1.2.0", "mlly": "^1.7.4", "ohash": "^2.0.11", "pathe": "^2.0.3", "pkg-types": "^2.1.0", "scule": "^1.3.0", "semver": "^7.7.1", "std-env": "^3.9.0", "tinyglobby": "^0.2.13", "ufo": "^1.6.1", "unctx": "^2.4.1", "unimport": "^5.0.1", "untyped": "^2.0.0" } }, "sha512-Mz2Ni8iUwty5LBs3LepUL43rI2xXbuAz3Cqq37L9frOD2QI2tQUtasYaSoKk6U7nvYzuW2z/2b3YOLkMNi/k2w=="], "@one-ini/wasm": ["@one-ini/wasm@0.1.1", "", {}, "sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw=="], @@ -769,45 +769,45 @@ "@rollup/pluginutils": ["@rollup/pluginutils@5.1.4", "", { "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", "picomatch": "^4.0.2" }, "peerDependencies": { "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" }, "optionalPeers": ["rollup"] }, "sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ=="], - "@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.40.1", "", { "os": "android", "cpu": "arm" }, "sha512-kxz0YeeCrRUHz3zyqvd7n+TVRlNyTifBsmnmNPtk3hQURUyG9eAB+usz6DAwagMusjx/zb3AjvDUvhFGDAexGw=="], + "@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.40.2", "", { "os": "android", "cpu": "arm" }, "sha512-JkdNEq+DFxZfUwxvB58tHMHBHVgX23ew41g1OQinthJ+ryhdRk67O31S7sYw8u2lTjHUPFxwar07BBt1KHp/hg=="], - "@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.40.1", "", { "os": "android", "cpu": "arm64" }, "sha512-PPkxTOisoNC6TpnDKatjKkjRMsdaWIhyuMkA4UsBXT9WEZY4uHezBTjs6Vl4PbqQQeu6oION1w2voYZv9yquCw=="], + "@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.40.2", "", { "os": "android", "cpu": "arm64" }, "sha512-13unNoZ8NzUmnndhPTkWPWbX3vtHodYmy+I9kuLxN+F+l+x3LdVF7UCu8TWVMt1POHLh6oDHhnOA04n8oJZhBw=="], - "@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.40.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-VWXGISWFY18v/0JyNUy4A46KCFCb9NVsH+1100XP31lud+TzlezBbz24CYzbnA4x6w4hx+NYCXDfnvDVO6lcAA=="], + "@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.40.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Gzf1Hn2Aoe8VZzevHostPX23U7N5+4D36WJNHK88NZHCJr7aVMG4fadqkIf72eqVPGjGc0HJHNuUaUcxiR+N/w=="], - "@rollup/rollup-darwin-x64": ["@rollup/rollup-darwin-x64@4.40.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-nIwkXafAI1/QCS7pxSpv/ZtFW6TXcNUEHAIA9EIyw5OzxJZQ1YDrX+CL6JAIQgZ33CInl1R6mHet9Y/UZTg2Bw=="], + "@rollup/rollup-darwin-x64": ["@rollup/rollup-darwin-x64@4.40.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-47N4hxa01a4x6XnJoskMKTS8XZ0CZMd8YTbINbi+w03A2w4j1RTlnGHOz/P0+Bg1LaVL6ufZyNprSg+fW5nYQQ=="], - "@rollup/rollup-freebsd-arm64": ["@rollup/rollup-freebsd-arm64@4.40.1", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-BdrLJ2mHTrIYdaS2I99mriyJfGGenSaP+UwGi1kB9BLOCu9SR8ZpbkmmalKIALnRw24kM7qCN0IOm6L0S44iWw=="], + "@rollup/rollup-freebsd-arm64": ["@rollup/rollup-freebsd-arm64@4.40.2", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-8t6aL4MD+rXSHHZUR1z19+9OFJ2rl1wGKvckN47XFRVO+QL/dUSpKA2SLRo4vMg7ELA8pzGpC+W9OEd1Z/ZqoQ=="], - "@rollup/rollup-freebsd-x64": ["@rollup/rollup-freebsd-x64@4.40.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-VXeo/puqvCG8JBPNZXZf5Dqq7BzElNJzHRRw3vjBE27WujdzuOPecDPc/+1DcdcTptNBep3861jNq0mYkT8Z6Q=="], + "@rollup/rollup-freebsd-x64": ["@rollup/rollup-freebsd-x64@4.40.2", "", { "os": "freebsd", "cpu": "x64" }, "sha512-C+AyHBzfpsOEYRFjztcYUFsH4S7UsE9cDtHCtma5BK8+ydOZYgMmWg1d/4KBytQspJCld8ZIujFMAdKG1xyr4Q=="], - "@rollup/rollup-linux-arm-gnueabihf": ["@rollup/rollup-linux-arm-gnueabihf@4.40.1", "", { "os": "linux", "cpu": "arm" }, "sha512-ehSKrewwsESPt1TgSE/na9nIhWCosfGSFqv7vwEtjyAqZcvbGIg4JAcV7ZEh2tfj/IlfBeZjgOXm35iOOjadcg=="], + "@rollup/rollup-linux-arm-gnueabihf": ["@rollup/rollup-linux-arm-gnueabihf@4.40.2", "", { "os": "linux", "cpu": "arm" }, "sha512-de6TFZYIvJwRNjmW3+gaXiZ2DaWL5D5yGmSYzkdzjBDS3W+B9JQ48oZEsmMvemqjtAFzE16DIBLqd6IQQRuG9Q=="], - "@rollup/rollup-linux-arm-musleabihf": ["@rollup/rollup-linux-arm-musleabihf@4.40.1", "", { "os": "linux", "cpu": "arm" }, "sha512-m39iO/aaurh5FVIu/F4/Zsl8xppd76S4qoID8E+dSRQvTyZTOI2gVk3T4oqzfq1PtcvOfAVlwLMK3KRQMaR8lg=="], + "@rollup/rollup-linux-arm-musleabihf": ["@rollup/rollup-linux-arm-musleabihf@4.40.2", "", { "os": "linux", "cpu": "arm" }, "sha512-urjaEZubdIkacKc930hUDOfQPysezKla/O9qV+O89enqsqUmQm8Xj8O/vh0gHg4LYfv7Y7UsE3QjzLQzDYN1qg=="], - "@rollup/rollup-linux-arm64-gnu": ["@rollup/rollup-linux-arm64-gnu@4.40.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-Y+GHnGaku4aVLSgrT0uWe2o2Rq8te9hi+MwqGF9r9ORgXhmHK5Q71N757u0F8yU1OIwUIFy6YiJtKjtyktk5hg=="], + "@rollup/rollup-linux-arm64-gnu": ["@rollup/rollup-linux-arm64-gnu@4.40.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-KlE8IC0HFOC33taNt1zR8qNlBYHj31qGT1UqWqtvR/+NuCVhfufAq9fxO8BMFC22Wu0rxOwGVWxtCMvZVLmhQg=="], - "@rollup/rollup-linux-arm64-musl": ["@rollup/rollup-linux-arm64-musl@4.40.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-jEwjn3jCA+tQGswK3aEWcD09/7M5wGwc6+flhva7dsQNRZZTe30vkalgIzV4tjkopsTS9Jd7Y1Bsj6a4lzz8gQ=="], + "@rollup/rollup-linux-arm64-musl": ["@rollup/rollup-linux-arm64-musl@4.40.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-j8CgxvfM0kbnhu4XgjnCWJQyyBOeBI1Zq91Z850aUddUmPeQvuAy6OiMdPS46gNFgy8gN1xkYyLgwLYZG3rBOg=="], - "@rollup/rollup-linux-loongarch64-gnu": ["@rollup/rollup-linux-loongarch64-gnu@4.40.1", "", { "os": "linux", "cpu": "none" }, "sha512-ySyWikVhNzv+BV/IDCsrraOAZ3UaC8SZB67FZlqVwXwnFhPihOso9rPOxzZbjp81suB1O2Topw+6Ug3JNegejQ=="], + "@rollup/rollup-linux-loongarch64-gnu": ["@rollup/rollup-linux-loongarch64-gnu@4.40.2", "", { "os": "linux", "cpu": "none" }, "sha512-Ybc/1qUampKuRF4tQXc7G7QY9YRyeVSykfK36Y5Qc5dmrIxwFhrOzqaVTNoZygqZ1ZieSWTibfFhQ5qK8jpWxw=="], - "@rollup/rollup-linux-powerpc64le-gnu": ["@rollup/rollup-linux-powerpc64le-gnu@4.40.1", "", { "os": "linux", "cpu": "ppc64" }, "sha512-BvvA64QxZlh7WZWqDPPdt0GH4bznuL6uOO1pmgPnnv86rpUpc8ZxgZwcEgXvo02GRIZX1hQ0j0pAnhwkhwPqWg=="], + "@rollup/rollup-linux-powerpc64le-gnu": ["@rollup/rollup-linux-powerpc64le-gnu@4.40.2", "", { "os": "linux", "cpu": "ppc64" }, "sha512-3FCIrnrt03CCsZqSYAOW/k9n625pjpuMzVfeI+ZBUSDT3MVIFDSPfSUgIl9FqUftxcUXInvFah79hE1c9abD+Q=="], - "@rollup/rollup-linux-riscv64-gnu": ["@rollup/rollup-linux-riscv64-gnu@4.40.1", "", { "os": "linux", "cpu": "none" }, "sha512-EQSP+8+1VuSulm9RKSMKitTav89fKbHymTf25n5+Yr6gAPZxYWpj3DzAsQqoaHAk9YX2lwEyAf9S4W8F4l3VBQ=="], + "@rollup/rollup-linux-riscv64-gnu": ["@rollup/rollup-linux-riscv64-gnu@4.40.2", "", { "os": "linux", "cpu": "none" }, "sha512-QNU7BFHEvHMp2ESSY3SozIkBPaPBDTsfVNGx3Xhv+TdvWXFGOSH2NJvhD1zKAT6AyuuErJgbdvaJhYVhVqrWTg=="], - "@rollup/rollup-linux-riscv64-musl": ["@rollup/rollup-linux-riscv64-musl@4.40.1", "", { "os": "linux", "cpu": "none" }, "sha512-n/vQ4xRZXKuIpqukkMXZt9RWdl+2zgGNx7Uda8NtmLJ06NL8jiHxUawbwC+hdSq1rrw/9CghCpEONor+l1e2gA=="], + "@rollup/rollup-linux-riscv64-musl": ["@rollup/rollup-linux-riscv64-musl@4.40.2", "", { "os": "linux", "cpu": "none" }, "sha512-5W6vNYkhgfh7URiXTO1E9a0cy4fSgfE4+Hl5agb/U1sa0kjOLMLC1wObxwKxecE17j0URxuTrYZZME4/VH57Hg=="], - "@rollup/rollup-linux-s390x-gnu": ["@rollup/rollup-linux-s390x-gnu@4.40.1", "", { "os": "linux", "cpu": "s390x" }, "sha512-h8d28xzYb98fMQKUz0w2fMc1XuGzLLjdyxVIbhbil4ELfk5/orZlSTpF/xdI9C8K0I8lCkq+1En2RJsawZekkg=="], + "@rollup/rollup-linux-s390x-gnu": ["@rollup/rollup-linux-s390x-gnu@4.40.2", "", { "os": "linux", "cpu": "s390x" }, "sha512-B7LKIz+0+p348JoAL4X/YxGx9zOx3sR+o6Hj15Y3aaApNfAshK8+mWZEf759DXfRLeL2vg5LYJBB7DdcleYCoQ=="], - "@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.40.1", "", { "os": "linux", "cpu": "x64" }, "sha512-XiK5z70PEFEFqcNj3/zRSz/qX4bp4QIraTy9QjwJAb/Z8GM7kVUsD0Uk8maIPeTyPCP03ChdI+VVmJriKYbRHQ=="], + "@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.40.2", "", { "os": "linux", "cpu": "x64" }, "sha512-lG7Xa+BmBNwpjmVUbmyKxdQJ3Q6whHjMjzQplOs5Z+Gj7mxPtWakGHqzMqNER68G67kmCX9qX57aRsW5V0VOng=="], - "@rollup/rollup-linux-x64-musl": ["@rollup/rollup-linux-x64-musl@4.40.1", "", { "os": "linux", "cpu": "x64" }, "sha512-2BRORitq5rQ4Da9blVovzNCMaUlyKrzMSvkVR0D4qPuOy/+pMCrh1d7o01RATwVy+6Fa1WBw+da7QPeLWU/1mQ=="], + "@rollup/rollup-linux-x64-musl": ["@rollup/rollup-linux-x64-musl@4.40.2", "", { "os": "linux", "cpu": "x64" }, "sha512-tD46wKHd+KJvsmije4bUskNuvWKFcTOIM9tZ/RrmIvcXnbi0YK/cKS9FzFtAm7Oxi2EhV5N2OpfFB348vSQRXA=="], - "@rollup/rollup-win32-arm64-msvc": ["@rollup/rollup-win32-arm64-msvc@4.40.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-b2bcNm9Kbde03H+q+Jjw9tSfhYkzrDUf2d5MAd1bOJuVplXvFhWz7tRtWvD8/ORZi7qSCy0idW6tf2HgxSXQSg=="], + "@rollup/rollup-win32-arm64-msvc": ["@rollup/rollup-win32-arm64-msvc@4.40.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-Bjv/HG8RRWLNkXwQQemdsWw4Mg+IJ29LK+bJPW2SCzPKOUaMmPEppQlu/Fqk1d7+DX3V7JbFdbkh/NMmurT6Pg=="], - "@rollup/rollup-win32-ia32-msvc": ["@rollup/rollup-win32-ia32-msvc@4.40.1", "", { "os": "win32", "cpu": "ia32" }, "sha512-DfcogW8N7Zg7llVEfpqWMZcaErKfsj9VvmfSyRjCyo4BI3wPEfrzTtJkZG6gKP/Z92wFm6rz2aDO7/JfiR/whA=="], + "@rollup/rollup-win32-ia32-msvc": ["@rollup/rollup-win32-ia32-msvc@4.40.2", "", { "os": "win32", "cpu": "ia32" }, "sha512-dt1llVSGEsGKvzeIO76HToiYPNPYPkmjhMHhP00T9S4rDern8P2ZWvWAQUEJ+R1UdMWJ/42i/QqJ2WV765GZcA=="], - "@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.40.1", "", { "os": "win32", "cpu": "x64" }, "sha512-ECyOuDeH3C1I8jH2MK1RtBJW+YPMvSfT0a5NN0nHfQYnDSJ6tUiZH3gzwVP5/Kfh/+Tt7tpWVF9LXNTnhTJ3kA=="], + "@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.40.2", "", { "os": "win32", "cpu": "x64" }, "sha512-bwspbWB04XJpeElvsp+DCylKfF4trJDa2Y9Go8O6A7YLX2LIKGcNK/CYImJN6ZP4DcuOHB4Utl3iCbnR62DudA=="], "@rtsao/scc": ["@rtsao/scc@1.1.0", "", {}, "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g=="], @@ -995,15 +995,15 @@ "@types/zen-observable": ["@types/zen-observable@0.8.7", "", {}, "sha512-LKzNTjj+2j09wAo/vvVjzgw5qckJJzhdGgWHW7j69QIGdq/KnZrMAMIHQiWGl3Ccflh5/CudBAntTPYdprPltA=="], - "@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.31.1", "", { "dependencies": { "@typescript-eslint/types": "8.31.1", "@typescript-eslint/visitor-keys": "8.31.1" } }, "sha512-BMNLOElPxrtNQMIsFHE+3P0Yf1z0dJqV9zLdDxN/xLlWMlXK/ApEsVEKzpizg9oal8bAT5Sc7+ocal7AC1HCVw=="], + "@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.32.0", "", { "dependencies": { "@typescript-eslint/types": "8.32.0", "@typescript-eslint/visitor-keys": "8.32.0" } }, "sha512-jc/4IxGNedXkmG4mx4nJTILb6TMjL66D41vyeaPWvDUmeYQzF3lKtN15WsAeTr65ce4mPxwopPSo1yUUAWw0hQ=="], - "@typescript-eslint/types": ["@typescript-eslint/types@8.31.1", "", {}, "sha512-SfepaEFUDQYRoA70DD9GtytljBePSj17qPxFHA/h3eg6lPTqGJ5mWOtbXCk1YrVU1cTJRd14nhaXWFu0l2troQ=="], + "@typescript-eslint/types": ["@typescript-eslint/types@8.32.0", "", {}, "sha512-O5Id6tGadAZEMThM6L9HmVf5hQUXNSxLVKeGJYWNhhVseps/0LddMkp7//VDkzwJ69lPL0UmZdcZwggj9akJaA=="], - "@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.31.1", "", { "dependencies": { "@typescript-eslint/types": "8.31.1", "@typescript-eslint/visitor-keys": "8.31.1", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", "minimatch": "^9.0.4", "semver": "^7.6.0", "ts-api-utils": "^2.0.1" }, "peerDependencies": { "typescript": ">=4.8.4 <5.9.0" } }, "sha512-kaA0ueLe2v7KunYOyWYtlf/QhhZb7+qh4Yw6Ni5kgukMIG+iP773tjgBiLWIXYumWCwEq3nLW+TUywEp8uEeag=="], + "@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.32.0", "", { "dependencies": { "@typescript-eslint/types": "8.32.0", "@typescript-eslint/visitor-keys": "8.32.0", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", "minimatch": "^9.0.4", "semver": "^7.6.0", "ts-api-utils": "^2.1.0" }, "peerDependencies": { "typescript": ">=4.8.4 <5.9.0" } }, "sha512-pU9VD7anSCOIoBFnhTGfOzlVFQIA1XXiQpH/CezqOBaDppRwTglJzCC6fUQGpfwey4T183NKhF1/mfatYmjRqQ=="], "@typescript-eslint/utils": ["@typescript-eslint/utils@7.18.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@typescript-eslint/scope-manager": "7.18.0", "@typescript-eslint/types": "7.18.0", "@typescript-eslint/typescript-estree": "7.18.0" }, "peerDependencies": { "eslint": "^8.56.0" } }, "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw=="], - "@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.31.1", "", { "dependencies": { "@typescript-eslint/types": "8.31.1", "eslint-visitor-keys": "^4.2.0" } }, "sha512-I+/rgqOVBn6f0o7NDTmAPWWC6NuqhV174lfYvAm9fUaWeiefLdux9/YI3/nLugEn9L8fcSi0XmpKi/r5u0nmpw=="], + "@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.32.0", "", { "dependencies": { "@typescript-eslint/types": "8.32.0", "eslint-visitor-keys": "^4.2.0" } }, "sha512-1rYQTCLFFzOI5Nl0c8LUpJT8HxpwVRn9E4CkMsYfuN6ctmQqExjSTzzSk0Tz2apmXy7WU6/6fyaZVVA/thPN+w=="], "@ungap/structured-clone": ["@ungap/structured-clone@1.3.0", "", {}, "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g=="], @@ -1327,7 +1327,7 @@ "boolean": ["boolean@3.2.0", "", {}, "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw=="], - "bootstrap": ["bootstrap@5.3.5", "", { "peerDependencies": { "@popperjs/core": "^2.11.8" } }, "sha512-ct1CHKtiobRimyGzmsSldEtM03E8fcEX4Tb3dGXz1V8faRwM50+vfHwTzOxB3IlKO7m+9vTH3s/3C6T2EAPeTA=="], + "bootstrap": ["bootstrap@5.3.6", "", { "peerDependencies": { "@popperjs/core": "^2.11.8" } }, "sha512-jX0GAcRzvdwISuvArXn3m7KZscWWFAf1MKBcnzaN02qWMb3jpMoUX4/qgeiGzqyIb4ojulRzs89UCUmGcFSzTA=="], "bootstrap-vue-next": ["bootstrap-vue-next@0.26.8", "", { "peerDependencies": { "vue": "^3.5.13" } }, "sha512-2WolMPi4XB0J/736PPglDCIjUz2pwvOhu3SLjQYP0Rh5IncspMZMkUCa/H28Vh45xQadFtrYeBPyPF3JrpbadA=="], @@ -1337,7 +1337,7 @@ "browser-process-hrtime": ["browser-process-hrtime@1.0.0", "", {}, "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow=="], - "browserslist": ["browserslist@4.24.4", "", { "dependencies": { "caniuse-lite": "^1.0.30001688", "electron-to-chromium": "^1.5.73", "node-releases": "^2.0.19", "update-browserslist-db": "^1.1.1" }, "bin": { "browserslist": "cli.js" } }, "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A=="], + "browserslist": ["browserslist@4.24.5", "", { "dependencies": { "caniuse-lite": "^1.0.30001716", "electron-to-chromium": "^1.5.149", "node-releases": "^2.0.19", "update-browserslist-db": "^1.1.3" }, "bin": { "browserslist": "cli.js" } }, "sha512-FDToo4Wo82hIdgc1CQ+NQD0hEhmpPjrZ3hiUgwgOG6IuTdlpr8jdjyG24P6cNP1yJpTLzS5OcGgSw0xmDU1/Tw=="], "bs-logger": ["bs-logger@0.2.6", "", { "dependencies": { "fast-json-stable-stringify": "2.x" } }, "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog=="], @@ -1379,7 +1379,7 @@ "camelcase": ["camelcase@6.3.0", "", {}, "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA=="], - "caniuse-lite": ["caniuse-lite@1.0.30001715", "", {}, "sha512-7ptkFGMm2OAOgvZpwgA4yjQ5SQbrNVGdRjzH0pBdy1Fasvcr+KAeECmbCAECzTuDuoX0FCY8KzUxjf9+9kfZEw=="], + "caniuse-lite": ["caniuse-lite@1.0.30001717", "", {}, "sha512-auPpttCq6BDEG8ZAuHJIplGw6GODhjw+/11e7IjpnYCxZcW/ONgPs0KVBJ0d1bY3e2+7PRe5RCLyP+PfwVgkYw=="], "chai": ["chai@5.2.0", "", { "dependencies": { "assertion-error": "^2.0.1", "check-error": "^2.1.1", "deep-eql": "^5.0.1", "loupe": "^3.1.0", "pathval": "^2.0.0" } }, "sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw=="], @@ -1429,7 +1429,7 @@ "commander": ["commander@7.2.0", "", {}, "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw=="], - "compact-encoding": ["compact-encoding@2.16.0", "", { "dependencies": { "b4a": "^1.3.0" } }, "sha512-zG2ul4Egc8ktfmj2vYiC6s/U3u1OkNyUGj32jrJq6qcJ4atGcEpVr+AI+VDJ3oteNfGIw/uol4oBQyB74OeGvw=="], + "compact-encoding": ["compact-encoding@2.16.1", "", { "dependencies": { "b4a": "^1.3.0" } }, "sha512-vP39X4nwtesmZucaAxDg4wnudOoaJTSR+fikzi8VLVxbwLmcWXf3t0LxY0n2H1AMpdoQZ08lmUf4GY3XiDPnMQ=="], "compact-encoding-net": ["compact-encoding-net@1.2.0", "", { "dependencies": { "compact-encoding": "^2.4.1" } }, "sha512-LVXpNpF7PGQeHRVVLGgYWzuVoYAaDZvKUsUxRioGfkotzvOh4AzoQF1HBH3zMNaSnx7gJXuUr3hkjnijaH/Eng=="], @@ -1455,7 +1455,7 @@ "content-type": ["content-type@1.0.5", "", {}, "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA=="], - "convert-source-map": ["convert-source-map@2.0.0", "", {}, "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="], + "convert-source-map": ["convert-source-map@1.9.0", "", {}, "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A=="], "cookie": ["cookie@0.7.1", "", {}, "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w=="], @@ -1463,7 +1463,7 @@ "copy-anything": ["copy-anything@3.0.5", "", { "dependencies": { "is-what": "^4.1.8" } }, "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w=="], - "core-js-pure": ["core-js-pure@3.41.0", "", {}, "sha512-71Gzp96T9YPk63aUvE5Q5qP+DryB4ZloUZPSOebGM88VNw8VNfvdA7z6kGA8iGOTEzAomsRidp4jXSmUIJsL+Q=="], + "core-js-pure": ["core-js-pure@3.42.0", "", {}, "sha512-007bM04u91fF4kMgwom2I5cQxAFIy8jVulgr9eozILl/SZE53QOqnW/+vviC+wQWLv+AunBG+8Q0TLoeSsSxRQ=="], "core-util-is": ["core-util-is@1.0.3", "", {}, "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="], @@ -1613,7 +1613,7 @@ "ejs": ["ejs@3.1.10", "", { "dependencies": { "jake": "^10.8.5" }, "bin": { "ejs": "bin/cli.js" } }, "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA=="], - "electron-to-chromium": ["electron-to-chromium@1.5.143", "", {}, "sha512-QqklJMOFBMqe46k8iIOwA9l2hz57V2OKMmP5eSWcUvwx+mASAsbU+wkF1pHjn9ZVSBPrsYWr4/W/95y5SwYg2g=="], + "electron-to-chromium": ["electron-to-chromium@1.5.150", "", {}, "sha512-rOOkP2ZUMx1yL4fCxXQKDHQ8ZXwisb2OycOQVKHgvB3ZI4CvehOd4y2tfnnLDieJ3Zs1RL1Dlp3cMkyIn7nnXA=="], "email-templates": ["email-templates@10.0.1", "", { "dependencies": { "@ladjs/i18n": "^8.0.1", "consolidate": "^0.16.0", "get-paths": "^0.0.7", "html-to-text": "^8.2.0", "juice": "^8.0.0", "lodash": "^4.17.21", "nodemailer": "^6.7.7", "preview-email": "^3.0.7" } }, "sha512-LNZKS0WW9XQkjuDZd/4p/1Q/pwqaqXOP3iDxTIVIQY9vuHlIUEcRLFo8/Xh3GtZCBnm181VgvOXIABKTVyTePA=="], @@ -1655,7 +1655,7 @@ "es6-promise": ["es6-promise@4.2.8", "", {}, "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w=="], - "esbuild": ["esbuild@0.25.3", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.3", "@esbuild/android-arm": "0.25.3", "@esbuild/android-arm64": "0.25.3", "@esbuild/android-x64": "0.25.3", "@esbuild/darwin-arm64": "0.25.3", "@esbuild/darwin-x64": "0.25.3", "@esbuild/freebsd-arm64": "0.25.3", "@esbuild/freebsd-x64": "0.25.3", "@esbuild/linux-arm": "0.25.3", "@esbuild/linux-arm64": "0.25.3", "@esbuild/linux-ia32": "0.25.3", "@esbuild/linux-loong64": "0.25.3", "@esbuild/linux-mips64el": "0.25.3", "@esbuild/linux-ppc64": "0.25.3", "@esbuild/linux-riscv64": "0.25.3", "@esbuild/linux-s390x": "0.25.3", "@esbuild/linux-x64": "0.25.3", "@esbuild/netbsd-arm64": "0.25.3", "@esbuild/netbsd-x64": "0.25.3", "@esbuild/openbsd-arm64": "0.25.3", "@esbuild/openbsd-x64": "0.25.3", "@esbuild/sunos-x64": "0.25.3", "@esbuild/win32-arm64": "0.25.3", "@esbuild/win32-ia32": "0.25.3", "@esbuild/win32-x64": "0.25.3" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-qKA6Pvai73+M2FtftpNKRxJ78GIjmFXFxd/1DVBqGo/qNhLSfv+G12n9pNoWdytJC8U00TrViOwpjT0zgqQS8Q=="], + "esbuild": ["esbuild@0.25.4", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.4", "@esbuild/android-arm": "0.25.4", "@esbuild/android-arm64": "0.25.4", "@esbuild/android-x64": "0.25.4", "@esbuild/darwin-arm64": "0.25.4", "@esbuild/darwin-x64": "0.25.4", "@esbuild/freebsd-arm64": "0.25.4", "@esbuild/freebsd-x64": "0.25.4", "@esbuild/linux-arm": "0.25.4", "@esbuild/linux-arm64": "0.25.4", "@esbuild/linux-ia32": "0.25.4", "@esbuild/linux-loong64": "0.25.4", "@esbuild/linux-mips64el": "0.25.4", "@esbuild/linux-ppc64": "0.25.4", "@esbuild/linux-riscv64": "0.25.4", "@esbuild/linux-s390x": "0.25.4", "@esbuild/linux-x64": "0.25.4", "@esbuild/netbsd-arm64": "0.25.4", "@esbuild/netbsd-x64": "0.25.4", "@esbuild/openbsd-arm64": "0.25.4", "@esbuild/openbsd-x64": "0.25.4", "@esbuild/sunos-x64": "0.25.4", "@esbuild/win32-arm64": "0.25.4", "@esbuild/win32-ia32": "0.25.4", "@esbuild/win32-x64": "0.25.4" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q=="], "escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], @@ -1691,7 +1691,7 @@ "eslint-plugin-node": ["eslint-plugin-node@11.1.0", "", { "dependencies": { "eslint-plugin-es": "^3.0.0", "eslint-utils": "^2.0.0", "ignore": "^5.1.1", "minimatch": "^3.0.4", "resolve": "^1.10.1", "semver": "^6.1.0" }, "peerDependencies": { "eslint": ">=5.16.0" } }, "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g=="], - "eslint-plugin-prettier": ["eslint-plugin-prettier@5.2.6", "", { "dependencies": { "prettier-linter-helpers": "^1.0.0", "synckit": "^0.11.0" }, "peerDependencies": { "@types/eslint": ">=8.0.0", "eslint": ">=8.0.0", "eslint-config-prettier": ">= 7.0.0 <10.0.0 || >=10.1.0", "prettier": ">=3.0.0" }, "optionalPeers": ["@types/eslint", "eslint-config-prettier"] }, "sha512-mUcf7QG2Tjk7H055Jk0lGBjbgDnfrvqjhXh9t2xLMSCjZVcw9Rb1V6sVNXO0th3jgeO7zllWPTNRil3JW94TnQ=="], + "eslint-plugin-prettier": ["eslint-plugin-prettier@5.4.0", "", { "dependencies": { "prettier-linter-helpers": "^1.0.0", "synckit": "^0.11.0" }, "peerDependencies": { "@types/eslint": ">=8.0.0", "eslint": ">=8.0.0", "eslint-config-prettier": ">= 7.0.0 <10.0.0 || >=10.1.0", "prettier": ">=3.0.0" }, "optionalPeers": ["@types/eslint", "eslint-config-prettier"] }, "sha512-BvQOvUhkVQM1i63iMETK9Hjud9QhqBnbtT1Zc642p9ynzBuCe5pybkOnvqZIBypXmMlsGcnU4HZ8sCTPfpAexA=="], "eslint-plugin-promise": ["eslint-plugin-promise@6.6.0", "", { "peerDependencies": { "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0" } }, "sha512-57Zzfw8G6+Gq7axm2Pdo3gW/Rx3h9Yywgn61uE/3elTCOePEHVrn2i5CdfBwA1BLK0Q0WqctICIUSqXZW/VprQ=="], @@ -1989,7 +1989,7 @@ "ignore-by-default": ["ignore-by-default@1.0.1", "", {}, "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA=="], - "immutable": ["immutable@5.1.1", "", {}, "sha512-3jatXi9ObIsPGr3N5hGw/vWWcTkq6hUYhpQz4k0wLC+owqWi/LiugIw9x0EdNZ2yGedKN/HzePiBvaJRXa0Ujg=="], + "immutable": ["immutable@5.1.2", "", {}, "sha512-qHKXW1q6liAk1Oys6umoaZbDRqjcjgSrbnrifHsfsttza7zcvRAsL7mMV6xWcyhwQy7Xj5v4hhbr6b+iDYwlmQ=="], "import-cwd": ["import-cwd@3.0.0", "", { "dependencies": { "import-from": "^3.0.0" } }, "sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg=="], @@ -2451,7 +2451,7 @@ "object.values": ["object.values@1.2.1", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" } }, "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA=="], - "ohash": ["ohash@2.0.11", "", {}, "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ=="], + "ohash": ["ohash@1.1.6", "", {}, "sha512-TBu7PtV8YkAZn0tSxobKY2n2aAQva936lhRrj6957aDaCf9IEtqsKbgMzXE/F/sjqYOwmrukeORHNLe5glk7Cg=="], "on-finished": ["on-finished@2.4.1", "", { "dependencies": { "ee-first": "1.1.1" } }, "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg=="], @@ -2461,7 +2461,7 @@ "open": ["open@7.4.2", "", { "dependencies": { "is-docker": "^2.0.0", "is-wsl": "^2.1.1" } }, "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q=="], - "openai": ["openai@4.96.0", "", { "dependencies": { "@types/node": "^18.11.18", "@types/node-fetch": "^2.6.4", "abort-controller": "^3.0.0", "agentkeepalive": "^4.2.1", "form-data-encoder": "1.7.2", "formdata-node": "^4.3.2", "node-fetch": "^2.6.7" }, "peerDependencies": { "ws": "^8.18.0", "zod": "^3.23.8" }, "optionalPeers": ["ws", "zod"], "bin": { "openai": "bin/cli" } }, "sha512-dKoW56i02Prv2XQolJ9Rl9Svqubqkzg3QpwEOBuSVZLk05Shelu7s+ErRTwFc1Bs3JZ2qBqBfVpXQiJhwOGG8A=="], + "openai": ["openai@4.97.0", "", { "dependencies": { "@types/node": "^18.11.18", "@types/node-fetch": "^2.6.4", "abort-controller": "^3.0.0", "agentkeepalive": "^4.2.1", "form-data-encoder": "1.7.2", "formdata-node": "^4.3.2", "node-fetch": "^2.6.7" }, "peerDependencies": { "ws": "^8.18.0", "zod": "^3.23.8" }, "optionalPeers": ["ws", "zod"], "bin": { "openai": "bin/cli" } }, "sha512-LRoiy0zvEf819ZUEJhgfV8PfsE8G5WpQi4AwA1uCV8SKvvtXQkoWUFkepD6plqyJQRghy2+AEPQ07FrJFKHZ9Q=="], "optimism": ["optimism@0.18.1", "", { "dependencies": { "@wry/caches": "^1.0.0", "@wry/context": "^0.7.0", "@wry/trie": "^0.5.0", "tslib": "^2.3.0" } }, "sha512-mLXNwWPa9dgFyDqkNi54sjDyNJ9/fTI6WGBLgnXku1vdKY/jovHfZT5r+aiVeFFLOz+foPNOm5YJ4mqgld2GBQ=="], @@ -2709,7 +2709,7 @@ "rimraf": ["rimraf@3.0.2", "", { "dependencies": { "glob": "^7.1.3" }, "bin": { "rimraf": "bin.js" } }, "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA=="], - "rollup": ["rollup@4.40.1", "", { "dependencies": { "@types/estree": "1.0.7" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.40.1", "@rollup/rollup-android-arm64": "4.40.1", "@rollup/rollup-darwin-arm64": "4.40.1", "@rollup/rollup-darwin-x64": "4.40.1", "@rollup/rollup-freebsd-arm64": "4.40.1", "@rollup/rollup-freebsd-x64": "4.40.1", "@rollup/rollup-linux-arm-gnueabihf": "4.40.1", "@rollup/rollup-linux-arm-musleabihf": "4.40.1", "@rollup/rollup-linux-arm64-gnu": "4.40.1", "@rollup/rollup-linux-arm64-musl": "4.40.1", "@rollup/rollup-linux-loongarch64-gnu": "4.40.1", "@rollup/rollup-linux-powerpc64le-gnu": "4.40.1", "@rollup/rollup-linux-riscv64-gnu": "4.40.1", "@rollup/rollup-linux-riscv64-musl": "4.40.1", "@rollup/rollup-linux-s390x-gnu": "4.40.1", "@rollup/rollup-linux-x64-gnu": "4.40.1", "@rollup/rollup-linux-x64-musl": "4.40.1", "@rollup/rollup-win32-arm64-msvc": "4.40.1", "@rollup/rollup-win32-ia32-msvc": "4.40.1", "@rollup/rollup-win32-x64-msvc": "4.40.1", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-C5VvvgCCyfyotVITIAv+4efVytl5F7wt+/I2i9q9GZcEXW9BP52YYOXC58igUi+LFZVHukErIIqQSWwv/M3WRw=="], + "rollup": ["rollup@4.40.2", "", { "dependencies": { "@types/estree": "1.0.7" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.40.2", "@rollup/rollup-android-arm64": "4.40.2", "@rollup/rollup-darwin-arm64": "4.40.2", "@rollup/rollup-darwin-x64": "4.40.2", "@rollup/rollup-freebsd-arm64": "4.40.2", "@rollup/rollup-freebsd-x64": "4.40.2", "@rollup/rollup-linux-arm-gnueabihf": "4.40.2", "@rollup/rollup-linux-arm-musleabihf": "4.40.2", "@rollup/rollup-linux-arm64-gnu": "4.40.2", "@rollup/rollup-linux-arm64-musl": "4.40.2", "@rollup/rollup-linux-loongarch64-gnu": "4.40.2", "@rollup/rollup-linux-powerpc64le-gnu": "4.40.2", "@rollup/rollup-linux-riscv64-gnu": "4.40.2", "@rollup/rollup-linux-riscv64-musl": "4.40.2", "@rollup/rollup-linux-s390x-gnu": "4.40.2", "@rollup/rollup-linux-x64-gnu": "4.40.2", "@rollup/rollup-linux-x64-musl": "4.40.2", "@rollup/rollup-win32-arm64-msvc": "4.40.2", "@rollup/rollup-win32-ia32-msvc": "4.40.2", "@rollup/rollup-win32-x64-msvc": "4.40.2", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-tfUOg6DTP4rhQ3VjOO6B4wyrJnGOX85requAXvqYTHsOgb2TFJdZ3aWpT8W2kPoypSGP7dZUyzxJ9ee4buM5Fg=="], "rrweb-cssom": ["rrweb-cssom@0.7.1", "", {}, "sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg=="], @@ -2883,7 +2883,7 @@ "stylelint-config-standard-scss": ["stylelint-config-standard-scss@14.0.0", "", { "dependencies": { "stylelint-config-recommended-scss": "^14.1.0", "stylelint-config-standard": "^36.0.1" }, "peerDependencies": { "postcss": "^8.3.3", "stylelint": "^16.11.0" }, "optionalPeers": ["postcss"] }, "sha512-6Pa26D9mHyi4LauJ83ls3ELqCglU6VfCXchovbEqQUiEkezvKdv6VgsIoMy58i00c854wVmOw0k8W5FTpuaVqg=="], - "stylelint-scss": ["stylelint-scss@6.11.1", "", { "dependencies": { "css-tree": "^3.0.1", "is-plain-object": "^5.0.0", "known-css-properties": "^0.35.0", "mdn-data": "^2.15.0", "postcss-media-query-parser": "^0.2.3", "postcss-resolve-nested-selector": "^0.1.6", "postcss-selector-parser": "^7.1.0", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "stylelint": "^16.0.2" } }, "sha512-e4rYo0UY+BIMtGeGanghrvHTjcryxgZbyFxUedp8dLFqC4P70aawNdYjRrQxbnKhu3BNr4+lt5e/53tcKXiwFA=="], + "stylelint-scss": ["stylelint-scss@6.12.0", "", { "dependencies": { "css-tree": "^3.0.1", "is-plain-object": "^5.0.0", "known-css-properties": "^0.36.0", "mdn-data": "^2.21.0", "postcss-media-query-parser": "^0.2.3", "postcss-resolve-nested-selector": "^0.1.6", "postcss-selector-parser": "^7.1.0", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "stylelint": "^16.0.2" } }, "sha512-U7CKhi1YNkM1pXUXl/GMUXi8xKdhl4Ayxdyceie1nZ1XNIdaUgMV6OArpooWcDzEggwgYD0HP/xIgVJo9a655w=="], "subscriptions-transport-ws": ["subscriptions-transport-ws@0.9.19", "", { "dependencies": { "backo2": "^1.0.2", "eventemitter3": "^3.1.0", "iterall": "^1.2.1", "symbol-observable": "^1.0.4", "ws": "^5.2.0 || ^6.0.0 || ^7.0.0" }, "peerDependencies": { "graphql": ">=0.10.0" } }, "sha512-dxdemxFFB0ppCLg10FTtRqH/31FNRL1y1BQv8209MK5I4CwALb7iihQg+7p65lFcIl8MHatINWBLOqpgU4Kyyw=="], @@ -2947,7 +2947,7 @@ "titleize": ["titleize@2.1.0", "", {}, "sha512-m+apkYlfiQTKLW+sI4vqUkwMEzfgEUEYSqljx1voUE3Wz/z1ZsxyzSxvH2X8uKVrOp7QkByWt0rA6+gvhCKy6g=="], - "tlds": ["tlds@1.257.0", "", { "bin": { "tlds": "bin.js" } }, "sha512-TZEScdurAjJDULiKMkr8Gvj+GqwcRQ1zPkbEFoo4Y6N5EgsyC6eEKe6xwbFtsrJPxAk8l/o5IPKzAqnrKD6tWg=="], + "tlds": ["tlds@1.258.0", "", { "bin": { "tlds": "bin.js" } }, "sha512-XGhStWuOlBA5D8QnyN2xtgB2cUOdJ3ztisne1DYVWMcVH29qh8eQIpRmP3HnuJLdgyzG0HpdGzRMu1lm/Oictw=="], "tldts": ["tldts@6.1.86", "", { "dependencies": { "tldts-core": "^6.1.86" }, "bin": { "tldts": "bin/cli.js" } }, "sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ=="], @@ -3059,7 +3059,7 @@ "undici-types": ["undici-types@5.26.5", "", {}, "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA=="], - "unimport": ["unimport@5.0.0", "", { "dependencies": { "acorn": "^8.14.1", "escape-string-regexp": "^5.0.0", "estree-walker": "^3.0.3", "local-pkg": "^1.1.1", "magic-string": "^0.30.17", "mlly": "^1.7.4", "pathe": "^2.0.3", "picomatch": "^4.0.2", "pkg-types": "^2.1.0", "scule": "^1.3.0", "strip-literal": "^3.0.0", "tinyglobby": "^0.2.12", "unplugin": "^2.2.2", "unplugin-utils": "^0.2.4" } }, "sha512-8jL3T+FKDg+qLFX55X9j92uFRqH5vWrNlf/eJb5IQlQB5q5wjooXQDXP1ulhJJQHbosBmlKhBo/ZVS5jHlcJGA=="], + "unimport": ["unimport@5.0.1", "", { "dependencies": { "acorn": "^8.14.1", "escape-string-regexp": "^5.0.0", "estree-walker": "^3.0.3", "local-pkg": "^1.1.1", "magic-string": "^0.30.17", "mlly": "^1.7.4", "pathe": "^2.0.3", "picomatch": "^4.0.2", "pkg-types": "^2.1.0", "scule": "^1.3.0", "strip-literal": "^3.0.0", "tinyglobby": "^0.2.13", "unplugin": "^2.3.2", "unplugin-utils": "^0.2.4" } }, "sha512-1YWzPj6wYhtwHE+9LxRlyqP4DiRrhGfJxdtH475im8ktyZXO3jHj/3PZ97zDdvkYoovFdi0K4SKl3a7l92v3sQ=="], "universalify": ["universalify@2.0.1", "", {}, "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw=="], @@ -3103,7 +3103,7 @@ "vee-validate": ["vee-validate@4.15.0", "", { "dependencies": { "@vue/devtools-api": "^7.5.2", "type-fest": "^4.8.3" }, "peerDependencies": { "vue": "^3.4.26" } }, "sha512-PGJh1QCFwCBjbHu5aN6vB8macYVWrajbDvgo1Y/8fz9n/RVIkLmZCJDpUgu7+mUmCOPMxeyq7vXUOhbwAqdXcA=="], - "vite": ["vite@5.4.18", "", { "dependencies": { "esbuild": "^0.21.3", "postcss": "^8.4.43", "rollup": "^4.20.0" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^18.0.0 || >=20.0.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.4.0" }, "optionalPeers": ["@types/node", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser"], "bin": { "vite": "bin/vite.js" } }, "sha512-1oDcnEp3lVyHCuQ2YFelM4Alm2o91xNoMncRm1U7S+JdYfYOvbiGZ3/CxGttrOu2M/KcGz7cRC2DoNUA6urmMA=="], + "vite": ["vite@5.4.19", "", { "dependencies": { "esbuild": "^0.21.3", "postcss": "^8.4.43", "rollup": "^4.20.0" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^18.0.0 || >=20.0.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.4.0" }, "optionalPeers": ["@types/node", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser"], "bin": { "vite": "bin/vite.js" } }, "sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA=="], "vite-node": ["vite-node@2.1.9", "", { "dependencies": { "cac": "^6.7.14", "debug": "^4.3.7", "es-module-lexer": "^1.5.4", "pathe": "^1.1.2", "vite": "^5.0.0" }, "bin": { "vite-node": "vite-node.mjs" } }, "sha512-AM9aQ/IPrW/6ENLQg3AGY4K1N2TGZdR5e4gu/MmmR2xR3Ll1+dib+nook92g4TV3PXVyeyxdWwtaCAiUL0hMxA=="], @@ -3205,7 +3205,7 @@ "write-file-atomic": ["write-file-atomic@5.0.1", "", { "dependencies": { "imurmurhash": "^0.1.4", "signal-exit": "^4.0.1" } }, "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw=="], - "ws": ["ws@8.18.1", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w=="], + "ws": ["ws@8.18.2", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ=="], "xache": ["xache@1.2.1", "", {}, "sha512-igRS6jPreJ54ABdzhh4mCDXcz+XMaWO2q1ABRV2yWYuk29jlp8VT7UBdCqNkX7rpYBbXsebVVKkwIuYZjyZNqA=="], @@ -3243,22 +3243,20 @@ "@apollo/protobufjs/@types/node": ["@types/node@10.17.60", "", {}, "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw=="], - "@apollographql/graphql-upload-8-fork/http-errors": ["http-errors@1.7.3", "", { "dependencies": { "depd": "~1.1.2", "inherits": "2.0.4", "setprototypeof": "1.1.1", "statuses": ">= 1.5.0 < 2", "toidentifier": "1.0.0" } }, "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw=="], + "@apollographql/graphql-upload-8-fork/http-errors": ["http-errors@1.8.1", "", { "dependencies": { "depd": "~1.1.2", "inherits": "2.0.4", "setprototypeof": "1.2.0", "statuses": ">= 1.5.0 < 2", "toidentifier": "1.0.1" } }, "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g=="], "@asamuzakjp/css-color/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], "@babel/code-frame/js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="], + "@babel/core/convert-source-map": ["convert-source-map@2.0.0", "", {}, "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="], + "@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], "@babel/helper-compilation-targets/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], - "@babel/runtime/regenerator-runtime": ["regenerator-runtime@0.14.1", "", {}, "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw=="], - - "@babel/runtime-corejs3/regenerator-runtime": ["regenerator-runtime@0.14.1", "", {}, "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw=="], - "@babel/traverse/globals": ["globals@11.12.0", "", {}, "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA=="], "@cspotcode/source-map-support/@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.9", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" } }, "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ=="], @@ -3271,7 +3269,7 @@ "@hyperswarm/secret-stream/sodium-universal": ["sodium-universal@5.0.1", "", { "dependencies": { "sodium-native": "^5.0.1" }, "peerDependencies": { "sodium-javascript": "~0.8.0" }, "optionalPeers": ["sodium-javascript"] }, "sha512-rv+aH+tnKB5H0MAc2UadHShLMslpJsc4wjdnHRtiSIEYpOetCgu8MS4ExQRia+GL/MK3uuCyZPeEsi+J3h+Q+Q=="], - "@iconify/utils/@antfu/install-pkg": ["@antfu/install-pkg@1.0.0", "", { "dependencies": { "package-manager-detector": "^0.2.8", "tinyexec": "^0.3.2" } }, "sha512-xvX6P/lo1B3ej0OsaErAjqgFYzYVcJpamjLAFLYh9vRJngBrMoUG7aVnrGTeqM7yxbyTD5p3F2+0/QUEh8Vzhw=="], + "@iconify/utils/@antfu/install-pkg": ["@antfu/install-pkg@1.1.0", "", { "dependencies": { "package-manager-detector": "^1.3.0", "tinyexec": "^1.0.1" } }, "sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ=="], "@iconify/utils/@antfu/utils": ["@antfu/utils@8.1.1", "", {}, "sha512-Mex9nXf9vR6AhcXmMrlz/HVgYYZpVGJ6YlPgwl7UnaFpnshXs6EK/oa5Gpf3CzENMjkvEx2tQtntGnb7UtSTOQ=="], @@ -3303,15 +3301,15 @@ "@istanbuljs/load-nyc-config/js-yaml": ["js-yaml@3.14.1", "", { "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g=="], - "@jest/console/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "@jest/console/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], - "@jest/core/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "@jest/core/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], - "@jest/environment/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "@jest/environment/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], - "@jest/fake-timers/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "@jest/fake-timers/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], - "@jest/reporters/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "@jest/reporters/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], "@jest/reporters/istanbul-lib-source-maps": ["istanbul-lib-source-maps@4.0.1", "", { "dependencies": { "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0", "source-map": "^0.6.1" } }, "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw=="], @@ -3321,22 +3319,22 @@ "@jest/source-map/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], - "@jest/transform/convert-source-map": ["convert-source-map@1.9.0", "", {}, "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A=="], - "@jest/transform/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], "@jest/transform/write-file-atomic": ["write-file-atomic@3.0.3", "", { "dependencies": { "imurmurhash": "^0.1.4", "is-typedarray": "^1.0.0", "signal-exit": "^3.0.2", "typedarray-to-buffer": "^3.1.5" } }, "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q=="], - "@jest/types/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "@jest/types/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], - "@morev/utils/ohash": ["ohash@1.1.6", "", {}, "sha512-TBu7PtV8YkAZn0tSxobKY2n2aAQva936lhRrj6957aDaCf9IEtqsKbgMzXE/F/sjqYOwmrukeORHNLe5glk7Cg=="], + "@ladjs/i18n/qs": ["qs@6.14.0", "", { "dependencies": { "side-channel": "^1.1.0" } }, "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w=="], - "@morev/utils/type-fest": ["type-fest@4.40.1", "", {}, "sha512-9YvLNnORDpI+vghLU/Nf+zSv0kL47KbVJ1o3sKgoTefl6i+zebxbiDQWoe/oWWqPhIgQdRZRT1KA9sCPL810SA=="], + "@morev/utils/type-fest": ["type-fest@4.41.0", "", {}, "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA=="], "@nuxt/kit/consola": ["consola@3.4.2", "", {}, "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA=="], "@nuxt/kit/ignore": ["ignore@7.0.4", "", {}, "sha512-gJzzk+PQNznz8ysRrC0aOkBNVRBDtE1n53IqyqEf3PXrYwomFs5q4pGMizBMJF+ykh03insJ27hB8gSrD2Hn8A=="], + "@nuxt/kit/ohash": ["ohash@2.0.11", "", {}, "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ=="], + "@nuxt/kit/pathe": ["pathe@2.0.3", "", {}, "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="], "@nuxt/kit/pkg-types": ["pkg-types@2.1.0", "", { "dependencies": { "confbox": "^0.2.1", "exsolve": "^1.0.1", "pathe": "^2.0.3" } }, "sha512-wmJwA+8ihJixSoHKxZJRBQG1oY8Yr9pGLzRmSsNms0iNWyHHAlZCa7mmKiFR10YPZuz/2k169JiS/inOjBCZ2A=="], @@ -3349,37 +3347,35 @@ "@swc/cli/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], - "@types/accepts/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "@types/accepts/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], - "@types/body-parser/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "@types/body-parser/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], - "@types/connect/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "@types/connect/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], - "@types/cookies/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "@types/cookies/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], - "@types/dotenv/dotenv": ["dotenv@16.5.0", "", {}, "sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg=="], + "@types/express-serve-static-core/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], - "@types/express-serve-static-core/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "@types/fs-capacitor/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], - "@types/fs-capacitor/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "@types/glob/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], - "@types/glob/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "@types/graceful-fs/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], - "@types/graceful-fs/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "@types/koa/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], - "@types/koa/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "@types/mysql/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], - "@types/mysql/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "@types/node-fetch/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], - "@types/node-fetch/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "@types/send/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], - "@types/send/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "@types/serve-static/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], - "@types/serve-static/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "@types/sodium-native/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], - "@types/sodium-native/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], - - "@types/ws/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "@types/ws/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], "@typescript-eslint/typescript-estree/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], @@ -3391,7 +3387,7 @@ "@typescript-eslint/visitor-keys/eslint-visitor-keys": ["eslint-visitor-keys@4.2.0", "", {}, "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw=="], - "@vee-validate/yup/type-fest": ["type-fest@4.40.1", "", {}, "sha512-9YvLNnORDpI+vghLU/Nf+zSv0kL47KbVJ1o3sKgoTefl6i+zebxbiDQWoe/oWWqPhIgQdRZRT1KA9sCPL810SA=="], + "@vee-validate/yup/type-fest": ["type-fest@4.41.0", "", {}, "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA=="], "@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], @@ -3463,6 +3459,8 @@ "c12/dotenv": ["dotenv@16.5.0", "", {}, "sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg=="], + "c12/ohash": ["ohash@2.0.11", "", {}, "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ=="], + "c12/pathe": ["pathe@2.0.3", "", {}, "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="], "c12/pkg-types": ["pkg-types@2.1.0", "", { "dependencies": { "confbox": "^0.2.1", "exsolve": "^1.0.1", "pathe": "^2.0.3" } }, "sha512-wmJwA+8ihJixSoHKxZJRBQG1oY8Yr9pGLzRmSsNms0iNWyHHAlZCa7mmKiFR10YPZuz/2k169JiS/inOjBCZ2A=="], @@ -3541,8 +3539,6 @@ "fast-glob/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], - "fdir/picomatch": ["picomatch@4.0.2", "", {}, "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg=="], - "federation/apollo-server-testing": ["apollo-server-testing@2.25.2", "", { "dependencies": { "apollo-server-core": "^2.25.2" }, "peerDependencies": { "graphql": "^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0" } }, "sha512-HjQV9wPbi/ZqpRbyyhNwCbaDnfjDM0hTRec5TOoOjurEZ/vh4hTPHwGkDZx3kbcWowhGxe2qoHM6KANSB/SxuA=="], "federation/helmet": ["helmet@7.2.0", "", {}, "sha512-ZRiwvN089JfMXokizgqEPXsl2Guk094yExfoDXR0cBYWxtBbaSww/w+vT4WEJsBW2iTUi1GgZ6swmoug3Oy4Xw=="], @@ -3589,37 +3585,37 @@ "istanbul-lib-report/supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], - "jest-circus/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "jest-circus/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], "jest-cli/yargs": ["yargs@16.2.0", "", { "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.0", "y18n": "^5.0.5", "yargs-parser": "^20.2.2" } }, "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw=="], - "jest-environment-jsdom/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "jest-environment-jsdom/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], "jest-environment-jsdom/jsdom": ["jsdom@16.7.0", "", { "dependencies": { "abab": "^2.0.5", "acorn": "^8.2.4", "acorn-globals": "^6.0.0", "cssom": "^0.4.4", "cssstyle": "^2.3.0", "data-urls": "^2.0.0", "decimal.js": "^10.2.1", "domexception": "^2.0.1", "escodegen": "^2.0.0", "form-data": "^3.0.0", "html-encoding-sniffer": "^2.0.1", "http-proxy-agent": "^4.0.1", "https-proxy-agent": "^5.0.0", "is-potential-custom-element-name": "^1.0.1", "nwsapi": "^2.2.0", "parse5": "6.0.1", "saxes": "^5.0.1", "symbol-tree": "^3.2.4", "tough-cookie": "^4.0.0", "w3c-hr-time": "^1.0.2", "w3c-xmlserializer": "^2.0.0", "webidl-conversions": "^6.1.0", "whatwg-encoding": "^1.0.5", "whatwg-mimetype": "^2.3.0", "whatwg-url": "^8.5.0", "ws": "^7.4.6", "xml-name-validator": "^3.0.0" }, "peerDependencies": { "canvas": "^2.5.0" }, "optionalPeers": ["canvas"] }, "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw=="], - "jest-environment-node/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "jest-environment-node/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], - "jest-haste-map/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "jest-haste-map/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], "jest-haste-map/jest-worker": ["jest-worker@27.5.1", "", { "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" } }, "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg=="], - "jest-jasmine2/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "jest-jasmine2/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], - "jest-mock/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "jest-mock/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], - "jest-runner/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "jest-runner/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], "jest-runner/jest-worker": ["jest-worker@27.5.1", "", { "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" } }, "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg=="], "jest-runtime/strip-bom": ["strip-bom@4.0.0", "", {}, "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w=="], - "jest-serializer/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "jest-serializer/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], - "jest-util/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "jest-util/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], - "jest-watcher/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "jest-watcher/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], - "jest-worker/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "jest-worker/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], "jest-worker/jest-util": ["jest-util@29.7.0", "", { "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", "graceful-fs": "^4.2.9", "picomatch": "^2.2.3" } }, "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA=="], @@ -3667,7 +3663,7 @@ "nypm/pkg-types": ["pkg-types@2.1.0", "", { "dependencies": { "confbox": "^0.2.1", "exsolve": "^1.0.1", "pathe": "^2.0.3" } }, "sha512-wmJwA+8ihJixSoHKxZJRBQG1oY8Yr9pGLzRmSsNms0iNWyHHAlZCa7mmKiFR10YPZuz/2k169JiS/inOjBCZ2A=="], - "openai/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "openai/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], "path-scurry/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], @@ -3727,8 +3723,6 @@ "stylelint-config-standard/stylelint-config-recommended": ["stylelint-config-recommended@14.0.1", "", { "peerDependencies": { "stylelint": "^16.1.0" } }, "sha512-bLvc1WOz/14aPImu/cufKAZYfXs/A/owZfSMZ4N+16WGXLoX5lOir53M6odBxvhgmgdxCVnNySJmZKx73T93cg=="], - "stylelint-scss/known-css-properties": ["known-css-properties@0.35.0", "", {}, "sha512-a/RAk2BfKk+WFGhhOCAYqSiFLc34k8Mt/6NWRI4joER0EYUzXIcFivjjnoD3+XU1DggLn/tZc3DOAgke7l8a4A=="], - "stylelint-scss/mdn-data": ["mdn-data@2.21.0", "", {}, "sha512-+ZKPQezM5vYJIkCxaC+4DTnRrVZR1CgsKLu5zsQERQx6Tea8Y+wMx5A24rq8A8NepCeatIQufVAekKNgiBMsGQ=="], "stylelint-scss/postcss-selector-parser": ["postcss-selector-parser@7.1.0", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA=="], @@ -3757,7 +3751,7 @@ "tinyglobby/picomatch": ["picomatch@4.0.2", "", {}, "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg=="], - "type-graphql/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "typed-rest-client/qs": ["qs@6.14.0", "", { "dependencies": { "side-channel": "^1.1.0" } }, "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w=="], "typeorm/dotenv": ["dotenv@16.5.0", "", {}, "sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg=="], @@ -3793,11 +3787,9 @@ "unplugin-vue-components/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], - "v8-to-istanbul/convert-source-map": ["convert-source-map@1.9.0", "", {}, "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A=="], - "vee-validate/@vue/devtools-api": ["@vue/devtools-api@7.7.6", "", { "dependencies": { "@vue/devtools-kit": "^7.7.6" } }, "sha512-b2Xx0KvXZObePpXPYHvBRRJLDQn5nhKjXh7vUhMEtWxz1AYNFOVIsh5+HLP8xDGL7sy+Q7hXeUxPHB/KgbtsPw=="], - "vee-validate/type-fest": ["type-fest@4.40.1", "", {}, "sha512-9YvLNnORDpI+vghLU/Nf+zSv0kL47KbVJ1o3sKgoTefl6i+zebxbiDQWoe/oWWqPhIgQdRZRT1KA9sCPL810SA=="], + "vee-validate/type-fest": ["type-fest@4.41.0", "", {}, "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA=="], "vite/esbuild": ["esbuild@0.21.5", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.21.5", "@esbuild/android-arm": "0.21.5", "@esbuild/android-arm64": "0.21.5", "@esbuild/android-x64": "0.21.5", "@esbuild/darwin-arm64": "0.21.5", "@esbuild/darwin-x64": "0.21.5", "@esbuild/freebsd-arm64": "0.21.5", "@esbuild/freebsd-x64": "0.21.5", "@esbuild/linux-arm": "0.21.5", "@esbuild/linux-arm64": "0.21.5", "@esbuild/linux-ia32": "0.21.5", "@esbuild/linux-loong64": "0.21.5", "@esbuild/linux-mips64el": "0.21.5", "@esbuild/linux-ppc64": "0.21.5", "@esbuild/linux-riscv64": "0.21.5", "@esbuild/linux-s390x": "0.21.5", "@esbuild/linux-x64": "0.21.5", "@esbuild/netbsd-x64": "0.21.5", "@esbuild/openbsd-x64": "0.21.5", "@esbuild/sunos-x64": "0.21.5", "@esbuild/win32-arm64": "0.21.5", "@esbuild/win32-ia32": "0.21.5", "@esbuild/win32-x64": "0.21.5" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw=="], @@ -3821,7 +3813,7 @@ "which-builtin-type/isarray": ["isarray@2.0.5", "", {}, "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="], - "wkx/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "wkx/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], "xss/commander": ["commander@2.20.3", "", {}, "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="], @@ -3829,16 +3821,16 @@ "@apollographql/graphql-upload-8-fork/http-errors/depd": ["depd@1.1.2", "", {}, "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ=="], - "@apollographql/graphql-upload-8-fork/http-errors/setprototypeof": ["setprototypeof@1.1.1", "", {}, "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="], - "@apollographql/graphql-upload-8-fork/http-errors/statuses": ["statuses@1.5.0", "", {}, "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA=="], - "@apollographql/graphql-upload-8-fork/http-errors/toidentifier": ["toidentifier@1.0.0", "", {}, "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="], - "@babel/helper-compilation-targets/lru-cache/yallist": ["yallist@3.1.1", "", {}, "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="], "@hyperswarm/secret-stream/sodium-universal/sodium-native": ["sodium-native@5.0.1", "", { "dependencies": { "require-addon": "^1.1.0", "which-runtime": "^1.2.1" } }, "sha512-Q305aUXc0OzK7VVRvWkeEQJQIHs6slhFwWpyqLB5iJqhpyt2lYIVu96Y6PQ7TABIlWXVF3YiWDU3xS2Snkus+g=="], + "@iconify/utils/@antfu/install-pkg/package-manager-detector": ["package-manager-detector@1.3.0", "", {}, "sha512-ZsEbbZORsyHuO00lY1kV3/t72yp6Ysay6Pd17ZAlNGuGwmWDLCJxFpRs0IzfXfj1o4icJOkUEioexFHzyPurSQ=="], + + "@iconify/utils/@antfu/install-pkg/tinyexec": ["tinyexec@1.0.1", "", {}, "sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw=="], + "@iconify/utils/local-pkg/pkg-types": ["pkg-types@2.1.0", "", { "dependencies": { "confbox": "^0.2.1", "exsolve": "^1.0.1", "pathe": "^2.0.3" } }, "sha512-wmJwA+8ihJixSoHKxZJRBQG1oY8Yr9pGLzRmSsNms0iNWyHHAlZCa7mmKiFR10YPZuz/2k169JiS/inOjBCZ2A=="], "@intlify/bundle-utils/yaml-eslint-parser/yaml": ["yaml@2.7.1", "", { "bin": { "yaml": "bin.mjs" } }, "sha512-10ULxpnOCQXxJvBgxsn9ptjq6uviG/htZKk9veJGhlqn3w/DxQ631zFF+nlQXLwmImeS5amR2dl2U8sg6U9jsQ=="], @@ -3879,7 +3871,7 @@ "apollo-cache-inmemory/optimism/@wry/context": ["@wry/context@0.4.4", "", { "dependencies": { "@types/node": ">=6", "tslib": "^1.9.3" } }, "sha512-LrKVLove/zw6h2Md/KZyWxIkFM6AoyKp71OqpH9Hiip1csjPVoD3tPxlbQUNxEnHENks3UGgNpSBCAfq9KWuag=="], - "apollo-server-express/@types/body-parser/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "apollo-server-express/@types/body-parser/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], "body-parser/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], @@ -4005,7 +3997,7 @@ "terminal-link/supports-hyperlinks/supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], - "terser-webpack-plugin/jest-worker/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "terser-webpack-plugin/jest-worker/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], "terser-webpack-plugin/jest-worker/supports-color": ["supports-color@8.1.1", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="], @@ -4095,7 +4087,7 @@ "@typescript-eslint/utils/@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="], - "apollo-cache-inmemory/optimism/@wry/context/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "apollo-cache-inmemory/optimism/@wry/context/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], "cheerio-select/domutils/dom-serializer/entities": ["entities@2.2.0", "", {}, "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A=="], diff --git a/database/Dockerfile b/database/Dockerfile index 4d226f068..5c4e144e5 100644 --- a/database/Dockerfile +++ b/database/Dockerfile @@ -16,6 +16,7 @@ ENV BUILD_COMMIT="0000000" ENV NODE_ENV="production" ## Timezone ENV TZ=UTC +ENV DB_HOST=mariadb # Labels LABEL org.label-schema.build-date="${BUILD_DATE}" @@ -39,59 +40,65 @@ RUN mkdir -p ${DOCKER_WORKDIR} WORKDIR ${DOCKER_WORKDIR} ################################################################################## -# Base with turbo ################################################################ +# BUN ############################################################################ ################################################################################## -FROM base as turbo-base - -RUN apk update && apk add --no-cache libc6-compat \ - && yarn global add turbo@^2 \ - && rm -rf /tmp/* ~/.cache node_modules/.cache \ - && yarn cache clean +FROM base as bun-base +#RUN apt update && apt install -y --no-install-recommends ca-certificates curl bash unzip +RUN apk update && apk add --no-cache curl tar bash +RUN curl -fsSL https://bun.sh/install | bash +# Add bun's global bin directory to PATH +ENV PATH="/root/.bun/bin:${PATH}" ################################################################################## -# BUILDER (create partly monorepo only with data needed by database) ############# +# Installer ###################################################################### ################################################################################## -FROM turbo-base as builder +FROM bun-base as installer -COPY --chown=app:app . . -RUN turbo prune database --docker +COPY --chown=app:app ./database . +RUN bun install --production --no-cache --frozen-lockfile ################################################################################## -# INSTALLER (create production image) ############################################ +# Build ########################################################################## ################################################################################## -FROM turbo-base AS installer +FROM installer as build + +RUN bun install --no-cache --frozen-lockfile \ + yarn build && yarn typecheck + +################################################################################## +# PRODUCTION IMAGE ############################################################### +################################################################################## +FROM base as production + +COPY --chown=app:app --from=installer ${DOCKER_WORKDIR}/src ./src +COPY --chown=app:app --from=installer ${DOCKER_WORKDIR}/migrations ./migrations +COPY --chown=app:app --from=installer ${DOCKER_WORKDIR}/entity ./entity +COPY --chown=app:app --from=installer ${DOCKER_WORKDIR}/node_modules ./node_modules +COPY --chown=app:app --from=installer ${DOCKER_WORKDIR}/package.json ./package.json +COPY --chown=app:app --from=installer ${DOCKER_WORKDIR}/tsconfig.json ./tsconfig.json -# First install the dependencies (as they change less often) -COPY --chown=app:app --from=builder /app/out/json/ . -RUN yarn install --frozen-lockfile --production=false \ - && rm -rf /tmp/* ~/.cache node_modules/.cache \ - && yarn cache clean - -# Build the project -COPY --chown=app:app --from=builder /app/out/full/ . -#RUN turbo build - ################################################################################## # TEST UP ######################################################################## ################################################################################## -FROM installer as up +FROM production as up + # Run command -CMD /bin/sh -c "turbo up" +CMD /bin/sh -c "yarn up" ################################################################################## # TEST RESET ##################################################################### ################################################################################## -FROM installer as reset +FROM production as reset # Run command -CMD /bin/sh -c "turbo reset" +CMD /bin/sh -c "yarn reset" ################################################################################## # TEST DOWN ###################################################################### ################################################################################## -FROM installer as down +FROM production as down # Run command -CMD /bin/sh -c "turbo down" +CMD /bin/sh -c "yarn down" diff --git a/database/src/clear.ts b/database/src/clear.ts index 076d30922..dfd6e51c4 100644 --- a/database/src/clear.ts +++ b/database/src/clear.ts @@ -1,5 +1,6 @@ -import { Connection, createConnection } from 'mysql2/promise' +import { Connection } from 'mysql2/promise' import { CONFIG } from './config' +import { connectToDatabaseServer } from './prepare' export async function truncateTables(connection: Connection) { const [tables] = await connection.query('SHOW TABLES') @@ -26,13 +27,10 @@ export async function truncateTables(connection: Connection) { } export async function clearDatabase() { - const connection = await createConnection({ - host: CONFIG.DB_HOST, - port: CONFIG.DB_PORT, - user: CONFIG.DB_USER, - password: CONFIG.DB_PASSWORD, - database: CONFIG.DB_DATABASE, - }) + const connection = await connectToDatabaseServer() + if (!connection) { + throw new Error('Could not connect to database server') + } await truncateTables(connection) diff --git a/database/src/prepare.ts b/database/src/prepare.ts index 00e873fde..2b9d5682d 100644 --- a/database/src/prepare.ts +++ b/database/src/prepare.ts @@ -11,19 +11,22 @@ export enum DatabaseState { SAME_VERSION = 'SAME_VERSION', } -async function connectToDatabaseServer(): Promise { - try { - return await createConnection({ - host: CONFIG.DB_HOST, - port: CONFIG.DB_PORT, - user: CONFIG.DB_USER, - password: CONFIG.DB_PASSWORD, - }) - } catch (e) { - // biome-ignore lint/suspicious/noConsole: no logger present - console.log('could not connect to database server', e) - return null +export async function connectToDatabaseServer(maxRetries = 15, delayMs = 500): Promise { + for (let attempt = 1; attempt <= maxRetries; attempt++) { + try { + return await createConnection({ + host: CONFIG.DB_HOST, + port: CONFIG.DB_PORT, + user: CONFIG.DB_USER, + password: CONFIG.DB_PASSWORD, + }) + } catch (e) { + // biome-ignore lint/suspicious/noConsole: no logger present + console.log(`could not connect to database server, retry in ${delayMs} ms`, e) + } + await new Promise(resolve => setTimeout(resolve, delayMs)) } + return null } export const getDatabaseState = async (): Promise => { diff --git a/dht-node/Dockerfile b/dht-node/Dockerfile index b98acc61d..bd397fea0 100644 --- a/dht-node/Dockerfile +++ b/dht-node/Dockerfile @@ -3,7 +3,7 @@ ################################################################################## FROM node:18.20.7-bookworm-slim as base #FROM node:18.20.7-alpine3.21 as base -#FROM ubuntu:latest as base +# change to alpine after sodium-native ship with native alpine build # ENVs (available in production aswell, can be overwritten by commandline or env file) ## DOCKER_WORKDIR would be a classical ARG, but that is not multi layer persistent - shame diff --git a/dht-node/src/index.ts b/dht-node/src/index.ts index eadbec483..901d3ab20 100644 --- a/dht-node/src/index.ts +++ b/dht-node/src/index.ts @@ -2,23 +2,11 @@ import { startDHT } from '@/dht_node/index' import { CONFIG } from './config' import { logger } from './server/logger' -import { checkDBVersion } from './typeorm/DBVersion' -import { connection } from './typeorm/connection' +import { checkDBVersionUntil } from './typeorm/DBVersion' async function main() { // open mysql connection - const con = await connection() - if (!con || !con.isConnected) { - logger.fatal(`Couldn't open connection to database!`) - throw new Error(`Fatal: Couldn't open connection to database`) - } - - // check for correct database version - const dbVersion = await checkDBVersion(CONFIG.DB_VERSION) - if (!dbVersion) { - logger.fatal('Fatal: Database Version incorrect') - throw new Error('Fatal: Database Version incorrect') - } + await checkDBVersionUntil() logger.debug(`dhtseed set by CONFIG.FEDERATION_DHT_SEED=${CONFIG.FEDERATION_DHT_SEED}`) logger.info( `starting Federation on ${CONFIG.FEDERATION_DHT_TOPIC} ${ diff --git a/dht-node/src/typeorm/DBVersion.ts b/dht-node/src/typeorm/DBVersion.ts index 29092c6dd..0cd7c0ea5 100644 --- a/dht-node/src/typeorm/DBVersion.ts +++ b/dht-node/src/typeorm/DBVersion.ts @@ -2,6 +2,31 @@ import { Migration } from 'database' import { logger } from '@/server/logger' +import { CONFIG } from '@/config' +import { Connection as DbConnection } from 'typeorm' +import { connection as connectionFunc } from './connection' + +async function checkDBVersionUntil(maxRetries = 15, delayMs = 500): Promise { + for (let attempt = 1; attempt <= maxRetries; attempt++) { + try { + const connection = await connectionFunc() + if (connection?.isInitialized) { + const dbVersion = await checkDBVersion(CONFIG.DB_VERSION) + if (dbVersion) { + logger.info('Database connection and version check succeeded.') + return connection + } + } + } catch (err) { + logger.warn(`Attempt ${attempt}: Waiting for DB...`, err) + } + await new Promise(resolve => setTimeout(resolve, delayMs)) + } + + logger.fatal(`Fatal: Could not connect to database or version check failed after ${maxRetries} attempts.`) + throw new Error('Fatal: Database not ready.') +} + const getDBVersion = async (): Promise => { try { const [dbVersion] = await Migration.find({ order: { version: 'DESC' }, take: 1 }) @@ -25,4 +50,4 @@ const checkDBVersion = async (DB_VERSION: string): Promise => { return true } -export { checkDBVersion, getDBVersion } +export { checkDBVersion, getDBVersion, checkDBVersionUntil } diff --git a/dht-node/test/helpers.ts b/dht-node/test/helpers.ts index be72b75b6..0301f7fae 100644 --- a/dht-node/test/helpers.ts +++ b/dht-node/test/helpers.ts @@ -1,12 +1,6 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ -/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ import { entities } from 'database' -import { CONFIG } from '@/config' -import { connection } from '@/typeorm/connection' -import { checkDBVersion } from '@/typeorm/DBVersion' - -import { logger } from './testSetup' +import { checkDBVersionUntil } from '@/typeorm/DBVersion' export const headerPushMock = jest.fn((t) => { context.token = t.value @@ -29,20 +23,7 @@ export const cleanDB = async () => { } export const testEnvironment = async () => { - // open mysql connection - const con = await connection() - if (!con || !con.isConnected) { - logger.fatal(`Couldn't open connection to database!`) - throw new Error(`Fatal: Couldn't open connection to database`) - } - - // check for correct database version - const dbVersion = await checkDBVersion(CONFIG.DB_VERSION) - if (!dbVersion) { - logger.fatal('Fatal: Database Version incorrect') - throw new Error('Fatal: Database Version incorrect') - } - return { con } + return { con: await checkDBVersionUntil() } } export const resetEntity = async (entity: any) => { diff --git a/docker-compose.override.yml b/docker-compose.override.yml index 4cb2ec4b7..f1b02c422 100644 --- a/docker-compose.override.yml +++ b/docker-compose.override.yml @@ -8,6 +8,9 @@ services: image: gradido/frontend:local-development build: target: development + networks: + - external-net + - internal-net environment: - NODE_ENV=development # - DEBUG=true @@ -27,9 +30,11 @@ services: image: gradido/admin:local-development build: target: development + networks: + - external-net + - internal-net environment: - NODE_ENV=development - # - DEBUG=true volumes: # This makes sure the docker container has its own node modules. # Therefore it is possible to have a different node version on the host machine @@ -134,6 +139,8 @@ services: image: gradido/database:local-up build: target: up + profiles: + - up environment: - NODE_ENV=development volumes: @@ -177,7 +184,13 @@ services: ######################################################### ## NGINX ################################################ ######################################################### - # nginx: + nginx: + build: + context: ./nginx/ + depends_on: + - backend + - frontend + - admin ######################################################### ## PHPMYADMIN ########################################### diff --git a/docker-compose.yml b/docker-compose.yml index 6e3b80786..a14fcdf2e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -7,6 +7,7 @@ services: ######################################################## # FRONTEND ############################################# + # contain also admin in production ##################### ######################################################## frontend: # name the image so that it cannot be found in a DockerHub repository, otherwise it will not be built locally from the 'dockerfile' but pulled from there @@ -20,7 +21,6 @@ services: BUILD_COMMIT_SHORT: ${BUILD_COMMIT_SHORT} BUILD_VERSION: ${BUILD_VERSION} networks: - - external-net - internal-net ports: - ${FRONTEND_MODULE_PORT:-3000}:3000 @@ -35,6 +35,8 @@ services: # env_file: # - ./.env # - ./frontend/.env + volumes: + - ./logs/nginx/frontend:/var/log/nginx ######################################################## # ADMIN INTERFACE ###################################### @@ -46,29 +48,18 @@ services: context: ./ dockerfile: ./admin/Dockerfile target: production - args: - BUILD_COMMIT: ${BUILD_COMMIT} - BUILD_COMMIT_SHORT: ${BUILD_COMMIT_SHORT} - BUILD_VERSION: ${BUILD_VERSION} networks: - - external-net - internal-net ports: - - ${ADMIN_MODULE_PORT:-8080}:3000 + - ${ADMIN_MODULE_PORT:-8080}:8080 environment: + - NODE_ENV=production - BUILD_COMMIT=${BUILD_COMMIT} - BUILD_COMMIT_SHORT=${BUILD_COMMIT_SHORT} - BUILD_VERSION=${BUILD_VERSION} - # Envs used in Dockerfile - # - DOCKER_WORKDIR="/app" - # - PORT=8090 - # - BUILD_DATE="1970-01-01T00:00:00.00Z" - # - BUILD_VERSION="0.0.0.0" - # - BUILD_COMMIT="0000000" - - NODE_ENV=production - # env_file: - # - ./.env - # - ./admin/.env + # - DEBUG=true + volumes: + - ./logs/nginx/admin:/var/log/nginx ######################################################### ## MARIADB ############################################## @@ -231,8 +222,6 @@ services: context: . dockerfile: ./database/Dockerfile target: up - profiles: - - migration depends_on: - mariadb networks: @@ -290,7 +279,6 @@ services: depends_on: - backend - frontend - - admin ports: - 80:80 volumes: diff --git a/federation/Dockerfile b/federation/Dockerfile index fcdad2136..070fe3e2a 100644 --- a/federation/Dockerfile +++ b/federation/Dockerfile @@ -1,7 +1,9 @@ ################################################################################## # BASE ########################################################################### ################################################################################## -FROM node:18.20.7-alpine3.21 as base +FROM node:18.20.7-bookworm-slim as base +#FROM node:18.20.7-alpine3.21 as base +# change to alpine after sodium-native ship with native alpine build # ENVs (available in production aswell, can be overwritten by commandline or env file) ## DOCKER_WORKDIR would be a classical ARG, but that is not multi layer persistent - shame @@ -19,6 +21,7 @@ ENV PORT="5010" # ENV PORT="${env.FEDERATION_PORT}" ## Timezone ENV TZ=UTC +ENV DB_HOST=mariadb # Labels LABEL org.label-schema.build-date="${BUILD_DATE}" @@ -51,7 +54,8 @@ WORKDIR ${DOCKER_WORKDIR} ################################################################################## FROM base as bun-base -RUN apk update && apk add --no-cache curl tar bash +RUN apt update && apt install -y --no-install-recommends ca-certificates curl bash unzip +#RUN apk update && apk add --no-cache curl tar bash RUN curl -fsSL https://bun.sh/install | bash # Add bun's global bin directory to PATH ENV PATH="/root/.bun/bin:${PATH}" @@ -66,27 +70,40 @@ CMD /bin/sh -c "bun install --filter federation --no-cache --frozen-lockfile \ && bun install --global --no-cache --no-save turbo@^2 \ && turbo federation#dev --env-mode=loose" +################################################################################## +# Basic Image with bun setup and project and source code ######################### +################################################################################## +FROM bun-base as bun-base-src +COPY --chown=app:app . . + ################################################################################## # Build ########################################################################## ################################################################################## -FROM bun-base as build +FROM bun-base-src as build -COPY --chown=app:app . . RUN bun install --filter federation --no-cache --frozen-lockfile \ - && bun install --global --no-cache --no-save turbo@^2 \ - && turbo federation#build federation#typecheck --env-mode=loose + && bun install --global --no-cache --no-save turbo@^2 +RUN turbo federation#build federation#typecheck --env-mode=loose ################################################################################## # TEST ########################################################################### ################################################################################## FROM build as test -ENV DB_HOST=mariadb - # Run command CMD /bin/sh -c "turbo federation#test --env-mode=loose" +################################################################################## +# install only node modules needed for running bundle ############################ +################################################################################## +FROM bun-base-src as production-node-modules + +# add node_modules from production_node_modules +RUN bun install --filter federation --production --frozen-lockfile --no-cache \ + && rm -rf /tmp/* ~/.cache node_modules/.cache \ + && ./scripts/clean-prebuilds.sh + ################################################################################## # PRODUCTION (Does contain only "binary"- and static-files to reduce image size) # ################################################################################## @@ -95,11 +112,8 @@ FROM base as production # Copy "binary"-files from build image COPY --chown=app:app --from=build ${DOCKER_WORKDIR}/federation/build/index.js ./index.js -# We also install the native node_modules which cannot be bundled -# TODO: find a elegant way to use the right versions from yarn.lock -RUN yarn add sodium-native@4.0.0 \ - && rm -rf /tmp/* ~/.cache node_modules/.cache \ - && yarn cache clean +# add node_modules from production_node_modules +COPY --chown=app:app --from=production-node-modules ${DOCKER_WORKDIR}/node_modules ./node_modules # Copy log4js-config.json to provide log configuration COPY --chown=app:app --from=build ${DOCKER_WORKDIR}/federation/log4js-config.json ./log4js-config.json diff --git a/federation/package.json b/federation/package.json index 9d2acb858..7ce436112 100644 --- a/federation/package.json +++ b/federation/package.json @@ -20,33 +20,11 @@ "lint:fix": "biome check --error-on-warnings . --write" }, "dependencies": { - "@anatine/esbuild-decorators": "^0.2.19", - "apollo-server-express": "^2.25.2", - "await-semaphore": "0.1.3", - "class-validator": "^0.13.2", - "config-schema": "*", - "cors": "2.8.5", "cross-env": "^7.0.3", - "database": "*", - "decimal.js-light": "^2.5.1", - "dotenv": "10.0.0", - "express": "^4.17.21", - "express-slow-down": "^2.0.1", - "graphql": "15.10.1", - "graphql-request": "5.0.0", - "graphql-scalars": "^1.24.2", - "helmet": "^7.1.0", - "joi": "^17.13.3", - "lodash.clonedeep": "^4.5.0", - "log4js": "^6.7.1", - "reflect-metadata": "^0.1.13", - "sodium-native": "^3.3.0", - "tsconfig-paths": "^4.1.1", - "type-graphql": "^1.1.1", - "typeorm": "^0.3.16", - "uuid": "8.3.2" + "sodium-native": "^3.4.1" }, - "devDependencies": { + "devDependencies": { + "@anatine/esbuild-decorators": "^0.2.19", "@biomejs/biome": "1.9.4", "@swc/cli": "^0.7.3", "@swc/core": "^1.11.24", @@ -57,18 +35,38 @@ "@types/node": "^17.0.21", "@types/sodium-native": "^2.3.5", "@types/uuid": "^8.3.4", + "apollo-server-express": "^2.25.2", "apollo-server-testing": "2.25.2", + "await-semaphore": "0.1.3", + "class-validator": "^0.13.2", + "config-schema": "*", + "cors": "2.8.5", + "database": "*", + "decimal.js-light": "^2.5.1", + "dotenv": "10.0.0", + "express": "^4.17.21", + "express-slow-down": "^2.0.1", + "graphql": "15.10.1", + "graphql-request": "5.0.0", + "graphql-scalars": "^1.24.2", "graphql-tag": "^2.12.6", + "helmet": "^7.1.0", "jest": "27.2.4", + "joi": "^17.13.3", + "lodash.clonedeep": "^4.5.0", + "log4js": "^6.7.1", "nodemon": "^2.0.7", "prettier": "^3.5.3", + "reflect-metadata": "^0.1.13", "ts-jest": "27.0.5", - "typescript": "^4.9.5" + "tsconfig-paths": "^4.1.1", + "type-graphql": "^1.1.1", + "typeorm": "^0.3.16", + "typescript": "^4.9.5", + "uuid": "8.3.2" }, "nodemonConfig": { - "ignore": [ - "**/*.test.ts" - ] + "ignore": ["**/*.test.ts"] }, "engines": { "node": ">=18" diff --git a/federation/src/server/createServer.ts b/federation/src/server/createServer.ts index 96ef61350..5971a26be 100644 --- a/federation/src/server/createServer.ts +++ b/federation/src/server/createServer.ts @@ -3,17 +3,13 @@ import 'reflect-metadata' import { ApolloServer } from 'apollo-server-express' import express, { Express, RequestHandler } from 'express' -import { checkDBVersion } from '@/typeorm/DBVersion' -// database -import { connection } from '@/typeorm/connection' +import { checkDBVersionUntil } from '@/typeorm/DBVersion' // server import cors from './cors' // import serverContext from './context' import { plugins } from './plugins' -// config -import { CONFIG } from '@/config' // graphql import { schema } from '@/graphql/schema' @@ -44,18 +40,7 @@ export const createServer = async ( logger.debug('createServer...') // open mysql connection - const con = await connection() - if (!con || !con.isConnected) { - logger.fatal(`Couldn't open connection to database!`) - throw new Error(`Fatal: Couldn't open connection to database`) - } - - // check for correct database version - const dbVersion = await checkDBVersion(CONFIG.DB_VERSION) - if (!dbVersion) { - logger.fatal('Fatal: Database Version incorrect') - throw new Error('Fatal: Database Version incorrect') - } + const con = await checkDBVersionUntil() // Express Server const app = express() diff --git a/federation/src/typeorm/DBVersion.ts b/federation/src/typeorm/DBVersion.ts index 392c74a33..a8d49b7cc 100644 --- a/federation/src/typeorm/DBVersion.ts +++ b/federation/src/typeorm/DBVersion.ts @@ -1,5 +1,29 @@ +import { CONFIG } from '@/config' import { federationLogger as logger } from '@/server/logger' import { Migration } from 'database' +import { Connection as DbConnection } from 'typeorm' +import { connection as connectionFunc } from './connection' + +async function checkDBVersionUntil(maxRetries = 15, delayMs = 500): Promise { + for (let attempt = 1; attempt <= maxRetries; attempt++) { + try { + const connection = await connectionFunc() + if (connection?.isInitialized) { + const dbVersion = await checkDBVersion(CONFIG.DB_VERSION) + if (dbVersion) { + logger.info('Database connection and version check succeeded.') + return connection + } + } + } catch (err) { + logger.warn(`Attempt ${attempt}: Waiting for DB...`, err) + } + await new Promise(resolve => setTimeout(resolve, delayMs)) + } + + logger.fatal(`Fatal: Could not connect to database or version check failed after ${maxRetries} attempts.`) + throw new Error('Fatal: Database not ready.') +} const getDBVersion = async (): Promise => { try { @@ -24,4 +48,4 @@ const checkDBVersion = async (DB_VERSION: string): Promise => { return true } -export { checkDBVersion, getDBVersion } +export { checkDBVersion, getDBVersion, checkDBVersionUntil } diff --git a/frontend/Dockerfile b/frontend/Dockerfile index 3bf6af01c..bdd41fee3 100644 --- a/frontend/Dockerfile +++ b/frontend/Dockerfile @@ -9,12 +9,13 @@ ENV DOCKER_WORKDIR="/app" ## We Cannot do `$(date -u +'%Y-%m-%dT%H:%M:%SZ')` here so we use unix timestamp=0 ENV BUILD_DATE="1970-01-01T00:00:00.00Z" ## We cannot do $(npm run version).${BUILD_NUMBER} here so we default to 0.0.0.0 +# TODO: get the actually git commit hash into docker ARG BUILD_VERSION -ENV BUILD_VERSION=${BUILD_VERSION} +ENV BUILD_VERSION=${BUILD_VERSION:-'broken'} ARG BUILD_COMMIT -ENV BUILD_COMMIT=${BUILD_COMMIT} +ENV BUILD_COMMIT=${BUILD_COMMIT:-'deadbeefdeadbeefdeadbeefdeadbeefdeadbeef'} ARG BUILD_COMMIT_SHORT -ENV BUILD_COMMIT_SHORT=${BUILD_COMMIT_SHORT} +ENV BUILD_COMMIT_SHORT=${BUILD_COMMIT_SHORT:-'deadbeef'} ## SET NODE_ENV ARG NODE_ENV=production ENV NODE_ENV=${NODE_ENV} @@ -83,10 +84,6 @@ COPY --chown=app:app . . RUN bun install --filter frontend --no-cache --frozen-lockfile \ && bun install --global turbo@^2 -# TODO: get the actually git commit hash into docker -ENV BUILD_COMMIT='deadbeefdeadbeefdeadbeefdeadbeefdeadbeef' -ENV BUILD_COMMIT_SHORT='deadbeef' -ENV BUILD_VERSION='broken' RUN turbo frontend#build --env-mode=loose ################################################################################## @@ -97,14 +94,14 @@ FROM build as test # Run command CMD /bin/sh -c "turbo frontend#test --env-mode=loose" - ################################################################################## # PRODUCTION (Does contain only "binary"- and static-files to reduce image size) # ################################################################################## -FROM lipanski/docker-static-website:latest as production +FROM nginx:1.28.0-alpine3.21-slim as production -# tiny static webserver -# https://lipanski.com/posts/smallest-docker-image-static-website +COPY ./nginx/frontend.conf /etc/nginx/conf.d/default.conf + +WORKDIR /app # copy builded frontend files COPY --from=build /app/frontend/build/ . diff --git a/nginx/Dockerfile b/nginx/Dockerfile index b78a70f12..7bb976721 100644 --- a/nginx/Dockerfile +++ b/nginx/Dockerfile @@ -1,8 +1,9 @@ -FROM nginx:1.21.0-alpine +FROM nginx:1.28.0-alpine3.21-slim COPY ./gradido.conf /etc/nginx/conf.d/default.conf + diff --git a/nginx/admin.conf b/nginx/admin.conf new file mode 100644 index 000000000..336687b44 --- /dev/null +++ b/nginx/admin.conf @@ -0,0 +1,14 @@ +server { + server_name _; + + listen 8080; + listen [::]:8080; + + # Admin Frontend + location /admin { + rewrite ^/admin/(.*)$ /$1 break; + root /app/admin/; + index index.html; + try_files $uri $uri/ /index.html = 404; + } +} \ No newline at end of file diff --git a/nginx/frontend.conf b/nginx/frontend.conf new file mode 100644 index 000000000..07dc4977a --- /dev/null +++ b/nginx/frontend.conf @@ -0,0 +1,12 @@ +server { + server_name _; + + listen 3000; + listen [::]:3000; + + location / { + root /app/; + index index.html; + try_files $uri $uri/ /index.html = 404; + } +} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 22ac25cd1..c31f41105 100644 --- a/yarn.lock +++ b/yarn.lock @@ -830,7 +830,7 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3" integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== -"@hyperswarm/dht@^6.5.1": +"@hyperswarm/dht@6.5.1": version "6.5.1" resolved "https://registry.yarnpkg.com/@hyperswarm/dht/-/dht-6.5.1.tgz#07e144590f532c2f872e3617117d17f266b2f7a4" integrity sha512-TTTOzuwqbmXNwl+b2FXeHCoR2QS1sqxQvqXwv2i54sdEkKmF8f8t4U8PsRGk5PUO3qA6GxlMThvXixg9Fgs4Yw== @@ -4936,7 +4936,7 @@ detect-newline@^3.0.0, detect-newline@^3.1.0: resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== -dht-rpc@^6.6.3: +dht-rpc@6.18.1, dht-rpc@^6.6.3: version "6.18.1" resolved "https://registry.yarnpkg.com/dht-rpc/-/dht-rpc-6.18.1.tgz#6e4109989d47fea487f0be8efa2980557019fde7" integrity sha512-uTcHj8dERVjmoUsSxqAulQ+qo11Qy4pMK419tyF2cFpyf56Y09u1v9g8yWlay0KjUY5bvdybBQ/V8YWN/wyK5Q== @@ -10320,7 +10320,7 @@ slick@^1.12.2: resolved "https://registry.yarnpkg.com/slick/-/slick-1.12.2.tgz#bd048ddb74de7d1ca6915faa4a57570b3550c2d7" integrity sha512-4qdtOGcBjral6YIBCWJ0ljFSKNLz9KkhbWtuGvUyRowl1kxfuE1x/Z/aJcaiilpb3do9bl5K7/1h9XC5wWpY/A== -sodium-native@^3.3.0, sodium-native@^3.4.1: +sodium-native@^3.4.1: version "3.4.1" resolved "https://registry.yarnpkg.com/sodium-native/-/sodium-native-3.4.1.tgz#44616c07ccecea15195f553af88b3e574b659741" integrity sha512-PaNN/roiFWzVVTL6OqjzYct38NSXewdl2wz8SRB51Br/MLIJPrbM3XexhVWkq7D3UWMysfrhKVf1v1phZq6MeQ== @@ -10350,7 +10350,7 @@ sodium-secretstream@^1.1.0: b4a "^1.1.1" sodium-universal "^5.0.0" -sodium-universal@^4.0.0: +sodium-universal@4.0.1, sodium-universal@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/sodium-universal/-/sodium-universal-4.0.1.tgz#75146f3b6fb6ab0dcc9278ad468ef5f23a0351e4" integrity sha512-sNp13PrxYLaUFHTGoDKkSDFvoEu51bfzE12RwGlqU1fcrkpAOK0NvizaJzOWV0Omtk9me2+Pnbjcf/l0efxuGQ== From 9c2ef4bf2e615fb6de4df808dab66346a860153c Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Tue, 6 May 2025 17:33:03 +0200 Subject: [PATCH 048/123] fix lint --- backend/src/password/EncryptionWorker.d.ts | 5 ++-- backend/src/password/EncryptorUtils.ts | 7 ++--- backend/src/password/worker.js | 1 - backend/src/typeorm/DBVersion.ts | 6 ++-- database/src/prepare.ts | 7 +++-- deployment/bare_metal/start.sh | 33 ++++++++++++---------- dht-node/src/typeorm/DBVersion.ts | 6 ++-- federation/src/server/createServer.ts | 1 - federation/src/typeorm/DBVersion.ts | 6 ++-- 9 files changed, 40 insertions(+), 32 deletions(-) diff --git a/backend/src/password/EncryptionWorker.d.ts b/backend/src/password/EncryptionWorker.d.ts index f97c4cc12..189f10dff 100644 --- a/backend/src/password/EncryptionWorker.d.ts +++ b/backend/src/password/EncryptionWorker.d.ts @@ -1,7 +1,6 @@ - export function SecretKeyCryptographyCreateKeyFunc( salt: string, password: string, configLoginAppSecret: Buffer, - configLoginServerKey: Buffer -): bigint; \ No newline at end of file + configLoginServerKey: Buffer, +): bigint diff --git a/backend/src/password/EncryptorUtils.ts b/backend/src/password/EncryptorUtils.ts index 8e8e22495..7da8bc9c1 100644 --- a/backend/src/password/EncryptorUtils.ts +++ b/backend/src/password/EncryptorUtils.ts @@ -20,10 +20,9 @@ const configLoginServerKey = Buffer.from(CONFIG.LOGIN_SERVER_KEY, 'hex') let encryptionWorkerPool: Pool | undefined if (CONFIG.USE_CRYPTO_WORKER === true) { - encryptionWorkerPool = pool( - path.join(__dirname, 'worker.js'), - { maxQueueSize: 30 * cpus().length }, - ) + encryptionWorkerPool = pool(path.join(__dirname, 'worker.js'), { + maxQueueSize: 30 * cpus().length, + }) } // We will reuse this for changePassword diff --git a/backend/src/password/worker.js b/backend/src/password/worker.js index 3ba062313..2c1b911f8 100644 --- a/backend/src/password/worker.js +++ b/backend/src/password/worker.js @@ -4,4 +4,3 @@ const { SecretKeyCryptographyCreateKeyFunc } = require('./EncryptionWorker') worker({ SecretKeyCryptographyCreateKeyFunc, }) - diff --git a/backend/src/typeorm/DBVersion.ts b/backend/src/typeorm/DBVersion.ts index 6eaa7fb07..6ce3ac293 100644 --- a/backend/src/typeorm/DBVersion.ts +++ b/backend/src/typeorm/DBVersion.ts @@ -20,10 +20,12 @@ async function checkDBVersionUntil(maxRetries = 15, delayMs = 500): Promise setTimeout(resolve, delayMs)) + await new Promise((resolve) => setTimeout(resolve, delayMs)) } - logger.fatal(`Fatal: Could not connect to database or version check failed after ${maxRetries} attempts.`) + logger.fatal( + `Fatal: Could not connect to database or version check failed after ${maxRetries} attempts.`, + ) throw new Error('Fatal: Database not ready.') } diff --git a/database/src/prepare.ts b/database/src/prepare.ts index 2b9d5682d..9e4bfe1e1 100644 --- a/database/src/prepare.ts +++ b/database/src/prepare.ts @@ -11,7 +11,10 @@ export enum DatabaseState { SAME_VERSION = 'SAME_VERSION', } -export async function connectToDatabaseServer(maxRetries = 15, delayMs = 500): Promise { +export async function connectToDatabaseServer( + maxRetries = 15, + delayMs = 500, +): Promise { for (let attempt = 1; attempt <= maxRetries; attempt++) { try { return await createConnection({ @@ -24,7 +27,7 @@ export async function connectToDatabaseServer(maxRetries = 15, delayMs = 500): P // biome-ignore lint/suspicious/noConsole: no logger present console.log(`could not connect to database server, retry in ${delayMs} ms`, e) } - await new Promise(resolve => setTimeout(resolve, delayMs)) + await new Promise((resolve) => setTimeout(resolve, delayMs)) } return null } diff --git a/deployment/bare_metal/start.sh b/deployment/bare_metal/start.sh index 083137762..ce7d92ff7 100755 --- a/deployment/bare_metal/start.sh +++ b/deployment/bare_metal/start.sh @@ -20,12 +20,7 @@ then bun install --global turbo fi -# helper functions -log_step() { - local message="$1" - echo -e "\e[34m$message\e[0m" > /dev/tty # blue in console - echo "

$message

" >> "$UPDATE_HTML" # blue in html -} + # check for parameter FAST_MODE=false @@ -54,15 +49,6 @@ fi BRANCH_NAME="$1" -# Debug-Ausgabe -if [ -z "$1" ]; then - echo "Usage: Please provide a branch name as the first argument." - exit 1 -fi -log_step "Use branch: $BRANCH_NAME" -if [ "$FAST_MODE" = true ] ; then - log_step "Use fast mode, keep packet manager, turbo and build cache" -fi # Find current directory & configure paths set -o allexport SCRIPT_PATH=$(realpath $0) @@ -73,6 +59,23 @@ PROJECT_ROOT=$SCRIPT_DIR/../.. NGINX_CONFIG_DIR=$SCRIPT_DIR/nginx/sites-available set +o allexport +# helper functions +log_step() { + local message="$1" + echo -e "\e[34m$message\e[0m" > /dev/tty # blue in console + echo "

$message

" >> "$UPDATE_HTML" # blue in html +} + +# Debug-Ausgabe +if [ -z "$1" ]; then + echo "Usage: Please provide a branch name as the first argument." + exit 1 +fi +log_step "Use branch: $BRANCH_NAME" +if [ "$FAST_MODE" = true ] ; then + log_step "Use fast mode, keep packet manager, turbo and build cache" +fi + # enable nvm export NVM_DIR="$HOME/.nvm" && [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" nvm use default diff --git a/dht-node/src/typeorm/DBVersion.ts b/dht-node/src/typeorm/DBVersion.ts index 0cd7c0ea5..ee97c3c0a 100644 --- a/dht-node/src/typeorm/DBVersion.ts +++ b/dht-node/src/typeorm/DBVersion.ts @@ -20,10 +20,12 @@ async function checkDBVersionUntil(maxRetries = 15, delayMs = 500): Promise setTimeout(resolve, delayMs)) + await new Promise((resolve) => setTimeout(resolve, delayMs)) } - logger.fatal(`Fatal: Could not connect to database or version check failed after ${maxRetries} attempts.`) + logger.fatal( + `Fatal: Could not connect to database or version check failed after ${maxRetries} attempts.`, + ) throw new Error('Fatal: Database not ready.') } diff --git a/federation/src/server/createServer.ts b/federation/src/server/createServer.ts index 5971a26be..d3df01e18 100644 --- a/federation/src/server/createServer.ts +++ b/federation/src/server/createServer.ts @@ -10,7 +10,6 @@ import cors from './cors' // import serverContext from './context' import { plugins } from './plugins' - // graphql import { schema } from '@/graphql/schema' diff --git a/federation/src/typeorm/DBVersion.ts b/federation/src/typeorm/DBVersion.ts index a8d49b7cc..ed907d2d8 100644 --- a/federation/src/typeorm/DBVersion.ts +++ b/federation/src/typeorm/DBVersion.ts @@ -18,10 +18,12 @@ async function checkDBVersionUntil(maxRetries = 15, delayMs = 500): Promise setTimeout(resolve, delayMs)) + await new Promise((resolve) => setTimeout(resolve, delayMs)) } - logger.fatal(`Fatal: Could not connect to database or version check failed after ${maxRetries} attempts.`) + logger.fatal( + `Fatal: Could not connect to database or version check failed after ${maxRetries} attempts.`, + ) throw new Error('Fatal: Database not ready.') } From 818e90c71ba0e43275212c152065187c48b0a345 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Tue, 6 May 2025 17:53:11 +0200 Subject: [PATCH 049/123] remove .env.git, rest from experiment, update publis worker --- .env.git | 3 - .github/workflows/publish.yml | 150 ++++++++++++++++++++++------------ 2 files changed, 99 insertions(+), 54 deletions(-) delete mode 100644 .env.git diff --git a/.env.git b/.env.git deleted file mode 100644 index 9146fae2d..000000000 --- a/.env.git +++ /dev/null @@ -1,3 +0,0 @@ -BUILD_COMMIT=e7b1c19bc8a0d0ed73aeaa98283be3e47af47831 -BUILD_COMMIT_SHORT=e7b1c19bc -BUILD_VERSION=b2.3.1.1425-861-ge7b1c19bc diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index ec437ad37..e225fa99b 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -18,7 +18,7 @@ jobs: # CHECKOUT CODE ########################################################## ########################################################################## - name: Checkout code - uses: actions/checkout@v2 + uses: actions/checkout@v4 ########################################################################## # SET ENVS ############################################################### ########################################################################## @@ -55,7 +55,7 @@ jobs: # CHECKOUT CODE ########################################################## ########################################################################## - name: Checkout code - uses: actions/checkout@v2 + uses: actions/checkout@v4 ########################################################################## # SET ENVS ############################################################### ########################################################################## @@ -80,6 +80,80 @@ jobs: name: docker-backend-production path: /tmp/backend.tar + ############################################################################## + # JOB: DOCKER BUILD PRODUCTION DHT-NODE ###################################### + ############################################################################## + build_production_dht-node: + name: Docker Build Production - DHT-Node + runs-on: ubuntu-latest + #needs: [nothing] + steps: + ########################################################################## + # CHECKOUT CODE ########################################################## + ########################################################################## + - name: Checkout code + uses: actions/checkout@v4 + ########################################################################## + # SET ENVS ############################################################### + ########################################################################## + - name: ENV - VERSION + run: echo "VERSION=$(node -p -e "require('./package.json').version")" >> $GITHUB_ENV + - name: ENV - BUILD_DATE + run: echo "BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" >> $GITHUB_ENV + - name: ENV - BUILD_VERSION + run: echo "BUILD_VERSION=${VERSION}.${GITHUB_RUN_NUMBER}" >> $GITHUB_ENV + - name: ENV - BUILD_COMMIT + run: echo "BUILD_COMMIT=${GITHUB_SHA}" >> $GITHUB_ENV + ########################################################################## + # DHT-NODE ################################################################ + ########################################################################## + - name: DHT-Node | Build `production` image + run: | + docker build -f ./dht-node/Dockerfile --target production -t "gradido/dht-node:latest" -t "gradido/dht-node:production" -t "gradido/dht-node:${VERSION}" -t "gradido/dht-node:${BUILD_VERSION}" . + docker save "gradido/dht-node" > /tmp/dht-node.tar + - name: Upload Artifact + uses: actions/upload-artifact@v4 + with: + name: docker-dht-node-production + path: /tmp/dht-node.tar + + ############################################################################## + # JOB: DOCKER BUILD PRODUCTION FEDERATION ###################################### + ############################################################################## + build_production_federation: + name: Docker Build Production - Federation + runs-on: ubuntu-latest + #needs: [nothing] + steps: + ########################################################################## + # CHECKOUT CODE ########################################################## + ########################################################################## + - name: Checkout code + uses: actions/checkout@v4 + ########################################################################## + # SET ENVS ############################################################### + ########################################################################## + - name: ENV - VERSION + run: echo "VERSION=$(node -p -e "require('./package.json').version")" >> $GITHUB_ENV + - name: ENV - BUILD_DATE + run: echo "BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" >> $GITHUB_ENV + - name: ENV - BUILD_VERSION + run: echo "BUILD_VERSION=${VERSION}.${GITHUB_RUN_NUMBER}" >> $GITHUB_ENV + - name: ENV - BUILD_COMMIT + run: echo "BUILD_COMMIT=${GITHUB_SHA}" >> $GITHUB_ENV + ########################################################################## + # FEDERATION ############################################################## + ########################################################################## + - name: Federation | Build `production` image + run: | + docker build -f ./federation/Dockerfile --target production -t "gradido/federation:latest" -t "gradido/federation:production" -t "gradido/federation:${VERSION}" -t "gradido/federation:${BUILD_VERSION}" . + docker save "gradido/federation" > /tmp/federation.tar + - name: Upload Artifact + uses: actions/upload-artifact@v4 + with: + name: docker-federation-production + path: /tmp/federation.tar + ############################################################################## # JOB: DOCKER BUILD PRODUCTION DATABASE UP ################################### ############################################################################## @@ -92,7 +166,7 @@ jobs: # CHECKOUT CODE ########################################################## ########################################################################## - name: Checkout code - uses: actions/checkout@v2 + uses: actions/checkout@v4 ########################################################################## # DATABASE UP ############################################################ ########################################################################## @@ -106,43 +180,6 @@ jobs: name: docker-database-production_up path: /tmp/database_up.tar - ############################################################################## - # JOB: DOCKER BUILD PRODUCTION MARIADB ####################################### - ############################################################################## - build_production_mariadb: - name: Docker Build Production - MariaDB - runs-on: ubuntu-latest - #needs: [nothing] - steps: - ########################################################################## - # CHECKOUT CODE ########################################################## - ########################################################################## - - name: Checkout code - uses: actions/checkout@v2 - ########################################################################## - # SET ENVS ############################################################### - ########################################################################## - - name: ENV - VERSION - run: echo "VERSION=$(node -p -e "require('./package.json').version")" >> $GITHUB_ENV - - name: ENV - BUILD_DATE - run: echo "BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" >> $GITHUB_ENV - - name: ENV - BUILD_VERSION - run: echo "BUILD_VERSION=${VERSION}.${GITHUB_RUN_NUMBER}" >> $GITHUB_ENV - - name: ENV - BUILD_COMMIT - run: echo "BUILD_COMMIT=${GITHUB_SHA}" >> $GITHUB_ENV - ########################################################################## - # MARIADB ################################################################ - ########################################################################## - - name: MariaDB | Build `production` image - run: | - docker build -t "gradido/mariadb:latest" -t "gradido/mariadb:production" -t "gradido/mariadb:${VERSION}" -t "gradido/mariadb:${BUILD_VERSION}" -f ./mariadb/Dockerfile ./ - docker save "gradido/mariadb" > /tmp/mariadb.tar - - name: Upload Artifact - uses: actions/upload-artifact@v4 - with: - name: docker-mariadb-production - path: /tmp/mariadb.tar - ############################################################################## # JOB: DOCKER BUILD PRODUCTION NGINX ######################################### ############################################################################## @@ -155,7 +192,7 @@ jobs: # CHECKOUT CODE ########################################################## ########################################################################## - name: Checkout code - uses: actions/checkout@v2 + uses: actions/checkout@v4 ########################################################################## # SET ENVS ############################################################### ########################################################################## @@ -186,7 +223,7 @@ jobs: upload_to_dockerhub: name: Upload to Dockerhub runs-on: ubuntu-latest - needs: [build_production_frontend, build_production_backend, build_production_database_up, build_production_mariadb, build_production_nginx] + needs: [build_production_frontend, build_production_backend, build_production_database_up, build_production_nginx] env: DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }} DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }} @@ -195,7 +232,7 @@ jobs: # CHECKOUT CODE ########################################################## ########################################################################## - name: Checkout code - uses: actions/checkout@v2 + uses: actions/checkout@v4 ########################################################################## # DOWNLOAD DOCKER IMAGES ################################################# ########################################################################## @@ -213,6 +250,20 @@ jobs: path: /tmp - name: Load Docker Image run: docker load < /tmp/backend.tar + - name: Download Docker Image (DHT-Node) + uses: actions/download-artifact@v4 + with: + name: docker-dht-node-production + path: /tmp + - name: Load Docker Image + run: docker load < /tmp/dht-node.tar + - name: Download Docker Image (Federation) + uses: actions/download-artifact@v4 + with: + name: docker-federation-production + path: /tmp + - name: Load Docker Image + run: docker load < /tmp/federation.tar - name: Download Docker Image (Database) uses: actions/download-artifact@v4 with: @@ -220,11 +271,6 @@ jobs: path: /tmp - name: Load Docker Image run: docker load < /tmp/database_up.tar - - name: Download Docker Image (MariaDB) - uses: actions/download-artifact@v4 - with: - name: docker-mariadb-production - path: /tmp - name: Load Docker Image run: docker load < /tmp/mariadb.tar - name: Download Docker Image (Nginx) @@ -243,10 +289,12 @@ jobs: run: docker push --all-tags gradido/frontend - name: Push backend run: docker push --all-tags gradido/backend + - name: Push dht-node + run: docker push --all-tags gradido/dht-node + - name: Push federation + run: docker push --all-tags gradido/federation - name: Push database run: docker push --all-tags gradido/database - - name: Push MariaDB - run: docker push --all-tags gradido/mariadb - name: Push Nginx run: docker push --all-tags gradido/nginx @@ -262,7 +310,7 @@ jobs: # CHECKOUT CODE ########################################################## ########################################################################## - name: Checkout code - uses: actions/checkout@v2 + uses: actions/checkout@v4 with: fetch-depth: 0 # Fetch full History for changelog ########################################################################## From 09eac92ccbd4f3baa94c0b687ce2d5d535299d21 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Tue, 6 May 2025 22:28:55 +0200 Subject: [PATCH 050/123] fix config fix in admin and frontend --- admin/src/config/index.js | 2 +- admin/vite.config.mjs | 8 ++++++-- frontend/src/config/index.js | 2 +- frontend/vite.config.mjs | 5 ++++- 4 files changed, 12 insertions(+), 5 deletions(-) diff --git a/admin/src/config/index.js b/admin/src/config/index.js index d64ba6f5f..37d98c606 100644 --- a/admin/src/config/index.js +++ b/admin/src/config/index.js @@ -2,7 +2,7 @@ // The whole contents is exposed to the client // Load Package Details for some default values -import pkg from '../../package' +const pkg = require('../../package') const version = { ADMIN_MODULE_PROTOCOL: process.env.ADMIN_MODULE_PROTOCOL ?? 'http', diff --git a/admin/vite.config.mjs b/admin/vite.config.mjs index 992626334..3474b2032 100644 --- a/admin/vite.config.mjs +++ b/admin/vite.config.mjs @@ -6,18 +6,22 @@ import Components from 'unplugin-vue-components/vite' import IconsResolve from 'unplugin-icons/resolver' import { BootstrapVueNextResolver } from 'bootstrap-vue-next' import EnvironmentPlugin from 'vite-plugin-environment' + import schema from './src/config/schema' -import CONFIG from './src/config' + import { execSync } from 'node:child_process' import { existsSync, constants } from 'node:fs' import { validate, browserUrls } from 'config-schema' import path from 'node:path' +import { createRequire } from 'node:module' import dotenv from 'dotenv' - dotenv.config() // load env vars from .env +const require = createRequire(import.meta.url) +const CONFIG = require('./src/config') + export default defineConfig(async ({ command }) => { const { vitePluginGraphqlLoader } = await import('vite-plugin-graphql-loader') if (command === 'serve') { diff --git a/frontend/src/config/index.js b/frontend/src/config/index.js index 727760353..0ee64509e 100644 --- a/frontend/src/config/index.js +++ b/frontend/src/config/index.js @@ -2,7 +2,7 @@ // The whole contents is exposed to the client // Load Package Details for some default values -import pkg from '../../package' +const pkg = require('../../package') const constants = { DECAY_START_TIME: new Date('2021-05-13 17:46:31-0000'), // GMT+0 diff --git a/frontend/vite.config.mjs b/frontend/vite.config.mjs index feb6591ea..0101e12bf 100644 --- a/frontend/vite.config.mjs +++ b/frontend/vite.config.mjs @@ -10,13 +10,16 @@ import { createHtmlPlugin } from 'vite-plugin-html' import schema from './src/config/schema' import { execSync } from 'node:child_process' import { existsSync, constants } from 'node:fs' -import CONFIG from './src/config' + import { validate, browserUrls } from 'config-schema' import { BootstrapVueNextResolver } from 'bootstrap-vue-next' import { createRequire } from 'node:module' +import dotenv from 'dotenv' +dotenv.config() // load env vars from .env const require = createRequire(import.meta.url) +const CONFIG = require('./src/config') // https://vitejs.dev/config/ export default defineConfig(async ({ command }) => { From 32bffe36fed3daeafe054ec691bf5b3f19472e85 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Thu, 1 May 2025 09:44:39 +0200 Subject: [PATCH 051/123] add esbuild conifguration for dht-node and database --- .github/workflows/test_database.yml | 2 +- .github/workflows/test_dht_node.yml | 4 ++-- database/esbuild.config.ts | 28 ++++++++++++++++++++++++++++ database/package.json | 14 +++++++------- dht-node/Dockerfile | 2 +- dht-node/esbuild.config.ts | 13 +++++++++++++ dht-node/package.json | 13 +++++++------ 7 files changed, 59 insertions(+), 17 deletions(-) create mode 100644 database/esbuild.config.ts create mode 100644 dht-node/esbuild.config.ts diff --git a/.github/workflows/test_database.yml b/.github/workflows/test_database.yml index a412390c4..641f7f459 100644 --- a/.github/workflows/test_database.yml +++ b/.github/workflows/test_database.yml @@ -82,4 +82,4 @@ jobs: run: cd out && yarn install --frozen-lockfile --production=false - name: Database | Lint - run: cd out && turbo lint \ No newline at end of file + run: cd out && turbo lint build typecheck \ No newline at end of file diff --git a/.github/workflows/test_dht_node.yml b/.github/workflows/test_dht_node.yml index 9ff2e9121..b475dbcf4 100644 --- a/.github/workflows/test_dht_node.yml +++ b/.github/workflows/test_dht_node.yml @@ -65,10 +65,10 @@ jobs: - name: Wait for MariaDB to be ready run: docker run --rm --network gradido_internal-net busybox sh -c 'until nc -z mariadb 3306; do echo waiting for db; sleep 1; done;' - - name: run unit test & lint & build + - name: run unit test & lint & build & typecheck id: test run: | - cd out && turbo dht-node#lint dht-node#test + cd out && turbo dht-node#lint dht-node#test dht-node#build dht-node#typecheck echo "success=$([ $? -eq 0 ] && echo true || echo false)" >> $GITHUB_OUTPUT lint: diff --git a/database/esbuild.config.ts b/database/esbuild.config.ts new file mode 100644 index 000000000..ebdb10e2a --- /dev/null +++ b/database/esbuild.config.ts @@ -0,0 +1,28 @@ +import { build } from 'esbuild' +import fs from 'node:fs' +import { latestDbVersion } from './src/config/detectLastDBVersion' + +build({ + entryPoints: ['entity/index.ts'], + bundle: true, + target: 'node18.20.7', + platform: 'node', + packages: 'external', + outdir: './build', + plugins: [ + { + // hardcode last db version string into index.ts, before parsing + name: 'replace-latest-db-version-import', + setup(build) { + build.onLoad({ filter: /index\.ts$/ }, async (args) => { + let source = await fs.promises.readFile(args.path, 'utf8') + source = source.replace( + /import\s*\{\s*latestDbVersion\s*\}\s*from\s*['"][^'"]+['"]/, + `const latestDbVersion = "${latestDbVersion}";`, + ) + return { contents: source, loader: 'ts' } + }) + }, + }, + ], +}) diff --git a/database/package.json b/database/package.json index 713841f3b..85b641433 100644 --- a/database/package.json +++ b/database/package.json @@ -2,12 +2,12 @@ "name": "database", "version": "2.5.2", "description": "Gradido Database Tool to execute database migrations", - "main": "./build/entity/index.js", - "types": "./build/entity/index.d.ts", + "main": "./build/index.js", + "types": "./entity/index.ts", "exports": { ".": { - "import": "./build/entity/index.js", - "require": "./build/entity/index.js" + "import": "./build/index.js", + "require": "./build/index.js" } }, "repository": "https://github.com/gradido/gradido/database", @@ -15,8 +15,8 @@ "license": "Apache-2.0", "private": false, "scripts": { - "build": "mkdirp build/src/config/ && ncp src/config build/src/config && tsc --build", - "clean": "tsc --build --clean", + "build": "tsx ./esbuild.config.ts", + "typecheck": "tsc --noEmit", "up": "cross-env TZ=UTC tsx src/index.ts up", "down": "cross-env TZ=UTC tsx src/index.ts down", "reset": "cross-env TZ=UTC tsx src/index.ts reset", @@ -32,10 +32,10 @@ "@types/faker": "^5.5.9", "@types/geojson": "^7946.0.13", "@types/node": "^17.0.21", + "esbuild": "^0.25.2", "mkdirp": "^3.0.1", "ncp": "^2.0.0", "prettier": "^2.8.7", - "ts-node": "^10.9.2", "tsx": "^4.19.3", "typescript": "^4.9.5" }, diff --git a/dht-node/Dockerfile b/dht-node/Dockerfile index 7f132b451..00e781ec4 100644 --- a/dht-node/Dockerfile +++ b/dht-node/Dockerfile @@ -77,7 +77,7 @@ RUN yarn install --frozen-lockfile --production=false \ # Build the project COPY --chown=app:app --from=builder /app/out/full/ . -RUN turbo build +RUN turbo build typecheck ################################################################################## # TEST ########################################################################### diff --git a/dht-node/esbuild.config.ts b/dht-node/esbuild.config.ts new file mode 100644 index 000000000..ae8fb1ade --- /dev/null +++ b/dht-node/esbuild.config.ts @@ -0,0 +1,13 @@ +import { build } from 'esbuild' + +build({ + entryPoints: ['src/index.ts'], + outdir: 'build', + platform: 'node', + target: 'node18.20.7', + bundle: true, + keepNames: true, + // legalComments: 'inline', + external: ['udx-native', 'sodium-native'], + minify: true, +}) diff --git a/dht-node/package.json b/dht-node/package.json index c24ea2998..850b59bb7 100644 --- a/dht-node/package.json +++ b/dht-node/package.json @@ -8,10 +8,10 @@ "license": "Apache-2.0", "private": false, "scripts": { - "build": "tsc --build", - "clean": "tsc --build --clean", - "start": "cross-env TZ=UTC TS_NODE_BASEURL=./build node -r tsconfig-paths/register build/src/index.js", - "dev": "cross-env TZ=UTC nodemon -w src --ext ts --exec ts-node -r dotenv/config -r tsconfig-paths/register src/index.ts", + "build": "tsx esbuild.config.ts", + "start": "cross-env TZ=UTC node build/index.js", + "dev": "cross-env TZ=UTC tsx watch src/index.ts", + "typecheck": "tsc --noEmit", "lint": "biome check --error-on-warnings .", "lint:fix": "biome check --error-on-warnings . --write", "test": "cross-env TZ=UTC NODE_ENV=development DB_DATABASE=gradido_test_dht jest --runInBand --forceExit --detectOpenHandles" @@ -33,13 +33,14 @@ "@types/jest": "27.5.1", "@types/node": "^17.0.21", "@types/uuid": "^8.3.4", - "jest": "27.5.1", "@biomejs/biome": "1.9.4", "@types/dotenv": "^8.2.0", "@types/joi": "^17.2.3", + "esbuild": "^0.25.2", + "jest": "27.5.1", "prettier": "^2.8.7", + "tsx": "^4.19.3", "ts-jest": "27.1.4", - "ts-node": "^10.9.2", "typescript": "^4.9.4" }, "engines": { From 964a81f7909fc38955c82d8d25545ac5a0c54a68 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Thu, 1 May 2025 09:54:59 +0200 Subject: [PATCH 052/123] add missing table row types, needed for esbuild --- database/entity/0001-init_db/Migration.ts | 2 +- .../LoginEmailOptIn.ts | 10 ++--- .../LoginElopageBuys.ts | 10 +++-- .../TransactionLink.ts | 6 +-- .../AdminPendingCreation.ts | 4 +- .../Transaction.ts | 1 + .../ContributionLink.ts | 12 +++--- .../entity/0063-event_link_fields/Event.ts | 23 ++++++----- .../Transaction.ts | 1 + .../0069-add_user_roles_table/UserRole.ts | 11 +++-- .../DltTransaction.ts | 10 ++++- .../Transaction.ts | 1 + .../PendingTransaction.ts | 9 +++-- .../Transaction.ts | 7 ++-- .../Contribution.ts | 28 +++++++------ .../ContributionMessage.ts | 10 ++--- .../UserContact.ts | 40 ++++++++++++++++--- .../FederatedCommunity.ts | 4 +- .../User.ts | 27 ++++++++++--- .../0086-add_community_location/Community.ts | 2 +- database/entity/index.ts | 2 +- 21 files changed, 145 insertions(+), 75 deletions(-) diff --git a/database/entity/0001-init_db/Migration.ts b/database/entity/0001-init_db/Migration.ts index 2aa79ae9f..13c848b07 100644 --- a/database/entity/0001-init_db/Migration.ts +++ b/database/entity/0001-init_db/Migration.ts @@ -5,7 +5,7 @@ export class Migration extends BaseEntity { @PrimaryGeneratedColumn() // This is actually not a primary column version: number - @Column({ length: 256, nullable: true, default: null }) + @Column({ type: 'varchar', length: 256, nullable: true, default: null }) fileName: string @Column({ type: 'datetime', default: () => 'CURRENT_TIMESTAMP' }) diff --git a/database/entity/0003-login_server_tables/LoginEmailOptIn.ts b/database/entity/0003-login_server_tables/LoginEmailOptIn.ts index 60717d2c2..46f74e7de 100644 --- a/database/entity/0003-login_server_tables/LoginEmailOptIn.ts +++ b/database/entity/0003-login_server_tables/LoginEmailOptIn.ts @@ -6,21 +6,21 @@ export class LoginEmailOptIn extends BaseEntity { @PrimaryGeneratedColumn('increment', { unsigned: true }) id: number - @Column({ name: 'user_id' }) + @Column({ name: 'user_id', type: 'bigint', unsigned: true, nullable: false }) userId: number @Column({ name: 'verification_code', type: 'bigint', unsigned: true, unique: true }) verificationCode: BigInt - @Column({ name: 'email_opt_in_type_id' }) + @Column({ name: 'email_opt_in_type_id', type: 'int', unsigned: true, nullable: false }) emailOptInTypeId: number - @Column({ name: 'created', default: () => 'CURRENT_TIMESTAMP' }) + @Column({ name: 'created', type: 'datetime', default: () => 'CURRENT_TIMESTAMP' }) createdAt: Date - @Column({ name: 'resend_count', default: 0 }) + @Column({ name: 'resend_count', type: 'int', unsigned: true, default: 0 }) resendCount: number - @Column({ name: 'updated', default: () => 'CURRENT_TIMESTAMP' }) + @Column({ name: 'updated', type: 'datetime', default: () => 'CURRENT_TIMESTAMP' }) updatedAt: Date } diff --git a/database/entity/0021-elopagebuys_fields_nullable/LoginElopageBuys.ts b/database/entity/0021-elopagebuys_fields_nullable/LoginElopageBuys.ts index 45d82ad7c..18dbe7961 100644 --- a/database/entity/0021-elopagebuys_fields_nullable/LoginElopageBuys.ts +++ b/database/entity/0021-elopagebuys_fields_nullable/LoginElopageBuys.ts @@ -20,11 +20,12 @@ export class LoginElopageBuys extends BaseEntity { @Column({ type: 'int', width: 11, name: 'product_id', nullable: true, default: null }) productId: number | null - @Column({ name: 'product_price', nullable: false }) + @Column({ name: 'product_price', type: 'int', nullable: false }) productPrice: number @Column({ name: 'payer_email', + type: 'varchar', length: 255, nullable: false, charset: 'utf8', @@ -34,6 +35,7 @@ export class LoginElopageBuys extends BaseEntity { @Column({ name: 'publisher_email', + type: 'varchar', length: 255, nullable: false, charset: 'utf8', @@ -41,12 +43,12 @@ export class LoginElopageBuys extends BaseEntity { }) publisherEmail: string - @Column({ nullable: false }) + @Column({ type: 'bool', nullable: false }) payed: boolean - @Column({ name: 'success_date', nullable: false }) + @Column({ name: 'success_date', type: 'datetime', nullable: false }) successDate: Date - @Column({ length: 255, nullable: false }) + @Column({ type: 'varchar', length: 255, nullable: false }) event: string } diff --git a/database/entity/0031-remove_sendEmail_from_transaction_link/TransactionLink.ts b/database/entity/0031-remove_sendEmail_from_transaction_link/TransactionLink.ts index 585b42612..104d6e1bc 100644 --- a/database/entity/0031-remove_sendEmail_from_transaction_link/TransactionLink.ts +++ b/database/entity/0031-remove_sendEmail_from_transaction_link/TransactionLink.ts @@ -7,7 +7,7 @@ export class TransactionLink extends BaseEntity { @PrimaryGeneratedColumn('increment', { unsigned: true }) id: number - @Column({ unsigned: true, nullable: false }) + @Column({ type: 'bigint', unsigned: true, nullable: false }) userId: number @Column({ @@ -29,10 +29,10 @@ export class TransactionLink extends BaseEntity { }) holdAvailableAmount: Decimal - @Column({ length: 255, nullable: false, collation: 'utf8mb4_unicode_ci' }) + @Column({ type: 'varchar', length: 255, nullable: false, collation: 'utf8mb4_unicode_ci' }) memo: string - @Column({ length: 24, nullable: false, collation: 'utf8mb4_unicode_ci' }) + @Column({ type: 'varchar', length: 24, nullable: false, collation: 'utf8mb4_unicode_ci' }) code: string @Column({ diff --git a/database/entity/0035-admin_pending_creations_decimal/AdminPendingCreation.ts b/database/entity/0035-admin_pending_creations_decimal/AdminPendingCreation.ts index f2d0d1386..b56b5ac47 100644 --- a/database/entity/0035-admin_pending_creations_decimal/AdminPendingCreation.ts +++ b/database/entity/0035-admin_pending_creations_decimal/AdminPendingCreation.ts @@ -7,7 +7,7 @@ export class AdminPendingCreation extends BaseEntity { @PrimaryGeneratedColumn('increment', { unsigned: true }) id: number - @Column({ unsigned: true, nullable: false }) + @Column({ type: 'bigint', unsigned: true, nullable: false }) userId: number @Column({ type: 'datetime', default: () => 'CURRENT_TIMESTAMP' }) @@ -16,7 +16,7 @@ export class AdminPendingCreation extends BaseEntity { @Column({ type: 'datetime', nullable: false }) date: Date - @Column({ length: 255, nullable: false, collation: 'utf8mb4_unicode_ci' }) + @Column({ type: 'varchar', length: 255, nullable: false, collation: 'utf8mb4_unicode_ci' }) memo: string @Column({ diff --git a/database/entity/0036-unique_previous_in_transactions/Transaction.ts b/database/entity/0036-unique_previous_in_transactions/Transaction.ts index eef845330..efa376cbe 100644 --- a/database/entity/0036-unique_previous_in_transactions/Transaction.ts +++ b/database/entity/0036-unique_previous_in_transactions/Transaction.ts @@ -1,3 +1,4 @@ +/* eslint-disable no-use-before-define */ import { Decimal } from 'decimal.js-light' import { BaseEntity, Column, Entity, JoinColumn, OneToOne, PrimaryGeneratedColumn } from 'typeorm' import { DecimalTransformer } from '../../src/typeorm/DecimalTransformer' diff --git a/database/entity/0038-add_contribution_links_table/ContributionLink.ts b/database/entity/0038-add_contribution_links_table/ContributionLink.ts index f64b92208..479aff51a 100644 --- a/database/entity/0038-add_contribution_links_table/ContributionLink.ts +++ b/database/entity/0038-add_contribution_links_table/ContributionLink.ts @@ -7,10 +7,10 @@ export class ContributionLink extends BaseEntity { @PrimaryGeneratedColumn('increment', { unsigned: true }) id: number - @Column({ length: 100, nullable: false, collation: 'utf8mb4_unicode_ci' }) + @Column({ type: 'varchar', length: 100, nullable: false, collation: 'utf8mb4_unicode_ci' }) name: string - @Column({ length: 255, nullable: false, collation: 'utf8mb4_unicode_ci' }) + @Column({ type: 'varchar', length: 255, nullable: false, collation: 'utf8mb4_unicode_ci' }) memo: string @Column({ name: 'valid_from', type: 'datetime', nullable: false }) @@ -28,10 +28,10 @@ export class ContributionLink extends BaseEntity { }) amount: Decimal - @Column({ length: 12, nullable: false, collation: 'utf8mb4_unicode_ci' }) + @Column({ type: 'varchar', length: 12, nullable: false, collation: 'utf8mb4_unicode_ci' }) cycle: string - @Column({ name: 'max_per_cycle', unsigned: true, nullable: false, default: 1 }) + @Column({ name: 'max_per_cycle', type: 'int', unsigned: true, nullable: false, default: 1 }) maxPerCycle: number @Column({ @@ -77,10 +77,10 @@ export class ContributionLink extends BaseEntity { @Column({ name: 'created_at', type: 'datetime', default: () => 'CURRENT_TIMESTAMP' }) createdAt: Date - @DeleteDateColumn({ name: 'deleted_at' }) + @DeleteDateColumn({ name: 'deleted_at', type: 'datetime' }) deletedAt: Date | null - @Column({ length: 24, nullable: false, collation: 'utf8mb4_unicode_ci' }) + @Column({ type: 'varchar', length: 24, nullable: false, collation: 'utf8mb4_unicode_ci' }) code: string @Column({ name: 'link_enabled', type: 'boolean', default: true }) diff --git a/database/entity/0063-event_link_fields/Event.ts b/database/entity/0063-event_link_fields/Event.ts index d84adac1c..ce125b8df 100644 --- a/database/entity/0063-event_link_fields/Event.ts +++ b/database/entity/0063-event_link_fields/Event.ts @@ -21,7 +21,7 @@ export class Event extends BaseEntity { @PrimaryGeneratedColumn('increment', { unsigned: true }) id: number - @Column({ length: 100, nullable: false, collation: 'utf8mb4_unicode_ci' }) + @Column({ type: 'varchar', length: 100, nullable: false, collation: 'utf8mb4_unicode_ci' }) type: string @CreateDateColumn({ @@ -32,56 +32,61 @@ export class Event extends BaseEntity { }) createdAt: Date - @Column({ name: 'affected_user_id', unsigned: true, nullable: false }) + @Column({ name: 'affected_user_id', type: 'bigint', unsigned: true, nullable: false }) affectedUserId: number @ManyToOne(() => User) @JoinColumn({ name: 'affected_user_id', referencedColumnName: 'id' }) affectedUser: User - @Column({ name: 'acting_user_id', unsigned: true, nullable: false }) + @Column({ name: 'acting_user_id', type: 'bigint', unsigned: true, nullable: false }) actingUserId: number @ManyToOne(() => User) @JoinColumn({ name: 'acting_user_id', referencedColumnName: 'id' }) actingUser: User - @Column({ name: 'involved_user_id', type: 'int', unsigned: true, nullable: true }) + @Column({ name: 'involved_user_id', type: 'bigint', unsigned: true, nullable: true }) involvedUserId: number | null @ManyToOne(() => User) @JoinColumn({ name: 'involved_user_id', referencedColumnName: 'id' }) involvedUser: User | null - @Column({ name: 'involved_transaction_id', type: 'int', unsigned: true, nullable: true }) + @Column({ name: 'involved_transaction_id', type: 'bigint', unsigned: true, nullable: true }) involvedTransactionId: number | null @ManyToOne(() => Transaction) @JoinColumn({ name: 'involved_transaction_id', referencedColumnName: 'id' }) involvedTransaction: Transaction | null - @Column({ name: 'involved_contribution_id', type: 'int', unsigned: true, nullable: true }) + @Column({ name: 'involved_contribution_id', type: 'bigint', unsigned: true, nullable: true }) involvedContributionId: number | null @ManyToOne(() => Contribution) @JoinColumn({ name: 'involved_contribution_id', referencedColumnName: 'id' }) involvedContribution: Contribution | null - @Column({ name: 'involved_contribution_message_id', type: 'int', unsigned: true, nullable: true }) + @Column({ + name: 'involved_contribution_message_id', + type: 'bigint', + unsigned: true, + nullable: true, + }) involvedContributionMessageId: number | null @ManyToOne(() => ContributionMessage) @JoinColumn({ name: 'involved_contribution_message_id', referencedColumnName: 'id' }) involvedContributionMessage: ContributionMessage | null - @Column({ name: 'involved_transaction_link_id', type: 'int', unsigned: true, nullable: true }) + @Column({ name: 'involved_transaction_link_id', type: 'bigint', unsigned: true, nullable: true }) involvedTransactionLinkId: number | null @ManyToOne(() => TransactionLink) @JoinColumn({ name: 'involved_transaction_link_id', referencedColumnName: 'id' }) involvedTransactionLink: TransactionLink | null - @Column({ name: 'involved_contribution_link_id', type: 'int', unsigned: true, nullable: true }) + @Column({ name: 'involved_contribution_link_id', type: 'bigint', unsigned: true, nullable: true }) involvedContributionLinkId: number | null @ManyToOne(() => ContributionLink) diff --git a/database/entity/0066-x-community-sendcoins-transactions_table/Transaction.ts b/database/entity/0066-x-community-sendcoins-transactions_table/Transaction.ts index 905f17830..9c798f7c9 100644 --- a/database/entity/0066-x-community-sendcoins-transactions_table/Transaction.ts +++ b/database/entity/0066-x-community-sendcoins-transactions_table/Transaction.ts @@ -1,3 +1,4 @@ +/* eslint-disable no-use-before-define */ import { Decimal } from 'decimal.js-light' import { BaseEntity, Column, Entity, JoinColumn, OneToOne, PrimaryGeneratedColumn } from 'typeorm' import { DecimalTransformer } from '../../src/typeorm/DecimalTransformer' diff --git a/database/entity/0069-add_user_roles_table/UserRole.ts b/database/entity/0069-add_user_roles_table/UserRole.ts index 4d1e3f87d..536248da0 100644 --- a/database/entity/0069-add_user_roles_table/UserRole.ts +++ b/database/entity/0069-add_user_roles_table/UserRole.ts @@ -9,13 +9,18 @@ export class UserRole extends BaseEntity { @Column({ name: 'user_id', type: 'int', unsigned: true, nullable: false }) userId: number - @Column({ length: 40, nullable: false, collation: 'utf8mb4_unicode_ci' }) + @Column({ type: 'varchar', length: 40, nullable: false, collation: 'utf8mb4_unicode_ci' }) role: string - @Column({ name: 'created_at', default: () => 'CURRENT_TIMESTAMP(3)', nullable: false }) + @Column({ + name: 'created_at', + type: 'datetime', + default: () => 'CURRENT_TIMESTAMP(3)', + nullable: false, + }) createdAt: Date - @Column({ name: 'updated_at', nullable: true, default: null, type: 'datetime' }) + @Column({ name: 'updated_at', type: 'datetime', nullable: true, default: null }) updatedAt: Date | null @ManyToOne( diff --git a/database/entity/0070-add_dlt_transactions_table/DltTransaction.ts b/database/entity/0070-add_dlt_transactions_table/DltTransaction.ts index c2f28593a..afd9ba9a1 100644 --- a/database/entity/0070-add_dlt_transactions_table/DltTransaction.ts +++ b/database/entity/0070-add_dlt_transactions_table/DltTransaction.ts @@ -11,6 +11,7 @@ export class DltTransaction extends BaseEntity { @Column({ name: 'message_id', + type: 'varchar', length: 64, nullable: true, default: null, @@ -21,10 +22,15 @@ export class DltTransaction extends BaseEntity { @Column({ name: 'verified', type: 'bool', nullable: false, default: false }) verified: boolean - @Column({ name: 'created_at', default: () => 'CURRENT_TIMESTAMP(3)', nullable: false }) + @Column({ + name: 'created_at', + type: 'datetime', + default: () => 'CURRENT_TIMESTAMP(3)', + nullable: false, + }) createdAt: Date - @Column({ name: 'verified_at', nullable: true, default: null, type: 'datetime' }) + @Column({ name: 'verified_at', type: 'datetime', nullable: true, default: null }) verifiedAt: Date | null @OneToOne( diff --git a/database/entity/0070-add_dlt_transactions_table/Transaction.ts b/database/entity/0070-add_dlt_transactions_table/Transaction.ts index 4620ad231..23fcca475 100644 --- a/database/entity/0070-add_dlt_transactions_table/Transaction.ts +++ b/database/entity/0070-add_dlt_transactions_table/Transaction.ts @@ -1,3 +1,4 @@ +/* eslint-disable no-use-before-define */ import { Decimal } from 'decimal.js-light' import { BaseEntity, Column, Entity, JoinColumn, OneToOne, PrimaryGeneratedColumn } from 'typeorm' import { DecimalTransformer } from '../../src/typeorm/DecimalTransformer' diff --git a/database/entity/0071-add-pending_transactions-table/PendingTransaction.ts b/database/entity/0071-add-pending_transactions-table/PendingTransaction.ts index 65febfded..7c06b173b 100644 --- a/database/entity/0071-add-pending_transactions-table/PendingTransaction.ts +++ b/database/entity/0071-add-pending_transactions-table/PendingTransaction.ts @@ -1,3 +1,4 @@ +/* eslint-disable no-use-before-define */ import { Decimal } from 'decimal.js-light' import { BaseEntity, Column, Entity, PrimaryGeneratedColumn } from 'typeorm' import { DecimalTransformer } from '../../src/typeorm/DecimalTransformer' @@ -7,13 +8,13 @@ export class PendingTransaction extends BaseEntity { @PrimaryGeneratedColumn('increment', { unsigned: true }) id: number - @Column({ name: 'state', unsigned: true, nullable: false }) + @Column({ name: 'state', type: 'int', unsigned: true, nullable: false }) state: number @Column({ type: 'int', unsigned: true, unique: true, nullable: true, default: null }) previous: number | null - @Column({ name: 'type_id', unsigned: true, nullable: false }) + @Column({ name: 'type_id', type: 'int', unsigned: true, nullable: false }) typeId: number @Column({ @@ -68,13 +69,13 @@ export class PendingTransaction extends BaseEntity { }) decayStart: Date | null - @Column({ length: 255, nullable: false, collation: 'utf8mb4_unicode_ci' }) + @Column({ type: 'varchar', length: 255, nullable: false, collation: 'utf8mb4_unicode_ci' }) memo: string @Column({ name: 'creation_date', type: 'datetime', nullable: true, default: null }) creationDate: Date | null - @Column({ name: 'user_id', unsigned: true, nullable: false }) + @Column({ name: 'user_id', type: 'bigint', unsigned: true, nullable: false }) userId: number @Column({ diff --git a/database/entity/0072-add_communityuuid_to_transactions_table/Transaction.ts b/database/entity/0072-add_communityuuid_to_transactions_table/Transaction.ts index f3e3b2281..18450ba21 100644 --- a/database/entity/0072-add_communityuuid_to_transactions_table/Transaction.ts +++ b/database/entity/0072-add_communityuuid_to_transactions_table/Transaction.ts @@ -1,3 +1,4 @@ +/* eslint-disable no-use-before-define */ import { Decimal } from 'decimal.js-light' import { BaseEntity, Column, Entity, JoinColumn, OneToOne, PrimaryGeneratedColumn } from 'typeorm' import { DecimalTransformer } from '../../src/typeorm/DecimalTransformer' @@ -12,7 +13,7 @@ export class Transaction extends BaseEntity { @Column({ type: 'int', unsigned: true, unique: true, nullable: true, default: null }) previous: number | null - @Column({ name: 'type_id', unsigned: true, nullable: false }) + @Column({ name: 'type_id', type: 'int', unsigned: true, nullable: false }) typeId: number @Column({ @@ -67,13 +68,13 @@ export class Transaction extends BaseEntity { }) decayStart: Date | null - @Column({ length: 255, nullable: false, collation: 'utf8mb4_unicode_ci' }) + @Column({ type: 'varchar', length: 255, nullable: false, collation: 'utf8mb4_unicode_ci' }) memo: string @Column({ name: 'creation_date', type: 'datetime', nullable: true, default: null }) creationDate: Date | null - @Column({ name: 'user_id', unsigned: true, nullable: false }) + @Column({ name: 'user_id', type: 'bigint', unsigned: true, nullable: false }) userId: number @Column({ diff --git a/database/entity/0078-move_resubmission_date/Contribution.ts b/database/entity/0078-move_resubmission_date/Contribution.ts index 6de8f74d7..3e134a653 100644 --- a/database/entity/0078-move_resubmission_date/Contribution.ts +++ b/database/entity/0078-move_resubmission_date/Contribution.ts @@ -20,7 +20,7 @@ export class Contribution extends BaseEntity { @PrimaryGeneratedColumn('increment', { unsigned: true }) id: number - @Column({ unsigned: true, nullable: false, name: 'user_id' }) + @Column({ type: 'bigint', unsigned: true, nullable: false, name: 'user_id' }) userId: number @ManyToOne( @@ -39,7 +39,7 @@ export class Contribution extends BaseEntity { @Column({ type: 'datetime', nullable: false, name: 'contribution_date' }) contributionDate: Date - @Column({ length: 255, nullable: false, collation: 'utf8mb4_unicode_ci' }) + @Column({ type: 'varchar', length: 255, nullable: false, collation: 'utf8mb4_unicode_ci' }) memo: string @Column({ @@ -51,26 +51,27 @@ export class Contribution extends BaseEntity { }) amount: Decimal - @Column({ unsigned: true, nullable: true, name: 'moderator_id' }) + @Column({ type: 'bigint', unsigned: true, nullable: true, name: 'moderator_id' }) moderatorId: number - @Column({ unsigned: true, nullable: true, name: 'contribution_link_id' }) + @Column({ type: 'bigint', unsigned: true, nullable: true, name: 'contribution_link_id' }) contributionLinkId: number - @Column({ unsigned: true, nullable: true, name: 'confirmed_by' }) + @Column({ type: 'bigint', unsigned: true, nullable: true, name: 'confirmed_by' }) confirmedBy: number - @Column({ nullable: true, name: 'confirmed_at' }) + @Column({ type: 'datetime', nullable: true, name: 'confirmed_at' }) confirmedAt: Date - @Column({ unsigned: true, nullable: true, name: 'denied_by' }) + @Column({ type: 'bigint', unsigned: true, nullable: true, name: 'denied_by' }) deniedBy: number - @Column({ nullable: true, name: 'denied_at' }) + @Column({ type: 'datetime', nullable: true, name: 'denied_at' }) deniedAt: Date @Column({ name: 'contribution_type', + type: 'varchar', length: 12, nullable: false, collation: 'utf8mb4_unicode_ci', @@ -79,25 +80,26 @@ export class Contribution extends BaseEntity { @Column({ name: 'contribution_status', + type: 'varchar', length: 12, nullable: false, collation: 'utf8mb4_unicode_ci', }) contributionStatus: string - @Column({ unsigned: true, nullable: true, name: 'transaction_id' }) + @Column({ type: 'bigint', unsigned: true, nullable: true, name: 'transaction_id' }) transactionId: number - @Column({ nullable: true, name: 'updated_at' }) + @Column({ type: 'datetime', nullable: true, name: 'updated_at' }) updatedAt: Date - @Column({ nullable: true, unsigned: true, name: 'updated_by', type: 'int' }) + @Column({ type: 'bigint', nullable: true, unsigned: true, name: 'updated_by' }) updatedBy: number | null - @DeleteDateColumn({ name: 'deleted_at' }) + @DeleteDateColumn({ type: 'datetime', name: 'deleted_at' }) deletedAt: Date | null - @DeleteDateColumn({ unsigned: true, nullable: true, name: 'deleted_by' }) + @DeleteDateColumn({ type: 'bigint', unsigned: true, nullable: true, name: 'deleted_by' }) deletedBy: number @OneToMany( diff --git a/database/entity/0078-move_resubmission_date/ContributionMessage.ts b/database/entity/0078-move_resubmission_date/ContributionMessage.ts index 1c5e89f92..adf60d437 100644 --- a/database/entity/0078-move_resubmission_date/ContributionMessage.ts +++ b/database/entity/0078-move_resubmission_date/ContributionMessage.ts @@ -21,7 +21,7 @@ export class ContributionMessage extends BaseEntity { id: number @Index() - @Column({ name: 'contribution_id', unsigned: true, nullable: false }) + @Column({ name: 'contribution_id', type: 'bigint', unsigned: true, nullable: false }) contributionId: number @ManyToOne( @@ -31,7 +31,7 @@ export class ContributionMessage extends BaseEntity { @JoinColumn({ name: 'contribution_id' }) contribution: Contribution - @Column({ name: 'user_id', unsigned: true, nullable: false }) + @Column({ name: 'user_id', type: 'bigint', unsigned: true, nullable: false }) userId: number @ManyToOne( @@ -41,7 +41,7 @@ export class ContributionMessage extends BaseEntity { @JoinColumn({ name: 'user_id' }) user: User - @Column({ length: 2000, nullable: false, collation: 'utf8mb4_unicode_ci' }) + @Column({ type: 'varchar', length: 2000, nullable: false, collation: 'utf8mb4_unicode_ci' }) message: string @CreateDateColumn() @@ -55,10 +55,10 @@ export class ContributionMessage extends BaseEntity { @DeleteDateColumn({ name: 'deleted_at' }) deletedAt: Date | null - @Column({ name: 'deleted_by', default: null, unsigned: true, nullable: true }) + @Column({ name: 'deleted_by', type: 'bigint', default: null, unsigned: true, nullable: true }) deletedBy: number - @Column({ length: 12, nullable: false, collation: 'utf8mb4_unicode_ci' }) + @Column({ type: 'varchar', length: 12, nullable: false, collation: 'utf8mb4_unicode_ci' }) type: string @Column({ name: 'is_moderator', type: 'bool', nullable: false, default: false }) diff --git a/database/entity/0082-introduce_gms_registration/UserContact.ts b/database/entity/0082-introduce_gms_registration/UserContact.ts index 740d6e6c9..eabcf89eb 100644 --- a/database/entity/0082-introduce_gms_registration/UserContact.ts +++ b/database/entity/0082-introduce_gms_registration/UserContact.ts @@ -17,6 +17,7 @@ export class UserContact extends BaseEntity { @Column({ name: 'type', + type: 'varchar', length: 100, nullable: true, default: null, @@ -33,7 +34,13 @@ export class UserContact extends BaseEntity { @Column({ name: 'user_id', type: 'int', unsigned: true, nullable: false }) userId: number - @Column({ length: 255, unique: true, nullable: false, collation: 'utf8mb4_unicode_ci' }) + @Column({ + type: 'varchar', + length: 255, + unique: true, + nullable: false, + collation: 'utf8mb4_unicode_ci', + }) email: string @Column({ name: 'gms_publish_email', type: 'bool', nullable: false, default: false }) @@ -42,10 +49,22 @@ export class UserContact extends BaseEntity { @Column({ name: 'email_verification_code', type: 'bigint', unsigned: true, unique: true }) emailVerificationCode: string - @Column({ name: 'email_opt_in_type_id' }) + @Column({ + name: 'email_opt_in_type_id', + type: 'int', + unsigned: true, + nullable: false, + default: 0, + }) emailOptInTypeId: number - @Column({ name: 'email_resend_count' }) + @Column({ + name: 'email_resend_count', + type: 'int', + unsigned: true, + nullable: false, + default: 0, + }) emailResendCount: number @Column({ name: 'email_checked', type: 'bool', nullable: false, default: false }) @@ -53,6 +72,7 @@ export class UserContact extends BaseEntity { @Column({ name: 'country_code', + type: 'varchar', length: 255, unique: false, nullable: true, @@ -60,13 +80,23 @@ export class UserContact extends BaseEntity { }) countryCode: string - @Column({ length: 255, unique: false, nullable: true, collation: 'utf8mb4_unicode_ci' }) + @Column({ + type: 'varchar', + length: 255, + unique: false, + nullable: true, + collation: 'utf8mb4_unicode_ci', + }) phone: string @Column({ name: 'gms_publish_phone', type: 'int', unsigned: true, nullable: false, default: 0 }) gmsPublishPhone: number - @CreateDateColumn({ name: 'created_at', default: () => 'CURRENT_TIMESTAMP(3)', nullable: false }) + @CreateDateColumn({ + name: 'created_at', + default: () => 'CURRENT_TIMESTAMP(3)', + nullable: false, + }) createdAt: Date @UpdateDateColumn({ diff --git a/database/entity/0083-join_community_federated_communities/FederatedCommunity.ts b/database/entity/0083-join_community_federated_communities/FederatedCommunity.ts index 1f077bd5f..b0edfca91 100644 --- a/database/entity/0083-join_community_federated_communities/FederatedCommunity.ts +++ b/database/entity/0083-join_community_federated_communities/FederatedCommunity.ts @@ -21,10 +21,10 @@ export class FederatedCommunity extends BaseEntity { @Column({ name: 'public_key', type: 'binary', length: 32, default: null, nullable: true }) publicKey: Buffer - @Column({ name: 'api_version', length: 10, nullable: false }) + @Column({ name: 'api_version', type: 'varchar', length: 10, nullable: false }) apiVersion: string - @Column({ name: 'end_point', length: 255, nullable: false }) + @Column({ name: 'end_point', type: 'varchar', length: 255, nullable: false }) endPoint: string @Column({ name: 'last_announced_at', type: 'datetime', nullable: true }) diff --git a/database/entity/0084-introduce_humhub_registration/User.ts b/database/entity/0084-introduce_humhub_registration/User.ts index d192d3805..c12a7dcfd 100644 --- a/database/entity/0084-introduce_humhub_registration/User.ts +++ b/database/entity/0084-introduce_humhub_registration/User.ts @@ -27,6 +27,7 @@ export class User extends BaseEntity { @Column({ name: 'gradido_id', + type: 'char', length: 36, nullable: false, collation: 'utf8mb4_unicode_ci', @@ -51,6 +52,7 @@ export class User extends BaseEntity { @Column({ name: 'alias', + type: 'varchar', length: 20, nullable: true, default: null, @@ -70,6 +72,7 @@ export class User extends BaseEntity { @Column({ name: 'first_name', + type: 'varchar', length: 255, nullable: true, default: null, @@ -79,6 +82,7 @@ export class User extends BaseEntity { @Column({ name: 'last_name', + type: 'varchar', length: 255, nullable: true, default: null, @@ -92,10 +96,15 @@ export class User extends BaseEntity { @Column({ name: 'humhub_publish_name', type: 'int', unsigned: true, nullable: false, default: 0 }) humhubPublishName: number - @Column({ name: 'created_at', default: () => 'CURRENT_TIMESTAMP(3)', nullable: false }) + @Column({ + name: 'created_at', + type: 'datetime', + default: () => 'CURRENT_TIMESTAMP(3)', + nullable: false, + }) createdAt: Date - @DeleteDateColumn({ name: 'deleted_at', nullable: true }) + @DeleteDateColumn({ name: 'deleted_at', type: 'datetime', nullable: true }) deletedAt: Date | null @Column({ type: 'bigint', default: 0, unsigned: true }) @@ -110,7 +119,13 @@ export class User extends BaseEntity { }) passwordEncryptionType: number - @Column({ length: 4, default: 'de', collation: 'utf8mb4_unicode_ci', nullable: false }) + @Column({ + type: 'varchar', + length: 4, + default: 'de', + collation: 'utf8mb4_unicode_ci', + nullable: false, + }) language: string @Column({ type: 'bool', default: false }) @@ -126,19 +141,19 @@ export class User extends BaseEntity { @JoinColumn({ name: 'user_id' }) userRoles: UserRole[] - @Column({ name: 'referrer_id', type: 'int', unsigned: true, nullable: true, default: null }) + @Column({ name: 'referrer_id', type: 'bigint', unsigned: true, nullable: true, default: null }) referrerId?: number | null @Column({ name: 'contribution_link_id', - type: 'int', + type: 'bigint', unsigned: true, nullable: true, default: null, }) contributionLinkId?: number | null - @Column({ name: 'publisher_id', default: 0 }) + @Column({ name: 'publisher_id', type: 'bigint', unsigned: true, default: 0 }) publisherId: number @Column({ name: 'gms_allowed', type: 'bool', default: true }) diff --git a/database/entity/0086-add_community_location/Community.ts b/database/entity/0086-add_community_location/Community.ts index 374ea6a99..8c3a5c229 100644 --- a/database/entity/0086-add_community_location/Community.ts +++ b/database/entity/0086-add_community_location/Community.ts @@ -21,7 +21,7 @@ export class Community extends BaseEntity { @Column({ name: 'foreign', type: 'bool', nullable: false, default: true }) foreign: boolean - @Column({ name: 'url', length: 255, nullable: false }) + @Column({ name: 'url', type: 'varchar', length: 255, nullable: false }) url: string @Column({ name: 'public_key', type: 'binary', length: 32, nullable: false }) diff --git a/database/entity/index.ts b/database/entity/index.ts index fa7063a8e..71329b6ee 100644 --- a/database/entity/index.ts +++ b/database/entity/index.ts @@ -1,5 +1,4 @@ import { latestDbVersion } from '../src/config/detectLastDBVersion' -import { PendingTransaction } from './0071-add-pending_transactions-table/PendingTransaction' import { Community } from './Community' import { Contribution } from './Contribution' import { ContributionLink } from './ContributionLink' @@ -11,6 +10,7 @@ import { LoginElopageBuys } from './LoginElopageBuys' import { LoginEmailOptIn } from './LoginEmailOptIn' import { Migration } from './Migration' import { OpenaiThreads } from './OpenaiThreads' +import { PendingTransaction } from './PendingTransaction' import { ProjectBranding } from './ProjectBranding' import { Transaction } from './Transaction' import { TransactionLink } from './TransactionLink' From a6bbf52f62342cae2d2644f35e5b2dda65319f25 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Thu, 1 May 2025 10:03:51 +0200 Subject: [PATCH 053/123] add esbuild for federation --- .github/workflows/test_federation.yml | 2 +- federation/Dockerfile | 8 +++++++- federation/esbuild.config.ts | 13 +++++++++++++ federation/package.json | 8 ++++---- 4 files changed, 25 insertions(+), 6 deletions(-) create mode 100644 federation/esbuild.config.ts diff --git a/.github/workflows/test_federation.yml b/.github/workflows/test_federation.yml index 1c31a7d5c..4236ddfbd 100644 --- a/.github/workflows/test_federation.yml +++ b/.github/workflows/test_federation.yml @@ -68,7 +68,7 @@ jobs: - name: Federation | Unit tests id: test run: | - cd out && turbo federation#lint federation#test + cd out && turbo federation#lint federation#test federation#build federation#typecheck echo "success=$([ $? -eq 0 ] && echo true || echo false)" >> $GITHUB_OUTPUT lint: diff --git a/federation/Dockerfile b/federation/Dockerfile index a586e2006..e22a98f67 100644 --- a/federation/Dockerfile +++ b/federation/Dockerfile @@ -75,7 +75,7 @@ RUN yarn install --frozen-lockfile --production=false \ # Build the project COPY --chown=app:app --from=builder /app/out/full/ . -RUN turbo build +RUN turbo build typecheck ################################################################################## # TEST ########################################################################### @@ -95,6 +95,12 @@ FROM base as production # Copy "binary"-files from build image COPY --chown=app:app --from=installer ${DOCKER_WORKDIR}/federation/build/src/index.js ./index.js +# We also install the native node_modules which cannot be bundled +# TODO: find a elegant way to use the right versions from yarn.lock +RUN yarn add sodium-native@4.0.0 \ + && rm -rf /tmp/* ~/.cache node_modules/.cache \ + && yarn cache clean + # Copy log4js-config.json to provide log configuration COPY --chown=app:app --from=installer ${DOCKER_WORKDIR}/federation/log4js-config.json ./log4js-config.json diff --git a/federation/esbuild.config.ts b/federation/esbuild.config.ts new file mode 100644 index 000000000..38ca5b58d --- /dev/null +++ b/federation/esbuild.config.ts @@ -0,0 +1,13 @@ +import { build } from 'esbuild' + +build({ + entryPoints: ['src/index.ts'], + outdir: 'build', + platform: 'node', + target: 'node18.20.7', + bundle: true, + keepNames: true, + // legalComments: 'inline', + external: ['sodium-native'], + minify: true, +}) diff --git a/federation/package.json b/federation/package.json index c9d84ac0b..848f005b5 100644 --- a/federation/package.json +++ b/federation/package.json @@ -8,11 +8,11 @@ "license": "Apache-2.0", "private": false, "scripts": { - "build": "tsc --build", - "clean": "tsc --build --clean", - "start": "cross-env TZ=UTC TS_NODE_BASEURL=./build node -r tsconfig-paths/register build/src/index.js", + "build": "tsx esbuild.config.ts", + "start": "cross-env TZ=UTC node build/index.js", + "dev": "cross-env TZ=UTC tsx watch src/index.ts", + "typecheck": "tsc --noEmit", "test": "cross-env TZ=UTC NODE_ENV=development DB_DATABASE=gradido_test_federation jest --runInBand --forceExit --detectOpenHandles", - "dev": "cross-env TZ=UTC nodemon -w src --ext ts --exec ts-node -r dotenv/config -r tsconfig-paths/register src/index.ts", "lint": "biome check --error-on-warnings .", "lint:fix": "biome check --error-on-warnings . --write" }, From 211e4047aa0f5fb85904c3e5f848030a56b9815d Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Thu, 1 May 2025 10:08:43 +0200 Subject: [PATCH 054/123] update backend packages --- backend/esbuild.config.ts | 13 +++ backend/package.json | 6 +- bun.lock | 75 +++-------------- database/package.json | 2 - dht-node/package.json | 2 - federation/package.json | 4 +- yarn.lock | 167 ++------------------------------------ 7 files changed, 35 insertions(+), 234 deletions(-) create mode 100644 backend/esbuild.config.ts diff --git a/backend/esbuild.config.ts b/backend/esbuild.config.ts new file mode 100644 index 000000000..38ca5b58d --- /dev/null +++ b/backend/esbuild.config.ts @@ -0,0 +1,13 @@ +import { build } from 'esbuild' + +build({ + entryPoints: ['src/index.ts'], + outdir: 'build', + platform: 'node', + target: 'node18.20.7', + bundle: true, + keepNames: true, + // legalComments: 'inline', + external: ['sodium-native'], + minify: true, +}) diff --git a/backend/package.json b/backend/package.json index a8d8d6b11..54adb87c0 100644 --- a/backend/package.json +++ b/backend/package.json @@ -72,17 +72,13 @@ "@types/sodium-native": "^2.3.5", "@types/uuid": "^8.3.4", "apollo-server-testing": "^2.25.2", + "esbuild": "^0.25.2", "faker": "^5.5.3", "graphql-tag": "^2.12.6", "jest": "27.2.4", "klicktipp-api": "^1.0.2", - "mkdirp": "^3.0.1", - "ncp": "^2.0.0", - "nodemon": "^2.0.7", "prettier": "^3.5.3", "ts-jest": "27.0.5", - "ts-node": "^10.9.2", - "tsconfig-paths": "^4.1.1", "typescript": "^4.9.5" }, "nodemonConfig": { diff --git a/bun.lock b/bun.lock index ba2d1a6d4..cf380e4f4 100644 --- a/bun.lock +++ b/bun.lock @@ -134,17 +134,13 @@ "@types/sodium-native": "^2.3.5", "@types/uuid": "^8.3.4", "apollo-server-testing": "^2.25.2", + "esbuild": "^0.25.2", "faker": "^5.5.3", "graphql-tag": "^2.12.6", "jest": "27.2.4", "klicktipp-api": "^1.0.2", - "mkdirp": "^3.0.1", - "ncp": "^2.0.0", - "nodemon": "^2.0.7", "prettier": "^3.5.3", "ts-jest": "27.0.5", - "ts-node": "^10.9.2", - "tsconfig-paths": "^4.1.1", "typescript": "^4.9.5", }, }, @@ -182,10 +178,8 @@ "@types/faker": "^5.5.9", "@types/geojson": "^7946.0.13", "@types/node": "^17.0.21", - "mkdirp": "^3.0.1", - "ncp": "^2.0.0", + "esbuild": "^0.25.2", "prettier": "^2.8.7", - "ts-node": "^10.9.2", "tsx": "^4.19.3", "typescript": "^4.9.5", }, @@ -201,8 +195,6 @@ "dotenv": "10.0.0", "joi": "^17.13.3", "log4js": "^6.7.1", - "nodemon": "^2.0.20", - "tsconfig-paths": "^4.1.2", "typeorm": "^0.3.16", "uuid": "^8.3.2", }, @@ -213,10 +205,11 @@ "@types/joi": "^17.2.3", "@types/node": "^17.0.21", "@types/uuid": "^8.3.4", + "esbuild": "^0.25.2", "jest": "27.5.1", "prettier": "^2.8.7", "ts-jest": "27.1.4", - "ts-node": "^10.9.2", + "tsx": "^4.19.3", "typescript": "^4.9.4", }, }, @@ -257,13 +250,11 @@ "@types/sodium-native": "^2.3.5", "@types/uuid": "^8.3.4", "apollo-server-testing": "2.25.2", + "esbuild": "^0.25.2", "graphql-tag": "^2.12.6", "jest": "27.2.4", - "nodemon": "^2.0.7", "prettier": "^3.5.3", "ts-jest": "27.0.5", - "ts-node": "^10.9.2", - "tsconfig-paths": "^4.1.1", "typescript": "^4.9.5", }, }, @@ -1848,8 +1839,6 @@ "ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], - "ignore-by-default": ["ignore-by-default@1.0.1", "", {}, "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA=="], - "immutable": ["immutable@5.1.1", "", {}, "sha512-3jatXi9ObIsPGr3N5hGw/vWWcTkq6hUYhpQz4k0wLC+owqWi/LiugIw9x0EdNZ2yGedKN/HzePiBvaJRXa0Ujg=="], "import-cwd": ["import-cwd@3.0.0", "", { "dependencies": { "import-from": "^3.0.0" } }, "sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg=="], @@ -2204,8 +2193,6 @@ "mitt": ["mitt@3.0.1", "", {}, "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw=="], - "mkdirp": ["mkdirp@3.0.1", "", { "bin": { "mkdirp": "dist/cjs/src/bin.js" } }, "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg=="], - "mlly": ["mlly@1.7.4", "", { "dependencies": { "acorn": "^8.14.0", "pathe": "^2.0.1", "pkg-types": "^1.3.0", "ufo": "^1.5.4" } }, "sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw=="], "mock-apollo-client": ["mock-apollo-client@1.3.1", "", { "peerDependencies": { "@apollo/client": "^3.0.0" } }, "sha512-jBl1YGofh9RpTUFfShwIumiry5qRkR1LYW12K1iZ576kMFh03psHTRiuY2k3dT6cUQ28RAK4gRFl9lVloazGhA=="], @@ -2234,8 +2221,6 @@ "natural-compare": ["natural-compare@1.4.0", "", {}, "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw=="], - "ncp": ["ncp@2.0.0", "", { "bin": { "ncp": "./bin/ncp" } }, "sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA=="], - "nearley": ["nearley@2.20.1", "", { "dependencies": { "commander": "^2.19.0", "moo": "^0.5.0", "railroad-diagrams": "^1.0.0", "randexp": "0.4.6" }, "bin": { "nearleyc": "bin/nearleyc.js", "nearley-test": "bin/nearley-test.js", "nearley-unparse": "bin/nearley-unparse.js", "nearley-railroad": "bin/nearley-railroad.js" } }, "sha512-+Mc8UaAebFzgV+KpI5n7DasuuQCHA89dmwm7JXw3TV43ukfNQ9DnBH3Mdb2g/I4Fdxc26pwimBWvjIw0UAILSQ=="], "negotiator": ["negotiator@0.6.3", "", {}, "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg=="], @@ -2264,8 +2249,6 @@ "nodemailer": ["nodemailer@6.10.1", "", {}, "sha512-Z+iLaBGVaSjbIzQ4pX6XV41HrooLsQ10ZWPUehGmuantvzWoDVBnmsdUcOIDM1t+yPor5pDhVlDESgOMEGxhHA=="], - "nodemon": ["nodemon@2.0.22", "", { "dependencies": { "chokidar": "^3.5.2", "debug": "^3.2.7", "ignore-by-default": "^1.0.1", "minimatch": "^3.1.2", "pstree.remy": "^1.1.8", "semver": "^5.7.1", "simple-update-notifier": "^1.0.7", "supports-color": "^5.5.0", "touch": "^3.1.0", "undefsafe": "^2.0.5" }, "bin": { "nodemon": "bin/nodemon.js" } }, "sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ=="], - "noise-curve-ed": ["noise-curve-ed@2.1.0", "", { "dependencies": { "b4a": "^1.1.0", "nanoassert": "^2.0.0", "sodium-universal": "^5.0.0" } }, "sha512-zAzJx+VwZM3w6EA1hTmDhJfvAnCeBQn/1FAeZ0LtGxCcCtlAK/uJXQVF/eDVUOaAZ286lHlx77WJ+qj9SmsRRg=="], "noise-handshake": ["noise-handshake@3.1.0", "", { "dependencies": { "b4a": "^1.1.0", "nanoassert": "^2.0.0", "sodium-universal": "^4.0.0" } }, "sha512-0S1qkUvMbTvZCfgr/vSkVT84YyvI4Q0OLwSc5BFxVmjaePrxAwVeXeJDY3A7N/7+qj95gZ15LaNoP9ZnBXH5Lw=="], @@ -2436,8 +2419,6 @@ "psl": ["psl@1.15.0", "", { "dependencies": { "punycode": "^2.3.1" } }, "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w=="], - "pstree.remy": ["pstree.remy@1.1.8", "", {}, "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w=="], - "pug": ["pug@3.0.3", "", { "dependencies": { "pug-code-gen": "^3.0.3", "pug-filters": "^4.0.0", "pug-lexer": "^5.0.1", "pug-linker": "^4.0.0", "pug-load": "^3.0.0", "pug-parser": "^6.0.0", "pug-runtime": "^3.0.1", "pug-strip-comments": "^2.0.0" } }, "sha512-uBi6kmc9f3SZ3PXxqcHiUZLmIXgfgWooKWXcwSGwQd2Zi5Rb0bT14+8CJjJgI8AB+nndLaNgHGrcc6bPIB665g=="], "pug-attrs": ["pug-attrs@3.0.0", "", { "dependencies": { "constantinople": "^4.0.1", "js-stringify": "^1.0.2", "pug-runtime": "^3.0.0" } }, "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA=="], @@ -2620,8 +2601,6 @@ "signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], - "simple-update-notifier": ["simple-update-notifier@1.1.0", "", { "dependencies": { "semver": "~7.0.0" } }, "sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg=="], - "sisteransi": ["sisteransi@1.0.5", "", {}, "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg=="], "slash": ["slash@3.0.0", "", {}, "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q=="], @@ -2712,7 +2691,7 @@ "superjson": ["superjson@2.2.2", "", { "dependencies": { "copy-anything": "^3.0.2" } }, "sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q=="], - "supports-color": ["supports-color@5.5.0", "", { "dependencies": { "has-flag": "^3.0.0" } }, "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow=="], + "supports-color": ["supports-color@8.1.1", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="], "supports-hyperlinks": ["supports-hyperlinks@3.2.0", "", { "dependencies": { "has-flag": "^4.0.0", "supports-color": "^7.0.0" } }, "sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig=="], @@ -2782,8 +2761,6 @@ "toposort": ["toposort@2.0.2", "", {}, "sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg=="], - "touch": ["touch@3.1.1", "", { "bin": { "nodetouch": "bin/nodetouch.js" } }, "sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA=="], - "tough-cookie": ["tough-cookie@5.1.2", "", { "dependencies": { "tldts": "^6.1.32" } }, "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A=="], "tr46": ["tr46@5.1.1", "", { "dependencies": { "punycode": "^2.3.1" } }, "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw=="], @@ -2802,7 +2779,7 @@ "ts-node": ["ts-node@10.9.2", "", { "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", "@tsconfig/node12": "^1.0.7", "@tsconfig/node14": "^1.0.0", "@tsconfig/node16": "^1.0.2", "acorn": "^8.4.1", "acorn-walk": "^8.1.1", "arg": "^4.1.0", "create-require": "^1.1.0", "diff": "^4.0.1", "make-error": "^1.1.1", "v8-compile-cache-lib": "^3.0.1", "yn": "3.1.1" }, "peerDependencies": { "@swc/core": ">=1.2.50", "@swc/wasm": ">=1.2.50", "@types/node": "*", "typescript": ">=2.7" }, "optionalPeers": ["@swc/core", "@swc/wasm"], "bin": { "ts-node": "dist/bin.js", "ts-script": "dist/bin-script-deprecated.js", "ts-node-cwd": "dist/bin-cwd.js", "ts-node-esm": "dist/bin-esm.js", "ts-node-script": "dist/bin-script.js", "ts-node-transpile-only": "dist/bin-transpile.js" } }, "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ=="], - "tsconfig-paths": ["tsconfig-paths@4.2.0", "", { "dependencies": { "json5": "^2.2.2", "minimist": "^1.2.6", "strip-bom": "^3.0.0" } }, "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg=="], + "tsconfig-paths": ["tsconfig-paths@3.15.0", "", { "dependencies": { "@types/json5": "^0.0.29", "json5": "^1.0.2", "minimist": "^1.2.6", "strip-bom": "^3.0.0" } }, "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg=="], "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], @@ -2864,8 +2841,6 @@ "unctx": ["unctx@2.4.1", "", { "dependencies": { "acorn": "^8.14.0", "estree-walker": "^3.0.3", "magic-string": "^0.30.17", "unplugin": "^2.1.0" } }, "sha512-AbaYw0Nm4mK4qjhns67C+kgxR2YWiwlDBPzxrN8h8C6VtAdCgditAY5Dezu3IJy4XVqAnbrXt9oQJvsn3fyozg=="], - "undefsafe": ["undefsafe@2.0.5", "", {}, "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA=="], - "underscore": ["underscore@1.13.7", "", {}, "sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g=="], "underscore.deep": ["underscore.deep@0.5.3", "", { "peerDependencies": { "underscore": "1.x" } }, "sha512-4OuSOlFNkiVFVc3khkeG112Pdu1gbitMj7t9B9ENb61uFmN70Jq7Iluhi3oflcSgexkKfDdJ5XAJET2gEq6ikA=="], @@ -3282,8 +3257,6 @@ "citty/consola": ["consola@3.4.2", "", {}, "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA=="], - "concurrently/supports-color": ["supports-color@8.1.1", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="], - "css-select/domhandler": ["domhandler@4.3.1", "", { "dependencies": { "domelementtype": "^2.2.0" } }, "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ=="], "css-select/domutils": ["domutils@2.8.0", "", { "dependencies": { "dom-serializer": "^1.0.1", "domelementtype": "^2.2.0", "domhandler": "^4.2.0" } }, "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A=="], @@ -3322,8 +3295,6 @@ "eslint-plugin-import/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], - "eslint-plugin-import/tsconfig-paths": ["tsconfig-paths@3.15.0", "", { "dependencies": { "@types/json5": "^0.0.29", "json5": "^1.0.2", "minimist": "^1.2.6", "strip-bom": "^3.0.0" } }, "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg=="], - "eslint-plugin-node/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "eslint-plugin-vue/eslint-utils": ["eslint-utils@3.0.0", "", { "dependencies": { "eslint-visitor-keys": "^2.0.0" }, "peerDependencies": { "eslint": ">=5" } }, "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA=="], @@ -3410,8 +3381,6 @@ "jest-worker/jest-util": ["jest-util@29.7.0", "", { "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", "graceful-fs": "^4.2.9", "picomatch": "^2.2.3" } }, "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA=="], - "jest-worker/supports-color": ["supports-color@8.1.1", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="], - "js-beautify/glob": ["glob@10.4.5", "", { "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", "minimatch": "^9.0.4", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" } }, "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg=="], "jsdom/parse5": ["parse5@7.3.0", "", { "dependencies": { "entities": "^6.0.0" } }, "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw=="], @@ -3440,12 +3409,6 @@ "node-fetch/whatwg-url": ["whatwg-url@5.0.0", "", { "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw=="], - "nodemon/chokidar": ["chokidar@3.6.0", "", { "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw=="], - - "nodemon/debug": ["debug@3.2.7", "", { "dependencies": { "ms": "^2.1.1" } }, "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="], - - "nodemon/semver": ["semver@5.7.2", "", { "bin": { "semver": "bin/semver" } }, "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g=="], - "noise-curve-ed/sodium-universal": ["sodium-universal@5.0.1", "", { "dependencies": { "sodium-native": "^5.0.1" }, "peerDependencies": { "sodium-javascript": "~0.8.0" }, "optionalPeers": ["sodium-javascript"] }, "sha512-rv+aH+tnKB5H0MAc2UadHShLMslpJsc4wjdnHRtiSIEYpOetCgu8MS4ExQRia+GL/MK3uuCyZPeEsi+J3h+Q+Q=="], "nypm/consola": ["consola@3.4.2", "", {}, "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA=="], @@ -3486,8 +3449,6 @@ "send/encodeurl": ["encodeurl@1.0.2", "", {}, "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w=="], - "simple-update-notifier/semver": ["semver@7.0.0", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A=="], - "sodium-secretstream/sodium-universal": ["sodium-universal@5.0.1", "", { "dependencies": { "sodium-native": "^5.0.1" }, "peerDependencies": { "sodium-javascript": "~0.8.0" }, "optionalPeers": ["sodium-javascript"] }, "sha512-rv+aH+tnKB5H0MAc2UadHShLMslpJsc4wjdnHRtiSIEYpOetCgu8MS4ExQRia+GL/MK3uuCyZPeEsi+J3h+Q+Q=="], "sodium-universal/sodium-native": ["sodium-native@4.3.3", "", { "dependencies": { "require-addon": "^1.1.0" } }, "sha512-OnxSlN3uyY8D0EsLHpmm2HOFmKddQVvEMmsakCrXUzSd8kjjbzL413t4ZNF3n0UxSwNgwTyUvkmZHTfuCeiYSw=="], @@ -3520,8 +3481,6 @@ "subscriptions-transport-ws/ws": ["ws@7.5.10", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": "^5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ=="], - "supports-color/has-flag": ["has-flag@3.0.0", "", {}, "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw=="], - "supports-hyperlinks/supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], "table/ajv": ["ajv@8.17.1", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g=="], @@ -3540,6 +3499,8 @@ "tinyglobby/picomatch": ["picomatch@4.0.2", "", {}, "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg=="], + "tsconfig-paths/json5": ["json5@1.0.2", "", { "dependencies": { "minimist": "^1.2.0" }, "bin": { "json5": "lib/cli.js" } }, "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA=="], + "type-graphql/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], "typeorm/dotenv": ["dotenv@16.5.0", "", {}, "sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg=="], @@ -3638,8 +3599,6 @@ "@istanbuljs/load-nyc-config/js-yaml/argparse": ["argparse@1.0.10", "", { "dependencies": { "sprintf-js": "~1.0.2" } }, "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg=="], - "@jest/reporters/jest-worker/supports-color": ["supports-color@8.1.1", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="], - "@jest/transform/write-file-atomic/signal-exit": ["signal-exit@3.0.7", "", {}, "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="], "@nuxt/kit/pkg-types/confbox": ["confbox@0.2.2", "", {}, "sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ=="], @@ -3678,8 +3637,6 @@ "editorconfig/minimatch/brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="], - "eslint-plugin-import/tsconfig-paths/json5": ["json5@1.0.2", "", { "dependencies": { "minimist": "^1.2.0" }, "bin": { "json5": "lib/cli.js" } }, "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA=="], - "eslint-plugin-vue/eslint-utils/eslint-visitor-keys": ["eslint-visitor-keys@2.1.0", "", {}, "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw=="], "express/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], @@ -3730,10 +3687,6 @@ "jest-environment-jsdom/jsdom/xml-name-validator": ["xml-name-validator@3.0.0", "", {}, "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw=="], - "jest-haste-map/jest-worker/supports-color": ["supports-color@8.1.1", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="], - - "jest-runner/jest-worker/supports-color": ["supports-color@8.1.1", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="], - "jest-worker/jest-util/@jest/types": ["@jest/types@29.6.3", "", { "dependencies": { "@jest/schemas": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", "@types/yargs": "^17.0.8", "chalk": "^4.0.0" } }, "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw=="], "js-beautify/glob/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], @@ -3748,10 +3701,6 @@ "node-fetch/whatwg-url/webidl-conversions": ["webidl-conversions@3.0.1", "", {}, "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="], - "nodemon/chokidar/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], - - "nodemon/chokidar/readdirp": ["readdirp@3.6.0", "", { "dependencies": { "picomatch": "^2.2.1" } }, "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA=="], - "noise-curve-ed/sodium-universal/sodium-native": ["sodium-native@5.0.1", "", { "dependencies": { "require-addon": "^1.1.0", "which-runtime": "^1.2.1" } }, "sha512-Q305aUXc0OzK7VVRvWkeEQJQIHs6slhFwWpyqLB5iJqhpyt2lYIVu96Y6PQ7TABIlWXVF3YiWDU3xS2Snkus+g=="], "nypm/pkg-types/confbox": ["confbox@0.2.2", "", {}, "sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ=="], @@ -3786,8 +3735,6 @@ "terser-webpack-plugin/jest-worker/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], - "terser-webpack-plugin/jest-worker/supports-color": ["supports-color@8.1.1", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="], - "test-exclude/minimatch/brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="], "typeorm/glob/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], @@ -3852,6 +3799,8 @@ "vue-apollo/chalk/escape-string-regexp": ["escape-string-regexp@1.0.5", "", {}, "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg=="], + "vue-apollo/chalk/supports-color": ["supports-color@5.5.0", "", { "dependencies": { "has-flag": "^3.0.0" } }, "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow=="], + "web-resource-inliner/htmlparser2/domhandler": ["domhandler@3.3.0", "", { "dependencies": { "domelementtype": "^2.0.1" } }, "sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA=="], "web-resource-inliner/htmlparser2/domutils": ["domutils@2.8.0", "", { "dependencies": { "dom-serializer": "^1.0.1", "domelementtype": "^2.2.0", "domhandler": "^4.2.0" } }, "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A=="], @@ -3922,6 +3871,8 @@ "vue-apollo/chalk/ansi-styles/color-convert": ["color-convert@1.9.3", "", { "dependencies": { "color-name": "1.1.3" } }, "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg=="], + "vue-apollo/chalk/supports-color/has-flag": ["has-flag@3.0.0", "", {}, "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw=="], + "web-resource-inliner/htmlparser2/domutils/dom-serializer": ["dom-serializer@1.4.1", "", { "dependencies": { "domelementtype": "^2.0.1", "domhandler": "^4.2.0", "entities": "^2.0.0" } }, "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag=="], "web-resource-inliner/htmlparser2/domutils/domhandler": ["domhandler@4.3.1", "", { "dependencies": { "domelementtype": "^2.2.0" } }, "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ=="], diff --git a/database/package.json b/database/package.json index 85b641433..caba9ab98 100644 --- a/database/package.json +++ b/database/package.json @@ -33,8 +33,6 @@ "@types/geojson": "^7946.0.13", "@types/node": "^17.0.21", "esbuild": "^0.25.2", - "mkdirp": "^3.0.1", - "ncp": "^2.0.0", "prettier": "^2.8.7", "tsx": "^4.19.3", "typescript": "^4.9.5" diff --git a/dht-node/package.json b/dht-node/package.json index 850b59bb7..4e12032fe 100644 --- a/dht-node/package.json +++ b/dht-node/package.json @@ -24,8 +24,6 @@ "dotenv": "10.0.0", "joi": "^17.13.3", "log4js": "^6.7.1", - "nodemon": "^2.0.20", - "tsconfig-paths": "^4.1.2", "typeorm": "^0.3.16", "uuid": "^8.3.2" }, diff --git a/federation/package.json b/federation/package.json index 848f005b5..f4e7f1235 100644 --- a/federation/package.json +++ b/federation/package.json @@ -50,13 +50,11 @@ "@types/sodium-native": "^2.3.5", "@types/uuid": "^8.3.4", "apollo-server-testing": "2.25.2", + "esbuild": "^0.25.2", "graphql-tag": "^2.12.6", "jest": "27.2.4", - "nodemon": "^2.0.7", "prettier": "^3.5.3", "ts-jest": "27.0.5", - "ts-node": "^10.9.2", - "tsconfig-paths": "^4.1.1", "typescript": "^4.9.5" }, "nodemonConfig": { diff --git a/yarn.lock b/yarn.lock index f350f0362..b97a52c87 100644 --- a/yarn.lock +++ b/yarn.lock @@ -435,13 +435,6 @@ resolved "https://registry.yarnpkg.com/@biomejs/cli-win32-x64/-/cli-win32-x64-1.9.4.tgz#4c7afa90e3970213599b4095e62f87e5972b2340" integrity sha512-8Y5wMhVIPaWe6jw2H+KlEm4wP/f7EW3810ZLmDlrEEy5KvBsb9ECEfu/kMWD484ijfQ8+nIi0giMgu9g1UAuuA== -"@cspotcode/source-map-support@^0.8.0": - version "0.8.1" - resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" - integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== - dependencies: - "@jridgewell/trace-mapping" "0.3.9" - "@csstools/color-helpers@^5.0.2": version "5.0.2" resolved "https://registry.yarnpkg.com/@csstools/color-helpers/-/color-helpers-5.0.2.tgz#82592c9a7c2b83c293d9161894e2a6471feb97b8" @@ -1304,7 +1297,7 @@ "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.24" -"@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0": +"@jridgewell/resolve-uri@^3.1.0": version "3.1.2" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== @@ -1327,14 +1320,6 @@ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== -"@jridgewell/trace-mapping@0.3.9": - version "0.3.9" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" - integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== - dependencies: - "@jridgewell/resolve-uri" "^3.0.3" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping@^0.3.23", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": version "0.3.25" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" @@ -1829,26 +1814,6 @@ resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== -"@tsconfig/node10@^1.0.7": - version "1.0.11" - resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.11.tgz#6ee46400685f130e278128c7b38b7e031ff5b2f2" - integrity sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw== - -"@tsconfig/node12@^1.0.7": - version "1.0.11" - resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" - integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== - -"@tsconfig/node14@^1.0.0": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" - integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== - -"@tsconfig/node16@^1.0.2": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" - integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== - "@types/accepts@*", "@types/accepts@^1.3.5": version "1.3.7" resolved "https://registry.yarnpkg.com/@types/accepts/-/accepts-1.3.7.tgz#3b98b1889d2b2386604c2bbbe62e4fb51e95b265" @@ -2877,19 +2842,12 @@ acorn-walk@^7.1.1: resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== -acorn-walk@^8.1.1: - version "8.3.4" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.4.tgz#794dd169c3977edf4ba4ea47583587c5866236b7" - integrity sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g== - dependencies: - acorn "^8.11.0" - acorn@^7.1.1: version "7.4.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^8.11.0, acorn@^8.12.1, acorn@^8.14.0, acorn@^8.14.1, acorn@^8.2.4, acorn@^8.4.1, acorn@^8.5.0, acorn@^8.8.2, acorn@^8.9.0: +acorn@^8.12.1, acorn@^8.14.0, acorn@^8.14.1, acorn@^8.2.4, acorn@^8.5.0, acorn@^8.8.2, acorn@^8.9.0: version "8.14.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.1.tgz#721d5dc10f7d5b5609a891773d47731796935dfb" integrity sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg== @@ -3258,11 +3216,6 @@ app-root-path@^3.1.0: resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-3.1.0.tgz#5971a2fc12ba170369a7a1ef018c71e6e47c2e86" integrity sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA== -arg@^4.1.0: - version "4.1.3" - resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" - integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== - argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" @@ -3916,7 +3869,7 @@ cheerio@1.0.0-rc.10: parse5-htmlparser2-tree-adapter "^6.0.1" tslib "^2.2.0" -chokidar@^3.5.2, chokidar@^3.6.0: +chokidar@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== @@ -4221,11 +4174,6 @@ cosmiconfig@^9.0.0: js-yaml "^4.1.0" parse-json "^5.2.0" -create-require@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" - integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== - cross-env@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-7.0.3.tgz#865264b29677dc015ba8418918965dd232fc54cf" @@ -4560,11 +4508,6 @@ diff-sequences@^27.5.1: resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.5.1.tgz#eaecc0d327fd68c8d9672a1e64ab8dccb2ef5327" integrity sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ== -diff@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" - integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== - dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" @@ -6420,11 +6363,6 @@ ieee754@^1.2.1: resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== -ignore-by-default@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" - integrity sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA== - ignore@^5.0.5, ignore@^5.1.1, ignore@^5.2.0, ignore@^5.2.4: version "5.3.2" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" @@ -7476,7 +7414,7 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== -json5@2.x, json5@^2.1.3, json5@^2.2.2, json5@^2.2.3: +json5@2.x, json5@^2.1.3, json5@^2.2.3: version "2.2.3" resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== @@ -7852,7 +7790,7 @@ make-dir@^4.0.0: dependencies: semver "^7.5.3" -make-error@1.x, make-error@^1.1.1: +make-error@1.x: version "1.3.6" resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== @@ -8007,11 +7945,6 @@ mitt@^3.0.1: resolved "https://registry.yarnpkg.com/mitt/-/mitt-3.0.1.tgz#ea36cf0cc30403601ae074c8f77b7092cdab36d1" integrity sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw== -mkdirp@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-3.0.1.tgz#e44e4c5607fb279c168241713cc6e0fea9adcb50" - integrity sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg== - mlly@^1.2.0, mlly@^1.7.3, mlly@^1.7.4: version "1.7.4" resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.7.4.tgz#3d7295ea2358ec7a271eaa5d000a0f84febe100f" @@ -8116,11 +8049,6 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== -ncp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ncp/-/ncp-2.0.0.tgz#195a21d6c46e361d2fb1281ba38b91e9df7bdbb3" - integrity sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA== - nearley@^2.20.1: version "2.20.1" resolved "https://registry.yarnpkg.com/nearley/-/nearley-2.20.1.tgz#246cd33eff0d012faf197ff6774d7ac78acdd474" @@ -8209,22 +8137,6 @@ nodemailer@^6.6.5, nodemailer@^6.7.7, nodemailer@^6.9.13: resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-6.10.1.tgz#cbc434c54238f83a51c07eabd04e2b3e832da623" integrity sha512-Z+iLaBGVaSjbIzQ4pX6XV41HrooLsQ10ZWPUehGmuantvzWoDVBnmsdUcOIDM1t+yPor5pDhVlDESgOMEGxhHA== -nodemon@^2.0.20, nodemon@^2.0.7: - version "2.0.22" - resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-2.0.22.tgz#182c45c3a78da486f673d6c1702e00728daf5258" - integrity sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ== - dependencies: - chokidar "^3.5.2" - debug "^3.2.7" - ignore-by-default "^1.0.1" - minimatch "^3.1.2" - pstree.remy "^1.1.8" - semver "^5.7.1" - simple-update-notifier "^1.0.7" - supports-color "^5.5.0" - touch "^3.1.0" - undefsafe "^2.0.5" - noise-curve-ed@^2.0.0, noise-curve-ed@^2.0.1: version "2.1.0" resolved "https://registry.yarnpkg.com/noise-curve-ed/-/noise-curve-ed-2.1.0.tgz#38ab0748439baa0f21d49c78d7b8be3d5bb94f42" @@ -8919,11 +8831,6 @@ psl@^1.1.33: dependencies: punycode "^2.3.1" -pstree.remy@^1.1.8: - version "1.1.8" - resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a" - integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== - pug-attrs@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pug-attrs/-/pug-attrs-3.0.0.tgz#b10451e0348165e31fad1cc23ebddd9dc7347c41" @@ -9501,7 +9408,7 @@ semver@7.x, semver@^7.0.0, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^ resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.1.tgz#abd5098d82b18c6c81f6074ff2647fd3e7220c9f" integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA== -semver@^5.5.0, semver@^5.7.1: +semver@^5.5.0: version "5.7.2" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== @@ -9511,11 +9418,6 @@ semver@^6.1.0, semver@^6.3.0, semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@~7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" - integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== - send@0.19.0: version "0.19.0" resolved "https://registry.yarnpkg.com/send/-/send-0.19.0.tgz#bbc5a388c8ea6c048967049dbeac0e4a3f09d7f8" @@ -9697,13 +9599,6 @@ signal-exit@^4.0.1: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== -simple-update-notifier@^1.0.7: - version "1.1.0" - resolved "https://registry.yarnpkg.com/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz#67694c121de354af592b347cdba798463ed49c82" - integrity sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg== - dependencies: - semver "~7.0.0" - sisteransi@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" @@ -10127,7 +10022,7 @@ superjson@^2.2.2: dependencies: copy-anything "^3.0.2" -supports-color@^5.3.0, supports-color@^5.5.0: +supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== @@ -10389,11 +10284,6 @@ toposort@^2.0.2: resolved "https://registry.yarnpkg.com/toposort/-/toposort-2.0.2.tgz#ae21768175d1559d48bef35420b2f4962f09c330" integrity sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg== -touch@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.1.tgz#097a23d7b161476435e5c1344a95c0f75b4a5694" - integrity sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA== - tough-cookie@^4.0.0: version "4.1.4" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.4.tgz#945f1461b45b5a8c76821c33ea49c3ac192c1b36" @@ -10500,25 +10390,6 @@ ts-mysql-migrate@^1.0.2: "@types/mysql" "^2.15.8" mysql "^2.18.1" -ts-node@^10.9.2: - version "10.9.2" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.2.tgz#70f021c9e185bccdca820e26dc413805c101c71f" - integrity sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ== - dependencies: - "@cspotcode/source-map-support" "^0.8.0" - "@tsconfig/node10" "^1.0.7" - "@tsconfig/node12" "^1.0.7" - "@tsconfig/node14" "^1.0.0" - "@tsconfig/node16" "^1.0.2" - acorn "^8.4.1" - acorn-walk "^8.1.1" - arg "^4.1.0" - create-require "^1.1.0" - diff "^4.0.1" - make-error "^1.1.1" - v8-compile-cache-lib "^3.0.1" - yn "3.1.1" - tsconfig-paths@^3.15.0: version "3.15.0" resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" @@ -10529,15 +10400,6 @@ tsconfig-paths@^3.15.0: minimist "^1.2.6" strip-bom "^3.0.0" -tsconfig-paths@^4.1.1, tsconfig-paths@^4.1.2: - version "4.2.0" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz#ef78e19039133446d244beac0fd6a1632e2d107c" - integrity sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg== - dependencies: - json5 "^2.2.2" - minimist "^1.2.6" - strip-bom "^3.0.0" - tslib@^1.10.0, tslib@^1.9.3: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" @@ -10794,11 +10656,6 @@ unctx@^2.4.1: magic-string "^0.30.17" unplugin "^2.1.0" -undefsafe@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.5.tgz#38733b9327bdcd226db889fb723a6efd162e6e2c" - integrity sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA== - underscore.deep@~0.5.1: version "0.5.3" resolved "https://registry.yarnpkg.com/underscore.deep/-/underscore.deep-0.5.3.tgz#210969d58025339cecabd2a2ad8c3e8925e5c095" @@ -11002,11 +10859,6 @@ uuid@^9.0.0, uuid@^9.0.1: resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== -v8-compile-cache-lib@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" - integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== - v8-to-istanbul@^8.1.0: version "8.1.1" resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz#77b752fd3975e31bbcef938f85e9bd1c7a8d60ed" @@ -11715,11 +11567,6 @@ yargs@^17.7.2: y18n "^5.0.5" yargs-parser "^21.1.1" -yn@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" - integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== - yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" From 8ae1219a74b1d5050b53abd92eeded7d4ee193d0 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Thu, 1 May 2025 10:16:48 +0200 Subject: [PATCH 055/123] backend build with esbuild is working --- .github/workflows/test_backend.yml | 2 +- backend/esbuild.config.ts | 4 +++- backend/package.json | 11 ++++++----- backend/src/index.ts | 1 + bun.lock | 3 +++ yarn.lock | 5 +++++ 6 files changed, 19 insertions(+), 7 deletions(-) diff --git a/.github/workflows/test_backend.yml b/.github/workflows/test_backend.yml index 09a16eaef..0d1d629dd 100644 --- a/.github/workflows/test_backend.yml +++ b/.github/workflows/test_backend.yml @@ -69,7 +69,7 @@ jobs: - name: Backend | Unit tests id: test run: | - cd out && turbo backend#lint backend#test + cd out && turbo backend#lint backend#test backend#build backend#typecheck echo "success=$([ $? -eq 0 ] && echo true || echo false)" >> $GITHUB_OUTPUT lint: diff --git a/backend/esbuild.config.ts b/backend/esbuild.config.ts index 38ca5b58d..a475d3b52 100644 --- a/backend/esbuild.config.ts +++ b/backend/esbuild.config.ts @@ -1,3 +1,4 @@ +import { esbuildDecorators } from '@anatine/esbuild-decorators' import { build } from 'esbuild' build({ @@ -8,6 +9,7 @@ build({ bundle: true, keepNames: true, // legalComments: 'inline', - external: ['sodium-native'], + external: ['reflect-metadata', 'sodium-native', 'email-templates'], + plugins: [esbuildDecorators()], minify: true, }) diff --git a/backend/package.json b/backend/package.json index 54adb87c0..0a2ac2fd2 100644 --- a/backend/package.json +++ b/backend/package.json @@ -8,10 +8,10 @@ "license": "Apache-2.0", "private": false, "scripts": { - "build": "tsc --build && mkdirp build/src/emails/templates/ && ncp src/emails/templates build/src/emails/templates && mkdirp build/src/locales/ && ncp src/locales build/src/locales", - "clean": "tsc --build --clean", - "start": "cross-env TZ=UTC TS_NODE_BASEURL=./build node -r tsconfig-paths/register build/src/index.js", - "dev": "cross-env TZ=UTC nodemon -w src --ext ts,pug,json,css --exec ts-node -r tsconfig-paths/register src/index.ts", + "build": "tsx esbuild.config.ts", + "start": "cross-env TZ=UTC node build/index.js", + "dev": "cross-env TZ=UTC tsx watch src/index.ts", + "typecheck": "tsc --noEmit", "lint": "biome check --error-on-warnings .", "lint:fix": "biome check --error-on-warnings . --write", "test": "cross-env TZ=UTC NODE_ENV=development DB_DATABASE=gradido_test_backend jest --runInBand --forceExit --detectOpenHandles", @@ -60,9 +60,10 @@ "xregexp": "^5.1.1" }, "devDependencies": { + "@anatine/esbuild-decorators": "^0.2.19", + "@biomejs/biome": "1.9.4", "@types/email-templates": "^10.0.4", "@types/express": "^4.17.21", - "@biomejs/biome": "1.9.4", "@types/faker": "^5.5.9", "@types/i18n": "^0.13.4", "@types/jest": "27.0.2", diff --git a/backend/src/index.ts b/backend/src/index.ts index 9b1b72ba5..01f7f47a3 100644 --- a/backend/src/index.ts +++ b/backend/src/index.ts @@ -1,3 +1,4 @@ +import 'reflect-metadata' import { CONFIG } from './config' import { startValidateCommunities } from './federation/validateCommunities' import { createServer } from './server/createServer' diff --git a/bun.lock b/bun.lock index cf380e4f4..88e4ee180 100644 --- a/bun.lock +++ b/bun.lock @@ -122,6 +122,7 @@ "xregexp": "^5.1.1", }, "devDependencies": { + "@anatine/esbuild-decorators": "^0.2.19", "@biomejs/biome": "1.9.4", "@types/email-templates": "^10.0.4", "@types/express": "^4.17.21", @@ -355,6 +356,8 @@ "packages": { "@ampproject/remapping": ["@ampproject/remapping@2.3.0", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw=="], + "@anatine/esbuild-decorators": ["@anatine/esbuild-decorators@0.2.19", "", { "peerDependencies": { "esbuild": "~0.14.29" } }, "sha512-pyj6ULyMacyzpDqlnbS2OCkOqxcVgk8IqiTMRJ5CrsF8Yl1azvlX/AM6xWR8UzHKUYDlWOw5mOpos3+7KKR0Lw=="], + "@antfu/install-pkg": ["@antfu/install-pkg@0.4.1", "", { "dependencies": { "package-manager-detector": "^0.2.0", "tinyexec": "^0.3.0" } }, "sha512-T7yB5QNG29afhWVkVq7XeIMBa5U/vs9mX69YqayXypPRmYzUmzwnYltplHmPtZ4HPCn+sQKeXW8I47wCbuBOjw=="], "@antfu/utils": ["@antfu/utils@0.7.10", "", {}, "sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww=="], diff --git a/yarn.lock b/yarn.lock index b97a52c87..526c35245 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10,6 +10,11 @@ "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.24" +"@anatine/esbuild-decorators@^0.2.19": + version "0.2.19" + resolved "https://registry.yarnpkg.com/@anatine/esbuild-decorators/-/esbuild-decorators-0.2.19.tgz#d4137182abfdf0e6de680f69b447492813b62ef4" + integrity sha512-pyj6ULyMacyzpDqlnbS2OCkOqxcVgk8IqiTMRJ5CrsF8Yl1azvlX/AM6xWR8UzHKUYDlWOw5mOpos3+7KKR0Lw== + "@antfu/install-pkg@^0.4.1": version "0.4.1" resolved "https://registry.yarnpkg.com/@antfu/install-pkg/-/install-pkg-0.4.1.tgz#d1d7f3be96ecdb41581629cafe8626d1748c0cf1" From 50c8e84220e023ecb6ebf5686051aa4cab130f34 Mon Sep 17 00:00:00 2001 From: Einhornimmond Date: Fri, 2 May 2025 07:51:49 +0200 Subject: [PATCH 056/123] wait for mailserver --- .github/workflows/test_e2e.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test_e2e.yml b/.github/workflows/test_e2e.yml index 64dc7f524..992f2d698 100644 --- a/.github/workflows/test_e2e.yml +++ b/.github/workflows/test_e2e.yml @@ -59,8 +59,10 @@ jobs: sudo nginx -t sudo systemctl start nginx - - name: wait for nginx to be ready - run: until nc -z 127.0.0.1 80; do echo waiting for nginx; sleep 1; done; + - name: wait for nginx and mailserver to be ready + run: | + until nc -z 127.0.0.1 80; do echo waiting for nginx; sleep 1; done; + until nc -z 127.0.0.1 1025; do echo waiting for mailserver; sleep 1; done; - name: End-to-end tests | run tests id: e2e-tests From 61692457a923debee5b3d0d1764cc7bb8b4a6fb1 Mon Sep 17 00:00:00 2001 From: Einhornimmond Date: Fri, 2 May 2025 07:56:54 +0200 Subject: [PATCH 057/123] transfer env vars to turbo --- .github/workflows/test_e2e.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test_e2e.yml b/.github/workflows/test_e2e.yml index 992f2d698..eeae17439 100644 --- a/.github/workflows/test_e2e.yml +++ b/.github/workflows/test_e2e.yml @@ -39,7 +39,7 @@ jobs: cp .env.test_e2e .env cd .. bun turbo backend#build frontend#build - bun turbo backend#start frontend#start & + bun turbo backend#start frontend#start --env-mode=loose & - name: End-to-end tests | prepare run: | From e8c3ee9bc001d2164769973054e68081cc802cd8 Mon Sep 17 00:00:00 2001 From: Einhornimmond Date: Fri, 2 May 2025 08:25:23 +0200 Subject: [PATCH 058/123] try to use bun --- .github/workflows/test_backend.yml | 2 +- .github/workflows/test_dht_node.yml | 2 +- .github/workflows/test_federation.yml | 2 +- backend/Dockerfile | 6 ++- backend/package.json | 14 +++--- bun.lock | 29 ++++++++++- config-schema/package.json | 1 + database/package.json | 18 +++---- dht-node/Dockerfile | 2 +- dht-node/package.json | 15 +++--- federation/Dockerfile | 2 +- federation/package.json | 7 +-- yarn.lock | 72 +++++++++++++++++++++++++++ 13 files changed, 139 insertions(+), 33 deletions(-) diff --git a/.github/workflows/test_backend.yml b/.github/workflows/test_backend.yml index 0d1d629dd..74abd0403 100644 --- a/.github/workflows/test_backend.yml +++ b/.github/workflows/test_backend.yml @@ -33,7 +33,7 @@ jobs: uses: actions/checkout@v3 - name: Backend | Build 'test' image - run: docker build -f ./backend/Dockerfile --target test -t "gradido/backend:test" . + run: docker build -f ./backend/Dockerfile --target production -t "gradido/backend:production" . unit_test: if: needs.files-changed.outputs.backend == 'true' || needs.files-changed.outputs.database == 'true' || needs.files-changed.outputs.docker-compose == 'true' || needs.files-changed.outputs.mariadb == 'true' || needs.files-changed.outputs.config == 'true' diff --git a/.github/workflows/test_dht_node.yml b/.github/workflows/test_dht_node.yml index b475dbcf4..6aee0b4cc 100644 --- a/.github/workflows/test_dht_node.yml +++ b/.github/workflows/test_dht_node.yml @@ -32,7 +32,7 @@ jobs: uses: actions/checkout@v3 - name: Build 'test' image (typecheck & build) - run: docker build --target test -t "gradido/dht-node:test" -f dht-node/Dockerfile . + run: docker build --target production -t "gradido/dht-node:production" -f dht-node/Dockerfile . unit_test: name: Unit Tests - DHT Node diff --git a/.github/workflows/test_federation.yml b/.github/workflows/test_federation.yml index 4236ddfbd..46350853c 100644 --- a/.github/workflows/test_federation.yml +++ b/.github/workflows/test_federation.yml @@ -32,7 +32,7 @@ jobs: uses: actions/checkout@v3 - name: Build `test` image - run: docker build --target test -t "gradido/federation:test" -f federation/Dockerfile . + run: docker build --target production -t "gradido/federation:production" -f federation/Dockerfile . unit_test: name: Unit Tests - Federation diff --git a/backend/Dockerfile b/backend/Dockerfile index 558369ccd..0344322da 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -94,7 +94,11 @@ CMD /bin/sh -c "turbo backend#test --env-mode=loose" FROM base as production # Copy "binary"-files from build image -COPY --chown=app:app --from=installer ${DOCKER_WORKDIR}/backend/build/src/index.js ./index.js +COPY --chown=app:app --from=installer ${DOCKER_WORKDIR}/backend/build/index.js ./index.js + +RUN yarn add sodium-native@4.0.0 \ + && rm -rf /tmp/* ~/.cache node_modules/.cache \ + && yarn cache clean # Copy log4js-config.json to provide log configuration COPY --chown=app:app --from=installer ${DOCKER_WORKDIR}/backend/log4js-config.json ./log4js-config.json diff --git a/backend/package.json b/backend/package.json index 0a2ac2fd2..c1ec995e4 100644 --- a/backend/package.json +++ b/backend/package.json @@ -8,17 +8,17 @@ "license": "Apache-2.0", "private": false, "scripts": { - "build": "tsx esbuild.config.ts", - "start": "cross-env TZ=UTC node build/index.js", - "dev": "cross-env TZ=UTC tsx watch src/index.ts", + "build": "bun esbuild.config.ts", + "start": "cross-env TZ=UTC NODE_ENV=production bun build/index.js", + "dev": "cross-env TZ=UTC bun --hot src/index.ts", "typecheck": "tsc --noEmit", "lint": "biome check --error-on-warnings .", "lint:fix": "biome check --error-on-warnings . --write", "test": "cross-env TZ=UTC NODE_ENV=development DB_DATABASE=gradido_test_backend jest --runInBand --forceExit --detectOpenHandles", - "seed": "cross-env TZ=UTC NODE_ENV=development ts-node -r tsconfig-paths/register src/seeds/index.ts", - "klicktipp": "cross-env TZ=UTC NODE_ENV=development ts-node -r tsconfig-paths/register src/util/executeKlicktipp.ts", - "gmsusers": "cross-env TZ=UTC NODE_ENV=development ts-node -r tsconfig-paths/register src/apis/gms/ExportUsers.ts", - "humhubUserExport": "cross-env TZ=UTC NODE_ENV=development ts-node -r tsconfig-paths/register src/apis/humhub/ExportUsers.ts", + "seed": "cross-env TZ=UTC NODE_ENV=development bun src/seeds/index.ts", + "klicktipp": "cross-env TZ=UTC NODE_ENV=development bun src/util/executeKlicktipp.ts", + "gmsusers": "cross-env TZ=UTC NODE_ENV=development bun src/apis/gms/ExportUsers.ts", + "humhubUserExport": "cross-env TZ=UTC NODE_ENV=development bun src/apis/humhub/ExportUsers.ts", "locales": "scripts/sort.sh" }, "dependencies": { diff --git a/bun.lock b/bun.lock index 88e4ee180..ce2c061de 100644 --- a/bun.lock +++ b/bun.lock @@ -154,6 +154,7 @@ "devDependencies": { "@biomejs/biome": "1.9.4", "@types/node": "^17.0.21", + "bun": "^1.2.11", "esbuild": "^0.25.2", "typescript": "^4.9.5", }, @@ -179,9 +180,9 @@ "@types/faker": "^5.5.9", "@types/geojson": "^7946.0.13", "@types/node": "^17.0.21", + "bun": "^1.2.11", "esbuild": "^0.25.2", "prettier": "^2.8.7", - "tsx": "^4.19.3", "typescript": "^4.9.5", }, }, @@ -206,6 +207,7 @@ "@types/joi": "^17.2.3", "@types/node": "^17.0.21", "@types/uuid": "^8.3.4", + "bun": "^1.2.11", "esbuild": "^0.25.2", "jest": "27.5.1", "prettier": "^2.8.7", @@ -251,6 +253,7 @@ "@types/sodium-native": "^2.3.5", "@types/uuid": "^8.3.4", "apollo-server-testing": "2.25.2", + "bun": "^1.2.11", "esbuild": "^0.25.2", "graphql-tag": "^2.12.6", "jest": "27.2.4", @@ -664,6 +667,28 @@ "@one-ini/wasm": ["@one-ini/wasm@0.1.1", "", {}, "sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw=="], + "@oven/bun-darwin-aarch64": ["@oven/bun-darwin-aarch64@1.2.11", "", { "os": "darwin", "cpu": "arm64" }, "sha512-LN7gshxqEHJ1LA0B43Z56Ts3LxRjp2LrIz45FIgeKWE81PYglR9NMNou90gFuYlUtMyarSk6MV9Jdvo2kFnn8Q=="], + + "@oven/bun-darwin-x64": ["@oven/bun-darwin-x64@1.2.11", "", { "os": "darwin", "cpu": "x64" }, "sha512-AmmlGdQmzORFeUZRa2Ki9UWYTt5ZGUwTp0z+H0uR4bYHy7sQhpDbNKtZcfKKuLRQ6P23DKc3Lpo+yhR0cg7prg=="], + + "@oven/bun-darwin-x64-baseline": ["@oven/bun-darwin-x64-baseline@1.2.11", "", { "os": "darwin", "cpu": "x64" }, "sha512-ksZJzq0Id3YsGcs++QnL1oGYjqY5XNihR0MscZ+M4YYruvVKHKim9Aql46+TI55YmKD810HVpeLolIeeTl2JUg=="], + + "@oven/bun-linux-aarch64": ["@oven/bun-linux-aarch64@1.2.11", "", { "os": "linux", "cpu": "arm64" }, "sha512-jNQ5F6o9qC/KNhBnyxnjVRfiTxZB7thvZ7T+oPZSNh1IV8UWDunEGmUdOqSqoPsigpXHRjbV3DKJKN+YaPQCCA=="], + + "@oven/bun-linux-aarch64-musl": ["@oven/bun-linux-aarch64-musl@1.2.11", "", { "os": "linux", "cpu": "none" }, "sha512-A/h7WxC2GbNus8fupz5EHsD8YugG19uW9GQWDf4tk0YWYuSaUOCP14JYbXbiJ48OFELWNchEc/2azajH+votbA=="], + + "@oven/bun-linux-x64": ["@oven/bun-linux-x64@1.2.11", "", { "os": "linux", "cpu": "x64" }, "sha512-6pH556SgOR2UOgWQfEiYI3DWgkm7T+L9fmBe2dfEYrKCEu/TbXZXOJeMi943NSMIiT3q2gVwlCEdoxZwedQs4A=="], + + "@oven/bun-linux-x64-baseline": ["@oven/bun-linux-x64-baseline@1.2.11", "", { "os": "linux", "cpu": "x64" }, "sha512-xswex8EPmzX8BqbNXpiwgrpDkaD/FMIaxD85EIBaaksi6I8nln2kzEmlO/uVhbFAn9PPWydi3Q+FCcNnJGRazQ=="], + + "@oven/bun-linux-x64-musl": ["@oven/bun-linux-x64-musl@1.2.11", "", { "os": "linux", "cpu": "x64" }, "sha512-yF1Urgsy8xkQu8iAd03ORxuZ/DWrNPCST2r1EVIwjHuzpZ3o2odKjnE9Hnwsq+wcWdCRsakqL/muILB/9aCxeQ=="], + + "@oven/bun-linux-x64-musl-baseline": ["@oven/bun-linux-x64-musl-baseline@1.2.11", "", { "os": "linux", "cpu": "x64" }, "sha512-YYglLgFkHwNMjECCyM/kZDUZa6UW3ssVtg5k6+8QU1Rp5cPF+0SBlGGTr5ho2lFkNn/ylKmwyuqE1tB45zgVvA=="], + + "@oven/bun-windows-x64": ["@oven/bun-windows-x64@1.2.11", "", { "os": "win32", "cpu": "x64" }, "sha512-5mGVsGSS8JWBq8IHXGvFJ7rlET4XCUdDTKEaLLq3O1YaqyZZiPMQFnU70MfkpjPe4stRDZ+/NWBRNDMaNTYQxw=="], + + "@oven/bun-windows-x64-baseline": ["@oven/bun-windows-x64-baseline@1.2.11", "", { "os": "win32", "cpu": "x64" }, "sha512-uzappBblyA3GlX0PDENU1HTPZR82tzPuNd5jumTiDQ22FZmc2ZqCYTIZ/ngwHKOHDD6Rxdsux8+9EXgVS51G2w=="], + "@parcel/watcher": ["@parcel/watcher@2.5.1", "", { "dependencies": { "detect-libc": "^1.0.3", "is-glob": "^4.0.3", "micromatch": "^4.0.5", "node-addon-api": "^7.0.0" }, "optionalDependencies": { "@parcel/watcher-android-arm64": "2.5.1", "@parcel/watcher-darwin-arm64": "2.5.1", "@parcel/watcher-darwin-x64": "2.5.1", "@parcel/watcher-freebsd-x64": "2.5.1", "@parcel/watcher-linux-arm-glibc": "2.5.1", "@parcel/watcher-linux-arm-musl": "2.5.1", "@parcel/watcher-linux-arm64-glibc": "2.5.1", "@parcel/watcher-linux-arm64-musl": "2.5.1", "@parcel/watcher-linux-x64-glibc": "2.5.1", "@parcel/watcher-linux-x64-musl": "2.5.1", "@parcel/watcher-win32-arm64": "2.5.1", "@parcel/watcher-win32-ia32": "2.5.1", "@parcel/watcher-win32-x64": "2.5.1" } }, "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg=="], "@parcel/watcher-android-arm64": ["@parcel/watcher-android-arm64@2.5.1", "", { "os": "android", "cpu": "arm64" }, "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA=="], @@ -1236,6 +1261,8 @@ "builtins": ["builtins@5.1.0", "", { "dependencies": { "semver": "^7.0.0" } }, "sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg=="], + "bun": ["bun@1.2.11", "", { "optionalDependencies": { "@oven/bun-darwin-aarch64": "1.2.11", "@oven/bun-darwin-x64": "1.2.11", "@oven/bun-darwin-x64-baseline": "1.2.11", "@oven/bun-linux-aarch64": "1.2.11", "@oven/bun-linux-aarch64-musl": "1.2.11", "@oven/bun-linux-x64": "1.2.11", "@oven/bun-linux-x64-baseline": "1.2.11", "@oven/bun-linux-x64-musl": "1.2.11", "@oven/bun-linux-x64-musl-baseline": "1.2.11", "@oven/bun-windows-x64": "1.2.11", "@oven/bun-windows-x64-baseline": "1.2.11" }, "os": [ "linux", "win32", "darwin", ], "cpu": [ "x64", "arm64", ], "bin": { "bun": "bin/bun.exe", "bunx": "bin/bun.exe" } }, "sha512-9brVfsp6/TYVsE3lCl1MUxoyKhvljqyL1MNPErgwsOaS9g4Gzi2nY+W5WtRAXGzLrgz5jzsoGHHwyH/rTeRCIg=="], + "busboy": ["busboy@0.3.1", "", { "dependencies": { "dicer": "0.3.0" } }, "sha512-y7tTxhGKXcyBxRKAni+awqx8uqaJKrSFSNFSeRG5CsWNdmy2BIK+6VGWEW7TZnIO/533mtMEA4rOevQV815YJw=="], "bytes": ["bytes@3.1.2", "", {}, "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="], diff --git a/config-schema/package.json b/config-schema/package.json index 28e9494c2..22c17000c 100644 --- a/config-schema/package.json +++ b/config-schema/package.json @@ -23,6 +23,7 @@ "devDependencies": { "@biomejs/biome": "1.9.4", "@types/node": "^17.0.21", + "bun": "^1.2.11", "esbuild": "^0.25.2", "typescript": "^4.9.5" }, diff --git a/database/package.json b/database/package.json index caba9ab98..086ffe6ef 100644 --- a/database/package.json +++ b/database/package.json @@ -15,26 +15,26 @@ "license": "Apache-2.0", "private": false, "scripts": { - "build": "tsx ./esbuild.config.ts", + "build": "bun ./esbuild.config.ts", "typecheck": "tsc --noEmit", - "up": "cross-env TZ=UTC tsx src/index.ts up", - "down": "cross-env TZ=UTC tsx src/index.ts down", - "reset": "cross-env TZ=UTC tsx src/index.ts reset", - "clear": "cross-env TZ=UTC tsx src/index.ts clear", + "up": "cross-env TZ=UTC bun src/index.ts up", + "down": "cross-env TZ=UTC bun src/index.ts down", + "reset": "cross-env TZ=UTC bun src/index.ts reset", + "clear": "cross-env TZ=UTC bun src/index.ts clear", "lint": "biome check --error-on-warnings .", "lint:fix": "biome check --error-on-warnings . --write", - "up:backend_test": "cross-env TZ=UTC DB_DATABASE=gradido_test_backend tsx src/index.ts up", - "up:federation_test": "cross-env TZ=UTC DB_DATABASE=gradido_test_federation tsx src/index.ts up", - "up:dht_test": "cross-env TZ=UTC DB_DATABASE=gradido_test_dht tsx src/index.ts up" + "up:backend_test": "cross-env TZ=UTC DB_DATABASE=gradido_test_backend bun src/index.ts up", + "up:federation_test": "cross-env TZ=UTC DB_DATABASE=gradido_test_federation bun src/index.ts up", + "up:dht_test": "cross-env TZ=UTC DB_DATABASE=gradido_test_dht bun src/index.ts up" }, "devDependencies": { "@biomejs/biome": "1.9.4", "@types/faker": "^5.5.9", "@types/geojson": "^7946.0.13", "@types/node": "^17.0.21", + "bun": "^1.2.11", "esbuild": "^0.25.2", "prettier": "^2.8.7", - "tsx": "^4.19.3", "typescript": "^4.9.5" }, "dependencies": { diff --git a/dht-node/Dockerfile b/dht-node/Dockerfile index 00e781ec4..e57914d8d 100644 --- a/dht-node/Dockerfile +++ b/dht-node/Dockerfile @@ -94,7 +94,7 @@ CMD /bin/sh -c "turbo dht-node#test --env-mode=loose" FROM base as production # Copy "binary"-files from build image -COPY --chown=app:app --from=installer ${DOCKER_WORKDIR}/dht-node/build/src/index.js ./index.js +COPY --chown=app:app --from=installer ${DOCKER_WORKDIR}/dht-node/build/index.js ./index.js # We also install the native node_modules which cannot be bundled # TODO: find a elegant way to use the right versions from yarn.lock diff --git a/dht-node/package.json b/dht-node/package.json index 4e12032fe..84b50cf96 100644 --- a/dht-node/package.json +++ b/dht-node/package.json @@ -8,9 +8,9 @@ "license": "Apache-2.0", "private": false, "scripts": { - "build": "tsx esbuild.config.ts", - "start": "cross-env TZ=UTC node build/index.js", - "dev": "cross-env TZ=UTC tsx watch src/index.ts", + "build": "bun esbuild.config.ts", + "start": "cross-env TZ=UTC bun build/index.js", + "dev": "cross-env TZ=UTC bun --hot src/index.ts", "typecheck": "tsc --noEmit", "lint": "biome check --error-on-warnings .", "lint:fix": "biome check --error-on-warnings . --write", @@ -28,17 +28,18 @@ "uuid": "^8.3.2" }, "devDependencies": { - "@types/jest": "27.5.1", - "@types/node": "^17.0.21", - "@types/uuid": "^8.3.4", "@biomejs/biome": "1.9.4", "@types/dotenv": "^8.2.0", + "@types/jest": "27.5.1", "@types/joi": "^17.2.3", + "@types/node": "^17.0.21", + "@types/uuid": "^8.3.4", + "bun": "^1.2.11", "esbuild": "^0.25.2", "jest": "27.5.1", "prettier": "^2.8.7", - "tsx": "^4.19.3", "ts-jest": "27.1.4", + "tsx": "^4.19.3", "typescript": "^4.9.4" }, "engines": { diff --git a/federation/Dockerfile b/federation/Dockerfile index e22a98f67..e08ba2a4a 100644 --- a/federation/Dockerfile +++ b/federation/Dockerfile @@ -93,7 +93,7 @@ CMD /bin/sh -c "turbo federation#test --env-mode=loose" FROM base as production # Copy "binary"-files from build image -COPY --chown=app:app --from=installer ${DOCKER_WORKDIR}/federation/build/src/index.js ./index.js +COPY --chown=app:app --from=installer ${DOCKER_WORKDIR}/federation/build/index.js ./index.js # We also install the native node_modules which cannot be bundled # TODO: find a elegant way to use the right versions from yarn.lock diff --git a/federation/package.json b/federation/package.json index f4e7f1235..2d6f74a52 100644 --- a/federation/package.json +++ b/federation/package.json @@ -8,9 +8,9 @@ "license": "Apache-2.0", "private": false, "scripts": { - "build": "tsx esbuild.config.ts", - "start": "cross-env TZ=UTC node build/index.js", - "dev": "cross-env TZ=UTC tsx watch src/index.ts", + "build": "bun esbuild.config.ts", + "start": "cross-env TZ=UTC bun build/index.js", + "dev": "cross-env TZ=UTC bun --hot src/index.ts", "typecheck": "tsc --noEmit", "test": "cross-env TZ=UTC NODE_ENV=development DB_DATABASE=gradido_test_federation jest --runInBand --forceExit --detectOpenHandles", "lint": "biome check --error-on-warnings .", @@ -50,6 +50,7 @@ "@types/sodium-native": "^2.3.5", "@types/uuid": "^8.3.4", "apollo-server-testing": "2.25.2", + "bun": "^1.2.11", "esbuild": "^0.25.2", "graphql-tag": "^2.12.6", "jest": "27.2.4", diff --git a/yarn.lock b/yarn.lock index 526c35245..b26133772 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1478,6 +1478,61 @@ resolved "https://registry.yarnpkg.com/@one-ini/wasm/-/wasm-0.1.1.tgz#6013659736c9dbfccc96e8a9c2b3de317df39323" integrity sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw== +"@oven/bun-darwin-aarch64@1.2.11": + version "1.2.11" + resolved "https://registry.yarnpkg.com/@oven/bun-darwin-aarch64/-/bun-darwin-aarch64-1.2.11.tgz#c9331e918d7ed235d459a76183eb2040c5655f92" + integrity sha512-LN7gshxqEHJ1LA0B43Z56Ts3LxRjp2LrIz45FIgeKWE81PYglR9NMNou90gFuYlUtMyarSk6MV9Jdvo2kFnn8Q== + +"@oven/bun-darwin-x64-baseline@1.2.11": + version "1.2.11" + resolved "https://registry.yarnpkg.com/@oven/bun-darwin-x64-baseline/-/bun-darwin-x64-baseline-1.2.11.tgz#82793c47a3e5ef162eaed704968e486d24f85ce4" + integrity sha512-ksZJzq0Id3YsGcs++QnL1oGYjqY5XNihR0MscZ+M4YYruvVKHKim9Aql46+TI55YmKD810HVpeLolIeeTl2JUg== + +"@oven/bun-darwin-x64@1.2.11": + version "1.2.11" + resolved "https://registry.yarnpkg.com/@oven/bun-darwin-x64/-/bun-darwin-x64-1.2.11.tgz#ca476d3f1081a3f4467f9ce32a83362634668508" + integrity sha512-AmmlGdQmzORFeUZRa2Ki9UWYTt5ZGUwTp0z+H0uR4bYHy7sQhpDbNKtZcfKKuLRQ6P23DKc3Lpo+yhR0cg7prg== + +"@oven/bun-linux-aarch64-musl@1.2.11": + version "1.2.11" + resolved "https://registry.yarnpkg.com/@oven/bun-linux-aarch64-musl/-/bun-linux-aarch64-musl-1.2.11.tgz#f6301215469271c9766180deabc30de59e399a84" + integrity sha512-A/h7WxC2GbNus8fupz5EHsD8YugG19uW9GQWDf4tk0YWYuSaUOCP14JYbXbiJ48OFELWNchEc/2azajH+votbA== + +"@oven/bun-linux-aarch64@1.2.11": + version "1.2.11" + resolved "https://registry.yarnpkg.com/@oven/bun-linux-aarch64/-/bun-linux-aarch64-1.2.11.tgz#302e52e9495777fd614f8653043d256c25323e2f" + integrity sha512-jNQ5F6o9qC/KNhBnyxnjVRfiTxZB7thvZ7T+oPZSNh1IV8UWDunEGmUdOqSqoPsigpXHRjbV3DKJKN+YaPQCCA== + +"@oven/bun-linux-x64-baseline@1.2.11": + version "1.2.11" + resolved "https://registry.yarnpkg.com/@oven/bun-linux-x64-baseline/-/bun-linux-x64-baseline-1.2.11.tgz#47ef9ac80b61468051dd32c41588297ee770559e" + integrity sha512-xswex8EPmzX8BqbNXpiwgrpDkaD/FMIaxD85EIBaaksi6I8nln2kzEmlO/uVhbFAn9PPWydi3Q+FCcNnJGRazQ== + +"@oven/bun-linux-x64-musl-baseline@1.2.11": + version "1.2.11" + resolved "https://registry.yarnpkg.com/@oven/bun-linux-x64-musl-baseline/-/bun-linux-x64-musl-baseline-1.2.11.tgz#55367cc107e3fe889f2a0d77972a0c571b23168e" + integrity sha512-YYglLgFkHwNMjECCyM/kZDUZa6UW3ssVtg5k6+8QU1Rp5cPF+0SBlGGTr5ho2lFkNn/ylKmwyuqE1tB45zgVvA== + +"@oven/bun-linux-x64-musl@1.2.11": + version "1.2.11" + resolved "https://registry.yarnpkg.com/@oven/bun-linux-x64-musl/-/bun-linux-x64-musl-1.2.11.tgz#b9ce1b8a3faa797da91c5ca05467323dd1cd5be0" + integrity sha512-yF1Urgsy8xkQu8iAd03ORxuZ/DWrNPCST2r1EVIwjHuzpZ3o2odKjnE9Hnwsq+wcWdCRsakqL/muILB/9aCxeQ== + +"@oven/bun-linux-x64@1.2.11": + version "1.2.11" + resolved "https://registry.yarnpkg.com/@oven/bun-linux-x64/-/bun-linux-x64-1.2.11.tgz#92fc67493587c2b5249f8145954b36bacca55e3a" + integrity sha512-6pH556SgOR2UOgWQfEiYI3DWgkm7T+L9fmBe2dfEYrKCEu/TbXZXOJeMi943NSMIiT3q2gVwlCEdoxZwedQs4A== + +"@oven/bun-windows-x64-baseline@1.2.11": + version "1.2.11" + resolved "https://registry.yarnpkg.com/@oven/bun-windows-x64-baseline/-/bun-windows-x64-baseline-1.2.11.tgz#cb33ed8c8b5240f7dacd7e794dd411853dea64f7" + integrity sha512-uzappBblyA3GlX0PDENU1HTPZR82tzPuNd5jumTiDQ22FZmc2ZqCYTIZ/ngwHKOHDD6Rxdsux8+9EXgVS51G2w== + +"@oven/bun-windows-x64@1.2.11": + version "1.2.11" + resolved "https://registry.yarnpkg.com/@oven/bun-windows-x64/-/bun-windows-x64-1.2.11.tgz#9c91880f0047b9cd555a6fe4826d86b506c7a5cf" + integrity sha512-5mGVsGSS8JWBq8IHXGvFJ7rlET4XCUdDTKEaLLq3O1YaqyZZiPMQFnU70MfkpjPe4stRDZ+/NWBRNDMaNTYQxw== + "@parcel/watcher-android-arm64@2.5.1": version "2.5.1" resolved "https://registry.yarnpkg.com/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz#507f836d7e2042f798c7d07ad19c3546f9848ac1" @@ -3700,6 +3755,23 @@ builtins@^5.0.1: dependencies: semver "^7.0.0" +bun@^1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/bun/-/bun-1.2.11.tgz#eb423adada0b562a04b30a3224c11657f5d99bc1" + integrity sha512-9brVfsp6/TYVsE3lCl1MUxoyKhvljqyL1MNPErgwsOaS9g4Gzi2nY+W5WtRAXGzLrgz5jzsoGHHwyH/rTeRCIg== + optionalDependencies: + "@oven/bun-darwin-aarch64" "1.2.11" + "@oven/bun-darwin-x64" "1.2.11" + "@oven/bun-darwin-x64-baseline" "1.2.11" + "@oven/bun-linux-aarch64" "1.2.11" + "@oven/bun-linux-aarch64-musl" "1.2.11" + "@oven/bun-linux-x64" "1.2.11" + "@oven/bun-linux-x64-baseline" "1.2.11" + "@oven/bun-linux-x64-musl" "1.2.11" + "@oven/bun-linux-x64-musl-baseline" "1.2.11" + "@oven/bun-windows-x64" "1.2.11" + "@oven/bun-windows-x64-baseline" "1.2.11" + busboy@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/busboy/-/busboy-0.3.1.tgz#170899274c5bf38aae27d5c62b71268cd585fd1b" From e5abb9e2263433a6a69bede021df0f40d5cf436a Mon Sep 17 00:00:00 2001 From: Einhornimmond Date: Sat, 3 May 2025 07:11:20 +0200 Subject: [PATCH 059/123] add build:bun (experimental) slightly faster and smaller as esbuild --- config-schema/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config-schema/package.json b/config-schema/package.json index 22c17000c..b1ad43a9c 100644 --- a/config-schema/package.json +++ b/config-schema/package.json @@ -16,6 +16,7 @@ "private": true, "scripts": { "build": "esbuild src/index.ts --outdir=build --platform=node --target=node18.20.7 --bundle --packages=external", + "build:bun": "bun build --outdir=build --platform=bun --bundle --packages=external src/index.ts", "typecheck": "tsc --noEmit", "lint": "biome check --error-on-warnings .", "lint:fix": "biome check --error-on-warnings . --write" @@ -23,7 +24,6 @@ "devDependencies": { "@biomejs/biome": "1.9.4", "@types/node": "^17.0.21", - "bun": "^1.2.11", "esbuild": "^0.25.2", "typescript": "^4.9.5" }, From 0484ce037e68b17def86fa635b2ab977f02c7924 Mon Sep 17 00:00:00 2001 From: Einhornimmond Date: Sat, 3 May 2025 07:28:09 +0200 Subject: [PATCH 060/123] add bun:build to database --- database/bun.build.ts | 26 ++++++++++++++++++++++++++ database/package.json | 19 +++++++++++-------- 2 files changed, 37 insertions(+), 8 deletions(-) create mode 100644 database/bun.build.ts diff --git a/database/bun.build.ts b/database/bun.build.ts new file mode 100644 index 000000000..20ba3d74d --- /dev/null +++ b/database/bun.build.ts @@ -0,0 +1,26 @@ +import fs from 'node:fs' +import { latestDbVersion } from './src/config/detectLastDBVersion' + +await Bun.build({ + entrypoints: ['entity/index.ts'], + bundle: true, + target: 'bun', + packages: 'external', + outdir: './build', + plugins: [ + { + // hardcode last db version string into index.ts, before parsing + name: 'replace-latest-db-version-import', + setup(build) { + build.onLoad({ filter: /index\.ts$/ }, async (args) => { + let source = await fs.promises.readFile(args.path, 'utf8') + source = source.replace( + /import\s*\{\s*latestDbVersion\s*\}\s*from\s*['"][^'"]+['"]/, + `const latestDbVersion = "${latestDbVersion}";`, + ) + return { contents: source, loader: 'ts' } + }) + }, + }, + ], +}) diff --git a/database/package.json b/database/package.json index 086ffe6ef..6979a3428 100644 --- a/database/package.json +++ b/database/package.json @@ -15,26 +15,29 @@ "license": "Apache-2.0", "private": false, "scripts": { - "build": "bun ./esbuild.config.ts", + "build": "tsx ./esbuild.config.ts", + "build:bun": "bun ./bun.build.ts", "typecheck": "tsc --noEmit", - "up": "cross-env TZ=UTC bun src/index.ts up", - "down": "cross-env TZ=UTC bun src/index.ts down", - "reset": "cross-env TZ=UTC bun src/index.ts reset", - "clear": "cross-env TZ=UTC bun src/index.ts clear", + "up": "cross-env TZ=UTC tsx src/index.ts up", + "down": "cross-env TZ=UTC tsx src/index.ts down", + "reset": "cross-env TZ=UTC tsx src/index.ts reset", + "clear": "cross-env TZ=UTC tsx src/index.ts clear", "lint": "biome check --error-on-warnings .", "lint:fix": "biome check --error-on-warnings . --write", - "up:backend_test": "cross-env TZ=UTC DB_DATABASE=gradido_test_backend bun src/index.ts up", - "up:federation_test": "cross-env TZ=UTC DB_DATABASE=gradido_test_federation bun src/index.ts up", - "up:dht_test": "cross-env TZ=UTC DB_DATABASE=gradido_test_dht bun src/index.ts up" + "up:backend_test": "cross-env TZ=UTC DB_DATABASE=gradido_test_backend tsx src/index.ts up", + "up:federation_test": "cross-env TZ=UTC DB_DATABASE=gradido_test_federation tsx src/index.ts up", + "up:dht_test": "cross-env TZ=UTC DB_DATABASE=gradido_test_dht tsx src/index.ts up" }, "devDependencies": { "@biomejs/biome": "1.9.4", + "@types/bun": "^1.2.11", "@types/faker": "^5.5.9", "@types/geojson": "^7946.0.13", "@types/node": "^17.0.21", "bun": "^1.2.11", "esbuild": "^0.25.2", "prettier": "^2.8.7", + "tsx": "^4.19.4", "typescript": "^4.9.5" }, "dependencies": { From a55ee8a1bb7d39bc896558a1d6d8a5e96b373778 Mon Sep 17 00:00:00 2001 From: Einhornimmond Date: Sat, 3 May 2025 07:47:58 +0200 Subject: [PATCH 061/123] remove bun for database, bun isn't compatible with current entity setup, joins lead to circular includes --- database/bun.build.ts | 26 -------------------------- database/package.json | 2 -- 2 files changed, 28 deletions(-) delete mode 100644 database/bun.build.ts diff --git a/database/bun.build.ts b/database/bun.build.ts deleted file mode 100644 index 20ba3d74d..000000000 --- a/database/bun.build.ts +++ /dev/null @@ -1,26 +0,0 @@ -import fs from 'node:fs' -import { latestDbVersion } from './src/config/detectLastDBVersion' - -await Bun.build({ - entrypoints: ['entity/index.ts'], - bundle: true, - target: 'bun', - packages: 'external', - outdir: './build', - plugins: [ - { - // hardcode last db version string into index.ts, before parsing - name: 'replace-latest-db-version-import', - setup(build) { - build.onLoad({ filter: /index\.ts$/ }, async (args) => { - let source = await fs.promises.readFile(args.path, 'utf8') - source = source.replace( - /import\s*\{\s*latestDbVersion\s*\}\s*from\s*['"][^'"]+['"]/, - `const latestDbVersion = "${latestDbVersion}";`, - ) - return { contents: source, loader: 'ts' } - }) - }, - }, - ], -}) diff --git a/database/package.json b/database/package.json index 6979a3428..0c00c46c7 100644 --- a/database/package.json +++ b/database/package.json @@ -16,7 +16,6 @@ "private": false, "scripts": { "build": "tsx ./esbuild.config.ts", - "build:bun": "bun ./bun.build.ts", "typecheck": "tsc --noEmit", "up": "cross-env TZ=UTC tsx src/index.ts up", "down": "cross-env TZ=UTC tsx src/index.ts down", @@ -34,7 +33,6 @@ "@types/faker": "^5.5.9", "@types/geojson": "^7946.0.13", "@types/node": "^17.0.21", - "bun": "^1.2.11", "esbuild": "^0.25.2", "prettier": "^2.8.7", "tsx": "^4.19.4", From a867bfb72b8b6092590429e165abc743f8f54e82 Mon Sep 17 00:00:00 2001 From: Einhornimmond Date: Sat, 3 May 2025 07:57:34 +0200 Subject: [PATCH 062/123] dht-node replace tsx with bun, dev with bun, but build with esbuild --- dht-node/package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/dht-node/package.json b/dht-node/package.json index 84b50cf96..666b8bd69 100644 --- a/dht-node/package.json +++ b/dht-node/package.json @@ -39,7 +39,6 @@ "jest": "27.5.1", "prettier": "^2.8.7", "ts-jest": "27.1.4", - "tsx": "^4.19.3", "typescript": "^4.9.4" }, "engines": { From e80414f315541435023b1ebe3e791bf1b0cec027 Mon Sep 17 00:00:00 2001 From: Einhornimmond Date: Sat, 3 May 2025 08:00:58 +0200 Subject: [PATCH 063/123] update package lock files --- bun.lock | 68 ++++++++++++++++++++++++++++++++++++------- yarn.lock | 87 ++++++++++++++++++++++++++++++++++++++++++++++++++----- 2 files changed, 136 insertions(+), 19 deletions(-) diff --git a/bun.lock b/bun.lock index ce2c061de..069e87da9 100644 --- a/bun.lock +++ b/bun.lock @@ -140,8 +140,10 @@ "graphql-tag": "^2.12.6", "jest": "27.2.4", "klicktipp-api": "^1.0.2", + "nodemon": "^2.0.7", "prettier": "^3.5.3", "ts-jest": "27.0.5", + "tsconfig-paths": "^4.1.1", "typescript": "^4.9.5", }, }, @@ -177,12 +179,13 @@ }, "devDependencies": { "@biomejs/biome": "1.9.4", + "@types/bun": "^1.2.11", "@types/faker": "^5.5.9", "@types/geojson": "^7946.0.13", "@types/node": "^17.0.21", - "bun": "^1.2.11", "esbuild": "^0.25.2", "prettier": "^2.8.7", + "tsx": "^4.19.4", "typescript": "^4.9.5", }, }, @@ -212,7 +215,6 @@ "jest": "27.5.1", "prettier": "^2.8.7", "ts-jest": "27.1.4", - "tsx": "^4.19.3", "typescript": "^4.9.4", }, }, @@ -245,6 +247,7 @@ "uuid": "8.3.2", }, "devDependencies": { + "@anatine/esbuild-decorators": "^0.2.19", "@biomejs/biome": "1.9.4", "@types/express": "4.17.21", "@types/jest": "27.0.2", @@ -259,6 +262,7 @@ "jest": "27.2.4", "prettier": "^3.5.3", "ts-jest": "27.0.5", + "tsx": "^4.19.4", "typescript": "^4.9.5", }, }, @@ -825,6 +829,8 @@ "@types/body-parser": ["@types/body-parser@1.19.5", "", { "dependencies": { "@types/connect": "*", "@types/node": "*" } }, "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg=="], + "@types/bun": ["@types/bun@1.2.11", "", { "dependencies": { "bun-types": "1.2.11" } }, "sha512-ZLbbI91EmmGwlWTRWuV6J19IUiUC5YQ3TCEuSHI3usIP75kuoA8/0PVF+LTrbEnVc8JIhpElWOxv1ocI1fJBbw=="], + "@types/connect": ["@types/connect@3.4.38", "", { "dependencies": { "@types/node": "*" } }, "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug=="], "@types/content-disposition": ["@types/content-disposition@0.5.8", "", {}, "sha512-QVSSvno3dE0MgO76pJhmv4Qyi/j0Yk9pBp0Y7TJ2Tlj+KCgJWY6qX7nnxCOLkZ3VYRSIk1WTxCvwUSdx6CCLdg=="], @@ -1263,6 +1269,8 @@ "bun": ["bun@1.2.11", "", { "optionalDependencies": { "@oven/bun-darwin-aarch64": "1.2.11", "@oven/bun-darwin-x64": "1.2.11", "@oven/bun-darwin-x64-baseline": "1.2.11", "@oven/bun-linux-aarch64": "1.2.11", "@oven/bun-linux-aarch64-musl": "1.2.11", "@oven/bun-linux-x64": "1.2.11", "@oven/bun-linux-x64-baseline": "1.2.11", "@oven/bun-linux-x64-musl": "1.2.11", "@oven/bun-linux-x64-musl-baseline": "1.2.11", "@oven/bun-windows-x64": "1.2.11", "@oven/bun-windows-x64-baseline": "1.2.11" }, "os": [ "linux", "win32", "darwin", ], "cpu": [ "x64", "arm64", ], "bin": { "bun": "bin/bun.exe", "bunx": "bin/bun.exe" } }, "sha512-9brVfsp6/TYVsE3lCl1MUxoyKhvljqyL1MNPErgwsOaS9g4Gzi2nY+W5WtRAXGzLrgz5jzsoGHHwyH/rTeRCIg=="], + "bun-types": ["bun-types@1.2.11", "", { "dependencies": { "@types/node": "*" } }, "sha512-dbkp5Lo8HDrXkLrONm6bk+yiiYQSntvFUzQp0v3pzTAsXk6FtgVMjdQ+lzFNVAmQFUkPQZ3WMZqH5tTo+Dp/IA=="], + "busboy": ["busboy@0.3.1", "", { "dependencies": { "dicer": "0.3.0" } }, "sha512-y7tTxhGKXcyBxRKAni+awqx8uqaJKrSFSNFSeRG5CsWNdmy2BIK+6VGWEW7TZnIO/533mtMEA4rOevQV815YJw=="], "bytes": ["bytes@3.1.2", "", {}, "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="], @@ -1869,6 +1877,8 @@ "ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], + "ignore-by-default": ["ignore-by-default@1.0.1", "", {}, "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA=="], + "immutable": ["immutable@5.1.1", "", {}, "sha512-3jatXi9ObIsPGr3N5hGw/vWWcTkq6hUYhpQz4k0wLC+owqWi/LiugIw9x0EdNZ2yGedKN/HzePiBvaJRXa0Ujg=="], "import-cwd": ["import-cwd@3.0.0", "", { "dependencies": { "import-from": "^3.0.0" } }, "sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg=="], @@ -2279,6 +2289,8 @@ "nodemailer": ["nodemailer@6.10.1", "", {}, "sha512-Z+iLaBGVaSjbIzQ4pX6XV41HrooLsQ10ZWPUehGmuantvzWoDVBnmsdUcOIDM1t+yPor5pDhVlDESgOMEGxhHA=="], + "nodemon": ["nodemon@2.0.22", "", { "dependencies": { "chokidar": "^3.5.2", "debug": "^3.2.7", "ignore-by-default": "^1.0.1", "minimatch": "^3.1.2", "pstree.remy": "^1.1.8", "semver": "^5.7.1", "simple-update-notifier": "^1.0.7", "supports-color": "^5.5.0", "touch": "^3.1.0", "undefsafe": "^2.0.5" }, "bin": { "nodemon": "bin/nodemon.js" } }, "sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ=="], + "noise-curve-ed": ["noise-curve-ed@2.1.0", "", { "dependencies": { "b4a": "^1.1.0", "nanoassert": "^2.0.0", "sodium-universal": "^5.0.0" } }, "sha512-zAzJx+VwZM3w6EA1hTmDhJfvAnCeBQn/1FAeZ0LtGxCcCtlAK/uJXQVF/eDVUOaAZ286lHlx77WJ+qj9SmsRRg=="], "noise-handshake": ["noise-handshake@3.1.0", "", { "dependencies": { "b4a": "^1.1.0", "nanoassert": "^2.0.0", "sodium-universal": "^4.0.0" } }, "sha512-0S1qkUvMbTvZCfgr/vSkVT84YyvI4Q0OLwSc5BFxVmjaePrxAwVeXeJDY3A7N/7+qj95gZ15LaNoP9ZnBXH5Lw=="], @@ -2449,6 +2461,8 @@ "psl": ["psl@1.15.0", "", { "dependencies": { "punycode": "^2.3.1" } }, "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w=="], + "pstree.remy": ["pstree.remy@1.1.8", "", {}, "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w=="], + "pug": ["pug@3.0.3", "", { "dependencies": { "pug-code-gen": "^3.0.3", "pug-filters": "^4.0.0", "pug-lexer": "^5.0.1", "pug-linker": "^4.0.0", "pug-load": "^3.0.0", "pug-parser": "^6.0.0", "pug-runtime": "^3.0.1", "pug-strip-comments": "^2.0.0" } }, "sha512-uBi6kmc9f3SZ3PXxqcHiUZLmIXgfgWooKWXcwSGwQd2Zi5Rb0bT14+8CJjJgI8AB+nndLaNgHGrcc6bPIB665g=="], "pug-attrs": ["pug-attrs@3.0.0", "", { "dependencies": { "constantinople": "^4.0.1", "js-stringify": "^1.0.2", "pug-runtime": "^3.0.0" } }, "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA=="], @@ -2631,6 +2645,8 @@ "signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], + "simple-update-notifier": ["simple-update-notifier@1.1.0", "", { "dependencies": { "semver": "~7.0.0" } }, "sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg=="], + "sisteransi": ["sisteransi@1.0.5", "", {}, "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg=="], "slash": ["slash@3.0.0", "", {}, "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q=="], @@ -2721,7 +2737,7 @@ "superjson": ["superjson@2.2.2", "", { "dependencies": { "copy-anything": "^3.0.2" } }, "sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q=="], - "supports-color": ["supports-color@8.1.1", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="], + "supports-color": ["supports-color@5.5.0", "", { "dependencies": { "has-flag": "^3.0.0" } }, "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow=="], "supports-hyperlinks": ["supports-hyperlinks@3.2.0", "", { "dependencies": { "has-flag": "^4.0.0", "supports-color": "^7.0.0" } }, "sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig=="], @@ -2791,6 +2807,8 @@ "toposort": ["toposort@2.0.2", "", {}, "sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg=="], + "touch": ["touch@3.1.1", "", { "bin": { "nodetouch": "bin/nodetouch.js" } }, "sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA=="], + "tough-cookie": ["tough-cookie@5.1.2", "", { "dependencies": { "tldts": "^6.1.32" } }, "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A=="], "tr46": ["tr46@5.1.1", "", { "dependencies": { "punycode": "^2.3.1" } }, "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw=="], @@ -2809,11 +2827,11 @@ "ts-node": ["ts-node@10.9.2", "", { "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", "@tsconfig/node12": "^1.0.7", "@tsconfig/node14": "^1.0.0", "@tsconfig/node16": "^1.0.2", "acorn": "^8.4.1", "acorn-walk": "^8.1.1", "arg": "^4.1.0", "create-require": "^1.1.0", "diff": "^4.0.1", "make-error": "^1.1.1", "v8-compile-cache-lib": "^3.0.1", "yn": "3.1.1" }, "peerDependencies": { "@swc/core": ">=1.2.50", "@swc/wasm": ">=1.2.50", "@types/node": "*", "typescript": ">=2.7" }, "optionalPeers": ["@swc/core", "@swc/wasm"], "bin": { "ts-node": "dist/bin.js", "ts-script": "dist/bin-script-deprecated.js", "ts-node-cwd": "dist/bin-cwd.js", "ts-node-esm": "dist/bin-esm.js", "ts-node-script": "dist/bin-script.js", "ts-node-transpile-only": "dist/bin-transpile.js" } }, "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ=="], - "tsconfig-paths": ["tsconfig-paths@3.15.0", "", { "dependencies": { "@types/json5": "^0.0.29", "json5": "^1.0.2", "minimist": "^1.2.6", "strip-bom": "^3.0.0" } }, "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg=="], + "tsconfig-paths": ["tsconfig-paths@4.2.0", "", { "dependencies": { "json5": "^2.2.2", "minimist": "^1.2.6", "strip-bom": "^3.0.0" } }, "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg=="], "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], - "tsx": ["tsx@4.19.3", "", { "dependencies": { "esbuild": "~0.25.0", "get-tsconfig": "^4.7.5" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "bin": { "tsx": "dist/cli.mjs" } }, "sha512-4H8vUNGNjQ4V2EOoGw005+c+dGuPSnhpPBPHBtsZdGZBk/iJb4kguGlPWaZTZ3q5nMtFOEsY0nRDlh9PJyd6SQ=="], + "tsx": ["tsx@4.19.4", "", { "dependencies": { "esbuild": "~0.25.0", "get-tsconfig": "^4.7.5" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "bin": { "tsx": "dist/cli.mjs" } }, "sha512-gK5GVzDkJK1SI1zwHf32Mqxf2tSJkNx+eYcNly5+nHvWqXUJYUkWBQtKauoESz3ymezAI++ZwT855x5p5eop+Q=="], "tua-body-scroll-lock": ["tua-body-scroll-lock@1.5.3", "", {}, "sha512-44W12iqek41kZuTdpEUt3JTUsMx0IxfTajXWfQyMLgzsPaMYUPZLcJkwa4P0x24h5DQ3lYvDuYvphBo4+L0t4w=="], @@ -2871,6 +2889,8 @@ "unctx": ["unctx@2.4.1", "", { "dependencies": { "acorn": "^8.14.0", "estree-walker": "^3.0.3", "magic-string": "^0.30.17", "unplugin": "^2.1.0" } }, "sha512-AbaYw0Nm4mK4qjhns67C+kgxR2YWiwlDBPzxrN8h8C6VtAdCgditAY5Dezu3IJy4XVqAnbrXt9oQJvsn3fyozg=="], + "undefsafe": ["undefsafe@2.0.5", "", {}, "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA=="], + "underscore": ["underscore@1.13.7", "", {}, "sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g=="], "underscore.deep": ["underscore.deep@0.5.3", "", { "peerDependencies": { "underscore": "1.x" } }, "sha512-4OuSOlFNkiVFVc3khkeG112Pdu1gbitMj7t9B9ENb61uFmN70Jq7Iluhi3oflcSgexkKfDdJ5XAJET2gEq6ikA=="], @@ -3263,6 +3283,8 @@ "brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], + "bun-types/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "c12/confbox": ["confbox@0.2.2", "", {}, "sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ=="], "c12/dotenv": ["dotenv@16.5.0", "", {}, "sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg=="], @@ -3287,6 +3309,8 @@ "citty/consola": ["consola@3.4.2", "", {}, "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA=="], + "concurrently/supports-color": ["supports-color@8.1.1", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="], + "css-select/domhandler": ["domhandler@4.3.1", "", { "dependencies": { "domelementtype": "^2.2.0" } }, "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ=="], "css-select/domutils": ["domutils@2.8.0", "", { "dependencies": { "dom-serializer": "^1.0.1", "domelementtype": "^2.2.0", "domhandler": "^4.2.0" } }, "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A=="], @@ -3325,6 +3349,8 @@ "eslint-plugin-import/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + "eslint-plugin-import/tsconfig-paths": ["tsconfig-paths@3.15.0", "", { "dependencies": { "@types/json5": "^0.0.29", "json5": "^1.0.2", "minimist": "^1.2.6", "strip-bom": "^3.0.0" } }, "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg=="], + "eslint-plugin-node/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "eslint-plugin-vue/eslint-utils": ["eslint-utils@3.0.0", "", { "dependencies": { "eslint-visitor-keys": "^2.0.0" }, "peerDependencies": { "eslint": ">=5" } }, "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA=="], @@ -3411,6 +3437,8 @@ "jest-worker/jest-util": ["jest-util@29.7.0", "", { "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", "graceful-fs": "^4.2.9", "picomatch": "^2.2.3" } }, "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA=="], + "jest-worker/supports-color": ["supports-color@8.1.1", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="], + "js-beautify/glob": ["glob@10.4.5", "", { "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", "minimatch": "^9.0.4", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" } }, "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg=="], "jsdom/parse5": ["parse5@7.3.0", "", { "dependencies": { "entities": "^6.0.0" } }, "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw=="], @@ -3439,6 +3467,12 @@ "node-fetch/whatwg-url": ["whatwg-url@5.0.0", "", { "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw=="], + "nodemon/chokidar": ["chokidar@3.6.0", "", { "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw=="], + + "nodemon/debug": ["debug@3.2.7", "", { "dependencies": { "ms": "^2.1.1" } }, "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="], + + "nodemon/semver": ["semver@5.7.2", "", { "bin": { "semver": "bin/semver" } }, "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g=="], + "noise-curve-ed/sodium-universal": ["sodium-universal@5.0.1", "", { "dependencies": { "sodium-native": "^5.0.1" }, "peerDependencies": { "sodium-javascript": "~0.8.0" }, "optionalPeers": ["sodium-javascript"] }, "sha512-rv+aH+tnKB5H0MAc2UadHShLMslpJsc4wjdnHRtiSIEYpOetCgu8MS4ExQRia+GL/MK3uuCyZPeEsi+J3h+Q+Q=="], "nypm/consola": ["consola@3.4.2", "", {}, "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA=="], @@ -3479,6 +3513,8 @@ "send/encodeurl": ["encodeurl@1.0.2", "", {}, "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w=="], + "simple-update-notifier/semver": ["semver@7.0.0", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A=="], + "sodium-secretstream/sodium-universal": ["sodium-universal@5.0.1", "", { "dependencies": { "sodium-native": "^5.0.1" }, "peerDependencies": { "sodium-javascript": "~0.8.0" }, "optionalPeers": ["sodium-javascript"] }, "sha512-rv+aH+tnKB5H0MAc2UadHShLMslpJsc4wjdnHRtiSIEYpOetCgu8MS4ExQRia+GL/MK3uuCyZPeEsi+J3h+Q+Q=="], "sodium-universal/sodium-native": ["sodium-native@4.3.3", "", { "dependencies": { "require-addon": "^1.1.0" } }, "sha512-OnxSlN3uyY8D0EsLHpmm2HOFmKddQVvEMmsakCrXUzSd8kjjbzL413t4ZNF3n0UxSwNgwTyUvkmZHTfuCeiYSw=="], @@ -3511,6 +3547,8 @@ "subscriptions-transport-ws/ws": ["ws@7.5.10", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": "^5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ=="], + "supports-color/has-flag": ["has-flag@3.0.0", "", {}, "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw=="], + "supports-hyperlinks/supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], "table/ajv": ["ajv@8.17.1", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g=="], @@ -3529,8 +3567,6 @@ "tinyglobby/picomatch": ["picomatch@4.0.2", "", {}, "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg=="], - "tsconfig-paths/json5": ["json5@1.0.2", "", { "dependencies": { "minimist": "^1.2.0" }, "bin": { "json5": "lib/cli.js" } }, "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA=="], - "type-graphql/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], "typeorm/dotenv": ["dotenv@16.5.0", "", {}, "sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg=="], @@ -3629,6 +3665,8 @@ "@istanbuljs/load-nyc-config/js-yaml/argparse": ["argparse@1.0.10", "", { "dependencies": { "sprintf-js": "~1.0.2" } }, "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg=="], + "@jest/reporters/jest-worker/supports-color": ["supports-color@8.1.1", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="], + "@jest/transform/write-file-atomic/signal-exit": ["signal-exit@3.0.7", "", {}, "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="], "@nuxt/kit/pkg-types/confbox": ["confbox@0.2.2", "", {}, "sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ=="], @@ -3667,6 +3705,8 @@ "editorconfig/minimatch/brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="], + "eslint-plugin-import/tsconfig-paths/json5": ["json5@1.0.2", "", { "dependencies": { "minimist": "^1.2.0" }, "bin": { "json5": "lib/cli.js" } }, "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA=="], + "eslint-plugin-vue/eslint-utils/eslint-visitor-keys": ["eslint-visitor-keys@2.1.0", "", {}, "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw=="], "express/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], @@ -3717,6 +3757,10 @@ "jest-environment-jsdom/jsdom/xml-name-validator": ["xml-name-validator@3.0.0", "", {}, "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw=="], + "jest-haste-map/jest-worker/supports-color": ["supports-color@8.1.1", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="], + + "jest-runner/jest-worker/supports-color": ["supports-color@8.1.1", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="], + "jest-worker/jest-util/@jest/types": ["@jest/types@29.6.3", "", { "dependencies": { "@jest/schemas": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", "@types/yargs": "^17.0.8", "chalk": "^4.0.0" } }, "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw=="], "js-beautify/glob/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], @@ -3731,6 +3775,10 @@ "node-fetch/whatwg-url/webidl-conversions": ["webidl-conversions@3.0.1", "", {}, "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="], + "nodemon/chokidar/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], + + "nodemon/chokidar/readdirp": ["readdirp@3.6.0", "", { "dependencies": { "picomatch": "^2.2.1" } }, "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA=="], + "noise-curve-ed/sodium-universal/sodium-native": ["sodium-native@5.0.1", "", { "dependencies": { "require-addon": "^1.1.0", "which-runtime": "^1.2.1" } }, "sha512-Q305aUXc0OzK7VVRvWkeEQJQIHs6slhFwWpyqLB5iJqhpyt2lYIVu96Y6PQ7TABIlWXVF3YiWDU3xS2Snkus+g=="], "nypm/pkg-types/confbox": ["confbox@0.2.2", "", {}, "sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ=="], @@ -3765,6 +3813,8 @@ "terser-webpack-plugin/jest-worker/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "terser-webpack-plugin/jest-worker/supports-color": ["supports-color@8.1.1", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="], + "test-exclude/minimatch/brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="], "typeorm/glob/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], @@ -3829,8 +3879,6 @@ "vue-apollo/chalk/escape-string-regexp": ["escape-string-regexp@1.0.5", "", {}, "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg=="], - "vue-apollo/chalk/supports-color": ["supports-color@5.5.0", "", { "dependencies": { "has-flag": "^3.0.0" } }, "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow=="], - "web-resource-inliner/htmlparser2/domhandler": ["domhandler@3.3.0", "", { "dependencies": { "domelementtype": "^2.0.1" } }, "sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA=="], "web-resource-inliner/htmlparser2/domutils": ["domutils@2.8.0", "", { "dependencies": { "dom-serializer": "^1.0.1", "domelementtype": "^2.2.0", "domhandler": "^4.2.0" } }, "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A=="], @@ -3901,8 +3949,6 @@ "vue-apollo/chalk/ansi-styles/color-convert": ["color-convert@1.9.3", "", { "dependencies": { "color-name": "1.1.3" } }, "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg=="], - "vue-apollo/chalk/supports-color/has-flag": ["has-flag@3.0.0", "", {}, "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw=="], - "web-resource-inliner/htmlparser2/domutils/dom-serializer": ["dom-serializer@1.4.1", "", { "dependencies": { "domelementtype": "^2.0.1", "domhandler": "^4.2.0", "entities": "^2.0.0" } }, "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag=="], "web-resource-inliner/htmlparser2/domutils/domhandler": ["domhandler@4.3.1", "", { "dependencies": { "domelementtype": "^2.2.0" } }, "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ=="], diff --git a/yarn.lock b/yarn.lock index b26133772..54f9a55ee 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1930,6 +1930,13 @@ "@types/connect" "*" "@types/node" "*" +"@types/bun@^1.2.11": + version "1.2.11" + resolved "https://registry.yarnpkg.com/@types/bun/-/bun-1.2.11.tgz#44e9e941fa246a96b5cf5bdce7e733976e5cfb7a" + integrity sha512-ZLbbI91EmmGwlWTRWuV6J19IUiUC5YQ3TCEuSHI3usIP75kuoA8/0PVF+LTrbEnVc8JIhpElWOxv1ocI1fJBbw== + dependencies: + bun-types "1.2.11" + "@types/connect@*": version "3.4.38" resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.38.tgz#5ba7f3bc4fbbdeaff8dded952e5ff2cc53f8d858" @@ -3755,6 +3762,13 @@ builtins@^5.0.1: dependencies: semver "^7.0.0" +bun-types@1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/bun-types/-/bun-types-1.2.11.tgz#98b480e0271b1ea6f0161db2712a359e5b3828fe" + integrity sha512-dbkp5Lo8HDrXkLrONm6bk+yiiYQSntvFUzQp0v3pzTAsXk6FtgVMjdQ+lzFNVAmQFUkPQZ3WMZqH5tTo+Dp/IA== + dependencies: + "@types/node" "*" + bun@^1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/bun/-/bun-1.2.11.tgz#eb423adada0b562a04b30a3224c11657f5d99bc1" @@ -3946,7 +3960,7 @@ cheerio@1.0.0-rc.10: parse5-htmlparser2-tree-adapter "^6.0.1" tslib "^2.2.0" -chokidar@^3.6.0: +chokidar@^3.5.2, chokidar@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== @@ -6440,6 +6454,11 @@ ieee754@^1.2.1: resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== +ignore-by-default@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" + integrity sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA== + ignore@^5.0.5, ignore@^5.1.1, ignore@^5.2.0, ignore@^5.2.4: version "5.3.2" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" @@ -7491,7 +7510,7 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== -json5@2.x, json5@^2.1.3, json5@^2.2.3: +json5@2.x, json5@^2.1.3, json5@^2.2.2, json5@^2.2.3: version "2.2.3" resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== @@ -8214,6 +8233,22 @@ nodemailer@^6.6.5, nodemailer@^6.7.7, nodemailer@^6.9.13: resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-6.10.1.tgz#cbc434c54238f83a51c07eabd04e2b3e832da623" integrity sha512-Z+iLaBGVaSjbIzQ4pX6XV41HrooLsQ10ZWPUehGmuantvzWoDVBnmsdUcOIDM1t+yPor5pDhVlDESgOMEGxhHA== +nodemon@^2.0.7: + version "2.0.22" + resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-2.0.22.tgz#182c45c3a78da486f673d6c1702e00728daf5258" + integrity sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ== + dependencies: + chokidar "^3.5.2" + debug "^3.2.7" + ignore-by-default "^1.0.1" + minimatch "^3.1.2" + pstree.remy "^1.1.8" + semver "^5.7.1" + simple-update-notifier "^1.0.7" + supports-color "^5.5.0" + touch "^3.1.0" + undefsafe "^2.0.5" + noise-curve-ed@^2.0.0, noise-curve-ed@^2.0.1: version "2.1.0" resolved "https://registry.yarnpkg.com/noise-curve-ed/-/noise-curve-ed-2.1.0.tgz#38ab0748439baa0f21d49c78d7b8be3d5bb94f42" @@ -8908,6 +8943,11 @@ psl@^1.1.33: dependencies: punycode "^2.3.1" +pstree.remy@^1.1.8: + version "1.1.8" + resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a" + integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== + pug-attrs@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pug-attrs/-/pug-attrs-3.0.0.tgz#b10451e0348165e31fad1cc23ebddd9dc7347c41" @@ -9485,7 +9525,7 @@ semver@7.x, semver@^7.0.0, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^ resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.1.tgz#abd5098d82b18c6c81f6074ff2647fd3e7220c9f" integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA== -semver@^5.5.0: +semver@^5.5.0, semver@^5.7.1: version "5.7.2" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== @@ -9495,6 +9535,11 @@ semver@^6.1.0, semver@^6.3.0, semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== +semver@~7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" + integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== + send@0.19.0: version "0.19.0" resolved "https://registry.yarnpkg.com/send/-/send-0.19.0.tgz#bbc5a388c8ea6c048967049dbeac0e4a3f09d7f8" @@ -9676,6 +9721,13 @@ signal-exit@^4.0.1: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== +simple-update-notifier@^1.0.7: + version "1.1.0" + resolved "https://registry.yarnpkg.com/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz#67694c121de354af592b347cdba798463ed49c82" + integrity sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg== + dependencies: + semver "~7.0.0" + sisteransi@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" @@ -10099,7 +10151,7 @@ superjson@^2.2.2: dependencies: copy-anything "^3.0.2" -supports-color@^5.3.0: +supports-color@^5.3.0, supports-color@^5.5.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== @@ -10361,6 +10413,11 @@ toposort@^2.0.2: resolved "https://registry.yarnpkg.com/toposort/-/toposort-2.0.2.tgz#ae21768175d1559d48bef35420b2f4962f09c330" integrity sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg== +touch@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.1.tgz#097a23d7b161476435e5c1344a95c0f75b4a5694" + integrity sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA== + tough-cookie@^4.0.0: version "4.1.4" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.4.tgz#945f1461b45b5a8c76821c33ea49c3ac192c1b36" @@ -10477,6 +10534,15 @@ tsconfig-paths@^3.15.0: minimist "^1.2.6" strip-bom "^3.0.0" +tsconfig-paths@^4.1.1: + version "4.2.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz#ef78e19039133446d244beac0fd6a1632e2d107c" + integrity sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg== + dependencies: + json5 "^2.2.2" + minimist "^1.2.6" + strip-bom "^3.0.0" + tslib@^1.10.0, tslib@^1.9.3: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" @@ -10487,10 +10553,10 @@ tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.2.0, tslib@^2.3.0, tslib@^2.5 resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== -tsx@^4.19.3: - version "4.19.3" - resolved "https://registry.yarnpkg.com/tsx/-/tsx-4.19.3.tgz#2bdbcb87089374d933596f8645615142ed727666" - integrity sha512-4H8vUNGNjQ4V2EOoGw005+c+dGuPSnhpPBPHBtsZdGZBk/iJb4kguGlPWaZTZ3q5nMtFOEsY0nRDlh9PJyd6SQ== +tsx@^4.19.4: + version "4.19.4" + resolved "https://registry.yarnpkg.com/tsx/-/tsx-4.19.4.tgz#647b4141f4fdd9d773a9b564876773d2846901f4" + integrity sha512-gK5GVzDkJK1SI1zwHf32Mqxf2tSJkNx+eYcNly5+nHvWqXUJYUkWBQtKauoESz3ymezAI++ZwT855x5p5eop+Q== dependencies: esbuild "~0.25.0" get-tsconfig "^4.7.5" @@ -10733,6 +10799,11 @@ unctx@^2.4.1: magic-string "^0.30.17" unplugin "^2.1.0" +undefsafe@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.5.tgz#38733b9327bdcd226db889fb723a6efd162e6e2c" + integrity sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA== + underscore.deep@~0.5.1: version "0.5.3" resolved "https://registry.yarnpkg.com/underscore.deep/-/underscore.deep-0.5.3.tgz#210969d58025339cecabd2a2ad8c3e8925e5c095" From 3c041cdd044365bbd89051d562b4281e9b873303 Mon Sep 17 00:00:00 2001 From: Einhornimmond Date: Sat, 3 May 2025 08:01:34 +0200 Subject: [PATCH 064/123] add bun in package.json --- config-schema/package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/config-schema/package.json b/config-schema/package.json index b1ad43a9c..6eb4d3086 100644 --- a/config-schema/package.json +++ b/config-schema/package.json @@ -24,6 +24,7 @@ "devDependencies": { "@biomejs/biome": "1.9.4", "@types/node": "^17.0.21", + "bun": "^1.2.11", "esbuild": "^0.25.2", "typescript": "^4.9.5" }, From 381181a756286ad81b6fb3bb20f98d43c83e04a8 Mon Sep 17 00:00:00 2001 From: Einhornimmond Date: Sat, 3 May 2025 08:03:14 +0200 Subject: [PATCH 065/123] make bun default and only build system for config --- config-schema/package.json | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/config-schema/package.json b/config-schema/package.json index 6eb4d3086..0fa00d80d 100644 --- a/config-schema/package.json +++ b/config-schema/package.json @@ -15,8 +15,7 @@ "license": "Apache-2.0", "private": true, "scripts": { - "build": "esbuild src/index.ts --outdir=build --platform=node --target=node18.20.7 --bundle --packages=external", - "build:bun": "bun build --outdir=build --platform=bun --bundle --packages=external src/index.ts", + "build": "bun build --outdir=build --platform=bun --bundle --packages=external src/index.ts", "typecheck": "tsc --noEmit", "lint": "biome check --error-on-warnings .", "lint:fix": "biome check --error-on-warnings . --write" @@ -25,7 +24,6 @@ "@biomejs/biome": "1.9.4", "@types/node": "^17.0.21", "bun": "^1.2.11", - "esbuild": "^0.25.2", "typescript": "^4.9.5" }, "dependencies": { From d8a6f1529b3d1526b914027f29e89efdf9d951b0 Mon Sep 17 00:00:00 2001 From: Einhornimmond Date: Sat, 3 May 2025 18:45:14 +0200 Subject: [PATCH 066/123] mid-work --- backend/package.json | 4 +++- bun.lock | 11 ----------- config-schema/package.json | 7 ++++--- database/package.json | 6 ++---- dht-node/package.json | 3 +-- federation/esbuild.config.ts | 13 ------------- federation/package.json | 8 +++----- federation/tsconfig.json | 2 +- yarn.lock | 14 -------------- 9 files changed, 14 insertions(+), 54 deletions(-) delete mode 100644 federation/esbuild.config.ts diff --git a/backend/package.json b/backend/package.json index c1ec995e4..0b91c441e 100644 --- a/backend/package.json +++ b/backend/package.json @@ -10,7 +10,7 @@ "scripts": { "build": "bun esbuild.config.ts", "start": "cross-env TZ=UTC NODE_ENV=production bun build/index.js", - "dev": "cross-env TZ=UTC bun --hot src/index.ts", + "dev": "cross-env TZ=UTC nodemon -w src --ext ts,pug,json,css --exec ts-node -r tsconfig-paths/register src/index.ts", "typecheck": "tsc --noEmit", "lint": "biome check --error-on-warnings .", "lint:fix": "biome check --error-on-warnings . --write", @@ -78,7 +78,9 @@ "graphql-tag": "^2.12.6", "jest": "27.2.4", "klicktipp-api": "^1.0.2", + "nodemon": "^2.0.7", "prettier": "^3.5.3", + "tsconfig-paths": "^4.1.1", "ts-jest": "27.0.5", "typescript": "^4.9.5" }, diff --git a/bun.lock b/bun.lock index 069e87da9..4d5cd0b88 100644 --- a/bun.lock +++ b/bun.lock @@ -157,7 +157,6 @@ "@biomejs/biome": "1.9.4", "@types/node": "^17.0.21", "bun": "^1.2.11", - "esbuild": "^0.25.2", "typescript": "^4.9.5", }, }, @@ -179,7 +178,6 @@ }, "devDependencies": { "@biomejs/biome": "1.9.4", - "@types/bun": "^1.2.11", "@types/faker": "^5.5.9", "@types/geojson": "^7946.0.13", "@types/node": "^17.0.21", @@ -247,7 +245,6 @@ "uuid": "8.3.2", }, "devDependencies": { - "@anatine/esbuild-decorators": "^0.2.19", "@biomejs/biome": "1.9.4", "@types/express": "4.17.21", "@types/jest": "27.0.2", @@ -256,8 +253,6 @@ "@types/sodium-native": "^2.3.5", "@types/uuid": "^8.3.4", "apollo-server-testing": "2.25.2", - "bun": "^1.2.11", - "esbuild": "^0.25.2", "graphql-tag": "^2.12.6", "jest": "27.2.4", "prettier": "^3.5.3", @@ -829,8 +824,6 @@ "@types/body-parser": ["@types/body-parser@1.19.5", "", { "dependencies": { "@types/connect": "*", "@types/node": "*" } }, "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg=="], - "@types/bun": ["@types/bun@1.2.11", "", { "dependencies": { "bun-types": "1.2.11" } }, "sha512-ZLbbI91EmmGwlWTRWuV6J19IUiUC5YQ3TCEuSHI3usIP75kuoA8/0PVF+LTrbEnVc8JIhpElWOxv1ocI1fJBbw=="], - "@types/connect": ["@types/connect@3.4.38", "", { "dependencies": { "@types/node": "*" } }, "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug=="], "@types/content-disposition": ["@types/content-disposition@0.5.8", "", {}, "sha512-QVSSvno3dE0MgO76pJhmv4Qyi/j0Yk9pBp0Y7TJ2Tlj+KCgJWY6qX7nnxCOLkZ3VYRSIk1WTxCvwUSdx6CCLdg=="], @@ -1269,8 +1262,6 @@ "bun": ["bun@1.2.11", "", { "optionalDependencies": { "@oven/bun-darwin-aarch64": "1.2.11", "@oven/bun-darwin-x64": "1.2.11", "@oven/bun-darwin-x64-baseline": "1.2.11", "@oven/bun-linux-aarch64": "1.2.11", "@oven/bun-linux-aarch64-musl": "1.2.11", "@oven/bun-linux-x64": "1.2.11", "@oven/bun-linux-x64-baseline": "1.2.11", "@oven/bun-linux-x64-musl": "1.2.11", "@oven/bun-linux-x64-musl-baseline": "1.2.11", "@oven/bun-windows-x64": "1.2.11", "@oven/bun-windows-x64-baseline": "1.2.11" }, "os": [ "linux", "win32", "darwin", ], "cpu": [ "x64", "arm64", ], "bin": { "bun": "bin/bun.exe", "bunx": "bin/bun.exe" } }, "sha512-9brVfsp6/TYVsE3lCl1MUxoyKhvljqyL1MNPErgwsOaS9g4Gzi2nY+W5WtRAXGzLrgz5jzsoGHHwyH/rTeRCIg=="], - "bun-types": ["bun-types@1.2.11", "", { "dependencies": { "@types/node": "*" } }, "sha512-dbkp5Lo8HDrXkLrONm6bk+yiiYQSntvFUzQp0v3pzTAsXk6FtgVMjdQ+lzFNVAmQFUkPQZ3WMZqH5tTo+Dp/IA=="], - "busboy": ["busboy@0.3.1", "", { "dependencies": { "dicer": "0.3.0" } }, "sha512-y7tTxhGKXcyBxRKAni+awqx8uqaJKrSFSNFSeRG5CsWNdmy2BIK+6VGWEW7TZnIO/533mtMEA4rOevQV815YJw=="], "bytes": ["bytes@3.1.2", "", {}, "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="], @@ -3283,8 +3274,6 @@ "brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], - "bun-types/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], - "c12/confbox": ["confbox@0.2.2", "", {}, "sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ=="], "c12/dotenv": ["dotenv@16.5.0", "", {}, "sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg=="], diff --git a/config-schema/package.json b/config-schema/package.json index 0fa00d80d..f3ceed498 100644 --- a/config-schema/package.json +++ b/config-schema/package.json @@ -4,6 +4,7 @@ "description": "Gradido Config for validate config", "main": "./build/index.js", "types": "./src/index.ts", + "type": "module", "exports": { ".": { "import": "./build/index.js", @@ -15,7 +16,7 @@ "license": "Apache-2.0", "private": true, "scripts": { - "build": "bun build --outdir=build --platform=bun --bundle --packages=external src/index.ts", + "build": "esbuild src/index.ts --outdir=build --platform=node --target=node18.20.7 --bundle --packages=external", "typecheck": "tsc --noEmit", "lint": "biome check --error-on-warnings .", "lint:fix": "biome check --error-on-warnings . --write" @@ -23,11 +24,11 @@ "devDependencies": { "@biomejs/biome": "1.9.4", "@types/node": "^17.0.21", - "bun": "^1.2.11", "typescript": "^4.9.5" }, "dependencies": { - "joi": "^17.13.3" + "joi": "^17.13.3", + "esbuild": "^0.25.2" }, "engines": { "node": ">=18" diff --git a/database/package.json b/database/package.json index 0c00c46c7..c4b9b5fca 100644 --- a/database/package.json +++ b/database/package.json @@ -29,24 +29,22 @@ }, "devDependencies": { "@biomejs/biome": "1.9.4", - "@types/bun": "^1.2.11", "@types/faker": "^5.5.9", "@types/geojson": "^7946.0.13", "@types/node": "^17.0.21", - "esbuild": "^0.25.2", - "prettier": "^2.8.7", - "tsx": "^4.19.4", "typescript": "^4.9.5" }, "dependencies": { "@types/uuid": "^8.3.4", "cross-env": "^7.0.3", "decimal.js-light": "^2.5.1", + "esbuild": "^0.25.2", "dotenv": "^10.0.0", "geojson": "^0.5.0", "mysql2": "^2.3.0", "reflect-metadata": "^0.1.13", "ts-mysql-migrate": "^1.0.2", + "tsx": "^4.19.4", "typeorm": "^0.3.16", "uuid": "^8.3.2", "wkx": "^0.5.0" diff --git a/dht-node/package.json b/dht-node/package.json index 666b8bd69..145f15585 100644 --- a/dht-node/package.json +++ b/dht-node/package.json @@ -22,6 +22,7 @@ "cross-env": "^7.0.3", "database": "*", "dotenv": "10.0.0", + "esbuild": "^0.25.2", "joi": "^17.13.3", "log4js": "^6.7.1", "typeorm": "^0.3.16", @@ -34,8 +35,6 @@ "@types/joi": "^17.2.3", "@types/node": "^17.0.21", "@types/uuid": "^8.3.4", - "bun": "^1.2.11", - "esbuild": "^0.25.2", "jest": "27.5.1", "prettier": "^2.8.7", "ts-jest": "27.1.4", diff --git a/federation/esbuild.config.ts b/federation/esbuild.config.ts deleted file mode 100644 index 38ca5b58d..000000000 --- a/federation/esbuild.config.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { build } from 'esbuild' - -build({ - entryPoints: ['src/index.ts'], - outdir: 'build', - platform: 'node', - target: 'node18.20.7', - bundle: true, - keepNames: true, - // legalComments: 'inline', - external: ['sodium-native'], - minify: true, -}) diff --git a/federation/package.json b/federation/package.json index 2d6f74a52..68d37b5cd 100644 --- a/federation/package.json +++ b/federation/package.json @@ -6,10 +6,10 @@ "repository": "https://github.com/gradido/gradido/federation", "author": "Gradido Academy - https://www.gradido.net", "license": "Apache-2.0", + "private": false, "scripts": { - "build": "bun esbuild.config.ts", - "start": "cross-env TZ=UTC bun build/index.js", + "start": "cross-env TZ=UTC bun src/index.ts", "dev": "cross-env TZ=UTC bun --hot src/index.ts", "typecheck": "tsc --noEmit", "test": "cross-env TZ=UTC NODE_ENV=development DB_DATABASE=gradido_test_federation jest --runInBand --forceExit --detectOpenHandles", @@ -41,7 +41,7 @@ "typeorm": "^0.3.16", "uuid": "8.3.2" }, - "devDependencies": { + "devDependencies": { "@biomejs/biome": "1.9.4", "@types/express": "4.17.21", "@types/jest": "27.0.2", @@ -50,8 +50,6 @@ "@types/sodium-native": "^2.3.5", "@types/uuid": "^8.3.4", "apollo-server-testing": "2.25.2", - "bun": "^1.2.11", - "esbuild": "^0.25.2", "graphql-tag": "^2.12.6", "jest": "27.2.4", "prettier": "^3.5.3", diff --git a/federation/tsconfig.json b/federation/tsconfig.json index 8bdf9906a..f72262d8e 100644 --- a/federation/tsconfig.json +++ b/federation/tsconfig.json @@ -83,5 +83,5 @@ /* Advanced Options */ "skipLibCheck": true, /* Skip type checking of declaration files. */ "forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */ - } + }, } diff --git a/yarn.lock b/yarn.lock index 54f9a55ee..c092ac4e9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1930,13 +1930,6 @@ "@types/connect" "*" "@types/node" "*" -"@types/bun@^1.2.11": - version "1.2.11" - resolved "https://registry.yarnpkg.com/@types/bun/-/bun-1.2.11.tgz#44e9e941fa246a96b5cf5bdce7e733976e5cfb7a" - integrity sha512-ZLbbI91EmmGwlWTRWuV6J19IUiUC5YQ3TCEuSHI3usIP75kuoA8/0PVF+LTrbEnVc8JIhpElWOxv1ocI1fJBbw== - dependencies: - bun-types "1.2.11" - "@types/connect@*": version "3.4.38" resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.38.tgz#5ba7f3bc4fbbdeaff8dded952e5ff2cc53f8d858" @@ -3762,13 +3755,6 @@ builtins@^5.0.1: dependencies: semver "^7.0.0" -bun-types@1.2.11: - version "1.2.11" - resolved "https://registry.yarnpkg.com/bun-types/-/bun-types-1.2.11.tgz#98b480e0271b1ea6f0161db2712a359e5b3828fe" - integrity sha512-dbkp5Lo8HDrXkLrONm6bk+yiiYQSntvFUzQp0v3pzTAsXk6FtgVMjdQ+lzFNVAmQFUkPQZ3WMZqH5tTo+Dp/IA== - dependencies: - "@types/node" "*" - bun@^1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/bun/-/bun-1.2.11.tgz#eb423adada0b562a04b30a3224c11657f5d99bc1" From 273a0209da0e055baa0e137d20f5b09666ba85f0 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Sun, 4 May 2025 06:50:03 +0200 Subject: [PATCH 067/123] put back build:bun --- config-schema/package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/config-schema/package.json b/config-schema/package.json index f3ceed498..534c91b9a 100644 --- a/config-schema/package.json +++ b/config-schema/package.json @@ -17,6 +17,7 @@ "private": true, "scripts": { "build": "esbuild src/index.ts --outdir=build --platform=node --target=node18.20.7 --bundle --packages=external", + "build:bun": "bun build src/index.ts --outdir=build --target=bun --packages=external", "typecheck": "tsc --noEmit", "lint": "biome check --error-on-warnings .", "lint:fix": "biome check --error-on-warnings . --write" From b3643209e4d7eb260dcb88e4ffabebffcf07a10d Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Sun, 4 May 2025 07:43:00 +0200 Subject: [PATCH 068/123] make bun compatible and also compatible with higher graphql version --- federation/src/graphql/api/1_0/schema.ts | 14 ++++++++++++++ federation/src/graphql/api/1_1/schema.ts | 14 ++++++++++++++ federation/src/graphql/api/schema.ts | 17 ++++++++++++++--- federation/src/graphql/schema.ts | 2 +- 4 files changed, 43 insertions(+), 4 deletions(-) create mode 100644 federation/src/graphql/api/1_0/schema.ts create mode 100644 federation/src/graphql/api/1_1/schema.ts diff --git a/federation/src/graphql/api/1_0/schema.ts b/federation/src/graphql/api/1_0/schema.ts new file mode 100644 index 000000000..9d106fefc --- /dev/null +++ b/federation/src/graphql/api/1_0/schema.ts @@ -0,0 +1,14 @@ +import { NonEmptyArray } from 'type-graphql' +import { AuthenticationResolver } from './resolver/AuthenticationResolver' +import { PublicCommunityInfoResolver } from './resolver/PublicCommunityInfoResolver' +import { PublicKeyResolver } from './resolver/PublicKeyResolver' +import { SendCoinsResolver } from './resolver/SendCoinsResolver' + +export const getApiResolvers = (): NonEmptyArray => { + return [ + AuthenticationResolver, + PublicCommunityInfoResolver, + PublicKeyResolver, + SendCoinsResolver, + ] +} diff --git a/federation/src/graphql/api/1_1/schema.ts b/federation/src/graphql/api/1_1/schema.ts new file mode 100644 index 000000000..dc16ad475 --- /dev/null +++ b/federation/src/graphql/api/1_1/schema.ts @@ -0,0 +1,14 @@ +import { NonEmptyArray } from 'type-graphql' +import { AuthenticationResolver } from "../1_0/resolver/AuthenticationResolver" +import { PublicCommunityInfoResolver } from "../1_0/resolver/PublicCommunityInfoResolver" +import { SendCoinsResolver } from "../1_0/resolver/SendCoinsResolver" +import { PublicKeyResolver } from "./resolver/PublicKeyResolver" + +export const getApiResolvers = (): NonEmptyArray => { + return [ + AuthenticationResolver, + PublicCommunityInfoResolver, + PublicKeyResolver, + SendCoinsResolver, + ] +} \ No newline at end of file diff --git a/federation/src/graphql/api/schema.ts b/federation/src/graphql/api/schema.ts index 84e756af3..661e203d2 100644 --- a/federation/src/graphql/api/schema.ts +++ b/federation/src/graphql/api/schema.ts @@ -1,9 +1,20 @@ -import path from 'node:path' import { federationLogger as logger } from '@/server/logger' +import { NonEmptyArray } from 'type-graphql' // config import { CONFIG } from '../../config' +import { getApiResolvers as getApiResolvers_1_0 } from './1_0/schema' +import { getApiResolvers as getApiResolvers_1_1 } from './1_1/schema' -export const getApiResolvers = (): string => { +export const getApiResolvers = (): NonEmptyArray => { logger.info(`getApiResolvers...${CONFIG.FEDERATION_API}`) - return path.join(__dirname, `./${CONFIG.FEDERATION_API}/resolver/*Resolver.{ts,js}`) + + if (CONFIG.FEDERATION_API === '1_0') { + return getApiResolvers_1_0() + } + + if (CONFIG.FEDERATION_API === '1_1') { + return getApiResolvers_1_1() + } + + throw new Error(`Unknown API version: ${CONFIG.FEDERATION_API}`) } diff --git a/federation/src/graphql/schema.ts b/federation/src/graphql/schema.ts index 64a35dd76..a5d498048 100644 --- a/federation/src/graphql/schema.ts +++ b/federation/src/graphql/schema.ts @@ -8,7 +8,7 @@ import { DecimalScalar } from './scalar/Decimal' export const schema = async (): Promise => { return await buildSchema({ - resolvers: [getApiResolvers()], + resolvers: getApiResolvers(), // authChecker: isAuthorized, scalarsMap: [{ type: Decimal, scalar: DecimalScalar }], /* From 9ce8c27a34b8aa5959725d5d3b02e026b037486e Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Sun, 4 May 2025 10:24:33 +0200 Subject: [PATCH 069/123] add readme, full config --- backend/.gitignore | 1 + backend/Dockerfile | 6 +- backend/README.md | 4 - backend/esbuild.config.ts | 2 +- backend/package.json | 30 +- backend/src/graphql/schema.ts | 31 +- backend/src/server/localization.ts | 3 +- backend/tsconfig.json | 4 + bun.lock | 290 ++++++++-- config-schema/README.md | 4 + config-schema/package.json | 1 - database/README.md | 46 +- dht-node/Dockerfile | 2 +- dht-node/README.md | 9 + dht-node/package.json | 23 +- federation/Dockerfile | 2 +- federation/README.md | 13 + federation/esbuild.config.ts | 15 + federation/package.json | 9 +- yarn.lock | 878 +++++++++++++++++++++++++---- 20 files changed, 1174 insertions(+), 199 deletions(-) create mode 100644 config-schema/README.md create mode 100644 dht-node/README.md create mode 100644 federation/README.md create mode 100644 federation/esbuild.config.ts diff --git a/backend/.gitignore b/backend/.gitignore index 6eadcc884..5435dd5ff 100644 --- a/backend/.gitignore +++ b/backend/.gitignore @@ -2,6 +2,7 @@ /.env /.env.bak /build/ +/locales/ package-json.lock coverage # emacs diff --git a/backend/Dockerfile b/backend/Dockerfile index 0344322da..4dee9953c 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -96,12 +96,14 @@ FROM base as production # Copy "binary"-files from build image COPY --chown=app:app --from=installer ${DOCKER_WORKDIR}/backend/build/index.js ./index.js -RUN yarn add sodium-native@4.0.0 \ +RUN yarn add sodium-native@4.0.0 email-templates@10.0.1 \ && rm -rf /tmp/* ~/.cache node_modules/.cache \ && yarn cache clean # Copy log4js-config.json to provide log configuration COPY --chown=app:app --from=installer ${DOCKER_WORKDIR}/backend/log4js-config.json ./log4js-config.json +# Copy locales +COPY --chown=app:app --from=installer ${DOCKER_WORKDIR}/backend/locales ./locales # Run command -CMD ["node", "index.js"] \ No newline at end of file +CMD ["TZ=UTC", "node", "index.js"] \ No newline at end of file diff --git a/backend/README.md b/backend/README.md index b27ab16d9..6305e8a96 100644 --- a/backend/README.md +++ b/backend/README.md @@ -2,10 +2,6 @@ ## Project setup -```bash -yarn install -``` - ## Seed DB ```bash diff --git a/backend/esbuild.config.ts b/backend/esbuild.config.ts index a475d3b52..73d0a0c12 100644 --- a/backend/esbuild.config.ts +++ b/backend/esbuild.config.ts @@ -9,7 +9,7 @@ build({ bundle: true, keepNames: true, // legalComments: 'inline', - external: ['reflect-metadata', 'sodium-native', 'email-templates'], + external: ['sodium-native', 'email-templates'], plugins: [esbuildDecorators()], minify: true, }) diff --git a/backend/package.json b/backend/package.json index 0b91c441e..3af929fe8 100644 --- a/backend/package.json +++ b/backend/package.json @@ -8,20 +8,23 @@ "license": "Apache-2.0", "private": false, "scripts": { - "build": "bun esbuild.config.ts", - "start": "cross-env TZ=UTC NODE_ENV=production bun build/index.js", - "dev": "cross-env TZ=UTC nodemon -w src --ext ts,pug,json,css --exec ts-node -r tsconfig-paths/register src/index.ts", + "build": "ts-node ./esbuild.config.ts && mkdirp build/templates/ && ncp src/emails/templates build/templates && mkdirp locales/ && ncp src/locales locales", + "clean": "tsc --build --clean", + "start:node": "cross-env TZ=UTC NODE_ENV=production TS_NODE_BASEURL=./build node -r tsconfig-paths/register build/src/index.js", + "start": "cross-env TZ=UTC NODE_ENV=production node build/index.js", + "dev": "cross-env TZ=UTC nodemon -w src --ext ts,pug,json,css -r tsconfig-paths/register src/index.ts", "typecheck": "tsc --noEmit", "lint": "biome check --error-on-warnings .", "lint:fix": "biome check --error-on-warnings . --write", "test": "cross-env TZ=UTC NODE_ENV=development DB_DATABASE=gradido_test_backend jest --runInBand --forceExit --detectOpenHandles", - "seed": "cross-env TZ=UTC NODE_ENV=development bun src/seeds/index.ts", - "klicktipp": "cross-env TZ=UTC NODE_ENV=development bun src/util/executeKlicktipp.ts", - "gmsusers": "cross-env TZ=UTC NODE_ENV=development bun src/apis/gms/ExportUsers.ts", - "humhubUserExport": "cross-env TZ=UTC NODE_ENV=development bun src/apis/humhub/ExportUsers.ts", + "seed": "cross-env TZ=UTC NODE_ENV=development ts-node -r tsconfig-paths/register src/seeds/index.ts", + "klicktipp": "cross-env TZ=UTC NODE_ENV=development ts-node -r tsconfig-paths/register src/util/executeKlicktipp.ts", + "gmsusers": "cross-env TZ=UTC NODE_ENV=development ts-node -r tsconfig-paths/register src/apis/gms/ExportUsers.ts", + "humhubUserExport": "cross-env TZ=UTC NODE_ENV=development ts-node -r tsconfig-paths/register src/apis/humhub/ExportUsers.ts", "locales": "scripts/sort.sh" }, "dependencies": { + "@anatine/esbuild-decorators": "^0.2.19", "apollo-server-express": "^2.25.2", "await-semaphore": "^0.1.3", "axios": "^0.21.1", @@ -33,6 +36,7 @@ "decimal.js-light": "^2.5.1", "dotenv": "^10.0.0", "email-templates": "^10.0.1", + "esbuild": "^0.25.2", "express": "^4.17.21", "express-slow-down": "^2.0.1", "graphql": "^15.10.1", @@ -45,13 +49,16 @@ "jose": "^4.14.4", "lodash.clonedeep": "^4.5.0", "log4js": "^6.7.1", - "mysql2": "^2.3.0", + "mkdirp": "^3.0.1", + "ncp": "^2.0.0", "nodemailer": "^6.6.5", "openai": "^4.87.3", "pug": "^3.0.2", "random-bigint": "^0.0.1", "reflect-metadata": "^0.1.13", "sodium-native": "^3.4.1", + "ts-node": "^10.9.2", + "tsconfig-paths": "^4.1.1", "type-graphql": "^1.1.1", "typed-rest-client": "^1.8.11", "typeorm": "^0.3.16", @@ -60,8 +67,10 @@ "xregexp": "^5.1.1" }, "devDependencies": { - "@anatine/esbuild-decorators": "^0.2.19", "@biomejs/biome": "1.9.4", + "@swc/cli": "^0.7.3", + "@swc/core": "^1.11.24", + "@swc/helpers": "^0.5.17", "@types/email-templates": "^10.0.4", "@types/express": "^4.17.21", "@types/faker": "^5.5.9", @@ -73,14 +82,13 @@ "@types/sodium-native": "^2.3.5", "@types/uuid": "^8.3.4", "apollo-server-testing": "^2.25.2", - "esbuild": "^0.25.2", "faker": "^5.5.3", "graphql-tag": "^2.12.6", "jest": "27.2.4", "klicktipp-api": "^1.0.2", "nodemon": "^2.0.7", "prettier": "^3.5.3", - "tsconfig-paths": "^4.1.1", + "regenerator-runtime": "^0.14.1", "ts-jest": "27.0.5", "typescript": "^4.9.5" }, diff --git a/backend/src/graphql/schema.ts b/backend/src/graphql/schema.ts index bcb8081a6..6652f0d39 100644 --- a/backend/src/graphql/schema.ts +++ b/backend/src/graphql/schema.ts @@ -1,5 +1,3 @@ -import path from 'path' - import { Decimal } from 'decimal.js-light' import { GraphQLSchema } from 'graphql' import { buildSchema } from 'type-graphql' @@ -7,12 +5,39 @@ import { buildSchema } from 'type-graphql' import { Location } from '@model/Location' import { isAuthorized } from './directive/isAuthorized' +import { AiChatResolver } from './resolver/AiChatResolver' +import { BalanceResolver } from './resolver/BalanceResolver' +import { CommunityResolver } from './resolver/CommunityResolver' +import { ContributionLinkResolver } from './resolver/ContributionLinkResolver' +import { ContributionMessageResolver } from './resolver/ContributionMessageResolver' +import { ContributionResolver } from './resolver/ContributionResolver' +import { GdtResolver } from './resolver/GdtResolver' +import { KlicktippResolver } from './resolver/KlicktippResolver' +import { ProjectBrandingResolver } from './resolver/ProjectBrandingResolver' +import { StatisticsResolver } from './resolver/StatisticsResolver' +import { TransactionLinkResolver } from './resolver/TransactionLinkResolver' +import { TransactionResolver } from './resolver/TransactionResolver' +import { UserResolver } from './resolver/UserResolver' import { DecimalScalar } from './scalar/Decimal' import { LocationScalar } from './scalar/Location' export const schema = async (): Promise => { return buildSchema({ - resolvers: [path.join(__dirname, 'resolver', `!(*.test).{js,ts}`)], + resolvers: [ + AiChatResolver, + BalanceResolver, + CommunityResolver, + ContributionLinkResolver, + ContributionMessageResolver, + ContributionResolver, + GdtResolver, + KlicktippResolver, + ProjectBrandingResolver, + StatisticsResolver, + TransactionLinkResolver, + TransactionResolver, + UserResolver, + ], authChecker: isAuthorized, scalarsMap: [ { type: Decimal, scalar: DecimalScalar }, diff --git a/backend/src/server/localization.ts b/backend/src/server/localization.ts index 59ba4cfce..8e533576a 100644 --- a/backend/src/server/localization.ts +++ b/backend/src/server/localization.ts @@ -1,5 +1,4 @@ -import path from 'path' - +import path from 'node:path' import i18n from 'i18n' import { backendLogger } from './logger' diff --git a/backend/tsconfig.json b/backend/tsconfig.json index 1ae65b49b..79bdd2cf3 100644 --- a/backend/tsconfig.json +++ b/backend/tsconfig.json @@ -80,9 +80,13 @@ /* Experimental Options */ "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ + "resolveJsonModule": true, /* Advanced Options */ "skipLibCheck": true, /* Skip type checking of declaration files. */ "forceConsistentCasingInFileNames": true, /* Disallow inconsistently-cased references to the same file. */ + }, + "ts-node": { + "swc": true } } diff --git a/bun.lock b/bun.lock index 4d5cd0b88..89c5f8789 100644 --- a/bun.lock +++ b/bun.lock @@ -84,6 +84,7 @@ "name": "backend", "version": "2.5.1", "dependencies": { + "@anatine/esbuild-decorators": "^0.2.19", "apollo-server-express": "^2.25.2", "await-semaphore": "^0.1.3", "axios": "^0.21.1", @@ -95,6 +96,7 @@ "decimal.js-light": "^2.5.1", "dotenv": "^10.0.0", "email-templates": "^10.0.1", + "esbuild": "^0.25.2", "express": "^4.17.21", "express-slow-down": "^2.0.1", "graphql": "^15.10.1", @@ -107,13 +109,16 @@ "jose": "^4.14.4", "lodash.clonedeep": "^4.5.0", "log4js": "^6.7.1", - "mysql2": "^2.3.0", + "mkdirp": "^3.0.1", + "ncp": "^2.0.0", "nodemailer": "^6.6.5", "openai": "^4.87.3", "pug": "^3.0.2", "random-bigint": "^0.0.1", "reflect-metadata": "^0.1.13", "sodium-native": "^3.4.1", + "ts-node": "^10.9.2", + "tsconfig-paths": "^4.1.1", "type-graphql": "^1.1.1", "typed-rest-client": "^1.8.11", "typeorm": "^0.3.16", @@ -122,8 +127,10 @@ "xregexp": "^5.1.1", }, "devDependencies": { - "@anatine/esbuild-decorators": "^0.2.19", "@biomejs/biome": "1.9.4", + "@swc/cli": "^0.7.3", + "@swc/core": "^1.11.24", + "@swc/helpers": "^0.5.17", "@types/email-templates": "^10.0.4", "@types/express": "^4.17.21", "@types/faker": "^5.5.9", @@ -135,15 +142,14 @@ "@types/sodium-native": "^2.3.5", "@types/uuid": "^8.3.4", "apollo-server-testing": "^2.25.2", - "esbuild": "^0.25.2", "faker": "^5.5.3", "graphql-tag": "^2.12.6", "jest": "27.2.4", "klicktipp-api": "^1.0.2", "nodemon": "^2.0.7", "prettier": "^3.5.3", + "regenerator-runtime": "^0.14.1", "ts-jest": "27.0.5", - "tsconfig-paths": "^4.1.1", "typescript": "^4.9.5", }, }, @@ -151,12 +157,12 @@ "name": "config-schema", "version": "1.0.0", "dependencies": { + "esbuild": "^0.25.2", "joi": "^17.13.3", }, "devDependencies": { "@biomejs/biome": "1.9.4", "@types/node": "^17.0.21", - "bun": "^1.2.11", "typescript": "^4.9.5", }, }, @@ -168,10 +174,12 @@ "cross-env": "^7.0.3", "decimal.js-light": "^2.5.1", "dotenv": "^10.0.0", + "esbuild": "^0.25.2", "geojson": "^0.5.0", "mysql2": "^2.3.0", "reflect-metadata": "^0.1.13", "ts-mysql-migrate": "^1.0.2", + "tsx": "^4.19.4", "typeorm": "^0.3.16", "uuid": "^8.3.2", "wkx": "^0.5.0", @@ -181,9 +189,6 @@ "@types/faker": "^5.5.9", "@types/geojson": "^7946.0.13", "@types/node": "^17.0.21", - "esbuild": "^0.25.2", - "prettier": "^2.8.7", - "tsx": "^4.19.4", "typescript": "^4.9.5", }, }, @@ -191,35 +196,36 @@ "name": "dht-node", "version": "2.5.1", "dependencies": { - "@hyperswarm/dht": "^6.4.4", + "@hyperswarm/dht": "^6.5.1", "config-schema": "*", "cross-env": "^7.0.3", "database": "*", "dotenv": "10.0.0", + "esbuild": "^0.25.3", "joi": "^17.13.3", - "log4js": "^6.7.1", - "typeorm": "^0.3.16", + "log4js": "^6.9.1", + "tsx": "^4.19.4", + "typeorm": "^0.3.22", "uuid": "^8.3.2", }, "devDependencies": { "@biomejs/biome": "1.9.4", - "@types/dotenv": "^8.2.0", + "@types/dotenv": "^8.2.3", "@types/jest": "27.5.1", "@types/joi": "^17.2.3", - "@types/node": "^17.0.21", + "@types/node": "^17.0.45", "@types/uuid": "^8.3.4", - "bun": "^1.2.11", - "esbuild": "^0.25.2", "jest": "27.5.1", - "prettier": "^2.8.7", + "prettier": "^2.8.8", "ts-jest": "27.1.4", - "typescript": "^4.9.4", + "typescript": "^4.9.5", }, }, "federation": { "name": "federation", "version": "2.5.1", "dependencies": { + "@anatine/esbuild-decorators": "^0.2.19", "apollo-server-express": "^2.25.2", "await-semaphore": "0.1.3", "class-validator": "^0.13.2", @@ -240,6 +246,7 @@ "log4js": "^6.7.1", "reflect-metadata": "^0.1.13", "sodium-native": "^3.3.0", + "tsx": "^4.19.4", "type-graphql": "^1.1.1", "typeorm": "^0.3.16", "uuid": "8.3.2", @@ -257,7 +264,6 @@ "jest": "27.2.4", "prettier": "^3.5.3", "ts-jest": "27.0.5", - "tsx": "^4.19.4", "typescript": "^4.9.5", }, }, @@ -656,6 +662,40 @@ "@morev/vue-transitions": ["@morev/vue-transitions@3.0.5", "", { "dependencies": { "@morev/utils": "^3.11.1", "@nuxt/kit": "^3.13.2" }, "peerDependencies": { "vue": "^2.6.14 || >=3" }, "bin": { "vue-transitions-version-fix": "bin/fix.js", "vue-transitions-version-switch": "bin/switch.js" } }, "sha512-V+2HGHBb5MSOa0GGZ7V1wb3AExr4XcNLl98txdGNTsnhbqy4JRaFMaIsdo4zdaD9ShRZgBSZyZbujabxS50DSw=="], + "@napi-rs/nice": ["@napi-rs/nice@1.0.1", "", { "optionalDependencies": { "@napi-rs/nice-android-arm-eabi": "1.0.1", "@napi-rs/nice-android-arm64": "1.0.1", "@napi-rs/nice-darwin-arm64": "1.0.1", "@napi-rs/nice-darwin-x64": "1.0.1", "@napi-rs/nice-freebsd-x64": "1.0.1", "@napi-rs/nice-linux-arm-gnueabihf": "1.0.1", "@napi-rs/nice-linux-arm64-gnu": "1.0.1", "@napi-rs/nice-linux-arm64-musl": "1.0.1", "@napi-rs/nice-linux-ppc64-gnu": "1.0.1", "@napi-rs/nice-linux-riscv64-gnu": "1.0.1", "@napi-rs/nice-linux-s390x-gnu": "1.0.1", "@napi-rs/nice-linux-x64-gnu": "1.0.1", "@napi-rs/nice-linux-x64-musl": "1.0.1", "@napi-rs/nice-win32-arm64-msvc": "1.0.1", "@napi-rs/nice-win32-ia32-msvc": "1.0.1", "@napi-rs/nice-win32-x64-msvc": "1.0.1" } }, "sha512-zM0mVWSXE0a0h9aKACLwKmD6nHcRiKrPpCfvaKqG1CqDEyjEawId0ocXxVzPMCAm6kkWr2P025msfxXEnt8UGQ=="], + + "@napi-rs/nice-android-arm-eabi": ["@napi-rs/nice-android-arm-eabi@1.0.1", "", { "os": "android", "cpu": "arm" }, "sha512-5qpvOu5IGwDo7MEKVqqyAxF90I6aLj4n07OzpARdgDRfz8UbBztTByBp0RC59r3J1Ij8uzYi6jI7r5Lws7nn6w=="], + + "@napi-rs/nice-android-arm64": ["@napi-rs/nice-android-arm64@1.0.1", "", { "os": "android", "cpu": "arm64" }, "sha512-GqvXL0P8fZ+mQqG1g0o4AO9hJjQaeYG84FRfZaYjyJtZZZcMjXW5TwkL8Y8UApheJgyE13TQ4YNUssQaTgTyvA=="], + + "@napi-rs/nice-darwin-arm64": ["@napi-rs/nice-darwin-arm64@1.0.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-91k3HEqUl2fsrz/sKkuEkscj6EAj3/eZNCLqzD2AA0TtVbkQi8nqxZCZDMkfklULmxLkMxuUdKe7RvG/T6s2AA=="], + + "@napi-rs/nice-darwin-x64": ["@napi-rs/nice-darwin-x64@1.0.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-jXnMleYSIR/+TAN/p5u+NkCA7yidgswx5ftqzXdD5wgy/hNR92oerTXHc0jrlBisbd7DpzoaGY4cFD7Sm5GlgQ=="], + + "@napi-rs/nice-freebsd-x64": ["@napi-rs/nice-freebsd-x64@1.0.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-j+iJ/ezONXRQsVIB/FJfwjeQXX7A2tf3gEXs4WUGFrJjpe/z2KB7sOv6zpkm08PofF36C9S7wTNuzHZ/Iiccfw=="], + + "@napi-rs/nice-linux-arm-gnueabihf": ["@napi-rs/nice-linux-arm-gnueabihf@1.0.1", "", { "os": "linux", "cpu": "arm" }, "sha512-G8RgJ8FYXYkkSGQwywAUh84m946UTn6l03/vmEXBYNJxQJcD+I3B3k5jmjFG/OPiU8DfvxutOP8bi+F89MCV7Q=="], + + "@napi-rs/nice-linux-arm64-gnu": ["@napi-rs/nice-linux-arm64-gnu@1.0.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-IMDak59/W5JSab1oZvmNbrms3mHqcreaCeClUjwlwDr0m3BoR09ZiN8cKFBzuSlXgRdZ4PNqCYNeGQv7YMTjuA=="], + + "@napi-rs/nice-linux-arm64-musl": ["@napi-rs/nice-linux-arm64-musl@1.0.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-wG8fa2VKuWM4CfjOjjRX9YLIbysSVV1S3Kgm2Fnc67ap/soHBeYZa6AGMeR5BJAylYRjnoVOzV19Cmkco3QEPw=="], + + "@napi-rs/nice-linux-ppc64-gnu": ["@napi-rs/nice-linux-ppc64-gnu@1.0.1", "", { "os": "linux", "cpu": "ppc64" }, "sha512-lxQ9WrBf0IlNTCA9oS2jg/iAjQyTI6JHzABV664LLrLA/SIdD+I1i3Mjf7TsnoUbgopBcCuDztVLfJ0q9ubf6Q=="], + + "@napi-rs/nice-linux-riscv64-gnu": ["@napi-rs/nice-linux-riscv64-gnu@1.0.1", "", { "os": "linux", "cpu": "none" }, "sha512-3xs69dO8WSWBb13KBVex+yvxmUeEsdWexxibqskzoKaWx9AIqkMbWmE2npkazJoopPKX2ULKd8Fm9veEn0g4Ig=="], + + "@napi-rs/nice-linux-s390x-gnu": ["@napi-rs/nice-linux-s390x-gnu@1.0.1", "", { "os": "linux", "cpu": "s390x" }, "sha512-lMFI3i9rlW7hgToyAzTaEybQYGbQHDrpRkg+1gJWEpH0PLAQoZ8jiY0IzakLfNWnVda1eTYYlxxFYzW8Rqczkg=="], + + "@napi-rs/nice-linux-x64-gnu": ["@napi-rs/nice-linux-x64-gnu@1.0.1", "", { "os": "linux", "cpu": "x64" }, "sha512-XQAJs7DRN2GpLN6Fb+ZdGFeYZDdGl2Fn3TmFlqEL5JorgWKrQGRUrpGKbgZ25UeZPILuTKJ+OowG2avN8mThBA=="], + + "@napi-rs/nice-linux-x64-musl": ["@napi-rs/nice-linux-x64-musl@1.0.1", "", { "os": "linux", "cpu": "x64" }, "sha512-/rodHpRSgiI9o1faq9SZOp/o2QkKQg7T+DK0R5AkbnI/YxvAIEHf2cngjYzLMQSQgUhxym+LFr+UGZx4vK4QdQ=="], + + "@napi-rs/nice-win32-arm64-msvc": ["@napi-rs/nice-win32-arm64-msvc@1.0.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-rEcz9vZymaCB3OqEXoHnp9YViLct8ugF+6uO5McifTedjq4QMQs3DHz35xBEGhH3gJWEsXMUbzazkz5KNM5YUg=="], + + "@napi-rs/nice-win32-ia32-msvc": ["@napi-rs/nice-win32-ia32-msvc@1.0.1", "", { "os": "win32", "cpu": "ia32" }, "sha512-t7eBAyPUrWL8su3gDxw9xxxqNwZzAqKo0Szv3IjVQd1GpXXVkb6vBBQUuxfIYaXMzZLwlxRQ7uzM2vdUE9ULGw=="], + + "@napi-rs/nice-win32-x64-msvc": ["@napi-rs/nice-win32-x64-msvc@1.0.1", "", { "os": "win32", "cpu": "x64" }, "sha512-JlF+uDcatt3St2ntBG8H02F1mM45i5SF9W+bIKiReVE6wiy3o16oBP/yxt+RZ+N6LbCImJXJ6bXNO2kn9AXicg=="], + "@nodelib/fs.scandir": ["@nodelib/fs.scandir@2.1.5", "", { "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g=="], "@nodelib/fs.stat": ["@nodelib/fs.stat@2.0.5", "", {}, "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="], @@ -666,28 +706,6 @@ "@one-ini/wasm": ["@one-ini/wasm@0.1.1", "", {}, "sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw=="], - "@oven/bun-darwin-aarch64": ["@oven/bun-darwin-aarch64@1.2.11", "", { "os": "darwin", "cpu": "arm64" }, "sha512-LN7gshxqEHJ1LA0B43Z56Ts3LxRjp2LrIz45FIgeKWE81PYglR9NMNou90gFuYlUtMyarSk6MV9Jdvo2kFnn8Q=="], - - "@oven/bun-darwin-x64": ["@oven/bun-darwin-x64@1.2.11", "", { "os": "darwin", "cpu": "x64" }, "sha512-AmmlGdQmzORFeUZRa2Ki9UWYTt5ZGUwTp0z+H0uR4bYHy7sQhpDbNKtZcfKKuLRQ6P23DKc3Lpo+yhR0cg7prg=="], - - "@oven/bun-darwin-x64-baseline": ["@oven/bun-darwin-x64-baseline@1.2.11", "", { "os": "darwin", "cpu": "x64" }, "sha512-ksZJzq0Id3YsGcs++QnL1oGYjqY5XNihR0MscZ+M4YYruvVKHKim9Aql46+TI55YmKD810HVpeLolIeeTl2JUg=="], - - "@oven/bun-linux-aarch64": ["@oven/bun-linux-aarch64@1.2.11", "", { "os": "linux", "cpu": "arm64" }, "sha512-jNQ5F6o9qC/KNhBnyxnjVRfiTxZB7thvZ7T+oPZSNh1IV8UWDunEGmUdOqSqoPsigpXHRjbV3DKJKN+YaPQCCA=="], - - "@oven/bun-linux-aarch64-musl": ["@oven/bun-linux-aarch64-musl@1.2.11", "", { "os": "linux", "cpu": "none" }, "sha512-A/h7WxC2GbNus8fupz5EHsD8YugG19uW9GQWDf4tk0YWYuSaUOCP14JYbXbiJ48OFELWNchEc/2azajH+votbA=="], - - "@oven/bun-linux-x64": ["@oven/bun-linux-x64@1.2.11", "", { "os": "linux", "cpu": "x64" }, "sha512-6pH556SgOR2UOgWQfEiYI3DWgkm7T+L9fmBe2dfEYrKCEu/TbXZXOJeMi943NSMIiT3q2gVwlCEdoxZwedQs4A=="], - - "@oven/bun-linux-x64-baseline": ["@oven/bun-linux-x64-baseline@1.2.11", "", { "os": "linux", "cpu": "x64" }, "sha512-xswex8EPmzX8BqbNXpiwgrpDkaD/FMIaxD85EIBaaksi6I8nln2kzEmlO/uVhbFAn9PPWydi3Q+FCcNnJGRazQ=="], - - "@oven/bun-linux-x64-musl": ["@oven/bun-linux-x64-musl@1.2.11", "", { "os": "linux", "cpu": "x64" }, "sha512-yF1Urgsy8xkQu8iAd03ORxuZ/DWrNPCST2r1EVIwjHuzpZ3o2odKjnE9Hnwsq+wcWdCRsakqL/muILB/9aCxeQ=="], - - "@oven/bun-linux-x64-musl-baseline": ["@oven/bun-linux-x64-musl-baseline@1.2.11", "", { "os": "linux", "cpu": "x64" }, "sha512-YYglLgFkHwNMjECCyM/kZDUZa6UW3ssVtg5k6+8QU1Rp5cPF+0SBlGGTr5ho2lFkNn/ylKmwyuqE1tB45zgVvA=="], - - "@oven/bun-windows-x64": ["@oven/bun-windows-x64@1.2.11", "", { "os": "win32", "cpu": "x64" }, "sha512-5mGVsGSS8JWBq8IHXGvFJ7rlET4XCUdDTKEaLLq3O1YaqyZZiPMQFnU70MfkpjPe4stRDZ+/NWBRNDMaNTYQxw=="], - - "@oven/bun-windows-x64-baseline": ["@oven/bun-windows-x64-baseline@1.2.11", "", { "os": "win32", "cpu": "x64" }, "sha512-uzappBblyA3GlX0PDENU1HTPZR82tzPuNd5jumTiDQ22FZmc2ZqCYTIZ/ngwHKOHDD6Rxdsux8+9EXgVS51G2w=="], - "@parcel/watcher": ["@parcel/watcher@2.5.1", "", { "dependencies": { "detect-libc": "^1.0.3", "is-glob": "^4.0.3", "micromatch": "^4.0.5", "node-addon-api": "^7.0.0" }, "optionalDependencies": { "@parcel/watcher-android-arm64": "2.5.1", "@parcel/watcher-darwin-arm64": "2.5.1", "@parcel/watcher-darwin-x64": "2.5.1", "@parcel/watcher-freebsd-x64": "2.5.1", "@parcel/watcher-linux-arm-glibc": "2.5.1", "@parcel/watcher-linux-arm-musl": "2.5.1", "@parcel/watcher-linux-arm64-glibc": "2.5.1", "@parcel/watcher-linux-arm64-musl": "2.5.1", "@parcel/watcher-linux-x64-glibc": "2.5.1", "@parcel/watcher-linux-x64-musl": "2.5.1", "@parcel/watcher-win32-arm64": "2.5.1", "@parcel/watcher-win32-ia32": "2.5.1", "@parcel/watcher-win32-x64": "2.5.1" } }, "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg=="], "@parcel/watcher-android-arm64": ["@parcel/watcher-android-arm64@2.5.1", "", { "os": "android", "cpu": "arm64" }, "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA=="], @@ -786,6 +804,8 @@ "@rtsao/scc": ["@rtsao/scc@1.1.0", "", {}, "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g=="], + "@sec-ant/readable-stream": ["@sec-ant/readable-stream@0.4.1", "", {}, "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg=="], + "@selderee/plugin-htmlparser2": ["@selderee/plugin-htmlparser2@0.6.0", "", { "dependencies": { "domhandler": "^4.2.0", "selderee": "^0.6.0" } }, "sha512-J3jpy002TyBjd4N/p6s+s90eX42H2eRhK3SbsZuvTDv977/E8p2U3zikdiehyJja66do7FlxLomZLPlvl2/xaA=="], "@sideway/address": ["@sideway/address@4.1.5", "", { "dependencies": { "@hapi/hoek": "^9.0.0" } }, "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q=="], @@ -796,12 +816,48 @@ "@sinclair/typebox": ["@sinclair/typebox@0.27.8", "", {}, "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA=="], + "@sindresorhus/is": ["@sindresorhus/is@5.6.0", "", {}, "sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g=="], + "@sinonjs/commons": ["@sinonjs/commons@1.8.6", "", { "dependencies": { "type-detect": "4.0.8" } }, "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ=="], "@sinonjs/fake-timers": ["@sinonjs/fake-timers@8.1.0", "", { "dependencies": { "@sinonjs/commons": "^1.7.0" } }, "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg=="], "@sqltools/formatter": ["@sqltools/formatter@1.2.5", "", {}, "sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw=="], + "@swc/cli": ["@swc/cli@0.7.3", "", { "dependencies": { "@swc/counter": "^0.1.3", "@xhmikosr/bin-wrapper": "^13.0.5", "commander": "^8.3.0", "fast-glob": "^3.2.5", "minimatch": "^9.0.3", "piscina": "^4.3.1", "semver": "^7.3.8", "slash": "3.0.0", "source-map": "^0.7.3" }, "peerDependencies": { "@swc/core": "^1.2.66", "chokidar": "^4.0.1" }, "optionalPeers": ["chokidar"], "bin": { "swc": "bin/swc.js", "swcx": "bin/swcx.js", "spack": "bin/spack.js" } }, "sha512-rnVXNnlURjdOuPaBIwZ3TmBA44BF/eP0j154LanlgPEYfau74ige7cpKlKkZr1IBqMOG99lAnYNxQipDWA3hdg=="], + + "@swc/core": ["@swc/core@1.11.24", "", { "dependencies": { "@swc/counter": "^0.1.3", "@swc/types": "^0.1.21" }, "optionalDependencies": { "@swc/core-darwin-arm64": "1.11.24", "@swc/core-darwin-x64": "1.11.24", "@swc/core-linux-arm-gnueabihf": "1.11.24", "@swc/core-linux-arm64-gnu": "1.11.24", "@swc/core-linux-arm64-musl": "1.11.24", "@swc/core-linux-x64-gnu": "1.11.24", "@swc/core-linux-x64-musl": "1.11.24", "@swc/core-win32-arm64-msvc": "1.11.24", "@swc/core-win32-ia32-msvc": "1.11.24", "@swc/core-win32-x64-msvc": "1.11.24" }, "peerDependencies": { "@swc/helpers": ">=0.5.17" }, "optionalPeers": ["@swc/helpers"] }, "sha512-MaQEIpfcEMzx3VWWopbofKJvaraqmL6HbLlw2bFZ7qYqYw3rkhM0cQVEgyzbHtTWwCwPMFZSC2DUbhlZgrMfLg=="], + + "@swc/core-darwin-arm64": ["@swc/core-darwin-arm64@1.11.24", "", { "os": "darwin", "cpu": "arm64" }, "sha512-dhtVj0PC1APOF4fl5qT2neGjRLgHAAYfiVP8poJelhzhB/318bO+QCFWAiimcDoyMgpCXOhTp757gnoJJrheWA=="], + + "@swc/core-darwin-x64": ["@swc/core-darwin-x64@1.11.24", "", { "os": "darwin", "cpu": "x64" }, "sha512-H/3cPs8uxcj2Fe3SoLlofN5JG6Ny5bl8DuZ6Yc2wr7gQFBmyBkbZEz+sPVgsID7IXuz7vTP95kMm1VL74SO5AQ=="], + + "@swc/core-linux-arm-gnueabihf": ["@swc/core-linux-arm-gnueabihf@1.11.24", "", { "os": "linux", "cpu": "arm" }, "sha512-PHJgWEpCsLo/NGj+A2lXZ2mgGjsr96ULNW3+T3Bj2KTc8XtMUkE8tmY2Da20ItZOvPNC/69KroU7edyo1Flfbw=="], + + "@swc/core-linux-arm64-gnu": ["@swc/core-linux-arm64-gnu@1.11.24", "", { "os": "linux", "cpu": "arm64" }, "sha512-C2FJb08+n5SD4CYWCTZx1uR88BN41ZieoHvI8A55hfVf2woT8+6ZiBzt74qW2g+ntZ535Jts5VwXAKdu41HpBg=="], + + "@swc/core-linux-arm64-musl": ["@swc/core-linux-arm64-musl@1.11.24", "", { "os": "linux", "cpu": "arm64" }, "sha512-ypXLIdszRo0re7PNNaXN0+2lD454G8l9LPK/rbfRXnhLWDBPURxzKlLlU/YGd2zP98wPcVooMmegRSNOKfvErw=="], + + "@swc/core-linux-x64-gnu": ["@swc/core-linux-x64-gnu@1.11.24", "", { "os": "linux", "cpu": "x64" }, "sha512-IM7d+STVZD48zxcgo69L0yYptfhaaE9cMZ+9OoMxirNafhKKXwoZuufol1+alEFKc+Wbwp+aUPe/DeWC/Lh3dg=="], + + "@swc/core-linux-x64-musl": ["@swc/core-linux-x64-musl@1.11.24", "", { "os": "linux", "cpu": "x64" }, "sha512-DZByJaMVzSfjQKKQn3cqSeqwy6lpMaQDQQ4HPlch9FWtDx/dLcpdIhxssqZXcR2rhaQVIaRQsCqwV6orSDGAGw=="], + + "@swc/core-win32-arm64-msvc": ["@swc/core-win32-arm64-msvc@1.11.24", "", { "os": "win32", "cpu": "arm64" }, "sha512-Q64Ytn23y9aVDKN5iryFi8mRgyHw3/kyjTjT4qFCa8AEb5sGUuSj//AUZ6c0J7hQKMHlg9do5Etvoe61V98/JQ=="], + + "@swc/core-win32-ia32-msvc": ["@swc/core-win32-ia32-msvc@1.11.24", "", { "os": "win32", "cpu": "ia32" }, "sha512-9pKLIisE/Hh2vJhGIPvSoTK4uBSPxNVyXHmOrtdDot4E1FUUI74Vi8tFdlwNbaj8/vusVnb8xPXsxF1uB0VgiQ=="], + + "@swc/core-win32-x64-msvc": ["@swc/core-win32-x64-msvc@1.11.24", "", { "os": "win32", "cpu": "x64" }, "sha512-sybnXtOsdB+XvzVFlBVGgRHLqp3yRpHK7CrmpuDKszhj/QhmsaZzY/GHSeALlMtLup13M0gqbcQvsTNlAHTg3w=="], + + "@swc/counter": ["@swc/counter@0.1.3", "", {}, "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ=="], + + "@swc/helpers": ["@swc/helpers@0.5.17", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A=="], + + "@swc/types": ["@swc/types@0.1.21", "", { "dependencies": { "@swc/counter": "^0.1.3" } }, "sha512-2YEtj5HJVbKivud9N4bpPBAyZhj4S2Ipe5LkUG94alTpr7in/GU/EARgPAd3BwU+YOmFVJC2+kjqhGRi3r0ZpQ=="], + + "@szmarczak/http-timer": ["@szmarczak/http-timer@5.0.1", "", { "dependencies": { "defer-to-connect": "^2.0.1" } }, "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw=="], + + "@tokenizer/token": ["@tokenizer/token@0.3.0", "", {}, "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A=="], + "@tootallnate/once": ["@tootallnate/once@1.1.2", "", {}, "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw=="], "@tsconfig/node10": ["@tsconfig/node10@1.0.11", "", {}, "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw=="], @@ -860,6 +916,8 @@ "@types/http-assert": ["@types/http-assert@1.5.6", "", {}, "sha512-TTEwmtjgVbYAzZYWyeHPrrtWnfVkm8tQkP8P21uQifPgMRgjrow3XDEYqucuC8SKZJT7pUnhU/JymvjggxO9vw=="], + "@types/http-cache-semantics": ["@types/http-cache-semantics@4.0.4", "", {}, "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA=="], + "@types/http-errors": ["@types/http-errors@2.0.4", "", {}, "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA=="], "@types/i18n": ["@types/i18n@0.13.12", "", {}, "sha512-iAd2QjKh+0ToBXocmCS3m38GskiaGzmSV1MTQz2GaOraqSqBiLf46J7u3EGINl+st+Uk4lO3OL7QyIjTJlrWIg=="], @@ -1040,6 +1098,26 @@ "@wry/trie": ["@wry/trie@0.5.0", "", { "dependencies": { "tslib": "^2.3.0" } }, "sha512-FNoYzHawTMk/6KMQoEG5O4PuioX19UbwdQKF44yw0nLfOypfQdjtfZzo/UIJWAJ23sNIFbD1Ug9lbaDGMwbqQA=="], + "@xhmikosr/archive-type": ["@xhmikosr/archive-type@7.0.0", "", { "dependencies": { "file-type": "^19.0.0" } }, "sha512-sIm84ZneCOJuiy3PpWR5bxkx3HaNt1pqaN+vncUBZIlPZCq8ASZH+hBVdu5H8znR7qYC6sKwx+ie2Q7qztJTxA=="], + + "@xhmikosr/bin-check": ["@xhmikosr/bin-check@7.0.3", "", { "dependencies": { "execa": "^5.1.1", "isexe": "^2.0.0" } }, "sha512-4UnCLCs8DB+itHJVkqFp9Zjg+w/205/J2j2wNBsCEAm/BuBmtua2hhUOdAMQE47b1c7P9Xmddj0p+X1XVsfHsA=="], + + "@xhmikosr/bin-wrapper": ["@xhmikosr/bin-wrapper@13.0.5", "", { "dependencies": { "@xhmikosr/bin-check": "^7.0.3", "@xhmikosr/downloader": "^15.0.1", "@xhmikosr/os-filter-obj": "^3.0.0", "bin-version-check": "^5.1.0" } }, "sha512-DT2SAuHDeOw0G5bs7wZbQTbf4hd8pJ14tO0i4cWhRkIJfgRdKmMfkDilpaJ8uZyPA0NVRwasCNAmMJcWA67osw=="], + + "@xhmikosr/decompress": ["@xhmikosr/decompress@10.0.1", "", { "dependencies": { "@xhmikosr/decompress-tar": "^8.0.1", "@xhmikosr/decompress-tarbz2": "^8.0.1", "@xhmikosr/decompress-targz": "^8.0.1", "@xhmikosr/decompress-unzip": "^7.0.0", "graceful-fs": "^4.2.11", "make-dir": "^4.0.0", "strip-dirs": "^3.0.0" } }, "sha512-6uHnEEt5jv9ro0CDzqWlFgPycdE+H+kbJnwyxgZregIMLQ7unQSCNVsYG255FoqU8cP46DyggI7F7LohzEl8Ag=="], + + "@xhmikosr/decompress-tar": ["@xhmikosr/decompress-tar@8.0.1", "", { "dependencies": { "file-type": "^19.0.0", "is-stream": "^2.0.1", "tar-stream": "^3.1.7" } }, "sha512-dpEgs0cQKJ2xpIaGSO0hrzz3Kt8TQHYdizHsgDtLorWajuHJqxzot9Hbi0huRxJuAGG2qiHSQkwyvHHQtlE+fg=="], + + "@xhmikosr/decompress-tarbz2": ["@xhmikosr/decompress-tarbz2@8.0.2", "", { "dependencies": { "@xhmikosr/decompress-tar": "^8.0.1", "file-type": "^19.6.0", "is-stream": "^2.0.1", "seek-bzip": "^2.0.0", "unbzip2-stream": "^1.4.3" } }, "sha512-p5A2r/AVynTQSsF34Pig6olt9CvRj6J5ikIhzUd3b57pUXyFDGtmBstcw+xXza0QFUh93zJsmY3zGeNDlR2AQQ=="], + + "@xhmikosr/decompress-targz": ["@xhmikosr/decompress-targz@8.0.1", "", { "dependencies": { "@xhmikosr/decompress-tar": "^8.0.1", "file-type": "^19.0.0", "is-stream": "^2.0.1" } }, "sha512-mvy5AIDIZjQ2IagMI/wvauEiSNHhu/g65qpdM4EVoYHUJBAmkQWqcPJa8Xzi1aKVTmOA5xLJeDk7dqSjlHq8Mg=="], + + "@xhmikosr/decompress-unzip": ["@xhmikosr/decompress-unzip@7.0.0", "", { "dependencies": { "file-type": "^19.0.0", "get-stream": "^6.0.1", "yauzl": "^3.1.2" } }, "sha512-GQMpzIpWTsNr6UZbISawsGI0hJ4KA/mz5nFq+cEoPs12UybAqZWKbyIaZZyLbJebKl5FkLpsGBkrplJdjvUoSQ=="], + + "@xhmikosr/downloader": ["@xhmikosr/downloader@15.0.1", "", { "dependencies": { "@xhmikosr/archive-type": "^7.0.0", "@xhmikosr/decompress": "^10.0.1", "content-disposition": "^0.5.4", "defaults": "^3.0.0", "ext-name": "^5.0.0", "file-type": "^19.0.0", "filenamify": "^6.0.0", "get-stream": "^6.0.1", "got": "^13.0.0" } }, "sha512-fiuFHf3Dt6pkX8HQrVBsK0uXtkgkVlhrZEh8b7VgoDqFf+zrgFBPyrwCqE/3nDwn3hLeNz+BsrS7q3mu13Lp1g=="], + + "@xhmikosr/os-filter-obj": ["@xhmikosr/os-filter-obj@3.0.0", "", { "dependencies": { "arch": "^3.0.0" } }, "sha512-siPY6BD5dQ2SZPl3I0OZBHL27ZqZvLEosObsZRQ1NUB8qcxegwt0T9eKtV96JMFQpIz1elhkzqOg4c/Ri6Dp9A=="], + "@xtuc/ieee754": ["@xtuc/ieee754@1.2.0", "", {}, "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA=="], "@xtuc/long": ["@xtuc/long@4.2.2", "", {}, "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ=="], @@ -1132,6 +1210,8 @@ "app-root-path": ["app-root-path@3.1.0", "", {}, "sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA=="], + "arch": ["arch@3.0.0", "", {}, "sha512-AmIAC+Wtm2AU8lGfTtHsw0Y9Qtftx2YXEEtiBP10xFUtMOA+sHHx6OAddyL52mUKh1vsXQ6/w1mVDptZCyUt4Q=="], + "arg": ["arg@4.1.3", "", {}, "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA=="], "argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], @@ -1222,6 +1302,10 @@ "bignumber.js": ["bignumber.js@9.0.0", "", {}, "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A=="], + "bin-version": ["bin-version@6.0.0", "", { "dependencies": { "execa": "^5.0.0", "find-versions": "^5.0.0" } }, "sha512-nk5wEsP4RiKjG+vF+uG8lFsEn4d7Y6FVDamzzftSunXOoOcOOkzcWdKVlGgFFwlUQCj63SgnUkLLGF8v7lufhw=="], + + "bin-version-check": ["bin-version-check@5.1.0", "", { "dependencies": { "bin-version": "^6.0.0", "semver": "^7.5.3", "semver-truncate": "^3.0.0" } }, "sha512-bYsvMqJ8yNGILLz1KP9zKLzQ6YpljV3ln1gqhuLkUtyfGi3qXKGuK2p+U4NAvjVFzDFiBBtOpCOSFNuYYEGZ5g=="], + "binary-extensions": ["binary-extensions@2.3.0", "", {}, "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw=="], "birpc": ["birpc@2.3.0", "", {}, "sha512-ijbtkn/F3Pvzb6jHypHRyve2QApOCZDR25D/VnkY2G/lBNcXCTsnsCxgY4k4PkVB7zfwzYbY3O9Lcqe3xufS5g=="], @@ -1254,14 +1338,14 @@ "buffer": ["buffer@6.0.3", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" } }, "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA=="], + "buffer-crc32": ["buffer-crc32@0.2.13", "", {}, "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ=="], + "buffer-from": ["buffer-from@1.1.2", "", {}, "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="], "builtin-modules": ["builtin-modules@3.3.0", "", {}, "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw=="], "builtins": ["builtins@5.1.0", "", { "dependencies": { "semver": "^7.0.0" } }, "sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg=="], - "bun": ["bun@1.2.11", "", { "optionalDependencies": { "@oven/bun-darwin-aarch64": "1.2.11", "@oven/bun-darwin-x64": "1.2.11", "@oven/bun-darwin-x64-baseline": "1.2.11", "@oven/bun-linux-aarch64": "1.2.11", "@oven/bun-linux-aarch64-musl": "1.2.11", "@oven/bun-linux-x64": "1.2.11", "@oven/bun-linux-x64-baseline": "1.2.11", "@oven/bun-linux-x64-musl": "1.2.11", "@oven/bun-linux-x64-musl-baseline": "1.2.11", "@oven/bun-windows-x64": "1.2.11", "@oven/bun-windows-x64-baseline": "1.2.11" }, "os": [ "linux", "win32", "darwin", ], "cpu": [ "x64", "arm64", ], "bin": { "bun": "bin/bun.exe", "bunx": "bin/bun.exe" } }, "sha512-9brVfsp6/TYVsE3lCl1MUxoyKhvljqyL1MNPErgwsOaS9g4Gzi2nY+W5WtRAXGzLrgz5jzsoGHHwyH/rTeRCIg=="], - "busboy": ["busboy@0.3.1", "", { "dependencies": { "dicer": "0.3.0" } }, "sha512-y7tTxhGKXcyBxRKAni+awqx8uqaJKrSFSNFSeRG5CsWNdmy2BIK+6VGWEW7TZnIO/533mtMEA4rOevQV815YJw=="], "bytes": ["bytes@3.1.2", "", {}, "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="], @@ -1272,6 +1356,10 @@ "cacheable": ["cacheable@1.8.10", "", { "dependencies": { "hookified": "^1.8.1", "keyv": "^5.3.2" } }, "sha512-0ZnbicB/N2R6uziva8l6O6BieBklArWyiGx4GkwAhLKhSHyQtRfM9T1nx7HHuHDKkYB/efJQhz3QJ6x/YqoZzA=="], + "cacheable-lookup": ["cacheable-lookup@7.0.0", "", {}, "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w=="], + + "cacheable-request": ["cacheable-request@10.2.14", "", { "dependencies": { "@types/http-cache-semantics": "^4.0.2", "get-stream": "^6.0.1", "http-cache-semantics": "^4.1.1", "keyv": "^4.5.3", "mimic-response": "^4.0.0", "normalize-url": "^8.0.0", "responselike": "^3.0.0" } }, "sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ=="], + "call-bind": ["call-bind@1.0.8", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", "get-intrinsic": "^1.2.4", "set-function-length": "^1.2.2" } }, "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww=="], "call-bind-apply-helpers": ["call-bind-apply-helpers@1.0.2", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" } }, "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ=="], @@ -1428,6 +1516,8 @@ "decimal.js-light": ["decimal.js-light@2.5.1", "", {}, "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg=="], + "decompress-response": ["decompress-response@6.0.0", "", { "dependencies": { "mimic-response": "^3.1.0" } }, "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ=="], + "dedent": ["dedent@0.7.0", "", {}, "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA=="], "deep-eql": ["deep-eql@5.0.2", "", {}, "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q=="], @@ -1438,6 +1528,10 @@ "deepmerge": ["deepmerge@4.3.1", "", {}, "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A=="], + "defaults": ["defaults@3.0.0", "", {}, "sha512-RsqXDEAALjfRTro+IFNKpcPCt0/Cy2FqHSIlnomiJp9YGadpQnrtbRpSgN2+np21qHcIKiva4fiOQGjS9/qR/A=="], + + "defer-to-connect": ["defer-to-connect@2.0.1", "", {}, "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg=="], + "define-data-property": ["define-data-property@1.1.4", "", { "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "gopd": "^1.0.1" } }, "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A=="], "define-properties": ["define-properties@1.2.1", "", { "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" } }, "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg=="], @@ -1644,6 +1738,10 @@ "exsolve": ["exsolve@1.0.5", "", {}, "sha512-pz5dvkYYKQ1AHVrgOzBKWeP4u4FRb3a6DNK2ucr0OoNwYIU4QWsJ+NM36LLzORT+z845MzKHHhpXiUF5nvQoJg=="], + "ext-list": ["ext-list@2.2.2", "", { "dependencies": { "mime-db": "^1.28.0" } }, "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA=="], + + "ext-name": ["ext-name@5.0.0", "", { "dependencies": { "ext-list": "^2.0.0", "sort-keys-length": "^1.0.0" } }, "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ=="], + "extend-object": ["extend-object@1.0.0", "", {}, "sha512-0dHDIXC7y7LDmCh/lp1oYkmv73K25AMugQI07r8eFopkW6f7Ufn1q+ETMsJjnV9Am14SlElkqy3O92r6xEaxPw=="], "extract-files": ["extract-files@9.0.0", "", {}, "sha512-CvdFfHkC95B4bBBk36hcEmvdR2awOdhhVUYH6S/zrVj3477zven/fJMYg7121h4T1xHZC+tetUpubpAhxwI7hQ=="], @@ -1682,14 +1780,22 @@ "file-entry-cache": ["file-entry-cache@6.0.1", "", { "dependencies": { "flat-cache": "^3.0.4" } }, "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg=="], + "file-type": ["file-type@19.6.0", "", { "dependencies": { "get-stream": "^9.0.1", "strtok3": "^9.0.1", "token-types": "^6.0.0", "uint8array-extras": "^1.3.0" } }, "sha512-VZR5I7k5wkD0HgFnMsq5hOsSc710MJMu5Nc5QYsbe38NN5iPV/XTObYLc/cpttRTf6lX538+5uO1ZQRhYibiZQ=="], + "filelist": ["filelist@1.0.4", "", { "dependencies": { "minimatch": "^5.0.1" } }, "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q=="], + "filename-reserved-regex": ["filename-reserved-regex@3.0.0", "", {}, "sha512-hn4cQfU6GOT/7cFHXBqeBg2TbrMBgdD0kcjLhvSQYYwm3s4B6cjvBfb7nBALJLAXqmU5xajSa7X2NnUud/VCdw=="], + + "filenamify": ["filenamify@6.0.0", "", { "dependencies": { "filename-reserved-regex": "^3.0.0" } }, "sha512-vqIlNogKeyD3yzrm0yhRMQg8hOVwYcYRfjEoODd49iCprMn4HL85gK3HcykQE53EPIpX3HcAbGA5ELQv216dAQ=="], + "fill-range": ["fill-range@7.1.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg=="], "finalhandler": ["finalhandler@1.3.1", "", { "dependencies": { "debug": "2.6.9", "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "on-finished": "2.4.1", "parseurl": "~1.3.3", "statuses": "2.0.1", "unpipe": "~1.0.0" } }, "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ=="], "find-up": ["find-up@5.0.0", "", { "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" } }, "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng=="], + "find-versions": ["find-versions@5.1.0", "", { "dependencies": { "semver-regex": "^4.0.5" } }, "sha512-+iwzCJ7C5v5KgcBuueqVoNiHVoQpwiUK5XFLjf0affFTep+Wcw93tPvmb8tqujDNmzhBDPddnWV/qgWSXgq+Hg=="], + "fixpack": ["fixpack@4.0.0", "", { "dependencies": { "alce": "1.2.0", "chalk": "^3.0.0", "detect-indent": "^6.0.0", "detect-newline": "^3.1.0", "extend-object": "^1.0.0", "rc": "^1.2.8" }, "bin": { "fixpack": "bin/fixpack" } }, "sha512-5SM1+H2CcuJ3gGEwTiVo/+nd/hYpNj9Ch3iMDOQ58ndY+VGQ2QdvaUTkd3otjZvYnd/8LF/HkJ5cx7PBq0orCQ=="], "flat-cache": ["flat-cache@3.2.0", "", { "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.3", "rimraf": "^3.0.2" } }, "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw=="], @@ -1780,6 +1886,8 @@ "gopd": ["gopd@1.2.0", "", {}, "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="], + "got": ["got@13.0.0", "", { "dependencies": { "@sindresorhus/is": "^5.2.0", "@szmarczak/http-timer": "^5.0.1", "cacheable-lookup": "^7.0.0", "cacheable-request": "^10.2.8", "decompress-response": "^6.0.0", "form-data-encoder": "^2.1.2", "get-stream": "^6.0.1", "http2-wrapper": "^2.1.10", "lowercase-keys": "^3.0.0", "p-cancelable": "^3.0.0", "responselike": "^3.0.0" } }, "sha512-XfBk1CxOOScDcMr9O1yKkNaQyy865NbYs+F7dr4H0LZMVgCj2Le59k6PqbNHoL5ToeaEQUYh6c6yMfVcc6SJxA=="], + "graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="], "graphemer": ["graphemer@1.4.0", "", {}, "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag=="], @@ -1844,10 +1952,14 @@ "htmlparser2": ["htmlparser2@8.0.2", "", { "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.3", "domutils": "^3.0.1", "entities": "^4.4.0" } }, "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA=="], + "http-cache-semantics": ["http-cache-semantics@4.1.1", "", {}, "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ=="], + "http-errors": ["http-errors@2.0.0", "", { "dependencies": { "depd": "2.0.0", "inherits": "2.0.4", "setprototypeof": "1.2.0", "statuses": "2.0.1", "toidentifier": "1.0.1" } }, "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ=="], "http-proxy-agent": ["http-proxy-agent@7.0.2", "", { "dependencies": { "agent-base": "^7.1.0", "debug": "^4.3.4" } }, "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig=="], + "http2-wrapper": ["http2-wrapper@2.2.1", "", { "dependencies": { "quick-lru": "^5.1.1", "resolve-alpn": "^1.2.0" } }, "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ=="], + "https-proxy-agent": ["https-proxy-agent@7.0.6", "", { "dependencies": { "agent-base": "^7.1.2", "debug": "4" } }, "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw=="], "human-signals": ["human-signals@2.1.0", "", {}, "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw=="], @@ -1888,6 +2000,8 @@ "ini": ["ini@1.3.8", "", {}, "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="], + "inspect-with-kind": ["inspect-with-kind@1.0.5", "", { "dependencies": { "kind-of": "^6.0.2" } }, "sha512-MAQUJuIo7Xqk8EVNP+6d3CKq9c80hi4tjIbIAT6lmGW9W6WzlHiu9PS8uSuUYU+Do+j1baiFp3H25XEVxDIG2g=="], + "internal-slot": ["internal-slot@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "hasown": "^2.0.2", "side-channel": "^1.1.0" } }, "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw=="], "ipaddr.js": ["ipaddr.js@1.9.1", "", {}, "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="], @@ -1940,6 +2054,8 @@ "is-path-inside": ["is-path-inside@3.0.3", "", {}, "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ=="], + "is-plain-obj": ["is-plain-obj@1.1.0", "", {}, "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg=="], + "is-plain-object": ["is-plain-object@5.0.0", "", {}, "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q=="], "is-potential-custom-element-name": ["is-potential-custom-element-name@1.0.1", "", {}, "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ=="], @@ -2166,6 +2282,8 @@ "lower-case": ["lower-case@2.0.2", "", { "dependencies": { "tslib": "^2.0.3" } }, "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg=="], + "lowercase-keys": ["lowercase-keys@3.0.0", "", {}, "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ=="], + "lru-cache": ["lru-cache@6.0.0", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA=="], "magic-string": ["magic-string@0.30.17", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0" } }, "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA=="], @@ -2216,6 +2334,8 @@ "mimic-fn": ["mimic-fn@2.1.0", "", {}, "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="], + "mimic-response": ["mimic-response@4.0.0", "", {}, "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg=="], + "minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], "minimist": ["minimist@1.2.8", "", {}, "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="], @@ -2224,6 +2344,8 @@ "mitt": ["mitt@3.0.1", "", {}, "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw=="], + "mkdirp": ["mkdirp@3.0.1", "", { "bin": { "mkdirp": "dist/cjs/src/bin.js" } }, "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg=="], + "mlly": ["mlly@1.7.4", "", { "dependencies": { "acorn": "^8.14.0", "pathe": "^2.0.1", "pkg-types": "^1.3.0", "ufo": "^1.5.4" } }, "sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw=="], "mock-apollo-client": ["mock-apollo-client@1.3.1", "", { "peerDependencies": { "@apollo/client": "^3.0.0" } }, "sha512-jBl1YGofh9RpTUFfShwIumiry5qRkR1LYW12K1iZ576kMFh03psHTRiuY2k3dT6cUQ28RAK4gRFl9lVloazGhA=="], @@ -2252,6 +2374,8 @@ "natural-compare": ["natural-compare@1.4.0", "", {}, "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw=="], + "ncp": ["ncp@2.0.0", "", { "bin": { "ncp": "./bin/ncp" } }, "sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA=="], + "nearley": ["nearley@2.20.1", "", { "dependencies": { "commander": "^2.19.0", "moo": "^0.5.0", "railroad-diagrams": "^1.0.0", "randexp": "0.4.6" }, "bin": { "nearleyc": "bin/nearleyc.js", "nearley-test": "bin/nearley-test.js", "nearley-unparse": "bin/nearley-unparse.js", "nearley-railroad": "bin/nearley-railroad.js" } }, "sha512-+Mc8UaAebFzgV+KpI5n7DasuuQCHA89dmwm7JXw3TV43ukfNQ9DnBH3Mdb2g/I4Fdxc26pwimBWvjIw0UAILSQ=="], "negotiator": ["negotiator@0.6.3", "", {}, "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg=="], @@ -2292,6 +2416,8 @@ "normalize-range": ["normalize-range@0.1.2", "", {}, "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA=="], + "normalize-url": ["normalize-url@8.0.1", "", {}, "sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w=="], + "npm-run-path": ["npm-run-path@4.0.1", "", { "dependencies": { "path-key": "^3.0.0" } }, "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw=="], "nth-check": ["nth-check@2.1.1", "", { "dependencies": { "boolbase": "^1.0.0" } }, "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w=="], @@ -2336,6 +2462,8 @@ "own-keys": ["own-keys@1.0.1", "", { "dependencies": { "get-intrinsic": "^1.2.6", "object-keys": "^1.1.1", "safe-push-apply": "^1.0.0" } }, "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg=="], + "p-cancelable": ["p-cancelable@3.0.0", "", {}, "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw=="], + "p-event": ["p-event@4.2.0", "", { "dependencies": { "p-timeout": "^3.1.0" } }, "sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ=="], "p-finally": ["p-finally@1.0.0", "", {}, "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow=="], @@ -2392,6 +2520,10 @@ "peberminta": ["peberminta@0.9.0", "", {}, "sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ=="], + "peek-readable": ["peek-readable@5.4.2", "", {}, "sha512-peBp3qZyuS6cNIJ2akRNG1uo1WJ1d0wTxg/fxMdZ0BqCVhx242bSFHM9eNqflfJVS9SsgkzgT/1UgnsurBOTMg=="], + + "pend": ["pend@1.2.0", "", {}, "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg=="], + "perfect-debounce": ["perfect-debounce@1.0.0", "", {}, "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA=="], "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], @@ -2402,6 +2534,8 @@ "pirates": ["pirates@4.0.7", "", {}, "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA=="], + "piscina": ["piscina@4.9.2", "", { "optionalDependencies": { "@napi-rs/nice": "^1.0.1" } }, "sha512-Fq0FERJWFEUpB4eSY59wSNwXD4RYqR+nR/WiEVcZW8IWfVBxJJafcgTEZDQo8k3w0sUarJ8RyVbbUF4GQ2LGbQ=="], + "pkg-dir": ["pkg-dir@4.2.0", "", { "dependencies": { "find-up": "^4.0.0" } }, "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ=="], "pkg-types": ["pkg-types@1.3.1", "", { "dependencies": { "confbox": "^0.1.8", "mlly": "^1.7.4", "pathe": "^2.0.1" } }, "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ=="], @@ -2496,6 +2630,8 @@ "queue-microtask": ["queue-microtask@1.2.3", "", {}, "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="], + "quick-lru": ["quick-lru@5.1.1", "", {}, "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA=="], + "railroad-diagrams": ["railroad-diagrams@1.0.0", "", {}, "sha512-cz93DjNeLY0idrCNOH6PviZGRN9GJhsdm9hpn1YCS879fj4W+x5IFJhhkRZcwVgMmFF7R82UA/7Oh+R8lLZg6A=="], "randexp": ["randexp@0.4.6", "", { "dependencies": { "discontinuous-range": "1.0.0", "ret": "~0.1.10" } }, "sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ=="], @@ -2544,6 +2680,8 @@ "resolve": ["resolve@1.22.10", "", { "dependencies": { "is-core-module": "^2.16.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w=="], + "resolve-alpn": ["resolve-alpn@1.2.1", "", {}, "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g=="], + "resolve-cwd": ["resolve-cwd@3.0.0", "", { "dependencies": { "resolve-from": "^5.0.0" } }, "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg=="], "resolve-from": ["resolve-from@5.0.0", "", {}, "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw=="], @@ -2552,6 +2690,8 @@ "resolve.exports": ["resolve.exports@1.1.1", "", {}, "sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ=="], + "responselike": ["responselike@3.0.0", "", { "dependencies": { "lowercase-keys": "^3.0.0" } }, "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg=="], + "ret": ["ret@0.1.15", "", {}, "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg=="], "retry": ["retry@0.13.1", "", {}, "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg=="], @@ -2594,10 +2734,16 @@ "scule": ["scule@1.3.0", "", {}, "sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g=="], + "seek-bzip": ["seek-bzip@2.0.0", "", { "dependencies": { "commander": "^6.0.0" }, "bin": { "seek-bunzip": "bin/seek-bunzip", "seek-table": "bin/seek-bzip-table" } }, "sha512-SMguiTnYrhpLdk3PwfzHeotrcwi8bNV4iemL9tx9poR/yeaMYwB9VzR1w7b57DuWpuqR8n6oZboi0hj3AxZxQg=="], + "selderee": ["selderee@0.6.0", "", { "dependencies": { "parseley": "^0.7.0" } }, "sha512-ibqWGV5aChDvfVdqNYuaJP/HnVBhlRGSRrlbttmlMpHcLuTqqbMH36QkSs9GEgj5M88JDYLI8eyP94JaQ8xRlg=="], "semver": ["semver@7.7.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA=="], + "semver-regex": ["semver-regex@4.0.5", "", {}, "sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw=="], + + "semver-truncate": ["semver-truncate@3.0.0", "", { "dependencies": { "semver": "^7.3.5" } }, "sha512-LJWA9kSvMolR51oDE6PN3kALBNaUdkxzAGcexw8gjMA8xr5zUqK0JiR3CgARSqanYF3Z1YHvsErb1KDgh+v7Rg=="], + "send": ["send@0.19.0", "", { "dependencies": { "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", "http-errors": "2.0.0", "mime": "1.6.0", "ms": "2.1.3", "on-finished": "2.4.1", "range-parser": "~1.2.1", "statuses": "2.0.1" } }, "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw=="], "seq-queue": ["seq-queue@0.0.5", "", {}, "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q=="], @@ -2652,7 +2798,11 @@ "sodium-universal": ["sodium-universal@4.0.1", "", { "dependencies": { "sodium-native": "^4.0.0" }, "peerDependencies": { "sodium-javascript": "~0.8.0" }, "optionalPeers": ["sodium-javascript"] }, "sha512-sNp13PrxYLaUFHTGoDKkSDFvoEu51bfzE12RwGlqU1fcrkpAOK0NvizaJzOWV0Omtk9me2+Pnbjcf/l0efxuGQ=="], - "source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], + "sort-keys": ["sort-keys@1.1.2", "", { "dependencies": { "is-plain-obj": "^1.0.0" } }, "sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg=="], + + "sort-keys-length": ["sort-keys-length@1.0.1", "", { "dependencies": { "sort-keys": "^1.0.0" } }, "sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw=="], + + "source-map": ["source-map@0.7.4", "", {}, "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA=="], "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], @@ -2700,6 +2850,8 @@ "strip-bom": ["strip-bom@3.0.0", "", {}, "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA=="], + "strip-dirs": ["strip-dirs@3.0.0", "", { "dependencies": { "inspect-with-kind": "^1.0.5", "is-plain-obj": "^1.1.0" } }, "sha512-I0sdgcFTfKQlUPZyAqPJmSG3HLO9rWDFnxonnIbskYNM3DwFOeTNB5KzVq3dA1GdRAc/25b5Y7UO2TQfKWw4aQ=="], + "strip-eof": ["strip-eof@1.0.0", "", {}, "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q=="], "strip-final-newline": ["strip-final-newline@2.0.0", "", {}, "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA=="], @@ -2708,6 +2860,8 @@ "strip-literal": ["strip-literal@3.0.0", "", { "dependencies": { "js-tokens": "^9.0.1" } }, "sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA=="], + "strtok3": ["strtok3@9.1.1", "", { "dependencies": { "@tokenizer/token": "^0.3.0", "peek-readable": "^5.3.1" } }, "sha512-FhwotcEqjr241ZbjFzjlIYg6c5/L/s4yBGWSMvJ9UoExiSqL+FnFA/CaeZx17WGaZMS/4SOZp8wH18jSS4R4lw=="], + "stylelint": ["stylelint@16.19.1", "", { "dependencies": { "@csstools/css-parser-algorithms": "^3.0.4", "@csstools/css-tokenizer": "^3.0.3", "@csstools/media-query-list-parser": "^4.0.2", "@csstools/selector-specificity": "^5.0.0", "@dual-bundle/import-meta-resolve": "^4.1.0", "balanced-match": "^2.0.0", "colord": "^2.9.3", "cosmiconfig": "^9.0.0", "css-functions-list": "^3.2.3", "css-tree": "^3.1.0", "debug": "^4.3.7", "fast-glob": "^3.3.3", "fastest-levenshtein": "^1.0.16", "file-entry-cache": "^10.0.8", "global-modules": "^2.0.0", "globby": "^11.1.0", "globjoin": "^0.1.4", "html-tags": "^3.3.1", "ignore": "^7.0.3", "imurmurhash": "^0.1.4", "is-plain-object": "^5.0.0", "known-css-properties": "^0.36.0", "mathml-tag-names": "^2.1.3", "meow": "^13.2.0", "micromatch": "^4.0.8", "normalize-path": "^3.0.0", "picocolors": "^1.1.1", "postcss": "^8.5.3", "postcss-resolve-nested-selector": "^0.1.6", "postcss-safe-parser": "^7.0.1", "postcss-selector-parser": "^7.1.0", "postcss-value-parser": "^4.2.0", "resolve-from": "^5.0.0", "string-width": "^4.2.3", "supports-hyperlinks": "^3.2.0", "svg-tags": "^1.0.0", "table": "^6.9.0", "write-file-atomic": "^5.0.1" }, "bin": { "stylelint": "bin/stylelint.mjs" } }, "sha512-C1SlPZNMKl+d/C867ZdCRthrS+6KuZ3AoGW113RZCOL0M8xOGpgx7G70wq7lFvqvm4dcfdGFVLB/mNaLFChRKw=="], "stylelint-config-html": ["stylelint-config-html@1.1.0", "", { "peerDependencies": { "postcss-html": "^1.0.0", "stylelint": ">=14.0.0" } }, "sha512-IZv4IVESjKLumUGi+HWeb7skgO6/g4VMuAYrJdlqQFndgbj6WJAXPhaysvBiXefX79upBdQVumgYcdd17gCpjQ=="], @@ -2746,6 +2900,8 @@ "tapable": ["tapable@2.2.1", "", {}, "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ=="], + "tar-stream": ["tar-stream@3.1.7", "", { "dependencies": { "b4a": "^1.6.4", "fast-fifo": "^1.2.0", "streamx": "^2.15.0" } }, "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ=="], + "terminal-link": ["terminal-link@2.1.1", "", { "dependencies": { "ansi-escapes": "^4.2.1", "supports-hyperlinks": "^2.0.0" } }, "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ=="], "terser": ["terser@5.39.0", "", { "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, "bin": { "terser": "bin/terser" } }, "sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw=="], @@ -2762,6 +2918,8 @@ "throttle-debounce": ["throttle-debounce@5.0.2", "", {}, "sha512-B71/4oyj61iNH0KeCamLuE2rmKuTO5byTOSVwECM5FA7TiAiAW+UqTKZ9ERueC4qvgSttUhdmq1mXC3kJqGX7A=="], + "through": ["through@2.3.8", "", {}, "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg=="], + "time-ordered-set": ["time-ordered-set@2.0.1", "", {}, "sha512-VJEKmgSN2UiOLB8BpN8Sh2b9LGMHTP5OPrQRpnKjvOheOyzk0mufbjzjKTIG2gO4A+Y+vDJ+0TcLbpUmMLsg8A=="], "timeout-refresh": ["timeout-refresh@2.0.1", "", {}, "sha512-SVqEcMZBsZF9mA78rjzCrYrUs37LMJk3ShZ851ygZYW1cMeIjs9mL57KO6Iv5mmjSQnOe/29/VAfGXo+oRCiVw=="], @@ -2796,6 +2954,8 @@ "token-stream": ["token-stream@1.0.0", "", {}, "sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg=="], + "token-types": ["token-types@6.0.0", "", { "dependencies": { "@tokenizer/token": "^0.3.0", "ieee754": "^1.2.1" } }, "sha512-lbDrTLVsHhOMljPscd0yitpozq7Ga2M5Cvez5AjGg8GASBjtt6iERCAJ93yommPmz62fb45oFIXHEZ3u9bfJEA=="], + "toposort": ["toposort@2.0.2", "", {}, "sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg=="], "touch": ["touch@3.1.1", "", { "bin": { "nodetouch": "bin/nodetouch.js" } }, "sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA=="], @@ -2876,8 +3036,12 @@ "uglify-js": ["uglify-js@3.19.3", "", { "bin": { "uglifyjs": "bin/uglifyjs" } }, "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ=="], + "uint8array-extras": ["uint8array-extras@1.4.0", "", {}, "sha512-ZPtzy0hu4cZjv3z5NW9gfKnNLjoz4y6uv4HlelAjDK7sY/xOkKZv9xK/WQpcsBB3jEybChz9DPC2U/+cusjJVQ=="], + "unbox-primitive": ["unbox-primitive@1.1.0", "", { "dependencies": { "call-bound": "^1.0.3", "has-bigints": "^1.0.2", "has-symbols": "^1.1.0", "which-boxed-primitive": "^1.1.1" } }, "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw=="], + "unbzip2-stream": ["unbzip2-stream@1.4.3", "", { "dependencies": { "buffer": "^5.2.1", "through": "^2.3.8" } }, "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg=="], + "unctx": ["unctx@2.4.1", "", { "dependencies": { "acorn": "^8.14.0", "estree-walker": "^3.0.3", "magic-string": "^0.30.17", "unplugin": "^2.1.0" } }, "sha512-AbaYw0Nm4mK4qjhns67C+kgxR2YWiwlDBPzxrN8h8C6VtAdCgditAY5Dezu3IJy4XVqAnbrXt9oQJvsn3fyozg=="], "undefsafe": ["undefsafe@2.0.5", "", {}, "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA=="], @@ -3058,6 +3222,8 @@ "yargs-parser": ["yargs-parser@20.2.9", "", {}, "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w=="], + "yauzl": ["yauzl@3.2.0", "", { "dependencies": { "buffer-crc32": "~0.2.3", "pend": "~1.2.0" } }, "sha512-Ow9nuGZE+qp1u4JIPvg+uCiUr7xGQWdff7JQSk5VGYTAZMDe2q8lxJ10ygv10qmSj031Ty/6FNJpLO4o1Sgc+w=="], + "yn": ["yn@3.1.1", "", {}, "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q=="], "yocto-queue": ["yocto-queue@0.1.0", "", {}, "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="], @@ -3144,8 +3310,14 @@ "@jest/reporters/jest-worker": ["jest-worker@27.5.1", "", { "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" } }, "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg=="], + "@jest/reporters/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], + + "@jest/source-map/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], + "@jest/transform/convert-source-map": ["convert-source-map@1.9.0", "", {}, "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A=="], + "@jest/transform/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], + "@jest/transform/write-file-atomic": ["write-file-atomic@3.0.3", "", { "dependencies": { "imurmurhash": "^0.1.4", "is-typedarray": "^1.0.0", "signal-exit": "^3.0.2", "typedarray-to-buffer": "^3.1.5" } }, "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q=="], "@jest/types/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], @@ -3166,6 +3338,10 @@ "@selderee/plugin-htmlparser2/domhandler": ["domhandler@4.3.1", "", { "dependencies": { "domelementtype": "^2.2.0" } }, "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ=="], + "@swc/cli/commander": ["commander@8.3.0", "", {}, "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww=="], + + "@swc/cli/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], + "@types/accepts/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], "@types/body-parser/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], @@ -3268,6 +3444,8 @@ "babel-plugin-istanbul/test-exclude": ["test-exclude@6.0.0", "", { "dependencies": { "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", "minimatch": "^3.0.4" } }, "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w=="], + "backend/regenerator-runtime": ["regenerator-runtime@0.14.1", "", {}, "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw=="], + "body-parser/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], "body-parser/iconv-lite": ["iconv-lite@0.4.24", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3" } }, "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA=="], @@ -3298,6 +3476,8 @@ "citty/consola": ["consola@3.4.2", "", {}, "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA=="], + "clean-css/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], + "concurrently/supports-color": ["supports-color@8.1.1", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="], "css-select/domhandler": ["domhandler@4.3.1", "", { "dependencies": { "domelementtype": "^2.2.0" } }, "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ=="], @@ -3306,7 +3486,7 @@ "cssstyle/rrweb-cssom": ["rrweb-cssom@0.8.0", "", {}, "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw=="], - "database/prettier": ["prettier@2.8.8", "", { "bin": { "prettier": "bin-prettier.js" } }, "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q=="], + "decompress-response/mimic-response": ["mimic-response@3.1.0", "", {}, "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ=="], "dht-node/@types/jest": ["@types/jest@27.5.1", "", { "dependencies": { "jest-matcher-utils": "^27.0.0", "pretty-format": "^27.0.0" } }, "sha512-fUy7YRpT+rHXto1YlL+J9rs0uLGyiqVt3ZOTQR+4ROc47yNl8WLdVLgUloBRhOxP1PZvguHl44T3H0wAWxahYQ=="], @@ -3326,6 +3506,8 @@ "editorconfig/minimatch": ["minimatch@9.0.1", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w=="], + "escodegen/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], + "eslint/@eslint/eslintrc": ["@eslint/eslintrc@2.1.4", "", { "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", "espree": "^9.6.0", "globals": "^13.19.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" } }, "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ=="], "eslint-import-resolver-node/debug": ["debug@3.2.7", "", { "dependencies": { "ms": "^2.1.1" } }, "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="], @@ -3356,6 +3538,8 @@ "federation/helmet": ["helmet@7.2.0", "", {}, "sha512-ZRiwvN089JfMXokizgqEPXsl2Guk094yExfoDXR0cBYWxtBbaSww/w+vT4WEJsBW2iTUi1GgZ6swmoug3Oy4Xw=="], + "file-type/get-stream": ["get-stream@9.0.1", "", { "dependencies": { "@sec-ant/readable-stream": "^0.4.1", "is-stream": "^4.0.1" } }, "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA=="], + "filelist/minimatch": ["minimatch@5.1.6", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g=="], "finalhandler/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], @@ -3372,10 +3556,14 @@ "globals/type-fest": ["type-fest@0.20.2", "", {}, "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ=="], + "got/form-data-encoder": ["form-data-encoder@2.1.4", "", {}, "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw=="], + "graphql-request/form-data": ["form-data@3.0.3", "", { "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "es-set-tostringtag": "^2.1.0", "mime-types": "^2.1.35" } }, "sha512-q5YBMeWy6E2Un0nMGWMgI65MAKtaylxfNJGJxpGh45YDciZB4epbWpaAfImil6CPAPTYB4sh0URQNDRIZG5F2w=="], "graphql-tools/uuid": ["uuid@3.4.0", "", { "bin": { "uuid": "./bin/uuid" } }, "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="], + "handlebars/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], + "html-minifier-terser/commander": ["commander@8.3.0", "", {}, "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww=="], "html-to-text/htmlparser2": ["htmlparser2@6.1.0", "", { "dependencies": { "domelementtype": "^2.0.1", "domhandler": "^4.0.0", "domutils": "^2.5.2", "entities": "^2.0.0" } }, "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A=="], @@ -3498,6 +3686,8 @@ "schema-utils/ajv": ["ajv@8.17.1", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g=="], + "seek-bzip/commander": ["commander@6.2.1", "", {}, "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA=="], + "send/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], "send/encodeurl": ["encodeurl@1.0.2", "", {}, "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w=="], @@ -3508,6 +3698,8 @@ "sodium-universal/sodium-native": ["sodium-native@4.3.3", "", { "dependencies": { "require-addon": "^1.1.0" } }, "sha512-OnxSlN3uyY8D0EsLHpmm2HOFmKddQVvEMmsakCrXUzSd8kjjbzL413t4ZNF3n0UxSwNgwTyUvkmZHTfuCeiYSw=="], + "source-map-support/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], + "stack-utils/escape-string-regexp": ["escape-string-regexp@2.0.0", "", {}, "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w=="], "streamroller/fs-extra": ["fs-extra@8.1.0", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", "universalify": "^0.1.0" } }, "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g=="], @@ -3564,6 +3756,8 @@ "typeorm/uuid": ["uuid@11.1.0", "", { "bin": { "uuid": "dist/esm/bin/uuid" } }, "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A=="], + "unbzip2-stream/buffer": ["buffer@5.7.1", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" } }, "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ=="], + "unctx/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], "unctx/unplugin": ["unplugin@2.3.2", "", { "dependencies": { "acorn": "^8.14.1", "picomatch": "^4.0.2", "webpack-virtual-modules": "^0.6.2" } }, "sha512-3n7YA46rROb3zSj8fFxtxC/PqoyvYQ0llwz9wtUPUutr9ig09C8gGo5CWCwHrUzlqC1LLR43kxp5vEIyH1ac1w=="], @@ -3592,8 +3786,6 @@ "v8-to-istanbul/convert-source-map": ["convert-source-map@1.9.0", "", {}, "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A=="], - "v8-to-istanbul/source-map": ["source-map@0.7.4", "", {}, "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA=="], - "vee-validate/@vue/devtools-api": ["@vue/devtools-api@7.7.6", "", { "dependencies": { "@vue/devtools-kit": "^7.7.6" } }, "sha512-b2Xx0KvXZObePpXPYHvBRRJLDQn5nhKjXh7vUhMEtWxz1AYNFOVIsh5+HLP8xDGL7sy+Q7hXeUxPHB/KgbtsPw=="], "vee-validate/type-fest": ["type-fest@4.40.1", "", {}, "sha512-9YvLNnORDpI+vghLU/Nf+zSv0kL47KbVJ1o3sKgoTefl6i+zebxbiDQWoe/oWWqPhIgQdRZRT1KA9sCPL810SA=="], @@ -3660,6 +3852,8 @@ "@nuxt/kit/pkg-types/confbox": ["confbox@0.2.2", "", {}, "sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ=="], + "@swc/cli/minimatch/brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="], + "@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="], "@typescript-eslint/utils/@typescript-eslint/scope-manager/@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@7.18.0", "", { "dependencies": { "@typescript-eslint/types": "7.18.0", "eslint-visitor-keys": "^3.4.3" } }, "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg=="], @@ -3700,6 +3894,8 @@ "express/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], + "file-type/get-stream/is-stream": ["is-stream@4.0.1", "", {}, "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A=="], + "filelist/minimatch/brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="], "finalhandler/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], @@ -3884,6 +4080,8 @@ "@istanbuljs/load-nyc-config/find-up/locate-path/p-locate": ["p-locate@4.1.0", "", { "dependencies": { "p-limit": "^2.2.0" } }, "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A=="], + "@swc/cli/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], + "@typescript-eslint/typescript-estree/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], "@typescript-eslint/utils/@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="], diff --git a/config-schema/README.md b/config-schema/README.md new file mode 100644 index 000000000..7a3aa7d9d --- /dev/null +++ b/config-schema/README.md @@ -0,0 +1,4 @@ +# config-schema + +## Bun-Compatibility +Full bun compatible \ No newline at end of file diff --git a/config-schema/package.json b/config-schema/package.json index 534c91b9a..e0cccb0eb 100644 --- a/config-schema/package.json +++ b/config-schema/package.json @@ -4,7 +4,6 @@ "description": "Gradido Config for validate config", "main": "./build/index.js", "types": "./src/index.ts", - "type": "module", "exports": { ".": { "import": "./build/index.js", diff --git a/database/README.md b/database/README.md index e951f4530..780545381 100644 --- a/database/README.md +++ b/database/README.md @@ -1,39 +1,51 @@ # database -## Project setup +## Bun-Compatibility -```bash -yarn install +This module uses `TypeORM` and `ts-mysql-migrate`. Bun currently has several issues running it: + +### Known Issues + +1. **`Geometry` type not recognized** + `Geometry` must be imported as type: + ```ts + import type { Geometry } from 'typeorm' + ``` +2. **Circular imports between entities** +Bun fails when two entities import each other (e.g., via @ManyToOne / @OneToMany). Node.js tolerates this, Bun does not. + +3. ts-mysql-migrate **breaks** +Bun crashes due to unsupported module.parent.parent.require(): +```ts +TypeError: undefined is not an object (evaluating 'module.parent.parent.require') ``` -## Upgrade migrations production +## Upgrade migrations ```bash yarn up ``` -## Upgrade migrations development - -```bash -yarn dev_up -``` - -## Downgrade migrations production +## Downgrade migrations ```bash yarn down ``` -## Downgrade migrations development - -```bash -yarn dev_down -``` ## Reset database ```bash -yarn dev_reset +yarn reset ``` Runs all down migrations and after this all up migrations. + +## Clear database +call truncate for all tables + +```bash +yarn clear +``` + + diff --git a/dht-node/Dockerfile b/dht-node/Dockerfile index e57914d8d..a1096b9c7 100644 --- a/dht-node/Dockerfile +++ b/dht-node/Dockerfile @@ -106,4 +106,4 @@ RUN yarn add udx-native@1.5.3 sodium-native@4.0.0 \ COPY --chown=app:app --from=installer ${DOCKER_WORKDIR}/dht-node/log4js-config.json ./log4js-config.json # Run command -CMD ["node", "index.js"] \ No newline at end of file +CMD ["TZ=UTC", "node", "index.js"] \ No newline at end of file diff --git a/dht-node/README.md b/dht-node/README.md new file mode 100644 index 000000000..88a2ca570 --- /dev/null +++ b/dht-node/README.md @@ -0,0 +1,9 @@ +# DHT-Node + +## Bun-Compatibility + +### Crash on NAPI module using `uv_interface_addresses` + +Bun crashes when a NAPI module tries to call `uv_interface_addresses`, a libuv function currently unsupported: + +Bun is working hard to support all NAPI module calls diff --git a/dht-node/package.json b/dht-node/package.json index 145f15585..d327efe66 100644 --- a/dht-node/package.json +++ b/dht-node/package.json @@ -8,37 +8,38 @@ "license": "Apache-2.0", "private": false, "scripts": { - "build": "bun esbuild.config.ts", - "start": "cross-env TZ=UTC bun build/index.js", - "dev": "cross-env TZ=UTC bun --hot src/index.ts", + "build": "tsx esbuild.config.ts", + "start": "cross-env TZ=UTC NODE_ENV=production node build/index.js", + "dev": "cross-env TZ=UTC tsx watch src/index.ts", "typecheck": "tsc --noEmit", "lint": "biome check --error-on-warnings .", "lint:fix": "biome check --error-on-warnings . --write", "test": "cross-env TZ=UTC NODE_ENV=development DB_DATABASE=gradido_test_dht jest --runInBand --forceExit --detectOpenHandles" }, "dependencies": { - "@hyperswarm/dht": "^6.4.4", + "@hyperswarm/dht": "^6.5.1", "config-schema": "*", "cross-env": "^7.0.3", "database": "*", "dotenv": "10.0.0", - "esbuild": "^0.25.2", + "esbuild": "^0.25.3", "joi": "^17.13.3", - "log4js": "^6.7.1", - "typeorm": "^0.3.16", + "log4js": "^6.9.1", + "tsx": "^4.19.4", + "typeorm": "^0.3.22", "uuid": "^8.3.2" }, "devDependencies": { "@biomejs/biome": "1.9.4", - "@types/dotenv": "^8.2.0", + "@types/dotenv": "^8.2.3", "@types/jest": "27.5.1", "@types/joi": "^17.2.3", - "@types/node": "^17.0.21", + "@types/node": "^17.0.45", "@types/uuid": "^8.3.4", "jest": "27.5.1", - "prettier": "^2.8.7", + "prettier": "^2.8.8", "ts-jest": "27.1.4", - "typescript": "^4.9.4" + "typescript": "^4.9.5" }, "engines": { "node": ">=18" diff --git a/federation/Dockerfile b/federation/Dockerfile index e08ba2a4a..35fc6af98 100644 --- a/federation/Dockerfile +++ b/federation/Dockerfile @@ -105,4 +105,4 @@ RUN yarn add sodium-native@4.0.0 \ COPY --chown=app:app --from=installer ${DOCKER_WORKDIR}/federation/log4js-config.json ./log4js-config.json # Run command -CMD ["node", "index.js"] \ No newline at end of file +CMD ["TZ=UTC", "node", "index.js"] \ No newline at end of file diff --git a/federation/README.md b/federation/README.md new file mode 100644 index 000000000..f4ee3ecda --- /dev/null +++ b/federation/README.md @@ -0,0 +1,13 @@ +# Federation + +## Bun-Compatibility + +### Known Issue: Bun's --minify breaks mysql2 compatibility + +``` +error: Received packet in the wrong sequence. + fatal: true, + code: "PROTOCOL_INCORRECT_PACKET_SEQUENCE" + +``` +This issue seems to be caused by bun aggressively optimizing or minifying binary operations in the mysql2 authentication layer (Buffer, crypto, xor, etc.), resulting in corrupted packet handling. \ No newline at end of file diff --git a/federation/esbuild.config.ts b/federation/esbuild.config.ts new file mode 100644 index 000000000..b4154f008 --- /dev/null +++ b/federation/esbuild.config.ts @@ -0,0 +1,15 @@ +import { esbuildDecorators } from '@anatine/esbuild-decorators' +import { build } from 'esbuild' + +build({ + entryPoints: ['src/index.ts'], + outdir: 'build', + platform: 'node', + target: 'node18.20.7', + bundle: true, + keepNames: true, + // legalComments: 'inline', + external: ['sodium-native'], + plugins: [esbuildDecorators()], + minify: true, +}) \ No newline at end of file diff --git a/federation/package.json b/federation/package.json index 68d37b5cd..b57e48263 100644 --- a/federation/package.json +++ b/federation/package.json @@ -9,14 +9,18 @@ "private": false, "scripts": { - "start": "cross-env TZ=UTC bun src/index.ts", - "dev": "cross-env TZ=UTC bun --hot src/index.ts", + "build": "tsx ./esbuild.config.ts", + "start": "cross-env TZ=UTC NODE_ENV=production node build/index.js", + "start:bun": "cross-env TZ=UTC NODE_ENV=production bun build/index.js", + "dev": "cross-env TZ=UTC tsx watch src/index.ts", + "dev:bun": "cross-env TZ=UTC bun --hot src/index.ts", "typecheck": "tsc --noEmit", "test": "cross-env TZ=UTC NODE_ENV=development DB_DATABASE=gradido_test_federation jest --runInBand --forceExit --detectOpenHandles", "lint": "biome check --error-on-warnings .", "lint:fix": "biome check --error-on-warnings . --write" }, "dependencies": { + "@anatine/esbuild-decorators": "^0.2.19", "apollo-server-express": "^2.25.2", "await-semaphore": "0.1.3", "class-validator": "^0.13.2", @@ -37,6 +41,7 @@ "log4js": "^6.7.1", "reflect-metadata": "^0.1.13", "sodium-native": "^3.3.0", + "tsx": "^4.19.4", "type-graphql": "^1.1.1", "typeorm": "^0.3.16", "uuid": "8.3.2" diff --git a/yarn.lock b/yarn.lock index c092ac4e9..22ac25cd1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -440,6 +440,13 @@ resolved "https://registry.yarnpkg.com/@biomejs/cli-win32-x64/-/cli-win32-x64-1.9.4.tgz#4c7afa90e3970213599b4095e62f87e5972b2340" integrity sha512-8Y5wMhVIPaWe6jw2H+KlEm4wP/f7EW3810ZLmDlrEEy5KvBsb9ECEfu/kMWD484ijfQ8+nIi0giMgu9g1UAuuA== +"@cspotcode/source-map-support@^0.8.0": + version "0.8.1" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" + integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== + dependencies: + "@jridgewell/trace-mapping" "0.3.9" + "@csstools/color-helpers@^5.0.2": version "5.0.2" resolved "https://registry.yarnpkg.com/@csstools/color-helpers/-/color-helpers-5.0.2.tgz#82592c9a7c2b83c293d9161894e2a6471feb97b8" @@ -823,7 +830,7 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3" integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== -"@hyperswarm/dht@^6.4.4": +"@hyperswarm/dht@^6.5.1": version "6.5.1" resolved "https://registry.yarnpkg.com/@hyperswarm/dht/-/dht-6.5.1.tgz#07e144590f532c2f872e3617117d17f266b2f7a4" integrity sha512-TTTOzuwqbmXNwl+b2FXeHCoR2QS1sqxQvqXwv2i54sdEkKmF8f8t4U8PsRGk5PUO3qA6GxlMThvXixg9Fgs4Yw== @@ -1302,7 +1309,7 @@ "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.24" -"@jridgewell/resolve-uri@^3.1.0": +"@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0": version "3.1.2" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== @@ -1325,6 +1332,14 @@ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== +"@jridgewell/trace-mapping@0.3.9": + version "0.3.9" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" + integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping@^0.3.23", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": version "0.3.25" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" @@ -1424,6 +1439,108 @@ "@morev/utils" "^3.11.1" "@nuxt/kit" "^3.13.2" +"@napi-rs/nice-android-arm-eabi@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-android-arm-eabi/-/nice-android-arm-eabi-1.0.1.tgz#9a0cba12706ff56500df127d6f4caf28ddb94936" + integrity sha512-5qpvOu5IGwDo7MEKVqqyAxF90I6aLj4n07OzpARdgDRfz8UbBztTByBp0RC59r3J1Ij8uzYi6jI7r5Lws7nn6w== + +"@napi-rs/nice-android-arm64@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-android-arm64/-/nice-android-arm64-1.0.1.tgz#32fc32e9649bd759d2a39ad745e95766f6759d2f" + integrity sha512-GqvXL0P8fZ+mQqG1g0o4AO9hJjQaeYG84FRfZaYjyJtZZZcMjXW5TwkL8Y8UApheJgyE13TQ4YNUssQaTgTyvA== + +"@napi-rs/nice-darwin-arm64@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-darwin-arm64/-/nice-darwin-arm64-1.0.1.tgz#d3c44c51b94b25a82d45803e2255891e833e787b" + integrity sha512-91k3HEqUl2fsrz/sKkuEkscj6EAj3/eZNCLqzD2AA0TtVbkQi8nqxZCZDMkfklULmxLkMxuUdKe7RvG/T6s2AA== + +"@napi-rs/nice-darwin-x64@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-darwin-x64/-/nice-darwin-x64-1.0.1.tgz#f1b1365a8370c6a6957e90085a9b4873d0e6a957" + integrity sha512-jXnMleYSIR/+TAN/p5u+NkCA7yidgswx5ftqzXdD5wgy/hNR92oerTXHc0jrlBisbd7DpzoaGY4cFD7Sm5GlgQ== + +"@napi-rs/nice-freebsd-x64@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-freebsd-x64/-/nice-freebsd-x64-1.0.1.tgz#4280f081efbe0b46c5165fdaea8b286e55a8f89e" + integrity sha512-j+iJ/ezONXRQsVIB/FJfwjeQXX7A2tf3gEXs4WUGFrJjpe/z2KB7sOv6zpkm08PofF36C9S7wTNuzHZ/Iiccfw== + +"@napi-rs/nice-linux-arm-gnueabihf@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-linux-arm-gnueabihf/-/nice-linux-arm-gnueabihf-1.0.1.tgz#07aec23a9467ed35eb7602af5e63d42c5d7bd473" + integrity sha512-G8RgJ8FYXYkkSGQwywAUh84m946UTn6l03/vmEXBYNJxQJcD+I3B3k5jmjFG/OPiU8DfvxutOP8bi+F89MCV7Q== + +"@napi-rs/nice-linux-arm64-gnu@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-linux-arm64-gnu/-/nice-linux-arm64-gnu-1.0.1.tgz#038a77134cc6df3c48059d5a5e199d6f50fb9a90" + integrity sha512-IMDak59/W5JSab1oZvmNbrms3mHqcreaCeClUjwlwDr0m3BoR09ZiN8cKFBzuSlXgRdZ4PNqCYNeGQv7YMTjuA== + +"@napi-rs/nice-linux-arm64-musl@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-linux-arm64-musl/-/nice-linux-arm64-musl-1.0.1.tgz#715d0906582ba0cff025109f42e5b84ea68c2bcc" + integrity sha512-wG8fa2VKuWM4CfjOjjRX9YLIbysSVV1S3Kgm2Fnc67ap/soHBeYZa6AGMeR5BJAylYRjnoVOzV19Cmkco3QEPw== + +"@napi-rs/nice-linux-ppc64-gnu@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-linux-ppc64-gnu/-/nice-linux-ppc64-gnu-1.0.1.tgz#ac1c8f781c67b0559fa7a1cd4ae3ca2299dc3d06" + integrity sha512-lxQ9WrBf0IlNTCA9oS2jg/iAjQyTI6JHzABV664LLrLA/SIdD+I1i3Mjf7TsnoUbgopBcCuDztVLfJ0q9ubf6Q== + +"@napi-rs/nice-linux-riscv64-gnu@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-linux-riscv64-gnu/-/nice-linux-riscv64-gnu-1.0.1.tgz#b0a430549acfd3920ffd28ce544e2fe17833d263" + integrity sha512-3xs69dO8WSWBb13KBVex+yvxmUeEsdWexxibqskzoKaWx9AIqkMbWmE2npkazJoopPKX2ULKd8Fm9veEn0g4Ig== + +"@napi-rs/nice-linux-s390x-gnu@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-linux-s390x-gnu/-/nice-linux-s390x-gnu-1.0.1.tgz#5b95caf411ad72a965885217db378c4d09733e97" + integrity sha512-lMFI3i9rlW7hgToyAzTaEybQYGbQHDrpRkg+1gJWEpH0PLAQoZ8jiY0IzakLfNWnVda1eTYYlxxFYzW8Rqczkg== + +"@napi-rs/nice-linux-x64-gnu@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-linux-x64-gnu/-/nice-linux-x64-gnu-1.0.1.tgz#a98cdef517549f8c17a83f0236a69418a90e77b7" + integrity sha512-XQAJs7DRN2GpLN6Fb+ZdGFeYZDdGl2Fn3TmFlqEL5JorgWKrQGRUrpGKbgZ25UeZPILuTKJ+OowG2avN8mThBA== + +"@napi-rs/nice-linux-x64-musl@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-linux-x64-musl/-/nice-linux-x64-musl-1.0.1.tgz#5e26843eafa940138aed437c870cca751c8a8957" + integrity sha512-/rodHpRSgiI9o1faq9SZOp/o2QkKQg7T+DK0R5AkbnI/YxvAIEHf2cngjYzLMQSQgUhxym+LFr+UGZx4vK4QdQ== + +"@napi-rs/nice-win32-arm64-msvc@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-win32-arm64-msvc/-/nice-win32-arm64-msvc-1.0.1.tgz#bd62617d02f04aa30ab1e9081363856715f84cd8" + integrity sha512-rEcz9vZymaCB3OqEXoHnp9YViLct8ugF+6uO5McifTedjq4QMQs3DHz35xBEGhH3gJWEsXMUbzazkz5KNM5YUg== + +"@napi-rs/nice-win32-ia32-msvc@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-win32-ia32-msvc/-/nice-win32-ia32-msvc-1.0.1.tgz#b8b7aad552a24836027473d9b9f16edaeabecf18" + integrity sha512-t7eBAyPUrWL8su3gDxw9xxxqNwZzAqKo0Szv3IjVQd1GpXXVkb6vBBQUuxfIYaXMzZLwlxRQ7uzM2vdUE9ULGw== + +"@napi-rs/nice-win32-x64-msvc@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-win32-x64-msvc/-/nice-win32-x64-msvc-1.0.1.tgz#37d8718b8f722f49067713e9f1e85540c9a3dd09" + integrity sha512-JlF+uDcatt3St2ntBG8H02F1mM45i5SF9W+bIKiReVE6wiy3o16oBP/yxt+RZ+N6LbCImJXJ6bXNO2kn9AXicg== + +"@napi-rs/nice@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice/-/nice-1.0.1.tgz#483d3ff31e5661829a1efb4825591a135c3bfa7d" + integrity sha512-zM0mVWSXE0a0h9aKACLwKmD6nHcRiKrPpCfvaKqG1CqDEyjEawId0ocXxVzPMCAm6kkWr2P025msfxXEnt8UGQ== + optionalDependencies: + "@napi-rs/nice-android-arm-eabi" "1.0.1" + "@napi-rs/nice-android-arm64" "1.0.1" + "@napi-rs/nice-darwin-arm64" "1.0.1" + "@napi-rs/nice-darwin-x64" "1.0.1" + "@napi-rs/nice-freebsd-x64" "1.0.1" + "@napi-rs/nice-linux-arm-gnueabihf" "1.0.1" + "@napi-rs/nice-linux-arm64-gnu" "1.0.1" + "@napi-rs/nice-linux-arm64-musl" "1.0.1" + "@napi-rs/nice-linux-ppc64-gnu" "1.0.1" + "@napi-rs/nice-linux-riscv64-gnu" "1.0.1" + "@napi-rs/nice-linux-s390x-gnu" "1.0.1" + "@napi-rs/nice-linux-x64-gnu" "1.0.1" + "@napi-rs/nice-linux-x64-musl" "1.0.1" + "@napi-rs/nice-win32-arm64-msvc" "1.0.1" + "@napi-rs/nice-win32-ia32-msvc" "1.0.1" + "@napi-rs/nice-win32-x64-msvc" "1.0.1" + "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" @@ -1478,61 +1595,6 @@ resolved "https://registry.yarnpkg.com/@one-ini/wasm/-/wasm-0.1.1.tgz#6013659736c9dbfccc96e8a9c2b3de317df39323" integrity sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw== -"@oven/bun-darwin-aarch64@1.2.11": - version "1.2.11" - resolved "https://registry.yarnpkg.com/@oven/bun-darwin-aarch64/-/bun-darwin-aarch64-1.2.11.tgz#c9331e918d7ed235d459a76183eb2040c5655f92" - integrity sha512-LN7gshxqEHJ1LA0B43Z56Ts3LxRjp2LrIz45FIgeKWE81PYglR9NMNou90gFuYlUtMyarSk6MV9Jdvo2kFnn8Q== - -"@oven/bun-darwin-x64-baseline@1.2.11": - version "1.2.11" - resolved "https://registry.yarnpkg.com/@oven/bun-darwin-x64-baseline/-/bun-darwin-x64-baseline-1.2.11.tgz#82793c47a3e5ef162eaed704968e486d24f85ce4" - integrity sha512-ksZJzq0Id3YsGcs++QnL1oGYjqY5XNihR0MscZ+M4YYruvVKHKim9Aql46+TI55YmKD810HVpeLolIeeTl2JUg== - -"@oven/bun-darwin-x64@1.2.11": - version "1.2.11" - resolved "https://registry.yarnpkg.com/@oven/bun-darwin-x64/-/bun-darwin-x64-1.2.11.tgz#ca476d3f1081a3f4467f9ce32a83362634668508" - integrity sha512-AmmlGdQmzORFeUZRa2Ki9UWYTt5ZGUwTp0z+H0uR4bYHy7sQhpDbNKtZcfKKuLRQ6P23DKc3Lpo+yhR0cg7prg== - -"@oven/bun-linux-aarch64-musl@1.2.11": - version "1.2.11" - resolved "https://registry.yarnpkg.com/@oven/bun-linux-aarch64-musl/-/bun-linux-aarch64-musl-1.2.11.tgz#f6301215469271c9766180deabc30de59e399a84" - integrity sha512-A/h7WxC2GbNus8fupz5EHsD8YugG19uW9GQWDf4tk0YWYuSaUOCP14JYbXbiJ48OFELWNchEc/2azajH+votbA== - -"@oven/bun-linux-aarch64@1.2.11": - version "1.2.11" - resolved "https://registry.yarnpkg.com/@oven/bun-linux-aarch64/-/bun-linux-aarch64-1.2.11.tgz#302e52e9495777fd614f8653043d256c25323e2f" - integrity sha512-jNQ5F6o9qC/KNhBnyxnjVRfiTxZB7thvZ7T+oPZSNh1IV8UWDunEGmUdOqSqoPsigpXHRjbV3DKJKN+YaPQCCA== - -"@oven/bun-linux-x64-baseline@1.2.11": - version "1.2.11" - resolved "https://registry.yarnpkg.com/@oven/bun-linux-x64-baseline/-/bun-linux-x64-baseline-1.2.11.tgz#47ef9ac80b61468051dd32c41588297ee770559e" - integrity sha512-xswex8EPmzX8BqbNXpiwgrpDkaD/FMIaxD85EIBaaksi6I8nln2kzEmlO/uVhbFAn9PPWydi3Q+FCcNnJGRazQ== - -"@oven/bun-linux-x64-musl-baseline@1.2.11": - version "1.2.11" - resolved "https://registry.yarnpkg.com/@oven/bun-linux-x64-musl-baseline/-/bun-linux-x64-musl-baseline-1.2.11.tgz#55367cc107e3fe889f2a0d77972a0c571b23168e" - integrity sha512-YYglLgFkHwNMjECCyM/kZDUZa6UW3ssVtg5k6+8QU1Rp5cPF+0SBlGGTr5ho2lFkNn/ylKmwyuqE1tB45zgVvA== - -"@oven/bun-linux-x64-musl@1.2.11": - version "1.2.11" - resolved "https://registry.yarnpkg.com/@oven/bun-linux-x64-musl/-/bun-linux-x64-musl-1.2.11.tgz#b9ce1b8a3faa797da91c5ca05467323dd1cd5be0" - integrity sha512-yF1Urgsy8xkQu8iAd03ORxuZ/DWrNPCST2r1EVIwjHuzpZ3o2odKjnE9Hnwsq+wcWdCRsakqL/muILB/9aCxeQ== - -"@oven/bun-linux-x64@1.2.11": - version "1.2.11" - resolved "https://registry.yarnpkg.com/@oven/bun-linux-x64/-/bun-linux-x64-1.2.11.tgz#92fc67493587c2b5249f8145954b36bacca55e3a" - integrity sha512-6pH556SgOR2UOgWQfEiYI3DWgkm7T+L9fmBe2dfEYrKCEu/TbXZXOJeMi943NSMIiT3q2gVwlCEdoxZwedQs4A== - -"@oven/bun-windows-x64-baseline@1.2.11": - version "1.2.11" - resolved "https://registry.yarnpkg.com/@oven/bun-windows-x64-baseline/-/bun-windows-x64-baseline-1.2.11.tgz#cb33ed8c8b5240f7dacd7e794dd411853dea64f7" - integrity sha512-uzappBblyA3GlX0PDENU1HTPZR82tzPuNd5jumTiDQ22FZmc2ZqCYTIZ/ngwHKOHDD6Rxdsux8+9EXgVS51G2w== - -"@oven/bun-windows-x64@1.2.11": - version "1.2.11" - resolved "https://registry.yarnpkg.com/@oven/bun-windows-x64/-/bun-windows-x64-1.2.11.tgz#9c91880f0047b9cd555a6fe4826d86b506c7a5cf" - integrity sha512-5mGVsGSS8JWBq8IHXGvFJ7rlET4XCUdDTKEaLLq3O1YaqyZZiPMQFnU70MfkpjPe4stRDZ+/NWBRNDMaNTYQxw== - "@parcel/watcher-android-arm64@2.5.1": version "2.5.1" resolved "https://registry.yarnpkg.com/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz#507f836d7e2042f798c7d07ad19c3546f9848ac1" @@ -1812,6 +1874,11 @@ resolved "https://registry.yarnpkg.com/@rtsao/scc/-/scc-1.1.0.tgz#927dd2fae9bc3361403ac2c7a00c32ddce9ad7e8" integrity sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g== +"@sec-ant/readable-stream@^0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz#60de891bb126abfdc5410fdc6166aca065f10a0c" + integrity sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg== + "@selderee/plugin-htmlparser2@^0.11.0": version "0.11.0" resolved "https://registry.yarnpkg.com/@selderee/plugin-htmlparser2/-/plugin-htmlparser2-0.11.0.tgz#d5b5e29a7ba6d3958a1972c7be16f4b2c188c517" @@ -1850,6 +1917,11 @@ resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== +"@sindresorhus/is@^5.2.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-5.6.0.tgz#41dd6093d34652cddb5d5bdeee04eafc33826668" + integrity sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g== + "@sinonjs/commons@^1.7.0": version "1.8.6" resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.6.tgz#80c516a4dc264c2a69115e7578d62581ff455ed9" @@ -1869,11 +1941,146 @@ resolved "https://registry.yarnpkg.com/@sqltools/formatter/-/formatter-1.2.5.tgz#3abc203c79b8c3e90fd6c156a0c62d5403520e12" integrity sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw== +"@swc/cli@^0.7.3": + version "0.7.3" + resolved "https://registry.yarnpkg.com/@swc/cli/-/cli-0.7.3.tgz#853d9b997bdfb9f58ba5dcb8e23e82ac5dfd8d53" + integrity sha512-rnVXNnlURjdOuPaBIwZ3TmBA44BF/eP0j154LanlgPEYfau74ige7cpKlKkZr1IBqMOG99lAnYNxQipDWA3hdg== + dependencies: + "@swc/counter" "^0.1.3" + "@xhmikosr/bin-wrapper" "^13.0.5" + commander "^8.3.0" + fast-glob "^3.2.5" + minimatch "^9.0.3" + piscina "^4.3.1" + semver "^7.3.8" + slash "3.0.0" + source-map "^0.7.3" + +"@swc/core-darwin-arm64@1.11.24": + version "1.11.24" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.11.24.tgz#c9fcc9c4bad0511fed26210449556d2b33fb2d9a" + integrity sha512-dhtVj0PC1APOF4fl5qT2neGjRLgHAAYfiVP8poJelhzhB/318bO+QCFWAiimcDoyMgpCXOhTp757gnoJJrheWA== + +"@swc/core-darwin-x64@1.11.24": + version "1.11.24" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.11.24.tgz#048ea3ee43281264a62fccb5a944b76d1c56eb24" + integrity sha512-H/3cPs8uxcj2Fe3SoLlofN5JG6Ny5bl8DuZ6Yc2wr7gQFBmyBkbZEz+sPVgsID7IXuz7vTP95kMm1VL74SO5AQ== + +"@swc/core-linux-arm-gnueabihf@1.11.24": + version "1.11.24" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.11.24.tgz#f01ba657a81c67d8fb9f681712e65abf1324cec6" + integrity sha512-PHJgWEpCsLo/NGj+A2lXZ2mgGjsr96ULNW3+T3Bj2KTc8XtMUkE8tmY2Da20ItZOvPNC/69KroU7edyo1Flfbw== + +"@swc/core-linux-arm64-gnu@1.11.24": + version "1.11.24" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.11.24.tgz#9aefca7f7f87c8312c2fa714c1eb731411d8596c" + integrity sha512-C2FJb08+n5SD4CYWCTZx1uR88BN41ZieoHvI8A55hfVf2woT8+6ZiBzt74qW2g+ntZ535Jts5VwXAKdu41HpBg== + +"@swc/core-linux-arm64-musl@1.11.24": + version "1.11.24" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.11.24.tgz#e4805484779bbc59b639eab4f8e45166f3d7a4f7" + integrity sha512-ypXLIdszRo0re7PNNaXN0+2lD454G8l9LPK/rbfRXnhLWDBPURxzKlLlU/YGd2zP98wPcVooMmegRSNOKfvErw== + +"@swc/core-linux-x64-gnu@1.11.24": + version "1.11.24" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.11.24.tgz#e8d8cc50a49903880944379590b73733e150a5d4" + integrity sha512-IM7d+STVZD48zxcgo69L0yYptfhaaE9cMZ+9OoMxirNafhKKXwoZuufol1+alEFKc+Wbwp+aUPe/DeWC/Lh3dg== + +"@swc/core-linux-x64-musl@1.11.24": + version "1.11.24" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.11.24.tgz#f3c46212eb8a793f6a42a36b2a9017a9b1462737" + integrity sha512-DZByJaMVzSfjQKKQn3cqSeqwy6lpMaQDQQ4HPlch9FWtDx/dLcpdIhxssqZXcR2rhaQVIaRQsCqwV6orSDGAGw== + +"@swc/core-win32-arm64-msvc@1.11.24": + version "1.11.24" + resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.11.24.tgz#b1c3327d81a5f94415ac0b1713e192df1c121fbd" + integrity sha512-Q64Ytn23y9aVDKN5iryFi8mRgyHw3/kyjTjT4qFCa8AEb5sGUuSj//AUZ6c0J7hQKMHlg9do5Etvoe61V98/JQ== + +"@swc/core-win32-ia32-msvc@1.11.24": + version "1.11.24" + resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.11.24.tgz#6a944dd6111ec5fae3cf5925b73701e49b109edc" + integrity sha512-9pKLIisE/Hh2vJhGIPvSoTK4uBSPxNVyXHmOrtdDot4E1FUUI74Vi8tFdlwNbaj8/vusVnb8xPXsxF1uB0VgiQ== + +"@swc/core-win32-x64-msvc@1.11.24": + version "1.11.24" + resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.11.24.tgz#eebb5d5ece2710aeb25cc58bd7c5c4c2c046f030" + integrity sha512-sybnXtOsdB+XvzVFlBVGgRHLqp3yRpHK7CrmpuDKszhj/QhmsaZzY/GHSeALlMtLup13M0gqbcQvsTNlAHTg3w== + +"@swc/core@^1.11.24": + version "1.11.24" + resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.11.24.tgz#340425648296964f815c940b8da00fcdb1ff2abd" + integrity sha512-MaQEIpfcEMzx3VWWopbofKJvaraqmL6HbLlw2bFZ7qYqYw3rkhM0cQVEgyzbHtTWwCwPMFZSC2DUbhlZgrMfLg== + dependencies: + "@swc/counter" "^0.1.3" + "@swc/types" "^0.1.21" + optionalDependencies: + "@swc/core-darwin-arm64" "1.11.24" + "@swc/core-darwin-x64" "1.11.24" + "@swc/core-linux-arm-gnueabihf" "1.11.24" + "@swc/core-linux-arm64-gnu" "1.11.24" + "@swc/core-linux-arm64-musl" "1.11.24" + "@swc/core-linux-x64-gnu" "1.11.24" + "@swc/core-linux-x64-musl" "1.11.24" + "@swc/core-win32-arm64-msvc" "1.11.24" + "@swc/core-win32-ia32-msvc" "1.11.24" + "@swc/core-win32-x64-msvc" "1.11.24" + +"@swc/counter@^0.1.3": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@swc/counter/-/counter-0.1.3.tgz#cc7463bd02949611c6329596fccd2b0ec782b0e9" + integrity sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ== + +"@swc/helpers@^0.5.17": + version "0.5.17" + resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.17.tgz#5a7be95ac0f0bf186e7e6e890e7a6f6cda6ce971" + integrity sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A== + dependencies: + tslib "^2.8.0" + +"@swc/types@^0.1.21": + version "0.1.21" + resolved "https://registry.yarnpkg.com/@swc/types/-/types-0.1.21.tgz#6fcadbeca1d8bc89e1ab3de4948cef12344a38c0" + integrity sha512-2YEtj5HJVbKivud9N4bpPBAyZhj4S2Ipe5LkUG94alTpr7in/GU/EARgPAd3BwU+YOmFVJC2+kjqhGRi3r0ZpQ== + dependencies: + "@swc/counter" "^0.1.3" + +"@szmarczak/http-timer@^5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-5.0.1.tgz#c7c1bf1141cdd4751b0399c8fc7b8b664cd5be3a" + integrity sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw== + dependencies: + defer-to-connect "^2.0.1" + +"@tokenizer/token@^0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@tokenizer/token/-/token-0.3.0.tgz#fe98a93fe789247e998c75e74e9c7c63217aa276" + integrity sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A== + "@tootallnate/once@1": version "1.1.2" resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== +"@tsconfig/node10@^1.0.7": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.11.tgz#6ee46400685f130e278128c7b38b7e031ff5b2f2" + integrity sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw== + +"@tsconfig/node12@^1.0.7": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" + integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== + +"@tsconfig/node14@^1.0.0": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" + integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== + +"@tsconfig/node16@^1.0.2": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" + integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== + "@types/accepts@*", "@types/accepts@^1.3.5": version "1.3.7" resolved "https://registry.yarnpkg.com/@types/accepts/-/accepts-1.3.7.tgz#3b98b1889d2b2386604c2bbbe62e4fb51e95b265" @@ -1957,7 +2164,7 @@ resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.10.tgz#61cc8469849e5bcdd0c7044122265c39cec10cf4" integrity sha512-C7srjHiVG3Ey1nR6d511dtDkCEjxuN9W1HWAEjGq8kpcwmNM6JJkpC0xvabM7BXTG2wDq8Eu33iH9aQKa7IvLQ== -"@types/dotenv@^8.2.0": +"@types/dotenv@^8.2.3": version "8.2.3" resolved "https://registry.yarnpkg.com/@types/dotenv/-/dotenv-8.2.3.tgz#c97b3c5b2e97ff3873793a000999e86cd66ff354" integrity sha512-g2FXjlDX/cYuc5CiQvyU/6kkbP1JtmGzh0obW50zD7OKeILVL0NSpPWLXVfqoAGQjom2/SLLx9zHq0KXvD6mbw== @@ -2075,6 +2282,11 @@ resolved "https://registry.yarnpkg.com/@types/http-assert/-/http-assert-1.5.6.tgz#b6b657c38a2350d21ce213139f33b03b2b5fa431" integrity sha512-TTEwmtjgVbYAzZYWyeHPrrtWnfVkm8tQkP8P21uQifPgMRgjrow3XDEYqucuC8SKZJT7pUnhU/JymvjggxO9vw== +"@types/http-cache-semantics@^4.0.2": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz#b979ebad3919799c979b17c72621c0bc0a31c6c4" + integrity sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA== + "@types/http-errors@*": version "2.0.4" resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.4.tgz#7eb47726c391b7345a6ec35ad7f4de469cf5ba4f" @@ -2234,7 +2446,7 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-14.18.63.tgz#1788fa8da838dbb5f9ea994b834278205db6ca2b" integrity sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ== -"@types/node@^17.0.21": +"@types/node@^17.0.21", "@types/node@^17.0.45": version "17.0.45" resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.45.tgz#2c0fafd78705e7a18b7906b5201a522719dc5190" integrity sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw== @@ -2849,6 +3061,104 @@ dependencies: tslib "^2.3.0" +"@xhmikosr/archive-type@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@xhmikosr/archive-type/-/archive-type-7.0.0.tgz#74746a210b59d7d8a77aa69a422f0dae025b3798" + integrity sha512-sIm84ZneCOJuiy3PpWR5bxkx3HaNt1pqaN+vncUBZIlPZCq8ASZH+hBVdu5H8znR7qYC6sKwx+ie2Q7qztJTxA== + dependencies: + file-type "^19.0.0" + +"@xhmikosr/bin-check@^7.0.3": + version "7.0.3" + resolved "https://registry.yarnpkg.com/@xhmikosr/bin-check/-/bin-check-7.0.3.tgz#9ce53f339db419f08e799f4c55b82b38ede13c95" + integrity sha512-4UnCLCs8DB+itHJVkqFp9Zjg+w/205/J2j2wNBsCEAm/BuBmtua2hhUOdAMQE47b1c7P9Xmddj0p+X1XVsfHsA== + dependencies: + execa "^5.1.1" + isexe "^2.0.0" + +"@xhmikosr/bin-wrapper@^13.0.5": + version "13.0.5" + resolved "https://registry.yarnpkg.com/@xhmikosr/bin-wrapper/-/bin-wrapper-13.0.5.tgz#2f5804ac0a3331df11d76d08dab3a3eb674ef0df" + integrity sha512-DT2SAuHDeOw0G5bs7wZbQTbf4hd8pJ14tO0i4cWhRkIJfgRdKmMfkDilpaJ8uZyPA0NVRwasCNAmMJcWA67osw== + dependencies: + "@xhmikosr/bin-check" "^7.0.3" + "@xhmikosr/downloader" "^15.0.1" + "@xhmikosr/os-filter-obj" "^3.0.0" + bin-version-check "^5.1.0" + +"@xhmikosr/decompress-tar@^8.0.1": + version "8.0.1" + resolved "https://registry.yarnpkg.com/@xhmikosr/decompress-tar/-/decompress-tar-8.0.1.tgz#ca9cc65453b5ac59bb5eb897b6f1390a4905b565" + integrity sha512-dpEgs0cQKJ2xpIaGSO0hrzz3Kt8TQHYdizHsgDtLorWajuHJqxzot9Hbi0huRxJuAGG2qiHSQkwyvHHQtlE+fg== + dependencies: + file-type "^19.0.0" + is-stream "^2.0.1" + tar-stream "^3.1.7" + +"@xhmikosr/decompress-tarbz2@^8.0.1": + version "8.0.2" + resolved "https://registry.yarnpkg.com/@xhmikosr/decompress-tarbz2/-/decompress-tarbz2-8.0.2.tgz#1c19b4a59585321a7c64ab0ff1f85f92b66fca1a" + integrity sha512-p5A2r/AVynTQSsF34Pig6olt9CvRj6J5ikIhzUd3b57pUXyFDGtmBstcw+xXza0QFUh93zJsmY3zGeNDlR2AQQ== + dependencies: + "@xhmikosr/decompress-tar" "^8.0.1" + file-type "^19.6.0" + is-stream "^2.0.1" + seek-bzip "^2.0.0" + unbzip2-stream "^1.4.3" + +"@xhmikosr/decompress-targz@^8.0.1": + version "8.0.1" + resolved "https://registry.yarnpkg.com/@xhmikosr/decompress-targz/-/decompress-targz-8.0.1.tgz#54dbd48e83861db43857970c2fcdbd431371e95b" + integrity sha512-mvy5AIDIZjQ2IagMI/wvauEiSNHhu/g65qpdM4EVoYHUJBAmkQWqcPJa8Xzi1aKVTmOA5xLJeDk7dqSjlHq8Mg== + dependencies: + "@xhmikosr/decompress-tar" "^8.0.1" + file-type "^19.0.0" + is-stream "^2.0.1" + +"@xhmikosr/decompress-unzip@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@xhmikosr/decompress-unzip/-/decompress-unzip-7.0.0.tgz#dcf9417829bf9fe474f6064513017949915e14c0" + integrity sha512-GQMpzIpWTsNr6UZbISawsGI0hJ4KA/mz5nFq+cEoPs12UybAqZWKbyIaZZyLbJebKl5FkLpsGBkrplJdjvUoSQ== + dependencies: + file-type "^19.0.0" + get-stream "^6.0.1" + yauzl "^3.1.2" + +"@xhmikosr/decompress@^10.0.1": + version "10.0.1" + resolved "https://registry.yarnpkg.com/@xhmikosr/decompress/-/decompress-10.0.1.tgz#63650498b4f3dd0fb5ee645dc5a35e1a7baad632" + integrity sha512-6uHnEEt5jv9ro0CDzqWlFgPycdE+H+kbJnwyxgZregIMLQ7unQSCNVsYG255FoqU8cP46DyggI7F7LohzEl8Ag== + dependencies: + "@xhmikosr/decompress-tar" "^8.0.1" + "@xhmikosr/decompress-tarbz2" "^8.0.1" + "@xhmikosr/decompress-targz" "^8.0.1" + "@xhmikosr/decompress-unzip" "^7.0.0" + graceful-fs "^4.2.11" + make-dir "^4.0.0" + strip-dirs "^3.0.0" + +"@xhmikosr/downloader@^15.0.1": + version "15.0.1" + resolved "https://registry.yarnpkg.com/@xhmikosr/downloader/-/downloader-15.0.1.tgz#5dd34cf8aa8ce5f1e156e03188f7ba65abfa45c6" + integrity sha512-fiuFHf3Dt6pkX8HQrVBsK0uXtkgkVlhrZEh8b7VgoDqFf+zrgFBPyrwCqE/3nDwn3hLeNz+BsrS7q3mu13Lp1g== + dependencies: + "@xhmikosr/archive-type" "^7.0.0" + "@xhmikosr/decompress" "^10.0.1" + content-disposition "^0.5.4" + defaults "^3.0.0" + ext-name "^5.0.0" + file-type "^19.0.0" + filenamify "^6.0.0" + get-stream "^6.0.1" + got "^13.0.0" + +"@xhmikosr/os-filter-obj@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@xhmikosr/os-filter-obj/-/os-filter-obj-3.0.0.tgz#917d380868d03ce853f90a919716ef73f6b26808" + integrity sha512-siPY6BD5dQ2SZPl3I0OZBHL27ZqZvLEosObsZRQ1NUB8qcxegwt0T9eKtV96JMFQpIz1elhkzqOg4c/Ri6Dp9A== + dependencies: + arch "^3.0.0" + "@xtuc/ieee754@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" @@ -2902,12 +3212,19 @@ acorn-walk@^7.1.1: resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== +acorn-walk@^8.1.1: + version "8.3.4" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.4.tgz#794dd169c3977edf4ba4ea47583587c5866236b7" + integrity sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g== + dependencies: + acorn "^8.11.0" + acorn@^7.1.1: version "7.4.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^8.12.1, acorn@^8.14.0, acorn@^8.14.1, acorn@^8.2.4, acorn@^8.5.0, acorn@^8.8.2, acorn@^8.9.0: +acorn@^8.11.0, acorn@^8.12.1, acorn@^8.14.0, acorn@^8.14.1, acorn@^8.2.4, acorn@^8.4.1, acorn@^8.5.0, acorn@^8.8.2, acorn@^8.9.0: version "8.14.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.1.tgz#721d5dc10f7d5b5609a891773d47731796935dfb" integrity sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg== @@ -3276,6 +3593,16 @@ app-root-path@^3.1.0: resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-3.1.0.tgz#5971a2fc12ba170369a7a1ef018c71e6e47c2e86" integrity sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA== +arch@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/arch/-/arch-3.0.0.tgz#a44e7077da4615fc5f1e3da21fbfc201d2c1817c" + integrity sha512-AmIAC+Wtm2AU8lGfTtHsw0Y9Qtftx2YXEEtiBP10xFUtMOA+sHHx6OAddyL52mUKh1vsXQ6/w1mVDptZCyUt4Q== + +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" @@ -3618,6 +3945,23 @@ bignumber.js@9.0.0: resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.0.tgz#805880f84a329b5eac6e7cb6f8274b6d82bdf075" integrity sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A== +bin-version-check@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/bin-version-check/-/bin-version-check-5.1.0.tgz#788e80e036a87313f8be7908bc20e5abe43f0837" + integrity sha512-bYsvMqJ8yNGILLz1KP9zKLzQ6YpljV3ln1gqhuLkUtyfGi3qXKGuK2p+U4NAvjVFzDFiBBtOpCOSFNuYYEGZ5g== + dependencies: + bin-version "^6.0.0" + semver "^7.5.3" + semver-truncate "^3.0.0" + +bin-version@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/bin-version/-/bin-version-6.0.0.tgz#08ecbe5fc87898b441425e145f9e105064d00315" + integrity sha512-nk5wEsP4RiKjG+vF+uG8lFsEn4d7Y6FVDamzzftSunXOoOcOOkzcWdKVlGgFFwlUQCj63SgnUkLLGF8v7lufhw== + dependencies: + execa "^5.0.0" + find-versions "^5.0.0" + binary-extensions@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" @@ -3730,11 +4074,24 @@ bser@2.1.1: dependencies: node-int64 "^0.4.0" +buffer-crc32@~0.2.3: + version "0.2.13" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== + buffer-from@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== +buffer@^5.2.1: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + buffer@^6.0.3: version "6.0.3" resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" @@ -3755,23 +4112,6 @@ builtins@^5.0.1: dependencies: semver "^7.0.0" -bun@^1.2.11: - version "1.2.11" - resolved "https://registry.yarnpkg.com/bun/-/bun-1.2.11.tgz#eb423adada0b562a04b30a3224c11657f5d99bc1" - integrity sha512-9brVfsp6/TYVsE3lCl1MUxoyKhvljqyL1MNPErgwsOaS9g4Gzi2nY+W5WtRAXGzLrgz5jzsoGHHwyH/rTeRCIg== - optionalDependencies: - "@oven/bun-darwin-aarch64" "1.2.11" - "@oven/bun-darwin-x64" "1.2.11" - "@oven/bun-darwin-x64-baseline" "1.2.11" - "@oven/bun-linux-aarch64" "1.2.11" - "@oven/bun-linux-aarch64-musl" "1.2.11" - "@oven/bun-linux-x64" "1.2.11" - "@oven/bun-linux-x64-baseline" "1.2.11" - "@oven/bun-linux-x64-musl" "1.2.11" - "@oven/bun-linux-x64-musl-baseline" "1.2.11" - "@oven/bun-windows-x64" "1.2.11" - "@oven/bun-windows-x64-baseline" "1.2.11" - busboy@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/busboy/-/busboy-0.3.1.tgz#170899274c5bf38aae27d5c62b71268cd585fd1b" @@ -3807,6 +4147,24 @@ cac@^6.7.14: resolved "https://registry.yarnpkg.com/cac/-/cac-6.7.14.tgz#804e1e6f506ee363cb0e3ccbb09cad5dd9870959" integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ== +cacheable-lookup@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz#3476a8215d046e5a3202a9209dd13fec1f933a27" + integrity sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w== + +cacheable-request@^10.2.8: + version "10.2.14" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-10.2.14.tgz#eb915b665fda41b79652782df3f553449c406b9d" + integrity sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ== + dependencies: + "@types/http-cache-semantics" "^4.0.2" + get-stream "^6.0.1" + http-cache-semantics "^4.1.1" + keyv "^4.5.3" + mimic-response "^4.0.0" + normalize-url "^8.0.0" + responselike "^3.0.0" + cacheable@^1.8.9: version "1.8.10" resolved "https://registry.yarnpkg.com/cacheable/-/cacheable-1.8.10.tgz#c1b36260240d812912a6d3503da3a6e00166f75c" @@ -4089,7 +4447,7 @@ commander@^2.19.0, commander@^2.20.0, commander@^2.20.3: resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== -commander@^6.1.0: +commander@^6.0.0, commander@^6.1.0: version "6.2.1" resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== @@ -4184,7 +4542,7 @@ constantinople@^4.0.1: "@babel/parser" "^7.6.0" "@babel/types" "^7.6.1" -content-disposition@0.5.4: +content-disposition@0.5.4, content-disposition@^0.5.4: version "0.5.4" resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== @@ -4251,6 +4609,11 @@ cosmiconfig@^9.0.0: js-yaml "^4.1.0" parse-json "^5.2.0" +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + cross-env@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-7.0.3.tgz#865264b29677dc015ba8418918965dd232fc54cf" @@ -4458,6 +4821,13 @@ decimal.js@^10.2.1, decimal.js@^10.4.3: resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.5.0.tgz#0f371c7cf6c4898ce0afb09836db73cd82010f22" integrity sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw== +decompress-response@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" + integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== + dependencies: + mimic-response "^3.1.0" + dedent@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" @@ -4483,6 +4853,16 @@ deepmerge@^4.2.2, deepmerge@^4.3.1: resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== +defaults@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-3.0.0.tgz#60b9e0003df1018737c2ce3f4289d8f64786c9c4" + integrity sha512-RsqXDEAALjfRTro+IFNKpcPCt0/Cy2FqHSIlnomiJp9YGadpQnrtbRpSgN2+np21qHcIKiva4fiOQGjS9/qR/A== + +defer-to-connect@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" + integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== + define-data-property@^1.0.1, define-data-property@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" @@ -4585,6 +4965,11 @@ diff-sequences@^27.5.1: resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.5.1.tgz#eaecc0d327fd68c8d9672a1e64ab8dccb2ef5327" integrity sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ== +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" @@ -5004,7 +5389,7 @@ esbuild@^0.21.3: "@esbuild/win32-ia32" "0.21.5" "@esbuild/win32-x64" "0.21.5" -esbuild@^0.25.2, esbuild@~0.25.0: +esbuild@^0.25.2, esbuild@^0.25.3, esbuild@~0.25.0: version "0.25.3" resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.25.3.tgz#371f7cb41283e5b2191a96047a7a89562965a285" integrity sha512-qKA6Pvai73+M2FtftpNKRxJ78GIjmFXFxd/1DVBqGo/qNhLSfv+G12n9pNoWdytJC8U00TrViOwpjT0zgqQS8Q== @@ -5425,7 +5810,7 @@ execa@^0.10.0: signal-exit "^3.0.0" strip-eof "^1.0.0" -execa@^5.0.0: +execa@^5.0.0, execa@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== @@ -5514,6 +5899,21 @@ exsolve@^1.0.1, exsolve@^1.0.4, exsolve@^1.0.5: resolved "https://registry.yarnpkg.com/exsolve/-/exsolve-1.0.5.tgz#1f5b6b4fe82ad6b28a173ccb955a635d77859dcf" integrity sha512-pz5dvkYYKQ1AHVrgOzBKWeP4u4FRb3a6DNK2ucr0OoNwYIU4QWsJ+NM36LLzORT+z845MzKHHhpXiUF5nvQoJg== +ext-list@^2.0.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/ext-list/-/ext-list-2.2.2.tgz#0b98e64ed82f5acf0f2931babf69212ef52ddd37" + integrity sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA== + dependencies: + mime-db "^1.28.0" + +ext-name@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ext-name/-/ext-name-5.0.0.tgz#70781981d183ee15d13993c8822045c506c8f0a6" + integrity sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ== + dependencies: + ext-list "^2.0.0" + sort-keys-length "^1.0.0" + extend-object@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/extend-object/-/extend-object-1.0.0.tgz#42514f84015d1356caf5187969dfb2bc1bda0823" @@ -5549,12 +5949,12 @@ fast-equals@^5.0.1: resolved "https://registry.yarnpkg.com/fast-equals/-/fast-equals-5.2.2.tgz#885d7bfb079fac0ce0e8450374bce29e9b742484" integrity sha512-V7/RktU11J3I36Nwq2JnZEM7tNm17eBJz+u25qdxBZeCKiX6BkVSZQjwWIr+IobgnZy+ag73tTZgZi7tr0LrBw== -fast-fifo@^1.1.0, fast-fifo@^1.3.2: +fast-fifo@^1.1.0, fast-fifo@^1.2.0, fast-fifo@^1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/fast-fifo/-/fast-fifo-1.3.2.tgz#286e31de96eb96d38a97899815740ba2a4f3640c" integrity sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ== -fast-glob@^3.2.11, fast-glob@^3.2.12, fast-glob@^3.2.9, fast-glob@^3.3.2, fast-glob@^3.3.3: +fast-glob@^3.2.11, fast-glob@^3.2.12, fast-glob@^3.2.5, fast-glob@^3.2.9, fast-glob@^3.3.2, fast-glob@^3.3.3: version "3.3.3" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818" integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== @@ -5623,6 +6023,16 @@ file-entry-cache@^6.0.1: dependencies: flat-cache "^3.0.4" +file-type@^19.0.0, file-type@^19.6.0: + version "19.6.0" + resolved "https://registry.yarnpkg.com/file-type/-/file-type-19.6.0.tgz#b43d8870453363891884cf5e79bb3e4464f2efd3" + integrity sha512-VZR5I7k5wkD0HgFnMsq5hOsSc710MJMu5Nc5QYsbe38NN5iPV/XTObYLc/cpttRTf6lX538+5uO1ZQRhYibiZQ== + dependencies: + get-stream "^9.0.1" + strtok3 "^9.0.1" + token-types "^6.0.0" + uint8array-extras "^1.3.0" + filelist@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" @@ -5630,6 +6040,18 @@ filelist@^1.0.4: dependencies: minimatch "^5.0.1" +filename-reserved-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/filename-reserved-regex/-/filename-reserved-regex-3.0.0.tgz#3d5dd6d4e2d73a3fed2ebc4cd0b3448869a081f7" + integrity sha512-hn4cQfU6GOT/7cFHXBqeBg2TbrMBgdD0kcjLhvSQYYwm3s4B6cjvBfb7nBALJLAXqmU5xajSa7X2NnUud/VCdw== + +filenamify@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/filenamify/-/filenamify-6.0.0.tgz#38def94098c62154c42a41d822650f5f55bcbac2" + integrity sha512-vqIlNogKeyD3yzrm0yhRMQg8hOVwYcYRfjEoODd49iCprMn4HL85gK3HcykQE53EPIpX3HcAbGA5ELQv216dAQ== + dependencies: + filename-reserved-regex "^3.0.0" + fill-range@^7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" @@ -5666,6 +6088,13 @@ find-up@^5.0.0: locate-path "^6.0.0" path-exists "^4.0.0" +find-versions@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/find-versions/-/find-versions-5.1.0.tgz#973f6739ce20f5e439a27eba8542a4b236c8e685" + integrity sha512-+iwzCJ7C5v5KgcBuueqVoNiHVoQpwiUK5XFLjf0affFTep+Wcw93tPvmb8tqujDNmzhBDPddnWV/qgWSXgq+Hg== + dependencies: + semver-regex "^4.0.5" + fixpack@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/fixpack/-/fixpack-4.0.0.tgz#28b9fb8ca04f89aab382021cfa826b36dc381dfd" @@ -5736,6 +6165,11 @@ form-data-encoder@1.7.2: resolved "https://registry.yarnpkg.com/form-data-encoder/-/form-data-encoder-1.7.2.tgz#1f1ae3dccf58ed4690b86d87e4f57c654fbab040" integrity sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A== +form-data-encoder@^2.1.2: + version "2.1.4" + resolved "https://registry.yarnpkg.com/form-data-encoder/-/form-data-encoder-2.1.4.tgz#261ea35d2a70d48d30ec7a9603130fa5515e9cd5" + integrity sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw== + form-data@^3.0.0: version "3.0.3" resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.3.tgz#349c8f2c9d8f8f0c879ee0eb7cc0d300018d6b09" @@ -5902,11 +6336,19 @@ get-stream@^3.0.0: resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" integrity sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ== -get-stream@^6.0.0: +get-stream@^6.0.0, get-stream@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== +get-stream@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-9.0.1.tgz#95157d21df8eb90d1647102b63039b1df60ebd27" + integrity sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA== + dependencies: + "@sec-ant/readable-stream" "^0.4.1" + is-stream "^4.0.1" + get-symbol-description@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.1.0.tgz#7bdd54e0befe8ffc9f3b4e203220d9f1e881b6ee" @@ -6041,6 +6483,23 @@ gopd@^1.0.1, gopd@^1.2.0: resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== +got@^13.0.0: + version "13.0.0" + resolved "https://registry.yarnpkg.com/got/-/got-13.0.0.tgz#a2402862cef27a5d0d1b07c0fb25d12b58175422" + integrity sha512-XfBk1CxOOScDcMr9O1yKkNaQyy865NbYs+F7dr4H0LZMVgCj2Le59k6PqbNHoL5ToeaEQUYh6c6yMfVcc6SJxA== + dependencies: + "@sindresorhus/is" "^5.2.0" + "@szmarczak/http-timer" "^5.0.1" + cacheable-lookup "^7.0.0" + cacheable-request "^10.2.8" + decompress-response "^6.0.0" + form-data-encoder "^2.1.2" + get-stream "^6.0.1" + http2-wrapper "^2.1.10" + lowercase-keys "^3.0.0" + p-cancelable "^3.0.0" + responselike "^3.0.0" + graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.11, graceful-fs@^4.2.4, graceful-fs@^4.2.9: version "4.2.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" @@ -6319,6 +6778,11 @@ htmlparser2@^8.0.0, htmlparser2@^8.0.2: domutils "^3.0.1" entities "^4.4.0" +http-cache-semantics@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" + integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== + http-errors@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" @@ -6358,6 +6822,14 @@ http-proxy-agent@^7.0.2: agent-base "^7.1.0" debug "^4.3.4" +http2-wrapper@^2.1.10: + version "2.2.1" + resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-2.2.1.tgz#310968153dcdedb160d8b72114363ef5fce1f64a" + integrity sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ== + dependencies: + quick-lru "^5.1.1" + resolve-alpn "^1.2.0" + https-proxy-agent@^5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" @@ -6435,7 +6907,7 @@ identity-obj-proxy@^3.0.0: dependencies: harmony-reflect "^1.4.6" -ieee754@^1.2.1: +ieee754@^1.1.13, ieee754@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== @@ -6513,6 +6985,13 @@ ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== +inspect-with-kind@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/inspect-with-kind/-/inspect-with-kind-1.0.5.tgz#fce151d4ce89722c82ca8e9860bb96f9167c316c" + integrity sha512-MAQUJuIo7Xqk8EVNP+6d3CKq9c80hi4tjIbIAT6lmGW9W6WzlHiu9PS8uSuUYU+Do+j1baiFp3H25XEVxDIG2g== + dependencies: + kind-of "^6.0.2" + internal-slot@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.1.0.tgz#1eac91762947d2f7056bc838d93e13b2e9604961" @@ -6692,6 +7171,11 @@ is-path-inside@^3.0.3: resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== +is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== + is-plain-object@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" @@ -6739,11 +7223,16 @@ is-stream@^1.1.0: resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== -is-stream@^2.0.0: +is-stream@^2.0.0, is-stream@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== +is-stream@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-4.0.1.tgz#375cf891e16d2e4baec250b85926cffc14720d9b" + integrity sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A== + is-string@^1.0.7, is-string@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.1.1.tgz#92ea3f3d5c5b6e039ca8677e5ac8d07ea773cbb9" @@ -7760,7 +8249,7 @@ lodash@4.x, lodash@^4.17.11, lodash@^4.17.21, lodash@^4.7.0: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -log4js@^6.7.1: +log4js@^6.7.1, log4js@^6.9.1: version "6.9.1" resolved "https://registry.yarnpkg.com/log4js/-/log4js-6.9.1.tgz#aba5a3ff4e7872ae34f8b4c533706753709e38b6" integrity sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g== @@ -7800,6 +8289,11 @@ lower-case@^2.0.2: dependencies: tslib "^2.0.3" +lowercase-keys@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-3.0.0.tgz#c5e7d442e37ead247ae9db117a9d0a467c89d4f2" + integrity sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ== + lru-cache@^10.2.0, lru-cache@^10.4.3: version "10.4.3" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" @@ -7872,7 +8366,7 @@ make-dir@^4.0.0: dependencies: semver "^7.5.3" -make-error@1.x: +make-error@1.x, make-error@^1.1.1: version "1.3.6" resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== @@ -7962,6 +8456,11 @@ mime-db@1.52.0: resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== +mime-db@^1.28.0: + version "1.54.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.54.0.tgz#cddb3ee4f9c64530dff640236661d42cb6a314f5" + integrity sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ== + mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.35, mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.35" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" @@ -7984,6 +8483,16 @@ mimic-fn@^2.1.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== +mimic-response@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" + integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== + +mimic-response@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-4.0.0.tgz#35468b19e7c75d10f5165ea25e75a5ceea7cf70f" + integrity sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg== + minimatch@9.0.1: version "9.0.1" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.1.tgz#8a555f541cf976c622daf078bb28f29fb927c253" @@ -8005,7 +8514,7 @@ minimatch@^5.0.1: dependencies: brace-expansion "^2.0.1" -minimatch@^9.0.4, minimatch@^9.0.5: +minimatch@^9.0.3, minimatch@^9.0.4, minimatch@^9.0.5: version "9.0.5" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== @@ -8027,6 +8536,11 @@ mitt@^3.0.1: resolved "https://registry.yarnpkg.com/mitt/-/mitt-3.0.1.tgz#ea36cf0cc30403601ae074c8f77b7092cdab36d1" integrity sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw== +mkdirp@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-3.0.1.tgz#e44e4c5607fb279c168241713cc6e0fea9adcb50" + integrity sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg== + mlly@^1.2.0, mlly@^1.7.3, mlly@^1.7.4: version "1.7.4" resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.7.4.tgz#3d7295ea2358ec7a271eaa5d000a0f84febe100f" @@ -8131,6 +8645,11 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== +ncp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ncp/-/ncp-2.0.0.tgz#195a21d6c46e361d2fb1281ba38b91e9df7bdbb3" + integrity sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA== + nearley@^2.20.1: version "2.20.1" resolved "https://registry.yarnpkg.com/nearley/-/nearley-2.20.1.tgz#246cd33eff0d012faf197ff6774d7ac78acdd474" @@ -8279,6 +8798,11 @@ normalize-range@^0.1.2: resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== +normalize-url@^8.0.0: + version "8.0.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-8.0.1.tgz#9b7d96af9836577c58f5883e939365fa15623a4a" + integrity sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w== + npm-run-path@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" @@ -8480,6 +9004,11 @@ own-keys@^1.0.1: object-keys "^1.1.1" safe-push-apply "^1.0.0" +p-cancelable@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-3.0.0.tgz#63826694b54d61ca1c20ebcb6d3ecf5e14cd8050" + integrity sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw== + p-event@4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/p-event/-/p-event-4.2.0.tgz#af4b049c8acd91ae81083ebd1e6f5cae2044c1b5" @@ -8697,6 +9226,16 @@ peberminta@^0.9.0: resolved "https://registry.yarnpkg.com/peberminta/-/peberminta-0.9.0.tgz#8ec9bc0eb84b7d368126e71ce9033501dca2a352" integrity sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ== +peek-readable@^5.3.1: + version "5.4.2" + resolved "https://registry.yarnpkg.com/peek-readable/-/peek-readable-5.4.2.tgz#aff1e1ba27a7d6911ddb103f35252ffc1787af49" + integrity sha512-peBp3qZyuS6cNIJ2akRNG1uo1WJ1d0wTxg/fxMdZ0BqCVhx242bSFHM9eNqflfJVS9SsgkzgT/1UgnsurBOTMg== + +pend@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" + integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== + perfect-debounce@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/perfect-debounce/-/perfect-debounce-1.0.0.tgz#9c2e8bc30b169cc984a58b7d5b28049839591d2a" @@ -8727,6 +9266,13 @@ pirates@^4.0.4: resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.7.tgz#643b4a18c4257c8a65104b73f3049ce9a0a15e22" integrity sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA== +piscina@^4.3.1: + version "4.9.2" + resolved "https://registry.yarnpkg.com/piscina/-/piscina-4.9.2.tgz#80f2c2375231720337c703e443941adfac8caf75" + integrity sha512-Fq0FERJWFEUpB4eSY59wSNwXD4RYqR+nR/WiEVcZW8IWfVBxJJafcgTEZDQo8k3w0sUarJ8RyVbbUF4GQ2LGbQ== + optionalDependencies: + "@napi-rs/nice" "^1.0.1" + pkg-dir@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" @@ -8839,7 +9385,7 @@ prettier-linter-helpers@^1.0.0: dependencies: fast-diff "^1.1.2" -prettier@^2.8.7: +prettier@^2.8.8: version "2.8.8" resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== @@ -9097,6 +9643,11 @@ queue-microtask@^1.2.2: resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== +quick-lru@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" + integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== + railroad-diagrams@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz#eb7e6267548ddedfb899c1b90e57374559cddb7e" @@ -9221,7 +9772,7 @@ regenerator-runtime@^0.13.7, regenerator-runtime@^0.13.9: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== -regenerator-runtime@^0.14.0: +regenerator-runtime@^0.14.0, regenerator-runtime@^0.14.1: version "0.14.1" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== @@ -9276,6 +9827,11 @@ requires-port@^1.0.0: resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== +resolve-alpn@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" + integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== + resolve-cwd@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" @@ -9312,6 +9868,13 @@ resolve@^1.10.1, resolve@^1.15.1, resolve@^1.20.0, resolve@^1.22.2, resolve@^1.2 path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" +responselike@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-3.0.0.tgz#20decb6c298aff0dbee1c355ca95461d42823626" + integrity sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg== + dependencies: + lowercase-keys "^3.0.0" + ret@~0.1.10: version "0.1.15" resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" @@ -9492,6 +10055,13 @@ scule@^1.3.0: resolved "https://registry.yarnpkg.com/scule/-/scule-1.3.0.tgz#6efbd22fd0bb801bdcc585c89266a7d2daa8fbd3" integrity sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g== +seek-bzip@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/seek-bzip/-/seek-bzip-2.0.0.tgz#f0478ab6acd0ac72345d18dc7525dd84d3c706a2" + integrity sha512-SMguiTnYrhpLdk3PwfzHeotrcwi8bNV4iemL9tx9poR/yeaMYwB9VzR1w7b57DuWpuqR8n6oZboi0hj3AxZxQg== + dependencies: + commander "^6.0.0" + selderee@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/selderee/-/selderee-0.11.0.tgz#6af0c7983e073ad3e35787ffe20cefd9daf0ec8a" @@ -9506,7 +10076,19 @@ selderee@^0.6.0: dependencies: parseley "^0.7.0" -semver@7.x, semver@^7.0.0, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0, semver@^7.7.1: +semver-regex@^4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/semver-regex/-/semver-regex-4.0.5.tgz#fbfa36c7ba70461311f5debcb3928821eb4f9180" + integrity sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw== + +semver-truncate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/semver-truncate/-/semver-truncate-3.0.0.tgz#0e3b4825d4a4225d8ae6e7c72231182b42edba40" + integrity sha512-LJWA9kSvMolR51oDE6PN3kALBNaUdkxzAGcexw8gjMA8xr5zUqK0JiR3CgARSqanYF3Z1YHvsErb1KDgh+v7Rg== + dependencies: + semver "^7.3.5" + +semver@7.x, semver@^7.0.0, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0, semver@^7.7.1: version "7.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.1.tgz#abd5098d82b18c6c81f6074ff2647fd3e7220c9f" integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA== @@ -9719,7 +10301,7 @@ sisteransi@^1.0.5: resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== -slash@^3.0.0: +slash@3.0.0, slash@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== @@ -9782,6 +10364,20 @@ sodium-universal@^5.0.0: dependencies: sodium-native "^5.0.1" +sort-keys-length@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/sort-keys-length/-/sort-keys-length-1.0.1.tgz#9cb6f4f4e9e48155a6aa0671edd336ff1479a188" + integrity sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw== + dependencies: + sort-keys "^1.0.0" + +sort-keys@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" + integrity sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg== + dependencies: + is-plain-obj "^1.0.0" + "source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.1, source-map-js@^1.0.2, source-map-js@^1.2.0, source-map-js@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" @@ -9871,7 +10467,7 @@ streamsearch@0.1.2: resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-0.1.2.tgz#808b9d0e56fc273d809ba57338e929919a1a9f1a" integrity sha512-jos8u++JKm0ARcSUTAZXOVC0mSox7Bhn6sBgty73P1f3JGf7yG2clTbBNHUdde/kdvP2FESam+vM6l8jBrNxHA== -streamx@^2.12.4, streamx@^2.13.2, streamx@^2.14.0: +streamx@^2.12.4, streamx@^2.13.2, streamx@^2.14.0, streamx@^2.15.0: version "2.22.0" resolved "https://registry.yarnpkg.com/streamx/-/streamx-2.22.0.tgz#cd7b5e57c95aaef0ff9b2aef7905afa62ec6e4a7" integrity sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw== @@ -9986,6 +10582,14 @@ strip-bom@^4.0.0: resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== +strip-dirs@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-dirs/-/strip-dirs-3.0.0.tgz#7c9a5d7822ce079a9db40387a4b20d5654746f42" + integrity sha512-I0sdgcFTfKQlUPZyAqPJmSG3HLO9rWDFnxonnIbskYNM3DwFOeTNB5KzVq3dA1GdRAc/25b5Y7UO2TQfKWw4aQ== + dependencies: + inspect-with-kind "^1.0.5" + is-plain-obj "^1.1.0" + strip-eof@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" @@ -10013,6 +10617,14 @@ strip-literal@^3.0.0: dependencies: js-tokens "^9.0.1" +strtok3@^9.0.1: + version "9.1.1" + resolved "https://registry.yarnpkg.com/strtok3/-/strtok3-9.1.1.tgz#f8feb188b3fcdbf9b8819cc9211a824c3731df38" + integrity sha512-FhwotcEqjr241ZbjFzjlIYg6c5/L/s4yBGWSMvJ9UoExiSqL+FnFA/CaeZx17WGaZMS/4SOZp8wH18jSS4R4lw== + dependencies: + "@tokenizer/token" "^0.3.0" + peek-readable "^5.3.1" + stylelint-config-html@>=1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/stylelint-config-html/-/stylelint-config-html-1.1.0.tgz#999db19aea713b7ff6dde92ada76e4c1bd812b66" @@ -10223,6 +10835,15 @@ tapable@^2.1.1, tapable@^2.2.0: resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== +tar-stream@^3.1.7: + version "3.1.7" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-3.1.7.tgz#24b3fb5eabada19fe7338ed6d26e5f7c482e792b" + integrity sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ== + dependencies: + b4a "^1.6.4" + fast-fifo "^1.2.0" + streamx "^2.15.0" + terminal-link@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" @@ -10297,6 +10918,11 @@ throttle-debounce@^5.0.0: resolved "https://registry.yarnpkg.com/throttle-debounce/-/throttle-debounce-5.0.2.tgz#ec5549d84e053f043c9fd0f2a6dd892ff84456b1" integrity sha512-B71/4oyj61iNH0KeCamLuE2rmKuTO5byTOSVwECM5FA7TiAiAW+UqTKZ9ERueC4qvgSttUhdmq1mXC3kJqGX7A== +through@^2.3.8: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== + time-ordered-set@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/time-ordered-set/-/time-ordered-set-2.0.1.tgz#66327419aa983a6e8c8f9e1b6832f721462c95b7" @@ -10394,6 +11020,14 @@ token-stream@1.0.0: resolved "https://registry.yarnpkg.com/token-stream/-/token-stream-1.0.0.tgz#cc200eab2613f4166d27ff9afc7ca56d49df6eb4" integrity sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg== +token-types@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/token-types/-/token-types-6.0.0.tgz#1ab26be1ef9c434853500c071acfe5c8dd6544a3" + integrity sha512-lbDrTLVsHhOMljPscd0yitpozq7Ga2M5Cvez5AjGg8GASBjtt6iERCAJ93yommPmz62fb45oFIXHEZ3u9bfJEA== + dependencies: + "@tokenizer/token" "^0.3.0" + ieee754 "^1.2.1" + toposort@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/toposort/-/toposort-2.0.2.tgz#ae21768175d1559d48bef35420b2f4962f09c330" @@ -10510,6 +11144,25 @@ ts-mysql-migrate@^1.0.2: "@types/mysql" "^2.15.8" mysql "^2.18.1" +ts-node@^10.9.2: + version "10.9.2" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.2.tgz#70f021c9e185bccdca820e26dc413805c101c71f" + integrity sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ== + dependencies: + "@cspotcode/source-map-support" "^0.8.0" + "@tsconfig/node10" "^1.0.7" + "@tsconfig/node12" "^1.0.7" + "@tsconfig/node14" "^1.0.0" + "@tsconfig/node16" "^1.0.2" + acorn "^8.4.1" + acorn-walk "^8.1.1" + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + v8-compile-cache-lib "^3.0.1" + yn "3.1.1" + tsconfig-paths@^3.15.0: version "3.15.0" resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" @@ -10534,7 +11187,7 @@ tslib@^1.10.0, tslib@^1.9.3: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.2.0, tslib@^2.3.0, tslib@^2.5.0, tslib@^2.8.1: +tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.2.0, tslib@^2.3.0, tslib@^2.5.0, tslib@^2.8.0, tslib@^2.8.1: version "2.8.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== @@ -10716,7 +11369,7 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" -typeorm@^0.3.16: +typeorm@^0.3.16, typeorm@^0.3.22: version "0.3.22" resolved "https://registry.yarnpkg.com/typeorm/-/typeorm-0.3.22.tgz#74b56af4a495b6c8eda887dc9aa4670782b991ff" integrity sha512-P/Tsz3UpJ9+K0oryC0twK5PO27zejLYYwMsE8SISfZc1lVHX+ajigiOyWsKbuXpEFMjD9z7UjLzY3+ElVOMMDA== @@ -10735,7 +11388,7 @@ typeorm@^0.3.16: uuid "^11.1.0" yargs "^17.7.2" -typescript@^4.9.4, typescript@^4.9.5: +typescript@^4.9.5: version "4.9.5" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== @@ -10765,6 +11418,11 @@ uglify-js@^3.1.4: resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.19.3.tgz#82315e9bbc6f2b25888858acd1fff8441035b77f" integrity sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ== +uint8array-extras@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/uint8array-extras/-/uint8array-extras-1.4.0.tgz#e42a678a6dd335ec2d21661333ed42f44ae7cc74" + integrity sha512-ZPtzy0hu4cZjv3z5NW9gfKnNLjoz4y6uv4HlelAjDK7sY/xOkKZv9xK/WQpcsBB3jEybChz9DPC2U/+cusjJVQ== + unbox-primitive@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.1.0.tgz#8d9d2c9edeea8460c7f35033a88867944934d1e2" @@ -10775,6 +11433,14 @@ unbox-primitive@^1.1.0: has-symbols "^1.1.0" which-boxed-primitive "^1.1.1" +unbzip2-stream@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz#b0da04c4371311df771cdc215e87f2130991ace7" + integrity sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg== + dependencies: + buffer "^5.2.1" + through "^2.3.8" + unctx@^2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/unctx/-/unctx-2.4.1.tgz#93346a98d4a38c64cc5861f6098f4ce7c6f8164a" @@ -10993,6 +11659,11 @@ uuid@^9.0.0, uuid@^9.0.1: resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== +v8-compile-cache-lib@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" + integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== + v8-to-istanbul@^8.1.0: version "8.1.1" resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz#77b752fd3975e31bbcef938f85e9bd1c7a8d60ed" @@ -11701,6 +12372,19 @@ yargs@^17.7.2: y18n "^5.0.5" yargs-parser "^21.1.1" +yauzl@^3.1.2: + version "3.2.0" + resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-3.2.0.tgz#7b6cb548f09a48a6177ea0be8ece48deb7da45c0" + integrity sha512-Ow9nuGZE+qp1u4JIPvg+uCiUr7xGQWdff7JQSk5VGYTAZMDe2q8lxJ10ygv10qmSj031Ty/6FNJpLO4o1Sgc+w== + dependencies: + buffer-crc32 "~0.2.3" + pend "~1.2.0" + +yn@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" From ee7b35a15447bb5e376c79b1bb0a46ebd1904a5c Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Sun, 4 May 2025 10:28:01 +0200 Subject: [PATCH 070/123] fix lint --- backend/src/graphql/schema.ts | 2 +- federation/src/graphql/api/1_0/schema.ts | 7 +------ federation/src/graphql/api/1_1/schema.ts | 17 ++++++----------- 3 files changed, 8 insertions(+), 18 deletions(-) diff --git a/backend/src/graphql/schema.ts b/backend/src/graphql/schema.ts index 6652f0d39..6a0e3db5e 100644 --- a/backend/src/graphql/schema.ts +++ b/backend/src/graphql/schema.ts @@ -29,7 +29,7 @@ export const schema = async (): Promise => { CommunityResolver, ContributionLinkResolver, ContributionMessageResolver, - ContributionResolver, + ContributionResolver, GdtResolver, KlicktippResolver, ProjectBrandingResolver, diff --git a/federation/src/graphql/api/1_0/schema.ts b/federation/src/graphql/api/1_0/schema.ts index 9d106fefc..7b88fba5c 100644 --- a/federation/src/graphql/api/1_0/schema.ts +++ b/federation/src/graphql/api/1_0/schema.ts @@ -5,10 +5,5 @@ import { PublicKeyResolver } from './resolver/PublicKeyResolver' import { SendCoinsResolver } from './resolver/SendCoinsResolver' export const getApiResolvers = (): NonEmptyArray => { - return [ - AuthenticationResolver, - PublicCommunityInfoResolver, - PublicKeyResolver, - SendCoinsResolver, - ] + return [AuthenticationResolver, PublicCommunityInfoResolver, PublicKeyResolver, SendCoinsResolver] } diff --git a/federation/src/graphql/api/1_1/schema.ts b/federation/src/graphql/api/1_1/schema.ts index dc16ad475..07871cefa 100644 --- a/federation/src/graphql/api/1_1/schema.ts +++ b/federation/src/graphql/api/1_1/schema.ts @@ -1,14 +1,9 @@ import { NonEmptyArray } from 'type-graphql' -import { AuthenticationResolver } from "../1_0/resolver/AuthenticationResolver" -import { PublicCommunityInfoResolver } from "../1_0/resolver/PublicCommunityInfoResolver" -import { SendCoinsResolver } from "../1_0/resolver/SendCoinsResolver" -import { PublicKeyResolver } from "./resolver/PublicKeyResolver" +import { AuthenticationResolver } from '../1_0/resolver/AuthenticationResolver' +import { PublicCommunityInfoResolver } from '../1_0/resolver/PublicCommunityInfoResolver' +import { SendCoinsResolver } from '../1_0/resolver/SendCoinsResolver' +import { PublicKeyResolver } from './resolver/PublicKeyResolver' export const getApiResolvers = (): NonEmptyArray => { - return [ - AuthenticationResolver, - PublicCommunityInfoResolver, - PublicKeyResolver, - SendCoinsResolver, - ] -} \ No newline at end of file + return [AuthenticationResolver, PublicCommunityInfoResolver, PublicKeyResolver, SendCoinsResolver] +} From 17637960e48bcbd874d0c5ff8856f65e64b2d857 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Sun, 4 May 2025 10:43:58 +0200 Subject: [PATCH 071/123] finetuning workflows --- .github/workflows/lint.yml | 28 ++++++++++++++++++++++++++++ .github/workflows/test_e2e.yml | 3 ++- frontend/package.json | 1 - frontend/turbo.json | 3 --- 4 files changed, 30 insertions(+), 5 deletions(-) create mode 100644 .github/workflows/lint.yml diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml new file mode 100644 index 000000000..0a3179b26 --- /dev/null +++ b/.github/workflows/lint.yml @@ -0,0 +1,28 @@ +name: Linting with biomejs + +on: push + +jobs: + lint: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Setup Biome + uses: biomejs/setup-biome@v2 + with: + version: latest + - name: Lint - Config-Schema + run: biome ci ./config-schema + - name: Lint - Backend + run: biome ci ./backend + - name: Lint - Frontend + run: biome ci ./frontend + - name: Lint - Admin + run: biome ci ./admin + - name: Lint - Database + run: biome ci ./database + - name: Lint - DHT Node + run: biome ci ./dht-node + - name: Lint - Federation + run: biome ci ./federation \ No newline at end of file diff --git a/.github/workflows/test_e2e.yml b/.github/workflows/test_e2e.yml index eeae17439..a0d442c5a 100644 --- a/.github/workflows/test_e2e.yml +++ b/.github/workflows/test_e2e.yml @@ -38,7 +38,8 @@ jobs: cd backend cp .env.test_e2e .env cd .. - bun turbo backend#build frontend#build + bun turbo backend#build + bun turbo frontend#build bun turbo backend#start frontend#start --env-mode=loose & - name: End-to-end tests | prepare diff --git a/frontend/package.json b/frontend/package.json index 5791c8fc3..bd27fea29 100755 --- a/frontend/package.json +++ b/frontend/package.json @@ -4,7 +4,6 @@ "private": true, "scripts": { "dev": "concurrently \"yarn watch-scss\" \"vite\"", - "prebuild": "yarn compile-scss", "build": "vite build", "start": "vite preview", "postbuild": "uname | grep -q Linux && find build -type f -regex '.*\\.\\(html\\|js\\|css\\|svg\\|json\\)' -exec gzip -9 -k {} + || echo 'Skip precompress on non-Linux'", diff --git a/frontend/turbo.json b/frontend/turbo.json index 4b0b2727c..13d3bc9f8 100644 --- a/frontend/turbo.json +++ b/frontend/turbo.json @@ -11,9 +11,6 @@ "cache": false, "persistent": true }, - "dev": { - "dependsOn": ["compile-scss"] - }, "build": { "dependsOn": ["compile-scss"] } From 2783f1aca68ed8ac08b0d18990896647fcabdc3b Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Sun, 4 May 2025 10:54:52 +0200 Subject: [PATCH 072/123] try if status check needs to be a job or can be a step --- .github/workflows/lint.yml | 6 +----- .github/workflows/test_backend.yml | 28 ++++------------------------ .github/workflows/test_config.yml | 6 +++--- .github/workflows/test_database.yml | 4 ++-- 4 files changed, 10 insertions(+), 34 deletions(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 0a3179b26..1c6be871f 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -16,11 +16,7 @@ jobs: run: biome ci ./config-schema - name: Lint - Backend run: biome ci ./backend - - name: Lint - Frontend - run: biome ci ./frontend - - name: Lint - Admin - run: biome ci ./admin - - name: Lint - Database + - name: Lint - Database Up run: biome ci ./database - name: Lint - DHT Node run: biome ci ./dht-node diff --git a/.github/workflows/test_backend.yml b/.github/workflows/test_backend.yml index 74abd0403..33d345dc4 100644 --- a/.github/workflows/test_backend.yml +++ b/.github/workflows/test_backend.yml @@ -40,8 +40,6 @@ jobs: name: Unit tests - Backend needs: files-changed runs-on: ubuntu-latest - outputs: - test-success: ${{ steps.test.outputs.success }} steps: - name: Set Node.js version uses: actions/setup-node@v4 @@ -63,29 +61,11 @@ jobs: - name: install dependencies run: cd out && yarn install --frozen-lockfile --production=false + - name: Locales - Backend + run: cd out && yarn locales + - name: Wait for MariaDB to be ready run: docker run --rm --network gradido_internal-net busybox sh -c 'until nc -z mariadb 3306; do echo waiting for db; sleep 1; done;' - name: Backend | Unit tests - id: test - run: | - cd out && turbo backend#lint backend#test backend#build backend#typecheck - echo "success=$([ $? -eq 0 ] && echo true || echo false)" >> $GITHUB_OUTPUT - - lint: - if: needs.files-changed.outputs.backend == 'true' - name: Lint - Backend - needs: [files-changed, unit_test] - runs-on: ubuntu-latest - steps: - - name: Check result from previous step - run: if [ "${{ needs.unit_test.outputs.test-success }}" != "true" ]; then exit 1; fi - - locales: - if: needs.files-changed.outputs.backend == 'true' - name: Locales - Backend - needs: [files-changed, unit_test] - runs-on: ubuntu-latest - steps: - - name: Check result from previous step - run: if [ "${{ needs.unit_test.outputs.test-success }}" != "true" ]; then exit 1; fi + run: cd out && turbo backend#test backend#build backend#typecheck \ No newline at end of file diff --git a/.github/workflows/test_config.yml b/.github/workflows/test_config.yml index b52291694..8a681ab4c 100644 --- a/.github/workflows/test_config.yml +++ b/.github/workflows/test_config.yml @@ -21,7 +21,7 @@ jobs: list-files: shell build: - name: typecheck and lint - Config-Schema + name: typecheck - Config-Schema if: needs.files-changed.outputs.config == 'true' || needs.files-changed.outputs.docker-compose == 'true' needs: files-changed runs-on: ubuntu-latest @@ -38,6 +38,6 @@ jobs: - name: install dependencies run: cd out && yarn install --frozen-lockfile --production=false - - name: typecheck and lint - run: cd out && turbo typecheck lint + - name: typecheck + run: cd out && turbo typecheck diff --git a/.github/workflows/test_database.yml b/.github/workflows/test_database.yml index 641f7f459..4b1c4886c 100644 --- a/.github/workflows/test_database.yml +++ b/.github/workflows/test_database.yml @@ -81,5 +81,5 @@ jobs: - name: install dependencies run: cd out && yarn install --frozen-lockfile --production=false - - name: Database | Lint - run: cd out && turbo lint build typecheck \ No newline at end of file + - name: Database + run: cd out && turbo build typecheck \ No newline at end of file From c630d403e989085e0b6330e36adcc099625f7841 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Sun, 4 May 2025 10:59:51 +0200 Subject: [PATCH 073/123] let run inside module folder to use individuell biome configs --- .github/workflows/lint.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 1c6be871f..08a41579d 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -13,12 +13,12 @@ jobs: with: version: latest - name: Lint - Config-Schema - run: biome ci ./config-schema + run: cd ./config-schema && biome ci . - name: Lint - Backend - run: biome ci ./backend + run: cd ./backend && biome ci . - name: Lint - Database Up - run: biome ci ./database + run: cd ./database && biome ci . - name: Lint - DHT Node - run: biome ci ./dht-node + run: cd ./dht-node && biome ci . - name: Lint - Federation - run: biome ci ./federation \ No newline at end of file + run: cd ./federation && biome ci . \ No newline at end of file From 446beaa7020d165a4d186547e9e73c9e269c154a Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Sun, 4 May 2025 11:08:01 +0200 Subject: [PATCH 074/123] move linting complete into extra job --- .github/workflows/lint.yml | 71 +++++++++++++++++++++++++-- .github/workflows/test_backend.yml | 2 +- .github/workflows/test_dht_node.yml | 15 +----- .github/workflows/test_federation.yml | 15 +----- 4 files changed, 69 insertions(+), 34 deletions(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 08a41579d..57bef6de0 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -5,6 +5,12 @@ on: push jobs: lint: runs-on: ubuntu-latest + outputs: + config-schema: ${{ steps.changes.outputs.config-schema }} + backend: ${{ steps.changes.outputs.backend }} + database: ${{ steps.changes.outputs.database }} + dht-node: ${{ steps.changes.outputs.dht-node }} + federation: ${{ steps.changes.outputs.federation }} steps: - name: Checkout uses: actions/checkout@v4 @@ -13,12 +19,67 @@ jobs: with: version: latest - name: Lint - Config-Schema - run: cd ./config-schema && biome ci . + id: config-schema + run: | + cd ./config-schema && biome ci . + echo "success=$([ $? -eq 0 ] && echo true || echo false)" >> $GITHUB_OUTPUT - name: Lint - Backend - run: cd ./backend && biome ci . + id: backend + run: | + cd ./backend && biome ci . + echo "success=$([ $? -eq 0 ] && echo true || echo false)" >> $GITHUB_OUTPUT - name: Lint - Database Up - run: cd ./database && biome ci . + id: database + run: | + cd ./database && biome ci . + echo "success=$([ $? -eq 0 ] && echo true || echo false)" >> $GITHUB_OUTPUT - name: Lint - DHT Node - run: cd ./dht-node && biome ci . + id: dht-node + run: | + cd ./dht-node && biome ci . + echo "success=$([ $? -eq 0 ] && echo true || echo false)" >> $GITHUB_OUTPUT - name: Lint - Federation - run: cd ./federation && biome ci . \ No newline at end of file + id: federation + run: | + cd ./federation && biome ci . + echo "success=$([ $? -eq 0 ] && echo true || echo false)" >> $GITHUB_OUTPUT + + lint_config_schema: + name: Lint - Config-Schema + needs: lint + runs-on: ubuntu-latest + steps: + - name: Check result from previous step + run: if [ "${{ needs.lint.outputs.config-schema }}" != "true" ]; then exit 1; fi + + lint_backend: + name: Lint - Backend + needs: lint + runs-on: ubuntu-latest + steps: + - name: Check result from previous step + run: if [ "${{ needs.lint.outputs.backend }}" != "true" ]; then exit 1; fi + + lint_database: + name: Lint - Database Up + needs: lint + runs-on: ubuntu-latest + steps: + - name: Check result from previous step + run: if [ "${{ needs.lint.outputs.database }}" != "true" ]; then exit 1; fi + + lint_dht_node: + name: Lint - DHT Node + needs: lint + runs-on: ubuntu-latest + steps: + - name: Check result from previous step + run: if [ "${{ needs.lint.outputs.dht-node }}" != "true" ]; then exit 1; fi + + lint_federation: + name: Lint - Federation + needs: lint + runs-on: ubuntu-latest + steps: + - name: Check result from previous step + run: if [ "${{ needs.lint.outputs.federation }}" != "true" ]; then exit 1; fi \ No newline at end of file diff --git a/.github/workflows/test_backend.yml b/.github/workflows/test_backend.yml index 33d345dc4..6c3dae05b 100644 --- a/.github/workflows/test_backend.yml +++ b/.github/workflows/test_backend.yml @@ -62,7 +62,7 @@ jobs: run: cd out && yarn install --frozen-lockfile --production=false - name: Locales - Backend - run: cd out && yarn locales + run: cd out/backend && yarn locales - name: Wait for MariaDB to be ready run: docker run --rm --network gradido_internal-net busybox sh -c 'until nc -z mariadb 3306; do echo waiting for db; sleep 1; done;' diff --git a/.github/workflows/test_dht_node.yml b/.github/workflows/test_dht_node.yml index 6aee0b4cc..1fd2045bf 100644 --- a/.github/workflows/test_dht_node.yml +++ b/.github/workflows/test_dht_node.yml @@ -39,8 +39,6 @@ jobs: if: needs.files-changed.outputs.config == 'true' || needs.files-changed.outputs.database == 'true' || needs.files-changed.outputs.dht_node == 'true' || needs.files-changed.outputs.docker-compose == 'true' needs: files-changed runs-on: ubuntu-latest - outputs: - test-success: ${{ steps.test.outputs.success }} steps: - name: Set Node.js version uses: actions/setup-node@v4 @@ -66,16 +64,5 @@ jobs: run: docker run --rm --network gradido_internal-net busybox sh -c 'until nc -z mariadb 3306; do echo waiting for db; sleep 1; done;' - name: run unit test & lint & build & typecheck - id: test - run: | - cd out && turbo dht-node#lint dht-node#test dht-node#build dht-node#typecheck - echo "success=$([ $? -eq 0 ] && echo true || echo false)" >> $GITHUB_OUTPUT + run: cd out && turbo dht-node#lint dht-node#test dht-node#build dht-node#typecheck - lint: - name: Lint - DHT Node - if: needs.files-changed.outputs.dht_node == 'true' - needs: [files-changed, unit_test] - runs-on: ubuntu-latest - steps: - - name: Check result from previous step - run: if [ "${{ needs.unit_test.outputs.test-success }}" != "true" ]; then exit 1; fi diff --git a/.github/workflows/test_federation.yml b/.github/workflows/test_federation.yml index 46350853c..bd670912c 100644 --- a/.github/workflows/test_federation.yml +++ b/.github/workflows/test_federation.yml @@ -39,8 +39,6 @@ jobs: if: needs.files-changed.outputs.database == 'true' || needs.files-changed.outputs.docker-compose == 'true' || needs.files-changed.outputs.federation == 'true' || needs.files-changed.outputs.mariadb == 'true' needs: files-changed runs-on: ubuntu-latest - outputs: - test-success: ${{ steps.test.outputs.success }} steps: - name: Set Node.js version uses: actions/setup-node@v4 @@ -67,15 +65,4 @@ jobs: - name: Federation | Unit tests id: test - run: | - cd out && turbo federation#lint federation#test federation#build federation#typecheck - echo "success=$([ $? -eq 0 ] && echo true || echo false)" >> $GITHUB_OUTPUT - - lint: - name: Lint - Federation - if: needs.files-changed.outputs.federation == 'true' - needs: [files-changed, unit_test] - runs-on: ubuntu-latest - steps: - - name: Check result from previous step - run: if [ "${{ needs.unit_test.outputs.test-success }}" != "true" ]; then exit 1; fi + run: cd out && turbo federation#lint federation#test federation#build federation#typecheck \ No newline at end of file From ecc756aaa4c0bc92b573e5ef7320ff15f15b8150 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Sun, 4 May 2025 11:28:19 +0200 Subject: [PATCH 075/123] fix test --- .../1_1/resolver/PublicKeyResolver.test.ts | 2 +- .../api/1_1/resolver/PublicKeyResolver.ts | 23 +++++++++++++++---- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/federation/src/graphql/api/1_1/resolver/PublicKeyResolver.test.ts b/federation/src/graphql/api/1_1/resolver/PublicKeyResolver.test.ts index 2c8452de5..2c2b3bb48 100644 --- a/federation/src/graphql/api/1_1/resolver/PublicKeyResolver.test.ts +++ b/federation/src/graphql/api/1_1/resolver/PublicKeyResolver.test.ts @@ -35,7 +35,7 @@ describe('PublicKeyResolver', () => { beforeEach(async () => { const homeCom = new DbFederatedCommunity() homeCom.foreign = false - homeCom.apiVersion = '1_0' + homeCom.apiVersion = '1_1' homeCom.endPoint = 'endpoint-url' homeCom.publicKey = Buffer.from( '9f6dcd0d985cc7105cd71c3417d9c291b126c8ca90513197de02191f928ef713', diff --git a/federation/src/graphql/api/1_1/resolver/PublicKeyResolver.ts b/federation/src/graphql/api/1_1/resolver/PublicKeyResolver.ts index 3cc9ed62b..6e621eb59 100644 --- a/federation/src/graphql/api/1_1/resolver/PublicKeyResolver.ts +++ b/federation/src/graphql/api/1_1/resolver/PublicKeyResolver.ts @@ -1,6 +1,21 @@ -import { Resolver } from 'type-graphql' - -import { PublicKeyResolver as PublicKeyResolver_1_0 } from '../../1_0/resolver/PublicKeyResolver' +import { federationLogger as logger } from '@/server/logger' +import { FederatedCommunity as DbFederatedCommunity } from 'database' +import { Query, Resolver } from 'type-graphql' +import { GetPublicKeyResult } from '../../1_0/model/GetPublicKeyResult' @Resolver() -export class PublicKeyResolver extends PublicKeyResolver_1_0 {} +export class PublicKeyResolver { + @Query(() => GetPublicKeyResult) + async getPublicKey(): Promise { + logger.debug(`getPublicKey() via apiVersion=1_0 ...`) + const homeCom = await DbFederatedCommunity.findOneOrFail({ + where: { + foreign: false, + apiVersion: '1_1', + }, + }) + const publicKeyHex = homeCom.publicKey.toString('hex') + logger.debug(`getPublicKey()-1_1... return publicKey=${publicKeyHex}`) + return new GetPublicKeyResult(publicKeyHex) + } +} From 63d12fee6150a7cd6d6f82aab02f27b9c8c1dd52 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Sun, 4 May 2025 11:39:16 +0200 Subject: [PATCH 076/123] biome --- .github/workflows/lint.yml | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 57bef6de0..24f7b362a 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -21,27 +21,33 @@ jobs: - name: Lint - Config-Schema id: config-schema run: | - cd ./config-schema && biome ci . + cd ./config-schema + biome ci . + echo $? echo "success=$([ $? -eq 0 ] && echo true || echo false)" >> $GITHUB_OUTPUT - name: Lint - Backend id: backend run: | - cd ./backend && biome ci . + cd ./backend + biome ci . echo "success=$([ $? -eq 0 ] && echo true || echo false)" >> $GITHUB_OUTPUT - name: Lint - Database Up id: database run: | - cd ./database && biome ci . + cd ./database + biome ci . echo "success=$([ $? -eq 0 ] && echo true || echo false)" >> $GITHUB_OUTPUT - name: Lint - DHT Node id: dht-node run: | - cd ./dht-node && biome ci . + cd ./dht-node + biome ci . echo "success=$([ $? -eq 0 ] && echo true || echo false)" >> $GITHUB_OUTPUT - name: Lint - Federation id: federation run: | - cd ./federation && biome ci . + cd ./federation + biome ci . echo "success=$([ $? -eq 0 ] && echo true || echo false)" >> $GITHUB_OUTPUT lint_config_schema: From bfea82e38ccf331289b11be5686f3dfdd92185b1 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Sun, 4 May 2025 11:46:00 +0200 Subject: [PATCH 077/123] fix action definition error --- .github/workflows/lint.yml | 10 +++++----- .github/workflows/test_backend.yml | 14 +++++++++++++- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 24f7b362a..4ff2632e4 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -6,11 +6,11 @@ jobs: lint: runs-on: ubuntu-latest outputs: - config-schema: ${{ steps.changes.outputs.config-schema }} - backend: ${{ steps.changes.outputs.backend }} - database: ${{ steps.changes.outputs.database }} - dht-node: ${{ steps.changes.outputs.dht-node }} - federation: ${{ steps.changes.outputs.federation }} + config-schema: ${{ steps.config-schema.outputs.success }} + backend: ${{ steps.backend.outputs.success }} + database: ${{ steps.database.outputs.success }} + dht-node: ${{ steps.dht-node.outputs.success }} + federation: ${{ steps.federation.outputs.success }} steps: - name: Checkout uses: actions/checkout@v4 diff --git a/.github/workflows/test_backend.yml b/.github/workflows/test_backend.yml index 6c3dae05b..96c6ecfd8 100644 --- a/.github/workflows/test_backend.yml +++ b/.github/workflows/test_backend.yml @@ -68,4 +68,16 @@ jobs: run: docker run --rm --network gradido_internal-net busybox sh -c 'until nc -z mariadb 3306; do echo waiting for db; sleep 1; done;' - name: Backend | Unit tests - run: cd out && turbo backend#test backend#build backend#typecheck \ No newline at end of file + run: cd out && turbo backend#test backend#build backend#typecheck + + locales: + if: needs.files-changed.outputs.backend == 'true' + name: Locales - Backend + needs: files-changed + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v3 + + - name: Backend | Locales + run: cd out/backend && yarn locales \ No newline at end of file From 36551e63e9fb849448404723ba2d543381d8dd58 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Sun, 4 May 2025 11:46:59 +0200 Subject: [PATCH 078/123] fix wrong path --- .github/workflows/test_backend.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test_backend.yml b/.github/workflows/test_backend.yml index 96c6ecfd8..0f9383e1b 100644 --- a/.github/workflows/test_backend.yml +++ b/.github/workflows/test_backend.yml @@ -80,4 +80,4 @@ jobs: uses: actions/checkout@v3 - name: Backend | Locales - run: cd out/backend && yarn locales \ No newline at end of file + run: cd backend && yarn locales \ No newline at end of file From bb2cea88566ee862d26fe53a28f6df3fe15a8227 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Sun, 4 May 2025 12:11:45 +0200 Subject: [PATCH 079/123] try out --- .github/workflows/test_admin_interface.yml | 25 +++++++++++++++++----- .github/workflows/test_frontend.yml | 9 +++++--- 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/.github/workflows/test_admin_interface.yml b/.github/workflows/test_admin_interface.yml index 91d7bf5da..32c586e5d 100644 --- a/.github/workflows/test_admin_interface.yml +++ b/.github/workflows/test_admin_interface.yml @@ -61,6 +61,12 @@ jobs: - name: install dependencies run: cd out && yarn install --frozen-lockfile --production=false + - name: upload out + uses: actions/upload-artifact@v4 + with: + name: out + path: out + - name: Admin Interface | Unit tests id: test run: | @@ -73,8 +79,17 @@ jobs: needs: [files-changed, unit_test] runs-on: ubuntu-latest steps: - - name: Check result from previous step - run: if [ "${{ needs.unit_test.outputs.test-success }}" != "true" ]; then exit 1; fi + - name: download out + uses: actions/download-artifact@v4 + with: + name: out + path: out + + - name: run lint + run: cd out && yarn lint + + #- name: Check result from previous step + # run: if [ "${{ needs.unit_test.outputs.test-success }}" != "true" ]; then exit 1; fi stylelint: if: needs.files-changed.outputs.admin == 'true' @@ -91,11 +106,11 @@ jobs: locales: if: needs.files-changed.outputs.admin == 'true' name: Locales - Admin Interface - needs: [files-changed, unit_test] + needs: files-changed runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v3 - - name: Check result from previous step - run: if [ "${{ needs.unit_test.outputs.test-success }}" != "true" ]; then exit 1; fi \ No newline at end of file + - name: Admin Interface | Locales + run: cd admin && yarn locales \ No newline at end of file diff --git a/.github/workflows/test_frontend.yml b/.github/workflows/test_frontend.yml index c10d3f6cf..dd376427e 100644 --- a/.github/workflows/test_frontend.yml +++ b/.github/workflows/test_frontend.yml @@ -88,8 +88,11 @@ jobs: locales: if: needs.files-changed.outputs.frontend == 'true' name: Locales - Frontend - needs: [files-changed, unit_test] + needs: files-changed runs-on: ubuntu-latest steps: - - name: Check result from previous step - run: if [ "${{ needs.unit_test.outputs.test-success }}" != "true" ]; then exit 1; fi + - name: Checkout code + uses: actions/checkout@v3 + + - name: Frontend | Locales + run: cd frontend && yarn locales From c2792b13a293ec0c2f1d1a86c8e258f594e37047 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Sun, 4 May 2025 12:15:46 +0200 Subject: [PATCH 080/123] check compression speed --- .github/workflows/test_admin_interface.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/test_admin_interface.yml b/.github/workflows/test_admin_interface.yml index 32c586e5d..f5781de50 100644 --- a/.github/workflows/test_admin_interface.yml +++ b/.github/workflows/test_admin_interface.yml @@ -66,6 +66,7 @@ jobs: with: name: out path: out + compression-level: 2 - name: Admin Interface | Unit tests id: test @@ -104,9 +105,7 @@ jobs: run: if [ "${{ needs.unit_test.outputs.test-success }}" != "true" ]; then exit 1; fi locales: - if: needs.files-changed.outputs.admin == 'true' name: Locales - Admin Interface - needs: files-changed runs-on: ubuntu-latest steps: - name: Checkout code From a70b72dfadc4429beb210dd1e798bc21a7492571 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Sun, 4 May 2025 12:29:17 +0200 Subject: [PATCH 081/123] remove artifact experiments, move eslint of e2e to devDependencies --- .github/workflows/test_admin_interface.yml | 28 +++++----------------- .github/workflows/test_e2e.yml | 2 +- e2e-tests/package.json | 12 ++++++---- 3 files changed, 14 insertions(+), 28 deletions(-) diff --git a/.github/workflows/test_admin_interface.yml b/.github/workflows/test_admin_interface.yml index f5781de50..7108bd0b1 100644 --- a/.github/workflows/test_admin_interface.yml +++ b/.github/workflows/test_admin_interface.yml @@ -61,13 +61,6 @@ jobs: - name: install dependencies run: cd out && yarn install --frozen-lockfile --production=false - - name: upload out - uses: actions/upload-artifact@v4 - with: - name: out - path: out - compression-level: 2 - - name: Admin Interface | Unit tests id: test run: | @@ -75,27 +68,16 @@ jobs: echo "success=$([ $? -eq 0 ] && echo true || echo false)" >> $GITHUB_OUTPUT lint: - if: needs.files-changed.outputs.admin == 'true' name: Lint - Admin Interface - needs: [files-changed, unit_test] + needs: unit_test runs-on: ubuntu-latest steps: - - name: download out - uses: actions/download-artifact@v4 - with: - name: out - path: out - - - name: run lint - run: cd out && yarn lint - - #- name: Check result from previous step - # run: if [ "${{ needs.unit_test.outputs.test-success }}" != "true" ]; then exit 1; fi + - name: Check result from previous step + run: if [ "${{ needs.unit_test.outputs.test-success }}" != "true" ]; then exit 1; fi stylelint: - if: needs.files-changed.outputs.admin == 'true' name: Stylelint - Admin Interface - needs: [files-changed, unit_test] + needs: unit_test runs-on: ubuntu-latest steps: - name: Checkout code @@ -105,7 +87,9 @@ jobs: run: if [ "${{ needs.unit_test.outputs.test-success }}" != "true" ]; then exit 1; fi locales: + if: needs.files-changed.outputs.admin == 'true' name: Locales - Admin Interface + needs: files-changed runs-on: ubuntu-latest steps: - name: Checkout code diff --git a/.github/workflows/test_e2e.yml b/.github/workflows/test_e2e.yml index a0d442c5a..c792f9a0b 100644 --- a/.github/workflows/test_e2e.yml +++ b/.github/workflows/test_e2e.yml @@ -48,7 +48,7 @@ jobs: chmod +x /opt/cucumber-json-formatter sudo ln -fs /opt/cucumber-json-formatter /usr/bin/cucumber-json-formatter cd e2e-tests/ - bun install + bun install --production - name: wait for frontend and backend to be ready run: | diff --git a/e2e-tests/package.json b/e2e-tests/package.json index e2ecbb4f9..0cd40035a 100644 --- a/e2e-tests/package.json +++ b/e2e-tests/package.json @@ -29,9 +29,14 @@ "dependencies": { "@badeball/cypress-cucumber-preprocessor": "^18.0.1", "@cypress/browserify-preprocessor": "^3.0.2", + "cypress": "^12.16.0", + "jwt-decode": "^3.1.2", + "multiple-cucumber-html-reporter": "^3.4.0", + "typescript": "^4.7.4" + }, + "devDependencies": { "@typescript-eslint/eslint-plugin": "^5.38.0", "@typescript-eslint/parser": "^5.38.0", - "cypress": "^12.16.0", "eslint": "^8.23.1", "eslint-config-prettier": "^8.3.0", "eslint-config-standard": "^16.0.3", @@ -41,9 +46,6 @@ "eslint-plugin-node": "^11.1.0", "eslint-plugin-prettier": "^4.2.1", "eslint-plugin-promise": "^6.1.1", - "jwt-decode": "^3.1.2", - "multiple-cucumber-html-reporter": "^3.4.0", - "prettier": "^2.7.1", - "typescript": "^4.7.4" + "prettier": "^2.7.1" } } From 35d58042d1ddee77d0041306502369b420b5d982 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Sun, 4 May 2025 14:42:24 +0200 Subject: [PATCH 082/123] try out typecheck sepaerat from test --- .github/workflows/test_backend.yml | 51 ++++++++++++++++++++++-------- 1 file changed, 38 insertions(+), 13 deletions(-) diff --git a/.github/workflows/test_backend.yml b/.github/workflows/test_backend.yml index 0f9383e1b..d62477811 100644 --- a/.github/workflows/test_backend.yml +++ b/.github/workflows/test_backend.yml @@ -61,23 +61,48 @@ jobs: - name: install dependencies run: cd out && yarn install --frozen-lockfile --production=false - - name: Locales - Backend - run: cd out/backend && yarn locales - - name: Wait for MariaDB to be ready run: docker run --rm --network gradido_internal-net busybox sh -c 'until nc -z mariadb 3306; do echo waiting for db; sleep 1; done;' - name: Backend | Unit tests - run: cd out && turbo backend#test backend#build backend#typecheck + run: cd out && turbo backend#test backend#build + + typecheck: + if: needs.files-changed.outputs.backend == 'true' + name: Typecheck - Backend + needs: files-changed + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v3 + + - name: Set Node.js version + uses: actions/setup-node@v4 + with: + node-version: '18.20.7' + + - name: Install turbo + run: yarn global add turbo@^2 + + - name: Prune backend with turbos help + run: turbo prune backend + + - name: install dependencies + run: | + cd out && yarn install --frozen-lockfile --production=true + cd backend && yarn add typescript + + - name: Backend | Typecheck + run: cd out && turbo backend#typecheck locales: - if: needs.files-changed.outputs.backend == 'true' - name: Locales - Backend - needs: files-changed - runs-on: ubuntu-latest - steps: - - name: Checkout code - uses: actions/checkout@v3 + if: needs.files-changed.outputs.backend == 'true' + name: Locales - Backend + needs: files-changed + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v3 - - name: Backend | Locales - run: cd backend && yarn locales \ No newline at end of file + - name: Backend | Locales + run: cd backend && yarn locales \ No newline at end of file From 540ed6f4d70c1b86838a177e7ab2dec6adac655d Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Sun, 4 May 2025 14:50:45 +0200 Subject: [PATCH 083/123] try bun instead of turbo prune and yarn install --- .github/workflows/test_backend.yml | 26 +++++++++----------------- backend/turbo.json | 3 +++ 2 files changed, 12 insertions(+), 17 deletions(-) diff --git a/.github/workflows/test_backend.yml b/.github/workflows/test_backend.yml index d62477811..8d94de276 100644 --- a/.github/workflows/test_backend.yml +++ b/.github/workflows/test_backend.yml @@ -47,25 +47,22 @@ jobs: node-version: '18.20.7' - name: Checkout code - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: docker-compose mariadb run: docker compose -f docker-compose.yml -f docker-compose.test.yml up --detach --no-deps mariadb - - - name: Install turbo - run: yarn global add turbo@^2 - - name: Prune backend with turbos help - run: turbo prune backend + - name: install bun + uses: oven-sh/setup-bun@v2 - name: install dependencies - run: cd out && yarn install --frozen-lockfile --production=false + run: bun install --frozen-lockfile --production=false - name: Wait for MariaDB to be ready run: docker run --rm --network gradido_internal-net busybox sh -c 'until nc -z mariadb 3306; do echo waiting for db; sleep 1; done;' - name: Backend | Unit tests - run: cd out && turbo backend#test backend#build + run: bun turbo backend#test backend#build typecheck: if: needs.files-changed.outputs.backend == 'true' @@ -81,19 +78,14 @@ jobs: with: node-version: '18.20.7' - - name: Install turbo - run: yarn global add turbo@^2 - - - name: Prune backend with turbos help - run: turbo prune backend + - name: install bun + uses: oven-sh/setup-bun@v2 - name: install dependencies - run: | - cd out && yarn install --frozen-lockfile --production=true - cd backend && yarn add typescript + run: bun install --frozen-lockfile --production=true - name: Backend | Typecheck - run: cd out && turbo backend#typecheck + run: bun turbo backend#typecheck locales: if: needs.files-changed.outputs.backend == 'true' diff --git a/backend/turbo.json b/backend/turbo.json index f519af680..7427fa978 100644 --- a/backend/turbo.json +++ b/backend/turbo.json @@ -9,6 +9,9 @@ "lint": { "dependsOn": ["locales", "database#build"] }, + "typecheck": { + "dependsOn": ["database#build", "config-schema#build"] + }, "test": { "dependsOn": ["database#up:backend_test", "config-schema#build", "database#build"] }, From 49d15890387062c38972ad532eb87e6528367abe Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Sun, 4 May 2025 14:52:52 +0200 Subject: [PATCH 084/123] fix problem with bun --- .github/workflows/test_backend.yml | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/.github/workflows/test_backend.yml b/.github/workflows/test_backend.yml index 8d94de276..983961060 100644 --- a/.github/workflows/test_backend.yml +++ b/.github/workflows/test_backend.yml @@ -56,13 +56,13 @@ jobs: uses: oven-sh/setup-bun@v2 - name: install dependencies - run: bun install --frozen-lockfile --production=false + run: bun install --frozen-lockfile - name: Wait for MariaDB to be ready run: docker run --rm --network gradido_internal-net busybox sh -c 'until nc -z mariadb 3306; do echo waiting for db; sleep 1; done;' - name: Backend | Unit tests - run: bun turbo backend#test backend#build + run: bun turbo backend#test typecheck: if: needs.files-changed.outputs.backend == 'true' @@ -82,10 +82,12 @@ jobs: uses: oven-sh/setup-bun@v2 - name: install dependencies - run: bun install --frozen-lockfile --production=true + run: | + bun install --frozen-lockfile --production + cd backend && bun add typescript - name: Backend | Typecheck - run: bun turbo backend#typecheck + run: bun turbo backend#typecheck backend#build locales: if: needs.files-changed.outputs.backend == 'true' From 6d45d62c0b5b32c4482d4c7f11d6ba9a12e6b2e9 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Sun, 4 May 2025 14:55:30 +0200 Subject: [PATCH 085/123] full bun install --- .github/workflows/test_backend.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/test_backend.yml b/.github/workflows/test_backend.yml index 983961060..0dd68d762 100644 --- a/.github/workflows/test_backend.yml +++ b/.github/workflows/test_backend.yml @@ -82,9 +82,7 @@ jobs: uses: oven-sh/setup-bun@v2 - name: install dependencies - run: | - bun install --frozen-lockfile --production - cd backend && bun add typescript + run: bun install --frozen-lockfile - name: Backend | Typecheck run: bun turbo backend#typecheck backend#build From 818ab59f70df38df36f9f00dc4532f8af7581182 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Sun, 4 May 2025 15:07:44 +0200 Subject: [PATCH 086/123] try out slightly improvements --- .github/workflows/test_admin_interface.yml | 11 ++--- .github/workflows/test_backend.yml | 2 +- .github/workflows/test_dht_node.yml | 6 +-- .github/workflows/test_federation.yml | 4 +- .github/workflows/test_frontend.yml | 51 +++++++++++++--------- 5 files changed, 41 insertions(+), 33 deletions(-) diff --git a/.github/workflows/test_admin_interface.yml b/.github/workflows/test_admin_interface.yml index 7108bd0b1..a2d1fe5ef 100644 --- a/.github/workflows/test_admin_interface.yml +++ b/.github/workflows/test_admin_interface.yml @@ -52,19 +52,16 @@ jobs: - name: Checkout code uses: actions/checkout@v3 - - name: Install turbo - run: yarn global add turbo@^2 - - - name: Prune admin with turbos help - run: turbo prune admin + - name: install bun + uses: oven-sh/setup-bun@v2 - name: install dependencies - run: cd out && yarn install --frozen-lockfile --production=false + run: bun install --frozen-lockfile - name: Admin Interface | Unit tests id: test run: | - cd out && turbo admin#test admin#lint + bun turbo admin#test admin#lint echo "success=$([ $? -eq 0 ] && echo true || echo false)" >> $GITHUB_OUTPUT lint: diff --git a/.github/workflows/test_backend.yml b/.github/workflows/test_backend.yml index 0dd68d762..5eaaf58d1 100644 --- a/.github/workflows/test_backend.yml +++ b/.github/workflows/test_backend.yml @@ -59,7 +59,7 @@ jobs: run: bun install --frozen-lockfile - name: Wait for MariaDB to be ready - run: docker run --rm --network gradido_internal-net busybox sh -c 'until nc -z mariadb 3306; do echo waiting for db; sleep 1; done;' + run: until nc -z localhost 3306; do echo waiting for db; sleep 1; done; - name: Backend | Unit tests run: bun turbo backend#test diff --git a/.github/workflows/test_dht_node.yml b/.github/workflows/test_dht_node.yml index 1fd2045bf..95d0d5af4 100644 --- a/.github/workflows/test_dht_node.yml +++ b/.github/workflows/test_dht_node.yml @@ -61,8 +61,8 @@ jobs: run: cd out && yarn install --frozen-lockfile --production=false - name: Wait for MariaDB to be ready - run: docker run --rm --network gradido_internal-net busybox sh -c 'until nc -z mariadb 3306; do echo waiting for db; sleep 1; done;' + run: until nc -z localhost 3306; do echo waiting for db; sleep 1; done; - - name: run unit test & lint & build & typecheck - run: cd out && turbo dht-node#lint dht-node#test dht-node#build dht-node#typecheck + - name: run unit test & build & typecheck + run: cd out && turbo dht-node#test dht-node#build dht-node#typecheck diff --git a/.github/workflows/test_federation.yml b/.github/workflows/test_federation.yml index bd670912c..25f8eaab5 100644 --- a/.github/workflows/test_federation.yml +++ b/.github/workflows/test_federation.yml @@ -61,8 +61,8 @@ jobs: run: cd out && yarn install --frozen-lockfile --production=false - name: Wait for MariaDB to be ready - run: docker run --rm --network gradido_internal-net busybox sh -c 'until nc -z mariadb 3306; do echo waiting for db; sleep 1; done;' + run: until nc -z localhost 3306; do echo waiting for db; sleep 1; done; - name: Federation | Unit tests id: test - run: cd out && turbo federation#lint federation#test federation#build federation#typecheck \ No newline at end of file + run: cd out && turbo federation#test federation#build federation#typecheck \ No newline at end of file diff --git a/.github/workflows/test_frontend.yml b/.github/workflows/test_frontend.yml index dd376427e..4853ec0d7 100644 --- a/.github/workflows/test_frontend.yml +++ b/.github/workflows/test_frontend.yml @@ -41,8 +41,6 @@ jobs: name: Unit Tests - Frontend needs: files-changed runs-on: ubuntu-latest - outputs: - test-success: ${{ steps.test.outputs.success }} steps: - name: Set Node.js version uses: actions/setup-node@v4 @@ -50,40 +48,53 @@ jobs: node-version: '18.20.7' - name: Checkout code - uses: actions/checkout@v3 - - - name: Install turbo - run: yarn global add turbo@^2 - - - name: Prune frontend with turbos help - run: turbo prune frontend + uses: actions/checkout@v4 + + - name: install bun + uses: oven-sh/setup-bun@v2 - name: install dependencies - run: cd out && yarn install --frozen-lockfile --production=false + run: bun install --frozen-lockfile - name: Frontend | Unit tests - id: test - run: | - cd out && turbo frontend#test frontend#lint - echo "success=$([ $? -eq 0 ] && echo true || echo false)" >> $GITHUB_OUTPUT + run: bun turbo frontend#test lint: - if: needs.files-changed.outputs.frontend == 'true' + if: needs.files-changed.outputs.config == 'true' || needs.files-changed.outputs.frontend == 'true' name: Lint - Frontend - needs: [files-changed, unit_test] + needs: files-changed runs-on: ubuntu-latest + outputs: + success: ${{ steps.lint.outputs.success }} steps: - - name: Check result from previous step - run: if [ "${{ needs.unit_test.outputs.test-success }}" != "true" ]; then exit 1; fi + - name: Set Node.js version + uses: actions/setup-node@v4 + with: + node-version: '18.20.7' + + - name: Checkout code + uses: actions/checkout@v4 + + - name: install bun + uses: oven-sh/setup-bun@v2 + + - name: install dependencies + run: bun install --frozen-lockfile + + - name: Frontend | Lint + id: lint + run: | + bun turbo frontend#lint + echo "success=$([ $? -eq 0 ] && echo true || echo false)" >> $GITHUB_OUTPUT stylelint: if: needs.files-changed.outputs.frontend == 'true' name: Stylelint - Frontend - needs: [files-changed, unit_test] + needs: [files-changed, lint] runs-on: ubuntu-latest steps: - name: Check result from previous step - run: if [ "${{ needs.unit_test.outputs.test-success }}" != "true" ]; then exit 1; fi + run: if [ "${{ needs.lint.outputs.success }}" != "true" ]; then exit 1; fi locales: if: needs.files-changed.outputs.frontend == 'true' From 22628ac40cafade192680160cae4250ce50957e0 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Mon, 5 May 2025 11:25:50 +0200 Subject: [PATCH 087/123] add husky to project for using versioned git hooks --- .github/workflows/test_e2e.yml | 2 +- .gitignore | 1 + .husky/post-checkout | 7 +++++++ .husky/pre-commit | 1 + bun.lock | 4 ++++ package.json | 18 +++++++++++------- yarn.lock | 5 +++++ 7 files changed, 30 insertions(+), 8 deletions(-) create mode 100644 .husky/post-checkout create mode 100644 .husky/pre-commit diff --git a/.github/workflows/test_e2e.yml b/.github/workflows/test_e2e.yml index c792f9a0b..5015e3887 100644 --- a/.github/workflows/test_e2e.yml +++ b/.github/workflows/test_e2e.yml @@ -23,7 +23,7 @@ jobs: sudo cp ./nginx/e2e-test.conf /etc/nginx/sites-available/default - name: wait for database to be ready - run: docker run --rm --network gradido_internal-net busybox sh -c 'until nc -z mariadb 3306; do echo waiting for db; sleep 1; done;' + run: until nc -z localhost 3306; do echo waiting for db; sleep 1; done; - name: Boot up test system | seed backend run: bun turbo seed diff --git a/.gitignore b/.gitignore index 149d8d245..68f604c8c 100644 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,7 @@ nbproject .metadata /out/* /.env +.env.git package-lock.json /deployment/bare_metal/.env /deployment/bare_metal/nginx/sites-available/gradido.conf diff --git a/.husky/post-checkout b/.husky/post-checkout new file mode 100644 index 000000000..c7b7eeade --- /dev/null +++ b/.husky/post-checkout @@ -0,0 +1,7 @@ +#!/bin/bash +echo "Writing build metadata to .env.git" +cat > .env.git <=18" - } + } } diff --git a/yarn.lock b/yarn.lock index 22ac25cd1..cde6da2bc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6858,6 +6858,11 @@ humanize-ms@^1.2.1: dependencies: ms "^2.0.0" +husky@^9.1.7: + version "9.1.7" + resolved "https://registry.yarnpkg.com/husky/-/husky-9.1.7.tgz#d46a38035d101b46a70456a850ff4201344c0b2d" + integrity sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA== + hypercore-crypto@^3.3.0, hypercore-crypto@^3.3.1: version "3.6.0" resolved "https://registry.yarnpkg.com/hypercore-crypto/-/hypercore-crypto-3.6.0.tgz#6986cc4038339c4402282bbdf33a4fe2dea98db7" From 5e38ebf3bb02001aba269adafa68d4e32d9ae1c8 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Mon, 5 May 2025 13:25:20 +0200 Subject: [PATCH 088/123] update admin Docker for development and production use --- .env.git | 3 + .gitignore | 1 - .husky/post-checkout | 7 --- .husky/pre-commit | 1 - admin/.dockerignore | 3 +- admin/Dockerfile | 31 ++++++++-- bun.lock | 5 +- docker-compose.override.yml | 109 +++++++----------------------------- docker-compose.yml | 75 +++++++------------------ nginx/Dockerfile | 9 ++- nginx/gradido.conf | 8 +-- package.json | 6 +- yarn.lock | 5 -- 13 files changed, 88 insertions(+), 175 deletions(-) create mode 100644 .env.git delete mode 100644 .husky/post-checkout delete mode 100644 .husky/pre-commit diff --git a/.env.git b/.env.git new file mode 100644 index 000000000..9146fae2d --- /dev/null +++ b/.env.git @@ -0,0 +1,3 @@ +BUILD_COMMIT=e7b1c19bc8a0d0ed73aeaa98283be3e47af47831 +BUILD_COMMIT_SHORT=e7b1c19bc +BUILD_VERSION=b2.3.1.1425-861-ge7b1c19bc diff --git a/.gitignore b/.gitignore index 68f604c8c..149d8d245 100644 --- a/.gitignore +++ b/.gitignore @@ -9,7 +9,6 @@ nbproject .metadata /out/* /.env -.env.git package-lock.json /deployment/bare_metal/.env /deployment/bare_metal/nginx/sites-available/gradido.conf diff --git a/.husky/post-checkout b/.husky/post-checkout deleted file mode 100644 index c7b7eeade..000000000 --- a/.husky/post-checkout +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash -echo "Writing build metadata to .env.git" -cat > .env.git <=18" diff --git a/yarn.lock b/yarn.lock index cde6da2bc..22ac25cd1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6858,11 +6858,6 @@ humanize-ms@^1.2.1: dependencies: ms "^2.0.0" -husky@^9.1.7: - version "9.1.7" - resolved "https://registry.yarnpkg.com/husky/-/husky-9.1.7.tgz#d46a38035d101b46a70456a850ff4201344c0b2d" - integrity sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA== - hypercore-crypto@^3.3.0, hypercore-crypto@^3.3.1: version "3.6.0" resolved "https://registry.yarnpkg.com/hypercore-crypto/-/hypercore-crypto-3.6.0.tgz#6986cc4038339c4402282bbdf33a4fe2dea98db7" From ee0e4478f45937c3ed4d8749a0388850ff1eb45a Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Mon, 5 May 2025 13:39:30 +0200 Subject: [PATCH 089/123] fix frontend and backend --- backend/Dockerfile | 22 ++++++++++++++++++---- backend/package.json | 1 - docker-compose.yml | 16 ++++------------ frontend/Dockerfile | 30 +++++++++++++++++++++++++----- 4 files changed, 47 insertions(+), 22 deletions(-) diff --git a/backend/Dockerfile b/backend/Dockerfile index 4dee9953c..ff2ce19b4 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -16,6 +16,8 @@ ENV BUILD_COMMIT="0000000" ENV NODE_ENV="production" ## App relevant Envs ENV PORT="4000" +## Timezone +ENV TZ=UTC # Labels LABEL org.label-schema.build-date="${BUILD_DATE}" @@ -33,6 +35,9 @@ LABEL maintainer="support@gradido.net" # Install Additional Software ## install: git #RUN apk --no-cache add git +RUN yarn global add bun +# Add bun's global bin directory to PATH +ENV PATH="/root/.bun/bin:${PATH}" # Settings ## Expose Container Port @@ -42,6 +47,14 @@ EXPOSE ${PORT} RUN mkdir -p ${DOCKER_WORKDIR} WORKDIR ${DOCKER_WORKDIR} +################################################################################## +# Development #################################################################### +################################################################################## +FROM base AS development + + +# Run command +CMD /bin/sh -c "bun install --frozen-lockfile && bun turbo backend#dev --env-mode=loose" ################################################################################## # Base with turbo ################################################################ @@ -49,9 +62,8 @@ WORKDIR ${DOCKER_WORKDIR} FROM base as turbo-base RUN apk update && apk add --no-cache libc6-compat \ - && yarn global add turbo@^2 \ - && rm -rf /tmp/* ~/.cache node_modules/.cache \ - && yarn cache clean + && bun add --global turbo@^2 \ + && rm -rf /tmp/* ~/.cache node_modules/.cache ################################################################################## # BUILDER (create partly monorepo only with data needed by backend) ############## @@ -105,5 +117,7 @@ COPY --chown=app:app --from=installer ${DOCKER_WORKDIR}/backend/log4js-config.js # Copy locales COPY --chown=app:app --from=installer ${DOCKER_WORKDIR}/backend/locales ./locales +ENV NODE_ENV=production + # Run command -CMD ["TZ=UTC", "node", "index.js"] \ No newline at end of file +CMD ["node", "index.js"] \ No newline at end of file diff --git a/backend/package.json b/backend/package.json index 3af929fe8..165b727e0 100644 --- a/backend/package.json +++ b/backend/package.json @@ -10,7 +10,6 @@ "scripts": { "build": "ts-node ./esbuild.config.ts && mkdirp build/templates/ && ncp src/emails/templates build/templates && mkdirp locales/ && ncp src/locales locales", "clean": "tsc --build --clean", - "start:node": "cross-env TZ=UTC NODE_ENV=production TS_NODE_BASEURL=./build node -r tsconfig-paths/register build/src/index.js", "start": "cross-env TZ=UTC NODE_ENV=production node build/index.js", "dev": "cross-env TZ=UTC nodemon -w src --ext ts,pug,json,css -r tsconfig-paths/register src/index.ts", "typecheck": "tsc --noEmit", diff --git a/docker-compose.yml b/docker-compose.yml index d5ea2548f..bcee473ef 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -10,9 +10,7 @@ services: ######################################################## frontend: # name the image so that it cannot be found in a DockerHub repository, otherwise it will not be built locally from the 'dockerfile' but pulled from there - image: gradido/frontend:local-production - env_file: - - .env.git + image: gradido/frontend:local-production build: context: ./ dockerfile: ./frontend/Dockerfile @@ -93,8 +91,6 @@ services: backend: # name the image so that it cannot be found in a DockerHub repository, otherwise it will not be built locally from the 'dockerfile' but pulled from there image: gradido/backend:local-production - env_file: - - .env.git build: # since we have to include the entities from ./database we cannot define the context as ./backend # this might blow build image size to the moon ?! @@ -114,7 +110,7 @@ services: - BUILD_DATE - BUILD_VERSION - BUILD_COMMIT - - NODE_ENV="production" + - NODE_ENV=production - DB_HOST=mariadb # Application only envs #env_file: @@ -129,8 +125,6 @@ services: dht-node: # name the image so that it cannot be found in a DockerHub repository, otherwise it will not be built locally from the 'dockerfile' but pulled from there image: gradido/dht-node:local-production - env_file: - - .env.git build: # since we have to include the entities from ./database we cannot define the context as ./backend # this might blow build image size to the moon ?! @@ -172,6 +166,8 @@ services: context: . dockerfile: ./dlt-connector/Dockerfile target: production + profiles: + - dlt networks: - internal-net - external-net @@ -197,8 +193,6 @@ services: federation: # name the image so that it cannot be found in a DockerHub repository, otherwise it will not be built locally from the 'dockerfile' but pulled from there image: gradido/federation:local-production - env_file: - - .env.git build: # since we have to include the entities from ./database we cannot define the context as ./federation # this might blow build image size to the moon ?! @@ -233,8 +227,6 @@ services: database: # name the image so that it cannot be found in a DockerHub repository, otherwise it will not be built locally from the 'dockerfile' but pulled from there image: gradido/database:local-up - env_file: - - .env.git build: context: . dockerfile: ./database/Dockerfile diff --git a/frontend/Dockerfile b/frontend/Dockerfile index 09a5bb8b9..9482d8e88 100644 --- a/frontend/Dockerfile +++ b/frontend/Dockerfile @@ -19,6 +19,8 @@ ENV BUILD_COMMIT_SHORT=${BUILD_COMMIT_SHORT} ENV NODE_ENV="production" ## App relevant Envs ENV PORT="3000" +## Timezone +ENV TZ=UTC # Labels LABEL org.label-schema.build-date="${BUILD_DATE}" @@ -35,7 +37,10 @@ LABEL maintainer="support@ogradido.net" # Install Additional Software ## install: node-gyp dependencies -RUN apk --no-cache add g++ make python3 +#RUN apk --no-cache add g++ make python3 +RUN yarn global add bun +# Add bun's global bin directory to PATH +ENV PATH="/root/.bun/bin:${PATH}" # Settings ## Expose Container Port @@ -45,16 +50,27 @@ EXPOSE ${PORT} RUN mkdir -p ${DOCKER_WORKDIR} WORKDIR ${DOCKER_WORKDIR} + +################################################################################## +# Development #################################################################### +################################################################################## +FROM base AS development + +# used for getting git commit hash direct from .git +RUN apk update && apk add --no-cache git + +# Run command +CMD /bin/sh -c "bun install --frozen-lockfile && bun turbo frontend#dev --env-mode=loose" + + ################################################################################## # Base with turbo ################################################################ ################################################################################## FROM base as turbo-base RUN apk update && apk add --no-cache libc6-compat \ - && yarn global add turbo@^2 \ - && rm -rf /tmp/* ~/.cache node_modules/.cache \ - && yarn cache clean - + && bun add --global turbo@^2 \ + && rm -rf /tmp/* ~/.cache node_modules/.cache ################################################################################## # BUILDER (create partly monorepo only with data needed by frontend) ############# @@ -77,6 +93,10 @@ RUN yarn install --frozen-lockfile --production=false \ # Build the project COPY --chown=app:app --from=builder /app/out/full/ . +# TODO: get the actually git commit hash into docker +ENV BUILD_COMMIT='deadbeefdeadbeefdeadbeefdeadbeefdeadbeef' +ENV BUILD_COMMIT_SHORT='deadbeef' +ENV BUILD_VERSION='broken' RUN turbo build --env-mode=loose ################################################################################## From ed84f5a9d13dad6f15c0457a5f05032f12ace75a Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Mon, 5 May 2025 19:11:48 +0200 Subject: [PATCH 090/123] refactor docker --- .dockerignore | 4 +- .github/workflows/test_admin_interface.yml | 6 +- .github/workflows/test_backend.yml | 8 ++- .github/workflows/test_config.yml | 11 ++-- .github/workflows/test_database.yml | 30 +++++---- .github/workflows/test_dht_node.yml | 15 +++-- .github/workflows/test_federation.yml | 13 ++-- .github/workflows/test_frontend.yml | 10 +-- Dockerfile | 39 +++++++++++- admin/Dockerfile | 66 ++++++++------------ backend/Dockerfile | 69 ++++++++------------- backend/esbuild.config.ts | 5 +- backend/src/config/index.ts | 6 +- backend/src/password/EncryptionWorker.ts | 8 +-- backend/src/password/EncryptorUtils.ts | 33 +++++----- bun.lock | 5 +- database/Dockerfile | 2 + dht-node/Dockerfile | 71 ++++++++++++---------- dht-node/esbuild.config.ts | 1 + dht-node/package.json | 4 +- docker-compose.override.yml | 27 +++++--- docker-compose.yml | 16 ++--- federation/Dockerfile | 66 ++++++++++---------- federation/package.json | 10 ++- federation/tsconfig.json | 3 + frontend/Dockerfile | 58 ++++++++---------- frontend/turbo.json | 5 +- scripts/clean-prebuilds.sh | 36 +++++++++++ 28 files changed, 342 insertions(+), 285 deletions(-) create mode 100755 scripts/clean-prebuilds.sh diff --git a/.dockerignore b/.dockerignore index 01c8b1b48..8a354191d 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,3 +1,5 @@ **/node_modules **/build -**/coverage \ No newline at end of file +**/coverage +.git +**/.turbo \ No newline at end of file diff --git a/.github/workflows/test_admin_interface.yml b/.github/workflows/test_admin_interface.yml index a2d1fe5ef..b9d62a5ad 100644 --- a/.github/workflows/test_admin_interface.yml +++ b/.github/workflows/test_admin_interface.yml @@ -56,12 +56,14 @@ jobs: uses: oven-sh/setup-bun@v2 - name: install dependencies - run: bun install --frozen-lockfile + run: | + bun install --filter admin --frozen-lockfile + bun install --global turbo@^2 - name: Admin Interface | Unit tests id: test run: | - bun turbo admin#test admin#lint + turbo admin#test admin#lint echo "success=$([ $? -eq 0 ] && echo true || echo false)" >> $GITHUB_OUTPUT lint: diff --git a/.github/workflows/test_backend.yml b/.github/workflows/test_backend.yml index 5eaaf58d1..f177668f8 100644 --- a/.github/workflows/test_backend.yml +++ b/.github/workflows/test_backend.yml @@ -56,7 +56,7 @@ jobs: uses: oven-sh/setup-bun@v2 - name: install dependencies - run: bun install --frozen-lockfile + run: bun install --filter backend --frozen-lockfile - name: Wait for MariaDB to be ready run: until nc -z localhost 3306; do echo waiting for db; sleep 1; done; @@ -82,10 +82,12 @@ jobs: uses: oven-sh/setup-bun@v2 - name: install dependencies - run: bun install --frozen-lockfile + run: | + bun install --filter backend --frozen-lockfile + bun install --global turbo@^2 - name: Backend | Typecheck - run: bun turbo backend#typecheck backend#build + run: turbo backend#typecheck backend#build locales: if: needs.files-changed.outputs.backend == 'true' diff --git a/.github/workflows/test_config.yml b/.github/workflows/test_config.yml index 8a681ab4c..5ba0832c6 100644 --- a/.github/workflows/test_config.yml +++ b/.github/workflows/test_config.yml @@ -29,15 +29,12 @@ jobs: - name: Checkout code uses: actions/checkout@v3 - - name: Install turbo - run: yarn global add turbo@^2 - - - name: Prune config with turbos help - run: turbo prune config-schema + - name: install bun + uses: oven-sh/setup-bun@v2 - name: install dependencies - run: cd out && yarn install --frozen-lockfile --production=false + run: bun install --filter config-schema --frozen-lockfile - name: typecheck - run: cd out && turbo typecheck + run: cd config-schema && yarn typecheck diff --git a/.github/workflows/test_database.yml b/.github/workflows/test_database.yml index 4b1c4886c..5a448e434 100644 --- a/.github/workflows/test_database.yml +++ b/.github/workflows/test_database.yml @@ -45,23 +45,22 @@ jobs: - name: Database | docker-compose run: docker compose -f docker-compose.yml -f docker-compose.test.yml up --detach mariadb - - name: Install turbo - run: yarn global add turbo@^2 - - - name: Prune database with turbos help - run: turbo prune database + - name: install bun + uses: oven-sh/setup-bun@v2 - name: install dependencies - run: cd out && yarn install --frozen-lockfile --production=false + run: | + bun install --filter database --frozen-lockfile + bun install --global turbo@^2 - name: Wait for MariaDB to be ready run: docker run --rm --network gradido_internal-net busybox sh -c 'until nc -z mariadb 3306; do echo waiting for db; sleep 1; done;' - name: Database | up - run: cd out && turbo up + run: turbo up - name: Database | reset - run: cd out && turbo reset + run: turbo reset lint: if: needs.files-changed.outputs.database == 'true' @@ -72,14 +71,13 @@ jobs: - name: Checkout code uses: actions/checkout@v3 - - name: Install turbo - run: yarn global add turbo@^2 - - - name: Prune database with turbos help - run: turbo prune database + - name: install bun + uses: oven-sh/setup-bun@v2 - name: install dependencies - run: cd out && yarn install --frozen-lockfile --production=false + run: | + bun install --filter database --frozen-lockfile + bun install --global turbo@^2 - - name: Database - run: cd out && turbo build typecheck \ No newline at end of file + - name: Database | build & typecheck + run: turbo database#build database#typecheck \ No newline at end of file diff --git a/.github/workflows/test_dht_node.yml b/.github/workflows/test_dht_node.yml index 95d0d5af4..8968609eb 100644 --- a/.github/workflows/test_dht_node.yml +++ b/.github/workflows/test_dht_node.yml @@ -46,23 +46,22 @@ jobs: node-version: '18.20.7' - name: Checkout code - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: docker-compose mariadb run: docker compose -f docker-compose.yml -f docker-compose.test.yml up --detach --no-deps mariadb - - name: Install turbo - run: yarn global add turbo@^2 - - - name: Prune dht-node with turbos help - run: turbo prune dht-node + - name: install bun + uses: oven-sh/setup-bun@v2 - name: install dependencies - run: cd out && yarn install --frozen-lockfile --production=false + run: | + bun install --filter dht-node --frozen-lockfile + bun install --global turbo@^2 - name: Wait for MariaDB to be ready run: until nc -z localhost 3306; do echo waiting for db; sleep 1; done; - name: run unit test & build & typecheck - run: cd out && turbo dht-node#test dht-node#build dht-node#typecheck + run: turbo dht-node#test dht-node#build dht-node#typecheck diff --git a/.github/workflows/test_federation.yml b/.github/workflows/test_federation.yml index 25f8eaab5..d139b9d27 100644 --- a/.github/workflows/test_federation.yml +++ b/.github/workflows/test_federation.yml @@ -51,18 +51,17 @@ jobs: - name: docker-compose mariadb run: docker compose -f docker-compose.yml -f docker-compose.test.yml up --detach --no-deps mariadb - - name: Install turbo - run: yarn global add turbo@^2 - - - name: Prune federation with turbos help - run: turbo prune federation + - name: install bun + uses: oven-sh/setup-bun@v2 - name: install dependencies - run: cd out && yarn install --frozen-lockfile --production=false + run: | + bun install --filter federation --frozen-lockfile + bun install --global turbo@^2 - name: Wait for MariaDB to be ready run: until nc -z localhost 3306; do echo waiting for db; sleep 1; done; - name: Federation | Unit tests id: test - run: cd out && turbo federation#test federation#build federation#typecheck \ No newline at end of file + run: turbo federation#test federation#build federation#typecheck \ No newline at end of file diff --git a/.github/workflows/test_frontend.yml b/.github/workflows/test_frontend.yml index 4853ec0d7..2f8931c5d 100644 --- a/.github/workflows/test_frontend.yml +++ b/.github/workflows/test_frontend.yml @@ -54,10 +54,10 @@ jobs: uses: oven-sh/setup-bun@v2 - name: install dependencies - run: bun install --frozen-lockfile + run: bun install --filter frontend --frozen-lockfile - name: Frontend | Unit tests - run: bun turbo frontend#test + run: cd frontend && yarn test lint: if: needs.files-changed.outputs.config == 'true' || needs.files-changed.outputs.frontend == 'true' @@ -79,12 +79,14 @@ jobs: uses: oven-sh/setup-bun@v2 - name: install dependencies - run: bun install --frozen-lockfile + run: | + bun install --filter frontend --frozen-lockfile + bun install --global turbo@^2 - name: Frontend | Lint id: lint run: | - bun turbo frontend#lint + turbo frontend#lint echo "success=$([ $? -eq 0 ] && echo true || echo false)" >> $GITHUB_OUTPUT stylelint: diff --git a/Dockerfile b/Dockerfile index 5d714b472..dda955621 100644 --- a/Dockerfile +++ b/Dockerfile @@ -147,7 +147,7 @@ COPY --chown=app:app --from=build /app/backend ./backend COPY --chown=app:app --from=build /app/frontend ./frontend COPY --chown=app:app --from=build /app/admin ./admin COPY --chown=app:app --from=build /app/database ./database -COPY --chown=app:app --from=build /app/config ./config +COPY --chown=app:app --from=build /app/config-schema ./config-schema COPY --chown=app:app --from=build /app/federation ./federation COPY --chown=app:app --from=build /app/dht-node ./dht-node @@ -158,4 +158,39 @@ EXPOSE ${FRONTEND_MODULE_PORT} EXPOSE ${ADMIN_MODULE_PORT} # Command to start -CMD ["turbo", "start", "--env-mode=loose"] \ No newline at end of file +CMD ["turbo", "start", "--env-mode=loose"] + +################################################################################## +# FINAL PRODUCTION IMAGE ######################################################### +################################################################################## +FROM node:18.20.7-alpine3.21 as production-slim + +ENV TURBO_CACHE_DIR=/tmp/turbo +ENV DOCKER_WORKDIR="/app" +ENV NODE_ENV="production" +ENV DB_HOST=mariadb +WORKDIR ${DOCKER_WORKDIR} + +# Ports exposen +EXPOSE ${BACKEND_PORT} +EXPOSE ${FEDERATION_PORT} +EXPOSE ${FRONTEND_MODULE_PORT} +EXPOSE ${ADMIN_MODULE_PORT} + +# Copy only the build artifacts from the previous build stage +COPY --chown=app:app --from=build /app/backend/build ./backend/build +COPY --chown=app:app --from=build /app/backend/locales ./backend/locales +COPY --chown=app:app --from=build /app/backend/log4js-config.json ./backend/log4js-config.json + +COPY --chown=app:app --from=build /app/dht-node/build ./dht-node/build +COPY --chown=app:app --from=build /app/dht-node/log4js-config.json ./dht-node/log4js-config.json + +COPY --chown=app:app --from=build /app/federation/build ./federation/build +COPY --chown=app:app --from=build /app/federation/log4js-config.json ./federation/log4js-config.json + +COPY --chown=app:app --from=build /app/frontend/build ./frontend +COPY --chown=app:app --from=build /app/admin/build ./admin + +RUN yarn global add udx-native@1.5.3 sodium-native@4.0.0 + +CMD ["turbo", "start", "--env-mode=loose"] diff --git a/admin/Dockerfile b/admin/Dockerfile index 8f0a9b8ea..0fa88c333 100644 --- a/admin/Dockerfile +++ b/admin/Dockerfile @@ -17,7 +17,8 @@ ENV BUILD_COMMIT=${BUILD_COMMIT} ARG BUILD_COMMIT_SHORT ENV BUILD_COMMIT_SHORT=${BUILD_COMMIT_SHORT} ## SET NODE_ENV -ARG NODE_ENV="production" +ARG NODE_ENV=production +ENV NODE_ENV=${NODE_ENV} ## App relevant Envs ENV PORT="8080" ## Timezone @@ -40,9 +41,6 @@ LABEL maintainer="support@ogradido.net" ## install: git #RUN apk --no-cache add git # RUN bun add --global yarn@1.22.20 -RUN yarn global add bun -# Add bun's global bin directory to PATH -ENV PATH="/root/.bun/bin:${PATH}" # Settings ## Expose Container Port @@ -52,57 +50,49 @@ EXPOSE ${PORT} RUN mkdir -p ${DOCKER_WORKDIR} WORKDIR ${DOCKER_WORKDIR} +################################################################################## +# BUN ############################################################################ +################################################################################## +FROM base as bun-base + +RUN apk update && apk add --no-cache curl tar bash +RUN curl -fsSL https://bun.sh/install | bash +# Add bun's global bin directory to PATH +ENV PATH="/root/.bun/bin:${PATH}" + ################################################################################## # Development #################################################################### ################################################################################## -FROM base AS development +FROM bun-base AS development # used for getting git commit hash direct from .git RUN apk update && apk add --no-cache git # Run command -CMD /bin/sh -c "bun install --frozen-lockfile && bun turbo admin#dev --env-mode=loose" +CMD /bin/sh -c "bun install --filter admin --no-cache --frozen-lockfile \ + && bun install --global --no-cache --no-save turbo@^2 \ + && turbo admin#dev --env-mode=loose" + ################################################################################## -# Base with turbo ################################################################ +# Build ########################################################################## ################################################################################## -FROM base as turbo-base - -RUN apk update && apk add --no-cache libc6-compat \ - && bun add --global turbo@^2 \ - && rm -rf /tmp/* ~/.cache node_modules/.cache - -################################################################################## -# BUILDER (create partly monorepo only with data needed by admin) ################ -################################################################################## -FROM turbo-base as builder +FROM bun-base as build COPY --chown=app:app . . -RUN turbo prune admin --docker +RUN bun install --filter admin --no-cache --frozen-lockfile \ +&& bun install --global turbo@^2 -################################################################################## -# INSTALLER (create production image) ############################################ -################################################################################## -FROM turbo-base AS installer - -# First install the dependencies (as they change less often) -COPY --chown=app:app --from=builder /app/out/json/ . -RUN yarn install --frozen-lockfile --production=false \ - && rm -rf /tmp/* ~/.cache node_modules/.cache \ - && yarn cache clean - -# Build the project -COPY --chown=app:app --from=builder /app/out/full/ . # TODO: get the actually git commit hash into docker -ENV BUILD_COMMIT='deadbeefdeadbeefdeadbeefdeadbeefdeadbeef' -ENV BUILD_COMMIT_SHORT='deadbeef' -ENV BUILD_VERSION='broken' -RUN turbo build --env-mode=loose +ENV BUILD_COMMIT=deadbeefdeadbeefdeadbeefdeadbeefdeadbeef +ENV BUILD_COMMIT_SHORT=deadbeef +ENV BUILD_VERSION=broken +RUN turbo admin#build --env-mode=loose ################################################################################## # TEST ########################################################################### ################################################################################## -FROM installer as test +FROM build as test # Run command CMD /bin/sh -c "turbo admin#test --env-mode=loose" @@ -112,11 +102,9 @@ CMD /bin/sh -c "turbo admin#test --env-mode=loose" ################################################################################## FROM lipanski/docker-static-website:latest as production -EXPOSE 8080 - # tiny static webserver # https://lipanski.com/posts/smallest-docker-image-static-website # copy builded frontend files -COPY --from=installer /app/admin/build/ ./admin/ +COPY --from=build /app/admin/build/ ./admin/ diff --git a/backend/Dockerfile b/backend/Dockerfile index ff2ce19b4..6d126fa25 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -13,7 +13,7 @@ ENV BUILD_VERSION="0.0.0.0" ## We cannot do `$(git rev-parse --short HEAD)` here so we default to 0000000 ENV BUILD_COMMIT="0000000" ## SET NODE_ENV -ENV NODE_ENV="production" +ENV NODE_ENV=production ## App relevant Envs ENV PORT="4000" ## Timezone @@ -35,9 +35,7 @@ LABEL maintainer="support@gradido.net" # Install Additional Software ## install: git #RUN apk --no-cache add git -RUN yarn global add bun -# Add bun's global bin directory to PATH -ENV PATH="/root/.bun/bin:${PATH}" + # Settings ## Expose Container Port @@ -47,77 +45,62 @@ EXPOSE ${PORT} RUN mkdir -p ${DOCKER_WORKDIR} WORKDIR ${DOCKER_WORKDIR} +################################################################################## +# BUN ############################################################################ +################################################################################## +FROM base as bun-base + +RUN apk update && apk add --no-cache curl tar bash +RUN curl -fsSL https://bun.sh/install | bash +# Add bun's global bin directory to PATH +ENV PATH="/root/.bun/bin:${PATH}" + ################################################################################## # Development #################################################################### ################################################################################## -FROM base AS development - +FROM bun-base AS development # Run command -CMD /bin/sh -c "bun install --frozen-lockfile && bun turbo backend#dev --env-mode=loose" +CMD /bin/sh -c "bun install --filter backend --no-cache --frozen-lockfile \ + && bun install --global --no-cache --no-save turbo@^2 \ + && turbo backend#dev --env-mode=loose" ################################################################################## -# Base with turbo ################################################################ +# Build ########################################################################## ################################################################################## -FROM base as turbo-base - -RUN apk update && apk add --no-cache libc6-compat \ - && bun add --global turbo@^2 \ - && rm -rf /tmp/* ~/.cache node_modules/.cache - -################################################################################## -# BUILDER (create partly monorepo only with data needed by backend) ############## -################################################################################## -FROM turbo-base as builder +FROM bun-base as build COPY --chown=app:app . . -RUN turbo prune backend --docker - - -################################################################################## -# INSTALLER (create production image) ############################################ -################################################################################## -FROM turbo-base AS installer - -# First install the dependencies (as they change less often) -COPY --chown=app:app --from=builder /app/out/json/ . -RUN yarn install --frozen-lockfile --production=false \ - && rm -rf /tmp/* ~/.cache node_modules/.cache \ - && yarn cache clean - -# Build the project -COPY --chown=app:app --from=builder /app/out/full/ . -RUN turbo build +RUN bun install --filter backend --no-cache --frozen-lockfile \ + && bun install --global --no-cache --no-save turbo@^2 \ + && turbo backend#build backend#typecheck --env-mode=loose ################################################################################## # TEST ########################################################################### ################################################################################## -FROM installer as test +FROM build as test ENV DB_HOST=mariadb # Run command CMD /bin/sh -c "turbo backend#test --env-mode=loose" - ################################################################################## # PRODUCTION (Does contain only "binary"- and static-files to reduce image size) # ################################################################################## FROM base as production # Copy "binary"-files from build image -COPY --chown=app:app --from=installer ${DOCKER_WORKDIR}/backend/build/index.js ./index.js +COPY --chown=app:app --from=build ${DOCKER_WORKDIR}/backend/build/index.js ./index.js RUN yarn add sodium-native@4.0.0 email-templates@10.0.1 \ && rm -rf /tmp/* ~/.cache node_modules/.cache \ && yarn cache clean # Copy log4js-config.json to provide log configuration -COPY --chown=app:app --from=installer ${DOCKER_WORKDIR}/backend/log4js-config.json ./log4js-config.json +COPY --chown=app:app --from=build ${DOCKER_WORKDIR}/backend/log4js-config.json ./log4js-config.json # Copy locales -COPY --chown=app:app --from=installer ${DOCKER_WORKDIR}/backend/locales ./locales - -ENV NODE_ENV=production +COPY --chown=app:app --from=build ${DOCKER_WORKDIR}/backend/locales ./locales # Run command -CMD ["node", "index.js"] \ No newline at end of file +CMD ["node", "index.js"] diff --git a/backend/esbuild.config.ts b/backend/esbuild.config.ts index 73d0a0c12..9b545dc4d 100644 --- a/backend/esbuild.config.ts +++ b/backend/esbuild.config.ts @@ -2,7 +2,7 @@ import { esbuildDecorators } from '@anatine/esbuild-decorators' import { build } from 'esbuild' build({ - entryPoints: ['src/index.ts'], + entryPoints: ['src/index.ts', 'src/password/EncryptionWorker.ts'], outdir: 'build', platform: 'node', target: 'node18.20.7', @@ -11,5 +11,6 @@ build({ // legalComments: 'inline', external: ['sodium-native', 'email-templates'], plugins: [esbuildDecorators()], - minify: true, + minify: false, + sourcemap: true, }) diff --git a/backend/src/config/index.ts b/backend/src/config/index.ts index ab07e7fa2..10688a236 100644 --- a/backend/src/config/index.ts +++ b/backend/src/config/index.ts @@ -76,12 +76,12 @@ const community = { const loginServer = { LOGIN_APP_SECRET: process.env.LOGIN_APP_SECRET ?? '21ffbbc616fe', LOGIN_SERVER_KEY: process.env.LOGIN_SERVER_KEY ?? 'a51ef8ac7ef1abf162fb7a65261acd7a', - USE_CRYPTO_WORKER: process.env.USE_CRYPTO_WORKER ?? false, + USE_CRYPTO_WORKER: process.env.USE_CRYPTO_WORKER === 'true', } const email = { - EMAIL: process.env.EMAIL === 'true' || false, - EMAIL_TEST_MODUS: process.env.EMAIL_TEST_MODUS === 'true' || false, + EMAIL: process.env.EMAIL === 'true', + EMAIL_TEST_MODUS: process.env.EMAIL_TEST_MODUS === 'true', EMAIL_TEST_RECEIVER: process.env.EMAIL_TEST_RECEIVER ?? 'stage1@gradido.net', EMAIL_USERNAME: process.env.EMAIL_USERNAME ?? '', EMAIL_SENDER: process.env.EMAIL_SENDER ?? 'info@gradido.net', diff --git a/backend/src/password/EncryptionWorker.ts b/backend/src/password/EncryptionWorker.ts index 34f33226f..391883883 100644 --- a/backend/src/password/EncryptionWorker.ts +++ b/backend/src/password/EncryptionWorker.ts @@ -1,7 +1,5 @@ import { worker } from 'workerpool' -import { CONFIG } from '@/config' - import { crypto_box_SEEDBYTES, crypto_hash_sha512_BYTES, @@ -15,7 +13,7 @@ import { crypto_shorthash_BYTES, } from 'sodium-native' -export const SecretKeyCryptographyCreateKey = ( +export const SecretKeyCryptographyCreateKeyFunc = ( salt: string, password: string, configLoginAppSecret: Buffer, @@ -46,8 +44,8 @@ export const SecretKeyCryptographyCreateKey = ( return encryptionKeyHash.readBigUInt64LE() } -if (CONFIG.USE_CRYPTO_WORKER === true && typeof process.send === 'function') { +if (process.env.USE_CRYPTO_WORKER === 'true' && typeof process.send === 'function') { worker({ - SecretKeyCryptographyCreateKey, + SecretKeyCryptographyCreateKeyFunc, }) } diff --git a/backend/src/password/EncryptorUtils.ts b/backend/src/password/EncryptorUtils.ts index 45f15e6dd..53e217078 100644 --- a/backend/src/password/EncryptorUtils.ts +++ b/backend/src/password/EncryptorUtils.ts @@ -1,5 +1,5 @@ -import { cpus } from 'os' -import path from 'path' +import { cpus } from 'node:os' +import path from 'node:path' import { User } from 'database' import { Pool, pool } from 'workerpool' @@ -12,7 +12,7 @@ import { backendLogger as logger } from '@/server/logger' import { crypto_shorthash_KEYBYTES } from 'sodium-native' -import { SecretKeyCryptographyCreateKey as SecretKeyCryptographyCreateKeySync } from './EncryptionWorker' +import { SecretKeyCryptographyCreateKeyFunc } from './EncryptionWorker' const configLoginAppSecret = Buffer.from(CONFIG.LOGIN_APP_SECRET, 'hex') const configLoginServerKey = Buffer.from(CONFIG.LOGIN_SERVER_KEY, 'hex') @@ -21,12 +21,8 @@ let encryptionWorkerPool: Pool | undefined if (CONFIG.USE_CRYPTO_WORKER === true) { encryptionWorkerPool = pool( - path.join(__dirname, '..', '..', 'build', 'src', 'password', '/EncryptionWorker.js'), - { - // TODO: put maxQueueSize into config - maxQueueSize: 30 * cpus().length, - }, - ) + path.join(__dirname, '..', 'build', 'password', 'EncryptionWorker.js'), + { maxQueueSize: 30 * cpus().length }) } // We will reuse this for changePassword @@ -52,22 +48,20 @@ export const SecretKeyCryptographyCreateKey = async ( crypto_shorthash_KEYBYTES, ) } - let result: Promise + let result: bigint if (encryptionWorkerPool) { - result = (await encryptionWorkerPool.exec('SecretKeyCryptographyCreateKey', [ + result = await encryptionWorkerPool.exec('SecretKeyCryptographyCreateKeyFunc', [ salt, password, configLoginAppSecret, configLoginServerKey, - ])) as Promise + ]) } else { - result = Promise.resolve( - SecretKeyCryptographyCreateKeySync( - salt, - password, - configLoginAppSecret, - configLoginServerKey, - ), + result = SecretKeyCryptographyCreateKeyFunc( + salt, + password, + configLoginAppSecret, + configLoginServerKey, ) } return result @@ -75,6 +69,7 @@ export const SecretKeyCryptographyCreateKey = async ( // pool is throwing this error // throw new Error('Max queue size of ' + this.maxQueueSize + ' reached'); // will be shown in frontend to user + console.log(JSON.stringify(e, null, 2)) throw new LogError('Server is full, please try again in 10 minutes.', e) } } diff --git a/bun.lock b/bun.lock index 632c5fe78..9e1319a73 100644 --- a/bun.lock +++ b/bun.lock @@ -247,13 +247,16 @@ "log4js": "^6.7.1", "reflect-metadata": "^0.1.13", "sodium-native": "^3.3.0", - "tsx": "^4.19.4", + "tsconfig-paths": "^4.1.1", "type-graphql": "^1.1.1", "typeorm": "^0.3.16", "uuid": "8.3.2", }, "devDependencies": { "@biomejs/biome": "1.9.4", + "@swc/cli": "^0.7.3", + "@swc/core": "^1.11.24", + "@swc/helpers": "^0.5.17", "@types/express": "4.17.21", "@types/jest": "27.0.2", "@types/lodash.clonedeep": "^4.5.6", diff --git a/database/Dockerfile b/database/Dockerfile index 311bd3443..4d226f068 100644 --- a/database/Dockerfile +++ b/database/Dockerfile @@ -14,6 +14,8 @@ ENV BUILD_VERSION="0.0.0.0" ENV BUILD_COMMIT="0000000" ## SET NODE_ENV ENV NODE_ENV="production" +## Timezone +ENV TZ=UTC # Labels LABEL org.label-schema.build-date="${BUILD_DATE}" diff --git a/dht-node/Dockerfile b/dht-node/Dockerfile index a1096b9c7..a219600b3 100644 --- a/dht-node/Dockerfile +++ b/dht-node/Dockerfile @@ -1,7 +1,8 @@ ################################################################################## # BASE ########################################################################### ################################################################################## -FROM node:18.20.7-alpine3.21 as base +FROM node:18.20.7-bookworm-slim as base +#FROM node:18.20.7-alpine3.21 as base #FROM ubuntu:latest as base # ENVs (available in production aswell, can be overwritten by commandline or env file) @@ -17,6 +18,8 @@ ENV BUILD_COMMIT="0000000" ENV NODE_ENV="production" ## App relevant Envs #ENV PORT="5000" +## Timezone +ENV TZ=UTC # Labels LABEL org.label-schema.build-date="${BUILD_DATE}" @@ -46,43 +49,42 @@ LABEL maintainer="support@gradido.net" RUN mkdir -p ${DOCKER_WORKDIR} WORKDIR ${DOCKER_WORKDIR} -################################################################################## -# Base with turbo ################################################################ -################################################################################## -FROM base as turbo-base -RUN apk update && apk add --no-cache libc6-compat \ - && yarn global add turbo@^2 \ - && rm -rf /tmp/* ~/.cache node_modules/.cache \ - && yarn cache clean +################################################################################## +# BUN ############################################################################ +################################################################################## +FROM base as bun-base + +RUN apt update && apt install -y --no-install-recommends ca-certificates curl bash unzip +#RUN apk update && apk add --no-cache curl tar bash +RUN curl -fsSL https://bun.sh/install | bash +# Add bun's global bin directory to PATH +ENV PATH="/root/.bun/bin:${PATH}" + +################################################################################## +# Development #################################################################### +################################################################################## +FROM bun-base AS development + +# Run command +CMD /bin/sh -c "bun install --filter dht-node --no-cache --frozen-lockfile \ + && bun install --global --no-cache --no-save turbo@^2 \ + && turbo dht-node#dev --env-mode=loose" ################################################################################## # BUILDER (create partly monorepo only with data needed by dht-node) ############# ################################################################################## -FROM turbo-base as builder +FROM bun-base as build COPY --chown=app:app . . -RUN turbo prune dht-node --docker +RUN bun install --filter dht-node --no-cache --frozen-lockfile \ + && bun install --global --no-cache --no-save turbo@^2 \ + && turbo dht-node#build dht-node#typecheck --env-mode=loose -################################################################################## -# INSTALLER (create production image) ############################################ -################################################################################## -FROM turbo-base AS installer - -# First install the dependencies (as they change less often) -COPY --chown=app:app --from=builder /app/out/json/ . -RUN yarn install --frozen-lockfile --production=false \ - && rm -rf /tmp/* ~/.cache node_modules/.cache \ - && yarn cache clean - -# Build the project -COPY --chown=app:app --from=builder /app/out/full/ . -RUN turbo build typecheck - ################################################################################## # TEST ########################################################################### ################################################################################## -FROM installer as test +FROM build as test ENV DB_HOST=mariadb # Run command @@ -94,16 +96,19 @@ CMD /bin/sh -c "turbo dht-node#test --env-mode=loose" FROM base as production # Copy "binary"-files from build image -COPY --chown=app:app --from=installer ${DOCKER_WORKDIR}/dht-node/build/index.js ./index.js +COPY --chown=app:app --from=build ${DOCKER_WORKDIR}/dht-node/build/index.js ./index.js +COPY --chown=app:app --from=build ${DOCKER_WORKDIR}/scripts/clean-prebuilds.sh ./clean-prebuilds.sh +#COPY --chown=app:app --from=build ${DOCKER_WORKDIR}/dht-node/package.json ./package.json # We also install the native node_modules which cannot be bundled # TODO: find a elegant way to use the right versions from yarn.lock -RUN yarn add udx-native@1.5.3 sodium-native@4.0.0 \ +RUN yarn add @hyperswarm/dht@^6.5.1 \ && rm -rf /tmp/* ~/.cache node_modules/.cache \ - && yarn cache clean + && yarn cache clean \ + && ./clean-prebuilds.sh # Copy log4js-config.json to provide log configuration -COPY --chown=app:app --from=installer ${DOCKER_WORKDIR}/dht-node/log4js-config.json ./log4js-config.json - +COPY --chown=app:app --from=build ${DOCKER_WORKDIR}/dht-node/log4js-config.json ./log4js-config.json +ENV DB_HOST=mariadb # Run command -CMD ["TZ=UTC", "node", "index.js"] \ No newline at end of file +CMD ["node", "index.js"] \ No newline at end of file diff --git a/dht-node/esbuild.config.ts b/dht-node/esbuild.config.ts index ae8fb1ade..8e0c6583a 100644 --- a/dht-node/esbuild.config.ts +++ b/dht-node/esbuild.config.ts @@ -10,4 +10,5 @@ build({ // legalComments: 'inline', external: ['udx-native', 'sodium-native'], minify: true, + sourcemap: false, }) diff --git a/dht-node/package.json b/dht-node/package.json index d327efe66..7e604ee73 100644 --- a/dht-node/package.json +++ b/dht-node/package.json @@ -22,10 +22,8 @@ "cross-env": "^7.0.3", "database": "*", "dotenv": "10.0.0", - "esbuild": "^0.25.3", "joi": "^17.13.3", "log4js": "^6.9.1", - "tsx": "^4.19.4", "typeorm": "^0.3.22", "uuid": "^8.3.2" }, @@ -36,9 +34,11 @@ "@types/joi": "^17.2.3", "@types/node": "^17.0.45", "@types/uuid": "^8.3.4", + "esbuild": "^0.25.3", "jest": "27.5.1", "prettier": "^2.8.8", "ts-jest": "27.1.4", + "tsx": "^4.19.4", "typescript": "^4.9.5" }, "engines": { diff --git a/docker-compose.override.yml b/docker-compose.override.yml index e3a3dafe8..4cb2ec4b7 100644 --- a/docker-compose.override.yml +++ b/docker-compose.override.yml @@ -14,7 +14,7 @@ services: volumes: # This makes sure the docker container has its own node modules. # Therefore it is possible to have a different node version on the host machine - - node_modules:/app/node_modules + - node_modules_frontend:/app/node_modules - turbo_cache:/tmp/turbo # bind the local folder to the docker to allow live reload - .:/app @@ -33,7 +33,7 @@ services: volumes: # This makes sure the docker container has its own node modules. # Therefore it is possible to have a different node version on the host machine - - node_modules:/app/node_modules + - node_modules_admin:/app/node_modules - turbo_cache:/tmp/turbo # bind the local folder to the docker to allow live reload - .:/app @@ -54,7 +54,7 @@ services: volumes: # This makes sure the docker container has its own node modules. # Therefore it is possible to have a different node version on the host machine - - node_modules:/app/node_modules + - node_modules_backend:/app/node_modules - turbo_cache:/tmp/turbo # bind the local folder to the docker to allow live reload - .:/app @@ -71,11 +71,11 @@ services: - external-net - internal-net environment: - - NODE_ENV="development" + - NODE_ENV=development volumes: # This makes sure the docker container has its own node modules. # Therefore it is possible to have a different node version on the host machine - - node_modules:/app/node_modules + - node_modules_dht:/app/node_modules - turbo_cache:/tmp/turbo # bind the local folder to the docker to allow live reload - .:/app @@ -113,11 +113,11 @@ services: - external-net - internal-net environment: - - NODE_ENV="development" + - NODE_ENV=development volumes: # This makes sure the docker container has its own node modules. # Therefore it is possible to have a different node version on the host machine - - node_modules:/app/node_modules + - node_modules_federation:/app/node_modules - turbo_cache:/tmp/turbo # bind the local folder to the docker to allow live reload - .:/app @@ -135,11 +135,11 @@ services: build: target: up environment: - - NODE_ENV="development" + - NODE_ENV=development volumes: # This makes sure the docker container has its own node modules. # Therefore it is possible to have a different node version on the host machine - - node_modules:/app/node_modules + - node_modules_database:/app/node_modules - turbo_cache:/tmp/turbo # bind the local folder to the docker to allow live reload - ./database:/app @@ -212,7 +212,14 @@ services: volumes: node_modules: + node_modules_dht: + node_modules_admin: + node_modules_frontend: + node_modules_backend: + node_modules_federation: + node_modules_database: dlt_connector_modules: dlt-database_node_modules: dlt-database_build: - turbo_cache: \ No newline at end of file + turbo_cache: + turbo_cache_dht: \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index bcee473ef..6e3b80786 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -23,7 +23,7 @@ services: - external-net - internal-net ports: - - 3000:${FRONTEND_MODULE_PORT:-3000} + - ${FRONTEND_MODULE_PORT:-3000}:3000 environment: # Envs used in Dockerfile # - DOCKER_WORKDIR="/app" @@ -54,7 +54,7 @@ services: - external-net - internal-net ports: - - 3000:${ADMIN_MODULE_PORT:-8080} + - ${ADMIN_MODULE_PORT:-8080}:3000 environment: - BUILD_COMMIT=${BUILD_COMMIT} - BUILD_COMMIT_SHORT=${BUILD_COMMIT_SHORT} @@ -100,7 +100,7 @@ services: networks: - internal-net ports: - - 4000:${BACKEND_PORT:-4000} + - ${BACKEND_PORT:-4000}:4000 depends_on: - mariadb environment: @@ -145,7 +145,7 @@ services: - BUILD_DATE - BUILD_VERSION - BUILD_COMMIT - - NODE_ENV="production" + - NODE_ENV=production - DB_HOST=mariadb # Application only envs #env_file: @@ -203,7 +203,7 @@ services: - internal-net - external-net ports: - - 5010:${FEDERATION_PORT:-5010} + - ${FEDERATION_PORT:-5010}:5010 depends_on: - mariadb environment: @@ -212,7 +212,7 @@ services: - BUILD_DATE - BUILD_VERSION - BUILD_COMMIT - - NODE_ENV="production" + - NODE_ENV=production - DB_HOST=mariadb # Application only envs #env_file: @@ -231,6 +231,8 @@ services: context: . dockerfile: ./database/Dockerfile target: up + profiles: + - migration depends_on: - mariadb networks: @@ -242,7 +244,7 @@ services: - BUILD_DATE - BUILD_VERSION - BUILD_COMMIT - - NODE_ENV="production" + - NODE_ENV=production - DB_HOST=mariadb # Application only envs #env_file: diff --git a/federation/Dockerfile b/federation/Dockerfile index 35fc6af98..fcdad2136 100644 --- a/federation/Dockerfile +++ b/federation/Dockerfile @@ -13,10 +13,12 @@ ENV BUILD_VERSION="0.0.0.0" ## We cannot do `$(git rev-parse --short HEAD)` here so we default to 0000000 ENV BUILD_COMMIT="0000000" ## SET NODE_ENV -ENV NODE_ENV="production" +ENV NODE_ENV=production ## App relevant Envs ENV PORT="5010" # ENV PORT="${env.FEDERATION_PORT}" +## Timezone +ENV TZ=UTC # Labels LABEL org.label-schema.build-date="${BUILD_DATE}" @@ -43,44 +45,42 @@ EXPOSE ${PORT} RUN mkdir -p ${DOCKER_WORKDIR} WORKDIR ${DOCKER_WORKDIR} -################################################################################## -# Base with turbo ################################################################ -################################################################################## -FROM base as turbo-base - -RUN apk update && apk add --no-cache libc6-compat \ - && yarn global add turbo@^2 \ - && rm -rf /tmp/* ~/.cache node_modules/.cache \ - && yarn cache clean ################################################################################## -# BUILDER (create partly monorepo only with data needed by federation) ########### +# BUN ############################################################################ ################################################################################## -FROM turbo-base as builder +FROM base as bun-base + +RUN apk update && apk add --no-cache curl tar bash +RUN curl -fsSL https://bun.sh/install | bash +# Add bun's global bin directory to PATH +ENV PATH="/root/.bun/bin:${PATH}" + +################################################################################## +# Development #################################################################### +################################################################################## +FROM bun-base AS development + +# Run command +CMD /bin/sh -c "bun install --filter federation --no-cache --frozen-lockfile \ + && bun install --global --no-cache --no-save turbo@^2 \ + && turbo federation#dev --env-mode=loose" + + +################################################################################## +# Build ########################################################################## +################################################################################## +FROM bun-base as build COPY --chown=app:app . . -RUN turbo prune federation --docker - - -################################################################################## -# INSTALLER (create production image) ############################################ -################################################################################## -FROM turbo-base AS installer - -# First install the dependencies (as they change less often) -COPY --chown=app:app --from=builder /app/out/json/ . -RUN yarn install --frozen-lockfile --production=false \ - && rm -rf /tmp/* ~/.cache node_modules/.cache \ - && yarn cache clean - -# Build the project -COPY --chown=app:app --from=builder /app/out/full/ . -RUN turbo build typecheck +RUN bun install --filter federation --no-cache --frozen-lockfile \ + && bun install --global --no-cache --no-save turbo@^2 \ + && turbo federation#build federation#typecheck --env-mode=loose ################################################################################## # TEST ########################################################################### ################################################################################## -FROM installer as test +FROM build as test ENV DB_HOST=mariadb @@ -93,7 +93,7 @@ CMD /bin/sh -c "turbo federation#test --env-mode=loose" FROM base as production # Copy "binary"-files from build image -COPY --chown=app:app --from=installer ${DOCKER_WORKDIR}/federation/build/index.js ./index.js +COPY --chown=app:app --from=build ${DOCKER_WORKDIR}/federation/build/index.js ./index.js # We also install the native node_modules which cannot be bundled # TODO: find a elegant way to use the right versions from yarn.lock @@ -102,7 +102,7 @@ RUN yarn add sodium-native@4.0.0 \ && yarn cache clean # Copy log4js-config.json to provide log configuration -COPY --chown=app:app --from=installer ${DOCKER_WORKDIR}/federation/log4js-config.json ./log4js-config.json +COPY --chown=app:app --from=build ${DOCKER_WORKDIR}/federation/log4js-config.json ./log4js-config.json # Run command -CMD ["TZ=UTC", "node", "index.js"] \ No newline at end of file +CMD ["node", "index.js"] \ No newline at end of file diff --git a/federation/package.json b/federation/package.json index b57e48263..02e832a83 100644 --- a/federation/package.json +++ b/federation/package.json @@ -9,10 +9,10 @@ "private": false, "scripts": { - "build": "tsx ./esbuild.config.ts", + "build": "ts-node ./esbuild.config.ts", "start": "cross-env TZ=UTC NODE_ENV=production node build/index.js", "start:bun": "cross-env TZ=UTC NODE_ENV=production bun build/index.js", - "dev": "cross-env TZ=UTC tsx watch src/index.ts", + "dev": "cross-env TZ=UTC nodemon -w src --ext ts,json,css -r tsconfig-paths/register src/index.ts", "dev:bun": "cross-env TZ=UTC bun --hot src/index.ts", "typecheck": "tsc --noEmit", "test": "cross-env TZ=UTC NODE_ENV=development DB_DATABASE=gradido_test_federation jest --runInBand --forceExit --detectOpenHandles", @@ -41,13 +41,16 @@ "log4js": "^6.7.1", "reflect-metadata": "^0.1.13", "sodium-native": "^3.3.0", - "tsx": "^4.19.4", + "tsconfig-paths": "^4.1.1", "type-graphql": "^1.1.1", "typeorm": "^0.3.16", "uuid": "8.3.2" }, "devDependencies": { "@biomejs/biome": "1.9.4", + "@swc/cli": "^0.7.3", + "@swc/core": "^1.11.24", + "@swc/helpers": "^0.5.17", "@types/express": "4.17.21", "@types/jest": "27.0.2", "@types/lodash.clonedeep": "^4.5.6", @@ -57,6 +60,7 @@ "apollo-server-testing": "2.25.2", "graphql-tag": "^2.12.6", "jest": "27.2.4", + "nodemon": "^2.0.7", "prettier": "^3.5.3", "ts-jest": "27.0.5", "typescript": "^4.9.5" diff --git a/federation/tsconfig.json b/federation/tsconfig.json index f72262d8e..2d0e18ed8 100644 --- a/federation/tsconfig.json +++ b/federation/tsconfig.json @@ -84,4 +84,7 @@ "skipLibCheck": true, /* Skip type checking of declaration files. */ "forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */ }, + "ts-node": { + "swc": true + } } diff --git a/frontend/Dockerfile b/frontend/Dockerfile index 9482d8e88..3bf6af01c 100644 --- a/frontend/Dockerfile +++ b/frontend/Dockerfile @@ -16,7 +16,8 @@ ENV BUILD_COMMIT=${BUILD_COMMIT} ARG BUILD_COMMIT_SHORT ENV BUILD_COMMIT_SHORT=${BUILD_COMMIT_SHORT} ## SET NODE_ENV -ENV NODE_ENV="production" +ARG NODE_ENV=production +ENV NODE_ENV=${NODE_ENV} ## App relevant Envs ENV PORT="3000" ## Timezone @@ -38,7 +39,6 @@ LABEL maintainer="support@ogradido.net" # Install Additional Software ## install: node-gyp dependencies #RUN apk --no-cache add g++ make python3 -RUN yarn global add bun # Add bun's global bin directory to PATH ENV PATH="/root/.bun/bin:${PATH}" @@ -50,59 +50,49 @@ EXPOSE ${PORT} RUN mkdir -p ${DOCKER_WORKDIR} WORKDIR ${DOCKER_WORKDIR} +################################################################################## +# BUN ############################################################################ +################################################################################## +FROM base as bun-base + +RUN apk update && apk add --no-cache curl tar bash +RUN curl -fsSL https://bun.sh/install | bash +# Add bun's global bin directory to PATH +ENV PATH="/root/.bun/bin:${PATH}" + ################################################################################## # Development #################################################################### ################################################################################## -FROM base AS development +FROM bun-base AS development # used for getting git commit hash direct from .git RUN apk update && apk add --no-cache git # Run command -CMD /bin/sh -c "bun install --frozen-lockfile && bun turbo frontend#dev --env-mode=loose" - - -################################################################################## -# Base with turbo ################################################################ -################################################################################## -FROM base as turbo-base - -RUN apk update && apk add --no-cache libc6-compat \ - && bun add --global turbo@^2 \ - && rm -rf /tmp/* ~/.cache node_modules/.cache - -################################################################################## -# BUILDER (create partly monorepo only with data needed by frontend) ############# -################################################################################## -FROM turbo-base as builder - -COPY --chown=app:app . . -RUN turbo prune frontend --docker +CMD /bin/sh -c "bun install --filter frontend --no-cache --frozen-lockfile \ + && bun install --global --no-cache --no-save turbo@^2 \ + && turbo frontend#dev --env-mode=loose" ################################################################################## # INSTALLER (create production image) ############################################ ################################################################################## -FROM turbo-base AS installer +FROM bun-base AS build + +COPY --chown=app:app . . +RUN bun install --filter frontend --no-cache --frozen-lockfile \ + && bun install --global turbo@^2 -# First install the dependencies (as they change less often) -COPY --chown=app:app --from=builder /app/out/json/ . -RUN yarn install --frozen-lockfile --production=false \ - && rm -rf /tmp/* ~/.cache node_modules/.cache \ - && yarn cache clean - -# Build the project -COPY --chown=app:app --from=builder /app/out/full/ . # TODO: get the actually git commit hash into docker ENV BUILD_COMMIT='deadbeefdeadbeefdeadbeefdeadbeefdeadbeef' ENV BUILD_COMMIT_SHORT='deadbeef' ENV BUILD_VERSION='broken' -RUN turbo build --env-mode=loose +RUN turbo frontend#build --env-mode=loose ################################################################################## # TEST ########################################################################### ################################################################################## -FROM installer as test +FROM build as test # Run command CMD /bin/sh -c "turbo frontend#test --env-mode=loose" @@ -117,5 +107,5 @@ FROM lipanski/docker-static-website:latest as production # https://lipanski.com/posts/smallest-docker-image-static-website # copy builded frontend files -COPY --from=installer /app/frontend/build/ . +COPY --from=build /app/frontend/build/ . diff --git a/frontend/turbo.json b/frontend/turbo.json index 13d3bc9f8..771b65a25 100644 --- a/frontend/turbo.json +++ b/frontend/turbo.json @@ -12,7 +12,10 @@ "persistent": true }, "build": { - "dependsOn": ["compile-scss"] + "dependsOn": ["compile-scss", "^build"], + "outputs": ["build/**"], + "cache": true } } } + \ No newline at end of file diff --git a/scripts/clean-prebuilds.sh b/scripts/clean-prebuilds.sh new file mode 100755 index 000000000..d1afd92f0 --- /dev/null +++ b/scripts/clean-prebuilds.sh @@ -0,0 +1,36 @@ +#!/bin/sh + +# Determine the current platform +ARCH=$(uname -m) +PLATFORM="" + +case "$ARCH" in + x86_64) + PLATFORM="linux-x64" + ;; + aarch64 | arm64) + PLATFORM="linux-arm64" + ;; + *) + echo "Sorry, your architecture is not on the guest list: $ARCH" + exit 1 + ;; +esac + +echo "Platform detected: $PLATFORM" + +# Find all prebuilds folders +find node_modules -type d -name prebuilds | while read prebuild_dir; do + echo "Processing: $prebuild_dir" + + for subdir in "$prebuild_dir"/*; do + [ -d "$subdir" ] || continue + foldername=$(basename "$subdir") + if [ "$foldername" != "$PLATFORM" ]; then + echo " ➜ Deleting: $subdir (you won't miss it)" + rm -rf "$subdir" + else + echo " ✓ Keeping: $subdir (it's a keeper)" + fi + done +done From 48c897d3f5fd59e80e4656b7918f04683a8de7c0 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Tue, 6 May 2025 10:04:57 +0200 Subject: [PATCH 091/123] tweek dht-node docker --- bun.lock | 23 +++++++++++--------- dht-node/Dockerfile | 43 ++++++++++++++++++++++++++++++++++---- dht-node/README.md | 8 +++++++ dht-node/esbuild.config.ts | 2 +- dht-node/package.json | 22 ++++++++++--------- 5 files changed, 73 insertions(+), 25 deletions(-) diff --git a/bun.lock b/bun.lock index 9e1319a73..cee6b05ce 100644 --- a/bun.lock +++ b/bun.lock @@ -197,29 +197,31 @@ "name": "dht-node", "version": "2.5.1", "dependencies": { - "@hyperswarm/dht": "^6.5.1", - "config-schema": "*", "cross-env": "^7.0.3", - "database": "*", - "dotenv": "10.0.0", - "esbuild": "^0.25.3", - "joi": "^17.13.3", - "log4js": "^6.9.1", - "tsx": "^4.19.4", - "typeorm": "^0.3.22", - "uuid": "^8.3.2", + "dht-rpc": "6.18.1", + "sodium-universal": "4.0.1", }, "devDependencies": { "@biomejs/biome": "1.9.4", + "@hyperswarm/dht": "6.5.1", "@types/dotenv": "^8.2.3", "@types/jest": "27.5.1", "@types/joi": "^17.2.3", "@types/node": "^17.0.45", "@types/uuid": "^8.3.4", + "config-schema": "*", + "database": "*", + "dotenv": "10.0.0", + "esbuild": "^0.25.3", "jest": "27.5.1", + "joi": "^17.13.3", + "log4js": "^6.9.1", "prettier": "^2.8.8", "ts-jest": "27.1.4", + "tsx": "^4.19.4", + "typeorm": "^0.3.22", "typescript": "^4.9.5", + "uuid": "^8.3.2", }, }, "federation": { @@ -266,6 +268,7 @@ "apollo-server-testing": "2.25.2", "graphql-tag": "^2.12.6", "jest": "27.2.4", + "nodemon": "^2.0.7", "prettier": "^3.5.3", "ts-jest": "27.0.5", "typescript": "^4.9.5", diff --git a/dht-node/Dockerfile b/dht-node/Dockerfile index a219600b3..ccdeb631a 100644 --- a/dht-node/Dockerfile +++ b/dht-node/Dockerfile @@ -71,15 +71,20 @@ CMD /bin/sh -c "bun install --filter dht-node --no-cache --frozen-lockfile \ && bun install --global --no-cache --no-save turbo@^2 \ && turbo dht-node#dev --env-mode=loose" +################################################################################## +# Basic Image with bun setup and project and source code ######################### +################################################################################## +FROM bun-base as bun-base-src +COPY --chown=app:app . . + ################################################################################## # BUILDER (create partly monorepo only with data needed by dht-node) ############# ################################################################################## -FROM bun-base as build +FROM bun-base-src as build -COPY --chown=app:app . . RUN bun install --filter dht-node --no-cache --frozen-lockfile \ - && bun install --global --no-cache --no-save turbo@^2 \ - && turbo dht-node#build dht-node#typecheck --env-mode=loose + && bun install --global --no-cache --no-save turbo@^2 +RUN turbo dht-node#build dht-node#typecheck --env-mode=loose ################################################################################## # TEST ########################################################################### @@ -90,11 +95,41 @@ ENV DB_HOST=mariadb # Run command CMD /bin/sh -c "turbo dht-node#test --env-mode=loose" +################################################################################## +# install only node modules needed for running bundle ############################ +################################################################################## +FROM bun-base-src as production-node-modules + +# add node_modules from production_node_modules +RUN bun install --filter dht-node --production --frozen-lockfile --no-cache \ + && rm -rf /tmp/* ~/.cache node_modules/.cache \ + && ./scripts/clean-prebuilds.sh + ################################################################################## # PRODUCTION (Does contain only "binary"- and static-files to reduce image size) # ################################################################################## FROM base as production +# Copy "binary"-files from build image +COPY --chown=app:app --from=build ${DOCKER_WORKDIR}/dht-node/build/index.js ./index.js + +# add node_modules from production_node_modules +COPY --chown=app:app --from=production-node-modules ${DOCKER_WORKDIR}/node_modules ./node_modules + +# Copy log4js-config.json to provide log configuration +COPY --chown=app:app --from=build ${DOCKER_WORKDIR}/dht-node/log4js-config.json ./log4js-config.json +ENV DB_HOST=mariadb +ENV TZ=UTC +# Run command +CMD ["node", "index.js"] + + +################################################################################## +# PRODUCTION (Does contain only "binary"- and static-files to reduce image size) # +# Experimental, install only some node_modules which can't be bundled ############ +################################################################################## +FROM base as production-small + # Copy "binary"-files from build image COPY --chown=app:app --from=build ${DOCKER_WORKDIR}/dht-node/build/index.js ./index.js COPY --chown=app:app --from=build ${DOCKER_WORKDIR}/scripts/clean-prebuilds.sh ./clean-prebuilds.sh diff --git a/dht-node/README.md b/dht-node/README.md index 88a2ca570..3affa9a49 100644 --- a/dht-node/README.md +++ b/dht-node/README.md @@ -7,3 +7,11 @@ Bun crashes when a NAPI module tries to call `uv_interface_addresses`, a libuv function currently unsupported: Bun is working hard to support all NAPI module calls + +## Production Build +Package.json dependencies contain only node_modules which cannot be bundled because of native node modules or needed for run start script. They are manually picked from @hyperswarm/dht +dependencies. The versions should be updated, if @hyperswarm/dht is updated. +The goal is to get a really small footprint for the production image. It is also possible to use in bare_metal setup. + +### Bare Metal minimal setup +For a minimal bare metal production setup, look into [Dockerfile](Dockerfile) in the production step. diff --git a/dht-node/esbuild.config.ts b/dht-node/esbuild.config.ts index 8e0c6583a..f38039c43 100644 --- a/dht-node/esbuild.config.ts +++ b/dht-node/esbuild.config.ts @@ -8,7 +8,7 @@ build({ bundle: true, keepNames: true, // legalComments: 'inline', - external: ['udx-native', 'sodium-native'], + external: ['dht-rpc', 'sodium-universal'], minify: true, sourcemap: false, }) diff --git a/dht-node/package.json b/dht-node/package.json index 7e604ee73..4e7224b4a 100644 --- a/dht-node/package.json +++ b/dht-node/package.json @@ -17,29 +17,31 @@ "test": "cross-env TZ=UTC NODE_ENV=development DB_DATABASE=gradido_test_dht jest --runInBand --forceExit --detectOpenHandles" }, "dependencies": { - "@hyperswarm/dht": "^6.5.1", - "config-schema": "*", - "cross-env": "^7.0.3", - "database": "*", - "dotenv": "10.0.0", - "joi": "^17.13.3", - "log4js": "^6.9.1", - "typeorm": "^0.3.22", - "uuid": "^8.3.2" + "dht-rpc": "6.18.1", + "sodium-universal": "4.0.1", + "cross-env": "^7.0.3" }, "devDependencies": { "@biomejs/biome": "1.9.4", + "@hyperswarm/dht": "6.5.1", "@types/dotenv": "^8.2.3", "@types/jest": "27.5.1", "@types/joi": "^17.2.3", "@types/node": "^17.0.45", "@types/uuid": "^8.3.4", + "config-schema": "*", + "database": "*", + "dotenv": "10.0.0", "esbuild": "^0.25.3", "jest": "27.5.1", + "joi": "^17.13.3", + "log4js": "^6.9.1", "prettier": "^2.8.8", "ts-jest": "27.1.4", "tsx": "^4.19.4", - "typescript": "^4.9.5" + "typeorm": "^0.3.22", + "typescript": "^4.9.5", + "uuid": "^8.3.2" }, "engines": { "node": ">=18" From 8083037d7fc8c233a3829b349ac97ed9d852ea3d Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Tue, 6 May 2025 10:10:01 +0200 Subject: [PATCH 092/123] remove unused code --- .github/workflows/test_dht_node.yml | 2 +- dht-node/Dockerfile | 34 ++++------------------------- 2 files changed, 5 insertions(+), 31 deletions(-) diff --git a/.github/workflows/test_dht_node.yml b/.github/workflows/test_dht_node.yml index 8968609eb..4e2daf2d2 100644 --- a/.github/workflows/test_dht_node.yml +++ b/.github/workflows/test_dht_node.yml @@ -31,7 +31,7 @@ jobs: - name: Checkout code uses: actions/checkout@v3 - - name: Build 'test' image (typecheck & build) + - name: Build 'production' image run: docker build --target production -t "gradido/dht-node:production" -f dht-node/Dockerfile . unit_test: diff --git a/dht-node/Dockerfile b/dht-node/Dockerfile index ccdeb631a..0b28c992c 100644 --- a/dht-node/Dockerfile +++ b/dht-node/Dockerfile @@ -1,8 +1,8 @@ ################################################################################## # BASE ########################################################################### ################################################################################## -FROM node:18.20.7-bookworm-slim as base -#FROM node:18.20.7-alpine3.21 as base +#FROM node:18.20.7-bookworm-slim as base +FROM node:18.20.7-alpine3.21 as base #FROM ubuntu:latest as base # ENVs (available in production aswell, can be overwritten by commandline or env file) @@ -20,6 +20,7 @@ ENV NODE_ENV="production" #ENV PORT="5000" ## Timezone ENV TZ=UTC +ENV DB_HOST=mariadb # Labels LABEL org.label-schema.build-date="${BUILD_DATE}" @@ -91,7 +92,6 @@ RUN turbo dht-node#build dht-node#typecheck --env-mode=loose ################################################################################## FROM build as test -ENV DB_HOST=mariadb # Run command CMD /bin/sh -c "turbo dht-node#test --env-mode=loose" @@ -118,32 +118,6 @@ COPY --chown=app:app --from=production-node-modules ${DOCKER_WORKDIR}/node_modul # Copy log4js-config.json to provide log configuration COPY --chown=app:app --from=build ${DOCKER_WORKDIR}/dht-node/log4js-config.json ./log4js-config.json -ENV DB_HOST=mariadb -ENV TZ=UTC + # Run command CMD ["node", "index.js"] - - -################################################################################## -# PRODUCTION (Does contain only "binary"- and static-files to reduce image size) # -# Experimental, install only some node_modules which can't be bundled ############ -################################################################################## -FROM base as production-small - -# Copy "binary"-files from build image -COPY --chown=app:app --from=build ${DOCKER_WORKDIR}/dht-node/build/index.js ./index.js -COPY --chown=app:app --from=build ${DOCKER_WORKDIR}/scripts/clean-prebuilds.sh ./clean-prebuilds.sh -#COPY --chown=app:app --from=build ${DOCKER_WORKDIR}/dht-node/package.json ./package.json - -# We also install the native node_modules which cannot be bundled -# TODO: find a elegant way to use the right versions from yarn.lock -RUN yarn add @hyperswarm/dht@^6.5.1 \ - && rm -rf /tmp/* ~/.cache node_modules/.cache \ - && yarn cache clean \ - && ./clean-prebuilds.sh - -# Copy log4js-config.json to provide log configuration -COPY --chown=app:app --from=build ${DOCKER_WORKDIR}/dht-node/log4js-config.json ./log4js-config.json -ENV DB_HOST=mariadb -# Run command -CMD ["node", "index.js"] \ No newline at end of file From aeee9ad44a4ebe597fc97dc08817b1e933b73f94 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Mon, 5 May 2025 20:15:06 +0200 Subject: [PATCH 093/123] small fixes --- .github/workflows/test_admin_interface.yml | 2 +- .github/workflows/test_backend.yml | 8 +++++--- .github/workflows/test_database.yml | 2 +- .github/workflows/test_dht_node.yml | 2 +- .github/workflows/test_federation.yml | 2 +- .github/workflows/test_frontend.yml | 2 +- backend/src/password/EncryptorUtils.ts | 4 ++-- frontend/turbo.json | 1 - 8 files changed, 12 insertions(+), 11 deletions(-) diff --git a/.github/workflows/test_admin_interface.yml b/.github/workflows/test_admin_interface.yml index b9d62a5ad..2026b487a 100644 --- a/.github/workflows/test_admin_interface.yml +++ b/.github/workflows/test_admin_interface.yml @@ -58,7 +58,7 @@ jobs: - name: install dependencies run: | bun install --filter admin --frozen-lockfile - bun install --global turbo@^2 + bun install --global --no-save turbo@^2 - name: Admin Interface | Unit tests id: test diff --git a/.github/workflows/test_backend.yml b/.github/workflows/test_backend.yml index f177668f8..7c4d25026 100644 --- a/.github/workflows/test_backend.yml +++ b/.github/workflows/test_backend.yml @@ -56,13 +56,15 @@ jobs: uses: oven-sh/setup-bun@v2 - name: install dependencies - run: bun install --filter backend --frozen-lockfile + run: | + bun install --filter backend --frozen-lockfile + bun install --global --no-save turbo@^2 - name: Wait for MariaDB to be ready run: until nc -z localhost 3306; do echo waiting for db; sleep 1; done; - name: Backend | Unit tests - run: bun turbo backend#test + run: turbo backend#test typecheck: if: needs.files-changed.outputs.backend == 'true' @@ -84,7 +86,7 @@ jobs: - name: install dependencies run: | bun install --filter backend --frozen-lockfile - bun install --global turbo@^2 + bun install --global --no-save turbo@^2 - name: Backend | Typecheck run: turbo backend#typecheck backend#build diff --git a/.github/workflows/test_database.yml b/.github/workflows/test_database.yml index 5a448e434..9347ba30a 100644 --- a/.github/workflows/test_database.yml +++ b/.github/workflows/test_database.yml @@ -51,7 +51,7 @@ jobs: - name: install dependencies run: | bun install --filter database --frozen-lockfile - bun install --global turbo@^2 + bun install --global --no-save turbo@^2 - name: Wait for MariaDB to be ready run: docker run --rm --network gradido_internal-net busybox sh -c 'until nc -z mariadb 3306; do echo waiting for db; sleep 1; done;' diff --git a/.github/workflows/test_dht_node.yml b/.github/workflows/test_dht_node.yml index 4e2daf2d2..f454c9cff 100644 --- a/.github/workflows/test_dht_node.yml +++ b/.github/workflows/test_dht_node.yml @@ -57,7 +57,7 @@ jobs: - name: install dependencies run: | bun install --filter dht-node --frozen-lockfile - bun install --global turbo@^2 + bun install --global --no-save turbo@^2 - name: Wait for MariaDB to be ready run: until nc -z localhost 3306; do echo waiting for db; sleep 1; done; diff --git a/.github/workflows/test_federation.yml b/.github/workflows/test_federation.yml index d139b9d27..7dfd36c81 100644 --- a/.github/workflows/test_federation.yml +++ b/.github/workflows/test_federation.yml @@ -57,7 +57,7 @@ jobs: - name: install dependencies run: | bun install --filter federation --frozen-lockfile - bun install --global turbo@^2 + bun install --global --no-save turbo@^2 - name: Wait for MariaDB to be ready run: until nc -z localhost 3306; do echo waiting for db; sleep 1; done; diff --git a/.github/workflows/test_frontend.yml b/.github/workflows/test_frontend.yml index 2f8931c5d..9691e4694 100644 --- a/.github/workflows/test_frontend.yml +++ b/.github/workflows/test_frontend.yml @@ -81,7 +81,7 @@ jobs: - name: install dependencies run: | bun install --filter frontend --frozen-lockfile - bun install --global turbo@^2 + bun install --global --no-save turbo@^2 - name: Frontend | Lint id: lint diff --git a/backend/src/password/EncryptorUtils.ts b/backend/src/password/EncryptorUtils.ts index 53e217078..afb706cfb 100644 --- a/backend/src/password/EncryptorUtils.ts +++ b/backend/src/password/EncryptorUtils.ts @@ -22,7 +22,8 @@ let encryptionWorkerPool: Pool | undefined if (CONFIG.USE_CRYPTO_WORKER === true) { encryptionWorkerPool = pool( path.join(__dirname, '..', 'build', 'password', 'EncryptionWorker.js'), - { maxQueueSize: 30 * cpus().length }) + { maxQueueSize: 30 * cpus().length }, + ) } // We will reuse this for changePassword @@ -69,7 +70,6 @@ export const SecretKeyCryptographyCreateKey = async ( // pool is throwing this error // throw new Error('Max queue size of ' + this.maxQueueSize + ' reached'); // will be shown in frontend to user - console.log(JSON.stringify(e, null, 2)) throw new LogError('Server is full, please try again in 10 minutes.', e) } } diff --git a/frontend/turbo.json b/frontend/turbo.json index 771b65a25..434acaba2 100644 --- a/frontend/turbo.json +++ b/frontend/turbo.json @@ -18,4 +18,3 @@ } } } - \ No newline at end of file From f7d556b9d4b9b57b43cc2d2d362dc7c5f746be00 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Tue, 6 May 2025 10:56:15 +0200 Subject: [PATCH 094/123] back to bookworm --- dht-node/Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dht-node/Dockerfile b/dht-node/Dockerfile index 0b28c992c..b98acc61d 100644 --- a/dht-node/Dockerfile +++ b/dht-node/Dockerfile @@ -1,8 +1,8 @@ ################################################################################## # BASE ########################################################################### ################################################################################## -#FROM node:18.20.7-bookworm-slim as base -FROM node:18.20.7-alpine3.21 as base +FROM node:18.20.7-bookworm-slim as base +#FROM node:18.20.7-alpine3.21 as base #FROM ubuntu:latest as base # ENVs (available in production aswell, can be overwritten by commandline or env file) From 106bdf019a5afb3fdafc1dbe320884f45330d30a Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Tue, 6 May 2025 11:38:15 +0200 Subject: [PATCH 095/123] fix admin import config --- admin/src/config/index.js | 2 +- admin/src/config/schema.js | 6 +++--- admin/{vite.config.js => vite.config.mjs} | 5 ++--- 3 files changed, 6 insertions(+), 7 deletions(-) rename admin/{vite.config.js => vite.config.mjs} (98%) diff --git a/admin/src/config/index.js b/admin/src/config/index.js index 37d98c606..d64ba6f5f 100644 --- a/admin/src/config/index.js +++ b/admin/src/config/index.js @@ -2,7 +2,7 @@ // The whole contents is exposed to the client // Load Package Details for some default values -const pkg = require('../../package') +import pkg from '../../package' const version = { ADMIN_MODULE_PROTOCOL: process.env.ADMIN_MODULE_PROTOCOL ?? 'http', diff --git a/admin/src/config/schema.js b/admin/src/config/schema.js index 2d0617122..d461a7cb4 100644 --- a/admin/src/config/schema.js +++ b/admin/src/config/schema.js @@ -1,4 +1,4 @@ -const { +import { APP_VERSION, BUILD_COMMIT, BUILD_COMMIT_SHORT, @@ -10,8 +10,8 @@ const { NODE_ENV, OPENAI_ACTIVE, PRODUCTION, -} = require('config-schema') -const Joi = require('joi') +} from 'config-schema' +import Joi from 'joi' module.exports = Joi.object({ APP_VERSION, diff --git a/admin/vite.config.js b/admin/vite.config.mjs similarity index 98% rename from admin/vite.config.js rename to admin/vite.config.mjs index 1499b2090..992626334 100644 --- a/admin/vite.config.js +++ b/admin/vite.config.mjs @@ -7,18 +7,17 @@ import IconsResolve from 'unplugin-icons/resolver' import { BootstrapVueNextResolver } from 'bootstrap-vue-next' import EnvironmentPlugin from 'vite-plugin-environment' import schema from './src/config/schema' +import CONFIG from './src/config' import { execSync } from 'node:child_process' import { existsSync, constants } from 'node:fs' import { validate, browserUrls } from 'config-schema' -import path from 'node:path' +import path from 'node:path' import dotenv from 'dotenv' dotenv.config() // load env vars from .env -const CONFIG = require('./src/config') - export default defineConfig(async ({ command }) => { const { vitePluginGraphqlLoader } = await import('vite-plugin-graphql-loader') if (command === 'serve') { From 7568f6ef9e575e2caeae1f6705b99f6ac2df6082 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Tue, 6 May 2025 11:39:54 +0200 Subject: [PATCH 096/123] fix import config for frontend --- frontend/src/config/index.js | 2 +- frontend/src/config/schema.js | 8 ++++---- frontend/{vite.config.js => vite.config.mjs} | 0 3 files changed, 5 insertions(+), 5 deletions(-) rename frontend/{vite.config.js => vite.config.mjs} (100%) diff --git a/frontend/src/config/index.js b/frontend/src/config/index.js index 0ee64509e..727760353 100644 --- a/frontend/src/config/index.js +++ b/frontend/src/config/index.js @@ -2,7 +2,7 @@ // The whole contents is exposed to the client // Load Package Details for some default values -const pkg = require('../../package') +import pkg from '../../package' const constants = { DECAY_START_TIME: new Date('2021-05-13 17:46:31-0000'), // GMT+0 diff --git a/frontend/src/config/schema.js b/frontend/src/config/schema.js index 1e3accb41..d3c0e8414 100644 --- a/frontend/src/config/schema.js +++ b/frontend/src/config/schema.js @@ -1,11 +1,11 @@ -const { +import { APP_VERSION, BUILD_COMMIT, BUILD_COMMIT_SHORT, COMMUNITY_DESCRIPTION, + COMMUNITY_LOCATION, COMMUNITY_NAME, COMMUNITY_SUPPORT_MAIL, - COMMUNITY_LOCATION, COMMUNITY_URL, DEBUG, DECAY_START_TIME, @@ -14,8 +14,8 @@ const { HUMHUB_ACTIVE, NODE_ENV, PRODUCTION, -} = require('config-schema') -const Joi = require('joi') +} from 'config-schema' +import Joi from 'joi' // console.log(commonSchema) diff --git a/frontend/vite.config.js b/frontend/vite.config.mjs similarity index 100% rename from frontend/vite.config.js rename to frontend/vite.config.mjs From 6356617e7625f37fc5559be5439cdb4e66c70d6f Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Tue, 6 May 2025 17:15:08 +0200 Subject: [PATCH 097/123] refactor docker setup --- .github/workflows/test_backend.yml | 3 - .github/workflows/test_database.yml | 7 +- .github/workflows/test_dht_node.yml | 3 - .github/workflows/test_e2e.yml | 3 - .github/workflows/test_federation.yml | 3 - README.md | 30 ++ admin/Dockerfile | 19 +- backend/Dockerfile | 40 +- backend/esbuild.config.ts | 6 +- backend/package.json | 106 +++-- backend/src/password/EncryptionWorker.d.ts | 7 + ...ncryptionWorker.ts => EncryptionWorker.js} | 24 +- backend/src/password/EncryptorUtils.ts | 4 +- backend/src/password/__mocks__/worker.js | 0 backend/src/password/worker.js | 7 + backend/src/server/createServer.ts | 19 +- backend/src/typeorm/DBVersion.ts | 27 +- biome.json | 9 +- bun.lock | 426 +++++++++--------- database/Dockerfile | 65 +-- database/src/clear.ts | 14 +- database/src/prepare.ts | 27 +- dht-node/Dockerfile | 2 +- dht-node/src/index.ts | 16 +- dht-node/src/typeorm/DBVersion.ts | 27 +- dht-node/test/helpers.ts | 23 +- docker-compose.override.yml | 17 +- docker-compose.yml | 28 +- federation/Dockerfile | 40 +- federation/package.json | 56 ++- federation/src/server/createServer.ts | 19 +- federation/src/typeorm/DBVersion.ts | 26 +- frontend/Dockerfile | 19 +- nginx/Dockerfile | 3 +- nginx/admin.conf | 14 + nginx/frontend.conf | 12 + yarn.lock | 8 +- 37 files changed, 627 insertions(+), 532 deletions(-) create mode 100644 backend/src/password/EncryptionWorker.d.ts rename backend/src/password/{EncryptionWorker.ts => EncryptionWorker.js} (72%) create mode 100644 backend/src/password/__mocks__/worker.js create mode 100644 backend/src/password/worker.js create mode 100644 nginx/admin.conf create mode 100644 nginx/frontend.conf diff --git a/.github/workflows/test_backend.yml b/.github/workflows/test_backend.yml index 7c4d25026..ca3ce0e69 100644 --- a/.github/workflows/test_backend.yml +++ b/.github/workflows/test_backend.yml @@ -60,9 +60,6 @@ jobs: bun install --filter backend --frozen-lockfile bun install --global --no-save turbo@^2 - - name: Wait for MariaDB to be ready - run: until nc -z localhost 3306; do echo waiting for db; sleep 1; done; - - name: Backend | Unit tests run: turbo backend#test diff --git a/.github/workflows/test_database.yml b/.github/workflows/test_database.yml index 9347ba30a..ac313ff34 100644 --- a/.github/workflows/test_database.yml +++ b/.github/workflows/test_database.yml @@ -30,8 +30,8 @@ jobs: - name: Checkout code uses: actions/checkout@v3 - - name: Database | Build 'up' image - run: docker build --target up -t "gradido/database:up" -f database/Dockerfile . + - name: Database | Build image + run: docker build --target build -t "gradido/database:build" -f database/Dockerfile . database_migration_test: if: needs.files-changed.outputs.database == 'true' || needs.files-changed.outputs.docker-compose == 'true' || needs.files-changed.outputs.mariadb == 'true' @@ -53,9 +53,6 @@ jobs: bun install --filter database --frozen-lockfile bun install --global --no-save turbo@^2 - - name: Wait for MariaDB to be ready - run: docker run --rm --network gradido_internal-net busybox sh -c 'until nc -z mariadb 3306; do echo waiting for db; sleep 1; done;' - - name: Database | up run: turbo up diff --git a/.github/workflows/test_dht_node.yml b/.github/workflows/test_dht_node.yml index f454c9cff..bdde2d22f 100644 --- a/.github/workflows/test_dht_node.yml +++ b/.github/workflows/test_dht_node.yml @@ -59,9 +59,6 @@ jobs: bun install --filter dht-node --frozen-lockfile bun install --global --no-save turbo@^2 - - name: Wait for MariaDB to be ready - run: until nc -z localhost 3306; do echo waiting for db; sleep 1; done; - - name: run unit test & build & typecheck run: turbo dht-node#test dht-node#build dht-node#typecheck diff --git a/.github/workflows/test_e2e.yml b/.github/workflows/test_e2e.yml index 5015e3887..0f1fe278c 100644 --- a/.github/workflows/test_e2e.yml +++ b/.github/workflows/test_e2e.yml @@ -22,9 +22,6 @@ jobs: bun install sudo cp ./nginx/e2e-test.conf /etc/nginx/sites-available/default - - name: wait for database to be ready - run: until nc -z localhost 3306; do echo waiting for db; sleep 1; done; - - name: Boot up test system | seed backend run: bun turbo seed diff --git a/.github/workflows/test_federation.yml b/.github/workflows/test_federation.yml index 7dfd36c81..18cceed89 100644 --- a/.github/workflows/test_federation.yml +++ b/.github/workflows/test_federation.yml @@ -59,9 +59,6 @@ jobs: bun install --filter federation --frozen-lockfile bun install --global --no-save turbo@^2 - - name: Wait for MariaDB to be ready - run: until nc -z localhost 3306; do echo waiting for db; sleep 1; done; - - name: Federation | Unit tests id: test run: turbo federation#test federation#build federation#typecheck \ No newline at end of file diff --git a/README.md b/README.md index 36782e704..d39282678 100644 --- a/README.md +++ b/README.md @@ -145,6 +145,36 @@ bun install Note that some modules are still not fully compatible with Bun. Therefore, continue using **Yarn** for development if you run into any issues. +### EMFILE: too many open files +With +```bash +yarn docker_dev +``` +or also +```bash +turbo dev +``` +Many files will be watched by the various services. +This can lead to this error: **EMFILE: too many open files** +If increasing ulimit don't help, consider starting only the services on +which you are working on in dev mode and the rest in production mode. + +For example if you are only working on the frontend, you can start the frontend in dev mode and the rest in production mode: +```bash +yarn docker_dev frontend +``` +and in another bash +```bash +yarn docker backend admin database nginx --no-deps +``` +or local with turbo +```bash +turbo frontend#dev backend#start admin#start --env-mode=loose +``` + +Tip: for local setup use a local nginx server with similar config like docker nginx [nginx.conf](./nginx/gradido.conf) but replace docker image name with localhost + + ## Services defined in this package - [frontend](./frontend) Wallet frontend diff --git a/admin/Dockerfile b/admin/Dockerfile index 0fa88c333..3069db630 100644 --- a/admin/Dockerfile +++ b/admin/Dockerfile @@ -10,12 +10,13 @@ ENV DOCKER_WORKDIR="/app" ## We Cannot do `$(date -u +'%Y-%m-%dT%H:%M:%SZ')` here so we use unix timestamp=0 ENV BUILD_DATE="1970-01-01T00:00:00.00Z" ## We cannot do $(npm run version).${BUILD_NUMBER} here so we default to 0.0.0.0 +# TODO: get the actually git commit hash into docker ARG BUILD_VERSION -ENV BUILD_VERSION=${BUILD_VERSION} +ENV BUILD_VERSION=${BUILD_VERSION:-'broken'} ARG BUILD_COMMIT -ENV BUILD_COMMIT=${BUILD_COMMIT} +ENV BUILD_COMMIT=${BUILD_COMMIT:-'deadbeefdeadbeefdeadbeefdeadbeefdeadbeef'} ARG BUILD_COMMIT_SHORT -ENV BUILD_COMMIT_SHORT=${BUILD_COMMIT_SHORT} +ENV BUILD_COMMIT_SHORT=${BUILD_COMMIT_SHORT:-'deadbeef'} ## SET NODE_ENV ARG NODE_ENV=production ENV NODE_ENV=${NODE_ENV} @@ -83,10 +84,6 @@ COPY --chown=app:app . . RUN bun install --filter admin --no-cache --frozen-lockfile \ && bun install --global turbo@^2 -# TODO: get the actually git commit hash into docker -ENV BUILD_COMMIT=deadbeefdeadbeefdeadbeefdeadbeefdeadbeef -ENV BUILD_COMMIT_SHORT=deadbeef -ENV BUILD_VERSION=broken RUN turbo admin#build --env-mode=loose ################################################################################## @@ -100,11 +97,11 @@ CMD /bin/sh -c "turbo admin#test --env-mode=loose" ################################################################################## # PRODUCTION (Does contain only "binary"- and static-files to reduce image size) # ################################################################################## -FROM lipanski/docker-static-website:latest as production +FROM nginx:1.28.0-alpine3.21-slim as production -# tiny static webserver -# https://lipanski.com/posts/smallest-docker-image-static-website +COPY ./nginx/admin.conf /etc/nginx/conf.d/default.conf + +WORKDIR /app # copy builded frontend files COPY --from=build /app/admin/build/ ./admin/ - diff --git a/backend/Dockerfile b/backend/Dockerfile index 6d126fa25..4c1ceb36e 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -1,7 +1,9 @@ ################################################################################## # BASE ########################################################################### ################################################################################## -FROM node:18.20.7-alpine3.21 as base +FROM node:18.20.7-bookworm-slim as base +#FROM node:18.20.7-alpine3.21 as base +# change to alpine after sodium-native ship with native alpine build # ENVs (available in production aswell, can be overwritten by commandline or env file) ## DOCKER_WORKDIR would be a classical ARG, but that is not multi layer persistent - shame @@ -18,6 +20,7 @@ ENV NODE_ENV=production ENV PORT="4000" ## Timezone ENV TZ=UTC +ENV DB_HOST=mariadb # Labels LABEL org.label-schema.build-date="${BUILD_DATE}" @@ -50,7 +53,8 @@ WORKDIR ${DOCKER_WORKDIR} ################################################################################## FROM base as bun-base -RUN apk update && apk add --no-cache curl tar bash +RUN apt update && apt install -y --no-install-recommends ca-certificates curl bash unzip +#RUN apk update && apk add --no-cache curl tar bash RUN curl -fsSL https://bun.sh/install | bash # Add bun's global bin directory to PATH ENV PATH="/root/.bun/bin:${PATH}" @@ -65,26 +69,39 @@ CMD /bin/sh -c "bun install --filter backend --no-cache --frozen-lockfile \ && bun install --global --no-cache --no-save turbo@^2 \ && turbo backend#dev --env-mode=loose" +################################################################################## +# Basic Image with bun setup and project and source code ######################### +################################################################################## +FROM bun-base as bun-base-src +COPY --chown=app:app . . + ################################################################################## # Build ########################################################################## ################################################################################## -FROM bun-base as build +FROM bun-base-src as build -COPY --chown=app:app . . RUN bun install --filter backend --no-cache --frozen-lockfile \ - && bun install --global --no-cache --no-save turbo@^2 \ - && turbo backend#build backend#typecheck --env-mode=loose + && bun install --global --no-cache --no-save turbo@^2 +RUN turbo backend#build backend#typecheck --env-mode=loose ################################################################################## # TEST ########################################################################### ################################################################################## FROM build as test -ENV DB_HOST=mariadb - # Run command CMD /bin/sh -c "turbo backend#test --env-mode=loose" +################################################################################## +# install only node modules needed for running bundle ############################ +################################################################################## +FROM bun-base-src as production-node-modules + +# add node_modules from production_node_modules +RUN bun install --filter backend --production --frozen-lockfile --no-cache \ + && rm -rf /tmp/* ~/.cache node_modules/.cache \ + && ./scripts/clean-prebuilds.sh + ################################################################################## # PRODUCTION (Does contain only "binary"- and static-files to reduce image size) # ################################################################################## @@ -92,10 +109,9 @@ FROM base as production # Copy "binary"-files from build image COPY --chown=app:app --from=build ${DOCKER_WORKDIR}/backend/build/index.js ./index.js - -RUN yarn add sodium-native@4.0.0 email-templates@10.0.1 \ - && rm -rf /tmp/* ~/.cache node_modules/.cache \ - && yarn cache clean +COPY --chown=app:app --from=build ${DOCKER_WORKDIR}/backend/build/worker.js ./worker.js +# add node_modules from production_node_modules +COPY --chown=app:app --from=production-node-modules ${DOCKER_WORKDIR}/node_modules ./node_modules # Copy log4js-config.json to provide log configuration COPY --chown=app:app --from=build ${DOCKER_WORKDIR}/backend/log4js-config.json ./log4js-config.json diff --git a/backend/esbuild.config.ts b/backend/esbuild.config.ts index 9b545dc4d..87efef48e 100644 --- a/backend/esbuild.config.ts +++ b/backend/esbuild.config.ts @@ -2,15 +2,15 @@ import { esbuildDecorators } from '@anatine/esbuild-decorators' import { build } from 'esbuild' build({ - entryPoints: ['src/index.ts', 'src/password/EncryptionWorker.ts'], + entryPoints: ['src/index.ts', 'src/password/worker.js'], outdir: 'build', platform: 'node', target: 'node18.20.7', bundle: true, keepNames: true, + entryNames: '[name]', // legalComments: 'inline', external: ['sodium-native', 'email-templates'], plugins: [esbuildDecorators()], - minify: false, - sourcemap: true, + minify: true, }) diff --git a/backend/package.json b/backend/package.json index 165b727e0..8b68ec5fc 100644 --- a/backend/package.json +++ b/backend/package.json @@ -4,68 +4,34 @@ "description": "Gradido unified backend providing an API-Service for Gradido Transactions", "main": "src/index.ts", "repository": "https://github.com/gradido/gradido/backend", - "author": "Gradido Academy - https://www.gradido.net", "license": "Apache-2.0", "private": false, + "author": "Gradido Academy - https://www.gradido.net", "scripts": { "build": "ts-node ./esbuild.config.ts && mkdirp build/templates/ && ncp src/emails/templates build/templates && mkdirp locales/ && ncp src/locales locales", "clean": "tsc --build --clean", - "start": "cross-env TZ=UTC NODE_ENV=production node build/index.js", "dev": "cross-env TZ=UTC nodemon -w src --ext ts,pug,json,css -r tsconfig-paths/register src/index.ts", - "typecheck": "tsc --noEmit", - "lint": "biome check --error-on-warnings .", - "lint:fix": "biome check --error-on-warnings . --write", - "test": "cross-env TZ=UTC NODE_ENV=development DB_DATABASE=gradido_test_backend jest --runInBand --forceExit --detectOpenHandles", - "seed": "cross-env TZ=UTC NODE_ENV=development ts-node -r tsconfig-paths/register src/seeds/index.ts", - "klicktipp": "cross-env TZ=UTC NODE_ENV=development ts-node -r tsconfig-paths/register src/util/executeKlicktipp.ts", "gmsusers": "cross-env TZ=UTC NODE_ENV=development ts-node -r tsconfig-paths/register src/apis/gms/ExportUsers.ts", "humhubUserExport": "cross-env TZ=UTC NODE_ENV=development ts-node -r tsconfig-paths/register src/apis/humhub/ExportUsers.ts", - "locales": "scripts/sort.sh" + "klicktipp": "cross-env TZ=UTC NODE_ENV=development ts-node -r tsconfig-paths/register src/util/executeKlicktipp.ts", + "lint": "biome check --error-on-warnings .", + "lint:fix": "biome check --error-on-warnings . --write", + "locales": "scripts/sort.sh", + "seed": "cross-env TZ=UTC NODE_ENV=development ts-node -r tsconfig-paths/register src/seeds/index.ts", + "start": "cross-env TZ=UTC NODE_ENV=production node build/index.js", + "test": "cross-env TZ=UTC NODE_ENV=development DB_DATABASE=gradido_test_backend jest --runInBand --forceExit --detectOpenHandles", + "typecheck": "tsc --noEmit" + }, + "nodemonConfig": { + "ignore": ["**/*.test.ts"] }, "dependencies": { - "@anatine/esbuild-decorators": "^0.2.19", - "apollo-server-express": "^2.25.2", - "await-semaphore": "^0.1.3", - "axios": "^0.21.1", - "class-validator": "^0.13.1", - "config-schema": "*", - "cors": "^2.8.5", "cross-env": "^7.0.3", - "database": "*", - "decimal.js-light": "^2.5.1", - "dotenv": "^10.0.0", "email-templates": "^10.0.1", - "esbuild": "^0.25.2", - "express": "^4.17.21", - "express-slow-down": "^2.0.1", - "graphql": "^15.10.1", - "graphql-parse-resolve-info": "^4.13.1", - "graphql-request": "5.0.0", - "graphql-type-json": "0.3.2", - "helmet": "^5.1.1", - "i18n": "^0.15.1", - "joi": "^17.13.3", - "jose": "^4.14.4", - "lodash.clonedeep": "^4.5.0", - "log4js": "^6.7.1", - "mkdirp": "^3.0.1", - "ncp": "^2.0.0", - "nodemailer": "^6.6.5", - "openai": "^4.87.3", - "pug": "^3.0.2", - "random-bigint": "^0.0.1", - "reflect-metadata": "^0.1.13", - "sodium-native": "^3.4.1", - "ts-node": "^10.9.2", - "tsconfig-paths": "^4.1.1", - "type-graphql": "^1.1.1", - "typed-rest-client": "^1.8.11", - "typeorm": "^0.3.16", - "uuid": "^8.3.2", - "workerpool": "^9.2.0", - "xregexp": "^5.1.1" + "sodium-native": "^3.4.1" }, "devDependencies": { + "@anatine/esbuild-decorators": "^0.2.19", "@biomejs/biome": "1.9.4", "@swc/cli": "^0.7.3", "@swc/core": "^1.11.24", @@ -80,21 +46,53 @@ "@types/nodemailer": "^6.4.4", "@types/sodium-native": "^2.3.5", "@types/uuid": "^8.3.4", + "apollo-server-express": "^2.25.2", "apollo-server-testing": "^2.25.2", + "await-semaphore": "^0.1.3", + "axios": "^0.21.1", + "class-validator": "^0.13.1", + "config-schema": "*", + "cors": "^2.8.5", + "database": "*", + "decimal.js-light": "^2.5.1", + "dotenv": "^10.0.0", + "esbuild": "^0.25.2", + "express": "^4.17.21", + "express-slow-down": "^2.0.1", "faker": "^5.5.3", + "graphql": "^15.10.1", + "graphql-parse-resolve-info": "^4.13.1", + "graphql-request": "5.0.0", "graphql-tag": "^2.12.6", + "graphql-type-json": "0.3.2", + "helmet": "^5.1.1", + "i18n": "^0.15.1", "jest": "27.2.4", + "joi": "^17.13.3", + "jose": "^4.14.4", "klicktipp-api": "^1.0.2", + "lodash.clonedeep": "^4.5.0", + "log4js": "^6.7.1", + "mkdirp": "^3.0.1", + "ncp": "^2.0.0", + "nodemailer": "^6.6.5", "nodemon": "^2.0.7", + "openai": "^4.87.3", "prettier": "^3.5.3", + "pug": "^3.0.2", + "random-bigint": "^0.0.1", + "reflect-metadata": "^0.1.13", "regenerator-runtime": "^0.14.1", "ts-jest": "27.0.5", - "typescript": "^4.9.5" - }, - "nodemonConfig": { - "ignore": [ - "**/*.test.ts" - ] + "ts-node": "^10.9.2", + "tsconfig-paths": "^4.1.1", + "type-graphql": "^1.1.1", + "typed-rest-client": "^1.8.11", + "typeorm": "^0.3.16", + "typescript": "^4.9.5", + "uuid": "^8.3.2", + "workerpool": "^9.2.0", + "xregexp": "^5.1.1" }, "engines": { "node": ">=18" diff --git a/backend/src/password/EncryptionWorker.d.ts b/backend/src/password/EncryptionWorker.d.ts new file mode 100644 index 000000000..f97c4cc12 --- /dev/null +++ b/backend/src/password/EncryptionWorker.d.ts @@ -0,0 +1,7 @@ + +export function SecretKeyCryptographyCreateKeyFunc( + salt: string, + password: string, + configLoginAppSecret: Buffer, + configLoginServerKey: Buffer +): bigint; \ No newline at end of file diff --git a/backend/src/password/EncryptionWorker.ts b/backend/src/password/EncryptionWorker.js similarity index 72% rename from backend/src/password/EncryptionWorker.ts rename to backend/src/password/EncryptionWorker.js index 391883883..4df14f3fa 100644 --- a/backend/src/password/EncryptionWorker.ts +++ b/backend/src/password/EncryptionWorker.js @@ -1,6 +1,4 @@ -import { worker } from 'workerpool' - -import { +const { crypto_box_SEEDBYTES, crypto_hash_sha512_BYTES, crypto_hash_sha512_STATEBYTES, @@ -11,14 +9,14 @@ import { crypto_pwhash_SALTBYTES, crypto_shorthash, crypto_shorthash_BYTES, -} from 'sodium-native' +} = require('sodium-native') -export const SecretKeyCryptographyCreateKeyFunc = ( - salt: string, - password: string, - configLoginAppSecret: Buffer, - configLoginServerKey: Buffer, -): bigint => { +exports.SecretKeyCryptographyCreateKeyFunc = ( + salt, + password, + configLoginAppSecret, + configLoginServerKey, +) => { const state = Buffer.alloc(crypto_hash_sha512_STATEBYTES) crypto_hash_sha512_init(state) crypto_hash_sha512_update(state, Buffer.from(salt)) @@ -43,9 +41,3 @@ export const SecretKeyCryptographyCreateKeyFunc = ( crypto_shorthash(encryptionKeyHash, encryptionKey, configLoginServerKey) return encryptionKeyHash.readBigUInt64LE() } - -if (process.env.USE_CRYPTO_WORKER === 'true' && typeof process.send === 'function') { - worker({ - SecretKeyCryptographyCreateKeyFunc, - }) -} diff --git a/backend/src/password/EncryptorUtils.ts b/backend/src/password/EncryptorUtils.ts index afb706cfb..8e8e22495 100644 --- a/backend/src/password/EncryptorUtils.ts +++ b/backend/src/password/EncryptorUtils.ts @@ -12,7 +12,7 @@ import { backendLogger as logger } from '@/server/logger' import { crypto_shorthash_KEYBYTES } from 'sodium-native' -import { SecretKeyCryptographyCreateKeyFunc } from './EncryptionWorker' +import { SecretKeyCryptographyCreateKeyFunc } from './EncryptionWorker.js' const configLoginAppSecret = Buffer.from(CONFIG.LOGIN_APP_SECRET, 'hex') const configLoginServerKey = Buffer.from(CONFIG.LOGIN_SERVER_KEY, 'hex') @@ -21,7 +21,7 @@ let encryptionWorkerPool: Pool | undefined if (CONFIG.USE_CRYPTO_WORKER === true) { encryptionWorkerPool = pool( - path.join(__dirname, '..', 'build', 'password', 'EncryptionWorker.js'), + path.join(__dirname, 'worker.js'), { maxQueueSize: 30 * cpus().length }, ) } diff --git a/backend/src/password/__mocks__/worker.js b/backend/src/password/__mocks__/worker.js new file mode 100644 index 000000000..e69de29bb diff --git a/backend/src/password/worker.js b/backend/src/password/worker.js new file mode 100644 index 000000000..3ba062313 --- /dev/null +++ b/backend/src/password/worker.js @@ -0,0 +1,7 @@ +const { worker } = require('workerpool') +const { SecretKeyCryptographyCreateKeyFunc } = require('./EncryptionWorker') + +worker({ + SecretKeyCryptographyCreateKeyFunc, +}) + diff --git a/backend/src/server/createServer.ts b/backend/src/server/createServer.ts index be68f8cee..fec8fa3b7 100644 --- a/backend/src/server/createServer.ts +++ b/backend/src/server/createServer.ts @@ -7,8 +7,7 @@ import { Connection as DbConnection } from 'typeorm' import { CONFIG } from '@/config' import { schema } from '@/graphql/schema' -import { checkDBVersion } from '@/typeorm/DBVersion' -import { Connection } from '@/typeorm/connection' +import { checkDBVersionUntil } from '@/typeorm/DBVersion' import { elopageWebhook } from '@/webhook/elopage' import { gmsWebhook } from '@/webhook/gms' @@ -35,19 +34,11 @@ export const createServer = async ( logger.addContext('user', 'unknown') logger.debug('createServer...') - // open mysql connection - const con = await Connection.getInstance() - if (!con?.isConnected) { - logger.fatal(`Couldn't open connection to database!`) - throw new Error(`Fatal: Couldn't open connection to database`) - } - + // open mariadb connection, retry connecting with mariadb // check for correct database version - const dbVersion = await checkDBVersion(CONFIG.DB_VERSION) - if (!dbVersion) { - logger.fatal('Fatal: Database Version incorrect') - throw new Error('Fatal: Database Version incorrect') - } + // retry max 15 times, wait 500 ms between tries + // TODO: move variables into config + const con = await checkDBVersionUntil(15, 500) // Express Server const app = express() diff --git a/backend/src/typeorm/DBVersion.ts b/backend/src/typeorm/DBVersion.ts index ba7460785..6eaa7fb07 100644 --- a/backend/src/typeorm/DBVersion.ts +++ b/backend/src/typeorm/DBVersion.ts @@ -2,6 +2,31 @@ import { Migration } from 'database' import { backendLogger as logger } from '@/server/logger' +import { CONFIG } from '@/config' +import { Connection } from '@/typeorm/connection' +import { Connection as DbConnection } from 'typeorm' + +async function checkDBVersionUntil(maxRetries = 15, delayMs = 500): Promise { + for (let attempt = 1; attempt <= maxRetries; attempt++) { + try { + const connection = await Connection.getInstance() + if (connection?.isInitialized) { + const dbVersion = await checkDBVersion(CONFIG.DB_VERSION) + if (dbVersion) { + logger.info('Database connection and version check succeeded.') + return connection + } + } + } catch (err) { + logger.warn(`Attempt ${attempt}: Waiting for DB...`, err) + } + await new Promise(resolve => setTimeout(resolve, delayMs)) + } + + logger.fatal(`Fatal: Could not connect to database or version check failed after ${maxRetries} attempts.`) + throw new Error('Fatal: Database not ready.') +} + const getDBVersion = async (): Promise => { try { const [dbVersion] = await Migration.find({ order: { version: 'DESC' }, take: 1 }) @@ -25,4 +50,4 @@ const checkDBVersion = async (DB_VERSION: string): Promise => { return true } -export { checkDBVersion, getDBVersion } +export { checkDBVersion, getDBVersion, checkDBVersionUntil } diff --git a/biome.json b/biome.json index 7549528fb..0f2cc7978 100644 --- a/biome.json +++ b/biome.json @@ -4,7 +4,14 @@ "files": { "ignoreUnknown": false, "ignore": ["build", "node_modules", "coverage"], - "include": ["./src/**/*.js", "./src/**/*.ts", "./entity/**/*.ts", "./logging/**/*.ts", "./migrations/**/*.ts"] + "include": [ + "package.json", + "./src/**/*.js", + "./src/**/*.ts", + "./entity/**/*.ts", + "./logging/**/*.ts", + "./migrations/**/*.ts" + ] }, "formatter": { "enabled": true, diff --git a/bun.lock b/bun.lock index cee6b05ce..cf44149ae 100644 --- a/bun.lock +++ b/bun.lock @@ -85,49 +85,12 @@ "name": "backend", "version": "2.5.1", "dependencies": { - "@anatine/esbuild-decorators": "^0.2.19", - "apollo-server-express": "^2.25.2", - "await-semaphore": "^0.1.3", - "axios": "^0.21.1", - "class-validator": "^0.13.1", - "config-schema": "*", - "cors": "^2.8.5", "cross-env": "^7.0.3", - "database": "*", - "decimal.js-light": "^2.5.1", - "dotenv": "^10.0.0", "email-templates": "^10.0.1", - "esbuild": "^0.25.2", - "express": "^4.17.21", - "express-slow-down": "^2.0.1", - "graphql": "^15.10.1", - "graphql-parse-resolve-info": "^4.13.1", - "graphql-request": "5.0.0", - "graphql-type-json": "0.3.2", - "helmet": "^5.1.1", - "i18n": "^0.15.1", - "joi": "^17.13.3", - "jose": "^4.14.4", - "lodash.clonedeep": "^4.5.0", - "log4js": "^6.7.1", - "mkdirp": "^3.0.1", - "ncp": "^2.0.0", - "nodemailer": "^6.6.5", - "openai": "^4.87.3", - "pug": "^3.0.2", - "random-bigint": "^0.0.1", - "reflect-metadata": "^0.1.13", "sodium-native": "^3.4.1", - "ts-node": "^10.9.2", - "tsconfig-paths": "^4.1.1", - "type-graphql": "^1.1.1", - "typed-rest-client": "^1.8.11", - "typeorm": "^0.3.16", - "uuid": "^8.3.2", - "workerpool": "^9.2.0", - "xregexp": "^5.1.1", }, "devDependencies": { + "@anatine/esbuild-decorators": "^0.2.19", "@biomejs/biome": "1.9.4", "@swc/cli": "^0.7.3", "@swc/core": "^1.11.24", @@ -142,16 +105,53 @@ "@types/nodemailer": "^6.4.4", "@types/sodium-native": "^2.3.5", "@types/uuid": "^8.3.4", + "apollo-server-express": "^2.25.2", "apollo-server-testing": "^2.25.2", + "await-semaphore": "^0.1.3", + "axios": "^0.21.1", + "class-validator": "^0.13.1", + "config-schema": "*", + "cors": "^2.8.5", + "database": "*", + "decimal.js-light": "^2.5.1", + "dotenv": "^10.0.0", + "esbuild": "^0.25.2", + "express": "^4.17.21", + "express-slow-down": "^2.0.1", "faker": "^5.5.3", + "graphql": "^15.10.1", + "graphql-parse-resolve-info": "^4.13.1", + "graphql-request": "5.0.0", "graphql-tag": "^2.12.6", + "graphql-type-json": "0.3.2", + "helmet": "^5.1.1", + "i18n": "^0.15.1", "jest": "27.2.4", + "joi": "^17.13.3", + "jose": "^4.14.4", "klicktipp-api": "^1.0.2", + "lodash.clonedeep": "^4.5.0", + "log4js": "^6.7.1", + "mkdirp": "^3.0.1", + "ncp": "^2.0.0", + "nodemailer": "^6.6.5", "nodemon": "^2.0.7", + "openai": "^4.87.3", "prettier": "^3.5.3", + "pug": "^3.0.2", + "random-bigint": "^0.0.1", + "reflect-metadata": "^0.1.13", "regenerator-runtime": "^0.14.1", "ts-jest": "27.0.5", + "ts-node": "^10.9.2", + "tsconfig-paths": "^4.1.1", + "type-graphql": "^1.1.1", + "typed-rest-client": "^1.8.11", + "typeorm": "^0.3.16", "typescript": "^4.9.5", + "uuid": "^8.3.2", + "workerpool": "^9.2.0", + "xregexp": "^5.1.1", }, }, "config-schema": { @@ -228,33 +228,11 @@ "name": "federation", "version": "2.5.1", "dependencies": { - "@anatine/esbuild-decorators": "^0.2.19", - "apollo-server-express": "^2.25.2", - "await-semaphore": "0.1.3", - "class-validator": "^0.13.2", - "config-schema": "*", - "cors": "2.8.5", "cross-env": "^7.0.3", - "database": "*", - "decimal.js-light": "^2.5.1", - "dotenv": "10.0.0", - "express": "^4.17.21", - "express-slow-down": "^2.0.1", - "graphql": "15.10.1", - "graphql-request": "5.0.0", - "graphql-scalars": "^1.24.2", - "helmet": "^7.1.0", - "joi": "^17.13.3", - "lodash.clonedeep": "^4.5.0", - "log4js": "^6.7.1", - "reflect-metadata": "^0.1.13", - "sodium-native": "^3.3.0", - "tsconfig-paths": "^4.1.1", - "type-graphql": "^1.1.1", - "typeorm": "^0.3.16", - "uuid": "8.3.2", + "sodium-native": "^3.4.1", }, "devDependencies": { + "@anatine/esbuild-decorators": "^0.2.19", "@biomejs/biome": "1.9.4", "@swc/cli": "^0.7.3", "@swc/core": "^1.11.24", @@ -265,13 +243,35 @@ "@types/node": "^17.0.21", "@types/sodium-native": "^2.3.5", "@types/uuid": "^8.3.4", + "apollo-server-express": "^2.25.2", "apollo-server-testing": "2.25.2", + "await-semaphore": "0.1.3", + "class-validator": "^0.13.2", + "config-schema": "*", + "cors": "2.8.5", + "database": "*", + "decimal.js-light": "^2.5.1", + "dotenv": "10.0.0", + "express": "^4.17.21", + "express-slow-down": "^2.0.1", + "graphql": "15.10.1", + "graphql-request": "5.0.0", + "graphql-scalars": "^1.24.2", "graphql-tag": "^2.12.6", + "helmet": "^7.1.0", "jest": "27.2.4", + "joi": "^17.13.3", + "lodash.clonedeep": "^4.5.0", + "log4js": "^6.7.1", "nodemon": "^2.0.7", "prettier": "^3.5.3", + "reflect-metadata": "^0.1.13", "ts-jest": "27.0.5", + "tsconfig-paths": "^4.1.1", + "type-graphql": "^1.1.1", + "typeorm": "^0.3.16", "typescript": "^4.9.5", + "uuid": "8.3.2", }, }, "frontend": { @@ -387,33 +387,33 @@ "@apollographql/graphql-upload-8-fork": ["@apollographql/graphql-upload-8-fork@8.1.4", "", { "dependencies": { "@types/express": "*", "@types/fs-capacitor": "^2.0.0", "@types/koa": "*", "busboy": "^0.3.1", "fs-capacitor": "^2.0.4", "http-errors": "^1.7.3", "object-path": "^0.11.4" }, "peerDependencies": { "graphql": "0.13.1 - 15" } }, "sha512-lHAj/PUegYu02zza9Pg0bQQYH5I0ah1nyIzu2YIqOv41P0vu3GCBISAmQCfFHThK7N3dy7dLFPhoKcXlXRLPoQ=="], - "@asamuzakjp/css-color": ["@asamuzakjp/css-color@3.1.5", "", { "dependencies": { "@csstools/css-calc": "^2.1.3", "@csstools/css-color-parser": "^3.0.9", "@csstools/css-parser-algorithms": "^3.0.4", "@csstools/css-tokenizer": "^3.0.3", "lru-cache": "^10.4.3" } }, "sha512-w7AmVyTTiU41fNLsFDf+gA2Dwtbx2EJtn2pbJNAGSRAg50loXy1uLXA3hEpD8+eydcomTurw09tq5/AyceCaGg=="], + "@asamuzakjp/css-color": ["@asamuzakjp/css-color@3.1.7", "", { "dependencies": { "@csstools/css-calc": "^2.1.3", "@csstools/css-color-parser": "^3.0.9", "@csstools/css-parser-algorithms": "^3.0.4", "@csstools/css-tokenizer": "^3.0.3", "lru-cache": "^10.4.3" } }, "sha512-Ok5fYhtwdyJQmU1PpEv6Si7Y+A4cYb8yNM9oiIJC9TzXPMuN9fvdonKJqcnz9TbFqV6bQ8z0giRq0iaOpGZV2g=="], - "@babel/code-frame": ["@babel/code-frame@7.26.2", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.25.9", "js-tokens": "^4.0.0", "picocolors": "^1.0.0" } }, "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ=="], + "@babel/code-frame": ["@babel/code-frame@7.27.1", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg=="], - "@babel/compat-data": ["@babel/compat-data@7.26.8", "", {}, "sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ=="], + "@babel/compat-data": ["@babel/compat-data@7.27.1", "", {}, "sha512-Q+E+rd/yBzNQhXkG+zQnF58e4zoZfBedaxwzPmicKsiK3nt8iJYrSrDbjwFFDGC4f+rPafqRaPH6TsDoSvMf7A=="], - "@babel/core": ["@babel/core@7.26.10", "", { "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.26.2", "@babel/generator": "^7.26.10", "@babel/helper-compilation-targets": "^7.26.5", "@babel/helper-module-transforms": "^7.26.0", "@babel/helpers": "^7.26.10", "@babel/parser": "^7.26.10", "@babel/template": "^7.26.9", "@babel/traverse": "^7.26.10", "@babel/types": "^7.26.10", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ=="], + "@babel/core": ["@babel/core@7.27.1", "", { "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.27.1", "@babel/helper-compilation-targets": "^7.27.1", "@babel/helper-module-transforms": "^7.27.1", "@babel/helpers": "^7.27.1", "@babel/parser": "^7.27.1", "@babel/template": "^7.27.1", "@babel/traverse": "^7.27.1", "@babel/types": "^7.27.1", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-IaaGWsQqfsQWVLqMn9OB92MNN7zukfVA4s7KKAI0KfrrDsZ0yhi5uV4baBuLuN7n3vsZpwP8asPPcVwApxvjBQ=="], - "@babel/generator": ["@babel/generator@7.27.0", "", { "dependencies": { "@babel/parser": "^7.27.0", "@babel/types": "^7.27.0", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^3.0.2" } }, "sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw=="], + "@babel/generator": ["@babel/generator@7.27.1", "", { "dependencies": { "@babel/parser": "^7.27.1", "@babel/types": "^7.27.1", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^3.0.2" } }, "sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w=="], - "@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.27.0", "", { "dependencies": { "@babel/compat-data": "^7.26.8", "@babel/helper-validator-option": "^7.25.9", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA=="], + "@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.27.1", "", { "dependencies": { "@babel/compat-data": "^7.27.1", "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-2YaDd/Rd9E598B5+WIc8wJPmWETiiJXFYVE60oX8FDohv7rAUU3CQj+A1MgeEmcsk2+dQuEjIe/GDvig0SqL4g=="], - "@babel/helper-module-imports": ["@babel/helper-module-imports@7.25.9", "", { "dependencies": { "@babel/traverse": "^7.25.9", "@babel/types": "^7.25.9" } }, "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw=="], + "@babel/helper-module-imports": ["@babel/helper-module-imports@7.27.1", "", { "dependencies": { "@babel/traverse": "^7.27.1", "@babel/types": "^7.27.1" } }, "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w=="], - "@babel/helper-module-transforms": ["@babel/helper-module-transforms@7.26.0", "", { "dependencies": { "@babel/helper-module-imports": "^7.25.9", "@babel/helper-validator-identifier": "^7.25.9", "@babel/traverse": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw=="], + "@babel/helper-module-transforms": ["@babel/helper-module-transforms@7.27.1", "", { "dependencies": { "@babel/helper-module-imports": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1", "@babel/traverse": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-9yHn519/8KvTU5BjTVEEeIM3w9/2yXNKoD82JifINImhpKkARMJKPP59kLo+BafpdN5zgNeIcS4jsGDmd3l58g=="], - "@babel/helper-plugin-utils": ["@babel/helper-plugin-utils@7.26.5", "", {}, "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg=="], + "@babel/helper-plugin-utils": ["@babel/helper-plugin-utils@7.27.1", "", {}, "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw=="], - "@babel/helper-string-parser": ["@babel/helper-string-parser@7.25.9", "", {}, "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA=="], + "@babel/helper-string-parser": ["@babel/helper-string-parser@7.27.1", "", {}, "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="], - "@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.25.9", "", {}, "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ=="], + "@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.27.1", "", {}, "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow=="], - "@babel/helper-validator-option": ["@babel/helper-validator-option@7.25.9", "", {}, "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw=="], + "@babel/helper-validator-option": ["@babel/helper-validator-option@7.27.1", "", {}, "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg=="], - "@babel/helpers": ["@babel/helpers@7.27.0", "", { "dependencies": { "@babel/template": "^7.27.0", "@babel/types": "^7.27.0" } }, "sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg=="], + "@babel/helpers": ["@babel/helpers@7.27.1", "", { "dependencies": { "@babel/template": "^7.27.1", "@babel/types": "^7.27.1" } }, "sha512-FCvFTm0sWV8Fxhpp2McP5/W53GPllQ9QeQ7SiqGWjMf/LVG07lFa5+pgK05IRhVwtvafT22KF+ZSnM9I545CvQ=="], - "@babel/parser": ["@babel/parser@7.27.0", "", { "dependencies": { "@babel/types": "^7.27.0" }, "bin": "./bin/babel-parser.js" }, "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg=="], + "@babel/parser": ["@babel/parser@7.27.1", "", { "dependencies": { "@babel/types": "^7.27.1" }, "bin": "./bin/babel-parser.js" }, "sha512-I0dZ3ZpCrJ1c04OqlNsQcKiZlsrXf/kkE4FXzID9rIOYICsAbA8mMDzhW/luRNAHdCNt7os/u8wenklZDlUVUQ=="], "@babel/plugin-syntax-async-generators": ["@babel/plugin-syntax-async-generators@7.8.4", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw=="], @@ -423,7 +423,7 @@ "@babel/plugin-syntax-class-static-block": ["@babel/plugin-syntax-class-static-block@7.14.5", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw=="], - "@babel/plugin-syntax-import-attributes": ["@babel/plugin-syntax-import-attributes@7.26.0", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A=="], + "@babel/plugin-syntax-import-attributes": ["@babel/plugin-syntax-import-attributes@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww=="], "@babel/plugin-syntax-import-meta": ["@babel/plugin-syntax-import-meta@7.10.4", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g=="], @@ -445,17 +445,17 @@ "@babel/plugin-syntax-top-level-await": ["@babel/plugin-syntax-top-level-await@7.14.5", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw=="], - "@babel/plugin-syntax-typescript": ["@babel/plugin-syntax-typescript@7.25.9", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ=="], + "@babel/plugin-syntax-typescript": ["@babel/plugin-syntax-typescript@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ=="], - "@babel/runtime": ["@babel/runtime@7.27.0", "", { "dependencies": { "regenerator-runtime": "^0.14.0" } }, "sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw=="], + "@babel/runtime": ["@babel/runtime@7.27.1", "", {}, "sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog=="], - "@babel/runtime-corejs3": ["@babel/runtime-corejs3@7.27.0", "", { "dependencies": { "core-js-pure": "^3.30.2", "regenerator-runtime": "^0.14.0" } }, "sha512-UWjX6t+v+0ckwZ50Y5ShZLnlk95pP5MyW/pon9tiYzl3+18pkTHTFNTKr7rQbfRXPkowt2QAn30o1b6oswszew=="], + "@babel/runtime-corejs3": ["@babel/runtime-corejs3@7.27.1", "", { "dependencies": { "core-js-pure": "^3.30.2" } }, "sha512-909rVuj3phpjW6y0MCXAZ5iNeORePa6ldJvp2baWGcTjwqbBDDz6xoS5JHJ7lS88NlwLYj07ImL/8IUMtDZzTA=="], - "@babel/template": ["@babel/template@7.27.0", "", { "dependencies": { "@babel/code-frame": "^7.26.2", "@babel/parser": "^7.27.0", "@babel/types": "^7.27.0" } }, "sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA=="], + "@babel/template": ["@babel/template@7.27.1", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/parser": "^7.27.1", "@babel/types": "^7.27.1" } }, "sha512-Fyo3ghWMqkHHpHQCoBs2VnYjR4iWFFjguTDEqA5WgZDOrFesVjMhMM2FSqTKSoUSDO1VQtavj8NFpdRBEvJTtg=="], - "@babel/traverse": ["@babel/traverse@7.27.0", "", { "dependencies": { "@babel/code-frame": "^7.26.2", "@babel/generator": "^7.27.0", "@babel/parser": "^7.27.0", "@babel/template": "^7.27.0", "@babel/types": "^7.27.0", "debug": "^4.3.1", "globals": "^11.1.0" } }, "sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA=="], + "@babel/traverse": ["@babel/traverse@7.27.1", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.27.1", "@babel/parser": "^7.27.1", "@babel/template": "^7.27.1", "@babel/types": "^7.27.1", "debug": "^4.3.1", "globals": "^11.1.0" } }, "sha512-ZCYtZciz1IWJB4U61UPu4KEaqyfj+r5T1Q5mqPo+IBpcG9kHv30Z0aD8LXPgC1trYa6rK0orRyAhqUgk4MjmEg=="], - "@babel/types": ["@babel/types@7.27.0", "", { "dependencies": { "@babel/helper-string-parser": "^7.25.9", "@babel/helper-validator-identifier": "^7.25.9" } }, "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg=="], + "@babel/types": ["@babel/types@7.27.1", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" } }, "sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q=="], "@bcoe/v8-coverage": ["@bcoe/v8-coverage@0.2.3", "", {}, "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw=="], @@ -495,57 +495,57 @@ "@dual-bundle/import-meta-resolve": ["@dual-bundle/import-meta-resolve@4.1.0", "", {}, "sha512-+nxncfwHM5SgAtrVzgpzJOI1ol0PkumhVo469KCf9lUi21IGcY90G98VuHm9VRrUypmAzawAHO9bs6hqeADaVg=="], - "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.3", "", { "os": "aix", "cpu": "ppc64" }, "sha512-W8bFfPA8DowP8l//sxjJLSLkD8iEjMc7cBVyP+u4cEv9sM7mdUCkgsj+t0n/BWPFtv7WWCN5Yzj0N6FJNUUqBQ=="], + "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.4", "", { "os": "aix", "cpu": "ppc64" }, "sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q=="], - "@esbuild/android-arm": ["@esbuild/android-arm@0.25.3", "", { "os": "android", "cpu": "arm" }, "sha512-PuwVXbnP87Tcff5I9ngV0lmiSu40xw1At6i3GsU77U7cjDDB4s0X2cyFuBiDa1SBk9DnvWwnGvVaGBqoFWPb7A=="], + "@esbuild/android-arm": ["@esbuild/android-arm@0.25.4", "", { "os": "android", "cpu": "arm" }, "sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ=="], - "@esbuild/android-arm64": ["@esbuild/android-arm64@0.25.3", "", { "os": "android", "cpu": "arm64" }, "sha512-XelR6MzjlZuBM4f5z2IQHK6LkK34Cvv6Rj2EntER3lwCBFdg6h2lKbtRjpTTsdEjD/WSe1q8UyPBXP1x3i/wYQ=="], + "@esbuild/android-arm64": ["@esbuild/android-arm64@0.25.4", "", { "os": "android", "cpu": "arm64" }, "sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A=="], - "@esbuild/android-x64": ["@esbuild/android-x64@0.25.3", "", { "os": "android", "cpu": "x64" }, "sha512-ogtTpYHT/g1GWS/zKM0cc/tIebFjm1F9Aw1boQ2Y0eUQ+J89d0jFY//s9ei9jVIlkYi8AfOjiixcLJSGNSOAdQ=="], + "@esbuild/android-x64": ["@esbuild/android-x64@0.25.4", "", { "os": "android", "cpu": "x64" }, "sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ=="], - "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.25.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-eESK5yfPNTqpAmDfFWNsOhmIOaQA59tAcF/EfYvo5/QWQCzXn5iUSOnqt3ra3UdzBv073ykTtmeLJZGt3HhA+w=="], + "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.25.4", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g=="], - "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.25.3", "", { "os": "darwin", "cpu": "x64" }, "sha512-Kd8glo7sIZtwOLcPbW0yLpKmBNWMANZhrC1r6K++uDR2zyzb6AeOYtI6udbtabmQpFaxJ8uduXMAo1gs5ozz8A=="], + "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.25.4", "", { "os": "darwin", "cpu": "x64" }, "sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A=="], - "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.25.3", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-EJiyS70BYybOBpJth3M0KLOus0n+RRMKTYzhYhFeMwp7e/RaajXvP+BWlmEXNk6uk+KAu46j/kaQzr6au+JcIw=="], + "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.25.4", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ=="], - "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.25.3", "", { "os": "freebsd", "cpu": "x64" }, "sha512-Q+wSjaLpGxYf7zC0kL0nDlhsfuFkoN+EXrx2KSB33RhinWzejOd6AvgmP5JbkgXKmjhmpfgKZq24pneodYqE8Q=="], + "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.25.4", "", { "os": "freebsd", "cpu": "x64" }, "sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ=="], - "@esbuild/linux-arm": ["@esbuild/linux-arm@0.25.3", "", { "os": "linux", "cpu": "arm" }, "sha512-dUOVmAUzuHy2ZOKIHIKHCm58HKzFqd+puLaS424h6I85GlSDRZIA5ycBixb3mFgM0Jdh+ZOSB6KptX30DD8YOQ=="], + "@esbuild/linux-arm": ["@esbuild/linux-arm@0.25.4", "", { "os": "linux", "cpu": "arm" }, "sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ=="], - "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.25.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-xCUgnNYhRD5bb1C1nqrDV1PfkwgbswTTBRbAd8aH5PhYzikdf/ddtsYyMXFfGSsb/6t6QaPSzxtbfAZr9uox4A=="], + "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.25.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ=="], - "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.25.3", "", { "os": "linux", "cpu": "ia32" }, "sha512-yplPOpczHOO4jTYKmuYuANI3WhvIPSVANGcNUeMlxH4twz/TeXuzEP41tGKNGWJjuMhotpGabeFYGAOU2ummBw=="], + "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.25.4", "", { "os": "linux", "cpu": "ia32" }, "sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ=="], - "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.25.3", "", { "os": "linux", "cpu": "none" }, "sha512-P4BLP5/fjyihmXCELRGrLd793q/lBtKMQl8ARGpDxgzgIKJDRJ/u4r1A/HgpBpKpKZelGct2PGI4T+axcedf6g=="], + "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.25.4", "", { "os": "linux", "cpu": "none" }, "sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA=="], - "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.25.3", "", { "os": "linux", "cpu": "none" }, "sha512-eRAOV2ODpu6P5divMEMa26RRqb2yUoYsuQQOuFUexUoQndm4MdpXXDBbUoKIc0iPa4aCO7gIhtnYomkn2x+bag=="], + "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.25.4", "", { "os": "linux", "cpu": "none" }, "sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg=="], - "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.25.3", "", { "os": "linux", "cpu": "ppc64" }, "sha512-ZC4jV2p7VbzTlnl8nZKLcBkfzIf4Yad1SJM4ZMKYnJqZFD4rTI+pBG65u8ev4jk3/MPwY9DvGn50wi3uhdaghg=="], + "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.25.4", "", { "os": "linux", "cpu": "ppc64" }, "sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag=="], - "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.25.3", "", { "os": "linux", "cpu": "none" }, "sha512-LDDODcFzNtECTrUUbVCs6j9/bDVqy7DDRsuIXJg6so+mFksgwG7ZVnTruYi5V+z3eE5y+BJZw7VvUadkbfg7QA=="], + "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.25.4", "", { "os": "linux", "cpu": "none" }, "sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA=="], - "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.25.3", "", { "os": "linux", "cpu": "s390x" }, "sha512-s+w/NOY2k0yC2p9SLen+ymflgcpRkvwwa02fqmAwhBRI3SC12uiS10edHHXlVWwfAagYSY5UpmT/zISXPMW3tQ=="], + "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.25.4", "", { "os": "linux", "cpu": "s390x" }, "sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g=="], - "@esbuild/linux-x64": ["@esbuild/linux-x64@0.25.3", "", { "os": "linux", "cpu": "x64" }, "sha512-nQHDz4pXjSDC6UfOE1Fw9Q8d6GCAd9KdvMZpfVGWSJztYCarRgSDfOVBY5xwhQXseiyxapkiSJi/5/ja8mRFFA=="], + "@esbuild/linux-x64": ["@esbuild/linux-x64@0.25.4", "", { "os": "linux", "cpu": "x64" }, "sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA=="], - "@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.25.3", "", { "os": "none", "cpu": "arm64" }, "sha512-1QaLtOWq0mzK6tzzp0jRN3eccmN3hezey7mhLnzC6oNlJoUJz4nym5ZD7mDnS/LZQgkrhEbEiTn515lPeLpgWA=="], + "@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.25.4", "", { "os": "none", "cpu": "arm64" }, "sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ=="], - "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.25.3", "", { "os": "none", "cpu": "x64" }, "sha512-i5Hm68HXHdgv8wkrt+10Bc50zM0/eonPb/a/OFVfB6Qvpiirco5gBA5bz7S2SHuU+Y4LWn/zehzNX14Sp4r27g=="], + "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.25.4", "", { "os": "none", "cpu": "x64" }, "sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw=="], - "@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.25.3", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-zGAVApJEYTbOC6H/3QBr2mq3upG/LBEXr85/pTtKiv2IXcgKV0RT0QA/hSXZqSvLEpXeIxah7LczB4lkiYhTAQ=="], + "@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.25.4", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A=="], - "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.25.3", "", { "os": "openbsd", "cpu": "x64" }, "sha512-fpqctI45NnCIDKBH5AXQBsD0NDPbEFczK98hk/aa6HJxbl+UtLkJV2+Bvy5hLSLk3LHmqt0NTkKNso1A9y1a4w=="], + "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.25.4", "", { "os": "openbsd", "cpu": "x64" }, "sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw=="], - "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.25.3", "", { "os": "sunos", "cpu": "x64" }, "sha512-ROJhm7d8bk9dMCUZjkS8fgzsPAZEjtRJqCAmVgB0gMrvG7hfmPmz9k1rwO4jSiblFjYmNvbECL9uhaPzONMfgA=="], + "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.25.4", "", { "os": "sunos", "cpu": "x64" }, "sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q=="], - "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.25.3", "", { "os": "win32", "cpu": "arm64" }, "sha512-YWcow8peiHpNBiIXHwaswPnAXLsLVygFwCB3A7Bh5jRkIBFWHGmNQ48AlX4xDvQNoMZlPYzjVOQDYEzWCqufMQ=="], + "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.25.4", "", { "os": "win32", "cpu": "arm64" }, "sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ=="], - "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.25.3", "", { "os": "win32", "cpu": "ia32" }, "sha512-qspTZOIGoXVS4DpNqUYUs9UxVb04khS1Degaw/MnfMe7goQ3lTfQ13Vw4qY/Nj0979BGvMRpAYbs/BAxEvU8ew=="], + "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.25.4", "", { "os": "win32", "cpu": "ia32" }, "sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg=="], - "@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.3", "", { "os": "win32", "cpu": "x64" }, "sha512-ICgUR+kPimx0vvRzf+N/7L7tVSQeE3BYY+NhHRHXS1kBuPO7z2+7ea2HbhDyZdTephgvNvKrlDDKUexuCVBVvg=="], + "@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.4", "", { "os": "win32", "cpu": "x64" }, "sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ=="], - "@eslint-community/eslint-utils": ["@eslint-community/eslint-utils@4.6.1", "", { "dependencies": { "eslint-visitor-keys": "^3.4.3" }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, "sha512-KTsJMmobmbrFLe3LDh0PC2FXpcSYJt/MLjlkh/9LEnmKYLSYmT/0EW9JWANjeoemiuZrmogti0tW5Ch+qNUYDw=="], + "@eslint-community/eslint-utils": ["@eslint-community/eslint-utils@4.7.0", "", { "dependencies": { "eslint-visitor-keys": "^3.4.3" }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw=="], "@eslint-community/regexpp": ["@eslint-community/regexpp@4.12.1", "", {}, "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ=="], @@ -573,9 +573,9 @@ "@hyperswarm/secret-stream": ["@hyperswarm/secret-stream@6.8.1", "", { "dependencies": { "b4a": "^1.1.0", "hypercore-crypto": "^3.3.1", "noise-curve-ed": "^2.0.1", "noise-handshake": "^4.0.0", "sodium-secretstream": "^1.1.0", "sodium-universal": "^5.0.0", "streamx": "^2.14.0", "timeout-refresh": "^2.0.0", "unslab": "^1.3.0" } }, "sha512-F3fr8CKB6za9Ac7ifjgAe07qnnesl5kS0MtLsyKxA1Og8E+FZykdwLpgoLjnEa7G6E1L56lASLr42E4kd20sog=="], - "@iconify-json/arcticons": ["@iconify-json/arcticons@1.2.23", "", { "dependencies": { "@iconify/types": "*" } }, "sha512-j7VE1opFBApOxZeEcrSKhIgpUa6GHesuUgIBoWOoyRaslMqIKZh8ob7KGKRiZyB+R6+rxbEo3/6l7GBl7Ls7jw=="], + "@iconify-json/arcticons": ["@iconify-json/arcticons@1.2.24", "", { "dependencies": { "@iconify/types": "*" } }, "sha512-l5mQELXr9Sv87DPmEcUJ3Ub1qNbRKpr4ax+0LoBbYmHU+osTdJ3FNgTH04/VKMKp2+95MNbA5Tt6gwgPkj5FNQ=="], - "@iconify-json/bi": ["@iconify-json/bi@1.2.2", "", { "dependencies": { "@iconify/types": "*" } }, "sha512-f/Wm+RTdBosw3cI/gmg5uSFmdumkw2thUk4qVFS56jTerdal6wqWnWAbRTSJJ/vhH9/y16pRKnvE8F2+M23dzw=="], + "@iconify-json/bi": ["@iconify-json/bi@1.2.3", "", { "dependencies": { "@iconify/types": "*" } }, "sha512-pDNU9mIKDfvVEGxWsExiuVEqyhyJ5q5bOwBTgtM7I2hGk9ACQaiogMaA6lBRJ82sJPj+Uv21Oi+ujThGnMW2jA=="], "@iconify-json/fa": ["@iconify-json/fa@1.2.1", "", { "dependencies": { "@iconify/types": "*" } }, "sha512-aY2+tQNWq5ch+ShtAz3KKbNrFfwf4BPrXvyN7S4/lcf6Wms+kIxsd7C7KortzHZhoBnbhVN+qo+YUWLW7rLs9Q=="], @@ -585,7 +585,7 @@ "@iconify-json/mdi": ["@iconify-json/mdi@1.2.3", "", { "dependencies": { "@iconify/types": "*" } }, "sha512-O3cLwbDOK7NNDf2ihaQOH5F9JglnulNDFV7WprU2dSoZu3h3cWH//h74uQAB87brHmvFVxIOkuBX2sZSzYhScg=="], - "@iconify/json": ["@iconify/json@2.2.332", "", { "dependencies": { "@iconify/types": "*", "pathe": "^1.1.2" } }, "sha512-bIaEG2ecvYiq/lwBF0KIOCEW5zMyBx1WOmBubetZwvKNs+gXbV3ocLCjT3xWBFSD4v29BRpqdtoVOpUlIfDK+g=="], + "@iconify/json": ["@iconify/json@2.2.335", "", { "dependencies": { "@iconify/types": "*", "pathe": "^1.1.2" } }, "sha512-EOUM9843cxiwA19cORaz6t+fpn1LhZr5la+Oot7gzt8M5SRjOqvXfMZKcc/VkytRHaaNd2y0dKhA8H7/sP1stQ=="], "@iconify/types": ["@iconify/types@2.0.0", "", {}, "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg=="], @@ -709,7 +709,7 @@ "@nodelib/fs.walk": ["@nodelib/fs.walk@1.2.8", "", { "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg=="], - "@nuxt/kit": ["@nuxt/kit@3.17.0", "", { "dependencies": { "c12": "^3.0.3", "consola": "^3.4.2", "defu": "^6.1.4", "destr": "^2.0.5", "errx": "^0.1.0", "exsolve": "^1.0.5", "ignore": "^7.0.4", "jiti": "^2.4.2", "klona": "^2.0.6", "knitwork": "^1.2.0", "mlly": "^1.7.4", "ohash": "^2.0.11", "pathe": "^2.0.3", "pkg-types": "^2.1.0", "scule": "^1.3.0", "semver": "^7.7.1", "std-env": "^3.9.0", "tinyglobby": "^0.2.13", "ufo": "^1.6.1", "unctx": "^2.4.1", "unimport": "^5.0.0", "untyped": "^2.0.0" } }, "sha512-+aS+Enqqo2qSbyl0APPPxX8BPYsaRcZ8dFRbpCOfK38lv2ckoHKCWNkT8L/7q2w+1pjNZaxlUoW9Mku1vdEb/A=="], + "@nuxt/kit": ["@nuxt/kit@3.17.2", "", { "dependencies": { "c12": "^3.0.3", "consola": "^3.4.2", "defu": "^6.1.4", "destr": "^2.0.5", "errx": "^0.1.0", "exsolve": "^1.0.5", "ignore": "^7.0.4", "jiti": "^2.4.2", "klona": "^2.0.6", "knitwork": "^1.2.0", "mlly": "^1.7.4", "ohash": "^2.0.11", "pathe": "^2.0.3", "pkg-types": "^2.1.0", "scule": "^1.3.0", "semver": "^7.7.1", "std-env": "^3.9.0", "tinyglobby": "^0.2.13", "ufo": "^1.6.1", "unctx": "^2.4.1", "unimport": "^5.0.1", "untyped": "^2.0.0" } }, "sha512-Mz2Ni8iUwty5LBs3LepUL43rI2xXbuAz3Cqq37L9frOD2QI2tQUtasYaSoKk6U7nvYzuW2z/2b3YOLkMNi/k2w=="], "@one-ini/wasm": ["@one-ini/wasm@0.1.1", "", {}, "sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw=="], @@ -769,45 +769,45 @@ "@rollup/pluginutils": ["@rollup/pluginutils@5.1.4", "", { "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", "picomatch": "^4.0.2" }, "peerDependencies": { "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" }, "optionalPeers": ["rollup"] }, "sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ=="], - "@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.40.1", "", { "os": "android", "cpu": "arm" }, "sha512-kxz0YeeCrRUHz3zyqvd7n+TVRlNyTifBsmnmNPtk3hQURUyG9eAB+usz6DAwagMusjx/zb3AjvDUvhFGDAexGw=="], + "@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.40.2", "", { "os": "android", "cpu": "arm" }, "sha512-JkdNEq+DFxZfUwxvB58tHMHBHVgX23ew41g1OQinthJ+ryhdRk67O31S7sYw8u2lTjHUPFxwar07BBt1KHp/hg=="], - "@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.40.1", "", { "os": "android", "cpu": "arm64" }, "sha512-PPkxTOisoNC6TpnDKatjKkjRMsdaWIhyuMkA4UsBXT9WEZY4uHezBTjs6Vl4PbqQQeu6oION1w2voYZv9yquCw=="], + "@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.40.2", "", { "os": "android", "cpu": "arm64" }, "sha512-13unNoZ8NzUmnndhPTkWPWbX3vtHodYmy+I9kuLxN+F+l+x3LdVF7UCu8TWVMt1POHLh6oDHhnOA04n8oJZhBw=="], - "@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.40.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-VWXGISWFY18v/0JyNUy4A46KCFCb9NVsH+1100XP31lud+TzlezBbz24CYzbnA4x6w4hx+NYCXDfnvDVO6lcAA=="], + "@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.40.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Gzf1Hn2Aoe8VZzevHostPX23U7N5+4D36WJNHK88NZHCJr7aVMG4fadqkIf72eqVPGjGc0HJHNuUaUcxiR+N/w=="], - "@rollup/rollup-darwin-x64": ["@rollup/rollup-darwin-x64@4.40.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-nIwkXafAI1/QCS7pxSpv/ZtFW6TXcNUEHAIA9EIyw5OzxJZQ1YDrX+CL6JAIQgZ33CInl1R6mHet9Y/UZTg2Bw=="], + "@rollup/rollup-darwin-x64": ["@rollup/rollup-darwin-x64@4.40.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-47N4hxa01a4x6XnJoskMKTS8XZ0CZMd8YTbINbi+w03A2w4j1RTlnGHOz/P0+Bg1LaVL6ufZyNprSg+fW5nYQQ=="], - "@rollup/rollup-freebsd-arm64": ["@rollup/rollup-freebsd-arm64@4.40.1", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-BdrLJ2mHTrIYdaS2I99mriyJfGGenSaP+UwGi1kB9BLOCu9SR8ZpbkmmalKIALnRw24kM7qCN0IOm6L0S44iWw=="], + "@rollup/rollup-freebsd-arm64": ["@rollup/rollup-freebsd-arm64@4.40.2", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-8t6aL4MD+rXSHHZUR1z19+9OFJ2rl1wGKvckN47XFRVO+QL/dUSpKA2SLRo4vMg7ELA8pzGpC+W9OEd1Z/ZqoQ=="], - "@rollup/rollup-freebsd-x64": ["@rollup/rollup-freebsd-x64@4.40.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-VXeo/puqvCG8JBPNZXZf5Dqq7BzElNJzHRRw3vjBE27WujdzuOPecDPc/+1DcdcTptNBep3861jNq0mYkT8Z6Q=="], + "@rollup/rollup-freebsd-x64": ["@rollup/rollup-freebsd-x64@4.40.2", "", { "os": "freebsd", "cpu": "x64" }, "sha512-C+AyHBzfpsOEYRFjztcYUFsH4S7UsE9cDtHCtma5BK8+ydOZYgMmWg1d/4KBytQspJCld8ZIujFMAdKG1xyr4Q=="], - "@rollup/rollup-linux-arm-gnueabihf": ["@rollup/rollup-linux-arm-gnueabihf@4.40.1", "", { "os": "linux", "cpu": "arm" }, "sha512-ehSKrewwsESPt1TgSE/na9nIhWCosfGSFqv7vwEtjyAqZcvbGIg4JAcV7ZEh2tfj/IlfBeZjgOXm35iOOjadcg=="], + "@rollup/rollup-linux-arm-gnueabihf": ["@rollup/rollup-linux-arm-gnueabihf@4.40.2", "", { "os": "linux", "cpu": "arm" }, "sha512-de6TFZYIvJwRNjmW3+gaXiZ2DaWL5D5yGmSYzkdzjBDS3W+B9JQ48oZEsmMvemqjtAFzE16DIBLqd6IQQRuG9Q=="], - "@rollup/rollup-linux-arm-musleabihf": ["@rollup/rollup-linux-arm-musleabihf@4.40.1", "", { "os": "linux", "cpu": "arm" }, "sha512-m39iO/aaurh5FVIu/F4/Zsl8xppd76S4qoID8E+dSRQvTyZTOI2gVk3T4oqzfq1PtcvOfAVlwLMK3KRQMaR8lg=="], + "@rollup/rollup-linux-arm-musleabihf": ["@rollup/rollup-linux-arm-musleabihf@4.40.2", "", { "os": "linux", "cpu": "arm" }, "sha512-urjaEZubdIkacKc930hUDOfQPysezKla/O9qV+O89enqsqUmQm8Xj8O/vh0gHg4LYfv7Y7UsE3QjzLQzDYN1qg=="], - "@rollup/rollup-linux-arm64-gnu": ["@rollup/rollup-linux-arm64-gnu@4.40.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-Y+GHnGaku4aVLSgrT0uWe2o2Rq8te9hi+MwqGF9r9ORgXhmHK5Q71N757u0F8yU1OIwUIFy6YiJtKjtyktk5hg=="], + "@rollup/rollup-linux-arm64-gnu": ["@rollup/rollup-linux-arm64-gnu@4.40.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-KlE8IC0HFOC33taNt1zR8qNlBYHj31qGT1UqWqtvR/+NuCVhfufAq9fxO8BMFC22Wu0rxOwGVWxtCMvZVLmhQg=="], - "@rollup/rollup-linux-arm64-musl": ["@rollup/rollup-linux-arm64-musl@4.40.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-jEwjn3jCA+tQGswK3aEWcD09/7M5wGwc6+flhva7dsQNRZZTe30vkalgIzV4tjkopsTS9Jd7Y1Bsj6a4lzz8gQ=="], + "@rollup/rollup-linux-arm64-musl": ["@rollup/rollup-linux-arm64-musl@4.40.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-j8CgxvfM0kbnhu4XgjnCWJQyyBOeBI1Zq91Z850aUddUmPeQvuAy6OiMdPS46gNFgy8gN1xkYyLgwLYZG3rBOg=="], - "@rollup/rollup-linux-loongarch64-gnu": ["@rollup/rollup-linux-loongarch64-gnu@4.40.1", "", { "os": "linux", "cpu": "none" }, "sha512-ySyWikVhNzv+BV/IDCsrraOAZ3UaC8SZB67FZlqVwXwnFhPihOso9rPOxzZbjp81suB1O2Topw+6Ug3JNegejQ=="], + "@rollup/rollup-linux-loongarch64-gnu": ["@rollup/rollup-linux-loongarch64-gnu@4.40.2", "", { "os": "linux", "cpu": "none" }, "sha512-Ybc/1qUampKuRF4tQXc7G7QY9YRyeVSykfK36Y5Qc5dmrIxwFhrOzqaVTNoZygqZ1ZieSWTibfFhQ5qK8jpWxw=="], - "@rollup/rollup-linux-powerpc64le-gnu": ["@rollup/rollup-linux-powerpc64le-gnu@4.40.1", "", { "os": "linux", "cpu": "ppc64" }, "sha512-BvvA64QxZlh7WZWqDPPdt0GH4bznuL6uOO1pmgPnnv86rpUpc8ZxgZwcEgXvo02GRIZX1hQ0j0pAnhwkhwPqWg=="], + "@rollup/rollup-linux-powerpc64le-gnu": ["@rollup/rollup-linux-powerpc64le-gnu@4.40.2", "", { "os": "linux", "cpu": "ppc64" }, "sha512-3FCIrnrt03CCsZqSYAOW/k9n625pjpuMzVfeI+ZBUSDT3MVIFDSPfSUgIl9FqUftxcUXInvFah79hE1c9abD+Q=="], - "@rollup/rollup-linux-riscv64-gnu": ["@rollup/rollup-linux-riscv64-gnu@4.40.1", "", { "os": "linux", "cpu": "none" }, "sha512-EQSP+8+1VuSulm9RKSMKitTav89fKbHymTf25n5+Yr6gAPZxYWpj3DzAsQqoaHAk9YX2lwEyAf9S4W8F4l3VBQ=="], + "@rollup/rollup-linux-riscv64-gnu": ["@rollup/rollup-linux-riscv64-gnu@4.40.2", "", { "os": "linux", "cpu": "none" }, "sha512-QNU7BFHEvHMp2ESSY3SozIkBPaPBDTsfVNGx3Xhv+TdvWXFGOSH2NJvhD1zKAT6AyuuErJgbdvaJhYVhVqrWTg=="], - "@rollup/rollup-linux-riscv64-musl": ["@rollup/rollup-linux-riscv64-musl@4.40.1", "", { "os": "linux", "cpu": "none" }, "sha512-n/vQ4xRZXKuIpqukkMXZt9RWdl+2zgGNx7Uda8NtmLJ06NL8jiHxUawbwC+hdSq1rrw/9CghCpEONor+l1e2gA=="], + "@rollup/rollup-linux-riscv64-musl": ["@rollup/rollup-linux-riscv64-musl@4.40.2", "", { "os": "linux", "cpu": "none" }, "sha512-5W6vNYkhgfh7URiXTO1E9a0cy4fSgfE4+Hl5agb/U1sa0kjOLMLC1wObxwKxecE17j0URxuTrYZZME4/VH57Hg=="], - "@rollup/rollup-linux-s390x-gnu": ["@rollup/rollup-linux-s390x-gnu@4.40.1", "", { "os": "linux", "cpu": "s390x" }, "sha512-h8d28xzYb98fMQKUz0w2fMc1XuGzLLjdyxVIbhbil4ELfk5/orZlSTpF/xdI9C8K0I8lCkq+1En2RJsawZekkg=="], + "@rollup/rollup-linux-s390x-gnu": ["@rollup/rollup-linux-s390x-gnu@4.40.2", "", { "os": "linux", "cpu": "s390x" }, "sha512-B7LKIz+0+p348JoAL4X/YxGx9zOx3sR+o6Hj15Y3aaApNfAshK8+mWZEf759DXfRLeL2vg5LYJBB7DdcleYCoQ=="], - "@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.40.1", "", { "os": "linux", "cpu": "x64" }, "sha512-XiK5z70PEFEFqcNj3/zRSz/qX4bp4QIraTy9QjwJAb/Z8GM7kVUsD0Uk8maIPeTyPCP03ChdI+VVmJriKYbRHQ=="], + "@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.40.2", "", { "os": "linux", "cpu": "x64" }, "sha512-lG7Xa+BmBNwpjmVUbmyKxdQJ3Q6whHjMjzQplOs5Z+Gj7mxPtWakGHqzMqNER68G67kmCX9qX57aRsW5V0VOng=="], - "@rollup/rollup-linux-x64-musl": ["@rollup/rollup-linux-x64-musl@4.40.1", "", { "os": "linux", "cpu": "x64" }, "sha512-2BRORitq5rQ4Da9blVovzNCMaUlyKrzMSvkVR0D4qPuOy/+pMCrh1d7o01RATwVy+6Fa1WBw+da7QPeLWU/1mQ=="], + "@rollup/rollup-linux-x64-musl": ["@rollup/rollup-linux-x64-musl@4.40.2", "", { "os": "linux", "cpu": "x64" }, "sha512-tD46wKHd+KJvsmije4bUskNuvWKFcTOIM9tZ/RrmIvcXnbi0YK/cKS9FzFtAm7Oxi2EhV5N2OpfFB348vSQRXA=="], - "@rollup/rollup-win32-arm64-msvc": ["@rollup/rollup-win32-arm64-msvc@4.40.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-b2bcNm9Kbde03H+q+Jjw9tSfhYkzrDUf2d5MAd1bOJuVplXvFhWz7tRtWvD8/ORZi7qSCy0idW6tf2HgxSXQSg=="], + "@rollup/rollup-win32-arm64-msvc": ["@rollup/rollup-win32-arm64-msvc@4.40.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-Bjv/HG8RRWLNkXwQQemdsWw4Mg+IJ29LK+bJPW2SCzPKOUaMmPEppQlu/Fqk1d7+DX3V7JbFdbkh/NMmurT6Pg=="], - "@rollup/rollup-win32-ia32-msvc": ["@rollup/rollup-win32-ia32-msvc@4.40.1", "", { "os": "win32", "cpu": "ia32" }, "sha512-DfcogW8N7Zg7llVEfpqWMZcaErKfsj9VvmfSyRjCyo4BI3wPEfrzTtJkZG6gKP/Z92wFm6rz2aDO7/JfiR/whA=="], + "@rollup/rollup-win32-ia32-msvc": ["@rollup/rollup-win32-ia32-msvc@4.40.2", "", { "os": "win32", "cpu": "ia32" }, "sha512-dt1llVSGEsGKvzeIO76HToiYPNPYPkmjhMHhP00T9S4rDern8P2ZWvWAQUEJ+R1UdMWJ/42i/QqJ2WV765GZcA=="], - "@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.40.1", "", { "os": "win32", "cpu": "x64" }, "sha512-ECyOuDeH3C1I8jH2MK1RtBJW+YPMvSfT0a5NN0nHfQYnDSJ6tUiZH3gzwVP5/Kfh/+Tt7tpWVF9LXNTnhTJ3kA=="], + "@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.40.2", "", { "os": "win32", "cpu": "x64" }, "sha512-bwspbWB04XJpeElvsp+DCylKfF4trJDa2Y9Go8O6A7YLX2LIKGcNK/CYImJN6ZP4DcuOHB4Utl3iCbnR62DudA=="], "@rtsao/scc": ["@rtsao/scc@1.1.0", "", {}, "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g=="], @@ -995,15 +995,15 @@ "@types/zen-observable": ["@types/zen-observable@0.8.7", "", {}, "sha512-LKzNTjj+2j09wAo/vvVjzgw5qckJJzhdGgWHW7j69QIGdq/KnZrMAMIHQiWGl3Ccflh5/CudBAntTPYdprPltA=="], - "@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.31.1", "", { "dependencies": { "@typescript-eslint/types": "8.31.1", "@typescript-eslint/visitor-keys": "8.31.1" } }, "sha512-BMNLOElPxrtNQMIsFHE+3P0Yf1z0dJqV9zLdDxN/xLlWMlXK/ApEsVEKzpizg9oal8bAT5Sc7+ocal7AC1HCVw=="], + "@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.32.0", "", { "dependencies": { "@typescript-eslint/types": "8.32.0", "@typescript-eslint/visitor-keys": "8.32.0" } }, "sha512-jc/4IxGNedXkmG4mx4nJTILb6TMjL66D41vyeaPWvDUmeYQzF3lKtN15WsAeTr65ce4mPxwopPSo1yUUAWw0hQ=="], - "@typescript-eslint/types": ["@typescript-eslint/types@8.31.1", "", {}, "sha512-SfepaEFUDQYRoA70DD9GtytljBePSj17qPxFHA/h3eg6lPTqGJ5mWOtbXCk1YrVU1cTJRd14nhaXWFu0l2troQ=="], + "@typescript-eslint/types": ["@typescript-eslint/types@8.32.0", "", {}, "sha512-O5Id6tGadAZEMThM6L9HmVf5hQUXNSxLVKeGJYWNhhVseps/0LddMkp7//VDkzwJ69lPL0UmZdcZwggj9akJaA=="], - "@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.31.1", "", { "dependencies": { "@typescript-eslint/types": "8.31.1", "@typescript-eslint/visitor-keys": "8.31.1", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", "minimatch": "^9.0.4", "semver": "^7.6.0", "ts-api-utils": "^2.0.1" }, "peerDependencies": { "typescript": ">=4.8.4 <5.9.0" } }, "sha512-kaA0ueLe2v7KunYOyWYtlf/QhhZb7+qh4Yw6Ni5kgukMIG+iP773tjgBiLWIXYumWCwEq3nLW+TUywEp8uEeag=="], + "@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.32.0", "", { "dependencies": { "@typescript-eslint/types": "8.32.0", "@typescript-eslint/visitor-keys": "8.32.0", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", "minimatch": "^9.0.4", "semver": "^7.6.0", "ts-api-utils": "^2.1.0" }, "peerDependencies": { "typescript": ">=4.8.4 <5.9.0" } }, "sha512-pU9VD7anSCOIoBFnhTGfOzlVFQIA1XXiQpH/CezqOBaDppRwTglJzCC6fUQGpfwey4T183NKhF1/mfatYmjRqQ=="], "@typescript-eslint/utils": ["@typescript-eslint/utils@7.18.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@typescript-eslint/scope-manager": "7.18.0", "@typescript-eslint/types": "7.18.0", "@typescript-eslint/typescript-estree": "7.18.0" }, "peerDependencies": { "eslint": "^8.56.0" } }, "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw=="], - "@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.31.1", "", { "dependencies": { "@typescript-eslint/types": "8.31.1", "eslint-visitor-keys": "^4.2.0" } }, "sha512-I+/rgqOVBn6f0o7NDTmAPWWC6NuqhV174lfYvAm9fUaWeiefLdux9/YI3/nLugEn9L8fcSi0XmpKi/r5u0nmpw=="], + "@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.32.0", "", { "dependencies": { "@typescript-eslint/types": "8.32.0", "eslint-visitor-keys": "^4.2.0" } }, "sha512-1rYQTCLFFzOI5Nl0c8LUpJT8HxpwVRn9E4CkMsYfuN6ctmQqExjSTzzSk0Tz2apmXy7WU6/6fyaZVVA/thPN+w=="], "@ungap/structured-clone": ["@ungap/structured-clone@1.3.0", "", {}, "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g=="], @@ -1327,7 +1327,7 @@ "boolean": ["boolean@3.2.0", "", {}, "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw=="], - "bootstrap": ["bootstrap@5.3.5", "", { "peerDependencies": { "@popperjs/core": "^2.11.8" } }, "sha512-ct1CHKtiobRimyGzmsSldEtM03E8fcEX4Tb3dGXz1V8faRwM50+vfHwTzOxB3IlKO7m+9vTH3s/3C6T2EAPeTA=="], + "bootstrap": ["bootstrap@5.3.6", "", { "peerDependencies": { "@popperjs/core": "^2.11.8" } }, "sha512-jX0GAcRzvdwISuvArXn3m7KZscWWFAf1MKBcnzaN02qWMb3jpMoUX4/qgeiGzqyIb4ojulRzs89UCUmGcFSzTA=="], "bootstrap-vue-next": ["bootstrap-vue-next@0.26.8", "", { "peerDependencies": { "vue": "^3.5.13" } }, "sha512-2WolMPi4XB0J/736PPglDCIjUz2pwvOhu3SLjQYP0Rh5IncspMZMkUCa/H28Vh45xQadFtrYeBPyPF3JrpbadA=="], @@ -1337,7 +1337,7 @@ "browser-process-hrtime": ["browser-process-hrtime@1.0.0", "", {}, "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow=="], - "browserslist": ["browserslist@4.24.4", "", { "dependencies": { "caniuse-lite": "^1.0.30001688", "electron-to-chromium": "^1.5.73", "node-releases": "^2.0.19", "update-browserslist-db": "^1.1.1" }, "bin": { "browserslist": "cli.js" } }, "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A=="], + "browserslist": ["browserslist@4.24.5", "", { "dependencies": { "caniuse-lite": "^1.0.30001716", "electron-to-chromium": "^1.5.149", "node-releases": "^2.0.19", "update-browserslist-db": "^1.1.3" }, "bin": { "browserslist": "cli.js" } }, "sha512-FDToo4Wo82hIdgc1CQ+NQD0hEhmpPjrZ3hiUgwgOG6IuTdlpr8jdjyG24P6cNP1yJpTLzS5OcGgSw0xmDU1/Tw=="], "bs-logger": ["bs-logger@0.2.6", "", { "dependencies": { "fast-json-stable-stringify": "2.x" } }, "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog=="], @@ -1379,7 +1379,7 @@ "camelcase": ["camelcase@6.3.0", "", {}, "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA=="], - "caniuse-lite": ["caniuse-lite@1.0.30001715", "", {}, "sha512-7ptkFGMm2OAOgvZpwgA4yjQ5SQbrNVGdRjzH0pBdy1Fasvcr+KAeECmbCAECzTuDuoX0FCY8KzUxjf9+9kfZEw=="], + "caniuse-lite": ["caniuse-lite@1.0.30001717", "", {}, "sha512-auPpttCq6BDEG8ZAuHJIplGw6GODhjw+/11e7IjpnYCxZcW/ONgPs0KVBJ0d1bY3e2+7PRe5RCLyP+PfwVgkYw=="], "chai": ["chai@5.2.0", "", { "dependencies": { "assertion-error": "^2.0.1", "check-error": "^2.1.1", "deep-eql": "^5.0.1", "loupe": "^3.1.0", "pathval": "^2.0.0" } }, "sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw=="], @@ -1429,7 +1429,7 @@ "commander": ["commander@7.2.0", "", {}, "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw=="], - "compact-encoding": ["compact-encoding@2.16.0", "", { "dependencies": { "b4a": "^1.3.0" } }, "sha512-zG2ul4Egc8ktfmj2vYiC6s/U3u1OkNyUGj32jrJq6qcJ4atGcEpVr+AI+VDJ3oteNfGIw/uol4oBQyB74OeGvw=="], + "compact-encoding": ["compact-encoding@2.16.1", "", { "dependencies": { "b4a": "^1.3.0" } }, "sha512-vP39X4nwtesmZucaAxDg4wnudOoaJTSR+fikzi8VLVxbwLmcWXf3t0LxY0n2H1AMpdoQZ08lmUf4GY3XiDPnMQ=="], "compact-encoding-net": ["compact-encoding-net@1.2.0", "", { "dependencies": { "compact-encoding": "^2.4.1" } }, "sha512-LVXpNpF7PGQeHRVVLGgYWzuVoYAaDZvKUsUxRioGfkotzvOh4AzoQF1HBH3zMNaSnx7gJXuUr3hkjnijaH/Eng=="], @@ -1455,7 +1455,7 @@ "content-type": ["content-type@1.0.5", "", {}, "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA=="], - "convert-source-map": ["convert-source-map@2.0.0", "", {}, "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="], + "convert-source-map": ["convert-source-map@1.9.0", "", {}, "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A=="], "cookie": ["cookie@0.7.1", "", {}, "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w=="], @@ -1463,7 +1463,7 @@ "copy-anything": ["copy-anything@3.0.5", "", { "dependencies": { "is-what": "^4.1.8" } }, "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w=="], - "core-js-pure": ["core-js-pure@3.41.0", "", {}, "sha512-71Gzp96T9YPk63aUvE5Q5qP+DryB4ZloUZPSOebGM88VNw8VNfvdA7z6kGA8iGOTEzAomsRidp4jXSmUIJsL+Q=="], + "core-js-pure": ["core-js-pure@3.42.0", "", {}, "sha512-007bM04u91fF4kMgwom2I5cQxAFIy8jVulgr9eozILl/SZE53QOqnW/+vviC+wQWLv+AunBG+8Q0TLoeSsSxRQ=="], "core-util-is": ["core-util-is@1.0.3", "", {}, "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="], @@ -1613,7 +1613,7 @@ "ejs": ["ejs@3.1.10", "", { "dependencies": { "jake": "^10.8.5" }, "bin": { "ejs": "bin/cli.js" } }, "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA=="], - "electron-to-chromium": ["electron-to-chromium@1.5.143", "", {}, "sha512-QqklJMOFBMqe46k8iIOwA9l2hz57V2OKMmP5eSWcUvwx+mASAsbU+wkF1pHjn9ZVSBPrsYWr4/W/95y5SwYg2g=="], + "electron-to-chromium": ["electron-to-chromium@1.5.150", "", {}, "sha512-rOOkP2ZUMx1yL4fCxXQKDHQ8ZXwisb2OycOQVKHgvB3ZI4CvehOd4y2tfnnLDieJ3Zs1RL1Dlp3cMkyIn7nnXA=="], "email-templates": ["email-templates@10.0.1", "", { "dependencies": { "@ladjs/i18n": "^8.0.1", "consolidate": "^0.16.0", "get-paths": "^0.0.7", "html-to-text": "^8.2.0", "juice": "^8.0.0", "lodash": "^4.17.21", "nodemailer": "^6.7.7", "preview-email": "^3.0.7" } }, "sha512-LNZKS0WW9XQkjuDZd/4p/1Q/pwqaqXOP3iDxTIVIQY9vuHlIUEcRLFo8/Xh3GtZCBnm181VgvOXIABKTVyTePA=="], @@ -1655,7 +1655,7 @@ "es6-promise": ["es6-promise@4.2.8", "", {}, "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w=="], - "esbuild": ["esbuild@0.25.3", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.3", "@esbuild/android-arm": "0.25.3", "@esbuild/android-arm64": "0.25.3", "@esbuild/android-x64": "0.25.3", "@esbuild/darwin-arm64": "0.25.3", "@esbuild/darwin-x64": "0.25.3", "@esbuild/freebsd-arm64": "0.25.3", "@esbuild/freebsd-x64": "0.25.3", "@esbuild/linux-arm": "0.25.3", "@esbuild/linux-arm64": "0.25.3", "@esbuild/linux-ia32": "0.25.3", "@esbuild/linux-loong64": "0.25.3", "@esbuild/linux-mips64el": "0.25.3", "@esbuild/linux-ppc64": "0.25.3", "@esbuild/linux-riscv64": "0.25.3", "@esbuild/linux-s390x": "0.25.3", "@esbuild/linux-x64": "0.25.3", "@esbuild/netbsd-arm64": "0.25.3", "@esbuild/netbsd-x64": "0.25.3", "@esbuild/openbsd-arm64": "0.25.3", "@esbuild/openbsd-x64": "0.25.3", "@esbuild/sunos-x64": "0.25.3", "@esbuild/win32-arm64": "0.25.3", "@esbuild/win32-ia32": "0.25.3", "@esbuild/win32-x64": "0.25.3" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-qKA6Pvai73+M2FtftpNKRxJ78GIjmFXFxd/1DVBqGo/qNhLSfv+G12n9pNoWdytJC8U00TrViOwpjT0zgqQS8Q=="], + "esbuild": ["esbuild@0.25.4", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.4", "@esbuild/android-arm": "0.25.4", "@esbuild/android-arm64": "0.25.4", "@esbuild/android-x64": "0.25.4", "@esbuild/darwin-arm64": "0.25.4", "@esbuild/darwin-x64": "0.25.4", "@esbuild/freebsd-arm64": "0.25.4", "@esbuild/freebsd-x64": "0.25.4", "@esbuild/linux-arm": "0.25.4", "@esbuild/linux-arm64": "0.25.4", "@esbuild/linux-ia32": "0.25.4", "@esbuild/linux-loong64": "0.25.4", "@esbuild/linux-mips64el": "0.25.4", "@esbuild/linux-ppc64": "0.25.4", "@esbuild/linux-riscv64": "0.25.4", "@esbuild/linux-s390x": "0.25.4", "@esbuild/linux-x64": "0.25.4", "@esbuild/netbsd-arm64": "0.25.4", "@esbuild/netbsd-x64": "0.25.4", "@esbuild/openbsd-arm64": "0.25.4", "@esbuild/openbsd-x64": "0.25.4", "@esbuild/sunos-x64": "0.25.4", "@esbuild/win32-arm64": "0.25.4", "@esbuild/win32-ia32": "0.25.4", "@esbuild/win32-x64": "0.25.4" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q=="], "escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], @@ -1691,7 +1691,7 @@ "eslint-plugin-node": ["eslint-plugin-node@11.1.0", "", { "dependencies": { "eslint-plugin-es": "^3.0.0", "eslint-utils": "^2.0.0", "ignore": "^5.1.1", "minimatch": "^3.0.4", "resolve": "^1.10.1", "semver": "^6.1.0" }, "peerDependencies": { "eslint": ">=5.16.0" } }, "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g=="], - "eslint-plugin-prettier": ["eslint-plugin-prettier@5.2.6", "", { "dependencies": { "prettier-linter-helpers": "^1.0.0", "synckit": "^0.11.0" }, "peerDependencies": { "@types/eslint": ">=8.0.0", "eslint": ">=8.0.0", "eslint-config-prettier": ">= 7.0.0 <10.0.0 || >=10.1.0", "prettier": ">=3.0.0" }, "optionalPeers": ["@types/eslint", "eslint-config-prettier"] }, "sha512-mUcf7QG2Tjk7H055Jk0lGBjbgDnfrvqjhXh9t2xLMSCjZVcw9Rb1V6sVNXO0th3jgeO7zllWPTNRil3JW94TnQ=="], + "eslint-plugin-prettier": ["eslint-plugin-prettier@5.4.0", "", { "dependencies": { "prettier-linter-helpers": "^1.0.0", "synckit": "^0.11.0" }, "peerDependencies": { "@types/eslint": ">=8.0.0", "eslint": ">=8.0.0", "eslint-config-prettier": ">= 7.0.0 <10.0.0 || >=10.1.0", "prettier": ">=3.0.0" }, "optionalPeers": ["@types/eslint", "eslint-config-prettier"] }, "sha512-BvQOvUhkVQM1i63iMETK9Hjud9QhqBnbtT1Zc642p9ynzBuCe5pybkOnvqZIBypXmMlsGcnU4HZ8sCTPfpAexA=="], "eslint-plugin-promise": ["eslint-plugin-promise@6.6.0", "", { "peerDependencies": { "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0" } }, "sha512-57Zzfw8G6+Gq7axm2Pdo3gW/Rx3h9Yywgn61uE/3elTCOePEHVrn2i5CdfBwA1BLK0Q0WqctICIUSqXZW/VprQ=="], @@ -1989,7 +1989,7 @@ "ignore-by-default": ["ignore-by-default@1.0.1", "", {}, "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA=="], - "immutable": ["immutable@5.1.1", "", {}, "sha512-3jatXi9ObIsPGr3N5hGw/vWWcTkq6hUYhpQz4k0wLC+owqWi/LiugIw9x0EdNZ2yGedKN/HzePiBvaJRXa0Ujg=="], + "immutable": ["immutable@5.1.2", "", {}, "sha512-qHKXW1q6liAk1Oys6umoaZbDRqjcjgSrbnrifHsfsttza7zcvRAsL7mMV6xWcyhwQy7Xj5v4hhbr6b+iDYwlmQ=="], "import-cwd": ["import-cwd@3.0.0", "", { "dependencies": { "import-from": "^3.0.0" } }, "sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg=="], @@ -2451,7 +2451,7 @@ "object.values": ["object.values@1.2.1", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" } }, "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA=="], - "ohash": ["ohash@2.0.11", "", {}, "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ=="], + "ohash": ["ohash@1.1.6", "", {}, "sha512-TBu7PtV8YkAZn0tSxobKY2n2aAQva936lhRrj6957aDaCf9IEtqsKbgMzXE/F/sjqYOwmrukeORHNLe5glk7Cg=="], "on-finished": ["on-finished@2.4.1", "", { "dependencies": { "ee-first": "1.1.1" } }, "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg=="], @@ -2461,7 +2461,7 @@ "open": ["open@7.4.2", "", { "dependencies": { "is-docker": "^2.0.0", "is-wsl": "^2.1.1" } }, "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q=="], - "openai": ["openai@4.96.0", "", { "dependencies": { "@types/node": "^18.11.18", "@types/node-fetch": "^2.6.4", "abort-controller": "^3.0.0", "agentkeepalive": "^4.2.1", "form-data-encoder": "1.7.2", "formdata-node": "^4.3.2", "node-fetch": "^2.6.7" }, "peerDependencies": { "ws": "^8.18.0", "zod": "^3.23.8" }, "optionalPeers": ["ws", "zod"], "bin": { "openai": "bin/cli" } }, "sha512-dKoW56i02Prv2XQolJ9Rl9Svqubqkzg3QpwEOBuSVZLk05Shelu7s+ErRTwFc1Bs3JZ2qBqBfVpXQiJhwOGG8A=="], + "openai": ["openai@4.97.0", "", { "dependencies": { "@types/node": "^18.11.18", "@types/node-fetch": "^2.6.4", "abort-controller": "^3.0.0", "agentkeepalive": "^4.2.1", "form-data-encoder": "1.7.2", "formdata-node": "^4.3.2", "node-fetch": "^2.6.7" }, "peerDependencies": { "ws": "^8.18.0", "zod": "^3.23.8" }, "optionalPeers": ["ws", "zod"], "bin": { "openai": "bin/cli" } }, "sha512-LRoiy0zvEf819ZUEJhgfV8PfsE8G5WpQi4AwA1uCV8SKvvtXQkoWUFkepD6plqyJQRghy2+AEPQ07FrJFKHZ9Q=="], "optimism": ["optimism@0.18.1", "", { "dependencies": { "@wry/caches": "^1.0.0", "@wry/context": "^0.7.0", "@wry/trie": "^0.5.0", "tslib": "^2.3.0" } }, "sha512-mLXNwWPa9dgFyDqkNi54sjDyNJ9/fTI6WGBLgnXku1vdKY/jovHfZT5r+aiVeFFLOz+foPNOm5YJ4mqgld2GBQ=="], @@ -2709,7 +2709,7 @@ "rimraf": ["rimraf@3.0.2", "", { "dependencies": { "glob": "^7.1.3" }, "bin": { "rimraf": "bin.js" } }, "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA=="], - "rollup": ["rollup@4.40.1", "", { "dependencies": { "@types/estree": "1.0.7" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.40.1", "@rollup/rollup-android-arm64": "4.40.1", "@rollup/rollup-darwin-arm64": "4.40.1", "@rollup/rollup-darwin-x64": "4.40.1", "@rollup/rollup-freebsd-arm64": "4.40.1", "@rollup/rollup-freebsd-x64": "4.40.1", "@rollup/rollup-linux-arm-gnueabihf": "4.40.1", "@rollup/rollup-linux-arm-musleabihf": "4.40.1", "@rollup/rollup-linux-arm64-gnu": "4.40.1", "@rollup/rollup-linux-arm64-musl": "4.40.1", "@rollup/rollup-linux-loongarch64-gnu": "4.40.1", "@rollup/rollup-linux-powerpc64le-gnu": "4.40.1", "@rollup/rollup-linux-riscv64-gnu": "4.40.1", "@rollup/rollup-linux-riscv64-musl": "4.40.1", "@rollup/rollup-linux-s390x-gnu": "4.40.1", "@rollup/rollup-linux-x64-gnu": "4.40.1", "@rollup/rollup-linux-x64-musl": "4.40.1", "@rollup/rollup-win32-arm64-msvc": "4.40.1", "@rollup/rollup-win32-ia32-msvc": "4.40.1", "@rollup/rollup-win32-x64-msvc": "4.40.1", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-C5VvvgCCyfyotVITIAv+4efVytl5F7wt+/I2i9q9GZcEXW9BP52YYOXC58igUi+LFZVHukErIIqQSWwv/M3WRw=="], + "rollup": ["rollup@4.40.2", "", { "dependencies": { "@types/estree": "1.0.7" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.40.2", "@rollup/rollup-android-arm64": "4.40.2", "@rollup/rollup-darwin-arm64": "4.40.2", "@rollup/rollup-darwin-x64": "4.40.2", "@rollup/rollup-freebsd-arm64": "4.40.2", "@rollup/rollup-freebsd-x64": "4.40.2", "@rollup/rollup-linux-arm-gnueabihf": "4.40.2", "@rollup/rollup-linux-arm-musleabihf": "4.40.2", "@rollup/rollup-linux-arm64-gnu": "4.40.2", "@rollup/rollup-linux-arm64-musl": "4.40.2", "@rollup/rollup-linux-loongarch64-gnu": "4.40.2", "@rollup/rollup-linux-powerpc64le-gnu": "4.40.2", "@rollup/rollup-linux-riscv64-gnu": "4.40.2", "@rollup/rollup-linux-riscv64-musl": "4.40.2", "@rollup/rollup-linux-s390x-gnu": "4.40.2", "@rollup/rollup-linux-x64-gnu": "4.40.2", "@rollup/rollup-linux-x64-musl": "4.40.2", "@rollup/rollup-win32-arm64-msvc": "4.40.2", "@rollup/rollup-win32-ia32-msvc": "4.40.2", "@rollup/rollup-win32-x64-msvc": "4.40.2", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-tfUOg6DTP4rhQ3VjOO6B4wyrJnGOX85requAXvqYTHsOgb2TFJdZ3aWpT8W2kPoypSGP7dZUyzxJ9ee4buM5Fg=="], "rrweb-cssom": ["rrweb-cssom@0.7.1", "", {}, "sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg=="], @@ -2883,7 +2883,7 @@ "stylelint-config-standard-scss": ["stylelint-config-standard-scss@14.0.0", "", { "dependencies": { "stylelint-config-recommended-scss": "^14.1.0", "stylelint-config-standard": "^36.0.1" }, "peerDependencies": { "postcss": "^8.3.3", "stylelint": "^16.11.0" }, "optionalPeers": ["postcss"] }, "sha512-6Pa26D9mHyi4LauJ83ls3ELqCglU6VfCXchovbEqQUiEkezvKdv6VgsIoMy58i00c854wVmOw0k8W5FTpuaVqg=="], - "stylelint-scss": ["stylelint-scss@6.11.1", "", { "dependencies": { "css-tree": "^3.0.1", "is-plain-object": "^5.0.0", "known-css-properties": "^0.35.0", "mdn-data": "^2.15.0", "postcss-media-query-parser": "^0.2.3", "postcss-resolve-nested-selector": "^0.1.6", "postcss-selector-parser": "^7.1.0", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "stylelint": "^16.0.2" } }, "sha512-e4rYo0UY+BIMtGeGanghrvHTjcryxgZbyFxUedp8dLFqC4P70aawNdYjRrQxbnKhu3BNr4+lt5e/53tcKXiwFA=="], + "stylelint-scss": ["stylelint-scss@6.12.0", "", { "dependencies": { "css-tree": "^3.0.1", "is-plain-object": "^5.0.0", "known-css-properties": "^0.36.0", "mdn-data": "^2.21.0", "postcss-media-query-parser": "^0.2.3", "postcss-resolve-nested-selector": "^0.1.6", "postcss-selector-parser": "^7.1.0", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "stylelint": "^16.0.2" } }, "sha512-U7CKhi1YNkM1pXUXl/GMUXi8xKdhl4Ayxdyceie1nZ1XNIdaUgMV6OArpooWcDzEggwgYD0HP/xIgVJo9a655w=="], "subscriptions-transport-ws": ["subscriptions-transport-ws@0.9.19", "", { "dependencies": { "backo2": "^1.0.2", "eventemitter3": "^3.1.0", "iterall": "^1.2.1", "symbol-observable": "^1.0.4", "ws": "^5.2.0 || ^6.0.0 || ^7.0.0" }, "peerDependencies": { "graphql": ">=0.10.0" } }, "sha512-dxdemxFFB0ppCLg10FTtRqH/31FNRL1y1BQv8209MK5I4CwALb7iihQg+7p65lFcIl8MHatINWBLOqpgU4Kyyw=="], @@ -2947,7 +2947,7 @@ "titleize": ["titleize@2.1.0", "", {}, "sha512-m+apkYlfiQTKLW+sI4vqUkwMEzfgEUEYSqljx1voUE3Wz/z1ZsxyzSxvH2X8uKVrOp7QkByWt0rA6+gvhCKy6g=="], - "tlds": ["tlds@1.257.0", "", { "bin": { "tlds": "bin.js" } }, "sha512-TZEScdurAjJDULiKMkr8Gvj+GqwcRQ1zPkbEFoo4Y6N5EgsyC6eEKe6xwbFtsrJPxAk8l/o5IPKzAqnrKD6tWg=="], + "tlds": ["tlds@1.258.0", "", { "bin": { "tlds": "bin.js" } }, "sha512-XGhStWuOlBA5D8QnyN2xtgB2cUOdJ3ztisne1DYVWMcVH29qh8eQIpRmP3HnuJLdgyzG0HpdGzRMu1lm/Oictw=="], "tldts": ["tldts@6.1.86", "", { "dependencies": { "tldts-core": "^6.1.86" }, "bin": { "tldts": "bin/cli.js" } }, "sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ=="], @@ -3059,7 +3059,7 @@ "undici-types": ["undici-types@5.26.5", "", {}, "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA=="], - "unimport": ["unimport@5.0.0", "", { "dependencies": { "acorn": "^8.14.1", "escape-string-regexp": "^5.0.0", "estree-walker": "^3.0.3", "local-pkg": "^1.1.1", "magic-string": "^0.30.17", "mlly": "^1.7.4", "pathe": "^2.0.3", "picomatch": "^4.0.2", "pkg-types": "^2.1.0", "scule": "^1.3.0", "strip-literal": "^3.0.0", "tinyglobby": "^0.2.12", "unplugin": "^2.2.2", "unplugin-utils": "^0.2.4" } }, "sha512-8jL3T+FKDg+qLFX55X9j92uFRqH5vWrNlf/eJb5IQlQB5q5wjooXQDXP1ulhJJQHbosBmlKhBo/ZVS5jHlcJGA=="], + "unimport": ["unimport@5.0.1", "", { "dependencies": { "acorn": "^8.14.1", "escape-string-regexp": "^5.0.0", "estree-walker": "^3.0.3", "local-pkg": "^1.1.1", "magic-string": "^0.30.17", "mlly": "^1.7.4", "pathe": "^2.0.3", "picomatch": "^4.0.2", "pkg-types": "^2.1.0", "scule": "^1.3.0", "strip-literal": "^3.0.0", "tinyglobby": "^0.2.13", "unplugin": "^2.3.2", "unplugin-utils": "^0.2.4" } }, "sha512-1YWzPj6wYhtwHE+9LxRlyqP4DiRrhGfJxdtH475im8ktyZXO3jHj/3PZ97zDdvkYoovFdi0K4SKl3a7l92v3sQ=="], "universalify": ["universalify@2.0.1", "", {}, "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw=="], @@ -3103,7 +3103,7 @@ "vee-validate": ["vee-validate@4.15.0", "", { "dependencies": { "@vue/devtools-api": "^7.5.2", "type-fest": "^4.8.3" }, "peerDependencies": { "vue": "^3.4.26" } }, "sha512-PGJh1QCFwCBjbHu5aN6vB8macYVWrajbDvgo1Y/8fz9n/RVIkLmZCJDpUgu7+mUmCOPMxeyq7vXUOhbwAqdXcA=="], - "vite": ["vite@5.4.18", "", { "dependencies": { "esbuild": "^0.21.3", "postcss": "^8.4.43", "rollup": "^4.20.0" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^18.0.0 || >=20.0.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.4.0" }, "optionalPeers": ["@types/node", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser"], "bin": { "vite": "bin/vite.js" } }, "sha512-1oDcnEp3lVyHCuQ2YFelM4Alm2o91xNoMncRm1U7S+JdYfYOvbiGZ3/CxGttrOu2M/KcGz7cRC2DoNUA6urmMA=="], + "vite": ["vite@5.4.19", "", { "dependencies": { "esbuild": "^0.21.3", "postcss": "^8.4.43", "rollup": "^4.20.0" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^18.0.0 || >=20.0.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.4.0" }, "optionalPeers": ["@types/node", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser"], "bin": { "vite": "bin/vite.js" } }, "sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA=="], "vite-node": ["vite-node@2.1.9", "", { "dependencies": { "cac": "^6.7.14", "debug": "^4.3.7", "es-module-lexer": "^1.5.4", "pathe": "^1.1.2", "vite": "^5.0.0" }, "bin": { "vite-node": "vite-node.mjs" } }, "sha512-AM9aQ/IPrW/6ENLQg3AGY4K1N2TGZdR5e4gu/MmmR2xR3Ll1+dib+nook92g4TV3PXVyeyxdWwtaCAiUL0hMxA=="], @@ -3205,7 +3205,7 @@ "write-file-atomic": ["write-file-atomic@5.0.1", "", { "dependencies": { "imurmurhash": "^0.1.4", "signal-exit": "^4.0.1" } }, "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw=="], - "ws": ["ws@8.18.1", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w=="], + "ws": ["ws@8.18.2", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ=="], "xache": ["xache@1.2.1", "", {}, "sha512-igRS6jPreJ54ABdzhh4mCDXcz+XMaWO2q1ABRV2yWYuk29jlp8VT7UBdCqNkX7rpYBbXsebVVKkwIuYZjyZNqA=="], @@ -3243,22 +3243,20 @@ "@apollo/protobufjs/@types/node": ["@types/node@10.17.60", "", {}, "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw=="], - "@apollographql/graphql-upload-8-fork/http-errors": ["http-errors@1.7.3", "", { "dependencies": { "depd": "~1.1.2", "inherits": "2.0.4", "setprototypeof": "1.1.1", "statuses": ">= 1.5.0 < 2", "toidentifier": "1.0.0" } }, "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw=="], + "@apollographql/graphql-upload-8-fork/http-errors": ["http-errors@1.8.1", "", { "dependencies": { "depd": "~1.1.2", "inherits": "2.0.4", "setprototypeof": "1.2.0", "statuses": ">= 1.5.0 < 2", "toidentifier": "1.0.1" } }, "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g=="], "@asamuzakjp/css-color/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], "@babel/code-frame/js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="], + "@babel/core/convert-source-map": ["convert-source-map@2.0.0", "", {}, "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="], + "@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], "@babel/helper-compilation-targets/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], - "@babel/runtime/regenerator-runtime": ["regenerator-runtime@0.14.1", "", {}, "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw=="], - - "@babel/runtime-corejs3/regenerator-runtime": ["regenerator-runtime@0.14.1", "", {}, "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw=="], - "@babel/traverse/globals": ["globals@11.12.0", "", {}, "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA=="], "@cspotcode/source-map-support/@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.9", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" } }, "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ=="], @@ -3271,7 +3269,7 @@ "@hyperswarm/secret-stream/sodium-universal": ["sodium-universal@5.0.1", "", { "dependencies": { "sodium-native": "^5.0.1" }, "peerDependencies": { "sodium-javascript": "~0.8.0" }, "optionalPeers": ["sodium-javascript"] }, "sha512-rv+aH+tnKB5H0MAc2UadHShLMslpJsc4wjdnHRtiSIEYpOetCgu8MS4ExQRia+GL/MK3uuCyZPeEsi+J3h+Q+Q=="], - "@iconify/utils/@antfu/install-pkg": ["@antfu/install-pkg@1.0.0", "", { "dependencies": { "package-manager-detector": "^0.2.8", "tinyexec": "^0.3.2" } }, "sha512-xvX6P/lo1B3ej0OsaErAjqgFYzYVcJpamjLAFLYh9vRJngBrMoUG7aVnrGTeqM7yxbyTD5p3F2+0/QUEh8Vzhw=="], + "@iconify/utils/@antfu/install-pkg": ["@antfu/install-pkg@1.1.0", "", { "dependencies": { "package-manager-detector": "^1.3.0", "tinyexec": "^1.0.1" } }, "sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ=="], "@iconify/utils/@antfu/utils": ["@antfu/utils@8.1.1", "", {}, "sha512-Mex9nXf9vR6AhcXmMrlz/HVgYYZpVGJ6YlPgwl7UnaFpnshXs6EK/oa5Gpf3CzENMjkvEx2tQtntGnb7UtSTOQ=="], @@ -3303,15 +3301,15 @@ "@istanbuljs/load-nyc-config/js-yaml": ["js-yaml@3.14.1", "", { "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g=="], - "@jest/console/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "@jest/console/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], - "@jest/core/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "@jest/core/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], - "@jest/environment/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "@jest/environment/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], - "@jest/fake-timers/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "@jest/fake-timers/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], - "@jest/reporters/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "@jest/reporters/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], "@jest/reporters/istanbul-lib-source-maps": ["istanbul-lib-source-maps@4.0.1", "", { "dependencies": { "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0", "source-map": "^0.6.1" } }, "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw=="], @@ -3321,22 +3319,22 @@ "@jest/source-map/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], - "@jest/transform/convert-source-map": ["convert-source-map@1.9.0", "", {}, "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A=="], - "@jest/transform/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], "@jest/transform/write-file-atomic": ["write-file-atomic@3.0.3", "", { "dependencies": { "imurmurhash": "^0.1.4", "is-typedarray": "^1.0.0", "signal-exit": "^3.0.2", "typedarray-to-buffer": "^3.1.5" } }, "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q=="], - "@jest/types/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "@jest/types/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], - "@morev/utils/ohash": ["ohash@1.1.6", "", {}, "sha512-TBu7PtV8YkAZn0tSxobKY2n2aAQva936lhRrj6957aDaCf9IEtqsKbgMzXE/F/sjqYOwmrukeORHNLe5glk7Cg=="], + "@ladjs/i18n/qs": ["qs@6.14.0", "", { "dependencies": { "side-channel": "^1.1.0" } }, "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w=="], - "@morev/utils/type-fest": ["type-fest@4.40.1", "", {}, "sha512-9YvLNnORDpI+vghLU/Nf+zSv0kL47KbVJ1o3sKgoTefl6i+zebxbiDQWoe/oWWqPhIgQdRZRT1KA9sCPL810SA=="], + "@morev/utils/type-fest": ["type-fest@4.41.0", "", {}, "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA=="], "@nuxt/kit/consola": ["consola@3.4.2", "", {}, "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA=="], "@nuxt/kit/ignore": ["ignore@7.0.4", "", {}, "sha512-gJzzk+PQNznz8ysRrC0aOkBNVRBDtE1n53IqyqEf3PXrYwomFs5q4pGMizBMJF+ykh03insJ27hB8gSrD2Hn8A=="], + "@nuxt/kit/ohash": ["ohash@2.0.11", "", {}, "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ=="], + "@nuxt/kit/pathe": ["pathe@2.0.3", "", {}, "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="], "@nuxt/kit/pkg-types": ["pkg-types@2.1.0", "", { "dependencies": { "confbox": "^0.2.1", "exsolve": "^1.0.1", "pathe": "^2.0.3" } }, "sha512-wmJwA+8ihJixSoHKxZJRBQG1oY8Yr9pGLzRmSsNms0iNWyHHAlZCa7mmKiFR10YPZuz/2k169JiS/inOjBCZ2A=="], @@ -3349,37 +3347,35 @@ "@swc/cli/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], - "@types/accepts/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "@types/accepts/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], - "@types/body-parser/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "@types/body-parser/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], - "@types/connect/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "@types/connect/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], - "@types/cookies/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "@types/cookies/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], - "@types/dotenv/dotenv": ["dotenv@16.5.0", "", {}, "sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg=="], + "@types/express-serve-static-core/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], - "@types/express-serve-static-core/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "@types/fs-capacitor/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], - "@types/fs-capacitor/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "@types/glob/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], - "@types/glob/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "@types/graceful-fs/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], - "@types/graceful-fs/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "@types/koa/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], - "@types/koa/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "@types/mysql/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], - "@types/mysql/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "@types/node-fetch/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], - "@types/node-fetch/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "@types/send/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], - "@types/send/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "@types/serve-static/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], - "@types/serve-static/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "@types/sodium-native/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], - "@types/sodium-native/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], - - "@types/ws/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "@types/ws/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], "@typescript-eslint/typescript-estree/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], @@ -3391,7 +3387,7 @@ "@typescript-eslint/visitor-keys/eslint-visitor-keys": ["eslint-visitor-keys@4.2.0", "", {}, "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw=="], - "@vee-validate/yup/type-fest": ["type-fest@4.40.1", "", {}, "sha512-9YvLNnORDpI+vghLU/Nf+zSv0kL47KbVJ1o3sKgoTefl6i+zebxbiDQWoe/oWWqPhIgQdRZRT1KA9sCPL810SA=="], + "@vee-validate/yup/type-fest": ["type-fest@4.41.0", "", {}, "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA=="], "@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], @@ -3463,6 +3459,8 @@ "c12/dotenv": ["dotenv@16.5.0", "", {}, "sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg=="], + "c12/ohash": ["ohash@2.0.11", "", {}, "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ=="], + "c12/pathe": ["pathe@2.0.3", "", {}, "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="], "c12/pkg-types": ["pkg-types@2.1.0", "", { "dependencies": { "confbox": "^0.2.1", "exsolve": "^1.0.1", "pathe": "^2.0.3" } }, "sha512-wmJwA+8ihJixSoHKxZJRBQG1oY8Yr9pGLzRmSsNms0iNWyHHAlZCa7mmKiFR10YPZuz/2k169JiS/inOjBCZ2A=="], @@ -3541,8 +3539,6 @@ "fast-glob/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], - "fdir/picomatch": ["picomatch@4.0.2", "", {}, "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg=="], - "federation/apollo-server-testing": ["apollo-server-testing@2.25.2", "", { "dependencies": { "apollo-server-core": "^2.25.2" }, "peerDependencies": { "graphql": "^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0" } }, "sha512-HjQV9wPbi/ZqpRbyyhNwCbaDnfjDM0hTRec5TOoOjurEZ/vh4hTPHwGkDZx3kbcWowhGxe2qoHM6KANSB/SxuA=="], "federation/helmet": ["helmet@7.2.0", "", {}, "sha512-ZRiwvN089JfMXokizgqEPXsl2Guk094yExfoDXR0cBYWxtBbaSww/w+vT4WEJsBW2iTUi1GgZ6swmoug3Oy4Xw=="], @@ -3589,37 +3585,37 @@ "istanbul-lib-report/supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], - "jest-circus/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "jest-circus/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], "jest-cli/yargs": ["yargs@16.2.0", "", { "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.0", "y18n": "^5.0.5", "yargs-parser": "^20.2.2" } }, "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw=="], - "jest-environment-jsdom/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "jest-environment-jsdom/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], "jest-environment-jsdom/jsdom": ["jsdom@16.7.0", "", { "dependencies": { "abab": "^2.0.5", "acorn": "^8.2.4", "acorn-globals": "^6.0.0", "cssom": "^0.4.4", "cssstyle": "^2.3.0", "data-urls": "^2.0.0", "decimal.js": "^10.2.1", "domexception": "^2.0.1", "escodegen": "^2.0.0", "form-data": "^3.0.0", "html-encoding-sniffer": "^2.0.1", "http-proxy-agent": "^4.0.1", "https-proxy-agent": "^5.0.0", "is-potential-custom-element-name": "^1.0.1", "nwsapi": "^2.2.0", "parse5": "6.0.1", "saxes": "^5.0.1", "symbol-tree": "^3.2.4", "tough-cookie": "^4.0.0", "w3c-hr-time": "^1.0.2", "w3c-xmlserializer": "^2.0.0", "webidl-conversions": "^6.1.0", "whatwg-encoding": "^1.0.5", "whatwg-mimetype": "^2.3.0", "whatwg-url": "^8.5.0", "ws": "^7.4.6", "xml-name-validator": "^3.0.0" }, "peerDependencies": { "canvas": "^2.5.0" }, "optionalPeers": ["canvas"] }, "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw=="], - "jest-environment-node/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "jest-environment-node/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], - "jest-haste-map/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "jest-haste-map/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], "jest-haste-map/jest-worker": ["jest-worker@27.5.1", "", { "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" } }, "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg=="], - "jest-jasmine2/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "jest-jasmine2/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], - "jest-mock/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "jest-mock/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], - "jest-runner/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "jest-runner/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], "jest-runner/jest-worker": ["jest-worker@27.5.1", "", { "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" } }, "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg=="], "jest-runtime/strip-bom": ["strip-bom@4.0.0", "", {}, "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w=="], - "jest-serializer/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "jest-serializer/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], - "jest-util/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "jest-util/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], - "jest-watcher/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "jest-watcher/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], - "jest-worker/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "jest-worker/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], "jest-worker/jest-util": ["jest-util@29.7.0", "", { "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", "graceful-fs": "^4.2.9", "picomatch": "^2.2.3" } }, "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA=="], @@ -3667,7 +3663,7 @@ "nypm/pkg-types": ["pkg-types@2.1.0", "", { "dependencies": { "confbox": "^0.2.1", "exsolve": "^1.0.1", "pathe": "^2.0.3" } }, "sha512-wmJwA+8ihJixSoHKxZJRBQG1oY8Yr9pGLzRmSsNms0iNWyHHAlZCa7mmKiFR10YPZuz/2k169JiS/inOjBCZ2A=="], - "openai/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "openai/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], "path-scurry/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], @@ -3727,8 +3723,6 @@ "stylelint-config-standard/stylelint-config-recommended": ["stylelint-config-recommended@14.0.1", "", { "peerDependencies": { "stylelint": "^16.1.0" } }, "sha512-bLvc1WOz/14aPImu/cufKAZYfXs/A/owZfSMZ4N+16WGXLoX5lOir53M6odBxvhgmgdxCVnNySJmZKx73T93cg=="], - "stylelint-scss/known-css-properties": ["known-css-properties@0.35.0", "", {}, "sha512-a/RAk2BfKk+WFGhhOCAYqSiFLc34k8Mt/6NWRI4joER0EYUzXIcFivjjnoD3+XU1DggLn/tZc3DOAgke7l8a4A=="], - "stylelint-scss/mdn-data": ["mdn-data@2.21.0", "", {}, "sha512-+ZKPQezM5vYJIkCxaC+4DTnRrVZR1CgsKLu5zsQERQx6Tea8Y+wMx5A24rq8A8NepCeatIQufVAekKNgiBMsGQ=="], "stylelint-scss/postcss-selector-parser": ["postcss-selector-parser@7.1.0", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA=="], @@ -3757,7 +3751,7 @@ "tinyglobby/picomatch": ["picomatch@4.0.2", "", {}, "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg=="], - "type-graphql/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "typed-rest-client/qs": ["qs@6.14.0", "", { "dependencies": { "side-channel": "^1.1.0" } }, "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w=="], "typeorm/dotenv": ["dotenv@16.5.0", "", {}, "sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg=="], @@ -3793,11 +3787,9 @@ "unplugin-vue-components/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], - "v8-to-istanbul/convert-source-map": ["convert-source-map@1.9.0", "", {}, "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A=="], - "vee-validate/@vue/devtools-api": ["@vue/devtools-api@7.7.6", "", { "dependencies": { "@vue/devtools-kit": "^7.7.6" } }, "sha512-b2Xx0KvXZObePpXPYHvBRRJLDQn5nhKjXh7vUhMEtWxz1AYNFOVIsh5+HLP8xDGL7sy+Q7hXeUxPHB/KgbtsPw=="], - "vee-validate/type-fest": ["type-fest@4.40.1", "", {}, "sha512-9YvLNnORDpI+vghLU/Nf+zSv0kL47KbVJ1o3sKgoTefl6i+zebxbiDQWoe/oWWqPhIgQdRZRT1KA9sCPL810SA=="], + "vee-validate/type-fest": ["type-fest@4.41.0", "", {}, "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA=="], "vite/esbuild": ["esbuild@0.21.5", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.21.5", "@esbuild/android-arm": "0.21.5", "@esbuild/android-arm64": "0.21.5", "@esbuild/android-x64": "0.21.5", "@esbuild/darwin-arm64": "0.21.5", "@esbuild/darwin-x64": "0.21.5", "@esbuild/freebsd-arm64": "0.21.5", "@esbuild/freebsd-x64": "0.21.5", "@esbuild/linux-arm": "0.21.5", "@esbuild/linux-arm64": "0.21.5", "@esbuild/linux-ia32": "0.21.5", "@esbuild/linux-loong64": "0.21.5", "@esbuild/linux-mips64el": "0.21.5", "@esbuild/linux-ppc64": "0.21.5", "@esbuild/linux-riscv64": "0.21.5", "@esbuild/linux-s390x": "0.21.5", "@esbuild/linux-x64": "0.21.5", "@esbuild/netbsd-x64": "0.21.5", "@esbuild/openbsd-x64": "0.21.5", "@esbuild/sunos-x64": "0.21.5", "@esbuild/win32-arm64": "0.21.5", "@esbuild/win32-ia32": "0.21.5", "@esbuild/win32-x64": "0.21.5" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw=="], @@ -3821,7 +3813,7 @@ "which-builtin-type/isarray": ["isarray@2.0.5", "", {}, "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="], - "wkx/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "wkx/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], "xss/commander": ["commander@2.20.3", "", {}, "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="], @@ -3829,16 +3821,16 @@ "@apollographql/graphql-upload-8-fork/http-errors/depd": ["depd@1.1.2", "", {}, "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ=="], - "@apollographql/graphql-upload-8-fork/http-errors/setprototypeof": ["setprototypeof@1.1.1", "", {}, "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="], - "@apollographql/graphql-upload-8-fork/http-errors/statuses": ["statuses@1.5.0", "", {}, "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA=="], - "@apollographql/graphql-upload-8-fork/http-errors/toidentifier": ["toidentifier@1.0.0", "", {}, "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="], - "@babel/helper-compilation-targets/lru-cache/yallist": ["yallist@3.1.1", "", {}, "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="], "@hyperswarm/secret-stream/sodium-universal/sodium-native": ["sodium-native@5.0.1", "", { "dependencies": { "require-addon": "^1.1.0", "which-runtime": "^1.2.1" } }, "sha512-Q305aUXc0OzK7VVRvWkeEQJQIHs6slhFwWpyqLB5iJqhpyt2lYIVu96Y6PQ7TABIlWXVF3YiWDU3xS2Snkus+g=="], + "@iconify/utils/@antfu/install-pkg/package-manager-detector": ["package-manager-detector@1.3.0", "", {}, "sha512-ZsEbbZORsyHuO00lY1kV3/t72yp6Ysay6Pd17ZAlNGuGwmWDLCJxFpRs0IzfXfj1o4icJOkUEioexFHzyPurSQ=="], + + "@iconify/utils/@antfu/install-pkg/tinyexec": ["tinyexec@1.0.1", "", {}, "sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw=="], + "@iconify/utils/local-pkg/pkg-types": ["pkg-types@2.1.0", "", { "dependencies": { "confbox": "^0.2.1", "exsolve": "^1.0.1", "pathe": "^2.0.3" } }, "sha512-wmJwA+8ihJixSoHKxZJRBQG1oY8Yr9pGLzRmSsNms0iNWyHHAlZCa7mmKiFR10YPZuz/2k169JiS/inOjBCZ2A=="], "@intlify/bundle-utils/yaml-eslint-parser/yaml": ["yaml@2.7.1", "", { "bin": { "yaml": "bin.mjs" } }, "sha512-10ULxpnOCQXxJvBgxsn9ptjq6uviG/htZKk9veJGhlqn3w/DxQ631zFF+nlQXLwmImeS5amR2dl2U8sg6U9jsQ=="], @@ -3879,7 +3871,7 @@ "apollo-cache-inmemory/optimism/@wry/context": ["@wry/context@0.4.4", "", { "dependencies": { "@types/node": ">=6", "tslib": "^1.9.3" } }, "sha512-LrKVLove/zw6h2Md/KZyWxIkFM6AoyKp71OqpH9Hiip1csjPVoD3tPxlbQUNxEnHENks3UGgNpSBCAfq9KWuag=="], - "apollo-server-express/@types/body-parser/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "apollo-server-express/@types/body-parser/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], "body-parser/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], @@ -4005,7 +3997,7 @@ "terminal-link/supports-hyperlinks/supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], - "terser-webpack-plugin/jest-worker/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "terser-webpack-plugin/jest-worker/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], "terser-webpack-plugin/jest-worker/supports-color": ["supports-color@8.1.1", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="], @@ -4095,7 +4087,7 @@ "@typescript-eslint/utils/@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="], - "apollo-cache-inmemory/optimism/@wry/context/@types/node": ["@types/node@18.19.87", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A=="], + "apollo-cache-inmemory/optimism/@wry/context/@types/node": ["@types/node@18.19.96", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-PzBvgsZ7YdFs/Kng1BSW8IGv68/SPcOxYYhT7luxD7QyzIhFS1xPTpfK3K9eHBa7hVwlW+z8nN0mOd515yaduQ=="], "cheerio-select/domutils/dom-serializer/entities": ["entities@2.2.0", "", {}, "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A=="], diff --git a/database/Dockerfile b/database/Dockerfile index 4d226f068..5c4e144e5 100644 --- a/database/Dockerfile +++ b/database/Dockerfile @@ -16,6 +16,7 @@ ENV BUILD_COMMIT="0000000" ENV NODE_ENV="production" ## Timezone ENV TZ=UTC +ENV DB_HOST=mariadb # Labels LABEL org.label-schema.build-date="${BUILD_DATE}" @@ -39,59 +40,65 @@ RUN mkdir -p ${DOCKER_WORKDIR} WORKDIR ${DOCKER_WORKDIR} ################################################################################## -# Base with turbo ################################################################ +# BUN ############################################################################ ################################################################################## -FROM base as turbo-base - -RUN apk update && apk add --no-cache libc6-compat \ - && yarn global add turbo@^2 \ - && rm -rf /tmp/* ~/.cache node_modules/.cache \ - && yarn cache clean +FROM base as bun-base +#RUN apt update && apt install -y --no-install-recommends ca-certificates curl bash unzip +RUN apk update && apk add --no-cache curl tar bash +RUN curl -fsSL https://bun.sh/install | bash +# Add bun's global bin directory to PATH +ENV PATH="/root/.bun/bin:${PATH}" ################################################################################## -# BUILDER (create partly monorepo only with data needed by database) ############# +# Installer ###################################################################### ################################################################################## -FROM turbo-base as builder +FROM bun-base as installer -COPY --chown=app:app . . -RUN turbo prune database --docker +COPY --chown=app:app ./database . +RUN bun install --production --no-cache --frozen-lockfile ################################################################################## -# INSTALLER (create production image) ############################################ +# Build ########################################################################## ################################################################################## -FROM turbo-base AS installer +FROM installer as build + +RUN bun install --no-cache --frozen-lockfile \ + yarn build && yarn typecheck + +################################################################################## +# PRODUCTION IMAGE ############################################################### +################################################################################## +FROM base as production + +COPY --chown=app:app --from=installer ${DOCKER_WORKDIR}/src ./src +COPY --chown=app:app --from=installer ${DOCKER_WORKDIR}/migrations ./migrations +COPY --chown=app:app --from=installer ${DOCKER_WORKDIR}/entity ./entity +COPY --chown=app:app --from=installer ${DOCKER_WORKDIR}/node_modules ./node_modules +COPY --chown=app:app --from=installer ${DOCKER_WORKDIR}/package.json ./package.json +COPY --chown=app:app --from=installer ${DOCKER_WORKDIR}/tsconfig.json ./tsconfig.json -# First install the dependencies (as they change less often) -COPY --chown=app:app --from=builder /app/out/json/ . -RUN yarn install --frozen-lockfile --production=false \ - && rm -rf /tmp/* ~/.cache node_modules/.cache \ - && yarn cache clean - -# Build the project -COPY --chown=app:app --from=builder /app/out/full/ . -#RUN turbo build - ################################################################################## # TEST UP ######################################################################## ################################################################################## -FROM installer as up +FROM production as up + # Run command -CMD /bin/sh -c "turbo up" +CMD /bin/sh -c "yarn up" ################################################################################## # TEST RESET ##################################################################### ################################################################################## -FROM installer as reset +FROM production as reset # Run command -CMD /bin/sh -c "turbo reset" +CMD /bin/sh -c "yarn reset" ################################################################################## # TEST DOWN ###################################################################### ################################################################################## -FROM installer as down +FROM production as down # Run command -CMD /bin/sh -c "turbo down" +CMD /bin/sh -c "yarn down" diff --git a/database/src/clear.ts b/database/src/clear.ts index 076d30922..dfd6e51c4 100644 --- a/database/src/clear.ts +++ b/database/src/clear.ts @@ -1,5 +1,6 @@ -import { Connection, createConnection } from 'mysql2/promise' +import { Connection } from 'mysql2/promise' import { CONFIG } from './config' +import { connectToDatabaseServer } from './prepare' export async function truncateTables(connection: Connection) { const [tables] = await connection.query('SHOW TABLES') @@ -26,13 +27,10 @@ export async function truncateTables(connection: Connection) { } export async function clearDatabase() { - const connection = await createConnection({ - host: CONFIG.DB_HOST, - port: CONFIG.DB_PORT, - user: CONFIG.DB_USER, - password: CONFIG.DB_PASSWORD, - database: CONFIG.DB_DATABASE, - }) + const connection = await connectToDatabaseServer() + if (!connection) { + throw new Error('Could not connect to database server') + } await truncateTables(connection) diff --git a/database/src/prepare.ts b/database/src/prepare.ts index 00e873fde..2b9d5682d 100644 --- a/database/src/prepare.ts +++ b/database/src/prepare.ts @@ -11,19 +11,22 @@ export enum DatabaseState { SAME_VERSION = 'SAME_VERSION', } -async function connectToDatabaseServer(): Promise { - try { - return await createConnection({ - host: CONFIG.DB_HOST, - port: CONFIG.DB_PORT, - user: CONFIG.DB_USER, - password: CONFIG.DB_PASSWORD, - }) - } catch (e) { - // biome-ignore lint/suspicious/noConsole: no logger present - console.log('could not connect to database server', e) - return null +export async function connectToDatabaseServer(maxRetries = 15, delayMs = 500): Promise { + for (let attempt = 1; attempt <= maxRetries; attempt++) { + try { + return await createConnection({ + host: CONFIG.DB_HOST, + port: CONFIG.DB_PORT, + user: CONFIG.DB_USER, + password: CONFIG.DB_PASSWORD, + }) + } catch (e) { + // biome-ignore lint/suspicious/noConsole: no logger present + console.log(`could not connect to database server, retry in ${delayMs} ms`, e) + } + await new Promise(resolve => setTimeout(resolve, delayMs)) } + return null } export const getDatabaseState = async (): Promise => { diff --git a/dht-node/Dockerfile b/dht-node/Dockerfile index b98acc61d..bd397fea0 100644 --- a/dht-node/Dockerfile +++ b/dht-node/Dockerfile @@ -3,7 +3,7 @@ ################################################################################## FROM node:18.20.7-bookworm-slim as base #FROM node:18.20.7-alpine3.21 as base -#FROM ubuntu:latest as base +# change to alpine after sodium-native ship with native alpine build # ENVs (available in production aswell, can be overwritten by commandline or env file) ## DOCKER_WORKDIR would be a classical ARG, but that is not multi layer persistent - shame diff --git a/dht-node/src/index.ts b/dht-node/src/index.ts index eadbec483..901d3ab20 100644 --- a/dht-node/src/index.ts +++ b/dht-node/src/index.ts @@ -2,23 +2,11 @@ import { startDHT } from '@/dht_node/index' import { CONFIG } from './config' import { logger } from './server/logger' -import { checkDBVersion } from './typeorm/DBVersion' -import { connection } from './typeorm/connection' +import { checkDBVersionUntil } from './typeorm/DBVersion' async function main() { // open mysql connection - const con = await connection() - if (!con || !con.isConnected) { - logger.fatal(`Couldn't open connection to database!`) - throw new Error(`Fatal: Couldn't open connection to database`) - } - - // check for correct database version - const dbVersion = await checkDBVersion(CONFIG.DB_VERSION) - if (!dbVersion) { - logger.fatal('Fatal: Database Version incorrect') - throw new Error('Fatal: Database Version incorrect') - } + await checkDBVersionUntil() logger.debug(`dhtseed set by CONFIG.FEDERATION_DHT_SEED=${CONFIG.FEDERATION_DHT_SEED}`) logger.info( `starting Federation on ${CONFIG.FEDERATION_DHT_TOPIC} ${ diff --git a/dht-node/src/typeorm/DBVersion.ts b/dht-node/src/typeorm/DBVersion.ts index 29092c6dd..0cd7c0ea5 100644 --- a/dht-node/src/typeorm/DBVersion.ts +++ b/dht-node/src/typeorm/DBVersion.ts @@ -2,6 +2,31 @@ import { Migration } from 'database' import { logger } from '@/server/logger' +import { CONFIG } from '@/config' +import { Connection as DbConnection } from 'typeorm' +import { connection as connectionFunc } from './connection' + +async function checkDBVersionUntil(maxRetries = 15, delayMs = 500): Promise { + for (let attempt = 1; attempt <= maxRetries; attempt++) { + try { + const connection = await connectionFunc() + if (connection?.isInitialized) { + const dbVersion = await checkDBVersion(CONFIG.DB_VERSION) + if (dbVersion) { + logger.info('Database connection and version check succeeded.') + return connection + } + } + } catch (err) { + logger.warn(`Attempt ${attempt}: Waiting for DB...`, err) + } + await new Promise(resolve => setTimeout(resolve, delayMs)) + } + + logger.fatal(`Fatal: Could not connect to database or version check failed after ${maxRetries} attempts.`) + throw new Error('Fatal: Database not ready.') +} + const getDBVersion = async (): Promise => { try { const [dbVersion] = await Migration.find({ order: { version: 'DESC' }, take: 1 }) @@ -25,4 +50,4 @@ const checkDBVersion = async (DB_VERSION: string): Promise => { return true } -export { checkDBVersion, getDBVersion } +export { checkDBVersion, getDBVersion, checkDBVersionUntil } diff --git a/dht-node/test/helpers.ts b/dht-node/test/helpers.ts index be72b75b6..0301f7fae 100644 --- a/dht-node/test/helpers.ts +++ b/dht-node/test/helpers.ts @@ -1,12 +1,6 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ -/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ import { entities } from 'database' -import { CONFIG } from '@/config' -import { connection } from '@/typeorm/connection' -import { checkDBVersion } from '@/typeorm/DBVersion' - -import { logger } from './testSetup' +import { checkDBVersionUntil } from '@/typeorm/DBVersion' export const headerPushMock = jest.fn((t) => { context.token = t.value @@ -29,20 +23,7 @@ export const cleanDB = async () => { } export const testEnvironment = async () => { - // open mysql connection - const con = await connection() - if (!con || !con.isConnected) { - logger.fatal(`Couldn't open connection to database!`) - throw new Error(`Fatal: Couldn't open connection to database`) - } - - // check for correct database version - const dbVersion = await checkDBVersion(CONFIG.DB_VERSION) - if (!dbVersion) { - logger.fatal('Fatal: Database Version incorrect') - throw new Error('Fatal: Database Version incorrect') - } - return { con } + return { con: await checkDBVersionUntil() } } export const resetEntity = async (entity: any) => { diff --git a/docker-compose.override.yml b/docker-compose.override.yml index 4cb2ec4b7..f1b02c422 100644 --- a/docker-compose.override.yml +++ b/docker-compose.override.yml @@ -8,6 +8,9 @@ services: image: gradido/frontend:local-development build: target: development + networks: + - external-net + - internal-net environment: - NODE_ENV=development # - DEBUG=true @@ -27,9 +30,11 @@ services: image: gradido/admin:local-development build: target: development + networks: + - external-net + - internal-net environment: - NODE_ENV=development - # - DEBUG=true volumes: # This makes sure the docker container has its own node modules. # Therefore it is possible to have a different node version on the host machine @@ -134,6 +139,8 @@ services: image: gradido/database:local-up build: target: up + profiles: + - up environment: - NODE_ENV=development volumes: @@ -177,7 +184,13 @@ services: ######################################################### ## NGINX ################################################ ######################################################### - # nginx: + nginx: + build: + context: ./nginx/ + depends_on: + - backend + - frontend + - admin ######################################################### ## PHPMYADMIN ########################################### diff --git a/docker-compose.yml b/docker-compose.yml index 6e3b80786..a14fcdf2e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -7,6 +7,7 @@ services: ######################################################## # FRONTEND ############################################# + # contain also admin in production ##################### ######################################################## frontend: # name the image so that it cannot be found in a DockerHub repository, otherwise it will not be built locally from the 'dockerfile' but pulled from there @@ -20,7 +21,6 @@ services: BUILD_COMMIT_SHORT: ${BUILD_COMMIT_SHORT} BUILD_VERSION: ${BUILD_VERSION} networks: - - external-net - internal-net ports: - ${FRONTEND_MODULE_PORT:-3000}:3000 @@ -35,6 +35,8 @@ services: # env_file: # - ./.env # - ./frontend/.env + volumes: + - ./logs/nginx/frontend:/var/log/nginx ######################################################## # ADMIN INTERFACE ###################################### @@ -46,29 +48,18 @@ services: context: ./ dockerfile: ./admin/Dockerfile target: production - args: - BUILD_COMMIT: ${BUILD_COMMIT} - BUILD_COMMIT_SHORT: ${BUILD_COMMIT_SHORT} - BUILD_VERSION: ${BUILD_VERSION} networks: - - external-net - internal-net ports: - - ${ADMIN_MODULE_PORT:-8080}:3000 + - ${ADMIN_MODULE_PORT:-8080}:8080 environment: + - NODE_ENV=production - BUILD_COMMIT=${BUILD_COMMIT} - BUILD_COMMIT_SHORT=${BUILD_COMMIT_SHORT} - BUILD_VERSION=${BUILD_VERSION} - # Envs used in Dockerfile - # - DOCKER_WORKDIR="/app" - # - PORT=8090 - # - BUILD_DATE="1970-01-01T00:00:00.00Z" - # - BUILD_VERSION="0.0.0.0" - # - BUILD_COMMIT="0000000" - - NODE_ENV=production - # env_file: - # - ./.env - # - ./admin/.env + # - DEBUG=true + volumes: + - ./logs/nginx/admin:/var/log/nginx ######################################################### ## MARIADB ############################################## @@ -231,8 +222,6 @@ services: context: . dockerfile: ./database/Dockerfile target: up - profiles: - - migration depends_on: - mariadb networks: @@ -290,7 +279,6 @@ services: depends_on: - backend - frontend - - admin ports: - 80:80 volumes: diff --git a/federation/Dockerfile b/federation/Dockerfile index fcdad2136..070fe3e2a 100644 --- a/federation/Dockerfile +++ b/federation/Dockerfile @@ -1,7 +1,9 @@ ################################################################################## # BASE ########################################################################### ################################################################################## -FROM node:18.20.7-alpine3.21 as base +FROM node:18.20.7-bookworm-slim as base +#FROM node:18.20.7-alpine3.21 as base +# change to alpine after sodium-native ship with native alpine build # ENVs (available in production aswell, can be overwritten by commandline or env file) ## DOCKER_WORKDIR would be a classical ARG, but that is not multi layer persistent - shame @@ -19,6 +21,7 @@ ENV PORT="5010" # ENV PORT="${env.FEDERATION_PORT}" ## Timezone ENV TZ=UTC +ENV DB_HOST=mariadb # Labels LABEL org.label-schema.build-date="${BUILD_DATE}" @@ -51,7 +54,8 @@ WORKDIR ${DOCKER_WORKDIR} ################################################################################## FROM base as bun-base -RUN apk update && apk add --no-cache curl tar bash +RUN apt update && apt install -y --no-install-recommends ca-certificates curl bash unzip +#RUN apk update && apk add --no-cache curl tar bash RUN curl -fsSL https://bun.sh/install | bash # Add bun's global bin directory to PATH ENV PATH="/root/.bun/bin:${PATH}" @@ -66,27 +70,40 @@ CMD /bin/sh -c "bun install --filter federation --no-cache --frozen-lockfile \ && bun install --global --no-cache --no-save turbo@^2 \ && turbo federation#dev --env-mode=loose" +################################################################################## +# Basic Image with bun setup and project and source code ######################### +################################################################################## +FROM bun-base as bun-base-src +COPY --chown=app:app . . + ################################################################################## # Build ########################################################################## ################################################################################## -FROM bun-base as build +FROM bun-base-src as build -COPY --chown=app:app . . RUN bun install --filter federation --no-cache --frozen-lockfile \ - && bun install --global --no-cache --no-save turbo@^2 \ - && turbo federation#build federation#typecheck --env-mode=loose + && bun install --global --no-cache --no-save turbo@^2 +RUN turbo federation#build federation#typecheck --env-mode=loose ################################################################################## # TEST ########################################################################### ################################################################################## FROM build as test -ENV DB_HOST=mariadb - # Run command CMD /bin/sh -c "turbo federation#test --env-mode=loose" +################################################################################## +# install only node modules needed for running bundle ############################ +################################################################################## +FROM bun-base-src as production-node-modules + +# add node_modules from production_node_modules +RUN bun install --filter federation --production --frozen-lockfile --no-cache \ + && rm -rf /tmp/* ~/.cache node_modules/.cache \ + && ./scripts/clean-prebuilds.sh + ################################################################################## # PRODUCTION (Does contain only "binary"- and static-files to reduce image size) # ################################################################################## @@ -95,11 +112,8 @@ FROM base as production # Copy "binary"-files from build image COPY --chown=app:app --from=build ${DOCKER_WORKDIR}/federation/build/index.js ./index.js -# We also install the native node_modules which cannot be bundled -# TODO: find a elegant way to use the right versions from yarn.lock -RUN yarn add sodium-native@4.0.0 \ - && rm -rf /tmp/* ~/.cache node_modules/.cache \ - && yarn cache clean +# add node_modules from production_node_modules +COPY --chown=app:app --from=production-node-modules ${DOCKER_WORKDIR}/node_modules ./node_modules # Copy log4js-config.json to provide log configuration COPY --chown=app:app --from=build ${DOCKER_WORKDIR}/federation/log4js-config.json ./log4js-config.json diff --git a/federation/package.json b/federation/package.json index 02e832a83..ca1105e94 100644 --- a/federation/package.json +++ b/federation/package.json @@ -20,33 +20,11 @@ "lint:fix": "biome check --error-on-warnings . --write" }, "dependencies": { - "@anatine/esbuild-decorators": "^0.2.19", - "apollo-server-express": "^2.25.2", - "await-semaphore": "0.1.3", - "class-validator": "^0.13.2", - "config-schema": "*", - "cors": "2.8.5", "cross-env": "^7.0.3", - "database": "*", - "decimal.js-light": "^2.5.1", - "dotenv": "10.0.0", - "express": "^4.17.21", - "express-slow-down": "^2.0.1", - "graphql": "15.10.1", - "graphql-request": "5.0.0", - "graphql-scalars": "^1.24.2", - "helmet": "^7.1.0", - "joi": "^17.13.3", - "lodash.clonedeep": "^4.5.0", - "log4js": "^6.7.1", - "reflect-metadata": "^0.1.13", - "sodium-native": "^3.3.0", - "tsconfig-paths": "^4.1.1", - "type-graphql": "^1.1.1", - "typeorm": "^0.3.16", - "uuid": "8.3.2" + "sodium-native": "^3.4.1" }, - "devDependencies": { + "devDependencies": { + "@anatine/esbuild-decorators": "^0.2.19", "@biomejs/biome": "1.9.4", "@swc/cli": "^0.7.3", "@swc/core": "^1.11.24", @@ -57,18 +35,38 @@ "@types/node": "^17.0.21", "@types/sodium-native": "^2.3.5", "@types/uuid": "^8.3.4", + "apollo-server-express": "^2.25.2", "apollo-server-testing": "2.25.2", + "await-semaphore": "0.1.3", + "class-validator": "^0.13.2", + "config-schema": "*", + "cors": "2.8.5", + "database": "*", + "decimal.js-light": "^2.5.1", + "dotenv": "10.0.0", + "express": "^4.17.21", + "express-slow-down": "^2.0.1", + "graphql": "15.10.1", + "graphql-request": "5.0.0", + "graphql-scalars": "^1.24.2", "graphql-tag": "^2.12.6", + "helmet": "^7.1.0", "jest": "27.2.4", + "joi": "^17.13.3", + "lodash.clonedeep": "^4.5.0", + "log4js": "^6.7.1", "nodemon": "^2.0.7", "prettier": "^3.5.3", + "reflect-metadata": "^0.1.13", "ts-jest": "27.0.5", - "typescript": "^4.9.5" + "tsconfig-paths": "^4.1.1", + "type-graphql": "^1.1.1", + "typeorm": "^0.3.16", + "typescript": "^4.9.5", + "uuid": "8.3.2" }, "nodemonConfig": { - "ignore": [ - "**/*.test.ts" - ] + "ignore": ["**/*.test.ts"] }, "engines": { "node": ">=18" diff --git a/federation/src/server/createServer.ts b/federation/src/server/createServer.ts index 96ef61350..5971a26be 100644 --- a/federation/src/server/createServer.ts +++ b/federation/src/server/createServer.ts @@ -3,17 +3,13 @@ import 'reflect-metadata' import { ApolloServer } from 'apollo-server-express' import express, { Express, RequestHandler } from 'express' -import { checkDBVersion } from '@/typeorm/DBVersion' -// database -import { connection } from '@/typeorm/connection' +import { checkDBVersionUntil } from '@/typeorm/DBVersion' // server import cors from './cors' // import serverContext from './context' import { plugins } from './plugins' -// config -import { CONFIG } from '@/config' // graphql import { schema } from '@/graphql/schema' @@ -44,18 +40,7 @@ export const createServer = async ( logger.debug('createServer...') // open mysql connection - const con = await connection() - if (!con || !con.isConnected) { - logger.fatal(`Couldn't open connection to database!`) - throw new Error(`Fatal: Couldn't open connection to database`) - } - - // check for correct database version - const dbVersion = await checkDBVersion(CONFIG.DB_VERSION) - if (!dbVersion) { - logger.fatal('Fatal: Database Version incorrect') - throw new Error('Fatal: Database Version incorrect') - } + const con = await checkDBVersionUntil() // Express Server const app = express() diff --git a/federation/src/typeorm/DBVersion.ts b/federation/src/typeorm/DBVersion.ts index 392c74a33..a8d49b7cc 100644 --- a/federation/src/typeorm/DBVersion.ts +++ b/federation/src/typeorm/DBVersion.ts @@ -1,5 +1,29 @@ +import { CONFIG } from '@/config' import { federationLogger as logger } from '@/server/logger' import { Migration } from 'database' +import { Connection as DbConnection } from 'typeorm' +import { connection as connectionFunc } from './connection' + +async function checkDBVersionUntil(maxRetries = 15, delayMs = 500): Promise { + for (let attempt = 1; attempt <= maxRetries; attempt++) { + try { + const connection = await connectionFunc() + if (connection?.isInitialized) { + const dbVersion = await checkDBVersion(CONFIG.DB_VERSION) + if (dbVersion) { + logger.info('Database connection and version check succeeded.') + return connection + } + } + } catch (err) { + logger.warn(`Attempt ${attempt}: Waiting for DB...`, err) + } + await new Promise(resolve => setTimeout(resolve, delayMs)) + } + + logger.fatal(`Fatal: Could not connect to database or version check failed after ${maxRetries} attempts.`) + throw new Error('Fatal: Database not ready.') +} const getDBVersion = async (): Promise => { try { @@ -24,4 +48,4 @@ const checkDBVersion = async (DB_VERSION: string): Promise => { return true } -export { checkDBVersion, getDBVersion } +export { checkDBVersion, getDBVersion, checkDBVersionUntil } diff --git a/frontend/Dockerfile b/frontend/Dockerfile index 3bf6af01c..bdd41fee3 100644 --- a/frontend/Dockerfile +++ b/frontend/Dockerfile @@ -9,12 +9,13 @@ ENV DOCKER_WORKDIR="/app" ## We Cannot do `$(date -u +'%Y-%m-%dT%H:%M:%SZ')` here so we use unix timestamp=0 ENV BUILD_DATE="1970-01-01T00:00:00.00Z" ## We cannot do $(npm run version).${BUILD_NUMBER} here so we default to 0.0.0.0 +# TODO: get the actually git commit hash into docker ARG BUILD_VERSION -ENV BUILD_VERSION=${BUILD_VERSION} +ENV BUILD_VERSION=${BUILD_VERSION:-'broken'} ARG BUILD_COMMIT -ENV BUILD_COMMIT=${BUILD_COMMIT} +ENV BUILD_COMMIT=${BUILD_COMMIT:-'deadbeefdeadbeefdeadbeefdeadbeefdeadbeef'} ARG BUILD_COMMIT_SHORT -ENV BUILD_COMMIT_SHORT=${BUILD_COMMIT_SHORT} +ENV BUILD_COMMIT_SHORT=${BUILD_COMMIT_SHORT:-'deadbeef'} ## SET NODE_ENV ARG NODE_ENV=production ENV NODE_ENV=${NODE_ENV} @@ -83,10 +84,6 @@ COPY --chown=app:app . . RUN bun install --filter frontend --no-cache --frozen-lockfile \ && bun install --global turbo@^2 -# TODO: get the actually git commit hash into docker -ENV BUILD_COMMIT='deadbeefdeadbeefdeadbeefdeadbeefdeadbeef' -ENV BUILD_COMMIT_SHORT='deadbeef' -ENV BUILD_VERSION='broken' RUN turbo frontend#build --env-mode=loose ################################################################################## @@ -97,14 +94,14 @@ FROM build as test # Run command CMD /bin/sh -c "turbo frontend#test --env-mode=loose" - ################################################################################## # PRODUCTION (Does contain only "binary"- and static-files to reduce image size) # ################################################################################## -FROM lipanski/docker-static-website:latest as production +FROM nginx:1.28.0-alpine3.21-slim as production -# tiny static webserver -# https://lipanski.com/posts/smallest-docker-image-static-website +COPY ./nginx/frontend.conf /etc/nginx/conf.d/default.conf + +WORKDIR /app # copy builded frontend files COPY --from=build /app/frontend/build/ . diff --git a/nginx/Dockerfile b/nginx/Dockerfile index b78a70f12..7bb976721 100644 --- a/nginx/Dockerfile +++ b/nginx/Dockerfile @@ -1,8 +1,9 @@ -FROM nginx:1.21.0-alpine +FROM nginx:1.28.0-alpine3.21-slim COPY ./gradido.conf /etc/nginx/conf.d/default.conf + diff --git a/nginx/admin.conf b/nginx/admin.conf new file mode 100644 index 000000000..336687b44 --- /dev/null +++ b/nginx/admin.conf @@ -0,0 +1,14 @@ +server { + server_name _; + + listen 8080; + listen [::]:8080; + + # Admin Frontend + location /admin { + rewrite ^/admin/(.*)$ /$1 break; + root /app/admin/; + index index.html; + try_files $uri $uri/ /index.html = 404; + } +} \ No newline at end of file diff --git a/nginx/frontend.conf b/nginx/frontend.conf new file mode 100644 index 000000000..07dc4977a --- /dev/null +++ b/nginx/frontend.conf @@ -0,0 +1,12 @@ +server { + server_name _; + + listen 3000; + listen [::]:3000; + + location / { + root /app/; + index index.html; + try_files $uri $uri/ /index.html = 404; + } +} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 22ac25cd1..c31f41105 100644 --- a/yarn.lock +++ b/yarn.lock @@ -830,7 +830,7 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3" integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== -"@hyperswarm/dht@^6.5.1": +"@hyperswarm/dht@6.5.1": version "6.5.1" resolved "https://registry.yarnpkg.com/@hyperswarm/dht/-/dht-6.5.1.tgz#07e144590f532c2f872e3617117d17f266b2f7a4" integrity sha512-TTTOzuwqbmXNwl+b2FXeHCoR2QS1sqxQvqXwv2i54sdEkKmF8f8t4U8PsRGk5PUO3qA6GxlMThvXixg9Fgs4Yw== @@ -4936,7 +4936,7 @@ detect-newline@^3.0.0, detect-newline@^3.1.0: resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== -dht-rpc@^6.6.3: +dht-rpc@6.18.1, dht-rpc@^6.6.3: version "6.18.1" resolved "https://registry.yarnpkg.com/dht-rpc/-/dht-rpc-6.18.1.tgz#6e4109989d47fea487f0be8efa2980557019fde7" integrity sha512-uTcHj8dERVjmoUsSxqAulQ+qo11Qy4pMK419tyF2cFpyf56Y09u1v9g8yWlay0KjUY5bvdybBQ/V8YWN/wyK5Q== @@ -10320,7 +10320,7 @@ slick@^1.12.2: resolved "https://registry.yarnpkg.com/slick/-/slick-1.12.2.tgz#bd048ddb74de7d1ca6915faa4a57570b3550c2d7" integrity sha512-4qdtOGcBjral6YIBCWJ0ljFSKNLz9KkhbWtuGvUyRowl1kxfuE1x/Z/aJcaiilpb3do9bl5K7/1h9XC5wWpY/A== -sodium-native@^3.3.0, sodium-native@^3.4.1: +sodium-native@^3.4.1: version "3.4.1" resolved "https://registry.yarnpkg.com/sodium-native/-/sodium-native-3.4.1.tgz#44616c07ccecea15195f553af88b3e574b659741" integrity sha512-PaNN/roiFWzVVTL6OqjzYct38NSXewdl2wz8SRB51Br/MLIJPrbM3XexhVWkq7D3UWMysfrhKVf1v1phZq6MeQ== @@ -10350,7 +10350,7 @@ sodium-secretstream@^1.1.0: b4a "^1.1.1" sodium-universal "^5.0.0" -sodium-universal@^4.0.0: +sodium-universal@4.0.1, sodium-universal@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/sodium-universal/-/sodium-universal-4.0.1.tgz#75146f3b6fb6ab0dcc9278ad468ef5f23a0351e4" integrity sha512-sNp13PrxYLaUFHTGoDKkSDFvoEu51bfzE12RwGlqU1fcrkpAOK0NvizaJzOWV0Omtk9me2+Pnbjcf/l0efxuGQ== From 3957204ae901b511302e9d79a307f386698d2cdc Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Tue, 6 May 2025 17:33:03 +0200 Subject: [PATCH 098/123] fix lint --- backend/src/password/EncryptionWorker.d.ts | 5 ++-- backend/src/password/EncryptorUtils.ts | 7 ++--- backend/src/password/worker.js | 1 - backend/src/typeorm/DBVersion.ts | 6 ++-- database/src/prepare.ts | 7 +++-- deployment/bare_metal/start.sh | 33 ++++++++++++---------- dht-node/src/typeorm/DBVersion.ts | 6 ++-- federation/src/server/createServer.ts | 1 - federation/src/typeorm/DBVersion.ts | 6 ++-- 9 files changed, 40 insertions(+), 32 deletions(-) diff --git a/backend/src/password/EncryptionWorker.d.ts b/backend/src/password/EncryptionWorker.d.ts index f97c4cc12..189f10dff 100644 --- a/backend/src/password/EncryptionWorker.d.ts +++ b/backend/src/password/EncryptionWorker.d.ts @@ -1,7 +1,6 @@ - export function SecretKeyCryptographyCreateKeyFunc( salt: string, password: string, configLoginAppSecret: Buffer, - configLoginServerKey: Buffer -): bigint; \ No newline at end of file + configLoginServerKey: Buffer, +): bigint diff --git a/backend/src/password/EncryptorUtils.ts b/backend/src/password/EncryptorUtils.ts index 8e8e22495..7da8bc9c1 100644 --- a/backend/src/password/EncryptorUtils.ts +++ b/backend/src/password/EncryptorUtils.ts @@ -20,10 +20,9 @@ const configLoginServerKey = Buffer.from(CONFIG.LOGIN_SERVER_KEY, 'hex') let encryptionWorkerPool: Pool | undefined if (CONFIG.USE_CRYPTO_WORKER === true) { - encryptionWorkerPool = pool( - path.join(__dirname, 'worker.js'), - { maxQueueSize: 30 * cpus().length }, - ) + encryptionWorkerPool = pool(path.join(__dirname, 'worker.js'), { + maxQueueSize: 30 * cpus().length, + }) } // We will reuse this for changePassword diff --git a/backend/src/password/worker.js b/backend/src/password/worker.js index 3ba062313..2c1b911f8 100644 --- a/backend/src/password/worker.js +++ b/backend/src/password/worker.js @@ -4,4 +4,3 @@ const { SecretKeyCryptographyCreateKeyFunc } = require('./EncryptionWorker') worker({ SecretKeyCryptographyCreateKeyFunc, }) - diff --git a/backend/src/typeorm/DBVersion.ts b/backend/src/typeorm/DBVersion.ts index 6eaa7fb07..6ce3ac293 100644 --- a/backend/src/typeorm/DBVersion.ts +++ b/backend/src/typeorm/DBVersion.ts @@ -20,10 +20,12 @@ async function checkDBVersionUntil(maxRetries = 15, delayMs = 500): Promise setTimeout(resolve, delayMs)) + await new Promise((resolve) => setTimeout(resolve, delayMs)) } - logger.fatal(`Fatal: Could not connect to database or version check failed after ${maxRetries} attempts.`) + logger.fatal( + `Fatal: Could not connect to database or version check failed after ${maxRetries} attempts.`, + ) throw new Error('Fatal: Database not ready.') } diff --git a/database/src/prepare.ts b/database/src/prepare.ts index 2b9d5682d..9e4bfe1e1 100644 --- a/database/src/prepare.ts +++ b/database/src/prepare.ts @@ -11,7 +11,10 @@ export enum DatabaseState { SAME_VERSION = 'SAME_VERSION', } -export async function connectToDatabaseServer(maxRetries = 15, delayMs = 500): Promise { +export async function connectToDatabaseServer( + maxRetries = 15, + delayMs = 500, +): Promise { for (let attempt = 1; attempt <= maxRetries; attempt++) { try { return await createConnection({ @@ -24,7 +27,7 @@ export async function connectToDatabaseServer(maxRetries = 15, delayMs = 500): P // biome-ignore lint/suspicious/noConsole: no logger present console.log(`could not connect to database server, retry in ${delayMs} ms`, e) } - await new Promise(resolve => setTimeout(resolve, delayMs)) + await new Promise((resolve) => setTimeout(resolve, delayMs)) } return null } diff --git a/deployment/bare_metal/start.sh b/deployment/bare_metal/start.sh index 083137762..ce7d92ff7 100755 --- a/deployment/bare_metal/start.sh +++ b/deployment/bare_metal/start.sh @@ -20,12 +20,7 @@ then bun install --global turbo fi -# helper functions -log_step() { - local message="$1" - echo -e "\e[34m$message\e[0m" > /dev/tty # blue in console - echo "

$message

" >> "$UPDATE_HTML" # blue in html -} + # check for parameter FAST_MODE=false @@ -54,15 +49,6 @@ fi BRANCH_NAME="$1" -# Debug-Ausgabe -if [ -z "$1" ]; then - echo "Usage: Please provide a branch name as the first argument." - exit 1 -fi -log_step "Use branch: $BRANCH_NAME" -if [ "$FAST_MODE" = true ] ; then - log_step "Use fast mode, keep packet manager, turbo and build cache" -fi # Find current directory & configure paths set -o allexport SCRIPT_PATH=$(realpath $0) @@ -73,6 +59,23 @@ PROJECT_ROOT=$SCRIPT_DIR/../.. NGINX_CONFIG_DIR=$SCRIPT_DIR/nginx/sites-available set +o allexport +# helper functions +log_step() { + local message="$1" + echo -e "\e[34m$message\e[0m" > /dev/tty # blue in console + echo "

$message

" >> "$UPDATE_HTML" # blue in html +} + +# Debug-Ausgabe +if [ -z "$1" ]; then + echo "Usage: Please provide a branch name as the first argument." + exit 1 +fi +log_step "Use branch: $BRANCH_NAME" +if [ "$FAST_MODE" = true ] ; then + log_step "Use fast mode, keep packet manager, turbo and build cache" +fi + # enable nvm export NVM_DIR="$HOME/.nvm" && [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" nvm use default diff --git a/dht-node/src/typeorm/DBVersion.ts b/dht-node/src/typeorm/DBVersion.ts index 0cd7c0ea5..ee97c3c0a 100644 --- a/dht-node/src/typeorm/DBVersion.ts +++ b/dht-node/src/typeorm/DBVersion.ts @@ -20,10 +20,12 @@ async function checkDBVersionUntil(maxRetries = 15, delayMs = 500): Promise setTimeout(resolve, delayMs)) + await new Promise((resolve) => setTimeout(resolve, delayMs)) } - logger.fatal(`Fatal: Could not connect to database or version check failed after ${maxRetries} attempts.`) + logger.fatal( + `Fatal: Could not connect to database or version check failed after ${maxRetries} attempts.`, + ) throw new Error('Fatal: Database not ready.') } diff --git a/federation/src/server/createServer.ts b/federation/src/server/createServer.ts index 5971a26be..d3df01e18 100644 --- a/federation/src/server/createServer.ts +++ b/federation/src/server/createServer.ts @@ -10,7 +10,6 @@ import cors from './cors' // import serverContext from './context' import { plugins } from './plugins' - // graphql import { schema } from '@/graphql/schema' diff --git a/federation/src/typeorm/DBVersion.ts b/federation/src/typeorm/DBVersion.ts index a8d49b7cc..ed907d2d8 100644 --- a/federation/src/typeorm/DBVersion.ts +++ b/federation/src/typeorm/DBVersion.ts @@ -18,10 +18,12 @@ async function checkDBVersionUntil(maxRetries = 15, delayMs = 500): Promise setTimeout(resolve, delayMs)) + await new Promise((resolve) => setTimeout(resolve, delayMs)) } - logger.fatal(`Fatal: Could not connect to database or version check failed after ${maxRetries} attempts.`) + logger.fatal( + `Fatal: Could not connect to database or version check failed after ${maxRetries} attempts.`, + ) throw new Error('Fatal: Database not ready.') } From 66c7108abda1d12a332d643c74b3e28fcec39d2b Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Tue, 6 May 2025 17:53:11 +0200 Subject: [PATCH 099/123] remove .env.git, rest from experiment, update publis worker --- .env.git | 3 - .github/workflows/publish.yml | 150 ++++++++++++++++++++++------------ 2 files changed, 99 insertions(+), 54 deletions(-) delete mode 100644 .env.git diff --git a/.env.git b/.env.git deleted file mode 100644 index 9146fae2d..000000000 --- a/.env.git +++ /dev/null @@ -1,3 +0,0 @@ -BUILD_COMMIT=e7b1c19bc8a0d0ed73aeaa98283be3e47af47831 -BUILD_COMMIT_SHORT=e7b1c19bc -BUILD_VERSION=b2.3.1.1425-861-ge7b1c19bc diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index ec437ad37..e225fa99b 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -18,7 +18,7 @@ jobs: # CHECKOUT CODE ########################################################## ########################################################################## - name: Checkout code - uses: actions/checkout@v2 + uses: actions/checkout@v4 ########################################################################## # SET ENVS ############################################################### ########################################################################## @@ -55,7 +55,7 @@ jobs: # CHECKOUT CODE ########################################################## ########################################################################## - name: Checkout code - uses: actions/checkout@v2 + uses: actions/checkout@v4 ########################################################################## # SET ENVS ############################################################### ########################################################################## @@ -80,6 +80,80 @@ jobs: name: docker-backend-production path: /tmp/backend.tar + ############################################################################## + # JOB: DOCKER BUILD PRODUCTION DHT-NODE ###################################### + ############################################################################## + build_production_dht-node: + name: Docker Build Production - DHT-Node + runs-on: ubuntu-latest + #needs: [nothing] + steps: + ########################################################################## + # CHECKOUT CODE ########################################################## + ########################################################################## + - name: Checkout code + uses: actions/checkout@v4 + ########################################################################## + # SET ENVS ############################################################### + ########################################################################## + - name: ENV - VERSION + run: echo "VERSION=$(node -p -e "require('./package.json').version")" >> $GITHUB_ENV + - name: ENV - BUILD_DATE + run: echo "BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" >> $GITHUB_ENV + - name: ENV - BUILD_VERSION + run: echo "BUILD_VERSION=${VERSION}.${GITHUB_RUN_NUMBER}" >> $GITHUB_ENV + - name: ENV - BUILD_COMMIT + run: echo "BUILD_COMMIT=${GITHUB_SHA}" >> $GITHUB_ENV + ########################################################################## + # DHT-NODE ################################################################ + ########################################################################## + - name: DHT-Node | Build `production` image + run: | + docker build -f ./dht-node/Dockerfile --target production -t "gradido/dht-node:latest" -t "gradido/dht-node:production" -t "gradido/dht-node:${VERSION}" -t "gradido/dht-node:${BUILD_VERSION}" . + docker save "gradido/dht-node" > /tmp/dht-node.tar + - name: Upload Artifact + uses: actions/upload-artifact@v4 + with: + name: docker-dht-node-production + path: /tmp/dht-node.tar + + ############################################################################## + # JOB: DOCKER BUILD PRODUCTION FEDERATION ###################################### + ############################################################################## + build_production_federation: + name: Docker Build Production - Federation + runs-on: ubuntu-latest + #needs: [nothing] + steps: + ########################################################################## + # CHECKOUT CODE ########################################################## + ########################################################################## + - name: Checkout code + uses: actions/checkout@v4 + ########################################################################## + # SET ENVS ############################################################### + ########################################################################## + - name: ENV - VERSION + run: echo "VERSION=$(node -p -e "require('./package.json').version")" >> $GITHUB_ENV + - name: ENV - BUILD_DATE + run: echo "BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" >> $GITHUB_ENV + - name: ENV - BUILD_VERSION + run: echo "BUILD_VERSION=${VERSION}.${GITHUB_RUN_NUMBER}" >> $GITHUB_ENV + - name: ENV - BUILD_COMMIT + run: echo "BUILD_COMMIT=${GITHUB_SHA}" >> $GITHUB_ENV + ########################################################################## + # FEDERATION ############################################################## + ########################################################################## + - name: Federation | Build `production` image + run: | + docker build -f ./federation/Dockerfile --target production -t "gradido/federation:latest" -t "gradido/federation:production" -t "gradido/federation:${VERSION}" -t "gradido/federation:${BUILD_VERSION}" . + docker save "gradido/federation" > /tmp/federation.tar + - name: Upload Artifact + uses: actions/upload-artifact@v4 + with: + name: docker-federation-production + path: /tmp/federation.tar + ############################################################################## # JOB: DOCKER BUILD PRODUCTION DATABASE UP ################################### ############################################################################## @@ -92,7 +166,7 @@ jobs: # CHECKOUT CODE ########################################################## ########################################################################## - name: Checkout code - uses: actions/checkout@v2 + uses: actions/checkout@v4 ########################################################################## # DATABASE UP ############################################################ ########################################################################## @@ -106,43 +180,6 @@ jobs: name: docker-database-production_up path: /tmp/database_up.tar - ############################################################################## - # JOB: DOCKER BUILD PRODUCTION MARIADB ####################################### - ############################################################################## - build_production_mariadb: - name: Docker Build Production - MariaDB - runs-on: ubuntu-latest - #needs: [nothing] - steps: - ########################################################################## - # CHECKOUT CODE ########################################################## - ########################################################################## - - name: Checkout code - uses: actions/checkout@v2 - ########################################################################## - # SET ENVS ############################################################### - ########################################################################## - - name: ENV - VERSION - run: echo "VERSION=$(node -p -e "require('./package.json').version")" >> $GITHUB_ENV - - name: ENV - BUILD_DATE - run: echo "BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" >> $GITHUB_ENV - - name: ENV - BUILD_VERSION - run: echo "BUILD_VERSION=${VERSION}.${GITHUB_RUN_NUMBER}" >> $GITHUB_ENV - - name: ENV - BUILD_COMMIT - run: echo "BUILD_COMMIT=${GITHUB_SHA}" >> $GITHUB_ENV - ########################################################################## - # MARIADB ################################################################ - ########################################################################## - - name: MariaDB | Build `production` image - run: | - docker build -t "gradido/mariadb:latest" -t "gradido/mariadb:production" -t "gradido/mariadb:${VERSION}" -t "gradido/mariadb:${BUILD_VERSION}" -f ./mariadb/Dockerfile ./ - docker save "gradido/mariadb" > /tmp/mariadb.tar - - name: Upload Artifact - uses: actions/upload-artifact@v4 - with: - name: docker-mariadb-production - path: /tmp/mariadb.tar - ############################################################################## # JOB: DOCKER BUILD PRODUCTION NGINX ######################################### ############################################################################## @@ -155,7 +192,7 @@ jobs: # CHECKOUT CODE ########################################################## ########################################################################## - name: Checkout code - uses: actions/checkout@v2 + uses: actions/checkout@v4 ########################################################################## # SET ENVS ############################################################### ########################################################################## @@ -186,7 +223,7 @@ jobs: upload_to_dockerhub: name: Upload to Dockerhub runs-on: ubuntu-latest - needs: [build_production_frontend, build_production_backend, build_production_database_up, build_production_mariadb, build_production_nginx] + needs: [build_production_frontend, build_production_backend, build_production_database_up, build_production_nginx] env: DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }} DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }} @@ -195,7 +232,7 @@ jobs: # CHECKOUT CODE ########################################################## ########################################################################## - name: Checkout code - uses: actions/checkout@v2 + uses: actions/checkout@v4 ########################################################################## # DOWNLOAD DOCKER IMAGES ################################################# ########################################################################## @@ -213,6 +250,20 @@ jobs: path: /tmp - name: Load Docker Image run: docker load < /tmp/backend.tar + - name: Download Docker Image (DHT-Node) + uses: actions/download-artifact@v4 + with: + name: docker-dht-node-production + path: /tmp + - name: Load Docker Image + run: docker load < /tmp/dht-node.tar + - name: Download Docker Image (Federation) + uses: actions/download-artifact@v4 + with: + name: docker-federation-production + path: /tmp + - name: Load Docker Image + run: docker load < /tmp/federation.tar - name: Download Docker Image (Database) uses: actions/download-artifact@v4 with: @@ -220,11 +271,6 @@ jobs: path: /tmp - name: Load Docker Image run: docker load < /tmp/database_up.tar - - name: Download Docker Image (MariaDB) - uses: actions/download-artifact@v4 - with: - name: docker-mariadb-production - path: /tmp - name: Load Docker Image run: docker load < /tmp/mariadb.tar - name: Download Docker Image (Nginx) @@ -243,10 +289,12 @@ jobs: run: docker push --all-tags gradido/frontend - name: Push backend run: docker push --all-tags gradido/backend + - name: Push dht-node + run: docker push --all-tags gradido/dht-node + - name: Push federation + run: docker push --all-tags gradido/federation - name: Push database run: docker push --all-tags gradido/database - - name: Push MariaDB - run: docker push --all-tags gradido/mariadb - name: Push Nginx run: docker push --all-tags gradido/nginx @@ -262,7 +310,7 @@ jobs: # CHECKOUT CODE ########################################################## ########################################################################## - name: Checkout code - uses: actions/checkout@v2 + uses: actions/checkout@v4 with: fetch-depth: 0 # Fetch full History for changelog ########################################################################## From 3cf9e96974864370f1c9a1173382267564e6e058 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Tue, 6 May 2025 22:28:55 +0200 Subject: [PATCH 100/123] fix config fix in admin and frontend --- admin/src/config/index.js | 2 +- admin/vite.config.mjs | 8 ++++++-- frontend/src/config/index.js | 2 +- frontend/vite.config.mjs | 5 ++++- 4 files changed, 12 insertions(+), 5 deletions(-) diff --git a/admin/src/config/index.js b/admin/src/config/index.js index d64ba6f5f..37d98c606 100644 --- a/admin/src/config/index.js +++ b/admin/src/config/index.js @@ -2,7 +2,7 @@ // The whole contents is exposed to the client // Load Package Details for some default values -import pkg from '../../package' +const pkg = require('../../package') const version = { ADMIN_MODULE_PROTOCOL: process.env.ADMIN_MODULE_PROTOCOL ?? 'http', diff --git a/admin/vite.config.mjs b/admin/vite.config.mjs index 992626334..3474b2032 100644 --- a/admin/vite.config.mjs +++ b/admin/vite.config.mjs @@ -6,18 +6,22 @@ import Components from 'unplugin-vue-components/vite' import IconsResolve from 'unplugin-icons/resolver' import { BootstrapVueNextResolver } from 'bootstrap-vue-next' import EnvironmentPlugin from 'vite-plugin-environment' + import schema from './src/config/schema' -import CONFIG from './src/config' + import { execSync } from 'node:child_process' import { existsSync, constants } from 'node:fs' import { validate, browserUrls } from 'config-schema' import path from 'node:path' +import { createRequire } from 'node:module' import dotenv from 'dotenv' - dotenv.config() // load env vars from .env +const require = createRequire(import.meta.url) +const CONFIG = require('./src/config') + export default defineConfig(async ({ command }) => { const { vitePluginGraphqlLoader } = await import('vite-plugin-graphql-loader') if (command === 'serve') { diff --git a/frontend/src/config/index.js b/frontend/src/config/index.js index 727760353..0ee64509e 100644 --- a/frontend/src/config/index.js +++ b/frontend/src/config/index.js @@ -2,7 +2,7 @@ // The whole contents is exposed to the client // Load Package Details for some default values -import pkg from '../../package' +const pkg = require('../../package') const constants = { DECAY_START_TIME: new Date('2021-05-13 17:46:31-0000'), // GMT+0 diff --git a/frontend/vite.config.mjs b/frontend/vite.config.mjs index 5becc8ad3..ca640fea3 100644 --- a/frontend/vite.config.mjs +++ b/frontend/vite.config.mjs @@ -10,17 +10,20 @@ import { createHtmlPlugin } from 'vite-plugin-html' import schema from './src/config/schema' import { execSync } from 'node:child_process' import { existsSync, constants } from 'node:fs' -import CONFIG from './src/config' + import { validate, browserUrls } from 'config-schema' import { BootstrapVueNextResolver } from 'bootstrap-vue-next' import { createRequire } from 'node:module' +import dotenv from 'dotenv' +dotenv.config() // load env vars from .env import dotenv from 'dotenv' dotenv.config() // load env vars from .env const require = createRequire(import.meta.url) +const CONFIG = require('./src/config') // https://vitejs.dev/config/ export default defineConfig(async ({ command }) => { From 193d9bfa319359a066a2819a95ea7f2688bc48a6 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Wed, 7 May 2025 16:17:16 +0200 Subject: [PATCH 101/123] remove double --- frontend/vite.config.mjs | 4 ---- 1 file changed, 4 deletions(-) diff --git a/frontend/vite.config.mjs b/frontend/vite.config.mjs index ca640fea3..0101e12bf 100644 --- a/frontend/vite.config.mjs +++ b/frontend/vite.config.mjs @@ -18,10 +18,6 @@ import { createRequire } from 'node:module' import dotenv from 'dotenv' dotenv.config() // load env vars from .env -import dotenv from 'dotenv' - -dotenv.config() // load env vars from .env - const require = createRequire(import.meta.url) const CONFIG = require('./src/config') From 611328e7af89bea6ff3fa02689fd81cb8ff593b4 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Wed, 7 May 2025 16:20:32 +0200 Subject: [PATCH 102/123] fix linting --- dht-node/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dht-node/package.json b/dht-node/package.json index 4e7224b4a..ac51035eb 100644 --- a/dht-node/package.json +++ b/dht-node/package.json @@ -1,5 +1,5 @@ { - "name": "dht-node", + "name": "dht-node", "version": "2.5.2", "description": "Gradido dht-node module", "main": "src/index.ts", From 3e96a1ab68793dc622eb9894c4d89a648d201e40 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Thu, 8 May 2025 11:12:04 +0200 Subject: [PATCH 103/123] fix migration table, js -> ts --- database/src/prepare.ts | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/database/src/prepare.ts b/database/src/prepare.ts index 9e4bfe1e1..fc359c226 100644 --- a/database/src/prepare.ts +++ b/database/src/prepare.ts @@ -1,4 +1,3 @@ -/* eslint-disable no-unused-vars */ import { Connection, ResultSetHeader, RowDataPacket, createConnection } from 'mysql2/promise' import { CONFIG } from './config' @@ -32,6 +31,16 @@ export async function connectToDatabaseServer( return null } +async function convertJsToTsInMigrations(connection: Connection): Promise { + const [result] = await connection.query(` + UPDATE ${CONFIG.MIGRATIONS_TABLE} + SET fileName = REPLACE(fileName, '.js', '.ts') + WHERE fileName LIKE '%.js' + `) + + return result.affectedRows +} + export const getDatabaseState = async (): Promise => { const connection = await connectToDatabaseServer() if (!connection) { @@ -66,9 +75,29 @@ export const getDatabaseState = async (): Promise => { await connection.query(`USE ${CONFIG.DB_DATABASE}`) + // check structure of fileNames, normally they should all ends with .ts + // but from older version they can end all on .js, that we need to fix + // they can even be mixed, but this we cannot easily fix automatic, so we must throw an error + const [counts] = await connection.query(` + SELECT + SUM(fileName LIKE '%.js') AS jsCount, + SUM(fileName LIKE '%.ts') AS tsCount + FROM ${CONFIG.MIGRATIONS_TABLE} + `) + + if (counts[0].jsCount > 0 && counts[0].tsCount > 0) { + throw new Error('Mixed JS and TS migrations found, we cannot fix this automatically') + } + + if (counts[0].jsCount > 0) { + const converted = await convertJsToTsInMigrations(connection) + // biome-ignore lint/suspicious/noConsole: no logger present + console.log(`Converted ${converted} JS migrations to TS`) + } + // check if the database is up to date const [rows] = await connection.query( - `SELECT * FROM ${CONFIG.MIGRATIONS_TABLE} ORDER BY version DESC LIMIT 1`, + `SELECT fileName FROM ${CONFIG.MIGRATIONS_TABLE} ORDER BY version DESC LIMIT 1`, ) if (rows.length === 0) { return DatabaseState.LOWER_VERSION From bd028de8957c8f68c6a1c6cf5d3c2b00b6c1741e Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Thu, 8 May 2025 11:18:15 +0200 Subject: [PATCH 104/123] let stop the start script is some command fails --- deployment/bare_metal/start.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/deployment/bare_metal/start.sh b/deployment/bare_metal/start.sh index ce7d92ff7..e4a409c3e 100755 --- a/deployment/bare_metal/start.sh +++ b/deployment/bare_metal/start.sh @@ -1,5 +1,6 @@ #!/bin/bash - +# stop if something fails +set -euo pipefail # check for some tools and install them, when missing # bun https://bun.sh/install, faster packet-manager as yarn if ! command -v bun &> /dev/null From becfa4abed0b1d45960370d14e75040e0f3a1d42 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Thu, 8 May 2025 11:45:58 +0200 Subject: [PATCH 105/123] cleanup and error message in start script --- deployment/bare_metal/start.sh | 56 ++++++++++++++++++++++++---------- 1 file changed, 40 insertions(+), 16 deletions(-) diff --git a/deployment/bare_metal/start.sh b/deployment/bare_metal/start.sh index e4a409c3e..b35448ccd 100755 --- a/deployment/bare_metal/start.sh +++ b/deployment/bare_metal/start.sh @@ -1,6 +1,9 @@ #!/bin/bash # stop if something fails set -euo pipefail + +LOCK_FILE=$SCRIPT_DIR/update.lock + # check for some tools and install them, when missing # bun https://bun.sh/install, faster packet-manager as yarn if ! command -v bun &> /dev/null @@ -21,8 +24,6 @@ then bun install --global turbo fi - - # check for parameter FAST_MODE=false POSITIONAL_ARGS=() @@ -54,32 +55,24 @@ BRANCH_NAME="$1" set -o allexport SCRIPT_PATH=$(realpath $0) SCRIPT_DIR=$(dirname $SCRIPT_PATH) -LOCK_FILE=$SCRIPT_DIR/update.lock UPDATE_HTML=$SCRIPT_DIR/nginx/update-page/updating.html PROJECT_ROOT=$SCRIPT_DIR/../.. NGINX_CONFIG_DIR=$SCRIPT_DIR/nginx/sites-available set +o allexport -# helper functions -log_step() { - local message="$1" - echo -e "\e[34m$message\e[0m" > /dev/tty # blue in console - echo "

$message

" >> "$UPDATE_HTML" # blue in html -} - # Debug-Ausgabe if [ -z "$1" ]; then echo "Usage: Please provide a branch name as the first argument." exit 1 fi -log_step "Use branch: $BRANCH_NAME" +echo "Use branch: $BRANCH_NAME" if [ "$FAST_MODE" = true ] ; then - log_step "Use fast mode, keep packet manager, turbo and build cache" + echo "Use fast mode, keep packet manager, turbo and build cache" fi # enable nvm export NVM_DIR="$HOME/.nvm" && [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" -nvm use default +nvm use # NOTE: all config values will be in process.env when starting # the services and will therefore take precedence over the .env @@ -127,6 +120,13 @@ if [ -f $LOCK_FILE ] ; then fi touch $LOCK_FILE +# called always on exit, regardless of error or success +cleanup() { + # release lock + rm $LOCK_FILE +} +trap cleanup EXIT + # find today string TODAY=$(date +"%Y-%m-%d") @@ -138,10 +138,35 @@ TODAY=$(date +"%Y-%m-%d") exec > >(tee -a $UPDATE_HTML) 2>&1 # configure nginx for the update-page -log_step 'Configuring nginx to serve the update-page' +echo 'Configuring nginx to serve the update-page' ln -sf $SCRIPT_DIR/nginx/sites-available/update-page.conf $SCRIPT_DIR/nginx/sites-enabled/default sudo /etc/init.d/nginx restart +# helper functions +log_step() { + local message="$1" + echo -e "\e[34m$message\e[0m" > /dev/tty # blue in console + echo "

$message

" >> "$UPDATE_HTML" # blue in html +} +log_error() { + local message="$1" + echo -e "\e[31m$message\e[0m" > /dev/tty # red in console + echo "

$message

" >> "$UPDATE_HTML" # red in html +} +log_success() { + local message="$1" + echo -e "\e[32m$message\e[0m" > /dev/tty # green in console + echo "

$message

" >> "$UPDATE_HTML" # green in html +} + +onError() { + log_error "Error: $1" + cleanup + exit 1 +} +trap onError ERR + + # stop all services log_step "Stop and delete all Gradido services" pm2 delete all @@ -307,5 +332,4 @@ sudo /etc/init.d/nginx restart # keep the update log cat $UPDATE_HTML >> $GRADIDO_LOG_PATH/update.$TODAY.log -# release lock -rm $LOCK_FILE +log_success 'Update finished' \ No newline at end of file From 8cdbf6b0398bfd0766ffbdf4bbf8cfde9d60a61a Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Thu, 8 May 2025 11:47:22 +0200 Subject: [PATCH 106/123] move var back to correct place --- deployment/bare_metal/start.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/deployment/bare_metal/start.sh b/deployment/bare_metal/start.sh index b35448ccd..75d91be58 100755 --- a/deployment/bare_metal/start.sh +++ b/deployment/bare_metal/start.sh @@ -2,8 +2,6 @@ # stop if something fails set -euo pipefail -LOCK_FILE=$SCRIPT_DIR/update.lock - # check for some tools and install them, when missing # bun https://bun.sh/install, faster packet-manager as yarn if ! command -v bun &> /dev/null @@ -55,6 +53,7 @@ BRANCH_NAME="$1" set -o allexport SCRIPT_PATH=$(realpath $0) SCRIPT_DIR=$(dirname $SCRIPT_PATH) +LOCK_FILE=$SCRIPT_DIR/update.lock UPDATE_HTML=$SCRIPT_DIR/nginx/update-page/updating.html PROJECT_ROOT=$SCRIPT_DIR/../.. NGINX_CONFIG_DIR=$SCRIPT_DIR/nginx/sites-available From b787279a88075dccf51f9c036d5cdaeaf1f0a18f Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Thu, 8 May 2025 11:54:39 +0200 Subject: [PATCH 107/123] show ascii art on error --- deployment/bare_metal/start.sh | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/deployment/bare_metal/start.sh b/deployment/bare_metal/start.sh index 75d91be58..e6b78e1d6 100755 --- a/deployment/bare_metal/start.sh +++ b/deployment/bare_metal/start.sh @@ -159,7 +159,16 @@ log_success() { } onError() { - log_error "Error: $1" + local exit_code=$? + log_error "" + log_error " /> フ" + log_error " | _ _| Aaaaah!" + log_error " /\` ミ_xノ Command failed!" + log_error " /     | Line: $LINENO" + log_error "/  ヽ   ノ Exit Code: $exit_code" + log_error "| | | | Offending command: '$BASH_COMMAND'" + log_error "ノ_ノ。_ノ。_ノ。。。。。。。。。。。。" + log_error "" cleanup exit 1 } From de6fef306fc3ee9884eac3a2e0337822b913bab6 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Thu, 8 May 2025 12:05:12 +0200 Subject: [PATCH 108/123] use smaller cat --- deployment/bare_metal/start.sh | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/deployment/bare_metal/start.sh b/deployment/bare_metal/start.sh index e6b78e1d6..8e99a89a1 100755 --- a/deployment/bare_metal/start.sh +++ b/deployment/bare_metal/start.sh @@ -160,15 +160,11 @@ log_success() { onError() { local exit_code=$? - log_error "" - log_error " /> フ" - log_error " | _ _| Aaaaah!" - log_error " /\` ミ_xノ Command failed!" - log_error " /     | Line: $LINENO" - log_error "/  ヽ   ノ Exit Code: $exit_code" - log_error "| | | | Offending command: '$BASH_COMMAND'" - log_error "ノ_ノ。_ノ。_ノ。。。。。。。。。。。。" - log_error "" + echo -e "\e[31m Command failed!\e[0m" + echo -e "\e[31m /\\_/\\ Line: $LINENO\e[0m" + echo -e "\e[31m( o.o ) Exit Code: $exit_code\e[0m" + echo -e "\e[31m > ^ < Offending command: '$BASH_COMMAND'\e[0m" + echo -e "\e[31m\e[0m" cleanup exit 1 } From b4dd83b3076b66233ff3f334a8d3d7c2cb6091e8 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Thu, 8 May 2025 12:07:28 +0200 Subject: [PATCH 109/123] on console and html --- deployment/bare_metal/start.sh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/deployment/bare_metal/start.sh b/deployment/bare_metal/start.sh index 8e99a89a1..8e6e7c69b 100755 --- a/deployment/bare_metal/start.sh +++ b/deployment/bare_metal/start.sh @@ -160,11 +160,11 @@ log_success() { onError() { local exit_code=$? - echo -e "\e[31m Command failed!\e[0m" - echo -e "\e[31m /\\_/\\ Line: $LINENO\e[0m" - echo -e "\e[31m( o.o ) Exit Code: $exit_code\e[0m" - echo -e "\e[31m > ^ < Offending command: '$BASH_COMMAND'\e[0m" - echo -e "\e[31m\e[0m" + log_error "Command failed!" + log_error " /\\_/\\ Line: $LINENO" + log_error "( o.o ) Exit Code: $exit_code" + log_error " > ^ < Offending command: '$BASH_COMMAND'" + log_error "\e[31m\e[0m" cleanup exit 1 } From cb09c6b78382dbf4476801970c5c18319fbc9b77 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Thu, 8 May 2025 12:08:17 +0200 Subject: [PATCH 110/123] use span for error in html --- deployment/bare_metal/start.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/deployment/bare_metal/start.sh b/deployment/bare_metal/start.sh index 8e6e7c69b..ec020f7f2 100755 --- a/deployment/bare_metal/start.sh +++ b/deployment/bare_metal/start.sh @@ -150,7 +150,7 @@ log_step() { log_error() { local message="$1" echo -e "\e[31m$message\e[0m" > /dev/tty # red in console - echo "

$message

" >> "$UPDATE_HTML" # red in html + echo "$message" >> "$UPDATE_HTML" # red in html } log_success() { local message="$1" @@ -164,7 +164,7 @@ onError() { log_error " /\\_/\\ Line: $LINENO" log_error "( o.o ) Exit Code: $exit_code" log_error " > ^ < Offending command: '$BASH_COMMAND'" - log_error "\e[31m\e[0m" + log_error "" cleanup exit 1 } From a43df907c2cc6b682d48b254eaa43f07ba62d66e Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Thu, 8 May 2025 12:22:45 +0200 Subject: [PATCH 111/123] call pm2 stop all only if there is something to stop --- deployment/bare_metal/start.sh | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/deployment/bare_metal/start.sh b/deployment/bare_metal/start.sh index ec020f7f2..9115ba808 100755 --- a/deployment/bare_metal/start.sh +++ b/deployment/bare_metal/start.sh @@ -152,6 +152,11 @@ log_error() { echo -e "\e[31m$message\e[0m" > /dev/tty # red in console echo "$message" >> "$UPDATE_HTML" # red in html } +log_warn() { + local message="$1" + echo -e "\e[33m$message\e[0m" > /dev/tty # yellow in console + echo "$message" >> "$UPDATE_HTML" # yellow in html +} log_success() { local message="$1" echo -e "\e[32m$message\e[0m" > /dev/tty # green in console @@ -165,16 +170,22 @@ onError() { log_error "( o.o ) Exit Code: $exit_code" log_error " > ^ < Offending command: '$BASH_COMMAND'" log_error "" - cleanup exit 1 } trap onError ERR - # stop all services log_step "Stop and delete all Gradido services" -pm2 delete all -pm2 save +# check if pm2 has processes, maybe it was already cleared from a failed update +# pm2 delete all if pm2 has no processes will trigger error and stop script +# so let's check first +if [ "$(pm2 prettylist)" != "[]" ]; then + pm2 delete all + pm2 save +else + log_warn "PM2 is already empty" +fi + # git BRANCH=$1 From 2f61cadb7595795e9e83451ca15b7ba6c044ddf0 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Thu, 8 May 2025 13:06:48 +0200 Subject: [PATCH 112/123] ignore warning and errors from yarn /tmp delete --- deployment/bare_metal/start.sh | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/deployment/bare_metal/start.sh b/deployment/bare_metal/start.sh index 9115ba808..d3a703e3a 100755 --- a/deployment/bare_metal/start.sh +++ b/deployment/bare_metal/start.sh @@ -154,8 +154,8 @@ log_error() { } log_warn() { local message="$1" - echo -e "\e[33m$message\e[0m" > /dev/tty # yellow in console - echo "$message" >> "$UPDATE_HTML" # yellow in html + echo -e "\e[33m$message\e[0m" > /dev/tty # orange in console + echo "$message" >> "$UPDATE_HTML" # orange in html } log_success() { local message="$1" @@ -255,7 +255,8 @@ MODULES=( if [ "$FAST_MODE" = false ] ; then log_step 'Clean tmp, bun and yarn cache' # Clean tmp folder - remove yarn files - find /tmp -name "yarn--*" -exec rm -r {} \; + # ignore error/warnings, we want only to remove all yarn files + find /tmp -name "yarn--*" -exec rm -r {} \; || true # Clean user cache folder rm -Rf ~/.cache/yarn # Clean bun cache From 873f5be125144cb6d780c14b066f8ca9673fc0d4 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Thu, 8 May 2025 13:12:58 +0200 Subject: [PATCH 113/123] put back --- deployment/bare_metal/start.sh | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/deployment/bare_metal/start.sh b/deployment/bare_metal/start.sh index d3a703e3a..d40091f68 100755 --- a/deployment/bare_metal/start.sh +++ b/deployment/bare_metal/start.sh @@ -49,16 +49,6 @@ fi BRANCH_NAME="$1" -# Find current directory & configure paths -set -o allexport -SCRIPT_PATH=$(realpath $0) -SCRIPT_DIR=$(dirname $SCRIPT_PATH) -LOCK_FILE=$SCRIPT_DIR/update.lock -UPDATE_HTML=$SCRIPT_DIR/nginx/update-page/updating.html -PROJECT_ROOT=$SCRIPT_DIR/../.. -NGINX_CONFIG_DIR=$SCRIPT_DIR/nginx/sites-available -set +o allexport - # Debug-Ausgabe if [ -z "$1" ]; then echo "Usage: Please provide a branch name as the first argument." @@ -69,6 +59,16 @@ if [ "$FAST_MODE" = true ] ; then echo "Use fast mode, keep packet manager, turbo and build cache" fi +# Find current directory & configure paths +set -o allexport +SCRIPT_PATH=$(realpath $0) +SCRIPT_DIR=$(dirname $SCRIPT_PATH) +LOCK_FILE=$SCRIPT_DIR/update.lock +UPDATE_HTML=$SCRIPT_DIR/nginx/update-page/updating.html +PROJECT_ROOT=$SCRIPT_DIR/../.. +NGINX_CONFIG_DIR=$SCRIPT_DIR/nginx/sites-available +set +o allexport + # enable nvm export NVM_DIR="$HOME/.nvm" && [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" nvm use From 19bf36bcf78e27caf353cc19bd86130468433c07 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Thu, 8 May 2025 13:14:59 +0200 Subject: [PATCH 114/123] add comment --- deployment/bare_metal/start.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/deployment/bare_metal/start.sh b/deployment/bare_metal/start.sh index d40091f68..e396cfad9 100755 --- a/deployment/bare_metal/start.sh +++ b/deployment/bare_metal/start.sh @@ -163,6 +163,8 @@ log_success() { echo "

$message

" >> "$UPDATE_HTML" # green in html } +# called always on error, log error really visible with ascii art in red on console and html +# stop script execution onError() { local exit_code=$? log_error "Command failed!" From 2ce690addc0ee74455dc98f4fcf7fa36aca12bd1 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Fri, 9 May 2025 08:50:39 +0200 Subject: [PATCH 115/123] fix merge --- database/src/prepare.ts | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/database/src/prepare.ts b/database/src/prepare.ts index e910d5620..fc359c226 100644 --- a/database/src/prepare.ts +++ b/database/src/prepare.ts @@ -41,16 +41,6 @@ async function convertJsToTsInMigrations(connection: Connection): Promise { - const [result] = await connection.query(` - UPDATE ${CONFIG.MIGRATIONS_TABLE} - SET fileName = REPLACE(fileName, '.js', '.ts') - WHERE fileName LIKE '%.js' - `) - - return result.affectedRows -} - export const getDatabaseState = async (): Promise => { const connection = await connectToDatabaseServer() if (!connection) { From 39431570028bdefdc498478e01ec39989ab566fb Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Tue, 13 May 2025 12:09:35 +0200 Subject: [PATCH 116/123] back to route to console --- deployment/bare_metal/start.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/deployment/bare_metal/start.sh b/deployment/bare_metal/start.sh index 7b2863fa2..c8985bca6 100755 --- a/deployment/bare_metal/start.sh +++ b/deployment/bare_metal/start.sh @@ -145,22 +145,22 @@ sudo /etc/init.d/nginx restart # helper functions log_step() { local message="$1" - echo -e "\e[34m$message\e[0m" # > /dev/tty # blue in console + echo -e "\e[34m$message\e[0m" > /dev/tty # blue in console echo "

$message

" >> "$UPDATE_HTML" # blue in html } log_error() { local message="$1" - echo -e "\e[31m$message\e[0m" # > /dev/tty # red in console + echo -e "\e[31m$message\e[0m" > /dev/tty # red in console echo "$message" >> "$UPDATE_HTML" # red in html } log_warn() { local message="$1" - echo -e "\e[33m$message\e[0m" # > /dev/tty # orange in console + echo -e "\e[33m$message\e[0m" > /dev/tty # orange in console echo "$message" >> "$UPDATE_HTML" # orange in html } log_success() { local message="$1" - echo -e "\e[32m$message\e[0m" # > /dev/tty # green in console + echo -e "\e[32m$message\e[0m" > /dev/tty # green in console echo "

$message

" >> "$UPDATE_HTML" # green in html } From c9434a88c715714be3bcc8b41cea353341106437 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Wed, 14 May 2025 16:43:38 +0200 Subject: [PATCH 117/123] move retry count and delay for waiting to database into config --- backend/src/config/index.ts | 8 +++++++- backend/src/config/schema.ts | 4 ++++ backend/src/server/createServer.ts | 8 +++++--- backend/src/typeorm/DBVersion.ts | 2 +- config-schema/src/commonSchema.ts | 14 ++++++++++++++ dht-node/src/config/index.ts | 6 ++++++ dht-node/src/config/schema.ts | 4 ++++ dht-node/src/index.ts | 2 +- dht-node/src/typeorm/DBVersion.ts | 2 +- federation/src/config/index.ts | 6 ++++++ federation/src/config/schema.ts | 4 ++++ federation/src/server/createServer.ts | 6 +++++- federation/src/typeorm/DBVersion.ts | 2 +- 13 files changed, 59 insertions(+), 9 deletions(-) diff --git a/backend/src/config/index.ts b/backend/src/config/index.ts index 8115fafd8..c742b4b28 100644 --- a/backend/src/config/index.ts +++ b/backend/src/config/index.ts @@ -34,8 +34,14 @@ const server = { } const database = { + DB_CONNECT_RETRY_COUNT: process.env.DB_CONNECT_RETRY_COUNT + ? Number.parseInt(process.env.DB_CONNECT_RETRY_COUNT) + : 15, + DB_CONNECT_RETRY_DELAY_MS: process.env.DB_CONNECT_RETRY_DELAY_MS + ? Number.parseInt(process.env.DB_CONNECT_RETRY_DELAY_MS) + : 500, DB_HOST: process.env.DB_HOST ?? 'localhost', - DB_PORT: process.env.DB_PORT ? parseInt(process.env.DB_PORT) : 3306, + DB_PORT: process.env.DB_PORT ? Number.parseInt(process.env.DB_PORT) : 3306, DB_USER: process.env.DB_USER ?? 'root', DB_PASSWORD: process.env.DB_PASSWORD ?? '', DB_DATABASE: process.env.DB_DATABASE ?? 'gradido_community', diff --git a/backend/src/config/schema.ts b/backend/src/config/schema.ts index a6ed60ea1..5c937ae5b 100644 --- a/backend/src/config/schema.ts +++ b/backend/src/config/schema.ts @@ -3,6 +3,8 @@ import { COMMUNITY_NAME, COMMUNITY_SUPPORT_MAIL, COMMUNITY_URL, + DB_CONNECT_RETRY_COUNT, + DB_CONNECT_RETRY_DELAY_MS, DB_DATABASE, DB_HOST, DB_PASSWORD, @@ -38,6 +40,8 @@ export const schema = Joi.object({ DB_USER, DB_VERSION, DB_DATABASE, + DB_CONNECT_RETRY_COUNT, + DB_CONNECT_RETRY_DELAY_MS, DECAY_START_TIME, GDT_API_URL, GDT_ACTIVE, diff --git a/backend/src/server/createServer.ts b/backend/src/server/createServer.ts index fec8fa3b7..b87f4cb24 100644 --- a/backend/src/server/createServer.ts +++ b/backend/src/server/createServer.ts @@ -36,9 +36,11 @@ export const createServer = async ( // open mariadb connection, retry connecting with mariadb // check for correct database version - // retry max 15 times, wait 500 ms between tries - // TODO: move variables into config - const con = await checkDBVersionUntil(15, 500) + // retry max CONFIG.DB_CONNECT_RETRY_COUNT times, wait CONFIG.DB_CONNECT_RETRY_DELAY ms between tries + const con = await checkDBVersionUntil( + CONFIG.DB_CONNECT_RETRY_COUNT, + CONFIG.DB_CONNECT_RETRY_DELAY_MS, + ) // Express Server const app = express() diff --git a/backend/src/typeorm/DBVersion.ts b/backend/src/typeorm/DBVersion.ts index 6ce3ac293..f60af6d9e 100644 --- a/backend/src/typeorm/DBVersion.ts +++ b/backend/src/typeorm/DBVersion.ts @@ -6,7 +6,7 @@ import { CONFIG } from '@/config' import { Connection } from '@/typeorm/connection' import { Connection as DbConnection } from 'typeorm' -async function checkDBVersionUntil(maxRetries = 15, delayMs = 500): Promise { +async function checkDBVersionUntil(maxRetries: number, delayMs: number): Promise { for (let attempt = 1; attempt <= maxRetries; attempt++) { try { const connection = await Connection.getInstance() diff --git a/config-schema/src/commonSchema.ts b/config-schema/src/commonSchema.ts index a208ee7dd..fa1afb473 100644 --- a/config-schema/src/commonSchema.ts +++ b/config-schema/src/commonSchema.ts @@ -37,6 +37,20 @@ export const DB_VERSION = Joi.string() ) .required() +export const DB_CONNECT_RETRY_COUNT = Joi.number() + .default(15) + .min(1) + .max(1000) + .description('Number of retries to connect to the database') + .optional() + +export const DB_CONNECT_RETRY_DELAY_MS = Joi.number() + .default(500) + .min(100) + .max(10000) + .description('Delay in milliseconds between retries to connect to the database') + .optional() + export const COMMUNITY_URL = Joi.string() .uri({ scheme: ['http', 'https'] }) .custom((value: string, helpers: Joi.CustomHelpers) => { diff --git a/dht-node/src/config/index.ts b/dht-node/src/config/index.ts index 3c041e2ac..14b4a789b 100644 --- a/dht-node/src/config/index.ts +++ b/dht-node/src/config/index.ts @@ -18,6 +18,12 @@ const server = { } const database = { + DB_CONNECT_RETRY_COUNT: process.env.DB_CONNECT_RETRY_COUNT + ? Number.parseInt(process.env.DB_CONNECT_RETRY_COUNT) + : 15, + DB_CONNECT_RETRY_DELAY_MS: process.env.DB_CONNECT_RETRY_DELAY_MS + ? Number.parseInt(process.env.DB_CONNECT_RETRY_DELAY_MS) + : 500, DB_HOST: process.env.DB_HOST ?? 'localhost', DB_PORT: process.env.DB_PORT ? Number.parseInt(process.env.DB_PORT) : 3306, DB_USER: process.env.DB_USER ?? 'root', diff --git a/dht-node/src/config/schema.ts b/dht-node/src/config/schema.ts index 659720c06..67dac73a4 100644 --- a/dht-node/src/config/schema.ts +++ b/dht-node/src/config/schema.ts @@ -1,6 +1,8 @@ import { COMMUNITY_DESCRIPTION, COMMUNITY_NAME, + DB_CONNECT_RETRY_COUNT, + DB_CONNECT_RETRY_DELAY_MS, DB_DATABASE, DB_HOST, DB_PASSWORD, @@ -19,6 +21,8 @@ export const schema = Joi.object({ COMMUNITY_NAME, COMMUNITY_DESCRIPTION, DB_DATABASE, + DB_CONNECT_RETRY_COUNT, + DB_CONNECT_RETRY_DELAY_MS, DB_HOST, DB_PASSWORD, DB_PORT, diff --git a/dht-node/src/index.ts b/dht-node/src/index.ts index 901d3ab20..e7058f152 100644 --- a/dht-node/src/index.ts +++ b/dht-node/src/index.ts @@ -6,7 +6,7 @@ import { checkDBVersionUntil } from './typeorm/DBVersion' async function main() { // open mysql connection - await checkDBVersionUntil() + await checkDBVersionUntil(CONFIG.DB_CONNECT_RETRY_COUNT, CONFIG.DB_CONNECT_RETRY_DELAY_MS) logger.debug(`dhtseed set by CONFIG.FEDERATION_DHT_SEED=${CONFIG.FEDERATION_DHT_SEED}`) logger.info( `starting Federation on ${CONFIG.FEDERATION_DHT_TOPIC} ${ diff --git a/dht-node/src/typeorm/DBVersion.ts b/dht-node/src/typeorm/DBVersion.ts index ee97c3c0a..be9f0c612 100644 --- a/dht-node/src/typeorm/DBVersion.ts +++ b/dht-node/src/typeorm/DBVersion.ts @@ -6,7 +6,7 @@ import { CONFIG } from '@/config' import { Connection as DbConnection } from 'typeorm' import { connection as connectionFunc } from './connection' -async function checkDBVersionUntil(maxRetries = 15, delayMs = 500): Promise { +async function checkDBVersionUntil(maxRetries: number, delayMs: number): Promise { for (let attempt = 1; attempt <= maxRetries; attempt++) { try { const connection = await connectionFunc() diff --git a/federation/src/config/index.ts b/federation/src/config/index.ts index 4c5f162ff..3c759d702 100644 --- a/federation/src/config/index.ts +++ b/federation/src/config/index.ts @@ -30,6 +30,12 @@ const server = { PRODUCTION: process.env.NODE_ENV === 'production', } const database = { + DB_CONNECT_RETRY_COUNT: process.env.DB_CONNECT_RETRY_COUNT + ? Number.parseInt(process.env.DB_CONNECT_RETRY_COUNT) + : 15, + DB_CONNECT_RETRY_DELAY_MS: process.env.DB_CONNECT_RETRY_DELAY_MS + ? Number.parseInt(process.env.DB_CONNECT_RETRY_DELAY_MS) + : 500, DB_HOST: process.env.DB_HOST ?? 'localhost', DB_PORT: process.env.DB_PORT ? Number.parseInt(process.env.DB_PORT) : 3306, DB_USER: process.env.DB_USER ?? 'root', diff --git a/federation/src/config/schema.ts b/federation/src/config/schema.ts index 2926061eb..812728cff 100644 --- a/federation/src/config/schema.ts +++ b/federation/src/config/schema.ts @@ -1,4 +1,6 @@ import { + DB_CONNECT_RETRY_COUNT, + DB_CONNECT_RETRY_DELAY_MS, DB_DATABASE, DB_HOST, DB_PASSWORD, @@ -17,6 +19,8 @@ import Joi from 'joi' export const schema = Joi.object({ DB_DATABASE, + DB_CONNECT_RETRY_COUNT, + DB_CONNECT_RETRY_DELAY_MS, DB_HOST, DB_PASSWORD, DB_PORT, diff --git a/federation/src/server/createServer.ts b/federation/src/server/createServer.ts index d3df01e18..e737d2a61 100644 --- a/federation/src/server/createServer.ts +++ b/federation/src/server/createServer.ts @@ -17,6 +17,7 @@ import { schema } from '@/graphql/schema' // import { elopageWebhook } from '@/webhook/elopage' import { Connection } from 'typeorm' +import { CONFIG } from '@/config' import { slowDown } from 'express-slow-down' import helmet from 'helmet' import { Logger } from 'log4js' @@ -39,7 +40,10 @@ export const createServer = async ( logger.debug('createServer...') // open mysql connection - const con = await checkDBVersionUntil() + const con = await checkDBVersionUntil( + CONFIG.DB_CONNECT_RETRY_COUNT, + CONFIG.DB_CONNECT_RETRY_DELAY_MS, + ) // Express Server const app = express() diff --git a/federation/src/typeorm/DBVersion.ts b/federation/src/typeorm/DBVersion.ts index ed907d2d8..712c4ee4f 100644 --- a/federation/src/typeorm/DBVersion.ts +++ b/federation/src/typeorm/DBVersion.ts @@ -4,7 +4,7 @@ import { Migration } from 'database' import { Connection as DbConnection } from 'typeorm' import { connection as connectionFunc } from './connection' -async function checkDBVersionUntil(maxRetries = 15, delayMs = 500): Promise { +async function checkDBVersionUntil(maxRetries: number, delayMs: number): Promise { for (let attempt = 1; attempt <= maxRetries; attempt++) { try { const connection = await connectionFunc() From 6f06a18b6682b9985bf47ca686da632f24e137df Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Wed, 14 May 2025 16:45:26 +0200 Subject: [PATCH 118/123] add also as config in db --- database/src/config/index.ts | 14 ++++++++++---- database/src/prepare.ts | 4 ++-- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/database/src/config/index.ts b/database/src/config/index.ts index f66a32fa1..fdfb1b57e 100644 --- a/database/src/config/index.ts +++ b/database/src/config/index.ts @@ -11,11 +11,17 @@ const constants = { } const database = { - DB_HOST: process.env.DB_HOST || 'localhost', + DB_CONNECT_RETRY_COUNT: process.env.DB_CONNECT_RETRY_COUNT + ? Number.parseInt(process.env.DB_CONNECT_RETRY_COUNT) + : 15, + DB_CONNECT_RETRY_DELAY_MS: process.env.DB_CONNECT_RETRY_DELAY_MS + ? Number.parseInt(process.env.DB_CONNECT_RETRY_DELAY_MS) + : 500, + DB_HOST: process.env.DB_HOST ?? 'localhost', DB_PORT: process.env.DB_PORT ? Number.parseInt(process.env.DB_PORT) : 3306, - DB_USER: process.env.DB_USER || 'root', - DB_PASSWORD: process.env.DB_PASSWORD || '', - DB_DATABASE: process.env.DB_DATABASE || 'gradido_community', + DB_USER: process.env.DB_USER ?? 'root', + DB_PASSWORD: process.env.DB_PASSWORD ?? '', + DB_DATABASE: process.env.DB_DATABASE ?? 'gradido_community', } const migrations = { diff --git a/database/src/prepare.ts b/database/src/prepare.ts index fc359c226..864368636 100644 --- a/database/src/prepare.ts +++ b/database/src/prepare.ts @@ -11,8 +11,8 @@ export enum DatabaseState { } export async function connectToDatabaseServer( - maxRetries = 15, - delayMs = 500, + maxRetries: number, + delayMs: number, ): Promise { for (let attempt = 1; attempt <= maxRetries; attempt++) { try { From b28ccc6d8f80a7a34616b2fea58cc53d8ff21e1c Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Wed, 14 May 2025 16:46:20 +0200 Subject: [PATCH 119/123] forget to save --- database/src/prepare.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/database/src/prepare.ts b/database/src/prepare.ts index 864368636..b8760a6a3 100644 --- a/database/src/prepare.ts +++ b/database/src/prepare.ts @@ -42,7 +42,7 @@ async function convertJsToTsInMigrations(connection: Connection): Promise => { - const connection = await connectToDatabaseServer() + const connection = await connectToDatabaseServer(CONFIG.DB_CONNECT_RETRY_COUNT, CONFIG.DB_CONNECT_RETRY_DELAY_MS) if (!connection) { return DatabaseState.NOT_CONNECTED } From cc491b010da9f6cc0e363a4152a59a938dee7587 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Wed, 14 May 2025 16:46:42 +0200 Subject: [PATCH 120/123] lint --- database/src/prepare.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/database/src/prepare.ts b/database/src/prepare.ts index b8760a6a3..e29fc1422 100644 --- a/database/src/prepare.ts +++ b/database/src/prepare.ts @@ -42,7 +42,10 @@ async function convertJsToTsInMigrations(connection: Connection): Promise => { - const connection = await connectToDatabaseServer(CONFIG.DB_CONNECT_RETRY_COUNT, CONFIG.DB_CONNECT_RETRY_DELAY_MS) + const connection = await connectToDatabaseServer( + CONFIG.DB_CONNECT_RETRY_COUNT, + CONFIG.DB_CONNECT_RETRY_DELAY_MS, + ) if (!connection) { return DatabaseState.NOT_CONNECTED } From 8611187a0ac152dbfc5905a4527a1066b51d6957 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Wed, 14 May 2025 16:49:41 +0200 Subject: [PATCH 121/123] missing update in clear --- database/src/clear.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/database/src/clear.ts b/database/src/clear.ts index dfd6e51c4..e2999bbf9 100644 --- a/database/src/clear.ts +++ b/database/src/clear.ts @@ -27,7 +27,10 @@ export async function truncateTables(connection: Connection) { } export async function clearDatabase() { - const connection = await connectToDatabaseServer() + const connection = await connectToDatabaseServer( + CONFIG.DB_CONNECT_RETRY_COUNT, + CONFIG.DB_CONNECT_RETRY_DELAY_MS, + ) if (!connection) { throw new Error('Could not connect to database server') } From a539db57b09c2119f79b919e3a53c256264ce590 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Wed, 14 May 2025 16:51:11 +0200 Subject: [PATCH 122/123] fix missing parameter --- dht-node/test/helpers.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dht-node/test/helpers.ts b/dht-node/test/helpers.ts index 0301f7fae..1fd42066a 100644 --- a/dht-node/test/helpers.ts +++ b/dht-node/test/helpers.ts @@ -1,6 +1,7 @@ import { entities } from 'database' import { checkDBVersionUntil } from '@/typeorm/DBVersion' +import { CONFIG } from '@/config' export const headerPushMock = jest.fn((t) => { context.token = t.value @@ -23,7 +24,7 @@ export const cleanDB = async () => { } export const testEnvironment = async () => { - return { con: await checkDBVersionUntil() } + return { con: await checkDBVersionUntil(CONFIG.DB_CONNECT_RETRY_COUNT, CONFIG.DB_CONNECT_RETRY_DELAY_MS) } } export const resetEntity = async (entity: any) => { From 4a49f5ce9f8368cc291e75d6036d837c43a4d811 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Thu, 15 May 2025 18:24:01 +0200 Subject: [PATCH 123/123] fix lint --- backend/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/package.json b/backend/package.json index caa13974d..490f7aa0c 100644 --- a/backend/package.json +++ b/backend/package.json @@ -15,7 +15,7 @@ "seed": "cross-env TZ=UTC NODE_ENV=development ts-node -r tsconfig-paths/register src/seeds/index.ts", "klicktipp": "cross-env TZ=UTC NODE_ENV=development ts-node -r tsconfig-paths/register src/util/executeKlicktipp.ts", "gmsusers": "cross-env TZ=UTC NODE_ENV=development ts-node -r tsconfig-paths/register src/apis/gms/ExportUsers.ts", - "humhubUserExport": "cross-env TZ=UTC NODE_ENV=development ts-node -r tsconfig-paths/register src/apis/humhub/ExportUsers.ts", + "humhubUserExport": "cross-env TZ=UTC NODE_ENV=development ts-node -r tsconfig-paths/register src/apis/humhub/ExportUsers.ts", "lint": "biome check --error-on-warnings .", "lint:fix": "biome check --error-on-warnings . --write", "lint:fix:unsafe": "biome check --fix --unsafe",