diff --git a/.github/workflows/testOnPr.js.yml b/.github/workflows/testOnPr.js.yml index a355bf55..e9c3421f 100644 --- a/.github/workflows/testOnPr.js.yml +++ b/.github/workflows/testOnPr.js.yml @@ -1,22 +1,26 @@ name: Build and test on: pull_request: - branches: [ "develop", "main" ] + branches: ["develop", "main"] jobs: build: runs-on: ubuntu-latest + env: + # placeholder URL, needed to generate client and build application + NAIS_DATABASE_MYAPP_MYDB_URL: postgresql://user@localhost:5432/statreg_db strategy: matrix: node-version: [22.x] # See supported Node.js release schedule at https://nodejs.org/en/about/releases/ steps: - - uses: actions/checkout@v5 - - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v6 - with: - node-version: ${{ matrix.node-version }} - cache: 'npm' - - run: npm ci - - run: npm run build --if-present - - run: npm run ci-test - - run: npm run lint \ No newline at end of file + - uses: actions/checkout@v5 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v6 + with: + node-version: ${{ matrix.node-version }} + cache: "npm" + - run: npm ci + - run: npm run generate + - run: npm run build --if-present + - run: npm run ci-test + - run: npm run lint diff --git a/.gitignore b/.gitignore index 418eb458..efc1f5d7 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,10 @@ node_modules # Ignore coverage folder coverage/ + +# Ignore generate folder, you should make your own. +# Use npm run generate +src/generated/ + +# Do not commit your .env file, please +.env \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index f510328d..be8cdd0e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -14,6 +14,9 @@ RUN npm install # Copy the application source code COPY . . +# Generate the Prisma client libraries +RUN npm run generate + # Build the application RUN npm run build @@ -25,5 +28,4 @@ EXPOSE 9000 EXPOSE 8080 # Command to start the application -# CMD [ "sh", "-c", "npm run db:deploy && npm run start" ] -CMD [ "sh", "-c", "npm run start" ] \ No newline at end of file +CMD [ "sh", "-c", "npm run db:deploy && npm run start" ] \ No newline at end of file diff --git a/README.md b/README.md index 6e249a75..2555c4af 100644 --- a/README.md +++ b/README.md @@ -3,10 +3,20 @@ Statreg API is a backend service for statistikkregisteret. It provides endpoints for fetching and managing statistics and publications, amongst other things. ## DEV + +### First run, database baseline setup ``` npm install +npm run generate +npx prisma db push +npm run dev +``` + +### Subsequent application startups +``` npm run dev ``` + Go to http://localhost:8080 to see results. ## Eslint & Prettier @@ -32,10 +42,10 @@ Help secure Express apps by setting HTTP response headers. Express middleware with popular prometheus metrics in one bundle. Exposes `/metrics` endpoint. ## Docker -## Prerequisites +### Prerequisites To get started, you first need to [install Colima and Docker CLI.](https://statistics-norway.atlassian.net/wiki/spaces/mimir/pages/4827381761/Bytte+fra+Docker+Desktop+til+Colima) -## Build and run +### Build and run Start Colima with the default configuration ```bash colima start @@ -49,4 +59,23 @@ docker build -t ssbno/statreg-api . Then, run ```bash docker run -it -p 8080:8080 ssbno/statreg-api -``` \ No newline at end of file +``` + +## Persistence + +### Database + +We use PostgreSQL, provided by Nais in our live environments. Locally you can set up your own Postgres db in one of many ways - install PostgreSQL [from either the website](https://www.postgresql.org/download/), Homebrew or your package manager of choice. If you are on a mac, postgres.app is recommended and makes setup very easy and quick. + +### Prisma + +We use Prisma both as our ORM and as our schema migration tool in this project. We strongly recommend reading [this article](https://www.prisma.io/docs/getting-started/setup-prisma/add-to-existing-project/relational-databases/evolve-your-schema-typescript-postgresql) before touching the schema if you have not used Prisma before. + +In short though, Prisma handles schema changes with Migrations, which are incremental change sets applied to the database. Applied migrations are recorded in the database. Migrations are generated with the Prisma CLI, checked into the codebase and _never_ manually changed. After having made changes to your schema, you can push these changes to your local db with `npx prisma db push`. Note that this does not update your migrations, but you can do this as many times as you like until the desired state is achieved. (sidenote: this may cause data loss locally) + +When you are happy with your updated schema, you can run `npx prisma migrate dev --name name-of-changeset`. This applies previous changes in schema, generates a new migration with the supplied name, applies all unapplied migrations and triggers generation of a new Prisma Client. + +There are many fun pitfalls and ways of messing up both your local db and production data using prisma, so educate yourself, make sure you know what you are doing, and be ready to roll back changes. + +For local development, we can use a file named ".env" located in the root directory of the project. Currently we only use one environment variable from this file - see prisma.config.ts - and it should look something like this: +`NAIS_DATABASE_MYAPP_MYDB_URL="postgresql://@localhost:5432/statreg_db"` diff --git a/eslint.config.mjs b/eslint.config.mjs index 6b88d7de..7c40c088 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -6,7 +6,7 @@ import tseslintParser from '@typescript-eslint/parser' import prettier from 'eslint-plugin-prettier' export default defineConfig([ - globalIgnores(['dist/', 'node_modules/', 'generated/']), + globalIgnores(['dist/', 'node_modules/', 'src/generated/']), { files: ['**/*.{js,mjs,cjs,ts}'], plugins: { diff --git a/package-lock.json b/package-lock.json index dcc6eae6..214c0d97 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,6 +8,8 @@ "name": "ssbno-statreg-api", "version": "0.0.0", "dependencies": { + "@prisma/adapter-pg": "^7.0.1", + "@prisma/client": "^7.0.1", "express": "^5.1.0", "express-prom-bundle": "^8.0.0", "helmet": "^8.1.0", @@ -18,20 +20,88 @@ "yaml": "^2.8.1" }, "devDependencies": { - "@eslint/js": "^9.38.0", + "@eslint/js": "^9.39.1", "@types/express": "^5.0.5", - "@types/node": "^24.9.2", + "@types/node": "^24.10.1", "@types/swagger-ui-express": "^4.1.8", - "eslint": "^9.38.0", + "eslint": "^9.39.1", "eslint-plugin-prettier": "^5.5.4", - "nodemon": "^3.1.10", - "pkgroll": "^2.20.1", - "typescript-eslint": "^8.46.2" + "nodemon": "^3.1.11", + "pkgroll": "^2.21.3", + "prisma": "^7.0.1", + "typescript-eslint": "^8.48.0" }, "engines": { "node": ">=22.13.0" } }, + "node_modules/@chevrotain/cst-dts-gen": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/@chevrotain/cst-dts-gen/-/cst-dts-gen-10.5.0.tgz", + "integrity": "sha512-lhmC/FyqQ2o7pGK4Om+hzuDrm9rhFYIJ/AXoQBeongmn870Xeb0L6oGEiuR8nohFNL5sMaQEJWCxr1oIVIVXrw==", + "devOptional": true, + "license": "Apache-2.0", + "dependencies": { + "@chevrotain/gast": "10.5.0", + "@chevrotain/types": "10.5.0", + "lodash": "4.17.21" + } + }, + "node_modules/@chevrotain/gast": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/@chevrotain/gast/-/gast-10.5.0.tgz", + "integrity": "sha512-pXdMJ9XeDAbgOWKuD1Fldz4ieCs6+nLNmyVhe2gZVqoO7v8HXuHYs5OV2EzUtbuai37TlOAQHrTDvxMnvMJz3A==", + "devOptional": true, + "license": "Apache-2.0", + "dependencies": { + "@chevrotain/types": "10.5.0", + "lodash": "4.17.21" + } + }, + "node_modules/@chevrotain/types": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/@chevrotain/types/-/types-10.5.0.tgz", + "integrity": "sha512-f1MAia0x/pAVPWH/T73BJVyO2XU5tI4/iE7cnxb7tqdNTNhQI3Uq3XkqcoteTmD4t1aM0LbHCJOhgIDn07kl2A==", + "devOptional": true, + "license": "Apache-2.0" + }, + "node_modules/@chevrotain/utils": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/@chevrotain/utils/-/utils-10.5.0.tgz", + "integrity": "sha512-hBzuU5+JjB2cqNZyszkDHZgOSrUUT8V3dhgRl8Q9Gp6dAj/H5+KILGjbhDpc3Iy9qmqlm/akuOI2ut9VUtzJxQ==", + "devOptional": true, + "license": "Apache-2.0" + }, + "node_modules/@electric-sql/pglite": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@electric-sql/pglite/-/pglite-0.3.2.tgz", + "integrity": "sha512-zfWWa+V2ViDCY/cmUfRqeWY1yLto+EpxjXnZzenB1TyxsTiXaTWeZFIZw6mac52BsuQm0RjCnisjBtdBaXOI6w==", + "devOptional": true, + "license": "Apache-2.0" + }, + "node_modules/@electric-sql/pglite-socket": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@electric-sql/pglite-socket/-/pglite-socket-0.0.6.tgz", + "integrity": "sha512-6RjmgzphIHIBA4NrMGJsjNWK4pu+bCWJlEWlwcxFTVY3WT86dFpKwbZaGWZV6C5Rd7sCk1Z0CI76QEfukLAUXw==", + "devOptional": true, + "license": "Apache-2.0", + "bin": { + "pglite-server": "dist/scripts/server.js" + }, + "peerDependencies": { + "@electric-sql/pglite": "0.3.2" + } + }, + "node_modules/@electric-sql/pglite-tools": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/@electric-sql/pglite-tools/-/pglite-tools-0.2.7.tgz", + "integrity": "sha512-9dAccClqxx4cZB+Ar9B+FZ5WgxDc/Xvl9DPrTWv+dYTf0YNubLzi4wHHRGRGhrJv15XwnyKcGOZAP1VXSneSUg==", + "devOptional": true, + "license": "Apache-2.0", + "peerDependencies": { + "@electric-sql/pglite": "0.3.2" + } + }, "node_modules/@esbuild/aix-ppc64": { "version": "0.25.12", "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", @@ -665,6 +735,19 @@ "fast-deep-equal": "^3.1.3" } }, + "node_modules/@hono/node-server": { + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.14.2.tgz", + "integrity": "sha512-GHjpOeHYbr9d1vkID2sNUYkl5IxumyhDrUJB7wBp7jvqYwPFt+oNKsAPBRcdSbV7kIrXhouLE199ks1QcK4r7A==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=18.14.1" + }, + "peerDependencies": { + "hono": "^4" + } + }, "node_modules/@humanfs/core": { "version": "0.19.1", "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", @@ -724,6 +807,20 @@ "dev": true, "license": "MIT" }, + "node_modules/@mrleebo/prisma-ast": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@mrleebo/prisma-ast/-/prisma-ast-0.12.1.tgz", + "integrity": "sha512-JwqeCQ1U3fvccttHZq7Tk0m/TMC6WcFAQZdukypW3AzlJYKYTGNVd1ANU2GuhKnv4UQuOFj3oAl0LLG/gxFN1w==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "chevrotain": "^10.5.0", + "lilconfig": "^2.1.0" + }, + "engines": { + "node": ">=16" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -791,17 +888,201 @@ "url": "https://opencollective.com/pkgr" } }, + "node_modules/@prisma/adapter-pg": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@prisma/adapter-pg/-/adapter-pg-7.0.1.tgz", + "integrity": "sha512-01GpPPhLMoDMF4ipgfZz0L87fla/TV/PBQcmHy+9vV1ml6gUoqF8dUIRNI5Yf2YKpOwzQg9sn8C7dYD1Yio9Ug==", + "license": "Apache-2.0", + "dependencies": { + "@prisma/driver-adapter-utils": "7.0.1", + "pg": "^8.16.3", + "postgres-array": "3.0.4" + } + }, + "node_modules/@prisma/client": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@prisma/client/-/client-7.0.1.tgz", + "integrity": "sha512-O74T6xcfaGAq5gXwCAvfTLvI6fmC3and2g5yLRMkNjri1K8mSpEgclDNuUWs9xj5AwNEMQ88NeD3asI+sovm1g==", + "license": "Apache-2.0", + "dependencies": { + "@prisma/client-runtime-utils": "7.0.1" + }, + "engines": { + "node": "^20.19 || ^22.12 || >=24.0" + }, + "peerDependencies": { + "prisma": "*", + "typescript": ">=5.4.0" + }, + "peerDependenciesMeta": { + "prisma": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/@prisma/client-runtime-utils": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@prisma/client-runtime-utils/-/client-runtime-utils-7.0.1.tgz", + "integrity": "sha512-R26BVX9D/iw4toUmZKZf3jniM/9pMGHHdZN5LVP2L7HNiCQKNQQx/9LuMtjepbgRqSqQO3oHN0yzojHLnKTGEw==", + "license": "Apache-2.0" + }, + "node_modules/@prisma/config": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@prisma/config/-/config-7.0.1.tgz", + "integrity": "sha512-MacIjXdo+hNKxPvtMzDXykIIc8HCRWoyjQ2nguJTFqLDzJBD5L6QRaANGTLOqbGtJ3sFvLRmfXhrFg3pWoK1BA==", + "devOptional": true, + "license": "Apache-2.0", + "dependencies": { + "c12": "3.1.0", + "deepmerge-ts": "7.1.5", + "effect": "3.18.4", + "empathic": "2.0.0" + } + }, + "node_modules/@prisma/debug": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-7.0.1.tgz", + "integrity": "sha512-5+25XokVeAK2Z2C9W457AFw7Hk032Q3QI3G58KYKXPlpgxy+9FvV1+S1jqfJ2d4Nmq9LP/uACrM6OVhpJMSr8w==", + "license": "Apache-2.0" + }, + "node_modules/@prisma/dev": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@prisma/dev/-/dev-0.13.0.tgz", + "integrity": "sha512-QMmF6zFeUF78yv1HYbHvod83AQnl7u6NtKyDhTRZOJup3h1icWs8R7RUVxBJZvM2tBXNAMpLQYYM/8kPlOPegA==", + "devOptional": true, + "license": "ISC", + "dependencies": { + "@electric-sql/pglite": "0.3.2", + "@electric-sql/pglite-socket": "0.0.6", + "@electric-sql/pglite-tools": "0.2.7", + "@hono/node-server": "1.14.2", + "@mrleebo/prisma-ast": "0.12.1", + "@prisma/get-platform": "6.8.2", + "@prisma/query-plan-executor": "6.18.0", + "foreground-child": "3.3.1", + "get-port-please": "3.1.2", + "hono": "4.7.10", + "http-status-codes": "2.3.0", + "pathe": "2.0.3", + "proper-lockfile": "4.1.2", + "remeda": "2.21.3", + "std-env": "3.9.0", + "valibot": "1.1.0", + "zeptomatch": "2.0.2" + } + }, + "node_modules/@prisma/driver-adapter-utils": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@prisma/driver-adapter-utils/-/driver-adapter-utils-7.0.1.tgz", + "integrity": "sha512-sBbxm/yysHLLF2iMAB+qcX/nn3WFgsiC4DQNz0uM6BwGSIs8lIvgo0u8nR9nxe5gvFgKiIH8f4z2fgOEMeXc8w==", + "license": "Apache-2.0", + "dependencies": { + "@prisma/debug": "7.0.1" + } + }, + "node_modules/@prisma/engines": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-7.0.1.tgz", + "integrity": "sha512-f+D/vdKeImqUHysd5Bgv8LQ1whl4sbLepHyYMQQMK61cp4WjwJVryophleLUrfEJRpBLGTBI/7fnLVENxxMFPQ==", + "devOptional": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@prisma/debug": "7.0.1", + "@prisma/engines-version": "7.1.0-2.f09f2815f091dbba658cdcd2264306d88bb5bda6", + "@prisma/fetch-engine": "7.0.1", + "@prisma/get-platform": "7.0.1" + } + }, + "node_modules/@prisma/engines-version": { + "version": "7.1.0-2.f09f2815f091dbba658cdcd2264306d88bb5bda6", + "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-7.1.0-2.f09f2815f091dbba658cdcd2264306d88bb5bda6.tgz", + "integrity": "sha512-RA7pShKvijHib4USRB3YuLTQamHKJPkTRDc45AwxfahUQngiGVMlIj4ix4emUxkrum4o/jwn82WIwlG57EtgiQ==", + "devOptional": true, + "license": "Apache-2.0" + }, + "node_modules/@prisma/engines/node_modules/@prisma/get-platform": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-7.0.1.tgz", + "integrity": "sha512-DrsGnZOsF7PlAE7UtqmJenWti87RQtg7v9qW9alS71Pj0P6ZQV0RuzRQaql9dCWoo6qKAaF5U/L4kI826MmiZg==", + "devOptional": true, + "license": "Apache-2.0", + "dependencies": { + "@prisma/debug": "7.0.1" + } + }, + "node_modules/@prisma/fetch-engine": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-7.0.1.tgz", + "integrity": "sha512-5DnSairYIYU7dcv/9pb1KCwIRHZfhVOd34855d01lUI5QdF9rdCkMywPQbBM67YP7iCgQoEZO0/COtOMpR4i9A==", + "devOptional": true, + "license": "Apache-2.0", + "dependencies": { + "@prisma/debug": "7.0.1", + "@prisma/engines-version": "7.1.0-2.f09f2815f091dbba658cdcd2264306d88bb5bda6", + "@prisma/get-platform": "7.0.1" + } + }, + "node_modules/@prisma/fetch-engine/node_modules/@prisma/get-platform": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-7.0.1.tgz", + "integrity": "sha512-DrsGnZOsF7PlAE7UtqmJenWti87RQtg7v9qW9alS71Pj0P6ZQV0RuzRQaql9dCWoo6qKAaF5U/L4kI826MmiZg==", + "devOptional": true, + "license": "Apache-2.0", + "dependencies": { + "@prisma/debug": "7.0.1" + } + }, + "node_modules/@prisma/get-platform": { + "version": "6.8.2", + "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-6.8.2.tgz", + "integrity": "sha512-vXSxyUgX3vm1Q70QwzwkjeYfRryIvKno1SXbIqwSptKwqKzskINnDUcx85oX+ys6ooN2ATGSD0xN2UTfg6Zcow==", + "devOptional": true, + "license": "Apache-2.0", + "dependencies": { + "@prisma/debug": "6.8.2" + } + }, + "node_modules/@prisma/get-platform/node_modules/@prisma/debug": { + "version": "6.8.2", + "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-6.8.2.tgz", + "integrity": "sha512-4muBSSUwJJ9BYth5N8tqts8JtiLT8QI/RSAzEogwEfpbYGFo9mYsInsVo8dqXdPO2+Rm5OG5q0qWDDE3nyUbVg==", + "devOptional": true, + "license": "Apache-2.0" + }, + "node_modules/@prisma/query-plan-executor": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/@prisma/query-plan-executor/-/query-plan-executor-6.18.0.tgz", + "integrity": "sha512-jZ8cfzFgL0jReE1R10gT8JLHtQxjWYLiQ//wHmVYZ2rVkFHoh0DT8IXsxcKcFlfKN7ak7k6j0XMNn2xVNyr5cA==", + "devOptional": true, + "license": "Apache-2.0" + }, + "node_modules/@prisma/studio-core": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/@prisma/studio-core/-/studio-core-0.8.2.tgz", + "integrity": "sha512-/iAEWEUpTja+7gVMu1LtR2pPlvDmveAwMHdTWbDeGlT7yiv0ZTCPpmeAGdq/Y9aJ9Zj1cEGBXGRbmmNPj022PQ==", + "devOptional": true, + "license": "UNLICENSED", + "peerDependencies": { + "@types/react": "^18.0.0 || ^19.0.0", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, "node_modules/@rollup/plugin-alias": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-alias/-/plugin-alias-5.1.1.tgz", - "integrity": "sha512-PR9zDb+rOzkRb2VD+EuKB7UC41vU5DIwZ5qqCpk0KJudcWAyi8rvYOhS7+L5aZCspw1stTViLgN5v6FF1p5cgQ==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-alias/-/plugin-alias-6.0.0.tgz", + "integrity": "sha512-tPCzJOtS7uuVZd+xPhoy5W4vThe6KWXNmsFCNktaAh5RTqcLiSfT4huPQIXkgJ6YCOjJHvecOAzQxLFhPxKr+g==", "dev": true, "license": "MIT", "engines": { - "node": ">=14.0.0" + "node": ">=20.19.0" }, "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + "rollup": ">=4.0.0" }, "peerDependenciesMeta": { "rollup": { @@ -810,9 +1091,9 @@ } }, "node_modules/@rollup/plugin-commonjs": { - "version": "28.0.9", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-28.0.9.tgz", - "integrity": "sha512-PIR4/OHZ79romx0BVVll/PkwWpJ7e5lsqFa3gFfcrFPWwLXLV39JVUzQV9RKjWerE7B845Hqjj9VYlQeieZ2dA==", + "version": "29.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-29.0.0.tgz", + "integrity": "sha512-U2YHaxR2cU/yAiwKJtJRhnyLk7cifnQw0zUpISsocBDoHDJn+HTV74ABqnwr5bEgWUwFZC9oFL6wLe21lHu5eQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1312,6 +1593,13 @@ "hasInstallScript": true, "license": "Apache-2.0" }, + "node_modules/@standard-schema/spec": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.0.0.tgz", + "integrity": "sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==", + "devOptional": true, + "license": "MIT" + }, "node_modules/@types/body-parser": { "version": "1.19.6", "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", @@ -1401,6 +1689,17 @@ "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", "license": "MIT" }, + "node_modules/@types/react": { + "version": "19.2.7", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.7.tgz", + "integrity": "sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==", + "devOptional": true, + "license": "MIT", + "peer": true, + "dependencies": { + "csstype": "^3.2.2" + } + }, "node_modules/@types/resolve": { "version": "1.20.2", "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", @@ -1450,17 +1749,17 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.46.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.46.4.tgz", - "integrity": "sha512-R48VhmTJqplNyDxCyqqVkFSZIx1qX6PzwqgcXn1olLrzxcSBDlOsbtcnQuQhNtnNiJ4Xe5gREI1foajYaYU2Vg==", + "version": "8.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.48.0.tgz", + "integrity": "sha512-XxXP5tL1txl13YFtrECECQYeZjBZad4fyd3cFV4a19LkAY/bIp9fev3US4S5fDVV2JaYFiKAZ/GRTOLer+mbyQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.46.4", - "@typescript-eslint/type-utils": "8.46.4", - "@typescript-eslint/utils": "8.46.4", - "@typescript-eslint/visitor-keys": "8.46.4", + "@typescript-eslint/scope-manager": "8.48.0", + "@typescript-eslint/type-utils": "8.48.0", + "@typescript-eslint/utils": "8.48.0", + "@typescript-eslint/visitor-keys": "8.48.0", "graphemer": "^1.4.0", "ignore": "^7.0.0", "natural-compare": "^1.4.0", @@ -1474,7 +1773,7 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.46.4", + "@typescript-eslint/parser": "^8.48.0", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } @@ -1490,16 +1789,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.46.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.46.4.tgz", - "integrity": "sha512-tK3GPFWbirvNgsNKto+UmB/cRtn6TZfyw0D6IKrW55n6Vbs7KJoZtI//kpTKzE/DUmmnAFD8/Ca46s7Obs92/w==", + "version": "8.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.48.0.tgz", + "integrity": "sha512-jCzKdm/QK0Kg4V4IK/oMlRZlY+QOcdjv89U2NgKHZk1CYTj82/RVSx1mV/0gqCVMJ/DA+Zf/S4NBWNF8GQ+eqQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.46.4", - "@typescript-eslint/types": "8.46.4", - "@typescript-eslint/typescript-estree": "8.46.4", - "@typescript-eslint/visitor-keys": "8.46.4", + "@typescript-eslint/scope-manager": "8.48.0", + "@typescript-eslint/types": "8.48.0", + "@typescript-eslint/typescript-estree": "8.48.0", + "@typescript-eslint/visitor-keys": "8.48.0", "debug": "^4.3.4" }, "engines": { @@ -1515,14 +1814,14 @@ } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.46.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.46.4.tgz", - "integrity": "sha512-nPiRSKuvtTN+no/2N1kt2tUh/HoFzeEgOm9fQ6XQk4/ApGqjx0zFIIaLJ6wooR1HIoozvj2j6vTi/1fgAz7UYQ==", + "version": "8.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.48.0.tgz", + "integrity": "sha512-Ne4CTZyRh1BecBf84siv42wv5vQvVmgtk8AuiEffKTUo3DrBaGYZueJSxxBZ8fjk/N3DrgChH4TOdIOwOwiqqw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.46.4", - "@typescript-eslint/types": "^8.46.4", + "@typescript-eslint/tsconfig-utils": "^8.48.0", + "@typescript-eslint/types": "^8.48.0", "debug": "^4.3.4" }, "engines": { @@ -1537,14 +1836,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.46.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.46.4.tgz", - "integrity": "sha512-tMDbLGXb1wC+McN1M6QeDx7P7c0UWO5z9CXqp7J8E+xGcJuUuevWKxuG8j41FoweS3+L41SkyKKkia16jpX7CA==", + "version": "8.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.48.0.tgz", + "integrity": "sha512-uGSSsbrtJrLduti0Q1Q9+BF1/iFKaxGoQwjWOIVNJv0o6omrdyR8ct37m4xIl5Zzpkp69Kkmvom7QFTtue89YQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.46.4", - "@typescript-eslint/visitor-keys": "8.46.4" + "@typescript-eslint/types": "8.48.0", + "@typescript-eslint/visitor-keys": "8.48.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1555,9 +1854,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.46.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.46.4.tgz", - "integrity": "sha512-+/XqaZPIAk6Cjg7NWgSGe27X4zMGqrFqZ8atJsX3CWxH/jACqWnrWI68h7nHQld0y+k9eTTjb9r+KU4twLoo9A==", + "version": "8.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.48.0.tgz", + "integrity": "sha512-WNebjBdFdyu10sR1M4OXTt2OkMd5KWIL+LLfeH9KhgP+jzfDV/LI3eXzwJ1s9+Yc0Kzo2fQCdY/OpdusCMmh6w==", "dev": true, "license": "MIT", "engines": { @@ -1572,15 +1871,15 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.46.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.46.4.tgz", - "integrity": "sha512-V4QC8h3fdT5Wro6vANk6eojqfbv5bpwHuMsBcJUJkqs2z5XnYhJzyz9Y02eUmF9u3PgXEUiOt4w4KHR3P+z0PQ==", + "version": "8.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.48.0.tgz", + "integrity": "sha512-zbeVaVqeXhhab6QNEKfK96Xyc7UQuoFWERhEnj3mLVnUWrQnv15cJNseUni7f3g557gm0e46LZ6IJ4NJVOgOpw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.46.4", - "@typescript-eslint/typescript-estree": "8.46.4", - "@typescript-eslint/utils": "8.46.4", + "@typescript-eslint/types": "8.48.0", + "@typescript-eslint/typescript-estree": "8.48.0", + "@typescript-eslint/utils": "8.48.0", "debug": "^4.3.4", "ts-api-utils": "^2.1.0" }, @@ -1597,9 +1896,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.46.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.46.4.tgz", - "integrity": "sha512-USjyxm3gQEePdUwJBFjjGNG18xY9A2grDVGuk7/9AkjIF1L+ZrVnwR5VAU5JXtUnBL/Nwt3H31KlRDaksnM7/w==", + "version": "8.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.48.0.tgz", + "integrity": "sha512-cQMcGQQH7kwKoVswD1xdOytxQR60MWKM1di26xSUtxehaDs/32Zpqsu5WJlXTtTTqyAVK8R7hvsUnIXRS+bjvA==", "dev": true, "license": "MIT", "engines": { @@ -1611,21 +1910,20 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.46.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.46.4.tgz", - "integrity": "sha512-7oV2qEOr1d4NWNmpXLR35LvCfOkTNymY9oyW+lUHkmCno7aOmIf/hMaydnJBUTBMRCOGZh8YjkFOc8dadEoNGA==", + "version": "8.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.48.0.tgz", + "integrity": "sha512-ljHab1CSO4rGrQIAyizUS6UGHHCiAYhbfcIZ1zVJr5nMryxlXMVWS3duFPSKvSUbFPwkXMFk1k0EMIjub4sRRQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.46.4", - "@typescript-eslint/tsconfig-utils": "8.46.4", - "@typescript-eslint/types": "8.46.4", - "@typescript-eslint/visitor-keys": "8.46.4", + "@typescript-eslint/project-service": "8.48.0", + "@typescript-eslint/tsconfig-utils": "8.48.0", + "@typescript-eslint/types": "8.48.0", + "@typescript-eslint/visitor-keys": "8.48.0", "debug": "^4.3.4", - "fast-glob": "^3.3.2", - "is-glob": "^4.0.3", "minimatch": "^9.0.4", "semver": "^7.6.0", + "tinyglobby": "^0.2.15", "ts-api-utils": "^2.1.0" }, "engines": { @@ -1666,16 +1964,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.46.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.46.4.tgz", - "integrity": "sha512-AbSv11fklGXV6T28dp2Me04Uw90R2iJ30g2bgLz529Koehrmkbs1r7paFqr1vPCZi7hHwYxYtxfyQMRC8QaVSg==", + "version": "8.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.48.0.tgz", + "integrity": "sha512-yTJO1XuGxCsSfIVt1+1UrLHtue8xz16V8apzPYI06W0HbEbEWHxHXgZaAgavIkoh+GeV6hKKd5jm0sS6OYxWXQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.46.4", - "@typescript-eslint/types": "8.46.4", - "@typescript-eslint/typescript-estree": "8.46.4" + "@typescript-eslint/scope-manager": "8.48.0", + "@typescript-eslint/types": "8.48.0", + "@typescript-eslint/typescript-estree": "8.48.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1690,13 +1988,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.46.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.46.4.tgz", - "integrity": "sha512-/++5CYLQqsO9HFGLI7APrxBJYo+5OCMpViuhV8q5/Qa3o5mMrF//eQHks+PXcsAVaLdn817fMuS7zqoXNNZGaw==", + "version": "8.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.48.0.tgz", + "integrity": "sha512-T0XJMaRPOH3+LBbAfzR2jalckP1MSG/L9eUtY0DEzUyVaXJ/t6zN0nR7co5kz0Jko/nkSYCBRkz1djvjajVTTg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.46.4", + "@typescript-eslint/types": "8.48.0", "eslint-visitor-keys": "^4.2.1" }, "engines": { @@ -1887,6 +2185,16 @@ "fastq": "^1.17.1" } }, + "node_modules/aws-ssl-profiles": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/aws-ssl-profiles/-/aws-ssl-profiles-1.1.2.tgz", + "integrity": "sha512-NZKeq9AfyQvEeNlN0zSYAaWrmBffJh3IELMZfRpJVWgrpEbtEpnjvzqBPf+mxoI287JohRDoa+/nsfqqiZmF6g==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">= 6.0.0" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -1915,23 +2223,27 @@ "peer": true }, "node_modules/body-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz", - "integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.1.tgz", + "integrity": "sha512-nfDwkulwiZYQIGwxdy0RUmowMhKcFVcYXUU7m4QlKYim1rUtg83xm2yjZ40QjDuc291AJjjeSc9b++AWHSgSHw==", "license": "MIT", "dependencies": { "bytes": "^3.1.2", "content-type": "^1.0.5", - "debug": "^4.4.0", + "debug": "^4.4.3", "http-errors": "^2.0.0", - "iconv-lite": "^0.6.3", + "iconv-lite": "^0.7.0", "on-finished": "^2.4.1", "qs": "^6.14.0", - "raw-body": "^3.0.0", - "type-is": "^2.0.0" + "raw-body": "^3.0.1", + "type-is": "^2.0.1" }, "engines": { "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/brace-expansion": { @@ -1967,6 +2279,65 @@ "node": ">= 0.8" } }, + "node_modules/c12": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/c12/-/c12-3.1.0.tgz", + "integrity": "sha512-uWoS8OU1MEIsOv8p/5a82c3H31LsWVR5qiyXVfBNOzfffjUWtPnhAb4BYI2uG2HfGmZmFjCtui5XNWaps+iFuw==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "chokidar": "^4.0.3", + "confbox": "^0.2.2", + "defu": "^6.1.4", + "dotenv": "^16.6.1", + "exsolve": "^1.0.7", + "giget": "^2.0.0", + "jiti": "^2.4.2", + "ohash": "^2.0.11", + "pathe": "^2.0.3", + "perfect-debounce": "^1.0.0", + "pkg-types": "^2.2.0", + "rc9": "^2.1.2" + }, + "peerDependencies": { + "magicast": "^0.3.5" + }, + "peerDependenciesMeta": { + "magicast": { + "optional": true + } + } + }, + "node_modules/c12/node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/c12/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==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/call-bind-apply-helpers": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", @@ -2023,6 +2394,21 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/chevrotain": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/chevrotain/-/chevrotain-10.5.0.tgz", + "integrity": "sha512-Pkv5rBY3+CsHOYfV5g/Vs5JY9WTHHDEKOlohI2XeygaZhUeqhAlldZ8Hz9cRmxu709bvS08YzxHdTPHhffc13A==", + "devOptional": true, + "license": "Apache-2.0", + "dependencies": { + "@chevrotain/cst-dts-gen": "10.5.0", + "@chevrotain/gast": "10.5.0", + "@chevrotain/types": "10.5.0", + "@chevrotain/utils": "10.5.0", + "lodash": "4.17.21", + "regexp-to-ast": "0.5.0" + } + }, "node_modules/chokidar": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", @@ -2061,6 +2447,16 @@ "node": ">= 6" } }, + "node_modules/citty": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/citty/-/citty-0.1.6.tgz", + "integrity": "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "consola": "^3.2.3" + } + }, "node_modules/cjs-module-lexer": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-2.1.1.tgz", @@ -2102,6 +2498,23 @@ "dev": true, "license": "MIT" }, + "node_modules/confbox": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.2.2.tgz", + "integrity": "sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==", + "devOptional": 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==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, "node_modules/content-disposition": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.0.tgz", @@ -2145,7 +2558,7 @@ "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "path-key": "^3.1.0", @@ -2156,6 +2569,14 @@ "node": ">= 8" } }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "devOptional": true, + "license": "MIT", + "peer": true + }, "node_modules/debug": { "version": "4.4.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", @@ -2190,6 +2611,23 @@ "node": ">=0.10.0" } }, + "node_modules/deepmerge-ts": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/deepmerge-ts/-/deepmerge-ts-7.1.5.tgz", + "integrity": "sha512-HOJkrhaYsweh+W+e74Yn7YStZOilkoPb6fycpwNLKzSPtruFs48nYis0zy5yJz1+ktUhHxoRDJ27RQAWLIJVJw==", + "devOptional": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/defu": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", + "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", + "devOptional": true, + "license": "MIT" + }, "node_modules/delay": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/delay/-/delay-5.0.0.tgz", @@ -2202,6 +2640,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/denque": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", + "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==", + "devOptional": true, + "license": "Apache-2.0", + "engines": { + "node": ">=0.10" + } + }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -2211,6 +2659,26 @@ "node": ">= 0.8" } }, + "node_modules/destr": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.5.tgz", + "integrity": "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/dotenv": { + "version": "16.6.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", + "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", + "devOptional": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, "node_modules/dunder-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", @@ -2231,6 +2699,27 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", "license": "MIT" }, + "node_modules/effect": { + "version": "3.18.4", + "resolved": "https://registry.npmjs.org/effect/-/effect-3.18.4.tgz", + "integrity": "sha512-b1LXQJLe9D11wfnOKAk3PKxuqYshQ0Heez+y5pnkd3jLj1yx9QhM72zZ9uUrOQyNvrs2GZZd/3maL0ZV18YuDA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@standard-schema/spec": "^1.0.0", + "fast-check": "^3.23.1" + } + }, + "node_modules/empathic": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/empathic/-/empathic-2.0.0.tgz", + "integrity": "sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=14" + } + }, "node_modules/encodeurl": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", @@ -2590,6 +3079,36 @@ "prom-client": ">=15.0.0" } }, + "node_modules/exsolve": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.8.tgz", + "integrity": "sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/fast-check": { + "version": "3.23.2", + "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-3.23.2.tgz", + "integrity": "sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A==", + "devOptional": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ], + "license": "MIT", + "dependencies": { + "pure-rand": "^6.1.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/fast-content-type-parse": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-1.1.0.tgz", @@ -2891,6 +3410,23 @@ "dev": true, "license": "ISC" }, + "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==", + "devOptional": true, + "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/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -2932,6 +3468,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/generate-function": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", + "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "is-property": "^1.0.2" + } + }, "node_modules/get-intrinsic": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", @@ -2956,6 +3502,13 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-port-please": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/get-port-please/-/get-port-please-3.1.2.tgz", + "integrity": "sha512-Gxc29eLs1fbn6LQ4jSU4vXjlwyZhF5HsGuMAa7gqBP4Rw4yxxltyDUuF5MBclFzDTXO+ACchGQoeela4DSfzdQ==", + "devOptional": true, + "license": "MIT" + }, "node_modules/get-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", @@ -2981,6 +3534,24 @@ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } }, + "node_modules/giget": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/giget/-/giget-2.0.0.tgz", + "integrity": "sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "citty": "^0.1.6", + "consola": "^3.4.0", + "defu": "^6.1.4", + "node-fetch-native": "^1.6.6", + "nypm": "^0.6.0", + "pathe": "^2.0.3" + }, + "bin": { + "giget": "dist/cli.mjs" + } + }, "node_modules/glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", @@ -3019,6 +3590,20 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "devOptional": true, + "license": "ISC" + }, + "node_modules/grammex": { + "version": "3.1.11", + "resolved": "https://registry.npmjs.org/grammex/-/grammex-3.1.11.tgz", + "integrity": "sha512-HNwLkgRg9SqTAd1N3Uh/MnKwTBTzwBxTOPbXQ8pb0tpwydjk90k4zRE8JUn9fMUiRwKtXFZ1TWFmms3dZHN+Fg==", + "devOptional": true, + "license": "MIT" + }, "node_modules/graphemer": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", @@ -3069,6 +3654,16 @@ "node": ">=18.0.0" } }, + "node_modules/hono": { + "version": "4.10.7", + "resolved": "https://registry.npmjs.org/hono/-/hono-4.10.7.tgz", + "integrity": "sha512-icXIITfw/07Q88nLSkB9aiUrd8rYzSweK681Kjo/TSggaGbOX4RRyxxm71v+3PC8C/j+4rlxGeoTRxQDkaJkUw==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=16.9.0" + } + }, "node_modules/http-errors": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", @@ -3094,16 +3689,27 @@ "node": ">= 0.8" } }, + "node_modules/http-status-codes": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/http-status-codes/-/http-status-codes-2.3.0.tgz", + "integrity": "sha512-RJ8XvFvpPM/Dmc5SV+dC4y5PCeOhT3x1Hq0NU3rjGeg5a/CqlhZ7uudknPwZFz4aeAXDcbAyaeP7GAo9lvngtA==", + "devOptional": true, + "license": "MIT" + }, "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz", + "integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==", "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/ignore": { @@ -3240,6 +3846,13 @@ "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", "license": "MIT" }, + "node_modules/is-property": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==", + "devOptional": true, + "license": "MIT" + }, "node_modules/is-reference": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", @@ -3254,9 +3867,19 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, + "devOptional": true, "license": "ISC" }, + "node_modules/jiti": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", + "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", + "devOptional": true, + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, "node_modules/js-yaml": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", @@ -3350,6 +3973,16 @@ "node": ">=18" } }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -3366,6 +3999,13 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "devOptional": true, + "license": "MIT" + }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -3373,6 +4013,39 @@ "dev": true, "license": "MIT" }, + "node_modules/long": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", + "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", + "devOptional": true, + "license": "Apache-2.0" + }, + "node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "devOptional": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/lru.min": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/lru.min/-/lru.min-1.1.3.tgz", + "integrity": "sha512-Lkk/vx6ak3rYkRR0Nhu4lFUT2VDnQSxBe8Hbl7f36358p6ow8Bnvr8lrLt98H8J1aGxfhbX4Fs5tYg2+FTwr5Q==", + "devOptional": true, + "license": "MIT", + "engines": { + "bun": ">=1.0.0", + "deno": ">=1.30.0", + "node": ">=8.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wellwelwel" + } + }, "node_modules/magic-string": { "version": "0.30.21", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", @@ -3477,6 +4150,40 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "license": "MIT" }, + "node_modules/mysql2": { + "version": "3.15.3", + "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.15.3.tgz", + "integrity": "sha512-FBrGau0IXmuqg4haEZRBfHNWB5mUARw6hNwPDXXGg0XzVJ50mr/9hb267lvpVMnhZ1FON3qNd4Xfcez1rbFwSg==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "aws-ssl-profiles": "^1.1.1", + "denque": "^2.1.0", + "generate-function": "^2.3.1", + "iconv-lite": "^0.7.0", + "long": "^5.2.1", + "lru.min": "^1.0.0", + "named-placeholders": "^1.1.3", + "seq-queue": "^0.0.5", + "sqlstring": "^2.3.2" + }, + "engines": { + "node": ">= 8.0" + } + }, + "node_modules/named-placeholders": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.3.tgz", + "integrity": "sha512-eLoBxg6wE/rZkJPhU/xRX1WTpkFEwDJEN96oxFrTsqBdbT5ec295Q+CoHrL9IT0DipqKhmGcaZmwOt8OON5x1w==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "lru-cache": "^7.14.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -3493,6 +4200,13 @@ "node": ">= 0.6" } }, + "node_modules/node-fetch-native": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.7.tgz", + "integrity": "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==", + "devOptional": true, + "license": "MIT" + }, "node_modules/nodemon": { "version": "3.1.11", "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.11.tgz", @@ -3555,6 +4269,26 @@ "node": ">=0.10.0" } }, + "node_modules/nypm": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/nypm/-/nypm-0.6.2.tgz", + "integrity": "sha512-7eM+hpOtrKrBDCh7Ypu2lJ9Z7PNZBdi/8AT3AX8xoCj43BBVHD0hPSTEvMtkMpfs8FCqBGhxB+uToIQimA111g==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "citty": "^0.1.6", + "consola": "^3.4.2", + "pathe": "^2.0.3", + "pkg-types": "^2.3.0", + "tinyexec": "^1.0.1" + }, + "bin": { + "nypm": "dist/cli.mjs" + }, + "engines": { + "node": "^14.16.0 || >=16.10.0" + } + }, "node_modules/object-inspect": { "version": "1.13.4", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", @@ -3567,6 +4301,13 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/ohash": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/ohash/-/ohash-2.0.11.tgz", + "integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==", + "devOptional": true, + "license": "MIT" + }, "node_modules/on-exit-leak-free": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz", @@ -3683,7 +4424,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=8" @@ -3706,109 +4447,770 @@ "url": "https://opencollective.com/express" } }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/perfect-debounce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", + "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/pg": { + "version": "8.16.3", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.16.3.tgz", + "integrity": "sha512-enxc1h0jA/aq5oSDMvqyW3q89ra6XIIDZgCX9vkMrnz5DFTw/Ny3Li2lFQ+pt3L6MCgm/5o2o8HW9hiJji+xvw==", + "license": "MIT", + "dependencies": { + "pg-connection-string": "^2.9.1", + "pg-pool": "^3.10.1", + "pg-protocol": "^1.10.3", + "pg-types": "2.2.0", + "pgpass": "1.0.5" + }, + "engines": { + "node": ">= 16.0.0" + }, + "optionalDependencies": { + "pg-cloudflare": "^1.2.7" + }, + "peerDependencies": { + "pg-native": ">=3.0.1" + }, + "peerDependenciesMeta": { + "pg-native": { + "optional": true + } + } + }, + "node_modules/pg-cloudflare": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.2.7.tgz", + "integrity": "sha512-YgCtzMH0ptvZJslLM1ffsY4EuGaU0cx4XSdXLRFae8bPP4dS5xL1tNB3k2o/N64cHJpwU7dxKli/nZ2lUa5fLg==", + "license": "MIT", + "optional": true + }, + "node_modules/pg-connection-string": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.9.1.tgz", + "integrity": "sha512-nkc6NpDcvPVpZXxrreI/FOtX3XemeLl8E0qFr6F2Lrm/I8WOnaWNhIPK2Z7OHpw7gh5XJThi6j6ppgNoaT1w4w==", + "license": "MIT" + }, + "node_modules/pg-int8": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", + "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", + "license": "ISC", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/pg-pool": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.10.1.tgz", + "integrity": "sha512-Tu8jMlcX+9d8+QVzKIvM/uJtp07PKr82IUOYEphaWcoBhIYkoHpLXN3qO59nAI11ripznDsEzEv8nUxBVWajGg==", + "license": "MIT", + "peerDependencies": { + "pg": ">=8.0" + } + }, + "node_modules/pg-protocol": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.10.3.tgz", + "integrity": "sha512-6DIBgBQaTKDJyxnXaLiLR8wBpQQcGWuAESkRBX/t6OwA8YsqP+iVSiond2EDy6Y/dsGk8rh/jtax3js5NeV7JQ==", + "license": "MIT" + }, + "node_modules/pg-types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", + "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", + "license": "MIT", + "dependencies": { + "pg-int8": "1.0.1", + "postgres-array": "~2.0.0", + "postgres-bytea": "~1.0.0", + "postgres-date": "~1.0.4", + "postgres-interval": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pg-types/node_modules/postgres-array": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", + "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/pgpass": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz", + "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==", + "license": "MIT", + "dependencies": { + "split2": "^4.1.0" + } + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pino": { + "version": "9.14.0", + "resolved": "https://registry.npmjs.org/pino/-/pino-9.14.0.tgz", + "integrity": "sha512-8OEwKp5juEvb/MjpIc4hjqfgCNysrS94RIOMXYvpYCdm/jglrKEiAYmiumbmGhCvs+IcInsphYDFwqrjr7398w==", + "license": "MIT", + "dependencies": { + "@pinojs/redact": "^0.4.0", + "atomic-sleep": "^1.0.0", + "on-exit-leak-free": "^2.1.0", + "pino-abstract-transport": "^2.0.0", + "pino-std-serializers": "^7.0.0", + "process-warning": "^5.0.0", + "quick-format-unescaped": "^4.0.3", + "real-require": "^0.2.0", + "safe-stable-stringify": "^2.3.1", + "sonic-boom": "^4.0.1", + "thread-stream": "^3.0.0" + }, + "bin": { + "pino": "bin.js" + } + }, + "node_modules/pino-abstract-transport": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-2.0.0.tgz", + "integrity": "sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==", + "license": "MIT", + "dependencies": { + "split2": "^4.0.0" + } + }, + "node_modules/pino-std-serializers": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.0.0.tgz", + "integrity": "sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==", + "license": "MIT" + }, + "node_modules/pino/node_modules/process-warning": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-5.0.0.tgz", + "integrity": "sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT" + }, + "node_modules/pkg-types": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.3.0.tgz", + "integrity": "sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "confbox": "^0.2.2", + "exsolve": "^1.0.7", + "pathe": "^2.0.3" + } + }, + "node_modules/pkgroll": { + "version": "2.21.3", + "resolved": "https://registry.npmjs.org/pkgroll/-/pkgroll-2.21.3.tgz", + "integrity": "sha512-cbvrfkyGTNn/U+RAk16SirVp6UxT4Cqv2tuQP7VlEGDCwOFTiLX1soMo+40S5F0h3R0Ml4QL3flZ/PQoApwOSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/plugin-alias": "^6.0.0", + "@rollup/plugin-commonjs": "^29.0.0", + "@rollup/plugin-dynamic-import-vars": "^2.1.5", + "@rollup/plugin-inject": "^5.0.5", + "@rollup/plugin-json": "^6.1.0", + "@rollup/plugin-node-resolve": "^16.0.3", + "@rollup/pluginutils": "^5.3.0", + "cjs-module-lexer": "^2.1.1", + "esbuild": "^0.26.0", + "magic-string": "^0.30.21", + "rollup": "^4.53.1", + "rollup-pluginutils": "^2.8.2", + "yaml": "^2.8.1" + }, + "bin": { + "pkgroll": "dist/cli.mjs" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/privatenumber/pkgroll?sponsor=1" + }, + "peerDependencies": { + "typescript": "^4.1 || ^5.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/pkgroll/node_modules/@esbuild/aix-ppc64": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.26.0.tgz", + "integrity": "sha512-hj0sKNCQOOo2fgyII3clmJXP28VhgDfU5iy3GNHlWO76KG6N7x4D9ezH5lJtQTG+1J6MFDAJXC1qsI+W+LvZoA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/pkgroll/node_modules/@esbuild/android-arm": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.26.0.tgz", + "integrity": "sha512-C0hkDsYNHZkBtPxxDx177JN90/1MiCpvBNjz1f5yWJo1+5+c5zr8apjastpEG+wtPjo9FFtGG7owSsAxyKiHxA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/pkgroll/node_modules/@esbuild/android-arm64": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.26.0.tgz", + "integrity": "sha512-DDnoJ5eoa13L8zPh87PUlRd/IyFaIKOlRbxiwcSbeumcJ7UZKdtuMCHa1Q27LWQggug6W4m28i4/O2qiQQ5NZQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/pkgroll/node_modules/@esbuild/android-x64": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.26.0.tgz", + "integrity": "sha512-bKDkGXGZnj0T70cRpgmv549x38Vr2O3UWLbjT2qmIkdIWcmlg8yebcFWoT9Dku7b5OV3UqPEuNKRzlNhjwUJ9A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/pkgroll/node_modules/@esbuild/darwin-arm64": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.26.0.tgz", + "integrity": "sha512-6Z3naJgOuAIB0RLlJkYc81An3rTlQ/IeRdrU3dOea8h/PvZSgitZV+thNuIccw0MuK1GmIAnAmd5TrMZad8FTQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/pkgroll/node_modules/@esbuild/darwin-x64": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.26.0.tgz", + "integrity": "sha512-OPnYj0zpYW0tHusMefyaMvNYQX5pNQuSsHFTHUBNp3vVXupwqpxofcjVsUx11CQhGVkGeXjC3WLjh91hgBG2xw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/pkgroll/node_modules/@esbuild/freebsd-arm64": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.26.0.tgz", + "integrity": "sha512-jix2fa6GQeZhO1sCKNaNMjfj5hbOvoL2F5t+w6gEPxALumkpOV/wq7oUBMHBn2hY2dOm+mEV/K+xfZy3mrsxNQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/pkgroll/node_modules/@esbuild/freebsd-x64": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.26.0.tgz", + "integrity": "sha512-tccJaH5xHJD/239LjbVvJwf6T4kSzbk6wPFerF0uwWlkw/u7HL+wnAzAH5GB2irGhYemDgiNTp8wJzhAHQ64oA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/pkgroll/node_modules/@esbuild/linux-arm": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.26.0.tgz", + "integrity": "sha512-JY8NyU31SyRmRpuc5W8PQarAx4TvuYbyxbPIpHAZdr/0g4iBr8KwQBS4kiiamGl2f42BBecHusYCsyxi7Kn8UQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/pkgroll/node_modules/@esbuild/linux-arm64": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.26.0.tgz", + "integrity": "sha512-IMJYN7FSkLttYyTbsbme0Ra14cBO5z47kpamo16IwggzzATFY2lcZAwkbcNkWiAduKrTgFJP7fW5cBI7FzcuNQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/pkgroll/node_modules/@esbuild/linux-ia32": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.26.0.tgz", + "integrity": "sha512-XITaGqGVLgk8WOHw8We9Z1L0lbLFip8LyQzKYFKO4zFo1PFaaSKsbNjvkb7O8kEXytmSGRkYpE8LLVpPJpsSlw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/pkgroll/node_modules/@esbuild/linux-loong64": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.26.0.tgz", + "integrity": "sha512-MkggfbDIczStUJwq9wU7gQ7kO33d8j9lWuOCDifN9t47+PeI+9m2QVh51EI/zZQ1spZtFMC1nzBJ+qNGCjJnsg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/pkgroll/node_modules/@esbuild/linux-mips64el": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.26.0.tgz", + "integrity": "sha512-fUYup12HZWAeccNLhQ5HwNBPr4zXCPgUWzEq2Rfw7UwqwfQrFZ0SR/JljaURR8xIh9t+o1lNUFTECUTmaP7yKA==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/pkgroll/node_modules/@esbuild/linux-ppc64": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.26.0.tgz", + "integrity": "sha512-MzRKhM0Ip+//VYwC8tialCiwUQ4G65WfALtJEFyU0GKJzfTYoPBw5XNWf0SLbCUYQbxTKamlVwPmcw4DgZzFxg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/pkgroll/node_modules/@esbuild/linux-riscv64": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.26.0.tgz", + "integrity": "sha512-QhCc32CwI1I4Jrg1enCv292sm3YJprW8WHHlyxJhae/dVs+KRWkbvz2Nynl5HmZDW/m9ZxrXayHzjzVNvQMGQA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/pkgroll/node_modules/@esbuild/linux-s390x": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.26.0.tgz", + "integrity": "sha512-1D6vi6lfI18aNT1aTf2HV+RIlm6fxtlAp8eOJ4mmnbYmZ4boz8zYDar86sIYNh0wmiLJEbW/EocaKAX6Yso2fw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/pkgroll/node_modules/@esbuild/linux-x64": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.26.0.tgz", + "integrity": "sha512-rnDcepj7LjrKFvZkx+WrBv6wECeYACcFjdNPvVPojCPJD8nHpb3pv3AuR9CXgdnjH1O23btICj0rsp0L9wAnHA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/pkgroll/node_modules/@esbuild/netbsd-arm64": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.26.0.tgz", + "integrity": "sha512-FSWmgGp0mDNjEXXFcsf12BmVrb+sZBBBlyh3LwB/B9ac3Kkc8x5D2WimYW9N7SUkolui8JzVnVlWh7ZmjCpnxw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/pkgroll/node_modules/@esbuild/netbsd-x64": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.26.0.tgz", + "integrity": "sha512-0QfciUDFryD39QoSPUDshj4uNEjQhp73+3pbSAaxjV2qGOEDsM67P7KbJq7LzHoVl46oqhIhJ1S+skKGR7lMXA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/pkgroll/node_modules/@esbuild/openbsd-arm64": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.26.0.tgz", + "integrity": "sha512-vmAK+nHhIZWImwJ3RNw9hX3fU4UGN/OqbSE0imqljNbUQC3GvVJ1jpwYoTfD6mmXmQaxdJY6Hn4jQbLGJKg5Yw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/pkgroll/node_modules/@esbuild/openbsd-x64": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.26.0.tgz", + "integrity": "sha512-GPXF7RMkJ7o9bTyUsnyNtrFMqgM3X+uM/LWw4CeHIjqc32fm0Ir6jKDnWHpj8xHFstgWDUYseSABK9KCkHGnpg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/pkgroll/node_modules/@esbuild/openharmony-arm64": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.26.0.tgz", + "integrity": "sha512-nUHZ5jEYqbBthbiBksbmHTlbb5eElyVfs/s1iHQ8rLBq1eWsd5maOnDpCocw1OM8kFK747d1Xms8dXJHtduxSw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/pkgroll/node_modules/@esbuild/sunos-x64": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.26.0.tgz", + "integrity": "sha512-TMg3KCTCYYaVO+R6P5mSORhcNDDlemUVnUbb8QkboUtOhb5JWKAzd5uMIMECJQOxHZ/R+N8HHtDF5ylzLfMiLw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/pkgroll/node_modules/@esbuild/win32-arm64": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.26.0.tgz", + "integrity": "sha512-apqYgoAUd6ZCb9Phcs8zN32q6l0ZQzQBdVXOofa6WvHDlSOhwCWgSfVQabGViThS40Y1NA4SCvQickgZMFZRlA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/pkgroll/node_modules/@esbuild/win32-ia32": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.26.0.tgz", + "integrity": "sha512-FGJAcImbJNZzLWu7U6WB0iKHl4RuY4TsXEwxJPl9UZLS47agIZuILZEX3Pagfw7I4J3ddflomt9f0apfaJSbaw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/pkgroll/node_modules/@esbuild/win32-x64": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.26.0.tgz", + "integrity": "sha512-WAckBKaVnmFqbEhbymrPK7M086DQMpL1XoRbpmN0iW8k5JSXjDRQBhcZNa0VweItknLq9eAeCL34jK7/CDcw7A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/pkgroll/node_modules/esbuild": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.26.0.tgz", + "integrity": "sha512-3Hq7jri+tRrVWha+ZeIVhl4qJRha/XjRNSopvTsOaCvfPHrflTYTcUFcEjMKdxofsXXsdc4zjg5NOTnL4Gl57Q==", "dev": true, + "hasInstallScript": true, "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, "engines": { - "node": ">=8.6" + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.26.0", + "@esbuild/android-arm": "0.26.0", + "@esbuild/android-arm64": "0.26.0", + "@esbuild/android-x64": "0.26.0", + "@esbuild/darwin-arm64": "0.26.0", + "@esbuild/darwin-x64": "0.26.0", + "@esbuild/freebsd-arm64": "0.26.0", + "@esbuild/freebsd-x64": "0.26.0", + "@esbuild/linux-arm": "0.26.0", + "@esbuild/linux-arm64": "0.26.0", + "@esbuild/linux-ia32": "0.26.0", + "@esbuild/linux-loong64": "0.26.0", + "@esbuild/linux-mips64el": "0.26.0", + "@esbuild/linux-ppc64": "0.26.0", + "@esbuild/linux-riscv64": "0.26.0", + "@esbuild/linux-s390x": "0.26.0", + "@esbuild/linux-x64": "0.26.0", + "@esbuild/netbsd-arm64": "0.26.0", + "@esbuild/netbsd-x64": "0.26.0", + "@esbuild/openbsd-arm64": "0.26.0", + "@esbuild/openbsd-x64": "0.26.0", + "@esbuild/openharmony-arm64": "0.26.0", + "@esbuild/sunos-x64": "0.26.0", + "@esbuild/win32-arm64": "0.26.0", + "@esbuild/win32-ia32": "0.26.0", + "@esbuild/win32-x64": "0.26.0" + } + }, + "node_modules/postgres": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/postgres/-/postgres-3.4.7.tgz", + "integrity": "sha512-Jtc2612XINuBjIl/QTWsV5UvE8UHuNblcO3vVADSrKsrc6RqGX6lOW1cEo3CM2v0XG4Nat8nI+YM7/f26VxXLw==", + "devOptional": true, + "license": "Unlicense", + "engines": { + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "type": "individual", + "url": "https://github.com/sponsors/porsager" } }, - "node_modules/pino": { - "version": "9.14.0", - "resolved": "https://registry.npmjs.org/pino/-/pino-9.14.0.tgz", - "integrity": "sha512-8OEwKp5juEvb/MjpIc4hjqfgCNysrS94RIOMXYvpYCdm/jglrKEiAYmiumbmGhCvs+IcInsphYDFwqrjr7398w==", + "node_modules/postgres-array": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-3.0.4.tgz", + "integrity": "sha512-nAUSGfSDGOaOAEGwqsRY27GPOea7CNipJPOA7lPbdEpx5Kg3qzdP0AaWC5MlhTWV9s4hFX39nomVZ+C4tnGOJQ==", "license": "MIT", - "dependencies": { - "@pinojs/redact": "^0.4.0", - "atomic-sleep": "^1.0.0", - "on-exit-leak-free": "^2.1.0", - "pino-abstract-transport": "^2.0.0", - "pino-std-serializers": "^7.0.0", - "process-warning": "^5.0.0", - "quick-format-unescaped": "^4.0.3", - "real-require": "^0.2.0", - "safe-stable-stringify": "^2.3.1", - "sonic-boom": "^4.0.1", - "thread-stream": "^3.0.0" - }, - "bin": { - "pino": "bin.js" + "engines": { + "node": ">=12" } }, - "node_modules/pino-abstract-transport": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-2.0.0.tgz", - "integrity": "sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==", + "node_modules/postgres-bytea": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", + "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==", "license": "MIT", - "dependencies": { - "split2": "^4.0.0" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/pino-std-serializers": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.0.0.tgz", - "integrity": "sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==", - "license": "MIT" - }, - "node_modules/pino/node_modules/process-warning": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-5.0.0.tgz", - "integrity": "sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ], - "license": "MIT" + "node_modules/postgres-date": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", + "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/pkgroll": { - "version": "2.20.1", - "resolved": "https://registry.npmjs.org/pkgroll/-/pkgroll-2.20.1.tgz", - "integrity": "sha512-+ljnIUQDxOgceLmtM7P3jj88GGk6P8YMqT/EkwKQXIgnsAX7W4LhcMQXQlWYfDE9Rg08k+57FG1omqaeT8+gew==", - "dev": true, + "node_modules/postgres-interval": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", + "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", "license": "MIT", "dependencies": { - "@rollup/plugin-alias": "^5.1.1", - "@rollup/plugin-commonjs": "^28.0.6", - "@rollup/plugin-dynamic-import-vars": "^2.1.5", - "@rollup/plugin-inject": "^5.0.5", - "@rollup/plugin-json": "^6.1.0", - "@rollup/plugin-node-resolve": "^16.0.1", - "@rollup/pluginutils": "^5.2.0", - "cjs-module-lexer": "^2.1.0", - "esbuild": "^0.25.8", - "magic-string": "^0.30.17", - "rollup": "^4.46.2", - "rollup-pluginutils": "^2.8.2", - "yaml": "^2.8.1" - }, - "bin": { - "pkgroll": "dist/cli.mjs" + "xtend": "^4.0.0" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/privatenumber/pkgroll?sponsor=1" - }, - "peerDependencies": { - "typescript": "^4.1 || ^5.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">=0.10.0" } }, "node_modules/prelude-ls": { @@ -3851,6 +5253,40 @@ "node": ">=6.0.0" } }, + "node_modules/prisma": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/prisma/-/prisma-7.0.1.tgz", + "integrity": "sha512-zp93MdFMSU1IHPEXbUHVUuD8wauh2BUm14OVxhxGrWJQQpXpda0rW4VSST2bci4raoldX64/wQxHKkl/wqDskQ==", + "devOptional": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@prisma/config": "7.0.1", + "@prisma/dev": "0.13.0", + "@prisma/engines": "7.0.1", + "@prisma/studio-core": "0.8.2", + "mysql2": "3.15.3", + "postgres": "3.4.7" + }, + "bin": { + "prisma": "build/index.js" + }, + "engines": { + "node": "^20.19 || ^22.12 || >=24.0" + }, + "peerDependencies": { + "better-sqlite3": ">=9.0.0", + "typescript": ">=5.4.0" + }, + "peerDependenciesMeta": { + "better-sqlite3": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, "node_modules/process-warning": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-3.0.0.tgz", @@ -3871,6 +5307,25 @@ "node": "^16 || ^18 || >=20" } }, + "node_modules/proper-lockfile": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz", + "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "retry": "^0.12.0", + "signal-exit": "^3.0.2" + } + }, + "node_modules/proper-lockfile/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "devOptional": true, + "license": "ISC" + }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -3901,6 +5356,23 @@ "node": ">=6" } }, + "node_modules/pure-rand": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", + "devOptional": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ], + "license": "MIT" + }, "node_modules/qs": { "version": "6.14.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", @@ -3967,20 +5439,40 @@ "node": ">= 0.10" } }, - "node_modules/raw-body/node_modules/iconv-lite": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz", - "integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==", + "node_modules/rc9": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/rc9/-/rc9-2.1.2.tgz", + "integrity": "sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==", + "devOptional": true, "license": "MIT", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, + "defu": "^6.1.4", + "destr": "^2.0.3" + } + }, + "node_modules/react": { + "version": "19.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.0.tgz", + "integrity": "sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==", + "devOptional": true, + "license": "MIT", + "peer": true, "engines": { "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.0.tgz", + "integrity": "sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==", + "devOptional": true, + "license": "MIT", + "peer": true, + "dependencies": { + "scheduler": "^0.27.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "peerDependencies": { + "react": "^19.2.0" } }, "node_modules/readdirp": { @@ -4005,6 +5497,36 @@ "node": ">= 12.13.0" } }, + "node_modules/regexp-to-ast": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/regexp-to-ast/-/regexp-to-ast-0.5.0.tgz", + "integrity": "sha512-tlbJqcMHnPKI9zSrystikWKwHkBqu2a/Sgw01h3zFjvYrMxEDYHzzoMZnUrbIfpTFEsoRnnviOXNCzFiSc54Qw==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/remeda": { + "version": "2.21.3", + "resolved": "https://registry.npmjs.org/remeda/-/remeda-2.21.3.tgz", + "integrity": "sha512-XXrZdLA10oEOQhLLzEJEiFFSKi21REGAkHdImIb4rt/XXy8ORGXh5HCcpUOsElfPNDb+X6TA/+wkh+p2KffYmg==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "type-fest": "^4.39.1" + } + }, + "node_modules/remeda/node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "devOptional": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/require-from-string": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", @@ -4063,6 +5585,16 @@ "node": ">=10" } }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, "node_modules/reusify": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", @@ -4236,6 +5768,14 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "license": "MIT" }, + "node_modules/scheduler": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", + "devOptional": true, + "license": "MIT", + "peer": true + }, "node_modules/secure-json-parse": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz", @@ -4282,6 +5822,12 @@ "node": ">= 18" } }, + "node_modules/seq-queue": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz", + "integrity": "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==", + "devOptional": true + }, "node_modules/serialize-error": { "version": "11.0.3", "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-11.0.3.tgz", @@ -4328,7 +5874,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" @@ -4341,7 +5887,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=8" @@ -4419,6 +5965,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "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==", + "devOptional": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/simple-update-notifier": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", @@ -4450,6 +6009,16 @@ "node": ">= 10.x" } }, + "node_modules/sqlstring": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz", + "integrity": "sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/statuses": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", @@ -4459,6 +6028,13 @@ "node": ">= 0.8" } }, + "node_modules/std-env": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.9.0.tgz", + "integrity": "sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==", + "devOptional": true, + "license": "MIT" + }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -4557,6 +6133,64 @@ "real-require": "^0.2.0" } }, + "node_modules/tinyexec": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.2.tgz", + "integrity": "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "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", @@ -4683,16 +6317,16 @@ } }, "node_modules/typescript-eslint": { - "version": "8.46.4", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.46.4.tgz", - "integrity": "sha512-KALyxkpYV5Ix7UhvjTwJXZv76VWsHG+NjNlt/z+a17SOQSiOcBdUXdbJdyXi7RPxrBFECtFOiPwUJQusJuCqrg==", + "version": "8.48.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.48.0.tgz", + "integrity": "sha512-fcKOvQD9GUn3Xw63EgiDqhvWJ5jsyZUaekl3KVpGsDJnN46WJTe3jWxtQP9lMZm1LJNkFLlTaWAxK2vUQR+cqw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.46.4", - "@typescript-eslint/parser": "8.46.4", - "@typescript-eslint/typescript-estree": "8.46.4", - "@typescript-eslint/utils": "8.46.4" + "@typescript-eslint/eslint-plugin": "8.48.0", + "@typescript-eslint/parser": "8.48.0", + "@typescript-eslint/typescript-estree": "8.48.0", + "@typescript-eslint/utils": "8.48.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -4747,6 +6381,21 @@ "node": ">=6.0.0" } }, + "node_modules/valibot": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/valibot/-/valibot-1.2.0.tgz", + "integrity": "sha512-mm1rxUsmOxzrwnX5arGS+U4T25RdvpPjPN4yR0u9pUBov9+zGVtO84tif1eY4r6zWxVxu3KzIyknJy3rxfRZZg==", + "devOptional": true, + "license": "MIT", + "peerDependencies": { + "typescript": ">=5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -4760,7 +6409,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, + "devOptional": true, "license": "ISC", "dependencies": { "isexe": "^2.0.0" @@ -4788,6 +6437,15 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "license": "ISC" }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "license": "MIT", + "engines": { + "node": ">=0.4" + } + }, "node_modules/yaml": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.1.tgz", @@ -4812,6 +6470,16 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } + }, + "node_modules/zeptomatch": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/zeptomatch/-/zeptomatch-2.0.2.tgz", + "integrity": "sha512-H33jtSKf8Ijtb5BW6wua3G5DhnFjbFML36eFu+VdOoVY4HD9e7ggjqdM6639B+L87rjnR6Y+XeRzBXZdy52B/g==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "grammex": "^3.1.10" + } } } } diff --git a/package.json b/package.json index 336d877c..25f6b3d0 100644 --- a/package.json +++ b/package.json @@ -18,18 +18,26 @@ "test": "tsx --test 'test/**.test.ts' 'src/**.test.ts'", "ci-test": "tsx --test 'test/**.test.ts' 'src/**.test.ts'" }, + "overrides": { + "hono": "^4.10.3", + "valibot": "^1.2.0", + "body-parser": "^2.2.1" + }, "devDependencies": { - "@eslint/js": "^9.38.0", + "@eslint/js": "^9.39.1", "@types/express": "^5.0.5", - "@types/node": "^24.9.2", + "@types/node": "^24.10.1", "@types/swagger-ui-express": "^4.1.8", - "eslint": "^9.38.0", + "eslint": "^9.39.1", "eslint-plugin-prettier": "^5.5.4", - "nodemon": "^3.1.10", - "pkgroll": "^2.20.1", - "typescript-eslint": "^8.46.2" + "nodemon": "^3.1.11", + "pkgroll": "^2.21.3", + "prisma": "^7.0.1", + "typescript-eslint": "^8.48.0" }, "dependencies": { + "@prisma/adapter-pg": "^7.0.1", + "@prisma/client": "^7.0.1", "express": "^5.1.0", "express-prom-bundle": "^8.0.0", "helmet": "^8.1.0", @@ -39,4 +47,4 @@ "typescript": "^5.9.3", "yaml": "^2.8.1" } -} +} \ No newline at end of file diff --git a/prisma.config.ts b/prisma.config.ts new file mode 100644 index 00000000..f7f20d10 --- /dev/null +++ b/prisma.config.ts @@ -0,0 +1,16 @@ +import 'dotenv/config' +import { defineConfig, env } from 'prisma/config' + +type Env = { + NAIS_DATABASE_MYAPP_MYDB_URL: string +} + +export default defineConfig({ + schema: 'prisma/schema.prisma', + migrations: { + path: 'prisma/migrations', + }, + datasource: { + url: env('NAIS_DATABASE_MYAPP_MYDB_URL'), + }, +}) diff --git a/prisma/migrations/0_init/migration.sql b/prisma/migrations/0_init/migration.sql new file mode 100644 index 00000000..5eec5e23 --- /dev/null +++ b/prisma/migrations/0_init/migration.sql @@ -0,0 +1,178 @@ +-- CreateTable +CREATE TABLE "FREKVENS" ( + "id" DECIMAL(19,0) NOT NULL, + "version" DECIMAL(19,0) NOT NULL, + "navn" VARCHAR(50) NOT NULL, + "kode" VARCHAR(50) NOT NULL, + + CONSTRAINT "sys_c0023870" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "KALENDER_DATO" ( + "id" DECIMAL(19,0) NOT NULL, + "version" DECIMAL(19,0) NOT NULL, + "kommentar" VARCHAR(255) NOT NULL, + "dag" TIMESTAMP(6) NOT NULL, + + CONSTRAINT "sys_c0023875" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "KONTAKT" ( + "id" DECIMAL(19,0) NOT NULL, + "version" DECIMAL(19,0) NOT NULL, + "initialer" VARCHAR(3), + "mobil" VARCHAR(30), + "navn" VARCHAR(130) NOT NULL, + "last_updated" TIMESTAMP(6) NOT NULL, + "telefon" VARCHAR(30), + "epost" VARCHAR(100) NOT NULL, + "date_created" TIMESTAMP(6) NOT NULL, + "inaktiv" DECIMAL(1,0), + "navn_en" VARCHAR(130), + + CONSTRAINT "sys_c0023890" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "KORTNAVN" ( + "id" DECIMAL(19,0) NOT NULL, + "version" DECIMAL(19,0) NOT NULL, + "navn" VARCHAR(20) NOT NULL, + "last_updated" TIMESTAMP(6) NOT NULL, + "date_created" TIMESTAMP(6) NOT NULL, + + CONSTRAINT "sys_c0023896" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "PUBLISERING" ( + "id" DECIMAL(19,0) NOT NULL, + "version" DECIMAL(19,0) NOT NULL, + "tidspunkt" TIMESTAMP(6) NOT NULL, + "er_endret" DECIMAL(1,0) NOT NULL, + "last_updated" TIMESTAMP(6) NOT NULL, + "intern_kommentar" VARCHAR(255) NOT NULL, + "periode_til" TIMESTAMP(6) NOT NULL, + "desk_flyt" VARCHAR(255), + "variant_id" DECIMAL(19,0) NOT NULL, + "periode_fra" TIMESTAMP(6) NOT NULL, + "er_avlyst" DECIMAL(1,0) NOT NULL, + "date_created" TIMESTAMP(6) NOT NULL, + "datotype" VARCHAR(255) NOT NULL, + "import_flag" DECIMAL(1,0), + + CONSTRAINT "sys_c0023910" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "REGIONALT_NIVA" ( + "id" DECIMAL(19,0) NOT NULL, + "version" DECIMAL(19,0) NOT NULL, + "navn" VARCHAR(40) NOT NULL, + "kode" VARCHAR(50), + + CONSTRAINT "sys_c0023916" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "SEKSJON" ( + "id" DECIMAL(19,0) NOT NULL, + "version" DECIMAL(19,0) NOT NULL, + "navn" VARCHAR(100) NOT NULL, + "kode" VARCHAR(3) NOT NULL, + "navn_en" VARCHAR(100) NOT NULL, + + CONSTRAINT "sys_c0023922" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "STATISTIKK" ( + "id" DECIMAL(19,0) NOT NULL, + "version" DECIMAL(19,0) NOT NULL, + "kortnavn_id" DECIMAL(19,0) NOT NULL, + "dir_flyt" VARCHAR(255), + "triggerord" VARCHAR(500), + "prioritet" DECIMAL(1,0) NOT NULL, + "desk_flyt" VARCHAR(255), + "sprak" VARCHAR(255) NOT NULL, + "triggerord_en" VARCHAR(500), + "eierseksjon_id" DECIMAL(19,0) NOT NULL, + "forstegangspublisering" TIMESTAMP(6), + "arsrapportering" DECIMAL(1,0) NOT NULL, + "status" VARCHAR(255) NOT NULL, + "gamle_emnekoder" VARCHAR(255), + "relasjon_id" DECIMAL(19,0), + "statistikknavn" VARCHAR(140) NOT NULL, + "last_updated" TIMESTAMP(6) NOT NULL, + "intern_kommentar" VARCHAR(255) NOT NULL, + "statistikknavn_en" VARCHAR(140), + "date_created" TIMESTAMP(6) NOT NULL, + + CONSTRAINT "sys_c0023938" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "STATISTIKK_KONTAKTER" ( + "statistikk_id" DECIMAL(19,0) NOT NULL, + "kontakt_id" DECIMAL(19,0) NOT NULL, + "kontakter_idx" DECIMAL(10,0), + + CONSTRAINT "sys_c0023946" PRIMARY KEY ("statistikk_id","kontakt_id") +); + +-- CreateTable +CREATE TABLE "STATISTIKK_REGIONALE_NIVAER" ( + "regionalt_niva_id" DECIMAL(19,0) NOT NULL, + "statistikk_id" DECIMAL(19,0) NOT NULL, + + CONSTRAINT "sys_c0023949" PRIMARY KEY ("statistikk_id","regionalt_niva_id") +); + +-- CreateTable +CREATE TABLE "VARIANT" ( + "id" DECIMAL(19,0) NOT NULL, + "version" DECIMAL(19,0) NOT NULL, + "frekvens_id" DECIMAL(19,0) NOT NULL, + "last_updated" TIMESTAMP(6) NOT NULL, + "revisjon" VARCHAR(255) NOT NULL, + "statistikk_id" DECIMAL(19,0) NOT NULL, + "detaljniva_en" VARCHAR(255), + "detaljniva" VARCHAR(255), + "er_opphort" DECIMAL(1,0) NOT NULL, + "date_created" TIMESTAMP(6) NOT NULL, + + CONSTRAINT "sys_c0023958" PRIMARY KEY ("id") +); + +-- AddForeignKey +ALTER TABLE "PUBLISERING" ADD CONSTRAINT "fkdb40a13c44a06f71" FOREIGN KEY ("variant_id") REFERENCES "VARIANT"("id") ON DELETE NO ACTION ON UPDATE NO ACTION; + +-- AddForeignKey +ALTER TABLE "STATISTIKK" ADD CONSTRAINT "fkfa5cb2137008a78" FOREIGN KEY ("relasjon_id") REFERENCES "STATISTIKK"("id") ON DELETE NO ACTION ON UPDATE NO ACTION; + +-- AddForeignKey +ALTER TABLE "STATISTIKK" ADD CONSTRAINT "fkfa5cb213b101b242" FOREIGN KEY ("eierseksjon_id") REFERENCES "SEKSJON"("id") ON DELETE NO ACTION ON UPDATE NO ACTION; + +-- AddForeignKey +ALTER TABLE "STATISTIKK" ADD CONSTRAINT "fkfa5cb213c47ad723" FOREIGN KEY ("kortnavn_id") REFERENCES "KORTNAVN"("id") ON DELETE NO ACTION ON UPDATE NO ACTION; + +-- AddForeignKey +ALTER TABLE "STATISTIKK_KONTAKTER" ADD CONSTRAINT "fkf98634a159382591" FOREIGN KEY ("kontakt_id") REFERENCES "KONTAKT"("id") ON DELETE NO ACTION ON UPDATE NO ACTION; + +-- AddForeignKey +ALTER TABLE "STATISTIKK_KONTAKTER" ADD CONSTRAINT "fkf98634a1d978a9a3" FOREIGN KEY ("statistikk_id") REFERENCES "STATISTIKK"("id") ON DELETE NO ACTION ON UPDATE NO ACTION; + +-- AddForeignKey +ALTER TABLE "STATISTIKK_REGIONALE_NIVAER" ADD CONSTRAINT "fke4b2f5b83078425c" FOREIGN KEY ("regionalt_niva_id") REFERENCES "REGIONALT_NIVA"("id") ON DELETE NO ACTION ON UPDATE NO ACTION; + +-- AddForeignKey +ALTER TABLE "STATISTIKK_REGIONALE_NIVAER" ADD CONSTRAINT "fke4b2f5b8d978a9a3" FOREIGN KEY ("statistikk_id") REFERENCES "STATISTIKK"("id") ON DELETE NO ACTION ON UPDATE NO ACTION; + +-- AddForeignKey +ALTER TABLE "VARIANT" ADD CONSTRAINT "fke1d1085b8b4eb03" FOREIGN KEY ("frekvens_id") REFERENCES "FREKVENS"("id") ON DELETE NO ACTION ON UPDATE NO ACTION; + +-- AddForeignKey +ALTER TABLE "VARIANT" ADD CONSTRAINT "fke1d1085d978a9a3" FOREIGN KEY ("statistikk_id") REFERENCES "STATISTIKK"("id") ON DELETE NO ACTION ON UPDATE NO ACTION; + diff --git a/prisma/migrations/20251113122754_rename_tables/migration.sql b/prisma/migrations/20251113122754_rename_tables/migration.sql new file mode 100644 index 00000000..63756997 --- /dev/null +++ b/prisma/migrations/20251113122754_rename_tables/migration.sql @@ -0,0 +1,256 @@ +/* + Warnings: + + - You are about to drop the `FREKVENS` table. If the table is not empty, all the data it contains will be lost. + - You are about to drop the `KALENDER_DATO` table. If the table is not empty, all the data it contains will be lost. + - You are about to drop the `KONTAKT` table. If the table is not empty, all the data it contains will be lost. + - You are about to drop the `KORTNAVN` table. If the table is not empty, all the data it contains will be lost. + - You are about to drop the `PUBLISERING` table. If the table is not empty, all the data it contains will be lost. + - You are about to drop the `REGIONALT_NIVA` table. If the table is not empty, all the data it contains will be lost. + - You are about to drop the `SEKSJON` table. If the table is not empty, all the data it contains will be lost. + - You are about to drop the `STATISTIKK` table. If the table is not empty, all the data it contains will be lost. + - You are about to drop the `STATISTIKK_KONTAKTER` table. If the table is not empty, all the data it contains will be lost. + - You are about to drop the `STATISTIKK_REGIONALE_NIVAER` table. If the table is not empty, all the data it contains will be lost. + - You are about to drop the `VARIANT` table. If the table is not empty, all the data it contains will be lost. + +*/ +-- DropForeignKey +ALTER TABLE "PUBLISERING" DROP CONSTRAINT "fkdb40a13c44a06f71"; + +-- DropForeignKey +ALTER TABLE "STATISTIKK" DROP CONSTRAINT "fkfa5cb2137008a78"; + +-- DropForeignKey +ALTER TABLE "STATISTIKK" DROP CONSTRAINT "fkfa5cb213b101b242"; + +-- DropForeignKey +ALTER TABLE "STATISTIKK" DROP CONSTRAINT "fkfa5cb213c47ad723"; + +-- DropForeignKey +ALTER TABLE "STATISTIKK_KONTAKTER" DROP CONSTRAINT "fkf98634a159382591"; + +-- DropForeignKey +ALTER TABLE "STATISTIKK_KONTAKTER" DROP CONSTRAINT "fkf98634a1d978a9a3"; + +-- DropForeignKey +ALTER TABLE "STATISTIKK_REGIONALE_NIVAER" DROP CONSTRAINT "fke4b2f5b83078425c"; + +-- DropForeignKey +ALTER TABLE "STATISTIKK_REGIONALE_NIVAER" DROP CONSTRAINT "fke4b2f5b8d978a9a3"; + +-- DropForeignKey +ALTER TABLE "VARIANT" DROP CONSTRAINT "fke1d1085b8b4eb03"; + +-- DropForeignKey +ALTER TABLE "VARIANT" DROP CONSTRAINT "fke1d1085d978a9a3"; + +-- DropTable +DROP TABLE "FREKVENS"; + +-- DropTable +DROP TABLE "KALENDER_DATO"; + +-- DropTable +DROP TABLE "KONTAKT"; + +-- DropTable +DROP TABLE "KORTNAVN"; + +-- DropTable +DROP TABLE "PUBLISERING"; + +-- DropTable +DROP TABLE "REGIONALT_NIVA"; + +-- DropTable +DROP TABLE "SEKSJON"; + +-- DropTable +DROP TABLE "STATISTIKK"; + +-- DropTable +DROP TABLE "STATISTIKK_KONTAKTER"; + +-- DropTable +DROP TABLE "STATISTIKK_REGIONALE_NIVAER"; + +-- DropTable +DROP TABLE "VARIANT"; + +-- CreateTable +CREATE TABLE "Frekvens" ( + "id" DECIMAL(19,0) NOT NULL, + "version" DECIMAL(19,0) NOT NULL, + "navn" VARCHAR(50) NOT NULL, + "kode" VARCHAR(50) NOT NULL, + + CONSTRAINT "sys_c0023870" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Kalender_dato" ( + "id" DECIMAL(19,0) NOT NULL, + "version" DECIMAL(19,0) NOT NULL, + "kommentar" VARCHAR(255) NOT NULL, + "dag" TIMESTAMP(6) NOT NULL, + + CONSTRAINT "sys_c0023875" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Kontakt" ( + "id" DECIMAL(19,0) NOT NULL, + "version" DECIMAL(19,0) NOT NULL, + "initialer" VARCHAR(3), + "mobil" VARCHAR(30), + "navn" VARCHAR(130) NOT NULL, + "last_updated" TIMESTAMP(6) NOT NULL, + "telefon" VARCHAR(30), + "epost" VARCHAR(100) NOT NULL, + "date_created" TIMESTAMP(6) NOT NULL, + "inaktiv" DECIMAL(1,0), + "navn_en" VARCHAR(130), + + CONSTRAINT "sys_c0023890" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Kortnavn" ( + "id" DECIMAL(19,0) NOT NULL, + "version" DECIMAL(19,0) NOT NULL, + "navn" VARCHAR(20) NOT NULL, + "last_updated" TIMESTAMP(6) NOT NULL, + "date_created" TIMESTAMP(6) NOT NULL, + + CONSTRAINT "sys_c0023896" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Publisering" ( + "id" DECIMAL(19,0) NOT NULL, + "version" DECIMAL(19,0) NOT NULL, + "tidspunkt" TIMESTAMP(6) NOT NULL, + "er_endret" DECIMAL(1,0) NOT NULL, + "last_updated" TIMESTAMP(6) NOT NULL, + "intern_kommentar" VARCHAR(255) NOT NULL, + "periode_til" TIMESTAMP(6) NOT NULL, + "desk_flyt" VARCHAR(255), + "variant_id" DECIMAL(19,0) NOT NULL, + "periode_fra" TIMESTAMP(6) NOT NULL, + "er_avlyst" DECIMAL(1,0) NOT NULL, + "date_created" TIMESTAMP(6) NOT NULL, + "datotype" VARCHAR(255) NOT NULL, + "import_flag" DECIMAL(1,0), + + CONSTRAINT "sys_c0023910" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Regionalt_niva" ( + "id" DECIMAL(19,0) NOT NULL, + "version" DECIMAL(19,0) NOT NULL, + "navn" VARCHAR(40) NOT NULL, + "kode" VARCHAR(50), + + CONSTRAINT "sys_c0023916" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Seksjon" ( + "id" DECIMAL(19,0) NOT NULL, + "version" DECIMAL(19,0) NOT NULL, + "navn" VARCHAR(100) NOT NULL, + "kode" VARCHAR(3) NOT NULL, + "navn_en" VARCHAR(100) NOT NULL, + + CONSTRAINT "sys_c0023922" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Statistikk" ( + "id" DECIMAL(19,0) NOT NULL, + "version" DECIMAL(19,0) NOT NULL, + "kortnavn_id" DECIMAL(19,0) NOT NULL, + "dir_flyt" VARCHAR(255), + "triggerord" VARCHAR(500), + "prioritet" DECIMAL(1,0) NOT NULL, + "desk_flyt" VARCHAR(255), + "sprak" VARCHAR(255) NOT NULL, + "triggerord_en" VARCHAR(500), + "eierseksjon_id" DECIMAL(19,0) NOT NULL, + "forstegangspublisering" TIMESTAMP(6), + "arsrapportering" DECIMAL(1,0) NOT NULL, + "status" VARCHAR(255) NOT NULL, + "gamle_emnekoder" VARCHAR(255), + "relasjon_id" DECIMAL(19,0), + "statistikknavn" VARCHAR(140) NOT NULL, + "last_updated" TIMESTAMP(6) NOT NULL, + "intern_kommentar" VARCHAR(255) NOT NULL, + "statistikknavn_en" VARCHAR(140), + "date_created" TIMESTAMP(6) NOT NULL, + + CONSTRAINT "sys_c0023938" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Statistikk_kontakter" ( + "statistikk_id" DECIMAL(19,0) NOT NULL, + "kontakt_id" DECIMAL(19,0) NOT NULL, + "kontakter_idx" DECIMAL(10,0), + + CONSTRAINT "sys_c0023946" PRIMARY KEY ("statistikk_id","kontakt_id") +); + +-- CreateTable +CREATE TABLE "Statistikk_regionale_nivaer" ( + "regionalt_niva_id" DECIMAL(19,0) NOT NULL, + "statistikk_id" DECIMAL(19,0) NOT NULL, + + CONSTRAINT "sys_c0023949" PRIMARY KEY ("statistikk_id","regionalt_niva_id") +); + +-- CreateTable +CREATE TABLE "Variant" ( + "id" DECIMAL(19,0) NOT NULL, + "version" DECIMAL(19,0) NOT NULL, + "frekvens_id" DECIMAL(19,0) NOT NULL, + "last_updated" TIMESTAMP(6) NOT NULL, + "revisjon" VARCHAR(255) NOT NULL, + "statistikk_id" DECIMAL(19,0) NOT NULL, + "detaljniva_en" VARCHAR(255), + "detaljniva" VARCHAR(255), + "er_opphort" DECIMAL(1,0) NOT NULL, + "date_created" TIMESTAMP(6) NOT NULL, + + CONSTRAINT "sys_c0023958" PRIMARY KEY ("id") +); + +-- AddForeignKey +ALTER TABLE "Publisering" ADD CONSTRAINT "fkdb40a13c44a06f71" FOREIGN KEY ("variant_id") REFERENCES "Variant"("id") ON DELETE NO ACTION ON UPDATE NO ACTION; + +-- AddForeignKey +ALTER TABLE "Statistikk" ADD CONSTRAINT "fkfa5cb2137008a78" FOREIGN KEY ("relasjon_id") REFERENCES "Statistikk"("id") ON DELETE NO ACTION ON UPDATE NO ACTION; + +-- AddForeignKey +ALTER TABLE "Statistikk" ADD CONSTRAINT "fkfa5cb213b101b242" FOREIGN KEY ("eierseksjon_id") REFERENCES "Seksjon"("id") ON DELETE NO ACTION ON UPDATE NO ACTION; + +-- AddForeignKey +ALTER TABLE "Statistikk" ADD CONSTRAINT "fkfa5cb213c47ad723" FOREIGN KEY ("kortnavn_id") REFERENCES "Kortnavn"("id") ON DELETE NO ACTION ON UPDATE NO ACTION; + +-- AddForeignKey +ALTER TABLE "Statistikk_kontakter" ADD CONSTRAINT "fkf98634a159382591" FOREIGN KEY ("kontakt_id") REFERENCES "Kontakt"("id") ON DELETE NO ACTION ON UPDATE NO ACTION; + +-- AddForeignKey +ALTER TABLE "Statistikk_kontakter" ADD CONSTRAINT "fkf98634a1d978a9a3" FOREIGN KEY ("statistikk_id") REFERENCES "Statistikk"("id") ON DELETE NO ACTION ON UPDATE NO ACTION; + +-- AddForeignKey +ALTER TABLE "Statistikk_regionale_nivaer" ADD CONSTRAINT "fke4b2f5b83078425c" FOREIGN KEY ("regionalt_niva_id") REFERENCES "Regionalt_niva"("id") ON DELETE NO ACTION ON UPDATE NO ACTION; + +-- AddForeignKey +ALTER TABLE "Statistikk_regionale_nivaer" ADD CONSTRAINT "fke4b2f5b8d978a9a3" FOREIGN KEY ("statistikk_id") REFERENCES "Statistikk"("id") ON DELETE NO ACTION ON UPDATE NO ACTION; + +-- AddForeignKey +ALTER TABLE "Variant" ADD CONSTRAINT "fke1d1085b8b4eb03" FOREIGN KEY ("frekvens_id") REFERENCES "Frekvens"("id") ON DELETE NO ACTION ON UPDATE NO ACTION; + +-- AddForeignKey +ALTER TABLE "Variant" ADD CONSTRAINT "fke1d1085d978a9a3" FOREIGN KEY ("statistikk_id") REFERENCES "Statistikk"("id") ON DELETE NO ACTION ON UPDATE NO ACTION; diff --git a/prisma/migrations/20251121122858_translate_names/migration.sql b/prisma/migrations/20251121122858_translate_names/migration.sql new file mode 100644 index 00000000..f4c26a7e --- /dev/null +++ b/prisma/migrations/20251121122858_translate_names/migration.sql @@ -0,0 +1,254 @@ +/* + Warnings: + + - You are about to drop the column `er_opphort` on the `Variant` table. All the data in the column will be lost. + - You are about to drop the column `frekvens_id` on the `Variant` table. All the data in the column will be lost. + - You are about to drop the column `revisjon` on the `Variant` table. All the data in the column will be lost. + - You are about to drop the column `statistikk_id` on the `Variant` table. All the data in the column will be lost. + - You are about to drop the `Frekvens` table. If the table is not empty, all the data it contains will be lost. + - You are about to drop the `Kalender_dato` table. If the table is not empty, all the data it contains will be lost. + - You are about to drop the `Kontakt` table. If the table is not empty, all the data it contains will be lost. + - You are about to drop the `Kortnavn` table. If the table is not empty, all the data it contains will be lost. + - You are about to drop the `Publisering` table. If the table is not empty, all the data it contains will be lost. + - You are about to drop the `Regionalt_niva` table. If the table is not empty, all the data it contains will be lost. + - You are about to drop the `Seksjon` table. If the table is not empty, all the data it contains will be lost. + - You are about to drop the `Statistikk` table. If the table is not empty, all the data it contains will be lost. + - You are about to drop the `Statistikk_kontakter` table. If the table is not empty, all the data it contains will be lost. + - You are about to drop the `Statistikk_regionale_nivaer` table. If the table is not empty, all the data it contains will be lost. + - Added the required column `cancelled` to the `Variant` table without a default value. This is not possible if the table is not empty. + - Added the required column `freq_id` to the `Variant` table without a default value. This is not possible if the table is not empty. + - Added the required column `revision` to the `Variant` table without a default value. This is not possible if the table is not empty. + - Added the required column `statistic_id` to the `Variant` table without a default value. This is not possible if the table is not empty. + +*/ +-- DropForeignKey +ALTER TABLE "Publisering" DROP CONSTRAINT "fkdb40a13c44a06f71"; + +-- DropForeignKey +ALTER TABLE "Statistikk" DROP CONSTRAINT "fkfa5cb2137008a78"; + +-- DropForeignKey +ALTER TABLE "Statistikk" DROP CONSTRAINT "fkfa5cb213b101b242"; + +-- DropForeignKey +ALTER TABLE "Statistikk" DROP CONSTRAINT "fkfa5cb213c47ad723"; + +-- DropForeignKey +ALTER TABLE "Statistikk_kontakter" DROP CONSTRAINT "fkf98634a159382591"; + +-- DropForeignKey +ALTER TABLE "Statistikk_kontakter" DROP CONSTRAINT "fkf98634a1d978a9a3"; + +-- DropForeignKey +ALTER TABLE "Statistikk_regionale_nivaer" DROP CONSTRAINT "fke4b2f5b83078425c"; + +-- DropForeignKey +ALTER TABLE "Statistikk_regionale_nivaer" DROP CONSTRAINT "fke4b2f5b8d978a9a3"; + +-- DropForeignKey +ALTER TABLE "Variant" DROP CONSTRAINT "fke1d1085b8b4eb03"; + +-- DropForeignKey +ALTER TABLE "Variant" DROP CONSTRAINT "fke1d1085d978a9a3"; + +-- AlterTable +ALTER TABLE "Variant" DROP COLUMN "er_opphort", +DROP COLUMN "frekvens_id", +DROP COLUMN "revisjon", +DROP COLUMN "statistikk_id", +ADD COLUMN "cancelled" BOOLEAN NOT NULL, +ADD COLUMN "freq_id" DECIMAL(19,0) NOT NULL, +ADD COLUMN "revision" VARCHAR(255) NOT NULL, +ADD COLUMN "statistic_id" DECIMAL(19,0) NOT NULL; + +-- DropTable +DROP TABLE "Frekvens"; + +-- DropTable +DROP TABLE "Kalender_dato"; + +-- DropTable +DROP TABLE "Kontakt"; + +-- DropTable +DROP TABLE "Kortnavn"; + +-- DropTable +DROP TABLE "Publisering"; + +-- DropTable +DROP TABLE "Regionalt_niva"; + +-- DropTable +DROP TABLE "Seksjon"; + +-- DropTable +DROP TABLE "Statistikk"; + +-- DropTable +DROP TABLE "Statistikk_kontakter"; + +-- DropTable +DROP TABLE "Statistikk_regionale_nivaer"; + +-- CreateTable +CREATE TABLE "Frequency" ( + "id" DECIMAL(19,0) NOT NULL, + "version" DECIMAL(19,0) NOT NULL, + "name" VARCHAR(50) NOT NULL, + "code" VARCHAR(50) NOT NULL, + + CONSTRAINT "sys_c0023870" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Calender_date" ( + "id" DECIMAL(19,0) NOT NULL, + "version" DECIMAL(19,0) NOT NULL, + "comment" VARCHAR(255) NOT NULL, + "day" TIMESTAMP(6) NOT NULL, + + CONSTRAINT "sys_c0023875" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Contact" ( + "id" DECIMAL(19,0) NOT NULL, + "version" DECIMAL(19,0) NOT NULL, + "initials" VARCHAR(3), + "mobile" VARCHAR(30), + "name" VARCHAR(130) NOT NULL, + "last_updated" TIMESTAMP(6) NOT NULL, + "phone" VARCHAR(30), + "email" VARCHAR(100) NOT NULL, + "date_created" TIMESTAMP(6) NOT NULL, + "inactiv" BOOLEAN, + "name_en" VARCHAR(130), + + CONSTRAINT "sys_c0023890" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Shortname" ( + "id" DECIMAL(19,0) NOT NULL, + "version" DECIMAL(19,0) NOT NULL, + "name" VARCHAR(20) NOT NULL, + "last_updated" TIMESTAMP(6) NOT NULL, + "date_created" TIMESTAMP(6) NOT NULL, + + CONSTRAINT "sys_c0023896" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Release" ( + "id" DECIMAL(19,0) NOT NULL, + "version" DECIMAL(19,0) NOT NULL, + "publish_time" TIMESTAMP(6) NOT NULL, + "has_versions" BOOLEAN NOT NULL, + "last_updated" TIMESTAMP(6) NOT NULL, + "comment" VARCHAR(255) NOT NULL, + "period_to" TIMESTAMP(6) NOT NULL, + "desk_appoval_status" VARCHAR(255), + "variant_id" DECIMAL(19,0) NOT NULL, + "period_from" TIMESTAMP(6) NOT NULL, + "cancelled" BOOLEAN NOT NULL, + "date_created" TIMESTAMP(6) NOT NULL, + "release_date_precision" VARCHAR(255) NOT NULL, + "import_flag" BOOLEAN, + + CONSTRAINT "sys_c0023910" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Region_level" ( + "id" DECIMAL(19,0) NOT NULL, + "version" DECIMAL(19,0) NOT NULL, + "name" VARCHAR(40) NOT NULL, + "code" VARCHAR(50), + + CONSTRAINT "sys_c0023916" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Division" ( + "id" DECIMAL(19,0) NOT NULL, + "version" DECIMAL(19,0) NOT NULL, + "navn" VARCHAR(100) NOT NULL, + "code" VARCHAR(3) NOT NULL, + "name_en" VARCHAR(100) NOT NULL, + + CONSTRAINT "sys_c0023922" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Statistic" ( + "id" DECIMAL(19,0) NOT NULL, + "version" DECIMAL(19,0) NOT NULL, + "shortname_id" DECIMAL(19,0) NOT NULL, + "dir_appoval_status" VARCHAR(255), + "search_phrases" VARCHAR(500), + "priority" DECIMAL(1,0) NOT NULL, + "desk_appoval_status" VARCHAR(255), + "language" VARCHAR(255) NOT NULL, + "search_phrases_en" VARCHAR(500), + "division_id" DECIMAL(19,0) NOT NULL, + "first_release" TIMESTAMP(6), + "yearly_reporting" BOOLEAN NOT NULL, + "status" VARCHAR(255) NOT NULL, + "previous_topic_codes" VARCHAR(255), + "relation_id" DECIMAL(19,0), + "name" VARCHAR(140) NOT NULL, + "last_updated" TIMESTAMP(6) NOT NULL, + "comment" VARCHAR(255) NOT NULL, + "name_en" VARCHAR(140), + "date_created" TIMESTAMP(6) NOT NULL, + + CONSTRAINT "sys_c0023938" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Statistic_contacts" ( + "statistic_id" DECIMAL(19,0) NOT NULL, + "contact_id" DECIMAL(19,0) NOT NULL, + "contacts_idx" DECIMAL(10,0), + + CONSTRAINT "sys_c0023946" PRIMARY KEY ("statistic_id","contact_id") +); + +-- CreateTable +CREATE TABLE "Statistic_region_level" ( + "region_level_id" DECIMAL(19,0) NOT NULL, + "statistic_id" DECIMAL(19,0) NOT NULL, + + CONSTRAINT "sys_c0023949" PRIMARY KEY ("statistic_id","region_level_id") +); + +-- AddForeignKey +ALTER TABLE "Release" ADD CONSTRAINT "fkdb40a13c44a06f71" FOREIGN KEY ("variant_id") REFERENCES "Variant"("id") ON DELETE NO ACTION ON UPDATE NO ACTION; + +-- AddForeignKey +ALTER TABLE "Statistic" ADD CONSTRAINT "fkfa5cb2137008a78" FOREIGN KEY ("relation_id") REFERENCES "Statistic"("id") ON DELETE NO ACTION ON UPDATE NO ACTION; + +-- AddForeignKey +ALTER TABLE "Statistic" ADD CONSTRAINT "fkfa5cb213b101b242" FOREIGN KEY ("division_id") REFERENCES "Division"("id") ON DELETE NO ACTION ON UPDATE NO ACTION; + +-- AddForeignKey +ALTER TABLE "Statistic" ADD CONSTRAINT "fkfa5cb213c47ad723" FOREIGN KEY ("shortname_id") REFERENCES "Shortname"("id") ON DELETE NO ACTION ON UPDATE NO ACTION; + +-- AddForeignKey +ALTER TABLE "Statistic_contacts" ADD CONSTRAINT "fkf98634a159382591" FOREIGN KEY ("contact_id") REFERENCES "Contact"("id") ON DELETE NO ACTION ON UPDATE NO ACTION; + +-- AddForeignKey +ALTER TABLE "Statistic_contacts" ADD CONSTRAINT "fkf98634a1d978a9a3" FOREIGN KEY ("statistic_id") REFERENCES "Statistic"("id") ON DELETE NO ACTION ON UPDATE NO ACTION; + +-- AddForeignKey +ALTER TABLE "Statistic_region_level" ADD CONSTRAINT "fke4b2f5b83078425c" FOREIGN KEY ("region_level_id") REFERENCES "Region_level"("id") ON DELETE NO ACTION ON UPDATE NO ACTION; + +-- AddForeignKey +ALTER TABLE "Statistic_region_level" ADD CONSTRAINT "fke4b2f5b8d978a9a3" FOREIGN KEY ("statistic_id") REFERENCES "Statistic"("id") ON DELETE NO ACTION ON UPDATE NO ACTION; + +-- AddForeignKey +ALTER TABLE "Variant" ADD CONSTRAINT "fke1d1085b8b4eb03" FOREIGN KEY ("freq_id") REFERENCES "Frequency"("id") ON DELETE NO ACTION ON UPDATE NO ACTION; + +-- AddForeignKey +ALTER TABLE "Variant" ADD CONSTRAINT "fke1d1085d978a9a3" FOREIGN KEY ("statistic_id") REFERENCES "Statistic"("id") ON DELETE NO ACTION ON UPDATE NO ACTION; diff --git a/prisma/migrations/20251127120149_rename_detail_field/migration.sql b/prisma/migrations/20251127120149_rename_detail_field/migration.sql new file mode 100644 index 00000000..0905c147 --- /dev/null +++ b/prisma/migrations/20251127120149_rename_detail_field/migration.sql @@ -0,0 +1,12 @@ +/* + Warnings: + + - You are about to drop the column `detaljniva` on the `Variant` table. All the data in the column will be lost. + - You are about to drop the column `detaljniva_en` on the `Variant` table. All the data in the column will be lost. + +*/ +-- AlterTable +ALTER TABLE "Variant" DROP COLUMN "detaljniva", +DROP COLUMN "detaljniva_en", +ADD COLUMN "level_of_detail" VARCHAR(255), +ADD COLUMN "level_of_detail_en" VARCHAR(255); diff --git a/prisma/migrations/20251128074510_translate_navn_field/migration.sql b/prisma/migrations/20251128074510_translate_navn_field/migration.sql new file mode 100644 index 00000000..f28aeb4e --- /dev/null +++ b/prisma/migrations/20251128074510_translate_navn_field/migration.sql @@ -0,0 +1,10 @@ +/* + Warnings: + + - You are about to drop the column `navn` on the `Division` table. All the data in the column will be lost. + - Added the required column `name` to the `Division` table without a default value. This is not possible if the table is not empty. + +*/ +-- AlterTable +ALTER TABLE "Division" DROP COLUMN "navn", +ADD COLUMN "name" VARCHAR(100) NOT NULL; diff --git a/prisma/migrations/migration_lock.toml b/prisma/migrations/migration_lock.toml new file mode 100644 index 00000000..044d57cd --- /dev/null +++ b/prisma/migrations/migration_lock.toml @@ -0,0 +1,3 @@ +# Please do not edit this file manually +# It should be added in your version-control system (e.g., Git) +provider = "postgresql" diff --git a/prisma/schema.prisma b/prisma/schema.prisma new file mode 100644 index 00000000..ab296016 --- /dev/null +++ b/prisma/schema.prisma @@ -0,0 +1,151 @@ +generator client { + provider = "prisma-client" + output = "../src/generated/prisma" +} + +datasource db { + provider = "postgresql" +} + +model Frequency { + id Decimal @id(map: "sys_c0023870") @db.Decimal(19, 0) + version Decimal @db.Decimal(19, 0) + name String @db.VarChar(50) + code String @db.VarChar(50) + variant Variant[] +} + +model Calender_date { + id Decimal @id(map: "sys_c0023875") @db.Decimal(19, 0) + version Decimal @db.Decimal(19, 0) + comment String @db.VarChar(255) + day DateTime @db.Timestamp(6) +} + +model Contact { + id Decimal @id(map: "sys_c0023890") @db.Decimal(19, 0) + version Decimal @db.Decimal(19, 0) + initials String? @db.VarChar(3) + mobile String? @db.VarChar(30) + name String @db.VarChar(130) + last_updated DateTime @db.Timestamp(6) + phone String? @db.VarChar(30) + email String @db.VarChar(100) + date_created DateTime @db.Timestamp(6) + inactiv Boolean? + name_en String? @db.VarChar(130) + statistic_contacts Statistic_contacts[] +} + +model Shortname { + id Decimal @id(map: "sys_c0023896") @db.Decimal(19, 0) + version Decimal @db.Decimal(19, 0) + name String @db.VarChar(20) + last_updated DateTime @db.Timestamp(6) + date_created DateTime @db.Timestamp(6) + statistics Statistic[] + + @@map("Shortname") +} + +model Release { + id Decimal @id(map: "sys_c0023910") @db.Decimal(19, 0) + version Decimal @db.Decimal(19, 0) + publish_time DateTime @db.Timestamp(6) + has_versions Boolean + last_updated DateTime @db.Timestamp(6) + comment String @db.VarChar(255) + period_to DateTime @db.Timestamp(6) + desk_appoval_status String? @db.VarChar(255) + variant_id Decimal @db.Decimal(19, 0) + period_from DateTime @db.Timestamp(6) + cancelled Boolean + date_created DateTime @db.Timestamp(6) + release_date_precision String @db.VarChar(255) + import_flag Boolean? + variant Variant @relation(fields: [variant_id], references: [id], onDelete: NoAction, onUpdate: NoAction, map: "fkdb40a13c44a06f71") +} + +model Region_level { + id Decimal @id(map: "sys_c0023916") @db.Decimal(19, 0) + version Decimal @db.Decimal(19, 0) + name String @db.VarChar(40) + code String? @db.VarChar(50) + statistic_region_levels Statistic_region_level[] +} + +model Division { + id Decimal @id(map: "sys_c0023922") @db.Decimal(19, 0) + version Decimal @db.Decimal(19, 0) + code String @db.VarChar(3) + name_en String @db.VarChar(100) + name String @db.VarChar(100) + statistics Statistic[] +} + +model Statistic { + id Decimal @id(map: "sys_c0023938") @db.Decimal(19, 0) + version Decimal @db.Decimal(19, 0) + shortname_id Decimal @db.Decimal(19, 0) + dir_appoval_status String? @db.VarChar(255) + search_phrases String? @db.VarChar(500) + priority Decimal @db.Decimal(1, 0) + desk_appoval_status String? @db.VarChar(255) + language String @db.VarChar(255) + search_phrases_en String? @db.VarChar(500) + division_id Decimal @db.Decimal(19, 0) + first_release DateTime? @db.Timestamp(6) + yearly_reporting Boolean + status String @db.VarChar(255) + previous_topic_codes String? @db.VarChar(255) + relation_id Decimal? @db.Decimal(19, 0) + name String @db.VarChar(140) + last_updated DateTime @db.Timestamp(6) + comment String @db.VarChar(255) + name_en String? @db.VarChar(140) + date_created DateTime @db.Timestamp(6) + statistic Statistic? @relation("STATISTICToSTATISTIC", fields: [relation_id], references: [id], onDelete: NoAction, onUpdate: NoAction, map: "fkfa5cb2137008a78") + other_statistics Statistic[] @relation("STATISTICToSTATISTIC") + division Division @relation(fields: [division_id], references: [id], onDelete: NoAction, onUpdate: NoAction, map: "fkfa5cb213b101b242") + shortname Shortname @relation(fields: [shortname_id], references: [id], onDelete: NoAction, onUpdate: NoAction, map: "fkfa5cb213c47ad723") + contacts Statistic_contacts[] + statistic_region_levels Statistic_region_level[] + variants Variant[] + + @@map("Statistic") +} + +model Statistic_contacts { + statistic_id Decimal @db.Decimal(19, 0) + contact_id Decimal @db.Decimal(19, 0) + contacts_idx Decimal? @db.Decimal(10, 0) + contact Contact @relation(fields: [contact_id], references: [id], onDelete: NoAction, onUpdate: NoAction, map: "fkf98634a159382591") + statistic Statistic @relation(fields: [statistic_id], references: [id], onDelete: NoAction, onUpdate: NoAction, map: "fkf98634a1d978a9a3") + + @@id([statistic_id, contact_id], map: "sys_c0023946") +} + +model Statistic_region_level { + region_level_id Decimal @db.Decimal(19, 0) + statistic_id Decimal @db.Decimal(19, 0) + region_level Region_level @relation(fields: [region_level_id], references: [id], onDelete: NoAction, onUpdate: NoAction, map: "fke4b2f5b83078425c") + statistic Statistic @relation(fields: [statistic_id], references: [id], onDelete: NoAction, onUpdate: NoAction, map: "fke4b2f5b8d978a9a3") + + @@id([statistic_id, region_level_id], map: "sys_c0023949") +} + +model Variant { + id Decimal @id(map: "sys_c0023958") @db.Decimal(19, 0) + version Decimal @db.Decimal(19, 0) + last_updated DateTime @db.Timestamp(6) + date_created DateTime @db.Timestamp(6) + cancelled Boolean + freq_id Decimal @db.Decimal(19, 0) + revision String @db.VarChar(255) + statistic_id Decimal @db.Decimal(19, 0) + level_of_detail String? @db.VarChar(255) + level_of_detail_en String? @db.VarChar(255) + releases Release[] + frequency Frequency @relation(fields: [freq_id], references: [id], onDelete: NoAction, onUpdate: NoAction, map: "fke1d1085b8b4eb03") + statistic Statistic @relation(fields: [statistic_id], references: [id], onDelete: NoAction, onUpdate: NoAction, map: "fke1d1085d978a9a3") +} diff --git a/src/main.ts b/src/main.ts index 6858ec1c..3a65ae95 100644 --- a/src/main.ts +++ b/src/main.ts @@ -4,8 +4,18 @@ import promBundle from 'express-prom-bundle' import helmet from 'helmet' import process from 'node:process' import swaggerUi from 'swagger-ui-express' -import fs from 'fs' +import fs from 'node:fs' import YAML from 'yaml' +import * as dotenv from 'dotenv' + +import { PrismaPg } from '@prisma/adapter-pg' +import { PrismaClient } from './generated/prisma/client.js' + +dotenv.config() + +const adapter = new PrismaPg({ + connectionString: process.env.NAIS_DATABASE_MYAPP_MYDB_URL!, +}) const metricsMiddleware = promBundle({ includeMethod: true, @@ -22,6 +32,9 @@ const metricsMiddleware = promBundle({ }, }) +const prisma = new PrismaClient({ adapter }) +await prisma.$connect() + const app = express() app.use(helmet()) app.use(metricsMiddleware) @@ -31,9 +44,6 @@ const swaggerDocument = YAML.parse(file) app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(swaggerDocument)) -app.get('/statistics', (_, res) => { - res.send('Hello Statistics!!') -}) app.get('/secret', (_, res) => { res.send('Very secret message!') }) @@ -41,6 +51,12 @@ app.get('/', (_, res) => { res.send('Hello World!') }) +app.get('/statistics', async (_, res) => { + const allStatistics = await prisma.statistic.findMany() + console.log(JSON.stringify(allStatistics, null, 2)) + res.send(allStatistics) +}) + const port = 8080 const lightship = await createLightship({ @@ -64,7 +80,7 @@ const server = app // Graceful shutdown handler lightship.registerShutdownHandler(async () => { console.log('Graceful shutdown initiated...') - // await prisma.$disconnect() + await prisma.$disconnect() server.close() }) diff --git a/src/schema/0_init.sql b/src/schema/0_init.sql deleted file mode 100644 index 745ce919..00000000 --- a/src/schema/0_init.sql +++ /dev/null @@ -1,242 +0,0 @@ -create table statreg-db."DATABASECHANGELOG" -( - "ID" VARCHAR(63) not null, - "AUTHOR" VARCHAR(63) not null, - "FILENAME" VARCHAR(200) not null, - "DATEEXECUTED" TIMESTAMP(6) not null, - "MD5SUM" VARCHAR(32), - "DESCRIPTION" VARCHAR(255), - "COMMENTS" VARCHAR(255), - "TAG" VARCHAR(255), - "LIQUIBASE" VARCHAR(10), - constraint "PK_DATABASECHANGELOG" - primary key ("ID", "AUTHOR", "FILENAME") -); - -create table statreg-db."REGIONALT_NIVA" -( - "ID" NUMERIC(19) not null - constraint "SYS_C0023916" - primary key, - "VERSION" NUMERIC(19) not null, - "NAVN" VARCHAR(40) not null, - "KODE" VARCHAR(50) -); - -create table statreg-db."SEKSJON" -( - "ID" NUMERIC(19) not null - constraint "SYS_C0023922" - primary key, - "VERSION" NUMERIC(19) not null, - "NAVN" VARCHAR(100) not null, - "KODE" VARCHAR(3) not null, - "NAVN_EN" VARCHAR(100) not null -); - -create index "SYS_C0023924" - on statreg-db."SEKSJON" ("KODE"); - -create index "SYS_C0023925" - on statreg-db."SEKSJON" ("NAVN_EN"); - -create index "SYS_C0023923" - on statreg-db."SEKSJON" ("NAVN"); - -create table statreg-db."DATABASECHANGELOGLOCK" -( - "ID" NUMERIC(1) not null - constraint "PK_DATABASECHANGELOGLOCK" - primary key, - "LOCKED" NUMERIC(1) not null, - "LOCKGRANTED" TIMESTAMP(6), - "LOCKEDBY" VARCHAR(255) -); - -create table statreg-db."AUDIT_LOG" -( - "ID" NUMERIC(19) not null - constraint "SYS_C0023865" - primary key, - "PROPERTY_NAME" VARCHAR(255), - "LAST_UPDATED" TIMESTAMP(6) not null, - "OLD_VALUE" VARCHAR(255), - "ACTOR" VARCHAR(255), - "URI" VARCHAR(255), - "NEW_VALUE" VARCHAR(255), - "PERSISTED_OBJECT_VERSION" NUMERIC(19), - "DATE_CREATED" TIMESTAMP(6) not null, - "CLASS_NAME" VARCHAR(255), - "EVENT_NAME" VARCHAR(255), - "PERSISTED_OBJECT_ID" NUMERIC(19) -); - -create table statreg-db."KALENDER_DATO" -( - "ID" NUMERIC(19) not null - constraint "SYS_C0023875" - primary key, - "VERSION" NUMERIC(19) not null, - "KOMMENTAR" VARCHAR(255) not null, - "DAG" TIMESTAMP(6) not null -); - -create index "SYS_C0023876" - on statreg-db."KALENDER_DATO" ("DAG"); - -create table statreg-db."KORTNAVN" -( - "ID" NUMERIC(19) not null - constraint "SYS_C0023896" - primary key, - "VERSION" NUMERIC(19) not null, - "NAVN" VARCHAR(20) not null, - "LAST_UPDATED" TIMESTAMP(6) not null, - "DATE_CREATED" TIMESTAMP(6) not null -); - -create table statreg-db."STATISTIKK" -( - "ID" NUMERIC(19) not null - constraint "SYS_C0023938" - primary key, - "VERSION" NUMERIC(19) not null, - "KORTNAVN_ID" NUMERIC(19) not null - constraint "FKFA5CB213C47AD723" - references statreg-db."KORTNAVN" - on delete restrict, - "DIR_FLYT" VARCHAR(255), - "TRIGGERORD" VARCHAR(500), - "PRIORITET" NUMERIC(1) not null, - "DESK_FLYT" VARCHAR(255), - "SPRAK" VARCHAR(255) not null, - "TRIGGERORD_EN" VARCHAR(500), - "EIERSEKSJON_ID" NUMERIC(19) not null - constraint "FKFA5CB213B101B242" - references statreg-db."SEKSJON" - on delete restrict, - "FORSTEGANGSPUBLISERING" TIMESTAMP(6), - "ARSRAPPORTERING" NUMERIC(1) not null, - "STATUS" VARCHAR(255) not null, - "GAMLE_EMNEKODER" VARCHAR(255), - "RELASJON_ID" NUMERIC(19) - constraint "FKFA5CB2137008A78" - references statreg-db."STATISTIKK" - on delete restrict, - "STATISTIKKNAVN" VARCHAR(140) not null, - "LAST_UPDATED" TIMESTAMP(6) not null, - "INTERN_KOMMENTAR" VARCHAR(255) not null, - "STATISTIKKNAVN_EN" VARCHAR(140), - "DATE_CREATED" TIMESTAMP(6) not null -); - -create index "SYS_C0023941" - on statreg-db."STATISTIKK" ("STATISTIKKNAVN"); - -create index "SYS_C0023942" - on statreg-db."STATISTIKK" ("STATISTIKKNAVN_EN"); - -create index "SYS_C0023897" - on statreg-db."KORTNAVN" ("NAVN"); - -create table statreg-db."KONTAKT" -( - "ID" NUMERIC(19) not null - constraint "SYS_C0023890" - primary key, - "VERSION" NUMERIC(19) not null, - "INITIALER" VARCHAR(3), - "MOBIL" VARCHAR(30), - "NAVN" VARCHAR(130) not null, - "LAST_UPDATED" TIMESTAMP(6) not null, - "TELEFON" VARCHAR(30), - "EPOST" VARCHAR(100) not null, - "DATE_CREATED" TIMESTAMP(6) not null, - "INAKTIV" NUMERIC(1), - "NAVN_EN" VARCHAR(130) -); - -create table statreg-db."STATISTIKK_KONTAKTER" -( - "STATISTIKK_ID" NUMERIC(19) not null - constraint "FKF98634A1D978A9A3" - references statreg-db."STATISTIKK" - on delete restrict, - "KONTAKT_ID" NUMERIC(19) not null - constraint "FKF98634A159382591" - references statreg-db."KONTAKT" - on delete restrict, - "KONTAKTER_IDX" NUMERIC(10), - constraint "SYS_C0023946" - primary key ("STATISTIKK_ID", "KONTAKT_ID") -); - -create table statreg-db."FREKVENS" -( - "ID" NUMERIC(19) not null - constraint "SYS_C0023870" - primary key, - "VERSION" NUMERIC(19) not null, - "NAVN" VARCHAR(50) not null, - "KODE" VARCHAR(50) not null -); - -create table statreg-db."VARIANT" -( - "ID" NUMERIC(19) not null - constraint "SYS_C0023958" - primary key, - "VERSION" NUMERIC(19) not null, - "FREKVENS_ID" NUMERIC(19) not null - constraint "FKE1D1085B8B4EB03" - references statreg-db."FREKVENS" - on delete restrict, - "LAST_UPDATED" TIMESTAMP(6) not null, - "REVISJON" VARCHAR(255) not null, - "STATISTIKK_ID" NUMERIC(19) not null - constraint "FKE1D1085D978A9A3" - references statreg-db."STATISTIKK" - on delete restrict, - "DETALJNIVA_EN" VARCHAR(255), - "DETALJNIVA" VARCHAR(255), - "ER_OPPHORT" NUMERIC(1) not null, - "DATE_CREATED" TIMESTAMP(6) not null -); - -create table statreg-db."PUBLISERING" -( - "ID" NUMERIC(19) not null - constraint "SYS_C0023910" - primary key, - "VERSION" NUMERIC(19) not null, - "TIDSPUNKT" TIMESTAMP(6) not null, - "ER_ENDRET" NUMERIC(1) not null, - "LAST_UPDATED" TIMESTAMP(6) not null, - "INTERN_KOMMENTAR" VARCHAR(255) not null, - "PERIODE_TIL" TIMESTAMP(6) not null, - "DESK_FLYT" VARCHAR(255), - "VARIANT_ID" NUMERIC(19) not null - constraint "FKDB40A13C44A06F71" - references statreg-db."VARIANT" - on delete restrict, - "PERIODE_FRA" TIMESTAMP(6) not null, - "ER_AVLYST" NUMERIC(1) not null, - "DATE_CREATED" TIMESTAMP(6) not null, - "DATOTYPE" VARCHAR(255) not null, - "IMPORT_FLAG" NUMERIC(1) -); - -create table statreg-db."STATISTIKK_REGIONALE_NIVAER" -( - "REGIONALT_NIVA_ID" NUMERIC(19) not null - constraint "FKE4B2F5B83078425C" - references statreg-db."REGIONALT_NIVA" - on delete restrict, - "STATISTIKK_ID" NUMERIC(19) not null - constraint "FKE4B2F5B8D978A9A3" - references statreg-db."STATISTIKK" - on delete restrict, - constraint "SYS_C0023949" - primary key ("STATISTIKK_ID", "REGIONALT_NIVA_ID") -); - diff --git a/tsconfig.json b/tsconfig.json index 34e82911..52cf25b7 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -18,5 +18,5 @@ "outDir": "dist", "noEmit": false, }, - "include": ["src", "generated"] + "include": ["src"] } \ No newline at end of file