Scratch space for learning atproto app development

Compare changes

Choose any two refs to compare.

+11 -12
.env.template
···
# Environment Configuration
-
NODE_ENV="development" # Options: 'development', 'production'
-
PORT="8080" # The port your server will listen on
-
HOST="localhost" # Hostname for the server
-
PUBLIC_URL="" # Set when deployed publicly, e.g. "https://mysite.com". Informs OAuth client id.
+
NODE_ENV="development" # Options: 'development', 'production'
+
PORT="8080" # The port your server will listen on
+
DB_PATH=":memory:" # The SQLite database path. Set as ":memory:" to use a temporary in-memory database.
+
# PUBLIC_URL="" # Set when deployed publicly, e.g. "https://mysite.com". Informs OAuth client id.
+
# LOG_LEVEL="info" # Options: 'fatal', 'error', 'warn', 'info', 'debug'
+
# PDS_URL="https://my.pds" # The default PDS for login and sign-ups
-
# CORS Settings
-
CORS_ORIGIN="http://localhost:*" # Allowed CORS origin, adjust as necessary
+
# Secrets below *MUST* be set in production
-
# 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
+
# May be generated with `openssl rand -base64 33`
+
# COOKIE_SECRET=""
-
# Secrets
-
# Must set this in production. May be generated with `openssl rand -base64 33`
-
# COOKIE_SECRET=""
+
# May be generated with `./bin/gen-jwk` (requires `npm install` once first)
+
# PRIVATE_KEYS='[{"kty":"EC","kid":"123",...}]'
+1
.gitignore
···
dist-ssr
*.local
.env
+
*.sqlite
# Editor directories and files
!.vscode/extensions.json
+7
.prettierrc
···
+
{
+
"trailingComma": "all",
+
"tabWidth": 2,
+
"semi": false,
+
"singleQuote": true,
+
"useTabs": false
+
}
+1 -1
.vscode/settings.json
···
{
"editor.formatOnSave": true,
-
"editor.defaultFormatter": "biomejs.biome",
+
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.codeActionsOnSave": {
"quickfix.biome": "explicit",
"source.organizeImports.biome": "explicit",
-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
+21
LICENSE
···
+
MIT License
+
+
Copyright (c) 2025 Bluesky PBC, and Contributors
+
+
Permission is hereby granted, free of charge, to any person obtaining a copy
+
of this software and associated documentation files (the "Software"), to deal
+
in the Software without restriction, including without limitation the rights
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+
copies of the Software, and to permit persons to whom the Software is
+
furnished to do so, subject to the following conditions:
+
+
The above copyright notice and this permission notice shall be included in all
+
copies or substantial portions of the Software.
+
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+
SOFTWARE.
+56 -8
README.md
···
-
# AT Protocol Express App
+
# AT Protocol "Statusphere" Example App
-
A demo application covering:
-
- public firehose ingestion
-
- identity and login with OAuth
-
- writing to the network
+
An example application covering:
+
+
- Signin via OAuth
+
- Fetch information about users (profiles)
+
- Listen to the network firehose for new data
+
- Publish data on the user's account using a custom schema
+
+
See https://atproto.com/guides/applications for a guide through the codebase.
## Getting Started
-
### Development
+
```sh
-
pnpm i
+
git clone https://github.com/bluesky-social/statusphere-example-app.git
+
cd statusphere-example-app
cp .env.template .env
-
pnpm run dev
+
npm install
+
npm run dev
# Navigate to http://localhost:8080
```
+
+
## Deploying
+
+
In production, you will need a private key to sign OAuth tokens request. Use the
+
following command to generate a new private key:
+
+
```sh
+
./bin/gen-jwk
+
```
+
+
The generated key must be added to the environment variables (`.env` file) in `PRIVATE_KEYS`.
+
+
```env
+
PRIVATE_KEYS='[{"kty":"EC","kid":"12",...}]'
+
```
+
+
> [!NOTE]
+
>
+
> The `PRIVATE_KEYS` can contain multiple keys. The first key in the array is
+
> the most recent one, and it will be used to sign new tokens. When a key is
+
> removed, all associated sessions will be invalidated.
+
+
Make sure to also set the `COOKIE_SECRET`, which is used to sign session
+
cookies, in your environment variables (`.env` file). You should use a random
+
string for this:
+
+
```sh
+
openssl rand -base64 33
+
```
+
+
Finally, set the `PUBLIC_URL` to the URL where your app will be accessible. This
+
will allow the authorization servers to download the app's public keys.
+
+
```env
+
PUBLIC_URL="https://your-app-url.com"
+
```
+
+
> [!NOTE]
+
>
+
> You can use services like [ngrok](https://ngrok.com/) to expose your local
+
> server to the internet for testing purposes. Just set the `PUBLIC_URL` to the
+
> ngrok URL.
+15
bin/gen-jwk
···
+
#!/usr/bin/env node
+
+
'use strict'
+
+
const { JoseKey } = require('@atproto/oauth-client-node')
+
+
async function main() {
+
const kid = Date.now().toString()
+
const key = await JoseKey.generate(['ES256'], kid)
+
const jwk = key.privateJwk
+
+
console.log(JSON.stringify(jwk))
+
}
+
+
main()
-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"
-
}
-
}
-
}
-
}
+156
lexicons/defs.json
···
+
{
+
"lexicon": 1,
+
"id": "com.atproto.label.defs",
+
"defs": {
+
"label": {
+
"type": "object",
+
"description": "Metadata tag on an atproto resource (eg, repo or record).",
+
"required": ["src", "uri", "val", "cts"],
+
"properties": {
+
"ver": {
+
"type": "integer",
+
"description": "The AT Protocol version of the label object."
+
},
+
"src": {
+
"type": "string",
+
"format": "did",
+
"description": "DID of the actor who created this label."
+
},
+
"uri": {
+
"type": "string",
+
"format": "uri",
+
"description": "AT URI of the record, repository (account), or other resource that this label applies to."
+
},
+
"cid": {
+
"type": "string",
+
"format": "cid",
+
"description": "Optionally, CID specifying the specific version of 'uri' resource this label applies to."
+
},
+
"val": {
+
"type": "string",
+
"maxLength": 128,
+
"description": "The short string name of the value or type of this label."
+
},
+
"neg": {
+
"type": "boolean",
+
"description": "If true, this is a negation label, overwriting a previous label."
+
},
+
"cts": {
+
"type": "string",
+
"format": "datetime",
+
"description": "Timestamp when this label was created."
+
},
+
"exp": {
+
"type": "string",
+
"format": "datetime",
+
"description": "Timestamp at which this label expires (no longer applies)."
+
},
+
"sig": {
+
"type": "bytes",
+
"description": "Signature of dag-cbor encoded label."
+
}
+
}
+
},
+
"selfLabels": {
+
"type": "object",
+
"description": "Metadata tags on an atproto record, published by the author within the record.",
+
"required": ["values"],
+
"properties": {
+
"values": {
+
"type": "array",
+
"items": { "type": "ref", "ref": "#selfLabel" },
+
"maxLength": 10
+
}
+
}
+
},
+
"selfLabel": {
+
"type": "object",
+
"description": "Metadata tag on an atproto record, published by the author within the record. Note that schemas should use #selfLabels, not #selfLabel.",
+
"required": ["val"],
+
"properties": {
+
"val": {
+
"type": "string",
+
"maxLength": 128,
+
"description": "The short string name of the value or type of this label."
+
}
+
}
+
},
+
"labelValueDefinition": {
+
"type": "object",
+
"description": "Declares a label value and its expected interpretations and behaviors.",
+
"required": ["identifier", "severity", "blurs", "locales"],
+
"properties": {
+
"identifier": {
+
"type": "string",
+
"description": "The value of the label being defined. Must only include lowercase ascii and the '-' character ([a-z-]+).",
+
"maxLength": 100,
+
"maxGraphemes": 100
+
},
+
"severity": {
+
"type": "string",
+
"description": "How should a client visually convey this label? 'inform' means neutral and informational; 'alert' means negative and warning; 'none' means show nothing.",
+
"knownValues": ["inform", "alert", "none"]
+
},
+
"blurs": {
+
"type": "string",
+
"description": "What should this label hide in the UI, if applied? 'content' hides all of the target; 'media' hides the images/video/audio; 'none' hides nothing.",
+
"knownValues": ["content", "media", "none"]
+
},
+
"defaultSetting": {
+
"type": "string",
+
"description": "The default setting for this label.",
+
"knownValues": ["ignore", "warn", "hide"],
+
"default": "warn"
+
},
+
"adultOnly": {
+
"type": "boolean",
+
"description": "Does the user need to have adult content enabled in order to configure this label?"
+
},
+
"locales": {
+
"type": "array",
+
"items": { "type": "ref", "ref": "#labelValueDefinitionStrings" }
+
}
+
}
+
},
+
"labelValueDefinitionStrings": {
+
"type": "object",
+
"description": "Strings which describe the label in the UI, localized into a specific language.",
+
"required": ["lang", "name", "description"],
+
"properties": {
+
"lang": {
+
"type": "string",
+
"description": "The code of the language these strings are written in.",
+
"format": "language"
+
},
+
"name": {
+
"type": "string",
+
"description": "A short human-readable name for the label.",
+
"maxGraphemes": 64,
+
"maxLength": 640
+
},
+
"description": {
+
"type": "string",
+
"description": "A longer description of what the label means and why it might be applied.",
+
"maxGraphemes": 10000,
+
"maxLength": 100000
+
}
+
}
+
},
+
"labelValue": {
+
"type": "string",
+
"knownValues": [
+
"!hide",
+
"!no-promote",
+
"!warn",
+
"!no-unauthenticated",
+
"dmca-violation",
+
"doxxing",
+
"porn",
+
"sexual",
+
"nudity",
+
"nsfl",
+
"gore"
+
]
+
}
+
}
+
}
+49
lexicons/profile.json
···
+
{
+
"lexicon": 1,
+
"id": "app.bsky.actor.profile",
+
"defs": {
+
"main": {
+
"type": "record",
+
"description": "A declaration of a Bluesky account profile.",
+
"key": "literal:self",
+
"record": {
+
"type": "object",
+
"properties": {
+
"displayName": {
+
"type": "string",
+
"maxGraphemes": 64,
+
"maxLength": 640
+
},
+
"description": {
+
"type": "string",
+
"description": "Free-form profile description text.",
+
"maxGraphemes": 256,
+
"maxLength": 2560
+
},
+
"avatar": {
+
"type": "blob",
+
"description": "Small image to be displayed next to posts from account. AKA, 'profile picture'",
+
"accept": ["image/png", "image/jpeg"],
+
"maxSize": 1000000
+
},
+
"banner": {
+
"type": "blob",
+
"description": "Larger horizontal image to display behind profile view.",
+
"accept": ["image/png", "image/jpeg"],
+
"maxSize": 1000000
+
},
+
"labels": {
+
"type": "union",
+
"description": "Self-label values, specific to the Bluesky application, on the overall account.",
+
"refs": ["com.atproto.label.defs#selfLabels"]
+
},
+
"joinedViaStarterPack": {
+
"type": "ref",
+
"ref": "com.atproto.repo.strongRef"
+
},
+
"createdAt": { "type": "string", "format": "datetime" }
+
}
+
}
+
}
+
}
+
}
+10 -5
lexicons/status.json
···
{
"lexicon": 1,
-
"id": "example.lexicon.status",
+
"id": "xyz.statusphere.status",
"defs": {
"main": {
"type": "record",
-
"key": "literal:self",
+
"key": "tid",
"record": {
"type": "object",
-
"required": ["status", "updatedAt"],
+
"required": ["status", "createdAt"],
"properties": {
-
"status": { "type": "string" },
-
"updatedAt": { "type": "string", "format": "datetime" }
+
"status": {
+
"type": "string",
+
"minLength": 1,
+
"maxGraphemes": 1,
+
"maxLength": 32
+
},
+
"createdAt": { "type": "string", "format": "datetime" }
}
}
}
+15
lexicons/strongRef.json
···
+
{
+
"lexicon": 1,
+
"id": "com.atproto.repo.strongRef",
+
"description": "A URI with a content-hash fingerprint.",
+
"defs": {
+
"main": {
+
"type": "object",
+
"required": ["uri", "cid"],
+
"properties": {
+
"uri": { "type": "string", "format": "at-uri" },
+
"cid": { "type": "string", "format": "cid" }
+
}
+
}
+
}
+
}
+4908
package-lock.json
···
+
{
+
"name": "atproto-example-app",
+
"version": "0.0.1",
+
"lockfileVersion": 3,
+
"requires": true,
+
"packages": {
+
"": {
+
"name": "atproto-example-app",
+
"version": "0.0.1",
+
"license": "MIT",
+
"dependencies": {
+
"@atproto/api": "^0.15.6",
+
"@atproto/common": "^0.4.11",
+
"@atproto/identity": "^0.4.8",
+
"@atproto/lexicon": "^0.4.11",
+
"@atproto/oauth-client-node": "^0.3.1",
+
"@atproto/sync": "^0.1.26",
+
"@atproto/syntax": "^0.4.0",
+
"@atproto/xrpc-server": "^0.8.0",
+
"better-sqlite3": "^11.1.2",
+
"dotenv": "^16.4.5",
+
"envalid": "^8.0.0",
+
"express": "^4.19.2",
+
"http-terminator": "^3.2.0",
+
"iron-session": "^8.0.2",
+
"kysely": "^0.27.4",
+
"multiformats": "^9.9.0",
+
"pino": "^9.3.2",
+
"uhtml": "^4.5.9",
+
"zod": "^3.25.67"
+
},
+
"devDependencies": {
+
"@atproto/lex-cli": "^0.4.1",
+
"@types/better-sqlite3": "^7.6.11",
+
"@types/express": "^4.17.21",
+
"pino-pretty": "^11.0.0",
+
"rimraf": "^5.0.0",
+
"ts-node": "^10.9.2",
+
"tsup": "^8.0.2",
+
"tsx": "^4.7.2",
+
"typescript": "^5.4.4"
+
}
+
},
+
"node_modules/@atproto-labs/did-resolver": {
+
"version": "0.2.0",
+
"resolved": "https://registry.npmjs.org/@atproto-labs/did-resolver/-/did-resolver-0.2.0.tgz",
+
"integrity": "sha512-y9GOx2gUETynDKmANnBrU5DTf+u0AwKBJpGns1vDDOYMdLdRCFIeYy3UH+TI8YOkcEazjgF5Q3m+LjwriE1KqQ==",
+
"license": "MIT",
+
"dependencies": {
+
"@atproto-labs/fetch": "0.2.3",
+
"@atproto-labs/pipe": "0.1.1",
+
"@atproto-labs/simple-store": "0.2.0",
+
"@atproto-labs/simple-store-memory": "0.1.3",
+
"@atproto/did": "0.1.5",
+
"zod": "^3.23.8"
+
}
+
},
+
"node_modules/@atproto-labs/fetch": {
+
"version": "0.2.3",
+
"resolved": "https://registry.npmjs.org/@atproto-labs/fetch/-/fetch-0.2.3.tgz",
+
"integrity": "sha512-NZtbJOCbxKUFRFKMpamT38PUQMY0hX0p7TG5AEYOPhZKZEP7dHZ1K2s1aB8MdVH0qxmqX7nQleNrrvLf09Zfdw==",
+
"license": "MIT",
+
"dependencies": {
+
"@atproto-labs/pipe": "0.1.1"
+
}
+
},
+
"node_modules/@atproto-labs/fetch-node": {
+
"version": "0.1.9",
+
"resolved": "https://registry.npmjs.org/@atproto-labs/fetch-node/-/fetch-node-0.1.9.tgz",
+
"integrity": "sha512-8sHDDXZEzQptLu8ddUU/8U+THS6dumgPynVX0/1PjUYd4S/FWyPcz6yMIiVChTfzKnZvYRRz47+qvOKhydrHQw==",
+
"license": "MIT",
+
"dependencies": {
+
"@atproto-labs/fetch": "0.2.3",
+
"@atproto-labs/pipe": "0.1.1",
+
"ipaddr.js": "^2.1.0",
+
"undici": "^6.14.1"
+
},
+
"engines": {
+
"node": ">=18.7.0"
+
}
+
},
+
"node_modules/@atproto-labs/fetch-node/node_modules/ipaddr.js": {
+
"version": "2.2.0",
+
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz",
+
"integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==",
+
"license": "MIT",
+
"engines": {
+
"node": ">= 10"
+
}
+
},
+
"node_modules/@atproto-labs/handle-resolver": {
+
"version": "0.3.0",
+
"resolved": "https://registry.npmjs.org/@atproto-labs/handle-resolver/-/handle-resolver-0.3.0.tgz",
+
"integrity": "sha512-TREelvXB6P2eHxx6QjINRkBzUZu/aXWrdY9iN57shQe3C8rzsHNEHHuTVvRa33Hc7vFdQbZN0TnCgKveoyiL/A==",
+
"license": "MIT",
+
"dependencies": {
+
"@atproto-labs/simple-store": "0.2.0",
+
"@atproto-labs/simple-store-memory": "0.1.3",
+
"@atproto/did": "0.1.5",
+
"zod": "^3.23.8"
+
}
+
},
+
"node_modules/@atproto-labs/handle-resolver-node": {
+
"version": "0.1.18",
+
"resolved": "https://registry.npmjs.org/@atproto-labs/handle-resolver-node/-/handle-resolver-node-0.1.18.tgz",
+
"integrity": "sha512-/qo14c3I+kagT1UWSp3lTIzwDetfkxvF3Y3VlX2NyQ2jHwgtIAJ81KFNqe7t82NpQDjWiM5h4bdjvdbFIh5djQ==",
+
"license": "MIT",
+
"dependencies": {
+
"@atproto-labs/fetch-node": "0.1.9",
+
"@atproto-labs/handle-resolver": "0.3.0",
+
"@atproto/did": "0.1.5"
+
},
+
"engines": {
+
"node": ">=18.7.0"
+
}
+
},
+
"node_modules/@atproto-labs/identity-resolver": {
+
"version": "0.2.0",
+
"resolved": "https://registry.npmjs.org/@atproto-labs/identity-resolver/-/identity-resolver-0.2.0.tgz",
+
"integrity": "sha512-X4UpU9qSgbuBVRXw0kpYqdVRtjNGezmaetyQIwWHNdUl1+ILu4GhinSk1MBXamzgg/07/BVCU0r4LRIPg2Wiow==",
+
"license": "MIT",
+
"dependencies": {
+
"@atproto-labs/did-resolver": "0.2.0",
+
"@atproto-labs/handle-resolver": "0.3.0"
+
}
+
},
+
"node_modules/@atproto-labs/pipe": {
+
"version": "0.1.1",
+
"resolved": "https://registry.npmjs.org/@atproto-labs/pipe/-/pipe-0.1.1.tgz",
+
"integrity": "sha512-hdNw2oUs2B6BN1lp+32pF7cp8EMKuIN5Qok2Vvv/aOpG/3tNSJ9YkvfI0k6Zd188LeDDYRUpYpxcoFIcGH/FNg==",
+
"license": "MIT"
+
},
+
"node_modules/@atproto-labs/simple-store": {
+
"version": "0.2.0",
+
"resolved": "https://registry.npmjs.org/@atproto-labs/simple-store/-/simple-store-0.2.0.tgz",
+
"integrity": "sha512-0bRbAlI8Ayh03wRwncAMEAyUKtZ+AuTS1jgPrfym1WVOAOiottI/ZmgccqLl6w5MbxVcClNQF7WYGKvGwGoIhA==",
+
"license": "MIT"
+
},
+
"node_modules/@atproto-labs/simple-store-memory": {
+
"version": "0.1.3",
+
"resolved": "https://registry.npmjs.org/@atproto-labs/simple-store-memory/-/simple-store-memory-0.1.3.tgz",
+
"integrity": "sha512-jkitT9+AtU+0b28DoN92iURLaCt/q/q4yX8q6V+9LSwYlUTqKoj/5NFKvF7x6EBuG+gpUdlcycbH7e60gjOhRQ==",
+
"license": "MIT",
+
"dependencies": {
+
"@atproto-labs/simple-store": "0.2.0",
+
"lru-cache": "^10.2.0"
+
}
+
},
+
"node_modules/@atproto/api": {
+
"version": "0.15.16",
+
"resolved": "https://registry.npmjs.org/@atproto/api/-/api-0.15.16.tgz",
+
"integrity": "sha512-ZNBrzBg2l0lHreKik1lJn8lrhAktwlY8NUPBU/hO9dwjAnDHQTiSzNFZt65dp9djmqZ75sX/VJ+heNuaJBvnhQ==",
+
"license": "MIT",
+
"dependencies": {
+
"@atproto/common-web": "^0.4.2",
+
"@atproto/lexicon": "^0.4.11",
+
"@atproto/syntax": "^0.4.0",
+
"@atproto/xrpc": "^0.7.0",
+
"await-lock": "^2.2.2",
+
"multiformats": "^9.9.0",
+
"tlds": "^1.234.0",
+
"zod": "^3.23.8"
+
}
+
},
+
"node_modules/@atproto/common": {
+
"version": "0.4.11",
+
"resolved": "https://registry.npmjs.org/@atproto/common/-/common-0.4.11.tgz",
+
"integrity": "sha512-Knv0viYXNMfCdIE7jLUiWJKnnMfEwg+vz2epJQi8WOjqtqCFb3W/3Jn72ZiuovIfpdm13MaOiny6w2NErUQC6g==",
+
"license": "MIT",
+
"dependencies": {
+
"@atproto/common-web": "^0.4.2",
+
"@ipld/dag-cbor": "^7.0.3",
+
"cbor-x": "^1.5.1",
+
"iso-datestring-validator": "^2.2.2",
+
"multiformats": "^9.9.0",
+
"pino": "^8.21.0"
+
},
+
"engines": {
+
"node": ">=18.7.0"
+
}
+
},
+
"node_modules/@atproto/common-web": {
+
"version": "0.4.2",
+
"resolved": "https://registry.npmjs.org/@atproto/common-web/-/common-web-0.4.2.tgz",
+
"integrity": "sha512-vrXwGNoFGogodjQvJDxAeP3QbGtawgZute2ed1XdRO0wMixLk3qewtikZm06H259QDJVu6voKC5mubml+WgQUw==",
+
"license": "MIT",
+
"dependencies": {
+
"graphemer": "^1.4.0",
+
"multiformats": "^9.9.0",
+
"uint8arrays": "3.0.0",
+
"zod": "^3.23.8"
+
}
+
},
+
"node_modules/@atproto/common/node_modules/pino": {
+
"version": "8.21.0",
+
"resolved": "https://registry.npmjs.org/pino/-/pino-8.21.0.tgz",
+
"integrity": "sha512-ip4qdzjkAyDDZklUaZkcRFb2iA118H9SgRh8yzTkSQK8HilsOJF7rSY8HoW5+I0M46AZgX/pxbprf2vvzQCE0Q==",
+
"dependencies": {
+
"atomic-sleep": "^1.0.0",
+
"fast-redact": "^3.1.1",
+
"on-exit-leak-free": "^2.1.0",
+
"pino-abstract-transport": "^1.2.0",
+
"pino-std-serializers": "^6.0.0",
+
"process-warning": "^3.0.0",
+
"quick-format-unescaped": "^4.0.3",
+
"real-require": "^0.2.0",
+
"safe-stable-stringify": "^2.3.1",
+
"sonic-boom": "^3.7.0",
+
"thread-stream": "^2.6.0"
+
},
+
"bin": {
+
"pino": "bin.js"
+
}
+
},
+
"node_modules/@atproto/common/node_modules/pino-std-serializers": {
+
"version": "6.2.2",
+
"resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-6.2.2.tgz",
+
"integrity": "sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA=="
+
},
+
"node_modules/@atproto/common/node_modules/process-warning": {
+
"version": "3.0.0",
+
"resolved": "https://registry.npmjs.org/process-warning/-/process-warning-3.0.0.tgz",
+
"integrity": "sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ=="
+
},
+
"node_modules/@atproto/common/node_modules/sonic-boom": {
+
"version": "3.8.1",
+
"resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-3.8.1.tgz",
+
"integrity": "sha512-y4Z8LCDBuum+PBP3lSV7RHrXscqksve/bi0as7mhwVnBW+/wUqKT/2Kb7um8yqcFy0duYbbPxzt89Zy2nOCaxg==",
+
"dependencies": {
+
"atomic-sleep": "^1.0.0"
+
}
+
},
+
"node_modules/@atproto/common/node_modules/thread-stream": {
+
"version": "2.7.0",
+
"resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-2.7.0.tgz",
+
"integrity": "sha512-qQiRWsU/wvNolI6tbbCKd9iKaTnCXsTwVxhhKM6nctPdujTyztjlbUkUTUymidWcMnZ5pWR0ej4a0tjsW021vw==",
+
"dependencies": {
+
"real-require": "^0.2.0"
+
}
+
},
+
"node_modules/@atproto/crypto": {
+
"version": "0.4.4",
+
"resolved": "https://registry.npmjs.org/@atproto/crypto/-/crypto-0.4.4.tgz",
+
"integrity": "sha512-Yq9+crJ7WQl7sxStVpHgie5Z51R05etaK9DLWYG/7bR5T4bhdcIgF6IfklLShtZwLYdVVj+K15s0BqW9a8PSDA==",
+
"license": "MIT",
+
"dependencies": {
+
"@noble/curves": "^1.7.0",
+
"@noble/hashes": "^1.6.1",
+
"uint8arrays": "3.0.0"
+
},
+
"engines": {
+
"node": ">=18.7.0"
+
}
+
},
+
"node_modules/@atproto/did": {
+
"version": "0.1.5",
+
"resolved": "https://registry.npmjs.org/@atproto/did/-/did-0.1.5.tgz",
+
"integrity": "sha512-8+1D08QdGE5TF0bB0vV8HLVrVZJeLNITpRTUVEoABNMRaUS7CoYSVb0+JNQDeJIVmqMjOL8dOjvCUDkp3gEaGQ==",
+
"license": "MIT",
+
"dependencies": {
+
"zod": "^3.23.8"
+
}
+
},
+
"node_modules/@atproto/identity": {
+
"version": "0.4.8",
+
"resolved": "https://registry.npmjs.org/@atproto/identity/-/identity-0.4.8.tgz",
+
"integrity": "sha512-Z0sLnJ87SeNdAifT+rqpgE1Rc3layMMW25gfWNo4u40RGuRODbdfAZlTwBSU2r+Vk45hU+iE+xeQspfednCEnA==",
+
"license": "MIT",
+
"dependencies": {
+
"@atproto/common-web": "^0.4.2",
+
"@atproto/crypto": "^0.4.4"
+
},
+
"engines": {
+
"node": ">=18.7.0"
+
}
+
},
+
"node_modules/@atproto/jwk": {
+
"version": "0.4.0",
+
"resolved": "https://registry.npmjs.org/@atproto/jwk/-/jwk-0.4.0.tgz",
+
"integrity": "sha512-tvp4iZrzqEzKCeTOKz50/o6WdsZzOuWmWjF6On5QAp04fLwLpsFu2Hixgx/lA1KBO0O4sns7YSGcAqSSX6Rdog==",
+
"license": "MIT",
+
"dependencies": {
+
"multiformats": "^9.9.0",
+
"zod": "^3.23.8"
+
}
+
},
+
"node_modules/@atproto/jwk-jose": {
+
"version": "0.1.9",
+
"resolved": "https://registry.npmjs.org/@atproto/jwk-jose/-/jwk-jose-0.1.9.tgz",
+
"integrity": "sha512-HT9GcUe6htDxI5OSYXWdeS6QZ9lpuDDvJk508ppi8a48E/1f8eumoM0QhgbFRF9IKAnnFrtnZDOAvljQzFKwwQ==",
+
"license": "MIT",
+
"dependencies": {
+
"@atproto/jwk": "0.4.0",
+
"jose": "^5.2.0"
+
}
+
},
+
"node_modules/@atproto/jwk-webcrypto": {
+
"version": "0.1.9",
+
"resolved": "https://registry.npmjs.org/@atproto/jwk-webcrypto/-/jwk-webcrypto-0.1.9.tgz",
+
"integrity": "sha512-ecciePHT0JEDZNAbMKSkdqoBYsjvhwuVno0jsS600SZmuvi2fAMhGraDZ5ZOO5M0hHHBiDbN7Ar/qcnIwyoxsA==",
+
"license": "MIT",
+
"dependencies": {
+
"@atproto/jwk": "0.4.0",
+
"@atproto/jwk-jose": "0.1.9",
+
"zod": "^3.23.8"
+
}
+
},
+
"node_modules/@atproto/lex-cli": {
+
"version": "0.4.1",
+
"resolved": "https://registry.npmjs.org/@atproto/lex-cli/-/lex-cli-0.4.1.tgz",
+
"integrity": "sha512-QP9mE8MYzXR2ydhCBb/mtGqKZjqpffqcpZCr7JM4mFOZPvXV8k7OqVP1h+T94JB/tGcGPhB750S6tqUH9VRLVg==",
+
"dev": true,
+
"dependencies": {
+
"@atproto/lexicon": "^0.4.0",
+
"@atproto/syntax": "^0.3.0",
+
"chalk": "^4.1.2",
+
"commander": "^9.4.0",
+
"prettier": "^3.2.5",
+
"ts-morph": "^16.0.0",
+
"yesno": "^0.4.0",
+
"zod": "^3.23.8"
+
},
+
"bin": {
+
"lex": "dist/index.js"
+
}
+
},
+
"node_modules/@atproto/lex-cli/node_modules/@atproto/syntax": {
+
"version": "0.3.4",
+
"resolved": "https://registry.npmjs.org/@atproto/syntax/-/syntax-0.3.4.tgz",
+
"integrity": "sha512-8CNmi5DipOLaVeSMPggMe7FCksVag0aO6XZy9WflbduTKM4dFZVCs4686UeMLfGRXX+X966XgwECHoLYrovMMg==",
+
"dev": true,
+
"license": "MIT"
+
},
+
"node_modules/@atproto/lexicon": {
+
"version": "0.4.11",
+
"resolved": "https://registry.npmjs.org/@atproto/lexicon/-/lexicon-0.4.11.tgz",
+
"integrity": "sha512-btefdnvNz2Ao2I+qbmj0F06HC8IlrM/IBz6qOBS50r0S6uDf5tOO+Mv2tSVdimFkdzyDdLtBI1sV36ONxz2cOw==",
+
"license": "MIT",
+
"dependencies": {
+
"@atproto/common-web": "^0.4.2",
+
"@atproto/syntax": "^0.4.0",
+
"iso-datestring-validator": "^2.2.2",
+
"multiformats": "^9.9.0",
+
"zod": "^3.23.8"
+
}
+
},
+
"node_modules/@atproto/oauth-client": {
+
"version": "0.4.2",
+
"resolved": "https://registry.npmjs.org/@atproto/oauth-client/-/oauth-client-0.4.2.tgz",
+
"integrity": "sha512-wHRYcrh+iKQvMramYqE6PHs5Y/L2LYFzrEnyUMf83CjD3GYFwbSN5pwot6EFXONxRwuRjxpXsCSlFzZwx9YFvw==",
+
"license": "MIT",
+
"dependencies": {
+
"@atproto-labs/did-resolver": "0.2.0",
+
"@atproto-labs/fetch": "0.2.3",
+
"@atproto-labs/handle-resolver": "0.3.0",
+
"@atproto-labs/identity-resolver": "0.2.0",
+
"@atproto-labs/simple-store": "0.2.0",
+
"@atproto-labs/simple-store-memory": "0.1.3",
+
"@atproto/did": "0.1.5",
+
"@atproto/jwk": "0.4.0",
+
"@atproto/oauth-types": "0.3.1",
+
"@atproto/xrpc": "0.7.0",
+
"multiformats": "^9.9.0",
+
"zod": "^3.23.8"
+
}
+
},
+
"node_modules/@atproto/oauth-client-node": {
+
"version": "0.3.1",
+
"resolved": "https://registry.npmjs.org/@atproto/oauth-client-node/-/oauth-client-node-0.3.1.tgz",
+
"integrity": "sha512-k37YC7Ke4+btX05oAqHqkkM8r2Ya/tssWANx7/GMwN3PXPP5PK1C/pkxJrGsN/hpjn3I4W9lVTOlC7nigEX7sw==",
+
"license": "MIT",
+
"dependencies": {
+
"@atproto-labs/did-resolver": "0.2.0",
+
"@atproto-labs/handle-resolver-node": "0.1.18",
+
"@atproto-labs/simple-store": "0.2.0",
+
"@atproto/did": "0.1.5",
+
"@atproto/jwk": "0.4.0",
+
"@atproto/jwk-jose": "0.1.9",
+
"@atproto/jwk-webcrypto": "0.1.9",
+
"@atproto/oauth-client": "0.4.2",
+
"@atproto/oauth-types": "0.3.1"
+
},
+
"engines": {
+
"node": ">=18.7.0"
+
}
+
},
+
"node_modules/@atproto/oauth-types": {
+
"version": "0.3.1",
+
"resolved": "https://registry.npmjs.org/@atproto/oauth-types/-/oauth-types-0.3.1.tgz",
+
"integrity": "sha512-l8ahtm74lmBOs5boi5q7mqzF2D37+cIYqVmbCrpexNeJfg2BXu0sBxREt0ADxP25Td9pX+u6FnefCOQtI/YAZw==",
+
"license": "MIT",
+
"dependencies": {
+
"@atproto/jwk": "0.4.0",
+
"zod": "^3.23.8"
+
}
+
},
+
"node_modules/@atproto/repo": {
+
"version": "0.8.2",
+
"resolved": "https://registry.npmjs.org/@atproto/repo/-/repo-0.8.2.tgz",
+
"integrity": "sha512-lP0g5Uw3TUC2Tc7te8YKCpRoIhBYI+Uvn11fupGEaMcMjgLdYtB0Kc0AiqWXF42KqlBG9dAEoJITi2GRzDNHUg==",
+
"license": "MIT",
+
"dependencies": {
+
"@atproto/common": "^0.4.11",
+
"@atproto/common-web": "^0.4.2",
+
"@atproto/crypto": "^0.4.4",
+
"@atproto/lexicon": "^0.4.11",
+
"@ipld/dag-cbor": "^7.0.0",
+
"multiformats": "^9.9.0",
+
"uint8arrays": "3.0.0",
+
"varint": "^6.0.0",
+
"zod": "^3.23.8"
+
},
+
"engines": {
+
"node": ">=18.7.0"
+
}
+
},
+
"node_modules/@atproto/sync": {
+
"version": "0.1.26",
+
"resolved": "https://registry.npmjs.org/@atproto/sync/-/sync-0.1.26.tgz",
+
"integrity": "sha512-bpUIajtPrE3RgFW8mIfrI4EM/LJ4JjQhI5fsqc78zCHZawuflpllf1aH70roDWWiskMWoiLWnVRxdYXdeEgbXA==",
+
"license": "MIT",
+
"dependencies": {
+
"@atproto/common": "^0.4.11",
+
"@atproto/identity": "^0.4.8",
+
"@atproto/lexicon": "^0.4.11",
+
"@atproto/repo": "^0.8.2",
+
"@atproto/syntax": "^0.4.0",
+
"@atproto/xrpc-server": "^0.8.0",
+
"multiformats": "^9.9.0",
+
"p-queue": "^6.6.2",
+
"ws": "^8.12.0"
+
},
+
"engines": {
+
"node": ">=18.7.0"
+
}
+
},
+
"node_modules/@atproto/syntax": {
+
"version": "0.4.0",
+
"resolved": "https://registry.npmjs.org/@atproto/syntax/-/syntax-0.4.0.tgz",
+
"integrity": "sha512-b9y5ceHS8YKOfP3mdKmwAx5yVj9294UN7FG2XzP6V5aKUdFazEYRnR9m5n5ZQFKa3GNvz7de9guZCJ/sUTcOAA==",
+
"license": "MIT"
+
},
+
"node_modules/@atproto/xrpc": {
+
"version": "0.7.0",
+
"resolved": "https://registry.npmjs.org/@atproto/xrpc/-/xrpc-0.7.0.tgz",
+
"integrity": "sha512-SfhP9dGx2qclaScFDb58Jnrmim5nk4geZXCqg6sB0I/KZhZEkr9iIx1hLCp+sxkIfEsmEJjeWO4B0rjUIJW5cw==",
+
"license": "MIT",
+
"dependencies": {
+
"@atproto/lexicon": "^0.4.11",
+
"zod": "^3.23.8"
+
}
+
},
+
"node_modules/@atproto/xrpc-server": {
+
"version": "0.8.0",
+
"resolved": "https://registry.npmjs.org/@atproto/xrpc-server/-/xrpc-server-0.8.0.tgz",
+
"integrity": "sha512-jDAEVHVhM4IvC0y491gXBuD4b1D9/XrM3HaEronRneAdNZ0qE0nsiJNqiHfQ6r4BvFdHnABM9KyHV9EQTvmxfg==",
+
"license": "MIT",
+
"dependencies": {
+
"@atproto/common": "^0.4.11",
+
"@atproto/crypto": "^0.4.4",
+
"@atproto/lexicon": "^0.4.11",
+
"@atproto/xrpc": "^0.7.0",
+
"cbor-x": "^1.5.1",
+
"express": "^4.17.2",
+
"http-errors": "^2.0.0",
+
"mime-types": "^2.1.35",
+
"rate-limiter-flexible": "^2.4.1",
+
"uint8arrays": "3.0.0",
+
"ws": "^8.12.0",
+
"zod": "^3.23.8"
+
},
+
"engines": {
+
"node": ">=18.7.0"
+
}
+
},
+
"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",
+
"integrity": "sha512-P7swiOAdF7aSi0H+tHtHtr6zrpF3aAq/W9FXx5HektRvLTM2O89xCyXF3pk7pLc7QpaY7AoaE8UowVf9QBdh3w==",
+
"cpu": [
+
"arm64"
+
],
+
"optional": true,
+
"os": [
+
"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",
+
"integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==",
+
"dev": true,
+
"dependencies": {
+
"@jridgewell/trace-mapping": "0.3.9"
+
},
+
"engines": {
+
"node": ">=12"
+
}
+
},
+
"node_modules/@esbuild/aix-ppc64": {
+
"version": "0.23.1",
+
"resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.1.tgz",
+
"integrity": "sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==",
+
"cpu": [
+
"ppc64"
+
],
+
"dev": true,
+
"optional": true,
+
"os": [
+
"aix"
+
],
+
"engines": {
+
"node": ">=18"
+
}
+
},
+
"node_modules/@esbuild/android-arm": {
+
"version": "0.23.1",
+
"resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.1.tgz",
+
"integrity": "sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==",
+
"cpu": [
+
"arm"
+
],
+
"dev": true,
+
"optional": true,
+
"os": [
+
"android"
+
],
+
"engines": {
+
"node": ">=18"
+
}
+
},
+
"node_modules/@esbuild/android-arm64": {
+
"version": "0.23.1",
+
"resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.1.tgz",
+
"integrity": "sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==",
+
"cpu": [
+
"arm64"
+
],
+
"dev": true,
+
"optional": true,
+
"os": [
+
"android"
+
],
+
"engines": {
+
"node": ">=18"
+
}
+
},
+
"node_modules/@esbuild/android-x64": {
+
"version": "0.23.1",
+
"resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.1.tgz",
+
"integrity": "sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==",
+
"cpu": [
+
"x64"
+
],
+
"dev": true,
+
"optional": true,
+
"os": [
+
"android"
+
],
+
"engines": {
+
"node": ">=18"
+
}
+
},
+
"node_modules/@esbuild/darwin-arm64": {
+
"version": "0.23.1",
+
"resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.1.tgz",
+
"integrity": "sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==",
+
"cpu": [
+
"arm64"
+
],
+
"dev": true,
+
"optional": true,
+
"os": [
+
"darwin"
+
],
+
"engines": {
+
"node": ">=18"
+
}
+
},
+
"node_modules/@esbuild/darwin-x64": {
+
"version": "0.23.1",
+
"resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.1.tgz",
+
"integrity": "sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==",
+
"cpu": [
+
"x64"
+
],
+
"dev": true,
+
"optional": true,
+
"os": [
+
"darwin"
+
],
+
"engines": {
+
"node": ">=18"
+
}
+
},
+
"node_modules/@esbuild/freebsd-arm64": {
+
"version": "0.23.1",
+
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.1.tgz",
+
"integrity": "sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==",
+
"cpu": [
+
"arm64"
+
],
+
"dev": true,
+
"optional": true,
+
"os": [
+
"freebsd"
+
],
+
"engines": {
+
"node": ">=18"
+
}
+
},
+
"node_modules/@esbuild/freebsd-x64": {
+
"version": "0.23.1",
+
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.1.tgz",
+
"integrity": "sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==",
+
"cpu": [
+
"x64"
+
],
+
"dev": true,
+
"optional": true,
+
"os": [
+
"freebsd"
+
],
+
"engines": {
+
"node": ">=18"
+
}
+
},
+
"node_modules/@esbuild/linux-arm": {
+
"version": "0.23.1",
+
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.1.tgz",
+
"integrity": "sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==",
+
"cpu": [
+
"arm"
+
],
+
"dev": true,
+
"optional": true,
+
"os": [
+
"linux"
+
],
+
"engines": {
+
"node": ">=18"
+
}
+
},
+
"node_modules/@esbuild/linux-arm64": {
+
"version": "0.23.1",
+
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.1.tgz",
+
"integrity": "sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==",
+
"cpu": [
+
"arm64"
+
],
+
"dev": true,
+
"optional": true,
+
"os": [
+
"linux"
+
],
+
"engines": {
+
"node": ">=18"
+
}
+
},
+
"node_modules/@esbuild/linux-ia32": {
+
"version": "0.23.1",
+
"resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.1.tgz",
+
"integrity": "sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==",
+
"cpu": [
+
"ia32"
+
],
+
"dev": true,
+
"optional": true,
+
"os": [
+
"linux"
+
],
+
"engines": {
+
"node": ">=18"
+
}
+
},
+
"node_modules/@esbuild/linux-loong64": {
+
"version": "0.23.1",
+
"resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.1.tgz",
+
"integrity": "sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==",
+
"cpu": [
+
"loong64"
+
],
+
"dev": true,
+
"optional": true,
+
"os": [
+
"linux"
+
],
+
"engines": {
+
"node": ">=18"
+
}
+
},
+
"node_modules/@esbuild/linux-mips64el": {
+
"version": "0.23.1",
+
"resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.1.tgz",
+
"integrity": "sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==",
+
"cpu": [
+
"mips64el"
+
],
+
"dev": true,
+
"optional": true,
+
"os": [
+
"linux"
+
],
+
"engines": {
+
"node": ">=18"
+
}
+
},
+
"node_modules/@esbuild/linux-ppc64": {
+
"version": "0.23.1",
+
"resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.1.tgz",
+
"integrity": "sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==",
+
"cpu": [
+
"ppc64"
+
],
+
"dev": true,
+
"optional": true,
+
"os": [
+
"linux"
+
],
+
"engines": {
+
"node": ">=18"
+
}
+
},
+
"node_modules/@esbuild/linux-riscv64": {
+
"version": "0.23.1",
+
"resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.1.tgz",
+
"integrity": "sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==",
+
"cpu": [
+
"riscv64"
+
],
+
"dev": true,
+
"optional": true,
+
"os": [
+
"linux"
+
],
+
"engines": {
+
"node": ">=18"
+
}
+
},
+
"node_modules/@esbuild/linux-s390x": {
+
"version": "0.23.1",
+
"resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.1.tgz",
+
"integrity": "sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==",
+
"cpu": [
+
"s390x"
+
],
+
"dev": true,
+
"optional": true,
+
"os": [
+
"linux"
+
],
+
"engines": {
+
"node": ">=18"
+
}
+
},
+
"node_modules/@esbuild/linux-x64": {
+
"version": "0.23.1",
+
"resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.1.tgz",
+
"integrity": "sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==",
+
"cpu": [
+
"x64"
+
],
+
"dev": true,
+
"optional": true,
+
"os": [
+
"linux"
+
],
+
"engines": {
+
"node": ">=18"
+
}
+
},
+
"node_modules/@esbuild/netbsd-x64": {
+
"version": "0.23.1",
+
"resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.1.tgz",
+
"integrity": "sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==",
+
"cpu": [
+
"x64"
+
],
+
"dev": true,
+
"optional": true,
+
"os": [
+
"netbsd"
+
],
+
"engines": {
+
"node": ">=18"
+
}
+
},
+
"node_modules/@esbuild/openbsd-arm64": {
+
"version": "0.23.1",
+
"resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.1.tgz",
+
"integrity": "sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==",
+
"cpu": [
+
"arm64"
+
],
+
"dev": true,
+
"optional": true,
+
"os": [
+
"openbsd"
+
],
+
"engines": {
+
"node": ">=18"
+
}
+
},
+
"node_modules/@esbuild/openbsd-x64": {
+
"version": "0.23.1",
+
"resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.1.tgz",
+
"integrity": "sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==",
+
"cpu": [
+
"x64"
+
],
+
"dev": true,
+
"optional": true,
+
"os": [
+
"openbsd"
+
],
+
"engines": {
+
"node": ">=18"
+
}
+
},
+
"node_modules/@esbuild/sunos-x64": {
+
"version": "0.23.1",
+
"resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.1.tgz",
+
"integrity": "sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==",
+
"cpu": [
+
"x64"
+
],
+
"dev": true,
+
"optional": true,
+
"os": [
+
"sunos"
+
],
+
"engines": {
+
"node": ">=18"
+
}
+
},
+
"node_modules/@esbuild/win32-arm64": {
+
"version": "0.23.1",
+
"resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.1.tgz",
+
"integrity": "sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==",
+
"cpu": [
+
"arm64"
+
],
+
"dev": true,
+
"optional": true,
+
"os": [
+
"win32"
+
],
+
"engines": {
+
"node": ">=18"
+
}
+
},
+
"node_modules/@esbuild/win32-ia32": {
+
"version": "0.23.1",
+
"resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.1.tgz",
+
"integrity": "sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==",
+
"cpu": [
+
"ia32"
+
],
+
"dev": true,
+
"optional": true,
+
"os": [
+
"win32"
+
],
+
"engines": {
+
"node": ">=18"
+
}
+
},
+
"node_modules/@esbuild/win32-x64": {
+
"version": "0.23.1",
+
"resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.1.tgz",
+
"integrity": "sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==",
+
"cpu": [
+
"x64"
+
],
+
"dev": true,
+
"optional": true,
+
"os": [
+
"win32"
+
],
+
"engines": {
+
"node": ">=18"
+
}
+
},
+
"node_modules/@ipld/dag-cbor": {
+
"version": "7.0.3",
+
"resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-7.0.3.tgz",
+
"integrity": "sha512-1VVh2huHsuohdXC1bGJNE8WR72slZ9XE2T3wbBBq31dm7ZBatmKLLxrB+XAqafxfRFjv08RZmj/W/ZqaM13AuA==",
+
"dependencies": {
+
"cborg": "^1.6.0",
+
"multiformats": "^9.5.4"
+
}
+
},
+
"node_modules/@isaacs/cliui": {
+
"version": "8.0.2",
+
"resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
+
"integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
+
"dev": true,
+
"dependencies": {
+
"string-width": "^5.1.2",
+
"string-width-cjs": "npm:string-width@^4.2.0",
+
"strip-ansi": "^7.0.1",
+
"strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
+
"wrap-ansi": "^8.1.0",
+
"wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
+
},
+
"engines": {
+
"node": ">=12"
+
}
+
},
+
"node_modules/@jridgewell/gen-mapping": {
+
"version": "0.3.5",
+
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz",
+
"integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==",
+
"dev": true,
+
"dependencies": {
+
"@jridgewell/set-array": "^1.2.1",
+
"@jridgewell/sourcemap-codec": "^1.4.10",
+
"@jridgewell/trace-mapping": "^0.3.24"
+
},
+
"engines": {
+
"node": ">=6.0.0"
+
}
+
},
+
"node_modules/@jridgewell/gen-mapping/node_modules/@jridgewell/trace-mapping": {
+
"version": "0.3.25",
+
"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
+
"integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
+
"dev": true,
+
"dependencies": {
+
"@jridgewell/resolve-uri": "^3.1.0",
+
"@jridgewell/sourcemap-codec": "^1.4.14"
+
}
+
},
+
"node_modules/@jridgewell/resolve-uri": {
+
"version": "3.1.2",
+
"resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+
"integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+
"dev": true,
+
"engines": {
+
"node": ">=6.0.0"
+
}
+
},
+
"node_modules/@jridgewell/set-array": {
+
"version": "1.2.1",
+
"resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
+
"integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
+
"dev": true,
+
"engines": {
+
"node": ">=6.0.0"
+
}
+
},
+
"node_modules/@jridgewell/sourcemap-codec": {
+
"version": "1.5.0",
+
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
+
"integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
+
"dev": true
+
},
+
"node_modules/@jridgewell/trace-mapping": {
+
"version": "0.3.9",
+
"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
+
"integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
+
"dev": true,
+
"dependencies": {
+
"@jridgewell/resolve-uri": "^3.0.3",
+
"@jridgewell/sourcemap-codec": "^1.4.10"
+
}
+
},
+
"node_modules/@noble/curves": {
+
"version": "1.9.2",
+
"resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.2.tgz",
+
"integrity": "sha512-HxngEd2XUcg9xi20JkwlLCtYwfoFw4JGkuZpT+WlsPD4gB/cxkvTD8fSsoAnphGZhFdZYKeQIPCuFlWPm1uE0g==",
+
"license": "MIT",
+
"dependencies": {
+
"@noble/hashes": "1.8.0"
+
},
+
"engines": {
+
"node": "^14.21.3 || >=16"
+
},
+
"funding": {
+
"url": "https://paulmillr.com/funding/"
+
}
+
},
+
"node_modules/@noble/hashes": {
+
"version": "1.8.0",
+
"resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz",
+
"integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==",
+
"license": "MIT",
+
"engines": {
+
"node": "^14.21.3 || >=16"
+
},
+
"funding": {
+
"url": "https://paulmillr.com/funding/"
+
}
+
},
+
"node_modules/@nodelib/fs.scandir": {
+
"version": "2.1.5",
+
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+
"integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+
"dev": true,
+
"dependencies": {
+
"@nodelib/fs.stat": "2.0.5",
+
"run-parallel": "^1.1.9"
+
},
+
"engines": {
+
"node": ">= 8"
+
}
+
},
+
"node_modules/@nodelib/fs.stat": {
+
"version": "2.0.5",
+
"resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+
"integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+
"dev": true,
+
"engines": {
+
"node": ">= 8"
+
}
+
},
+
"node_modules/@nodelib/fs.walk": {
+
"version": "1.2.8",
+
"resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+
"integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+
"dev": true,
+
"dependencies": {
+
"@nodelib/fs.scandir": "2.1.5",
+
"fastq": "^1.6.0"
+
},
+
"engines": {
+
"node": ">= 8"
+
}
+
},
+
"node_modules/@pkgjs/parseargs": {
+
"version": "0.11.0",
+
"resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
+
"integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
+
"dev": true,
+
"optional": true,
+
"engines": {
+
"node": ">=14"
+
}
+
},
+
"node_modules/@preact/signals-core": {
+
"version": "1.8.0",
+
"resolved": "https://registry.npmjs.org/@preact/signals-core/-/signals-core-1.8.0.tgz",
+
"integrity": "sha512-OBvUsRZqNmjzCZXWLxkZfhcgT+Fk8DDcT/8vD6a1xhDemodyy87UJRJfASMuSD8FaAIeGgGm85ydXhm7lr4fyA==",
+
"optional": true,
+
"funding": {
+
"type": "opencollective",
+
"url": "https://opencollective.com/preact"
+
}
+
},
+
"node_modules/@rollup/rollup-android-arm-eabi": {
+
"version": "4.21.2",
+
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.21.2.tgz",
+
"integrity": "sha512-fSuPrt0ZO8uXeS+xP3b+yYTCBUd05MoSp2N/MFOgjhhUhMmchXlpTQrTpI8T+YAwAQuK7MafsCOxW7VrPMrJcg==",
+
"cpu": [
+
"arm"
+
],
+
"dev": true,
+
"optional": true,
+
"os": [
+
"android"
+
]
+
},
+
"node_modules/@rollup/rollup-android-arm64": {
+
"version": "4.21.2",
+
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.21.2.tgz",
+
"integrity": "sha512-xGU5ZQmPlsjQS6tzTTGwMsnKUtu0WVbl0hYpTPauvbRAnmIvpInhJtgjj3mcuJpEiuUw4v1s4BimkdfDWlh7gA==",
+
"cpu": [
+
"arm64"
+
],
+
"dev": true,
+
"optional": true,
+
"os": [
+
"android"
+
]
+
},
+
"node_modules/@rollup/rollup-darwin-arm64": {
+
"version": "4.21.2",
+
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.21.2.tgz",
+
"integrity": "sha512-99AhQ3/ZMxU7jw34Sq8brzXqWH/bMnf7ZVhvLk9QU2cOepbQSVTns6qoErJmSiAvU3InRqC2RRZ5ovh1KN0d0Q==",
+
"cpu": [
+
"arm64"
+
],
+
"dev": true,
+
"optional": true,
+
"os": [
+
"darwin"
+
]
+
},
+
"node_modules/@rollup/rollup-darwin-x64": {
+
"version": "4.21.2",
+
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.21.2.tgz",
+
"integrity": "sha512-ZbRaUvw2iN/y37x6dY50D8m2BnDbBjlnMPotDi/qITMJ4sIxNY33HArjikDyakhSv0+ybdUxhWxE6kTI4oX26w==",
+
"cpu": [
+
"x64"
+
],
+
"dev": true,
+
"optional": true,
+
"os": [
+
"darwin"
+
]
+
},
+
"node_modules/@rollup/rollup-linux-arm-gnueabihf": {
+
"version": "4.21.2",
+
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.21.2.tgz",
+
"integrity": "sha512-ztRJJMiE8nnU1YFcdbd9BcH6bGWG1z+jP+IPW2oDUAPxPjo9dverIOyXz76m6IPA6udEL12reYeLojzW2cYL7w==",
+
"cpu": [
+
"arm"
+
],
+
"dev": true,
+
"optional": true,
+
"os": [
+
"linux"
+
]
+
},
+
"node_modules/@rollup/rollup-linux-arm-musleabihf": {
+
"version": "4.21.2",
+
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.21.2.tgz",
+
"integrity": "sha512-flOcGHDZajGKYpLV0JNc0VFH361M7rnV1ee+NTeC/BQQ1/0pllYcFmxpagltANYt8FYf9+kL6RSk80Ziwyhr7w==",
+
"cpu": [
+
"arm"
+
],
+
"dev": true,
+
"optional": true,
+
"os": [
+
"linux"
+
]
+
},
+
"node_modules/@rollup/rollup-linux-arm64-gnu": {
+
"version": "4.21.2",
+
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.21.2.tgz",
+
"integrity": "sha512-69CF19Kp3TdMopyteO/LJbWufOzqqXzkrv4L2sP8kfMaAQ6iwky7NoXTp7bD6/irKgknDKM0P9E/1l5XxVQAhw==",
+
"cpu": [
+
"arm64"
+
],
+
"dev": true,
+
"optional": true,
+
"os": [
+
"linux"
+
]
+
},
+
"node_modules/@rollup/rollup-linux-arm64-musl": {
+
"version": "4.21.2",
+
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.21.2.tgz",
+
"integrity": "sha512-48pD/fJkTiHAZTnZwR0VzHrao70/4MlzJrq0ZsILjLW/Ab/1XlVUStYyGt7tdyIiVSlGZbnliqmult/QGA2O2w==",
+
"cpu": [
+
"arm64"
+
],
+
"dev": true,
+
"optional": true,
+
"os": [
+
"linux"
+
]
+
},
+
"node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
+
"version": "4.21.2",
+
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.21.2.tgz",
+
"integrity": "sha512-cZdyuInj0ofc7mAQpKcPR2a2iu4YM4FQfuUzCVA2u4HI95lCwzjoPtdWjdpDKyHxI0UO82bLDoOaLfpZ/wviyQ==",
+
"cpu": [
+
"ppc64"
+
],
+
"dev": true,
+
"optional": true,
+
"os": [
+
"linux"
+
]
+
},
+
"node_modules/@rollup/rollup-linux-riscv64-gnu": {
+
"version": "4.21.2",
+
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.21.2.tgz",
+
"integrity": "sha512-RL56JMT6NwQ0lXIQmMIWr1SW28z4E4pOhRRNqwWZeXpRlykRIlEpSWdsgNWJbYBEWD84eocjSGDu/XxbYeCmwg==",
+
"cpu": [
+
"riscv64"
+
],
+
"dev": true,
+
"optional": true,
+
"os": [
+
"linux"
+
]
+
},
+
"node_modules/@rollup/rollup-linux-s390x-gnu": {
+
"version": "4.21.2",
+
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.21.2.tgz",
+
"integrity": "sha512-PMxkrWS9z38bCr3rWvDFVGD6sFeZJw4iQlhrup7ReGmfn7Oukrr/zweLhYX6v2/8J6Cep9IEA/SmjXjCmSbrMQ==",
+
"cpu": [
+
"s390x"
+
],
+
"dev": true,
+
"optional": true,
+
"os": [
+
"linux"
+
]
+
},
+
"node_modules/@rollup/rollup-linux-x64-gnu": {
+
"version": "4.21.2",
+
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.21.2.tgz",
+
"integrity": "sha512-B90tYAUoLhU22olrafY3JQCFLnT3NglazdwkHyxNDYF/zAxJt5fJUB/yBoWFoIQ7SQj+KLe3iL4BhOMa9fzgpw==",
+
"cpu": [
+
"x64"
+
],
+
"dev": true,
+
"optional": true,
+
"os": [
+
"linux"
+
]
+
},
+
"node_modules/@rollup/rollup-linux-x64-musl": {
+
"version": "4.21.2",
+
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.21.2.tgz",
+
"integrity": "sha512-7twFizNXudESmC9oneLGIUmoHiiLppz/Xs5uJQ4ShvE6234K0VB1/aJYU3f/4g7PhssLGKBVCC37uRkkOi8wjg==",
+
"cpu": [
+
"x64"
+
],
+
"dev": true,
+
"optional": true,
+
"os": [
+
"linux"
+
]
+
},
+
"node_modules/@rollup/rollup-win32-arm64-msvc": {
+
"version": "4.21.2",
+
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.21.2.tgz",
+
"integrity": "sha512-9rRero0E7qTeYf6+rFh3AErTNU1VCQg2mn7CQcI44vNUWM9Ze7MSRS/9RFuSsox+vstRt97+x3sOhEey024FRQ==",
+
"cpu": [
+
"arm64"
+
],
+
"dev": true,
+
"optional": true,
+
"os": [
+
"win32"
+
]
+
},
+
"node_modules/@rollup/rollup-win32-ia32-msvc": {
+
"version": "4.21.2",
+
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.21.2.tgz",
+
"integrity": "sha512-5rA4vjlqgrpbFVVHX3qkrCo/fZTj1q0Xxpg+Z7yIo3J2AilW7t2+n6Q8Jrx+4MrYpAnjttTYF8rr7bP46BPzRw==",
+
"cpu": [
+
"ia32"
+
],
+
"dev": true,
+
"optional": true,
+
"os": [
+
"win32"
+
]
+
},
+
"node_modules/@rollup/rollup-win32-x64-msvc": {
+
"version": "4.21.2",
+
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.21.2.tgz",
+
"integrity": "sha512-6UUxd0+SKomjdzuAcp+HAmxw1FlGBnl1v2yEPSabtx4lBfdXHDVsW7+lQkgz9cNFJGY3AWR7+V8P5BqkD9L9nA==",
+
"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",
+
"integrity": "sha512-RMSSvSfs9kb0VzkvQ2NWobwnj7TxCA9vI/IjR9bDHqgAyVbu2T0DN4wiKVqomyDWqO7dPr/tErSfq7urQ1Q37g==",
+
"dev": true,
+
"dependencies": {
+
"fast-glob": "^3.2.11",
+
"minimatch": "^5.1.0",
+
"mkdirp": "^1.0.4",
+
"path-browserify": "^1.0.1"
+
}
+
},
+
"node_modules/@ts-morph/common/node_modules/minimatch": {
+
"version": "5.1.6",
+
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
+
"integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
+
"dev": true,
+
"dependencies": {
+
"brace-expansion": "^2.0.1"
+
},
+
"engines": {
+
"node": ">=10"
+
}
+
},
+
"node_modules/@tsconfig/node10": {
+
"version": "1.0.11",
+
"resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz",
+
"integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==",
+
"dev": true
+
},
+
"node_modules/@tsconfig/node12": {
+
"version": "1.0.11",
+
"resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz",
+
"integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==",
+
"dev": true
+
},
+
"node_modules/@tsconfig/node14": {
+
"version": "1.0.3",
+
"resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz",
+
"integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==",
+
"dev": true
+
},
+
"node_modules/@tsconfig/node16": {
+
"version": "1.0.4",
+
"resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz",
+
"integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==",
+
"dev": true
+
},
+
"node_modules/@types/better-sqlite3": {
+
"version": "7.6.11",
+
"resolved": "https://registry.npmjs.org/@types/better-sqlite3/-/better-sqlite3-7.6.11.tgz",
+
"integrity": "sha512-i8KcD3PgGtGBLl3+mMYA8PdKkButvPyARxA7IQAd6qeslht13qxb1zzO8dRCtE7U3IoJS782zDBAeoKiM695kg==",
+
"dev": true,
+
"dependencies": {
+
"@types/node": "*"
+
}
+
},
+
"node_modules/@types/body-parser": {
+
"version": "1.19.5",
+
"resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz",
+
"integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==",
+
"dev": true,
+
"dependencies": {
+
"@types/connect": "*",
+
"@types/node": "*"
+
}
+
},
+
"node_modules/@types/connect": {
+
"version": "3.4.38",
+
"resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz",
+
"integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==",
+
"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",
+
"integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==",
+
"dev": true
+
},
+
"node_modules/@types/express": {
+
"version": "4.17.21",
+
"resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz",
+
"integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==",
+
"dev": true,
+
"dependencies": {
+
"@types/body-parser": "*",
+
"@types/express-serve-static-core": "^4.17.33",
+
"@types/qs": "*",
+
"@types/serve-static": "*"
+
}
+
},
+
"node_modules/@types/express-serve-static-core": {
+
"version": "4.19.5",
+
"resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz",
+
"integrity": "sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==",
+
"dev": true,
+
"dependencies": {
+
"@types/node": "*",
+
"@types/qs": "*",
+
"@types/range-parser": "*",
+
"@types/send": "*"
+
}
+
},
+
"node_modules/@types/http-errors": {
+
"version": "2.0.4",
+
"resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz",
+
"integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==",
+
"dev": true
+
},
+
"node_modules/@types/mime": {
+
"version": "1.3.5",
+
"resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz",
+
"integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==",
+
"dev": true
+
},
+
"node_modules/@types/node": {
+
"version": "22.5.4",
+
"resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.4.tgz",
+
"integrity": "sha512-FDuKUJQm/ju9fT/SeX/6+gBzoPzlVCzfzmGkwKvRHQVxi4BntVbyIwf6a4Xn62mrvndLiml6z/UBXIdEVjQLXg==",
+
"dev": true,
+
"dependencies": {
+
"undici-types": "~6.19.2"
+
}
+
},
+
"node_modules/@types/qs": {
+
"version": "6.9.15",
+
"resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz",
+
"integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==",
+
"dev": true
+
},
+
"node_modules/@types/range-parser": {
+
"version": "1.2.7",
+
"resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz",
+
"integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==",
+
"dev": true
+
},
+
"node_modules/@types/send": {
+
"version": "0.17.4",
+
"resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz",
+
"integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==",
+
"dev": true,
+
"dependencies": {
+
"@types/mime": "^1",
+
"@types/node": "*"
+
}
+
},
+
"node_modules/@types/serve-static": {
+
"version": "1.15.7",
+
"resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz",
+
"integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==",
+
"dev": true,
+
"dependencies": {
+
"@types/http-errors": "*",
+
"@types/node": "*",
+
"@types/send": "*"
+
}
+
},
+
"node_modules/@webreflection/signal": {
+
"version": "2.1.2",
+
"resolved": "https://registry.npmjs.org/@webreflection/signal/-/signal-2.1.2.tgz",
+
"integrity": "sha512-0dW0fstQQkIt588JwhDiPS4xgeeQcQnBHn6MVInrBzmFlnLtzoSJL9G7JqdAlZVVi19tfb8R1QisZIT31cgiug==",
+
"optional": true
+
},
+
"node_modules/@webreflection/uparser": {
+
"version": "0.3.3",
+
"resolved": "https://registry.npmjs.org/@webreflection/uparser/-/uparser-0.3.3.tgz",
+
"integrity": "sha512-XxGfo8jr2eVuvP5lrmwjgMAM7QjtZ0ngFD+dd9Fd3GStcEb4QhLlTiqZYF5O3l5k4sU/V6ZiPrVCzCWXWFEmCw==",
+
"dependencies": {
+
"domconstants": "^1.1.6"
+
}
+
},
+
"node_modules/abort-controller": {
+
"version": "3.0.0",
+
"resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
+
"integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==",
+
"dependencies": {
+
"event-target-shim": "^5.0.0"
+
},
+
"engines": {
+
"node": ">=6.5"
+
}
+
},
+
"node_modules/accepts": {
+
"version": "1.3.8",
+
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
+
"integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
+
"dependencies": {
+
"mime-types": "~2.1.34",
+
"negotiator": "0.6.3"
+
},
+
"engines": {
+
"node": ">= 0.6"
+
}
+
},
+
"node_modules/acorn": {
+
"version": "8.12.1",
+
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz",
+
"integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==",
+
"dev": true,
+
"bin": {
+
"acorn": "bin/acorn"
+
},
+
"engines": {
+
"node": ">=0.4.0"
+
}
+
},
+
"node_modules/acorn-walk": {
+
"version": "8.3.3",
+
"resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.3.tgz",
+
"integrity": "sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==",
+
"dev": true,
+
"dependencies": {
+
"acorn": "^8.11.0"
+
},
+
"engines": {
+
"node": ">=0.4.0"
+
}
+
},
+
"node_modules/ansi-regex": {
+
"version": "6.0.1",
+
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
+
"integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+
"dev": true,
+
"engines": {
+
"node": ">=12"
+
},
+
"funding": {
+
"url": "https://github.com/chalk/ansi-regex?sponsor=1"
+
}
+
},
+
"node_modules/ansi-styles": {
+
"version": "4.3.0",
+
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+
"dev": true,
+
"dependencies": {
+
"color-convert": "^2.0.1"
+
},
+
"engines": {
+
"node": ">=8"
+
},
+
"funding": {
+
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
+
}
+
},
+
"node_modules/any-promise": {
+
"version": "1.3.0",
+
"resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
+
"integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==",
+
"dev": true
+
},
+
"node_modules/anymatch": {
+
"version": "3.1.3",
+
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+
"integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+
"dev": true,
+
"dependencies": {
+
"normalize-path": "^3.0.0",
+
"picomatch": "^2.0.4"
+
},
+
"engines": {
+
"node": ">= 8"
+
}
+
},
+
"node_modules/arg": {
+
"version": "4.1.3",
+
"resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
+
"integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
+
"dev": true
+
},
+
"node_modules/array-flatten": {
+
"version": "1.1.1",
+
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
+
"integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="
+
},
+
"node_modules/array-union": {
+
"version": "2.1.0",
+
"resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
+
"integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
+
"dev": true,
+
"engines": {
+
"node": ">=8"
+
}
+
},
+
"node_modules/atomic-sleep": {
+
"version": "1.0.0",
+
"resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz",
+
"integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==",
+
"engines": {
+
"node": ">=8.0.0"
+
}
+
},
+
"node_modules/await-lock": {
+
"version": "2.2.2",
+
"resolved": "https://registry.npmjs.org/await-lock/-/await-lock-2.2.2.tgz",
+
"integrity": "sha512-aDczADvlvTGajTDjcjpJMqRkOF6Qdz3YbPZm/PyW6tKPkx2hlYBzxMhEywM/tU72HrVZjgl5VCdRuMlA7pZ8Gw=="
+
},
+
"node_modules/balanced-match": {
+
"version": "1.0.2",
+
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+
"dev": true
+
},
+
"node_modules/base64-js": {
+
"version": "1.5.1",
+
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
+
"integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
+
"funding": [
+
{
+
"type": "github",
+
"url": "https://github.com/sponsors/feross"
+
},
+
{
+
"type": "patreon",
+
"url": "https://www.patreon.com/feross"
+
},
+
{
+
"type": "consulting",
+
"url": "https://feross.org/support"
+
}
+
]
+
},
+
"node_modules/better-sqlite3": {
+
"version": "11.2.1",
+
"resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-11.2.1.tgz",
+
"integrity": "sha512-Xbt1d68wQnUuFIEVsbt6V+RG30zwgbtCGQ4QOcXVrOH0FE4eHk64FWZ9NUfRHS4/x1PXqwz/+KOrnXD7f0WieA==",
+
"hasInstallScript": true,
+
"dependencies": {
+
"bindings": "^1.5.0",
+
"prebuild-install": "^7.1.1"
+
}
+
},
+
"node_modules/binary-extensions": {
+
"version": "2.3.0",
+
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
+
"integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
+
"dev": true,
+
"engines": {
+
"node": ">=8"
+
},
+
"funding": {
+
"url": "https://github.com/sponsors/sindresorhus"
+
}
+
},
+
"node_modules/bindings": {
+
"version": "1.5.0",
+
"resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz",
+
"integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
+
"dependencies": {
+
"file-uri-to-path": "1.0.0"
+
}
+
},
+
"node_modules/bl": {
+
"version": "4.1.0",
+
"resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
+
"integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
+
"dependencies": {
+
"buffer": "^5.5.0",
+
"inherits": "^2.0.4",
+
"readable-stream": "^3.4.0"
+
}
+
},
+
"node_modules/bl/node_modules/buffer": {
+
"version": "5.7.1",
+
"resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
+
"integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
+
"funding": [
+
{
+
"type": "github",
+
"url": "https://github.com/sponsors/feross"
+
},
+
{
+
"type": "patreon",
+
"url": "https://www.patreon.com/feross"
+
},
+
{
+
"type": "consulting",
+
"url": "https://feross.org/support"
+
}
+
],
+
"dependencies": {
+
"base64-js": "^1.3.1",
+
"ieee754": "^1.1.13"
+
}
+
},
+
"node_modules/bl/node_modules/readable-stream": {
+
"version": "3.6.2",
+
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+
"integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+
"dependencies": {
+
"inherits": "^2.0.3",
+
"string_decoder": "^1.1.1",
+
"util-deprecate": "^1.0.1"
+
},
+
"engines": {
+
"node": ">= 6"
+
}
+
},
+
"node_modules/body-parser": {
+
"version": "1.20.2",
+
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz",
+
"integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==",
+
"dependencies": {
+
"bytes": "3.1.2",
+
"content-type": "~1.0.5",
+
"debug": "2.6.9",
+
"depd": "2.0.0",
+
"destroy": "1.2.0",
+
"http-errors": "2.0.0",
+
"iconv-lite": "0.4.24",
+
"on-finished": "2.4.1",
+
"qs": "6.11.0",
+
"raw-body": "2.5.2",
+
"type-is": "~1.6.18",
+
"unpipe": "1.0.0"
+
},
+
"engines": {
+
"node": ">= 0.8",
+
"npm": "1.2.8000 || >= 1.4.16"
+
}
+
},
+
"node_modules/brace-expansion": {
+
"version": "2.0.1",
+
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+
"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+
"dev": true,
+
"dependencies": {
+
"balanced-match": "^1.0.0"
+
}
+
},
+
"node_modules/braces": {
+
"version": "3.0.3",
+
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+
"integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
+
"dev": true,
+
"dependencies": {
+
"fill-range": "^7.1.1"
+
},
+
"engines": {
+
"node": ">=8"
+
}
+
},
+
"node_modules/buffer": {
+
"version": "6.0.3",
+
"resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
+
"integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
+
"funding": [
+
{
+
"type": "github",
+
"url": "https://github.com/sponsors/feross"
+
},
+
{
+
"type": "patreon",
+
"url": "https://www.patreon.com/feross"
+
},
+
{
+
"type": "consulting",
+
"url": "https://feross.org/support"
+
}
+
],
+
"dependencies": {
+
"base64-js": "^1.3.1",
+
"ieee754": "^1.2.1"
+
}
+
},
+
"node_modules/bundle-require": {
+
"version": "5.0.0",
+
"resolved": "https://registry.npmjs.org/bundle-require/-/bundle-require-5.0.0.tgz",
+
"integrity": "sha512-GuziW3fSSmopcx4KRymQEJVbZUfqlCqcq7dvs6TYwKRZiegK/2buMxQTPs6MGlNv50wms1699qYO54R8XfRX4w==",
+
"dev": true,
+
"dependencies": {
+
"load-tsconfig": "^0.2.3"
+
},
+
"engines": {
+
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+
},
+
"peerDependencies": {
+
"esbuild": ">=0.18"
+
}
+
},
+
"node_modules/bytes": {
+
"version": "3.1.2",
+
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
+
"integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
+
"engines": {
+
"node": ">= 0.8"
+
}
+
},
+
"node_modules/cac": {
+
"version": "6.7.14",
+
"resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz",
+
"integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==",
+
"dev": true,
+
"engines": {
+
"node": ">=8"
+
}
+
},
+
"node_modules/call-bind": {
+
"version": "1.0.7",
+
"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
+
"integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
+
"dependencies": {
+
"es-define-property": "^1.0.0",
+
"es-errors": "^1.3.0",
+
"function-bind": "^1.1.2",
+
"get-intrinsic": "^1.2.4",
+
"set-function-length": "^1.2.1"
+
},
+
"engines": {
+
"node": ">= 0.4"
+
},
+
"funding": {
+
"url": "https://github.com/sponsors/ljharb"
+
}
+
},
+
"node_modules/cbor-extract": {
+
"version": "2.2.0",
+
"resolved": "https://registry.npmjs.org/cbor-extract/-/cbor-extract-2.2.0.tgz",
+
"integrity": "sha512-Ig1zM66BjLfTXpNgKpvBePq271BPOvu8MR0Jl080yG7Jsl+wAZunfrwiwA+9ruzm/WEdIV5QF/bjDZTqyAIVHA==",
+
"hasInstallScript": true,
+
"optional": true,
+
"dependencies": {
+
"node-gyp-build-optional-packages": "5.1.1"
+
},
+
"bin": {
+
"download-cbor-prebuilds": "bin/download-prebuilds.js"
+
},
+
"optionalDependencies": {
+
"@cbor-extract/cbor-extract-darwin-arm64": "2.2.0",
+
"@cbor-extract/cbor-extract-darwin-x64": "2.2.0",
+
"@cbor-extract/cbor-extract-linux-arm": "2.2.0",
+
"@cbor-extract/cbor-extract-linux-arm64": "2.2.0",
+
"@cbor-extract/cbor-extract-linux-x64": "2.2.0",
+
"@cbor-extract/cbor-extract-win32-x64": "2.2.0"
+
}
+
},
+
"node_modules/cbor-x": {
+
"version": "1.6.0",
+
"resolved": "https://registry.npmjs.org/cbor-x/-/cbor-x-1.6.0.tgz",
+
"integrity": "sha512-0kareyRwHSkL6ws5VXHEf8uY1liitysCVJjlmhaLG+IXLqhSaOO+t63coaso7yjwEzWZzLy8fJo06gZDVQM9Qg==",
+
"optionalDependencies": {
+
"cbor-extract": "^2.2.0"
+
}
+
},
+
"node_modules/cborg": {
+
"version": "1.10.2",
+
"resolved": "https://registry.npmjs.org/cborg/-/cborg-1.10.2.tgz",
+
"integrity": "sha512-b3tFPA9pUr2zCUiCfRd2+wok2/LBSNUMKOuRRok+WlvvAgEt/PlbgPTsZUcwCOs53IJvLgTp0eotwtosE6njug==",
+
"bin": {
+
"cborg": "cli.js"
+
}
+
},
+
"node_modules/chalk": {
+
"version": "4.1.2",
+
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+
"dev": true,
+
"dependencies": {
+
"ansi-styles": "^4.1.0",
+
"supports-color": "^7.1.0"
+
},
+
"engines": {
+
"node": ">=10"
+
},
+
"funding": {
+
"url": "https://github.com/chalk/chalk?sponsor=1"
+
}
+
},
+
"node_modules/chokidar": {
+
"version": "3.6.0",
+
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
+
"integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
+
"dev": true,
+
"dependencies": {
+
"anymatch": "~3.1.2",
+
"braces": "~3.0.2",
+
"glob-parent": "~5.1.2",
+
"is-binary-path": "~2.1.0",
+
"is-glob": "~4.0.1",
+
"normalize-path": "~3.0.0",
+
"readdirp": "~3.6.0"
+
},
+
"engines": {
+
"node": ">= 8.10.0"
+
},
+
"funding": {
+
"url": "https://paulmillr.com/funding/"
+
},
+
"optionalDependencies": {
+
"fsevents": "~2.3.2"
+
}
+
},
+
"node_modules/chownr": {
+
"version": "1.1.4",
+
"resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
+
"integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg=="
+
},
+
"node_modules/code-block-writer": {
+
"version": "11.0.3",
+
"resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-11.0.3.tgz",
+
"integrity": "sha512-NiujjUFB4SwScJq2bwbYUtXbZhBSlY6vYzm++3Q6oC+U+injTqfPYFK8wS9COOmb2lueqp0ZRB4nK1VYeHgNyw==",
+
"dev": true
+
},
+
"node_modules/color-convert": {
+
"version": "2.0.1",
+
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+
"dev": true,
+
"dependencies": {
+
"color-name": "~1.1.4"
+
},
+
"engines": {
+
"node": ">=7.0.0"
+
}
+
},
+
"node_modules/color-name": {
+
"version": "1.1.4",
+
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+
"dev": true
+
},
+
"node_modules/colorette": {
+
"version": "2.0.20",
+
"resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz",
+
"integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==",
+
"dev": true
+
},
+
"node_modules/commander": {
+
"version": "9.5.0",
+
"resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz",
+
"integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==",
+
"dev": true,
+
"engines": {
+
"node": "^12.20.0 || >=14"
+
}
+
},
+
"node_modules/consola": {
+
"version": "3.2.3",
+
"resolved": "https://registry.npmjs.org/consola/-/consola-3.2.3.tgz",
+
"integrity": "sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==",
+
"dev": true,
+
"engines": {
+
"node": "^14.18.0 || >=16.10.0"
+
}
+
},
+
"node_modules/content-disposition": {
+
"version": "0.5.4",
+
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
+
"integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
+
"dependencies": {
+
"safe-buffer": "5.2.1"
+
},
+
"engines": {
+
"node": ">= 0.6"
+
}
+
},
+
"node_modules/content-type": {
+
"version": "1.0.5",
+
"resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
+
"integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
+
"engines": {
+
"node": ">= 0.6"
+
}
+
},
+
"node_modules/cookie": {
+
"version": "0.6.0",
+
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz",
+
"integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==",
+
"engines": {
+
"node": ">= 0.6"
+
}
+
},
+
"node_modules/cookie-signature": {
+
"version": "1.0.6",
+
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
+
"integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
+
},
+
"node_modules/create-require": {
+
"version": "1.1.1",
+
"resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
+
"integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
+
"dev": true
+
},
+
"node_modules/cross-spawn": {
+
"version": "7.0.3",
+
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+
"integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+
"dev": true,
+
"dependencies": {
+
"path-key": "^3.1.0",
+
"shebang-command": "^2.0.0",
+
"which": "^2.0.1"
+
},
+
"engines": {
+
"node": ">= 8"
+
}
+
},
+
"node_modules/custom-function": {
+
"version": "1.0.6",
+
"resolved": "https://registry.npmjs.org/custom-function/-/custom-function-1.0.6.tgz",
+
"integrity": "sha512-styyvwOki/EYr+VBe7/m9xAjq6uKx87SpDKIpFRdTQnofBDSZpBEFc9qJLmaJihjjTeEpAIJ+nz+9fUXj+BPNQ=="
+
},
+
"node_modules/dateformat": {
+
"version": "4.6.3",
+
"resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz",
+
"integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==",
+
"dev": true,
+
"engines": {
+
"node": "*"
+
}
+
},
+
"node_modules/debug": {
+
"version": "2.6.9",
+
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+
"dependencies": {
+
"ms": "2.0.0"
+
}
+
},
+
"node_modules/decompress-response": {
+
"version": "6.0.0",
+
"resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz",
+
"integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==",
+
"dependencies": {
+
"mimic-response": "^3.1.0"
+
},
+
"engines": {
+
"node": ">=10"
+
},
+
"funding": {
+
"url": "https://github.com/sponsors/sindresorhus"
+
}
+
},
+
"node_modules/deep-extend": {
+
"version": "0.6.0",
+
"resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
+
"integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
+
"engines": {
+
"node": ">=4.0.0"
+
}
+
},
+
"node_modules/define-data-property": {
+
"version": "1.1.4",
+
"resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
+
"integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
+
"dependencies": {
+
"es-define-property": "^1.0.0",
+
"es-errors": "^1.3.0",
+
"gopd": "^1.0.1"
+
},
+
"engines": {
+
"node": ">= 0.4"
+
},
+
"funding": {
+
"url": "https://github.com/sponsors/ljharb"
+
}
+
},
+
"node_modules/delay": {
+
"version": "5.0.0",
+
"resolved": "https://registry.npmjs.org/delay/-/delay-5.0.0.tgz",
+
"integrity": "sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==",
+
"license": "MIT",
+
"engines": {
+
"node": ">=10"
+
},
+
"funding": {
+
"url": "https://github.com/sponsors/sindresorhus"
+
}
+
},
+
"node_modules/depd": {
+
"version": "2.0.0",
+
"resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
+
"integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
+
"engines": {
+
"node": ">= 0.8"
+
}
+
},
+
"node_modules/destroy": {
+
"version": "1.2.0",
+
"resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
+
"integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
+
"engines": {
+
"node": ">= 0.8",
+
"npm": "1.2.8000 || >= 1.4.16"
+
}
+
},
+
"node_modules/detect-libc": {
+
"version": "2.0.3",
+
"resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz",
+
"integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==",
+
"engines": {
+
"node": ">=8"
+
}
+
},
+
"node_modules/diff": {
+
"version": "4.0.2",
+
"resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
+
"integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
+
"dev": true,
+
"engines": {
+
"node": ">=0.3.1"
+
}
+
},
+
"node_modules/dir-glob": {
+
"version": "3.0.1",
+
"resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
+
"integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
+
"dev": true,
+
"dependencies": {
+
"path-type": "^4.0.0"
+
},
+
"engines": {
+
"node": ">=8"
+
}
+
},
+
"node_modules/dom-serializer": {
+
"version": "2.0.0",
+
"resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
+
"integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
+
"dependencies": {
+
"domelementtype": "^2.3.0",
+
"domhandler": "^5.0.2",
+
"entities": "^4.2.0"
+
},
+
"funding": {
+
"url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
+
}
+
},
+
"node_modules/domconstants": {
+
"version": "1.1.6",
+
"resolved": "https://registry.npmjs.org/domconstants/-/domconstants-1.1.6.tgz",
+
"integrity": "sha512-CuaDrThJ4VM+LyZ4ax8n52k0KbLJZtffyGkuj1WhpTRRcSfcy/9DfOBa68jenhX96oNUTunblSJEUNC4baFdmQ=="
+
},
+
"node_modules/domelementtype": {
+
"version": "2.3.0",
+
"resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
+
"integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
+
"funding": [
+
{
+
"type": "github",
+
"url": "https://github.com/sponsors/fb55"
+
}
+
]
+
},
+
"node_modules/domhandler": {
+
"version": "5.0.3",
+
"resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
+
"integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
+
"dependencies": {
+
"domelementtype": "^2.3.0"
+
},
+
"engines": {
+
"node": ">= 4"
+
},
+
"funding": {
+
"url": "https://github.com/fb55/domhandler?sponsor=1"
+
}
+
},
+
"node_modules/domutils": {
+
"version": "3.1.0",
+
"resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz",
+
"integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==",
+
"dependencies": {
+
"dom-serializer": "^2.0.0",
+
"domelementtype": "^2.3.0",
+
"domhandler": "^5.0.3"
+
},
+
"funding": {
+
"url": "https://github.com/fb55/domutils?sponsor=1"
+
}
+
},
+
"node_modules/dotenv": {
+
"version": "16.4.5",
+
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz",
+
"integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==",
+
"engines": {
+
"node": ">=12"
+
},
+
"funding": {
+
"url": "https://dotenvx.com"
+
}
+
},
+
"node_modules/eastasianwidth": {
+
"version": "0.2.0",
+
"resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
+
"integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
+
"dev": true
+
},
+
"node_modules/ee-first": {
+
"version": "1.1.1",
+
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+
"integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
+
},
+
"node_modules/emoji-regex": {
+
"version": "9.2.2",
+
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+
"integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
+
"dev": true
+
},
+
"node_modules/encodeurl": {
+
"version": "1.0.2",
+
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+
"integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
+
"engines": {
+
"node": ">= 0.8"
+
}
+
},
+
"node_modules/end-of-stream": {
+
"version": "1.4.4",
+
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
+
"integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
+
"dependencies": {
+
"once": "^1.4.0"
+
}
+
},
+
"node_modules/entities": {
+
"version": "4.5.0",
+
"resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
+
"integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+
"engines": {
+
"node": ">=0.12"
+
},
+
"funding": {
+
"url": "https://github.com/fb55/entities?sponsor=1"
+
}
+
},
+
"node_modules/envalid": {
+
"version": "8.0.0",
+
"resolved": "https://registry.npmjs.org/envalid/-/envalid-8.0.0.tgz",
+
"integrity": "sha512-PGeYJnJB5naN0ME6SH8nFcDj9HVbLpYIfg1p5lAyM9T4cH2lwtu2fLbozC/bq+HUUOIFxhX/LP0/GmlqPHT4tQ==",
+
"dependencies": {
+
"tslib": "2.6.2"
+
},
+
"engines": {
+
"node": ">=8.12"
+
}
+
},
+
"node_modules/es-define-property": {
+
"version": "1.0.0",
+
"resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
+
"integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
+
"dependencies": {
+
"get-intrinsic": "^1.2.4"
+
},
+
"engines": {
+
"node": ">= 0.4"
+
}
+
},
+
"node_modules/es-errors": {
+
"version": "1.3.0",
+
"resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
+
"integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+
"engines": {
+
"node": ">= 0.4"
+
}
+
},
+
"node_modules/esbuild": {
+
"version": "0.23.1",
+
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.1.tgz",
+
"integrity": "sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==",
+
"dev": true,
+
"hasInstallScript": true,
+
"bin": {
+
"esbuild": "bin/esbuild"
+
},
+
"engines": {
+
"node": ">=18"
+
},
+
"optionalDependencies": {
+
"@esbuild/aix-ppc64": "0.23.1",
+
"@esbuild/android-arm": "0.23.1",
+
"@esbuild/android-arm64": "0.23.1",
+
"@esbuild/android-x64": "0.23.1",
+
"@esbuild/darwin-arm64": "0.23.1",
+
"@esbuild/darwin-x64": "0.23.1",
+
"@esbuild/freebsd-arm64": "0.23.1",
+
"@esbuild/freebsd-x64": "0.23.1",
+
"@esbuild/linux-arm": "0.23.1",
+
"@esbuild/linux-arm64": "0.23.1",
+
"@esbuild/linux-ia32": "0.23.1",
+
"@esbuild/linux-loong64": "0.23.1",
+
"@esbuild/linux-mips64el": "0.23.1",
+
"@esbuild/linux-ppc64": "0.23.1",
+
"@esbuild/linux-riscv64": "0.23.1",
+
"@esbuild/linux-s390x": "0.23.1",
+
"@esbuild/linux-x64": "0.23.1",
+
"@esbuild/netbsd-x64": "0.23.1",
+
"@esbuild/openbsd-arm64": "0.23.1",
+
"@esbuild/openbsd-x64": "0.23.1",
+
"@esbuild/sunos-x64": "0.23.1",
+
"@esbuild/win32-arm64": "0.23.1",
+
"@esbuild/win32-ia32": "0.23.1",
+
"@esbuild/win32-x64": "0.23.1"
+
}
+
},
+
"node_modules/escape-html": {
+
"version": "1.0.3",
+
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+
"integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
+
},
+
"node_modules/etag": {
+
"version": "1.8.1",
+
"resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
+
"integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
+
"engines": {
+
"node": ">= 0.6"
+
}
+
},
+
"node_modules/event-target-shim": {
+
"version": "5.0.1",
+
"resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",
+
"integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==",
+
"engines": {
+
"node": ">=6"
+
}
+
},
+
"node_modules/eventemitter3": {
+
"version": "4.0.7",
+
"resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
+
"integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw=="
+
},
+
"node_modules/events": {
+
"version": "3.3.0",
+
"resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
+
"integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
+
"engines": {
+
"node": ">=0.8.x"
+
}
+
},
+
"node_modules/execa": {
+
"version": "5.1.1",
+
"resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
+
"integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
+
"dev": true,
+
"dependencies": {
+
"cross-spawn": "^7.0.3",
+
"get-stream": "^6.0.0",
+
"human-signals": "^2.1.0",
+
"is-stream": "^2.0.0",
+
"merge-stream": "^2.0.0",
+
"npm-run-path": "^4.0.1",
+
"onetime": "^5.1.2",
+
"signal-exit": "^3.0.3",
+
"strip-final-newline": "^2.0.0"
+
},
+
"engines": {
+
"node": ">=10"
+
},
+
"funding": {
+
"url": "https://github.com/sindresorhus/execa?sponsor=1"
+
}
+
},
+
"node_modules/execa/node_modules/signal-exit": {
+
"version": "3.0.7",
+
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+
"integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
+
"dev": true
+
},
+
"node_modules/expand-template": {
+
"version": "2.0.3",
+
"resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz",
+
"integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==",
+
"engines": {
+
"node": ">=6"
+
}
+
},
+
"node_modules/express": {
+
"version": "4.19.2",
+
"resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz",
+
"integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==",
+
"dependencies": {
+
"accepts": "~1.3.8",
+
"array-flatten": "1.1.1",
+
"body-parser": "1.20.2",
+
"content-disposition": "0.5.4",
+
"content-type": "~1.0.4",
+
"cookie": "0.6.0",
+
"cookie-signature": "1.0.6",
+
"debug": "2.6.9",
+
"depd": "2.0.0",
+
"encodeurl": "~1.0.2",
+
"escape-html": "~1.0.3",
+
"etag": "~1.8.1",
+
"finalhandler": "1.2.0",
+
"fresh": "0.5.2",
+
"http-errors": "2.0.0",
+
"merge-descriptors": "1.0.1",
+
"methods": "~1.1.2",
+
"on-finished": "2.4.1",
+
"parseurl": "~1.3.3",
+
"path-to-regexp": "0.1.7",
+
"proxy-addr": "~2.0.7",
+
"qs": "6.11.0",
+
"range-parser": "~1.2.1",
+
"safe-buffer": "5.2.1",
+
"send": "0.18.0",
+
"serve-static": "1.15.0",
+
"setprototypeof": "1.2.0",
+
"statuses": "2.0.1",
+
"type-is": "~1.6.18",
+
"utils-merge": "1.0.1",
+
"vary": "~1.1.2"
+
},
+
"engines": {
+
"node": ">= 0.10.0"
+
}
+
},
+
"node_modules/fast-copy": {
+
"version": "3.0.2",
+
"resolved": "https://registry.npmjs.org/fast-copy/-/fast-copy-3.0.2.tgz",
+
"integrity": "sha512-dl0O9Vhju8IrcLndv2eU4ldt1ftXMqqfgN4H1cpmGV7P6jeB9FwpN9a2c8DPGE1Ys88rNUJVYDHq73CGAGOPfQ==",
+
"dev": true
+
},
+
"node_modules/fast-glob": {
+
"version": "3.3.2",
+
"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
+
"integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
+
"dev": true,
+
"dependencies": {
+
"@nodelib/fs.stat": "^2.0.2",
+
"@nodelib/fs.walk": "^1.2.3",
+
"glob-parent": "^5.1.2",
+
"merge2": "^1.3.0",
+
"micromatch": "^4.0.4"
+
},
+
"engines": {
+
"node": ">=8.6.0"
+
}
+
},
+
"node_modules/fast-printf": {
+
"version": "1.6.10",
+
"resolved": "https://registry.npmjs.org/fast-printf/-/fast-printf-1.6.10.tgz",
+
"integrity": "sha512-GwTgG9O4FVIdShhbVF3JxOgSBY2+ePGsu2V/UONgoCPzF9VY6ZdBMKsHKCYQHZwNk3qNouUolRDsgVxcVA5G1w==",
+
"license": "BSD-3-Clause",
+
"engines": {
+
"node": ">=10.0"
+
}
+
},
+
"node_modules/fast-redact": {
+
"version": "3.5.0",
+
"resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.5.0.tgz",
+
"integrity": "sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==",
+
"engines": {
+
"node": ">=6"
+
}
+
},
+
"node_modules/fast-safe-stringify": {
+
"version": "2.1.1",
+
"resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz",
+
"integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==",
+
"dev": true
+
},
+
"node_modules/fastq": {
+
"version": "1.17.1",
+
"resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz",
+
"integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==",
+
"dev": true,
+
"dependencies": {
+
"reusify": "^1.0.4"
+
}
+
},
+
"node_modules/file-uri-to-path": {
+
"version": "1.0.0",
+
"resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
+
"integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw=="
+
},
+
"node_modules/fill-range": {
+
"version": "7.1.1",
+
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+
"integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+
"dev": true,
+
"dependencies": {
+
"to-regex-range": "^5.0.1"
+
},
+
"engines": {
+
"node": ">=8"
+
}
+
},
+
"node_modules/finalhandler": {
+
"version": "1.2.0",
+
"resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
+
"integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
+
"dependencies": {
+
"debug": "2.6.9",
+
"encodeurl": "~1.0.2",
+
"escape-html": "~1.0.3",
+
"on-finished": "2.4.1",
+
"parseurl": "~1.3.3",
+
"statuses": "2.0.1",
+
"unpipe": "~1.0.0"
+
},
+
"engines": {
+
"node": ">= 0.8"
+
}
+
},
+
"node_modules/foreground-child": {
+
"version": "3.3.0",
+
"resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz",
+
"integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==",
+
"dev": true,
+
"dependencies": {
+
"cross-spawn": "^7.0.0",
+
"signal-exit": "^4.0.1"
+
},
+
"engines": {
+
"node": ">=14"
+
},
+
"funding": {
+
"url": "https://github.com/sponsors/isaacs"
+
}
+
},
+
"node_modules/forwarded": {
+
"version": "0.2.0",
+
"resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
+
"integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
+
"engines": {
+
"node": ">= 0.6"
+
}
+
},
+
"node_modules/fresh": {
+
"version": "0.5.2",
+
"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
+
"integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
+
"engines": {
+
"node": ">= 0.6"
+
}
+
},
+
"node_modules/fs-constants": {
+
"version": "1.0.0",
+
"resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
+
"integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow=="
+
},
+
"node_modules/fsevents": {
+
"version": "2.3.3",
+
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+
"integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+
"dev": true,
+
"hasInstallScript": true,
+
"optional": true,
+
"os": [
+
"darwin"
+
],
+
"engines": {
+
"node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+
}
+
},
+
"node_modules/function-bind": {
+
"version": "1.1.2",
+
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+
"integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+
"funding": {
+
"url": "https://github.com/sponsors/ljharb"
+
}
+
},
+
"node_modules/gc-hook": {
+
"version": "0.4.1",
+
"resolved": "https://registry.npmjs.org/gc-hook/-/gc-hook-0.4.1.tgz",
+
"integrity": "sha512-uiF+uUftDVLr+VRdudsdsT3/LQYnv2ntwhRH964O7xXDI57Smrek5olv75Wb8Nnz6U+7iVTRXsBlxKcsaDTJTQ=="
+
},
+
"node_modules/get-intrinsic": {
+
"version": "1.2.4",
+
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
+
"integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
+
"dependencies": {
+
"es-errors": "^1.3.0",
+
"function-bind": "^1.1.2",
+
"has-proto": "^1.0.1",
+
"has-symbols": "^1.0.3",
+
"hasown": "^2.0.0"
+
},
+
"engines": {
+
"node": ">= 0.4"
+
},
+
"funding": {
+
"url": "https://github.com/sponsors/ljharb"
+
}
+
},
+
"node_modules/get-stream": {
+
"version": "6.0.1",
+
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
+
"integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
+
"dev": true,
+
"engines": {
+
"node": ">=10"
+
},
+
"funding": {
+
"url": "https://github.com/sponsors/sindresorhus"
+
}
+
},
+
"node_modules/get-tsconfig": {
+
"version": "4.8.0",
+
"resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.8.0.tgz",
+
"integrity": "sha512-Pgba6TExTZ0FJAn1qkJAjIeKoDJ3CsI2ChuLohJnZl/tTU8MVrq3b+2t5UOPfRa4RMsorClBjJALkJUMjG1PAw==",
+
"dev": true,
+
"dependencies": {
+
"resolve-pkg-maps": "^1.0.0"
+
},
+
"funding": {
+
"url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
+
}
+
},
+
"node_modules/github-from-package": {
+
"version": "0.0.0",
+
"resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz",
+
"integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw=="
+
},
+
"node_modules/glob": {
+
"version": "10.4.5",
+
"resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
+
"integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
+
"dev": true,
+
"dependencies": {
+
"foreground-child": "^3.1.0",
+
"jackspeak": "^3.1.2",
+
"minimatch": "^9.0.4",
+
"minipass": "^7.1.2",
+
"package-json-from-dist": "^1.0.0",
+
"path-scurry": "^1.11.1"
+
},
+
"bin": {
+
"glob": "dist/esm/bin.mjs"
+
},
+
"funding": {
+
"url": "https://github.com/sponsors/isaacs"
+
}
+
},
+
"node_modules/glob-parent": {
+
"version": "5.1.2",
+
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+
"dev": true,
+
"dependencies": {
+
"is-glob": "^4.0.1"
+
},
+
"engines": {
+
"node": ">= 6"
+
}
+
},
+
"node_modules/globby": {
+
"version": "11.1.0",
+
"resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
+
"integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
+
"dev": true,
+
"dependencies": {
+
"array-union": "^2.1.0",
+
"dir-glob": "^3.0.1",
+
"fast-glob": "^3.2.9",
+
"ignore": "^5.2.0",
+
"merge2": "^1.4.1",
+
"slash": "^3.0.0"
+
},
+
"engines": {
+
"node": ">=10"
+
},
+
"funding": {
+
"url": "https://github.com/sponsors/sindresorhus"
+
}
+
},
+
"node_modules/gopd": {
+
"version": "1.0.1",
+
"resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
+
"integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
+
"dependencies": {
+
"get-intrinsic": "^1.1.3"
+
},
+
"funding": {
+
"url": "https://github.com/sponsors/ljharb"
+
}
+
},
+
"node_modules/graphemer": {
+
"version": "1.4.0",
+
"resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
+
"integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag=="
+
},
+
"node_modules/has-flag": {
+
"version": "4.0.0",
+
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+
"dev": true,
+
"engines": {
+
"node": ">=8"
+
}
+
},
+
"node_modules/has-property-descriptors": {
+
"version": "1.0.2",
+
"resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
+
"integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
+
"dependencies": {
+
"es-define-property": "^1.0.0"
+
},
+
"funding": {
+
"url": "https://github.com/sponsors/ljharb"
+
}
+
},
+
"node_modules/has-proto": {
+
"version": "1.0.3",
+
"resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz",
+
"integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==",
+
"engines": {
+
"node": ">= 0.4"
+
},
+
"funding": {
+
"url": "https://github.com/sponsors/ljharb"
+
}
+
},
+
"node_modules/has-symbols": {
+
"version": "1.0.3",
+
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+
"integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
+
"engines": {
+
"node": ">= 0.4"
+
},
+
"funding": {
+
"url": "https://github.com/sponsors/ljharb"
+
}
+
},
+
"node_modules/hasown": {
+
"version": "2.0.2",
+
"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
+
"integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+
"dependencies": {
+
"function-bind": "^1.1.2"
+
},
+
"engines": {
+
"node": ">= 0.4"
+
}
+
},
+
"node_modules/help-me": {
+
"version": "5.0.0",
+
"resolved": "https://registry.npmjs.org/help-me/-/help-me-5.0.0.tgz",
+
"integrity": "sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==",
+
"dev": true
+
},
+
"node_modules/html-escaper": {
+
"version": "3.0.3",
+
"resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-3.0.3.tgz",
+
"integrity": "sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ=="
+
},
+
"node_modules/htmlparser2": {
+
"version": "9.1.0",
+
"resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-9.1.0.tgz",
+
"integrity": "sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==",
+
"funding": [
+
"https://github.com/fb55/htmlparser2?sponsor=1",
+
{
+
"type": "github",
+
"url": "https://github.com/sponsors/fb55"
+
}
+
],
+
"dependencies": {
+
"domelementtype": "^2.3.0",
+
"domhandler": "^5.0.3",
+
"domutils": "^3.1.0",
+
"entities": "^4.5.0"
+
}
+
},
+
"node_modules/http-errors": {
+
"version": "2.0.0",
+
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
+
"integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
+
"dependencies": {
+
"depd": "2.0.0",
+
"inherits": "2.0.4",
+
"setprototypeof": "1.2.0",
+
"statuses": "2.0.1",
+
"toidentifier": "1.0.1"
+
},
+
"engines": {
+
"node": ">= 0.8"
+
}
+
},
+
"node_modules/http-terminator": {
+
"version": "3.2.0",
+
"resolved": "https://registry.npmjs.org/http-terminator/-/http-terminator-3.2.0.tgz",
+
"integrity": "sha512-JLjck1EzPaWjsmIf8bziM3p9fgR1Y3JoUKAkyYEbZmFrIvJM6I8vVJfBGWlEtV9IWOvzNnaTtjuwZeBY2kwB4g==",
+
"license": "BSD-3-Clause",
+
"dependencies": {
+
"delay": "^5.0.0",
+
"p-wait-for": "^3.2.0",
+
"roarr": "^7.0.4",
+
"type-fest": "^2.3.3"
+
},
+
"engines": {
+
"node": ">=14"
+
}
+
},
+
"node_modules/human-signals": {
+
"version": "2.1.0",
+
"resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
+
"integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
+
"dev": true,
+
"engines": {
+
"node": ">=10.17.0"
+
}
+
},
+
"node_modules/iconv-lite": {
+
"version": "0.4.24",
+
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+
"integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+
"dependencies": {
+
"safer-buffer": ">= 2.1.2 < 3"
+
},
+
"engines": {
+
"node": ">=0.10.0"
+
}
+
},
+
"node_modules/ieee754": {
+
"version": "1.2.1",
+
"resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
+
"integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
+
"funding": [
+
{
+
"type": "github",
+
"url": "https://github.com/sponsors/feross"
+
},
+
{
+
"type": "patreon",
+
"url": "https://www.patreon.com/feross"
+
},
+
{
+
"type": "consulting",
+
"url": "https://feross.org/support"
+
}
+
]
+
},
+
"node_modules/ignore": {
+
"version": "5.3.2",
+
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
+
"integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
+
"dev": true,
+
"engines": {
+
"node": ">= 4"
+
}
+
},
+
"node_modules/inherits": {
+
"version": "2.0.4",
+
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+
},
+
"node_modules/ini": {
+
"version": "1.3.8",
+
"resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
+
"integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="
+
},
+
"node_modules/ipaddr.js": {
+
"version": "1.9.1",
+
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
+
"integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
+
"engines": {
+
"node": ">= 0.10"
+
}
+
},
+
"node_modules/iron-session": {
+
"version": "8.0.3",
+
"resolved": "https://registry.npmjs.org/iron-session/-/iron-session-8.0.3.tgz",
+
"integrity": "sha512-WtDX0griBliMoR6hGoU3SlefW+VSbfHrIVqURQ0Nbg/Pd+nj7VDsKV+sx0FHjyUCaO02YoYV5v+kW0PqvFJISQ==",
+
"funding": [
+
"https://github.com/sponsors/vvo",
+
"https://github.com/sponsors/brc-dd"
+
],
+
"dependencies": {
+
"cookie": "0.6.0",
+
"iron-webcrypto": "1.2.1",
+
"uncrypto": "0.1.3"
+
}
+
},
+
"node_modules/iron-webcrypto": {
+
"version": "1.2.1",
+
"resolved": "https://registry.npmjs.org/iron-webcrypto/-/iron-webcrypto-1.2.1.tgz",
+
"integrity": "sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==",
+
"funding": {
+
"url": "https://github.com/sponsors/brc-dd"
+
}
+
},
+
"node_modules/is-binary-path": {
+
"version": "2.1.0",
+
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+
"integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+
"dev": true,
+
"dependencies": {
+
"binary-extensions": "^2.0.0"
+
},
+
"engines": {
+
"node": ">=8"
+
}
+
},
+
"node_modules/is-extglob": {
+
"version": "2.1.1",
+
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+
"integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+
"dev": true,
+
"engines": {
+
"node": ">=0.10.0"
+
}
+
},
+
"node_modules/is-fullwidth-code-point": {
+
"version": "3.0.0",
+
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+
"dev": true,
+
"engines": {
+
"node": ">=8"
+
}
+
},
+
"node_modules/is-glob": {
+
"version": "4.0.3",
+
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+
"integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+
"dev": true,
+
"dependencies": {
+
"is-extglob": "^2.1.1"
+
},
+
"engines": {
+
"node": ">=0.10.0"
+
}
+
},
+
"node_modules/is-number": {
+
"version": "7.0.0",
+
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+
"dev": true,
+
"engines": {
+
"node": ">=0.12.0"
+
}
+
},
+
"node_modules/is-stream": {
+
"version": "2.0.1",
+
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
+
"integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
+
"dev": true,
+
"engines": {
+
"node": ">=8"
+
},
+
"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-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+
"dev": true
+
},
+
"node_modules/iso-datestring-validator": {
+
"version": "2.2.2",
+
"resolved": "https://registry.npmjs.org/iso-datestring-validator/-/iso-datestring-validator-2.2.2.tgz",
+
"integrity": "sha512-yLEMkBbLZTlVQqOnQ4FiMujR6T4DEcCb1xizmvXS+OxuhwcbtynoosRzdMA69zZCShCNAbi+gJ71FxZBBXx1SA=="
+
},
+
"node_modules/jackspeak": {
+
"version": "3.4.3",
+
"resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
+
"integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
+
"dev": true,
+
"dependencies": {
+
"@isaacs/cliui": "^8.0.2"
+
},
+
"funding": {
+
"url": "https://github.com/sponsors/isaacs"
+
},
+
"optionalDependencies": {
+
"@pkgjs/parseargs": "^0.11.0"
+
}
+
},
+
"node_modules/jose": {
+
"version": "5.8.0",
+
"resolved": "https://registry.npmjs.org/jose/-/jose-5.8.0.tgz",
+
"integrity": "sha512-E7CqYpL/t7MMnfGnK/eg416OsFCVUrU/Y3Vwe7QjKhu/BkS1Ms455+2xsqZQVN57/U2MHMBvEb5SrmAZWAIntA==",
+
"funding": {
+
"url": "https://github.com/sponsors/panva"
+
}
+
},
+
"node_modules/joycon": {
+
"version": "3.1.1",
+
"resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz",
+
"integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==",
+
"dev": true,
+
"engines": {
+
"node": ">=10"
+
}
+
},
+
"node_modules/kysely": {
+
"version": "0.27.4",
+
"resolved": "https://registry.npmjs.org/kysely/-/kysely-0.27.4.tgz",
+
"integrity": "sha512-dyNKv2KRvYOQPLCAOCjjQuCk4YFd33BvGdf/o5bC7FiW+BB6snA81Zt+2wT9QDFzKqxKa5rrOmvlK/anehCcgA==",
+
"engines": {
+
"node": ">=14.0.0"
+
}
+
},
+
"node_modules/lilconfig": {
+
"version": "3.1.2",
+
"resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz",
+
"integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==",
+
"dev": true,
+
"engines": {
+
"node": ">=14"
+
},
+
"funding": {
+
"url": "https://github.com/sponsors/antonk52"
+
}
+
},
+
"node_modules/lines-and-columns": {
+
"version": "1.2.4",
+
"resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+
"integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
+
"dev": true
+
},
+
"node_modules/load-tsconfig": {
+
"version": "0.2.5",
+
"resolved": "https://registry.npmjs.org/load-tsconfig/-/load-tsconfig-0.2.5.tgz",
+
"integrity": "sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==",
+
"dev": true,
+
"engines": {
+
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+
}
+
},
+
"node_modules/lodash.sortby": {
+
"version": "4.7.0",
+
"resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
+
"integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==",
+
"dev": true
+
},
+
"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/make-error": {
+
"version": "1.3.6",
+
"resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
+
"integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
+
"dev": true
+
},
+
"node_modules/media-typer": {
+
"version": "0.3.0",
+
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
+
"integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
+
"engines": {
+
"node": ">= 0.6"
+
}
+
},
+
"node_modules/merge-descriptors": {
+
"version": "1.0.1",
+
"resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
+
"integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w=="
+
},
+
"node_modules/merge-stream": {
+
"version": "2.0.0",
+
"resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
+
"integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
+
"dev": true
+
},
+
"node_modules/merge2": {
+
"version": "1.4.1",
+
"resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+
"integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+
"dev": true,
+
"engines": {
+
"node": ">= 8"
+
}
+
},
+
"node_modules/methods": {
+
"version": "1.1.2",
+
"resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
+
"integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
+
"engines": {
+
"node": ">= 0.6"
+
}
+
},
+
"node_modules/micromatch": {
+
"version": "4.0.8",
+
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
+
"integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
+
"dev": true,
+
"dependencies": {
+
"braces": "^3.0.3",
+
"picomatch": "^2.3.1"
+
},
+
"engines": {
+
"node": ">=8.6"
+
}
+
},
+
"node_modules/mime": {
+
"version": "1.6.0",
+
"resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+
"integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+
"bin": {
+
"mime": "cli.js"
+
},
+
"engines": {
+
"node": ">=4"
+
}
+
},
+
"node_modules/mime-db": {
+
"version": "1.52.0",
+
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+
"engines": {
+
"node": ">= 0.6"
+
}
+
},
+
"node_modules/mime-types": {
+
"version": "2.1.35",
+
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+
"dependencies": {
+
"mime-db": "1.52.0"
+
},
+
"engines": {
+
"node": ">= 0.6"
+
}
+
},
+
"node_modules/mimic-fn": {
+
"version": "2.1.0",
+
"resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+
"integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+
"dev": true,
+
"engines": {
+
"node": ">=6"
+
}
+
},
+
"node_modules/mimic-response": {
+
"version": "3.1.0",
+
"resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz",
+
"integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==",
+
"engines": {
+
"node": ">=10"
+
},
+
"funding": {
+
"url": "https://github.com/sponsors/sindresorhus"
+
}
+
},
+
"node_modules/minimatch": {
+
"version": "9.0.5",
+
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+
"integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+
"dev": true,
+
"dependencies": {
+
"brace-expansion": "^2.0.1"
+
},
+
"engines": {
+
"node": ">=16 || 14 >=14.17"
+
},
+
"funding": {
+
"url": "https://github.com/sponsors/isaacs"
+
}
+
},
+
"node_modules/minimist": {
+
"version": "1.2.8",
+
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+
"integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+
"funding": {
+
"url": "https://github.com/sponsors/ljharb"
+
}
+
},
+
"node_modules/minipass": {
+
"version": "7.1.2",
+
"resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
+
"integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
+
"dev": true,
+
"engines": {
+
"node": ">=16 || 14 >=14.17"
+
}
+
},
+
"node_modules/mkdirp": {
+
"version": "1.0.4",
+
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
+
"integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
+
"dev": true,
+
"bin": {
+
"mkdirp": "bin/cmd.js"
+
},
+
"engines": {
+
"node": ">=10"
+
}
+
},
+
"node_modules/mkdirp-classic": {
+
"version": "0.5.3",
+
"resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz",
+
"integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A=="
+
},
+
"node_modules/ms": {
+
"version": "2.0.0",
+
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
+
},
+
"node_modules/multiformats": {
+
"version": "9.9.0",
+
"resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz",
+
"integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg=="
+
},
+
"node_modules/mz": {
+
"version": "2.7.0",
+
"resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
+
"integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
+
"dev": true,
+
"dependencies": {
+
"any-promise": "^1.0.0",
+
"object-assign": "^4.0.1",
+
"thenify-all": "^1.0.0"
+
}
+
},
+
"node_modules/napi-build-utils": {
+
"version": "1.0.2",
+
"resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz",
+
"integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg=="
+
},
+
"node_modules/negotiator": {
+
"version": "0.6.3",
+
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
+
"integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
+
"engines": {
+
"node": ">= 0.6"
+
}
+
},
+
"node_modules/node-abi": {
+
"version": "3.67.0",
+
"resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.67.0.tgz",
+
"integrity": "sha512-bLn/fU/ALVBE9wj+p4Y21ZJWYFjUXLXPi/IewyLZkx3ApxKDNBWCKdReeKOtD8dWpOdDCeMyLh6ZewzcLsG2Nw==",
+
"dependencies": {
+
"semver": "^7.3.5"
+
},
+
"engines": {
+
"node": ">=10"
+
}
+
},
+
"node_modules/node-gyp-build-optional-packages": {
+
"version": "5.1.1",
+
"resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.1.1.tgz",
+
"integrity": "sha512-+P72GAjVAbTxjjwUmwjVrqrdZROD4nf8KgpBoDxqXXTiYZZt/ud60dE5yvCSr9lRO8e8yv6kgJIC0K0PfZFVQw==",
+
"optional": true,
+
"dependencies": {
+
"detect-libc": "^2.0.1"
+
},
+
"bin": {
+
"node-gyp-build-optional-packages": "bin.js",
+
"node-gyp-build-optional-packages-optional": "optional.js",
+
"node-gyp-build-optional-packages-test": "build-test.js"
+
}
+
},
+
"node_modules/normalize-path": {
+
"version": "3.0.0",
+
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+
"dev": true,
+
"engines": {
+
"node": ">=0.10.0"
+
}
+
},
+
"node_modules/npm-run-path": {
+
"version": "4.0.1",
+
"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
+
"integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
+
"dev": true,
+
"dependencies": {
+
"path-key": "^3.0.0"
+
},
+
"engines": {
+
"node": ">=8"
+
}
+
},
+
"node_modules/object-assign": {
+
"version": "4.1.1",
+
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+
"integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+
"dev": true,
+
"engines": {
+
"node": ">=0.10.0"
+
}
+
},
+
"node_modules/object-inspect": {
+
"version": "1.13.2",
+
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz",
+
"integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==",
+
"engines": {
+
"node": ">= 0.4"
+
},
+
"funding": {
+
"url": "https://github.com/sponsors/ljharb"
+
}
+
},
+
"node_modules/on-exit-leak-free": {
+
"version": "2.1.2",
+
"resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz",
+
"integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==",
+
"engines": {
+
"node": ">=14.0.0"
+
}
+
},
+
"node_modules/on-finished": {
+
"version": "2.4.1",
+
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
+
"integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
+
"dependencies": {
+
"ee-first": "1.1.1"
+
},
+
"engines": {
+
"node": ">= 0.8"
+
}
+
},
+
"node_modules/once": {
+
"version": "1.4.0",
+
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+
"integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+
"dependencies": {
+
"wrappy": "1"
+
}
+
},
+
"node_modules/onetime": {
+
"version": "5.1.2",
+
"resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
+
"integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
+
"dev": true,
+
"dependencies": {
+
"mimic-fn": "^2.1.0"
+
},
+
"engines": {
+
"node": ">=6"
+
},
+
"funding": {
+
"url": "https://github.com/sponsors/sindresorhus"
+
}
+
},
+
"node_modules/p-finally": {
+
"version": "1.0.0",
+
"resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
+
"integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==",
+
"engines": {
+
"node": ">=4"
+
}
+
},
+
"node_modules/p-queue": {
+
"version": "6.6.2",
+
"resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz",
+
"integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==",
+
"dependencies": {
+
"eventemitter3": "^4.0.4",
+
"p-timeout": "^3.2.0"
+
},
+
"engines": {
+
"node": ">=8"
+
},
+
"funding": {
+
"url": "https://github.com/sponsors/sindresorhus"
+
}
+
},
+
"node_modules/p-timeout": {
+
"version": "3.2.0",
+
"resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz",
+
"integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==",
+
"dependencies": {
+
"p-finally": "^1.0.0"
+
},
+
"engines": {
+
"node": ">=8"
+
}
+
},
+
"node_modules/p-wait-for": {
+
"version": "3.2.0",
+
"resolved": "https://registry.npmjs.org/p-wait-for/-/p-wait-for-3.2.0.tgz",
+
"integrity": "sha512-wpgERjNkLrBiFmkMEjuZJEWKKDrNfHCKA1OhyN1wg1FrLkULbviEy6py1AyJUgZ72YWFbZ38FIpnqvVqAlDUwA==",
+
"license": "MIT",
+
"dependencies": {
+
"p-timeout": "^3.0.0"
+
},
+
"engines": {
+
"node": ">=8"
+
},
+
"funding": {
+
"url": "https://github.com/sponsors/sindresorhus"
+
}
+
},
+
"node_modules/package-json-from-dist": {
+
"version": "1.0.0",
+
"resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz",
+
"integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==",
+
"dev": true
+
},
+
"node_modules/parseurl": {
+
"version": "1.3.3",
+
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
+
"integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
+
"engines": {
+
"node": ">= 0.8"
+
}
+
},
+
"node_modules/path-browserify": {
+
"version": "1.0.1",
+
"resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz",
+
"integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==",
+
"dev": true
+
},
+
"node_modules/path-key": {
+
"version": "3.1.1",
+
"resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+
"integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+
"dev": true,
+
"engines": {
+
"node": ">=8"
+
}
+
},
+
"node_modules/path-scurry": {
+
"version": "1.11.1",
+
"resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
+
"integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
+
"dev": true,
+
"dependencies": {
+
"lru-cache": "^10.2.0",
+
"minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
+
},
+
"engines": {
+
"node": ">=16 || 14 >=14.18"
+
},
+
"funding": {
+
"url": "https://github.com/sponsors/isaacs"
+
}
+
},
+
"node_modules/path-to-regexp": {
+
"version": "0.1.7",
+
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
+
"integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ=="
+
},
+
"node_modules/path-type": {
+
"version": "4.0.0",
+
"resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+
"integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+
"dev": true,
+
"engines": {
+
"node": ">=8"
+
}
+
},
+
"node_modules/picocolors": {
+
"version": "1.1.0",
+
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz",
+
"integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==",
+
"dev": true
+
},
+
"node_modules/picomatch": {
+
"version": "2.3.1",
+
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+
"dev": true,
+
"engines": {
+
"node": ">=8.6"
+
},
+
"funding": {
+
"url": "https://github.com/sponsors/jonschlinkert"
+
}
+
},
+
"node_modules/pino": {
+
"version": "9.4.0",
+
"resolved": "https://registry.npmjs.org/pino/-/pino-9.4.0.tgz",
+
"integrity": "sha512-nbkQb5+9YPhQRz/BeQmrWpEknAaqjpAqRK8NwJpmrX/JHu7JuZC5G1CeAwJDJfGes4h+YihC6in3Q2nGb+Y09w==",
+
"dependencies": {
+
"atomic-sleep": "^1.0.0",
+
"fast-redact": "^3.1.1",
+
"on-exit-leak-free": "^2.1.0",
+
"pino-abstract-transport": "^1.2.0",
+
"pino-std-serializers": "^7.0.0",
+
"process-warning": "^4.0.0",
+
"quick-format-unescaped": "^4.0.3",
+
"real-require": "^0.2.0",
+
"safe-stable-stringify": "^2.3.1",
+
"sonic-boom": "^4.0.1",
+
"thread-stream": "^3.0.0"
+
},
+
"bin": {
+
"pino": "bin.js"
+
}
+
},
+
"node_modules/pino-abstract-transport": {
+
"version": "1.2.0",
+
"resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-1.2.0.tgz",
+
"integrity": "sha512-Guhh8EZfPCfH+PMXAb6rKOjGQEoy0xlAIn+irODG5kgfYV+BQ0rGYYWTIel3P5mmyXqkYkPmdIkywsn6QKUR1Q==",
+
"dependencies": {
+
"readable-stream": "^4.0.0",
+
"split2": "^4.0.0"
+
}
+
},
+
"node_modules/pino-pretty": {
+
"version": "11.2.2",
+
"resolved": "https://registry.npmjs.org/pino-pretty/-/pino-pretty-11.2.2.tgz",
+
"integrity": "sha512-2FnyGir8nAJAqD3srROdrF1J5BIcMT4nwj7hHSc60El6Uxlym00UbCCd8pYIterstVBFlMyF1yFV8XdGIPbj4A==",
+
"dev": true,
+
"dependencies": {
+
"colorette": "^2.0.7",
+
"dateformat": "^4.6.3",
+
"fast-copy": "^3.0.2",
+
"fast-safe-stringify": "^2.1.1",
+
"help-me": "^5.0.0",
+
"joycon": "^3.1.1",
+
"minimist": "^1.2.6",
+
"on-exit-leak-free": "^2.1.0",
+
"pino-abstract-transport": "^1.0.0",
+
"pump": "^3.0.0",
+
"readable-stream": "^4.0.0",
+
"secure-json-parse": "^2.4.0",
+
"sonic-boom": "^4.0.1",
+
"strip-json-comments": "^3.1.1"
+
},
+
"bin": {
+
"pino-pretty": "bin.js"
+
}
+
},
+
"node_modules/pino-std-serializers": {
+
"version": "7.0.0",
+
"resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.0.0.tgz",
+
"integrity": "sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA=="
+
},
+
"node_modules/pirates": {
+
"version": "4.0.6",
+
"resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz",
+
"integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==",
+
"dev": true,
+
"engines": {
+
"node": ">= 6"
+
}
+
},
+
"node_modules/postcss-load-config": {
+
"version": "6.0.1",
+
"resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz",
+
"integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==",
+
"dev": true,
+
"funding": [
+
{
+
"type": "opencollective",
+
"url": "https://opencollective.com/postcss/"
+
},
+
{
+
"type": "github",
+
"url": "https://github.com/sponsors/ai"
+
}
+
],
+
"dependencies": {
+
"lilconfig": "^3.1.1"
+
},
+
"engines": {
+
"node": ">= 18"
+
},
+
"peerDependencies": {
+
"jiti": ">=1.21.0",
+
"postcss": ">=8.0.9",
+
"tsx": "^4.8.1",
+
"yaml": "^2.4.2"
+
},
+
"peerDependenciesMeta": {
+
"jiti": {
+
"optional": true
+
},
+
"postcss": {
+
"optional": true
+
},
+
"tsx": {
+
"optional": true
+
},
+
"yaml": {
+
"optional": true
+
}
+
}
+
},
+
"node_modules/prebuild-install": {
+
"version": "7.1.2",
+
"resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.2.tgz",
+
"integrity": "sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==",
+
"dependencies": {
+
"detect-libc": "^2.0.0",
+
"expand-template": "^2.0.3",
+
"github-from-package": "0.0.0",
+
"minimist": "^1.2.3",
+
"mkdirp-classic": "^0.5.3",
+
"napi-build-utils": "^1.0.1",
+
"node-abi": "^3.3.0",
+
"pump": "^3.0.0",
+
"rc": "^1.2.7",
+
"simple-get": "^4.0.0",
+
"tar-fs": "^2.0.0",
+
"tunnel-agent": "^0.6.0"
+
},
+
"bin": {
+
"prebuild-install": "bin.js"
+
},
+
"engines": {
+
"node": ">=10"
+
}
+
},
+
"node_modules/prettier": {
+
"version": "3.3.3",
+
"resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz",
+
"integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==",
+
"dev": true,
+
"bin": {
+
"prettier": "bin/prettier.cjs"
+
},
+
"engines": {
+
"node": ">=14"
+
},
+
"funding": {
+
"url": "https://github.com/prettier/prettier?sponsor=1"
+
}
+
},
+
"node_modules/process": {
+
"version": "0.11.10",
+
"resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+
"integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==",
+
"engines": {
+
"node": ">= 0.6.0"
+
}
+
},
+
"node_modules/process-warning": {
+
"version": "4.0.0",
+
"resolved": "https://registry.npmjs.org/process-warning/-/process-warning-4.0.0.tgz",
+
"integrity": "sha512-/MyYDxttz7DfGMMHiysAsFE4qF+pQYAA8ziO/3NcRVrQ5fSk+Mns4QZA/oRPFzvcqNoVJXQNWNAsdwBXLUkQKw=="
+
},
+
"node_modules/proxy-addr": {
+
"version": "2.0.7",
+
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
+
"integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
+
"dependencies": {
+
"forwarded": "0.2.0",
+
"ipaddr.js": "1.9.1"
+
},
+
"engines": {
+
"node": ">= 0.10"
+
}
+
},
+
"node_modules/pump": {
+
"version": "3.0.0",
+
"resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+
"integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+
"dependencies": {
+
"end-of-stream": "^1.1.0",
+
"once": "^1.3.1"
+
}
+
},
+
"node_modules/punycode": {
+
"version": "2.3.1",
+
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
+
"integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
+
"dev": true,
+
"engines": {
+
"node": ">=6"
+
}
+
},
+
"node_modules/qs": {
+
"version": "6.11.0",
+
"resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
+
"integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
+
"dependencies": {
+
"side-channel": "^1.0.4"
+
},
+
"engines": {
+
"node": ">=0.6"
+
},
+
"funding": {
+
"url": "https://github.com/sponsors/ljharb"
+
}
+
},
+
"node_modules/queue-microtask": {
+
"version": "1.2.3",
+
"resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+
"integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+
"dev": true,
+
"funding": [
+
{
+
"type": "github",
+
"url": "https://github.com/sponsors/feross"
+
},
+
{
+
"type": "patreon",
+
"url": "https://www.patreon.com/feross"
+
},
+
{
+
"type": "consulting",
+
"url": "https://feross.org/support"
+
}
+
]
+
},
+
"node_modules/quick-format-unescaped": {
+
"version": "4.0.4",
+
"resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz",
+
"integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg=="
+
},
+
"node_modules/range-parser": {
+
"version": "1.2.1",
+
"resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
+
"integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
+
"engines": {
+
"node": ">= 0.6"
+
}
+
},
+
"node_modules/rate-limiter-flexible": {
+
"version": "2.4.2",
+
"resolved": "https://registry.npmjs.org/rate-limiter-flexible/-/rate-limiter-flexible-2.4.2.tgz",
+
"integrity": "sha512-rMATGGOdO1suFyf/mI5LYhts71g1sbdhmd6YvdiXO2gJnd42Tt6QS4JUKJKSWVVkMtBacm6l40FR7Trjo6Iruw==",
+
"license": "ISC"
+
},
+
"node_modules/raw-body": {
+
"version": "2.5.2",
+
"resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz",
+
"integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==",
+
"dependencies": {
+
"bytes": "3.1.2",
+
"http-errors": "2.0.0",
+
"iconv-lite": "0.4.24",
+
"unpipe": "1.0.0"
+
},
+
"engines": {
+
"node": ">= 0.8"
+
}
+
},
+
"node_modules/rc": {
+
"version": "1.2.8",
+
"resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
+
"integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
+
"dependencies": {
+
"deep-extend": "^0.6.0",
+
"ini": "~1.3.0",
+
"minimist": "^1.2.0",
+
"strip-json-comments": "~2.0.1"
+
},
+
"bin": {
+
"rc": "cli.js"
+
}
+
},
+
"node_modules/rc/node_modules/strip-json-comments": {
+
"version": "2.0.1",
+
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+
"integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==",
+
"engines": {
+
"node": ">=0.10.0"
+
}
+
},
+
"node_modules/readable-stream": {
+
"version": "4.5.2",
+
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz",
+
"integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==",
+
"dependencies": {
+
"abort-controller": "^3.0.0",
+
"buffer": "^6.0.3",
+
"events": "^3.3.0",
+
"process": "^0.11.10",
+
"string_decoder": "^1.3.0"
+
},
+
"engines": {
+
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+
}
+
},
+
"node_modules/readdirp": {
+
"version": "3.6.0",
+
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+
"integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+
"dev": true,
+
"dependencies": {
+
"picomatch": "^2.2.1"
+
},
+
"engines": {
+
"node": ">=8.10.0"
+
}
+
},
+
"node_modules/real-require": {
+
"version": "0.2.0",
+
"resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz",
+
"integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==",
+
"engines": {
+
"node": ">= 12.13.0"
+
}
+
},
+
"node_modules/resolve-from": {
+
"version": "5.0.0",
+
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
+
"integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
+
"dev": true,
+
"engines": {
+
"node": ">=8"
+
}
+
},
+
"node_modules/resolve-pkg-maps": {
+
"version": "1.0.0",
+
"resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
+
"integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
+
"dev": true,
+
"funding": {
+
"url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1"
+
}
+
},
+
"node_modules/reusify": {
+
"version": "1.0.4",
+
"resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+
"integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+
"dev": true,
+
"engines": {
+
"iojs": ">=1.0.0",
+
"node": ">=0.10.0"
+
}
+
},
+
"node_modules/rimraf": {
+
"version": "5.0.10",
+
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz",
+
"integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==",
+
"dev": true,
+
"dependencies": {
+
"glob": "^10.3.7"
+
},
+
"bin": {
+
"rimraf": "dist/esm/bin.mjs"
+
},
+
"funding": {
+
"url": "https://github.com/sponsors/isaacs"
+
}
+
},
+
"node_modules/roarr": {
+
"version": "7.21.1",
+
"resolved": "https://registry.npmjs.org/roarr/-/roarr-7.21.1.tgz",
+
"integrity": "sha512-3niqt5bXFY1InKU8HKWqqYTYjtrBaxBMnXELXCXUYgtNYGUtZM5rB46HIC430AyacL95iEniGf7RgqsesykLmQ==",
+
"license": "BSD-3-Clause",
+
"dependencies": {
+
"fast-printf": "^1.6.9",
+
"safe-stable-stringify": "^2.4.3",
+
"semver-compare": "^1.0.0"
+
},
+
"engines": {
+
"node": ">=18.0"
+
}
+
},
+
"node_modules/rollup": {
+
"version": "4.21.2",
+
"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.21.2.tgz",
+
"integrity": "sha512-e3TapAgYf9xjdLvKQCkQTnbTKd4a6jwlpQSJJFokHGaX2IVjoEqkIIhiQfqsi0cdwlOD+tQGuOd5AJkc5RngBw==",
+
"dev": true,
+
"dependencies": {
+
"@types/estree": "1.0.5"
+
},
+
"bin": {
+
"rollup": "dist/bin/rollup"
+
},
+
"engines": {
+
"node": ">=18.0.0",
+
"npm": ">=8.0.0"
+
},
+
"optionalDependencies": {
+
"@rollup/rollup-android-arm-eabi": "4.21.2",
+
"@rollup/rollup-android-arm64": "4.21.2",
+
"@rollup/rollup-darwin-arm64": "4.21.2",
+
"@rollup/rollup-darwin-x64": "4.21.2",
+
"@rollup/rollup-linux-arm-gnueabihf": "4.21.2",
+
"@rollup/rollup-linux-arm-musleabihf": "4.21.2",
+
"@rollup/rollup-linux-arm64-gnu": "4.21.2",
+
"@rollup/rollup-linux-arm64-musl": "4.21.2",
+
"@rollup/rollup-linux-powerpc64le-gnu": "4.21.2",
+
"@rollup/rollup-linux-riscv64-gnu": "4.21.2",
+
"@rollup/rollup-linux-s390x-gnu": "4.21.2",
+
"@rollup/rollup-linux-x64-gnu": "4.21.2",
+
"@rollup/rollup-linux-x64-musl": "4.21.2",
+
"@rollup/rollup-win32-arm64-msvc": "4.21.2",
+
"@rollup/rollup-win32-ia32-msvc": "4.21.2",
+
"@rollup/rollup-win32-x64-msvc": "4.21.2",
+
"fsevents": "~2.3.2"
+
}
+
},
+
"node_modules/run-parallel": {
+
"version": "1.2.0",
+
"resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+
"integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+
"dev": true,
+
"funding": [
+
{
+
"type": "github",
+
"url": "https://github.com/sponsors/feross"
+
},
+
{
+
"type": "patreon",
+
"url": "https://www.patreon.com/feross"
+
},
+
{
+
"type": "consulting",
+
"url": "https://feross.org/support"
+
}
+
],
+
"dependencies": {
+
"queue-microtask": "^1.2.2"
+
}
+
},
+
"node_modules/safe-buffer": {
+
"version": "5.2.1",
+
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+
"funding": [
+
{
+
"type": "github",
+
"url": "https://github.com/sponsors/feross"
+
},
+
{
+
"type": "patreon",
+
"url": "https://www.patreon.com/feross"
+
},
+
{
+
"type": "consulting",
+
"url": "https://feross.org/support"
+
}
+
]
+
},
+
"node_modules/safe-stable-stringify": {
+
"version": "2.5.0",
+
"resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz",
+
"integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==",
+
"engines": {
+
"node": ">=10"
+
}
+
},
+
"node_modules/safer-buffer": {
+
"version": "2.1.2",
+
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
+
},
+
"node_modules/secure-json-parse": {
+
"version": "2.7.0",
+
"resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz",
+
"integrity": "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==",
+
"dev": true
+
},
+
"node_modules/semver": {
+
"version": "7.6.3",
+
"resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+
"integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
+
"bin": {
+
"semver": "bin/semver.js"
+
},
+
"engines": {
+
"node": ">=10"
+
}
+
},
+
"node_modules/semver-compare": {
+
"version": "1.0.0",
+
"resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz",
+
"integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==",
+
"license": "MIT"
+
},
+
"node_modules/send": {
+
"version": "0.18.0",
+
"resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
+
"integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
+
"dependencies": {
+
"debug": "2.6.9",
+
"depd": "2.0.0",
+
"destroy": "1.2.0",
+
"encodeurl": "~1.0.2",
+
"escape-html": "~1.0.3",
+
"etag": "~1.8.1",
+
"fresh": "0.5.2",
+
"http-errors": "2.0.0",
+
"mime": "1.6.0",
+
"ms": "2.1.3",
+
"on-finished": "2.4.1",
+
"range-parser": "~1.2.1",
+
"statuses": "2.0.1"
+
},
+
"engines": {
+
"node": ">= 0.8.0"
+
}
+
},
+
"node_modules/send/node_modules/ms": {
+
"version": "2.1.3",
+
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
+
},
+
"node_modules/serve-static": {
+
"version": "1.15.0",
+
"resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
+
"integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
+
"dependencies": {
+
"encodeurl": "~1.0.2",
+
"escape-html": "~1.0.3",
+
"parseurl": "~1.3.3",
+
"send": "0.18.0"
+
},
+
"engines": {
+
"node": ">= 0.8.0"
+
}
+
},
+
"node_modules/set-function-length": {
+
"version": "1.2.2",
+
"resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
+
"integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
+
"dependencies": {
+
"define-data-property": "^1.1.4",
+
"es-errors": "^1.3.0",
+
"function-bind": "^1.1.2",
+
"get-intrinsic": "^1.2.4",
+
"gopd": "^1.0.1",
+
"has-property-descriptors": "^1.0.2"
+
},
+
"engines": {
+
"node": ">= 0.4"
+
}
+
},
+
"node_modules/setprototypeof": {
+
"version": "1.2.0",
+
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
+
"integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
+
},
+
"node_modules/shebang-command": {
+
"version": "2.0.0",
+
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+
"integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+
"dev": true,
+
"dependencies": {
+
"shebang-regex": "^3.0.0"
+
},
+
"engines": {
+
"node": ">=8"
+
}
+
},
+
"node_modules/shebang-regex": {
+
"version": "3.0.0",
+
"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+
"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+
"dev": true,
+
"engines": {
+
"node": ">=8"
+
}
+
},
+
"node_modules/side-channel": {
+
"version": "1.0.6",
+
"resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz",
+
"integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==",
+
"dependencies": {
+
"call-bind": "^1.0.7",
+
"es-errors": "^1.3.0",
+
"get-intrinsic": "^1.2.4",
+
"object-inspect": "^1.13.1"
+
},
+
"engines": {
+
"node": ">= 0.4"
+
},
+
"funding": {
+
"url": "https://github.com/sponsors/ljharb"
+
}
+
},
+
"node_modules/signal-exit": {
+
"version": "4.1.0",
+
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+
"integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+
"dev": true,
+
"engines": {
+
"node": ">=14"
+
},
+
"funding": {
+
"url": "https://github.com/sponsors/isaacs"
+
}
+
},
+
"node_modules/simple-concat": {
+
"version": "1.0.1",
+
"resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz",
+
"integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==",
+
"funding": [
+
{
+
"type": "github",
+
"url": "https://github.com/sponsors/feross"
+
},
+
{
+
"type": "patreon",
+
"url": "https://www.patreon.com/feross"
+
},
+
{
+
"type": "consulting",
+
"url": "https://feross.org/support"
+
}
+
]
+
},
+
"node_modules/simple-get": {
+
"version": "4.0.1",
+
"resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz",
+
"integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==",
+
"funding": [
+
{
+
"type": "github",
+
"url": "https://github.com/sponsors/feross"
+
},
+
{
+
"type": "patreon",
+
"url": "https://www.patreon.com/feross"
+
},
+
{
+
"type": "consulting",
+
"url": "https://feross.org/support"
+
}
+
],
+
"dependencies": {
+
"decompress-response": "^6.0.0",
+
"once": "^1.3.1",
+
"simple-concat": "^1.0.0"
+
}
+
},
+
"node_modules/slash": {
+
"version": "3.0.0",
+
"resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+
"integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+
"dev": true,
+
"engines": {
+
"node": ">=8"
+
}
+
},
+
"node_modules/sonic-boom": {
+
"version": "4.1.0",
+
"resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.1.0.tgz",
+
"integrity": "sha512-NGipjjRicyJJ03rPiZCJYjwlsuP2d1/5QUviozRXC7S3WdVWNK5e3Ojieb9CCyfhq2UC+3+SRd9nG3I2lPRvUw==",
+
"dependencies": {
+
"atomic-sleep": "^1.0.0"
+
}
+
},
+
"node_modules/source-map": {
+
"version": "0.8.0-beta.0",
+
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz",
+
"integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==",
+
"dev": true,
+
"dependencies": {
+
"whatwg-url": "^7.0.0"
+
},
+
"engines": {
+
"node": ">= 8"
+
}
+
},
+
"node_modules/split2": {
+
"version": "4.2.0",
+
"resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz",
+
"integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==",
+
"engines": {
+
"node": ">= 10.x"
+
}
+
},
+
"node_modules/statuses": {
+
"version": "2.0.1",
+
"resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
+
"integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
+
"engines": {
+
"node": ">= 0.8"
+
}
+
},
+
"node_modules/string_decoder": {
+
"version": "1.3.0",
+
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+
"integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+
"dependencies": {
+
"safe-buffer": "~5.2.0"
+
}
+
},
+
"node_modules/string-width": {
+
"version": "5.1.2",
+
"resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
+
"integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
+
"dev": true,
+
"dependencies": {
+
"eastasianwidth": "^0.2.0",
+
"emoji-regex": "^9.2.2",
+
"strip-ansi": "^7.0.1"
+
},
+
"engines": {
+
"node": ">=12"
+
},
+
"funding": {
+
"url": "https://github.com/sponsors/sindresorhus"
+
}
+
},
+
"node_modules/string-width-cjs": {
+
"name": "string-width",
+
"version": "4.2.3",
+
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+
"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+
"dev": true,
+
"dependencies": {
+
"emoji-regex": "^8.0.0",
+
"is-fullwidth-code-point": "^3.0.0",
+
"strip-ansi": "^6.0.1"
+
},
+
"engines": {
+
"node": ">=8"
+
}
+
},
+
"node_modules/string-width-cjs/node_modules/ansi-regex": {
+
"version": "5.0.1",
+
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+
"dev": true,
+
"engines": {
+
"node": ">=8"
+
}
+
},
+
"node_modules/string-width-cjs/node_modules/emoji-regex": {
+
"version": "8.0.0",
+
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+
"dev": true
+
},
+
"node_modules/string-width-cjs/node_modules/strip-ansi": {
+
"version": "6.0.1",
+
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+
"dev": true,
+
"dependencies": {
+
"ansi-regex": "^5.0.1"
+
},
+
"engines": {
+
"node": ">=8"
+
}
+
},
+
"node_modules/strip-ansi": {
+
"version": "7.1.0",
+
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+
"integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+
"dev": true,
+
"dependencies": {
+
"ansi-regex": "^6.0.1"
+
},
+
"engines": {
+
"node": ">=12"
+
},
+
"funding": {
+
"url": "https://github.com/chalk/strip-ansi?sponsor=1"
+
}
+
},
+
"node_modules/strip-ansi-cjs": {
+
"name": "strip-ansi",
+
"version": "6.0.1",
+
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+
"dev": true,
+
"dependencies": {
+
"ansi-regex": "^5.0.1"
+
},
+
"engines": {
+
"node": ">=8"
+
}
+
},
+
"node_modules/strip-ansi-cjs/node_modules/ansi-regex": {
+
"version": "5.0.1",
+
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+
"dev": true,
+
"engines": {
+
"node": ">=8"
+
}
+
},
+
"node_modules/strip-final-newline": {
+
"version": "2.0.0",
+
"resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
+
"integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
+
"dev": true,
+
"engines": {
+
"node": ">=6"
+
}
+
},
+
"node_modules/strip-json-comments": {
+
"version": "3.1.1",
+
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+
"integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+
"dev": true,
+
"engines": {
+
"node": ">=8"
+
},
+
"funding": {
+
"url": "https://github.com/sponsors/sindresorhus"
+
}
+
},
+
"node_modules/sucrase": {
+
"version": "3.35.0",
+
"resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz",
+
"integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==",
+
"dev": true,
+
"dependencies": {
+
"@jridgewell/gen-mapping": "^0.3.2",
+
"commander": "^4.0.0",
+
"glob": "^10.3.10",
+
"lines-and-columns": "^1.1.6",
+
"mz": "^2.7.0",
+
"pirates": "^4.0.1",
+
"ts-interface-checker": "^0.1.9"
+
},
+
"bin": {
+
"sucrase": "bin/sucrase",
+
"sucrase-node": "bin/sucrase-node"
+
},
+
"engines": {
+
"node": ">=16 || 14 >=14.17"
+
}
+
},
+
"node_modules/sucrase/node_modules/commander": {
+
"version": "4.1.1",
+
"resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
+
"integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
+
"dev": true,
+
"engines": {
+
"node": ">= 6"
+
}
+
},
+
"node_modules/supports-color": {
+
"version": "7.2.0",
+
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+
"dev": true,
+
"dependencies": {
+
"has-flag": "^4.0.0"
+
},
+
"engines": {
+
"node": ">=8"
+
}
+
},
+
"node_modules/tar-fs": {
+
"version": "2.1.1",
+
"resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz",
+
"integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==",
+
"dependencies": {
+
"chownr": "^1.1.1",
+
"mkdirp-classic": "^0.5.2",
+
"pump": "^3.0.0",
+
"tar-stream": "^2.1.4"
+
}
+
},
+
"node_modules/tar-stream": {
+
"version": "2.2.0",
+
"resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz",
+
"integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==",
+
"dependencies": {
+
"bl": "^4.0.3",
+
"end-of-stream": "^1.4.1",
+
"fs-constants": "^1.0.0",
+
"inherits": "^2.0.3",
+
"readable-stream": "^3.1.1"
+
},
+
"engines": {
+
"node": ">=6"
+
}
+
},
+
"node_modules/tar-stream/node_modules/readable-stream": {
+
"version": "3.6.2",
+
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+
"integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+
"dependencies": {
+
"inherits": "^2.0.3",
+
"string_decoder": "^1.1.1",
+
"util-deprecate": "^1.0.1"
+
},
+
"engines": {
+
"node": ">= 6"
+
}
+
},
+
"node_modules/thenify": {
+
"version": "3.3.1",
+
"resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
+
"integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
+
"dev": true,
+
"dependencies": {
+
"any-promise": "^1.0.0"
+
}
+
},
+
"node_modules/thenify-all": {
+
"version": "1.6.0",
+
"resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
+
"integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
+
"dev": true,
+
"dependencies": {
+
"thenify": ">= 3.1.0 < 4"
+
},
+
"engines": {
+
"node": ">=0.8"
+
}
+
},
+
"node_modules/thread-stream": {
+
"version": "3.1.0",
+
"resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-3.1.0.tgz",
+
"integrity": "sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==",
+
"dependencies": {
+
"real-require": "^0.2.0"
+
}
+
},
+
"node_modules/tlds": {
+
"version": "1.254.0",
+
"resolved": "https://registry.npmjs.org/tlds/-/tlds-1.254.0.tgz",
+
"integrity": "sha512-YY4ei7K7gPGifqNSrfMaPdqTqiHcwYKUJ7zhLqQOK2ildlGgti5TSwJiXXN1YqG17I2GYZh5cZqv2r5fwBUM+w==",
+
"bin": {
+
"tlds": "bin.js"
+
}
+
},
+
"node_modules/to-regex-range": {
+
"version": "5.0.1",
+
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+
"dev": true,
+
"dependencies": {
+
"is-number": "^7.0.0"
+
},
+
"engines": {
+
"node": ">=8.0"
+
}
+
},
+
"node_modules/toidentifier": {
+
"version": "1.0.1",
+
"resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
+
"integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
+
"engines": {
+
"node": ">=0.6"
+
}
+
},
+
"node_modules/tr46": {
+
"version": "1.0.1",
+
"resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz",
+
"integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==",
+
"dev": true,
+
"dependencies": {
+
"punycode": "^2.1.0"
+
}
+
},
+
"node_modules/tree-kill": {
+
"version": "1.2.2",
+
"resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz",
+
"integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==",
+
"dev": true,
+
"bin": {
+
"tree-kill": "cli.js"
+
}
+
},
+
"node_modules/ts-interface-checker": {
+
"version": "0.1.13",
+
"resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
+
"integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==",
+
"dev": true
+
},
+
"node_modules/ts-morph": {
+
"version": "16.0.0",
+
"resolved": "https://registry.npmjs.org/ts-morph/-/ts-morph-16.0.0.tgz",
+
"integrity": "sha512-jGNF0GVpFj0orFw55LTsQxVYEUOCWBAbR5Ls7fTYE5pQsbW18ssTb/6UXx/GYAEjS+DQTp8VoTw0vqYMiaaQuw==",
+
"dev": true,
+
"dependencies": {
+
"@ts-morph/common": "~0.17.0",
+
"code-block-writer": "^11.0.3"
+
}
+
},
+
"node_modules/ts-node": {
+
"version": "10.9.2",
+
"resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz",
+
"integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==",
+
"dev": true,
+
"dependencies": {
+
"@cspotcode/source-map-support": "^0.8.0",
+
"@tsconfig/node10": "^1.0.7",
+
"@tsconfig/node12": "^1.0.7",
+
"@tsconfig/node14": "^1.0.0",
+
"@tsconfig/node16": "^1.0.2",
+
"acorn": "^8.4.1",
+
"acorn-walk": "^8.1.1",
+
"arg": "^4.1.0",
+
"create-require": "^1.1.0",
+
"diff": "^4.0.1",
+
"make-error": "^1.1.1",
+
"v8-compile-cache-lib": "^3.0.1",
+
"yn": "3.1.1"
+
},
+
"bin": {
+
"ts-node": "dist/bin.js",
+
"ts-node-cwd": "dist/bin-cwd.js",
+
"ts-node-esm": "dist/bin-esm.js",
+
"ts-node-script": "dist/bin-script.js",
+
"ts-node-transpile-only": "dist/bin-transpile.js",
+
"ts-script": "dist/bin-script-deprecated.js"
+
},
+
"peerDependencies": {
+
"@swc/core": ">=1.2.50",
+
"@swc/wasm": ">=1.2.50",
+
"@types/node": "*",
+
"typescript": ">=2.7"
+
},
+
"peerDependenciesMeta": {
+
"@swc/core": {
+
"optional": true
+
},
+
"@swc/wasm": {
+
"optional": true
+
}
+
}
+
},
+
"node_modules/tslib": {
+
"version": "2.6.2",
+
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
+
"integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
+
},
+
"node_modules/tsup": {
+
"version": "8.2.4",
+
"resolved": "https://registry.npmjs.org/tsup/-/tsup-8.2.4.tgz",
+
"integrity": "sha512-akpCPePnBnC/CXgRrcy72ZSntgIEUa1jN0oJbbvpALWKNOz1B7aM+UVDWGRGIO/T/PZugAESWDJUAb5FD48o8Q==",
+
"dev": true,
+
"dependencies": {
+
"bundle-require": "^5.0.0",
+
"cac": "^6.7.14",
+
"chokidar": "^3.6.0",
+
"consola": "^3.2.3",
+
"debug": "^4.3.5",
+
"esbuild": "^0.23.0",
+
"execa": "^5.1.1",
+
"globby": "^11.1.0",
+
"joycon": "^3.1.1",
+
"picocolors": "^1.0.1",
+
"postcss-load-config": "^6.0.1",
+
"resolve-from": "^5.0.0",
+
"rollup": "^4.19.0",
+
"source-map": "0.8.0-beta.0",
+
"sucrase": "^3.35.0",
+
"tree-kill": "^1.2.2"
+
},
+
"bin": {
+
"tsup": "dist/cli-default.js",
+
"tsup-node": "dist/cli-node.js"
+
},
+
"engines": {
+
"node": ">=18"
+
},
+
"peerDependencies": {
+
"@microsoft/api-extractor": "^7.36.0",
+
"@swc/core": "^1",
+
"postcss": "^8.4.12",
+
"typescript": ">=4.5.0"
+
},
+
"peerDependenciesMeta": {
+
"@microsoft/api-extractor": {
+
"optional": true
+
},
+
"@swc/core": {
+
"optional": true
+
},
+
"postcss": {
+
"optional": true
+
},
+
"typescript": {
+
"optional": true
+
}
+
}
+
},
+
"node_modules/tsup/node_modules/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/tsup/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/tsx": {
+
"version": "4.19.0",
+
"resolved": "https://registry.npmjs.org/tsx/-/tsx-4.19.0.tgz",
+
"integrity": "sha512-bV30kM7bsLZKZIOCHeMNVMJ32/LuJzLVajkQI/qf92J2Qr08ueLQvW00PUZGiuLPP760UINwupgUj8qrSCPUKg==",
+
"dev": true,
+
"dependencies": {
+
"esbuild": "~0.23.0",
+
"get-tsconfig": "^4.7.5"
+
},
+
"bin": {
+
"tsx": "dist/cli.mjs"
+
},
+
"engines": {
+
"node": ">=18.0.0"
+
},
+
"optionalDependencies": {
+
"fsevents": "~2.3.3"
+
}
+
},
+
"node_modules/tunnel-agent": {
+
"version": "0.6.0",
+
"resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+
"integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==",
+
"dependencies": {
+
"safe-buffer": "^5.0.1"
+
},
+
"engines": {
+
"node": "*"
+
}
+
},
+
"node_modules/type-fest": {
+
"version": "2.19.0",
+
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz",
+
"integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==",
+
"license": "(MIT OR CC0-1.0)",
+
"engines": {
+
"node": ">=12.20"
+
},
+
"funding": {
+
"url": "https://github.com/sponsors/sindresorhus"
+
}
+
},
+
"node_modules/type-is": {
+
"version": "1.6.18",
+
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
+
"integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
+
"dependencies": {
+
"media-typer": "0.3.0",
+
"mime-types": "~2.1.24"
+
},
+
"engines": {
+
"node": ">= 0.6"
+
}
+
},
+
"node_modules/typescript": {
+
"version": "5.5.4",
+
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz",
+
"integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==",
+
"dev": true,
+
"bin": {
+
"tsc": "bin/tsc",
+
"tsserver": "bin/tsserver"
+
},
+
"engines": {
+
"node": ">=14.17"
+
}
+
},
+
"node_modules/udomdiff": {
+
"version": "1.1.0",
+
"resolved": "https://registry.npmjs.org/udomdiff/-/udomdiff-1.1.0.tgz",
+
"integrity": "sha512-aqjTs5x/wsShZBkVagdafJkP8S3UMGhkHKszsu1cszjjZ7iOp86+Qb3QOFYh01oWjPMy5ZTuxD6hw5uTKxd+VA=="
+
},
+
"node_modules/uhtml": {
+
"version": "4.5.11",
+
"resolved": "https://registry.npmjs.org/uhtml/-/uhtml-4.5.11.tgz",
+
"integrity": "sha512-Jbcrdmc5rwLUJotyX7mi1jBkAnGjjQ9hg0xomKXl7JfHL5KMvpOUJCAWA7FY+IMcAWqZM2NsJMVlwJQjLK4gNw==",
+
"dependencies": {
+
"@webreflection/uparser": "^0.3.3",
+
"custom-function": "^1.0.6",
+
"domconstants": "^1.1.6",
+
"gc-hook": "^0.4.1",
+
"html-escaper": "^3.0.3",
+
"htmlparser2": "^9.1.0",
+
"udomdiff": "^1.1.0"
+
},
+
"optionalDependencies": {
+
"@preact/signals-core": "^1.8.0",
+
"@webreflection/signal": "^2.1.2"
+
}
+
},
+
"node_modules/uint8arrays": {
+
"version": "3.0.0",
+
"resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-3.0.0.tgz",
+
"integrity": "sha512-HRCx0q6O9Bfbp+HHSfQQKD7wU70+lydKVt4EghkdOvlK/NlrF90z+eXV34mUd48rNvVJXwkrMSPpCATkct8fJA==",
+
"dependencies": {
+
"multiformats": "^9.4.2"
+
}
+
},
+
"node_modules/uncrypto": {
+
"version": "0.1.3",
+
"resolved": "https://registry.npmjs.org/uncrypto/-/uncrypto-0.1.3.tgz",
+
"integrity": "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q=="
+
},
+
"node_modules/undici": {
+
"version": "6.21.3",
+
"resolved": "https://registry.npmjs.org/undici/-/undici-6.21.3.tgz",
+
"integrity": "sha512-gBLkYIlEnSp8pFbT64yFgGE6UIB9tAkhukC23PmMDCe5Nd+cRqKxSjw5y54MK2AZMgZfJWMaNE4nYUHgi1XEOw==",
+
"license": "MIT",
+
"engines": {
+
"node": ">=18.17"
+
}
+
},
+
"node_modules/undici-types": {
+
"version": "6.19.8",
+
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
+
"integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==",
+
"dev": true
+
},
+
"node_modules/unpipe": {
+
"version": "1.0.0",
+
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+
"integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
+
"engines": {
+
"node": ">= 0.8"
+
}
+
},
+
"node_modules/util-deprecate": {
+
"version": "1.0.2",
+
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+
},
+
"node_modules/utils-merge": {
+
"version": "1.0.1",
+
"resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
+
"integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
+
"engines": {
+
"node": ">= 0.4.0"
+
}
+
},
+
"node_modules/v8-compile-cache-lib": {
+
"version": "3.0.1",
+
"resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
+
"integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==",
+
"dev": true
+
},
+
"node_modules/varint": {
+
"version": "6.0.0",
+
"resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz",
+
"integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==",
+
"license": "MIT"
+
},
+
"node_modules/vary": {
+
"version": "1.1.2",
+
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
+
"integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
+
"engines": {
+
"node": ">= 0.8"
+
}
+
},
+
"node_modules/webidl-conversions": {
+
"version": "4.0.2",
+
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz",
+
"integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==",
+
"dev": true
+
},
+
"node_modules/whatwg-url": {
+
"version": "7.1.0",
+
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz",
+
"integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==",
+
"dev": true,
+
"dependencies": {
+
"lodash.sortby": "^4.7.0",
+
"tr46": "^1.0.1",
+
"webidl-conversions": "^4.0.2"
+
}
+
},
+
"node_modules/which": {
+
"version": "2.0.2",
+
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+
"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+
"dev": true,
+
"dependencies": {
+
"isexe": "^2.0.0"
+
},
+
"bin": {
+
"node-which": "bin/node-which"
+
},
+
"engines": {
+
"node": ">= 8"
+
}
+
},
+
"node_modules/wrap-ansi": {
+
"version": "8.1.0",
+
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
+
"integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
+
"dev": true,
+
"dependencies": {
+
"ansi-styles": "^6.1.0",
+
"string-width": "^5.0.1",
+
"strip-ansi": "^7.0.1"
+
},
+
"engines": {
+
"node": ">=12"
+
},
+
"funding": {
+
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+
}
+
},
+
"node_modules/wrap-ansi-cjs": {
+
"name": "wrap-ansi",
+
"version": "7.0.0",
+
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+
"integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+
"dev": true,
+
"dependencies": {
+
"ansi-styles": "^4.0.0",
+
"string-width": "^4.1.0",
+
"strip-ansi": "^6.0.0"
+
},
+
"engines": {
+
"node": ">=10"
+
},
+
"funding": {
+
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+
}
+
},
+
"node_modules/wrap-ansi-cjs/node_modules/ansi-regex": {
+
"version": "5.0.1",
+
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+
"dev": true,
+
"engines": {
+
"node": ">=8"
+
}
+
},
+
"node_modules/wrap-ansi-cjs/node_modules/emoji-regex": {
+
"version": "8.0.0",
+
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+
"dev": true
+
},
+
"node_modules/wrap-ansi-cjs/node_modules/string-width": {
+
"version": "4.2.3",
+
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+
"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+
"dev": true,
+
"dependencies": {
+
"emoji-regex": "^8.0.0",
+
"is-fullwidth-code-point": "^3.0.0",
+
"strip-ansi": "^6.0.1"
+
},
+
"engines": {
+
"node": ">=8"
+
}
+
},
+
"node_modules/wrap-ansi-cjs/node_modules/strip-ansi": {
+
"version": "6.0.1",
+
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+
"dev": true,
+
"dependencies": {
+
"ansi-regex": "^5.0.1"
+
},
+
"engines": {
+
"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",
+
"integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
+
},
+
"node_modules/ws": {
+
"version": "8.18.2",
+
"resolved": "https://registry.npmjs.org/ws/-/ws-8.18.2.tgz",
+
"integrity": "sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==",
+
"license": "MIT",
+
"engines": {
+
"node": ">=10.0.0"
+
},
+
"peerDependencies": {
+
"bufferutil": "^4.0.1",
+
"utf-8-validate": ">=5.0.2"
+
},
+
"peerDependenciesMeta": {
+
"bufferutil": {
+
"optional": true
+
},
+
"utf-8-validate": {
+
"optional": true
+
}
+
}
+
},
+
"node_modules/yesno": {
+
"version": "0.4.0",
+
"resolved": "https://registry.npmjs.org/yesno/-/yesno-0.4.0.tgz",
+
"integrity": "sha512-tdBxmHvbXPBKYIg81bMCB7bVeDmHkRzk5rVJyYYXurwKkHq/MCd8rz4HSJUP7hW0H2NlXiq8IFiWvYKEHhlotA==",
+
"dev": true
+
},
+
"node_modules/yn": {
+
"version": "3.1.1",
+
"resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
+
"integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
+
"dev": true,
+
"engines": {
+
"node": ">=6"
+
}
+
},
+
"node_modules/zod": {
+
"version": "3.25.67",
+
"resolved": "https://registry.npmjs.org/zod/-/zod-3.25.67.tgz",
+
"integrity": "sha512-idA2YXwpCdqUSKRCACDE6ItZD9TZzy3OZMtpfLoh6oPR47lipysRrJfjzMqFxQ3uJuUPyUeWe1r9vLH33xO/Qw==",
+
"license": "MIT",
+
"funding": {
+
"url": "https://github.com/sponsors/colinhacks"
+
}
+
}
+
}
+
}
+17 -28
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/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",
+
"@atproto/api": "^0.15.6",
+
"@atproto/common": "^0.4.11",
+
"@atproto/identity": "^0.4.8",
+
"@atproto/lexicon": "^0.4.11",
+
"@atproto/oauth-client-node": "^0.3.1",
+
"@atproto/sync": "^0.1.26",
+
"@atproto/xrpc-server": "^0.8.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",
+
"http-terminator": "^3.2.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"
+
"uhtml": "^4.5.9",
+
"zod": "^3.25.67"
},
"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": ["src", "!src/**/__tests__/**", "!src/**/*.test.*"],
+
"entry": [
+
"src",
+
"!src/**/__tests__/**",
+
"!src/**/*.test.*"
+
],
"splitting": false,
"sourcemap": true,
"clean": true
-3991
pnpm-lock.yaml
···
-
lockfileVersion: '6.0'
-
-
settings:
-
autoInstallPeers: true
-
excludeLinksFromLockfile: false
-
-
dependencies:
-
'@atproto/jwk-jose':
-
specifier: 0.1.2-rc.0
-
version: 0.1.2-rc.0
-
'@atproto/lexicon':
-
specifier: 0.4.1-rc.0
-
version: 0.4.1-rc.0
-
'@atproto/oauth-client-node':
-
specifier: 0.0.2-rc.2
-
version: 0.0.2-rc.2
-
'@atproto/repo':
-
specifier: 0.4.2-rc.0
-
version: 0.4.2-rc.0
-
'@atproto/syntax':
-
specifier: ^0.3.0
-
version: 0.3.0
-
'@atproto/xrpc-server':
-
specifier: 0.5.4-rc.0
-
version: 0.5.4-rc.0
-
better-sqlite3:
-
specifier: ^11.1.2
-
version: 11.1.2
-
cors:
-
specifier: ^2.8.5
-
version: 2.8.5
-
dotenv:
-
specifier: ^16.4.5
-
version: 16.4.5
-
envalid:
-
specifier: ^8.0.0
-
version: 8.0.0
-
express:
-
specifier: ^4.19.2
-
version: 4.19.2
-
express-rate-limit:
-
specifier: ^7.2.0
-
version: 7.4.0(express@4.19.2)
-
helmet:
-
specifier: ^7.1.0
-
version: 7.1.0
-
http-status-codes:
-
specifier: ^2.3.0
-
version: 2.3.0
-
iron-session:
-
specifier: ^8.0.2
-
version: 8.0.2
-
kysely:
-
specifier: ^0.27.4
-
version: 0.27.4
-
multiformats:
-
specifier: ^9.9.0
-
version: 9.9.0
-
pino:
-
specifier: ^9.3.2
-
version: 9.3.2
-
pino-http:
-
specifier: ^10.0.0
-
version: 10.2.0
-
uhtml:
-
specifier: ^4.5.9
-
version: 4.5.9
-
-
devDependencies:
-
'@atproto/lex-cli':
-
specifier: ^0.4.1
-
version: 0.4.1
-
'@biomejs/biome':
-
specifier: 1.8.3
-
version: 1.8.3
-
'@types/better-sqlite3':
-
specifier: ^7.6.11
-
version: 7.6.11
-
'@types/cors':
-
specifier: ^2.8.17
-
version: 2.8.17
-
'@types/express':
-
specifier: ^4.17.21
-
version: 4.17.21
-
lint-staged:
-
specifier: ^15.2.2
-
version: 15.2.8
-
pino-pretty:
-
specifier: ^11.0.0
-
version: 11.2.2
-
rimraf:
-
specifier: ^5.0.0
-
version: 5.0.10
-
supertest:
-
specifier: ^7.0.0
-
version: 7.0.0
-
ts-node:
-
specifier: ^10.9.2
-
version: 10.9.2(@types/node@22.1.0)(typescript@5.5.4)
-
tsup:
-
specifier: ^8.0.2
-
version: 8.2.4(tsx@4.16.5)(typescript@5.5.4)
-
tsx:
-
specifier: ^4.7.2
-
version: 4.16.5
-
typescript:
-
specifier: ^5.4.4
-
version: 5.5.4
-
vite-tsconfig-paths:
-
specifier: ^4.3.2
-
version: 4.3.2(typescript@5.5.4)
-
vitest:
-
specifier: ^2.0.0
-
version: 2.0.5(@types/node@22.1.0)
-
-
packages:
-
-
/@ampproject/remapping@2.3.0:
-
resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
-
engines: {node: '>=6.0.0'}
-
dependencies:
-
'@jridgewell/gen-mapping': 0.3.5
-
'@jridgewell/trace-mapping': 0.3.25
-
dev: true
-
-
/@atproto-labs/did-resolver@0.1.2-rc.0:
-
resolution: {integrity: sha512-5lVxhLG9P1G1XjGXQr7fhk6mBM5vpbCalrfuVXqU5xQADvObLjEtpxpJuLheAacaV2pUMFDml+53ZLYWXCgFIg==}
-
dependencies:
-
'@atproto-labs/fetch': 0.1.0
-
'@atproto-labs/pipe': 0.1.0
-
'@atproto-labs/simple-store': 0.1.1
-
'@atproto-labs/simple-store-memory': 0.1.1
-
'@atproto/did': 0.1.1-rc.0
-
zod: 3.23.8
-
dev: false
-
-
/@atproto-labs/fetch-node@0.1.0:
-
resolution: {integrity: sha512-DUHgaGw8LBqiGg51pUDuWK/alMcmNbpcK7ALzlF2Gw//TNLTsgrj0qY9aEtK+np9rEC+x/o3bN4SGnuQEpgqIg==}
-
dependencies:
-
'@atproto-labs/fetch': 0.1.0
-
'@atproto-labs/pipe': 0.1.0
-
ipaddr.js: 2.2.0
-
psl: 1.9.0
-
undici: 6.19.5
-
dev: false
-
-
/@atproto-labs/fetch@0.1.0:
-
resolution: {integrity: sha512-uirja+uA/C4HNk7vayM+AJqsccxQn2wVziUHxbsjJGt/K6Q8ZOKDaEX2+GrcXvpUVcqUKh+94JFjuzH+CAEUlg==}
-
dependencies:
-
'@atproto-labs/pipe': 0.1.0
-
optionalDependencies:
-
zod: 3.23.8
-
dev: false
-
-
/@atproto-labs/handle-resolver-node@0.1.2-rc.0:
-
resolution: {integrity: sha512-wP1c0fqxdhnIQVxFgD3Z6fiToq1ri9ECTCSPoy/1zbNJ+KWrr0V6BSONF/I5MytEbQaICBh8bvZuurvX0OjbNw==}
-
dependencies:
-
'@atproto-labs/fetch-node': 0.1.0
-
'@atproto-labs/handle-resolver': 0.1.2-rc.0
-
'@atproto/did': 0.1.1-rc.0
-
dev: false
-
-
/@atproto-labs/handle-resolver@0.1.2-rc.0:
-
resolution: {integrity: sha512-sxk/Zr1hWyBBcg1HhZ8N/Tw1Iue/6+V6bzu2c8zYhO9VfKgCBp3FFU1/i3MpgR2AlsEqZpcjv6zj4KAnMHiLUg==}
-
dependencies:
-
'@atproto-labs/simple-store': 0.1.1
-
'@atproto-labs/simple-store-memory': 0.1.1
-
'@atproto/did': 0.1.1-rc.0
-
zod: 3.23.8
-
dev: false
-
-
/@atproto-labs/identity-resolver@0.1.2-rc.0:
-
resolution: {integrity: sha512-4TLjNRbufeGduac3c/No4teJ411qNgyBQck7eY5e2K8XrzS2a/xX/bq3JP91DrvERHiP3yE22PB6ATQkuALgXA==}
-
dependencies:
-
'@atproto-labs/did-resolver': 0.1.2-rc.0
-
'@atproto-labs/handle-resolver': 0.1.2-rc.0
-
'@atproto/syntax': 0.3.0
-
dev: false
-
-
/@atproto-labs/pipe@0.1.0:
-
resolution: {integrity: sha512-ghOqHFyJlQVFPESzlVHjKroP0tPzbmG5Jms0dNI9yLDEfL8xp4OFPWLX4f6T8mRq69wWs4nIDM3sSsFbFqLa1w==}
-
dev: false
-
-
/@atproto-labs/simple-store-memory@0.1.1:
-
resolution: {integrity: sha512-PCRqhnZ8NBNBvLku53O56T0lsVOtclfIrQU/rwLCc4+p45/SBPrRYNBi6YFq5rxZbK6Njos9MCmILV/KLQxrWA==}
-
dependencies:
-
'@atproto-labs/simple-store': 0.1.1
-
lru-cache: 10.4.3
-
dev: false
-
-
/@atproto-labs/simple-store@0.1.1:
-
resolution: {integrity: sha512-WKILW2b3QbAYKh+w5U2x6p5FqqLl0nAeLwGeDY+KjX01K4Dq3vQTR9b/qNp0jZm48CabPQVrqCv0PPU9LgRRRg==}
-
dev: false
-
-
/@atproto/api@0.13.0-rc.1:
-
resolution: {integrity: sha512-h2+M6OoMLnNzqf2KDxsbRkg3/1k2IMWH33PQI31GkiQHIdt3B+MIXvJwXePu0KnMUL/Lvv2Zk01BKiDnjd4LEw==}
-
dependencies:
-
'@atproto/common-web': 0.3.0
-
'@atproto/lexicon': 0.4.1-rc.0
-
'@atproto/syntax': 0.3.0
-
'@atproto/xrpc': 0.6.0-rc.0
-
await-lock: 2.2.2
-
multiformats: 9.9.0
-
tlds: 1.254.0
-
dev: false
-
-
/@atproto/common-web@0.3.0:
-
resolution: {integrity: sha512-67VnV6JJyX+ZWyjV7xFQMypAgDmjVaR9ZCuU/QW+mqlqI7fex2uL4Fv+7/jHadgzhuJHVd6OHOvNn0wR5WZYtA==}
-
dependencies:
-
graphemer: 1.4.0
-
multiformats: 9.9.0
-
uint8arrays: 3.0.0
-
zod: 3.23.8
-
-
/@atproto/common@0.4.1:
-
resolution: {integrity: sha512-uL7kQIcBTbvkBDNfxMXL6lBH4fO2DQpHd2BryJxMtbw/4iEPKe9xBYApwECHhEIk9+zhhpTRZ15FJ3gxTXN82Q==}
-
dependencies:
-
'@atproto/common-web': 0.3.0
-
'@ipld/dag-cbor': 7.0.3
-
cbor-x: 1.6.0
-
iso-datestring-validator: 2.2.2
-
multiformats: 9.9.0
-
pino: 8.21.0
-
dev: false
-
-
/@atproto/crypto@0.4.0:
-
resolution: {integrity: sha512-Kj/4VgJ7hzzXvE42L0rjzP6lM0tai+OfPnP1rxJ+UZg/YUDtuewL4uapnVoWXvlNceKgaLZH98g5n9gXBVTe5Q==}
-
dependencies:
-
'@noble/curves': 1.4.2
-
'@noble/hashes': 1.4.0
-
uint8arrays: 3.0.0
-
dev: false
-
-
/@atproto/did@0.1.1-rc.0:
-
resolution: {integrity: sha512-rbO6kQv/bKsMGqAqr1M4o7cmJf893gYzabr1CmJ0rr/FNdXHfr0b9s2lRphA6zCS0wPdT4/mw6/LWiCrnBmi9w==}
-
dependencies:
-
zod: 3.23.8
-
dev: false
-
-
/@atproto/jwk-jose@0.1.2-rc.0:
-
resolution: {integrity: sha512-guqGhgQjOx6OxxDWBENRa30G3CJ91Rqw+5NEwiv4GfhmmM/szS983kZIydmXpySpyyZhGAPZfkOfHai+HrLsXg==}
-
dependencies:
-
'@atproto/jwk': 0.1.1
-
jose: 5.6.3
-
dev: false
-
-
/@atproto/jwk-webcrypto@0.1.2-rc.0:
-
resolution: {integrity: sha512-TlLaJulKDWDhXQ8Wujte4l2RPe/Ym+jAnFR/+lwZbcGQHAUsatBMCKzvYVv3TtqXL3B5gIC9ry12+C7oQ5yE/Q==}
-
dependencies:
-
'@atproto/jwk': 0.1.1
-
'@atproto/jwk-jose': 0.1.2-rc.0
-
dev: false
-
-
/@atproto/jwk@0.1.1:
-
resolution: {integrity: sha512-6h/bj1APUk7QcV9t/oA6+9DB5NZx9SZru9x+/pV5oHFI9Xz4ZuM5+dq1PfsJV54pZyqdnZ6W6M717cxoC7q7og==}
-
dependencies:
-
multiformats: 9.9.0
-
zod: 3.23.8
-
dev: false
-
-
/@atproto/lex-cli@0.4.1:
-
resolution: {integrity: sha512-QP9mE8MYzXR2ydhCBb/mtGqKZjqpffqcpZCr7JM4mFOZPvXV8k7OqVP1h+T94JB/tGcGPhB750S6tqUH9VRLVg==}
-
hasBin: true
-
dependencies:
-
'@atproto/lexicon': 0.4.0
-
'@atproto/syntax': 0.3.0
-
chalk: 4.1.2
-
commander: 9.5.0
-
prettier: 3.3.3
-
ts-morph: 16.0.0
-
yesno: 0.4.0
-
zod: 3.23.8
-
dev: true
-
-
/@atproto/lexicon@0.4.0:
-
resolution: {integrity: sha512-RvCBKdSI4M8qWm5uTNz1z3R2yIvIhmOsMuleOj8YR6BwRD+QbtUBy3l+xQ7iXf4M5fdfJFxaUNa6Ty0iRwdKqQ==}
-
dependencies:
-
'@atproto/common-web': 0.3.0
-
'@atproto/syntax': 0.3.0
-
iso-datestring-validator: 2.2.2
-
multiformats: 9.9.0
-
zod: 3.23.8
-
dev: true
-
-
/@atproto/lexicon@0.4.1-rc.0:
-
resolution: {integrity: sha512-CSYO8MWbxTXTLQMEJ1mTXD2pDxIXO2oCK/FVw9T/BeXLMcvwmeVgKAaytd1AGFkapX8IMAAtjBB3cnaltuHwbg==}
-
dependencies:
-
'@atproto/common-web': 0.3.0
-
'@atproto/syntax': 0.3.0
-
iso-datestring-validator: 2.2.2
-
multiformats: 9.9.0
-
zod: 3.23.8
-
dev: false
-
-
/@atproto/oauth-client-node@0.0.2-rc.2:
-
resolution: {integrity: sha512-MxR2C84h6XjTB28RpXfctKLvB6Ot68tiOlsOSigeSTKnNJ5SRD2wISz2647P8dxOec81ugMu8wa5BKcZ5Ry7nw==}
-
dependencies:
-
'@atproto-labs/did-resolver': 0.1.2-rc.0
-
'@atproto-labs/handle-resolver-node': 0.1.2-rc.0
-
'@atproto-labs/simple-store': 0.1.1
-
'@atproto/did': 0.1.1-rc.0
-
'@atproto/jwk': 0.1.1
-
'@atproto/jwk-jose': 0.1.2-rc.0
-
'@atproto/jwk-webcrypto': 0.1.2-rc.0
-
'@atproto/oauth-client': 0.1.2-rc.2
-
'@atproto/oauth-types': 0.1.2-rc.0
-
dev: false
-
-
/@atproto/oauth-client@0.1.2-rc.2:
-
resolution: {integrity: sha512-FBYyEKEU1BFoW1ASFzsmw1oOpVPj/nkoR753OZItgNwl9i+Tr4kAA9TqeXGa6Ol3dh7K67oaxHw7DChdEqbtSg==}
-
dependencies:
-
'@atproto-labs/did-resolver': 0.1.2-rc.0
-
'@atproto-labs/fetch': 0.1.0
-
'@atproto-labs/handle-resolver': 0.1.2-rc.0
-
'@atproto-labs/identity-resolver': 0.1.2-rc.0
-
'@atproto-labs/simple-store': 0.1.1
-
'@atproto-labs/simple-store-memory': 0.1.1
-
'@atproto/api': 0.13.0-rc.1
-
'@atproto/did': 0.1.1-rc.0
-
'@atproto/jwk': 0.1.1
-
'@atproto/oauth-types': 0.1.2-rc.0
-
'@atproto/xrpc': 0.6.0-rc.0
-
multiformats: 9.9.0
-
zod: 3.23.8
-
dev: false
-
-
/@atproto/oauth-types@0.1.2-rc.0:
-
resolution: {integrity: sha512-q/AxPSdLf2xTgC4K1cU35HVl6T4T0LJ/QJmvqXwjpbiNWEqooIQIP9sTp2CqqSLsWpe26z3fIoA3R+oTR1EJsA==}
-
dependencies:
-
'@atproto/jwk': 0.1.1
-
zod: 3.23.8
-
dev: false
-
-
/@atproto/repo@0.4.2-rc.0:
-
resolution: {integrity: sha512-y8zXAR23r6qlsTmbzXaBEHYjvlgeNlAKj9eJ6V17JtT+4FVdW246alhsgSsglJ2Uv/e24RC1r90yNJNRxqDzXw==}
-
dependencies:
-
'@atproto/common': 0.4.1
-
'@atproto/common-web': 0.3.0
-
'@atproto/crypto': 0.4.0
-
'@atproto/lexicon': 0.4.1-rc.0
-
'@ipld/car': 3.2.4
-
'@ipld/dag-cbor': 7.0.3
-
multiformats: 9.9.0
-
uint8arrays: 3.0.0
-
zod: 3.23.8
-
dev: false
-
-
/@atproto/syntax@0.3.0:
-
resolution: {integrity: sha512-Weq0ZBxffGHDXHl9U7BQc2BFJi/e23AL+k+i5+D9hUq/bzT4yjGsrCejkjq0xt82xXDjmhhvQSZ0LqxyZ5woxA==}
-
-
/@atproto/xrpc-server@0.5.4-rc.0:
-
resolution: {integrity: sha512-Vrx1gEoZfJtYoZhSxkbWQsU2r0DuJO/BuvMQGw9Nd66owmF5nPDVvYVd0pJhIDoaSxImTTIEeDWlNNl3WCSBPA==}
-
dependencies:
-
'@atproto/common': 0.4.1
-
'@atproto/crypto': 0.4.0
-
'@atproto/lexicon': 0.4.1-rc.0
-
'@atproto/xrpc': 0.6.0-rc.0
-
cbor-x: 1.6.0
-
express: 4.19.2
-
http-errors: 2.0.0
-
mime-types: 2.1.35
-
rate-limiter-flexible: 2.4.2
-
uint8arrays: 3.0.0
-
ws: 8.18.0
-
zod: 3.23.8
-
transitivePeerDependencies:
-
- bufferutil
-
- supports-color
-
- utf-8-validate
-
dev: false
-
-
/@atproto/xrpc@0.6.0-rc.0:
-
resolution: {integrity: sha512-TOmynXvbA57Y6KR050UeiDfdzQoAnmgB0zu0qrvhYiu7oeg64fYzvOa7stWxSIP1nhrGqgexxICR1CnOnCEHjg==}
-
dependencies:
-
'@atproto/lexicon': 0.4.1-rc.0
-
zod: 3.23.8
-
dev: false
-
-
/@biomejs/biome@1.8.3:
-
resolution: {integrity: sha512-/uUV3MV+vyAczO+vKrPdOW0Iaet7UnJMU4bNMinggGJTAnBPjCoLEYcyYtYHNnUNYlv4xZMH6hVIQCAozq8d5w==}
-
engines: {node: '>=14.21.3'}
-
hasBin: true
-
requiresBuild: true
-
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
-
dev: true
-
-
/@biomejs/cli-darwin-arm64@1.8.3:
-
resolution: {integrity: sha512-9DYOjclFpKrH/m1Oz75SSExR8VKvNSSsLnVIqdnKexj6NwmiMlKk94Wa1kZEdv6MCOHGHgyyoV57Cw8WzL5n3A==}
-
engines: {node: '>=14.21.3'}
-
cpu: [arm64]
-
os: [darwin]
-
requiresBuild: true
-
dev: true
-
optional: true
-
-
/@biomejs/cli-darwin-x64@1.8.3:
-
resolution: {integrity: sha512-UeW44L/AtbmOF7KXLCoM+9PSgPo0IDcyEUfIoOXYeANaNXXf9mLUwV1GeF2OWjyic5zj6CnAJ9uzk2LT3v/wAw==}
-
engines: {node: '>=14.21.3'}
-
cpu: [x64]
-
os: [darwin]
-
requiresBuild: true
-
dev: true
-
optional: true
-
-
/@biomejs/cli-linux-arm64-musl@1.8.3:
-
resolution: {integrity: sha512-9yjUfOFN7wrYsXt/T/gEWfvVxKlnh3yBpnScw98IF+oOeCYb5/b/+K7YNqKROV2i1DlMjg9g/EcN9wvj+NkMuQ==}
-
engines: {node: '>=14.21.3'}
-
cpu: [arm64]
-
os: [linux]
-
requiresBuild: true
-
dev: true
-
optional: true
-
-
/@biomejs/cli-linux-arm64@1.8.3:
-
resolution: {integrity: sha512-fed2ji8s+I/m8upWpTJGanqiJ0rnlHOK3DdxsyVLZQ8ClY6qLuPc9uehCREBifRJLl/iJyQpHIRufLDeotsPtw==}
-
engines: {node: '>=14.21.3'}
-
cpu: [arm64]
-
os: [linux]
-
requiresBuild: true
-
dev: true
-
optional: true
-
-
/@biomejs/cli-linux-x64-musl@1.8.3:
-
resolution: {integrity: sha512-UHrGJX7PrKMKzPGoEsooKC9jXJMa28TUSMjcIlbDnIO4EAavCoVmNQaIuUSH0Ls2mpGMwUIf+aZJv657zfWWjA==}
-
engines: {node: '>=14.21.3'}
-
cpu: [x64]
-
os: [linux]
-
requiresBuild: true
-
dev: true
-
optional: true
-
-
/@biomejs/cli-linux-x64@1.8.3:
-
resolution: {integrity: sha512-I8G2QmuE1teISyT8ie1HXsjFRz9L1m5n83U1O6m30Kw+kPMPSKjag6QGUn+sXT8V+XWIZxFFBoTDEDZW2KPDDw==}
-
engines: {node: '>=14.21.3'}
-
cpu: [x64]
-
os: [linux]
-
requiresBuild: true
-
dev: true
-
optional: true
-
-
/@biomejs/cli-win32-arm64@1.8.3:
-
resolution: {integrity: sha512-J+Hu9WvrBevfy06eU1Na0lpc7uR9tibm9maHynLIoAjLZpQU3IW+OKHUtyL8p6/3pT2Ju5t5emReeIS2SAxhkQ==}
-
engines: {node: '>=14.21.3'}
-
cpu: [arm64]
-
os: [win32]
-
requiresBuild: true
-
dev: true
-
optional: true
-
-
/@biomejs/cli-win32-x64@1.8.3:
-
resolution: {integrity: sha512-/PJ59vA1pnQeKahemaQf4Nyj7IKUvGQSc3Ze1uIGi+Wvr1xF7rGobSrAAG01T/gUDG21vkDsZYM03NAmPiVkqg==}
-
engines: {node: '>=14.21.3'}
-
cpu: [x64]
-
os: [win32]
-
requiresBuild: true
-
dev: true
-
optional: true
-
-
/@cbor-extract/cbor-extract-darwin-arm64@2.2.0:
-
resolution: {integrity: sha512-P7swiOAdF7aSi0H+tHtHtr6zrpF3aAq/W9FXx5HektRvLTM2O89xCyXF3pk7pLc7QpaY7AoaE8UowVf9QBdh3w==}
-
cpu: [arm64]
-
os: [darwin]
-
requiresBuild: true
-
dev: false
-
optional: true
-
-
/@cbor-extract/cbor-extract-darwin-x64@2.2.0:
-
resolution: {integrity: sha512-1liF6fgowph0JxBbYnAS7ZlqNYLf000Qnj4KjqPNW4GViKrEql2MgZnAsExhY9LSy8dnvA4C0qHEBgPrll0z0w==}
-
cpu: [x64]
-
os: [darwin]
-
requiresBuild: true
-
dev: false
-
optional: true
-
-
/@cbor-extract/cbor-extract-linux-arm64@2.2.0:
-
resolution: {integrity: sha512-rQvhNmDuhjTVXSPFLolmQ47/ydGOFXtbR7+wgkSY0bdOxCFept1hvg59uiLPT2fVDuJFuEy16EImo5tE2x3RsQ==}
-
cpu: [arm64]
-
os: [linux]
-
requiresBuild: true
-
dev: false
-
optional: true
-
-
/@cbor-extract/cbor-extract-linux-arm@2.2.0:
-
resolution: {integrity: sha512-QeBcBXk964zOytiedMPQNZr7sg0TNavZeuUCD6ON4vEOU/25+pLhNN6EDIKJ9VLTKaZ7K7EaAriyYQ1NQ05s/Q==}
-
cpu: [arm]
-
os: [linux]
-
requiresBuild: true
-
dev: false
-
optional: true
-
-
/@cbor-extract/cbor-extract-linux-x64@2.2.0:
-
resolution: {integrity: sha512-cWLAWtT3kNLHSvP4RKDzSTX9o0wvQEEAj4SKvhWuOVZxiDAeQazr9A+PSiRILK1VYMLeDml89ohxCnUNQNQNCw==}
-
cpu: [x64]
-
os: [linux]
-
requiresBuild: true
-
dev: false
-
optional: true
-
-
/@cbor-extract/cbor-extract-win32-x64@2.2.0:
-
resolution: {integrity: sha512-l2M+Z8DO2vbvADOBNLbbh9y5ST1RY5sqkWOg/58GkUPBYou/cuNZ68SGQ644f1CvZ8kcOxyZtw06+dxWHIoN/w==}
-
cpu: [x64]
-
os: [win32]
-
requiresBuild: true
-
dev: false
-
optional: true
-
-
/@cspotcode/source-map-support@0.8.1:
-
resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==}
-
engines: {node: '>=12'}
-
dependencies:
-
'@jridgewell/trace-mapping': 0.3.9
-
dev: true
-
-
/@esbuild/aix-ppc64@0.21.5:
-
resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==}
-
engines: {node: '>=12'}
-
cpu: [ppc64]
-
os: [aix]
-
requiresBuild: true
-
dev: true
-
optional: true
-
-
/@esbuild/aix-ppc64@0.23.0:
-
resolution: {integrity: sha512-3sG8Zwa5fMcA9bgqB8AfWPQ+HFke6uD3h1s3RIwUNK8EG7a4buxvuFTs3j1IMs2NXAk9F30C/FF4vxRgQCcmoQ==}
-
engines: {node: '>=18'}
-
cpu: [ppc64]
-
os: [aix]
-
requiresBuild: true
-
dev: true
-
optional: true
-
-
/@esbuild/android-arm64@0.21.5:
-
resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==}
-
engines: {node: '>=12'}
-
cpu: [arm64]
-
os: [android]
-
requiresBuild: true
-
dev: true
-
optional: true
-
-
/@esbuild/android-arm64@0.23.0:
-
resolution: {integrity: sha512-EuHFUYkAVfU4qBdyivULuu03FhJO4IJN9PGuABGrFy4vUuzk91P2d+npxHcFdpUnfYKy0PuV+n6bKIpHOB3prQ==}
-
engines: {node: '>=18'}
-
cpu: [arm64]
-
os: [android]
-
requiresBuild: true
-
dev: true
-
optional: true
-
-
/@esbuild/android-arm@0.21.5:
-
resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==}
-
engines: {node: '>=12'}
-
cpu: [arm]
-
os: [android]
-
requiresBuild: true
-
dev: true
-
optional: true
-
-
/@esbuild/android-arm@0.23.0:
-
resolution: {integrity: sha512-+KuOHTKKyIKgEEqKbGTK8W7mPp+hKinbMBeEnNzjJGyFcWsfrXjSTNluJHCY1RqhxFurdD8uNXQDei7qDlR6+g==}
-
engines: {node: '>=18'}
-
cpu: [arm]
-
os: [android]
-
requiresBuild: true
-
dev: true
-
optional: true
-
-
/@esbuild/android-x64@0.21.5:
-
resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==}
-
engines: {node: '>=12'}
-
cpu: [x64]
-
os: [android]
-
requiresBuild: true
-
dev: true
-
optional: true
-
-
/@esbuild/android-x64@0.23.0:
-
resolution: {integrity: sha512-WRrmKidLoKDl56LsbBMhzTTBxrsVwTKdNbKDalbEZr0tcsBgCLbEtoNthOW6PX942YiYq8HzEnb4yWQMLQuipQ==}
-
engines: {node: '>=18'}
-
cpu: [x64]
-
os: [android]
-
requiresBuild: true
-
dev: true
-
optional: true
-
-
/@esbuild/darwin-arm64@0.21.5:
-
resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==}
-
engines: {node: '>=12'}
-
cpu: [arm64]
-
os: [darwin]
-
requiresBuild: true
-
dev: true
-
optional: true
-
-
/@esbuild/darwin-arm64@0.23.0:
-
resolution: {integrity: sha512-YLntie/IdS31H54Ogdn+v50NuoWF5BDkEUFpiOChVa9UnKpftgwzZRrI4J132ETIi+D8n6xh9IviFV3eXdxfow==}
-
engines: {node: '>=18'}
-
cpu: [arm64]
-
os: [darwin]
-
requiresBuild: true
-
dev: true
-
optional: true
-
-
/@esbuild/darwin-x64@0.21.5:
-
resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==}
-
engines: {node: '>=12'}
-
cpu: [x64]
-
os: [darwin]
-
requiresBuild: true
-
dev: true
-
optional: true
-
-
/@esbuild/darwin-x64@0.23.0:
-
resolution: {integrity: sha512-IMQ6eme4AfznElesHUPDZ+teuGwoRmVuuixu7sv92ZkdQcPbsNHzutd+rAfaBKo8YK3IrBEi9SLLKWJdEvJniQ==}
-
engines: {node: '>=18'}
-
cpu: [x64]
-
os: [darwin]
-
requiresBuild: true
-
dev: true
-
optional: true
-
-
/@esbuild/freebsd-arm64@0.21.5:
-
resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==}
-
engines: {node: '>=12'}
-
cpu: [arm64]
-
os: [freebsd]
-
requiresBuild: true
-
dev: true
-
optional: true
-
-
/@esbuild/freebsd-arm64@0.23.0:
-
resolution: {integrity: sha512-0muYWCng5vqaxobq6LB3YNtevDFSAZGlgtLoAc81PjUfiFz36n4KMpwhtAd4he8ToSI3TGyuhyx5xmiWNYZFyw==}
-
engines: {node: '>=18'}
-
cpu: [arm64]
-
os: [freebsd]
-
requiresBuild: true
-
dev: true
-
optional: true
-
-
/@esbuild/freebsd-x64@0.21.5:
-
resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==}
-
engines: {node: '>=12'}
-
cpu: [x64]
-
os: [freebsd]
-
requiresBuild: true
-
dev: true
-
optional: true
-
-
/@esbuild/freebsd-x64@0.23.0:
-
resolution: {integrity: sha512-XKDVu8IsD0/q3foBzsXGt/KjD/yTKBCIwOHE1XwiXmrRwrX6Hbnd5Eqn/WvDekddK21tfszBSrE/WMaZh+1buQ==}
-
engines: {node: '>=18'}
-
cpu: [x64]
-
os: [freebsd]
-
requiresBuild: true
-
dev: true
-
optional: true
-
-
/@esbuild/linux-arm64@0.21.5:
-
resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==}
-
engines: {node: '>=12'}
-
cpu: [arm64]
-
os: [linux]
-
requiresBuild: true
-
dev: true
-
optional: true
-
-
/@esbuild/linux-arm64@0.23.0:
-
resolution: {integrity: sha512-j1t5iG8jE7BhonbsEg5d9qOYcVZv/Rv6tghaXM/Ug9xahM0nX/H2gfu6X6z11QRTMT6+aywOMA8TDkhPo8aCGw==}
-
engines: {node: '>=18'}
-
cpu: [arm64]
-
os: [linux]
-
requiresBuild: true
-
dev: true
-
optional: true
-
-
/@esbuild/linux-arm@0.21.5:
-
resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==}
-
engines: {node: '>=12'}
-
cpu: [arm]
-
os: [linux]
-
requiresBuild: true
-
dev: true
-
optional: true
-
-
/@esbuild/linux-arm@0.23.0:
-
resolution: {integrity: sha512-SEELSTEtOFu5LPykzA395Mc+54RMg1EUgXP+iw2SJ72+ooMwVsgfuwXo5Fn0wXNgWZsTVHwY2cg4Vi/bOD88qw==}
-
engines: {node: '>=18'}
-
cpu: [arm]
-
os: [linux]
-
requiresBuild: true
-
dev: true
-
optional: true
-
-
/@esbuild/linux-ia32@0.21.5:
-
resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==}
-
engines: {node: '>=12'}
-
cpu: [ia32]
-
os: [linux]
-
requiresBuild: true
-
dev: true
-
optional: true
-
-
/@esbuild/linux-ia32@0.23.0:
-
resolution: {integrity: sha512-P7O5Tkh2NbgIm2R6x1zGJJsnacDzTFcRWZyTTMgFdVit6E98LTxO+v8LCCLWRvPrjdzXHx9FEOA8oAZPyApWUA==}
-
engines: {node: '>=18'}
-
cpu: [ia32]
-
os: [linux]
-
requiresBuild: true
-
dev: true
-
optional: true
-
-
/@esbuild/linux-loong64@0.21.5:
-
resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==}
-
engines: {node: '>=12'}
-
cpu: [loong64]
-
os: [linux]
-
requiresBuild: true
-
dev: true
-
optional: true
-
-
/@esbuild/linux-loong64@0.23.0:
-
resolution: {integrity: sha512-InQwepswq6urikQiIC/kkx412fqUZudBO4SYKu0N+tGhXRWUqAx+Q+341tFV6QdBifpjYgUndV1hhMq3WeJi7A==}
-
engines: {node: '>=18'}
-
cpu: [loong64]
-
os: [linux]
-
requiresBuild: true
-
dev: true
-
optional: true
-
-
/@esbuild/linux-mips64el@0.21.5:
-
resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==}
-
engines: {node: '>=12'}
-
cpu: [mips64el]
-
os: [linux]
-
requiresBuild: true
-
dev: true
-
optional: true
-
-
/@esbuild/linux-mips64el@0.23.0:
-
resolution: {integrity: sha512-J9rflLtqdYrxHv2FqXE2i1ELgNjT+JFURt/uDMoPQLcjWQA5wDKgQA4t/dTqGa88ZVECKaD0TctwsUfHbVoi4w==}
-
engines: {node: '>=18'}
-
cpu: [mips64el]
-
os: [linux]
-
requiresBuild: true
-
dev: true
-
optional: true
-
-
/@esbuild/linux-ppc64@0.21.5:
-
resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==}
-
engines: {node: '>=12'}
-
cpu: [ppc64]
-
os: [linux]
-
requiresBuild: true
-
dev: true
-
optional: true
-
-
/@esbuild/linux-ppc64@0.23.0:
-
resolution: {integrity: sha512-cShCXtEOVc5GxU0fM+dsFD10qZ5UpcQ8AM22bYj0u/yaAykWnqXJDpd77ublcX6vdDsWLuweeuSNZk4yUxZwtw==}
-
engines: {node: '>=18'}
-
cpu: [ppc64]
-
os: [linux]
-
requiresBuild: true
-
dev: true
-
optional: true
-
-
/@esbuild/linux-riscv64@0.21.5:
-
resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==}
-
engines: {node: '>=12'}
-
cpu: [riscv64]
-
os: [linux]
-
requiresBuild: true
-
dev: true
-
optional: true
-
-
/@esbuild/linux-riscv64@0.23.0:
-
resolution: {integrity: sha512-HEtaN7Y5UB4tZPeQmgz/UhzoEyYftbMXrBCUjINGjh3uil+rB/QzzpMshz3cNUxqXN7Vr93zzVtpIDL99t9aRw==}
-
engines: {node: '>=18'}
-
cpu: [riscv64]
-
os: [linux]
-
requiresBuild: true
-
dev: true
-
optional: true
-
-
/@esbuild/linux-s390x@0.21.5:
-
resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==}
-
engines: {node: '>=12'}
-
cpu: [s390x]
-
os: [linux]
-
requiresBuild: true
-
dev: true
-
optional: true
-
-
/@esbuild/linux-s390x@0.23.0:
-
resolution: {integrity: sha512-WDi3+NVAuyjg/Wxi+o5KPqRbZY0QhI9TjrEEm+8dmpY9Xir8+HE/HNx2JoLckhKbFopW0RdO2D72w8trZOV+Wg==}
-
engines: {node: '>=18'}
-
cpu: [s390x]
-
os: [linux]
-
requiresBuild: true
-
dev: true
-
optional: true
-
-
/@esbuild/linux-x64@0.21.5:
-
resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==}
-
engines: {node: '>=12'}
-
cpu: [x64]
-
os: [linux]
-
requiresBuild: true
-
dev: true
-
optional: true
-
-
/@esbuild/linux-x64@0.23.0:
-
resolution: {integrity: sha512-a3pMQhUEJkITgAw6e0bWA+F+vFtCciMjW/LPtoj99MhVt+Mfb6bbL9hu2wmTZgNd994qTAEw+U/r6k3qHWWaOQ==}
-
engines: {node: '>=18'}
-
cpu: [x64]
-
os: [linux]
-
requiresBuild: true
-
dev: true
-
optional: true
-
-
/@esbuild/netbsd-x64@0.21.5:
-
resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==}
-
engines: {node: '>=12'}
-
cpu: [x64]
-
os: [netbsd]
-
requiresBuild: true
-
dev: true
-
optional: true
-
-
/@esbuild/netbsd-x64@0.23.0:
-
resolution: {integrity: sha512-cRK+YDem7lFTs2Q5nEv/HHc4LnrfBCbH5+JHu6wm2eP+d8OZNoSMYgPZJq78vqQ9g+9+nMuIsAO7skzphRXHyw==}
-
engines: {node: '>=18'}
-
cpu: [x64]
-
os: [netbsd]
-
requiresBuild: true
-
dev: true
-
optional: true
-
-
/@esbuild/openbsd-arm64@0.23.0:
-
resolution: {integrity: sha512-suXjq53gERueVWu0OKxzWqk7NxiUWSUlrxoZK7usiF50C6ipColGR5qie2496iKGYNLhDZkPxBI3erbnYkU0rQ==}
-
engines: {node: '>=18'}
-
cpu: [arm64]
-
os: [openbsd]
-
requiresBuild: true
-
dev: true
-
optional: true
-
-
/@esbuild/openbsd-x64@0.21.5:
-
resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==}
-
engines: {node: '>=12'}
-
cpu: [x64]
-
os: [openbsd]
-
requiresBuild: true
-
dev: true
-
optional: true
-
-
/@esbuild/openbsd-x64@0.23.0:
-
resolution: {integrity: sha512-6p3nHpby0DM/v15IFKMjAaayFhqnXV52aEmv1whZHX56pdkK+MEaLoQWj+H42ssFarP1PcomVhbsR4pkz09qBg==}
-
engines: {node: '>=18'}
-
cpu: [x64]
-
os: [openbsd]
-
requiresBuild: true
-
dev: true
-
optional: true
-
-
/@esbuild/sunos-x64@0.21.5:
-
resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==}
-
engines: {node: '>=12'}
-
cpu: [x64]
-
os: [sunos]
-
requiresBuild: true
-
dev: true
-
optional: true
-
-
/@esbuild/sunos-x64@0.23.0:
-
resolution: {integrity: sha512-BFelBGfrBwk6LVrmFzCq1u1dZbG4zy/Kp93w2+y83Q5UGYF1d8sCzeLI9NXjKyujjBBniQa8R8PzLFAUrSM9OA==}
-
engines: {node: '>=18'}
-
cpu: [x64]
-
os: [sunos]
-
requiresBuild: true
-
dev: true
-
optional: true
-
-
/@esbuild/win32-arm64@0.21.5:
-
resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==}
-
engines: {node: '>=12'}
-
cpu: [arm64]
-
os: [win32]
-
requiresBuild: true
-
dev: true
-
optional: true
-
-
/@esbuild/win32-arm64@0.23.0:
-
resolution: {integrity: sha512-lY6AC8p4Cnb7xYHuIxQ6iYPe6MfO2CC43XXKo9nBXDb35krYt7KGhQnOkRGar5psxYkircpCqfbNDB4uJbS2jQ==}
-
engines: {node: '>=18'}
-
cpu: [arm64]
-
os: [win32]
-
requiresBuild: true
-
dev: true
-
optional: true
-
-
/@esbuild/win32-ia32@0.21.5:
-
resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==}
-
engines: {node: '>=12'}
-
cpu: [ia32]
-
os: [win32]
-
requiresBuild: true
-
dev: true
-
optional: true
-
-
/@esbuild/win32-ia32@0.23.0:
-
resolution: {integrity: sha512-7L1bHlOTcO4ByvI7OXVI5pNN6HSu6pUQq9yodga8izeuB1KcT2UkHaH6118QJwopExPn0rMHIseCTx1CRo/uNA==}
-
engines: {node: '>=18'}
-
cpu: [ia32]
-
os: [win32]
-
requiresBuild: true
-
dev: true
-
optional: true
-
-
/@esbuild/win32-x64@0.21.5:
-
resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==}
-
engines: {node: '>=12'}
-
cpu: [x64]
-
os: [win32]
-
requiresBuild: true
-
dev: true
-
optional: true
-
-
/@esbuild/win32-x64@0.23.0:
-
resolution: {integrity: sha512-Arm+WgUFLUATuoxCJcahGuk6Yj9Pzxd6l11Zb/2aAuv5kWWvvfhLFo2fni4uSK5vzlUdCGZ/BdV5tH8klj8p8g==}
-
engines: {node: '>=18'}
-
cpu: [x64]
-
os: [win32]
-
requiresBuild: true
-
dev: true
-
optional: true
-
-
/@ipld/car@3.2.4:
-
resolution: {integrity: sha512-rezKd+jk8AsTGOoJKqzfjLJ3WVft7NZNH95f0pfPbicROvzTyvHCNy567HzSUd6gRXZ9im29z5ZEv9Hw49jSYw==}
-
dependencies:
-
'@ipld/dag-cbor': 7.0.3
-
multiformats: 9.9.0
-
varint: 6.0.0
-
dev: false
-
-
/@ipld/dag-cbor@7.0.3:
-
resolution: {integrity: sha512-1VVh2huHsuohdXC1bGJNE8WR72slZ9XE2T3wbBBq31dm7ZBatmKLLxrB+XAqafxfRFjv08RZmj/W/ZqaM13AuA==}
-
dependencies:
-
cborg: 1.10.2
-
multiformats: 9.9.0
-
dev: false
-
-
/@isaacs/cliui@8.0.2:
-
resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
-
engines: {node: '>=12'}
-
dependencies:
-
string-width: 5.1.2
-
string-width-cjs: /string-width@4.2.3
-
strip-ansi: 7.1.0
-
strip-ansi-cjs: /strip-ansi@6.0.1
-
wrap-ansi: 8.1.0
-
wrap-ansi-cjs: /wrap-ansi@7.0.0
-
dev: true
-
-
/@jridgewell/gen-mapping@0.3.5:
-
resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==}
-
engines: {node: '>=6.0.0'}
-
dependencies:
-
'@jridgewell/set-array': 1.2.1
-
'@jridgewell/sourcemap-codec': 1.5.0
-
'@jridgewell/trace-mapping': 0.3.25
-
dev: true
-
-
/@jridgewell/resolve-uri@3.1.2:
-
resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
-
engines: {node: '>=6.0.0'}
-
dev: true
-
-
/@jridgewell/set-array@1.2.1:
-
resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}
-
engines: {node: '>=6.0.0'}
-
dev: true
-
-
/@jridgewell/sourcemap-codec@1.5.0:
-
resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
-
dev: true
-
-
/@jridgewell/trace-mapping@0.3.25:
-
resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
-
dependencies:
-
'@jridgewell/resolve-uri': 3.1.2
-
'@jridgewell/sourcemap-codec': 1.5.0
-
dev: true
-
-
/@jridgewell/trace-mapping@0.3.9:
-
resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==}
-
dependencies:
-
'@jridgewell/resolve-uri': 3.1.2
-
'@jridgewell/sourcemap-codec': 1.5.0
-
dev: true
-
-
/@noble/curves@1.4.2:
-
resolution: {integrity: sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==}
-
dependencies:
-
'@noble/hashes': 1.4.0
-
dev: false
-
-
/@noble/hashes@1.4.0:
-
resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==}
-
engines: {node: '>= 16'}
-
dev: false
-
-
/@nodelib/fs.scandir@2.1.5:
-
resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
-
engines: {node: '>= 8'}
-
dependencies:
-
'@nodelib/fs.stat': 2.0.5
-
run-parallel: 1.2.0
-
dev: true
-
-
/@nodelib/fs.stat@2.0.5:
-
resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
-
engines: {node: '>= 8'}
-
dev: true
-
-
/@nodelib/fs.walk@1.2.8:
-
resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
-
engines: {node: '>= 8'}
-
dependencies:
-
'@nodelib/fs.scandir': 2.1.5
-
fastq: 1.17.1
-
dev: true
-
-
/@pkgjs/parseargs@0.11.0:
-
resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
-
engines: {node: '>=14'}
-
requiresBuild: true
-
dev: true
-
optional: true
-
-
/@preact/signals-core@1.8.0:
-
resolution: {integrity: sha512-OBvUsRZqNmjzCZXWLxkZfhcgT+Fk8DDcT/8vD6a1xhDemodyy87UJRJfASMuSD8FaAIeGgGm85ydXhm7lr4fyA==}
-
requiresBuild: true
-
dev: false
-
optional: true
-
-
/@rollup/rollup-android-arm-eabi@4.20.0:
-
resolution: {integrity: sha512-TSpWzflCc4VGAUJZlPpgAJE1+V60MePDQnBd7PPkpuEmOy8i87aL6tinFGKBFKuEDikYpig72QzdT3QPYIi+oA==}
-
cpu: [arm]
-
os: [android]
-
requiresBuild: true
-
dev: true
-
optional: true
-
-
/@rollup/rollup-android-arm64@4.20.0:
-
resolution: {integrity: sha512-u00Ro/nok7oGzVuh/FMYfNoGqxU5CPWz1mxV85S2w9LxHR8OoMQBuSk+3BKVIDYgkpeOET5yXkx90OYFc+ytpQ==}
-
cpu: [arm64]
-
os: [android]
-
requiresBuild: true
-
dev: true
-
optional: true
-
-
/@rollup/rollup-darwin-arm64@4.20.0:
-
resolution: {integrity: sha512-uFVfvzvsdGtlSLuL0ZlvPJvl6ZmrH4CBwLGEFPe7hUmf7htGAN+aXo43R/V6LATyxlKVC/m6UsLb7jbG+LG39Q==}
-
cpu: [arm64]
-
os: [darwin]
-
requiresBuild: true
-
dev: true
-
optional: true
-
-
/@rollup/rollup-darwin-x64@4.20.0:
-
resolution: {integrity: sha512-xbrMDdlev53vNXexEa6l0LffojxhqDTBeL+VUxuuIXys4x6xyvbKq5XqTXBCEUA8ty8iEJblHvFaWRJTk/icAQ==}
-
cpu: [x64]
-
os: [darwin]
-
requiresBuild: true
-
dev: true
-
optional: true
-
-
/@rollup/rollup-linux-arm-gnueabihf@4.20.0:
-
resolution: {integrity: sha512-jMYvxZwGmoHFBTbr12Xc6wOdc2xA5tF5F2q6t7Rcfab68TT0n+r7dgawD4qhPEvasDsVpQi+MgDzj2faOLsZjA==}
-
cpu: [arm]
-
os: [linux]
-
requiresBuild: true
-
dev: true
-
optional: true
-
-
/@rollup/rollup-linux-arm-musleabihf@4.20.0:
-
resolution: {integrity: sha512-1asSTl4HKuIHIB1GcdFHNNZhxAYEdqML/MW4QmPS4G0ivbEcBr1JKlFLKsIRqjSwOBkdItn3/ZDlyvZ/N6KPlw==}
-
cpu: [arm]
-
os: [linux]
-
requiresBuild: true
-
dev: true
-
optional: true
-
-
/@rollup/rollup-linux-arm64-gnu@4.20.0:
-
resolution: {integrity: sha512-COBb8Bkx56KldOYJfMf6wKeYJrtJ9vEgBRAOkfw6Ens0tnmzPqvlpjZiLgkhg6cA3DGzCmLmmd319pmHvKWWlQ==}
-
cpu: [arm64]
-
os: [linux]
-
requiresBuild: true
-
dev: true
-
optional: true
-
-
/@rollup/rollup-linux-arm64-musl@4.20.0:
-
resolution: {integrity: sha512-+it+mBSyMslVQa8wSPvBx53fYuZK/oLTu5RJoXogjk6x7Q7sz1GNRsXWjn6SwyJm8E/oMjNVwPhmNdIjwP135Q==}
-
cpu: [arm64]
-
os: [linux]
-
requiresBuild: true
-
dev: true
-
optional: true
-
-
/@rollup/rollup-linux-powerpc64le-gnu@4.20.0:
-
resolution: {integrity: sha512-yAMvqhPfGKsAxHN8I4+jE0CpLWD8cv4z7CK7BMmhjDuz606Q2tFKkWRY8bHR9JQXYcoLfopo5TTqzxgPUjUMfw==}
-
cpu: [ppc64]
-
os: [linux]
-
requiresBuild: true
-
dev: true
-
optional: true
-
-
/@rollup/rollup-linux-riscv64-gnu@4.20.0:
-
resolution: {integrity: sha512-qmuxFpfmi/2SUkAw95TtNq/w/I7Gpjurx609OOOV7U4vhvUhBcftcmXwl3rqAek+ADBwSjIC4IVNLiszoj3dPA==}
-
cpu: [riscv64]
-
os: [linux]
-
requiresBuild: true
-
dev: true
-
optional: true
-
-
/@rollup/rollup-linux-s390x-gnu@4.20.0:
-
resolution: {integrity: sha512-I0BtGXddHSHjV1mqTNkgUZLnS3WtsqebAXv11D5BZE/gfw5KoyXSAXVqyJximQXNvNzUo4GKlCK/dIwXlz+jlg==}
-
cpu: [s390x]
-
os: [linux]
-
requiresBuild: true
-
dev: true
-
optional: true
-
-
/@rollup/rollup-linux-x64-gnu@4.20.0:
-
resolution: {integrity: sha512-y+eoL2I3iphUg9tN9GB6ku1FA8kOfmF4oUEWhztDJ4KXJy1agk/9+pejOuZkNFhRwHAOxMsBPLbXPd6mJiCwew==}
-
cpu: [x64]
-
os: [linux]
-
requiresBuild: true
-
dev: true
-
optional: true
-
-
/@rollup/rollup-linux-x64-musl@4.20.0:
-
resolution: {integrity: sha512-hM3nhW40kBNYUkZb/r9k2FKK+/MnKglX7UYd4ZUy5DJs8/sMsIbqWK2piZtVGE3kcXVNj3B2IrUYROJMMCikNg==}
-
cpu: [x64]
-
os: [linux]
-
requiresBuild: true
-
dev: true
-
optional: true
-
-
/@rollup/rollup-win32-arm64-msvc@4.20.0:
-
resolution: {integrity: sha512-psegMvP+Ik/Bg7QRJbv8w8PAytPA7Uo8fpFjXyCRHWm6Nt42L+JtoqH8eDQ5hRP7/XW2UiIriy1Z46jf0Oa1kA==}
-
cpu: [arm64]
-
os: [win32]
-
requiresBuild: true
-
dev: true
-
optional: true
-
-
/@rollup/rollup-win32-ia32-msvc@4.20.0:
-
resolution: {integrity: sha512-GabekH3w4lgAJpVxkk7hUzUf2hICSQO0a/BLFA11/RMxQT92MabKAqyubzDZmMOC/hcJNlc+rrypzNzYl4Dx7A==}
-
cpu: [ia32]
-
os: [win32]
-
requiresBuild: true
-
dev: true
-
optional: true
-
-
/@rollup/rollup-win32-x64-msvc@4.20.0:
-
resolution: {integrity: sha512-aJ1EJSuTdGnM6qbVC4B5DSmozPTqIag9fSzXRNNo+humQLG89XpPgdt16Ia56ORD7s+H8Pmyx44uczDQ0yDzpg==}
-
cpu: [x64]
-
os: [win32]
-
requiresBuild: true
-
dev: true
-
optional: true
-
-
/@ts-morph/common@0.17.0:
-
resolution: {integrity: sha512-RMSSvSfs9kb0VzkvQ2NWobwnj7TxCA9vI/IjR9bDHqgAyVbu2T0DN4wiKVqomyDWqO7dPr/tErSfq7urQ1Q37g==}
-
dependencies:
-
fast-glob: 3.3.2
-
minimatch: 5.1.6
-
mkdirp: 1.0.4
-
path-browserify: 1.0.1
-
dev: true
-
-
/@tsconfig/node10@1.0.11:
-
resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==}
-
dev: true
-
-
/@tsconfig/node12@1.0.11:
-
resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==}
-
dev: true
-
-
/@tsconfig/node14@1.0.3:
-
resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==}
-
dev: true
-
-
/@tsconfig/node16@1.0.4:
-
resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==}
-
dev: true
-
-
/@types/better-sqlite3@7.6.11:
-
resolution: {integrity: sha512-i8KcD3PgGtGBLl3+mMYA8PdKkButvPyARxA7IQAd6qeslht13qxb1zzO8dRCtE7U3IoJS782zDBAeoKiM695kg==}
-
dependencies:
-
'@types/node': 22.1.0
-
dev: true
-
-
/@types/body-parser@1.19.5:
-
resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==}
-
dependencies:
-
'@types/connect': 3.4.38
-
'@types/node': 22.1.0
-
dev: true
-
-
/@types/connect@3.4.38:
-
resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
-
dependencies:
-
'@types/node': 22.1.0
-
dev: true
-
-
/@types/cors@2.8.17:
-
resolution: {integrity: sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==}
-
dependencies:
-
'@types/node': 22.1.0
-
dev: true
-
-
/@types/estree@1.0.5:
-
resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==}
-
dev: true
-
-
/@types/express-serve-static-core@4.19.5:
-
resolution: {integrity: sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==}
-
dependencies:
-
'@types/node': 22.1.0
-
'@types/qs': 6.9.15
-
'@types/range-parser': 1.2.7
-
'@types/send': 0.17.4
-
dev: true
-
-
/@types/express@4.17.21:
-
resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==}
-
dependencies:
-
'@types/body-parser': 1.19.5
-
'@types/express-serve-static-core': 4.19.5
-
'@types/qs': 6.9.15
-
'@types/serve-static': 1.15.7
-
dev: true
-
-
/@types/http-errors@2.0.4:
-
resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==}
-
dev: true
-
-
/@types/mime@1.3.5:
-
resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==}
-
dev: true
-
-
/@types/node@22.1.0:
-
resolution: {integrity: sha512-AOmuRF0R2/5j1knA3c6G3HOk523Ga+l+ZXltX8SF1+5oqcXijjfTd8fY3XRZqSihEu9XhtQnKYLmkFaoxgsJHw==}
-
dependencies:
-
undici-types: 6.13.0
-
dev: true
-
-
/@types/qs@6.9.15:
-
resolution: {integrity: sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==}
-
dev: true
-
-
/@types/range-parser@1.2.7:
-
resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==}
-
dev: true
-
-
/@types/send@0.17.4:
-
resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==}
-
dependencies:
-
'@types/mime': 1.3.5
-
'@types/node': 22.1.0
-
dev: true
-
-
/@types/serve-static@1.15.7:
-
resolution: {integrity: sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==}
-
dependencies:
-
'@types/http-errors': 2.0.4
-
'@types/node': 22.1.0
-
'@types/send': 0.17.4
-
dev: true
-
-
/@vitest/expect@2.0.5:
-
resolution: {integrity: sha512-yHZtwuP7JZivj65Gxoi8upUN2OzHTi3zVfjwdpu2WrvCZPLwsJ2Ey5ILIPccoW23dd/zQBlJ4/dhi7DWNyXCpA==}
-
dependencies:
-
'@vitest/spy': 2.0.5
-
'@vitest/utils': 2.0.5
-
chai: 5.1.1
-
tinyrainbow: 1.2.0
-
dev: true
-
-
/@vitest/pretty-format@2.0.5:
-
resolution: {integrity: sha512-h8k+1oWHfwTkyTkb9egzwNMfJAEx4veaPSnMeKbVSjp4euqGSbQlm5+6VHwTr7u4FJslVVsUG5nopCaAYdOmSQ==}
-
dependencies:
-
tinyrainbow: 1.2.0
-
dev: true
-
-
/@vitest/runner@2.0.5:
-
resolution: {integrity: sha512-TfRfZa6Bkk9ky4tW0z20WKXFEwwvWhRY+84CnSEtq4+3ZvDlJyY32oNTJtM7AW9ihW90tX/1Q78cb6FjoAs+ig==}
-
dependencies:
-
'@vitest/utils': 2.0.5
-
pathe: 1.1.2
-
dev: true
-
-
/@vitest/snapshot@2.0.5:
-
resolution: {integrity: sha512-SgCPUeDFLaM0mIUHfaArq8fD2WbaXG/zVXjRupthYfYGzc8ztbFbu6dUNOblBG7XLMR1kEhS/DNnfCZ2IhdDew==}
-
dependencies:
-
'@vitest/pretty-format': 2.0.5
-
magic-string: 0.30.11
-
pathe: 1.1.2
-
dev: true
-
-
/@vitest/spy@2.0.5:
-
resolution: {integrity: sha512-c/jdthAhvJdpfVuaexSrnawxZz6pywlTPe84LUB2m/4t3rl2fTo9NFGBG4oWgaD+FTgDDV8hJ/nibT7IfH3JfA==}
-
dependencies:
-
tinyspy: 3.0.0
-
dev: true
-
-
/@vitest/utils@2.0.5:
-
resolution: {integrity: sha512-d8HKbqIcya+GR67mkZbrzhS5kKhtp8dQLcmRZLGTscGVg7yImT82cIrhtn2L8+VujWcy6KZweApgNmPsTAO/UQ==}
-
dependencies:
-
'@vitest/pretty-format': 2.0.5
-
estree-walker: 3.0.3
-
loupe: 3.1.1
-
tinyrainbow: 1.2.0
-
dev: true
-
-
/@webreflection/signal@2.1.2:
-
resolution: {integrity: sha512-0dW0fstQQkIt588JwhDiPS4xgeeQcQnBHn6MVInrBzmFlnLtzoSJL9G7JqdAlZVVi19tfb8R1QisZIT31cgiug==}
-
requiresBuild: true
-
dev: false
-
optional: true
-
-
/@webreflection/uparser@0.3.3:
-
resolution: {integrity: sha512-XxGfo8jr2eVuvP5lrmwjgMAM7QjtZ0ngFD+dd9Fd3GStcEb4QhLlTiqZYF5O3l5k4sU/V6ZiPrVCzCWXWFEmCw==}
-
dependencies:
-
domconstants: 1.1.6
-
dev: false
-
-
/abort-controller@3.0.0:
-
resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==}
-
engines: {node: '>=6.5'}
-
dependencies:
-
event-target-shim: 5.0.1
-
-
/accepts@1.3.8:
-
resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==}
-
engines: {node: '>= 0.6'}
-
dependencies:
-
mime-types: 2.1.35
-
negotiator: 0.6.3
-
dev: false
-
-
/acorn-walk@8.3.3:
-
resolution: {integrity: sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==}
-
engines: {node: '>=0.4.0'}
-
dependencies:
-
acorn: 8.12.1
-
dev: true
-
-
/acorn@8.12.1:
-
resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==}
-
engines: {node: '>=0.4.0'}
-
hasBin: true
-
dev: true
-
-
/ansi-escapes@7.0.0:
-
resolution: {integrity: sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==}
-
engines: {node: '>=18'}
-
dependencies:
-
environment: 1.1.0
-
dev: true
-
-
/ansi-regex@5.0.1:
-
resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
-
engines: {node: '>=8'}
-
dev: true
-
-
/ansi-regex@6.0.1:
-
resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==}
-
engines: {node: '>=12'}
-
dev: true
-
-
/ansi-styles@4.3.0:
-
resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
-
engines: {node: '>=8'}
-
dependencies:
-
color-convert: 2.0.1
-
dev: true
-
-
/ansi-styles@6.2.1:
-
resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
-
engines: {node: '>=12'}
-
dev: true
-
-
/any-promise@1.3.0:
-
resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==}
-
dev: true
-
-
/anymatch@3.1.3:
-
resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
-
engines: {node: '>= 8'}
-
dependencies:
-
normalize-path: 3.0.0
-
picomatch: 2.3.1
-
dev: true
-
-
/arg@4.1.3:
-
resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==}
-
dev: true
-
-
/array-flatten@1.1.1:
-
resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==}
-
dev: false
-
-
/array-union@2.1.0:
-
resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
-
engines: {node: '>=8'}
-
dev: true
-
-
/asap@2.0.6:
-
resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==}
-
dev: true
-
-
/assertion-error@2.0.1:
-
resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==}
-
engines: {node: '>=12'}
-
dev: true
-
-
/asynckit@0.4.0:
-
resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
-
dev: true
-
-
/atomic-sleep@1.0.0:
-
resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==}
-
engines: {node: '>=8.0.0'}
-
-
/await-lock@2.2.2:
-
resolution: {integrity: sha512-aDczADvlvTGajTDjcjpJMqRkOF6Qdz3YbPZm/PyW6tKPkx2hlYBzxMhEywM/tU72HrVZjgl5VCdRuMlA7pZ8Gw==}
-
dev: false
-
-
/balanced-match@1.0.2:
-
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
-
dev: true
-
-
/base64-js@1.5.1:
-
resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
-
-
/better-sqlite3@11.1.2:
-
resolution: {integrity: sha512-gujtFwavWU4MSPT+h9B+4pkvZdyOUkH54zgLdIrMmmmd4ZqiBIrRNBzNzYVFO417xo882uP5HBu4GjOfaSrIQw==}
-
requiresBuild: true
-
dependencies:
-
bindings: 1.5.0
-
prebuild-install: 7.1.2
-
dev: false
-
-
/binary-extensions@2.3.0:
-
resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
-
engines: {node: '>=8'}
-
dev: true
-
-
/bindings@1.5.0:
-
resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==}
-
dependencies:
-
file-uri-to-path: 1.0.0
-
dev: false
-
-
/bl@4.1.0:
-
resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==}
-
dependencies:
-
buffer: 5.7.1
-
inherits: 2.0.4
-
readable-stream: 3.6.2
-
dev: false
-
-
/body-parser@1.20.2:
-
resolution: {integrity: sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==}
-
engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
-
dependencies:
-
bytes: 3.1.2
-
content-type: 1.0.5
-
debug: 2.6.9
-
depd: 2.0.0
-
destroy: 1.2.0
-
http-errors: 2.0.0
-
iconv-lite: 0.4.24
-
on-finished: 2.4.1
-
qs: 6.11.0
-
raw-body: 2.5.2
-
type-is: 1.6.18
-
unpipe: 1.0.0
-
transitivePeerDependencies:
-
- supports-color
-
dev: false
-
-
/brace-expansion@2.0.1:
-
resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
-
dependencies:
-
balanced-match: 1.0.2
-
dev: true
-
-
/braces@3.0.3:
-
resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
-
engines: {node: '>=8'}
-
dependencies:
-
fill-range: 7.1.1
-
dev: true
-
-
/buffer@5.7.1:
-
resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
-
dependencies:
-
base64-js: 1.5.1
-
ieee754: 1.2.1
-
dev: false
-
-
/buffer@6.0.3:
-
resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
-
dependencies:
-
base64-js: 1.5.1
-
ieee754: 1.2.1
-
-
/bundle-require@5.0.0(esbuild@0.23.0):
-
resolution: {integrity: sha512-GuziW3fSSmopcx4KRymQEJVbZUfqlCqcq7dvs6TYwKRZiegK/2buMxQTPs6MGlNv50wms1699qYO54R8XfRX4w==}
-
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
peerDependencies:
-
esbuild: '>=0.18'
-
dependencies:
-
esbuild: 0.23.0
-
load-tsconfig: 0.2.5
-
dev: true
-
-
/bytes@3.1.2:
-
resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==}
-
engines: {node: '>= 0.8'}
-
dev: false
-
-
/cac@6.7.14:
-
resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
-
engines: {node: '>=8'}
-
dev: true
-
-
/call-bind@1.0.7:
-
resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==}
-
engines: {node: '>= 0.4'}
-
dependencies:
-
es-define-property: 1.0.0
-
es-errors: 1.3.0
-
function-bind: 1.1.2
-
get-intrinsic: 1.2.4
-
set-function-length: 1.2.2
-
-
/cbor-extract@2.2.0:
-
resolution: {integrity: sha512-Ig1zM66BjLfTXpNgKpvBePq271BPOvu8MR0Jl080yG7Jsl+wAZunfrwiwA+9ruzm/WEdIV5QF/bjDZTqyAIVHA==}
-
hasBin: true
-
requiresBuild: true
-
dependencies:
-
node-gyp-build-optional-packages: 5.1.1
-
optionalDependencies:
-
'@cbor-extract/cbor-extract-darwin-arm64': 2.2.0
-
'@cbor-extract/cbor-extract-darwin-x64': 2.2.0
-
'@cbor-extract/cbor-extract-linux-arm': 2.2.0
-
'@cbor-extract/cbor-extract-linux-arm64': 2.2.0
-
'@cbor-extract/cbor-extract-linux-x64': 2.2.0
-
'@cbor-extract/cbor-extract-win32-x64': 2.2.0
-
dev: false
-
optional: true
-
-
/cbor-x@1.6.0:
-
resolution: {integrity: sha512-0kareyRwHSkL6ws5VXHEf8uY1liitysCVJjlmhaLG+IXLqhSaOO+t63coaso7yjwEzWZzLy8fJo06gZDVQM9Qg==}
-
optionalDependencies:
-
cbor-extract: 2.2.0
-
dev: false
-
-
/cborg@1.10.2:
-
resolution: {integrity: sha512-b3tFPA9pUr2zCUiCfRd2+wok2/LBSNUMKOuRRok+WlvvAgEt/PlbgPTsZUcwCOs53IJvLgTp0eotwtosE6njug==}
-
hasBin: true
-
dev: false
-
-
/chai@5.1.1:
-
resolution: {integrity: sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA==}
-
engines: {node: '>=12'}
-
dependencies:
-
assertion-error: 2.0.1
-
check-error: 2.1.1
-
deep-eql: 5.0.2
-
loupe: 3.1.1
-
pathval: 2.0.0
-
dev: true
-
-
/chalk@4.1.2:
-
resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
-
engines: {node: '>=10'}
-
dependencies:
-
ansi-styles: 4.3.0
-
supports-color: 7.2.0
-
dev: true
-
-
/chalk@5.3.0:
-
resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==}
-
engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
-
dev: true
-
-
/check-error@2.1.1:
-
resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==}
-
engines: {node: '>= 16'}
-
dev: true
-
-
/chokidar@3.6.0:
-
resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
-
engines: {node: '>= 8.10.0'}
-
dependencies:
-
anymatch: 3.1.3
-
braces: 3.0.3
-
glob-parent: 5.1.2
-
is-binary-path: 2.1.0
-
is-glob: 4.0.3
-
normalize-path: 3.0.0
-
readdirp: 3.6.0
-
optionalDependencies:
-
fsevents: 2.3.3
-
dev: true
-
-
/chownr@1.1.4:
-
resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==}
-
dev: false
-
-
/cli-cursor@5.0.0:
-
resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==}
-
engines: {node: '>=18'}
-
dependencies:
-
restore-cursor: 5.1.0
-
dev: true
-
-
/cli-truncate@4.0.0:
-
resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==}
-
engines: {node: '>=18'}
-
dependencies:
-
slice-ansi: 5.0.0
-
string-width: 7.2.0
-
dev: true
-
-
/code-block-writer@11.0.3:
-
resolution: {integrity: sha512-NiujjUFB4SwScJq2bwbYUtXbZhBSlY6vYzm++3Q6oC+U+injTqfPYFK8wS9COOmb2lueqp0ZRB4nK1VYeHgNyw==}
-
dev: true
-
-
/color-convert@2.0.1:
-
resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
-
engines: {node: '>=7.0.0'}
-
dependencies:
-
color-name: 1.1.4
-
dev: true
-
-
/color-name@1.1.4:
-
resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
-
dev: true
-
-
/colorette@2.0.20:
-
resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==}
-
dev: true
-
-
/combined-stream@1.0.8:
-
resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
-
engines: {node: '>= 0.8'}
-
dependencies:
-
delayed-stream: 1.0.0
-
dev: true
-
-
/commander@12.1.0:
-
resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==}
-
engines: {node: '>=18'}
-
dev: true
-
-
/commander@4.1.1:
-
resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
-
engines: {node: '>= 6'}
-
dev: true
-
-
/commander@9.5.0:
-
resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==}
-
engines: {node: ^12.20.0 || >=14}
-
dev: true
-
-
/component-emitter@1.3.1:
-
resolution: {integrity: sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==}
-
dev: true
-
-
/consola@3.2.3:
-
resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==}
-
engines: {node: ^14.18.0 || >=16.10.0}
-
dev: true
-
-
/content-disposition@0.5.4:
-
resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==}
-
engines: {node: '>= 0.6'}
-
dependencies:
-
safe-buffer: 5.2.1
-
dev: false
-
-
/content-type@1.0.5:
-
resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==}
-
engines: {node: '>= 0.6'}
-
dev: false
-
-
/cookie-signature@1.0.6:
-
resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==}
-
dev: false
-
-
/cookie@0.6.0:
-
resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==}
-
engines: {node: '>= 0.6'}
-
dev: false
-
-
/cookiejar@2.1.4:
-
resolution: {integrity: sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==}
-
dev: true
-
-
/cors@2.8.5:
-
resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==}
-
engines: {node: '>= 0.10'}
-
dependencies:
-
object-assign: 4.1.1
-
vary: 1.1.2
-
dev: false
-
-
/create-require@1.1.1:
-
resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==}
-
dev: true
-
-
/cross-spawn@7.0.3:
-
resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
-
engines: {node: '>= 8'}
-
dependencies:
-
path-key: 3.1.1
-
shebang-command: 2.0.0
-
which: 2.0.2
-
dev: true
-
-
/custom-function@1.0.6:
-
resolution: {integrity: sha512-styyvwOki/EYr+VBe7/m9xAjq6uKx87SpDKIpFRdTQnofBDSZpBEFc9qJLmaJihjjTeEpAIJ+nz+9fUXj+BPNQ==}
-
dev: false
-
-
/dateformat@4.6.3:
-
resolution: {integrity: sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==}
-
dev: true
-
-
/debug@2.6.9:
-
resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
-
peerDependencies:
-
supports-color: '*'
-
peerDependenciesMeta:
-
supports-color:
-
optional: true
-
dependencies:
-
ms: 2.0.0
-
dev: false
-
-
/debug@4.3.6:
-
resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==}
-
engines: {node: '>=6.0'}
-
peerDependencies:
-
supports-color: '*'
-
peerDependenciesMeta:
-
supports-color:
-
optional: true
-
dependencies:
-
ms: 2.1.2
-
dev: true
-
-
/decompress-response@6.0.0:
-
resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==}
-
engines: {node: '>=10'}
-
dependencies:
-
mimic-response: 3.1.0
-
dev: false
-
-
/deep-eql@5.0.2:
-
resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==}
-
engines: {node: '>=6'}
-
dev: true
-
-
/deep-extend@0.6.0:
-
resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==}
-
engines: {node: '>=4.0.0'}
-
dev: false
-
-
/define-data-property@1.1.4:
-
resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
-
engines: {node: '>= 0.4'}
-
dependencies:
-
es-define-property: 1.0.0
-
es-errors: 1.3.0
-
gopd: 1.0.1
-
-
/delayed-stream@1.0.0:
-
resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
-
engines: {node: '>=0.4.0'}
-
dev: true
-
-
/depd@2.0.0:
-
resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==}
-
engines: {node: '>= 0.8'}
-
dev: false
-
-
/destroy@1.2.0:
-
resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==}
-
engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
-
dev: false
-
-
/detect-libc@2.0.3:
-
resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==}
-
engines: {node: '>=8'}
-
dev: false
-
-
/dezalgo@1.0.4:
-
resolution: {integrity: sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==}
-
dependencies:
-
asap: 2.0.6
-
wrappy: 1.0.2
-
dev: true
-
-
/diff@4.0.2:
-
resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==}
-
engines: {node: '>=0.3.1'}
-
dev: true
-
-
/dir-glob@3.0.1:
-
resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
-
engines: {node: '>=8'}
-
dependencies:
-
path-type: 4.0.0
-
dev: true
-
-
/dom-serializer@2.0.0:
-
resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==}
-
dependencies:
-
domelementtype: 2.3.0
-
domhandler: 5.0.3
-
entities: 4.5.0
-
dev: false
-
-
/domconstants@1.1.6:
-
resolution: {integrity: sha512-CuaDrThJ4VM+LyZ4ax8n52k0KbLJZtffyGkuj1WhpTRRcSfcy/9DfOBa68jenhX96oNUTunblSJEUNC4baFdmQ==}
-
dev: false
-
-
/domelementtype@2.3.0:
-
resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==}
-
dev: false
-
-
/domhandler@5.0.3:
-
resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==}
-
engines: {node: '>= 4'}
-
dependencies:
-
domelementtype: 2.3.0
-
dev: false
-
-
/domutils@3.1.0:
-
resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==}
-
dependencies:
-
dom-serializer: 2.0.0
-
domelementtype: 2.3.0
-
domhandler: 5.0.3
-
dev: false
-
-
/dotenv@16.4.5:
-
resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==}
-
engines: {node: '>=12'}
-
dev: false
-
-
/eastasianwidth@0.2.0:
-
resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
-
dev: true
-
-
/ee-first@1.1.1:
-
resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
-
dev: false
-
-
/emoji-regex@10.3.0:
-
resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==}
-
dev: true
-
-
/emoji-regex@8.0.0:
-
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
-
dev: true
-
-
/emoji-regex@9.2.2:
-
resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
-
dev: true
-
-
/encodeurl@1.0.2:
-
resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==}
-
engines: {node: '>= 0.8'}
-
dev: false
-
-
/end-of-stream@1.4.4:
-
resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==}
-
dependencies:
-
once: 1.4.0
-
-
/entities@4.5.0:
-
resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
-
engines: {node: '>=0.12'}
-
dev: false
-
-
/envalid@8.0.0:
-
resolution: {integrity: sha512-PGeYJnJB5naN0ME6SH8nFcDj9HVbLpYIfg1p5lAyM9T4cH2lwtu2fLbozC/bq+HUUOIFxhX/LP0/GmlqPHT4tQ==}
-
engines: {node: '>=8.12'}
-
dependencies:
-
tslib: 2.6.2
-
dev: false
-
-
/environment@1.1.0:
-
resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==}
-
engines: {node: '>=18'}
-
dev: true
-
-
/es-define-property@1.0.0:
-
resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==}
-
engines: {node: '>= 0.4'}
-
dependencies:
-
get-intrinsic: 1.2.4
-
-
/es-errors@1.3.0:
-
resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
-
engines: {node: '>= 0.4'}
-
-
/esbuild@0.21.5:
-
resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==}
-
engines: {node: '>=12'}
-
hasBin: true
-
requiresBuild: true
-
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
-
dev: true
-
-
/esbuild@0.23.0:
-
resolution: {integrity: sha512-1lvV17H2bMYda/WaFb2jLPeHU3zml2k4/yagNMG8Q/YtfMjCwEUZa2eXXMgZTVSL5q1n4H7sQ0X6CdJDqqeCFA==}
-
engines: {node: '>=18'}
-
hasBin: true
-
requiresBuild: true
-
optionalDependencies:
-
'@esbuild/aix-ppc64': 0.23.0
-
'@esbuild/android-arm': 0.23.0
-
'@esbuild/android-arm64': 0.23.0
-
'@esbuild/android-x64': 0.23.0
-
'@esbuild/darwin-arm64': 0.23.0
-
'@esbuild/darwin-x64': 0.23.0
-
'@esbuild/freebsd-arm64': 0.23.0
-
'@esbuild/freebsd-x64': 0.23.0
-
'@esbuild/linux-arm': 0.23.0
-
'@esbuild/linux-arm64': 0.23.0
-
'@esbuild/linux-ia32': 0.23.0
-
'@esbuild/linux-loong64': 0.23.0
-
'@esbuild/linux-mips64el': 0.23.0
-
'@esbuild/linux-ppc64': 0.23.0
-
'@esbuild/linux-riscv64': 0.23.0
-
'@esbuild/linux-s390x': 0.23.0
-
'@esbuild/linux-x64': 0.23.0
-
'@esbuild/netbsd-x64': 0.23.0
-
'@esbuild/openbsd-arm64': 0.23.0
-
'@esbuild/openbsd-x64': 0.23.0
-
'@esbuild/sunos-x64': 0.23.0
-
'@esbuild/win32-arm64': 0.23.0
-
'@esbuild/win32-ia32': 0.23.0
-
'@esbuild/win32-x64': 0.23.0
-
dev: true
-
-
/escape-html@1.0.3:
-
resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==}
-
dev: false
-
-
/estree-walker@3.0.3:
-
resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
-
dependencies:
-
'@types/estree': 1.0.5
-
dev: true
-
-
/etag@1.8.1:
-
resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==}
-
engines: {node: '>= 0.6'}
-
dev: false
-
-
/event-target-shim@5.0.1:
-
resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==}
-
engines: {node: '>=6'}
-
-
/eventemitter3@5.0.1:
-
resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
-
dev: true
-
-
/events@3.3.0:
-
resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==}
-
engines: {node: '>=0.8.x'}
-
-
/execa@5.1.1:
-
resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==}
-
engines: {node: '>=10'}
-
dependencies:
-
cross-spawn: 7.0.3
-
get-stream: 6.0.1
-
human-signals: 2.1.0
-
is-stream: 2.0.1
-
merge-stream: 2.0.0
-
npm-run-path: 4.0.1
-
onetime: 5.1.2
-
signal-exit: 3.0.7
-
strip-final-newline: 2.0.0
-
dev: true
-
-
/execa@8.0.1:
-
resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==}
-
engines: {node: '>=16.17'}
-
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.3.0
-
onetime: 6.0.0
-
signal-exit: 4.1.0
-
strip-final-newline: 3.0.0
-
dev: true
-
-
/expand-template@2.0.3:
-
resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==}
-
engines: {node: '>=6'}
-
dev: false
-
-
/express-rate-limit@7.4.0(express@4.19.2):
-
resolution: {integrity: sha512-v1204w3cXu5gCDmAvgvzI6qjzZzoMWKnyVDk3ACgfswTQLYiGen+r8w0VnXnGMmzEN/g8fwIQ4JrFFd4ZP6ssg==}
-
engines: {node: '>= 16'}
-
peerDependencies:
-
express: 4 || 5 || ^5.0.0-beta.1
-
dependencies:
-
express: 4.19.2
-
dev: false
-
-
/express@4.19.2:
-
resolution: {integrity: sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==}
-
engines: {node: '>= 0.10.0'}
-
dependencies:
-
accepts: 1.3.8
-
array-flatten: 1.1.1
-
body-parser: 1.20.2
-
content-disposition: 0.5.4
-
content-type: 1.0.5
-
cookie: 0.6.0
-
cookie-signature: 1.0.6
-
debug: 2.6.9
-
depd: 2.0.0
-
encodeurl: 1.0.2
-
escape-html: 1.0.3
-
etag: 1.8.1
-
finalhandler: 1.2.0
-
fresh: 0.5.2
-
http-errors: 2.0.0
-
merge-descriptors: 1.0.1
-
methods: 1.1.2
-
on-finished: 2.4.1
-
parseurl: 1.3.3
-
path-to-regexp: 0.1.7
-
proxy-addr: 2.0.7
-
qs: 6.11.0
-
range-parser: 1.2.1
-
safe-buffer: 5.2.1
-
send: 0.18.0
-
serve-static: 1.15.0
-
setprototypeof: 1.2.0
-
statuses: 2.0.1
-
type-is: 1.6.18
-
utils-merge: 1.0.1
-
vary: 1.1.2
-
transitivePeerDependencies:
-
- supports-color
-
dev: false
-
-
/fast-copy@3.0.2:
-
resolution: {integrity: sha512-dl0O9Vhju8IrcLndv2eU4ldt1ftXMqqfgN4H1cpmGV7P6jeB9FwpN9a2c8DPGE1Ys88rNUJVYDHq73CGAGOPfQ==}
-
dev: true
-
-
/fast-glob@3.3.2:
-
resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==}
-
engines: {node: '>=8.6.0'}
-
dependencies:
-
'@nodelib/fs.stat': 2.0.5
-
'@nodelib/fs.walk': 1.2.8
-
glob-parent: 5.1.2
-
merge2: 1.4.1
-
micromatch: 4.0.7
-
dev: true
-
-
/fast-redact@3.5.0:
-
resolution: {integrity: sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==}
-
engines: {node: '>=6'}
-
dev: false
-
-
/fast-safe-stringify@2.1.1:
-
resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==}
-
dev: true
-
-
/fastq@1.17.1:
-
resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==}
-
dependencies:
-
reusify: 1.0.4
-
dev: true
-
-
/file-uri-to-path@1.0.0:
-
resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
-
dev: false
-
-
/fill-range@7.1.1:
-
resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
-
engines: {node: '>=8'}
-
dependencies:
-
to-regex-range: 5.0.1
-
dev: true
-
-
/finalhandler@1.2.0:
-
resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==}
-
engines: {node: '>= 0.8'}
-
dependencies:
-
debug: 2.6.9
-
encodeurl: 1.0.2
-
escape-html: 1.0.3
-
on-finished: 2.4.1
-
parseurl: 1.3.3
-
statuses: 2.0.1
-
unpipe: 1.0.0
-
transitivePeerDependencies:
-
- supports-color
-
dev: false
-
-
/foreground-child@3.2.1:
-
resolution: {integrity: sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==}
-
engines: {node: '>=14'}
-
dependencies:
-
cross-spawn: 7.0.3
-
signal-exit: 4.1.0
-
dev: true
-
-
/form-data@4.0.0:
-
resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==}
-
engines: {node: '>= 6'}
-
dependencies:
-
asynckit: 0.4.0
-
combined-stream: 1.0.8
-
mime-types: 2.1.35
-
dev: true
-
-
/formidable@3.5.1:
-
resolution: {integrity: sha512-WJWKelbRHN41m5dumb0/k8TeAx7Id/y3a+Z7QfhxP/htI9Js5zYaEDtG8uMgG0vM0lOlqnmjE99/kfpOYi/0Og==}
-
dependencies:
-
dezalgo: 1.0.4
-
hexoid: 1.0.0
-
once: 1.4.0
-
dev: true
-
-
/forwarded@0.2.0:
-
resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==}
-
engines: {node: '>= 0.6'}
-
dev: false
-
-
/fresh@0.5.2:
-
resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==}
-
engines: {node: '>= 0.6'}
-
dev: false
-
-
/fs-constants@1.0.0:
-
resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==}
-
dev: false
-
-
/fsevents@2.3.3:
-
resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
-
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
-
os: [darwin]
-
requiresBuild: true
-
dev: true
-
optional: true
-
-
/function-bind@1.1.2:
-
resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
-
-
/gc-hook@0.3.1:
-
resolution: {integrity: sha512-E5M+O/h2o7eZzGhzRZGex6hbB3k4NWqO0eA+OzLRLXxhdbYPajZnynPwAtphnh+cRHPwsj5Z80dqZlfI4eK55A==}
-
dev: false
-
-
/get-caller-file@2.0.5:
-
resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
-
engines: {node: 6.* || 8.* || >= 10.*}
-
dev: false
-
-
/get-east-asian-width@1.2.0:
-
resolution: {integrity: sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==}
-
engines: {node: '>=18'}
-
dev: true
-
-
/get-func-name@2.0.2:
-
resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
-
dev: true
-
-
/get-intrinsic@1.2.4:
-
resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==}
-
engines: {node: '>= 0.4'}
-
dependencies:
-
es-errors: 1.3.0
-
function-bind: 1.1.2
-
has-proto: 1.0.3
-
has-symbols: 1.0.3
-
hasown: 2.0.2
-
-
/get-stream@6.0.1:
-
resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
-
engines: {node: '>=10'}
-
dev: true
-
-
/get-stream@8.0.1:
-
resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==}
-
engines: {node: '>=16'}
-
dev: true
-
-
/get-tsconfig@4.7.6:
-
resolution: {integrity: sha512-ZAqrLlu18NbDdRaHq+AKXzAmqIUPswPWKUchfytdAjiRFnCe5ojG2bstg6mRiZabkKfCoL/e98pbBELIV/YCeA==}
-
dependencies:
-
resolve-pkg-maps: 1.0.0
-
dev: true
-
-
/github-from-package@0.0.0:
-
resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==}
-
dev: false
-
-
/glob-parent@5.1.2:
-
resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
-
engines: {node: '>= 6'}
-
dependencies:
-
is-glob: 4.0.3
-
dev: true
-
-
/glob@10.4.5:
-
resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==}
-
hasBin: true
-
dependencies:
-
foreground-child: 3.2.1
-
jackspeak: 3.4.3
-
minimatch: 9.0.5
-
minipass: 7.1.2
-
package-json-from-dist: 1.0.0
-
path-scurry: 1.11.1
-
dev: true
-
-
/globby@11.1.0:
-
resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
-
engines: {node: '>=10'}
-
dependencies:
-
array-union: 2.1.0
-
dir-glob: 3.0.1
-
fast-glob: 3.3.2
-
ignore: 5.3.1
-
merge2: 1.4.1
-
slash: 3.0.0
-
dev: true
-
-
/globrex@0.1.2:
-
resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==}
-
dev: true
-
-
/gopd@1.0.1:
-
resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==}
-
dependencies:
-
get-intrinsic: 1.2.4
-
-
/graphemer@1.4.0:
-
resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
-
-
/has-flag@4.0.0:
-
resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
-
engines: {node: '>=8'}
-
dev: true
-
-
/has-property-descriptors@1.0.2:
-
resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==}
-
dependencies:
-
es-define-property: 1.0.0
-
-
/has-proto@1.0.3:
-
resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==}
-
engines: {node: '>= 0.4'}
-
-
/has-symbols@1.0.3:
-
resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==}
-
engines: {node: '>= 0.4'}
-
-
/hasown@2.0.2:
-
resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
-
engines: {node: '>= 0.4'}
-
dependencies:
-
function-bind: 1.1.2
-
-
/helmet@7.1.0:
-
resolution: {integrity: sha512-g+HZqgfbpXdCkme/Cd/mZkV0aV3BZZZSugecH03kl38m/Kmdx8jKjBikpDj2cr+Iynv4KpYEviojNdTJActJAg==}
-
engines: {node: '>=16.0.0'}
-
dev: false
-
-
/help-me@5.0.0:
-
resolution: {integrity: sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==}
-
dev: true
-
-
/hexoid@1.0.0:
-
resolution: {integrity: sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==}
-
engines: {node: '>=8'}
-
dev: true
-
-
/html-escaper@3.0.3:
-
resolution: {integrity: sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==}
-
dev: false
-
-
/htmlparser2@9.1.0:
-
resolution: {integrity: sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==}
-
dependencies:
-
domelementtype: 2.3.0
-
domhandler: 5.0.3
-
domutils: 3.1.0
-
entities: 4.5.0
-
dev: false
-
-
/http-errors@2.0.0:
-
resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==}
-
engines: {node: '>= 0.8'}
-
dependencies:
-
depd: 2.0.0
-
inherits: 2.0.4
-
setprototypeof: 1.2.0
-
statuses: 2.0.1
-
toidentifier: 1.0.1
-
dev: false
-
-
/http-status-codes@2.3.0:
-
resolution: {integrity: sha512-RJ8XvFvpPM/Dmc5SV+dC4y5PCeOhT3x1Hq0NU3rjGeg5a/CqlhZ7uudknPwZFz4aeAXDcbAyaeP7GAo9lvngtA==}
-
dev: false
-
-
/human-signals@2.1.0:
-
resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==}
-
engines: {node: '>=10.17.0'}
-
dev: true
-
-
/human-signals@5.0.0:
-
resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==}
-
engines: {node: '>=16.17.0'}
-
dev: true
-
-
/iconv-lite@0.4.24:
-
resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
-
engines: {node: '>=0.10.0'}
-
dependencies:
-
safer-buffer: 2.1.2
-
dev: false
-
-
/ieee754@1.2.1:
-
resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
-
-
/ignore@5.3.1:
-
resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==}
-
engines: {node: '>= 4'}
-
dev: true
-
-
/inherits@2.0.4:
-
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
-
dev: false
-
-
/ini@1.3.8:
-
resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==}
-
dev: false
-
-
/ipaddr.js@1.9.1:
-
resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==}
-
engines: {node: '>= 0.10'}
-
dev: false
-
-
/ipaddr.js@2.2.0:
-
resolution: {integrity: sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==}
-
engines: {node: '>= 10'}
-
dev: false
-
-
/iron-session@8.0.2:
-
resolution: {integrity: sha512-p4Yf1moQr6gnCcXu5vCaxVKRKDmR9PZcQDfp7ZOgbsSHUsgaNti6OgDB2BdgxC2aS6V/6Hu4O0wYlj92sbdIJg==}
-
dependencies:
-
cookie: 0.6.0
-
iron-webcrypto: 1.2.1
-
uncrypto: 0.1.3
-
dev: false
-
-
/iron-webcrypto@1.2.1:
-
resolution: {integrity: sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==}
-
dev: false
-
-
/is-binary-path@2.1.0:
-
resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
-
engines: {node: '>=8'}
-
dependencies:
-
binary-extensions: 2.3.0
-
dev: true
-
-
/is-extglob@2.1.1:
-
resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
-
engines: {node: '>=0.10.0'}
-
dev: true
-
-
/is-fullwidth-code-point@3.0.0:
-
resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
-
engines: {node: '>=8'}
-
dev: true
-
-
/is-fullwidth-code-point@4.0.0:
-
resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==}
-
engines: {node: '>=12'}
-
dev: true
-
-
/is-fullwidth-code-point@5.0.0:
-
resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==}
-
engines: {node: '>=18'}
-
dependencies:
-
get-east-asian-width: 1.2.0
-
dev: true
-
-
/is-glob@4.0.3:
-
resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
-
engines: {node: '>=0.10.0'}
-
dependencies:
-
is-extglob: 2.1.1
-
dev: true
-
-
/is-number@7.0.0:
-
resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
-
engines: {node: '>=0.12.0'}
-
dev: true
-
-
/is-stream@2.0.1:
-
resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}
-
engines: {node: '>=8'}
-
dev: true
-
-
/is-stream@3.0.0:
-
resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==}
-
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
dev: true
-
-
/isexe@2.0.0:
-
resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
-
dev: true
-
-
/iso-datestring-validator@2.2.2:
-
resolution: {integrity: sha512-yLEMkBbLZTlVQqOnQ4FiMujR6T4DEcCb1xizmvXS+OxuhwcbtynoosRzdMA69zZCShCNAbi+gJ71FxZBBXx1SA==}
-
-
/jackspeak@3.4.3:
-
resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
-
dependencies:
-
'@isaacs/cliui': 8.0.2
-
optionalDependencies:
-
'@pkgjs/parseargs': 0.11.0
-
dev: true
-
-
/jose@5.6.3:
-
resolution: {integrity: sha512-1Jh//hEEwMhNYPDDLwXHa2ePWgWiFNNUadVmguAAw2IJ6sj9mNxV5tGXJNqlMkJAybF6Lgw1mISDxTePP/187g==}
-
dev: false
-
-
/joycon@3.1.1:
-
resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==}
-
engines: {node: '>=10'}
-
dev: true
-
-
/kysely@0.27.4:
-
resolution: {integrity: sha512-dyNKv2KRvYOQPLCAOCjjQuCk4YFd33BvGdf/o5bC7FiW+BB6snA81Zt+2wT9QDFzKqxKa5rrOmvlK/anehCcgA==}
-
engines: {node: '>=14.0.0'}
-
dev: false
-
-
/lilconfig@3.1.2:
-
resolution: {integrity: sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==}
-
engines: {node: '>=14'}
-
dev: true
-
-
/lines-and-columns@1.2.4:
-
resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
-
dev: true
-
-
/lint-staged@15.2.8:
-
resolution: {integrity: sha512-PUWFf2zQzsd9EFU+kM1d7UP+AZDbKFKuj+9JNVTBkhUFhbg4MAt6WfyMMwBfM4lYqd4D2Jwac5iuTu9rVj4zCQ==}
-
engines: {node: '>=18.12.0'}
-
hasBin: 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
-
transitivePeerDependencies:
-
- supports-color
-
dev: true
-
-
/listr2@8.2.4:
-
resolution: {integrity: sha512-opevsywziHd3zHCVQGAj8zu+Z3yHNkkoYhWIGnq54RrCVwLz0MozotJEDnKsIBLvkfLGN6BLOyAeRrYI0pKA4g==}
-
engines: {node: '>=18.0.0'}
-
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
-
dev: true
-
-
/load-tsconfig@0.2.5:
-
resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==}
-
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
dev: true
-
-
/lodash.sortby@4.7.0:
-
resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==}
-
dev: true
-
-
/log-update@6.1.0:
-
resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==}
-
engines: {node: '>=18'}
-
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
-
dev: true
-
-
/loupe@3.1.1:
-
resolution: {integrity: sha512-edNu/8D5MKVfGVFRhFf8aAxiTM6Wumfz5XsaatSxlD3w4R1d/WEKUTydCdPGbl9K7QG/Ca3GnDV2sIKIpXRQcw==}
-
dependencies:
-
get-func-name: 2.0.2
-
dev: true
-
-
/lru-cache@10.4.3:
-
resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
-
-
/magic-string@0.30.11:
-
resolution: {integrity: sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==}
-
dependencies:
-
'@jridgewell/sourcemap-codec': 1.5.0
-
dev: true
-
-
/make-error@1.3.6:
-
resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
-
dev: true
-
-
/media-typer@0.3.0:
-
resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==}
-
engines: {node: '>= 0.6'}
-
dev: false
-
-
/merge-descriptors@1.0.1:
-
resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==}
-
dev: false
-
-
/merge-stream@2.0.0:
-
resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
-
dev: true
-
-
/merge2@1.4.1:
-
resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
-
engines: {node: '>= 8'}
-
dev: true
-
-
/methods@1.1.2:
-
resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==}
-
engines: {node: '>= 0.6'}
-
-
/micromatch@4.0.7:
-
resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==}
-
engines: {node: '>=8.6'}
-
dependencies:
-
braces: 3.0.3
-
picomatch: 2.3.1
-
dev: true
-
-
/mime-db@1.52.0:
-
resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
-
engines: {node: '>= 0.6'}
-
-
/mime-types@2.1.35:
-
resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
-
engines: {node: '>= 0.6'}
-
dependencies:
-
mime-db: 1.52.0
-
-
/mime@1.6.0:
-
resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==}
-
engines: {node: '>=4'}
-
hasBin: true
-
dev: false
-
-
/mime@2.6.0:
-
resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==}
-
engines: {node: '>=4.0.0'}
-
hasBin: true
-
dev: true
-
-
/mimic-fn@2.1.0:
-
resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
-
engines: {node: '>=6'}
-
dev: true
-
-
/mimic-fn@4.0.0:
-
resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==}
-
engines: {node: '>=12'}
-
dev: true
-
-
/mimic-function@5.0.1:
-
resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==}
-
engines: {node: '>=18'}
-
dev: true
-
-
/mimic-response@3.1.0:
-
resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==}
-
engines: {node: '>=10'}
-
dev: false
-
-
/minimatch@5.1.6:
-
resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==}
-
engines: {node: '>=10'}
-
dependencies:
-
brace-expansion: 2.0.1
-
dev: true
-
-
/minimatch@9.0.5:
-
resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
-
engines: {node: '>=16 || 14 >=14.17'}
-
dependencies:
-
brace-expansion: 2.0.1
-
dev: true
-
-
/minimist@1.2.8:
-
resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
-
-
/minipass@7.1.2:
-
resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
-
engines: {node: '>=16 || 14 >=14.17'}
-
dev: true
-
-
/mkdirp-classic@0.5.3:
-
resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==}
-
dev: false
-
-
/mkdirp@1.0.4:
-
resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==}
-
engines: {node: '>=10'}
-
hasBin: true
-
dev: true
-
-
/ms@2.0.0:
-
resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
-
dev: false
-
-
/ms@2.1.2:
-
resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
-
dev: true
-
-
/ms@2.1.3:
-
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
-
dev: false
-
-
/multiformats@9.9.0:
-
resolution: {integrity: sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==}
-
-
/mz@2.7.0:
-
resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==}
-
dependencies:
-
any-promise: 1.3.0
-
object-assign: 4.1.1
-
thenify-all: 1.6.0
-
dev: true
-
-
/nanoid@3.3.7:
-
resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==}
-
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
-
hasBin: true
-
dev: true
-
-
/napi-build-utils@1.0.2:
-
resolution: {integrity: sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==}
-
dev: false
-
-
/negotiator@0.6.3:
-
resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==}
-
engines: {node: '>= 0.6'}
-
dev: false
-
-
/node-abi@3.65.0:
-
resolution: {integrity: sha512-ThjYBfoDNr08AWx6hGaRbfPwxKV9kVzAzOzlLKbk2CuqXE2xnCh+cbAGnwM3t8Lq4v9rUB7VfondlkBckcJrVA==}
-
engines: {node: '>=10'}
-
dependencies:
-
semver: 7.6.3
-
dev: false
-
-
/node-gyp-build-optional-packages@5.1.1:
-
resolution: {integrity: sha512-+P72GAjVAbTxjjwUmwjVrqrdZROD4nf8KgpBoDxqXXTiYZZt/ud60dE5yvCSr9lRO8e8yv6kgJIC0K0PfZFVQw==}
-
hasBin: true
-
requiresBuild: true
-
dependencies:
-
detect-libc: 2.0.3
-
dev: false
-
optional: true
-
-
/normalize-path@3.0.0:
-
resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
-
engines: {node: '>=0.10.0'}
-
dev: true
-
-
/npm-run-path@4.0.1:
-
resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==}
-
engines: {node: '>=8'}
-
dependencies:
-
path-key: 3.1.1
-
dev: true
-
-
/npm-run-path@5.3.0:
-
resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==}
-
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
dependencies:
-
path-key: 4.0.0
-
dev: true
-
-
/object-assign@4.1.1:
-
resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
-
engines: {node: '>=0.10.0'}
-
-
/object-inspect@1.13.2:
-
resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==}
-
engines: {node: '>= 0.4'}
-
-
/on-exit-leak-free@2.1.2:
-
resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==}
-
engines: {node: '>=14.0.0'}
-
-
/on-finished@2.4.1:
-
resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==}
-
engines: {node: '>= 0.8'}
-
dependencies:
-
ee-first: 1.1.1
-
dev: false
-
-
/once@1.4.0:
-
resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
-
dependencies:
-
wrappy: 1.0.2
-
-
/onetime@5.1.2:
-
resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
-
engines: {node: '>=6'}
-
dependencies:
-
mimic-fn: 2.1.0
-
dev: true
-
-
/onetime@6.0.0:
-
resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==}
-
engines: {node: '>=12'}
-
dependencies:
-
mimic-fn: 4.0.0
-
dev: true
-
-
/onetime@7.0.0:
-
resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==}
-
engines: {node: '>=18'}
-
dependencies:
-
mimic-function: 5.0.1
-
dev: true
-
-
/package-json-from-dist@1.0.0:
-
resolution: {integrity: sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==}
-
dev: true
-
-
/parseurl@1.3.3:
-
resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==}
-
engines: {node: '>= 0.8'}
-
dev: false
-
-
/path-browserify@1.0.1:
-
resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==}
-
dev: true
-
-
/path-key@3.1.1:
-
resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
-
engines: {node: '>=8'}
-
dev: true
-
-
/path-key@4.0.0:
-
resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==}
-
engines: {node: '>=12'}
-
dev: true
-
-
/path-scurry@1.11.1:
-
resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
-
engines: {node: '>=16 || 14 >=14.18'}
-
dependencies:
-
lru-cache: 10.4.3
-
minipass: 7.1.2
-
dev: true
-
-
/path-to-regexp@0.1.7:
-
resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==}
-
dev: false
-
-
/path-type@4.0.0:
-
resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
-
engines: {node: '>=8'}
-
dev: true
-
-
/pathe@1.1.2:
-
resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==}
-
dev: true
-
-
/pathval@2.0.0:
-
resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==}
-
engines: {node: '>= 14.16'}
-
dev: true
-
-
/picocolors@1.0.1:
-
resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==}
-
dev: true
-
-
/picomatch@2.3.1:
-
resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
-
engines: {node: '>=8.6'}
-
dev: true
-
-
/pidtree@0.6.0:
-
resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==}
-
engines: {node: '>=0.10'}
-
hasBin: true
-
dev: true
-
-
/pino-abstract-transport@1.2.0:
-
resolution: {integrity: sha512-Guhh8EZfPCfH+PMXAb6rKOjGQEoy0xlAIn+irODG5kgfYV+BQ0rGYYWTIel3P5mmyXqkYkPmdIkywsn6QKUR1Q==}
-
dependencies:
-
readable-stream: 4.5.2
-
split2: 4.2.0
-
-
/pino-http@10.2.0:
-
resolution: {integrity: sha512-am03BxnV3Ckx68OkbH0iZs3indsrH78wncQ6w1w51KroIbvJZNImBKX2X1wjdY8lSyaJ0UrX/dnO2DY3cTeCRw==}
-
dependencies:
-
get-caller-file: 2.0.5
-
pino: 9.3.2
-
pino-std-serializers: 7.0.0
-
process-warning: 3.0.0
-
dev: false
-
-
/pino-pretty@11.2.2:
-
resolution: {integrity: sha512-2FnyGir8nAJAqD3srROdrF1J5BIcMT4nwj7hHSc60El6Uxlym00UbCCd8pYIterstVBFlMyF1yFV8XdGIPbj4A==}
-
hasBin: true
-
dependencies:
-
colorette: 2.0.20
-
dateformat: 4.6.3
-
fast-copy: 3.0.2
-
fast-safe-stringify: 2.1.1
-
help-me: 5.0.0
-
joycon: 3.1.1
-
minimist: 1.2.8
-
on-exit-leak-free: 2.1.2
-
pino-abstract-transport: 1.2.0
-
pump: 3.0.0
-
readable-stream: 4.5.2
-
secure-json-parse: 2.7.0
-
sonic-boom: 4.0.1
-
strip-json-comments: 3.1.1
-
dev: true
-
-
/pino-std-serializers@6.2.2:
-
resolution: {integrity: sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA==}
-
dev: false
-
-
/pino-std-serializers@7.0.0:
-
resolution: {integrity: sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==}
-
dev: false
-
-
/pino@8.21.0:
-
resolution: {integrity: sha512-ip4qdzjkAyDDZklUaZkcRFb2iA118H9SgRh8yzTkSQK8HilsOJF7rSY8HoW5+I0M46AZgX/pxbprf2vvzQCE0Q==}
-
hasBin: true
-
dependencies:
-
atomic-sleep: 1.0.0
-
fast-redact: 3.5.0
-
on-exit-leak-free: 2.1.2
-
pino-abstract-transport: 1.2.0
-
pino-std-serializers: 6.2.2
-
process-warning: 3.0.0
-
quick-format-unescaped: 4.0.4
-
real-require: 0.2.0
-
safe-stable-stringify: 2.4.3
-
sonic-boom: 3.8.1
-
thread-stream: 2.7.0
-
dev: false
-
-
/pino@9.3.2:
-
resolution: {integrity: sha512-WtARBjgZ7LNEkrGWxMBN/jvlFiE17LTbBoH0konmBU684Kd0uIiDwBXlcTCW7iJnA6HfIKwUssS/2AC6cDEanw==}
-
hasBin: true
-
dependencies:
-
atomic-sleep: 1.0.0
-
fast-redact: 3.5.0
-
on-exit-leak-free: 2.1.2
-
pino-abstract-transport: 1.2.0
-
pino-std-serializers: 7.0.0
-
process-warning: 4.0.0
-
quick-format-unescaped: 4.0.4
-
real-require: 0.2.0
-
safe-stable-stringify: 2.4.3
-
sonic-boom: 4.0.1
-
thread-stream: 3.1.0
-
dev: false
-
-
/pirates@4.0.6:
-
resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==}
-
engines: {node: '>= 6'}
-
dev: true
-
-
/postcss-load-config@6.0.1(tsx@4.16.5):
-
resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==}
-
engines: {node: '>= 18'}
-
peerDependencies:
-
jiti: '>=1.21.0'
-
postcss: '>=8.0.9'
-
tsx: ^4.8.1
-
yaml: ^2.4.2
-
peerDependenciesMeta:
-
jiti:
-
optional: true
-
postcss:
-
optional: true
-
tsx:
-
optional: true
-
yaml:
-
optional: true
-
dependencies:
-
lilconfig: 3.1.2
-
tsx: 4.16.5
-
dev: true
-
-
/postcss@8.4.41:
-
resolution: {integrity: sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==}
-
engines: {node: ^10 || ^12 || >=14}
-
dependencies:
-
nanoid: 3.3.7
-
picocolors: 1.0.1
-
source-map-js: 1.2.0
-
dev: true
-
-
/prebuild-install@7.1.2:
-
resolution: {integrity: sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==}
-
engines: {node: '>=10'}
-
hasBin: true
-
dependencies:
-
detect-libc: 2.0.3
-
expand-template: 2.0.3
-
github-from-package: 0.0.0
-
minimist: 1.2.8
-
mkdirp-classic: 0.5.3
-
napi-build-utils: 1.0.2
-
node-abi: 3.65.0
-
pump: 3.0.0
-
rc: 1.2.8
-
simple-get: 4.0.1
-
tar-fs: 2.1.1
-
tunnel-agent: 0.6.0
-
dev: false
-
-
/prettier@3.3.3:
-
resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==}
-
engines: {node: '>=14'}
-
hasBin: true
-
dev: true
-
-
/process-warning@3.0.0:
-
resolution: {integrity: sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==}
-
dev: false
-
-
/process-warning@4.0.0:
-
resolution: {integrity: sha512-/MyYDxttz7DfGMMHiysAsFE4qF+pQYAA8ziO/3NcRVrQ5fSk+Mns4QZA/oRPFzvcqNoVJXQNWNAsdwBXLUkQKw==}
-
dev: false
-
-
/process@0.11.10:
-
resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==}
-
engines: {node: '>= 0.6.0'}
-
-
/proxy-addr@2.0.7:
-
resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==}
-
engines: {node: '>= 0.10'}
-
dependencies:
-
forwarded: 0.2.0
-
ipaddr.js: 1.9.1
-
dev: false
-
-
/psl@1.9.0:
-
resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==}
-
dev: false
-
-
/pump@3.0.0:
-
resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==}
-
dependencies:
-
end-of-stream: 1.4.4
-
once: 1.4.0
-
-
/punycode@2.3.1:
-
resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
-
engines: {node: '>=6'}
-
dev: true
-
-
/qs@6.11.0:
-
resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==}
-
engines: {node: '>=0.6'}
-
dependencies:
-
side-channel: 1.0.6
-
dev: false
-
-
/qs@6.13.0:
-
resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==}
-
engines: {node: '>=0.6'}
-
dependencies:
-
side-channel: 1.0.6
-
dev: true
-
-
/queue-microtask@1.2.3:
-
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
-
dev: true
-
-
/quick-format-unescaped@4.0.4:
-
resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==}
-
dev: false
-
-
/range-parser@1.2.1:
-
resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==}
-
engines: {node: '>= 0.6'}
-
dev: false
-
-
/rate-limiter-flexible@2.4.2:
-
resolution: {integrity: sha512-rMATGGOdO1suFyf/mI5LYhts71g1sbdhmd6YvdiXO2gJnd42Tt6QS4JUKJKSWVVkMtBacm6l40FR7Trjo6Iruw==}
-
dev: false
-
-
/raw-body@2.5.2:
-
resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==}
-
engines: {node: '>= 0.8'}
-
dependencies:
-
bytes: 3.1.2
-
http-errors: 2.0.0
-
iconv-lite: 0.4.24
-
unpipe: 1.0.0
-
dev: false
-
-
/rc@1.2.8:
-
resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==}
-
hasBin: true
-
dependencies:
-
deep-extend: 0.6.0
-
ini: 1.3.8
-
minimist: 1.2.8
-
strip-json-comments: 2.0.1
-
dev: false
-
-
/readable-stream@3.6.2:
-
resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
-
engines: {node: '>= 6'}
-
dependencies:
-
inherits: 2.0.4
-
string_decoder: 1.3.0
-
util-deprecate: 1.0.2
-
dev: false
-
-
/readable-stream@4.5.2:
-
resolution: {integrity: sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==}
-
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-
dependencies:
-
abort-controller: 3.0.0
-
buffer: 6.0.3
-
events: 3.3.0
-
process: 0.11.10
-
string_decoder: 1.3.0
-
-
/readdirp@3.6.0:
-
resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
-
engines: {node: '>=8.10.0'}
-
dependencies:
-
picomatch: 2.3.1
-
dev: true
-
-
/real-require@0.2.0:
-
resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==}
-
engines: {node: '>= 12.13.0'}
-
dev: false
-
-
/resolve-from@5.0.0:
-
resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==}
-
engines: {node: '>=8'}
-
dev: true
-
-
/resolve-pkg-maps@1.0.0:
-
resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}
-
dev: true
-
-
/restore-cursor@5.1.0:
-
resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==}
-
engines: {node: '>=18'}
-
dependencies:
-
onetime: 7.0.0
-
signal-exit: 4.1.0
-
dev: true
-
-
/reusify@1.0.4:
-
resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
-
engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
-
dev: true
-
-
/rfdc@1.4.1:
-
resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==}
-
dev: true
-
-
/rimraf@5.0.10:
-
resolution: {integrity: sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==}
-
hasBin: true
-
dependencies:
-
glob: 10.4.5
-
dev: true
-
-
/rollup@4.20.0:
-
resolution: {integrity: sha512-6rbWBChcnSGzIlXeIdNIZTopKYad8ZG8ajhl78lGRLsI2rX8IkaotQhVas2Ma+GPxJav19wrSzvRvuiv0YKzWw==}
-
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
-
hasBin: true
-
dependencies:
-
'@types/estree': 1.0.5
-
optionalDependencies:
-
'@rollup/rollup-android-arm-eabi': 4.20.0
-
'@rollup/rollup-android-arm64': 4.20.0
-
'@rollup/rollup-darwin-arm64': 4.20.0
-
'@rollup/rollup-darwin-x64': 4.20.0
-
'@rollup/rollup-linux-arm-gnueabihf': 4.20.0
-
'@rollup/rollup-linux-arm-musleabihf': 4.20.0
-
'@rollup/rollup-linux-arm64-gnu': 4.20.0
-
'@rollup/rollup-linux-arm64-musl': 4.20.0
-
'@rollup/rollup-linux-powerpc64le-gnu': 4.20.0
-
'@rollup/rollup-linux-riscv64-gnu': 4.20.0
-
'@rollup/rollup-linux-s390x-gnu': 4.20.0
-
'@rollup/rollup-linux-x64-gnu': 4.20.0
-
'@rollup/rollup-linux-x64-musl': 4.20.0
-
'@rollup/rollup-win32-arm64-msvc': 4.20.0
-
'@rollup/rollup-win32-ia32-msvc': 4.20.0
-
'@rollup/rollup-win32-x64-msvc': 4.20.0
-
fsevents: 2.3.3
-
dev: true
-
-
/run-parallel@1.2.0:
-
resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
-
dependencies:
-
queue-microtask: 1.2.3
-
dev: true
-
-
/safe-buffer@5.2.1:
-
resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
-
-
/safe-stable-stringify@2.4.3:
-
resolution: {integrity: sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==}
-
engines: {node: '>=10'}
-
dev: false
-
-
/safer-buffer@2.1.2:
-
resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
-
dev: false
-
-
/secure-json-parse@2.7.0:
-
resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==}
-
dev: true
-
-
/semver@7.6.3:
-
resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==}
-
engines: {node: '>=10'}
-
hasBin: true
-
dev: false
-
-
/send@0.18.0:
-
resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==}
-
engines: {node: '>= 0.8.0'}
-
dependencies:
-
debug: 2.6.9
-
depd: 2.0.0
-
destroy: 1.2.0
-
encodeurl: 1.0.2
-
escape-html: 1.0.3
-
etag: 1.8.1
-
fresh: 0.5.2
-
http-errors: 2.0.0
-
mime: 1.6.0
-
ms: 2.1.3
-
on-finished: 2.4.1
-
range-parser: 1.2.1
-
statuses: 2.0.1
-
transitivePeerDependencies:
-
- supports-color
-
dev: false
-
-
/serve-static@1.15.0:
-
resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==}
-
engines: {node: '>= 0.8.0'}
-
dependencies:
-
encodeurl: 1.0.2
-
escape-html: 1.0.3
-
parseurl: 1.3.3
-
send: 0.18.0
-
transitivePeerDependencies:
-
- supports-color
-
dev: false
-
-
/set-function-length@1.2.2:
-
resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
-
engines: {node: '>= 0.4'}
-
dependencies:
-
define-data-property: 1.1.4
-
es-errors: 1.3.0
-
function-bind: 1.1.2
-
get-intrinsic: 1.2.4
-
gopd: 1.0.1
-
has-property-descriptors: 1.0.2
-
-
/setprototypeof@1.2.0:
-
resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==}
-
dev: false
-
-
/shebang-command@2.0.0:
-
resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
-
engines: {node: '>=8'}
-
dependencies:
-
shebang-regex: 3.0.0
-
dev: true
-
-
/shebang-regex@3.0.0:
-
resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
-
engines: {node: '>=8'}
-
dev: true
-
-
/side-channel@1.0.6:
-
resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==}
-
engines: {node: '>= 0.4'}
-
dependencies:
-
call-bind: 1.0.7
-
es-errors: 1.3.0
-
get-intrinsic: 1.2.4
-
object-inspect: 1.13.2
-
-
/siginfo@2.0.0:
-
resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==}
-
dev: true
-
-
/signal-exit@3.0.7:
-
resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
-
dev: true
-
-
/signal-exit@4.1.0:
-
resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
-
engines: {node: '>=14'}
-
dev: true
-
-
/simple-concat@1.0.1:
-
resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==}
-
dev: false
-
-
/simple-get@4.0.1:
-
resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==}
-
dependencies:
-
decompress-response: 6.0.0
-
once: 1.4.0
-
simple-concat: 1.0.1
-
dev: false
-
-
/slash@3.0.0:
-
resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
-
engines: {node: '>=8'}
-
dev: true
-
-
/slice-ansi@5.0.0:
-
resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==}
-
engines: {node: '>=12'}
-
dependencies:
-
ansi-styles: 6.2.1
-
is-fullwidth-code-point: 4.0.0
-
dev: true
-
-
/slice-ansi@7.1.0:
-
resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==}
-
engines: {node: '>=18'}
-
dependencies:
-
ansi-styles: 6.2.1
-
is-fullwidth-code-point: 5.0.0
-
dev: true
-
-
/sonic-boom@3.8.1:
-
resolution: {integrity: sha512-y4Z8LCDBuum+PBP3lSV7RHrXscqksve/bi0as7mhwVnBW+/wUqKT/2Kb7um8yqcFy0duYbbPxzt89Zy2nOCaxg==}
-
dependencies:
-
atomic-sleep: 1.0.0
-
dev: false
-
-
/sonic-boom@4.0.1:
-
resolution: {integrity: sha512-hTSD/6JMLyT4r9zeof6UtuBDpjJ9sO08/nmS5djaA9eozT9oOlNdpXSnzcgj4FTqpk3nkLrs61l4gip9r1HCrQ==}
-
dependencies:
-
atomic-sleep: 1.0.0
-
-
/source-map-js@1.2.0:
-
resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==}
-
engines: {node: '>=0.10.0'}
-
dev: true
-
-
/source-map@0.8.0-beta.0:
-
resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==}
-
engines: {node: '>= 8'}
-
dependencies:
-
whatwg-url: 7.1.0
-
dev: true
-
-
/split2@4.2.0:
-
resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==}
-
engines: {node: '>= 10.x'}
-
-
/stackback@0.0.2:
-
resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==}
-
dev: true
-
-
/statuses@2.0.1:
-
resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==}
-
engines: {node: '>= 0.8'}
-
dev: false
-
-
/std-env@3.7.0:
-
resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==}
-
dev: true
-
-
/string-argv@0.3.2:
-
resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==}
-
engines: {node: '>=0.6.19'}
-
dev: true
-
-
/string-width@4.2.3:
-
resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
-
engines: {node: '>=8'}
-
dependencies:
-
emoji-regex: 8.0.0
-
is-fullwidth-code-point: 3.0.0
-
strip-ansi: 6.0.1
-
dev: true
-
-
/string-width@5.1.2:
-
resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
-
engines: {node: '>=12'}
-
dependencies:
-
eastasianwidth: 0.2.0
-
emoji-regex: 9.2.2
-
strip-ansi: 7.1.0
-
dev: true
-
-
/string-width@7.2.0:
-
resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==}
-
engines: {node: '>=18'}
-
dependencies:
-
emoji-regex: 10.3.0
-
get-east-asian-width: 1.2.0
-
strip-ansi: 7.1.0
-
dev: true
-
-
/string_decoder@1.3.0:
-
resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
-
dependencies:
-
safe-buffer: 5.2.1
-
-
/strip-ansi@6.0.1:
-
resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
-
engines: {node: '>=8'}
-
dependencies:
-
ansi-regex: 5.0.1
-
dev: true
-
-
/strip-ansi@7.1.0:
-
resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
-
engines: {node: '>=12'}
-
dependencies:
-
ansi-regex: 6.0.1
-
dev: true
-
-
/strip-final-newline@2.0.0:
-
resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==}
-
engines: {node: '>=6'}
-
dev: true
-
-
/strip-final-newline@3.0.0:
-
resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==}
-
engines: {node: '>=12'}
-
dev: true
-
-
/strip-json-comments@2.0.1:
-
resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==}
-
engines: {node: '>=0.10.0'}
-
dev: false
-
-
/strip-json-comments@3.1.1:
-
resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
-
engines: {node: '>=8'}
-
dev: true
-
-
/sucrase@3.35.0:
-
resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==}
-
engines: {node: '>=16 || 14 >=14.17'}
-
hasBin: true
-
dependencies:
-
'@jridgewell/gen-mapping': 0.3.5
-
commander: 4.1.1
-
glob: 10.4.5
-
lines-and-columns: 1.2.4
-
mz: 2.7.0
-
pirates: 4.0.6
-
ts-interface-checker: 0.1.13
-
dev: true
-
-
/superagent@9.0.2:
-
resolution: {integrity: sha512-xuW7dzkUpcJq7QnhOsnNUgtYp3xRwpt2F7abdRYIpCsAt0hhUqia0EdxyXZQQpNmGtsCzYHryaKSV3q3GJnq7w==}
-
engines: {node: '>=14.18.0'}
-
dependencies:
-
component-emitter: 1.3.1
-
cookiejar: 2.1.4
-
debug: 4.3.6
-
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.13.0
-
transitivePeerDependencies:
-
- supports-color
-
dev: true
-
-
/supertest@7.0.0:
-
resolution: {integrity: sha512-qlsr7fIC0lSddmA3tzojvzubYxvlGtzumcdHgPwbFWMISQwL22MhM2Y3LNt+6w9Yyx7559VW5ab70dgphm8qQA==}
-
engines: {node: '>=14.18.0'}
-
dependencies:
-
methods: 1.1.2
-
superagent: 9.0.2
-
transitivePeerDependencies:
-
- supports-color
-
dev: true
-
-
/supports-color@7.2.0:
-
resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
-
engines: {node: '>=8'}
-
dependencies:
-
has-flag: 4.0.0
-
dev: true
-
-
/tar-fs@2.1.1:
-
resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==}
-
dependencies:
-
chownr: 1.1.4
-
mkdirp-classic: 0.5.3
-
pump: 3.0.0
-
tar-stream: 2.2.0
-
dev: false
-
-
/tar-stream@2.2.0:
-
resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==}
-
engines: {node: '>=6'}
-
dependencies:
-
bl: 4.1.0
-
end-of-stream: 1.4.4
-
fs-constants: 1.0.0
-
inherits: 2.0.4
-
readable-stream: 3.6.2
-
dev: false
-
-
/thenify-all@1.6.0:
-
resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==}
-
engines: {node: '>=0.8'}
-
dependencies:
-
thenify: 3.3.1
-
dev: true
-
-
/thenify@3.3.1:
-
resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==}
-
dependencies:
-
any-promise: 1.3.0
-
dev: true
-
-
/thread-stream@2.7.0:
-
resolution: {integrity: sha512-qQiRWsU/wvNolI6tbbCKd9iKaTnCXsTwVxhhKM6nctPdujTyztjlbUkUTUymidWcMnZ5pWR0ej4a0tjsW021vw==}
-
dependencies:
-
real-require: 0.2.0
-
dev: false
-
-
/thread-stream@3.1.0:
-
resolution: {integrity: sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==}
-
dependencies:
-
real-require: 0.2.0
-
dev: false
-
-
/tinybench@2.9.0:
-
resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==}
-
dev: true
-
-
/tinypool@1.0.0:
-
resolution: {integrity: sha512-KIKExllK7jp3uvrNtvRBYBWBOAXSX8ZvoaD8T+7KB/QHIuoJW3Pmr60zucywjAlMb5TeXUkcs/MWeWLu0qvuAQ==}
-
engines: {node: ^18.0.0 || >=20.0.0}
-
dev: true
-
-
/tinyrainbow@1.2.0:
-
resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==}
-
engines: {node: '>=14.0.0'}
-
dev: true
-
-
/tinyspy@3.0.0:
-
resolution: {integrity: sha512-q5nmENpTHgiPVd1cJDDc9cVoYN5x4vCvwT3FMilvKPKneCBZAxn2YWQjDF0UMcE9k0Cay1gBiDfTMU0g+mPMQA==}
-
engines: {node: '>=14.0.0'}
-
dev: true
-
-
/tlds@1.254.0:
-
resolution: {integrity: sha512-YY4ei7K7gPGifqNSrfMaPdqTqiHcwYKUJ7zhLqQOK2ildlGgti5TSwJiXXN1YqG17I2GYZh5cZqv2r5fwBUM+w==}
-
hasBin: true
-
dev: false
-
-
/to-regex-range@5.0.1:
-
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
-
engines: {node: '>=8.0'}
-
dependencies:
-
is-number: 7.0.0
-
dev: true
-
-
/toidentifier@1.0.1:
-
resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==}
-
engines: {node: '>=0.6'}
-
dev: false
-
-
/tr46@1.0.1:
-
resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==}
-
dependencies:
-
punycode: 2.3.1
-
dev: true
-
-
/tree-kill@1.2.2:
-
resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==}
-
hasBin: true
-
dev: true
-
-
/ts-interface-checker@0.1.13:
-
resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}
-
dev: true
-
-
/ts-morph@16.0.0:
-
resolution: {integrity: sha512-jGNF0GVpFj0orFw55LTsQxVYEUOCWBAbR5Ls7fTYE5pQsbW18ssTb/6UXx/GYAEjS+DQTp8VoTw0vqYMiaaQuw==}
-
dependencies:
-
'@ts-morph/common': 0.17.0
-
code-block-writer: 11.0.3
-
dev: true
-
-
/ts-node@10.9.2(@types/node@22.1.0)(typescript@5.5.4):
-
resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==}
-
hasBin: true
-
peerDependencies:
-
'@swc/core': '>=1.2.50'
-
'@swc/wasm': '>=1.2.50'
-
'@types/node': '*'
-
typescript: '>=2.7'
-
peerDependenciesMeta:
-
'@swc/core':
-
optional: true
-
'@swc/wasm':
-
optional: true
-
dependencies:
-
'@cspotcode/source-map-support': 0.8.1
-
'@tsconfig/node10': 1.0.11
-
'@tsconfig/node12': 1.0.11
-
'@tsconfig/node14': 1.0.3
-
'@tsconfig/node16': 1.0.4
-
'@types/node': 22.1.0
-
acorn: 8.12.1
-
acorn-walk: 8.3.3
-
arg: 4.1.3
-
create-require: 1.1.1
-
diff: 4.0.2
-
make-error: 1.3.6
-
typescript: 5.5.4
-
v8-compile-cache-lib: 3.0.1
-
yn: 3.1.1
-
dev: true
-
-
/tsconfck@3.1.1(typescript@5.5.4):
-
resolution: {integrity: sha512-00eoI6WY57SvZEVjm13stEVE90VkEdJAFGgpFLTsZbJyW/LwFQ7uQxJHWpZ2hzSWgCPKc9AnBnNP+0X7o3hAmQ==}
-
engines: {node: ^18 || >=20}
-
hasBin: true
-
peerDependencies:
-
typescript: ^5.0.0
-
peerDependenciesMeta:
-
typescript:
-
optional: true
-
dependencies:
-
typescript: 5.5.4
-
dev: true
-
-
/tslib@2.6.2:
-
resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==}
-
dev: false
-
-
/tsup@8.2.4(tsx@4.16.5)(typescript@5.5.4):
-
resolution: {integrity: sha512-akpCPePnBnC/CXgRrcy72ZSntgIEUa1jN0oJbbvpALWKNOz1B7aM+UVDWGRGIO/T/PZugAESWDJUAb5FD48o8Q==}
-
engines: {node: '>=18'}
-
hasBin: true
-
peerDependencies:
-
'@microsoft/api-extractor': ^7.36.0
-
'@swc/core': ^1
-
postcss: ^8.4.12
-
typescript: '>=4.5.0'
-
peerDependenciesMeta:
-
'@microsoft/api-extractor':
-
optional: true
-
'@swc/core':
-
optional: true
-
postcss:
-
optional: true
-
typescript:
-
optional: true
-
dependencies:
-
bundle-require: 5.0.0(esbuild@0.23.0)
-
cac: 6.7.14
-
chokidar: 3.6.0
-
consola: 3.2.3
-
debug: 4.3.6
-
esbuild: 0.23.0
-
execa: 5.1.1
-
globby: 11.1.0
-
joycon: 3.1.1
-
picocolors: 1.0.1
-
postcss-load-config: 6.0.1(tsx@4.16.5)
-
resolve-from: 5.0.0
-
rollup: 4.20.0
-
source-map: 0.8.0-beta.0
-
sucrase: 3.35.0
-
tree-kill: 1.2.2
-
typescript: 5.5.4
-
transitivePeerDependencies:
-
- jiti
-
- supports-color
-
- tsx
-
- yaml
-
dev: true
-
-
/tsx@4.16.5:
-
resolution: {integrity: sha512-ArsiAQHEW2iGaqZ8fTA1nX0a+lN5mNTyuGRRO6OW3H/Yno1y9/t1f9YOI1Cfoqz63VAthn++ZYcbDP7jPflc+A==}
-
engines: {node: '>=18.0.0'}
-
hasBin: true
-
dependencies:
-
esbuild: 0.21.5
-
get-tsconfig: 4.7.6
-
optionalDependencies:
-
fsevents: 2.3.3
-
dev: true
-
-
/tunnel-agent@0.6.0:
-
resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==}
-
dependencies:
-
safe-buffer: 5.2.1
-
dev: false
-
-
/type-is@1.6.18:
-
resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==}
-
engines: {node: '>= 0.6'}
-
dependencies:
-
media-typer: 0.3.0
-
mime-types: 2.1.35
-
dev: false
-
-
/typescript@5.5.4:
-
resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==}
-
engines: {node: '>=14.17'}
-
hasBin: true
-
dev: true
-
-
/udomdiff@1.1.0:
-
resolution: {integrity: sha512-aqjTs5x/wsShZBkVagdafJkP8S3UMGhkHKszsu1cszjjZ7iOp86+Qb3QOFYh01oWjPMy5ZTuxD6hw5uTKxd+VA==}
-
dev: false
-
-
/uhtml@4.5.9:
-
resolution: {integrity: sha512-WAfIK/E3ZJpaFl0MSzGSB54r7I8Vc8ZyUlOsN8GnLnEaxuioOUyKAS6q/N/xQ5GD9vFFBnx6q+3N3Eq9KNCvTQ==}
-
dependencies:
-
'@webreflection/uparser': 0.3.3
-
custom-function: 1.0.6
-
domconstants: 1.1.6
-
gc-hook: 0.3.1
-
html-escaper: 3.0.3
-
htmlparser2: 9.1.0
-
udomdiff: 1.1.0
-
optionalDependencies:
-
'@preact/signals-core': 1.8.0
-
'@webreflection/signal': 2.1.2
-
dev: false
-
-
/uint8arrays@3.0.0:
-
resolution: {integrity: sha512-HRCx0q6O9Bfbp+HHSfQQKD7wU70+lydKVt4EghkdOvlK/NlrF90z+eXV34mUd48rNvVJXwkrMSPpCATkct8fJA==}
-
dependencies:
-
multiformats: 9.9.0
-
-
/uncrypto@0.1.3:
-
resolution: {integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==}
-
dev: false
-
-
/undici-types@6.13.0:
-
resolution: {integrity: sha512-xtFJHudx8S2DSoujjMd1WeWvn7KKWFRESZTMeL1RptAYERu29D6jphMjjY+vn96jvN3kVPDNxU/E13VTaXj6jg==}
-
dev: true
-
-
/undici@6.19.5:
-
resolution: {integrity: sha512-LryC15SWzqQsREHIOUybavaIHF5IoL0dJ9aWWxL/PgT1KfqAW5225FZpDUFlt9xiDMS2/S7DOKhFWA7RLksWdg==}
-
engines: {node: '>=18.17'}
-
dev: false
-
-
/unpipe@1.0.0:
-
resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==}
-
engines: {node: '>= 0.8'}
-
dev: false
-
-
/util-deprecate@1.0.2:
-
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
-
dev: false
-
-
/utils-merge@1.0.1:
-
resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==}
-
engines: {node: '>= 0.4.0'}
-
dev: false
-
-
/v8-compile-cache-lib@3.0.1:
-
resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==}
-
dev: true
-
-
/varint@6.0.0:
-
resolution: {integrity: sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==}
-
dev: false
-
-
/vary@1.1.2:
-
resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==}
-
engines: {node: '>= 0.8'}
-
dev: false
-
-
/vite-node@2.0.5(@types/node@22.1.0):
-
resolution: {integrity: sha512-LdsW4pxj0Ot69FAoXZ1yTnA9bjGohr2yNBU7QKRxpz8ITSkhuDl6h3zS/tvgz4qrNjeRnvrWeXQ8ZF7Um4W00Q==}
-
engines: {node: ^18.0.0 || >=20.0.0}
-
hasBin: true
-
dependencies:
-
cac: 6.7.14
-
debug: 4.3.6
-
pathe: 1.1.2
-
tinyrainbow: 1.2.0
-
vite: 5.3.5(@types/node@22.1.0)
-
transitivePeerDependencies:
-
- '@types/node'
-
- less
-
- lightningcss
-
- sass
-
- stylus
-
- sugarss
-
- supports-color
-
- terser
-
dev: true
-
-
/vite-tsconfig-paths@4.3.2(typescript@5.5.4):
-
resolution: {integrity: sha512-0Vd/a6po6Q+86rPlntHye7F31zA2URZMbH8M3saAZ/xR9QoGN/L21bxEGfXdWmFdNkqPpRdxFT7nmNe12e9/uA==}
-
peerDependencies:
-
vite: '*'
-
peerDependenciesMeta:
-
vite:
-
optional: true
-
dependencies:
-
debug: 4.3.6
-
globrex: 0.1.2
-
tsconfck: 3.1.1(typescript@5.5.4)
-
transitivePeerDependencies:
-
- supports-color
-
- typescript
-
dev: true
-
-
/vite@5.3.5(@types/node@22.1.0):
-
resolution: {integrity: sha512-MdjglKR6AQXQb9JGiS7Rc2wC6uMjcm7Go/NHNO63EwiJXfuk9PgqiP/n5IDJCziMkfw9n4Ubp7lttNwz+8ZVKA==}
-
engines: {node: ^18.0.0 || >=20.0.0}
-
hasBin: true
-
peerDependencies:
-
'@types/node': ^18.0.0 || >=20.0.0
-
less: '*'
-
lightningcss: ^1.21.0
-
sass: '*'
-
stylus: '*'
-
sugarss: '*'
-
terser: ^5.4.0
-
peerDependenciesMeta:
-
'@types/node':
-
optional: true
-
less:
-
optional: true
-
lightningcss:
-
optional: true
-
sass:
-
optional: true
-
stylus:
-
optional: true
-
sugarss:
-
optional: true
-
terser:
-
optional: true
-
dependencies:
-
'@types/node': 22.1.0
-
esbuild: 0.21.5
-
postcss: 8.4.41
-
rollup: 4.20.0
-
optionalDependencies:
-
fsevents: 2.3.3
-
dev: true
-
-
/vitest@2.0.5(@types/node@22.1.0):
-
resolution: {integrity: sha512-8GUxONfauuIdeSl5f9GTgVEpg5BTOlplET4WEDaeY2QBiN8wSm68vxN/tb5z405OwppfoCavnwXafiaYBC/xOA==}
-
engines: {node: ^18.0.0 || >=20.0.0}
-
hasBin: true
-
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
-
dependencies:
-
'@ampproject/remapping': 2.3.0
-
'@types/node': 22.1.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.6
-
execa: 8.0.1
-
magic-string: 0.30.11
-
pathe: 1.1.2
-
std-env: 3.7.0
-
tinybench: 2.9.0
-
tinypool: 1.0.0
-
tinyrainbow: 1.2.0
-
vite: 5.3.5(@types/node@22.1.0)
-
vite-node: 2.0.5(@types/node@22.1.0)
-
why-is-node-running: 2.3.0
-
transitivePeerDependencies:
-
- less
-
- lightningcss
-
- sass
-
- stylus
-
- sugarss
-
- supports-color
-
- terser
-
dev: true
-
-
/webidl-conversions@4.0.2:
-
resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==}
-
dev: true
-
-
/whatwg-url@7.1.0:
-
resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==}
-
dependencies:
-
lodash.sortby: 4.7.0
-
tr46: 1.0.1
-
webidl-conversions: 4.0.2
-
dev: true
-
-
/which@2.0.2:
-
resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
-
engines: {node: '>= 8'}
-
hasBin: true
-
dependencies:
-
isexe: 2.0.0
-
dev: true
-
-
/why-is-node-running@2.3.0:
-
resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==}
-
engines: {node: '>=8'}
-
hasBin: true
-
dependencies:
-
siginfo: 2.0.0
-
stackback: 0.0.2
-
dev: true
-
-
/wrap-ansi@7.0.0:
-
resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
-
engines: {node: '>=10'}
-
dependencies:
-
ansi-styles: 4.3.0
-
string-width: 4.2.3
-
strip-ansi: 6.0.1
-
dev: true
-
-
/wrap-ansi@8.1.0:
-
resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
-
engines: {node: '>=12'}
-
dependencies:
-
ansi-styles: 6.2.1
-
string-width: 5.1.2
-
strip-ansi: 7.1.0
-
dev: true
-
-
/wrap-ansi@9.0.0:
-
resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==}
-
engines: {node: '>=18'}
-
dependencies:
-
ansi-styles: 6.2.1
-
string-width: 7.2.0
-
strip-ansi: 7.1.0
-
dev: true
-
-
/wrappy@1.0.2:
-
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
-
-
/ws@8.18.0:
-
resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==}
-
engines: {node: '>=10.0.0'}
-
peerDependencies:
-
bufferutil: ^4.0.1
-
utf-8-validate: '>=5.0.2'
-
peerDependenciesMeta:
-
bufferutil:
-
optional: true
-
utf-8-validate:
-
optional: true
-
dev: false
-
-
/yaml@2.5.0:
-
resolution: {integrity: sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==}
-
engines: {node: '>= 14'}
-
hasBin: true
-
dev: true
-
-
/yesno@0.4.0:
-
resolution: {integrity: sha512-tdBxmHvbXPBKYIg81bMCB7bVeDmHkRzk5rVJyYYXurwKkHq/MCd8rz4HSJUP7hW0H2NlXiq8IFiWvYKEHhlotA==}
-
dev: true
-
-
/yn@3.1.1:
-
resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==}
-
engines: {node: '>=6'}
-
dev: true
-
-
/zod@3.23.8:
-
resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==}
+57 -22
src/auth/client.ts
···
-
import { JoseKey } from '@atproto/jwk-jose'
-
import { NodeOAuthClient } from '@atproto/oauth-client-node'
+
import {
+
Keyset,
+
JoseKey,
+
atprotoLoopbackClientMetadata,
+
NodeOAuthClient,
+
OAuthClientMetadataInput,
+
} from '@atproto/oauth-client-node'
+
import assert from 'node:assert'
+
import type { Database } from '#/db'
import { env } from '#/env'
import { SessionStore, StateStore } from './storage'
-
export const createClient = async (db: Database) => {
-
const publicUrl = env.PUBLIC_URL
-
const url = publicUrl || `http://127.0.0.1:${env.PORT}`
+
export async function createOAuthClient(db: Database) {
+
// Confidential client require a keyset accessible on the internet. Non
+
// internet clients (e.g. development) cannot expose a keyset on the internet
+
// so they can't be private..
+
const keyset =
+
env.PUBLIC_URL && env.PRIVATE_KEYS
+
? new Keyset(
+
await Promise.all(
+
env.PRIVATE_KEYS.map((jwk) => JoseKey.fromJWK(jwk)),
+
),
+
)
+
: undefined
+
+
assert(
+
!env.PUBLIC_URL || keyset?.size,
+
'ATProto requires backend clients to be confidential. Make sure to set the PRIVATE_KEYS environment variable.',
+
)
+
+
// If a keyset is defined (meaning the client is confidential). Let's make
+
// sure it has a private key for signing. Note: findPrivateKey will throw if
+
// the keyset does not contain a suitable private key.
+
const pk = keyset?.findPrivateKey({ use: 'sig' })
+
+
const clientMetadata: OAuthClientMetadataInput = env.PUBLIC_URL
+
? {
+
client_name: 'Statusphere Example App',
+
client_id: `${env.PUBLIC_URL}/oauth-client-metadata.json`,
+
jwks_uri: `${env.PUBLIC_URL}/.well-known/jwks.json`,
+
redirect_uris: [`${env.PUBLIC_URL}/oauth/callback`],
+
scope: 'atproto transition:generic',
+
grant_types: ['authorization_code', 'refresh_token'],
+
response_types: ['code'],
+
application_type: 'web',
+
token_endpoint_auth_method: pk ? 'private_key_jwt' : 'none',
+
token_endpoint_auth_signing_alg: pk ? pk.alg : undefined,
+
dpop_bound_access_tokens: true,
+
}
+
: atprotoLoopbackClientMetadata(
+
`http://localhost?${new URLSearchParams([
+
['redirect_uri', `http://127.0.0.1:${env.PORT}/oauth/callback`],
+
['scope', `atproto transition:generic`],
+
])}`,
+
)
+
return new NodeOAuthClient({
-
clientMetadata: {
-
client_name: 'AT Protocol Express App',
-
client_id: publicUrl
-
? `${url}/client-metadata.json`
-
: `http://localhost?redirect_uri=${encodeURIComponent(`${url}/oauth/callback`)}`,
-
client_uri: url,
-
logo_uri: `${url}/logo.png`,
-
tos_uri: `${url}/tos`,
-
policy_uri: `${url}/policy`,
-
redirect_uris: [`${url}/oauth/callback`],
-
scope: 'profile offline_access',
-
grant_types: ['authorization_code', 'refresh_token'],
-
response_types: ['code'],
-
application_type: 'web',
-
token_endpoint_auth_method: 'none',
-
dpop_bound_access_tokens: true,
-
},
+
keyset,
+
clientMetadata,
stateStore: new StateStore(db),
sessionStore: new SessionStore(db),
+
plcDirectoryUrl: env.PLC_URL,
+
handleResolver: env.PDS_URL,
})
}
-35
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'
-
-
export type Session = { did: string }
-
-
export async function createSession(req: IncomingMessage, res: ServerResponse<IncomingMessage>, did: string) {
-
const session = await getSessionRaw(req, res)
-
assert(!session.did, 'session already exists')
-
session.did = did
-
await session.save()
-
return { did: session.did }
-
}
-
-
export async function destroySession(req: IncomingMessage, res: ServerResponse<IncomingMessage>) {
-
const session = await getSessionRaw(req, res)
-
await session.destroy()
-
return null
-
}
-
-
export async function getSession(req: IncomingMessage, res: ServerResponse<IncomingMessage>) {
-
const session = await getSessionRaw(req, res)
-
if (!session.did) return null
-
return { did: session.did }
-
}
-
-
async function getSessionRaw(req: IncomingMessage, res: ServerResponse<IncomingMessage>) {
-
return await getIronSession<Session>(req, res, {
-
cookieName: 'sid',
-
password: env.COOKIE_SECRET,
-
})
-
}
-11
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'
-
-
export type AppContext = {
-
db: Database
-
ingester: Ingester
-
logger: pino.Logger
-
oauthClient: OAuthClient
-
}
+46
src/context.ts
···
+
import { NodeOAuthClient } from '@atproto/oauth-client-node'
+
import { Firehose } from '@atproto/sync'
+
import { pino } from 'pino'
+
+
import { createOAuthClient } from '#/auth/client'
+
import { createDb, Database, migrateToLatest } from '#/db'
+
import { createIngester } from '#/ingester'
+
import { env } from '#/env'
+
import {
+
BidirectionalResolver,
+
createBidirectionalResolver,
+
} from '#/id-resolver'
+
+
/**
+
* Application state passed to the router and elsewhere
+
*/
+
export type AppContext = {
+
db: Database
+
ingester: Firehose
+
logger: pino.Logger
+
oauthClient: NodeOAuthClient
+
resolver: BidirectionalResolver
+
destroy: () => Promise<void>
+
}
+
+
export async function createAppContext(): Promise<AppContext> {
+
const db = createDb(env.DB_PATH)
+
await migrateToLatest(db)
+
const oauthClient = await createOAuthClient(db)
+
const ingester = createIngester(db)
+
const logger = pino({ name: 'server', level: env.LOG_LEVEL })
+
const resolver = createBidirectionalResolver(oauthClient)
+
+
return {
+
db,
+
ingester,
+
logger,
+
oauthClient,
+
resolver,
+
+
async destroy() {
+
await ingester.destroy()
+
await db.destroy()
+
},
+
}
+
}
-20
src/db/index.ts
···
-
import SqliteDb from 'better-sqlite3'
-
import { Kysely, Migrator, SqliteDialect } from 'kysely'
-
import { migrationProvider } from './migrations'
-
import type { DatabaseSchema } from './schema'
-
-
export const createDb = (location: string): Database => {
-
return new Kysely<DatabaseSchema>({
-
dialect: new SqliteDialect({
-
database: new SqliteDb(location),
-
}),
-
})
-
}
-
-
export const migrateToLatest = async (db: Database) => {
-
const migrator = new Migrator({ db, provider: migrationProvider })
-
const { error } = await migrator.migrateToLatest()
-
if (error) throw error
-
}
-
-
export type Database = Kysely<DatabaseSchema>
-35
src/db/migrations.ts
···
-
import type { Kysely, Migration, MigrationProvider } from 'kysely'
-
-
const migrations: Record<string, Migration> = {}
-
-
export const migrationProvider: MigrationProvider = {
-
async getMigrations() {
-
return migrations
-
},
-
}
-
-
migrations['001'] = {
-
async up(db: Kysely<unknown>) {
-
await db.schema
-
.createTable('post')
-
.addColumn('uri', 'varchar', (col) => col.primaryKey())
-
.addColumn('text', 'varchar', (col) => col.notNull())
-
.addColumn('indexedAt', 'varchar', (col) => col.notNull())
-
.execute()
-
await db.schema
-
.createTable('auth_session')
-
.addColumn('key', 'varchar', (col) => col.primaryKey())
-
.addColumn('session', 'varchar', (col) => col.notNull())
-
.execute()
-
await db.schema
-
.createTable('auth_state')
-
.addColumn('key', 'varchar', (col) => col.primaryKey())
-
.addColumn('state', 'varchar', (col) => col.notNull())
-
.execute()
-
},
-
async down(db: Kysely<unknown>) {
-
await db.schema.dropTable('auth_state').execute()
-
await db.schema.dropTable('auth_session').execute()
-
await db.schema.dropTable('post').execute()
-
},
-
}
-25
src/db/schema.ts
···
-
export type DatabaseSchema = {
-
post: Post
-
auth_session: AuthSession
-
auth_state: AuthState
-
}
-
-
export type Post = {
-
uri: string
-
text: string
-
indexedAt: string
-
}
-
-
export type AuthSession = {
-
key: string
-
session: AuthSessionJson
-
}
-
-
export type AuthState = {
-
key: string
-
state: AuthStateJson
-
}
-
-
type AuthStateJson = string
-
-
type AuthSessionJson = string
+94
src/db.ts
···
+
import SqliteDb from 'better-sqlite3'
+
import {
+
Kysely,
+
Migrator,
+
SqliteDialect,
+
Migration,
+
MigrationProvider,
+
} from 'kysely'
+
+
// Types
+
+
export type DatabaseSchema = {
+
status: Status
+
auth_session: AuthSession
+
auth_state: AuthState
+
}
+
+
export type Status = {
+
uri: string
+
authorDid: string
+
status: string
+
createdAt: string
+
indexedAt: string
+
}
+
+
export type AuthSession = {
+
key: string
+
session: AuthSessionJson
+
}
+
+
export type AuthState = {
+
key: string
+
state: AuthStateJson
+
}
+
+
type AuthStateJson = string
+
+
type AuthSessionJson = string
+
+
// Migrations
+
+
const migrations: Record<string, Migration> = {}
+
+
const migrationProvider: MigrationProvider = {
+
async getMigrations() {
+
return migrations
+
},
+
}
+
+
migrations['001'] = {
+
async up(db: Kysely<unknown>) {
+
await db.schema
+
.createTable('status')
+
.addColumn('uri', 'varchar', (col) => col.primaryKey())
+
.addColumn('authorDid', 'varchar', (col) => col.notNull())
+
.addColumn('status', 'varchar', (col) => col.notNull())
+
.addColumn('createdAt', 'varchar', (col) => col.notNull())
+
.addColumn('indexedAt', 'varchar', (col) => col.notNull())
+
.execute()
+
await db.schema
+
.createTable('auth_session')
+
.addColumn('key', 'varchar', (col) => col.primaryKey())
+
.addColumn('session', 'varchar', (col) => col.notNull())
+
.execute()
+
await db.schema
+
.createTable('auth_state')
+
.addColumn('key', 'varchar', (col) => col.primaryKey())
+
.addColumn('state', 'varchar', (col) => col.notNull())
+
.execute()
+
},
+
async down(db: Kysely<unknown>) {
+
await db.schema.dropTable('auth_state').execute()
+
await db.schema.dropTable('auth_session').execute()
+
await db.schema.dropTable('status').execute()
+
},
+
}
+
+
// APIs
+
+
export const createDb = (location: string): Database => {
+
return new Kysely<DatabaseSchema>({
+
dialect: new SqliteDialect({
+
database: new SqliteDb(location),
+
}),
+
})
+
}
+
+
export const migrateToLatest = async (db: Database) => {
+
const migrator = new Migrator({ db, provider: migrationProvider })
+
const { error } = await migrator.migrateToLatest()
+
if (error) throw error
+
}
+
+
export type Database = Kysely<DatabaseSchema>
+17 -7
src/env.ts
···
import dotenv from 'dotenv'
-
import { cleanEnv, host, num, port, str, testOnly } from 'envalid'
+
import { cleanEnv, port, str, testOnly, url } from 'envalid'
+
import { envalidJsonWebKeys as keys } from '#/lib/jwk'
dotenv.config()
export const env = cleanEnv(process.env, {
-
NODE_ENV: str({ devDefault: testOnly('test'), choices: ['development', 'production', 'test'] }),
-
HOST: host({ devDefault: testOnly('localhost') }),
+
NODE_ENV: str({
+
devDefault: testOnly('test'),
+
choices: ['development', 'production', 'test'],
+
}),
PORT: port({ devDefault: testOnly(3000) }),
-
PUBLIC_URL: str({}),
+
PUBLIC_URL: url({ default: undefined }),
+
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) }),
+
PRIVATE_KEYS: keys({ default: undefined }),
+
LOG_LEVEL: str({
+
devDefault: 'debug',
+
default: 'info',
+
choices: ['fatal', 'error', 'warn', 'info', 'debug', 'trace', 'silent'],
+
}),
+
PDS_URL: url({ default: undefined }),
+
PLC_URL: url({ default: undefined }),
+
FIREHOSE_URL: url({ default: undefined }),
})
-189
src/firehose/firehose.ts
···
-
import type { RepoRecord } from '@atproto/lexicon'
-
import { cborToLexRecord, readCar } from '@atproto/repo'
-
import { AtUri } from '@atproto/syntax'
-
import { Subscription } from '@atproto/xrpc-server'
-
import type { CID } from 'multiformats/cid'
-
import {
-
type Account,
-
type Commit,
-
type Identity,
-
type RepoEvent,
-
isAccount,
-
isCommit,
-
isIdentity,
-
isValidRepoEvent,
-
} from './lexicons'
-
-
type Opts = {
-
service?: string
-
getCursor?: () => Promise<number | undefined>
-
setCursor?: (cursor: number) => Promise<void>
-
subscriptionReconnectDelay?: number
-
filterCollections?: string[]
-
excludeIdentity?: boolean
-
excludeAccount?: boolean
-
excludeCommit?: boolean
-
}
-
-
export class Firehose {
-
public sub: Subscription<RepoEvent>
-
private abortController: AbortController
-
-
constructor(public opts: Opts) {
-
this.abortController = new AbortController()
-
this.sub = new Subscription({
-
service: opts.service ?? 'https://bsky.network',
-
method: 'com.atproto.sync.subscribeRepos',
-
signal: this.abortController.signal,
-
getParams: async () => {
-
if (!opts.getCursor) return undefined
-
const cursor = await opts.getCursor()
-
return { cursor }
-
},
-
validate: (value: unknown) => {
-
try {
-
return isValidRepoEvent(value)
-
} catch (err) {
-
console.error('repo subscription skipped invalid message', err)
-
}
-
},
-
})
-
}
-
-
async *run(): AsyncGenerator<Event> {
-
try {
-
for await (const evt of this.sub) {
-
try {
-
if (isCommit(evt) && !this.opts.excludeCommit) {
-
const parsed = await parseCommit(evt)
-
for (const write of parsed) {
-
if (!this.opts.filterCollections || this.opts.filterCollections.includes(write.uri.collection)) {
-
yield write
-
}
-
}
-
} else if (isAccount(evt) && !this.opts.excludeAccount) {
-
const parsed = parseAccount(evt)
-
if (parsed) {
-
yield parsed
-
}
-
} else if (isIdentity(evt) && !this.opts.excludeIdentity) {
-
yield parseIdentity(evt)
-
}
-
} catch (err) {
-
console.error('repo subscription could not handle message', err)
-
}
-
if (this.opts.setCursor && typeof evt.seq === 'number') {
-
await this.opts.setCursor(evt.seq)
-
}
-
}
-
} catch (err) {
-
console.error('repo subscription errored', err)
-
setTimeout(() => this.run(), this.opts.subscriptionReconnectDelay ?? 3000)
-
}
-
}
-
-
destroy() {
-
this.abortController.abort()
-
}
-
}
-
-
export const parseCommit = async (evt: Commit): Promise<CommitEvt[]> => {
-
const car = await readCar(evt.blocks)
-
-
const evts: CommitEvt[] = []
-
-
for (const op of evt.ops) {
-
const uri = new AtUri(`at://${evt.repo}/${op.path}`)
-
-
const meta: CommitMeta = {
-
uri,
-
author: uri.host,
-
collection: uri.collection,
-
rkey: uri.rkey,
-
}
-
-
if (op.action === 'create' || op.action === 'update') {
-
if (!op.cid) continue
-
const recordBytes = car.blocks.get(op.cid)
-
if (!recordBytes) continue
-
const record = cborToLexRecord(recordBytes)
-
evts.push({
-
...meta,
-
event: op.action as 'create' | 'update',
-
cid: op.cid,
-
record,
-
})
-
}
-
-
if (op.action === 'delete') {
-
evts.push({
-
...meta,
-
event: 'delete',
-
})
-
}
-
}
-
-
return evts
-
}
-
-
export const parseIdentity = (evt: Identity): IdentityEvt => {
-
return {
-
event: 'identity',
-
did: evt.did,
-
handle: evt.handle,
-
}
-
}
-
-
export const parseAccount = (evt: Account): AccountEvt | undefined => {
-
if (evt.status && !isValidStatus(evt.status)) return
-
return {
-
event: 'account',
-
did: evt.did,
-
active: evt.active,
-
status: evt.status as AccountStatus,
-
}
-
}
-
-
const isValidStatus = (str: string): str is AccountStatus => {
-
return ['takendown', 'suspended', 'deleted', 'deactivated'].includes(str)
-
}
-
-
type Event = CommitEvt | IdentityEvt | AccountEvt
-
-
type CommitMeta = {
-
uri: AtUri
-
author: string
-
collection: string
-
rkey: string
-
}
-
-
type CommitEvt = Create | Update | Delete
-
-
type Create = CommitMeta & {
-
event: 'create'
-
record: RepoRecord
-
cid: CID
-
}
-
-
type Update = CommitMeta & {
-
event: 'update'
-
}
-
-
type Delete = CommitMeta & {
-
event: 'delete'
-
}
-
-
type IdentityEvt = {
-
event: 'identity'
-
did: string
-
handle?: string
-
}
-
-
type AccountEvt = {
-
event: 'account'
-
did: string
-
active: boolean
-
status?: AccountStatus
-
}
-
-
type AccountStatus = 'takendown' | 'suspended' | 'deleted' | 'deactivated'
-31
src/firehose/ingester.ts
···
-
import type { Database } from '#/db'
-
import { Firehose } from '#/firehose/firehose'
-
-
export class Ingester {
-
firehose: Firehose | undefined
-
constructor(public db: Database) {}
-
-
async start() {
-
const firehose = new Firehose({})
-
-
for await (const evt of firehose.run()) {
-
if (evt.event === 'create') {
-
if (evt.collection !== 'app.bsky.feed.post') continue
-
const post: any = evt.record // @TODO fix types
-
await this.db
-
.insertInto('post')
-
.values({
-
uri: evt.uri.toString(),
-
text: post.text as string,
-
indexedAt: new Date().toISOString(),
-
})
-
.onConflict((oc) => oc.doNothing())
-
.execute()
-
}
-
}
-
}
-
-
destroy() {
-
this.firehose?.destroy()
-
}
-
}
-355
src/firehose/lexicons.ts
···
-
import type { IncomingMessage } from 'node:http'
-
-
import { type LexiconDoc, Lexicons } from '@atproto/lexicon'
-
import type { ErrorFrame, HandlerAuth } from '@atproto/xrpc-server'
-
import type { CID } from 'multiformats/cid'
-
-
// @NOTE: this file is an ugly copy job of codegen output. I'd like to clean this whole thing up
-
-
export function isObj(v: unknown): v is Record<string, unknown> {
-
return typeof v === 'object' && v !== null
-
}
-
-
export function hasProp<K extends PropertyKey>(data: object, prop: K): data is Record<K, unknown> {
-
return prop in data
-
}
-
-
export interface QueryParams {
-
/** The last known event seq number to backfill from. */
-
cursor?: number
-
}
-
-
export type RepoEvent =
-
| Commit
-
| Identity
-
| Account
-
| Handle
-
| Migrate
-
| Tombstone
-
| Info
-
| { $type: string; [k: string]: unknown }
-
export type HandlerError = ErrorFrame<'FutureCursor' | 'ConsumerTooSlow'>
-
export type HandlerOutput = HandlerError | RepoEvent
-
export type HandlerReqCtx<HA extends HandlerAuth = never> = {
-
auth: HA
-
params: QueryParams
-
req: IncomingMessage
-
signal: AbortSignal
-
}
-
export type Handler<HA extends HandlerAuth = never> = (ctx: HandlerReqCtx<HA>) => AsyncIterable<HandlerOutput>
-
-
/** Represents an update of repository state. Note that empty commits are allowed, which include no repo data changes, but an update to rev and signature. */
-
export interface Commit {
-
/** The stream sequence number of this message. */
-
seq: number
-
/** DEPRECATED -- unused */
-
rebase: boolean
-
/** Indicates that this commit contained too many ops, or data size was too large. Consumers will need to make a separate request to get missing data. */
-
tooBig: boolean
-
/** The repo this event comes from. */
-
repo: string
-
/** Repo commit object CID. */
-
commit: CID
-
/** DEPRECATED -- unused. WARNING -- nullable and optional; stick with optional to ensure golang interoperability. */
-
prev?: CID | null
-
/** The rev of the emitted commit. Note that this information is also in the commit object included in blocks, unless this is a tooBig event. */
-
rev: string
-
/** The rev of the last emitted commit from this repo (if any). */
-
since: string | null
-
/** CAR file containing relevant blocks, as a diff since the previous repo state. */
-
blocks: Uint8Array
-
ops: RepoOp[]
-
blobs: CID[]
-
/** Timestamp of when this message was originally broadcast. */
-
time: string
-
[k: string]: unknown
-
}
-
-
export function isCommit(v: unknown): v is Commit {
-
return isObj(v) && hasProp(v, '$type') && v.$type === 'com.atproto.sync.subscribeRepos#commit'
-
}
-
-
/** Represents a change to an account's identity. Could be an updated handle, signing key, or pds hosting endpoint. Serves as a prod to all downstream services to refresh their identity cache. */
-
export interface Identity {
-
seq: number
-
did: string
-
time: string
-
/** The current handle for the account, or 'handle.invalid' if validation fails. This field is optional, might have been validated or passed-through from an upstream source. Semantics and behaviors for PDS vs Relay may evolve in the future; see atproto specs for more details. */
-
handle?: string
-
[k: string]: unknown
-
}
-
-
export function isIdentity(v: unknown): v is Identity {
-
return isObj(v) && hasProp(v, '$type') && v.$type === 'com.atproto.sync.subscribeRepos#identity'
-
}
-
-
/** Represents a change to an account's status on a host (eg, PDS or Relay). The semantics of this event are that the status is at the host which emitted the event, not necessarily that at the currently active PDS. Eg, a Relay takedown would emit a takedown with active=false, even if the PDS is still active. */
-
export interface Account {
-
seq: number
-
did: string
-
time: string
-
/** Indicates that the account has a repository which can be fetched from the host that emitted this event. */
-
active: boolean
-
/** If active=false, this optional field indicates a reason for why the account is not active. */
-
status?: 'takendown' | 'suspended' | 'deleted' | 'deactivated' | (string & {})
-
[k: string]: unknown
-
}
-
-
export function isAccount(v: unknown): v is Account {
-
return isObj(v) && hasProp(v, '$type') && v.$type === 'com.atproto.sync.subscribeRepos#account'
-
}
-
-
/** DEPRECATED -- Use #identity event instead */
-
export interface Handle {
-
seq: number
-
did: string
-
handle: string
-
time: string
-
[k: string]: unknown
-
}
-
-
export function isHandle(v: unknown): v is Handle {
-
return isObj(v) && hasProp(v, '$type') && v.$type === 'com.atproto.sync.subscribeRepos#handle'
-
}
-
-
/** DEPRECATED -- Use #account event instead */
-
export interface Migrate {
-
seq: number
-
did: string
-
migrateTo: string | null
-
time: string
-
[k: string]: unknown
-
}
-
-
export function isMigrate(v: unknown): v is Migrate {
-
return isObj(v) && hasProp(v, '$type') && v.$type === 'com.atproto.sync.subscribeRepos#migrate'
-
}
-
-
/** DEPRECATED -- Use #account event instead */
-
export interface Tombstone {
-
seq: number
-
did: string
-
time: string
-
[k: string]: unknown
-
}
-
-
export function isTombstone(v: unknown): v is Tombstone {
-
return isObj(v) && hasProp(v, '$type') && v.$type === 'com.atproto.sync.subscribeRepos#tombstone'
-
}
-
-
export interface Info {
-
name: 'OutdatedCursor' | (string & {})
-
message?: string
-
[k: string]: unknown
-
}
-
-
export function isInfo(v: unknown): v is Info {
-
return isObj(v) && hasProp(v, '$type') && v.$type === 'com.atproto.sync.subscribeRepos#info'
-
}
-
-
/** A repo operation, ie a mutation of a single record. */
-
export interface RepoOp {
-
action: 'create' | 'update' | 'delete' | (string & {})
-
path: string
-
/** For creates and updates, the new record CID. For deletions, null. */
-
cid: CID | null
-
[k: string]: unknown
-
}
-
-
export function isRepoOp(v: unknown): v is RepoOp {
-
return isObj(v) && hasProp(v, '$type') && v.$type === 'com.atproto.sync.subscribeRepos#repoOp'
-
}
-
-
export const ComAtprotoSyncSubscribeRepos: LexiconDoc = {
-
lexicon: 1,
-
id: 'com.atproto.sync.subscribeRepos',
-
defs: {
-
main: {
-
type: 'subscription',
-
description: 'Subscribe to repo updates',
-
parameters: {
-
type: 'params',
-
properties: {
-
cursor: {
-
type: 'integer',
-
description: 'The last known event to backfill from.',
-
},
-
},
-
},
-
message: {
-
schema: {
-
type: 'union',
-
refs: [
-
'lex:com.atproto.sync.subscribeRepos#commit',
-
'lex:com.atproto.sync.subscribeRepos#handle',
-
'lex:com.atproto.sync.subscribeRepos#migrate',
-
'lex:com.atproto.sync.subscribeRepos#tombstone',
-
'lex:com.atproto.sync.subscribeRepos#info',
-
],
-
},
-
},
-
errors: [
-
{
-
name: 'FutureCursor',
-
},
-
{
-
name: 'ConsumerTooSlow',
-
},
-
],
-
},
-
commit: {
-
type: 'object',
-
required: ['seq', 'rebase', 'tooBig', 'repo', 'commit', 'rev', 'since', 'blocks', 'ops', 'blobs', 'time'],
-
nullable: ['prev', 'since'],
-
properties: {
-
seq: {
-
type: 'integer',
-
},
-
rebase: {
-
type: 'boolean',
-
},
-
tooBig: {
-
type: 'boolean',
-
},
-
repo: {
-
type: 'string',
-
format: 'did',
-
},
-
commit: {
-
type: 'cid-link',
-
},
-
prev: {
-
type: 'cid-link',
-
},
-
rev: {
-
type: 'string',
-
description: 'The rev of the emitted commit',
-
},
-
since: {
-
type: 'string',
-
description: 'The rev of the last emitted commit from this repo',
-
},
-
blocks: {
-
type: 'bytes',
-
description: 'CAR file containing relevant blocks',
-
maxLength: 1000000,
-
},
-
ops: {
-
type: 'array',
-
items: {
-
type: 'ref',
-
ref: 'lex:com.atproto.sync.subscribeRepos#repoOp',
-
},
-
maxLength: 200,
-
},
-
blobs: {
-
type: 'array',
-
items: {
-
type: 'cid-link',
-
},
-
},
-
time: {
-
type: 'string',
-
format: 'datetime',
-
},
-
},
-
},
-
handle: {
-
type: 'object',
-
required: ['seq', 'did', 'handle', 'time'],
-
properties: {
-
seq: {
-
type: 'integer',
-
},
-
did: {
-
type: 'string',
-
format: 'did',
-
},
-
handle: {
-
type: 'string',
-
format: 'handle',
-
},
-
time: {
-
type: 'string',
-
format: 'datetime',
-
},
-
},
-
},
-
migrate: {
-
type: 'object',
-
required: ['seq', 'did', 'migrateTo', 'time'],
-
nullable: ['migrateTo'],
-
properties: {
-
seq: {
-
type: 'integer',
-
},
-
did: {
-
type: 'string',
-
format: 'did',
-
},
-
migrateTo: {
-
type: 'string',
-
},
-
time: {
-
type: 'string',
-
format: 'datetime',
-
},
-
},
-
},
-
tombstone: {
-
type: 'object',
-
required: ['seq', 'did', 'time'],
-
properties: {
-
seq: {
-
type: 'integer',
-
},
-
did: {
-
type: 'string',
-
format: 'did',
-
},
-
time: {
-
type: 'string',
-
format: 'datetime',
-
},
-
},
-
},
-
info: {
-
type: 'object',
-
required: ['name'],
-
properties: {
-
name: {
-
type: 'string',
-
knownValues: ['OutdatedCursor'],
-
},
-
message: {
-
type: 'string',
-
},
-
},
-
},
-
repoOp: {
-
type: 'object',
-
description:
-
"A repo operation, ie a write of a single record. For creates and updates, cid is the record's CID as of this operation. For deletes, it's null.",
-
required: ['action', 'path', 'cid'],
-
nullable: ['cid'],
-
properties: {
-
action: {
-
type: 'string',
-
knownValues: ['create', 'update', 'delete'],
-
},
-
path: {
-
type: 'string',
-
},
-
cid: {
-
type: 'cid-link',
-
},
-
},
-
},
-
},
-
}
-
-
const lexicons = new Lexicons([ComAtprotoSyncSubscribeRepos])
-
-
export const isValidRepoEvent = (evt: unknown) => {
-
return lexicons.assertValidXrpcMessage<RepoEvent>('com.atproto.sync.subscribeRepos', evt)
-
}
+37
src/id-resolver.ts
···
+
import { OAuthClient } from '@atproto/oauth-client-node'
+
+
export interface BidirectionalResolver {
+
resolveDidToHandle(did: string): Promise<string | undefined>
+
resolveDidsToHandles(
+
dids: string[],
+
): Promise<Record<string, string | undefined>>
+
}
+
+
export function createBidirectionalResolver({
+
identityResolver,
+
}: OAuthClient): BidirectionalResolver {
+
return {
+
async resolveDidToHandle(did: string): Promise<string | undefined> {
+
try {
+
const { handle } = await identityResolver.resolve(did)
+
if (handle) return handle
+
} catch {
+
// Ignore
+
}
+
},
+
+
async resolveDidsToHandles(
+
dids: string[],
+
): Promise<Record<string, string | undefined>> {
+
const uniqueDids = [...new Set(dids)]
+
+
return Object.fromEntries(
+
await Promise.all(
+
uniqueDids.map((did) =>
+
this.resolveDidToHandle(did).then((handle) => [did, handle]),
+
),
+
),
+
)
+
},
+
}
+
}
+30 -12
src/index.ts
···
-
import { Server } from '#/server'
+
import { once } from 'node:events'
-
const run = async () => {
-
const server = await Server.create()
+
import { createAppContext } from '#/context'
+
import { env } from '#/env'
+
import { startServer } from '#/lib/http'
+
import { run } from '#/lib/process'
+
import { createRouter } from '#/routes'
-
const onCloseSignal = async () => {
-
setTimeout(() => process.exit(1), 10000).unref() // Force shutdown after 10s
-
await server.close()
-
process.exit()
-
}
+
run(async (killSignal) => {
+
// Create the application context
+
const ctx = await createAppContext()
-
process.on('SIGINT', onCloseSignal)
-
process.on('SIGTERM', onCloseSignal)
-
}
+
// Create the HTTP router
+
const router = createRouter(ctx)
-
run()
+
// Start the HTTP server
+
const { terminate } = await startServer(router, { port: env.PORT })
+
+
const url = env.PUBLIC_URL || `http://localhost:${env.PORT}`
+
ctx.logger.info(`Server (${env.NODE_ENV}) running at ${url}`)
+
+
// Subscribe to events on the firehose
+
ctx.ingester.start()
+
+
// Wait for a termination signal
+
if (!killSignal.aborted) await once(killSignal, 'abort')
+
ctx.logger.info(`Signal received, shutting down...`)
+
+
// Gracefully shutdown the http server
+
await terminate()
+
+
// Gracefully shutdown the application context
+
await ctx.destroy()
+
})
+77
src/ingester.ts
···
+
import type { Database } from '#/db'
+
import * as Status from '#/lexicon/types/xyz/statusphere/status'
+
import { IdResolver, MemoryCache } from '@atproto/identity'
+
import { Event, Firehose } from '@atproto/sync'
+
import pino from 'pino'
+
import { env } from './env'
+
+
const HOUR = 60e3 * 60
+
const DAY = HOUR * 24
+
+
export function createIngester(db: Database) {
+
const logger = pino({ name: 'firehose', level: env.LOG_LEVEL })
+
return new Firehose({
+
filterCollections: ['xyz.statusphere.status'],
+
handleEvent: async (evt: Event) => {
+
// Watch for write events
+
if (evt.event === 'create' || evt.event === 'update') {
+
const now = new Date()
+
const record = evt.record
+
+
// If the write is a valid status update
+
if (
+
evt.collection === 'xyz.statusphere.status' &&
+
Status.isRecord(record) &&
+
Status.validateRecord(record).success
+
) {
+
logger.debug(
+
{ uri: evt.uri.toString(), status: record.status },
+
'ingesting status',
+
)
+
+
// Store the status in our SQLite
+
await db
+
.insertInto('status')
+
.values({
+
uri: evt.uri.toString(),
+
authorDid: evt.did,
+
status: record.status,
+
createdAt: record.createdAt,
+
indexedAt: now.toISOString(),
+
})
+
.onConflict((oc) =>
+
oc.column('uri').doUpdateSet({
+
status: record.status,
+
indexedAt: now.toISOString(),
+
}),
+
)
+
.execute()
+
}
+
} else if (
+
evt.event === 'delete' &&
+
evt.collection === 'xyz.statusphere.status'
+
) {
+
logger.debug(
+
{ uri: evt.uri.toString(), did: evt.did },
+
'deleting status',
+
)
+
+
// Remove the status from our SQLite
+
await db
+
.deleteFrom('status')
+
.where('uri', '=', evt.uri.toString())
+
.execute()
+
}
+
},
+
onError: (err: unknown) => {
+
logger.error({ err }, 'error on firehose ingestion')
+
},
+
excludeIdentity: true,
+
excludeAccount: true,
+
service: env.FIREHOSE_URL,
+
idResolver: new IdResolver({
+
plcUrl: env.PLC_URL,
+
didCache: new MemoryCache(HOUR, DAY),
+
}),
+
})
+
}
+66 -6
src/lexicon/index.ts
···
export class Server {
xrpc: XrpcServer
-
example: ExampleNS
+
app: AppNS
+
xyz: XyzNS
+
com: ComNS
constructor(options?: XrpcOptions) {
this.xrpc = createXrpcServer(schemas, options)
-
this.example = new ExampleNS(this)
+
this.app = new AppNS(this)
+
this.xyz = new XyzNS(this)
+
this.com = new ComNS(this)
}
}
-
export class ExampleNS {
+
export class AppNS {
_server: Server
-
lexicon: ExampleLexiconNS
+
bsky: AppBskyNS
constructor(server: Server) {
this._server = server
-
this.lexicon = new ExampleLexiconNS(server)
+
this.bsky = new AppBskyNS(server)
}
}
-
export class ExampleLexiconNS {
+
export class AppBskyNS {
+
_server: Server
+
actor: AppBskyActorNS
+
+
constructor(server: Server) {
+
this._server = server
+
this.actor = new AppBskyActorNS(server)
+
}
+
}
+
+
export class AppBskyActorNS {
+
_server: Server
+
+
constructor(server: Server) {
+
this._server = server
+
}
+
}
+
+
export class XyzNS {
+
_server: Server
+
statusphere: XyzStatusphereNS
+
+
constructor(server: Server) {
+
this._server = server
+
this.statusphere = new XyzStatusphereNS(server)
+
}
+
}
+
+
export class XyzStatusphereNS {
+
_server: Server
+
+
constructor(server: Server) {
+
this._server = server
+
}
+
}
+
+
export class ComNS {
+
_server: Server
+
atproto: ComAtprotoNS
+
+
constructor(server: Server) {
+
this._server = server
+
this.atproto = new ComAtprotoNS(server)
+
}
+
}
+
+
export class ComAtprotoNS {
+
_server: Server
+
repo: ComAtprotoRepoNS
+
+
constructor(server: Server) {
+
this._server = server
+
this.repo = new ComAtprotoRepoNS(server)
+
}
+
}
+
+
export class ComAtprotoRepoNS {
_server: Server
constructor(server: Server) {
+268 -5
src/lexicon/lexicons.ts
···
import { LexiconDoc, Lexicons } from '@atproto/lexicon'
export const schemaDict = {
-
ExampleLexiconStatus: {
+
ComAtprotoLabelDefs: {
+
lexicon: 1,
+
id: 'com.atproto.label.defs',
+
defs: {
+
label: {
+
type: 'object',
+
description:
+
'Metadata tag on an atproto resource (eg, repo or record).',
+
required: ['src', 'uri', 'val', 'cts'],
+
properties: {
+
ver: {
+
type: 'integer',
+
description: 'The AT Protocol version of the label object.',
+
},
+
src: {
+
type: 'string',
+
format: 'did',
+
description: 'DID of the actor who created this label.',
+
},
+
uri: {
+
type: 'string',
+
format: 'uri',
+
description:
+
'AT URI of the record, repository (account), or other resource that this label applies to.',
+
},
+
cid: {
+
type: 'string',
+
format: 'cid',
+
description:
+
"Optionally, CID specifying the specific version of 'uri' resource this label applies to.",
+
},
+
val: {
+
type: 'string',
+
maxLength: 128,
+
description:
+
'The short string name of the value or type of this label.',
+
},
+
neg: {
+
type: 'boolean',
+
description:
+
'If true, this is a negation label, overwriting a previous label.',
+
},
+
cts: {
+
type: 'string',
+
format: 'datetime',
+
description: 'Timestamp when this label was created.',
+
},
+
exp: {
+
type: 'string',
+
format: 'datetime',
+
description:
+
'Timestamp at which this label expires (no longer applies).',
+
},
+
sig: {
+
type: 'bytes',
+
description: 'Signature of dag-cbor encoded label.',
+
},
+
},
+
},
+
selfLabels: {
+
type: 'object',
+
description:
+
'Metadata tags on an atproto record, published by the author within the record.',
+
required: ['values'],
+
properties: {
+
values: {
+
type: 'array',
+
items: {
+
type: 'ref',
+
ref: 'lex:com.atproto.label.defs#selfLabel',
+
},
+
maxLength: 10,
+
},
+
},
+
},
+
selfLabel: {
+
type: 'object',
+
description:
+
'Metadata tag on an atproto record, published by the author within the record. Note that schemas should use #selfLabels, not #selfLabel.',
+
required: ['val'],
+
properties: {
+
val: {
+
type: 'string',
+
maxLength: 128,
+
description:
+
'The short string name of the value or type of this label.',
+
},
+
},
+
},
+
labelValueDefinition: {
+
type: 'object',
+
description:
+
'Declares a label value and its expected interpretations and behaviors.',
+
required: ['identifier', 'severity', 'blurs', 'locales'],
+
properties: {
+
identifier: {
+
type: 'string',
+
description:
+
"The value of the label being defined. Must only include lowercase ascii and the '-' character ([a-z-]+).",
+
maxLength: 100,
+
maxGraphemes: 100,
+
},
+
severity: {
+
type: 'string',
+
description:
+
"How should a client visually convey this label? 'inform' means neutral and informational; 'alert' means negative and warning; 'none' means show nothing.",
+
knownValues: ['inform', 'alert', 'none'],
+
},
+
blurs: {
+
type: 'string',
+
description:
+
"What should this label hide in the UI, if applied? 'content' hides all of the target; 'media' hides the images/video/audio; 'none' hides nothing.",
+
knownValues: ['content', 'media', 'none'],
+
},
+
defaultSetting: {
+
type: 'string',
+
description: 'The default setting for this label.',
+
knownValues: ['ignore', 'warn', 'hide'],
+
default: 'warn',
+
},
+
adultOnly: {
+
type: 'boolean',
+
description:
+
'Does the user need to have adult content enabled in order to configure this label?',
+
},
+
locales: {
+
type: 'array',
+
items: {
+
type: 'ref',
+
ref: 'lex:com.atproto.label.defs#labelValueDefinitionStrings',
+
},
+
},
+
},
+
},
+
labelValueDefinitionStrings: {
+
type: 'object',
+
description:
+
'Strings which describe the label in the UI, localized into a specific language.',
+
required: ['lang', 'name', 'description'],
+
properties: {
+
lang: {
+
type: 'string',
+
description:
+
'The code of the language these strings are written in.',
+
format: 'language',
+
},
+
name: {
+
type: 'string',
+
description: 'A short human-readable name for the label.',
+
maxGraphemes: 64,
+
maxLength: 640,
+
},
+
description: {
+
type: 'string',
+
description:
+
'A longer description of what the label means and why it might be applied.',
+
maxGraphemes: 10000,
+
maxLength: 100000,
+
},
+
},
+
},
+
labelValue: {
+
type: 'string',
+
knownValues: [
+
'!hide',
+
'!no-promote',
+
'!warn',
+
'!no-unauthenticated',
+
'dmca-violation',
+
'doxxing',
+
'porn',
+
'sexual',
+
'nudity',
+
'nsfl',
+
'gore',
+
],
+
},
+
},
+
},
+
AppBskyActorProfile: {
lexicon: 1,
-
id: 'example.lexicon.status',
+
id: 'app.bsky.actor.profile',
defs: {
main: {
type: 'record',
+
description: 'A declaration of a Bluesky account profile.',
key: 'literal:self',
record: {
type: 'object',
-
required: ['status', 'updatedAt'],
+
properties: {
+
displayName: {
+
type: 'string',
+
maxGraphemes: 64,
+
maxLength: 640,
+
},
+
description: {
+
type: 'string',
+
description: 'Free-form profile description text.',
+
maxGraphemes: 256,
+
maxLength: 2560,
+
},
+
avatar: {
+
type: 'blob',
+
description:
+
"Small image to be displayed next to posts from account. AKA, 'profile picture'",
+
accept: ['image/png', 'image/jpeg'],
+
maxSize: 1000000,
+
},
+
banner: {
+
type: 'blob',
+
description:
+
'Larger horizontal image to display behind profile view.',
+
accept: ['image/png', 'image/jpeg'],
+
maxSize: 1000000,
+
},
+
labels: {
+
type: 'union',
+
description:
+
'Self-label values, specific to the Bluesky application, on the overall account.',
+
refs: ['lex:com.atproto.label.defs#selfLabels'],
+
},
+
joinedViaStarterPack: {
+
type: 'ref',
+
ref: 'lex:com.atproto.repo.strongRef',
+
},
+
createdAt: {
+
type: 'string',
+
format: 'datetime',
+
},
+
},
+
},
+
},
+
},
+
},
+
XyzStatusphereStatus: {
+
lexicon: 1,
+
id: 'xyz.statusphere.status',
+
defs: {
+
main: {
+
type: 'record',
+
key: 'tid',
+
record: {
+
type: 'object',
+
required: ['status', 'createdAt'],
properties: {
status: {
type: 'string',
+
minLength: 1,
+
maxGraphemes: 1,
+
maxLength: 32,
},
-
updatedAt: {
+
createdAt: {
type: 'string',
format: 'datetime',
},
···
},
},
},
+
ComAtprotoRepoStrongRef: {
+
lexicon: 1,
+
id: 'com.atproto.repo.strongRef',
+
description: 'A URI with a content-hash fingerprint.',
+
defs: {
+
main: {
+
type: 'object',
+
required: ['uri', 'cid'],
+
properties: {
+
uri: {
+
type: 'string',
+
format: 'at-uri',
+
},
+
cid: {
+
type: 'string',
+
format: 'cid',
+
},
+
},
+
},
+
},
+
},
}
export const schemas: LexiconDoc[] = Object.values(schemaDict) as LexiconDoc[]
export const lexicons: Lexicons = new Lexicons(schemas)
-
export const ids = { ExampleLexiconStatus: 'example.lexicon.status' }
+
export const ids = {
+
ComAtprotoLabelDefs: 'com.atproto.label.defs',
+
AppBskyActorProfile: 'app.bsky.actor.profile',
+
XyzStatusphereStatus: 'xyz.statusphere.status',
+
ComAtprotoRepoStrongRef: 'com.atproto.repo.strongRef',
+
}
+38
src/lexicon/types/app/bsky/actor/profile.ts
···
+
/**
+
* GENERATED CODE - DO NOT MODIFY
+
*/
+
import { ValidationResult, BlobRef } from '@atproto/lexicon'
+
import { lexicons } from '../../../../lexicons'
+
import { isObj, hasProp } from '../../../../util'
+
import { CID } from 'multiformats/cid'
+
import * as ComAtprotoLabelDefs from '../../../com/atproto/label/defs'
+
import * as ComAtprotoRepoStrongRef from '../../../com/atproto/repo/strongRef'
+
+
export interface Record {
+
displayName?: string
+
/** Free-form profile description text. */
+
description?: string
+
/** Small image to be displayed next to posts from account. AKA, 'profile picture' */
+
avatar?: BlobRef
+
/** Larger horizontal image to display behind profile view. */
+
banner?: BlobRef
+
labels?:
+
| ComAtprotoLabelDefs.SelfLabels
+
| { $type: string; [k: string]: unknown }
+
joinedViaStarterPack?: ComAtprotoRepoStrongRef.Main
+
createdAt?: string
+
[k: string]: unknown
+
}
+
+
export function isRecord(v: unknown): v is Record {
+
return (
+
isObj(v) &&
+
hasProp(v, '$type') &&
+
(v.$type === 'app.bsky.actor.profile#main' ||
+
v.$type === 'app.bsky.actor.profile')
+
)
+
}
+
+
export function validateRecord(v: unknown): ValidationResult {
+
return lexicons.validate('app.bsky.actor.profile#main', v)
+
}
+151
src/lexicon/types/com/atproto/label/defs.ts
···
+
/**
+
* GENERATED CODE - DO NOT MODIFY
+
*/
+
import { ValidationResult, BlobRef } from '@atproto/lexicon'
+
import { lexicons } from '../../../../lexicons'
+
import { isObj, hasProp } from '../../../../util'
+
import { CID } from 'multiformats/cid'
+
+
/** Metadata tag on an atproto resource (eg, repo or record). */
+
export interface Label {
+
/** The AT Protocol version of the label object. */
+
ver?: number
+
/** DID of the actor who created this label. */
+
src: string
+
/** AT URI of the record, repository (account), or other resource that this label applies to. */
+
uri: string
+
/** Optionally, CID specifying the specific version of 'uri' resource this label applies to. */
+
cid?: string
+
/** The short string name of the value or type of this label. */
+
val: string
+
/** If true, this is a negation label, overwriting a previous label. */
+
neg?: boolean
+
/** Timestamp when this label was created. */
+
cts: string
+
/** Timestamp at which this label expires (no longer applies). */
+
exp?: string
+
/** Signature of dag-cbor encoded label. */
+
sig?: Uint8Array
+
[k: string]: unknown
+
}
+
+
export function isLabel(v: unknown): v is Label {
+
return (
+
isObj(v) &&
+
hasProp(v, '$type') &&
+
v.$type === 'com.atproto.label.defs#label'
+
)
+
}
+
+
export function validateLabel(v: unknown): ValidationResult {
+
return lexicons.validate('com.atproto.label.defs#label', v)
+
}
+
+
/** Metadata tags on an atproto record, published by the author within the record. */
+
export interface SelfLabels {
+
values: SelfLabel[]
+
[k: string]: unknown
+
}
+
+
export function isSelfLabels(v: unknown): v is SelfLabels {
+
return (
+
isObj(v) &&
+
hasProp(v, '$type') &&
+
v.$type === 'com.atproto.label.defs#selfLabels'
+
)
+
}
+
+
export function validateSelfLabels(v: unknown): ValidationResult {
+
return lexicons.validate('com.atproto.label.defs#selfLabels', v)
+
}
+
+
/** Metadata tag on an atproto record, published by the author within the record. Note that schemas should use #selfLabels, not #selfLabel. */
+
export interface SelfLabel {
+
/** The short string name of the value or type of this label. */
+
val: string
+
[k: string]: unknown
+
}
+
+
export function isSelfLabel(v: unknown): v is SelfLabel {
+
return (
+
isObj(v) &&
+
hasProp(v, '$type') &&
+
v.$type === 'com.atproto.label.defs#selfLabel'
+
)
+
}
+
+
export function validateSelfLabel(v: unknown): ValidationResult {
+
return lexicons.validate('com.atproto.label.defs#selfLabel', v)
+
}
+
+
/** Declares a label value and its expected interpretations and behaviors. */
+
export interface LabelValueDefinition {
+
/** The value of the label being defined. Must only include lowercase ascii and the '-' character ([a-z-]+). */
+
identifier: string
+
/** How should a client visually convey this label? 'inform' means neutral and informational; 'alert' means negative and warning; 'none' means show nothing. */
+
severity: 'inform' | 'alert' | 'none' | (string & {})
+
/** What should this label hide in the UI, if applied? 'content' hides all of the target; 'media' hides the images/video/audio; 'none' hides nothing. */
+
blurs: 'content' | 'media' | 'none' | (string & {})
+
/** The default setting for this label. */
+
defaultSetting: 'ignore' | 'warn' | 'hide' | (string & {})
+
/** Does the user need to have adult content enabled in order to configure this label? */
+
adultOnly?: boolean
+
locales: LabelValueDefinitionStrings[]
+
[k: string]: unknown
+
}
+
+
export function isLabelValueDefinition(v: unknown): v is LabelValueDefinition {
+
return (
+
isObj(v) &&
+
hasProp(v, '$type') &&
+
v.$type === 'com.atproto.label.defs#labelValueDefinition'
+
)
+
}
+
+
export function validateLabelValueDefinition(v: unknown): ValidationResult {
+
return lexicons.validate('com.atproto.label.defs#labelValueDefinition', v)
+
}
+
+
/** Strings which describe the label in the UI, localized into a specific language. */
+
export interface LabelValueDefinitionStrings {
+
/** The code of the language these strings are written in. */
+
lang: string
+
/** A short human-readable name for the label. */
+
name: string
+
/** A longer description of what the label means and why it might be applied. */
+
description: string
+
[k: string]: unknown
+
}
+
+
export function isLabelValueDefinitionStrings(
+
v: unknown,
+
): v is LabelValueDefinitionStrings {
+
return (
+
isObj(v) &&
+
hasProp(v, '$type') &&
+
v.$type === 'com.atproto.label.defs#labelValueDefinitionStrings'
+
)
+
}
+
+
export function validateLabelValueDefinitionStrings(
+
v: unknown,
+
): ValidationResult {
+
return lexicons.validate(
+
'com.atproto.label.defs#labelValueDefinitionStrings',
+
v,
+
)
+
}
+
+
export type LabelValue =
+
| '!hide'
+
| '!no-promote'
+
| '!warn'
+
| '!no-unauthenticated'
+
| 'dmca-violation'
+
| 'doxxing'
+
| 'porn'
+
| 'sexual'
+
| 'nudity'
+
| 'nsfl'
+
| 'gore'
+
| (string & {})
+26
src/lexicon/types/com/atproto/repo/strongRef.ts
···
+
/**
+
* GENERATED CODE - DO NOT MODIFY
+
*/
+
import { ValidationResult, BlobRef } from '@atproto/lexicon'
+
import { lexicons } from '../../../../lexicons'
+
import { isObj, hasProp } from '../../../../util'
+
import { CID } from 'multiformats/cid'
+
+
export interface Main {
+
uri: string
+
cid: string
+
[k: string]: unknown
+
}
+
+
export function isMain(v: unknown): v is Main {
+
return (
+
isObj(v) &&
+
hasProp(v, '$type') &&
+
(v.$type === 'com.atproto.repo.strongRef#main' ||
+
v.$type === 'com.atproto.repo.strongRef')
+
)
+
}
+
+
export function validateMain(v: unknown): ValidationResult {
+
return lexicons.validate('com.atproto.repo.strongRef#main', v)
+
}
-26
src/lexicon/types/example/lexicon/status.ts
···
-
/**
-
* GENERATED CODE - DO NOT MODIFY
-
*/
-
import { ValidationResult, BlobRef } from '@atproto/lexicon'
-
import { lexicons } from '../../../lexicons'
-
import { isObj, hasProp } from '../../../util'
-
import { CID } from 'multiformats/cid'
-
-
export interface Record {
-
status: string
-
updatedAt: string
-
[k: string]: unknown
-
}
-
-
export function isRecord(v: unknown): v is Record {
-
return (
-
isObj(v) &&
-
hasProp(v, '$type') &&
-
(v.$type === 'example.lexicon.status#main' ||
-
v.$type === 'example.lexicon.status')
-
)
-
}
-
-
export function validateRecord(v: unknown): ValidationResult {
-
return lexicons.validate('example.lexicon.status#main', v)
-
}
+26
src/lexicon/types/xyz/statusphere/status.ts
···
+
/**
+
* GENERATED CODE - DO NOT MODIFY
+
*/
+
import { ValidationResult, BlobRef } from '@atproto/lexicon'
+
import { lexicons } from '../../../lexicons'
+
import { isObj, hasProp } from '../../../util'
+
import { CID } from 'multiformats/cid'
+
+
export interface Record {
+
status: string
+
createdAt: string
+
[k: string]: unknown
+
}
+
+
export function isRecord(v: unknown): v is Record {
+
return (
+
isObj(v) &&
+
hasProp(v, '$type') &&
+
(v.$type === 'xyz.statusphere.status#main' ||
+
v.$type === 'xyz.statusphere.status')
+
)
+
}
+
+
export function validateRecord(v: unknown): ValidationResult {
+
return lexicons.validate('xyz.statusphere.status#main', v)
+
}
+59
src/lib/http.ts
···
+
import { Request, Response } from 'express'
+
import { createHttpTerminator } from 'http-terminator'
+
import { once } from 'node:events'
+
import type {
+
IncomingMessage,
+
RequestListener,
+
ServerResponse,
+
} from 'node:http'
+
import { createServer } from 'node:http'
+
+
export type NextFunction = (err?: unknown) => void
+
+
export type Middleware<
+
Req extends IncomingMessage = IncomingMessage,
+
Res extends ServerResponse = ServerResponse,
+
> = (req: Req, res: Res, next: NextFunction) => void
+
+
export type Handler<
+
Req extends IncomingMessage = IncomingMessage,
+
Res extends ServerResponse = ServerResponse,
+
> = (req: Req, res: Res) => unknown | Promise<unknown>
+
/**
+
* Wraps a request handler middleware to ensure that `next` is called if it
+
* throws or returns a promise that rejects.
+
*/
+
export function handler<
+
Req extends IncomingMessage = Request,
+
Res extends ServerResponse = Response,
+
>(fn: Handler<Req, Res>): Middleware<Req, Res> {
+
return async (req, res, next) => {
+
try {
+
await fn(req, res)
+
} catch (err) {
+
next(err)
+
}
+
}
+
}
+
+
/**
+
* Create an HTTP server with the provided request listener, ensuring that it
+
* can bind the listening port, and returns a termination function that allows
+
* graceful termination of HTTP connections.
+
*/
+
export async function startServer(
+
requestListener: RequestListener,
+
{
+
port,
+
gracefulTerminationTimeout,
+
}: { port?: number; gracefulTerminationTimeout?: number } = {},
+
) {
+
const server = createServer(requestListener)
+
const { terminate } = createHttpTerminator({
+
gracefulTerminationTimeout,
+
server,
+
})
+
server.listen(port)
+
await once(server, 'listening')
+
return { server, terminate }
+
}
+17
src/lib/jwk.ts
···
+
import { Jwk, jwkValidator } from '@atproto/oauth-client-node'
+
import { makeValidator } from 'envalid'
+
import { z } from 'zod'
+
+
export type JsonWebKey = Jwk & { kid: string }
+
+
const jsonWebKeySchema = z.intersection(
+
jwkValidator,
+
z.object({ kid: z.string().nonempty() }),
+
) satisfies z.ZodType<JsonWebKey>
+
+
const jsonWebKeysSchema = z.array(jsonWebKeySchema).nonempty()
+
+
export const envalidJsonWebKeys = makeValidator((input) => {
+
const value = JSON.parse(input)
+
return jsonWebKeysSchema.parse(value)
+
})
+24
src/lib/process.ts
···
+
const SIGNALS = ['SIGINT', 'SIGTERM'] as const
+
+
/**
+
* Runs a function with an abort signal that will be triggered when the process
+
* receives a termination signal.
+
*/
+
export async function run<F extends (signal: AbortSignal) => Promise<void>>(
+
fn: F,
+
): Promise<void> {
+
const killController = new AbortController()
+
+
const abort = (signal?: string) => {
+
for (const sig of SIGNALS) process.off(sig, abort)
+
killController.abort(signal)
+
}
+
+
for (const sig of SIGNALS) process.on(sig, abort)
+
+
try {
+
await fn(killController.signal)
+
} finally {
+
abort()
+
}
+
}
+4
src/lib/util.ts
···
+
export function ifString<T>(value: T): (T & string) | undefined {
+
if (typeof value === 'string') return value
+
return undefined
+
}
+12
src/lib/view.ts
···
+
// @ts-ignore
+
import ssr from 'uhtml/ssr'
+
import type initSSR from 'uhtml/types/init-ssr'
+
import type { Hole } from 'uhtml/types/keyed'
+
+
export type { Hole }
+
+
export const { html }: ReturnType<typeof initSSR> = ssr()
+
+
export function page(hole: Hole) {
+
return `<!DOCTYPE html>\n${hole.toDOM().toString()}`
+
}
-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()
+104 -30
src/pages/home.ts
···
-
import { AtUri } from '@atproto/syntax'
-
import type { Post } from '#/db/schema'
-
import { html } from '../view'
+
import type { Status } from '#/db'
+
import { html } from '../lib/view'
import { shell } from './shell'
-
type Props = { posts: Post[]; profile?: { displayName?: string; handle: string } }
+
const TODAY = new Date().toDateString()
+
+
export const STATUS_OPTIONS = [
+
'๐Ÿ‘',
+
'๐Ÿ‘Ž',
+
'๐Ÿ’™',
+
'๐Ÿฅน',
+
'๐Ÿ˜ง',
+
'๐Ÿ™ƒ',
+
'๐Ÿ˜‰',
+
'๐Ÿ˜Ž',
+
'๐Ÿค“',
+
'๐Ÿคจ',
+
'๐Ÿฅณ',
+
'๐Ÿ˜ญ',
+
'๐Ÿ˜ค',
+
'๐Ÿคฏ',
+
'๐Ÿซก',
+
'๐Ÿ’€',
+
'โœŠ',
+
'๐Ÿค˜',
+
'๐Ÿ‘€',
+
'๐Ÿง ',
+
'๐Ÿ‘ฉโ€๐Ÿ’ป',
+
'๐Ÿง‘โ€๐Ÿ’ป',
+
'๐Ÿฅท',
+
'๐ŸงŒ',
+
'๐Ÿฆ‹',
+
'๐Ÿš€',
+
]
+
+
type Props = {
+
statuses: Status[]
+
didHandleMap: Record<string, string | undefined>
+
profile?: { displayName?: string }
+
myStatus?: Status
+
}
export function home(props: Props) {
return shell({
···
})
}
-
function content({ posts, profile }: Props) {
+
function content({ statuses, didHandleMap, profile, myStatus }: Props) {
return html`<div id="root">
-
<h1>Welcome to the Atmosphere</h1>
-
${
-
profile
-
? html`<form action="/logout" method="post">
-
<p>
-
Hi, <b>${profile.displayName || profile.handle}</b>. It's pretty special here.
-
<button type="submit">Log out.</button>
-
</p>
-
</form>`
-
: html`<p>
-
It's pretty special here.
-
<a href="/login">Login.</a>
-
</p>`
-
}
-
<ul>
-
${posts.map((post) => {
-
return html`<li>
-
<a href="${toBskyLink(post.uri)}" target="_blank">๐Ÿ”—</a>
-
${post.text}
-
</li>`
+
<div class="error"></div>
+
<div id="header">
+
<h1>Statusphere</h1>
+
<p>Set your status on the Atmosphere.</p>
+
</div>
+
<div class="container">
+
<div class="card">
+
${profile
+
? html`<form action="/logout" method="post" class="session-form">
+
<div>
+
Hi, <strong>${profile.displayName || 'friend'}</strong>. What's
+
your status today?
+
</div>
+
<div>
+
<button type="submit">Log out</button>
+
</div>
+
</form>`
+
: html`<div class="session-form">
+
<div><a href="/login">Log in</a> to set your status!</div>
+
<div>
+
<a href="/login" class="button">Log in</a>
+
</div>
+
</div>`}
+
</div>
+
<form action="/status" method="post" class="status-options">
+
${STATUS_OPTIONS.map(
+
(status) =>
+
html`<button
+
class=${myStatus?.status === status
+
? 'status-option selected'
+
: 'status-option'}
+
name="status"
+
value="${status}"
+
>
+
${status}
+
</button>`,
+
)}
+
</form>
+
${statuses.map((status, i) => {
+
const handle = didHandleMap[status.authorDid] || status.authorDid
+
const date = ts(status)
+
return html`
+
<div class=${i === 0 ? 'status-line no-line' : 'status-line'}>
+
<div>
+
<div class="status">${status.status}</div>
+
</div>
+
<div class="desc">
+
<a class="author" href=${toBskyLink(handle)}>@${handle}</a>
+
${date === TODAY
+
? `is feeling ${status.status} today`
+
: `was feeling ${status.status} on ${date}`}
+
</div>
+
</div>
+
`
})}
-
</ul>
-
<a href="/">Give me more</a>
+
</div>
</div>`
}
-
function toBskyLink(uriStr: string) {
-
const uri = new AtUri(uriStr)
-
return `https://bsky.app/profile/${uri.host}/post/${uri.rkey}`
+
function toBskyLink(did: string) {
+
return `https://bsky.app/profile/${did}`
+
}
+
+
function ts(status: Status) {
+
const createdAt = new Date(status.createdAt)
+
const indexedAt = new Date(status.indexedAt)
+
if (createdAt < indexedAt) return createdAt.toDateString()
+
return indexedAt.toDateString()
}
+29 -6
src/pages/login.ts
···
-
import { html } from '../view'
+
import { env } from '#/env'
+
import { html } from '../lib/view'
import { shell } from './shell'
type Props = { error?: string }
export function login(props: Props) {
return shell({
-
title: 'Login',
+
title: 'Log in',
content: content(props),
})
}
function content({ error }: Props) {
+
const signupService =
+
!env.PDS_URL || env.PDS_URL === 'https://bsky.social'
+
? 'Bluesky'
+
: new URL(env.PDS_URL).hostname
+
return html`<div id="root">
-
<form action="/login" method="post">
-
<input type="text" name="handle" placeholder="handle" required />
-
<button type="submit">Log in.</button>
+
<div id="header">
+
<h1>Statusphere</h1>
+
<p>Set your status on the Atmosphere.</p>
+
</div>
+
<div class="container">
+
<form action="/login" method="post" class="login-form">
+
<input
+
type="text"
+
name="input"
+
placeholder="Enter your handle (eg alice.bsky.social)"
+
required
+
/>
+
+
<button type="submit">Log in</button>
+
</form>
+
+
<a href="/signup" class="button signup-cta">
+
Login or Sign up with a ${signupService} account
+
</a>
+
${error ? html`<p>Error: <i>${error}</i></p>` : undefined}
-
</form>
+
</div>
</div>`
}
+231
src/pages/public/styles.css
···
+
body {
+
font-family: Arial, Helvetica, sans-serif;
+
+
--border-color: #ddd;
+
--gray-100: #fafafa;
+
--gray-500: #666;
+
--gray-700: #333;
+
--primary-100: #d2e7ff;
+
--primary-200: #b1d3fa;
+
--primary-400: #2e8fff;
+
--primary-500: #0078ff;
+
--primary-600: #0066db;
+
--error-500: #f00;
+
--error-100: #fee;
+
}
+
+
/*
+
Josh's Custom CSS Reset
+
https://www.joshwcomeau.com/css/custom-css-reset/
+
*/
+
*,
+
*::before,
+
*::after {
+
box-sizing: border-box;
+
}
+
* {
+
margin: 0;
+
}
+
body {
+
line-height: 1.5;
+
-webkit-font-smoothing: antialiased;
+
}
+
img,
+
picture,
+
video,
+
canvas,
+
svg {
+
display: block;
+
max-width: 100%;
+
}
+
input,
+
button,
+
textarea,
+
select {
+
font: inherit;
+
}
+
p,
+
h1,
+
h2,
+
h3,
+
h4,
+
h5,
+
h6 {
+
overflow-wrap: break-word;
+
}
+
#root,
+
#__next {
+
isolation: isolate;
+
}
+
+
/*
+
Common components
+
*/
+
button,
+
.button {
+
display: inline-block;
+
border: 0;
+
background-color: var(--primary-500);
+
border-radius: 50px;
+
color: #fff;
+
padding: 2px 10px;
+
cursor: pointer;
+
text-decoration: none;
+
}
+
button:hover,
+
.button:hover {
+
background: var(--primary-400);
+
}
+
+
/*
+
Custom components
+
*/
+
.error {
+
background-color: var(--error-100);
+
color: var(--error-500);
+
text-align: center;
+
padding: 1rem;
+
display: none;
+
}
+
.error.visible {
+
display: block;
+
}
+
+
#header {
+
background-color: #fff;
+
text-align: center;
+
padding: 0.5rem 0 1.5rem;
+
}
+
+
#header h1 {
+
font-size: 5rem;
+
}
+
+
.container {
+
display: flex;
+
flex-direction: column;
+
gap: 4px;
+
margin: 0 auto;
+
max-width: 600px;
+
padding: 20px;
+
}
+
+
.card {
+
/* border: 1px solid var(--border-color); */
+
border-radius: 6px;
+
padding: 10px 16px;
+
background-color: #fff;
+
}
+
.card > :first-child {
+
margin-top: 0;
+
}
+
.card > :last-child {
+
margin-bottom: 0;
+
}
+
+
.session-form {
+
display: flex;
+
flex-direction: row;
+
align-items: center;
+
justify-content: space-between;
+
}
+
+
.login-form {
+
display: flex;
+
flex-direction: row;
+
gap: 6px;
+
border: 1px solid var(--border-color);
+
border-radius: 6px;
+
padding: 10px 16px;
+
background-color: #fff;
+
}
+
+
.login-form input {
+
flex: 1;
+
border: 0;
+
}
+
+
.status-options {
+
display: flex;
+
flex-direction: row;
+
flex-wrap: wrap;
+
gap: 8px;
+
margin: 10px 0;
+
}
+
+
.status-option {
+
font-size: 2rem;
+
width: 3rem;
+
height: 3rem;
+
padding: 0;
+
background-color: #fff;
+
border: 1px solid var(--border-color);
+
border-radius: 3rem;
+
text-align: center;
+
box-shadow: 0 1px 4px #0001;
+
cursor: pointer;
+
}
+
+
.status-option:hover {
+
background-color: var(--primary-100);
+
box-shadow: 0 0 0 1px var(--primary-400);
+
}
+
+
.status-option.selected {
+
box-shadow: 0 0 0 1px var(--primary-500);
+
background-color: var(--primary-100);
+
}
+
+
.status-option.selected:hover {
+
background-color: var(--primary-200);
+
}
+
+
.status-line {
+
display: flex;
+
flex-direction: row;
+
align-items: center;
+
gap: 10px;
+
position: relative;
+
margin-top: 15px;
+
}
+
+
.status-line:not(.no-line)::before {
+
content: '';
+
position: absolute;
+
width: 2px;
+
background-color: var(--border-color);
+
left: 1.45rem;
+
bottom: calc(100% + 2px);
+
height: 15px;
+
}
+
+
.status-line .status {
+
font-size: 2rem;
+
background-color: #fff;
+
width: 3rem;
+
height: 3rem;
+
border-radius: 1.5rem;
+
text-align: center;
+
border: 1px solid var(--border-color);
+
}
+
+
.status-line .desc {
+
color: var(--gray-500);
+
}
+
+
.status-line .author {
+
color: var(--gray-700);
+
font-weight: 600;
+
text-decoration: none;
+
}
+
+
.status-line .author:hover {
+
text-decoration: underline;
+
}
+
+
.signup-cta {
+
text-align: center;
+
width: 100%;
+
display: block;
+
margin-top: 1rem;
+
}
+2 -2
src/pages/shell.ts
···
-
import { type Hole, html } from '../view'
+
import { type Hole, html } from '../lib/view'
export function shell({ title, content }: { title: string; content: Hole }) {
return html`<html>
<head>
<title>${title}</title>
-
<link rel="stylesheet" href="/public/styles.css">
+
<link rel="stylesheet" href="/public/styles.css" />
</head>
<body>
${content}
-35
src/public/styles.css
···
-
body {
-
font-family: Arial, Helvetica, sans-serif;
-
}
-
-
#root {
-
padding: 20px;
-
}
-
-
/*
-
Josh's Custom CSS Reset
-
https://www.joshwcomeau.com/css/custom-css-reset/
-
*/
-
*, *::before, *::after {
-
box-sizing: border-box;
-
}
-
* {
-
margin: 0;
-
}
-
body {
-
line-height: 1.5;
-
-webkit-font-smoothing: antialiased;
-
}
-
img, picture, video, canvas, svg {
-
display: block;
-
max-width: 100%;
-
}
-
input, button, textarea, select {
-
font: inherit;
-
}
-
p, h1, h2, h3, h4, h5, h6 {
-
overflow-wrap: break-word;
-
}
-
#root, #__next {
-
isolation: isolate;
-
}
-98
src/routes/index.ts
···
-
import path from 'node:path'
-
import { OAuthResolverError } from '@atproto/oauth-client-node'
-
import { isValidHandle } from '@atproto/syntax'
-
import express from 'express'
-
import { createSession, destroySession, getSession } from '#/auth/session'
-
import type { AppContext } from '#/config'
-
import { home } from '#/pages/home'
-
import { login } from '#/pages/login'
-
import { page } from '#/view'
-
import { handler } from './util'
-
-
export const createRouter = (ctx: AppContext) => {
-
const router = express.Router()
-
-
router.use('/public', express.static(path.join(__dirname, '..', 'public')))
-
-
router.get(
-
'/client-metadata.json',
-
handler((_req, res) => {
-
return res.json(ctx.oauthClient.clientMetadata)
-
}),
-
)
-
-
router.get(
-
'/oauth/callback',
-
handler(async (req, res) => {
-
const params = new URLSearchParams(req.originalUrl.split('?')[1])
-
try {
-
const { agent } = await ctx.oauthClient.callback(params)
-
await createSession(req, res, agent.accountDid)
-
} catch (err) {
-
ctx.logger.error({ err }, 'oauth callback failed')
-
return res.redirect('/?error')
-
}
-
return res.redirect('/')
-
}),
-
)
-
-
router.get(
-
'/login',
-
handler(async (_req, res) => {
-
return res.type('html').send(page(login({})))
-
}),
-
)
-
-
router.post(
-
'/login',
-
handler(async (req, res) => {
-
const handle = req.body?.handle
-
if (typeof handle !== 'string' || !isValidHandle(handle)) {
-
return res.type('html').send(page(login({ error: 'invalid handle' })))
-
}
-
try {
-
const url = await ctx.oauthClient.authorize(handle)
-
return res.redirect(url.toString())
-
} catch (err) {
-
ctx.logger.error({ err }, 'oauth authorize failed')
-
return res.type('html').send(
-
page(
-
login({
-
error: err instanceof OAuthResolverError ? err.message : "couldn't initiate login",
-
}),
-
),
-
)
-
}
-
}),
-
)
-
-
router.post(
-
'/logout',
-
handler(async (req, res) => {
-
await destroySession(req, res)
-
return res.redirect('/')
-
}),
-
)
-
-
router.get(
-
'/',
-
handler(async (req, res) => {
-
const session = await getSession(req, res)
-
const agent =
-
session &&
-
(await ctx.oauthClient.restore(session.did).catch(async (err) => {
-
ctx.logger.warn({ err }, 'oauth restore failed')
-
await destroySession(req, res)
-
return null
-
}))
-
const posts = await ctx.db.selectFrom('post').selectAll().orderBy('indexedAt', 'desc').limit(10).execute()
-
if (!agent) {
-
return res.type('html').send(page(home({ posts })))
-
}
-
const { data: profile } = await agent.getProfile({ actor: session.did })
-
return res.type('html').send(page(home({ posts, profile })))
-
}),
-
)
-
-
return router
-
}
-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)
-
}
-
}
+353
src/routes.ts
···
+
import { Agent } from '@atproto/api'
+
import { TID } from '@atproto/common'
+
import { OAuthResolverError } from '@atproto/oauth-client-node'
+
import express, { Request, Response } from 'express'
+
import { getIronSession } from 'iron-session'
+
import type {
+
IncomingMessage,
+
RequestListener,
+
ServerResponse,
+
} from 'node:http'
+
import path from 'node:path'
+
+
import type { AppContext } from '#/context'
+
import { env } from '#/env'
+
import * as Profile from '#/lexicon/types/app/bsky/actor/profile'
+
import * as Status from '#/lexicon/types/xyz/statusphere/status'
+
import { handler } from '#/lib/http'
+
import { ifString } from '#/lib/util'
+
import { page } from '#/lib/view'
+
import { home } from '#/pages/home'
+
import { login } from '#/pages/login'
+
+
// Max age, in seconds, for static routes and assets
+
const MAX_AGE = env.NODE_ENV === 'production' ? 60 : 0
+
+
type Session = { did?: string }
+
+
// Helper function to get the Atproto Agent for the active session
+
async function getSessionAgent(
+
req: IncomingMessage,
+
res: ServerResponse,
+
ctx: AppContext,
+
) {
+
res.setHeader('Vary', 'Cookie')
+
+
const session = await getIronSession<Session>(req, res, {
+
cookieName: 'sid',
+
password: env.COOKIE_SECRET,
+
})
+
if (!session.did) return null
+
+
// This page is dynamic and should not be cached publicly
+
res.setHeader('cache-control', `max-age=${MAX_AGE}, private`)
+
+
try {
+
const oauthSession = await ctx.oauthClient.restore(session.did)
+
return oauthSession ? new Agent(oauthSession) : null
+
} catch (err) {
+
ctx.logger.warn({ err }, 'oauth restore failed')
+
await session.destroy()
+
return null
+
}
+
}
+
+
export const createRouter = (ctx: AppContext): RequestListener => {
+
const router = express()
+
+
// Static assets
+
router.use(
+
'/public',
+
express.static(path.join(__dirname, 'pages', 'public'), {
+
maxAge: MAX_AGE * 1000,
+
}),
+
)
+
+
// OAuth metadata
+
router.get(
+
'/oauth-client-metadata.json',
+
handler((req, res) => {
+
res.setHeader('cache-control', `max-age=${MAX_AGE}, public`)
+
res.json(ctx.oauthClient.clientMetadata)
+
}),
+
)
+
+
// Public keys
+
router.get(
+
'/.well-known/jwks.json',
+
handler((req, res) => {
+
res.setHeader('cache-control', `max-age=${MAX_AGE}, public`)
+
res.json(ctx.oauthClient.jwks)
+
}),
+
)
+
+
// OAuth callback to complete session creation
+
router.get(
+
'/oauth/callback',
+
handler(async (req, res) => {
+
res.setHeader('cache-control', 'no-store')
+
+
const params = new URLSearchParams(req.originalUrl.split('?')[1])
+
try {
+
// Load the session cookie
+
const session = await getIronSession<Session>(req, res, {
+
cookieName: 'sid',
+
password: env.COOKIE_SECRET,
+
})
+
+
// If the user is already signed in, destroy the old credentials
+
if (session.did) {
+
try {
+
const oauthSession = await ctx.oauthClient.restore(session.did)
+
if (oauthSession) oauthSession.signOut()
+
} catch (err) {
+
ctx.logger.warn({ err }, 'oauth restore failed')
+
}
+
}
+
+
// Complete the OAuth flow
+
const oauth = await ctx.oauthClient.callback(params)
+
+
// Update the session cookie
+
session.did = oauth.session.did
+
+
await session.save()
+
} catch (err) {
+
ctx.logger.error({ err }, 'oauth callback failed')
+
}
+
+
return res.redirect('/')
+
}),
+
)
+
+
// Login page
+
router.get(
+
'/login',
+
handler(async (req, res) => {
+
res.setHeader('cache-control', `max-age=${MAX_AGE}, public`)
+
res.type('html').send(page(login({})))
+
}),
+
)
+
+
// Login handler
+
router.post(
+
'/login',
+
express.urlencoded(),
+
handler(async (req, res) => {
+
// Never store this route
+
res.setHeader('cache-control', 'no-store')
+
+
// Initiate the OAuth flow
+
try {
+
// Validate input: can be a handle, a DID or a service URL (PDS).
+
const input = ifString(req.body.input)
+
if (!input) {
+
throw new Error('Invalid input')
+
}
+
+
// Initiate the OAuth flow
+
const url = await ctx.oauthClient.authorize(input, {
+
scope: 'atproto transition:generic',
+
})
+
+
res.redirect(url.toString())
+
} catch (err) {
+
ctx.logger.error({ err }, 'oauth authorize failed')
+
+
const error = err instanceof Error ? err.message : 'unexpected error'
+
+
return res.type('html').send(page(login({ error })))
+
}
+
}),
+
)
+
+
// Signup
+
router.get(
+
'/signup',
+
handler(async (req, res) => {
+
res.setHeader('cache-control', `max-age=${MAX_AGE}, public`)
+
+
try {
+
const service = env.PDS_URL ?? 'https://bsky.social'
+
const url = await ctx.oauthClient.authorize(service, {
+
scope: 'atproto transition:generic',
+
})
+
res.redirect(url.toString())
+
} catch (err) {
+
ctx.logger.error({ err }, 'oauth authorize failed')
+
res.type('html').send(
+
page(
+
login({
+
error:
+
err instanceof OAuthResolverError
+
? err.message
+
: "couldn't initiate login",
+
}),
+
),
+
)
+
}
+
}),
+
)
+
+
// Logout handler
+
router.post(
+
'/logout',
+
handler(async (req, res) => {
+
// Never store this route
+
res.setHeader('cache-control', 'no-store')
+
+
const session = await getIronSession<Session>(req, res, {
+
cookieName: 'sid',
+
password: env.COOKIE_SECRET,
+
})
+
+
// Revoke credentials on the server
+
if (session.did) {
+
try {
+
const oauthSession = await ctx.oauthClient.restore(session.did)
+
if (oauthSession) await oauthSession.signOut()
+
} catch (err) {
+
ctx.logger.warn({ err }, 'Failed to revoke credentials')
+
}
+
}
+
+
session.destroy()
+
+
return res.redirect('/')
+
}),
+
)
+
+
// Homepage
+
router.get(
+
'/',
+
handler(async (req, res) => {
+
// If the user is signed in, get an agent which communicates with their server
+
const agent = await getSessionAgent(req, res, ctx)
+
+
// Fetch data stored in our SQLite
+
const statuses = await ctx.db
+
.selectFrom('status')
+
.selectAll()
+
.orderBy('indexedAt', 'desc')
+
.limit(10)
+
.execute()
+
const myStatus = agent
+
? await ctx.db
+
.selectFrom('status')
+
.selectAll()
+
.where('authorDid', '=', agent.assertDid)
+
.orderBy('indexedAt', 'desc')
+
.executeTakeFirst()
+
: undefined
+
+
// Map user DIDs to their domain-name handles
+
const didHandleMap = await ctx.resolver.resolveDidsToHandles(
+
statuses.map((s) => s.authorDid),
+
)
+
+
if (!agent) {
+
// Serve the logged-out view
+
return res.type('html').send(page(home({ statuses, didHandleMap })))
+
}
+
+
// Fetch additional information about the logged-in user
+
const profileResponse = await agent.com.atproto.repo
+
.getRecord({
+
repo: agent.assertDid,
+
collection: 'app.bsky.actor.profile',
+
rkey: 'self',
+
})
+
.catch(() => undefined)
+
+
const profileRecord = profileResponse?.data
+
+
const profile =
+
profileRecord &&
+
Profile.isRecord(profileRecord.value) &&
+
Profile.validateRecord(profileRecord.value).success
+
? profileRecord.value
+
: {}
+
+
// Serve the logged-in view
+
res
+
.type('html')
+
.send(page(home({ statuses, didHandleMap, profile, myStatus })))
+
}),
+
)
+
+
// "Set status" handler
+
router.post(
+
'/status',
+
express.urlencoded(),
+
handler(async (req, res) => {
+
// If the user is signed in, get an agent which communicates with their server
+
const agent = await getSessionAgent(req, res, ctx)
+
if (!agent) {
+
return res
+
.status(401)
+
.type('html')
+
.send('<h1>Error: Session required</h1>')
+
}
+
+
// Construct their status record
+
const record = {
+
$type: 'xyz.statusphere.status',
+
status: req.body?.status,
+
createdAt: new Date().toISOString(),
+
}
+
+
// Make sure the record generated from the input is valid
+
if (!Status.validateRecord(record).success) {
+
return res
+
.status(400)
+
.type('html')
+
.send('<h1>Error: Invalid status</h1>')
+
}
+
+
let uri
+
try {
+
// Write the status record to the user's repository
+
const res = await agent.com.atproto.repo.putRecord({
+
repo: agent.assertDid,
+
collection: 'xyz.statusphere.status',
+
rkey: TID.nextStr(),
+
record,
+
validate: false,
+
})
+
uri = res.data.uri
+
} catch (err) {
+
ctx.logger.warn({ err }, 'failed to write record')
+
return res
+
.status(500)
+
.type('html')
+
.send('<h1>Error: Failed to write record</h1>')
+
}
+
+
try {
+
// Optimistically update our SQLite
+
// This isn't strictly necessary because the write event will be
+
// handled in #/firehose/ingestor.ts, but it ensures that future reads
+
// will be up-to-date after this method finishes.
+
await ctx.db
+
.insertInto('status')
+
.values({
+
uri,
+
authorDid: agent.assertDid,
+
status: record.status,
+
createdAt: record.createdAt,
+
indexedAt: new Date().toISOString(),
+
})
+
.execute()
+
} catch (err) {
+
ctx.logger.warn(
+
{ err },
+
'failed to update computed view; ignoring as it should be caught by the firehose',
+
)
+
}
+
+
return res.redirect('/')
+
}),
+
)
+
+
return router
+
}
-90
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 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 } = env
-
-
const logger = pino({ name: 'server start' })
-
const db = createDb(':memory:')
-
await migrateToLatest(db)
-
const ingester = new Ingester(db)
-
const oauthClient = await createClient(db)
-
ingester.start()
-
const ctx = {
-
db,
-
ingester,
-
logger,
-
oauthClient,
-
}
-
-
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()
-
})
-
})
-
}
-
}
-12
src/view.ts
···
-
// @ts-ignore
-
import ssr from 'uhtml/ssr'
-
import type initSSR from 'uhtml/types/init-ssr'
-
import type { Hole } from 'uhtml/types/keyed'
-
-
export type { Hole }
-
-
export const { html }: ReturnType<typeof initSSR> = ssr()
-
-
export function page(hole: Hole) {
-
return `<!DOCTYPE html>\n${hole.toDOM().toString()}`
-
}
+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()],
-
});