From f9ecac94f2efad4fe73fba670d3c3a800694321c Mon Sep 17 00:00:00 2001 From: Yuu Ottosoka Date: Sat, 12 Jul 2025 16:01:57 +0300 Subject: [PATCH] feat: add file storage service and update configurations refactor: migrate to tsup for builds and update tsconfigs fix: update error handling and validation in payment service chore: update package scripts and dependencies docs: update README and env examples --- apps/api/.env.example | 3 +- apps/api/README.md | 3 +- apps/api/package.json | 15 +- apps/api/src/config.ts | 14 +- apps/api/src/index.ts | 45 +- apps/api/tsconfig.json | 14 +- apps/api/tsconfig.tsbuildinfo | 1 + apps/api/tsup.config.ts | 15 + apps/bot/.env.example | 3 +- apps/bot/package.json | 13 +- apps/bot/src/config.ts | 10 +- apps/bot/src/index.ts | 16 +- apps/bot/src/middlewares/on-error.ts | 3 +- apps/bot/src/middlewares/upsert-user.ts | 6 +- apps/bot/src/session-storage.ts | 6 +- apps/bot/src/types.ts | 4 +- apps/bot/tsconfig.json | 14 +- apps/bot/tsup.config.ts | 20 + package-lock.json | 2468 +++++++++++++---- package.json | 10 +- packages/config/package.json | 33 +- packages/config/src/create-config.ts | 10 +- packages/config/src/index.ts | 4 +- packages/config/src/types.ts | 2 +- packages/config/tsconfig.json | 10 +- packages/config/tsup.config.ts | 13 + packages/database/.eslintrc.js | 16 + packages/database/generated/zod/index.ts | 35 + packages/database/package.json | 37 +- packages/database/prisma/schema.prisma | 46 +- packages/database/src/client.ts | 6 +- packages/database/src/index.ts | 5 - packages/database/tsconfig.json | 16 + packages/database/tsup.config.ts | 16 + packages/exceptions/src/constructors.ts | 40 +- packages/exceptions/src/index.ts | 6 +- packages/exceptions/src/types.ts | 20 +- packages/exceptions/src/utils/database.ts | 10 +- packages/exceptions/src/utils/index.ts | 3 +- packages/exceptions/src/utils/validation.ts | 10 - packages/logger/package.json | 33 +- packages/logger/src/index.ts | 2 +- packages/logger/tsconfig.json | 6 +- packages/logger/tsup.config.ts | 13 + packages/services/package.json | 29 +- packages/services/src/files/errors.ts | 61 + packages/services/src/files/factory.ts | 49 + packages/services/src/files/fs-utils.ts | 129 + packages/services/src/files/index.ts | 2 + .../repositories/file-link-repository.ts | 70 + .../src/files/repositories/file-repository.ts | 71 + .../src/files/services/file-link-service.ts | 66 + .../src/files/services/file-service.ts | 135 + packages/services/src/files/types.ts | 105 + packages/services/src/index.ts | 2 +- packages/services/src/payment/errors.ts | 10 +- packages/services/src/payment/index.ts | 8 +- packages/services/src/payment/repository.ts | 26 +- packages/services/src/payment/service.ts | 24 +- packages/services/src/payment/types.ts | 26 +- packages/services/tsconfig.json | 14 +- packages/services/tsup.config.ts | 14 + packages/typescript-config/base.json | 20 +- packages/typescript-config/library.json | 11 + packages/typescript-config/node.json | 10 + packages/typescript-config/package.json | 8 +- turbo.json | 38 +- 67 files changed, 3308 insertions(+), 695 deletions(-) create mode 100644 apps/api/tsconfig.tsbuildinfo create mode 100644 apps/api/tsup.config.ts create mode 100644 apps/bot/tsup.config.ts create mode 100644 packages/config/tsup.config.ts create mode 100644 packages/database/.eslintrc.js create mode 100644 packages/database/tsconfig.json create mode 100644 packages/database/tsup.config.ts delete mode 100644 packages/exceptions/src/utils/validation.ts create mode 100644 packages/logger/tsup.config.ts create mode 100644 packages/services/src/files/errors.ts create mode 100644 packages/services/src/files/factory.ts create mode 100644 packages/services/src/files/fs-utils.ts create mode 100644 packages/services/src/files/index.ts create mode 100644 packages/services/src/files/repositories/file-link-repository.ts create mode 100644 packages/services/src/files/repositories/file-repository.ts create mode 100644 packages/services/src/files/services/file-link-service.ts create mode 100644 packages/services/src/files/services/file-service.ts create mode 100644 packages/services/src/files/types.ts create mode 100644 packages/services/tsup.config.ts create mode 100644 packages/typescript-config/library.json create mode 100644 packages/typescript-config/node.json diff --git a/apps/api/.env.example b/apps/api/.env.example index 237ff6c..3027468 100644 --- a/apps/api/.env.example +++ b/apps/api/.env.example @@ -1,2 +1,3 @@ PORT=3001 -NODE_ENV=development \ No newline at end of file +NODE_ENV=development +DATABASE_URL=copy from packages/database/.env \ No newline at end of file diff --git a/apps/api/README.md b/apps/api/README.md index e818d16..c05e6a0 100644 --- a/apps/api/README.md +++ b/apps/api/README.md @@ -1,2 +1,3 @@ # `api` -Апи клиент \ No newline at end of file + +Апи клиент diff --git a/apps/api/package.json b/apps/api/package.json index 1c69c51..a87b767 100644 --- a/apps/api/package.json +++ b/apps/api/package.json @@ -2,10 +2,13 @@ "name": "api", "version": "0.0.0", "private": true, + "type": "module", "scripts": { - "dev": "NODE_PATH=./src tsnd --respawn --transpile-only --exit-child src/index.ts", - "build": "tsc", - "start": "NODE_PATH=./dist node ./dist/index.js" + "dev": "tsx watch src/index.ts", + "build": "tsup", + "start": "node dist/index.js", + "check-types": "tsc --noEmit", + "clean": "rm -rf dist" }, "dependencies": { "@hono/node-server": "^1.15.0", @@ -22,7 +25,9 @@ "zod-openapi": "^4.2.4" }, "devDependencies": { - "ts-node-dev": "^2.0.0", - "typescript": "latest" + "@types/node": "^22.10.2", + "tsup": "^8.3.5", + "tsx": "^4.19.2", + "typescript": "^5.8.3" } } diff --git a/apps/api/src/config.ts b/apps/api/src/config.ts index cdc1765..0aef3de 100644 --- a/apps/api/src/config.ts +++ b/apps/api/src/config.ts @@ -1,10 +1,12 @@ -import { createConfig } from '@repo/config'; -import z from 'zod'; -import 'dotenv/config'; +import { createConfig } from "@repo/config"; +import z from "zod"; +import "dotenv/config"; export const config = createConfig({ schema: { - PORT: z.string().default('3001'), - NODE_ENV: z.enum(['development', 'production', 'test']).default('development'), + PORT: z.string().default("3001"), + NODE_ENV: z + .enum(["development", "production", "test"]) + .default("development"), }, -}); \ No newline at end of file +}); diff --git a/apps/api/src/index.ts b/apps/api/src/index.ts index 73cf196..4591b0a 100644 --- a/apps/api/src/index.ts +++ b/apps/api/src/index.ts @@ -1,27 +1,27 @@ -import { serve } from '@hono/node-server'; -import { OpenAPIHono } from '@hono/zod-openapi'; -import { swaggerUI } from '@hono/swagger-ui'; -import { config } from './config'; -import { logger } from '@repo/logger'; +import { serve } from "@hono/node-server"; +import { OpenAPIHono } from "@hono/zod-openapi"; +import { swaggerUI } from "@hono/swagger-ui"; +import { config } from "./config"; +import { logger } from "@repo/logger"; const app = new OpenAPIHono(); // OpenAPI documentation -app.doc('/doc', { - openapi: '3.0.0', +app.doc("/doc", { + openapi: "3.0.0", info: { - version: '1.0.0', - title: 'API Documentation', - description: 'API built with Hono and Zod OpenAPI', + version: "1.0.0", + title: "API Documentation", + description: "API built with Hono and Zod OpenAPI", }, }); // Swagger UI -app.get('/ui', swaggerUI({ url: '/doc' })); +app.get("/ui", swaggerUI({ url: "/doc" })); // Health check -app.get('/health', (c) => { - return c.json({ status: 'ok', timestamp: new Date().toISOString() }); +app.get("/health", (c) => { + return c.json({ status: "ok", timestamp: new Date().toISOString() }); }); const port = parseInt(config.PORT); @@ -29,7 +29,24 @@ const port = parseInt(config.PORT); logger.info(`Starting API server on port ${port}`); logger.info(`Swagger UI available at http://localhost:${port}/ui`); -serve({ +const server = serve({ fetch: app.fetch, port, }); + +const tearDown = () => { + logger.info("Server shutting down..."); + if (server) { + server.close(() => { + logger.info("Server closed"); + process.exit(0); + }); + } else { + process.exit(0); + } +}; + +process.on("SIGINT", tearDown); +process.on("SIGTERM", tearDown); +process.on("SIGUSR1", tearDown); +process.on("SIGUSR2", tearDown); diff --git a/apps/api/tsconfig.json b/apps/api/tsconfig.json index 68384b4..21ba800 100644 --- a/apps/api/tsconfig.json +++ b/apps/api/tsconfig.json @@ -1,9 +1,15 @@ { - "extends": "@repo/typescript-config/base.json", + "extends": "@repo/typescript-config/node.json", "compilerOptions": { "outDir": "dist", - "rootDir": "src" + "rootDir": ".", + "skipLibCheck": true }, - "include": ["src"], - "exclude": ["node_modules", "dist"] + "include": ["src/**/*"], + "exclude": [ + "node_modules", + "dist", + "**/*.test.*", + "**/*.spec.*" + ] } \ No newline at end of file diff --git a/apps/api/tsconfig.tsbuildinfo b/apps/api/tsconfig.tsbuildinfo new file mode 100644 index 0000000..df3be1a --- /dev/null +++ b/apps/api/tsconfig.tsbuildinfo @@ -0,0 +1 @@ +{"fileNames":["../../node_modules/typescript/lib/lib.es5.d.ts","../../node_modules/typescript/lib/lib.es2015.d.ts","../../node_modules/typescript/lib/lib.es2016.d.ts","../../node_modules/typescript/lib/lib.es2017.d.ts","../../node_modules/typescript/lib/lib.es2018.d.ts","../../node_modules/typescript/lib/lib.es2019.d.ts","../../node_modules/typescript/lib/lib.es2020.d.ts","../../node_modules/typescript/lib/lib.es2021.d.ts","../../node_modules/typescript/lib/lib.es2022.d.ts","../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../node_modules/typescript/lib/lib.es2016.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../node_modules/typescript/lib/lib.es2017.date.d.ts","../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../node_modules/typescript/lib/lib.es2021.promise.d.ts","../../node_modules/typescript/lib/lib.es2021.string.d.ts","../../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../node_modules/typescript/lib/lib.es2021.intl.d.ts","../../node_modules/typescript/lib/lib.es2022.array.d.ts","../../node_modules/typescript/lib/lib.es2022.error.d.ts","../../node_modules/typescript/lib/lib.es2022.intl.d.ts","../../node_modules/typescript/lib/lib.es2022.object.d.ts","../../node_modules/typescript/lib/lib.es2022.string.d.ts","../../node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../node_modules/typescript/lib/lib.decorators.d.ts","../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../node_modules/zod/v3/helpers/typealiases.d.cts","../../node_modules/zod/v3/helpers/util.d.cts","../../node_modules/zod/v3/index.d.cts","../../node_modules/zod/v3/zoderror.d.cts","../../node_modules/zod/v3/locales/en.d.cts","../../node_modules/zod/v3/errors.d.cts","../../node_modules/zod/v3/helpers/parseutil.d.cts","../../node_modules/zod/v3/helpers/enumutil.d.cts","../../node_modules/zod/v3/helpers/errorutil.d.cts","../../node_modules/zod/v3/helpers/partialutil.d.cts","../../node_modules/zod/v3/standard-schema.d.cts","../../node_modules/zod/v3/types.d.cts","../../node_modules/zod/v3/external.d.cts","../../node_modules/zod/index.d.cts","../../packages/config/dist/index.d.ts","./node_modules/dotenv/config.d.ts","./src/config.ts","../../node_modules/@hono/node-server/dist/types.d.ts","../../node_modules/@hono/node-server/dist/server.d.ts","../../node_modules/@hono/node-server/dist/listener.d.ts","../../node_modules/@hono/node-server/dist/request.d.ts","../../node_modules/@hono/node-server/dist/index.d.ts","../../node_modules/yaml/dist/parse/line-counter.d.ts","../../node_modules/yaml/dist/errors.d.ts","../../node_modules/yaml/dist/doc/applyreviver.d.ts","../../node_modules/yaml/dist/log.d.ts","../../node_modules/yaml/dist/nodes/tojs.d.ts","../../node_modules/yaml/dist/nodes/scalar.d.ts","../../node_modules/yaml/dist/stringify/stringify.d.ts","../../node_modules/yaml/dist/nodes/collection.d.ts","../../node_modules/yaml/dist/nodes/yamlseq.d.ts","../../node_modules/yaml/dist/schema/types.d.ts","../../node_modules/yaml/dist/schema/common/map.d.ts","../../node_modules/yaml/dist/schema/common/seq.d.ts","../../node_modules/yaml/dist/schema/common/string.d.ts","../../node_modules/yaml/dist/stringify/foldflowlines.d.ts","../../node_modules/yaml/dist/stringify/stringifynumber.d.ts","../../node_modules/yaml/dist/stringify/stringifystring.d.ts","../../node_modules/yaml/dist/util.d.ts","../../node_modules/yaml/dist/nodes/yamlmap.d.ts","../../node_modules/yaml/dist/nodes/identity.d.ts","../../node_modules/yaml/dist/schema/schema.d.ts","../../node_modules/yaml/dist/doc/createnode.d.ts","../../node_modules/yaml/dist/nodes/addpairtojsmap.d.ts","../../node_modules/yaml/dist/nodes/pair.d.ts","../../node_modules/yaml/dist/schema/tags.d.ts","../../node_modules/yaml/dist/options.d.ts","../../node_modules/yaml/dist/nodes/node.d.ts","../../node_modules/yaml/dist/parse/cst-scalar.d.ts","../../node_modules/yaml/dist/parse/cst-stringify.d.ts","../../node_modules/yaml/dist/parse/cst-visit.d.ts","../../node_modules/yaml/dist/parse/cst.d.ts","../../node_modules/yaml/dist/nodes/alias.d.ts","../../node_modules/yaml/dist/doc/document.d.ts","../../node_modules/yaml/dist/doc/directives.d.ts","../../node_modules/yaml/dist/compose/composer.d.ts","../../node_modules/yaml/dist/parse/lexer.d.ts","../../node_modules/yaml/dist/parse/parser.d.ts","../../node_modules/yaml/dist/public-api.d.ts","../../node_modules/yaml/dist/schema/yaml-1.1/omap.d.ts","../../node_modules/yaml/dist/schema/yaml-1.1/set.d.ts","../../node_modules/yaml/dist/visit.d.ts","../../node_modules/yaml/dist/index.d.ts","../../node_modules/openapi3-ts/dist/model/specification-extension.d.ts","../../node_modules/openapi3-ts/dist/model/oas-common.d.ts","../../node_modules/openapi3-ts/dist/model/openapi31.d.ts","../../node_modules/openapi3-ts/dist/dsl/openapi-builder31.d.ts","../../node_modules/openapi3-ts/dist/model/server.d.ts","../../node_modules/openapi3-ts/dist/oas31.d.ts","../../node_modules/openapi3-ts/dist/model/openapi30.d.ts","../../node_modules/openapi3-ts/dist/dsl/openapi-builder30.d.ts","../../node_modules/openapi3-ts/dist/oas30.d.ts","../../node_modules/@asteasolutions/zod-to-openapi/dist/zod-extensions.d.ts","../../node_modules/@asteasolutions/zod-to-openapi/dist/openapi-metadata.d.ts","../../node_modules/@asteasolutions/zod-to-openapi/dist/openapi-registry.d.ts","../../node_modules/@asteasolutions/zod-to-openapi/dist/v3.0/openapi-generator.d.ts","../../node_modules/@asteasolutions/zod-to-openapi/dist/v3.1/openapi-generator.d.ts","../../node_modules/@asteasolutions/zod-to-openapi/dist/index.d.ts","../../node_modules/hono/dist/types/router.d.ts","../../node_modules/hono/dist/types/utils/headers.d.ts","../../node_modules/hono/dist/types/utils/http-status.d.ts","../../node_modules/hono/dist/types/utils/types.d.ts","../../node_modules/hono/dist/types/types.d.ts","../../node_modules/hono/dist/types/utils/body.d.ts","../../node_modules/hono/dist/types/request.d.ts","../../node_modules/hono/dist/types/utils/mime.d.ts","../../node_modules/hono/dist/types/context.d.ts","../../node_modules/hono/dist/types/hono-base.d.ts","../../node_modules/hono/dist/types/hono.d.ts","../../node_modules/hono/dist/types/client/types.d.ts","../../node_modules/hono/dist/types/client/client.d.ts","../../node_modules/hono/dist/types/client/index.d.ts","../../node_modules/hono/dist/types/index.d.ts","../../node_modules/@hono/zod-openapi/dist/index.d.mts","../../node_modules/@hono/swagger-ui/dist/index.d.ts","../../packages/logger/dist/index.d.ts","./src/index.ts","../../node_modules/esbuild/lib/main.d.ts","../../node_modules/@types/estree/index.d.ts","../../node_modules/rollup/dist/rollup.d.ts","../../node_modules/tsup/node_modules/source-map/source-map.d.ts","./node_modules/@types/node/compatibility/disposable.d.ts","./node_modules/@types/node/compatibility/indexable.d.ts","./node_modules/@types/node/compatibility/iterators.d.ts","./node_modules/@types/node/compatibility/index.d.ts","./node_modules/@types/node/globals.typedarray.d.ts","./node_modules/@types/node/buffer.buffer.d.ts","./node_modules/undici-types/header.d.ts","./node_modules/undici-types/readable.d.ts","./node_modules/undici-types/file.d.ts","./node_modules/undici-types/fetch.d.ts","./node_modules/undici-types/formdata.d.ts","./node_modules/undici-types/connector.d.ts","./node_modules/undici-types/client.d.ts","./node_modules/undici-types/errors.d.ts","./node_modules/undici-types/dispatcher.d.ts","./node_modules/undici-types/global-dispatcher.d.ts","./node_modules/undici-types/global-origin.d.ts","./node_modules/undici-types/pool-stats.d.ts","./node_modules/undici-types/pool.d.ts","./node_modules/undici-types/handlers.d.ts","./node_modules/undici-types/balanced-pool.d.ts","./node_modules/undici-types/agent.d.ts","./node_modules/undici-types/mock-interceptor.d.ts","./node_modules/undici-types/mock-agent.d.ts","./node_modules/undici-types/mock-client.d.ts","./node_modules/undici-types/mock-pool.d.ts","./node_modules/undici-types/mock-errors.d.ts","./node_modules/undici-types/proxy-agent.d.ts","./node_modules/undici-types/env-http-proxy-agent.d.ts","./node_modules/undici-types/retry-handler.d.ts","./node_modules/undici-types/retry-agent.d.ts","./node_modules/undici-types/api.d.ts","./node_modules/undici-types/interceptors.d.ts","./node_modules/undici-types/util.d.ts","./node_modules/undici-types/cookies.d.ts","./node_modules/undici-types/patch.d.ts","./node_modules/undici-types/websocket.d.ts","./node_modules/undici-types/eventsource.d.ts","./node_modules/undici-types/filereader.d.ts","./node_modules/undici-types/diagnostics-channel.d.ts","./node_modules/undici-types/content-type.d.ts","./node_modules/undici-types/cache.d.ts","./node_modules/undici-types/index.d.ts","./node_modules/@types/node/globals.d.ts","./node_modules/@types/node/assert.d.ts","./node_modules/@types/node/assert/strict.d.ts","./node_modules/@types/node/async_hooks.d.ts","./node_modules/@types/node/buffer.d.ts","./node_modules/@types/node/child_process.d.ts","./node_modules/@types/node/cluster.d.ts","./node_modules/@types/node/console.d.ts","./node_modules/@types/node/constants.d.ts","./node_modules/@types/node/crypto.d.ts","./node_modules/@types/node/dgram.d.ts","./node_modules/@types/node/diagnostics_channel.d.ts","./node_modules/@types/node/dns.d.ts","./node_modules/@types/node/dns/promises.d.ts","./node_modules/@types/node/domain.d.ts","./node_modules/@types/node/dom-events.d.ts","./node_modules/@types/node/events.d.ts","./node_modules/@types/node/fs.d.ts","./node_modules/@types/node/fs/promises.d.ts","./node_modules/@types/node/http.d.ts","./node_modules/@types/node/http2.d.ts","./node_modules/@types/node/https.d.ts","./node_modules/@types/node/inspector.d.ts","./node_modules/@types/node/module.d.ts","./node_modules/@types/node/net.d.ts","./node_modules/@types/node/os.d.ts","./node_modules/@types/node/path.d.ts","./node_modules/@types/node/perf_hooks.d.ts","./node_modules/@types/node/process.d.ts","./node_modules/@types/node/punycode.d.ts","./node_modules/@types/node/querystring.d.ts","./node_modules/@types/node/readline.d.ts","./node_modules/@types/node/readline/promises.d.ts","./node_modules/@types/node/repl.d.ts","./node_modules/@types/node/sea.d.ts","./node_modules/@types/node/sqlite.d.ts","./node_modules/@types/node/stream.d.ts","./node_modules/@types/node/stream/promises.d.ts","./node_modules/@types/node/stream/consumers.d.ts","./node_modules/@types/node/stream/web.d.ts","./node_modules/@types/node/string_decoder.d.ts","./node_modules/@types/node/test.d.ts","./node_modules/@types/node/timers.d.ts","./node_modules/@types/node/timers/promises.d.ts","./node_modules/@types/node/tls.d.ts","./node_modules/@types/node/trace_events.d.ts","./node_modules/@types/node/tty.d.ts","./node_modules/@types/node/url.d.ts","./node_modules/@types/node/util.d.ts","./node_modules/@types/node/v8.d.ts","./node_modules/@types/node/vm.d.ts","./node_modules/@types/node/wasi.d.ts","./node_modules/@types/node/worker_threads.d.ts","./node_modules/@types/node/zlib.d.ts","./node_modules/@types/node/index.d.ts","../../node_modules/@swc/types/assumptions.d.ts","../../node_modules/@swc/types/index.d.ts","../../node_modules/@swc/core/binding.d.ts","../../node_modules/@swc/core/spack.d.ts","../../node_modules/@swc/core/index.d.ts","../../node_modules/tsup/dist/index.d.ts","./tsup.config.ts"],"fileIdsList":[[164,203,206],[164,205,206],[206],[164,206,211,241],[164,206,207,212,218,219,226,238,249],[164,206,207,208,218,226],[164,206],[159,160,161,164,206],[164,206,209,250],[164,206,210,211,219,227],[164,206,211,238,246],[164,206,212,214,218,226],[164,205,206,213],[164,206,214,215],[164,206,216,218],[164,205,206,218],[164,206,218,219,220,238,249],[164,206,218,219,220,233,238,241],[164,201,206],[164,201,206,214,218,221,226,238,249],[164,206,218,219,221,222,226,238,246,249],[164,206,221,223,238,246,249],[162,163,164,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255],[164,206,218,224],[164,206,225,249],[164,206,214,218,226,238],[164,206,227],[164,206,228],[164,205,206,229],[164,203,204,205,206,207,208,209,210,211,212,213,214,215,216,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255],[164,206,231],[164,206,232],[164,206,218,233,234],[164,206,233,235,250,252],[164,206,218,238,239,241],[164,206,240,241],[164,206,238,239],[164,206,241],[164,206,242],[164,203,206,238,243],[164,206,218,244,245],[164,206,244,245],[164,206,211,226,238,246],[164,206,247],[164,206,226,248],[164,206,221,232,249],[164,206,211,250],[164,206,238,251],[164,206,225,252],[164,206,253],[164,206,218,220,229,238,241,249,251,252,254],[164,206,238,255],[164,173,177,206,249],[164,173,206,238,249],[164,168,206],[164,170,173,206,246,249],[164,206,226,246],[164,206,256],[164,168,206,256],[164,170,173,206,226,249],[164,165,166,169,172,206,218,238,249],[164,173,180,206],[164,165,171,206],[164,173,194,195,206],[164,169,173,206,241,249,256],[164,194,206,256],[164,167,168,206,256],[164,173,206],[164,167,168,169,170,171,172,173,174,175,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,195,196,197,198,199,200,206],[164,173,188,206],[164,173,180,181,206],[164,171,173,181,182,206],[164,172,206],[164,165,168,173,206],[164,173,177,181,182,206],[164,177,206],[164,171,173,176,206,249],[164,165,170,173,180,206],[164,206,238],[164,168,173,194,206,254,256],[71,72,73,130,164,206],[79,151,152,153,164,206],[164,206,262],[126,129,130,131,132,133,134,164,206],[71,130,164,206],[71,126,129,130,164,206],[71,129,130,132,164,206],[71,126,130,132,164,206],[75,76,77,78,164,206,221,222,223,226],[75,164,206,221,222,223],[164,206,221,222],[75,164,206,221,222,223,226],[164,206,221,222,223],[150,164,206],[71,126,129,130,135,139,140,150,164,206],[164,206,256,258,259,260],[164,206,258],[164,206,257],[139,146,147,164,206],[147,148,164,206],[138,139,140,145,146,164,206],[136,137,138,139,140,142,143,164,206],[136,140,144,164,206],[140,145,164,206],[140,142,144,146,149,164,206],[136,137,139,140,141,164,206],[137,138,139,144,145,164,206],[142,164,206],[120,127,164,206],[120,123,164,206],[121,164,206],[121,122,164,206],[121,125,127,128,164,206],[121,123,124,125,164,206],[156,157,164,206],[155,157,158,164,206,261],[81,104,105,109,111,112,164,206],[89,99,105,111,164,206],[111,164,206],[81,85,88,97,98,99,102,104,105,110,112,164,206],[80,164,206],[80,81,85,88,89,97,98,99,102,103,104,105,109,110,111,113,114,115,116,117,118,119,164,206],[84,97,102,164,206],[84,85,86,88,97,105,109,111,164,206],[98,99,105,164,206],[85,88,97,102,105,110,111,164,206],[84,85,86,88,97,98,104,109,110,111,164,206],[84,86,98,99,100,101,105,109,164,206],[84,105,109,164,206],[105,111,164,206],[84,85,86,87,96,99,102,105,109,164,206],[84,85,86,87,99,100,102,105,109,164,206],[80,82,83,85,89,99,102,103,105,112,164,206],[81,85,105,109,164,206],[109,164,206],[106,107,108,164,206],[82,104,105,111,113,164,206],[89,164,206],[89,98,102,104,164,206],[89,104,164,206],[85,86,88,97,99,100,104,105,164,206],[84,88,89,96,97,99,164,206],[84,85,86,89,96,97,99,102,164,206],[104,110,111,164,206],[85,164,206],[85,86,164,206],[83,84,86,90,91,92,93,94,95,97,100,102,164,206],[70,164,206],[61,62,164,206],[58,59,61,63,64,69,164,206],[59,61,164,206],[69,164,206],[61,164,206],[58,59,61,64,65,66,67,68,164,206],[58,59,60,164,206]],"fileInfos":[{"version":"69684132aeb9b5642cbcd9e22dff7818ff0ee1aa831728af0ecf97d3364d5546","signature":false,"affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","signature":false,"impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","signature":false,"impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","signature":false,"impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","signature":false,"impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","signature":false,"impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","signature":false,"impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","signature":false,"impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","signature":false,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","signature":false,"affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","signature":false,"affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","signature":false,"affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","signature":false,"affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","signature":false,"affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","signature":false,"affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","signature":false,"affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","signature":false,"affectsGlobalScope":true,"impliedFormat":1},{"version":"936e80ad36a2ee83fc3caf008e7c4c5afe45b3cf3d5c24408f039c1d47bdc1df","signature":false,"affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","signature":false,"affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","signature":false,"affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","signature":false,"affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","signature":false,"affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","signature":false,"affectsGlobalScope":true,"impliedFormat":1},{"version":"fef8cfad2e2dc5f5b3d97a6f4f2e92848eb1b88e897bb7318cef0e2820bceaab","signature":false,"affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","signature":false,"affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","signature":false,"affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","signature":false,"affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","signature":false,"affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","signature":false,"affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","signature":false,"affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","signature":false,"affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","signature":false,"affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","signature":false,"affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","signature":false,"affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","signature":false,"affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","signature":false,"affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","signature":false,"affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","signature":false,"affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","signature":false,"affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","signature":false,"affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","signature":false,"affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","signature":false,"affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","signature":false,"affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","signature":false,"affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","signature":false,"affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","signature":false,"affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","signature":false,"affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","signature":false,"affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","signature":false,"affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","signature":false,"affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","signature":false,"affectsGlobalScope":true,"impliedFormat":1},{"version":"b5ce7a470bc3628408429040c4e3a53a27755022a32fd05e2cb694e7015386c7","signature":false,"affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","signature":false,"affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","signature":false,"affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","signature":false,"affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","signature":false,"affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","signature":false,"affectsGlobalScope":true,"impliedFormat":1},{"version":"d3cfde44f8089768ebb08098c96d01ca260b88bccf238d55eee93f1c620ff5a5","signature":false,"impliedFormat":1},{"version":"293eadad9dead44c6fd1db6de552663c33f215c55a1bfa2802a1bceed88ff0ec","signature":false,"impliedFormat":1},{"version":"833e92c058d033cde3f29a6c7603f517001d1ddd8020bc94d2067a3bc69b2a8e","signature":false,"impliedFormat":1},{"version":"08b2fae7b0f553ad9f79faec864b179fc58bc172e295a70943e8585dd85f600c","signature":false,"impliedFormat":1},{"version":"f12edf1672a94c578eca32216839604f1e1c16b40a1896198deabf99c882b340","signature":false,"impliedFormat":1},{"version":"e3498cf5e428e6c6b9e97bd88736f26d6cf147dedbfa5a8ad3ed8e05e059af8a","signature":false,"impliedFormat":1},{"version":"dba3f34531fd9b1b6e072928b6f885aa4d28dd6789cbd0e93563d43f4b62da53","signature":false,"impliedFormat":1},{"version":"f672c876c1a04a223cf2023b3d91e8a52bb1544c576b81bf64a8fec82be9969c","signature":false,"impliedFormat":1},{"version":"e4b03ddcf8563b1c0aee782a185286ed85a255ce8a30df8453aade2188bbc904","signature":false,"impliedFormat":1},{"version":"2329d90062487e1eaca87b5e06abcbbeeecf80a82f65f949fd332cfcf824b87b","signature":false,"impliedFormat":1},{"version":"25b3f581e12ede11e5739f57a86e8668fbc0124f6649506def306cad2c59d262","signature":false,"impliedFormat":1},{"version":"4fdb529707247a1a917a4626bfb6a293d52cd8ee57ccf03830ec91d39d606d6d","signature":false,"impliedFormat":1},{"version":"a9ebb67d6bbead6044b43714b50dcb77b8f7541ffe803046fdec1714c1eba206","signature":false,"impliedFormat":1},{"version":"5780b706cece027f0d4444fbb4e1af62dc51e19da7c3d3719f67b22b033859b9","signature":false,"impliedFormat":1},{"version":"53a8d4e66f2b42085891d02f0ba1c982b4fc33ff7384ff5d4506a8056ae99537","signature":false,"impliedFormat":99},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","signature":false,"impliedFormat":1},{"version":"e113291579883c711c7aa2dadcf13e53984dc0688cf295beeffff59fd168bb6e","signature":false,"impliedFormat":99},{"version":"a91f0aea41782e8e6c4a380bc5981b9775fc1dd8b3888f9481c458d122772c7c","signature":false,"impliedFormat":1},{"version":"e00dbc9d2c4dba5e071dc5e6ef53d119dcc80ab6865a07cbf6ba180571092778","signature":false,"impliedFormat":1},{"version":"d9319dd7ee3028f6080ad2585937e54fae397d311e31b3622635d518ecb275b2","signature":false,"impliedFormat":1},{"version":"a3f2a5e1d6e7b534cd5263c68fa4a88d5cf88e47da5e678a03ea0b72f3ae8fe2","signature":false,"impliedFormat":1},{"version":"039ded2c755746d4d93c865d26222f8279a9e836ccefc258ba3ab73b810322a6","signature":false,"impliedFormat":1},{"version":"3dfcd0a3bfa70b53135db3cf2e4ddcb7eccc3e4418ce833ae24eecd06928328f","signature":false,"impliedFormat":1},{"version":"33e12c9940a7f23d50742e5925a193bb4af9b23ee159251e6bc50bb9070618a1","signature":false,"impliedFormat":1},{"version":"bc41a8e33caf4d193b0c49ec70d1e8db5ce3312eafe5447c6c1d5a2084fece12","signature":false,"impliedFormat":1},{"version":"7c33f11a56ba4e79efc4ddae85f8a4a888e216d2bf66c863f344d403437ffc74","signature":false,"impliedFormat":1},{"version":"cbef1abd1f8987dee5c9ed8c768a880fbfbff7f7053e063403090f48335c8e4e","signature":false,"impliedFormat":1},{"version":"9249603c91a859973e8f481b67f50d8d0b3fa43e37878f9dfc4c70313ad63065","signature":false,"impliedFormat":1},{"version":"0132f67b7f128d4a47324f48d0918ec73cf4220a5e9ea8bd92b115397911254f","signature":false,"impliedFormat":1},{"version":"06b37153d512000a91cad6fcbae75ca795ecec00469effaa8916101a00d5b9e2","signature":false,"impliedFormat":1},{"version":"8a641e3402f2988bf993007bd814faba348b813fc4058fce5b06de3e81ed511a","signature":false,"impliedFormat":1},{"version":"281744305ba2dcb2d80e2021fae211b1b07e5d85cfc8e36f4520325fcf698dbb","signature":false,"impliedFormat":1},{"version":"e1b042779d17b69719d34f31822ddba8aa6f5eb15f221b02105785f4447e7f5b","signature":false,"impliedFormat":1},{"version":"6858337936b90bd31f1674c43bedda2edbab2a488d04adc02512aef47c792fd0","signature":false,"impliedFormat":1},{"version":"15cb3deecc635efb26133990f521f7f1cc95665d5db8d87e5056beaea564b0ce","signature":false,"impliedFormat":1},{"version":"e27605c8932e75b14e742558a4c3101d9f4fdd32e7e9a056b2ca83f37f973945","signature":false,"impliedFormat":1},{"version":"f0443725119ecde74b0d75c82555b1f95ee1c3cd371558e5528a83d1de8109de","signature":false,"impliedFormat":1},{"version":"7794810c4b3f03d2faa81189504b953a73eb80e5662a90e9030ea9a9a359a66f","signature":false,"impliedFormat":1},{"version":"b074516a691a30279f0fe6dff33cd76359c1daacf4ae024659e44a68756de602","signature":false,"impliedFormat":1},{"version":"57cbeb55ec95326d068a2ce33403e1b795f2113487f07c1f53b1eaf9c21ff2ce","signature":false,"impliedFormat":1},{"version":"a00362ee43d422bcd8239110b8b5da39f1122651a1809be83a518b1298fa6af8","signature":false,"impliedFormat":1},{"version":"a820499a28a5fcdbf4baec05cc069362041d735520ab5a94c38cc44db7df614c","signature":false,"impliedFormat":1},{"version":"33a6d7b07c85ac0cef9a021b78b52e2d901d2ebfd5458db68f229ca482c1910c","signature":false,"impliedFormat":1},{"version":"8f648847b52020c1c0cdfcc40d7bcab72ea470201a631004fde4d85ccbc0c4c7","signature":false,"impliedFormat":1},{"version":"7821d3b702e0c672329c4d036c7037ecf2e5e758eceb5e740dde1355606dc9f2","signature":false,"impliedFormat":1},{"version":"213e4f26ee5853e8ba314ecad3a73cd06ab244a0809749bb777cbc1619aa07d8","signature":false,"impliedFormat":1},{"version":"cafd6ef91d96228a618436c03d60fe5078f43d32df4c39ebd9f3f7d013dbe337","signature":false,"impliedFormat":1},{"version":"961fa18e1658f3f8e38c23e1a9bc3f4d7be75b056a94700291d5f82f57524ff0","signature":false,"impliedFormat":1},{"version":"079c02dc397960da2786db71d7c9e716475377bcedd81dede034f8a9f94c71b8","signature":false,"impliedFormat":1},{"version":"a7595cbb1b354b54dff14a6bb87d471e6d53b63de101a1b4d9d82d3d3f6eddec","signature":false,"impliedFormat":1},{"version":"1f49a85a97e01a26245fd74232b3b301ebe408fb4e969e72e537aa6ffbd3fe14","signature":false,"impliedFormat":1},{"version":"9c38563e4eabfffa597c4d6b9aa16e11e7f9a636f0dd80dd0a8bce1f6f0b2108","signature":false,"impliedFormat":1},{"version":"a971cba9f67e1c87014a2a544c24bc58bad1983970dfa66051b42ae441da1f46","signature":false,"impliedFormat":1},{"version":"df9b266bceb94167c2e8ae25db37d31a28de02ae89ff58e8174708afdec26738","signature":false,"impliedFormat":1},{"version":"9e5b8137b7ee679d31b35221503282561e764116d8b007c5419b6f9d60765683","signature":false,"impliedFormat":1},{"version":"3e7ae921a43416e155d7bbe5b4229b7686cfa6a20af0a3ae5a79dfe127355c21","signature":false,"impliedFormat":1},{"version":"c7200ae85e414d5ed1d3c9507ae38c097050161f57eb1a70bef021d796af87a7","signature":false,"impliedFormat":1},{"version":"4edb4ff36b17b2cf19014b2c901a6bdcdd0d8f732bcf3a11aa6fd0a111198e27","signature":false,"impliedFormat":1},{"version":"810f0d14ce416a343dcdd0d3074c38c094505e664c90636b113d048471c292e2","signature":false,"impliedFormat":1},{"version":"9c37dc73c97cd17686edc94cc534486509e479a1b8809ef783067b7dde5c6713","signature":false,"impliedFormat":1},{"version":"5fe2ef29b33889d3279d5bc92f8e554ffd32145a02f48d272d30fc1eea8b4c89","signature":false,"impliedFormat":1},{"version":"e39090ffe9c45c59082c3746e2aa2546dc53e3c5eeb4ad83f8210be7e2e58022","signature":false,"impliedFormat":1},{"version":"9f85a1810d42f75e1abb4fc94be585aae1fdac8ae752c76b912d95aef61bf5de","signature":false,"impliedFormat":1},{"version":"f329bf8723d68b13f9e8ae2d798b3e4f9f1fa465521841e5d68af70acbc3c671","signature":false,"impliedFormat":1},{"version":"0ce2680ee454e7ea8095ff8c0a081639f710079418714ca1e359501c9d24d8a3","signature":false,"impliedFormat":1},{"version":"3489699bd620b8b427a3f718ae3da99ecfe02fd47c6f31413ca55ab9406bfb30","signature":false,"impliedFormat":1},{"version":"08e2af4847f7dd8c416ed453d9eaf31e6858cb200f3946b3c4d31a2972bc7163","signature":false,"impliedFormat":1},{"version":"7996447df60c37ff3bb3a95e3548d36eb15852e0566b67234e230dac01f1a67b","signature":false,"impliedFormat":1},{"version":"4f572f283235fe6b8703177a892fd59c8b3be53568801a3f0e1ff08d0fd914e0","signature":false,"impliedFormat":1},{"version":"170b9a2ad1d17d6555098a224923ea346b9d3b1be097133696e27ea2bacf6e6f","signature":false,"impliedFormat":1},{"version":"ba04e8da6477145e8b8023c2756305a7a636973c0153db0c3b269f58fdc890ba","signature":false,"impliedFormat":1},{"version":"bafd40a9cfdd53ab37b8632dceb51f78353d73059a5c1dac42d6646af82c6bb3","signature":false,"impliedFormat":1},{"version":"d404f135c74c5c01dfff282d363a285ffeed2303031ef42911c7c7b18feae003","signature":false,"impliedFormat":1},{"version":"1f167fe0629723b9640cf70319ac721c6de0c670c970cd018b9fe469a929a73b","signature":false,"impliedFormat":1},{"version":"bd7992759e714114ac645d771d4ea38510f073209e70fa154b3648715b07019c","signature":false,"impliedFormat":1},{"version":"0f6832dcb3bef01520b0038f4b7d4d3f53f759a5707b7adc0b79971faaebbcc8","signature":false,"impliedFormat":1},{"version":"1d4a15405ab2203b89c34786a4203788e79d176cfbf3d0511679696c6fd787d6","signature":false,"impliedFormat":1},{"version":"3583fef0d2ac896baad4e6ffe156eec5c31eda67b230508037d15fc7d7c5e29d","signature":false,"impliedFormat":1},{"version":"d41393eec4438dd812940c3efa292499b3031d31b1d8d4d72a269b95b341f3cf","signature":false,"impliedFormat":1},{"version":"074388271346577d825792a48a86992091d913aaf31c9b5ea3cac25bd474c45a","signature":false,"impliedFormat":1},{"version":"984c26e8864dc326bf6f7a72f89625b3facd86a901d406b7e54aca3d6ef9d674","signature":false,"impliedFormat":1},{"version":"07af913df1d81e6d4c963ceea4d5deedc0b49e91f1cf14283976b19d3b2caffc","signature":false,"impliedFormat":1},{"version":"d9790aec7d539387a3c44119d2c5114cab8a2f4b5b08abbab8f112c4ca2f7e94","signature":false,"impliedFormat":1},{"version":"5c9b631fd684665b7ab77aadfae34060a03e049bf2b39166a4e3878a2fe978dc","signature":false,"impliedFormat":1},{"version":"377567f78603038f8eb78cec649f1eb89d49a2164e460b1b770421733b618028","signature":false,"impliedFormat":1},{"version":"e61d03e58524aa0516518ecdcb9315820995a30b0ce7991461481c50cfe558b8","signature":false,"impliedFormat":1},{"version":"e02c71f6c8c406ce04664d9e26974fbcf59c6d478b926409b282a8fd7d8bec61","signature":false,"impliedFormat":1},{"version":"dbea31cae6310e3e5f9b4c8379a2c47e391769058700163919441d6257d3121f","signature":false,"impliedFormat":1},{"version":"6f57d264fbb19264ae5aebe606037360c323871fe0287255d93ed864c8baa04d","signature":false,"impliedFormat":1},{"version":"b98e9017e21e894141be4c1811052825875a8f97f7a86fd9c8a9991f3b99cea4","signature":false,"impliedFormat":1},{"version":"ca3251ff37b9334ebe11efe63afb88c9f15cc4d6921456a86d697fc93d185d7f","signature":false,"impliedFormat":1},{"version":"3d70943897bc336fe28c721b463bab2fcda5def22457ea7881e7cd436c79bc34","signature":false,"impliedFormat":1},{"version":"84a488c5fe017f799e54ff0fda5eed362f01553ae989548ded98865cb3930c51","signature":false,"impliedFormat":1},{"version":"5f95d3e3f4e16b80ffecaac909be5f40e71fd891ea3b6a1fadd648479d0f1f4e","signature":false,"impliedFormat":99},{"version":"72fff5387293c41e9701b28252da87bdc4f321e842496ab91ff571a02036f861","signature":false,"impliedFormat":99},{"version":"f2e55a309459e2e6443191de23f188ef6b5cb67843c5330aa097d96807e1da30","signature":false,"impliedFormat":99},{"version":"7ec5989876b5c779575759468905fcbd286dc98aea2c77e24b711ec7ed8de747","signature":false,"impliedFormat":99},{"version":"0a8c470fb49dd9ed9e858b4cba0eb147bf51410a61b99fa28bbba0691839e317","signature":false,"affectsGlobalScope":true,"impliedFormat":1},{"version":"151ff381ef9ff8da2da9b9663ebf657eac35c4c9a19183420c05728f31a6761d","signature":false,"impliedFormat":1},{"version":"ffb518fc55181aefd066c690dbc0f8fa6a1533c8ddac595469c8c5f7fda2d756","signature":false,"affectsGlobalScope":true,"impliedFormat":1},{"version":"b90c59ac4682368a01c83881b814738eb151de8a58f52eb7edadea2bcffb11b9","signature":false,"impliedFormat":1},{"version":"6c7176368037af28cb72f2392010fa1cef295d6d6744bca8cfb54985f3a18c3e","signature":false,"affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","signature":false,"affectsGlobalScope":true,"impliedFormat":1},{"version":"437e20f2ba32abaeb7985e0afe0002de1917bc74e949ba585e49feba65da6ca1","signature":false,"affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","signature":false,"impliedFormat":1},{"version":"a79e62f1e20467e11a904399b8b18b18c0c6eea6b50c1168bf215356d5bebfaf","signature":false,"affectsGlobalScope":true,"impliedFormat":1},{"version":"d802f0e6b5188646d307f070d83512e8eb94651858de8a82d1e47f60fb6da4e2","signature":false,"affectsGlobalScope":true,"impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","signature":false,"impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","signature":false,"impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","signature":false,"impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","signature":false,"impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","signature":false,"impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","signature":false,"impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","signature":false,"impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","signature":false,"impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","signature":false,"impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","signature":false,"impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","signature":false,"impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","signature":false,"impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","signature":false,"impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","signature":false,"impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","signature":false,"impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","signature":false,"impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","signature":false,"impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","signature":false,"impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","signature":false,"impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","signature":false,"impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","signature":false,"impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","signature":false,"impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","signature":false,"impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","signature":false,"impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","signature":false,"impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","signature":false,"impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","signature":false,"impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","signature":false,"impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","signature":false,"impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","signature":false,"impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","signature":false,"impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","signature":false,"impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","signature":false,"impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","signature":false,"impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","signature":false,"impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","signature":false,"impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","signature":false,"impliedFormat":1},{"version":"a12d953aa755b14ac1d28ecdc1e184f3285b01d6d1e58abc11bf1826bc9d80e6","signature":false,"affectsGlobalScope":true,"impliedFormat":1},{"version":"a38efe83ff77c34e0f418a806a01ca3910c02ee7d64212a59d59bca6c2c38fa1","signature":false,"impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","signature":false,"impliedFormat":1},{"version":"2b06b93fd01bcd49d1a6bd1f9b65ddcae6480b9a86e9061634d6f8e354c1468f","signature":false,"impliedFormat":1},{"version":"fac88fbdde5ae2c50fe0a490d63ef7662509271d3c7d00543de8cdd82df2949a","signature":false,"affectsGlobalScope":true,"impliedFormat":1},{"version":"4314c7a11517e221f7296b46547dbc4df047115b182f544d072bdccffa57fc72","signature":false,"impliedFormat":1},{"version":"e9b97d69510658d2f4199b7d384326b7c4053b9e6645f5c19e1c2a54ede427fc","signature":false,"impliedFormat":1},{"version":"c2510f124c0293ab80b1777c44d80f812b75612f297b9857406468c0f4dafe29","signature":false,"affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","signature":false,"impliedFormat":1},{"version":"f478f6f5902dc144c0d6d7bdc919c5177cac4d17a8ca8653c2daf6d7dc94317f","signature":false,"affectsGlobalScope":true,"impliedFormat":1},{"version":"19d5f8d3930e9f99aa2c36258bf95abbe5adf7e889e6181872d1cdba7c9a7dd5","signature":false,"impliedFormat":1},{"version":"9855e02d837744303391e5623a531734443a5f8e6e8755e018c41d63ad797db2","signature":false,"impliedFormat":1},{"version":"bdba81959361810be44bcfdd283f4d601e406ab5ad1d2bdff0ed480cf983c9d7","signature":false,"impliedFormat":1},{"version":"836a356aae992ff3c28a0212e3eabcb76dd4b0cc06bcb9607aeef560661b860d","signature":false,"impliedFormat":1},{"version":"1e0d1f8b0adfa0b0330e028c7941b5a98c08b600efe7f14d2d2a00854fb2f393","signature":false,"impliedFormat":1},{"version":"71450bbc2d82821d24ca05699a533e72758964e9852062c53b30f31c36978ab8","signature":false,"affectsGlobalScope":true,"impliedFormat":1},{"version":"b326f4813b90d230ec3950f66bd5b5ce3971aac5fac67cfafc54aa07b39fd07f","signature":false,"affectsGlobalScope":true,"impliedFormat":1},{"version":"25d130083f833251b5b4c2794890831b1b8ce2ead24089f724181576cf9d7279","signature":false,"impliedFormat":1},{"version":"ffe66ee5c9c47017aca2136e95d51235c10e6790753215608bff1e712ff54ec6","signature":false,"impliedFormat":1},{"version":"c196aaab6ba9679c918dcc1ee272c5f798ea9fc489b194d293de5074cf96d56b","signature":false,"impliedFormat":1},{"version":"017caf5d2a8ef581cf94f678af6ce7415e06956317946315560f1487b9a56167","signature":false,"impliedFormat":1},{"version":"528b62e4272e3ddfb50e8eed9e359dedea0a4d171c3eb8f337f4892aac37b24b","signature":false,"impliedFormat":1},{"version":"d71535813e39c23baa113bc4a29a0e187b87d1105ccc8c5a6ebaca38d9a9bff2","signature":false,"impliedFormat":1},{"version":"d83f86427b468176fbacb28ef302f152ad3d2d127664c627216e45cfa06fbf7e","signature":false,"affectsGlobalScope":true,"impliedFormat":1},{"version":"f72bc8fe16da67e4e3268599295797b202b95e54bd215a03f97e925dd1502a36","signature":false,"impliedFormat":1},{"version":"b1b6ee0d012aeebe11d776a155d8979730440082797695fc8e2a5c326285678f","signature":false,"impliedFormat":1},{"version":"45875bcae57270aeb3ebc73a5e3fb4c7b9d91d6b045f107c1d8513c28ece71c0","signature":false,"impliedFormat":1},{"version":"915e18c559321c0afaa8d34674d3eb77e1ded12c3e85bf2a9891ec48b07a1ca5","signature":false,"affectsGlobalScope":true,"impliedFormat":1},{"version":"a2f3aa60aece790303a62220456ff845a1b980899bdc2e81646b8e33d9d9cc15","signature":false,"affectsGlobalScope":true,"impliedFormat":1},{"version":"3f16a7e4deafa527ed9995a772bb380eb7d3c2c0fd4ae178c5263ed18394db2c","signature":false,"impliedFormat":1},{"version":"933921f0bb0ec12ef45d1062a1fc0f27635318f4d294e4d99de9a5493e618ca2","signature":false,"impliedFormat":1},{"version":"71a0f3ad612c123b57239a7749770017ecfe6b66411488000aba83e4546fde25","signature":false,"impliedFormat":1},{"version":"8145e07aad6da5f23f2fcd8c8e4c5c13fb26ee986a79d03b0829b8fce152d8b2","signature":false,"impliedFormat":1},{"version":"4f9d8ca0c417b67b69eeb54c7ca1bedd7b56034bb9bfd27c5d4f3bc4692daca7","signature":false,"impliedFormat":1},{"version":"814118df420c4e38fe5ae1b9a3bafb6e9c2aa40838e528cde908381867be6466","signature":false,"impliedFormat":1},{"version":"0be405730b99eee7dbb051d74f6c3c0f1f8661d86184a7122b82c2bfb0991922","signature":false,"impliedFormat":1},{"version":"199c8269497136f3a0f4da1d1d90ab033f899f070e0dd801946f2a241c8abba2","signature":false,"impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","signature":false,"impliedFormat":1},{"version":"125d792ec6c0c0f657d758055c494301cc5fdb327d9d9d5960b3f129aff76093","signature":false,"impliedFormat":1},{"version":"12aad38de6f0594dc21efa78a2c1f67bf6a7ef5a389e05417fe9945284450908","signature":false,"affectsGlobalScope":true,"impliedFormat":1},{"version":"2754d8221d77c7b382096651925eb476f1066b3348da4b73fe71ced7801edada","signature":false,"impliedFormat":1},{"version":"edbb3546af6a57fa655860fef11f4109390f4a2f1eab4a93f548ccc21d604a56","signature":false,"impliedFormat":1},{"version":"f0be1b8078cd549d91f37c30c222c2a187ac1cf981d994fb476a1adc61387b14","signature":false,"affectsGlobalScope":true,"impliedFormat":1},{"version":"0aaed1d72199b01234152f7a60046bc947f1f37d78d182e9ae09c4289e06a592","signature":false,"impliedFormat":1},{"version":"98ffdf93dfdd206516971d28e3e473f417a5cfd41172e46b4ce45008f640588e","signature":false,"impliedFormat":1},{"version":"66ba1b2c3e3a3644a1011cd530fb444a96b1b2dfe2f5e837a002d41a1a799e60","signature":false,"impliedFormat":1},{"version":"7e514f5b852fdbc166b539fdd1f4e9114f29911592a5eb10a94bb3a13ccac3c4","signature":false,"impliedFormat":1},{"version":"7d6ff413e198d25639f9f01f16673e7df4e4bd2875a42455afd4ecc02ef156da","signature":false,"affectsGlobalScope":true,"impliedFormat":1},{"version":"27c45985c94b8b342110506d89ac2c145e1eaaac62fa4baae471c603ef3dda90","signature":false,"affectsGlobalScope":true,"impliedFormat":1},{"version":"0f7e00beefa952297cde4638b2124d2d9a1eed401960db18edcadaa8500c78eb","signature":false,"impliedFormat":1},{"version":"3a051941721a7f905544732b0eb819c8d88333a96576b13af08b82c4f17581e4","signature":false,"impliedFormat":1},{"version":"ac5ed35e649cdd8143131964336ab9076937fa91802ec760b3ea63b59175c10a","signature":false,"impliedFormat":1},{"version":"a4568ec1888b5306bbde6d9ede5c4a81134635fa8aad7eaad15752760eb9783f","signature":false,"affectsGlobalScope":true,"impliedFormat":1},{"version":"3797dd6f4ea3dc15f356f8cdd3128bfa18122213b38a80d6c1f05d8e13cbdad8","signature":false,"impliedFormat":1},{"version":"ad90122e1cb599b3bc06a11710eb5489101be678f2920f2322b0ac3e195af78d","signature":false,"impliedFormat":1},{"version":"7a0b3e902cabef41f2d37e5eb4dab644c5b8470594318810434df7cc547b0cf8","signature":false,"impliedFormat":1},{"version":"f3c9ef6e032a03cf113468bd4ef5f66f96325699cf33bb6c66b31b930a4824b3","signature":false,"impliedFormat":1},{"version":"d7d1b49e0462eb979fd506c9667f1d4afbb0d39940ec9da5ef4473d1b952b0b6","signature":false,"impliedFormat":1},{"version":"136ac2fb228b2c64ad2d039eb4de311212505a20a91b9ba632bd6cfdc3b4126f","signature":false,"impliedFormat":1},{"version":"7d98e7acbe7ffe68b699bf7656af842f5d5efecd1df67800b92ed71ed60f2287","signature":false,"impliedFormat":1},{"version":"1c1ea3fa7cadf8436f5cbb402a69762ed3a5377ad96b15f6e6b7cffbb1af9b2f","signature":false,"impliedFormat":1},{"version":"5c05b2486e4817ed224096975b0dc310020236d7e1ad93ac3210460508130264","signature":false,"impliedFormat":99}],"root":[74,154,263],"options":{"allowJs":true,"declaration":true,"declarationMap":true,"esModuleInterop":true,"module":199,"noUncheckedIndexedAccess":true,"outDir":"../../packages/typescript-config/dist","rootDir":"../../packages/typescript-config/src","skipLibCheck":true,"strict":true,"target":9,"verbatimModuleSyntax":true},"referencedMap":[[203,1],[204,1],[205,2],[164,3],[206,4],[207,5],[208,6],[159,7],[162,8],[160,7],[161,7],[209,9],[210,10],[211,11],[212,12],[213,13],[214,14],[215,14],[217,7],[216,15],[218,16],[219,17],[220,18],[202,19],[163,7],[221,20],[222,21],[223,22],[256,23],[224,24],[225,25],[226,26],[227,27],[228,28],[229,29],[230,30],[231,31],[232,32],[233,33],[234,33],[235,34],[236,7],[237,7],[238,35],[240,36],[239,37],[241,38],[242,39],[243,40],[244,41],[245,42],[246,43],[247,44],[248,45],[249,46],[250,47],[251,48],[252,49],[253,50],[254,51],[255,52],[73,7],[180,53],[190,54],[179,53],[200,55],[171,56],[170,57],[199,58],[193,59],[198,60],[173,61],[187,62],[172,63],[196,64],[168,65],[167,58],[197,66],[169,67],[174,68],[175,7],[178,68],[165,7],[201,69],[191,70],[182,71],[183,72],[185,73],[181,74],[184,75],[194,58],[176,76],[177,77],[186,78],[166,79],[189,70],[188,68],[192,7],[195,80],[74,81],[154,82],[263,83],[135,84],[131,85],[132,86],[133,87],[134,88],[130,86],[79,89],[77,90],[78,91],[76,92],[75,93],[152,94],[151,95],[259,7],[261,96],[260,97],[257,7],[258,98],[156,7],[155,7],[148,99],[149,100],[147,101],[144,102],[145,103],[146,104],[150,105],[142,106],[136,7],[140,107],[141,108],[137,7],[138,7],[143,7],[139,7],[128,109],[124,110],[122,111],[127,112],[123,112],[125,112],[121,7],[129,113],[126,114],[157,115],[262,116],[158,7],[56,7],[57,7],[11,7],[10,7],[2,7],[12,7],[13,7],[14,7],[15,7],[16,7],[17,7],[18,7],[19,7],[3,7],[20,7],[21,7],[4,7],[22,7],[26,7],[23,7],[24,7],[25,7],[27,7],[28,7],[29,7],[5,7],[30,7],[31,7],[32,7],[33,7],[6,7],[37,7],[34,7],[35,7],[36,7],[38,7],[7,7],[39,7],[44,7],[45,7],[40,7],[41,7],[42,7],[43,7],[8,7],[49,7],[46,7],[47,7],[48,7],[50,7],[9,7],[51,7],[52,7],[53,7],[55,7],[54,7],[1,7],[113,117],[82,7],[100,118],[112,119],[111,120],[81,121],[120,122],[83,7],[101,123],[110,124],[87,125],[98,126],[105,127],[102,128],[85,129],[84,130],[97,131],[88,132],[104,133],[106,134],[107,135],[108,135],[109,136],[114,7],[80,7],[115,135],[116,137],[90,138],[91,138],[92,138],[99,139],[103,140],[89,141],[117,142],[118,143],[93,7],[86,144],[94,145],[95,146],[96,147],[119,126],[71,148],[63,149],[70,150],[65,7],[66,7],[64,151],[67,152],[58,7],[59,7],[60,148],[62,153],[68,7],[69,154],[61,155],[72,85],[153,7]],"changeFileSet":[203,204,205,164,206,207,208,159,162,160,161,209,210,211,212,213,214,215,217,216,218,219,220,202,163,221,222,223,256,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,240,239,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,73,180,190,179,200,171,170,199,193,198,173,187,172,196,168,167,197,169,174,175,178,165,201,191,182,183,185,181,184,194,176,177,186,166,189,188,192,195,74,154,263,135,131,132,133,134,130,79,77,78,76,75,152,151,259,261,260,257,258,156,155,148,149,147,144,145,146,150,142,136,140,141,137,138,143,139,128,124,122,127,123,125,121,129,126,157,262,158,56,57,11,10,2,12,13,14,15,16,17,18,19,3,20,21,4,22,26,23,24,25,27,28,29,5,30,31,32,33,6,37,34,35,36,38,7,39,44,45,40,41,42,43,8,49,46,47,48,50,9,51,52,53,55,54,1,113,82,100,112,111,81,120,83,101,110,87,98,105,102,85,84,97,88,104,106,107,108,109,114,80,115,116,90,91,92,99,103,89,117,118,93,86,94,95,96,119,71,63,70,65,66,64,67,58,59,60,62,68,69,61,72,153],"version":"5.8.3"} \ No newline at end of file diff --git a/apps/api/tsup.config.ts b/apps/api/tsup.config.ts new file mode 100644 index 0000000..91dff8a --- /dev/null +++ b/apps/api/tsup.config.ts @@ -0,0 +1,15 @@ +import { defineConfig } from "tsup"; + +export default defineConfig({ + entry: ["src/index.ts"], + format: ["esm"], + dts: false, + splitting: false, + sourcemap: true, + clean: true, + external: ["@repo/config", "@repo/logger", "@repo/typescript-config"], + treeshake: true, + minify: false, + target: "node18", + platform: "node", +}); diff --git a/apps/bot/.env.example b/apps/bot/.env.example index 01d4577..c40f42d 100644 --- a/apps/bot/.env.example +++ b/apps/bot/.env.example @@ -1,4 +1,5 @@ BOT_TOKEN="your-bot-token" WEBHOOK_URL="your-webhook-url" PORT=3000 -MODE=polling or webhook \ No newline at end of file +MODE=polling or webhook +DATABASE_URL=copy from packages/database/.env \ No newline at end of file diff --git a/apps/bot/package.json b/apps/bot/package.json index 97a306b..2bb7191 100644 --- a/apps/bot/package.json +++ b/apps/bot/package.json @@ -2,10 +2,13 @@ "name": "bot", "version": "0.0.0", "private": true, + "type": "module", "scripts": { - "dev": "NODE_PATH=./src tsnd --respawn --transpile-only --exit-child src/index.ts", - "start": "NODE_PATH=./dist node ./dist/index.js", - "build": "tsc" + "dev": "tsx watch src/index.ts", + "start": "node dist/index.js", + "build": "tsup", + "check-types": "tsc --noEmit", + "clean": "rm -rf dist" }, "dependencies": { "@hono/node-server": "^1.15.0", @@ -19,7 +22,9 @@ "zod": "^3.25.76" }, "devDependencies": { - "ts-node-dev": "^2.0.0", + "@types/node": "^22.10.2", + "tsup": "^8.3.5", + "tsx": "^4.19.2", "typescript": "^5.8.3" } } diff --git a/apps/bot/src/config.ts b/apps/bot/src/config.ts index 4bd0ac3..a45bd28 100644 --- a/apps/bot/src/config.ts +++ b/apps/bot/src/config.ts @@ -1,12 +1,12 @@ -import { createConfig } from '@repo/config'; -import z from 'zod'; -import 'dotenv/config'; +import { createConfig } from "@repo/config"; +import z from "zod"; +import "dotenv/config"; export const config = createConfig({ schema: { BOT_TOKEN: z.string(), WEBHOOK_URI: z.string(), - PORT: z.string().default('3000'), - MODE: z.enum(['polling', 'webhook']).default('polling'), + PORT: z.string().default("3000"), + MODE: z.enum(["polling", "webhook"]).default("polling"), }, }); diff --git a/apps/bot/src/index.ts b/apps/bot/src/index.ts index 1a321bb..efebf13 100644 --- a/apps/bot/src/index.ts +++ b/apps/bot/src/index.ts @@ -37,9 +37,15 @@ if (config.MODE === 'webhook') { ); } else { logger.info('Starting in polling mode...'); - bot.start({ - onStart: () => { - logger.info('Bot started polling...'); - }, - }); + + const startBot = async () => { + bot.start({ + drop_pending_updates: true, + onStart: () => { + logger.info('Bot started polling...'); + }, + }); + }; + + startBot(); } diff --git a/apps/bot/src/middlewares/on-error.ts b/apps/bot/src/middlewares/on-error.ts index 6ba9a64..01a8780 100644 --- a/apps/bot/src/middlewares/on-error.ts +++ b/apps/bot/src/middlewares/on-error.ts @@ -7,7 +7,8 @@ const errorReply = const replyErrorLog = 'Не удалось отправить сообщение об ошибке пользователю'; export const onError: MiddlewareFn = async (ctx, next) => { - return await next().catch(async () => { + return await next().catch(async (e) => { + logger.error('Ошибка в onError', e); await ctx.reply(errorReply).catch((err) => { logger.error(replyErrorLog, err); }); diff --git a/apps/bot/src/middlewares/upsert-user.ts b/apps/bot/src/middlewares/upsert-user.ts index 34d1e1e..360d513 100644 --- a/apps/bot/src/middlewares/upsert-user.ts +++ b/apps/bot/src/middlewares/upsert-user.ts @@ -1,6 +1,6 @@ -import { MiddlewareFn } from 'grammy'; -import { BotContext } from '../types'; -import { Prisma, prisma } from '@repo/db'; +import { MiddlewareFn } from "grammy"; +import { BotContext } from "../types"; +import { Prisma, prisma } from "@repo/db"; export const upsertUser: MiddlewareFn = async (ctx, next) => { const telegramId = ctx.from?.id.toString(); diff --git a/apps/bot/src/session-storage.ts b/apps/bot/src/session-storage.ts index 1421835..a5772bd 100644 --- a/apps/bot/src/session-storage.ts +++ b/apps/bot/src/session-storage.ts @@ -1,5 +1,5 @@ -import { prisma } from '@repo/db'; -import { StorageAdapter } from 'grammy'; +import { prisma } from "@repo/db"; +import { StorageAdapter } from "grammy"; export class PrismaStorageAdapter implements StorageAdapter @@ -14,7 +14,7 @@ export class PrismaStorageAdapter .then((session) => (session?.data as T) || undefined); } async write(key: string, data: T): Promise { - console.log('write', data); + console.log("write", data); await prisma.telegramSession.upsert({ where: { id: key, diff --git a/apps/bot/src/types.ts b/apps/bot/src/types.ts index de93122..af4ef51 100644 --- a/apps/bot/src/types.ts +++ b/apps/bot/src/types.ts @@ -1,5 +1,5 @@ -import { Context, LazySessionFlavor } from 'grammy'; +import { Context, LazySessionFlavor } from "grammy"; // config your session data -export type SessionData = { }; +export type SessionData = {}; export type BotContext = Context & LazySessionFlavor; diff --git a/apps/bot/tsconfig.json b/apps/bot/tsconfig.json index 68384b4..21ba800 100644 --- a/apps/bot/tsconfig.json +++ b/apps/bot/tsconfig.json @@ -1,9 +1,15 @@ { - "extends": "@repo/typescript-config/base.json", + "extends": "@repo/typescript-config/node.json", "compilerOptions": { "outDir": "dist", - "rootDir": "src" + "rootDir": ".", + "skipLibCheck": true }, - "include": ["src"], - "exclude": ["node_modules", "dist"] + "include": ["src/**/*"], + "exclude": [ + "node_modules", + "dist", + "**/*.test.*", + "**/*.spec.*" + ] } \ No newline at end of file diff --git a/apps/bot/tsup.config.ts b/apps/bot/tsup.config.ts new file mode 100644 index 0000000..2ee01c1 --- /dev/null +++ b/apps/bot/tsup.config.ts @@ -0,0 +1,20 @@ +import { defineConfig } from "tsup"; + +export default defineConfig({ + entry: ["src/index.ts"], + format: ["esm"], + dts: false, + splitting: false, + sourcemap: true, + clean: true, + external: [ + "@repo/config", + "@repo/db", + "@repo/logger", + "@repo/typescript-config", + ], + treeshake: true, + minify: false, + target: "node18", + platform: "node", +}); diff --git a/package-lock.json b/package-lock.json index 7892c55..2393f53 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,7 @@ "devDependencies": { "prettier": "^3.6.2", "turbo": "^2.5.4", - "typescript": "5.8.3" + "typescript": "^5.8.3" }, "engines": { "node": ">=18" @@ -35,8 +35,10 @@ "zod-openapi": "^4.2.4" }, "devDependencies": { - "ts-node-dev": "^2.0.0", - "typescript": "latest" + "@types/node": "^22.10.2", + "tsup": "^8.3.5", + "tsx": "^4.19.2", + "typescript": "^5.8.3" } }, "apps/api/node_modules/@hono/zod-validator": { @@ -49,6 +51,16 @@ "zod": "^3.19.1" } }, + "apps/api/node_modules/@types/node": { + "version": "22.16.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.16.3.tgz", + "integrity": "sha512-sr4Xz74KOUeYadexo1r8imhRtlVXcs+j3XK3TcoiYk7B1t3YRVJgtaD3cwX73NYb71pmVuMLNRhJ9XKdoDB74g==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, "apps/api/node_modules/dotenv": { "version": "17.1.0", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.1.0.tgz", @@ -127,6 +139,13 @@ } } }, + "apps/api/node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" + }, "apps/bot": { "version": "0.0.0", "dependencies": { @@ -141,10 +160,22 @@ "zod": "^3.25.76" }, "devDependencies": { - "ts-node-dev": "^2.0.0", + "@types/node": "^22.10.2", + "tsup": "^8.3.5", + "tsx": "^4.19.2", "typescript": "^5.8.3" } }, + "apps/bot/node_modules/@types/node": { + "version": "22.16.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.16.3.tgz", + "integrity": "sha512-sr4Xz74KOUeYadexo1r8imhRtlVXcs+j3XK3TcoiYk7B1t3YRVJgtaD3cwX73NYb71pmVuMLNRhJ9XKdoDB74g==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, "apps/bot/node_modules/dotenv": { "version": "17.1.0", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.1.0.tgz", @@ -157,6 +188,13 @@ "url": "https://dotenvx.com" } }, + "apps/bot/node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" + }, "node_modules/@apidevtools/json-schema-ref-parser": { "version": "11.9.3", "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-11.9.3.tgz", @@ -186,17 +224,446 @@ "zod": "^3.20.2" } }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.6.tgz", + "integrity": "sha512-ShbM/3XxwuxjFiuVBHA+d3j5dyac0aEVVq1oluIDf71hUw0aRF59dV/efUsIwFnR6m8JNM2FjZOzmaZ8yG61kw==", + "cpu": [ + "ppc64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, + "optional": true, + "os": [ + "aix" + ], "engines": { - "node": ">=12" + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.6.tgz", + "integrity": "sha512-S8ToEOVfg++AU/bHwdksHNnyLyVM+eMVAOf6yRKFitnwnbwwPNqKr3srzFRe7nzV69RQKb5DgchIX5pt3L53xg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.6.tgz", + "integrity": "sha512-hd5zdUarsK6strW+3Wxi5qWws+rJhCCbMiC9QZyzoxfk5uHRIE8T287giQxzVpEvCwuJ9Qjg6bEjcRJcgfLqoA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.6.tgz", + "integrity": "sha512-0Z7KpHSr3VBIO9A/1wcT3NTy7EB4oNC4upJ5ye3R7taCc2GUdeynSLArnon5G8scPwaU866d3H4BCrE5xLW25A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.6.tgz", + "integrity": "sha512-FFCssz3XBavjxcFxKsGy2DYK5VSvJqa6y5HXljKzhRZ87LvEi13brPrf/wdyl/BbpbMKJNOr1Sd0jtW4Ge1pAA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.6.tgz", + "integrity": "sha512-GfXs5kry/TkGM2vKqK2oyiLFygJRqKVhawu3+DOCk7OxLy/6jYkWXhlHwOoTb0WqGnWGAS7sooxbZowy+pK9Yg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.6.tgz", + "integrity": "sha512-aoLF2c3OvDn2XDTRvn8hN6DRzVVpDlj2B/F66clWd/FHLiHaG3aVZjxQX2DYphA5y/evbdGvC6Us13tvyt4pWg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.6.tgz", + "integrity": "sha512-2SkqTjTSo2dYi/jzFbU9Plt1vk0+nNg8YC8rOXXea+iA3hfNJWebKYPs3xnOUf9+ZWhKAaxnQNUf2X9LOpeiMQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.6.tgz", + "integrity": "sha512-SZHQlzvqv4Du5PrKE2faN0qlbsaW/3QQfUUc6yO2EjFcA83xnwm91UbEEVx4ApZ9Z5oG8Bxz4qPE+HFwtVcfyw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.6.tgz", + "integrity": "sha512-b967hU0gqKd9Drsh/UuAm21Khpoh6mPBSgz8mKRq4P5mVK8bpA+hQzmm/ZwGVULSNBzKdZPQBRT3+WuVavcWsQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.6.tgz", + "integrity": "sha512-aHWdQ2AAltRkLPOsKdi3xv0mZ8fUGPdlKEjIEhxCPm5yKEThcUjHpWB1idN74lfXGnZ5SULQSgtr5Qos5B0bPw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.6.tgz", + "integrity": "sha512-VgKCsHdXRSQ7E1+QXGdRPlQ/e08bN6WMQb27/TMfV+vPjjTImuT9PmLXupRlC90S1JeNNW5lzkAEO/McKeJ2yg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.6.tgz", + "integrity": "sha512-WViNlpivRKT9/py3kCmkHnn44GkGXVdXfdc4drNmRl15zVQ2+D2uFwdlGh6IuK5AAnGTo2qPB1Djppj+t78rzw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.6.tgz", + "integrity": "sha512-wyYKZ9NTdmAMb5730I38lBqVu6cKl4ZfYXIs31Baf8aoOtB4xSGi3THmDYt4BTFHk7/EcVixkOV2uZfwU3Q2Jw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.6.tgz", + "integrity": "sha512-KZh7bAGGcrinEj4qzilJ4hqTY3Dg2U82c8bv+e1xqNqZCrCyc+TL9AUEn5WGKDzm3CfC5RODE/qc96OcbIe33w==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.6.tgz", + "integrity": "sha512-9N1LsTwAuE9oj6lHMyyAM+ucxGiVnEqUdp4v7IaMmrwb06ZTEVCIs3oPPplVsnjPfyjmxwHxHMF8b6vzUVAUGw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.6.tgz", + "integrity": "sha512-A6bJB41b4lKFWRKNrWoP2LHsjVzNiaurf7wyj/XtFNTsnPuxwEBWHLty+ZE0dWBKuSK1fvKgrKaNjBS7qbFKig==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.6.tgz", + "integrity": "sha512-IjA+DcwoVpjEvyxZddDqBY+uJ2Snc6duLpjmkXm/v4xuS3H+3FkLZlDm9ZsAbF9rsfP3zeA0/ArNDORZgrxR/Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.6.tgz", + "integrity": "sha512-dUXuZr5WenIDlMHdMkvDc1FAu4xdWixTCRgP7RQLBOkkGgwuuzaGSYcOpW4jFxzpzL1ejb8yF620UxAqnBrR9g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.6.tgz", + "integrity": "sha512-l8ZCvXP0tbTJ3iaqdNf3pjaOSd5ex/e6/omLIQCVBLmHTlfXW3zAxQ4fnDmPLOB1x9xrcSi/xtCWFwCZRIaEwg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.6.tgz", + "integrity": "sha512-hKrmDa0aOFOr71KQ/19JC7az1P0GWtCN1t2ahYAf4O007DHZt/dW8ym5+CUdJhQ/qkZmI1HAF8KkJbEFtCL7gw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.6.tgz", + "integrity": "sha512-+SqBcAWoB1fYKmpWoQP4pGtx+pUUC//RNYhFdbcSA16617cchuryuhOCRpPsjCblKukAckWsV+aQ3UKT/RMPcA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.6.tgz", + "integrity": "sha512-dyCGxv1/Br7MiSC42qinGL8KkG4kX0pEsdb0+TKhmJZgCUDBGmyo1/ArCjNGiOLiIAgdbWgmWgib4HoCi5t7kA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.6.tgz", + "integrity": "sha512-42QOgcZeZOvXfsCBJF5Afw73t4veOId//XD3i+/9gSkhSV6Gk3VPlWncctI+JcOyERv85FUo7RxuxGy+z8A43Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.6.tgz", + "integrity": "sha512-4AWhgXmDuYN7rJI6ORB+uU9DHLq/erBbuMoAuB4VWJTu5KtCgcKYPynF0YI1VkBNuEfjNlLrFr9KZPJzrtLkrQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.6.tgz", + "integrity": "sha512-NgJPHHbEpLQgDH2MjQu90pzW/5vvXIZ7KOnPyNBm92A6WgZ/7b6fJyUBjoumLqeOQQGqY2QjQxRo97ah4Sj0cA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" } }, "node_modules/@eslint-community/eslint-utils": { @@ -486,6 +953,102 @@ "url": "https://github.com/sponsors/nzakas" } }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.12", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.12.tgz", + "integrity": "sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/gen-mapping/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.29", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.29.tgz", + "integrity": "sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", @@ -503,17 +1066,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, "node_modules/@jsdevtools/ono": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz", @@ -568,6 +1120,17 @@ "node": ">= 8" } }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, "node_modules/@prisma/client": { "version": "6.11.1", "resolved": "https://registry.npmjs.org/@prisma/client/-/client-6.11.1.tgz", @@ -695,9 +1258,215 @@ "resolved": "packages/typescript-config", "link": true }, - "node_modules/@repo/utils": { - "resolved": "packages/utils", - "link": true + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.44.2.tgz", + "integrity": "sha512-g0dF8P1e2QYPOj1gu7s/3LVP6kze9A7m6x0BZ9iTdXK8N5c2V7cpBKHV3/9A4Zd8xxavdhK0t4PnqjkqVmUc9Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.44.2.tgz", + "integrity": "sha512-Yt5MKrOosSbSaAK5Y4J+vSiID57sOvpBNBR6K7xAaQvk3MkcNVV0f9fE20T+41WYN8hDn6SGFlFrKudtx4EoxA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.44.2.tgz", + "integrity": "sha512-EsnFot9ZieM35YNA26nhbLTJBHD0jTwWpPwmRVDzjylQT6gkar+zenfb8mHxWpRrbn+WytRRjE0WKsfaxBkVUA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.44.2.tgz", + "integrity": "sha512-dv/t1t1RkCvJdWWxQ2lWOO+b7cMsVw5YFaS04oHpZRWehI1h0fV1gF4wgGCTyQHHjJDfbNpwOi6PXEafRBBezw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.44.2.tgz", + "integrity": "sha512-W4tt4BLorKND4qeHElxDoim0+BsprFTwb+vriVQnFFtT/P6v/xO5I99xvYnVzKWrK6j7Hb0yp3x7V5LUbaeOMg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.44.2.tgz", + "integrity": "sha512-tdT1PHopokkuBVyHjvYehnIe20fxibxFCEhQP/96MDSOcyjM/shlTkZZLOufV3qO6/FQOSiJTBebhVc12JyPTA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.44.2.tgz", + "integrity": "sha512-+xmiDGGaSfIIOXMzkhJ++Oa0Gwvl9oXUeIiwarsdRXSe27HUIvjbSIpPxvnNsRebsNdUo7uAiQVgBD1hVriwSQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.44.2.tgz", + "integrity": "sha512-bDHvhzOfORk3wt8yxIra8N4k/N0MnKInCW5OGZaeDYa/hMrdPaJzo7CSkjKZqX4JFUWjUGm88lI6QJLCM7lDrA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.44.2.tgz", + "integrity": "sha512-NMsDEsDiYghTbeZWEGnNi4F0hSbGnsuOG+VnNvxkKg0IGDvFh7UVpM/14mnMwxRxUf9AdAVJgHPvKXf6FpMB7A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.44.2.tgz", + "integrity": "sha512-lb5bxXnxXglVq+7imxykIp5xMq+idehfl+wOgiiix0191av84OqbjUED+PRC5OA8eFJYj5xAGcpAZ0pF2MnW+A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.44.2.tgz", + "integrity": "sha512-Yl5Rdpf9pIc4GW1PmkUGHdMtbx0fBLE1//SxDmuf3X0dUC57+zMepow2LK0V21661cjXdTn8hO2tXDdAWAqE5g==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.44.2.tgz", + "integrity": "sha512-03vUDH+w55s680YYryyr78jsO1RWU9ocRMaeV2vMniJJW/6HhoTBwyyiiTPVHNWLnhsnwcQ0oH3S9JSBEKuyqw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.44.2.tgz", + "integrity": "sha512-iYtAqBg5eEMG4dEfVlkqo05xMOk6y/JXIToRca2bAWuqjrJYJlx/I7+Z+4hSrsWU8GdJDFPL4ktV3dy4yBSrzg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.44.2.tgz", + "integrity": "sha512-e6vEbgaaqz2yEHqtkPXa28fFuBGmUJ0N2dOJK8YUfijejInt9gfCSA7YDdJ4nYlv67JfP3+PSWFX4IVw/xRIPg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.44.2.tgz", + "integrity": "sha512-evFOtkmVdY3udE+0QKrV5wBx7bKI0iHz5yEVx5WqDJkxp9YQefy4Mpx3RajIVcM6o7jxTvVd/qpC1IXUhGc1Mw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { "version": "4.44.2", @@ -712,33 +1481,315 @@ "linux" ] }, - "node_modules/@tsconfig/node10": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", - "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.44.2.tgz", + "integrity": "sha512-3D3OB1vSSBXmkGEZR27uiMRNiwN08/RVAcBKwhUYPaiZ8bcvdeEwWPvbnXvvXHY+A/7xluzcN+kaiOFNiOZwWg==", + "cpu": [ + "x64" + ], "dev": true, - "license": "MIT" + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.44.2.tgz", + "integrity": "sha512-VfU0fsMK+rwdK8mwODqYeM2hDrF2WiHaSmCBrS7gColkQft95/8tphyzv2EupVxn3iE0FI78wzffoULH1G+dkw==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "MIT" + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.44.2.tgz", + "integrity": "sha512-+qMUrkbUurpE6DVRjiJCNGZBGo9xM4Y0FXU5cjgudWqIBWbcLkjE3XprJUsOFgC6xjBClwVa9k6O3A7K3vxb5Q==", + "cpu": [ + "ia32" + ], "dev": true, - "license": "MIT" + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.44.2.tgz", + "integrity": "sha512-3+QZROYfJ25PDcxFF66UEk8jGWigHJeecZILvkPkyQN7oc5BvFo4YEXFkOs154j3FTMp9mn9Ky8RCOwastduEA==", + "cpu": [ + "x64" + ], "dev": true, - "license": "MIT" + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@swc/core": { + "version": "1.12.11", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.12.11.tgz", + "integrity": "sha512-P3GM+0lqjFctcp5HhR9mOcvLSX3SptI9L1aux0Fuvgt8oH4f92rCUrkodAa0U2ktmdjcyIiG37xg2mb/dSCYSA==", + "dev": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "optional": true, + "peer": true, + "dependencies": { + "@swc/counter": "^0.1.3", + "@swc/types": "^0.1.23" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/swc" + }, + "optionalDependencies": { + "@swc/core-darwin-arm64": "1.12.11", + "@swc/core-darwin-x64": "1.12.11", + "@swc/core-linux-arm-gnueabihf": "1.12.11", + "@swc/core-linux-arm64-gnu": "1.12.11", + "@swc/core-linux-arm64-musl": "1.12.11", + "@swc/core-linux-x64-gnu": "1.12.11", + "@swc/core-linux-x64-musl": "1.12.11", + "@swc/core-win32-arm64-msvc": "1.12.11", + "@swc/core-win32-ia32-msvc": "1.12.11", + "@swc/core-win32-x64-msvc": "1.12.11" + }, + "peerDependencies": { + "@swc/helpers": ">=0.5.17" + }, + "peerDependenciesMeta": { + "@swc/helpers": { + "optional": true + } + } + }, + "node_modules/@swc/core-darwin-arm64": { + "version": "1.12.11", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.12.11.tgz", + "integrity": "sha512-J19Jj9Y5x/N0loExH7W0OI9OwwoVyxutDdkyq1o/kgXyBqmmzV7Y/Q9QekI2Fm/qc5mNeAdP7aj4boY4AY/JPw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "darwin" + ], + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-darwin-x64": { + "version": "1.12.11", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.12.11.tgz", + "integrity": "sha512-PTuUQrfStQ6cjW+uprGO2lpQHy84/l0v+GqRqq8s/jdK55rFRjMfCeyf6FAR0l6saO5oNOQl+zWR1aNpj8pMQw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "darwin" + ], + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm-gnueabihf": { + "version": "1.12.11", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.12.11.tgz", + "integrity": "sha512-poxBq152HsupOtnZilenvHmxZ9a8SRj4LtfxUnkMDNOGrZR9oxbQNwEzNKfi3RXEcXz+P8c0Rai1ubBazXv8oQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-gnu": { + "version": "1.12.11", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.12.11.tgz", + "integrity": "sha512-y1HNamR/D0Hc8xIE910ysyLe269UYiGaQPoLjQS0phzWFfWdMj9bHM++oydVXZ4RSWycO7KyJ3uvw4NilvyMKQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-musl": { + "version": "1.12.11", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.12.11.tgz", + "integrity": "sha512-LlBxPh/32pyQsu2emMEOFRm7poEFLsw12Y1mPY7FWZiZeptomKSOSHRzKDz9EolMiV4qhK1caP1lvW4vminYgQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-gnu": { + "version": "1.12.11", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.12.11.tgz", + "integrity": "sha512-bOjiZB8O/1AzHkzjge1jqX62HGRIpOHqFUrGPfAln/NC6NR+Z2A78u3ixV7k5KesWZFhCV0YVGJL+qToL27myA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-musl": { + "version": "1.12.11", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.12.11.tgz", + "integrity": "sha512-4dzAtbT/m3/UjF045+33gLiHd8aSXJDoqof7gTtu4q0ZyAf7XJ3HHspz+/AvOJLVo4FHHdFcdXhmo/zi1nFn8A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-arm64-msvc": { + "version": "1.12.11", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.12.11.tgz", + "integrity": "sha512-h8HiwBZErKvCAmjW92JvQp0iOqm6bncU4ac5jxBGkRApabpUenNJcj3h2g5O6GL5K6T9/WhnXE5gyq/s1fhPQg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "win32" + ], + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-ia32-msvc": { + "version": "1.12.11", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.12.11.tgz", + "integrity": "sha512-1pwr325mXRNUhxTtXmx1IokV5SiRL+6iDvnt3FRXj+X5UvXXKtg2zeyftk+03u8v8v8WUr5I32hIypVJPTNxNg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "win32" + ], + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-x64-msvc": { + "version": "1.12.11", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.12.11.tgz", + "integrity": "sha512-5gggWo690Gvs7XiPxAmb5tHwzB9RTVXUV7AWoGb6bmyUd1OXYaebQF0HAOtade5jIoNhfQMQJ7QReRgt/d2jAA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "win32" + ], + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/counter": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", + "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "peer": true + }, + "node_modules/@swc/helpers": { + "version": "0.5.17", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.17.tgz", + "integrity": "sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "peer": true, + "dependencies": { + "tslib": "^2.8.0" + } + }, + "node_modules/@swc/types": { + "version": "0.1.23", + "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.23.tgz", + "integrity": "sha512-u1iIVZV9Q0jxY+yM2vw/hZGDNudsN85bBpTqzAQ9rzkxW9D+e3aEM4Han+ow518gSewkXgjmEK0BD79ZcNVgPw==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "peer": true, + "dependencies": { + "@swc/counter": "^0.1.3" + } }, "node_modules/@types/estree": { "version": "1.0.8", @@ -763,20 +1814,6 @@ "undici-types": "~7.8.0" } }, - "node_modules/@types/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-xevGOReSYGM7g/kUBZzPqCrR/KYAo+F0yiPc85WFTJa0MSLtyFTVTU6cJu/aV4mid7IffDIWqo69THF2o4JiEQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/strip-json-comments": { - "version": "0.0.30", - "resolved": "https://registry.npmjs.org/@types/strip-json-comments/-/strip-json-comments-0.0.30.tgz", - "integrity": "sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ==", - "dev": true, - "license": "MIT" - }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "8.36.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.36.0.tgz", @@ -1112,19 +2149,6 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/acorn-walk": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", - "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^8.11.0" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -1142,6 +2166,19 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, "node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -1158,31 +2195,17 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", "dev": true, - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } + "license": "MIT" }, "node_modules/api": { "resolved": "apps/api", "link": true }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true, - "license": "MIT" - }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -1360,19 +2383,6 @@ "dev": true, "license": "MIT" }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/bot": { "resolved": "apps/bot", "link": true @@ -1401,12 +2411,31 @@ "node": ">=8" } }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "node_modules/bundle-require": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/bundle-require/-/bundle-require-5.1.0.tgz", + "integrity": "sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "load-tsconfig": "^0.2.3" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "peerDependencies": { + "esbuild": ">=0.18" + } + }, + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } }, "node_modules/call-bind": { "version": "1.0.8", @@ -1485,44 +2514,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dev": true, - "license": "MIT", - "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" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chokidar/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/clone": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", @@ -1558,6 +2549,16 @@ "dev": true, "license": "MIT" }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -1565,13 +2566,23 @@ "dev": true, "license": "MIT" }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "node_modules/confbox": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz", + "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==", "dev": true, "license": "MIT" }, + "node_modules/consola": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz", + "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, "node_modules/cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", @@ -1701,16 +2712,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } - }, "node_modules/doctrine": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", @@ -1749,15 +2750,12 @@ "node": ">= 0.4" } }, - "node_modules/dynamic-dedupe": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/dynamic-dedupe/-/dynamic-dedupe-0.3.0.tgz", - "integrity": "sha512-ssuANeD+z97meYOqd50e04Ze5qp4bPqo8cCkI4TRjZkzAUgIDTrXV1R8QCdINpiI+hw14+rYazvTRdQrz0/rFQ==", + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", "dev": true, - "license": "MIT", - "dependencies": { - "xtend": "^4.0.0" - } + "license": "MIT" }, "node_modules/es-abstract": { "version": "1.24.0", @@ -1936,6 +2934,48 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/esbuild": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.6.tgz", + "integrity": "sha512-GVuzuUwtdsghE3ocJ9Bs8PNoF13HNQ5TXbEi2AhvVb8xU1Iwt9Fos9FEamfoee+u/TOsn7GUWc04lz46n2bbTg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.6", + "@esbuild/android-arm": "0.25.6", + "@esbuild/android-arm64": "0.25.6", + "@esbuild/android-x64": "0.25.6", + "@esbuild/darwin-arm64": "0.25.6", + "@esbuild/darwin-x64": "0.25.6", + "@esbuild/freebsd-arm64": "0.25.6", + "@esbuild/freebsd-x64": "0.25.6", + "@esbuild/linux-arm": "0.25.6", + "@esbuild/linux-arm64": "0.25.6", + "@esbuild/linux-ia32": "0.25.6", + "@esbuild/linux-loong64": "0.25.6", + "@esbuild/linux-mips64el": "0.25.6", + "@esbuild/linux-ppc64": "0.25.6", + "@esbuild/linux-riscv64": "0.25.6", + "@esbuild/linux-s390x": "0.25.6", + "@esbuild/linux-x64": "0.25.6", + "@esbuild/netbsd-arm64": "0.25.6", + "@esbuild/netbsd-x64": "0.25.6", + "@esbuild/openbsd-arm64": "0.25.6", + "@esbuild/openbsd-x64": "0.25.6", + "@esbuild/openharmony-arm64": "0.25.6", + "@esbuild/sunos-x64": "0.25.6", + "@esbuild/win32-arm64": "0.25.6", + "@esbuild/win32-ia32": "0.25.6", + "@esbuild/win32-x64": "0.25.6" + } + }, "node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -2303,6 +3343,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/fix-dts-default-cjs-exports": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fix-dts-default-cjs-exports/-/fix-dts-default-cjs-exports-1.0.1.tgz", + "integrity": "sha512-pVIECanWFC61Hzl2+oOCtoJ3F17kglZC/6N94eRWycFgBH35hHx0Li604ZIzhseh97mf2p0cv7vVrOZGoqhlEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "magic-string": "^0.30.17", + "mlly": "^1.7.4", + "rollup": "^4.34.8" + } + }, "node_modules/flat-cache": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", @@ -2340,12 +3392,22 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", "dev": true, - "license": "ISC" + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, "node_modules/fsevents": { "version": "2.3.3", @@ -2460,26 +3522,17 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", + "node_modules/get-tsconfig": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.1.tgz", + "integrity": "sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" + "resolve-pkg-maps": "^1.0.0" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } }, "node_modules/glob-parent": { @@ -2700,25 +3753,6 @@ "node": ">=0.8.19" } }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "dev": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true, - "license": "ISC" - }, "node_modules/internal-slot": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", @@ -2788,19 +3822,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "license": "MIT", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/is-boolean-object": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", @@ -2908,6 +3929,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/is-generator-function": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", @@ -3170,6 +4201,22 @@ "node": ">= 0.4" } }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, "node_modules/jiti": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz", @@ -3179,6 +4226,16 @@ "jiti": "lib/jiti-cli.mjs" } }, + "node_modules/joycon": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz", + "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -3272,6 +4329,36 @@ "node": ">= 0.8.0" } }, + "node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/load-tsconfig": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/load-tsconfig/-/load-tsconfig-0.2.5.tgz", + "integrity": "sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -3301,6 +4388,13 @@ "dev": true, "license": "MIT" }, + "node_modules/lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", + "dev": true, + "license": "MIT" + }, "node_modules/loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -3314,13 +4408,23 @@ "loose-envify": "cli.js" } }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", "dev": true, "license": "ISC" }, + "node_modules/magic-string": { + "version": "0.30.17", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, "node_modules/math-intrinsics": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", @@ -3368,27 +4472,27 @@ "node": "*" } }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" } }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "node_modules/mlly": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.7.4.tgz", + "integrity": "sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==", "dev": true, "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" + "dependencies": { + "acorn": "^8.14.0", + "pathe": "^2.0.1", + "pkg-types": "^1.3.0", + "ufo": "^1.5.4" } }, "node_modules/ms": { @@ -3397,6 +4501,18 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "license": "MIT" }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -3436,16 +4552,6 @@ } } }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -3554,16 +4660,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, "node_modules/openapi-types": { "version": "12.1.3", "resolved": "https://registry.npmjs.org/openapi-types/-/openapi-types-12.1.3.tgz", @@ -3648,6 +4744,13 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -3671,16 +4774,6 @@ "node": ">=8" } }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", @@ -3698,6 +4791,37 @@ "dev": true, "license": "MIT" }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", @@ -3711,6 +4835,28 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/pirates": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-types": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz", + "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "confbox": "^0.1.8", + "mlly": "^1.7.4", + "pathe": "^2.0.1" + } + }, "node_modules/possible-typed-array-names": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", @@ -3721,6 +4867,49 @@ "node": ">= 0.4" } }, + "node_modules/postcss-load-config": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz", + "integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "lilconfig": "^3.1.1" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "jiti": ">=1.21.0", + "postcss": ">=8.0.9", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + }, + "postcss": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -3859,19 +5048,6 @@ "dev": true, "license": "MIT" }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, "node_modules/reflect.getprototypeof": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", @@ -3944,6 +5120,16 @@ "node": ">=4" } }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, "node_modules/reusify": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", @@ -3955,18 +5141,44 @@ "node": ">=0.10.0" } }, - "node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", + "node_modules/rollup": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.44.2.tgz", + "integrity": "sha512-PVoapzTwSEcelaWGth3uR66u7ZRo6qhPHc0f2uRO9fX6XDVNrIiGYS0Pj9+R8yIIYSD/mCx2b16Ws9itljKSPg==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "glob": "^7.1.3" + "@types/estree": "1.0.8" }, "bin": { - "rimraf": "bin.js" + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.44.2", + "@rollup/rollup-android-arm64": "4.44.2", + "@rollup/rollup-darwin-arm64": "4.44.2", + "@rollup/rollup-darwin-x64": "4.44.2", + "@rollup/rollup-freebsd-arm64": "4.44.2", + "@rollup/rollup-freebsd-x64": "4.44.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.44.2", + "@rollup/rollup-linux-arm-musleabihf": "4.44.2", + "@rollup/rollup-linux-arm64-gnu": "4.44.2", + "@rollup/rollup-linux-arm64-musl": "4.44.2", + "@rollup/rollup-linux-loongarch64-gnu": "4.44.2", + "@rollup/rollup-linux-powerpc64le-gnu": "4.44.2", + "@rollup/rollup-linux-riscv64-gnu": "4.44.2", + "@rollup/rollup-linux-riscv64-musl": "4.44.2", + "@rollup/rollup-linux-s390x-gnu": "4.44.2", + "@rollup/rollup-linux-x64-gnu": "4.44.2", + "@rollup/rollup-linux-x64-musl": "4.44.2", + "@rollup/rollup-win32-arm64-msvc": "4.44.2", + "@rollup/rollup-win32-ia32-msvc": "4.44.2", + "@rollup/rollup-win32-x64-msvc": "4.44.2", + "fsevents": "~2.3.2" } }, "node_modules/run-parallel": { @@ -4206,25 +5418,17 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, - "license": "BSD-3-Clause", + "license": "ISC", "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/stop-iteration-iterator": { @@ -4241,6 +5445,52 @@ "node": ">= 0.4" } }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/string.prototype.matchall": { "version": "4.0.12", "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", @@ -4339,14 +5589,44 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "license": "MIT", "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/strip-json-comments": { @@ -4362,6 +5642,76 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/sucrase/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/sucrase/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "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" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sucrase/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -4388,6 +5738,81 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tinyexec": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", + "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyglobby": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", + "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.4.4", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", + "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -4430,128 +5855,12 @@ "typescript": ">=4.8.4" } }, - "node_modules/ts-node": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", - "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", "dev": true, - "license": "MIT", - "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" - }, - "bin": { - "ts-node": "dist/bin.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", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/ts-node-dev": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ts-node-dev/-/ts-node-dev-2.0.0.tgz", - "integrity": "sha512-ywMrhCfH6M75yftYvrvNarLEY+SUXtUvU8/0Z6llrHQVBx12GiFk5sStF8UdfE/yfzk9IAq7O5EEbTQsxlBI8w==", - "dev": true, - "license": "MIT", - "dependencies": { - "chokidar": "^3.5.1", - "dynamic-dedupe": "^0.3.0", - "minimist": "^1.2.6", - "mkdirp": "^1.0.4", - "resolve": "^1.0.0", - "rimraf": "^2.6.1", - "source-map-support": "^0.5.12", - "tree-kill": "^1.2.2", - "ts-node": "^10.4.0", - "tsconfig": "^7.0.0" - }, - "bin": { - "ts-node-dev": "lib/bin.js", - "tsnd": "lib/bin.js" - }, - "engines": { - "node": ">=0.8.0" - }, - "peerDependencies": { - "node-notifier": "*", - "typescript": "*" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/ts-node-dev/node_modules/resolve": { - "version": "1.22.10", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", - "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.16.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/tsconfig": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/tsconfig/-/tsconfig-7.0.0.tgz", - "integrity": "sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/strip-bom": "^3.0.0", - "@types/strip-json-comments": "0.0.30", - "strip-bom": "^3.0.0", - "strip-json-comments": "^2.0.0" - } - }, - "node_modules/tsconfig/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } + "license": "Apache-2.0" }, "node_modules/tslib": { "version": "2.8.1", @@ -4559,6 +5868,161 @@ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "license": "0BSD" }, + "node_modules/tsup": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/tsup/-/tsup-8.5.0.tgz", + "integrity": "sha512-VmBp77lWNQq6PfuMqCHD3xWl22vEoWsKajkF8t+yMBawlUS8JzEI+vOVMeuNZIuMML8qXRizFKi9oD5glKQVcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "bundle-require": "^5.1.0", + "cac": "^6.7.14", + "chokidar": "^4.0.3", + "consola": "^3.4.0", + "debug": "^4.4.0", + "esbuild": "^0.25.0", + "fix-dts-default-cjs-exports": "^1.0.0", + "joycon": "^3.1.1", + "picocolors": "^1.1.1", + "postcss-load-config": "^6.0.1", + "resolve-from": "^5.0.0", + "rollup": "^4.34.8", + "source-map": "0.8.0-beta.0", + "sucrase": "^3.35.0", + "tinyexec": "^0.3.2", + "tinyglobby": "^0.2.11", + "tree-kill": "^1.2.2" + }, + "bin": { + "tsup": "dist/cli-default.js", + "tsup-node": "dist/cli-node.js" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@microsoft/api-extractor": "^7.36.0", + "@swc/core": "^1", + "postcss": "^8.4.12", + "typescript": ">=4.5.0" + }, + "peerDependenciesMeta": { + "@microsoft/api-extractor": { + "optional": true + }, + "@swc/core": { + "optional": true + }, + "postcss": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/tsup/node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/tsup/node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/tsup/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/tsup/node_modules/source-map": { + "version": "0.8.0-beta.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", + "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "whatwg-url": "^7.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/tsup/node_modules/tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/tsup/node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/tsup/node_modules/whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "node_modules/tsx": { + "version": "4.20.3", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.20.3.tgz", + "integrity": "sha512-qjbnuR9Tr+FJOMBqJCW5ehvIo/buZq7vH7qD7JziU98h6l3qGy0a/yPFjwO+y0/T7GFpNgNAvEcPPVfyT8rrPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "~0.25.0", + "get-tsconfig": "^4.7.5" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + } + }, "node_modules/turbo": { "version": "2.5.4", "resolved": "https://registry.npmjs.org/turbo/-/turbo-2.5.4.tgz", @@ -4788,6 +6252,13 @@ "typescript": ">=4.8.4 <5.9.0" } }, + "node_modules/ufo": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.1.tgz", + "integrity": "sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==", + "dev": true, + "license": "MIT" + }, "node_modules/unbox-primitive": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", @@ -4824,13 +6295,6 @@ "punycode": "^2.1.0" } }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true, - "license": "MIT" - }, "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", @@ -4962,21 +6426,68 @@ "node": ">=0.10.0" } }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, - "license": "ISC" + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "license": "MIT", "engines": { - "node": ">=0.4" + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, "node_modules/yaml": { @@ -4991,16 +6502,6 @@ "node": ">= 14.6" } }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", @@ -5072,12 +6573,13 @@ }, "devDependencies": { "@repo/typescript-config": "*", - "typescript": "^5.0.0" + "tsup": "^8.3.5", + "typescript": "^5.8.3" } }, "packages/database": { "name": "@repo/db", - "version": "0.0.0", + "version": "1.0.0", "dependencies": { "@prisma/client": "^6.11.1", "@repo/exceptions": "*", @@ -5085,8 +6587,12 @@ "zod-prisma-types": "^3.2.4" }, "devDependencies": { + "@repo/eslint-config": "*", + "@repo/typescript-config": "*", "@types/node": "^24.0.10", - "prisma": "^6.11.1" + "prisma": "^6.11.1", + "tsup": "^8.3.5", + "typescript": "^5.8.3" } }, "packages/eslint-config": { @@ -5127,11 +6633,27 @@ "url": "https://github.com/sponsors/colinhacks" } }, + "packages/file-storage": { + "name": "@repo/file-storage", + "version": "0.0.0", + "extraneous": true, + "dependencies": { + "@repo/exceptions": "*", + "neverthrow": "^8.2.0", + "zod": "^4.0.5" + }, + "devDependencies": { + "@repo/typescript-config": "*", + "@types/node": "^20.0.0", + "typescript": "^5.0.0" + } + }, "packages/logger": { "name": "@repo/logger", "devDependencies": { "@repo/typescript-config": "*", - "typescript": "latest" + "tsup": "^8.3.5", + "typescript": "^5.8.3" } }, "packages/services": { @@ -5140,13 +6662,13 @@ "dependencies": { "@repo/db": "*", "@repo/exceptions": "*", - "@repo/utils": "*", "neverthrow": "^8.2.0", - "zod": "^4.0.2" + "zod": "^3.25.76" }, "devDependencies": { "@repo/typescript-config": "*", - "typescript": "^5.0.0" + "tsup": "^8.3.5", + "typescript": "^5.8.3" } }, "packages/services/node_modules/zod": { @@ -5160,11 +6682,11 @@ }, "packages/typescript-config": { "name": "@repo/typescript-config", - "version": "0.0.0", - "license": "MIT" + "version": "0.0.0" }, "packages/utils": { "name": "@repo/utils", + "extraneous": true, "devDependencies": { "@repo/exceptions": "*", "@repo/typescript-config": "*", diff --git a/package.json b/package.json index f9168b3..b8915d8 100644 --- a/package.json +++ b/package.json @@ -4,14 +4,18 @@ "scripts": { "build": "turbo run build", "dev": "turbo run dev", + "start": "turbo run start", + "start:api": "turbo run start --filter=api", + "start:bot": "turbo run start --filter=bot", "lint": "turbo run lint", - "format": "prettier --write \"**/*.{ts,tsx,md}\"", - "check-types": "turbo run check-types" + "check-types": "turbo run check-types", + "clean": "turbo run clean", + "format": "prettier --write \"**/*.{ts,tsx,md}\"" }, "devDependencies": { "prettier": "^3.6.2", "turbo": "^2.5.4", - "typescript": "5.8.3" + "typescript": "^5.8.3" }, "engines": { "node": ">=18" diff --git a/packages/config/package.json b/packages/config/package.json index ca3201f..762a4f1 100644 --- a/packages/config/package.json +++ b/packages/config/package.json @@ -1,16 +1,32 @@ { "name": "@repo/config", "version": "0.0.0", - "main": "./src/index.ts", - "types": "./src/index.ts", + "type": "module", + "private": true, + "files": [ + "dist" + ], + "main": "./dist/index.js", + "module": "./dist/index.js", + "types": "./dist/index.d.ts", "exports": { - ".": "./src/index.ts" + ".": { + "import": { + "types": "./dist/index.d.ts", + "default": "./dist/index.js" + }, + "require": { + "types": "./dist/index.d.cts", + "default": "./dist/index.cjs" + } + } }, "scripts": { - "dev": "tsc --watch", - "build": "tsc", - "clean": "rm -rf dist", - "typecheck": "tsc --noEmit" + "build": "tsup", + "dev": "tsup --watch", + "lint": "eslint src/", + "check-types": "tsc --noEmit", + "clean": "rm -rf dist" }, "dependencies": { "znv": "^0.5.0", @@ -18,6 +34,7 @@ }, "devDependencies": { "@repo/typescript-config": "*", - "typescript": "^5.0.0" + "tsup": "^8.3.5", + "typescript": "^5.8.3" } } diff --git a/packages/config/src/create-config.ts b/packages/config/src/create-config.ts index d266f09..9c1b300 100644 --- a/packages/config/src/create-config.ts +++ b/packages/config/src/create-config.ts @@ -1,11 +1,11 @@ -import { parseEnv } from 'znv'; -import { z } from 'zod'; -import type { ConfigSchema, ConfigOptions, InferConfig } from './types'; +import { parseEnv } from "znv"; +import { z } from "zod"; +import type { ConfigSchema, ConfigOptions, InferConfig } from "./types"; export const createConfig = ( options: ConfigOptions, ): InferConfig => { - const { schema, env = process.env, prefix = '' } = options; + const { schema, env = process.env, prefix = "" } = options; // Add prefix to schema keys if provided const prefixedSchema = prefix @@ -14,7 +14,7 @@ export const createConfig = ( acc[`${prefix}${key}`] = zodSchema; return acc; }, - {} as Record + {} as Record, ) : schema; diff --git a/packages/config/src/index.ts b/packages/config/src/index.ts index 75a4347..1e3dd75 100644 --- a/packages/config/src/index.ts +++ b/packages/config/src/index.ts @@ -1,2 +1,2 @@ -export * from './create-config'; -export * from './types'; +export * from "./create-config"; +export * from "./types"; diff --git a/packages/config/src/types.ts b/packages/config/src/types.ts index e609dd4..c8434ab 100644 --- a/packages/config/src/types.ts +++ b/packages/config/src/types.ts @@ -1,4 +1,4 @@ -import { z } from 'zod'; +import { z } from "zod"; export type ConfigSchema = Record; diff --git a/packages/config/tsconfig.json b/packages/config/tsconfig.json index 86c70e4..1104643 100644 --- a/packages/config/tsconfig.json +++ b/packages/config/tsconfig.json @@ -1,9 +1,9 @@ { - "extends": "@repo/typescript-config/base.json", + "extends": "@repo/typescript-config/library.json", "compilerOptions": { "outDir": "dist", - "rootDir": "src" + "rootDir": "." }, - "include": ["src/**/*"], - "exclude": ["dist", "node_modules"] -} \ No newline at end of file + "include": ["src/**/*", "tsup.config.ts"], + "exclude": ["node_modules", "dist"] +} diff --git a/packages/config/tsup.config.ts b/packages/config/tsup.config.ts new file mode 100644 index 0000000..48ac0ac --- /dev/null +++ b/packages/config/tsup.config.ts @@ -0,0 +1,13 @@ +import { defineConfig } from "tsup"; + +export default defineConfig({ + entry: ["src/index.ts"], + format: ["cjs", "esm"], + dts: true, + splitting: false, + sourcemap: true, + clean: true, + treeshake: true, + minify: false, + target: "es2022", +}); diff --git a/packages/database/.eslintrc.js b/packages/database/.eslintrc.js new file mode 100644 index 0000000..9b42ae7 --- /dev/null +++ b/packages/database/.eslintrc.js @@ -0,0 +1,16 @@ +/** @type {import("eslint").Linter.Config} */ +module.exports = { + extends: ['@repo/eslint-config/library.js'], + parser: '@typescript-eslint/parser', + parserOptions: { + project: true, + }, + rules: { + 'turbo/no-undeclared-env-vars': [ + 'error', + { + allowList: ['NODE_ENV'], + }, + ], + }, +}; diff --git a/packages/database/generated/zod/index.ts b/packages/database/generated/zod/index.ts index d82a66e..1771dcd 100644 --- a/packages/database/generated/zod/index.ts +++ b/packages/database/generated/zod/index.ts @@ -87,6 +87,10 @@ export const PlanScalarFieldEnumSchema = z.enum(['id','code','name','description export const SubscriptionScalarFieldEnumSchema = z.enum(['id','telegramUserId','planId','startedAt','expiresAt','canceledAt','createdAt','updatedAt']); +export const FileScalarFieldEnumSchema = z.enum(['id','filename','originalName','mimeType','size','path','createdAt','updatedAt']); + +export const FileLinkScalarFieldEnumSchema = z.enum(['id','fileId','relationId','createdAt','updatedAt']); + export const SortOrderSchema = z.enum(['asc','desc']); export const JsonNullValueInputSchema = z.enum(['JsonNull',]).transform((value) => (value === 'JsonNull' ? Prisma.JsonNull : value)); @@ -190,3 +194,34 @@ export const SubscriptionSchema = z.object({ }) export type Subscription = z.infer + +///////////////////////////////////////// +// FILE SCHEMA +///////////////////////////////////////// + +export const FileSchema = z.object({ + id: z.string().uuid(), + filename: z.string(), + originalName: z.string(), + mimeType: z.string(), + size: z.number().int(), + path: z.string(), + createdAt: z.coerce.date(), + updatedAt: z.coerce.date(), +}) + +export type File = z.infer + +///////////////////////////////////////// +// FILE LINK SCHEMA +///////////////////////////////////////// + +export const FileLinkSchema = z.object({ + id: z.string().uuid(), + fileId: z.string(), + relationId: z.string(), + createdAt: z.coerce.date(), + updatedAt: z.coerce.date(), +}) + +export type FileLink = z.infer diff --git a/packages/database/package.json b/packages/database/package.json index 084ba12..dd6f39e 100644 --- a/packages/database/package.json +++ b/packages/database/package.json @@ -1,7 +1,30 @@ { "name": "@repo/db", - "version": "0.0.0", + "version": "1.0.0", + "type": "module", + "private": true, + "files": [ + "dist" + ], + "main": "./dist/index.cjs", + "types": "./src/index.ts", + "exports": { + ".": { + "import": { + "types": "./src/index.ts", + "default": "./dist/index.cjs" + }, + "require": { + "types": "./src/index.ts", + "default": "./dist/index.cjs" + } + } + }, "scripts": { + "build": "tsup", + "dev": "tsup --watch", + "check-types": "tsc --noEmit", + "clean": "rm -rf dist", "db:generate": "prisma generate", "db:migrate": "prisma migrate dev --skip-generate", "db:deploy": "prisma migrate deploy", @@ -10,14 +33,14 @@ "dependencies": { "@prisma/client": "^6.11.1", "@repo/exceptions": "*", - "prisma-json-types-generator": "^3.5.1", - "zod-prisma-types": "^3.2.4" + "prisma-json-types-generator": "^3.5.1" }, "devDependencies": { + "@repo/eslint-config": "*", + "@repo/typescript-config": "*", "@types/node": "^24.0.10", - "prisma": "^6.11.1" - }, - "exports": { - ".": "./src/index.ts" + "prisma": "^6.11.1", + "tsup": "^8.3.5", + "typescript": "^5.8.3" } } diff --git a/packages/database/prisma/schema.prisma b/packages/database/prisma/schema.prisma index db7021c..0811818 100644 --- a/packages/database/prisma/schema.prisma +++ b/packages/database/prisma/schema.prisma @@ -48,7 +48,7 @@ model TelegramUser { createdAt DateTime @default(now()) updatedAt DateTime @updatedAt - payments Payment[] + payments Payment[] subscription Subscription? } @@ -56,7 +56,7 @@ model Payment { id String @id @default(cuid()) telegramUserId String amount Decimal @db.Decimal(10, 2) - currency String + currency String status PaymentStatus @default(PENDING) provider String providerId String? @@ -78,10 +78,10 @@ model Plan { code String @unique() name String description String? - durationDays Int + durationDays Int dailyGenerations Int price Int - currency String + currency String subscriptions Subscription[] @@ -89,20 +89,44 @@ model Plan { } model Subscription { - id String @id @default(uuid()) - telegramUserId String @unique - planId String + id String @id @default(uuid()) + telegramUserId String @unique + planId String - startedAt DateTime @default(now()) - expiresAt DateTime - canceledAt DateTime? + startedAt DateTime @default(now()) + expiresAt DateTime + canceledAt DateTime? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt - plan Plan @relation(fields: [planId], references: [id], onDelete: Cascade) + plan Plan @relation(fields: [planId], references: [id], onDelete: Cascade) telegramUser TelegramUser @relation(fields: [telegramUserId], references: [id], onDelete: Cascade) @@index([telegramUserId]) @@index([planId]) } + +model File { + id String @id @default(uuid()) + filename String + originalName String + mimeType String + size Int + path String + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + + links FileLink[] +} + +model FileLink { + id String @id @default(uuid()) + fileId String + relationId String + + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + + file File @relation(fields: [fileId], references: [id], onDelete: Cascade) +} diff --git a/packages/database/src/client.ts b/packages/database/src/client.ts index a67e6e5..40924d0 100644 --- a/packages/database/src/client.ts +++ b/packages/database/src/client.ts @@ -1,11 +1,11 @@ -import { Prisma, PrismaClient as PrismaClientBase } from '../generated/prisma'; +import { Prisma, PrismaClient as PrismaClientBase } from "../generated/prisma"; export const prisma = new PrismaClientBase().$extends({ model: { $allModels: { async exists( this: T, - where?: Prisma.Args['where'] + where?: Prisma.Args["where"], ): Promise { const context = Prisma.getExtensionContext(this); const result = await (context as any).findFirst({ where }); @@ -18,5 +18,5 @@ export const prisma = new PrismaClientBase().$extends({ export type PrismaClient = typeof prisma; export type PrismaClientArg = - | Parameters[0]>[0] + | Parameters[0]>[0] | PrismaClient; diff --git a/packages/database/src/index.ts b/packages/database/src/index.ts index 20c1a4a..14acea7 100644 --- a/packages/database/src/index.ts +++ b/packages/database/src/index.ts @@ -1,7 +1,2 @@ export { prisma, type PrismaClientArg, type PrismaClient } from './client'; export * from '../generated/prisma'; -export { - PaymentSchema, - TelegramUserSchema, - TelegramSessionSchema, -} from '../generated/zod'; diff --git a/packages/database/tsconfig.json b/packages/database/tsconfig.json new file mode 100644 index 0000000..8e277dd --- /dev/null +++ b/packages/database/tsconfig.json @@ -0,0 +1,16 @@ +{ + "extends": "@repo/typescript-config/library.json", + "compilerOptions": { + "outDir": "dist", + "rootDir": ".", + "skipLibCheck": true, + "allowJs": false, + "noImplicitAny": false, + "strict": false, + "noUnusedLocals": false, + "noUnusedParameters": false, + "exactOptionalPropertyTypes": false + }, + "include": ["src/**/*", "tsup.config.ts"], + "exclude": ["node_modules", "dist", "generated/**/*"] +} diff --git a/packages/database/tsup.config.ts b/packages/database/tsup.config.ts new file mode 100644 index 0000000..da1b45c --- /dev/null +++ b/packages/database/tsup.config.ts @@ -0,0 +1,16 @@ +import { defineConfig } from "tsup"; + +export default defineConfig({ + entry: ["src/index.ts"], + format: ["cjs"], + dts: false, + splitting: false, + sourcemap: true, + clean: true, + external: ["@prisma/client"], + treeshake: false, + minify: false, + target: "node18", + platform: "node", + bundle: true, +}); diff --git a/packages/exceptions/src/constructors.ts b/packages/exceptions/src/constructors.ts index c0dc24d..23c63de 100644 --- a/packages/exceptions/src/constructors.ts +++ b/packages/exceptions/src/constructors.ts @@ -1,10 +1,17 @@ -import { AppError, DatabaseError, ErrorCode, ValidationError } from './types'; +import { ZodError } from "zod"; +import { + AppError, + DatabaseError, + ErrorCode, + ValidationError, + ZodValidationError, +} from "./types"; export const createAppError = ( code: T, message: string, details?: Record, - cause?: Error + cause?: Error, ): AppError => ({ code, message, @@ -15,7 +22,7 @@ export const createAppError = ( export const createValidationError = ( field: string, value: unknown, - message: string + message: string, ): ValidationError => ({ code: ErrorCode.VALIDATION_ERROR, message, @@ -25,11 +32,34 @@ export const createValidationError = ( export const databaseError = ( operation: string, - cause?: Error + cause?: Error, ): DatabaseError => createAppError( ErrorCode.DATABASE_ERROR, `Database error during ${operation}`, undefined, - cause + cause, ); + +export const createZodValidationError = ( + zodError: ZodError, + context?: string, +): ZodValidationError => { + const issues = zodError.issues.map((issue) => ({ + path: issue.path as ReadonlyArray, + message: issue.message, + code: issue.code, + })); + + const contextMessage = context ? ` in ${context}` : ""; + const message = `Validation failed${contextMessage}: ${zodError.issues + .map((issue) => `${issue.path.join(".")} - ${issue.message}`) + .join(", ")}`; + + return { + code: ErrorCode.ZOD_VALIDATION_ERROR, + message, + zodError, + issues, + }; +}; diff --git a/packages/exceptions/src/index.ts b/packages/exceptions/src/index.ts index 16dd391..3c1ed9e 100644 --- a/packages/exceptions/src/index.ts +++ b/packages/exceptions/src/index.ts @@ -1,3 +1,3 @@ -export * from './types'; -export * from './constructors'; -export * from './utils'; +export * from "./types"; +export * from "./constructors"; +export * from "./utils"; diff --git a/packages/exceptions/src/types.ts b/packages/exceptions/src/types.ts index 465b724..3891b1d 100644 --- a/packages/exceptions/src/types.ts +++ b/packages/exceptions/src/types.ts @@ -1,8 +1,11 @@ +import { ZodError } from "zod"; + export enum ErrorCode { // System errors - DATABASE_ERROR = 'DATABASE_ERROR', - VALIDATION_ERROR = 'VALIDATION_ERROR', - UNKNOWN_ERROR = 'UNKNOWN_ERROR', + DATABASE_ERROR = "DATABASE_ERROR", + VALIDATION_ERROR = "VALIDATION_ERROR", + UNKNOWN_ERROR = "UNKNOWN_ERROR", + ZOD_VALIDATION_ERROR = "ZOD_VALIDATION_ERROR", } export type AppError = { @@ -19,3 +22,14 @@ export type ValidationError = AppError & { }; export type DatabaseError = AppError; + +export interface ZodValidationError + extends AppError { + readonly code: ErrorCode.ZOD_VALIDATION_ERROR; + readonly zodError: ZodError; + readonly issues: ReadonlyArray<{ + readonly path: ReadonlyArray; + readonly message: string; + readonly code: string; + }>; +} diff --git a/packages/exceptions/src/utils/database.ts b/packages/exceptions/src/utils/database.ts index c70d2a4..e79ed1f 100644 --- a/packages/exceptions/src/utils/database.ts +++ b/packages/exceptions/src/utils/database.ts @@ -1,5 +1,5 @@ -import { ResultAsync, err, ok } from 'neverthrow'; -import { AppError } from '../types'; +import { ResultAsync, err, ok } from "neverthrow"; +import { AppError } from "../types"; /** * Wraps a database operation in a Result type to handle errors gracefully @@ -9,7 +9,7 @@ import { AppError } from '../types'; */ export const wrapDbOperation = >( operation: () => Promise, - errorFactory: (error: unknown) => E + errorFactory: (error: unknown) => E, ): ResultAsync => { return ResultAsync.fromPromise(operation(), errorFactory); }; @@ -17,9 +17,9 @@ export const wrapDbOperation = >( export const wrapDbOperationWithNull = >( operation: () => Promise, notFoundError: E, - dbErrorFactory: (error: unknown) => E + dbErrorFactory: (error: unknown) => E, ): ResultAsync => { return ResultAsync.fromPromise(operation(), (error) => - dbErrorFactory(error) + dbErrorFactory(error), ).andThen((result) => (result === null ? err(notFoundError) : ok(result))); }; diff --git a/packages/exceptions/src/utils/index.ts b/packages/exceptions/src/utils/index.ts index 6ce4641..c30cd66 100644 --- a/packages/exceptions/src/utils/index.ts +++ b/packages/exceptions/src/utils/index.ts @@ -1,2 +1 @@ -export * from './database'; -export * from './validation'; +export * from "./database"; diff --git a/packages/exceptions/src/utils/validation.ts b/packages/exceptions/src/utils/validation.ts deleted file mode 100644 index ec68b7f..0000000 --- a/packages/exceptions/src/utils/validation.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { err, ok, Result } from 'neverthrow'; -import { output, ZodError, ZodObject } from 'zod'; - -export const safeParse = - (schema: T) => - (data: D): Result, ZodError>> => { - const parseResult = schema.safeParse(data); - - return parseResult.success ? ok(parseResult.data) : err(parseResult.error); - }; diff --git a/packages/logger/package.json b/packages/logger/package.json index 90cce42..6abb75a 100644 --- a/packages/logger/package.json +++ b/packages/logger/package.json @@ -1,14 +1,35 @@ { "name": "@repo/logger", - "scripts": { - "dev": "tsc --watch", - "build": "tsc" - }, + "type": "module", + "private": true, + "files": [ + "dist" + ], + "main": "./dist/index.js", + "module": "./dist/index.js", + "types": "./dist/index.d.ts", "exports": { - ".": "./src/index.ts" + ".": { + "import": { + "types": "./dist/index.d.ts", + "default": "./dist/index.js" + }, + "require": { + "types": "./dist/index.d.cts", + "default": "./dist/index.cjs" + } + } + }, + "scripts": { + "build": "tsup", + "dev": "tsup --watch", + "lint": "eslint src/", + "check-types": "tsc --noEmit", + "clean": "rm -rf dist" }, "devDependencies": { "@repo/typescript-config": "*", - "typescript": "latest" + "typescript": "^5.8.3", + "tsup": "^8.3.5" } } diff --git a/packages/logger/src/index.ts b/packages/logger/src/index.ts index 488d888..41c7bf2 100644 --- a/packages/logger/src/index.ts +++ b/packages/logger/src/index.ts @@ -1 +1 @@ -export * from './logger' +export * from "./logger"; diff --git a/packages/logger/tsconfig.json b/packages/logger/tsconfig.json index 68384b4..9590c6e 100644 --- a/packages/logger/tsconfig.json +++ b/packages/logger/tsconfig.json @@ -1,9 +1,9 @@ { - "extends": "@repo/typescript-config/base.json", + "extends": "@repo/typescript-config/library.json", "compilerOptions": { "outDir": "dist", - "rootDir": "src" + "rootDir": "." }, - "include": ["src"], + "include": ["src/**/*", "tsup.config.ts"], "exclude": ["node_modules", "dist"] } \ No newline at end of file diff --git a/packages/logger/tsup.config.ts b/packages/logger/tsup.config.ts new file mode 100644 index 0000000..48ac0ac --- /dev/null +++ b/packages/logger/tsup.config.ts @@ -0,0 +1,13 @@ +import { defineConfig } from "tsup"; + +export default defineConfig({ + entry: ["src/index.ts"], + format: ["cjs", "esm"], + dts: true, + splitting: false, + sourcemap: true, + clean: true, + treeshake: true, + minify: false, + target: "es2022", +}); diff --git a/packages/services/package.json b/packages/services/package.json index 1185738..d836623 100644 --- a/packages/services/package.json +++ b/packages/services/package.json @@ -1,20 +1,39 @@ { "name": "@repo/services", "version": "0.0.0", - "main": "./src/index.ts", + "type": "module", + "private": true, + "files": ["dist"], + "main": "./dist/index.js", + "module": "./dist/index.js", "types": "./src/index.ts", "exports": { - ".": "./src/index.ts" + ".": { + "import": { + "types": "./src/index.ts", + "default": "./dist/index.js" + }, + "require": { + "types": "./src/index.ts", + "default": "./dist/index.cjs" + } + } + }, + "scripts": { + "build": "tsup", + "dev": "tsup --watch", + "check-types": "tsc --noEmit", + "clean": "rm -rf dist" }, "dependencies": { "@repo/db": "*", "@repo/exceptions": "*", - "@repo/utils": "*", "neverthrow": "^8.2.0", - "zod": "^4.0.2" + "zod": "^3.25.76" }, "devDependencies": { "@repo/typescript-config": "*", - "typescript": "^5.0.0" + "typescript": "^5.8.3", + "tsup": "^8.3.5" } } diff --git a/packages/services/src/files/errors.ts b/packages/services/src/files/errors.ts new file mode 100644 index 0000000..c258f65 --- /dev/null +++ b/packages/services/src/files/errors.ts @@ -0,0 +1,61 @@ +import { AppError, createAppError } from "@repo/exceptions"; + +export enum FileStorageErrorCode { + FILE_NOT_FOUND = "FILE_NOT_FOUND", + FILE_ALREADY_EXISTS = "FILE_ALREADY_EXISTS", + INVALID_FILE_PATH = "INVALID_FILE_PATH", + STORAGE_OPERATION_FAILED = "STORAGE_OPERATION_FAILED", + DIRECTORY_CREATION_FAILED = "DIRECTORY_CREATION_FAILED", + INSUFFICIENT_PERMISSIONS = "INSUFFICIENT_PERMISSIONS", +} + +export type FileStorageError = AppError; + +export const fileNotFound = (fileName: string): FileStorageError => + createAppError( + FileStorageErrorCode.FILE_NOT_FOUND, + `File with name ${fileName} not found`, + ); + +export const fileAlreadyExists = (fileName: string): FileStorageError => + createAppError( + FileStorageErrorCode.FILE_ALREADY_EXISTS, + `File ${fileName} already exists`, + ); + +export const invalidFilePath = (path: string): FileStorageError => + createAppError( + FileStorageErrorCode.INVALID_FILE_PATH, + `Invalid file path: ${path}`, + ); + +export const storageOperationFailed = ( + operation: string, + cause?: Error, +): FileStorageError => + createAppError( + FileStorageErrorCode.STORAGE_OPERATION_FAILED, + `Storage operation '${operation}' failed`, + undefined, + cause, + ); + +export const directoryCreationFailed = ( + path: string, + cause?: Error, +): FileStorageError => + createAppError( + FileStorageErrorCode.DIRECTORY_CREATION_FAILED, + `Failed to create directory: ${path}`, + undefined, + cause, + ); + +export const insufficientPermissions = ( + operation: string, + path: string, +): FileStorageError => + createAppError( + FileStorageErrorCode.INSUFFICIENT_PERMISSIONS, + `Insufficient permissions for ${operation} at ${path}`, + ); diff --git a/packages/services/src/files/factory.ts b/packages/services/src/files/factory.ts new file mode 100644 index 0000000..a110876 --- /dev/null +++ b/packages/services/src/files/factory.ts @@ -0,0 +1,49 @@ +import { err, ok } from "neverthrow"; +import { createZodValidationError } from "@repo/exceptions"; +import { FileService } from "./services/file-service"; +import { FileLinkService } from "./services/file-link-service"; +import { + CreateFileLinkInput, + FileServiceConfig, + FileServiceConfigSchema, +} from "./types"; +import { PrismaClient } from "@repo/db"; + +const validateConfig = (data: FileServiceConfig) => { + const parseResult = FileServiceConfigSchema.safeParse(data); + return parseResult.success + ? ok(parseResult.data) + : err(createZodValidationError(parseResult.error)); +}; + +const createFileService = (config: FileServiceConfig) => + validateConfig(config).map((validatedConfig) => ({ + uploadFile: (file: Buffer, options: any) => + FileService.uploadFile(validatedConfig, file, options), + downloadFile: (fileName: string) => + FileService.downloadFile(validatedConfig, fileName), + deleteFile: (fileName: string) => + FileService.deleteFile(validatedConfig, fileName), + getFileMetadata: (fileName: string) => + FileService.getFileMetadata(validatedConfig, fileName), + fileExists: (fileName: string) => + FileService.fileExists(validatedConfig, fileName), + })); + +const createFileLinkService = (client: PrismaClient) => ({ + linkFileToRelation: (input: CreateFileLinkInput) => + FileLinkService.linkFileToRelation(client, input), + getFilesByRelationId: (relationId: string) => + FileLinkService.getFilesByRelationId(client, relationId), + unlinkFileFromRelation: (fileId: string, relationId: string) => + FileLinkService.unlinkFileFromRelation(client, fileId, relationId), + unlinkAllFilesFromRelation: (relationId: string) => + FileLinkService.unlinkAllFilesFromRelation(client, relationId), + getLinkedRelations: (fileId: string) => + FileLinkService.getLinkedRelations(client, fileId), +}); + +export const StorageFactory = { + createFileService, + createFileLinkService, +}; diff --git a/packages/services/src/files/fs-utils.ts b/packages/services/src/files/fs-utils.ts new file mode 100644 index 0000000..3a2645e --- /dev/null +++ b/packages/services/src/files/fs-utils.ts @@ -0,0 +1,129 @@ +import { promises as fs, Stats } from "fs"; +import { extname, basename } from "path"; +import { randomUUID } from "crypto"; +import { ResultAsync, ok, err, Result } from "neverthrow"; +import type { FileUploadOptions } from "./types"; +import { + FileStorageError, + fileNotFound, + storageOperationFailed, + directoryCreationFailed, + insufficientPermissions, +} from "./errors"; + +const handleFileSystemError = ( + error: unknown, + operation: string, + fileName: string, +): FileStorageError => { + const nodeError = error as NodeJS.ErrnoException; + + switch (nodeError.code) { + case "ENOENT": + return fileNotFound(fileName); + case "EACCES": + case "EPERM": + return insufficientPermissions(operation, fileName); + default: + return storageOperationFailed(operation, nodeError); + } +}; + +export const validateUpload = ( + file: Buffer, + options: FileUploadOptions, + maxFileSize?: number, + allowedExtensions?: string[], +): Result => { + if (maxFileSize && file.length > maxFileSize) { + return err( + storageOperationFailed( + `File size ${file.length} exceeds maximum allowed size ${maxFileSize}`, + ), + ); + } + + if (allowedExtensions) { + const ext = extname(options.originalName).toLowerCase(); + if (!allowedExtensions.includes(ext)) { + return err( + storageOperationFailed(`File extension ${ext} is not allowed`), + ); + } + } + + return ok(undefined); +}; + +export const generateFileName = ( + originalName: string, + customGenerator?: (originalName: string) => string, +): string => + customGenerator + ? customGenerator(originalName) + : (() => { + const ext = extname(originalName); + const name = basename(originalName, ext); + const uuid = randomUUID(); + return `${name}-${uuid}${ext}`; + })(); + +export const ensureDirectoryExists = ( + dirPath: string, + createDirectories: boolean, +): ResultAsync => + !createDirectories + ? ResultAsync.fromPromise(Promise.resolve(), () => + directoryCreationFailed("Directory creation is disabled"), + ) + : ResultAsync.fromPromise(fs.mkdir(dirPath, { recursive: true }), (error) => + directoryCreationFailed(dirPath, error as Error), + ).andThen(() => ok(undefined)); + +export const writeFile = ( + filePath: string, + file: Buffer, +): ResultAsync => + ResultAsync.fromPromise(fs.writeFile(filePath, file), (error) => + handleFileSystemError(error, "write", filePath), + ); + +export const readFile = ( + filePath: string, +): ResultAsync => + ResultAsync.fromPromise(fs.readFile(filePath), (error) => + handleFileSystemError(error, "read", filePath), + ); + +export const deleteFile = ( + filePath: string, +): ResultAsync => + ResultAsync.fromPromise(fs.unlink(filePath), (error) => + handleFileSystemError(error, "delete", filePath), + ); + +export const checkFileExists = ( + filePath: string, +): ResultAsync => + ResultAsync.fromPromise( + fs.access(filePath).then(() => true), + () => false, + ).orElse(() => ok(false)); + +export const getFileStats = ( + filePath: string, +): ResultAsync => + ResultAsync.fromPromise(fs.stat(filePath), (error) => + handleFileSystemError(error, "stat", filePath), + ); + +export const FsUtils = { + validateUpload, + generateFileName, + ensureDirectoryExists, + writeFile, + readFile, + deleteFile, + checkFileExists, + getFileStats, +}; diff --git a/packages/services/src/files/index.ts b/packages/services/src/files/index.ts new file mode 100644 index 0000000..fcf4427 --- /dev/null +++ b/packages/services/src/files/index.ts @@ -0,0 +1,2 @@ +export * from "./types"; +export * from "./factory"; diff --git a/packages/services/src/files/repositories/file-link-repository.ts b/packages/services/src/files/repositories/file-link-repository.ts new file mode 100644 index 0000000..7a5a9d8 --- /dev/null +++ b/packages/services/src/files/repositories/file-link-repository.ts @@ -0,0 +1,70 @@ +import { ResultAsync, ok } from "neverthrow"; +import { PrismaClientArg, Prisma, FileLink, File } from "@repo/db"; +import { FileStorageError, storageOperationFailed } from "../errors"; +import { CreateFileLinkInput } from "../types"; + +const create = ( + client: PrismaClientArg, + data: CreateFileLinkInput, +): ResultAsync => { + const linkData: Prisma.FileLinkCreateInput = { + relationId: data.relationId, + file: { + connect: { id: data.fileId }, + }, + }; + + return ResultAsync.fromPromise( + client.fileLink.create({ data: linkData }), + (error) => storageOperationFailed("createFileLink", error as Error), + ); +}; + +const findByRelationId = ( + client: PrismaClientArg, + relationId: string, +): ResultAsync<(FileLink & { file: File })[], FileStorageError> => + ResultAsync.fromPromise( + client.fileLink.findMany({ + where: { relationId }, + include: { file: true }, + orderBy: { createdAt: "desc" }, + }), + (error) => storageOperationFailed("findFilesByRelationId", error as Error), + ); + +const deleteByFileId = ( + client: PrismaClientArg, + fileId: string, +): ResultAsync => + ResultAsync.fromPromise( + client.fileLink.deleteMany({ where: { fileId } }), + (error) => storageOperationFailed("deleteFileLinks", error as Error), + ).andThen(() => ok(undefined)); + +const deleteByRelationId = ( + client: PrismaClientArg, + relationId: string, +): ResultAsync => + ResultAsync.fromPromise( + client.fileLink.deleteMany({ where: { relationId } }), + (error) => storageOperationFailed("deleteFileLinks", error as Error), + ).andThen(() => ok(undefined)); + +const deleteSpecificLink = ( + client: PrismaClientArg, + fileId: string, + relationId: string, +): ResultAsync => + ResultAsync.fromPromise( + client.fileLink.deleteMany({ where: { fileId, relationId } }), + (error) => storageOperationFailed("deleteFileLink", error as Error), + ).andThen(() => ok(undefined)); + +export const FileLinkRepository = { + create, + findByRelationId, + deleteByFileId, + deleteByRelationId, + deleteSpecificLink, +}; diff --git a/packages/services/src/files/repositories/file-repository.ts b/packages/services/src/files/repositories/file-repository.ts new file mode 100644 index 0000000..ca29da3 --- /dev/null +++ b/packages/services/src/files/repositories/file-repository.ts @@ -0,0 +1,71 @@ +import { ResultAsync, ok } from "neverthrow"; +import { PrismaClientArg, Prisma, File } from "@repo/db"; +import { fileNotFound, FileStorageError } from "../errors"; +import { + wrapDbOperation, + wrapDbOperationWithNull, + DatabaseError, + databaseError, +} from "@repo/exceptions"; +import { CreateFileInput } from "../types"; + +const create = ( + client: PrismaClientArg, + data: CreateFileInput, +): ResultAsync => { + const fileData: Prisma.FileCreateInput = { + filename: data.filename, + originalName: data.originalName, + mimeType: data.mimeType, + size: data.size, + path: data.path, + }; + + return wrapDbOperation( + () => client.file.create({ data: fileData }), + (e) => databaseError("createFile", e as Error), + ); +}; + +const findById = ( + client: PrismaClientArg, + id: string, +): ResultAsync => + wrapDbOperationWithNull( + () => client.file.findUnique({ where: { id } }), + fileNotFound(id), + (e) => databaseError("findFileById", e as Error), + ); + +const findByFilename = ( + client: PrismaClientArg, + filename: string, +): ResultAsync => + ResultAsync.fromPromise( + client.file.findFirst({ where: { filename } }), + (error) => databaseError("findByFilename", error as Error), + ); + +const deleteById = ( + client: PrismaClientArg, + id: string, +): ResultAsync => + ResultAsync.fromPromise(client.file.delete({ where: { id } }), (error) => + databaseError("deleteFile", error as Error), + ).andThen(() => ok(undefined)); + +const exists = ( + client: PrismaClientArg, + filename: string, +): ResultAsync => + ResultAsync.fromPromise(client.file.exists({ filename }), (error) => + databaseError("checkFileExists", error as Error), + ); + +export const FileRepository = { + create, + findById, + findByFilename, + deleteById, + exists, +}; diff --git a/packages/services/src/files/services/file-link-service.ts b/packages/services/src/files/services/file-link-service.ts new file mode 100644 index 0000000..dd31cd7 --- /dev/null +++ b/packages/services/src/files/services/file-link-service.ts @@ -0,0 +1,66 @@ +import { ResultAsync, ok, err } from "neverthrow"; +import { createZodValidationError } from "@repo/exceptions"; +import { PrismaClientArg, File } from "@repo/db"; +import { FileStorageError, fileNotFound } from "../errors"; +import { FileLinkRepository } from "../repositories/file-link-repository"; +import { FileRepository } from "../repositories/file-repository"; +import { CreateFileLinkInput, CreateFileLinkInputSchema } from "../types"; + +const validateLinkInput = (data: CreateFileLinkInput) => { + const parseResult = CreateFileLinkInputSchema.safeParse(data); + return parseResult.success + ? ok(parseResult.data) + : err(createZodValidationError(parseResult.error)); +}; + +const linkFileToRelation = ( + client: PrismaClientArg, + input: CreateFileLinkInput, +) => + validateLinkInput(input).asyncAndThen((validInput) => + FileRepository.findById(client, validInput.fileId).andThen(() => + FileLinkRepository.create(client, validInput), + ), + ); + +const getFilesByRelationId = ( + client: PrismaClientArg, + relationId: string, +): ResultAsync => + FileLinkRepository.findByRelationId(client, relationId).andThen((links) => + ok(links.map((link) => link.file)), + ); + +const unlinkFileFromRelation = ( + client: PrismaClientArg, + fileId: string, + relationId: string, +): ResultAsync => + FileLinkRepository.deleteSpecificLink(client, fileId, relationId); + +const unlinkAllFilesFromRelation = ( + client: PrismaClientArg, + relationId: string, +): ResultAsync => + FileLinkRepository.deleteByRelationId(client, relationId); + +const getLinkedRelations = ( + client: PrismaClientArg, + fileId: string, +): ResultAsync => + ResultAsync.fromPromise( + client.fileLink.findMany({ + where: { fileId }, + select: { relationId: true }, + }), + () => fileNotFound(fileId), + ).andThen((links) => ok(links.map((link) => link.relationId))); + +export const FileLinkService = { + validateLinkInput, + linkFileToRelation, + getFilesByRelationId, + unlinkFileFromRelation, + unlinkAllFilesFromRelation, + getLinkedRelations, +}; diff --git a/packages/services/src/files/services/file-service.ts b/packages/services/src/files/services/file-service.ts new file mode 100644 index 0000000..7ba0117 --- /dev/null +++ b/packages/services/src/files/services/file-service.ts @@ -0,0 +1,135 @@ +import { join, dirname } from "path"; +import { ResultAsync, ok, err } from "neverthrow"; +import { createZodValidationError } from "@repo/exceptions"; +import { fileAlreadyExists, fileNotFound } from "../errors"; +import { FsUtils } from "../fs-utils"; +import { FileRepository } from "../repositories/file-repository"; +import { + FileServiceConfigSchema, + CreateFileInput, + CreateFileInputSchema, + FileServiceConfig, + FileUploadOptions, +} from "../types"; + +const validateConfig = (data: unknown) => { + const parseResult = FileServiceConfigSchema.safeParse(data); + return parseResult.success + ? ok(parseResult.data) + : err(createZodValidationError(parseResult.error)); +}; + +const validateFileInput = (data: CreateFileInput) => { + const parseResult = CreateFileInputSchema.safeParse(data); + return parseResult.success + ? ok(parseResult.data) + : err(createZodValidationError(parseResult.error)); +}; + +const uploadFile = ( + config: FileServiceConfig, + file: Buffer, + options: FileUploadOptions, +) => { + const validation = FsUtils.validateUpload( + file, + options, + config.maxFileSize, + config.allowedExtensions, + ); + + if (validation.isErr()) { + return ResultAsync.fromSafePromise(Promise.resolve(validation)); + } + + const fileName = FsUtils.generateFileName( + options.originalName, + options.generateFileName, + ); + const filePath = join(config.basePath, fileName); + + return FileRepository.exists(config.client, fileName) + .andThen((exists) => + exists && !options.overwrite + ? err(fileAlreadyExists(fileName)) + : ok(undefined), + ) + .andThen(() => + FsUtils.ensureDirectoryExists( + dirname(filePath), + config.createDirectories, + ), + ) + .andThen(() => FsUtils.writeFile(filePath, file)) + .andThen(() => { + const fileData: CreateFileInput = { + filename: fileName, + originalName: options.originalName, + mimeType: options.mimeType, + size: file.length, + path: filePath, + }; + return validateFileInput(fileData).asyncAndThen((validData) => + FileRepository.create(config.client, validData), + ); + }) + .andThen((fileRecord) => + ok({ + id: fileRecord.id, + originalName: fileRecord.originalName, + fileName: fileRecord.filename, + mimeType: fileRecord.mimeType, + size: fileRecord.size, + uploadedAt: fileRecord.createdAt, + path: fileRecord.path, + }), + ); +}; + +const downloadFile = (config: FileServiceConfig, fileName: string) => + FileRepository.findByFilename(config.client, fileName).andThen( + (fileRecord) => + !fileRecord + ? err(fileNotFound(fileName)) + : FsUtils.readFile(fileRecord.path), + ); + +const deleteFile = (config: FileServiceConfig, fileName: string) => + FileRepository.findByFilename(config.client, fileName).andThen( + (fileRecord) => { + if (!fileRecord) { + return err(fileNotFound(fileName)); + } + return FsUtils.deleteFile(fileRecord.path).andThen(() => + FileRepository.deleteById(config.client, fileRecord.id), + ); + }, + ); + +const getFileMetadata = (config: FileServiceConfig, fileName: string) => + FileRepository.findByFilename(config.client, fileName).andThen( + (fileRecord) => + !fileRecord + ? ok(null) + : ok({ + id: fileRecord.id, + originalName: fileRecord.originalName, + fileName: fileRecord.filename, + mimeType: fileRecord.mimeType, + size: fileRecord.size, + uploadedAt: fileRecord.createdAt, + path: fileRecord.path, + }), + ); + +const fileExists = (config: FileServiceConfig, fileName: string) => + FileRepository.exists(config.client, fileName); + +export const FileService = { + validateConfig, + uploadFile, + downloadFile, + deleteFile, + getFileMetadata, + fileExists, +}; diff --git a/packages/services/src/files/types.ts b/packages/services/src/files/types.ts new file mode 100644 index 0000000..f53afa4 --- /dev/null +++ b/packages/services/src/files/types.ts @@ -0,0 +1,105 @@ +import { z } from "zod"; +import { ResultAsync } from "neverthrow"; +import { FileStorageError } from "./errors"; +import { PrismaClientArg } from "@repo/db"; + +export type FileMetadata = { + readonly id: string; + readonly originalName: string; + readonly fileName: string; + readonly mimeType: string; + readonly size: number; + readonly uploadedAt: Date; + readonly path: string; +}; + +export type FileUploadOptions = { + readonly originalName: string; + readonly mimeType: string; + readonly generateFileName?: (originalName: string) => string; + readonly overwrite?: boolean; +}; + +export type StorageConfig = { + readonly basePath: string; + readonly createDirectories: boolean; + readonly maxFileSize?: number; + readonly allowedExtensions?: string[]; +}; + +export type FileServiceConfig = StorageConfig & { + readonly client: PrismaClientArg; +}; + +export type CreateFileInput = { + readonly filename: string; + readonly originalName: string; + readonly mimeType: string; + readonly size: number; + readonly path: string; +}; + +export type CreateFileLinkInput = { + readonly fileId: string; + readonly relationId: string; +}; + +export const StorageConfigSchema = z.object({ + basePath: z.string().min(1), + createDirectories: z.boolean().default(true), + maxFileSize: z.number().positive().optional(), + allowedExtensions: z.array(z.string()).optional(), +}); + +export const FileServiceConfigSchema = StorageConfigSchema.extend({ + client: z.custom(), +}); + +export const CreateFileInputSchema = z.object({ + filename: z.string().min(1), + originalName: z.string().min(1), + mimeType: z.string().min(1), + size: z.number().positive(), + path: z.string().min(1), +}); + +export const CreateFileLinkInputSchema = z.object({ + fileId: z.string().uuid(), + relationId: z.string().min(1), +}); + +export interface StorageProvider { + upload( + file: Buffer, + options: FileUploadOptions, + ): ResultAsync; + + download(fileName: string): ResultAsync; + + delete(fileName: string): ResultAsync; + + exists(fileName: string): ResultAsync; + + getMetadata( + fileName: string, + ): ResultAsync; +} + +export const LocalStorageConfigSchema = z.object({ + basePath: z.string().min(1), + createDirectories: z.boolean().default(true), + maxFileSize: z.number().positive().optional(), + allowedExtensions: z.array(z.string()).optional(), +}); + +export const DatabaseStorageConfigSchema = z.object({ + client: z.custom(), +}); + +export const HybridStorageConfigSchema = z.object({ + client: z.custom(), + basePath: z.string().min(1), + createDirectories: z.boolean().default(true), + maxFileSize: z.number().positive().optional(), + allowedExtensions: z.array(z.string()).optional(), +}); diff --git a/packages/services/src/index.ts b/packages/services/src/index.ts index 6351060..d2e00b5 100644 --- a/packages/services/src/index.ts +++ b/packages/services/src/index.ts @@ -1 +1 @@ -export * from './payment'; +export * from "./payment"; diff --git a/packages/services/src/payment/errors.ts b/packages/services/src/payment/errors.ts index 56bad74..86e7c48 100644 --- a/packages/services/src/payment/errors.ts +++ b/packages/services/src/payment/errors.ts @@ -1,8 +1,8 @@ -import { AppError, createAppError } from '@repo/exceptions'; +import { AppError, createAppError } from "@repo/exceptions"; export enum PaymentErrorCode { - PAYMENT_NOT_FOUND = 'PAYMENT_NOT_FOUND', - PAYMENT_ALREADY_PROCESSED = 'PAYMENT_ALREADY_PROCESSED', + PAYMENT_NOT_FOUND = "PAYMENT_NOT_FOUND", + PAYMENT_ALREADY_PROCESSED = "PAYMENT_ALREADY_PROCESSED", } export type PaymentError = AppError; @@ -10,11 +10,11 @@ export type PaymentError = AppError; export const paymentNotFound = (paymentId: string): PaymentError => createAppError( PaymentErrorCode.PAYMENT_NOT_FOUND, - `Payment with id ${paymentId} not found` + `Payment with id ${paymentId} not found`, ) as PaymentError; export const paymentAlreadyProcessed = (paymentId: string): PaymentError => createAppError( PaymentErrorCode.PAYMENT_ALREADY_PROCESSED, - `Payment ${paymentId} has already been processed` + `Payment ${paymentId} has already been processed`, ) as PaymentError; diff --git a/packages/services/src/payment/index.ts b/packages/services/src/payment/index.ts index 0759a18..9b179ab 100644 --- a/packages/services/src/payment/index.ts +++ b/packages/services/src/payment/index.ts @@ -1,4 +1,4 @@ -export * from './errors'; -export * from './types'; -export * from './repository'; -export * from './service'; +export * from "./errors"; +export * from "./types"; +export * from "./repository"; +export * from "./service"; diff --git a/packages/services/src/payment/repository.ts b/packages/services/src/payment/repository.ts index a49e9eb..9dc3246 100644 --- a/packages/services/src/payment/repository.ts +++ b/packages/services/src/payment/repository.ts @@ -1,39 +1,39 @@ -import { PaymentStatus, Prisma, PrismaClientArg, Payment } from '@repo/db'; -import { paymentNotFound, PaymentError } from './errors'; +import { PaymentStatus, Prisma, PrismaClientArg, Payment } from "@repo/db"; +import { paymentNotFound, PaymentError } from "./errors"; import { DatabaseError, databaseError, wrapDbOperation, wrapDbOperationWithNull, -} from '@repo/exceptions'; -import { ResultAsync } from 'neverthrow'; +} from "@repo/exceptions"; +import { ResultAsync } from "neverthrow"; export const PaymentRepository = { create( client: PrismaClientArg, - data: Prisma.PaymentUncheckedCreateInput + data: Prisma.PaymentUncheckedCreateInput, ): ResultAsync { return wrapDbOperation( () => client.payment.create({ data }).then((payment: Payment) => payment), - (e) => databaseError('create-error', e as Error) + (e) => databaseError("create-error", e as Error), ); }, findById( client: PrismaClientArg, - id: string + id: string, ): ResultAsync { return wrapDbOperationWithNull( () => client.payment.findUnique({ where: { id } }), paymentNotFound(id), - (e) => databaseError('find-by-id', e as Error) + (e) => databaseError("find-by-id", e as Error), ); }, updateStatus( client: PrismaClientArg, id: string, - status: PaymentStatus + status: PaymentStatus, ): ResultAsync { return wrapDbOperation( () => @@ -41,21 +41,21 @@ export const PaymentRepository = { where: { id }, data: { status }, }), - () => databaseError(id) + () => databaseError(id), ); }, findByUserId( client: PrismaClientArg, - telegramUserId: string + telegramUserId: string, ): ResultAsync { return wrapDbOperation( () => client.payment.findMany({ where: { telegramUserId }, - orderBy: { createdAt: 'desc' }, + orderBy: { createdAt: "desc" }, }), - () => databaseError(`user-${telegramUserId}`) + () => databaseError(`user-${telegramUserId}`), ); }, }; diff --git a/packages/services/src/payment/service.ts b/packages/services/src/payment/service.ts index 0965bc6..341bd53 100644 --- a/packages/services/src/payment/service.ts +++ b/packages/services/src/payment/service.ts @@ -1,18 +1,24 @@ -import { ok, err } from 'neverthrow'; -import { CreatePaymentInput, CreatePaymentInputSchema } from './types'; -import { paymentAlreadyProcessed } from './errors'; -import { PaymentRepository } from './repository'; -import { Payment, PaymentStatus, PrismaClient } from '@repo/db'; -import { safeParse } from '@repo/exceptions'; +import { ok, err } from "neverthrow"; +import { CreatePaymentInput, CreatePaymentInputSchema } from "./types"; +import { paymentAlreadyProcessed } from "./errors"; +import { PaymentRepository } from "./repository"; +import { Payment, PaymentStatus, PrismaClient } from "@repo/db"; +import { createZodValidationError } from "@repo/exceptions"; -const validateInput = safeParse(CreatePaymentInputSchema); +const validateInput = (data: unknown) => { + const parseResult = CreatePaymentInputSchema.safeParse(data); + + return parseResult.success + ? ok(parseResult.data) + : err(createZodValidationError(parseResult.error)); +}; export const createPayment = ( client: PrismaClient, - input: CreatePaymentInput + input: CreatePaymentInput, ) => validateInput(input).map((validatedInput) => - PaymentRepository.create(client, validatedInput) + PaymentRepository.create(client, validatedInput), ); export const getPaymentById = (client: PrismaClient, id: string) => diff --git a/packages/services/src/payment/types.ts b/packages/services/src/payment/types.ts index 1d95a8e..9edd364 100644 --- a/packages/services/src/payment/types.ts +++ b/packages/services/src/payment/types.ts @@ -1,20 +1,20 @@ -import { Payment, PaymentStatus, PrismaClient } from '@repo/db'; -import { z } from 'zod'; -import { ResultAsync } from 'neverthrow'; -import { PaymentError } from './errors'; +import { Payment, PaymentStatus, PrismaClient } from "@repo/db"; +import { z } from "zod"; +import { ResultAsync } from "neverthrow"; +import { PaymentError } from "./errors"; export enum Currency { - USD = 'USD', - EUR = 'EUR', - RUB = 'RUB', - XTR = 'XTR', + USD = "USD", + EUR = "EUR", + RUB = "RUB", + XTR = "XTR", } export const CURRENCIES = Object.values(Currency); export enum PaymentProvider { - YOOKASSA = 'yookassa', - TELEGRAM = 'telegram', + YOOKASSA = "yookassa", + TELEGRAM = "telegram", } export const PAYMENT_PROVIDERS = Object.values(PaymentProvider); @@ -36,15 +36,15 @@ export type PaymentProviderResponse = { export type IPaymentProvider = { readonly createPayment: ( client: PrismaClient, - input: CreatePaymentInput + input: CreatePaymentInput, ) => ResultAsync; readonly verifyPayment: ( client: PrismaClient, - payment: Payment + payment: Payment, ) => ResultAsync; readonly refundPayment: ( client: PrismaClient, providerId: string, - amount?: number + amount?: number, ) => ResultAsync; }; diff --git a/packages/services/tsconfig.json b/packages/services/tsconfig.json index 76b93f1..46a9bfa 100644 --- a/packages/services/tsconfig.json +++ b/packages/services/tsconfig.json @@ -1,11 +1,17 @@ { - "extends": "@repo/typescript-config/base.json", + "extends": "@repo/typescript-config/library.json", "compilerOptions": { "outDir": "dist", - "rootDir": "src", + "rootDir": ".", + "skipLibCheck": true, "declaration": false, "declarationMap": false }, - "include": ["src"], - "exclude": ["node_modules", "dist"] + "include": ["src/**/*"], + "exclude": [ + "node_modules", + "dist", + "**/*.test.*", + "**/*.spec.*" + ] } \ No newline at end of file diff --git a/packages/services/tsup.config.ts b/packages/services/tsup.config.ts new file mode 100644 index 0000000..5decb2a --- /dev/null +++ b/packages/services/tsup.config.ts @@ -0,0 +1,14 @@ +import { defineConfig } from "tsup"; + +export default defineConfig({ + entry: ["src/index.ts"], + format: ["cjs", "esm"], + dts: false, + splitting: false, + sourcemap: true, + clean: true, + external: ["@repo/db", "@repo/exceptions"], + treeshake: true, + minify: false, + target: "es2022", +}); diff --git a/packages/typescript-config/base.json b/packages/typescript-config/base.json index 5117f2a..6f694d5 100644 --- a/packages/typescript-config/base.json +++ b/packages/typescript-config/base.json @@ -1,19 +1,27 @@ { "$schema": "https://json.schemastore.org/tsconfig", "compilerOptions": { + "allowJs": true, "declaration": true, "declarationMap": true, "esModuleInterop": true, - "incremental": false, + "forceConsistentCasingInFileNames": true, + "incremental": true, "isolatedModules": true, "lib": ["es2022", "DOM", "DOM.Iterable"], - "module": "NodeNext", + "module": "ESNext", "moduleDetection": "force", - "moduleResolution": "NodeNext", + "moduleResolution": "Bundler", + "noEmit": true, "noUncheckedIndexedAccess": true, + "preserveWatchOutput": true, "resolveJsonModule": true, "skipLibCheck": true, - "strict": true, - "target": "ES2022" - } + "strict": false, + "target": "ES2022", + "noImplicitReturns": false, + "noImplicitAny": false, + "noErrorTruncation": true + }, + "exclude": ["node_modules"] } diff --git a/packages/typescript-config/library.json b/packages/typescript-config/library.json new file mode 100644 index 0000000..7a2e4bb --- /dev/null +++ b/packages/typescript-config/library.json @@ -0,0 +1,11 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "extends": "./base.json", + "compilerOptions": { + "declaration": true, + "declarationMap": true, + "incremental": false, + "noEmit": false + }, + "exclude": ["node_modules", "dist", "**/*.test.*", "**/*.spec.*"] +} \ No newline at end of file diff --git a/packages/typescript-config/node.json b/packages/typescript-config/node.json new file mode 100644 index 0000000..e908c11 --- /dev/null +++ b/packages/typescript-config/node.json @@ -0,0 +1,10 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "extends": "./base.json", + "compilerOptions": { + "lib": ["es2022"], + "noEmit": false, + "types": ["node"] + }, + "exclude": ["node_modules", "dist", "**/*.test.*", "**/*.spec.*"] +} \ No newline at end of file diff --git a/packages/typescript-config/package.json b/packages/typescript-config/package.json index 27c0e60..c623258 100644 --- a/packages/typescript-config/package.json +++ b/packages/typescript-config/package.json @@ -2,8 +2,10 @@ "name": "@repo/typescript-config", "version": "0.0.0", "private": true, - "license": "MIT", - "publishConfig": { - "access": "public" + "files": ["*.json"], + "exports": { + "./base.json": "./base.json", + "./library.json": "./library.json", + "./node.json": "./node.json" } } diff --git a/turbo.json b/turbo.json index f9d43fe..9d6aa87 100644 --- a/turbo.json +++ b/turbo.json @@ -1,30 +1,42 @@ { - "$schema": "https://turborepo.com/schema.json", + "$schema": "https://turbo.build/schema.json", + "ui": "tui", "tasks": { "build": { "dependsOn": ["^build", "^db:generate"], "outputs": ["dist/**"], - "env": ["DATABASE_URL", "BOT_TOKEN"] - }, - "check-types": { - "dependsOn": ["^check-types"] + "env": ["NODE_ENV"] }, "dev": { - "dependsOn": ["^db:generate"], + "dependsOn": ["^build", "^db:generate"], "persistent": true, - "cache": false + "cache": false, + "env": ["DATABASE_URL", "BOT_TOKEN", "NODE_ENV"] }, "start": { - "dependsOn": ["^build"], + "dependsOn": ["build", "^db:generate"], "persistent": true, + "cache": false, + "env": ["DATABASE_URL", "BOT_TOKEN", "NODE_ENV"], + "outputLogs": "new-only" + }, + "check-types": { + "dependsOn": ["^build"], + "outputs": [] + }, + "lint": { + "dependsOn": ["^build"], + "outputs": [] + }, + "clean": { "cache": false }, "db:generate": { - "cache": false + "cache": false, + "outputs": ["generated/**"] }, "db:migrate": { - "cache": false, - "persistent": true + "cache": false }, "db:deploy": { "cache": false @@ -32,5 +44,7 @@ "db:push": { "cache": false } - } + }, + "globalEnv": ["NODE_ENV"], + "globalPassThroughEnv": ["NODE_ENV", "CI", "VERCEL", "npm_lifecycle_event"] }