From c962acd50853d174248abc8d56c08a07f7ced744 Mon Sep 17 00:00:00 2001 From: Zach R Date: Mon, 17 Jun 2024 10:08:20 -0700 Subject: [PATCH 001/119] feat: initial commit --- config/index.example.ts | 11 + eslint.config.js | 16 + package-lock.json | 5927 +++++++++++++++++++++++++++++ package.json | 38 + src/app.css | 3 + src/global.d.ts | 7 + src/index.ts | 31 + src/lib/db/certs.ts | 54 + src/lib/db/hours.ts | 42 + src/lib/db/index.ts | 24 + src/lib/db/meetings.ts | 47 + src/lib/db/members.ts | 83 + src/lib/logger.ts | 9 + src/lib/renderer.tsx | 16 + src/lib/slack.ts | 35 + src/lib/util.ts | 9 + src/routes/admin/cert.tsx | 54 + src/routes/admin/index.ts | 10 + src/routes/admin/member.tsx | 60 + src/routes/api/index.ts | 126 + src/tasks/certs.ts | 36 + src/tasks/slack.ts | 39 + static/app.css | 768 ++++ static/img/bg-grid-blurred.png | Bin 0 -> 1607589 bytes static/img/bg-grid.png | Bin 0 -> 447266 bytes static/img/clay.png | Bin 0 -> 682110 bytes static/img/default_member.jpg | Bin 0 -> 152372 bytes static/img/default_member.old.jpg | Bin 0 -> 163444 bytes static/img/favicon.svg | 134 + static/img/trimet-logo.png | Bin 0 -> 47436 bytes tailwind.config.js | 8 + tsconfig.json | 28 + types/index.ts | 27 + 33 files changed, 7642 insertions(+) create mode 100644 config/index.example.ts create mode 100644 eslint.config.js create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 src/app.css create mode 100644 src/global.d.ts create mode 100644 src/index.ts create mode 100644 src/lib/db/certs.ts create mode 100644 src/lib/db/hours.ts create mode 100644 src/lib/db/index.ts create mode 100644 src/lib/db/meetings.ts create mode 100644 src/lib/db/members.ts create mode 100644 src/lib/logger.ts create mode 100644 src/lib/renderer.tsx create mode 100644 src/lib/slack.ts create mode 100644 src/lib/util.ts create mode 100644 src/routes/admin/cert.tsx create mode 100644 src/routes/admin/index.ts create mode 100644 src/routes/admin/member.tsx create mode 100644 src/routes/api/index.ts create mode 100644 src/tasks/certs.ts create mode 100644 src/tasks/slack.ts create mode 100644 static/app.css create mode 100644 static/img/bg-grid-blurred.png create mode 100644 static/img/bg-grid.png create mode 100644 static/img/clay.png create mode 100644 static/img/default_member.jpg create mode 100644 static/img/default_member.old.jpg create mode 100644 static/img/favicon.svg create mode 100644 static/img/trimet-logo.png create mode 100644 tailwind.config.js create mode 100644 tsconfig.json create mode 100644 types/index.ts diff --git a/config/index.example.ts b/config/index.example.ts new file mode 100644 index 0000000..6c76eb5 --- /dev/null +++ b/config/index.example.ts @@ -0,0 +1,11 @@ +export const slack_token = 'xoxb-XXXX' +export const postgres_connection_string = 'postgres://XXX@YYY:ZZZ/AAA' +export const default_photo = '/static/img/default_member.jpg' +export const default_photo_small = '/static/img/default_member.jpg' + +export const slack_profile_fields = { + department: 'XYYYYYYYY', + certs: 'XYYYYYYY' +} + +export const slack_celebration_channel = 'CXXXXXX' diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 0000000..d601ea3 --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,16 @@ +// @ts-check + +import eslint from '@eslint/js' +import tseslint from 'typescript-eslint' + +export default tseslint.config( + eslint.configs.recommended, + ...tseslint.configs.recommended, + { files: ['src/**/*.{js, ts}'] }, + { + rules: { + '@typescript-eslint/no-explicit-any': 'warn', + '@typescript-eslint/no-unused-vars': 'warn' + } + } +) diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..6179cb4 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,5927 @@ +{ + "name": "cluck2.1", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "cluck2.1", + "dependencies": { + "@floating-ui/dom": "^1.6.5", + "@hono/node-server": "^1.11.3", + "@slack/web-api": "^7.1.0", + "async-lock": "^1.4.1", + "hono": "^4.4.6", + "pg": "^8.12.0", + "pino": "^9.2.0", + "pino-pretty": "^11.2.1", + "reflect-metadata": "^0.2.2", + "sequelize": "^6.37.3", + "sequelize-typescript": "^2.1.6" + }, + "devDependencies": { + "@eslint/js": "^9.5.0", + "@types/async-lock": "^1.4.2", + "@types/eslint__js": "^8.42.3", + "@types/node": "^20.14.2", + "@types/validator": "^13.11.10", + "autoprefixer": "^10.4.19", + "esbuild": "^0.21.5", + "eslint": "^8.57.0", + "flowbite": "^2.3.0", + "npm-run-all": "^4.1.5", + "postcss": "^8.4.38", + "prettier": "^3.3.2", + "tailwindcss": "^3.4.4", + "tsx": "^4.7.1", + "typescript": "^5.4.5", + "typescript-eslint": "^7.13.0", + "vite": "^5.3.1" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.1.tgz", + "integrity": "sha512-Zm2NGpWELsQAD1xsJzGQpYfvICSsFkEpU0jxBjfdC6uNEWXcHnfs9hScFWtXVDVl+rBQJGrl4g1vcKIejpH9dA==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/js": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.5.0.tgz", + "integrity": "sha512-A7+AOT2ICkodvtsWnxZP4Xxk3NbZ3VMHd8oihydLRGrJgqqdEz1qSeEgXYyT/Cu8h1TWWsQRejIx48mtjZ5y1w==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@floating-ui/core": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.2.tgz", + "integrity": "sha512-+2XpQV9LLZeanU4ZevzRnGFg2neDeKHgFLjP6YLW+tly0IvrhqT4u8enLGjLH3qeh85g19xY5rsAusfwTdn5lg==", + "dependencies": { + "@floating-ui/utils": "^0.2.0" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.6.5", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.5.tgz", + "integrity": "sha512-Nsdud2X65Dz+1RHjAIP0t8z5e2ff/IRbei6BqFrl1urT8sDVzM1HMQ+R0XcU5ceRfyO3I6ayeqIfh+6Wb8LGTw==", + "dependencies": { + "@floating-ui/core": "^1.0.0", + "@floating-ui/utils": "^0.2.0" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.2.tgz", + "integrity": "sha512-J4yDIIthosAsRZ5CPYP/jQvUAQtlZTTD/4suA08/FEnlxqW3sKS9iAhgsa9VYLZ6vDHn/ixJgIqRQPotoBjxIw==" + }, + "node_modules/@hono/node-server": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.11.3.tgz", + "integrity": "sha512-mFg3qlKkDtMWSalX5Gyh6Zd3MXay0biGobFlyJ49i6R1smBBS1CYkNZbvwLlw+4sSrHO4ZiH7kj4TcLpl2Jr3g==", + "engines": { + "node": ">=18.14.1" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "deprecated": "Use @eslint/config-array instead", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", + "dev": true + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.0.tgz", + "integrity": "sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.0.tgz", + "integrity": "sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.0.tgz", + "integrity": "sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.0.tgz", + "integrity": "sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.0.tgz", + "integrity": "sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.0.tgz", + "integrity": "sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.0.tgz", + "integrity": "sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.0.tgz", + "integrity": "sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.0.tgz", + "integrity": "sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.0.tgz", + "integrity": "sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.0.tgz", + "integrity": "sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.0.tgz", + "integrity": "sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.0.tgz", + "integrity": "sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.0.tgz", + "integrity": "sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.0.tgz", + "integrity": "sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.0.tgz", + "integrity": "sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@slack/logger": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@slack/logger/-/logger-4.0.0.tgz", + "integrity": "sha512-Wz7QYfPAlG/DR+DfABddUZeNgoeY7d1J39OCR2jR+v7VBsB8ezulDK5szTnDDPDwLH5IWhLvXIHlCFZV7MSKgA==", + "dependencies": { + "@types/node": ">=18.0.0" + }, + "engines": { + "node": ">= 18", + "npm": ">= 8.6.0" + } + }, + "node_modules/@slack/types": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/@slack/types/-/types-2.12.0.tgz", + "integrity": "sha512-yFewzUomYZ2BYaGJidPuIgjoYj5wqPDmi7DLSaGIkf+rCi4YZ2Z3DaiYIbz7qb/PL2NmamWjCvB7e9ArI5HkKg==", + "engines": { + "node": ">= 12.13.0", + "npm": ">= 6.12.0" + } + }, + "node_modules/@slack/web-api": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@slack/web-api/-/web-api-7.1.0.tgz", + "integrity": "sha512-OvW3lZopOL09tvLqD2VRWYnJ32dtZbn53YrnuLNMclytho1tcZvcQZ83n1sPIe9pZK78MwVkUiHKrEYlNUE3PQ==", + "dependencies": { + "@slack/logger": "^4.0.0", + "@slack/types": "^2.9.0", + "@types/node": ">=18.0.0", + "@types/retry": "0.12.0", + "axios": "^1.6.5", + "eventemitter3": "^5.0.1", + "form-data": "^4.0.0", + "is-electron": "2.2.2", + "is-stream": "^2", + "p-queue": "^6", + "p-retry": "^4", + "retry": "^0.13.1" + }, + "engines": { + "node": ">= 18", + "npm": ">= 8.6.0" + } + }, + "node_modules/@types/async-lock": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@types/async-lock/-/async-lock-1.4.2.tgz", + "integrity": "sha512-HlZ6Dcr205BmNhwkdXqrg2vkFMN2PluI7Lgr8In3B3wE5PiQHhjRqtW/lGdVU9gw+sM0JcIDx2AN+cW8oSWIcw==", + "dev": true + }, + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/eslint": { + "version": "8.56.10", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.10.tgz", + "integrity": "sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint__js": { + "version": "8.42.3", + "resolved": "https://registry.npmjs.org/@types/eslint__js/-/eslint__js-8.42.3.tgz", + "integrity": "sha512-alfG737uhmPdnvkrLdZLcEKJ/B8s9Y4hrZ+YAdzUeoArBlSUERA2E87ROfOaS4jd/C45fzOoZzidLc1IPwLqOw==", + "dev": true, + "dependencies": { + "@types/eslint": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "node_modules/@types/ms": { + "version": "0.7.34", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", + "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==" + }, + "node_modules/@types/node": { + "version": "20.14.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.2.tgz", + "integrity": "sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q==", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" + }, + "node_modules/@types/validator": { + "version": "13.11.10", + "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.11.10.tgz", + "integrity": "sha512-e2PNXoXLr6Z+dbfx5zSh9TRlXJrELycxiaXznp4S5+D2M3b9bqJEitNHA5923jhnB2zzFiZHa2f0SI1HoIahpg==" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.13.0.tgz", + "integrity": "sha512-FX1X6AF0w8MdVFLSdqwqN/me2hyhuQg4ykN6ZpVhh1ij/80pTvDKclX1sZB9iqex8SjQfVhwMKs3JtnnMLzG9w==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "7.13.0", + "@typescript-eslint/type-utils": "7.13.0", + "@typescript-eslint/utils": "7.13.0", + "@typescript-eslint/visitor-keys": "7.13.0", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^7.0.0", + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.13.0.tgz", + "integrity": "sha512-EjMfl69KOS9awXXe83iRN7oIEXy9yYdqWfqdrFAYAAr6syP8eLEFI7ZE4939antx2mNgPRW/o1ybm2SFYkbTVA==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "7.13.0", + "@typescript-eslint/types": "7.13.0", + "@typescript-eslint/typescript-estree": "7.13.0", + "@typescript-eslint/visitor-keys": "7.13.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.13.0.tgz", + "integrity": "sha512-ZrMCe1R6a01T94ilV13egvcnvVJ1pxShkE0+NDjDzH4nvG1wXpwsVI5bZCvE7AEDH1mXEx5tJSVR68bLgG7Dng==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.13.0", + "@typescript-eslint/visitor-keys": "7.13.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.13.0.tgz", + "integrity": "sha512-xMEtMzxq9eRkZy48XuxlBFzpVMDurUAfDu5Rz16GouAtXm0TaAoTFzqWUFPPuQYXI/CDaH/Bgx/fk/84t/Bc9A==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "7.13.0", + "@typescript-eslint/utils": "7.13.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.13.0.tgz", + "integrity": "sha512-QWuwm9wcGMAuTsxP+qz6LBBd3Uq8I5Nv8xb0mk54jmNoCyDspnMvVsOxI6IsMmway5d1S9Su2+sCKv1st2l6eA==", + "dev": true, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.13.0.tgz", + "integrity": "sha512-cAvBvUoobaoIcoqox1YatXOnSl3gx92rCZoMRPzMNisDiM12siGilSM4+dJAekuuHTibI2hVC2fYK79iSFvWjw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.13.0", + "@typescript-eslint/visitor-keys": "7.13.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.13.0.tgz", + "integrity": "sha512-jceD8RgdKORVnB4Y6BqasfIkFhl4pajB1wVxrF4akxD2QPM8GNYjgGwEzYS+437ewlqqrg7Dw+6dhdpjMpeBFQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "7.13.0", + "@typescript-eslint/types": "7.13.0", + "@typescript-eslint/typescript-estree": "7.13.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.13.0.tgz", + "integrity": "sha512-nxn+dozQx+MK61nn/JP+M4eCkHDSxSLDpgE3WcQo0+fkjEolnaB5jswvIKC4K56By8MMgIho7f1PVxERHEo8rw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.13.0", + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/acorn": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.0.tgz", + "integrity": "sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/async-lock": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/async-lock/-/async-lock-1.4.1.tgz", + "integrity": "sha512-Az2ZTpuytrtqENulXwO3GGv1Bztugx6TT37NIo7imr/Qo0gsYiGtSdBa2B6fsXhTpVZDNfu1Qn3pk531e3q+nQ==" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/atomic-sleep": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", + "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.19", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.19.tgz", + "integrity": "sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "browserslist": "^4.23.0", + "caniuse-lite": "^1.0.30001599", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axios": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz", + "integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.23.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.1.tgz", + "integrity": "sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001629", + "electron-to-chromium": "^1.4.796", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.16" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001634", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001634.tgz", + "integrity": "sha512-fbBYXQ9q3+yp1q1gBk86tOFs4pyn/yxFm5ZNP18OXJDfA3txImOY9PhfxVggZ4vRHDqoU8NrKU81eN0OtzOgRA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/dateformat": { + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", + "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==", + "engines": { + "node": "*" + } + }, + "node_modules/debug": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dottie": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/dottie/-/dottie-2.0.6.tgz", + "integrity": "sha512-iGCHkfUc5kFekGiqhe8B/mdaurD+lakO9txNnTvKtA6PISrw86LgqHvRzWYPyoE2Ph5aMIrCw9/uko6XHTKCwA==" + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "node_modules/electron-to-chromium": { + "version": "1.4.803", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.803.tgz", + "integrity": "sha512-61H9mLzGOCLLVsnLiRzCbc63uldP0AniRYPV3hbGVtONA1pI7qSGILdbofR7A8TMbOypDocEAjH/e+9k1QIe3g==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.3", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/@eslint/js": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==" + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/fast-copy": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/fast-copy/-/fast-copy-3.0.2.tgz", + "integrity": "sha512-dl0O9Vhju8IrcLndv2eU4ldt1ftXMqqfgN4H1cpmGV7P6jeB9FwpN9a2c8DPGE1Ys88rNUJVYDHq73CGAGOPfQ==" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fast-redact": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.5.0.tgz", + "integrity": "sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true + }, + "node_modules/flowbite": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/flowbite/-/flowbite-2.3.0.tgz", + "integrity": "sha512-pm3JRo8OIJHGfFYWgaGpPv8E+UdWy0Z3gEAGufw+G/1dusaU/P1zoBLiQpf2/+bYAi+GBQtPVG86KYlV0W+AFQ==", + "dev": true, + "dependencies": { + "@popperjs/core": "^2.9.3", + "mini-svg-data-uri": "^1.4.3" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/foreground-child": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz", + "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true, + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-tsconfig": { + "version": "4.7.5", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.5.tgz", + "integrity": "sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==", + "dev": true, + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/glob": { + "version": "10.4.1", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.1.tgz", + "integrity": "sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "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==", + "dev": true + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/help-me": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/help-me/-/help-me-5.0.0.tgz", + "integrity": "sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==" + }, + "node_modules/hono": { + "version": "4.4.6", + "resolved": "https://registry.npmjs.org/hono/-/hono-4.4.6.tgz", + "integrity": "sha512-XGRnoH8WONv60+PPvP9Sn067A9r/8JdHDJ5bgon0DVEHeR1cJPkWjv2aT+DBfMH9/mEkYa1+VEVFp1DT1lIwjw==", + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflection": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.13.4.tgz", + "integrity": "sha512-6I/HUDeYFfuNCVS3td055BaXBwKYuzw7K3ExVMStBowKo9oOAMJIXIHvdyR3iboTCp1b+1i5DSkIZTcwIktuDw==", + "engines": [ + "node >= 0.4.0" + ] + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/internal-slot": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dev": true, + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-electron": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-electron/-/is-electron-2.2.2.tgz", + "integrity": "sha512-FO/Rhvz5tuw4MCWkpMzHFKWD2LsfHzIb7i6MdPYZ/KW7AlxawyLkqdy+jPZP1WubqEADE3O4FUENlJHDfQASRg==" + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "dev": true, + "dependencies": { + "which-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/jackspeak": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.0.tgz", + "integrity": "sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jiti": { + "version": "1.21.6", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", + "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", + "dev": true, + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/joycon": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz", + "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==", + "engines": { + "node": ">=10" + } + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/load-json-file/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "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==" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lru-cache": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", + "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", + "dev": true, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "dev": true, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mini-svg-data-uri": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz", + "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==", + "dev": true, + "bin": { + "mini-svg-data-uri": "cli.js" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/moment": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", + "engines": { + "node": "*" + } + }, + "node_modules/moment-timezone": { + "version": "0.5.45", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.45.tgz", + "integrity": "sha512-HIWmqA86KcmCAhnMAN0wuDOARV/525R2+lOLotuGFzn4HO+FH+/645z2wx0Dt3iDv6/p61SIvKnDstISainhLQ==", + "dependencies": { + "moment": "^2.29.4" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "dev": true + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-all": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", + "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "chalk": "^2.4.1", + "cross-spawn": "^6.0.5", + "memorystream": "^0.3.1", + "minimatch": "^3.0.4", + "pidtree": "^0.3.0", + "read-pkg": "^3.0.0", + "shell-quote": "^1.6.1", + "string.prototype.padend": "^3.0.0" + }, + "bin": { + "npm-run-all": "bin/npm-run-all/index.js", + "run-p": "bin/run-p/index.js", + "run-s": "bin/run-s/index.js" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/npm-run-all/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/npm-run-all/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/npm-run-all/node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/npm-run-all/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/npm-run-all/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/npm-run-all/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-all/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-all/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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", + "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "engines": { + "node": ">=4" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-queue": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", + "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", + "dependencies": { + "eventemitter3": "^4.0.4", + "p-timeout": "^3.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-queue/node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + }, + "node_modules/p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "dependencies": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "dependencies": { + "p-finally": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "dev": true, + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/pg": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.12.0.tgz", + "integrity": "sha512-A+LHUSnwnxrnL/tZ+OLfqR1SxLN3c/pgDztZ47Rpbsd4jUytsTtwQo/TLPRzPJMp/1pbhYVhH9cuSZLAajNfjQ==", + "dependencies": { + "pg-connection-string": "^2.6.4", + "pg-pool": "^3.6.2", + "pg-protocol": "^1.6.1", + "pg-types": "^2.1.0", + "pgpass": "1.x" + }, + "engines": { + "node": ">= 8.0.0" + }, + "optionalDependencies": { + "pg-cloudflare": "^1.1.1" + }, + "peerDependencies": { + "pg-native": ">=3.0.1" + }, + "peerDependenciesMeta": { + "pg-native": { + "optional": true + } + } + }, + "node_modules/pg-cloudflare": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.1.1.tgz", + "integrity": "sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q==", + "optional": true + }, + "node_modules/pg-connection-string": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.6.4.tgz", + "integrity": "sha512-v+Z7W/0EO707aNMaAEfiGnGL9sxxumwLl2fJvCQtMn9Fxsg+lPpPkdcyBSv/KFgpGdYkMfn+EI1Or2EHjpgLCA==" + }, + "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==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/pg-pool": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.6.2.tgz", + "integrity": "sha512-Htjbg8BlwXqSBQ9V8Vjtc+vzf/6fVUuak/3/XXKA9oxZprwW3IMDQTGHP+KDmVL7rtd+R1QjbnCFPuTHm3G4hg==", + "peerDependencies": { + "pg": ">=8.0" + } + }, + "node_modules/pg-protocol": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.6.1.tgz", + "integrity": "sha512-jPIlvgoD63hrEuihvIg+tJhoGjUsLPn6poJY9N5CnlPd91c2T18T/9zBtLxZSb1EhYxBRoZJtzScCaWlYLtktg==" + }, + "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==", + "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/pgpass": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz", + "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==", + "dependencies": { + "split2": "^4.1.0" + } + }, + "node_modules/picocolors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pidtree": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", + "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", + "dev": true, + "bin": { + "pidtree": "bin/pidtree.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pino": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/pino/-/pino-9.2.0.tgz", + "integrity": "sha512-g3/hpwfujK5a4oVbaefoJxezLzsDgLcNJeITvC6yrfwYeT9la+edCK42j5QpEQSQCZgTKapXvnQIdgZwvRaZug==", + "dependencies": { + "atomic-sleep": "^1.0.0", + "fast-redact": "^3.1.1", + "on-exit-leak-free": "^2.1.0", + "pino-abstract-transport": "^1.2.0", + "pino-std-serializers": "^7.0.0", + "process-warning": "^3.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": "1.2.0", + "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-1.2.0.tgz", + "integrity": "sha512-Guhh8EZfPCfH+PMXAb6rKOjGQEoy0xlAIn+irODG5kgfYV+BQ0rGYYWTIel3P5mmyXqkYkPmdIkywsn6QKUR1Q==", + "dependencies": { + "readable-stream": "^4.0.0", + "split2": "^4.0.0" + } + }, + "node_modules/pino-pretty": { + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/pino-pretty/-/pino-pretty-11.2.1.tgz", + "integrity": "sha512-O05NuD9tkRasFRWVaF/uHLOvoRDFD7tb5VMertr78rbsYFjYp48Vg3477EshVAF5eZaEw+OpDl/tu+B0R5o+7g==", + "dependencies": { + "colorette": "^2.0.7", + "dateformat": "^4.6.3", + "fast-copy": "^3.0.2", + "fast-safe-stringify": "^2.1.1", + "help-me": "^5.0.0", + "joycon": "^3.1.1", + "minimist": "^1.2.6", + "on-exit-leak-free": "^2.1.0", + "pino-abstract-transport": "^1.0.0", + "pump": "^3.0.0", + "readable-stream": "^4.0.0", + "secure-json-parse": "^2.4.0", + "sonic-boom": "^4.0.1", + "strip-json-comments": "^3.1.1" + }, + "bin": { + "pino-pretty": "bin.js" + } + }, + "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==" + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dev": true, + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-load-config/node_modules/lilconfig": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", + "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/postcss-nested": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", + "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.11" + }, + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz", + "integrity": "sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "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==", + "engines": { + "node": ">=4" + } + }, + "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==", + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "dependencies": { + "xtend": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.2.tgz", + "integrity": "sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==", + "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-warning": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-3.0.0.tgz", + "integrity": "sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==" + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/quick-format-unescaped": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", + "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==" + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", + "dev": true, + "dependencies": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg/node_modules/path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/readable-stream": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", + "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/real-require": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz", + "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==", + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/reflect-metadata": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", + "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==" + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/retry-as-promised": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-7.0.4.tgz", + "integrity": "sha512-XgmCoxKWkDofwH8WddD0w85ZfqYz+ZHlr5yo+3YUCfycWawU56T5ckWXsScsj5B8tqUcIG67DxXByo3VUgiAdA==" + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.18.0.tgz", + "integrity": "sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==", + "dev": true, + "dependencies": { + "@types/estree": "1.0.5" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.18.0", + "@rollup/rollup-android-arm64": "4.18.0", + "@rollup/rollup-darwin-arm64": "4.18.0", + "@rollup/rollup-darwin-x64": "4.18.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.18.0", + "@rollup/rollup-linux-arm-musleabihf": "4.18.0", + "@rollup/rollup-linux-arm64-gnu": "4.18.0", + "@rollup/rollup-linux-arm64-musl": "4.18.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.18.0", + "@rollup/rollup-linux-riscv64-gnu": "4.18.0", + "@rollup/rollup-linux-s390x-gnu": "4.18.0", + "@rollup/rollup-linux-x64-gnu": "4.18.0", + "@rollup/rollup-linux-x64-musl": "4.18.0", + "@rollup/rollup-win32-arm64-msvc": "4.18.0", + "@rollup/rollup-win32-ia32-msvc": "4.18.0", + "@rollup/rollup-win32-x64-msvc": "4.18.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safe-regex-test": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-regex": "^1.1.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-stable-stringify": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz", + "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==", + "engines": { + "node": ">=10" + } + }, + "node_modules/secure-json-parse": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz", + "integrity": "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==" + }, + "node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/sequelize": { + "version": "6.37.3", + "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.37.3.tgz", + "integrity": "sha512-V2FTqYpdZjPy3VQrZvjTPnOoLm0KudCRXfGWp48QwhyPPp2yW8z0p0sCYZd/em847Tl2dVxJJ1DR+hF+O77T7A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/sequelize" + } + ], + "dependencies": { + "@types/debug": "^4.1.8", + "@types/validator": "^13.7.17", + "debug": "^4.3.4", + "dottie": "^2.0.6", + "inflection": "^1.13.4", + "lodash": "^4.17.21", + "moment": "^2.29.4", + "moment-timezone": "^0.5.43", + "pg-connection-string": "^2.6.1", + "retry-as-promised": "^7.0.4", + "semver": "^7.5.4", + "sequelize-pool": "^7.1.0", + "toposort-class": "^1.0.1", + "uuid": "^8.3.2", + "validator": "^13.9.0", + "wkx": "^0.5.0" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependenciesMeta": { + "ibm_db": { + "optional": true + }, + "mariadb": { + "optional": true + }, + "mysql2": { + "optional": true + }, + "oracledb": { + "optional": true + }, + "pg": { + "optional": true + }, + "pg-hstore": { + "optional": true + }, + "snowflake-sdk": { + "optional": true + }, + "sqlite3": { + "optional": true + }, + "tedious": { + "optional": true + } + } + }, + "node_modules/sequelize-pool": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/sequelize-pool/-/sequelize-pool-7.1.0.tgz", + "integrity": "sha512-G9c0qlIWQSK29pR/5U2JF5dDQeqqHRragoyahj/Nx4KOOQ3CPPfzxnfqFPCSB7x5UgjOgnZ61nSxz+fjDpRlJg==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/sequelize-typescript": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/sequelize-typescript/-/sequelize-typescript-2.1.6.tgz", + "integrity": "sha512-Vc2N++3en346RsbGjL3h7tgAl2Y7V+2liYTAOZ8XL0KTw3ahFHsyAUzOwct51n+g70I1TOUDgs06Oh6+XGcFkQ==", + "dependencies": { + "glob": "7.2.0" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "@types/validator": "*", + "reflect-metadata": "*", + "sequelize": ">=6.20.1" + } + }, + "node_modules/sequelize-typescript/node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/shebang-command": { + "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, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "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==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/sonic-boom": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.0.1.tgz", + "integrity": "sha512-hTSD/6JMLyT4r9zeof6UtuBDpjJ9sO08/nmS5djaA9eozT9oOlNdpXSnzcgj4FTqpk3nkLrs61l4gip9r1HCrQ==", + "dependencies": { + "atomic-sleep": "^1.0.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.18", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.18.tgz", + "integrity": "sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==", + "dev": true + }, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "engines": { + "node": ">= 10.x" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/string.prototype.padend": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.6.tgz", + "integrity": "sha512-XZpspuSB7vJWhvJc9DLSlrXl1mcA2BdoY5jjnS135ydXqLoqhs96JjDtCkjJEQHvfqZIp9hBuBMgI589peyx9Q==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tailwindcss": { + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.4.tgz", + "integrity": "sha512-ZoyXOdJjISB7/BcLTR6SEsLgKtDStYyYZVLsUtWChO4Ps20CBad7lfJKVDiejocV4ME1hLmyY0WJE3hSDcmQ2A==", + "dev": true, + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.0", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.0", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.23", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", + "resolve": "^1.22.2", + "sucrase": "^3.32.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/thread-stream": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-3.1.0.tgz", + "integrity": "sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==", + "dependencies": { + "real-require": "^0.2.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toposort-class": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toposort-class/-/toposort-class-1.0.1.tgz", + "integrity": "sha512-OsLcGGbYF3rMjPUf8oKktyvCiUxSbqMMS39m33MAjLTC1DVIH6x3WSt63/M77ihI09+Sdfk1AXvfhCEeUmC7mg==" + }, + "node_modules/ts-api-utils": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", + "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", + "dev": true, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true + }, + "node_modules/tsx": { + "version": "4.15.5", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.15.5.tgz", + "integrity": "sha512-iKi8jQ2VBmZ2kU/FkGkL2OSHBHsazsUzsdC/W/RwhKIEsIoZ1alCclZHP5jGfNHEaEWUJFM1GquzCf+4db3b0w==", + "dev": true, + "dependencies": { + "esbuild": "~0.21.4", + "get-tsconfig": "^4.7.5" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typescript": { + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typescript-eslint": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-7.13.0.tgz", + "integrity": "sha512-upO0AXxyBwJ4BbiC6CRgAJKtGYha2zw4m1g7TIVPSonwYEuf7vCicw3syjS1OxdDMTz96sZIXl3Jx3vWJLLKFw==", + "dev": true, + "dependencies": { + "@typescript-eslint/eslint-plugin": "7.13.0", + "@typescript-eslint/parser": "7.13.0", + "@typescript-eslint/utils": "7.13.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + }, + "node_modules/update-browserslist-db": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz", + "integrity": "sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.2", + "picocolors": "^1.0.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/validator": { + "version": "13.12.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.12.0.tgz", + "integrity": "sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/vite": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.3.1.tgz", + "integrity": "sha512-XBmSKRLXLxiaPYamLv3/hnP/KXDai1NDexN0FpkTaZXTfycHvkRHoenpgl/fvuK/kPbB6xAgoyiryAhQNxYmAQ==", + "dev": true, + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.38", + "rollup": "^4.13.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wkx": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/wkx/-/wkx-0.5.0.tgz", + "integrity": "sha512-Xng/d4Ichh8uN4l0FToV/258EjMGU9MGcA0HV2d9B/ZpZB3lqQm7nkOdZdm5GhKtLLhAE7PiVQwN4eN+2YJJUg==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/yaml": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.5.tgz", + "integrity": "sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==", + "dev": true, + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..fa0a112 --- /dev/null +++ b/package.json @@ -0,0 +1,38 @@ +{ + "name": "cluck2", + "type": "module", + "scripts": { + "dev": "npm-run-all -l -c --parallel dev:**", + "dev:ts": "tsx watch src/index.ts", + "dev:css": "tailwindcss -i ./src/app.css -o static/app.css --watch", + "build:css": "tailwindcss -i ./src/app.css -o static/app.css --minify", + "serve": "tsx src/index.ts" + }, + "dependencies": { + "@hono/node-server": "^1.11.3", + "@slack/web-api": "^7.1.0", + "async-lock": "^1.4.1", + "hono": "^4.4.6", + "pg": "^8.12.0", + "pino": "^9.2.0", + "pino-pretty": "^11.2.1", + "reflect-metadata": "^0.2.2", + "sequelize": "^6.37.3", + "sequelize-typescript": "^2.1.6" + }, + "devDependencies": { + "@eslint/js": "^9.5.0", + "@types/async-lock": "^1.4.2", + "@types/eslint__js": "^8.42.3", + "@types/node": "^20.14.2", + "@types/validator": "^13.11.10", + "autoprefixer": "^10.4.19", + "eslint": "^8.57.0", + "npm-run-all": "^4.1.5", + "prettier": "^3.3.2", + "tailwindcss": "^3.4.4", + "tsx": "^4.7.1", + "typescript": "^5.4.5", + "typescript-eslint": "^7.13.0" + } +} diff --git a/src/app.css b/src/app.css new file mode 100644 index 0000000..bd6213e --- /dev/null +++ b/src/app.css @@ -0,0 +1,3 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; \ No newline at end of file diff --git a/src/global.d.ts b/src/global.d.ts new file mode 100644 index 0000000..5336932 --- /dev/null +++ b/src/global.d.ts @@ -0,0 +1,7 @@ +import {} from 'hono' + +declare module 'hono' { + interface ContextRenderer { + (content: string | Promise, props?: { title?: string; js?: string }): Response + } +} diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 0000000..9c30d34 --- /dev/null +++ b/src/index.ts @@ -0,0 +1,31 @@ +import { serve } from '@hono/node-server' +import { serveStatic } from '@hono/node-server/serve-static' +import { Hono } from 'hono' +import { renderer } from './lib/renderer' +import admin_router from './routes/admin' +import api_router from './routes/api' +import { connectDatabase } from '@/lib/db' +import { syncSlackMembers } from '@/tasks/slack' +import { createCertChangeListener } from '@/tasks/certs' + +const app = new Hono() +app.use(renderer) +app.get('/', (c) => { + return c.text('Hello Hono!') +}) + +app.use('/static/*', serveStatic({ root: './' })) +app.route('/admin', admin_router) +app.route('/api', api_router) + +const port = 3000 +console.log(`Server is running on port ${port}`) +;(async () => { + await connectDatabase() + await createCertChangeListener() + // await syncSlackMembers() + serve({ + fetch: app.fetch, + port + }) +})() diff --git a/src/lib/db/certs.ts b/src/lib/db/certs.ts new file mode 100644 index 0000000..16d40de --- /dev/null +++ b/src/lib/db/certs.ts @@ -0,0 +1,54 @@ +import { Column, DataType, Model, Table, Comment, ForeignKey, BelongsTo, HasMany, Index } from 'sequelize-typescript' +import { Member } from './members' +import logger from '@/lib/logger' +import { DatabaseError } from 'sequelize' + +@Table +export class Cert extends Model { + @Column({ type: DataType.STRING(20), primaryKey: true }) + id!: string + + @Column({ type: DataType.STRING(100), allowNull: false }) + label!: string + + @Column({ type: DataType.STRING(50), allowNull: false }) + department!: string + + @Comment('100 = manager') + @Column({ type: DataType.SMALLINT, allowNull: false }) + level!: number + + @HasMany(() => MemberCert) + instances!: MemberCert[] +} + +@Table +export class MemberCert extends Model { + @Column({ type: DataType.INTEGER, primaryKey: true, autoIncrement: true, autoIncrementIdentity: true }) + id!: number + + @Index + @ForeignKey(() => Member) + @Column({ type: DataType.STRING(50), allowNull: false }) + member_id!: string + + @ForeignKey(() => Cert) + @Column({ type: DataType.STRING(20), allowNull: false }) + cert_id!: string + + @BelongsTo(() => Cert, 'cert_id') + cert!: Cert + + @BelongsTo(() => Member, 'member_id') + member!: Member +} + +export async function updateCert(data: Pick): Promise { + let success = true + await Cert.upsert(data, { returning: false }).catch((reason: DatabaseError) => { + logger.debug(reason.original) + logger.error(`${reason.name}: ${reason.original.message}`) + success = false + }) + return success +} diff --git a/src/lib/db/hours.ts b/src/lib/db/hours.ts new file mode 100644 index 0000000..f8ffb73 --- /dev/null +++ b/src/lib/db/hours.ts @@ -0,0 +1,42 @@ +import { BelongsTo, Column, DataType, ForeignKey, Index, Model, Table, Comment } from 'sequelize-typescript' +import { Member } from './members' +import { HourCategory } from '@types' + +@Table +export class HourLog extends Model { + @Column({ type: DataType.INTEGER, primaryKey: true, autoIncrement: true, autoIncrementIdentity: true }) + id!: number + + @Index + @ForeignKey(() => Member) + @Column({ type: DataType.STRING(50), allowNull: false }) + member_id!: string + + @Column({ type: DataType.DATE, allowNull: false }) + time_in!: Date + + @Column({ type: DataType.DATE, allowNull: true }) + time_out?: Date + + @Comment('hours') + @Column({ type: DataType.DECIMAL(6, 3), allowNull: true }) + duration?: number + + @Index + @Column({ type: DataType.ENUM('lab', 'external', 'summer', 'event'), allowNull: false }) + type!: HourCategory + + @Index + @Column({ type: DataType.ENUM('complete', 'pending', 'cancelled'), allowNull: false }) + state!: 'complete' | 'pending' | 'cancelled' + + @Column({ type: DataType.STRING(2000), allowNull: true }) + message?: string + + @Comment('For external requests') + @Column({ type: DataType.DECIMAL(16, 6), allowNull: true }) + slack_ts?: number + + @BelongsTo(() => Member) + member!: Member +} diff --git a/src/lib/db/index.ts b/src/lib/db/index.ts new file mode 100644 index 0000000..c3c42f0 --- /dev/null +++ b/src/lib/db/index.ts @@ -0,0 +1,24 @@ +import { Sequelize } from 'sequelize-typescript' + +import logger from '../logger' +import { Member } from './members' +import { Cert, MemberCert } from './certs' +import { Meeting, MeetingAttendance } from './meetings' +import { HourLog } from './hours' +import { postgres_connection_string } from '@config' + +const sequelize = new Sequelize(postgres_connection_string, { + logging: (msg) => logger.trace(msg), + models: [Member, Cert, MemberCert, Meeting, MeetingAttendance, HourLog] +}) + +export async function connectDatabase() { + logger.info('Connecting...') + try { + await sequelize.authenticate() + await sequelize.sync() + logger.info('Connection has been established successfully.') + } catch (error) { + logger.error('Unable to connect to the database:', error) + } +} diff --git a/src/lib/db/meetings.ts b/src/lib/db/meetings.ts new file mode 100644 index 0000000..da083f4 --- /dev/null +++ b/src/lib/db/meetings.ts @@ -0,0 +1,47 @@ +import { BelongsTo, Column, DataType, ForeignKey, HasMany, Index, Model, Table } from 'sequelize-typescript' +import { Member } from './members' + +@Table +export class Meeting extends Model { + @Column({ + type: DataType.SMALLINT, + primaryKey: true, + autoIncrement: true, + autoIncrementIdentity: true + }) + id!: number + + @Column({ type: DataType.DATEONLY, allowNull: false }) + date!: Date + + @Column({ type: DataType.BOOLEAN, allowNull: false }) + mandatory!: boolean + + @HasMany(() => MeetingAttendance) + attendants!: MeetingAttendance[] +} + +@Table +export class MeetingAttendance extends Model { + @Column({ type: DataType.INTEGER, primaryKey: true, autoIncrement: true, autoIncrementIdentity: true }) + id!: number + + @Column({ type: DataType.ENUM('present', 'absent', 'no_credit'), allowNull: false }) + state!: 'present' | 'absent' | 'no_credit' + + @Index + @ForeignKey(() => Meeting) + @Column({ type: DataType.SMALLINT, allowNull: false }) + meeting_id!: number + + @Index + @ForeignKey(() => Member) + @Column({ type: DataType.STRING(50), allowNull: false }) + member_id!: string + + @BelongsTo(() => Meeting, 'meeting_id') + meeting!: Meeting + + @BelongsTo(() => Member, 'member_id') + member!: Member +} diff --git a/src/lib/db/members.ts b/src/lib/db/members.ts new file mode 100644 index 0000000..77b8676 --- /dev/null +++ b/src/lib/db/members.ts @@ -0,0 +1,83 @@ +import { Table, Column, Model, DataType, HasMany, Index } from 'sequelize-typescript' +import { MemberCert } from './certs' +import { MeetingAttendance } from './meetings' +import { HourLog } from './hours' +import logger from '@/lib/logger' +import { DatabaseError } from 'sequelize' +import { default_photo, default_photo_small } from '@config' + +@Table +export class Member extends Model { + @Column({ type: DataType.STRING(50), primaryKey: true, allowNull: false, unique: true }) + email!: string + + @Column({ type: DataType.STRING(50), allowNull: false }) + first_name!: string + + @Index + @Column({ type: DataType.STRING(100), allowNull: false }) + full_name!: string + + @Column({ type: DataType.ENUM('junior', 'primary'), allowNull: false }) + team!: 'junior' | 'primary' + + @Column({ type: DataType.SMALLINT, allowNull: false }) + grade!: number + + @Column({ type: DataType.SMALLINT, allowNull: false }) + years!: number + + @Column({ type: DataType.BOOLEAN, allowNull: false }) + use_slack_photo!: boolean + + @Column({ type: DataType.STRING(15), allowNull: true }) + slack_id?: string + + @Column({ type: DataType.STRING, allowNull: true }) + slack_photo?: string + + @Column({ type: DataType.STRING, allowNull: true }) + slack_photo_small?: string + + @Column({ type: DataType.ENUM('weekly', 'department') }) + slack_leaderboard_type?: 'weekly' | 'department' + + @Column({ type: DataType.STRING(50) }) + slack_department?: string + + @Column({ type: DataType.STRING }) + fallback_photo?: string + + @HasMany(() => MemberCert, 'member_id') + certs!: MemberCert[] + + @HasMany(() => MeetingAttendance, 'member_id') + meetings!: MeetingAttendance[] + + @HasMany(() => HourLog, 'member_id') + hours!: HourLog[] + + get photo(): string { + if (this.use_slack_photo && this.slack_photo != null) { + return this.slack_photo + } + return this.fallback_photo ?? default_photo + } + get photo_small(): string { + if (this.use_slack_photo && this.slack_photo_small != null) { + return this.slack_photo_small + } + return this.fallback_photo ?? default_photo_small + } +} + +export async function updateMember(data: Pick): Promise { + const memberRecord: Partial = { ...data, first_name: data.full_name.split(' ')[0] } + let success = true + await Member.upsert(memberRecord, { returning: false }).catch((reason: DatabaseError) => { + logger.debug(reason.original) + logger.error(`${reason.name}: ${reason.original.message}`) + success = false + }) + return success +} diff --git a/src/lib/logger.ts b/src/lib/logger.ts new file mode 100644 index 0000000..f5455b8 --- /dev/null +++ b/src/lib/logger.ts @@ -0,0 +1,9 @@ +import pino from 'pino' +import pretty from 'pino-pretty' +const logger = pino( + pretty({ + colorize: true + }) +) + +export default logger diff --git a/src/lib/renderer.tsx b/src/lib/renderer.tsx new file mode 100644 index 0000000..31e80e0 --- /dev/null +++ b/src/lib/renderer.tsx @@ -0,0 +1,16 @@ +import { jsxRenderer } from 'hono/jsx-renderer' +import { render } from 'hono/jsx/dom' + +export const renderer = jsxRenderer(({ children, title, js }) => { + return ( + + + {title} + + + {js && } + + {children} + + ) +}) diff --git a/src/lib/slack.ts b/src/lib/slack.ts new file mode 100644 index 0000000..5c4f88b --- /dev/null +++ b/src/lib/slack.ts @@ -0,0 +1,35 @@ +import { slack_profile_fields, slack_token } from '@config' +import logger from '@/lib/logger' +import { LogLevel, WebClient } from '@slack/web-api' + +const client: WebClient = new WebClient(slack_token, { + logger: { + ...logger, + setLevel() {}, + setName() {}, + getLevel(): LogLevel { + return LogLevel.DEBUG + } + } +}) + +export function getClient(): WebClient { + return client +} + +export async function setProfileAttribute(user: string, field: keyof typeof slack_profile_fields, value: string): Promise { + try { + const resp = await client.users.profile.set({ + user: user, + name: slack_profile_fields[field], + value + }) + if (!resp.ok) { + logger.error(resp) + } + return resp.ok + } catch (e) { + logger.error(e) + return false + } +} diff --git a/src/lib/util.ts b/src/lib/util.ts new file mode 100644 index 0000000..8844994 --- /dev/null +++ b/src/lib/util.ts @@ -0,0 +1,9 @@ +export function safeParseInt(value: any): number | undefined { + if (typeof value === 'string') { + const num = parseInt(value) + return isNaN(num) ? undefined : num + } + if (typeof value === 'number') { + return value + } +} diff --git a/src/routes/admin/cert.tsx b/src/routes/admin/cert.tsx new file mode 100644 index 0000000..05de0dd --- /dev/null +++ b/src/routes/admin/cert.tsx @@ -0,0 +1,54 @@ +import { Hono } from 'hono' +import { Member, updateMember } from '@/lib/db/members' +import { Cert, updateCert } from '@/lib/db/certs' +import { safeParseInt } from '@/lib/util' + +export const router = new Hono().basePath('/certs') + +const certDepartments = ['', 'admin', 'fab', 'design', 'robot_sw', 'app_sw', 'electronics', 'pneumatics', 'outreach', 'awards'] + +router + .get('/', async (c) => { + const rows = [...(await Cert.findAll({ order: [['id', 'ASC']] })), { id: '', label: '', level: '', department: '' }].map((cert, i) => ( +
+
+ +
+ + + + +
+ )) + return c.render( + <> +
+
+
+
ID
+
Label
+
Department
+
Level
+
+ {rows} +
+
+ + ) + }) + .post(async (c) => { + const data = await c.req.parseBody() + await updateCert({ + id: (data.id as string).trim().toUpperCase().replace(' ', '_'), + label: (data.label as string).trim(), + department: data.department as string, + level: safeParseInt(data.level) ?? 0 + }) + return c.redirect(c.req.url, 302) + }) diff --git a/src/routes/admin/index.ts b/src/routes/admin/index.ts new file mode 100644 index 0000000..7b1d2e5 --- /dev/null +++ b/src/routes/admin/index.ts @@ -0,0 +1,10 @@ +import { Hono } from 'hono' +import { router as member_route } from './member' +import { router as cert_route } from './cert' +export const router = new Hono() + +router.get('/', (c) => c.text('admin')) +router.route('/', member_route) +router.route('/', cert_route) + +export default router diff --git a/src/routes/admin/member.tsx b/src/routes/admin/member.tsx new file mode 100644 index 0000000..e88defb --- /dev/null +++ b/src/routes/admin/member.tsx @@ -0,0 +1,60 @@ +import { Hono } from 'hono' +import { Member, updateMember } from '@/lib/db/members' +import { safeParseInt } from '@/lib/util' + +export const router = new Hono().basePath('/members') + +router + .get('/', async (c) => { + const rows = [...(await Member.findAll({ order: [['full_name', 'ASC']], attributes: ['email', 'full_name', 'grade', 'years', 'use_slack_photo', 'team', 'slack_id'] })), { email: '', full_name: '', grade: '', years: '', use_slack_photo: false, team: '', slack_id: null }].map((member, i) => ( +
+
+
+ +
+ + + + + + +
+ )) + return c.render( + <> +
+
+
+
Email
+
Full Name
+
Grade
+
Years On Team
+
Team
+
Use Slack Photo
+
+ {rows} +
+
+ + ) + }) + .post(async (c) => { + const data = await c.req.parseBody() + await updateMember({ + email: (data.email as string).trim(), + full_name: (data.name as string).trim(), + years: safeParseInt(data.years) ?? 0, + grade: safeParseInt(data.grade) ?? 0, + team: data.team as 'junior' | 'primary', + use_slack_photo: data.slack_photo == 'on' + }) + return c.redirect(c.req.url, 302) + }) diff --git a/src/routes/api/index.ts b/src/routes/api/index.ts new file mode 100644 index 0000000..42b9e9e --- /dev/null +++ b/src/routes/api/index.ts @@ -0,0 +1,126 @@ +import { Context, Hono } from 'hono' +import { Member } from '@/lib/db/members' +import { syncSlackMembers } from '@/tasks/slack' +import { APIClockLabRequest, APIMember, APIClockExternalRespondRequest, APIClockExternalSubmitRequest, APIClockResponse } from '@types' +import logger from '@/lib/logger' +import { HourLog } from '@/lib/db/hours' + +const router = new Hono() + +router.get('/members', async (c) => { + const members = await Member.findAll({ attributes: ['email', 'first_name', 'full_name', 'use_slack_photo', 'slack_photo', 'slack_photo_small', 'fallback_photo'], order: [['full_name', 'ASC']] }) + const resp: APIMember[] = members.map((member) => ({ + email: member.email, + first_name: member.first_name, + full_name: member.full_name, + photo: member.photo, + photo_small: member.photo_small + })) + return c.json(resp) +}) + +router.get('/members/refresh', async (c) => { + await syncSlackMembers() + return c.redirect('/api/members', 302) +}) + +function clockJson(c: Context, payload: APIClockResponse) { + return c.json(payload) +} +router + .post('/clock/lab', async (c) => { + const { email, action }: APIClockLabRequest = await c.req.json() + const member = await Member.findOne({ where: { email }, attributes: ['email'] }) + if (member == null) { + logger.warn('ignoring login for unknown user ' + email) + c.status(400) + return clockJson(c, { success: false, error: 'member unknown' }) + } + try { + const log = await HourLog.findOne({ where: { state: 'pending', type: 'lab', member_id: email } }) + if (log) { + if (action == 'in') { + logger.warn('ignoring duplicate login for ' + email) + return clockJson(c, { success: false, error: 'member already logged in', log_id: log.id }) + } + if (action == 'out') { + log.time_out = new Date() + log.state = 'complete' + log.duration = (log.time_out.getTime() - log.time_in.getTime()) / 1000 / 60 / 60 + await log.save() + } else if (action == 'void') { + log.time_out = new Date() + log.state = 'cancelled' + log.duration = 0 + await log.save() + } + return clockJson(c, { success: true, log_id: log.id }) + } else if (action == 'in') { + const newLog = await HourLog.create({ member_id: email, time_in: new Date(), type: 'lab', state: 'pending' }) + return clockJson(c, { success: true, log_id: newLog.id }) + } else { + c.status(400) + return clockJson(c, { success: false, error: 'member not signed in' }) + } + } catch (e) { + logger.error(e) + c.status(500) + return clockJson(c, { success: false, error: 'unknown' }) + } + }) + .get(async (c) => { + return c.json(await HourLog.findAll({ where: { state: 'pending', type: 'lab' }, attributes: ['id', ['member_id', 'email'], 'time_in'] })) + }) + +router.get('/clock/external', async (c) => { + return c.json(await HourLog.findAll({ where: { state: 'pending', type: 'external' }, attributes: ['id', ['member_id', 'email'], 'time_in', 'duration', 'slack_ts'] })) +}) + +router.post('/clock/external/submit', async (c) => { + const { email, message, hours }: APIClockExternalSubmitRequest = await c.req.json() + const member = await Member.findOne({ where: { email }, attributes: ['email'] }) + if (member == null) { + logger.warn('ignoring external submission for unknown user ' + email) + c.status(400) + return c.json({ success: false, error: 'member unknown' }) + } + try { + const newLog = await HourLog.create({ member_id: email, time_in: new Date(), duration: hours, message, type: 'external', state: 'pending' }) + return clockJson(c, { success: true, log_id: newLog.id }) + } catch (e) { + logger.error(e) + c.status(500) + return clockJson(c, { success: false, error: 'unknown' }) + } +}) + +router.post('/clock/external/respond', async (c) => { + const { id, action, category }: APIClockExternalRespondRequest = await c.req.json() + const log = await HourLog.findByPk(id) + if (log == null) { + logger.warn('Ignoring confirmation for unknown hour request ' + id) + c.status(400) + return clockJson(c, { success: false, error: 'request unknown' }) + } + if (log.state != 'pending') { + logger.warn('Received confirmation for completed hour request ' + id + '. Updating anyway...') + } + try { + if (action == 'approve') { + log.state = 'complete' + log.time_out = new Date() + log.type = category + await log.save() + } else { + log.state = 'cancelled' + log.time_out = new Date() + await log.save() + } + return clockJson(c, { success: true, log_id: log.id }) + } catch (e) { + logger.error(e) + c.status(500) + return clockJson(c, { success: false, error: 'unknown' }) + } +}) +export default router diff --git a/src/tasks/certs.ts b/src/tasks/certs.ts new file mode 100644 index 0000000..1f7284d --- /dev/null +++ b/src/tasks/certs.ts @@ -0,0 +1,36 @@ +import { MemberCert } from '@/lib/db/certs' +import { getClient, setProfileAttribute } from '@/lib/slack' +import { slack_celebration_channel, slack_profile_fields } from '@config' +import logger from '@/lib/logger' + +const congratsMessages = ['Hey! Congrats @ for you new {} Cert!', 'Awww, @ just got a {} Cert... They hatch so fast [;', '@. {}. Well done.', 'Bawk bawk, bawk bawk @ bawk {} bawk, bawk SKREEEEE', 'Friends! @ has earned a {}. May we all feast and be merry. :shallow_pan_of_food: ', 'Congrats to @ on getting a {} certification!', '@ just earned a {}. Did you know: Software is the bread and butter of robotics.'] + +export async function createCertChangeListener() { + const listener = async (membercert: MemberCert) => { + logger.info('Change triggered ' + membercert.id) + const member = (await membercert.$get('member'))! + const cert = (await membercert.$get('cert'))! + + const userText = member.slack_id == null ? member.first_name : `<@${member.slack_id}>` + let message = congratsMessages[Math.floor(Math.random() * congratsMessages.length)] // get random message + message = message.replace('@', userText) // set user mention + message = message.replace('{}', `*${cert.label}*`) // set cert name in *bold* + + await getClient().chat.postMessage({ channel: slack_celebration_channel, text: message }) + if (member.slack_id) { + const certs = await member.$get('certs') + const certNames = [] + for (const membercert of certs) { + const cert = await membercert.$get('cert') + if (cert) { + certNames.push(cert?.label) + } else { + logger.warn('unknown cert ' + membercert.cert_id) + } + } + await setProfileAttribute(member.slack_id, 'certs', certNames.join(', ')) + } + } + MemberCert.afterCreate(listener) + MemberCert.afterUpdate(listener) +} diff --git a/src/tasks/slack.ts b/src/tasks/slack.ts new file mode 100644 index 0000000..3b50a6e --- /dev/null +++ b/src/tasks/slack.ts @@ -0,0 +1,39 @@ +import logger from '@/lib/logger' +import { Member } from '@/lib/db/members' +import { Member as SlackMember } from '@slack/web-api/dist/types/response/UsersListResponse' +import AsyncLock from 'async-lock' +import { getClient } from '@/lib/slack' + +const lock = new AsyncLock({ maxExecutionTime: 3000, maxPending: 0 }) + +export async function syncSlackMembers() { + if (lock.isBusy()) { + return + } + await lock + .acquire('slack_sync', async () => { + logger.info('Starting slack sync...') + const db_members = await Member.findAll() + const slack_members = (await getClient().users.list({})).members ?? [] + + const slack_members_lookup: Record = {} + slack_members.forEach((member) => (slack_members_lookup[member.profile!.email!] = member)) + let updated = 0 + for (const member of db_members) { + const slack_member = slack_members_lookup[member.email] + if (slack_member != null) { + member.slack_id = slack_member.id + member.slack_photo = slack_member.profile?.image_original + member.slack_photo_small = slack_member.profile?.image_192 + + const display_name = ((slack_member.profile?.display_name?.length ?? 0) > 0 ? slack_member.profile?.display_name : slack_member.name) ?? member.full_name + member.first_name = display_name.split(' ')[0].trim() + + await member.save() + updated++ + } // #4cc091 + } + logger.info(`Found ${updated} members on slack`) + }) + .catch((err) => logger.warn(err)) +} diff --git a/static/app.css b/static/app.css new file mode 100644 index 0000000..9881ab9 --- /dev/null +++ b/static/app.css @@ -0,0 +1,768 @@ +/* +! tailwindcss v3.4.4 | MIT License | https://tailwindcss.com +*/ + +/* +1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4) +2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116) +*/ + +*, +::before, +::after { + box-sizing: border-box; + /* 1 */ + border-width: 0; + /* 2 */ + border-style: solid; + /* 2 */ + border-color: #e5e7eb; + /* 2 */ +} + +::before, +::after { + --tw-content: ''; +} + +/* +1. Use a consistent sensible line-height in all browsers. +2. Prevent adjustments of font size after orientation changes in iOS. +3. Use a more readable tab size. +4. Use the user's configured `sans` font-family by default. +5. Use the user's configured `sans` font-feature-settings by default. +6. Use the user's configured `sans` font-variation-settings by default. +7. Disable tap highlights on iOS +*/ + +html, +:host { + line-height: 1.5; + /* 1 */ + -webkit-text-size-adjust: 100%; + /* 2 */ + -moz-tab-size: 4; + /* 3 */ + -o-tab-size: 4; + tab-size: 4; + /* 3 */ + font-family: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + /* 4 */ + font-feature-settings: normal; + /* 5 */ + font-variation-settings: normal; + /* 6 */ + -webkit-tap-highlight-color: transparent; + /* 7 */ +} + +/* +1. Remove the margin in all browsers. +2. Inherit line-height from `html` so users can set them as a class directly on the `html` element. +*/ + +body { + margin: 0; + /* 1 */ + line-height: inherit; + /* 2 */ +} + +/* +1. Add the correct height in Firefox. +2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655) +3. Ensure horizontal rules are visible by default. +*/ + +hr { + height: 0; + /* 1 */ + color: inherit; + /* 2 */ + border-top-width: 1px; + /* 3 */ +} + +/* +Add the correct text decoration in Chrome, Edge, and Safari. +*/ + +abbr:where([title]) { + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; +} + +/* +Remove the default font size and weight for headings. +*/ + +h1, +h2, +h3, +h4, +h5, +h6 { + font-size: inherit; + font-weight: inherit; +} + +/* +Reset links to optimize for opt-in styling instead of opt-out. +*/ + +a { + color: inherit; + text-decoration: inherit; +} + +/* +Add the correct font weight in Edge and Safari. +*/ + +b, +strong { + font-weight: bolder; +} + +/* +1. Use the user's configured `mono` font-family by default. +2. Use the user's configured `mono` font-feature-settings by default. +3. Use the user's configured `mono` font-variation-settings by default. +4. Correct the odd `em` font sizing in all browsers. +*/ + +code, +kbd, +samp, +pre { + font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + /* 1 */ + font-feature-settings: normal; + /* 2 */ + font-variation-settings: normal; + /* 3 */ + font-size: 1em; + /* 4 */ +} + +/* +Add the correct font size in all browsers. +*/ + +small { + font-size: 80%; +} + +/* +Prevent `sub` and `sup` elements from affecting the line height in all browsers. +*/ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +/* +1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297) +2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016) +3. Remove gaps between table borders by default. +*/ + +table { + text-indent: 0; + /* 1 */ + border-color: inherit; + /* 2 */ + border-collapse: collapse; + /* 3 */ +} + +/* +1. Change the font styles in all browsers. +2. Remove the margin in Firefox and Safari. +3. Remove default padding in all browsers. +*/ + +button, +input, +optgroup, +select, +textarea { + font-family: inherit; + /* 1 */ + font-feature-settings: inherit; + /* 1 */ + font-variation-settings: inherit; + /* 1 */ + font-size: 100%; + /* 1 */ + font-weight: inherit; + /* 1 */ + line-height: inherit; + /* 1 */ + letter-spacing: inherit; + /* 1 */ + color: inherit; + /* 1 */ + margin: 0; + /* 2 */ + padding: 0; + /* 3 */ +} + +/* +Remove the inheritance of text transform in Edge and Firefox. +*/ + +button, +select { + text-transform: none; +} + +/* +1. Correct the inability to style clickable types in iOS and Safari. +2. Remove default button styles. +*/ + +button, +input:where([type='button']), +input:where([type='reset']), +input:where([type='submit']) { + -webkit-appearance: button; + /* 1 */ + background-color: transparent; + /* 2 */ + background-image: none; + /* 2 */ +} + +/* +Use the modern Firefox focus style for all focusable elements. +*/ + +:-moz-focusring { + outline: auto; +} + +/* +Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737) +*/ + +:-moz-ui-invalid { + box-shadow: none; +} + +/* +Add the correct vertical alignment in Chrome and Firefox. +*/ + +progress { + vertical-align: baseline; +} + +/* +Correct the cursor style of increment and decrement buttons in Safari. +*/ + +::-webkit-inner-spin-button, +::-webkit-outer-spin-button { + height: auto; +} + +/* +1. Correct the odd appearance in Chrome and Safari. +2. Correct the outline style in Safari. +*/ + +[type='search'] { + -webkit-appearance: textfield; + /* 1 */ + outline-offset: -2px; + /* 2 */ +} + +/* +Remove the inner padding in Chrome and Safari on macOS. +*/ + +::-webkit-search-decoration { + -webkit-appearance: none; +} + +/* +1. Correct the inability to style clickable types in iOS and Safari. +2. Change font properties to `inherit` in Safari. +*/ + +::-webkit-file-upload-button { + -webkit-appearance: button; + /* 1 */ + font: inherit; + /* 2 */ +} + +/* +Add the correct display in Chrome and Safari. +*/ + +summary { + display: list-item; +} + +/* +Removes the default spacing and border for appropriate elements. +*/ + +blockquote, +dl, +dd, +h1, +h2, +h3, +h4, +h5, +h6, +hr, +figure, +p, +pre { + margin: 0; +} + +fieldset { + margin: 0; + padding: 0; +} + +legend { + padding: 0; +} + +ol, +ul, +menu { + list-style: none; + margin: 0; + padding: 0; +} + +/* +Reset default styling for dialogs. +*/ + +dialog { + padding: 0; +} + +/* +Prevent resizing textareas horizontally by default. +*/ + +textarea { + resize: vertical; +} + +/* +1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300) +2. Set the default placeholder color to the user's configured gray 400 color. +*/ + +input::-moz-placeholder, textarea::-moz-placeholder { + opacity: 1; + /* 1 */ + color: #9ca3af; + /* 2 */ +} + +input::placeholder, +textarea::placeholder { + opacity: 1; + /* 1 */ + color: #9ca3af; + /* 2 */ +} + +/* +Set the default cursor for buttons. +*/ + +button, +[role="button"] { + cursor: pointer; +} + +/* +Make sure disabled buttons don't get the pointer cursor. +*/ + +:disabled { + cursor: default; +} + +/* +1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14) +2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210) + This can trigger a poorly considered lint error in some tools but is included by design. +*/ + +img, +svg, +video, +canvas, +audio, +iframe, +embed, +object { + display: block; + /* 1 */ + vertical-align: middle; + /* 2 */ +} + +/* +Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14) +*/ + +img, +video { + max-width: 100%; + height: auto; +} + +/* Make elements with the HTML hidden attribute stay hidden by default */ + +[hidden] { + display: none; +} + +*, ::before, ::after { + --tw-border-spacing-x: 0; + --tw-border-spacing-y: 0; + --tw-translate-x: 0; + --tw-translate-y: 0; + --tw-rotate: 0; + --tw-skew-x: 0; + --tw-skew-y: 0; + --tw-scale-x: 1; + --tw-scale-y: 1; + --tw-pan-x: ; + --tw-pan-y: ; + --tw-pinch-zoom: ; + --tw-scroll-snap-strictness: proximity; + --tw-gradient-from-position: ; + --tw-gradient-via-position: ; + --tw-gradient-to-position: ; + --tw-ordinal: ; + --tw-slashed-zero: ; + --tw-numeric-figure: ; + --tw-numeric-spacing: ; + --tw-numeric-fraction: ; + --tw-ring-inset: ; + --tw-ring-offset-width: 0px; + --tw-ring-offset-color: #fff; + --tw-ring-color: rgb(59 130 246 / 0.5); + --tw-ring-offset-shadow: 0 0 #0000; + --tw-ring-shadow: 0 0 #0000; + --tw-shadow: 0 0 #0000; + --tw-shadow-colored: 0 0 #0000; + --tw-blur: ; + --tw-brightness: ; + --tw-contrast: ; + --tw-grayscale: ; + --tw-hue-rotate: ; + --tw-invert: ; + --tw-saturate: ; + --tw-sepia: ; + --tw-drop-shadow: ; + --tw-backdrop-blur: ; + --tw-backdrop-brightness: ; + --tw-backdrop-contrast: ; + --tw-backdrop-grayscale: ; + --tw-backdrop-hue-rotate: ; + --tw-backdrop-invert: ; + --tw-backdrop-opacity: ; + --tw-backdrop-saturate: ; + --tw-backdrop-sepia: ; + --tw-contain-size: ; + --tw-contain-layout: ; + --tw-contain-paint: ; + --tw-contain-style: ; +} + +::backdrop { + --tw-border-spacing-x: 0; + --tw-border-spacing-y: 0; + --tw-translate-x: 0; + --tw-translate-y: 0; + --tw-rotate: 0; + --tw-skew-x: 0; + --tw-skew-y: 0; + --tw-scale-x: 1; + --tw-scale-y: 1; + --tw-pan-x: ; + --tw-pan-y: ; + --tw-pinch-zoom: ; + --tw-scroll-snap-strictness: proximity; + --tw-gradient-from-position: ; + --tw-gradient-via-position: ; + --tw-gradient-to-position: ; + --tw-ordinal: ; + --tw-slashed-zero: ; + --tw-numeric-figure: ; + --tw-numeric-spacing: ; + --tw-numeric-fraction: ; + --tw-ring-inset: ; + --tw-ring-offset-width: 0px; + --tw-ring-offset-color: #fff; + --tw-ring-color: rgb(59 130 246 / 0.5); + --tw-ring-offset-shadow: 0 0 #0000; + --tw-ring-shadow: 0 0 #0000; + --tw-shadow: 0 0 #0000; + --tw-shadow-colored: 0 0 #0000; + --tw-blur: ; + --tw-brightness: ; + --tw-contrast: ; + --tw-grayscale: ; + --tw-hue-rotate: ; + --tw-invert: ; + --tw-saturate: ; + --tw-sepia: ; + --tw-drop-shadow: ; + --tw-backdrop-blur: ; + --tw-backdrop-brightness: ; + --tw-backdrop-contrast: ; + --tw-backdrop-grayscale: ; + --tw-backdrop-hue-rotate: ; + --tw-backdrop-invert: ; + --tw-backdrop-opacity: ; + --tw-backdrop-saturate: ; + --tw-backdrop-sepia: ; + --tw-contain-size: ; + --tw-contain-layout: ; + --tw-contain-paint: ; + --tw-contain-style: ; +} + +.col-span-5 { + grid-column: span 5 / span 5; +} + +.col-span-7 { + grid-column: span 7 / span 7; +} + +.flex { + display: flex; +} + +.grid { + display: grid; +} + +.h-1 { + height: 0.25rem; +} + +.w-1 { + width: 0.25rem; +} + +.grid-cols-\[2fr_2fr_2fr_2fr_1fr\] { + grid-template-columns: 2fr 2fr 2fr 2fr 1fr; +} + +.grid-cols-\[3fr_3fr_1fr_1fr_1fr_1fr_1fr\] { + grid-template-columns: 3fr 3fr 1fr 1fr 1fr 1fr 1fr; +} + +.grid-cols-subgrid { + grid-template-columns: subgrid; +} + +.flex-row { + flex-direction: row; +} + +.items-center { + align-items: center; +} + +.justify-center { + justify-content: center; +} + +.gap-2 { + gap: 0.5rem; +} + +.gap-3 { + gap: 0.75rem; +} + +.rounded-full { + border-radius: 9999px; +} + +.rounded-lg { + border-radius: 0.5rem; +} + +.border-0 { + border-width: 0px; +} + +.border-t-2 { + border-top-width: 2px; +} + +.border-purple-500 { + --tw-border-opacity: 1; + border-color: rgb(168 85 247 / var(--tw-border-opacity)); +} + +.border-teal-500 { + --tw-border-opacity: 1; + border-color: rgb(20 184 166 / var(--tw-border-opacity)); +} + +.bg-green-600 { + --tw-bg-opacity: 1; + background-color: rgb(22 163 74 / var(--tw-bg-opacity)); +} + +.bg-purple-100 { + --tw-bg-opacity: 1; + background-color: rgb(243 232 255 / var(--tw-bg-opacity)); +} + +.bg-purple-200 { + --tw-bg-opacity: 1; + background-color: rgb(233 213 255 / var(--tw-bg-opacity)); +} + +.bg-purple-300 { + --tw-bg-opacity: 1; + background-color: rgb(216 180 254 / var(--tw-bg-opacity)); +} + +.bg-purple-400 { + --tw-bg-opacity: 1; + background-color: rgb(192 132 252 / var(--tw-bg-opacity)); +} + +.bg-red-600 { + --tw-bg-opacity: 1; + background-color: rgb(220 38 38 / var(--tw-bg-opacity)); +} + +.bg-teal-100 { + --tw-bg-opacity: 1; + background-color: rgb(204 251 241 / var(--tw-bg-opacity)); +} + +.bg-teal-200 { + --tw-bg-opacity: 1; + background-color: rgb(153 246 228 / var(--tw-bg-opacity)); +} + +.bg-teal-300 { + --tw-bg-opacity: 1; + background-color: rgb(94 234 212 / var(--tw-bg-opacity)); +} + +.bg-teal-400 { + --tw-bg-opacity: 1; + background-color: rgb(45 212 191 / var(--tw-bg-opacity)); +} + +.p-2 { + padding: 0.5rem; +} + +.p-3 { + padding: 0.75rem; +} + +.pl-2 { + padding-left: 0.5rem; +} + +.pt-5 { + padding-top: 1.25rem; +} + +.text-center { + text-align: center; +} + +.text-xl { + font-size: 1.25rem; + line-height: 1.75rem; +} + +.accent-purple-400 { + accent-color: #c084fc; +} + +.transition-colors { + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; +} + +.duration-200 { + transition-duration: 200ms; +} + +.read-only\:cursor-default:-moz-read-only { + cursor: default; +} + +.read-only\:cursor-default:read-only { + cursor: default; +} + +.read-only\:bg-purple-200:-moz-read-only { + --tw-bg-opacity: 1; + background-color: rgb(233 213 255 / var(--tw-bg-opacity)); +} + +.read-only\:bg-purple-200:read-only { + --tw-bg-opacity: 1; + background-color: rgb(233 213 255 / var(--tw-bg-opacity)); +} + +.read-only\:bg-teal-200:-moz-read-only { + --tw-bg-opacity: 1; + background-color: rgb(153 246 228 / var(--tw-bg-opacity)); +} + +.read-only\:bg-teal-200:read-only { + --tw-bg-opacity: 1; + background-color: rgb(153 246 228 / var(--tw-bg-opacity)); +} + +.hover\:bg-purple-600:hover { + --tw-bg-opacity: 1; + background-color: rgb(147 51 234 / var(--tw-bg-opacity)); +} + +.hover\:bg-teal-600:hover { + --tw-bg-opacity: 1; + background-color: rgb(13 148 136 / var(--tw-bg-opacity)); +} + +.focus\:outline-0:focus { + outline-width: 0px; +} \ No newline at end of file diff --git a/static/img/bg-grid-blurred.png b/static/img/bg-grid-blurred.png new file mode 100644 index 0000000000000000000000000000000000000000..4e0fa92c39c2b049a2be20eb4792f51875827dcf GIT binary patch literal 1607589 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