Scratch space for learning atproto app development

Merge pull request #7 from bluesky-social/paul/simplify-repo

Simplify repo

-7
.env.template
···
PUBLIC_URL="" # Set when deployed publicly, e.g. "https://mysite.com". Informs OAuth client id.
DB_PATH=":memory:" # The SQLite database path. Leave as ":memory:" to use a temporary in-memory database.
-
# CORS Settings
-
CORS_ORIGIN="http://localhost:*" # Allowed CORS origin, adjust as necessary
-
-
# Rate Limiting
-
COMMON_RATE_LIMIT_WINDOW_MS="1000" # Window size for rate limiting (ms)
-
COMMON_RATE_LIMIT_MAX_REQUESTS="20" # Max number of requests per window per IP
-
# Secrets
# Must set this in production. May be generated with `openssl rand -base64 33`
# COOKIE_SECRET=""
-22
Dockerfile
···
-
FROM node:22.5-slim
-
-
# Create app directory
-
WORKDIR /usr/src/app
-
-
# Copy package.json and package-lock.json
-
COPY package*.json ./
-
-
# Install app dependencies
-
RUN npm ci
-
-
# Bundle app source
-
COPY . .
-
-
# Build the TypeScript files
-
RUN npm run build
-
-
# Expose port 8080
-
EXPOSE 8080
-
-
# Start the app
-
CMD npm run start
-31
biome.json
···
-
{
-
"$schema": "https://biomejs.dev/schemas/1.8.3/schema.json",
-
"javascript": {
-
"formatter": {
-
"semicolons": "asNeeded",
-
"quoteStyle": "single"
-
}
-
},
-
"formatter": {
-
"indentStyle": "space",
-
"lineWidth": 120
-
},
-
"organizeImports": { "enabled": true },
-
"linter": {
-
"enabled": true,
-
"rules": {
-
"recommended": true,
-
"suspicious": {
-
"noExplicitAny": "off",
-
"noConfusingVoidType": "off"
-
},
-
"style": {
-
"noUselessElse": "off",
-
"noNonNullAssertion": "off"
-
},
-
"complexity": {
-
"noForEach": "off"
-
}
-
}
-
}
-
}
+10 -2400
package-lock.json
···
"license": "MIT",
"dependencies": {
"@atproto/identity": "^0.4.0",
-
"@atproto/jwk-jose": "0.1.2-rc.0",
"@atproto/lexicon": "0.4.1-rc.0",
"@atproto/oauth-client-node": "0.0.2-rc.2",
"@atproto/repo": "0.4.2-rc.0",
"@atproto/syntax": "^0.3.0",
"@atproto/xrpc-server": "0.5.4-rc.0",
"better-sqlite3": "^11.1.2",
-
"cors": "^2.8.5",
"dotenv": "^16.4.5",
"envalid": "^8.0.0",
"express": "^4.19.2",
-
"express-rate-limit": "^7.2.0",
-
"helmet": "^7.1.0",
-
"http-status-codes": "^2.3.0",
"iron-session": "^8.0.2",
"kysely": "^0.27.4",
"multiformats": "^9.9.0",
···
},
"devDependencies": {
"@atproto/lex-cli": "^0.4.1",
-
"@biomejs/biome": "1.8.3",
"@types/better-sqlite3": "^7.6.11",
-
"@types/cors": "^2.8.17",
"@types/express": "^4.17.21",
-
"lint-staged": "^15.2.2",
"pino-pretty": "^11.0.0",
"rimraf": "^5.0.0",
-
"supertest": "^7.0.0",
"ts-node": "^10.9.2",
"tsup": "^8.0.2",
"tsx": "^4.7.2",
-
"typescript": "^5.4.4",
-
"vite-tsconfig-paths": "^4.3.2",
-
"vitest": "^2.0.0"
-
}
-
},
-
"node_modules/@ampproject/remapping": {
-
"version": "2.3.0",
-
"resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz",
-
"integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==",
-
"dev": true,
-
"dependencies": {
-
"@jridgewell/gen-mapping": "^0.3.5",
-
"@jridgewell/trace-mapping": "^0.3.24"
-
},
-
"engines": {
-
"node": ">=6.0.0"
-
}
-
},
-
"node_modules/@ampproject/remapping/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"
+
"typescript": "^5.4.4"
}
},
"node_modules/@atproto-labs/did-resolver": {
···
"zod": "^3.23.8"
}
},
-
"node_modules/@biomejs/biome": {
-
"version": "1.8.3",
-
"resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-1.8.3.tgz",
-
"integrity": "sha512-/uUV3MV+vyAczO+vKrPdOW0Iaet7UnJMU4bNMinggGJTAnBPjCoLEYcyYtYHNnUNYlv4xZMH6hVIQCAozq8d5w==",
-
"dev": true,
-
"hasInstallScript": true,
-
"bin": {
-
"biome": "bin/biome"
-
},
-
"engines": {
-
"node": ">=14.21.3"
-
},
-
"funding": {
-
"type": "opencollective",
-
"url": "https://opencollective.com/biome"
-
},
-
"optionalDependencies": {
-
"@biomejs/cli-darwin-arm64": "1.8.3",
-
"@biomejs/cli-darwin-x64": "1.8.3",
-
"@biomejs/cli-linux-arm64": "1.8.3",
-
"@biomejs/cli-linux-arm64-musl": "1.8.3",
-
"@biomejs/cli-linux-x64": "1.8.3",
-
"@biomejs/cli-linux-x64-musl": "1.8.3",
-
"@biomejs/cli-win32-arm64": "1.8.3",
-
"@biomejs/cli-win32-x64": "1.8.3"
-
}
-
},
-
"node_modules/@biomejs/cli-darwin-arm64": {
-
"version": "1.8.3",
-
"resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-1.8.3.tgz",
-
"integrity": "sha512-9DYOjclFpKrH/m1Oz75SSExR8VKvNSSsLnVIqdnKexj6NwmiMlKk94Wa1kZEdv6MCOHGHgyyoV57Cw8WzL5n3A==",
-
"cpu": [
-
"arm64"
-
],
-
"dev": true,
-
"optional": true,
-
"os": [
-
"darwin"
-
],
-
"engines": {
-
"node": ">=14.21.3"
-
}
-
},
-
"node_modules/@biomejs/cli-darwin-x64": {
-
"version": "1.8.3",
-
"resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-1.8.3.tgz",
-
"integrity": "sha512-UeW44L/AtbmOF7KXLCoM+9PSgPo0IDcyEUfIoOXYeANaNXXf9mLUwV1GeF2OWjyic5zj6CnAJ9uzk2LT3v/wAw==",
-
"cpu": [
-
"x64"
-
],
-
"dev": true,
-
"optional": true,
-
"os": [
-
"darwin"
-
],
-
"engines": {
-
"node": ">=14.21.3"
-
}
-
},
-
"node_modules/@biomejs/cli-linux-arm64": {
-
"version": "1.8.3",
-
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-1.8.3.tgz",
-
"integrity": "sha512-fed2ji8s+I/m8upWpTJGanqiJ0rnlHOK3DdxsyVLZQ8ClY6qLuPc9uehCREBifRJLl/iJyQpHIRufLDeotsPtw==",
-
"cpu": [
-
"arm64"
-
],
-
"dev": true,
-
"optional": true,
-
"os": [
-
"linux"
-
],
-
"engines": {
-
"node": ">=14.21.3"
-
}
-
},
-
"node_modules/@biomejs/cli-linux-arm64-musl": {
-
"version": "1.8.3",
-
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-1.8.3.tgz",
-
"integrity": "sha512-9yjUfOFN7wrYsXt/T/gEWfvVxKlnh3yBpnScw98IF+oOeCYb5/b/+K7YNqKROV2i1DlMjg9g/EcN9wvj+NkMuQ==",
-
"cpu": [
-
"arm64"
-
],
-
"dev": true,
-
"optional": true,
-
"os": [
-
"linux"
-
],
-
"engines": {
-
"node": ">=14.21.3"
-
}
-
},
-
"node_modules/@biomejs/cli-linux-x64": {
-
"version": "1.8.3",
-
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-1.8.3.tgz",
-
"integrity": "sha512-I8G2QmuE1teISyT8ie1HXsjFRz9L1m5n83U1O6m30Kw+kPMPSKjag6QGUn+sXT8V+XWIZxFFBoTDEDZW2KPDDw==",
-
"cpu": [
-
"x64"
-
],
-
"dev": true,
-
"optional": true,
-
"os": [
-
"linux"
-
],
-
"engines": {
-
"node": ">=14.21.3"
-
}
-
},
-
"node_modules/@biomejs/cli-linux-x64-musl": {
-
"version": "1.8.3",
-
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-1.8.3.tgz",
-
"integrity": "sha512-UHrGJX7PrKMKzPGoEsooKC9jXJMa28TUSMjcIlbDnIO4EAavCoVmNQaIuUSH0Ls2mpGMwUIf+aZJv657zfWWjA==",
-
"cpu": [
-
"x64"
-
],
-
"dev": true,
-
"optional": true,
-
"os": [
-
"linux"
-
],
-
"engines": {
-
"node": ">=14.21.3"
-
}
-
},
-
"node_modules/@biomejs/cli-win32-arm64": {
-
"version": "1.8.3",
-
"resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-1.8.3.tgz",
-
"integrity": "sha512-J+Hu9WvrBevfy06eU1Na0lpc7uR9tibm9maHynLIoAjLZpQU3IW+OKHUtyL8p6/3pT2Ju5t5emReeIS2SAxhkQ==",
-
"cpu": [
-
"arm64"
-
],
-
"dev": true,
-
"optional": true,
-
"os": [
-
"win32"
-
],
-
"engines": {
-
"node": ">=14.21.3"
-
}
-
},
-
"node_modules/@biomejs/cli-win32-x64": {
-
"version": "1.8.3",
-
"resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-1.8.3.tgz",
-
"integrity": "sha512-/PJ59vA1pnQeKahemaQf4Nyj7IKUvGQSc3Ze1uIGi+Wvr1xF7rGobSrAAG01T/gUDG21vkDsZYM03NAmPiVkqg==",
-
"cpu": [
-
"x64"
-
],
-
"dev": true,
-
"optional": true,
-
"os": [
-
"win32"
-
],
-
"engines": {
-
"node": ">=14.21.3"
-
}
-
},
"node_modules/@cbor-extract/cbor-extract-darwin-arm64": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/@cbor-extract/cbor-extract-darwin-arm64/-/cbor-extract-darwin-arm64-2.2.0.tgz",
···
"darwin"
]
},
-
"node_modules/@cbor-extract/cbor-extract-darwin-x64": {
-
"version": "2.2.0",
-
"resolved": "https://registry.npmjs.org/@cbor-extract/cbor-extract-darwin-x64/-/cbor-extract-darwin-x64-2.2.0.tgz",
-
"integrity": "sha512-1liF6fgowph0JxBbYnAS7ZlqNYLf000Qnj4KjqPNW4GViKrEql2MgZnAsExhY9LSy8dnvA4C0qHEBgPrll0z0w==",
-
"cpu": [
-
"x64"
-
],
-
"optional": true,
-
"os": [
-
"darwin"
-
]
-
},
-
"node_modules/@cbor-extract/cbor-extract-linux-arm": {
-
"version": "2.2.0",
-
"resolved": "https://registry.npmjs.org/@cbor-extract/cbor-extract-linux-arm/-/cbor-extract-linux-arm-2.2.0.tgz",
-
"integrity": "sha512-QeBcBXk964zOytiedMPQNZr7sg0TNavZeuUCD6ON4vEOU/25+pLhNN6EDIKJ9VLTKaZ7K7EaAriyYQ1NQ05s/Q==",
-
"cpu": [
-
"arm"
-
],
-
"optional": true,
-
"os": [
-
"linux"
-
]
-
},
-
"node_modules/@cbor-extract/cbor-extract-linux-arm64": {
-
"version": "2.2.0",
-
"resolved": "https://registry.npmjs.org/@cbor-extract/cbor-extract-linux-arm64/-/cbor-extract-linux-arm64-2.2.0.tgz",
-
"integrity": "sha512-rQvhNmDuhjTVXSPFLolmQ47/ydGOFXtbR7+wgkSY0bdOxCFept1hvg59uiLPT2fVDuJFuEy16EImo5tE2x3RsQ==",
-
"cpu": [
-
"arm64"
-
],
-
"optional": true,
-
"os": [
-
"linux"
-
]
-
},
-
"node_modules/@cbor-extract/cbor-extract-linux-x64": {
-
"version": "2.2.0",
-
"resolved": "https://registry.npmjs.org/@cbor-extract/cbor-extract-linux-x64/-/cbor-extract-linux-x64-2.2.0.tgz",
-
"integrity": "sha512-cWLAWtT3kNLHSvP4RKDzSTX9o0wvQEEAj4SKvhWuOVZxiDAeQazr9A+PSiRILK1VYMLeDml89ohxCnUNQNQNCw==",
-
"cpu": [
-
"x64"
-
],
-
"optional": true,
-
"os": [
-
"linux"
-
]
-
},
-
"node_modules/@cbor-extract/cbor-extract-win32-x64": {
-
"version": "2.2.0",
-
"resolved": "https://registry.npmjs.org/@cbor-extract/cbor-extract-win32-x64/-/cbor-extract-win32-x64-2.2.0.tgz",
-
"integrity": "sha512-l2M+Z8DO2vbvADOBNLbbh9y5ST1RY5sqkWOg/58GkUPBYou/cuNZ68SGQ644f1CvZ8kcOxyZtw06+dxWHIoN/w==",
-
"cpu": [
-
"x64"
-
],
-
"optional": true,
-
"os": [
-
"win32"
-
]
-
},
"node_modules/@cspotcode/source-map-support": {
"version": "0.8.1",
"resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
···
"node": ">=12"
}
},
-
"node_modules/@esbuild/aix-ppc64": {
-
"version": "0.23.0",
-
"resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.0.tgz",
-
"integrity": "sha512-3sG8Zwa5fMcA9bgqB8AfWPQ+HFke6uD3h1s3RIwUNK8EG7a4buxvuFTs3j1IMs2NXAk9F30C/FF4vxRgQCcmoQ==",
-
"cpu": [
-
"ppc64"
-
],
-
"dev": true,
-
"optional": true,
-
"os": [
-
"aix"
-
],
-
"engines": {
-
"node": ">=18"
-
}
-
},
-
"node_modules/@esbuild/android-arm": {
-
"version": "0.23.0",
-
"resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.0.tgz",
-
"integrity": "sha512-+KuOHTKKyIKgEEqKbGTK8W7mPp+hKinbMBeEnNzjJGyFcWsfrXjSTNluJHCY1RqhxFurdD8uNXQDei7qDlR6+g==",
-
"cpu": [
-
"arm"
-
],
-
"dev": true,
-
"optional": true,
-
"os": [
-
"android"
-
],
-
"engines": {
-
"node": ">=18"
-
}
-
},
-
"node_modules/@esbuild/android-arm64": {
-
"version": "0.23.0",
-
"resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.0.tgz",
-
"integrity": "sha512-EuHFUYkAVfU4qBdyivULuu03FhJO4IJN9PGuABGrFy4vUuzk91P2d+npxHcFdpUnfYKy0PuV+n6bKIpHOB3prQ==",
-
"cpu": [
-
"arm64"
-
],
-
"dev": true,
-
"optional": true,
-
"os": [
-
"android"
-
],
-
"engines": {
-
"node": ">=18"
-
}
-
},
-
"node_modules/@esbuild/android-x64": {
-
"version": "0.23.0",
-
"resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.0.tgz",
-
"integrity": "sha512-WRrmKidLoKDl56LsbBMhzTTBxrsVwTKdNbKDalbEZr0tcsBgCLbEtoNthOW6PX942YiYq8HzEnb4yWQMLQuipQ==",
-
"cpu": [
-
"x64"
-
],
-
"dev": true,
-
"optional": true,
-
"os": [
-
"android"
-
],
-
"engines": {
-
"node": ">=18"
-
}
-
},
"node_modules/@esbuild/darwin-arm64": {
"version": "0.23.0",
"resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.0.tgz",
···
"node": ">=18"
}
},
-
"node_modules/@esbuild/darwin-x64": {
-
"version": "0.23.0",
-
"resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.0.tgz",
-
"integrity": "sha512-IMQ6eme4AfznElesHUPDZ+teuGwoRmVuuixu7sv92ZkdQcPbsNHzutd+rAfaBKo8YK3IrBEi9SLLKWJdEvJniQ==",
-
"cpu": [
-
"x64"
-
],
-
"dev": true,
-
"optional": true,
-
"os": [
-
"darwin"
-
],
-
"engines": {
-
"node": ">=18"
-
}
-
},
-
"node_modules/@esbuild/freebsd-arm64": {
-
"version": "0.23.0",
-
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.0.tgz",
-
"integrity": "sha512-0muYWCng5vqaxobq6LB3YNtevDFSAZGlgtLoAc81PjUfiFz36n4KMpwhtAd4he8ToSI3TGyuhyx5xmiWNYZFyw==",
-
"cpu": [
-
"arm64"
-
],
-
"dev": true,
-
"optional": true,
-
"os": [
-
"freebsd"
-
],
-
"engines": {
-
"node": ">=18"
-
}
-
},
-
"node_modules/@esbuild/freebsd-x64": {
-
"version": "0.23.0",
-
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.0.tgz",
-
"integrity": "sha512-XKDVu8IsD0/q3foBzsXGt/KjD/yTKBCIwOHE1XwiXmrRwrX6Hbnd5Eqn/WvDekddK21tfszBSrE/WMaZh+1buQ==",
-
"cpu": [
-
"x64"
-
],
-
"dev": true,
-
"optional": true,
-
"os": [
-
"freebsd"
-
],
-
"engines": {
-
"node": ">=18"
-
}
-
},
-
"node_modules/@esbuild/linux-arm": {
-
"version": "0.23.0",
-
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.0.tgz",
-
"integrity": "sha512-SEELSTEtOFu5LPykzA395Mc+54RMg1EUgXP+iw2SJ72+ooMwVsgfuwXo5Fn0wXNgWZsTVHwY2cg4Vi/bOD88qw==",
-
"cpu": [
-
"arm"
-
],
-
"dev": true,
-
"optional": true,
-
"os": [
-
"linux"
-
],
-
"engines": {
-
"node": ">=18"
-
}
-
},
-
"node_modules/@esbuild/linux-arm64": {
-
"version": "0.23.0",
-
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.0.tgz",
-
"integrity": "sha512-j1t5iG8jE7BhonbsEg5d9qOYcVZv/Rv6tghaXM/Ug9xahM0nX/H2gfu6X6z11QRTMT6+aywOMA8TDkhPo8aCGw==",
-
"cpu": [
-
"arm64"
-
],
-
"dev": true,
-
"optional": true,
-
"os": [
-
"linux"
-
],
-
"engines": {
-
"node": ">=18"
-
}
-
},
-
"node_modules/@esbuild/linux-ia32": {
-
"version": "0.23.0",
-
"resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.0.tgz",
-
"integrity": "sha512-P7O5Tkh2NbgIm2R6x1zGJJsnacDzTFcRWZyTTMgFdVit6E98LTxO+v8LCCLWRvPrjdzXHx9FEOA8oAZPyApWUA==",
-
"cpu": [
-
"ia32"
-
],
-
"dev": true,
-
"optional": true,
-
"os": [
-
"linux"
-
],
-
"engines": {
-
"node": ">=18"
-
}
-
},
-
"node_modules/@esbuild/linux-loong64": {
-
"version": "0.23.0",
-
"resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.0.tgz",
-
"integrity": "sha512-InQwepswq6urikQiIC/kkx412fqUZudBO4SYKu0N+tGhXRWUqAx+Q+341tFV6QdBifpjYgUndV1hhMq3WeJi7A==",
-
"cpu": [
-
"loong64"
-
],
-
"dev": true,
-
"optional": true,
-
"os": [
-
"linux"
-
],
-
"engines": {
-
"node": ">=18"
-
}
-
},
-
"node_modules/@esbuild/linux-mips64el": {
-
"version": "0.23.0",
-
"resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.0.tgz",
-
"integrity": "sha512-J9rflLtqdYrxHv2FqXE2i1ELgNjT+JFURt/uDMoPQLcjWQA5wDKgQA4t/dTqGa88ZVECKaD0TctwsUfHbVoi4w==",
-
"cpu": [
-
"mips64el"
-
],
-
"dev": true,
-
"optional": true,
-
"os": [
-
"linux"
-
],
-
"engines": {
-
"node": ">=18"
-
}
-
},
-
"node_modules/@esbuild/linux-ppc64": {
-
"version": "0.23.0",
-
"resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.0.tgz",
-
"integrity": "sha512-cShCXtEOVc5GxU0fM+dsFD10qZ5UpcQ8AM22bYj0u/yaAykWnqXJDpd77ublcX6vdDsWLuweeuSNZk4yUxZwtw==",
-
"cpu": [
-
"ppc64"
-
],
-
"dev": true,
-
"optional": true,
-
"os": [
-
"linux"
-
],
-
"engines": {
-
"node": ">=18"
-
}
-
},
-
"node_modules/@esbuild/linux-riscv64": {
-
"version": "0.23.0",
-
"resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.0.tgz",
-
"integrity": "sha512-HEtaN7Y5UB4tZPeQmgz/UhzoEyYftbMXrBCUjINGjh3uil+rB/QzzpMshz3cNUxqXN7Vr93zzVtpIDL99t9aRw==",
-
"cpu": [
-
"riscv64"
-
],
-
"dev": true,
-
"optional": true,
-
"os": [
-
"linux"
-
],
-
"engines": {
-
"node": ">=18"
-
}
-
},
-
"node_modules/@esbuild/linux-s390x": {
-
"version": "0.23.0",
-
"resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.0.tgz",
-
"integrity": "sha512-WDi3+NVAuyjg/Wxi+o5KPqRbZY0QhI9TjrEEm+8dmpY9Xir8+HE/HNx2JoLckhKbFopW0RdO2D72w8trZOV+Wg==",
-
"cpu": [
-
"s390x"
-
],
-
"dev": true,
-
"optional": true,
-
"os": [
-
"linux"
-
],
-
"engines": {
-
"node": ">=18"
-
}
-
},
-
"node_modules/@esbuild/linux-x64": {
-
"version": "0.23.0",
-
"resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.0.tgz",
-
"integrity": "sha512-a3pMQhUEJkITgAw6e0bWA+F+vFtCciMjW/LPtoj99MhVt+Mfb6bbL9hu2wmTZgNd994qTAEw+U/r6k3qHWWaOQ==",
-
"cpu": [
-
"x64"
-
],
-
"dev": true,
-
"optional": true,
-
"os": [
-
"linux"
-
],
-
"engines": {
-
"node": ">=18"
-
}
-
},
-
"node_modules/@esbuild/netbsd-x64": {
-
"version": "0.23.0",
-
"resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.0.tgz",
-
"integrity": "sha512-cRK+YDem7lFTs2Q5nEv/HHc4LnrfBCbH5+JHu6wm2eP+d8OZNoSMYgPZJq78vqQ9g+9+nMuIsAO7skzphRXHyw==",
-
"cpu": [
-
"x64"
-
],
-
"dev": true,
-
"optional": true,
-
"os": [
-
"netbsd"
-
],
-
"engines": {
-
"node": ">=18"
-
}
-
},
-
"node_modules/@esbuild/openbsd-arm64": {
-
"version": "0.23.0",
-
"resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.0.tgz",
-
"integrity": "sha512-suXjq53gERueVWu0OKxzWqk7NxiUWSUlrxoZK7usiF50C6ipColGR5qie2496iKGYNLhDZkPxBI3erbnYkU0rQ==",
-
"cpu": [
-
"arm64"
-
],
-
"dev": true,
-
"optional": true,
-
"os": [
-
"openbsd"
-
],
-
"engines": {
-
"node": ">=18"
-
}
-
},
-
"node_modules/@esbuild/openbsd-x64": {
-
"version": "0.23.0",
-
"resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.0.tgz",
-
"integrity": "sha512-6p3nHpby0DM/v15IFKMjAaayFhqnXV52aEmv1whZHX56pdkK+MEaLoQWj+H42ssFarP1PcomVhbsR4pkz09qBg==",
-
"cpu": [
-
"x64"
-
],
-
"dev": true,
-
"optional": true,
-
"os": [
-
"openbsd"
-
],
-
"engines": {
-
"node": ">=18"
-
}
-
},
-
"node_modules/@esbuild/sunos-x64": {
-
"version": "0.23.0",
-
"resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.0.tgz",
-
"integrity": "sha512-BFelBGfrBwk6LVrmFzCq1u1dZbG4zy/Kp93w2+y83Q5UGYF1d8sCzeLI9NXjKyujjBBniQa8R8PzLFAUrSM9OA==",
-
"cpu": [
-
"x64"
-
],
-
"dev": true,
-
"optional": true,
-
"os": [
-
"sunos"
-
],
-
"engines": {
-
"node": ">=18"
-
}
-
},
-
"node_modules/@esbuild/win32-arm64": {
-
"version": "0.23.0",
-
"resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.0.tgz",
-
"integrity": "sha512-lY6AC8p4Cnb7xYHuIxQ6iYPe6MfO2CC43XXKo9nBXDb35krYt7KGhQnOkRGar5psxYkircpCqfbNDB4uJbS2jQ==",
-
"cpu": [
-
"arm64"
-
],
-
"dev": true,
-
"optional": true,
-
"os": [
-
"win32"
-
],
-
"engines": {
-
"node": ">=18"
-
}
-
},
-
"node_modules/@esbuild/win32-ia32": {
-
"version": "0.23.0",
-
"resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.0.tgz",
-
"integrity": "sha512-7L1bHlOTcO4ByvI7OXVI5pNN6HSu6pUQq9yodga8izeuB1KcT2UkHaH6118QJwopExPn0rMHIseCTx1CRo/uNA==",
-
"cpu": [
-
"ia32"
-
],
-
"dev": true,
-
"optional": true,
-
"os": [
-
"win32"
-
],
-
"engines": {
-
"node": ">=18"
-
}
-
},
-
"node_modules/@esbuild/win32-x64": {
-
"version": "0.23.0",
-
"resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.0.tgz",
-
"integrity": "sha512-Arm+WgUFLUATuoxCJcahGuk6Yj9Pzxd6l11Zb/2aAuv5kWWvvfhLFo2fni4uSK5vzlUdCGZ/BdV5tH8klj8p8g==",
-
"cpu": [
-
"x64"
-
],
-
"dev": true,
-
"optional": true,
-
"os": [
-
"win32"
-
],
-
"engines": {
-
"node": ">=18"
-
}
-
},
"node_modules/@ipld/car": {
"version": "3.2.4",
"resolved": "https://registry.npmjs.org/@ipld/car/-/car-3.2.4.tgz",
···
"url": "https://opencollective.com/preact"
}
},
-
"node_modules/@rollup/rollup-android-arm-eabi": {
-
"version": "4.20.0",
-
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.20.0.tgz",
-
"integrity": "sha512-TSpWzflCc4VGAUJZlPpgAJE1+V60MePDQnBd7PPkpuEmOy8i87aL6tinFGKBFKuEDikYpig72QzdT3QPYIi+oA==",
-
"cpu": [
-
"arm"
-
],
-
"dev": true,
-
"optional": true,
-
"os": [
-
"android"
-
]
-
},
-
"node_modules/@rollup/rollup-android-arm64": {
-
"version": "4.20.0",
-
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.20.0.tgz",
-
"integrity": "sha512-u00Ro/nok7oGzVuh/FMYfNoGqxU5CPWz1mxV85S2w9LxHR8OoMQBuSk+3BKVIDYgkpeOET5yXkx90OYFc+ytpQ==",
-
"cpu": [
-
"arm64"
-
],
-
"dev": true,
-
"optional": true,
-
"os": [
-
"android"
-
]
-
},
"node_modules/@rollup/rollup-darwin-arm64": {
"version": "4.20.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.20.0.tgz",
···
"darwin"
]
},
-
"node_modules/@rollup/rollup-darwin-x64": {
-
"version": "4.20.0",
-
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.20.0.tgz",
-
"integrity": "sha512-xbrMDdlev53vNXexEa6l0LffojxhqDTBeL+VUxuuIXys4x6xyvbKq5XqTXBCEUA8ty8iEJblHvFaWRJTk/icAQ==",
-
"cpu": [
-
"x64"
-
],
-
"dev": true,
-
"optional": true,
-
"os": [
-
"darwin"
-
]
-
},
-
"node_modules/@rollup/rollup-linux-arm-gnueabihf": {
-
"version": "4.20.0",
-
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.20.0.tgz",
-
"integrity": "sha512-jMYvxZwGmoHFBTbr12Xc6wOdc2xA5tF5F2q6t7Rcfab68TT0n+r7dgawD4qhPEvasDsVpQi+MgDzj2faOLsZjA==",
-
"cpu": [
-
"arm"
-
],
-
"dev": true,
-
"optional": true,
-
"os": [
-
"linux"
-
]
-
},
-
"node_modules/@rollup/rollup-linux-arm-musleabihf": {
-
"version": "4.20.0",
-
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.20.0.tgz",
-
"integrity": "sha512-1asSTl4HKuIHIB1GcdFHNNZhxAYEdqML/MW4QmPS4G0ivbEcBr1JKlFLKsIRqjSwOBkdItn3/ZDlyvZ/N6KPlw==",
-
"cpu": [
-
"arm"
-
],
-
"dev": true,
-
"optional": true,
-
"os": [
-
"linux"
-
]
-
},
-
"node_modules/@rollup/rollup-linux-arm64-gnu": {
-
"version": "4.20.0",
-
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.20.0.tgz",
-
"integrity": "sha512-COBb8Bkx56KldOYJfMf6wKeYJrtJ9vEgBRAOkfw6Ens0tnmzPqvlpjZiLgkhg6cA3DGzCmLmmd319pmHvKWWlQ==",
-
"cpu": [
-
"arm64"
-
],
-
"dev": true,
-
"optional": true,
-
"os": [
-
"linux"
-
]
-
},
-
"node_modules/@rollup/rollup-linux-arm64-musl": {
-
"version": "4.20.0",
-
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.20.0.tgz",
-
"integrity": "sha512-+it+mBSyMslVQa8wSPvBx53fYuZK/oLTu5RJoXogjk6x7Q7sz1GNRsXWjn6SwyJm8E/oMjNVwPhmNdIjwP135Q==",
-
"cpu": [
-
"arm64"
-
],
-
"dev": true,
-
"optional": true,
-
"os": [
-
"linux"
-
]
-
},
-
"node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
-
"version": "4.20.0",
-
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.20.0.tgz",
-
"integrity": "sha512-yAMvqhPfGKsAxHN8I4+jE0CpLWD8cv4z7CK7BMmhjDuz606Q2tFKkWRY8bHR9JQXYcoLfopo5TTqzxgPUjUMfw==",
-
"cpu": [
-
"ppc64"
-
],
-
"dev": true,
-
"optional": true,
-
"os": [
-
"linux"
-
]
-
},
-
"node_modules/@rollup/rollup-linux-riscv64-gnu": {
-
"version": "4.20.0",
-
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.20.0.tgz",
-
"integrity": "sha512-qmuxFpfmi/2SUkAw95TtNq/w/I7Gpjurx609OOOV7U4vhvUhBcftcmXwl3rqAek+ADBwSjIC4IVNLiszoj3dPA==",
-
"cpu": [
-
"riscv64"
-
],
-
"dev": true,
-
"optional": true,
-
"os": [
-
"linux"
-
]
-
},
-
"node_modules/@rollup/rollup-linux-s390x-gnu": {
-
"version": "4.20.0",
-
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.20.0.tgz",
-
"integrity": "sha512-I0BtGXddHSHjV1mqTNkgUZLnS3WtsqebAXv11D5BZE/gfw5KoyXSAXVqyJximQXNvNzUo4GKlCK/dIwXlz+jlg==",
-
"cpu": [
-
"s390x"
-
],
-
"dev": true,
-
"optional": true,
-
"os": [
-
"linux"
-
]
-
},
-
"node_modules/@rollup/rollup-linux-x64-gnu": {
-
"version": "4.20.0",
-
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.20.0.tgz",
-
"integrity": "sha512-y+eoL2I3iphUg9tN9GB6ku1FA8kOfmF4oUEWhztDJ4KXJy1agk/9+pejOuZkNFhRwHAOxMsBPLbXPd6mJiCwew==",
-
"cpu": [
-
"x64"
-
],
-
"dev": true,
-
"optional": true,
-
"os": [
-
"linux"
-
]
-
},
-
"node_modules/@rollup/rollup-linux-x64-musl": {
-
"version": "4.20.0",
-
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.20.0.tgz",
-
"integrity": "sha512-hM3nhW40kBNYUkZb/r9k2FKK+/MnKglX7UYd4ZUy5DJs8/sMsIbqWK2piZtVGE3kcXVNj3B2IrUYROJMMCikNg==",
-
"cpu": [
-
"x64"
-
],
-
"dev": true,
-
"optional": true,
-
"os": [
-
"linux"
-
]
-
},
-
"node_modules/@rollup/rollup-win32-arm64-msvc": {
-
"version": "4.20.0",
-
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.20.0.tgz",
-
"integrity": "sha512-psegMvP+Ik/Bg7QRJbv8w8PAytPA7Uo8fpFjXyCRHWm6Nt42L+JtoqH8eDQ5hRP7/XW2UiIriy1Z46jf0Oa1kA==",
-
"cpu": [
-
"arm64"
-
],
-
"dev": true,
-
"optional": true,
-
"os": [
-
"win32"
-
]
-
},
-
"node_modules/@rollup/rollup-win32-ia32-msvc": {
-
"version": "4.20.0",
-
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.20.0.tgz",
-
"integrity": "sha512-GabekH3w4lgAJpVxkk7hUzUf2hICSQO0a/BLFA11/RMxQT92MabKAqyubzDZmMOC/hcJNlc+rrypzNzYl4Dx7A==",
-
"cpu": [
-
"ia32"
-
],
-
"dev": true,
-
"optional": true,
-
"os": [
-
"win32"
-
]
-
},
-
"node_modules/@rollup/rollup-win32-x64-msvc": {
-
"version": "4.20.0",
-
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.20.0.tgz",
-
"integrity": "sha512-aJ1EJSuTdGnM6qbVC4B5DSmozPTqIag9fSzXRNNo+humQLG89XpPgdt16Ia56ORD7s+H8Pmyx44uczDQ0yDzpg==",
-
"cpu": [
-
"x64"
-
],
-
"dev": true,
-
"optional": true,
-
"os": [
-
"win32"
-
]
-
},
"node_modules/@ts-morph/common": {
"version": "0.17.0",
"resolved": "https://registry.npmjs.org/@ts-morph/common/-/common-0.17.0.tgz",
···
"@types/node": "*"
}
},
-
"node_modules/@types/cors": {
-
"version": "2.8.17",
-
"resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz",
-
"integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==",
-
"dev": true,
-
"dependencies": {
-
"@types/node": "*"
-
}
-
},
"node_modules/@types/estree": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
···
"@types/http-errors": "*",
"@types/node": "*",
"@types/send": "*"
-
}
-
},
-
"node_modules/@vitest/expect": {
-
"version": "2.0.5",
-
"resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.0.5.tgz",
-
"integrity": "sha512-yHZtwuP7JZivj65Gxoi8upUN2OzHTi3zVfjwdpu2WrvCZPLwsJ2Ey5ILIPccoW23dd/zQBlJ4/dhi7DWNyXCpA==",
-
"dev": true,
-
"dependencies": {
-
"@vitest/spy": "2.0.5",
-
"@vitest/utils": "2.0.5",
-
"chai": "^5.1.1",
-
"tinyrainbow": "^1.2.0"
-
},
-
"funding": {
-
"url": "https://opencollective.com/vitest"
-
}
-
},
-
"node_modules/@vitest/pretty-format": {
-
"version": "2.0.5",
-
"resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.0.5.tgz",
-
"integrity": "sha512-h8k+1oWHfwTkyTkb9egzwNMfJAEx4veaPSnMeKbVSjp4euqGSbQlm5+6VHwTr7u4FJslVVsUG5nopCaAYdOmSQ==",
-
"dev": true,
-
"dependencies": {
-
"tinyrainbow": "^1.2.0"
-
},
-
"funding": {
-
"url": "https://opencollective.com/vitest"
-
}
-
},
-
"node_modules/@vitest/runner": {
-
"version": "2.0.5",
-
"resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.0.5.tgz",
-
"integrity": "sha512-TfRfZa6Bkk9ky4tW0z20WKXFEwwvWhRY+84CnSEtq4+3ZvDlJyY32oNTJtM7AW9ihW90tX/1Q78cb6FjoAs+ig==",
-
"dev": true,
-
"dependencies": {
-
"@vitest/utils": "2.0.5",
-
"pathe": "^1.1.2"
-
},
-
"funding": {
-
"url": "https://opencollective.com/vitest"
-
}
-
},
-
"node_modules/@vitest/snapshot": {
-
"version": "2.0.5",
-
"resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.0.5.tgz",
-
"integrity": "sha512-SgCPUeDFLaM0mIUHfaArq8fD2WbaXG/zVXjRupthYfYGzc8ztbFbu6dUNOblBG7XLMR1kEhS/DNnfCZ2IhdDew==",
-
"dev": true,
-
"dependencies": {
-
"@vitest/pretty-format": "2.0.5",
-
"magic-string": "^0.30.10",
-
"pathe": "^1.1.2"
-
},
-
"funding": {
-
"url": "https://opencollective.com/vitest"
-
}
-
},
-
"node_modules/@vitest/spy": {
-
"version": "2.0.5",
-
"resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.0.5.tgz",
-
"integrity": "sha512-c/jdthAhvJdpfVuaexSrnawxZz6pywlTPe84LUB2m/4t3rl2fTo9NFGBG4oWgaD+FTgDDV8hJ/nibT7IfH3JfA==",
-
"dev": true,
-
"dependencies": {
-
"tinyspy": "^3.0.0"
-
},
-
"funding": {
-
"url": "https://opencollective.com/vitest"
-
}
-
},
-
"node_modules/@vitest/utils": {
-
"version": "2.0.5",
-
"resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.0.5.tgz",
-
"integrity": "sha512-d8HKbqIcya+GR67mkZbrzhS5kKhtp8dQLcmRZLGTscGVg7yImT82cIrhtn2L8+VujWcy6KZweApgNmPsTAO/UQ==",
-
"dev": true,
-
"dependencies": {
-
"@vitest/pretty-format": "2.0.5",
-
"estree-walker": "^3.0.3",
-
"loupe": "^3.1.1",
-
"tinyrainbow": "^1.2.0"
-
},
-
"funding": {
-
"url": "https://opencollective.com/vitest"
}
},
"node_modules/@webreflection/signal": {
···
"node": ">=0.4.0"
}
},
-
"node_modules/ansi-escapes": {
-
"version": "7.0.0",
-
"resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.0.0.tgz",
-
"integrity": "sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==",
-
"dev": true,
-
"dependencies": {
-
"environment": "^1.0.0"
-
},
-
"engines": {
-
"node": ">=18"
-
},
-
"funding": {
-
"url": "https://github.com/sponsors/sindresorhus"
-
}
-
},
"node_modules/ansi-regex": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
···
"dev": true,
"engines": {
"node": ">=8"
-
}
-
},
-
"node_modules/asap": {
-
"version": "2.0.6",
-
"resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
-
"integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==",
-
"dev": true
-
},
-
"node_modules/assertion-error": {
-
"version": "2.0.1",
-
"resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz",
-
"integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==",
-
"dev": true,
-
"engines": {
-
"node": ">=12"
}
},
"node_modules/asynckit": {
···
"cborg": "cli.js"
},
-
"node_modules/chai": {
-
"version": "5.1.1",
-
"resolved": "https://registry.npmjs.org/chai/-/chai-5.1.1.tgz",
-
"integrity": "sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA==",
-
"dev": true,
-
"dependencies": {
-
"assertion-error": "^2.0.1",
-
"check-error": "^2.1.1",
-
"deep-eql": "^5.0.1",
-
"loupe": "^3.1.0",
-
"pathval": "^2.0.0"
-
},
-
"engines": {
-
"node": ">=12"
-
}
-
},
"node_modules/chalk": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
···
"url": "https://github.com/chalk/chalk?sponsor=1"
},
-
"node_modules/check-error": {
-
"version": "2.1.1",
-
"resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz",
-
"integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==",
-
"dev": true,
-
"engines": {
-
"node": ">= 16"
-
}
-
},
"node_modules/chokidar": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
···
"resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
"integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg=="
},
-
"node_modules/cli-cursor": {
-
"version": "5.0.0",
-
"resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz",
-
"integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==",
-
"dev": true,
-
"dependencies": {
-
"restore-cursor": "^5.0.0"
-
},
-
"engines": {
-
"node": ">=18"
-
},
-
"funding": {
-
"url": "https://github.com/sponsors/sindresorhus"
-
}
-
},
-
"node_modules/cli-truncate": {
-
"version": "4.0.0",
-
"resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz",
-
"integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==",
-
"dev": true,
-
"dependencies": {
-
"slice-ansi": "^5.0.0",
-
"string-width": "^7.0.0"
-
},
-
"engines": {
-
"node": ">=18"
-
},
-
"funding": {
-
"url": "https://github.com/sponsors/sindresorhus"
-
}
-
},
"node_modules/code-block-writer": {
"version": "11.0.3",
"resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-11.0.3.tgz",
···
"dev": true,
"engines": {
"node": "^12.20.0 || >=14"
-
}
-
},
-
"node_modules/component-emitter": {
-
"version": "1.3.1",
-
"resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz",
-
"integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==",
-
"dev": true,
-
"funding": {
-
"url": "https://github.com/sponsors/sindresorhus"
},
"node_modules/consola": {
···
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
"integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
},
-
"node_modules/cookiejar": {
-
"version": "2.1.4",
-
"resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz",
-
"integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==",
-
"dev": true
-
},
-
"node_modules/cors": {
-
"version": "2.8.5",
-
"resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
-
"integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
-
"dependencies": {
-
"object-assign": "^4",
-
"vary": "^1"
-
},
-
"engines": {
-
"node": ">= 0.10"
-
}
-
},
"node_modules/create-require": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
···
"url": "https://github.com/sponsors/sindresorhus"
},
-
"node_modules/deep-eql": {
-
"version": "5.0.2",
-
"resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz",
-
"integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==",
-
"dev": true,
-
"engines": {
-
"node": ">=6"
-
}
-
},
"node_modules/deep-extend": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
···
"integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==",
"engines": {
"node": ">=8"
-
}
-
},
-
"node_modules/dezalgo": {
-
"version": "1.0.4",
-
"resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz",
-
"integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==",
-
"dev": true,
-
"dependencies": {
-
"asap": "^2.0.0",
-
"wrappy": "1"
},
"node_modules/diff": {
···
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
"integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
},
-
"node_modules/emoji-regex": {
-
"version": "10.3.0",
-
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz",
-
"integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==",
-
"dev": true
-
},
"node_modules/encodeurl": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
···
},
"engines": {
"node": ">=8.12"
-
}
-
},
-
"node_modules/environment": {
-
"version": "1.1.0",
-
"resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz",
-
"integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==",
-
"dev": true,
-
"engines": {
-
"node": ">=18"
-
},
-
"funding": {
-
"url": "https://github.com/sponsors/sindresorhus"
},
"node_modules/es-define-property": {
···
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
"integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
},
-
"node_modules/estree-walker": {
-
"version": "3.0.3",
-
"resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz",
-
"integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==",
-
"dev": true,
-
"dependencies": {
-
"@types/estree": "^1.0.0"
-
}
-
},
"node_modules/etag": {
"version": "1.8.1",
"resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
···
"node": ">=6"
},
-
"node_modules/eventemitter3": {
-
"version": "5.0.1",
-
"resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz",
-
"integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==",
-
"dev": true
-
},
"node_modules/events": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
···
"node": ">=0.8.x"
},
-
"node_modules/execa": {
-
"version": "8.0.1",
-
"resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz",
-
"integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==",
-
"dev": true,
-
"dependencies": {
-
"cross-spawn": "^7.0.3",
-
"get-stream": "^8.0.1",
-
"human-signals": "^5.0.0",
-
"is-stream": "^3.0.0",
-
"merge-stream": "^2.0.0",
-
"npm-run-path": "^5.1.0",
-
"onetime": "^6.0.0",
-
"signal-exit": "^4.1.0",
-
"strip-final-newline": "^3.0.0"
-
},
-
"engines": {
-
"node": ">=16.17"
-
},
-
"funding": {
-
"url": "https://github.com/sindresorhus/execa?sponsor=1"
-
}
-
},
"node_modules/expand-template": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz",
···
"node": ">= 0.10.0"
},
-
"node_modules/express-rate-limit": {
-
"version": "7.4.0",
-
"resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-7.4.0.tgz",
-
"integrity": "sha512-v1204w3cXu5gCDmAvgvzI6qjzZzoMWKnyVDk3ACgfswTQLYiGen+r8w0VnXnGMmzEN/g8fwIQ4JrFFd4ZP6ssg==",
-
"engines": {
-
"node": ">= 16"
-
},
-
"funding": {
-
"url": "https://github.com/sponsors/express-rate-limit"
-
},
-
"peerDependencies": {
-
"express": "4 || 5 || ^5.0.0-beta.1"
-
}
-
},
"node_modules/fast-copy": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/fast-copy/-/fast-copy-3.0.2.tgz",
···
"node": ">= 6"
},
-
"node_modules/formidable": {
-
"version": "3.5.1",
-
"resolved": "https://registry.npmjs.org/formidable/-/formidable-3.5.1.tgz",
-
"integrity": "sha512-WJWKelbRHN41m5dumb0/k8TeAx7Id/y3a+Z7QfhxP/htI9Js5zYaEDtG8uMgG0vM0lOlqnmjE99/kfpOYi/0Og==",
-
"dev": true,
-
"dependencies": {
-
"dezalgo": "^1.0.4",
-
"hexoid": "^1.0.0",
-
"once": "^1.4.0"
-
},
-
"funding": {
-
"url": "https://ko-fi.com/tunnckoCore/commissions"
-
}
-
},
"node_modules/forwarded": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
···
"node": "6.* || 8.* || >= 10.*"
},
-
"node_modules/get-east-asian-width": {
-
"version": "1.2.0",
-
"resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.2.0.tgz",
-
"integrity": "sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==",
-
"dev": true,
-
"engines": {
-
"node": ">=18"
-
},
-
"funding": {
-
"url": "https://github.com/sponsors/sindresorhus"
-
}
-
},
-
"node_modules/get-func-name": {
-
"version": "2.0.2",
-
"resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz",
-
"integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==",
-
"dev": true,
-
"engines": {
-
"node": "*"
-
}
-
},
"node_modules/get-intrinsic": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
···
"url": "https://github.com/sponsors/ljharb"
},
-
"node_modules/get-stream": {
-
"version": "8.0.1",
-
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz",
-
"integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==",
-
"dev": true,
-
"engines": {
-
"node": ">=16"
-
},
-
"funding": {
-
"url": "https://github.com/sponsors/sindresorhus"
-
}
-
},
"node_modules/get-tsconfig": {
"version": "4.7.6",
"resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.6.tgz",
···
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
-
},
-
"node_modules/globrex": {
-
"version": "0.1.2",
-
"resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz",
-
"integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==",
-
"dev": true
},
"node_modules/gopd": {
"version": "1.0.1",
···
"node": ">= 0.4"
},
-
"node_modules/helmet": {
-
"version": "7.1.0",
-
"resolved": "https://registry.npmjs.org/helmet/-/helmet-7.1.0.tgz",
-
"integrity": "sha512-g+HZqgfbpXdCkme/Cd/mZkV0aV3BZZZSugecH03kl38m/Kmdx8jKjBikpDj2cr+Iynv4KpYEviojNdTJActJAg==",
-
"engines": {
-
"node": ">=16.0.0"
-
}
-
},
"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==",
"dev": true
},
-
"node_modules/hexoid": {
-
"version": "1.0.0",
-
"resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz",
-
"integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==",
-
"dev": true,
-
"engines": {
-
"node": ">=8"
-
}
-
},
"node_modules/html-escaper": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-3.0.3.tgz",
···
},
"engines": {
"node": ">= 0.8"
-
}
-
},
-
"node_modules/http-status-codes": {
-
"version": "2.3.0",
-
"resolved": "https://registry.npmjs.org/http-status-codes/-/http-status-codes-2.3.0.tgz",
-
"integrity": "sha512-RJ8XvFvpPM/Dmc5SV+dC4y5PCeOhT3x1Hq0NU3rjGeg5a/CqlhZ7uudknPwZFz4aeAXDcbAyaeP7GAo9lvngtA=="
-
},
-
"node_modules/human-signals": {
-
"version": "5.0.0",
-
"resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz",
-
"integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==",
-
"dev": true,
-
"engines": {
-
"node": ">=16.17.0"
},
"node_modules/iconv-lite": {
···
"node": ">=0.10.0"
},
-
"node_modules/is-fullwidth-code-point": {
-
"version": "4.0.0",
-
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz",
-
"integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==",
-
"dev": true,
-
"engines": {
-
"node": ">=12"
-
},
-
"funding": {
-
"url": "https://github.com/sponsors/sindresorhus"
-
}
-
},
"node_modules/is-glob": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
···
"node": ">=0.12.0"
},
-
"node_modules/is-stream": {
-
"version": "3.0.0",
-
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz",
-
"integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==",
-
"dev": true,
-
"engines": {
-
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
-
},
-
"funding": {
-
"url": "https://github.com/sponsors/sindresorhus"
-
}
-
},
"node_modules/isexe": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
···
"integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
"dev": true
},
-
"node_modules/lint-staged": {
-
"version": "15.2.9",
-
"resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.9.tgz",
-
"integrity": "sha512-BZAt8Lk3sEnxw7tfxM7jeZlPRuT4M68O0/CwZhhaw6eeWu0Lz5eERE3m386InivXB64fp/mDID452h48tvKlRQ==",
-
"dev": true,
-
"dependencies": {
-
"chalk": "~5.3.0",
-
"commander": "~12.1.0",
-
"debug": "~4.3.6",
-
"execa": "~8.0.1",
-
"lilconfig": "~3.1.2",
-
"listr2": "~8.2.4",
-
"micromatch": "~4.0.7",
-
"pidtree": "~0.6.0",
-
"string-argv": "~0.3.2",
-
"yaml": "~2.5.0"
-
},
-
"bin": {
-
"lint-staged": "bin/lint-staged.js"
-
},
-
"engines": {
-
"node": ">=18.12.0"
-
},
-
"funding": {
-
"url": "https://opencollective.com/lint-staged"
-
}
-
},
-
"node_modules/lint-staged/node_modules/chalk": {
-
"version": "5.3.0",
-
"resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz",
-
"integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==",
-
"dev": true,
-
"engines": {
-
"node": "^12.17.0 || ^14.13 || >=16.0.0"
-
},
-
"funding": {
-
"url": "https://github.com/chalk/chalk?sponsor=1"
-
}
-
},
-
"node_modules/lint-staged/node_modules/commander": {
-
"version": "12.1.0",
-
"resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz",
-
"integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==",
-
"dev": true,
-
"engines": {
-
"node": ">=18"
-
}
-
},
-
"node_modules/lint-staged/node_modules/debug": {
-
"version": "4.3.6",
-
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz",
-
"integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==",
-
"dev": true,
-
"dependencies": {
-
"ms": "2.1.2"
-
},
-
"engines": {
-
"node": ">=6.0"
-
},
-
"peerDependenciesMeta": {
-
"supports-color": {
-
"optional": true
-
}
-
}
-
},
-
"node_modules/lint-staged/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==",
-
"dev": true
-
},
-
"node_modules/listr2": {
-
"version": "8.2.4",
-
"resolved": "https://registry.npmjs.org/listr2/-/listr2-8.2.4.tgz",
-
"integrity": "sha512-opevsywziHd3zHCVQGAj8zu+Z3yHNkkoYhWIGnq54RrCVwLz0MozotJEDnKsIBLvkfLGN6BLOyAeRrYI0pKA4g==",
-
"dev": true,
-
"dependencies": {
-
"cli-truncate": "^4.0.0",
-
"colorette": "^2.0.20",
-
"eventemitter3": "^5.0.1",
-
"log-update": "^6.1.0",
-
"rfdc": "^1.4.1",
-
"wrap-ansi": "^9.0.0"
-
},
-
"engines": {
-
"node": ">=18.0.0"
-
}
-
},
"node_modules/load-tsconfig": {
"version": "0.2.5",
"resolved": "https://registry.npmjs.org/load-tsconfig/-/load-tsconfig-0.2.5.tgz",
···
"integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==",
"dev": true
},
-
"node_modules/log-update": {
-
"version": "6.1.0",
-
"resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz",
-
"integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==",
-
"dev": true,
-
"dependencies": {
-
"ansi-escapes": "^7.0.0",
-
"cli-cursor": "^5.0.0",
-
"slice-ansi": "^7.1.0",
-
"strip-ansi": "^7.1.0",
-
"wrap-ansi": "^9.0.0"
-
},
-
"engines": {
-
"node": ">=18"
-
},
-
"funding": {
-
"url": "https://github.com/sponsors/sindresorhus"
-
}
-
},
-
"node_modules/log-update/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/log-update/node_modules/is-fullwidth-code-point": {
-
"version": "5.0.0",
-
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz",
-
"integrity": "sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==",
-
"dev": true,
-
"dependencies": {
-
"get-east-asian-width": "^1.0.0"
-
},
-
"engines": {
-
"node": ">=18"
-
},
-
"funding": {
-
"url": "https://github.com/sponsors/sindresorhus"
-
}
-
},
-
"node_modules/log-update/node_modules/slice-ansi": {
-
"version": "7.1.0",
-
"resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.0.tgz",
-
"integrity": "sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==",
-
"dev": true,
-
"dependencies": {
-
"ansi-styles": "^6.2.1",
-
"is-fullwidth-code-point": "^5.0.0"
-
},
-
"engines": {
-
"node": ">=18"
-
},
-
"funding": {
-
"url": "https://github.com/chalk/slice-ansi?sponsor=1"
-
}
-
},
-
"node_modules/loupe": {
-
"version": "3.1.1",
-
"resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.1.tgz",
-
"integrity": "sha512-edNu/8D5MKVfGVFRhFf8aAxiTM6Wumfz5XsaatSxlD3w4R1d/WEKUTydCdPGbl9K7QG/Ca3GnDV2sIKIpXRQcw==",
-
"dev": true,
-
"dependencies": {
-
"get-func-name": "^2.0.1"
-
}
-
},
"node_modules/lru-cache": {
"version": "10.4.3",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
"integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="
-
},
-
"node_modules/magic-string": {
-
"version": "0.30.11",
-
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.11.tgz",
-
"integrity": "sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==",
-
"dev": true,
-
"dependencies": {
-
"@jridgewell/sourcemap-codec": "^1.5.0"
-
}
},
"node_modules/make-error": {
"version": "1.3.6",
···
"node": ">= 0.6"
},
-
"node_modules/mimic-fn": {
-
"version": "4.0.0",
-
"resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz",
-
"integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==",
-
"dev": true,
-
"engines": {
-
"node": ">=12"
-
},
-
"funding": {
-
"url": "https://github.com/sponsors/sindresorhus"
-
}
-
},
-
"node_modules/mimic-function": {
-
"version": "5.0.1",
-
"resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz",
-
"integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==",
-
"dev": true,
-
"engines": {
-
"node": ">=18"
-
},
-
"funding": {
-
"url": "https://github.com/sponsors/sindresorhus"
-
}
-
},
"node_modules/mimic-response": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz",
···
"url": "https://github.com/sponsors/ai"
],
+
"optional": true,
+
"peer": true,
"bin": {
"nanoid": "bin/nanoid.cjs"
},
···
"node": ">=0.10.0"
},
-
"node_modules/npm-run-path": {
-
"version": "5.3.0",
-
"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz",
-
"integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==",
-
"dev": true,
-
"dependencies": {
-
"path-key": "^4.0.0"
-
},
-
"engines": {
-
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
-
},
-
"funding": {
-
"url": "https://github.com/sponsors/sindresorhus"
-
}
-
},
-
"node_modules/npm-run-path/node_modules/path-key": {
-
"version": "4.0.0",
-
"resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz",
-
"integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==",
-
"dev": true,
-
"engines": {
-
"node": ">=12"
-
},
-
"funding": {
-
"url": "https://github.com/sponsors/sindresorhus"
-
}
-
},
"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"
···
"integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
"dependencies": {
"wrappy": "1"
-
}
-
},
-
"node_modules/onetime": {
-
"version": "6.0.0",
-
"resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz",
-
"integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==",
-
"dev": true,
-
"dependencies": {
-
"mimic-fn": "^4.0.0"
-
},
-
"engines": {
-
"node": ">=12"
-
},
-
"funding": {
-
"url": "https://github.com/sponsors/sindresorhus"
},
"node_modules/package-json-from-dist": {
···
"node": ">=8"
},
-
"node_modules/pathe": {
-
"version": "1.1.2",
-
"resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz",
-
"integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==",
-
"dev": true
-
},
-
"node_modules/pathval": {
-
"version": "2.0.0",
-
"resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz",
-
"integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==",
-
"dev": true,
-
"engines": {
-
"node": ">= 14.16"
-
}
-
},
"node_modules/picocolors": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz",
···
"url": "https://github.com/sponsors/jonschlinkert"
},
-
"node_modules/pidtree": {
-
"version": "0.6.0",
-
"resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz",
-
"integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==",
-
"dev": true,
-
"bin": {
-
"pidtree": "bin/pidtree.js"
-
},
-
"engines": {
-
"node": ">=0.10"
-
}
-
},
"node_modules/pino": {
"version": "9.3.2",
"resolved": "https://registry.npmjs.org/pino/-/pino-9.3.2.tgz",
···
"url": "https://github.com/sponsors/ai"
],
+
"optional": true,
+
"peer": true,
"dependencies": {
"nanoid": "^3.3.7",
"picocolors": "^1.0.1",
···
"url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1"
},
-
"node_modules/restore-cursor": {
-
"version": "5.1.0",
-
"resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz",
-
"integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==",
-
"dev": true,
-
"dependencies": {
-
"onetime": "^7.0.0",
-
"signal-exit": "^4.1.0"
-
},
-
"engines": {
-
"node": ">=18"
-
},
-
"funding": {
-
"url": "https://github.com/sponsors/sindresorhus"
-
}
-
},
-
"node_modules/restore-cursor/node_modules/onetime": {
-
"version": "7.0.0",
-
"resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz",
-
"integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==",
-
"dev": true,
-
"dependencies": {
-
"mimic-function": "^5.0.0"
-
},
-
"engines": {
-
"node": ">=18"
-
},
-
"funding": {
-
"url": "https://github.com/sponsors/sindresorhus"
-
}
-
},
"node_modules/reusify": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
···
"iojs": ">=1.0.0",
"node": ">=0.10.0"
-
},
-
"node_modules/rfdc": {
-
"version": "1.4.1",
-
"resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz",
-
"integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==",
-
"dev": true
},
"node_modules/rimraf": {
"version": "5.0.10",
···
"url": "https://github.com/sponsors/ljharb"
},
-
"node_modules/siginfo": {
-
"version": "2.0.0",
-
"resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz",
-
"integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==",
-
"dev": true
-
},
"node_modules/signal-exit": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
···
"node": ">=8"
},
-
"node_modules/slice-ansi": {
-
"version": "5.0.0",
-
"resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz",
-
"integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==",
-
"dev": true,
-
"dependencies": {
-
"ansi-styles": "^6.0.0",
-
"is-fullwidth-code-point": "^4.0.0"
-
},
-
"engines": {
-
"node": ">=12"
-
},
-
"funding": {
-
"url": "https://github.com/chalk/slice-ansi?sponsor=1"
-
}
-
},
-
"node_modules/slice-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/sonic-boom": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.0.1.tgz",
···
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz",
"integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==",
"dev": true,
+
"optional": true,
+
"peer": true,
"engines": {
"node": ">=0.10.0"
···
"engines": {
"node": ">= 10.x"
-
},
-
"node_modules/stackback": {
-
"version": "0.0.2",
-
"resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz",
-
"integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==",
-
"dev": true
},
"node_modules/statuses": {
"version": "2.0.1",
···
"node": ">= 0.8"
},
-
"node_modules/std-env": {
-
"version": "3.7.0",
-
"resolved": "https://registry.npmjs.org/std-env/-/std-env-3.7.0.tgz",
-
"integrity": "sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==",
-
"dev": true
-
},
"node_modules/string_decoder": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
···
"safe-buffer": "~5.2.0"
},
-
"node_modules/string-argv": {
-
"version": "0.3.2",
-
"resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz",
-
"integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==",
-
"dev": true,
-
"engines": {
-
"node": ">=0.6.19"
-
}
-
},
-
"node_modules/string-width": {
-
"version": "7.2.0",
-
"resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz",
-
"integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==",
-
"dev": true,
-
"dependencies": {
-
"emoji-regex": "^10.3.0",
-
"get-east-asian-width": "^1.0.0",
-
"strip-ansi": "^7.1.0"
-
},
-
"engines": {
-
"node": ">=18"
-
},
-
"funding": {
-
"url": "https://github.com/sponsors/sindresorhus"
-
}
-
},
"node_modules/string-width-cjs": {
"name": "string-width",
"version": "4.2.3",
···
"node": ">=8"
},
-
"node_modules/strip-final-newline": {
-
"version": "3.0.0",
-
"resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz",
-
"integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==",
-
"dev": true,
-
"engines": {
-
"node": ">=12"
-
},
-
"funding": {
-
"url": "https://github.com/sponsors/sindresorhus"
-
}
-
},
"node_modules/strip-json-comments": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
···
"node": ">= 6"
},
-
"node_modules/superagent": {
-
"version": "9.0.2",
-
"resolved": "https://registry.npmjs.org/superagent/-/superagent-9.0.2.tgz",
-
"integrity": "sha512-xuW7dzkUpcJq7QnhOsnNUgtYp3xRwpt2F7abdRYIpCsAt0hhUqia0EdxyXZQQpNmGtsCzYHryaKSV3q3GJnq7w==",
-
"dev": true,
-
"dependencies": {
-
"component-emitter": "^1.3.0",
-
"cookiejar": "^2.1.4",
-
"debug": "^4.3.4",
-
"fast-safe-stringify": "^2.1.1",
-
"form-data": "^4.0.0",
-
"formidable": "^3.5.1",
-
"methods": "^1.1.2",
-
"mime": "2.6.0",
-
"qs": "^6.11.0"
-
},
-
"engines": {
-
"node": ">=14.18.0"
-
}
-
},
-
"node_modules/superagent/node_modules/debug": {
-
"version": "4.3.6",
-
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz",
-
"integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==",
-
"dev": true,
-
"dependencies": {
-
"ms": "2.1.2"
-
},
-
"engines": {
-
"node": ">=6.0"
-
},
-
"peerDependenciesMeta": {
-
"supports-color": {
-
"optional": true
-
}
-
}
-
},
-
"node_modules/superagent/node_modules/mime": {
-
"version": "2.6.0",
-
"resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz",
-
"integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==",
-
"dev": true,
-
"bin": {
-
"mime": "cli.js"
-
},
-
"engines": {
-
"node": ">=4.0.0"
-
}
-
},
-
"node_modules/superagent/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==",
-
"dev": true
-
},
-
"node_modules/supertest": {
-
"version": "7.0.0",
-
"resolved": "https://registry.npmjs.org/supertest/-/supertest-7.0.0.tgz",
-
"integrity": "sha512-qlsr7fIC0lSddmA3tzojvzubYxvlGtzumcdHgPwbFWMISQwL22MhM2Y3LNt+6w9Yyx7559VW5ab70dgphm8qQA==",
-
"dev": true,
-
"dependencies": {
-
"methods": "^1.1.2",
-
"superagent": "^9.0.1"
-
},
-
"engines": {
-
"node": ">=14.18.0"
-
}
-
},
"node_modules/supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
···
"real-require": "^0.2.0"
},
-
"node_modules/tinybench": {
-
"version": "2.9.0",
-
"resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz",
-
"integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==",
-
"dev": true
-
},
-
"node_modules/tinypool": {
-
"version": "1.0.0",
-
"resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.0.tgz",
-
"integrity": "sha512-KIKExllK7jp3uvrNtvRBYBWBOAXSX8ZvoaD8T+7KB/QHIuoJW3Pmr60zucywjAlMb5TeXUkcs/MWeWLu0qvuAQ==",
-
"dev": true,
-
"engines": {
-
"node": "^18.0.0 || >=20.0.0"
-
}
-
},
-
"node_modules/tinyrainbow": {
-
"version": "1.2.0",
-
"resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-1.2.0.tgz",
-
"integrity": "sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==",
-
"dev": true,
-
"engines": {
-
"node": ">=14.0.0"
-
}
-
},
-
"node_modules/tinyspy": {
-
"version": "3.0.0",
-
"resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.0.tgz",
-
"integrity": "sha512-q5nmENpTHgiPVd1cJDDc9cVoYN5x4vCvwT3FMilvKPKneCBZAxn2YWQjDF0UMcE9k0Cay1gBiDfTMU0g+mPMQA==",
-
"dev": true,
-
"engines": {
-
"node": ">=14.0.0"
-
}
-
},
"node_modules/tlds": {
"version": "1.254.0",
"resolved": "https://registry.npmjs.org/tlds/-/tlds-1.254.0.tgz",
···
"optional": true
},
"@swc/wasm": {
-
"optional": true
-
}
-
}
-
},
-
"node_modules/tsconfck": {
-
"version": "3.1.1",
-
"resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-3.1.1.tgz",
-
"integrity": "sha512-00eoI6WY57SvZEVjm13stEVE90VkEdJAFGgpFLTsZbJyW/LwFQ7uQxJHWpZ2hzSWgCPKc9AnBnNP+0X7o3hAmQ==",
-
"dev": true,
-
"bin": {
-
"tsconfck": "bin/tsconfck.js"
-
},
-
"engines": {
-
"node": "^18 || >=20"
-
},
-
"peerDependencies": {
-
"typescript": "^5.0.0"
-
},
-
"peerDependenciesMeta": {
-
"typescript": {
"optional": true
···
"node": ">= 0.8"
},
-
"node_modules/vite": {
-
"version": "5.4.0",
-
"resolved": "https://registry.npmjs.org/vite/-/vite-5.4.0.tgz",
-
"integrity": "sha512-5xokfMX0PIiwCMCMb9ZJcMyh5wbBun0zUzKib+L65vAZ8GY9ePZMXxFrHbr/Kyll2+LSCY7xtERPpxkBDKngwg==",
-
"dev": true,
-
"dependencies": {
-
"esbuild": "^0.21.3",
-
"postcss": "^8.4.40",
-
"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": "*",
-
"sass-embedded": "*",
-
"stylus": "*",
-
"sugarss": "*",
-
"terser": "^5.4.0"
-
},
-
"peerDependenciesMeta": {
-
"@types/node": {
-
"optional": true
-
},
-
"less": {
-
"optional": true
-
},
-
"lightningcss": {
-
"optional": true
-
},
-
"sass": {
-
"optional": true
-
},
-
"sass-embedded": {
-
"optional": true
-
},
-
"stylus": {
-
"optional": true
-
},
-
"sugarss": {
-
"optional": true
-
},
-
"terser": {
-
"optional": true
-
}
-
}
-
},
-
"node_modules/vite-node": {
-
"version": "2.0.5",
-
"resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.0.5.tgz",
-
"integrity": "sha512-LdsW4pxj0Ot69FAoXZ1yTnA9bjGohr2yNBU7QKRxpz8ITSkhuDl6h3zS/tvgz4qrNjeRnvrWeXQ8ZF7Um4W00Q==",
-
"dev": true,
-
"dependencies": {
-
"cac": "^6.7.14",
-
"debug": "^4.3.5",
-
"pathe": "^1.1.2",
-
"tinyrainbow": "^1.2.0",
-
"vite": "^5.0.0"
-
},
-
"bin": {
-
"vite-node": "vite-node.mjs"
-
},
-
"engines": {
-
"node": "^18.0.0 || >=20.0.0"
-
},
-
"funding": {
-
"url": "https://opencollective.com/vitest"
-
}
-
},
-
"node_modules/vite-node/node_modules/debug": {
-
"version": "4.3.6",
-
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz",
-
"integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==",
-
"dev": true,
-
"dependencies": {
-
"ms": "2.1.2"
-
},
-
"engines": {
-
"node": ">=6.0"
-
},
-
"peerDependenciesMeta": {
-
"supports-color": {
-
"optional": true
-
}
-
}
-
},
-
"node_modules/vite-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==",
-
"dev": true
-
},
-
"node_modules/vite-tsconfig-paths": {
-
"version": "4.3.2",
-
"resolved": "https://registry.npmjs.org/vite-tsconfig-paths/-/vite-tsconfig-paths-4.3.2.tgz",
-
"integrity": "sha512-0Vd/a6po6Q+86rPlntHye7F31zA2URZMbH8M3saAZ/xR9QoGN/L21bxEGfXdWmFdNkqPpRdxFT7nmNe12e9/uA==",
-
"dev": true,
-
"dependencies": {
-
"debug": "^4.1.1",
-
"globrex": "^0.1.2",
-
"tsconfck": "^3.0.3"
-
},
-
"peerDependencies": {
-
"vite": "*"
-
},
-
"peerDependenciesMeta": {
-
"vite": {
-
"optional": true
-
}
-
}
-
},
-
"node_modules/vite-tsconfig-paths/node_modules/debug": {
-
"version": "4.3.6",
-
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz",
-
"integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==",
-
"dev": true,
-
"dependencies": {
-
"ms": "2.1.2"
-
},
-
"engines": {
-
"node": ">=6.0"
-
},
-
"peerDependenciesMeta": {
-
"supports-color": {
-
"optional": true
-
}
-
}
-
},
-
"node_modules/vite-tsconfig-paths/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==",
-
"dev": true
-
},
-
"node_modules/vite/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/vite/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/vite/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/vite/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/vite/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/vite/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/vite/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/vite/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/vite/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/vite/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/vite/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/vite/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/vite/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/vite/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/vite/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/vite/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/vite/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/vite/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/vite/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/vite/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/vite/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/vite/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/vite/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/vite/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/vitest": {
-
"version": "2.0.5",
-
"resolved": "https://registry.npmjs.org/vitest/-/vitest-2.0.5.tgz",
-
"integrity": "sha512-8GUxONfauuIdeSl5f9GTgVEpg5BTOlplET4WEDaeY2QBiN8wSm68vxN/tb5z405OwppfoCavnwXafiaYBC/xOA==",
-
"dev": true,
-
"dependencies": {
-
"@ampproject/remapping": "^2.3.0",
-
"@vitest/expect": "2.0.5",
-
"@vitest/pretty-format": "^2.0.5",
-
"@vitest/runner": "2.0.5",
-
"@vitest/snapshot": "2.0.5",
-
"@vitest/spy": "2.0.5",
-
"@vitest/utils": "2.0.5",
-
"chai": "^5.1.1",
-
"debug": "^4.3.5",
-
"execa": "^8.0.1",
-
"magic-string": "^0.30.10",
-
"pathe": "^1.1.2",
-
"std-env": "^3.7.0",
-
"tinybench": "^2.8.0",
-
"tinypool": "^1.0.0",
-
"tinyrainbow": "^1.2.0",
-
"vite": "^5.0.0",
-
"vite-node": "2.0.5",
-
"why-is-node-running": "^2.3.0"
-
},
-
"bin": {
-
"vitest": "vitest.mjs"
-
},
-
"engines": {
-
"node": "^18.0.0 || >=20.0.0"
-
},
-
"funding": {
-
"url": "https://opencollective.com/vitest"
-
},
-
"peerDependencies": {
-
"@edge-runtime/vm": "*",
-
"@types/node": "^18.0.0 || >=20.0.0",
-
"@vitest/browser": "2.0.5",
-
"@vitest/ui": "2.0.5",
-
"happy-dom": "*",
-
"jsdom": "*"
-
},
-
"peerDependenciesMeta": {
-
"@edge-runtime/vm": {
-
"optional": true
-
},
-
"@types/node": {
-
"optional": true
-
},
-
"@vitest/browser": {
-
"optional": true
-
},
-
"@vitest/ui": {
-
"optional": true
-
},
-
"happy-dom": {
-
"optional": true
-
},
-
"jsdom": {
-
"optional": true
-
}
-
}
-
},
-
"node_modules/vitest/node_modules/debug": {
-
"version": "4.3.6",
-
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz",
-
"integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==",
-
"dev": true,
-
"dependencies": {
-
"ms": "2.1.2"
-
},
-
"engines": {
-
"node": ">=6.0"
-
},
-
"peerDependenciesMeta": {
-
"supports-color": {
-
"optional": true
-
}
-
}
-
},
-
"node_modules/vitest/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==",
-
"dev": true
-
},
"node_modules/webidl-conversions": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz",
···
"node": ">= 8"
},
-
"node_modules/why-is-node-running": {
-
"version": "2.3.0",
-
"resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz",
-
"integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==",
-
"dev": true,
-
"dependencies": {
-
"siginfo": "^2.0.0",
-
"stackback": "0.0.2"
-
},
-
"bin": {
-
"why-is-node-running": "cli.js"
-
},
-
"engines": {
-
"node": ">=8"
-
}
-
},
-
"node_modules/wrap-ansi": {
-
"version": "9.0.0",
-
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz",
-
"integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==",
-
"dev": true,
-
"dependencies": {
-
"ansi-styles": "^6.2.1",
-
"string-width": "^7.0.0",
-
"strip-ansi": "^7.1.0"
-
},
-
"engines": {
-
"node": ">=18"
-
},
-
"funding": {
-
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
-
}
-
},
"node_modules/wrap-ansi-cjs": {
"name": "wrap-ansi",
"version": "7.0.0",
···
"node": ">=8"
},
-
"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/wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
···
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.0.tgz",
"integrity": "sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==",
"dev": true,
+
"optional": true,
+
"peer": true,
"bin": {
"yaml": "bin.mjs"
},
+2 -23
package.json
···
"build": "tsup",
"start": "node dist/index.js",
"lexgen": "lex gen-server ./src/lexicon ./lexicons/*",
-
"clean": "rimraf dist coverage",
-
"lint": "biome check src/",
-
"lint:fix": "biome check src/ --fix",
-
"format": "biome format src/",
-
"test": "vitest run"
+
"clean": "rimraf dist coverage"
},
"dependencies": {
"@atproto/identity": "^0.4.0",
-
"@atproto/jwk-jose": "0.1.2-rc.0",
"@atproto/lexicon": "0.4.1-rc.0",
"@atproto/oauth-client-node": "0.0.2-rc.2",
"@atproto/repo": "0.4.2-rc.0",
"@atproto/syntax": "^0.3.0",
"@atproto/xrpc-server": "0.5.4-rc.0",
"better-sqlite3": "^11.1.2",
-
"cors": "^2.8.5",
"dotenv": "^16.4.5",
"envalid": "^8.0.0",
"express": "^4.19.2",
-
"express-rate-limit": "^7.2.0",
-
"helmet": "^7.1.0",
-
"http-status-codes": "^2.3.0",
"iron-session": "^8.0.2",
"kysely": "^0.27.4",
"multiformats": "^9.9.0",
"pino": "^9.3.2",
-
"pino-http": "^10.0.0",
"uhtml": "^4.5.9"
},
"devDependencies": {
"@atproto/lex-cli": "^0.4.1",
-
"@biomejs/biome": "1.8.3",
"@types/better-sqlite3": "^7.6.11",
-
"@types/cors": "^2.8.17",
"@types/express": "^4.17.21",
-
"lint-staged": "^15.2.2",
"pino-pretty": "^11.0.0",
"rimraf": "^5.0.0",
-
"supertest": "^7.0.0",
"ts-node": "^10.9.2",
"tsup": "^8.0.2",
"tsx": "^4.7.2",
-
"typescript": "^5.4.4",
-
"vite-tsconfig-paths": "^4.3.2",
-
"vitest": "^2.0.0"
-
},
-
"lint-staged": {
-
"*.{js,ts,cjs,mjs,d.cts,d.mts,json,jsonc}": [
-
"biome check --apply --no-errors-on-unmatched"
-
]
+
"typescript": "^5.4.4"
},
"tsup": {
"entry": [
-1
src/auth/client.ts
···
-
import { JoseKey } from '@atproto/jwk-jose'
import { NodeOAuthClient } from '@atproto/oauth-client-node'
import type { Database } from '#/db'
import { env } from '#/env'
+1 -3
src/auth/session.ts
···
-
'use server'
-
import assert from 'node:assert'
import type { IncomingMessage, ServerResponse } from 'node:http'
import { getIronSession } from 'iron-session'
import { env } from '#/env'
-
import { AppContext } from '#/config'
+
import { AppContext } from '#/index'
export type Session = { did: string }
-13
src/config.ts
···
-
import type { OAuthClient } from '@atproto/oauth-client-node'
-
import type pino from 'pino'
-
import type { Database } from '#/db'
-
import type { Ingester } from '#/firehose/ingester'
-
import { Resolver } from '#/ident/types'
-
-
export type AppContext = {
-
db: Database
-
ingester: Ingester
-
logger: pino.Logger
-
oauthClient: OAuthClient
-
resolver: Resolver
-
}
-1
src/env.ts
···
PUBLIC_URL: str({}),
DB_PATH: str({ devDefault: ':memory:' }),
COOKIE_SECRET: str({ devDefault: '00000000000000000000000000000000' }),
-
CORS_ORIGIN: str({ devDefault: testOnly('http://localhost:3000') }),
COMMON_RATE_LIMIT_MAX_REQUESTS: num({ devDefault: testOnly(1000) }),
COMMON_RATE_LIMIT_WINDOW_MS: num({ devDefault: testOnly(1000) }),
})
+5
src/ident/resolver.ts src/firehose/resolver.ts
···
const HOUR = 60e3 * 60
const DAY = HOUR * 24
+
export interface Resolver {
+
resolveDidToHandle(did: string): Promise<string>
+
resolveDidsToHandles(dids: string[]): Promise<Record<string, string>>
+
}
+
export function createResolver() {
const resolver = new IdResolver({
didCache: new MemoryCache(HOUR, DAY),
-4
src/ident/types.ts
···
-
export interface Resolver {
-
resolveDidToHandle(did: string): Promise<string>
-
resolveDidsToHandles(dids: string[]): Promise<Record<string, string>>
-
}
+81 -1
src/index.ts
···
-
import { Server } from '#/server'
+
import events from 'node:events'
+
import type http from 'node:http'
+
import express, { type Express } from 'express'
+
import { pino } from 'pino'
+
import type { OAuthClient } from '@atproto/oauth-client-node'
+
+
import { createDb, migrateToLatest } from '#/db'
+
import { env } from '#/env'
+
import { Ingester } from '#/firehose/ingester'
+
import { createRouter } from '#/routes'
+
import { createClient } from '#/auth/client'
+
import { createResolver, Resolver } from '#/firehose/resolver'
+
import type { Database } from '#/db'
+
+
export type AppContext = {
+
db: Database
+
ingester: Ingester
+
logger: pino.Logger
+
oauthClient: OAuthClient
+
resolver: Resolver
+
}
+
+
export class Server {
+
constructor(
+
public app: express.Application,
+
public server: http.Server,
+
public ctx: AppContext
+
) {}
+
+
static async create() {
+
const { NODE_ENV, HOST, PORT, DB_PATH } = env
+
+
const logger = pino({ name: 'server start' })
+
const db = createDb(DB_PATH)
+
await migrateToLatest(db)
+
const ingester = new Ingester(db)
+
const oauthClient = await createClient(db)
+
const resolver = createResolver()
+
ingester.start()
+
const ctx = {
+
db,
+
ingester,
+
logger,
+
oauthClient,
+
resolver,
+
}
+
+
const app: Express = express()
+
+
// Set the application to trust the reverse proxy
+
app.set('trust proxy', true)
+
+
// Middlewares
+
app.use(express.json())
+
app.use(express.urlencoded({ extended: true }))
+
+
// Routes
+
const router = createRouter(ctx)
+
app.use(router)
+
+
// Error handlers
+
app.use((_req, res) => res.sendStatus(404))
+
+
const server = app.listen(env.PORT)
+
await events.once(server, 'listening')
+
logger.info(`Server (${NODE_ENV}) running on port http://${HOST}:${PORT}`)
+
+
return new Server(app, server, ctx)
+
}
+
+
async close() {
+
this.ctx.logger.info('sigint received, shutting down')
+
this.ctx.ingester.destroy()
+
return new Promise<void>((resolve) => {
+
this.server.close(() => {
+
this.ctx.logger.info('server closed')
+
resolve()
+
})
+
})
+
}
+
}
const run = async () => {
const server = await Server.create()
-13
src/middleware/errorHandler.ts
···
-
import type { ErrorRequestHandler, RequestHandler } from 'express'
-
import { StatusCodes } from 'http-status-codes'
-
-
const unexpectedRequest: RequestHandler = (_req, res) => {
-
res.sendStatus(StatusCodes.NOT_FOUND)
-
}
-
-
const addErrorToRequestLog: ErrorRequestHandler = (err, _req, res, next) => {
-
res.locals.err = err
-
next(err)
-
}
-
-
export default () => [unexpectedRequest, addErrorToRequestLog]
-90
src/middleware/requestLogger.ts
···
-
import { randomUUID } from 'node:crypto'
-
import type { IncomingMessage, ServerResponse } from 'node:http'
-
import type { Request, RequestHandler, Response } from 'express'
-
import { StatusCodes, getReasonPhrase } from 'http-status-codes'
-
import type { LevelWithSilent } from 'pino'
-
import { type CustomAttributeKeys, type Options, pinoHttp } from 'pino-http'
-
-
import { env } from '#/env'
-
-
enum LogLevel {
-
Fatal = 'fatal',
-
Error = 'error',
-
Warn = 'warn',
-
Info = 'info',
-
Debug = 'debug',
-
Trace = 'trace',
-
Silent = 'silent',
-
}
-
-
type PinoCustomProps = {
-
request: Request
-
response: Response
-
error: Error
-
responseBody: unknown
-
}
-
-
const requestLogger = (options?: Options): RequestHandler[] => {
-
const pinoOptions: Options = {
-
enabled: env.isProduction,
-
customProps: customProps as unknown as Options['customProps'],
-
redact: [],
-
genReqId,
-
customLogLevel,
-
customSuccessMessage,
-
customReceivedMessage: (req) => `request received: ${req.method}`,
-
customErrorMessage: (_req, res) => `request errored with status code: ${res.statusCode}`,
-
customAttributeKeys,
-
...options,
-
}
-
return [responseBodyMiddleware, pinoHttp(pinoOptions)]
-
}
-
-
const customAttributeKeys: CustomAttributeKeys = {
-
req: 'request',
-
res: 'response',
-
err: 'error',
-
responseTime: 'timeTaken',
-
}
-
-
const customProps = (req: Request, res: Response): PinoCustomProps => ({
-
request: req,
-
response: res,
-
error: res.locals.err,
-
responseBody: res.locals.responseBody,
-
})
-
-
const responseBodyMiddleware: RequestHandler = (_req, res, next) => {
-
const isNotProduction = !env.isProduction
-
if (isNotProduction) {
-
const originalSend = res.send
-
res.send = (content) => {
-
res.locals.responseBody = content
-
res.send = originalSend
-
return originalSend.call(res, content)
-
}
-
}
-
next()
-
}
-
-
const customLogLevel = (_req: IncomingMessage, res: ServerResponse<IncomingMessage>, err?: Error): LevelWithSilent => {
-
if (err || res.statusCode >= StatusCodes.INTERNAL_SERVER_ERROR) return LogLevel.Error
-
if (res.statusCode >= StatusCodes.BAD_REQUEST) return LogLevel.Warn
-
if (res.statusCode >= StatusCodes.MULTIPLE_CHOICES) return LogLevel.Silent
-
return LogLevel.Info
-
}
-
-
const customSuccessMessage = (req: IncomingMessage, res: ServerResponse<IncomingMessage>) => {
-
if (res.statusCode === StatusCodes.NOT_FOUND) return getReasonPhrase(StatusCodes.NOT_FOUND)
-
return `${req.method} completed`
-
}
-
-
const genReqId = (req: IncomingMessage, res: ServerResponse<IncomingMessage>) => {
-
const existingID = req.id ?? req.headers['x-request-id']
-
if (existingID) return existingID
-
const id = randomUUID()
-
res.setHeader('X-Request-Id', id)
-
return id
-
}
-
-
export default requestLogger()
src/public/home.js src/pages/public/home.js
src/public/styles.css src/pages/public/styles.css
+16 -3
src/routes/index.ts src/routes.ts
···
import { isValidHandle } from '@atproto/syntax'
import express from 'express'
import { createSession, destroySession, getSessionAgent } from '#/auth/session'
-
import type { AppContext } from '#/config'
+
import type { AppContext } from '#/index'
import { home } from '#/pages/home'
import { login } from '#/pages/login'
import { page } from '#/view'
-
import { handler } from './util'
import * as Status from '#/lexicon/types/com/example/status'
+
const handler =
+
(fn: express.Handler) =>
+
async (
+
req: express.Request,
+
res: express.Response,
+
next: express.NextFunction
+
) => {
+
try {
+
await fn(req, res, next)
+
} catch (err) {
+
next(err)
+
}
+
}
+
export const createRouter = (ctx: AppContext) => {
const router = express.Router()
-
router.use('/public', express.static(path.join(__dirname, '..', 'public')))
+
router.use('/public', express.static(path.join(__dirname, 'pages', 'public')))
router.get(
'/client-metadata.json',
-10
src/routes/util.ts
···
-
import type express from 'express'
-
-
export const handler =
-
(fn: express.Handler) => async (req: express.Request, res: express.Response, next: express.NextFunction) => {
-
try {
-
await fn(req, res, next)
-
} catch (err) {
-
next(err)
-
}
-
}
-93
src/server.ts
···
-
import events from 'node:events'
-
import type http from 'node:http'
-
import cors from 'cors'
-
import express, { type Express } from 'express'
-
import helmet from 'helmet'
-
import { pino } from 'pino'
-
-
import { createDb, migrateToLatest } from '#/db'
-
import { env } from '#/env'
-
import { Ingester } from '#/firehose/ingester'
-
import errorHandler from '#/middleware/errorHandler'
-
import requestLogger from '#/middleware/requestLogger'
-
import { createRouter } from '#/routes'
-
import { createClient } from '#/auth/client'
-
import { createResolver } from '#/ident/resolver'
-
import type { AppContext } from '#/config'
-
-
export class Server {
-
constructor(
-
public app: express.Application,
-
public server: http.Server,
-
public ctx: AppContext
-
) {}
-
-
static async create() {
-
const { NODE_ENV, HOST, PORT, DB_PATH } = env
-
-
const logger = pino({ name: 'server start' })
-
const db = createDb(DB_PATH)
-
await migrateToLatest(db)
-
const ingester = new Ingester(db)
-
const oauthClient = await createClient(db)
-
const resolver = createResolver()
-
ingester.start()
-
const ctx = {
-
db,
-
ingester,
-
logger,
-
oauthClient,
-
resolver,
-
}
-
-
const app: Express = express()
-
-
// Set the application to trust the reverse proxy
-
app.set('trust proxy', true)
-
-
// TODO: middleware for sqlite server
-
// TODO: middleware for OAuth
-
-
// Middlewares
-
app.use(express.json())
-
app.use(express.urlencoded({ extended: true }))
-
app.use(cors({ origin: env.CORS_ORIGIN, credentials: true }))
-
app.use(
-
helmet({
-
contentSecurityPolicy: {
-
directives: {
-
// allow oauth redirect when submitting login form
-
formAction: null,
-
},
-
},
-
})
-
)
-
-
// Request logging
-
app.use(requestLogger)
-
-
// Routes
-
const router = createRouter(ctx)
-
app.use(router)
-
-
// Error handlers
-
app.use(errorHandler())
-
-
const server = app.listen(env.PORT)
-
await events.once(server, 'listening')
-
logger.info(`Server (${NODE_ENV}) running on port http://${HOST}:${PORT}`)
-
-
return new Server(app, server, ctx)
-
}
-
-
async close() {
-
this.ctx.logger.info('sigint received, shutting down')
-
this.ctx.ingester.destroy()
-
return new Promise<void>((resolve) => {
-
this.server.close(() => {
-
this.ctx.logger.info('server closed')
-
resolve()
-
})
-
})
-
}
-
}
+1 -2
tsconfig.json
···
"strict": true,
"esModuleInterop": true,
"skipLibCheck": true,
-
"forceConsistentCasingInFileNames": true,
-
"types": ["vitest/globals"]
+
"forceConsistentCasingInFileNames": true
},
"include": ["src/**/*"],
"exclude": ["node_modules"]
-13
vite.config.mts
···
-
import tsconfigPaths from "vite-tsconfig-paths";
-
import { defineConfig } from "vitest/config";
-
-
export default defineConfig({
-
test: {
-
coverage: {
-
exclude: ["**/node_modules/**", "**/index.ts"],
-
},
-
globals: true,
-
restoreMocks: true,
-
},
-
plugins: [tsconfigPaths()],
-
});