diff --git a/.gitignore b/.gitignore
index 1284b6e..a9f21f2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,15 +4,14 @@ node_modules/
# Build outputs
dist/
-ui/dist/
-.angular/
-out-tsc/
# tsdeno temporary files
package.json.bak
# Generated files
ts/embedded-ui.generated.ts
+ts_bundled/
+dist_ts_web/
# Deno
.deno/
@@ -64,8 +63,5 @@ stories/
package-lock.json
yarn.lock
-# Angular cache
-.angular/cache/
-
# TypeScript incremental compilation
*.tsbuildinfo
diff --git a/changelog.md b/changelog.md
index 4082dd9..565d97e 100644
--- a/changelog.md
+++ b/changelog.md
@@ -1,72 +1,121 @@
# Changelog
+## 2026-03-20 - 1.5.0 - feat(opsserver,web)
+replace the Angular UI and REST management layer with a TypedRequest-based ops server and bundled web frontend
+
+- add a new OpsServer with TypedRequest handlers for auth, organizations, repositories, packages, tokens, audit, admin, OAuth, and user settings flows
+- introduce shared TypedRequest contracts under ts_interfaces and wire the registry to serve POST /typedrequest requests
+- replace the embedded Angular build pipeline with tsbundle/tswatch-based web bundling, static html entrypoint, and new ts_web app state and shell views
+- remove the legacy Angular frontend, custom UI bundler script, reload websocket hot-reload path, and related build configuration
+
## 2026-03-20 - 1.4.2 - fix(registry)
+
align registry integrations with updated auth, storage, repository, and audit models
-- update smartregistry auth and storage provider implementations to match the current request, token, and storage hook APIs
-- fix audit events for auth provider, platform settings, and external authentication flows to use dedicated event types
-- adapt repository, organization, user, and package handlers to renamed model fields and revised repository visibility/protocol data
-- add missing repository and team model fields plus helper methods needed by the updated API and permission flows
+- update smartregistry auth and storage provider implementations to match the current request,
+ token, and storage hook APIs
+- fix audit events for auth provider, platform settings, and external authentication flows to use
+ dedicated event types
+- adapt repository, organization, user, and package handlers to renamed model fields and revised
+ repository visibility/protocol data
+- add missing repository and team model fields plus helper methods needed by the updated API and
+ permission flows
- correct AES-GCM crypto buffer handling and package version checksum mapping
## 2026-03-20 - 1.4.1 - fix(repo)
+
no changes to commit
-
## 2026-03-20 - 1.4.0 - feat(release,build,tests)
+
add automated multi-platform release pipeline and align runtime, model, and test updates
-- add a Gitea release workflow that builds the UI, bundles embedded assets, cross-compiles binaries for Linux and macOS, generates checksums, and publishes release assets from version tags
-- switch compilation to tsdeno with compile targets defined in npmextra.json and simplify project scripts for check, lint, format, and compile tasks
+- add a Gitea release workflow that builds the UI, bundles embedded assets, cross-compiles binaries
+ for Linux and macOS, generates checksums, and publishes release assets from version tags
+- switch compilation to tsdeno with compile targets defined in npmextra.json and simplify project
+ scripts for check, lint, format, and compile tasks
- improve CLI startup error handling in mod.ts and guard execution with import.meta.main
-- update test configuration to load MongoDB and S3 settings from qenv-based environment files and adjust tests for renamed model and token APIs
-- rename package search usage to searchPackages, update audit event names, and align package version fields and model name overrides with newer dependency behavior
+- update test configuration to load MongoDB and S3 settings from qenv-based environment files and
+ adjust tests for renamed model and token APIs
+- rename package search usage to searchPackages, update audit event names, and align package version
+ fields and model name overrides with newer dependency behavior
## 2025-12-03 - 1.3.0 - feat(auth)
+
Add external authentication (OAuth/OIDC & LDAP) with admin management, UI, and encryption support
-- Introduce external authentication models: AuthProvider, ExternalIdentity, PlatformSettings to store provider configs, links, and platform auth settings
-- Add AuthProvider admin API (AdminAuthApi) to create/update/delete/test providers and manage platform auth settings
-- Add public OAuth endpoints (OAuthApi) for listing providers, initiating OAuth flows, handling callbacks, and LDAP login
-- Implement ExternalAuthService to orchestrate OAuth and LDAP flows, user provisioning, linking, session/token generation, and provider testing
-- Add pluggable auth strategy pattern with OAuthStrategy and LdapStrategy plus AuthStrategyFactory to select appropriate strategy
-- Add CryptoService for AES-256-GCM encryption/decryption of provider secrets and helper for key generation
-- Extend AuthService and session/user handling to support tokens/sessions created by external auth flows and user provisioning flags
-- Add UI: admin pages for managing auth providers (list, provider form, connection test) and login enhancements (SSO buttons, LDAP form, oauth-callback handler)
-- Add client-side AdminAuthService for communicating with new admin auth endpoints and an adminGuard for route protection
+- Introduce external authentication models: AuthProvider, ExternalIdentity, PlatformSettings to
+ store provider configs, links, and platform auth settings
+- Add AuthProvider admin API (AdminAuthApi) to create/update/delete/test providers and manage
+ platform auth settings
+- Add public OAuth endpoints (OAuthApi) for listing providers, initiating OAuth flows, handling
+ callbacks, and LDAP login
+- Implement ExternalAuthService to orchestrate OAuth and LDAP flows, user provisioning, linking,
+ session/token generation, and provider testing
+- Add pluggable auth strategy pattern with OAuthStrategy and LdapStrategy plus AuthStrategyFactory
+ to select appropriate strategy
+- Add CryptoService for AES-256-GCM encryption/decryption of provider secrets and helper for key
+ generation
+- Extend AuthService and session/user handling to support tokens/sessions created by external auth
+ flows and user provisioning flags
+- Add UI: admin pages for managing auth providers (list, provider form, connection test) and login
+ enhancements (SSO buttons, LDAP form, oauth-callback handler)
+- Add client-side AdminAuthService for communicating with new admin auth endpoints and an adminGuard
+ for route protection
- Register new API routes in ApiRouter and wire server-side handlers into the router
-- Implement safeguards: mask secrets in admin responses, validate provider configs, and track connection test results and audit logs
+- Implement safeguards: mask secrets in admin responses, validate provider configs, and track
+ connection test results and audit logs
## 2025-11-28 - 1.2.0 - feat(tokens)
+
Add support for organization-owned API tokens and org-level token management
-- ApiToken model: added optional organizationId and createdById fields (persisted and indexed) and new static getOrgTokens method
-- auth.interfaces: IApiToken and ICreateTokenDto updated to include organizationId and createdById where appropriate
-- TokenService: create token options now accept organizationId and createdById; tokens store org and creator info; added getOrgTokens and revokeAllOrgTokens (with audit logging)
-- API: TokenApi now integrates PermissionService to allow organization managers to list/revoke org-owned tokens; GET /api/v1/tokens accepts organizationId query param and token lookup checks org management permissions
+- ApiToken model: added optional organizationId and createdById fields (persisted and indexed) and
+ new static getOrgTokens method
+- auth.interfaces: IApiToken and ICreateTokenDto updated to include organizationId and createdById
+ where appropriate
+- TokenService: create token options now accept organizationId and createdById; tokens store org and
+ creator info; added getOrgTokens and revokeAllOrgTokens (with audit logging)
+- API: TokenApi now integrates PermissionService to allow organization managers to list/revoke
+ org-owned tokens; GET /api/v1/tokens accepts organizationId query param and token lookup checks
+ org management permissions
- Router: PermissionService instantiated and passed to TokenApi
-- UI: api.service types and methods updated — IToken and ITokenScope include organizationId/createdById; getTokens and createToken now support an organizationId parameter and scoped scopes
+- UI: api.service types and methods updated — IToken and ITokenScope include
+ organizationId/createdById; getTokens and createToken now support an organizationId parameter and
+ scoped scopes
- .gitignore: added stories/ to ignore
## 2025-11-28 - 1.1.0 - feat(registry)
+
Add hot-reload websocket, embedded UI bundling, and multi-platform Deno build tasks
-Introduce a ReloadSocketManager and client ReloadService for automatic page reloads when the server restarts. Serve UI assets from an embedded generated file and add Deno tasks to bundle the UI and compile native binaries for multiple platforms. Also update dev watch workflow and ignore generated embedded UI file.
+Introduce a ReloadSocketManager and client ReloadService for automatic page reloads when the server
+restarts. Serve UI assets from an embedded generated file and add Deno tasks to bundle the UI and
+compile native binaries for multiple platforms. Also update dev watch workflow and ignore generated
+embedded UI file.
-- Add ReloadSocketManager (ts/reload-socket.ts) to broadcast a server instance ID to connected clients for hot-reload.
-- Integrate reload socket into StackGalleryRegistry and expose WebSocket upgrade endpoint at /ws/reload.
-- Add Angular ReloadService (ui/src/app/core/services/reload.service.ts) to connect to the reload WS and trigger page reloads with exponential reconnect.
-- Serve static UI files from an embedded generated module (getEmbeddedFile) and add SPA fallback to index.html.
+- Add ReloadSocketManager (ts/reload-socket.ts) to broadcast a server instance ID to connected
+ clients for hot-reload.
+- Integrate reload socket into StackGalleryRegistry and expose WebSocket upgrade endpoint at
+ /ws/reload.
+- Add Angular ReloadService (ui/src/app/core/services/reload.service.ts) to connect to the reload WS
+ and trigger page reloads with exponential reconnect.
+- Serve static UI files from an embedded generated module (getEmbeddedFile) and add SPA fallback to
+ index.html.
- Ignore generated embedded UI file (ts/embedded-ui.generated.ts) in .gitignore.
-- Add Deno tasks in deno.json: bundle-ui, bundle-ui:watch, compile targets (linux/mac x64/arm64) and a release task to bundle + compile.
-- Update package.json watch script to run BACKEND, UI and BUNDLER concurrently (deno task bundle-ui:watch).
+- Add Deno tasks in deno.json: bundle-ui, bundle-ui:watch, compile targets (linux/mac x64/arm64) and
+ a release task to bundle + compile.
+- Update package.json watch script to run BACKEND, UI and BUNDLER concurrently (deno task
+ bundle-ui:watch).
## 2025-11-28 - 1.0.1 - fix(smartdata)
+
Bump @push.rocks/smartdata to ^7.0.13 in deno.json
- Updated deno.json imports mapping for @push.rocks/smartdata from ^7.0.9 to ^7.0.13
## 2025-11-28 - 1.0.0 - Initial release
+
Release with core features, UI, and project scaffolding.
- Implemented account settings and API tokens management.
@@ -85,8 +134,10 @@ Release with core features, UI, and project scaffolding.
- Dependency updates and fixes.
## 2025-11-27 - 2025-11-28 - unknown -> 1.0.0 - housekeeping / duplicate commits
+
Minor housekeeping and duplicate commits consolidated into the 1.0.0 release.
- Added initial README with project overview, features, and setup instructions.
-- Consolidated a duplicate "feat: add account settings and API tokens management" commit (unknown version) into the 1.0.0 release.
-- Miscellaneous UI tweaks and dependency updates.
\ No newline at end of file
+- Consolidated a duplicate "feat: add account settings and API tokens management" commit (unknown
+ version) into the 1.0.0 release.
+- Miscellaneous UI tweaks and dependency updates.
diff --git a/deno.json b/deno.json
index 181a2d1..8a594c8 100644
--- a/deno.json
+++ b/deno.json
@@ -12,9 +12,8 @@
"test:e2e": "deno test --allow-all --no-check test/e2e/",
"test:docker-up": "docker compose -f test/docker-compose.test.yml up -d --wait",
"test:docker-down": "docker compose -f test/docker-compose.test.yml down -v",
- "build": "cd ui && pnpm run build",
- "bundle-ui": "deno run --allow-all scripts/bundle-ui.ts",
- "bundle-ui:watch": "deno run --allow-all scripts/bundle-ui.ts --watch",
+ "build-ui": "npx tsbundle",
+ "watch": "npx tswatch",
"compile": "tsdeno compile",
"check": "deno check mod.ts",
"fmt": "deno fmt",
@@ -35,7 +34,11 @@
"@push.rocks/smartdelay": "npm:@push.rocks/smartdelay@^3.0.5",
"@push.rocks/smartrx": "npm:@push.rocks/smartrx@^3.0.10",
"@push.rocks/smartcli": "npm:@push.rocks/smartcli@^4.0.20",
+ "@push.rocks/smartguard": "npm:@push.rocks/smartguard@^3.1.0",
"@push.rocks/qenv": "npm:@push.rocks/qenv@^6.1.3",
+ "@api.global/typedrequest": "npm:@api.global/typedrequest@^3.1.10",
+ "@api.global/typedrequest-interfaces": "npm:@api.global/typedrequest-interfaces@^3.0.19",
+ "@api.global/typedserver": "npm:@api.global/typedserver@^3.0.53",
"@tsclass/tsclass": "npm:@tsclass/tsclass@^9.5.0",
"@std/path": "jsr:@std/path@^1.0.0",
"@std/fs": "jsr:@std/fs@^1.0.0",
diff --git a/deno.lock b/deno.lock
index bb877be..5385de5 100644
--- a/deno.lock
+++ b/deno.lock
@@ -18,7 +18,15 @@
"jsr:@std/path@^1.1.4": "1.1.4",
"jsr:@std/streams@^1.0.17": "1.0.17",
"jsr:@std/testing@*": "1.0.17",
+ "npm:@api.global/typedrequest-interfaces@^3.0.19": "3.0.19",
+ "npm:@api.global/typedrequest@^3.1.10": "3.3.0",
+ "npm:@api.global/typedserver@^3.0.53": "3.0.80",
+ "npm:@api.global/typedserver@^8.4.2": "8.4.2_@push.rocks+smartserve@2.0.1",
+ "npm:@design.estate/dees-catalog@^3.43.0": "3.48.5_@tiptap+core@2.27.2__@tiptap+pm@2.27.2___prosemirror-model@1.25.4___prosemirror-state@1.4.4___prosemirror-view@1.41.6_xterm@5.3.0",
+ "npm:@design.estate/dees-element@^2.1.6": "2.2.3",
+ "npm:@git.zone/tsbundle@^2.8.3": "2.9.1",
"npm:@git.zone/tsdeno@^1.2.0": "1.2.0",
+ "npm:@git.zone/tswatch@^3.1.0": "3.3.0",
"npm:@push.rocks/qenv@^6.1.3": "6.1.3",
"npm:@push.rocks/smartbucket@^4.5.1": "4.5.1",
"npm:@push.rocks/smartcli@^4.0.20": "4.0.20",
@@ -26,6 +34,7 @@
"npm:@push.rocks/smartdata@^7.1.0": "7.1.0",
"npm:@push.rocks/smartdelay@^3.0.5": "3.0.5",
"npm:@push.rocks/smartenv@6": "6.0.0",
+ "npm:@push.rocks/smartguard@^3.1.0": "3.1.0",
"npm:@push.rocks/smartjwt@^2.2.1": "2.2.1",
"npm:@push.rocks/smartlog@^3.2.1": "3.2.1",
"npm:@push.rocks/smartpath@6": "6.0.0",
@@ -34,8 +43,7 @@
"npm:@push.rocks/smartrx@^3.0.10": "3.0.10",
"npm:@push.rocks/smartstring@^4.1.0": "4.1.0",
"npm:@push.rocks/smartunique@^3.0.9": "3.0.9",
- "npm:@tsclass/tsclass@^9.5.0": "9.5.0",
- "npm:concurrently@^9.1.2": "9.2.1"
+ "npm:@tsclass/tsclass@^9.5.0": "9.5.0"
},
"jsr": {
"@std/assert@1.0.17": {
@@ -104,6 +112,10 @@
}
},
"npm": {
+ "@api.global/typedrequest-interfaces@2.0.2": {
+ "integrity": "sha512-D+mkr4IiUZ/eUgrdp5jXjBKOW/iuMcl0z2ZLQsLLypKX/psFGD3viZJ58FNRa+/1OSM38JS5wFyoWl8oPEFLrw==",
+ "tarball": "https://verdaccio.lossless.digital/@api.global/typedrequest-interfaces/-/typedrequest-interfaces-2.0.2.tgz"
+ },
"@api.global/typedrequest-interfaces@3.0.19": {
"integrity": "sha512-uuHUXJeOy/inWSDrwD0Cwax2rovpxYllDhM2RWh+6mVpQuNmZ3uw6IVg6dA2G1rOe24Ebs+Y9SzEogo+jYN7vw==",
"tarball": "https://verdaccio.lossless.digital/@api.global/typedrequest-interfaces/-/typedrequest-interfaces-3.0.19.tgz"
@@ -111,18 +123,132 @@
"@api.global/typedrequest@3.3.0": {
"integrity": "sha512-Jwobqla+9k2IBG0duwrCFtc6GU6wsvHS3f0gJJsxTrpapylBW1YSF7NnGHPGs7F9hbATsO6IoUBpR2ScoKyGJA==",
"dependencies": [
- "@api.global/typedrequest-interfaces",
+ "@api.global/typedrequest-interfaces@3.0.19",
"@push.rocks/isounique",
"@push.rocks/lik",
"@push.rocks/smartbuffer",
"@push.rocks/smartdelay",
"@push.rocks/smartguard",
"@push.rocks/smartpromise",
- "@push.rocks/webrequest",
+ "@push.rocks/webrequest@4.0.5",
"@push.rocks/webstream"
],
"tarball": "https://verdaccio.lossless.digital/@api.global/typedrequest/-/typedrequest-3.3.0.tgz"
},
+ "@api.global/typedserver@3.0.80": {
+ "integrity": "sha512-dcp0oXsjBL+XdFg1wUUP08uJQid5bQ0Yv3V3Y3lnI2QCbat0FU+Tsb0TZRnZ4+P150Vj/ITBqJUgDzFsF34grA==",
+ "dependencies": [
+ "@api.global/typedrequest",
+ "@api.global/typedrequest-interfaces@3.0.19",
+ "@api.global/typedsocket@3.1.1",
+ "@cloudflare/workers-types",
+ "@design.estate/dees-comms",
+ "@push.rocks/lik",
+ "@push.rocks/smartchok",
+ "@push.rocks/smartdelay",
+ "@push.rocks/smartenv@5.0.13",
+ "@push.rocks/smartfeed",
+ "@push.rocks/smartfile@11.2.7",
+ "@push.rocks/smartjson@5.2.0",
+ "@push.rocks/smartlog",
+ "@push.rocks/smartlog-destination-devtools",
+ "@push.rocks/smartlog-interfaces",
+ "@push.rocks/smartmanifest",
+ "@push.rocks/smartmatch",
+ "@push.rocks/smartmime",
+ "@push.rocks/smartntml",
+ "@push.rocks/smartopen",
+ "@push.rocks/smartpath@6.0.0",
+ "@push.rocks/smartpromise",
+ "@push.rocks/smartrequest@4.4.2",
+ "@push.rocks/smartrx",
+ "@push.rocks/smartsitemap",
+ "@push.rocks/smartstream",
+ "@push.rocks/smarttime",
+ "@push.rocks/taskbuffer",
+ "@push.rocks/webrequest@3.0.37",
+ "@push.rocks/webstore",
+ "@tsclass/tsclass@9.5.0",
+ "@types/express",
+ "body-parser",
+ "cors",
+ "express",
+ "express-force-ssl",
+ "lit"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@api.global/typedserver/-/typedserver-3.0.80.tgz"
+ },
+ "@api.global/typedserver@8.4.2_@push.rocks+smartserve@2.0.1": {
+ "integrity": "sha512-eESOcWvrbqkshR4s4OeTX1AK74bNCeGgiRebKgjxIzJ+b0+rkPQyn2DOaMtyXjFZRNgRHyytLm5Iqj5fdazeqw==",
+ "dependencies": [
+ "@api.global/typedrequest",
+ "@api.global/typedrequest-interfaces@3.0.19",
+ "@api.global/typedsocket@4.1.2_@push.rocks+smartserve@2.0.1",
+ "@cloudflare/workers-types",
+ "@design.estate/dees-catalog",
+ "@design.estate/dees-comms",
+ "@push.rocks/lik",
+ "@push.rocks/smartdelay",
+ "@push.rocks/smartenv@6.0.0",
+ "@push.rocks/smartfeed",
+ "@push.rocks/smartfile@13.1.2",
+ "@push.rocks/smartfs",
+ "@push.rocks/smartjson@5.2.0",
+ "@push.rocks/smartlog",
+ "@push.rocks/smartlog-destination-devtools",
+ "@push.rocks/smartlog-interfaces",
+ "@push.rocks/smartmanifest",
+ "@push.rocks/smartmatch",
+ "@push.rocks/smartmime",
+ "@push.rocks/smartntml",
+ "@push.rocks/smartopen",
+ "@push.rocks/smartpath@6.0.0",
+ "@push.rocks/smartpromise",
+ "@push.rocks/smartrequest@5.0.1",
+ "@push.rocks/smartrx",
+ "@push.rocks/smartserve",
+ "@push.rocks/smartsitemap",
+ "@push.rocks/smartstream",
+ "@push.rocks/smarttime",
+ "@push.rocks/smartwatch",
+ "@push.rocks/taskbuffer",
+ "@push.rocks/webrequest@4.0.5",
+ "@push.rocks/webstore",
+ "@tsclass/tsclass@9.5.0",
+ "lit"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@api.global/typedserver/-/typedserver-8.4.2.tgz"
+ },
+ "@api.global/typedsocket@3.1.1": {
+ "integrity": "sha512-Wkz3NlhmfdZMKqXXI2c2dMtGGmSmhdOegZiziL+9b2mqPYdc7Gd8AZRdEOKvbSoIvc9G22/5BEadIWHrfq66TA==",
+ "dependencies": [
+ "@api.global/typedrequest",
+ "@api.global/typedrequest-interfaces@3.0.19",
+ "@push.rocks/isohash",
+ "@push.rocks/smartjson@5.2.0",
+ "@push.rocks/smartrx",
+ "@push.rocks/smartsocket",
+ "@push.rocks/smartstring",
+ "@push.rocks/smarturl"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@api.global/typedsocket/-/typedsocket-3.1.1.tgz"
+ },
+ "@api.global/typedsocket@4.1.2_@push.rocks+smartserve@2.0.1": {
+ "integrity": "sha512-fZFuJY9ucFCICjF4wi6OvK8drsv6UcwVVsfamOT1HxFj7OBOYw6QHOceQ+cAQ8IrWbX817sf8gzlesl+jlG8JA==",
+ "dependencies": [
+ "@api.global/typedrequest",
+ "@api.global/typedrequest-interfaces@3.0.19",
+ "@push.rocks/isohash",
+ "@push.rocks/smartdelay",
+ "@push.rocks/smartjson@5.2.0",
+ "@push.rocks/smartpromise",
+ "@push.rocks/smartrx",
+ "@push.rocks/smartserve",
+ "@push.rocks/smartstring",
+ "@push.rocks/smarturl"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@api.global/typedsocket/-/typedsocket-4.1.2.tgz"
+ },
"@aws-crypto/crc32@5.2.0": {
"integrity": "sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==",
"dependencies": [
@@ -661,7 +787,7 @@
"integrity": "sha512-I/+BMxM4WE/6xL0tyV7tAUDOAXmyw/va1oGr/eSly43HmLUcD1G+v96vEKAA8VoLcZ03ZQo/PWzjmN9zQErqPQ==",
"dependencies": [
"@smithy/types",
- "fast-xml-parser",
+ "fast-xml-parser@5.5.6",
"tslib"
],
"tarball": "https://verdaccio.lossless.digital/@aws-sdk/xml-builder/-/xml-builder-3.972.13.tgz"
@@ -678,18 +804,59 @@
"integrity": "sha512-DDaRehssg1aNrH4+2hnj1B7vnUGEjU6OIlyRdkMd0aUdIUvKXrJfXsy8LVtXAy7DRvYVluWbMspsRhz2lcW0mQ==",
"tarball": "https://verdaccio.lossless.digital/@borewit/text-codec/-/text-codec-0.2.2.tgz"
},
+ "@cfworker/json-schema@4.1.1": {
+ "integrity": "sha512-gAmrUZSGtKc3AiBL71iNWxDsyUC5uMaKKGdvzYsBoTW/xi42JQHl7eKV2OYzCUqvc+D2RCcf7EXY2iCyFIk6og==",
+ "tarball": "https://verdaccio.lossless.digital/@cfworker/json-schema/-/json-schema-4.1.1.tgz"
+ },
+ "@cloudflare/workers-types@4.20260313.1": {
+ "integrity": "sha512-jMEeX3RKfOSVqqXRKr/ulgglcTloeMzSH3FdzIfqJHtvc12/ELKd5Ldsg8ZHahKX/4eRxYdw3kbzb8jLXbq/jQ==",
+ "tarball": "https://verdaccio.lossless.digital/@cloudflare/workers-types/-/workers-types-4.20260313.1.tgz"
+ },
"@configvault.io/interfaces@1.0.17": {
"integrity": "sha512-bEcCUR2VBDJsTin8HQh8Uw/mlYl2v8A3jMIaQ+MTB9Hrqd6CZL2dL7iJdWyFl/3EIX+LDxWFR+Oq7liIq7w+1Q==",
"dependencies": [
- "@api.global/typedrequest-interfaces"
+ "@api.global/typedrequest-interfaces@3.0.19"
],
"tarball": "https://verdaccio.lossless.digital/@configvault.io/interfaces/-/interfaces-1.0.17.tgz"
},
+ "@design.estate/dees-catalog@3.48.5_@tiptap+core@2.27.2__@tiptap+pm@2.27.2___prosemirror-model@1.25.4___prosemirror-state@1.4.4___prosemirror-view@1.41.6_xterm@5.3.0": {
+ "integrity": "sha512-4BTKpofEL77k4GfJhrb7Zv9Y0vCJ/40Fn262p2bKAGwkQ+SnFEtqOKlNIgjogNggIfTMSBt3THtWPfonveVcuw==",
+ "dependencies": [
+ "@design.estate/dees-domtools",
+ "@design.estate/dees-element",
+ "@design.estate/dees-wcctools",
+ "@fortawesome/fontawesome-svg-core",
+ "@fortawesome/free-brands-svg-icons",
+ "@fortawesome/free-regular-svg-icons",
+ "@fortawesome/free-solid-svg-icons",
+ "@push.rocks/smarti18n",
+ "@push.rocks/smartpromise",
+ "@push.rocks/smartstring",
+ "@tempfix/webcontainer__api",
+ "@tiptap/core",
+ "@tiptap/extension-link",
+ "@tiptap/extension-text-align",
+ "@tiptap/extension-typography",
+ "@tiptap/extension-underline",
+ "@tiptap/starter-kit",
+ "@tsclass/tsclass@9.5.0",
+ "apexcharts",
+ "highlight.js",
+ "ibantools",
+ "lucide",
+ "monaco-editor",
+ "pdfjs-dist",
+ "xterm",
+ "xterm-addon-fit"
+ ],
+ "scripts": true,
+ "tarball": "https://verdaccio.lossless.digital/@design.estate/dees-catalog/-/dees-catalog-3.48.5.tgz"
+ },
"@design.estate/dees-comms@1.0.30": {
"integrity": "sha512-KchMlklJfKAjQiJiR0xmofXtQ27VgZtBIxcMwPE9d+h3jJRv+lPZxzBQVOM0eyM0uS44S5vJMZ11IeV4uDXSHg==",
"dependencies": [
"@api.global/typedrequest",
- "@api.global/typedrequest-interfaces",
+ "@api.global/typedrequest-interfaces@3.0.19",
"@push.rocks/smartdelay",
"broadcast-channel"
],
@@ -710,7 +877,7 @@
"@push.rocks/smartstate",
"@push.rocks/smartstring",
"@push.rocks/smarturl",
- "@push.rocks/webrequest",
+ "@push.rocks/webrequest@4.0.5",
"@push.rocks/websetup",
"@push.rocks/webstore",
"@tempfix/lenis",
@@ -729,6 +896,250 @@
],
"tarball": "https://verdaccio.lossless.digital/@design.estate/dees-element/-/dees-element-2.2.3.tgz"
},
+ "@design.estate/dees-wcctools@3.8.0": {
+ "integrity": "sha512-CC14iVKUrguzD9jIrdPBd9fZ4egVJEZMxl5y8iy0l7WLumeoYvGsoXj5INVkRPLRVLqziIdi4Je1hXqHt2NU+g==",
+ "dependencies": [
+ "@design.estate/dees-domtools",
+ "@design.estate/dees-element",
+ "@push.rocks/smartdelay",
+ "lit"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@design.estate/dees-wcctools/-/dees-wcctools-3.8.0.tgz"
+ },
+ "@emnapi/core@1.9.1": {
+ "integrity": "sha512-mukuNALVsoix/w1BJwFzwXBN/dHeejQtuVzcDsfOEsdpCumXb/E9j8w11h5S54tT1xhifGfbbSm/ICrObRb3KA==",
+ "dependencies": [
+ "@emnapi/wasi-threads",
+ "tslib"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@emnapi/core/-/core-1.9.1.tgz"
+ },
+ "@emnapi/runtime@1.9.1": {
+ "integrity": "sha512-VYi5+ZVLhpgK4hQ0TAjiQiZ6ol0oe4mBx7mVv7IflsiEp0OWoVsp/+f9Vc1hOhE0TtkORVrI1GvzyreqpgWtkA==",
+ "dependencies": [
+ "tslib"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@emnapi/runtime/-/runtime-1.9.1.tgz"
+ },
+ "@emnapi/wasi-threads@1.2.0": {
+ "integrity": "sha512-N10dEJNSsUx41Z6pZsXU8FjPjpBEplgH24sfkmITrBED1/U2Esum9F3lfLrMjKHHjmi557zQn7kR9R+XWXu5Rg==",
+ "dependencies": [
+ "tslib"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@emnapi/wasi-threads/-/wasi-threads-1.2.0.tgz"
+ },
+ "@esbuild/aix-ppc64@0.27.4": {
+ "integrity": "sha512-cQPwL2mp2nSmHHJlCyoXgHGhbEPMrEEU5xhkcy3Hs/O7nGZqEpZ2sUtLaL9MORLtDfRvVl2/3PAuEkYZH0Ty8Q==",
+ "os": ["aix"],
+ "cpu": ["ppc64"],
+ "tarball": "https://verdaccio.lossless.digital/@esbuild/aix-ppc64/-/aix-ppc64-0.27.4.tgz"
+ },
+ "@esbuild/android-arm64@0.27.4": {
+ "integrity": "sha512-gdLscB7v75wRfu7QSm/zg6Rx29VLdy9eTr2t44sfTW7CxwAtQghZ4ZnqHk3/ogz7xao0QAgrkradbBzcqFPasw==",
+ "os": ["android"],
+ "cpu": ["arm64"],
+ "tarball": "https://verdaccio.lossless.digital/@esbuild/android-arm64/-/android-arm64-0.27.4.tgz"
+ },
+ "@esbuild/android-arm@0.27.4": {
+ "integrity": "sha512-X9bUgvxiC8CHAGKYufLIHGXPJWnr0OCdR0anD2e21vdvgCI8lIfqFbnoeOz7lBjdrAGUhqLZLcQo6MLhTO2DKQ==",
+ "os": ["android"],
+ "cpu": ["arm"],
+ "tarball": "https://verdaccio.lossless.digital/@esbuild/android-arm/-/android-arm-0.27.4.tgz"
+ },
+ "@esbuild/android-x64@0.27.4": {
+ "integrity": "sha512-PzPFnBNVF292sfpfhiyiXCGSn9HZg5BcAz+ivBuSsl6Rk4ga1oEXAamhOXRFyMcjwr2DVtm40G65N3GLeH1Lvw==",
+ "os": ["android"],
+ "cpu": ["x64"],
+ "tarball": "https://verdaccio.lossless.digital/@esbuild/android-x64/-/android-x64-0.27.4.tgz"
+ },
+ "@esbuild/darwin-arm64@0.27.4": {
+ "integrity": "sha512-b7xaGIwdJlht8ZFCvMkpDN6uiSmnxxK56N2GDTMYPr2/gzvfdQN8rTfBsvVKmIVY/X7EM+/hJKEIbbHs9oA4tQ==",
+ "os": ["darwin"],
+ "cpu": ["arm64"],
+ "tarball": "https://verdaccio.lossless.digital/@esbuild/darwin-arm64/-/darwin-arm64-0.27.4.tgz"
+ },
+ "@esbuild/darwin-x64@0.27.4": {
+ "integrity": "sha512-sR+OiKLwd15nmCdqpXMnuJ9W2kpy0KigzqScqHI3Hqwr7IXxBp3Yva+yJwoqh7rE8V77tdoheRYataNKL4QrPw==",
+ "os": ["darwin"],
+ "cpu": ["x64"],
+ "tarball": "https://verdaccio.lossless.digital/@esbuild/darwin-x64/-/darwin-x64-0.27.4.tgz"
+ },
+ "@esbuild/freebsd-arm64@0.27.4": {
+ "integrity": "sha512-jnfpKe+p79tCnm4GVav68A7tUFeKQwQyLgESwEAUzyxk/TJr4QdGog9sqWNcUbr/bZt/O/HXouspuQDd9JxFSw==",
+ "os": ["freebsd"],
+ "cpu": ["arm64"],
+ "tarball": "https://verdaccio.lossless.digital/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.4.tgz"
+ },
+ "@esbuild/freebsd-x64@0.27.4": {
+ "integrity": "sha512-2kb4ceA/CpfUrIcTUl1wrP/9ad9Atrp5J94Lq69w7UwOMolPIGrfLSvAKJp0RTvkPPyn6CIWrNy13kyLikZRZQ==",
+ "os": ["freebsd"],
+ "cpu": ["x64"],
+ "tarball": "https://verdaccio.lossless.digital/@esbuild/freebsd-x64/-/freebsd-x64-0.27.4.tgz"
+ },
+ "@esbuild/linux-arm64@0.27.4": {
+ "integrity": "sha512-7nQOttdzVGth1iz57kxg9uCz57dxQLHWxopL6mYuYthohPKEK0vU0C3O21CcBK6KDlkYVcnDXY099HcCDXd9dA==",
+ "os": ["linux"],
+ "cpu": ["arm64"],
+ "tarball": "https://verdaccio.lossless.digital/@esbuild/linux-arm64/-/linux-arm64-0.27.4.tgz"
+ },
+ "@esbuild/linux-arm@0.27.4": {
+ "integrity": "sha512-aBYgcIxX/wd5n2ys0yESGeYMGF+pv6g0DhZr3G1ZG4jMfruU9Tl1i2Z+Wnj9/KjGz1lTLCcorqE2viePZqj4Eg==",
+ "os": ["linux"],
+ "cpu": ["arm"],
+ "tarball": "https://verdaccio.lossless.digital/@esbuild/linux-arm/-/linux-arm-0.27.4.tgz"
+ },
+ "@esbuild/linux-ia32@0.27.4": {
+ "integrity": "sha512-oPtixtAIzgvzYcKBQM/qZ3R+9TEUd1aNJQu0HhGyqtx6oS7qTpvjheIWBbes4+qu1bNlo2V4cbkISr8q6gRBFA==",
+ "os": ["linux"],
+ "cpu": ["ia32"],
+ "tarball": "https://verdaccio.lossless.digital/@esbuild/linux-ia32/-/linux-ia32-0.27.4.tgz"
+ },
+ "@esbuild/linux-loong64@0.27.4": {
+ "integrity": "sha512-8mL/vh8qeCoRcFH2nM8wm5uJP+ZcVYGGayMavi8GmRJjuI3g1v6Z7Ni0JJKAJW+m0EtUuARb6Lmp4hMjzCBWzA==",
+ "os": ["linux"],
+ "cpu": ["loong64"],
+ "tarball": "https://verdaccio.lossless.digital/@esbuild/linux-loong64/-/linux-loong64-0.27.4.tgz"
+ },
+ "@esbuild/linux-mips64el@0.27.4": {
+ "integrity": "sha512-1RdrWFFiiLIW7LQq9Q2NES+HiD4NyT8Itj9AUeCl0IVCA459WnPhREKgwrpaIfTOe+/2rdntisegiPWn/r/aAw==",
+ "os": ["linux"],
+ "cpu": ["mips64el"],
+ "tarball": "https://verdaccio.lossless.digital/@esbuild/linux-mips64el/-/linux-mips64el-0.27.4.tgz"
+ },
+ "@esbuild/linux-ppc64@0.27.4": {
+ "integrity": "sha512-tLCwNG47l3sd9lpfyx9LAGEGItCUeRCWeAx6x2Jmbav65nAwoPXfewtAdtbtit/pJFLUWOhpv0FpS6GQAmPrHA==",
+ "os": ["linux"],
+ "cpu": ["ppc64"],
+ "tarball": "https://verdaccio.lossless.digital/@esbuild/linux-ppc64/-/linux-ppc64-0.27.4.tgz"
+ },
+ "@esbuild/linux-riscv64@0.27.4": {
+ "integrity": "sha512-BnASypppbUWyqjd1KIpU4AUBiIhVr6YlHx/cnPgqEkNoVOhHg+YiSVxM1RLfiy4t9cAulbRGTNCKOcqHrEQLIw==",
+ "os": ["linux"],
+ "cpu": ["riscv64"],
+ "tarball": "https://verdaccio.lossless.digital/@esbuild/linux-riscv64/-/linux-riscv64-0.27.4.tgz"
+ },
+ "@esbuild/linux-s390x@0.27.4": {
+ "integrity": "sha512-+eUqgb/Z7vxVLezG8bVB9SfBie89gMueS+I0xYh2tJdw3vqA/0ImZJ2ROeWwVJN59ihBeZ7Tu92dF/5dy5FttA==",
+ "os": ["linux"],
+ "cpu": ["s390x"],
+ "tarball": "https://verdaccio.lossless.digital/@esbuild/linux-s390x/-/linux-s390x-0.27.4.tgz"
+ },
+ "@esbuild/linux-x64@0.27.4": {
+ "integrity": "sha512-S5qOXrKV8BQEzJPVxAwnryi2+Iq5pB40gTEIT69BQONqR7JH1EPIcQ/Uiv9mCnn05jff9umq/5nqzxlqTOg9NA==",
+ "os": ["linux"],
+ "cpu": ["x64"],
+ "tarball": "https://verdaccio.lossless.digital/@esbuild/linux-x64/-/linux-x64-0.27.4.tgz"
+ },
+ "@esbuild/netbsd-arm64@0.27.4": {
+ "integrity": "sha512-xHT8X4sb0GS8qTqiwzHqpY00C95DPAq7nAwX35Ie/s+LO9830hrMd3oX0ZMKLvy7vsonee73x0lmcdOVXFzd6Q==",
+ "os": ["netbsd"],
+ "cpu": ["arm64"],
+ "tarball": "https://verdaccio.lossless.digital/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.4.tgz"
+ },
+ "@esbuild/netbsd-x64@0.27.4": {
+ "integrity": "sha512-RugOvOdXfdyi5Tyv40kgQnI0byv66BFgAqjdgtAKqHoZTbTF2QqfQrFwa7cHEORJf6X2ht+l9ABLMP0dnKYsgg==",
+ "os": ["netbsd"],
+ "cpu": ["x64"],
+ "tarball": "https://verdaccio.lossless.digital/@esbuild/netbsd-x64/-/netbsd-x64-0.27.4.tgz"
+ },
+ "@esbuild/openbsd-arm64@0.27.4": {
+ "integrity": "sha512-2MyL3IAaTX+1/qP0O1SwskwcwCoOI4kV2IBX1xYnDDqthmq5ArrW94qSIKCAuRraMgPOmG0RDTA74mzYNQA9ow==",
+ "os": ["openbsd"],
+ "cpu": ["arm64"],
+ "tarball": "https://verdaccio.lossless.digital/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.4.tgz"
+ },
+ "@esbuild/openbsd-x64@0.27.4": {
+ "integrity": "sha512-u8fg/jQ5aQDfsnIV6+KwLOf1CmJnfu1ShpwqdwC0uA7ZPwFws55Ngc12vBdeUdnuWoQYx/SOQLGDcdlfXhYmXQ==",
+ "os": ["openbsd"],
+ "cpu": ["x64"],
+ "tarball": "https://verdaccio.lossless.digital/@esbuild/openbsd-x64/-/openbsd-x64-0.27.4.tgz"
+ },
+ "@esbuild/openharmony-arm64@0.27.4": {
+ "integrity": "sha512-JkTZrl6VbyO8lDQO3yv26nNr2RM2yZzNrNHEsj9bm6dOwwu9OYN28CjzZkH57bh4w0I2F7IodpQvUAEd1mbWXg==",
+ "os": ["openharmony"],
+ "cpu": ["arm64"],
+ "tarball": "https://verdaccio.lossless.digital/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.4.tgz"
+ },
+ "@esbuild/sunos-x64@0.27.4": {
+ "integrity": "sha512-/gOzgaewZJfeJTlsWhvUEmUG4tWEY2Spp5M20INYRg2ZKl9QPO3QEEgPeRtLjEWSW8FilRNacPOg8R1uaYkA6g==",
+ "os": ["sunos"],
+ "cpu": ["x64"],
+ "tarball": "https://verdaccio.lossless.digital/@esbuild/sunos-x64/-/sunos-x64-0.27.4.tgz"
+ },
+ "@esbuild/win32-arm64@0.27.4": {
+ "integrity": "sha512-Z9SExBg2y32smoDQdf1HRwHRt6vAHLXcxD2uGgO/v2jK7Y718Ix4ndsbNMU/+1Qiem9OiOdaqitioZwxivhXYg==",
+ "os": ["win32"],
+ "cpu": ["arm64"],
+ "tarball": "https://verdaccio.lossless.digital/@esbuild/win32-arm64/-/win32-arm64-0.27.4.tgz"
+ },
+ "@esbuild/win32-ia32@0.27.4": {
+ "integrity": "sha512-DAyGLS0Jz5G5iixEbMHi5KdiApqHBWMGzTtMiJ72ZOLhbu/bzxgAe8Ue8CTS3n3HbIUHQz/L51yMdGMeoxXNJw==",
+ "os": ["win32"],
+ "cpu": ["ia32"],
+ "tarball": "https://verdaccio.lossless.digital/@esbuild/win32-ia32/-/win32-ia32-0.27.4.tgz"
+ },
+ "@esbuild/win32-x64@0.27.4": {
+ "integrity": "sha512-+knoa0BDoeXgkNvvV1vvbZX4+hizelrkwmGJBdT17t8FNPwG2lKemmuMZlmaNQ3ws3DKKCxpb4zRZEIp3UxFCg==",
+ "os": ["win32"],
+ "cpu": ["x64"],
+ "tarball": "https://verdaccio.lossless.digital/@esbuild/win32-x64/-/win32-x64-0.27.4.tgz"
+ },
+ "@fortawesome/fontawesome-common-types@7.2.0": {
+ "integrity": "sha512-IpR0bER9FY25p+e7BmFH25MZKEwFHTfRAfhOyJubgiDnoJNsSvJ7nigLraHtp4VOG/cy8D7uiV0dLkHOne5Fhw==",
+ "tarball": "https://verdaccio.lossless.digital/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-7.2.0.tgz"
+ },
+ "@fortawesome/fontawesome-svg-core@7.2.0": {
+ "integrity": "sha512-6639htZMjEkwskf3J+e6/iar+4cTNM9qhoWuRfj9F3eJD6r7iCzV1SWnQr2Mdv0QT0suuqU8BoJCZUyCtP9R4Q==",
+ "dependencies": [
+ "@fortawesome/fontawesome-common-types"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-7.2.0.tgz"
+ },
+ "@fortawesome/free-brands-svg-icons@7.2.0": {
+ "integrity": "sha512-VNG8xqOip1JuJcC3zsVsKRQ60oXG9+oYNDCosjoU/H9pgYmLTEwWw8pE0jhPz/JWdHeUuK6+NQ3qsM4gIbdbYQ==",
+ "dependencies": [
+ "@fortawesome/fontawesome-common-types"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@fortawesome/free-brands-svg-icons/-/free-brands-svg-icons-7.2.0.tgz"
+ },
+ "@fortawesome/free-regular-svg-icons@7.2.0": {
+ "integrity": "sha512-iycmlN51EULlQ4D/UU9WZnHiN0CvjJ2TuuCrAh+1MVdzD+4ViKYH2deNAll4XAAYlZa8WAefHR5taSK8hYmSMw==",
+ "dependencies": [
+ "@fortawesome/fontawesome-common-types"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-7.2.0.tgz"
+ },
+ "@fortawesome/free-solid-svg-icons@7.2.0": {
+ "integrity": "sha512-YTVITFGN0/24PxzXrwqCgnyd7njDuzp5ZvaCx5nq/jg55kUYd94Nj8UTchBdBofi/L0nwRfjGOg0E41d2u9T1w==",
+ "dependencies": [
+ "@fortawesome/fontawesome-common-types"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-7.2.0.tgz"
+ },
+ "@git.zone/tsbundle@2.9.1": {
+ "integrity": "sha512-JW1xjSv7UjAm2lwAQPxhCWs14wqs+UIq5FqIGUPuI6rrDBWIMT2d0gpP6iP6TqXqgm6XpBlfU4rHcHheUXzXbQ==",
+ "dependencies": [
+ "@push.rocks/early",
+ "@push.rocks/npmextra",
+ "@push.rocks/smartcli",
+ "@push.rocks/smartdelay",
+ "@push.rocks/smartfs",
+ "@push.rocks/smartinteract",
+ "@push.rocks/smartlog",
+ "@push.rocks/smartlog-destination-local",
+ "@push.rocks/smartpath@6.0.0",
+ "@push.rocks/smartpromise",
+ "@push.rocks/smartspawn",
+ "@rspack/core",
+ "@types/html-minifier",
+ "esbuild",
+ "html-minifier",
+ "rolldown",
+ "typescript"
+ ],
+ "bin": true,
+ "tarball": "https://verdaccio.lossless.digital/@git.zone/tsbundle/-/tsbundle-2.9.1.tgz"
+ },
"@git.zone/tsdeno@1.2.0": {
"integrity": "sha512-Kx/9NchzKRoBhgj44V/ymF3rtspMAO+U+x7d3CFfBAyHCzVCrFtzIdVb5JULSTSR89d9a0L4VJVyVUoRdz/MUA==",
"dependencies": [
@@ -741,6 +1152,182 @@
"bin": true,
"tarball": "https://verdaccio.lossless.digital/@git.zone/tsdeno/-/tsdeno-1.2.0.tgz"
},
+ "@git.zone/tsrun@2.0.1": {
+ "integrity": "sha512-NEcnsjvlC1o3Z6SS3VhKCf6Ev+Sh4EAinmggslrIR/ppMrvjDbXNFXoyr3PB+GLeSAR0JRZ1fGvVYjpEzjBdIg==",
+ "dependencies": [
+ "@push.rocks/smartfile@13.1.2",
+ "@push.rocks/smartshell",
+ "tsx"
+ ],
+ "bin": true,
+ "tarball": "https://verdaccio.lossless.digital/@git.zone/tsrun/-/tsrun-2.0.1.tgz"
+ },
+ "@git.zone/tswatch@3.3.0": {
+ "integrity": "sha512-2d5G4L6RpEGW7d16xz6Gg6P/JnrMncNRDy74WaFrNjdn2fe5yIPtqoiQ/9LTbxqk67snj0gN2xtlQTXiN+Xa/w==",
+ "dependencies": [
+ "@api.global/typedserver@8.4.2_@push.rocks+smartserve@2.0.1",
+ "@git.zone/tsbundle",
+ "@git.zone/tsrun",
+ "@push.rocks/early",
+ "@push.rocks/lik",
+ "@push.rocks/npmextra",
+ "@push.rocks/smartcli",
+ "@push.rocks/smartdelay",
+ "@push.rocks/smartexit",
+ "@push.rocks/smartfs",
+ "@push.rocks/smartinteract",
+ "@push.rocks/smartlog",
+ "@push.rocks/smartlog-destination-local",
+ "@push.rocks/smartshell",
+ "@push.rocks/smartwatch"
+ ],
+ "bin": true,
+ "tarball": "https://verdaccio.lossless.digital/@git.zone/tswatch/-/tswatch-3.3.0.tgz"
+ },
+ "@happy-dom/global-registrator@15.11.7": {
+ "integrity": "sha512-mfOoUlIw8VBiJYPrl5RZfMzkXC/z7gbSpi2ecycrj/gRWLq2CMV+Q+0G+JPjeOmuNFgg0skEIzkVFzVYFP6URw==",
+ "dependencies": [
+ "happy-dom"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@happy-dom/global-registrator/-/global-registrator-15.11.7.tgz"
+ },
+ "@inquirer/checkbox@3.0.1": {
+ "integrity": "sha512-0hm2nrToWUdD6/UHnel/UKGdk1//ke5zGUpHIvk5ZWmaKezlGxZkOJXNSWsdxO/rEqTkbB3lNC2J6nBElV2aAQ==",
+ "dependencies": [
+ "@inquirer/core",
+ "@inquirer/figures",
+ "@inquirer/type",
+ "ansi-escapes",
+ "yoctocolors-cjs"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@inquirer/checkbox/-/checkbox-3.0.1.tgz"
+ },
+ "@inquirer/confirm@4.0.1": {
+ "integrity": "sha512-46yL28o2NJ9doViqOy0VDcoTzng7rAb6yPQKU7VDLqkmbCaH4JqK4yk4XqlzNWy9PVC5pG1ZUXPBQv+VqnYs2w==",
+ "dependencies": [
+ "@inquirer/core",
+ "@inquirer/type"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@inquirer/confirm/-/confirm-4.0.1.tgz"
+ },
+ "@inquirer/core@9.2.1": {
+ "integrity": "sha512-F2VBt7W/mwqEU4bL0RnHNZmC/OxzNx9cOYxHqnXX3MP6ruYvZUZAW9imgN9+h/uBT/oP8Gh888J2OZSbjSeWcg==",
+ "dependencies": [
+ "@inquirer/figures",
+ "@inquirer/type",
+ "@types/mute-stream",
+ "@types/node@22.19.15",
+ "@types/wrap-ansi",
+ "ansi-escapes",
+ "cli-width",
+ "mute-stream",
+ "signal-exit@4.1.0",
+ "strip-ansi",
+ "wrap-ansi",
+ "yoctocolors-cjs"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@inquirer/core/-/core-9.2.1.tgz"
+ },
+ "@inquirer/editor@3.0.1": {
+ "integrity": "sha512-VA96GPFaSOVudjKFraokEEmUQg/Lub6OXvbIEZU1SDCmBzRkHGhxoFAVaF30nyiB4m5cEbDgiI2QRacXZ2hw9Q==",
+ "dependencies": [
+ "@inquirer/core",
+ "@inquirer/type",
+ "external-editor"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@inquirer/editor/-/editor-3.0.1.tgz"
+ },
+ "@inquirer/expand@3.0.1": {
+ "integrity": "sha512-ToG8d6RIbnVpbdPdiN7BCxZGiHOTomOX94C2FaT5KOHupV40tKEDozp12res6cMIfRKrXLJyexAZhWVHgbALSQ==",
+ "dependencies": [
+ "@inquirer/core",
+ "@inquirer/type",
+ "yoctocolors-cjs"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@inquirer/expand/-/expand-3.0.1.tgz"
+ },
+ "@inquirer/figures@1.0.15": {
+ "integrity": "sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==",
+ "tarball": "https://verdaccio.lossless.digital/@inquirer/figures/-/figures-1.0.15.tgz"
+ },
+ "@inquirer/input@3.0.1": {
+ "integrity": "sha512-BDuPBmpvi8eMCxqC5iacloWqv+5tQSJlUafYWUe31ow1BVXjW2a5qe3dh4X/Z25Wp22RwvcaLCc2siHobEOfzg==",
+ "dependencies": [
+ "@inquirer/core",
+ "@inquirer/type"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@inquirer/input/-/input-3.0.1.tgz"
+ },
+ "@inquirer/number@2.0.1": {
+ "integrity": "sha512-QpR8jPhRjSmlr/mD2cw3IR8HRO7lSVOnqUvQa8scv1Lsr3xoAMMworcYW3J13z3ppjBFBD2ef1Ci6AE5Qn8goQ==",
+ "dependencies": [
+ "@inquirer/core",
+ "@inquirer/type"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@inquirer/number/-/number-2.0.1.tgz"
+ },
+ "@inquirer/password@3.0.1": {
+ "integrity": "sha512-haoeEPUisD1NeE2IanLOiFr4wcTXGWrBOyAyPZi1FfLJuXOzNmxCJPgUrGYKVh+Y8hfGJenIfz5Wb/DkE9KkMQ==",
+ "dependencies": [
+ "@inquirer/core",
+ "@inquirer/type",
+ "ansi-escapes"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@inquirer/password/-/password-3.0.1.tgz"
+ },
+ "@inquirer/prompts@6.0.1": {
+ "integrity": "sha512-yl43JD/86CIj3Mz5mvvLJqAOfIup7ncxfJ0Btnl0/v5TouVUyeEdcpknfgc+yMevS/48oH9WAkkw93m7otLb/A==",
+ "dependencies": [
+ "@inquirer/checkbox",
+ "@inquirer/confirm",
+ "@inquirer/editor",
+ "@inquirer/expand",
+ "@inquirer/input",
+ "@inquirer/number",
+ "@inquirer/password",
+ "@inquirer/rawlist",
+ "@inquirer/search",
+ "@inquirer/select"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@inquirer/prompts/-/prompts-6.0.1.tgz"
+ },
+ "@inquirer/rawlist@3.0.1": {
+ "integrity": "sha512-VgRtFIwZInUzTiPLSfDXK5jLrnpkuSOh1ctfaoygKAdPqjcjKYmGh6sCY1pb0aGnCGsmhUxoqLDUAU0ud+lGXQ==",
+ "dependencies": [
+ "@inquirer/core",
+ "@inquirer/type",
+ "yoctocolors-cjs"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@inquirer/rawlist/-/rawlist-3.0.1.tgz"
+ },
+ "@inquirer/search@2.0.1": {
+ "integrity": "sha512-r5hBKZk3g5MkIzLVoSgE4evypGqtOannnB3PKTG9NRZxyFRKcfzrdxXXPcoJQsxJPzvdSU2Rn7pB7lw0GCmGAg==",
+ "dependencies": [
+ "@inquirer/core",
+ "@inquirer/figures",
+ "@inquirer/type",
+ "yoctocolors-cjs"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@inquirer/search/-/search-2.0.1.tgz"
+ },
+ "@inquirer/select@3.0.1": {
+ "integrity": "sha512-lUDGUxPhdWMkN/fHy1Lk7pF3nK1fh/gqeyWXmctefhxLYxlDsc7vsPBEpxrfVGDsVdyYJsiJoD4bJ1b623cV1Q==",
+ "dependencies": [
+ "@inquirer/core",
+ "@inquirer/figures",
+ "@inquirer/type",
+ "ansi-escapes",
+ "yoctocolors-cjs"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@inquirer/select/-/select-3.0.1.tgz"
+ },
+ "@inquirer/type@2.0.0": {
+ "integrity": "sha512-XvJRx+2KR3YXyYtPUUy+qd9i7p+GO9Ko6VIIpWlBrpWwXDv8WLFeHTxz35CfQFUiBMLXlGHhGzys7lqit9gWag==",
+ "dependencies": [
+ "mute-stream"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@inquirer/type/-/type-2.0.0.tgz"
+ },
"@isaacs/cliui@9.0.0": {
"integrity": "sha512-AokJm4tuBHillT+FpMtxQ60n8ObyXBatq7jD2/JA9dxbDDokKQm8KMht5ibGzLVU9IJDIKK4TPKgMHEYMn3lMg==",
"tarball": "https://verdaccio.lossless.digital/@isaacs/cliui/-/cliui-9.0.0.tgz"
@@ -760,6 +1347,47 @@
"integrity": "sha512-Y28PR25bHXUg88kCV7nivXrP2Nj2RueZ3/l/jdx6J9f8J4nsEGcgX0Qe6lt7Pa+J79+kPiJU3LguR6O/6zrLOw==",
"tarball": "https://verdaccio.lossless.digital/@mixmark-io/domino/-/domino-2.2.0.tgz"
},
+ "@module-federation/error-codes@0.22.0": {
+ "integrity": "sha512-xF9SjnEy7vTdx+xekjPCV5cIHOGCkdn3pIxo9vU7gEZMIw0SvAEdsy6Uh17xaCpm8V0FWvR0SZoK9Ik6jGOaug==",
+ "tarball": "https://verdaccio.lossless.digital/@module-federation/error-codes/-/error-codes-0.22.0.tgz"
+ },
+ "@module-federation/runtime-core@0.22.0": {
+ "integrity": "sha512-GR1TcD6/s7zqItfhC87zAp30PqzvceoeDGYTgF3Vx2TXvsfDrhP6Qw9T4vudDQL3uJRne6t7CzdT29YyVxlgIA==",
+ "dependencies": [
+ "@module-federation/error-codes",
+ "@module-federation/sdk"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@module-federation/runtime-core/-/runtime-core-0.22.0.tgz"
+ },
+ "@module-federation/runtime-tools@0.22.0": {
+ "integrity": "sha512-4ScUJ/aUfEernb+4PbLdhM/c60VHl698Gn1gY21m9vyC1Ucn69fPCA1y2EwcCB7IItseRMoNhdcWQnzt/OPCNA==",
+ "dependencies": [
+ "@module-federation/runtime",
+ "@module-federation/webpack-bundler-runtime"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@module-federation/runtime-tools/-/runtime-tools-0.22.0.tgz"
+ },
+ "@module-federation/runtime@0.22.0": {
+ "integrity": "sha512-38g5iPju2tPC3KHMPxRKmy4k4onNp6ypFPS1eKGsNLUkXgHsPMBFqAjDw96iEcjri91BrahG4XcdyKi97xZzlA==",
+ "dependencies": [
+ "@module-federation/error-codes",
+ "@module-federation/runtime-core",
+ "@module-federation/sdk"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@module-federation/runtime/-/runtime-0.22.0.tgz"
+ },
+ "@module-federation/sdk@0.22.0": {
+ "integrity": "sha512-x4aFNBKn2KVQRuNVC5A7SnrSCSqyfIWmm1DvubjbO9iKFe7ith5niw8dqSFBekYBg2Fwy+eMg4sEFNVvCAdo6g==",
+ "tarball": "https://verdaccio.lossless.digital/@module-federation/sdk/-/sdk-0.22.0.tgz"
+ },
+ "@module-federation/webpack-bundler-runtime@0.22.0": {
+ "integrity": "sha512-aM8gCqXu+/4wBmJtVeMeeMN5guw3chf+2i6HajKtQv7SJfxV/f4IyNQJUeUQu9HfiAZHjqtMV5Lvq/Lvh8LdyA==",
+ "dependencies": [
+ "@module-federation/runtime",
+ "@module-federation/sdk"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@module-federation/webpack-bundler-runtime/-/webpack-bundler-runtime-0.22.0.tgz"
+ },
"@mongodb-js/saslprep@1.4.6": {
"integrity": "sha512-y+x3H1xBZd38n10NZF/rEBlvDOOMQ6LKUTHqr8R9VkJ+mmQOYtJFxIlkkK8fZrtOiL6VixbOBWMbZGBdal3Z1g==",
"dependencies": [
@@ -767,6 +1395,102 @@
],
"tarball": "https://verdaccio.lossless.digital/@mongodb-js/saslprep/-/saslprep-1.4.6.tgz"
},
+ "@napi-rs/canvas-android-arm64@0.1.96": {
+ "integrity": "sha512-ew1sPrN3dGdZ3L4FoohPfnjq0f9/Jk7o+wP7HkQZokcXgIUD6FIyICEWGhMYzv53j63wUcPvZeAwgewX58/egg==",
+ "os": ["android"],
+ "cpu": ["arm64"],
+ "tarball": "https://verdaccio.lossless.digital/@napi-rs/canvas-android-arm64/-/canvas-android-arm64-0.1.96.tgz"
+ },
+ "@napi-rs/canvas-darwin-arm64@0.1.96": {
+ "integrity": "sha512-Q/wOXZ5PzTqpdmA5eUOcegCf4Go/zz3aZ5DlzSeDpOjFmfwMKh8EzLAoweQ+mJVagcHQyzoJhaTEnrO68TNyNg==",
+ "os": ["darwin"],
+ "cpu": ["arm64"],
+ "tarball": "https://verdaccio.lossless.digital/@napi-rs/canvas-darwin-arm64/-/canvas-darwin-arm64-0.1.96.tgz"
+ },
+ "@napi-rs/canvas-darwin-x64@0.1.96": {
+ "integrity": "sha512-UrXiQz28tQEvGM1qvyptewOAfmUrrd5+wvi6Rzjj2VprZI8iZ2KIvBD2lTTG1bVF95AbeDeG7PJA0D9sLKaOFA==",
+ "os": ["darwin"],
+ "cpu": ["x64"],
+ "tarball": "https://verdaccio.lossless.digital/@napi-rs/canvas-darwin-x64/-/canvas-darwin-x64-0.1.96.tgz"
+ },
+ "@napi-rs/canvas-linux-arm-gnueabihf@0.1.96": {
+ "integrity": "sha512-I90ODxweD8aEP6XKU/NU+biso95MwCtQ2F46dUvhec1HesFi0tq/tAJkYic/1aBSiO/1kGKmSeD1B0duOHhEHQ==",
+ "os": ["linux"],
+ "cpu": ["arm"],
+ "tarball": "https://verdaccio.lossless.digital/@napi-rs/canvas-linux-arm-gnueabihf/-/canvas-linux-arm-gnueabihf-0.1.96.tgz"
+ },
+ "@napi-rs/canvas-linux-arm64-gnu@0.1.96": {
+ "integrity": "sha512-Dx/0+RFV++w3PcRy+4xNXkghhXjA5d0Mw1bs95emn5Llinp1vihMaA6WJt3oYv2LAHc36+gnrhIBsPhUyI2SGw==",
+ "os": ["linux"],
+ "cpu": ["arm64"],
+ "tarball": "https://verdaccio.lossless.digital/@napi-rs/canvas-linux-arm64-gnu/-/canvas-linux-arm64-gnu-0.1.96.tgz"
+ },
+ "@napi-rs/canvas-linux-arm64-musl@0.1.96": {
+ "integrity": "sha512-UvOi7fii3IE2KDfEfhh8m+LpzSRvhGK7o1eho99M2M0HTik11k3GX+2qgVx9EtujN3/bhFFS1kSO3+vPMaJ0Mg==",
+ "os": ["linux"],
+ "cpu": ["arm64"],
+ "tarball": "https://verdaccio.lossless.digital/@napi-rs/canvas-linux-arm64-musl/-/canvas-linux-arm64-musl-0.1.96.tgz"
+ },
+ "@napi-rs/canvas-linux-riscv64-gnu@0.1.96": {
+ "integrity": "sha512-MBSukhGCQ5nRtf9NbFYWOU080yqkZU1PbuH4o1ROvB4CbPl12fchDR35tU83Wz8gWIM9JTn99lBn9DenPIv7Ig==",
+ "os": ["linux"],
+ "cpu": ["riscv64"],
+ "tarball": "https://verdaccio.lossless.digital/@napi-rs/canvas-linux-riscv64-gnu/-/canvas-linux-riscv64-gnu-0.1.96.tgz"
+ },
+ "@napi-rs/canvas-linux-x64-gnu@0.1.96": {
+ "integrity": "sha512-I/ccu2SstyKiV3HIeVzyBIWfrJo8cN7+MSQZPnabewWV6hfJ2nY7Df2WqOHmobBRUw84uGR6zfQHsUEio/m5Vg==",
+ "os": ["linux"],
+ "cpu": ["x64"],
+ "tarball": "https://verdaccio.lossless.digital/@napi-rs/canvas-linux-x64-gnu/-/canvas-linux-x64-gnu-0.1.96.tgz"
+ },
+ "@napi-rs/canvas-linux-x64-musl@0.1.96": {
+ "integrity": "sha512-H3uov7qnTl73GDT4h52lAqpJPsl1tIUyNPWJyhQ6gHakohNqqRq3uf80+NEpzcytKGEOENP1wX3yGwZxhjiWEQ==",
+ "os": ["linux"],
+ "cpu": ["x64"],
+ "tarball": "https://verdaccio.lossless.digital/@napi-rs/canvas-linux-x64-musl/-/canvas-linux-x64-musl-0.1.96.tgz"
+ },
+ "@napi-rs/canvas-win32-arm64-msvc@0.1.96": {
+ "integrity": "sha512-ATp6Y+djOjYtkfV/VRH7CZ8I1MEtkUQBmKUbuWw5zWEHHqfL0cEcInE4Cxgx7zkNAhEdBbnH8HMVrqNp+/gwxA==",
+ "os": ["win32"],
+ "cpu": ["arm64"],
+ "tarball": "https://verdaccio.lossless.digital/@napi-rs/canvas-win32-arm64-msvc/-/canvas-win32-arm64-msvc-0.1.96.tgz"
+ },
+ "@napi-rs/canvas-win32-x64-msvc@0.1.96": {
+ "integrity": "sha512-UYGdTltVd+Z8mcIuoqGmAXXUvwH5CLf2M6mIB5B0/JmX5J041jETjqtSYl7gN+aj3k1by/SG6sS0hAwCqyK7zw==",
+ "os": ["win32"],
+ "cpu": ["x64"],
+ "tarball": "https://verdaccio.lossless.digital/@napi-rs/canvas-win32-x64-msvc/-/canvas-win32-x64-msvc-0.1.96.tgz"
+ },
+ "@napi-rs/canvas@0.1.96": {
+ "integrity": "sha512-6NNmNxvoJKeucVjxaaRUt3La2i5jShgiAbaY3G/72s1Vp3U06XPrAIxkAjBxpDcamEn/t+WJ4OOlGmvILo4/Ew==",
+ "optionalDependencies": [
+ "@napi-rs/canvas-android-arm64",
+ "@napi-rs/canvas-darwin-arm64",
+ "@napi-rs/canvas-darwin-x64",
+ "@napi-rs/canvas-linux-arm-gnueabihf",
+ "@napi-rs/canvas-linux-arm64-gnu",
+ "@napi-rs/canvas-linux-arm64-musl",
+ "@napi-rs/canvas-linux-riscv64-gnu",
+ "@napi-rs/canvas-linux-x64-gnu",
+ "@napi-rs/canvas-linux-x64-musl",
+ "@napi-rs/canvas-win32-arm64-msvc",
+ "@napi-rs/canvas-win32-x64-msvc"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@napi-rs/canvas/-/canvas-0.1.96.tgz"
+ },
+ "@napi-rs/wasm-runtime@1.0.7": {
+ "integrity": "sha512-SeDnOO0Tk7Okiq6DbXmmBODgOAb9dp9gjlphokTUxmt8U3liIP1ZsozBahH69j/RJv+Rfs6IwUKHTgQYJ/HBAw==",
+ "dependencies": [
+ "@emnapi/core",
+ "@emnapi/runtime",
+ "@tybys/wasm-util"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@napi-rs/wasm-runtime/-/wasm-runtime-1.0.7.tgz"
+ },
+ "@oxc-project/types@0.99.0": {
+ "integrity": "sha512-LLDEhXB7g1m5J+woRSgfKsFPS3LhR9xRhTeIoEBm5WrkwMxn6eZ0Ld0c0K5eHB57ChZX6I3uSmmLjZ8pcjlRcw==",
+ "tarball": "https://verdaccio.lossless.digital/@oxc-project/types/-/types-0.99.0.tgz"
+ },
"@push.rocks/consolecolor@2.0.3": {
"integrity": "sha512-hA+m0BMqEwZNSAS7c2aQFfoPkpX/dNdsHzkdLdeERUOy7BLacb9ItTUofGtjtginP0yDj4NSpqSjNYyX3Y8Y/w==",
"dependencies": [
@@ -782,6 +1506,14 @@
],
"tarball": "https://verdaccio.lossless.digital/@push.rocks/early/-/early-4.0.4.tgz"
},
+ "@push.rocks/isohash@2.0.1": {
+ "integrity": "sha512-UulhEui8O9Ei9fSqTldsB73TUmAFNqEBk82tHsJSLLpNK9gJZQE82iaSNsQUakoUQ2c9KueueMfwC3IoDaYRrQ==",
+ "dependencies": [
+ "@pushrocks/smartenv",
+ "@pushrocks/smarthash"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@push.rocks/isohash/-/isohash-2.0.1.tgz"
+ },
"@push.rocks/isounique@1.0.5": {
"integrity": "sha512-Z0BVqZZOCif1THTbIKWMgg0wxCzt9CyBtBBqQJiZ+jJ0KlQFrQHNHrPt81/LXe/L4x0cxWsn0bpL6W5DNSvNLw==",
"tarball": "https://verdaccio.lossless.digital/@push.rocks/isounique/-/isounique-1.0.5.tgz"
@@ -804,7 +1536,7 @@
"integrity": "sha512-kW0ZUGyf1e4nwloVwBQjNId+MzgTcNS834C+RxH21i1NqyOubbpWZtJtPP+K+s35nSJRyCTy3ICfBMdDBTAm2w==",
"dependencies": [
"@push.rocks/lik",
- "@push.rocks/smartfile",
+ "@push.rocks/smartfile@11.2.7",
"@push.rocks/smartjson@5.2.0",
"@push.rocks/smartpath@6.0.0",
"@push.rocks/smartpromise",
@@ -817,7 +1549,7 @@
"integrity": "sha512-snLpSHwaQ5OXlZzF1KX/FY71W5LwajjBzor82Vue0smjEPnSeUPY5/JcVdMwtdprdJe13pc/EQQuIiL/zw4/yg==",
"dependencies": [
"@push.rocks/qenv",
- "@push.rocks/smartfile",
+ "@push.rocks/smartfile@11.2.7",
"@push.rocks/smartjson@5.2.0",
"@push.rocks/smartlog",
"@push.rocks/smartpath@6.0.0",
@@ -833,7 +1565,7 @@
"dependencies": [
"@api.global/typedrequest",
"@configvault.io/interfaces",
- "@push.rocks/smartfile",
+ "@push.rocks/smartfile@11.2.7",
"@push.rocks/smartlog",
"@push.rocks/smartpath@6.0.0"
],
@@ -862,6 +1594,29 @@
],
"tarball": "https://verdaccio.lossless.digital/@push.rocks/smartbuffer/-/smartbuffer-3.0.5.tgz"
},
+ "@push.rocks/smartcache@1.0.18": {
+ "integrity": "sha512-3+cmLu9chbnmi4yD4kjlFP/Tn4NReaZIoicEcGTtwbcokTrSDMs3YPdJzIpDZkAs83PW7OcVSHa3Ak5KU5OWzA==",
+ "dependencies": [
+ "@push.rocks/smartdelay",
+ "@push.rocks/smarterror",
+ "@push.rocks/smarthash",
+ "@push.rocks/smartpromise",
+ "@push.rocks/smarttime"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@push.rocks/smartcache/-/smartcache-1.0.18.tgz"
+ },
+ "@push.rocks/smartchok@1.2.0": {
+ "integrity": "sha512-I5fR++k6nR1wiMQUwcTYzO0g8FwD6gN+3HwfIzpQlolrM91i6Q5TaoMlt3aysbvKCSNvkL3FlJLOfUHNGWoWkA==",
+ "dependencies": [
+ "@push.rocks/lik",
+ "@push.rocks/smartpromise",
+ "@push.rocks/smartrx",
+ "chokidar",
+ "picomatch"
+ ],
+ "deprecated": true,
+ "tarball": "https://verdaccio.lossless.digital/@push.rocks/smartchok/-/smartchok-1.2.0.tgz"
+ },
"@push.rocks/smartcli@4.0.20": {
"integrity": "sha512-gCo4ItvsPj8WoVAJw/6vkuoGA5FtIoACux2ktcCeH0nrFe7/xGR6waJ1aZcYAi7QN4gi52TlsgwuKz7BzXqhmQ==",
"dependencies": [
@@ -870,7 +1625,7 @@
"@push.rocks/smartobject",
"@push.rocks/smartpromise",
"@push.rocks/smartrx",
- "yargs-parser@22.0.0"
+ "yargs-parser"
],
"tarball": "https://verdaccio.lossless.digital/@push.rocks/smartcli/-/smartcli-4.0.20.tgz"
},
@@ -882,7 +1637,7 @@
"@push.rocks/smartpromise",
"@push.rocks/smartrx",
"@push.rocks/smarturl",
- "@push.rocks/webrequest"
+ "@push.rocks/webrequest@4.0.5"
],
"tarball": "https://verdaccio.lossless.digital/@push.rocks/smartclickhouse/-/smartclickhouse-2.2.0.tgz"
},
@@ -952,6 +1707,14 @@
],
"tarball": "https://verdaccio.lossless.digital/@push.rocks/smartenv/-/smartenv-6.0.0.tgz"
},
+ "@push.rocks/smarterror@2.0.1": {
+ "integrity": "sha512-iCcH1D8tlDJgMFsaJ6lhdOTKhbU0KoprNv9MRP9o7691QOx4JEDXiHtr/lNtxVo8BUtdb9CF6kazaknO9KuORA==",
+ "dependencies": [
+ "clean-stack",
+ "make-error-cause"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@push.rocks/smarterror/-/smarterror-2.0.1.tgz"
+ },
"@push.rocks/smartexit@2.0.3": {
"integrity": "sha512-ZWpZ3Elorpv/rKtUcCUejUHG4BIE5B3QWysBAgb7lTcA7y0vGdFY32Y5/Q5tHpZM6PPxl/WTdUOYtSojQTq+pA==",
"dependencies": [
@@ -960,6 +1723,14 @@
],
"tarball": "https://verdaccio.lossless.digital/@push.rocks/smartexit/-/smartexit-2.0.3.tgz"
},
+ "@push.rocks/smartfeed@1.4.0": {
+ "integrity": "sha512-bvj/3cGQI6TbbjbqrgC1uufcqprd/VthefuIsS8KHiHyCqYD5Z6RTjrbQY9WOCsmub/dcuMavfXQZqe9g2+OrQ==",
+ "dependencies": [
+ "@tsclass/tsclass@9.5.0",
+ "fast-xml-parser@4.5.4"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@push.rocks/smartfeed/-/smartfeed-1.4.0.tgz"
+ },
"@push.rocks/smartfile-interfaces@1.0.7": {
"integrity": "sha512-MeOl/200UOvSO4Pgq/DVFiBVZpL9gjOBQM+4XYNjSxda8c6VBvchHAntaFLQUlO8U1ckNaP9i+nMO4O4/0ymyw==",
"tarball": "https://verdaccio.lossless.digital/@push.rocks/smartfile-interfaces/-/smartfile-interfaces-1.0.7.tgz"
@@ -980,11 +1751,31 @@
"@types/fs-extra",
"@types/js-yaml@4.0.9",
"fs-extra",
- "glob",
+ "glob@11.1.0",
"js-yaml@4.1.1"
],
"tarball": "https://verdaccio.lossless.digital/@push.rocks/smartfile/-/smartfile-11.2.7.tgz"
},
+ "@push.rocks/smartfile@13.1.2": {
+ "integrity": "sha512-DaEhwmnGEpX4coeeToaw4cZe3pNBhH7CY1iGr+d3pIXihozREvzzAR9/0i2r7bUXXL5+Lgy8YYIk5ZS+fwxMKA==",
+ "dependencies": [
+ "@push.rocks/lik",
+ "@push.rocks/smartdelay",
+ "@push.rocks/smartfile-interfaces",
+ "@push.rocks/smartfs",
+ "@push.rocks/smarthash",
+ "@push.rocks/smartjson@5.2.0",
+ "@push.rocks/smartmime",
+ "@push.rocks/smartpath@6.0.0",
+ "@push.rocks/smartpromise",
+ "@push.rocks/smartrequest@4.4.2",
+ "@push.rocks/smartstream",
+ "@types/js-yaml@4.0.9",
+ "glob@11.1.0",
+ "js-yaml@4.1.1"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@push.rocks/smartfile/-/smartfile-13.1.2.tgz"
+ },
"@push.rocks/smartfs@1.5.0": {
"integrity": "sha512-QwMD44HgX3d9PPxUwR0uS+0PEMtesKvKbZR+s4pezL2er6oPneKJMLkO6TJPvJ38nug6Lmlk9Bu7UrwR2kS3Vw==",
"dependencies": [
@@ -1012,6 +1803,20 @@
],
"tarball": "https://verdaccio.lossless.digital/@push.rocks/smarthash/-/smarthash-3.2.6.tgz"
},
+ "@push.rocks/smarti18n@1.0.4": {
+ "integrity": "sha512-bHIi9Iuzp2cbux9q79ZK5jOQYPsYJ9zDDS4p/xEPQH31gr0mcFRosLSQb1kvDQDVmUhI0ADlQMqr2ui9zEXQHA==",
+ "tarball": "https://verdaccio.lossless.digital/@push.rocks/smarti18n/-/smarti18n-1.0.4.tgz"
+ },
+ "@push.rocks/smartinteract@2.0.16": {
+ "integrity": "sha512-eltvVRRUKBKd77DSFA4DPY2g4V4teZLNe8A93CDy/WglglYcUjxMoLY/b0DFTWCWKYT+yjk6Fe6p0FRrvX9Yvg==",
+ "dependencies": [
+ "@push.rocks/lik",
+ "@push.rocks/smartobject",
+ "@push.rocks/smartpromise",
+ "inquirer"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@push.rocks/smartinteract/-/smartinteract-2.0.16.tgz"
+ },
"@push.rocks/smartjson@5.2.0": {
"integrity": "sha512-710e8UwovRfPgUtaBHcd6unaODUjV5fjxtGcGCqtaTcmvOV6VpasdVfT66xMDzQmWH2E9ZfHDJeso9HdDQzNQA==",
"dependencies": [
@@ -1044,26 +1849,54 @@
],
"tarball": "https://verdaccio.lossless.digital/@push.rocks/smartjwt/-/smartjwt-2.2.1.tgz"
},
+ "@push.rocks/smartlog-destination-devtools@1.0.12": {
+ "integrity": "sha512-zvsIkrqByc0JRaBgIyhh+PSz2SY/e/bmhZdUcr/OW6pudgAcqe2sso68EzrKux0w9OMl1P9ZnzF3FpCZPFWD/A==",
+ "dependencies": [
+ "@push.rocks/smartlog-interfaces"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@push.rocks/smartlog-destination-devtools/-/smartlog-destination-devtools-1.0.12.tgz"
+ },
+ "@push.rocks/smartlog-destination-local@9.0.2": {
+ "integrity": "sha512-htzIY+4+hU61Z2J4Oz+IHnAB3RGe+fpS0VKCKnAoppZqzMWnJ3UOgYIyr4djDBy2WtgpXV/16KdisKrOmwuuvw==",
+ "dependencies": [
+ "@push.rocks/consolecolor",
+ "@push.rocks/smartlog-interfaces",
+ "@push.rocks/smartpromise"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@push.rocks/smartlog-destination-local/-/smartlog-destination-local-9.0.2.tgz"
+ },
+ "@push.rocks/smartlog-interfaces@3.0.2": {
+ "integrity": "sha512-8hGRTJehbsFSJxLhCQkA018mZtXVPxPTblbg9VaE/EqISRzUw+eosJ2EJV7M4Qu0eiTJZjnWnNLn8CkD77ziWw==",
+ "dependencies": [
+ "@api.global/typedrequest-interfaces@2.0.2",
+ "@tsclass/tsclass@4.4.4"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@push.rocks/smartlog-interfaces/-/smartlog-interfaces-3.0.2.tgz"
+ },
"@push.rocks/smartlog@3.2.1": {
"integrity": "sha512-x9/P59pfzY6HOGYmYrhqmoRl/pliTVx44g2Vbb8dIr/0zA39cAJHlPze1+UGncn37XKGmutK2iLSsJLEsexD0A==",
"dependencies": [
- "@api.global/typedrequest-interfaces",
+ "@api.global/typedrequest-interfaces@3.0.19",
"@push.rocks/consolecolor",
"@push.rocks/isounique",
"@push.rocks/smartclickhouse",
- "@push.rocks/smartfile",
+ "@push.rocks/smartfile@11.2.7",
"@push.rocks/smarthash",
"@push.rocks/smartpromise",
"@push.rocks/smarttime",
- "@push.rocks/webrequest",
+ "@push.rocks/webrequest@4.0.5",
"@tsclass/tsclass@9.5.0"
],
"tarball": "https://verdaccio.lossless.digital/@push.rocks/smartlog/-/smartlog-3.2.1.tgz"
},
+ "@push.rocks/smartmanifest@2.0.2": {
+ "integrity": "sha512-QGc5C9vunjfUbYsPGz5bynV/mVmPHkrQDkWp8ZO8VJtK1GZe+njgbrNyxn2SUHR0IhSAbSXl1j4JvBqYf5eTVg==",
+ "tarball": "https://verdaccio.lossless.digital/@push.rocks/smartmanifest/-/smartmanifest-2.0.2.tgz"
+ },
"@push.rocks/smartmarkdown@3.0.3": {
"integrity": "sha512-9KhKZxDQKPk4P/2CYdVqJa5dpGfTA8w1cxqoVZL3e8RPA7EGxbdYEqMp0n2d9mth0btk/m0KHHV+G09LfCVeBw==",
"dependencies": [
- "@push.rocks/smartyaml",
+ "@push.rocks/smartyaml@2.0.5",
"@types/turndown",
"remark-frontmatter",
"remark-gfm",
@@ -1107,6 +1940,16 @@
],
"tarball": "https://verdaccio.lossless.digital/@push.rocks/smartmongo/-/smartmongo-2.2.0.tgz"
},
+ "@push.rocks/smartntml@2.0.8": {
+ "integrity": "sha512-LIYeOQbmav2m2kZQz4pGS74xvWAm4YAGQnbPkofA2oas4RW9SGR1JTRpFd9pxGCOXd6djYdNGsZZ/xz+k/vRPQ==",
+ "dependencies": [
+ "@design.estate/dees-element",
+ "@happy-dom/global-registrator",
+ "@push.rocks/smartpromise",
+ "fake-indexeddb@6.2.5"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@push.rocks/smartntml/-/smartntml-2.0.8.tgz"
+ },
"@push.rocks/smartobject@1.0.12": {
"integrity": "sha512-xSMiqXiZXXUOixT3QIPsOUKOWjL3YA/1h9/YTiCzqs5C0D3tyfTbojnfcp6YbKZoBzans2I5LghaDHsGid2DKQ==",
"dependencies": [
@@ -1115,6 +1958,13 @@
],
"tarball": "https://verdaccio.lossless.digital/@push.rocks/smartobject/-/smartobject-1.0.12.tgz"
},
+ "@push.rocks/smartopen@2.0.0": {
+ "integrity": "sha512-eVT0GhtQ2drb95j/kktYst/Toh1zCwCqjTJFYtaYFUnnBnBUajPtBZDFnPQo01DN8JxoeCTo8jggq+PCvzcfww==",
+ "dependencies": [
+ "open"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@push.rocks/smartopen/-/smartopen-2.0.0.tgz"
+ },
"@push.rocks/smartpath@5.1.0": {
"integrity": "sha512-pJ4UGATHV/C6Dw5DU0D3MJaPMASlKAgeS+Hl9dkhD2ceYArn86Ky3Z/g7LNj40Oz6cUe77/AP1chztmJZISrpw==",
"tarball": "https://verdaccio.lossless.digital/@push.rocks/smartpath/-/smartpath-5.1.0.tgz"
@@ -1199,6 +2049,19 @@
],
"tarball": "https://verdaccio.lossless.digital/@push.rocks/smartrx/-/smartrx-3.0.10.tgz"
},
+ "@push.rocks/smartserve@2.0.1": {
+ "integrity": "sha512-YQb2qexfCzCqOlLWBBXKMg6xG4zahCPAxomz/KEKAwHtW6wMTtuHKSTSkRTQ0vl9jssLMAmRz2OyafiL9XGJXQ==",
+ "dependencies": [
+ "@api.global/typedrequest",
+ "@cfworker/json-schema",
+ "@push.rocks/lik",
+ "@push.rocks/smartenv@6.0.0",
+ "@push.rocks/smartlog",
+ "@push.rocks/smartpath@6.0.0",
+ "ws@8.18.3"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@push.rocks/smartserve/-/smartserve-2.0.1.tgz"
+ },
"@push.rocks/smartshell@3.3.8": {
"integrity": "sha512-t9J/py0vnea4ZtOs7Anc9dc6lcvg6EDvYBw5eE1mB+KUWxMQf/ROIQwWMo6B9SMNY4JS2UwvfuJQJ8makP/7Tg==",
"dependencies": [
@@ -1210,6 +2073,49 @@
],
"tarball": "https://verdaccio.lossless.digital/@push.rocks/smartshell/-/smartshell-3.3.8.tgz"
},
+ "@push.rocks/smartsitemap@2.0.4": {
+ "integrity": "sha512-76dYWG/o/EjV4vYCK7ZKM35T9xgrI+oHEiiIE6E2MDaFIU6QnSfciTfbscH5nc0vxx8Ah+I0HPEJO94BM2S39w==",
+ "dependencies": [
+ "@push.rocks/smartcache",
+ "@push.rocks/smartfeed",
+ "@push.rocks/smartxml",
+ "@push.rocks/smartyaml@3.0.4",
+ "@push.rocks/webrequest@4.0.5",
+ "@tsclass/tsclass@9.5.0"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@push.rocks/smartsitemap/-/smartsitemap-2.0.4.tgz"
+ },
+ "@push.rocks/smartsocket@2.1.0": {
+ "integrity": "sha512-etOGyfiDFQz/1WJnD3jFL2N7ykujTjiudAz6qZTz82xE5oabKuKX+Cn8SdM9dOwzyWmBUKbUdll8QhovAXjn+g==",
+ "dependencies": [
+ "@api.global/typedrequest-interfaces@3.0.19",
+ "@api.global/typedserver@3.0.80",
+ "@push.rocks/isohash",
+ "@push.rocks/isounique",
+ "@push.rocks/lik",
+ "@push.rocks/smartdelay",
+ "@push.rocks/smartenv@5.0.13",
+ "@push.rocks/smartjson@5.2.0",
+ "@push.rocks/smartlog",
+ "@push.rocks/smartpromise",
+ "@push.rocks/smartrx",
+ "@push.rocks/smarttime",
+ "engine.io",
+ "socket.io",
+ "socket.io-client"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@push.rocks/smartsocket/-/smartsocket-2.1.0.tgz"
+ },
+ "@push.rocks/smartspawn@3.0.3": {
+ "integrity": "sha512-DyrGPV69wwOiJgKkyruk5hS3UEGZ99xFAqBE9O2nM8VXCRLbbty3xt1Ug5Z092ZZmJYaaGMSnMw3ijyZJFCT0Q==",
+ "dependencies": [
+ "@push.rocks/smartpromise",
+ "spawn-wrap",
+ "threads",
+ "tiny-worker"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@push.rocks/smartspawn/-/smartspawn-3.0.3.tgz"
+ },
"@push.rocks/smartstate@2.2.1": {
"integrity": "sha512-fLrilAJNI6QOs0hcBRD9eTwU2Rlo6NlDCKQo9N/zyp0VJ6AV1UVdEZcVIQILu1CO0RUHX9aBAbFunJrb2+Zrkg==",
"dependencies": [
@@ -1265,6 +2171,25 @@
"integrity": "sha512-ij73Q4GERojdPSHxAvYKvspimcpAJC6GGQCWsC4b+1sAiOSByjfmkUHK8yiEEOPRU9AeGuyaIVqK6ZzKLEZ3vA==",
"tarball": "https://verdaccio.lossless.digital/@push.rocks/smarturl/-/smarturl-3.1.0.tgz"
},
+ "@push.rocks/smartwatch@6.3.0": {
+ "integrity": "sha512-TeZ1PGBoBMpC4/CK8StIj5InEiFfKp7xWJSm3aYMjB/uaoeRP0vXqv1ORIC/TKYGJuEDuAXUsit8tZVjn0qT1Q==",
+ "dependencies": [
+ "@push.rocks/lik",
+ "@push.rocks/smartenv@6.0.0",
+ "@push.rocks/smartpromise",
+ "@push.rocks/smartrx",
+ "chokidar",
+ "picomatch"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@push.rocks/smartwatch/-/smartwatch-6.3.0.tgz"
+ },
+ "@push.rocks/smartxml@2.0.0": {
+ "integrity": "sha512-1d06zYJX4Zt8s5w5qFOUg2LAEz9ykrh9d6CQPK4WAgOBIefb1xzVEWHc7yoxicc2OkzNgC3IBCEg3s6BncZKWw==",
+ "dependencies": [
+ "fast-xml-parser@5.5.6"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@push.rocks/smartxml/-/smartxml-2.0.0.tgz"
+ },
"@push.rocks/smartyaml@2.0.5": {
"integrity": "sha512-tBcf+HaOIfeEsTMwgUZDtZERCxXQyRsWO8Ar5DjBdiSRchbhVGZQEBzXswMS0W5ZoRenjgPK+4tPW3JQGRTfbg==",
"dependencies": [
@@ -1273,6 +2198,13 @@
],
"tarball": "https://verdaccio.lossless.digital/@push.rocks/smartyaml/-/smartyaml-2.0.5.tgz"
},
+ "@push.rocks/smartyaml@3.0.4": {
+ "integrity": "sha512-1JRt+hnoc2zHw3AW+vXKlCdSVwqOmY/01fu+2HBviS0UDjoZCa+/rp6E3GaQb5lEEafKi8ENbffAfjXXp3N2xQ==",
+ "dependencies": [
+ "yaml"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@push.rocks/smartyaml/-/smartyaml-3.0.4.tgz"
+ },
"@push.rocks/taskbuffer@3.5.0": {
"integrity": "sha512-Y9WwIEIyp6oVFdj06j84tfrZIvjhbMb3DF52rYxlTeYLk3W7RPhSg1bGPCbtkXWeKdBrSe37V90BkOG7Qq8Pqg==",
"dependencies": [
@@ -1287,6 +2219,17 @@
],
"tarball": "https://verdaccio.lossless.digital/@push.rocks/taskbuffer/-/taskbuffer-3.5.0.tgz"
},
+ "@push.rocks/webrequest@3.0.37": {
+ "integrity": "sha512-fLN7kP6GeHFxE4UH4r9C9pjcQb0QkJxHeAMwXvbOqB9hh0MFNKhtGU7GoaTn8SVRGRMPc9UqZVNwo6u5l8Wn0A==",
+ "dependencies": [
+ "@push.rocks/smartdelay",
+ "@push.rocks/smartenv@5.0.13",
+ "@push.rocks/smartjson@5.2.0",
+ "@push.rocks/smartpromise",
+ "@push.rocks/webstore"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@push.rocks/webrequest/-/webrequest-3.0.37.tgz"
+ },
"@push.rocks/webrequest@4.0.5": {
"integrity": "sha512-wVSCaXqJ9Vh+rbwVz0wDl46dYz4rnwwSrm5vbVXKbuH6oKTPF0YRoujeJPqRltIn64RVGdLeY9/6ix+ZCrzhsg==",
"dependencies": [
@@ -1302,7 +2245,7 @@
"integrity": "sha512-iKJDwXdMmQdu5siOIgziPRxM51lN1AU9HOr+yMteu1YMDkZT7HKCyisDAr4gC9WZ9a7FzsG8zgthm4dMeA8NTw==",
"dependencies": [
"@pushrocks/smartdelay",
- "@pushrocks/smartpromise",
+ "@pushrocks/smartpromise@4.0.2",
"@tsclass/tsclass@4.4.4"
],
"tarball": "https://verdaccio.lossless.digital/@push.rocks/websetup/-/websetup-3.0.19.tgz"
@@ -1310,14 +2253,14 @@
"@push.rocks/webstore@2.0.20": {
"integrity": "sha512-Z3L4OHGcw/Gs9aXpMUwebEPTh0nK/C7R6YwPfCLcGVu9yd/ZShaQ8QZEYE243Cu9J1Mn+CEtz4jpPLnHiizHQA==",
"dependencies": [
- "@api.global/typedrequest-interfaces",
+ "@api.global/typedrequest-interfaces@3.0.19",
"@push.rocks/lik",
"@push.rocks/smartenv@5.0.13",
"@push.rocks/smartjson@5.2.0",
"@push.rocks/smartpromise",
"@push.rocks/smartrx",
"@tempfix/idb",
- "fake-indexeddb"
+ "fake-indexeddb@5.0.2"
],
"tarball": "https://verdaccio.lossless.digital/@push.rocks/webstore/-/webstore-2.0.20.tgz"
},
@@ -1328,19 +2271,262 @@
],
"tarball": "https://verdaccio.lossless.digital/@push.rocks/webstream/-/webstream-1.0.10.tgz"
},
+ "@pushrocks/isounique@1.0.5": {
+ "integrity": "sha512-XYeoKGkmIdsWX64NlPA1fuA41n/1bQ7LdYXytlU/QqYeW7ojgA0ARRhBSh/2phL6o0Jpw6K/7gJ8jc7ab/Tc+w==",
+ "deprecated": true,
+ "tarball": "https://verdaccio.lossless.digital/@pushrocks/isounique/-/isounique-1.0.5.tgz"
+ },
"@pushrocks/smartdelay@3.0.1": {
"integrity": "sha512-I+i/QhC6kLsXsWyW19UgD1vH2r1YWVxK19VMxt2CEuvxMyC6tuCd0vqud9vv5JxaxsJwxWlOsrURkgL4tXeILQ==",
"dependencies": [
- "@pushrocks/smartpromise"
+ "@pushrocks/smartpromise@4.0.2"
],
"deprecated": true,
"tarball": "https://verdaccio.lossless.digital/@pushrocks/smartdelay/-/smartdelay-3.0.1.tgz"
},
+ "@pushrocks/smartenv@5.0.5": {
+ "integrity": "sha512-VWON1OJ4qV2/9hzJbgRquRekaO9am3b8W82tgCwgO6LBg23ea2tanfd+gESVMbRFduxHVoFLvlhSBcDGM5zsLA==",
+ "dependencies": [
+ "@pushrocks/smartpromise@3.1.10"
+ ],
+ "deprecated": true,
+ "tarball": "https://verdaccio.lossless.digital/@pushrocks/smartenv/-/smartenv-5.0.5.tgz"
+ },
+ "@pushrocks/smarthash@3.0.2": {
+ "integrity": "sha512-jXW4f8k6iqOQRvkCmXMID1C+qXyNvUMKm7apPETxnO+L172VlzxP1dml0Ey1+vjfpU2luKCteJWX7W95sOdLDg==",
+ "dependencies": [
+ "@pushrocks/smartjson",
+ "@pushrocks/smartpromise@3.1.10",
+ "@types/through2",
+ "through2"
+ ],
+ "deprecated": true,
+ "tarball": "https://verdaccio.lossless.digital/@pushrocks/smarthash/-/smarthash-3.0.2.tgz"
+ },
+ "@pushrocks/smartjson@5.0.6": {
+ "integrity": "sha512-9OJbnRgLTaCRQz+pqu5tB3ZCqRs5Zh0hnBe7t7URE+TgwIZ8aiELUIbWRkgn4mSGVzHyL6pqTyIowP6AjUCG3w==",
+ "dependencies": [
+ "@pushrocks/smartstring",
+ "@types/buffer-json",
+ "buffer-json",
+ "fast-json-stable-stringify",
+ "lodash.clonedeep"
+ ],
+ "deprecated": true,
+ "tarball": "https://verdaccio.lossless.digital/@pushrocks/smartjson/-/smartjson-5.0.6.tgz"
+ },
+ "@pushrocks/smartpromise@3.1.10": {
+ "integrity": "sha512-VeTurbZ1+ZMxBDJk1Y1LV8SN9xLI+oDXKVeCFw41FAGEKOUEqordqFpi6t+7Vhe/TXUZzCVpZ5bXxAxrGf8yTQ==",
+ "deprecated": true,
+ "tarball": "https://verdaccio.lossless.digital/@pushrocks/smartpromise/-/smartpromise-3.1.10.tgz"
+ },
"@pushrocks/smartpromise@4.0.2": {
"integrity": "sha512-bqorOaGXPOuiOSV81luTKrTghg4O4NBRD0zyv7TIqmrMGf4a0uoozaUMp1X8vQdZW+y0gTzUJP9wkzAE6Cci0g==",
"deprecated": true,
"tarball": "https://verdaccio.lossless.digital/@pushrocks/smartpromise/-/smartpromise-4.0.2.tgz"
},
+ "@pushrocks/smartstring@4.0.7": {
+ "integrity": "sha512-TxHSar7Cj29E+GOcIj4DeZKWCNVzHKdqnrBRqcBqLqmeYZvzFosLXpFKoaCJDq7MSxuPoCvu5woSdp9YmPXyog==",
+ "dependencies": [
+ "@pushrocks/isounique",
+ "@pushrocks/smartenv",
+ "@types/randomatic",
+ "buffer",
+ "crypto-random-string",
+ "js-base64",
+ "normalize-newline",
+ "randomatic",
+ "strip-indent",
+ "url"
+ ],
+ "deprecated": true,
+ "tarball": "https://verdaccio.lossless.digital/@pushrocks/smartstring/-/smartstring-4.0.7.tgz"
+ },
+ "@remirror/core-constants@3.0.0": {
+ "integrity": "sha512-42aWfPrimMfDKDi4YegyS7x+/0tlzaqwPQCULLanv3DMIlu96KTJR0fM5isWX2UViOqlGnX6YFgqWepcX+XMNg==",
+ "tarball": "https://verdaccio.lossless.digital/@remirror/core-constants/-/core-constants-3.0.0.tgz"
+ },
+ "@rolldown/binding-android-arm64@1.0.0-beta.52": {
+ "integrity": "sha512-MBGIgysimZPqTDcLXI+i9VveijkP5C3EAncEogXhqfax6YXj1Tr2LY3DVuEOMIjWfMPMhtQSPup4fSTAmgjqIw==",
+ "os": ["android"],
+ "cpu": ["arm64"],
+ "tarball": "https://verdaccio.lossless.digital/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-beta.52.tgz"
+ },
+ "@rolldown/binding-darwin-arm64@1.0.0-beta.52": {
+ "integrity": "sha512-MmKeoLnKu1d9j6r19K8B+prJnIZ7u+zQ+zGQ3YHXGnr41rzE3eqQLovlkvoZnRoxDGPA4ps0pGiwXy6YE3lJyg==",
+ "os": ["darwin"],
+ "cpu": ["arm64"],
+ "tarball": "https://verdaccio.lossless.digital/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-beta.52.tgz"
+ },
+ "@rolldown/binding-darwin-x64@1.0.0-beta.52": {
+ "integrity": "sha512-qpHedvQBmIjT8zdnjN3nWPR2qjQyJttbXniCEKKdHeAbZG9HyNPBUzQF7AZZGwmS9coQKL+hWg9FhWzh2dZ2IA==",
+ "os": ["darwin"],
+ "cpu": ["x64"],
+ "tarball": "https://verdaccio.lossless.digital/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-beta.52.tgz"
+ },
+ "@rolldown/binding-freebsd-x64@1.0.0-beta.52": {
+ "integrity": "sha512-dDp7WbPapj/NVW0LSiH/CLwMhmLwwKb3R7mh2kWX+QW85X1DGVnIEyKh9PmNJjB/+suG1dJygdtdNPVXK1hylg==",
+ "os": ["freebsd"],
+ "cpu": ["x64"],
+ "tarball": "https://verdaccio.lossless.digital/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-beta.52.tgz"
+ },
+ "@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.52": {
+ "integrity": "sha512-9e4l6vy5qNSliDPqNfR6CkBOAx6PH7iDV4OJiEJzajajGrVy8gc/IKKJUsoE52G8ud8MX6r3PMl97NfwgOzB7g==",
+ "os": ["linux"],
+ "cpu": ["arm"],
+ "tarball": "https://verdaccio.lossless.digital/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-beta.52.tgz"
+ },
+ "@rolldown/binding-linux-arm64-gnu@1.0.0-beta.52": {
+ "integrity": "sha512-V48oDR84feRU2KRuzpALp594Uqlx27+zFsT6+BgTcXOtu7dWy350J1G28ydoCwKB+oxwsRPx2e7aeQnmd3YJbQ==",
+ "os": ["linux"],
+ "cpu": ["arm64"],
+ "tarball": "https://verdaccio.lossless.digital/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-beta.52.tgz"
+ },
+ "@rolldown/binding-linux-arm64-musl@1.0.0-beta.52": {
+ "integrity": "sha512-ENLmSQCWqSA/+YN45V2FqTIemg7QspaiTjlm327eUAMeOLdqmSOVVyrQexJGNTQ5M8sDYCgVAig2Kk01Ggmqaw==",
+ "os": ["linux"],
+ "cpu": ["arm64"],
+ "tarball": "https://verdaccio.lossless.digital/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-beta.52.tgz"
+ },
+ "@rolldown/binding-linux-x64-gnu@1.0.0-beta.52": {
+ "integrity": "sha512-klahlb2EIFltSUubn/VLjuc3qxp1E7th8ukayPfdkcKvvYcQ5rJztgx8JsJSuAKVzKtNTqUGOhy4On71BuyV8g==",
+ "os": ["linux"],
+ "cpu": ["x64"],
+ "tarball": "https://verdaccio.lossless.digital/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0-beta.52.tgz"
+ },
+ "@rolldown/binding-linux-x64-musl@1.0.0-beta.52": {
+ "integrity": "sha512-UuA+JqQIgqtkgGN2c/AQ5wi8M6mJHrahz/wciENPTeI6zEIbbLGoth5XN+sQe2pJDejEVofN9aOAp0kaazwnVg==",
+ "os": ["linux"],
+ "cpu": ["x64"],
+ "tarball": "https://verdaccio.lossless.digital/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-beta.52.tgz"
+ },
+ "@rolldown/binding-openharmony-arm64@1.0.0-beta.52": {
+ "integrity": "sha512-1BNQW8u4ro8bsN1+tgKENJiqmvc+WfuaUhXzMImOVSMw28pkBKdfZtX2qJPADV3terx+vNJtlsgSGeb3+W6Jiw==",
+ "os": ["openharmony"],
+ "cpu": ["arm64"],
+ "tarball": "https://verdaccio.lossless.digital/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0-beta.52.tgz"
+ },
+ "@rolldown/binding-wasm32-wasi@1.0.0-beta.52": {
+ "integrity": "sha512-K/p7clhCqJOQpXGykrFaBX2Dp9AUVIDHGc+PtFGBwg7V+mvBTv/tsm3LC3aUmH02H2y3gz4y+nUTQ0MLpofEEg==",
+ "dependencies": [
+ "@napi-rs/wasm-runtime"
+ ],
+ "cpu": ["wasm32"],
+ "tarball": "https://verdaccio.lossless.digital/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-beta.52.tgz"
+ },
+ "@rolldown/binding-win32-arm64-msvc@1.0.0-beta.52": {
+ "integrity": "sha512-a4EkXBtnYYsKipjS7QOhEBM4bU5IlR9N1hU+JcVEVeuTiaslIyhWVKsvf7K2YkQHyVAJ+7/A9BtrGqORFcTgng==",
+ "os": ["win32"],
+ "cpu": ["arm64"],
+ "tarball": "https://verdaccio.lossless.digital/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-beta.52.tgz"
+ },
+ "@rolldown/binding-win32-ia32-msvc@1.0.0-beta.52": {
+ "integrity": "sha512-5ZXcYyd4GxPA6QfbGrNcQjmjbuLGvfz6728pZMsQvGHI+06LT06M6TPtXvFvLgXtexc+OqvFe1yAIXJU1gob/w==",
+ "os": ["win32"],
+ "cpu": ["ia32"],
+ "tarball": "https://verdaccio.lossless.digital/@rolldown/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.0.0-beta.52.tgz"
+ },
+ "@rolldown/binding-win32-x64-msvc@1.0.0-beta.52": {
+ "integrity": "sha512-tzpnRQXJrSzb8Z9sm97UD3cY0toKOImx+xRKsDLX4zHaAlRXWh7jbaKBePJXEN7gNw7Nm03PBNwphdtA8KSUYQ==",
+ "os": ["win32"],
+ "cpu": ["x64"],
+ "tarball": "https://verdaccio.lossless.digital/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-beta.52.tgz"
+ },
+ "@rolldown/pluginutils@1.0.0-beta.52": {
+ "integrity": "sha512-/L0htLJZbaZFL1g9OHOblTxbCYIGefErJjtYOwgl9ZqNx27P3L0SDfjhhHIss32gu5NWgnxuT2a2Hnnv6QGHKA==",
+ "tarball": "https://verdaccio.lossless.digital/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.52.tgz"
+ },
+ "@rspack/binding-darwin-arm64@1.7.9": {
+ "integrity": "sha512-64dgstte0If5czi9bA/cpOe0ryY6wC9AIQRtyJ3DlOF6Tt+y9cKkmUoGu3V+WYaYIZRT7HNk8V7kL8amVjFTYw==",
+ "os": ["darwin"],
+ "cpu": ["arm64"],
+ "tarball": "https://verdaccio.lossless.digital/@rspack/binding-darwin-arm64/-/binding-darwin-arm64-1.7.9.tgz"
+ },
+ "@rspack/binding-darwin-x64@1.7.9": {
+ "integrity": "sha512-2QSLs3w4rLy4UUGVnIlkt6IlIKOzR1e0RPsq2FYQW6s3p9JrwRCtOeHohyh7EJSqF54dtfhe9UZSAwba3LqH1Q==",
+ "os": ["darwin"],
+ "cpu": ["x64"],
+ "tarball": "https://verdaccio.lossless.digital/@rspack/binding-darwin-x64/-/binding-darwin-x64-1.7.9.tgz"
+ },
+ "@rspack/binding-linux-arm64-gnu@1.7.9": {
+ "integrity": "sha512-qhUGI/uVfvLmKWts4QkVHGL8yfUyJkblZs+OFD5Upa2y676EOsbQgWsCwX4xGB6Tv+TOzFP0SLh/UfO8ZfdE+w==",
+ "os": ["linux"],
+ "cpu": ["arm64"],
+ "tarball": "https://verdaccio.lossless.digital/@rspack/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.7.9.tgz"
+ },
+ "@rspack/binding-linux-arm64-musl@1.7.9": {
+ "integrity": "sha512-VjfmR1hgO9n3L6MaE5KG+DXSrrLVqHHOkVcOtS2LMq3bjMTwbBywY7ycymcLnX5KJsol8d3ZGYep6IfSOt3lFA==",
+ "os": ["linux"],
+ "cpu": ["arm64"],
+ "tarball": "https://verdaccio.lossless.digital/@rspack/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.7.9.tgz"
+ },
+ "@rspack/binding-linux-x64-gnu@1.7.9": {
+ "integrity": "sha512-0kldV+3WTs/VYDWzxJ7K40hCW26IHtnk8xPK3whKoo1649rgeXXa0EdsU5P7hG8Ef5SWQjHHHZ/fuHYSO3Y6HA==",
+ "os": ["linux"],
+ "cpu": ["x64"],
+ "tarball": "https://verdaccio.lossless.digital/@rspack/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.7.9.tgz"
+ },
+ "@rspack/binding-linux-x64-musl@1.7.9": {
+ "integrity": "sha512-Gi4872cFtc2d83FKATR6Qcf2VBa/tFCqffI/IwRRl6Hx5FulEBqx+tH7gAuRVF693vrbXNxK+FQ+k4iEsEJxrw==",
+ "os": ["linux"],
+ "cpu": ["x64"],
+ "tarball": "https://verdaccio.lossless.digital/@rspack/binding-linux-x64-musl/-/binding-linux-x64-musl-1.7.9.tgz"
+ },
+ "@rspack/binding-wasm32-wasi@1.7.9": {
+ "integrity": "sha512-5QEzqo6EaolpuZmK6w/mgSueorgGnnzp7dJaAvBj6ECFIg/aLXhXXmWCWbxt7Ws2gKvG5/PgaxDqbUxYL51juA==",
+ "dependencies": [
+ "@napi-rs/wasm-runtime"
+ ],
+ "cpu": ["wasm32"],
+ "tarball": "https://verdaccio.lossless.digital/@rspack/binding-wasm32-wasi/-/binding-wasm32-wasi-1.7.9.tgz"
+ },
+ "@rspack/binding-win32-arm64-msvc@1.7.9": {
+ "integrity": "sha512-MMqvcrIc8aOqTuHjWkjdzilvoZ3Hv07Od0Foogiyq3JMudsS3Wcmh7T1dFerGg19MOJcRUeEkrg2NQOMOQ6xDA==",
+ "os": ["win32"],
+ "cpu": ["arm64"],
+ "tarball": "https://verdaccio.lossless.digital/@rspack/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.7.9.tgz"
+ },
+ "@rspack/binding-win32-ia32-msvc@1.7.9": {
+ "integrity": "sha512-4kYYS+NZ2CuNbKjq40yB/UEyB51o1PHj5wpr+Y943oOJXpEKWU2Q4vkF8VEohPEcnA9cKVotYCnqStme+02suA==",
+ "os": ["win32"],
+ "cpu": ["ia32"],
+ "tarball": "https://verdaccio.lossless.digital/@rspack/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.7.9.tgz"
+ },
+ "@rspack/binding-win32-x64-msvc@1.7.9": {
+ "integrity": "sha512-1g+QyXXvs+838Un/4GaUvJfARDGHMCs15eXDYWBl5m/Skubyng8djWAgr6ag1+cVoJZXCPOvybTItcblWF3gbQ==",
+ "os": ["win32"],
+ "cpu": ["x64"],
+ "tarball": "https://verdaccio.lossless.digital/@rspack/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.7.9.tgz"
+ },
+ "@rspack/binding@1.7.9": {
+ "integrity": "sha512-A56e0NdfNwbOSJoilMkxzaPuVYaKCNn1shuiwWnCIBmhV9ix1n9S1XvquDjkGyv+gCdR1+zfJBOa5DMB7htLHw==",
+ "optionalDependencies": [
+ "@rspack/binding-darwin-arm64",
+ "@rspack/binding-darwin-x64",
+ "@rspack/binding-linux-arm64-gnu",
+ "@rspack/binding-linux-arm64-musl",
+ "@rspack/binding-linux-x64-gnu",
+ "@rspack/binding-linux-x64-musl",
+ "@rspack/binding-wasm32-wasi",
+ "@rspack/binding-win32-arm64-msvc",
+ "@rspack/binding-win32-ia32-msvc",
+ "@rspack/binding-win32-x64-msvc"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@rspack/binding/-/binding-1.7.9.tgz"
+ },
+ "@rspack/core@1.7.9": {
+ "integrity": "sha512-VHuSKvRkuv42Ya+TxEGO0LE0r9+8P4tKGokmomj4R1f/Nu2vtS3yoaIMfC4fR6VuHGd3MZ+KTI0cNNwHfFcskw==",
+ "dependencies": [
+ "@module-federation/runtime-tools",
+ "@rspack/binding",
+ "@rspack/lite-tapable"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@rspack/core/-/core-1.7.9.tgz"
+ },
+ "@rspack/lite-tapable@1.1.0": {
+ "integrity": "sha512-E2B0JhYFmVAwdDiG14+DW0Di4Ze4Jg10Pc4/lILUrd5DRCaklduz2OvJ5HYQ6G+hd+WTzqQb3QnDNfK4yvAFYw==",
+ "tarball": "https://verdaccio.lossless.digital/@rspack/lite-tapable/-/lite-tapable-1.1.0.tgz"
+ },
"@sec-ant/readable-stream@0.4.1": {
"integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==",
"tarball": "https://verdaccio.lossless.digital/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz"
@@ -1846,6 +3032,10 @@
],
"tarball": "https://verdaccio.lossless.digital/@smithy/uuid/-/uuid-1.1.2.tgz"
},
+ "@socket.io/component-emitter@3.1.2": {
+ "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==",
+ "tarball": "https://verdaccio.lossless.digital/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz"
+ },
"@tempfix/idb@8.0.3": {
"integrity": "sha512-hPJQKO7+oAIY+pDNImrZ9QAINbz9KmwT+yO4iRVwdPanok2YKpaUxdJzIvCUwY0YgAawlvYdffbLvRLV5hbs2g==",
"tarball": "https://verdaccio.lossless.digital/@tempfix/idb/-/idb-8.0.3.tgz"
@@ -1854,6 +3044,236 @@
"integrity": "sha512-ypeB0FuHLHOCQXW4d0RQ69txPJJH+1CHcpsZIUdcv2t1vR0IVyQr2vHihtde9UOXhjzqEnUphWon/UcJNsa0YA==",
"tarball": "https://verdaccio.lossless.digital/@tempfix/lenis/-/lenis-1.3.20.tgz"
},
+ "@tempfix/webcontainer__api@1.6.1": {
+ "integrity": "sha512-Hgn3cwy0vPzjrVBqeVnY0jNZLaOCW7d+dxBe7Jv9YGHAjJ8udUMS+KbTywSv5paAfld3A/RN/iolmMzOwZxLTA==",
+ "tarball": "https://verdaccio.lossless.digital/@tempfix/webcontainer__api/-/webcontainer__api-1.6.1.tgz"
+ },
+ "@tiptap/core@2.27.2_@tiptap+pm@2.27.2__prosemirror-model@1.25.4__prosemirror-state@1.4.4__prosemirror-view@1.41.6": {
+ "integrity": "sha512-ABL1N6eoxzDzC1bYvkMbvyexHacszsKdVPYqhl5GwHLOvpZcv9VE9QaKwDILTyz5voCA0lGcAAXZp+qnXOk5lQ==",
+ "dependencies": [
+ "@tiptap/pm"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@tiptap/core/-/core-2.27.2.tgz"
+ },
+ "@tiptap/extension-blockquote@2.27.2_@tiptap+core@2.27.2__@tiptap+pm@2.27.2___prosemirror-model@1.25.4___prosemirror-state@1.4.4___prosemirror-view@1.41.6_@tiptap+pm@2.27.2__prosemirror-model@1.25.4__prosemirror-state@1.4.4__prosemirror-view@1.41.6": {
+ "integrity": "sha512-oIGZgiAeA4tG3YxbTDfrmENL4/CIwGuP3THtHsNhwRqwsl9SfMk58Ucopi2GXTQSdYXpRJ0ahE6nPqB5D6j/Zw==",
+ "dependencies": [
+ "@tiptap/core"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@tiptap/extension-blockquote/-/extension-blockquote-2.27.2.tgz"
+ },
+ "@tiptap/extension-bold@2.27.2_@tiptap+core@2.27.2__@tiptap+pm@2.27.2___prosemirror-model@1.25.4___prosemirror-state@1.4.4___prosemirror-view@1.41.6_@tiptap+pm@2.27.2__prosemirror-model@1.25.4__prosemirror-state@1.4.4__prosemirror-view@1.41.6": {
+ "integrity": "sha512-bR7J5IwjCGQ0s3CIxyMvOCnMFMzIvsc5OVZKscTN5UkXzFsaY6muUAIqtKxayBUucjtUskm5qZowJITCeCb1/A==",
+ "dependencies": [
+ "@tiptap/core"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@tiptap/extension-bold/-/extension-bold-2.27.2.tgz"
+ },
+ "@tiptap/extension-bullet-list@2.27.2_@tiptap+core@2.27.2__@tiptap+pm@2.27.2___prosemirror-model@1.25.4___prosemirror-state@1.4.4___prosemirror-view@1.41.6_@tiptap+pm@2.27.2__prosemirror-model@1.25.4__prosemirror-state@1.4.4__prosemirror-view@1.41.6": {
+ "integrity": "sha512-gmFuKi97u5f8uFc/GQs+zmezjiulZmFiDYTh3trVoLRoc2SAHOjGEB7qxdx7dsqmMN7gwiAWAEVurLKIi1lnnw==",
+ "dependencies": [
+ "@tiptap/core"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@tiptap/extension-bullet-list/-/extension-bullet-list-2.27.2.tgz"
+ },
+ "@tiptap/extension-code-block@2.27.2_@tiptap+core@2.27.2__@tiptap+pm@2.27.2___prosemirror-model@1.25.4___prosemirror-state@1.4.4___prosemirror-view@1.41.6_@tiptap+pm@2.27.2__prosemirror-model@1.25.4__prosemirror-state@1.4.4__prosemirror-view@1.41.6": {
+ "integrity": "sha512-KgvdQHS4jXr79aU3wZOGBIZYYl9vCB7uDEuRFV4so2rYrfmiYMw3T8bTnlNEEGe4RUeAms1i4fdwwvQp9nR1Dw==",
+ "dependencies": [
+ "@tiptap/core",
+ "@tiptap/pm"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@tiptap/extension-code-block/-/extension-code-block-2.27.2.tgz"
+ },
+ "@tiptap/extension-code@2.27.2_@tiptap+core@2.27.2__@tiptap+pm@2.27.2___prosemirror-model@1.25.4___prosemirror-state@1.4.4___prosemirror-view@1.41.6_@tiptap+pm@2.27.2__prosemirror-model@1.25.4__prosemirror-state@1.4.4__prosemirror-view@1.41.6": {
+ "integrity": "sha512-7X9AgwqiIGXoZX7uvdHQsGsjILnN/JaEVtqfXZnPECzKGaWHeK/Ao4sYvIIIffsyZJA8k5DC7ny2/0sAgr2TuA==",
+ "dependencies": [
+ "@tiptap/core"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@tiptap/extension-code/-/extension-code-2.27.2.tgz"
+ },
+ "@tiptap/extension-document@2.27.2_@tiptap+core@2.27.2__@tiptap+pm@2.27.2___prosemirror-model@1.25.4___prosemirror-state@1.4.4___prosemirror-view@1.41.6_@tiptap+pm@2.27.2__prosemirror-model@1.25.4__prosemirror-state@1.4.4__prosemirror-view@1.41.6": {
+ "integrity": "sha512-CFhAYsPnyYnosDC4639sCJnBUnYH4Cat9qH5NZWHVvdgtDwu8GZgZn2eSzaKSYXWH1vJ9DSlCK+7UyC3SNXIBA==",
+ "dependencies": [
+ "@tiptap/core"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@tiptap/extension-document/-/extension-document-2.27.2.tgz"
+ },
+ "@tiptap/extension-dropcursor@2.27.2_@tiptap+core@2.27.2__@tiptap+pm@2.27.2___prosemirror-model@1.25.4___prosemirror-state@1.4.4___prosemirror-view@1.41.6_@tiptap+pm@2.27.2__prosemirror-model@1.25.4__prosemirror-state@1.4.4__prosemirror-view@1.41.6": {
+ "integrity": "sha512-oEu/OrktNoQXq1x29NnH/GOIzQZm8ieTQl3FK27nxfBPA89cNoH4mFEUmBL5/OFIENIjiYG3qWpg6voIqzswNw==",
+ "dependencies": [
+ "@tiptap/core",
+ "@tiptap/pm"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@tiptap/extension-dropcursor/-/extension-dropcursor-2.27.2.tgz"
+ },
+ "@tiptap/extension-gapcursor@2.27.2_@tiptap+core@2.27.2__@tiptap+pm@2.27.2___prosemirror-model@1.25.4___prosemirror-state@1.4.4___prosemirror-view@1.41.6_@tiptap+pm@2.27.2__prosemirror-model@1.25.4__prosemirror-state@1.4.4__prosemirror-view@1.41.6": {
+ "integrity": "sha512-/c9VF1HBxj+AP54XGVgCmD9bEGYc5w5OofYCFQgM7l7PB1J00A4vOke0oPkHJnqnOOyPlFaxO/7N6l3XwFcnKA==",
+ "dependencies": [
+ "@tiptap/core",
+ "@tiptap/pm"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@tiptap/extension-gapcursor/-/extension-gapcursor-2.27.2.tgz"
+ },
+ "@tiptap/extension-hard-break@2.27.2_@tiptap+core@2.27.2__@tiptap+pm@2.27.2___prosemirror-model@1.25.4___prosemirror-state@1.4.4___prosemirror-view@1.41.6_@tiptap+pm@2.27.2__prosemirror-model@1.25.4__prosemirror-state@1.4.4__prosemirror-view@1.41.6": {
+ "integrity": "sha512-kSRVGKlCYK6AGR0h8xRkk0WOFGXHIIndod3GKgWU49APuIGDiXd8sziXsSlniUsWmqgDmDXcNnSzPcV7AQ8YNg==",
+ "dependencies": [
+ "@tiptap/core"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@tiptap/extension-hard-break/-/extension-hard-break-2.27.2.tgz"
+ },
+ "@tiptap/extension-heading@2.27.2_@tiptap+core@2.27.2__@tiptap+pm@2.27.2___prosemirror-model@1.25.4___prosemirror-state@1.4.4___prosemirror-view@1.41.6_@tiptap+pm@2.27.2__prosemirror-model@1.25.4__prosemirror-state@1.4.4__prosemirror-view@1.41.6": {
+ "integrity": "sha512-iM3yeRWuuQR/IRQ1djwNooJGfn9Jts9zF43qZIUf+U2NY8IlvdNsk2wTOdBgh6E0CamrStPxYGuln3ZS4fuglw==",
+ "dependencies": [
+ "@tiptap/core"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@tiptap/extension-heading/-/extension-heading-2.27.2.tgz"
+ },
+ "@tiptap/extension-history@2.27.2_@tiptap+core@2.27.2__@tiptap+pm@2.27.2___prosemirror-model@1.25.4___prosemirror-state@1.4.4___prosemirror-view@1.41.6_@tiptap+pm@2.27.2__prosemirror-model@1.25.4__prosemirror-state@1.4.4__prosemirror-view@1.41.6": {
+ "integrity": "sha512-+hSyqERoFNTWPiZx4/FCyZ/0eFqB9fuMdTB4AC/q9iwu3RNWAQtlsJg5230bf/qmyO6bZxRUc0k8p4hrV6ybAw==",
+ "dependencies": [
+ "@tiptap/core",
+ "@tiptap/pm"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@tiptap/extension-history/-/extension-history-2.27.2.tgz"
+ },
+ "@tiptap/extension-horizontal-rule@2.27.2_@tiptap+core@2.27.2__@tiptap+pm@2.27.2___prosemirror-model@1.25.4___prosemirror-state@1.4.4___prosemirror-view@1.41.6_@tiptap+pm@2.27.2__prosemirror-model@1.25.4__prosemirror-state@1.4.4__prosemirror-view@1.41.6": {
+ "integrity": "sha512-WGWUSgX+jCsbtf9Y9OCUUgRZYuwjVoieW5n6mAUohJ9/6gc6sGIOrUpBShf+HHo6WD+gtQjRd+PssmX3NPWMpg==",
+ "dependencies": [
+ "@tiptap/core",
+ "@tiptap/pm"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@tiptap/extension-horizontal-rule/-/extension-horizontal-rule-2.27.2.tgz"
+ },
+ "@tiptap/extension-italic@2.27.2_@tiptap+core@2.27.2__@tiptap+pm@2.27.2___prosemirror-model@1.25.4___prosemirror-state@1.4.4___prosemirror-view@1.41.6_@tiptap+pm@2.27.2__prosemirror-model@1.25.4__prosemirror-state@1.4.4__prosemirror-view@1.41.6": {
+ "integrity": "sha512-1OFsw2SZqfaqx5Fa5v90iNlPRcqyt+lVSjBwTDzuPxTPFY4Q0mL89mKgkq2gVHYNCiaRkXvFLDxaSvBWbmthgg==",
+ "dependencies": [
+ "@tiptap/core"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@tiptap/extension-italic/-/extension-italic-2.27.2.tgz"
+ },
+ "@tiptap/extension-link@2.27.2_@tiptap+core@2.27.2__@tiptap+pm@2.27.2___prosemirror-model@1.25.4___prosemirror-state@1.4.4___prosemirror-view@1.41.6_@tiptap+pm@2.27.2__prosemirror-model@1.25.4__prosemirror-state@1.4.4__prosemirror-view@1.41.6": {
+ "integrity": "sha512-bnP61qkr0Kj9Cgnop1hxn2zbOCBzNtmawxr92bVTOE31fJv6FhtCnQiD6tuPQVGMYhcmAj7eihtvuEMFfqEPcQ==",
+ "dependencies": [
+ "@tiptap/core",
+ "@tiptap/pm",
+ "linkifyjs"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@tiptap/extension-link/-/extension-link-2.27.2.tgz"
+ },
+ "@tiptap/extension-list-item@2.27.2_@tiptap+core@2.27.2__@tiptap+pm@2.27.2___prosemirror-model@1.25.4___prosemirror-state@1.4.4___prosemirror-view@1.41.6_@tiptap+pm@2.27.2__prosemirror-model@1.25.4__prosemirror-state@1.4.4__prosemirror-view@1.41.6": {
+ "integrity": "sha512-eJNee7IEGXMnmygM5SdMGDC8m/lMWmwNGf9fPCK6xk0NxuQRgmZHL6uApKcdH6gyNcRPHCqvTTkhEP7pbny/fg==",
+ "dependencies": [
+ "@tiptap/core"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@tiptap/extension-list-item/-/extension-list-item-2.27.2.tgz"
+ },
+ "@tiptap/extension-ordered-list@2.27.2_@tiptap+core@2.27.2__@tiptap+pm@2.27.2___prosemirror-model@1.25.4___prosemirror-state@1.4.4___prosemirror-view@1.41.6_@tiptap+pm@2.27.2__prosemirror-model@1.25.4__prosemirror-state@1.4.4__prosemirror-view@1.41.6": {
+ "integrity": "sha512-M7A4tLGJcLPYdLC4CI2Gwl8LOrENQW59u3cMVa+KkwG1hzSJyPsbDpa1DI6oXPC2WtYiTf22zrbq3gVvH+KA2w==",
+ "dependencies": [
+ "@tiptap/core"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@tiptap/extension-ordered-list/-/extension-ordered-list-2.27.2.tgz"
+ },
+ "@tiptap/extension-paragraph@2.27.2_@tiptap+core@2.27.2__@tiptap+pm@2.27.2___prosemirror-model@1.25.4___prosemirror-state@1.4.4___prosemirror-view@1.41.6_@tiptap+pm@2.27.2__prosemirror-model@1.25.4__prosemirror-state@1.4.4__prosemirror-view@1.41.6": {
+ "integrity": "sha512-elYVn2wHJJ+zB9LESENWOAfI4TNT0jqEN34sMA/hCtA4im1ZG2DdLHwkHIshj/c4H0dzQhmsS/YmNC5Vbqab/A==",
+ "dependencies": [
+ "@tiptap/core"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@tiptap/extension-paragraph/-/extension-paragraph-2.27.2.tgz"
+ },
+ "@tiptap/extension-strike@2.27.2_@tiptap+core@2.27.2__@tiptap+pm@2.27.2___prosemirror-model@1.25.4___prosemirror-state@1.4.4___prosemirror-view@1.41.6_@tiptap+pm@2.27.2__prosemirror-model@1.25.4__prosemirror-state@1.4.4__prosemirror-view@1.41.6": {
+ "integrity": "sha512-HHIjhafLhS2lHgfAsCwC1okqMsQzR4/mkGDm4M583Yftyjri1TNA7lzhzXWRFWiiMfJxKtdjHjUAQaHuteRTZw==",
+ "dependencies": [
+ "@tiptap/core"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@tiptap/extension-strike/-/extension-strike-2.27.2.tgz"
+ },
+ "@tiptap/extension-text-align@2.27.2_@tiptap+core@2.27.2__@tiptap+pm@2.27.2___prosemirror-model@1.25.4___prosemirror-state@1.4.4___prosemirror-view@1.41.6": {
+ "integrity": "sha512-0Pyks6Hu+Q/+9+5/osoSv0SP6jIerdWMYbi13aaZLsJoj3lBj5WNaE11JtAwSFN5sx0IbqhDSlp1zkvRnzgZ8g==",
+ "dependencies": [
+ "@tiptap/core"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@tiptap/extension-text-align/-/extension-text-align-2.27.2.tgz"
+ },
+ "@tiptap/extension-text-style@2.27.2_@tiptap+core@2.27.2__@tiptap+pm@2.27.2___prosemirror-model@1.25.4___prosemirror-state@1.4.4___prosemirror-view@1.41.6_@tiptap+pm@2.27.2__prosemirror-model@1.25.4__prosemirror-state@1.4.4__prosemirror-view@1.41.6": {
+ "integrity": "sha512-Omk+uxjJLyEY69KStpCw5fA9asvV+MGcAX2HOxyISDFoLaL49TMrNjhGAuz09P1L1b0KGXo4ml7Q3v/Lfy4WPA==",
+ "dependencies": [
+ "@tiptap/core"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@tiptap/extension-text-style/-/extension-text-style-2.27.2.tgz"
+ },
+ "@tiptap/extension-text@2.27.2_@tiptap+core@2.27.2__@tiptap+pm@2.27.2___prosemirror-model@1.25.4___prosemirror-state@1.4.4___prosemirror-view@1.41.6_@tiptap+pm@2.27.2__prosemirror-model@1.25.4__prosemirror-state@1.4.4__prosemirror-view@1.41.6": {
+ "integrity": "sha512-Xk7nYcigljAY0GO9hAQpZ65ZCxqOqaAlTPDFcKerXmlkQZP/8ndx95OgUb1Xf63kmPOh3xypurGS2is3v0MXSA==",
+ "dependencies": [
+ "@tiptap/core"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@tiptap/extension-text/-/extension-text-2.27.2.tgz"
+ },
+ "@tiptap/extension-typography@2.27.2_@tiptap+core@2.27.2__@tiptap+pm@2.27.2___prosemirror-model@1.25.4___prosemirror-state@1.4.4___prosemirror-view@1.41.6": {
+ "integrity": "sha512-NSyqDa8PlAZoVRfTWQuxueTZ6ftOD72EV7UKVpftf3C+Heme727mvwl1YHMnagOlqVoxBhFOrl9CnSs/q5uayQ==",
+ "dependencies": [
+ "@tiptap/core"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@tiptap/extension-typography/-/extension-typography-2.27.2.tgz"
+ },
+ "@tiptap/extension-underline@2.27.2_@tiptap+core@2.27.2__@tiptap+pm@2.27.2___prosemirror-model@1.25.4___prosemirror-state@1.4.4___prosemirror-view@1.41.6": {
+ "integrity": "sha512-gPOsbAcw1S07ezpAISwoO8f0RxpjcSH7VsHEFDVuXm4ODE32nhvSinvHQjv2icRLOXev+bnA7oIBu7Oy859gWQ==",
+ "dependencies": [
+ "@tiptap/core"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@tiptap/extension-underline/-/extension-underline-2.27.2.tgz"
+ },
+ "@tiptap/pm@2.27.2_prosemirror-model@1.25.4_prosemirror-state@1.4.4_prosemirror-view@1.41.6": {
+ "integrity": "sha512-kaEg7BfiJPDQMKbjVIzEPO3wlcA+pZb2tlcK9gPrdDnEFaec2QTF1sXz2ak2IIb2curvnIrQ4yrfHgLlVA72wA==",
+ "dependencies": [
+ "prosemirror-changeset",
+ "prosemirror-collab",
+ "prosemirror-commands",
+ "prosemirror-dropcursor",
+ "prosemirror-gapcursor",
+ "prosemirror-history",
+ "prosemirror-inputrules",
+ "prosemirror-keymap",
+ "prosemirror-markdown",
+ "prosemirror-menu",
+ "prosemirror-model",
+ "prosemirror-schema-basic",
+ "prosemirror-schema-list",
+ "prosemirror-state",
+ "prosemirror-tables",
+ "prosemirror-trailing-node",
+ "prosemirror-transform",
+ "prosemirror-view"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@tiptap/pm/-/pm-2.27.2.tgz"
+ },
+ "@tiptap/starter-kit@2.27.2_@tiptap+pm@2.27.2__prosemirror-model@1.25.4__prosemirror-state@1.4.4__prosemirror-view@1.41.6_@tiptap+core@2.27.2__@tiptap+pm@2.27.2___prosemirror-model@1.25.4___prosemirror-state@1.4.4___prosemirror-view@1.41.6": {
+ "integrity": "sha512-bb0gJvPoDuyRUQ/iuN52j1//EtWWttw+RXAv1uJxfR0uKf8X7uAqzaOOgwjknoCIDC97+1YHwpGdnRjpDkOBxw==",
+ "dependencies": [
+ "@tiptap/core",
+ "@tiptap/extension-blockquote",
+ "@tiptap/extension-bold",
+ "@tiptap/extension-bullet-list",
+ "@tiptap/extension-code",
+ "@tiptap/extension-code-block",
+ "@tiptap/extension-document",
+ "@tiptap/extension-dropcursor",
+ "@tiptap/extension-gapcursor",
+ "@tiptap/extension-hard-break",
+ "@tiptap/extension-heading",
+ "@tiptap/extension-history",
+ "@tiptap/extension-horizontal-rule",
+ "@tiptap/extension-italic",
+ "@tiptap/extension-list-item",
+ "@tiptap/extension-ordered-list",
+ "@tiptap/extension-paragraph",
+ "@tiptap/extension-strike",
+ "@tiptap/extension-text",
+ "@tiptap/extension-text-style",
+ "@tiptap/pm"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@tiptap/starter-kit/-/starter-kit-2.27.2.tgz"
+ },
"@tokenizer/token@0.3.0": {
"integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==",
"tarball": "https://verdaccio.lossless.digital/@tokenizer/token/-/token-0.3.0.tgz"
@@ -1872,6 +3292,47 @@
],
"tarball": "https://verdaccio.lossless.digital/@tsclass/tsclass/-/tsclass-9.5.0.tgz"
},
+ "@tybys/wasm-util@0.10.1": {
+ "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==",
+ "dependencies": [
+ "tslib"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@tybys/wasm-util/-/wasm-util-0.10.1.tgz"
+ },
+ "@types/body-parser@1.19.6": {
+ "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==",
+ "dependencies": [
+ "@types/connect",
+ "@types/node@24.2.0"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@types/body-parser/-/body-parser-1.19.6.tgz"
+ },
+ "@types/buffer-json@2.0.3": {
+ "integrity": "sha512-ItD4UfF3Q5jA+PEV6ZUWEHvlWaXJbd0rpuBKOIrEebM053FHaJddKsgUf0vy7nLSTs44nqFj3Mh8J3TiT0xv4g==",
+ "tarball": "https://verdaccio.lossless.digital/@types/buffer-json/-/buffer-json-2.0.3.tgz"
+ },
+ "@types/clean-css@4.2.11": {
+ "integrity": "sha512-Y8n81lQVTAfP2TOdtJJEsCoYl1AnOkqDqMvXb9/7pfgZZ7r8YrEyurrAvAoAjHOGXKRybay+5CsExqIH6liccw==",
+ "dependencies": [
+ "@types/node@24.2.0",
+ "source-map"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@types/clean-css/-/clean-css-4.2.11.tgz"
+ },
+ "@types/connect@3.4.38": {
+ "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==",
+ "dependencies": [
+ "@types/node@24.2.0"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@types/connect/-/connect-3.4.38.tgz"
+ },
+ "@types/cors@2.8.19": {
+ "integrity": "sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg==",
+ "dependencies": [
+ "@types/node@24.2.0"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@types/cors/-/cors-2.8.19.tgz"
+ },
"@types/debug@4.1.13": {
"integrity": "sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==",
"dependencies": [
@@ -1879,11 +3340,30 @@
],
"tarball": "https://verdaccio.lossless.digital/@types/debug/-/debug-4.1.13.tgz"
},
+ "@types/express-serve-static-core@5.1.1": {
+ "integrity": "sha512-v4zIMr/cX7/d2BpAEX3KNKL/JrT1s43s96lLvvdTmza1oEvDudCqK9aF/djc/SWgy8Yh0h30TZx5VpzqFCxk5A==",
+ "dependencies": [
+ "@types/node@24.2.0",
+ "@types/qs",
+ "@types/range-parser",
+ "@types/send"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@types/express-serve-static-core/-/express-serve-static-core-5.1.1.tgz"
+ },
+ "@types/express@5.0.6": {
+ "integrity": "sha512-sKYVuV7Sv9fbPIt/442koC7+IIwK5olP1KWeD88e/idgoJqDm3JV/YUiPwkoKK92ylff2MGxSz1CSjsXelx0YA==",
+ "dependencies": [
+ "@types/body-parser",
+ "@types/express-serve-static-core",
+ "@types/serve-static"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@types/express/-/express-5.0.6.tgz"
+ },
"@types/fs-extra@11.0.4": {
"integrity": "sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==",
"dependencies": [
"@types/jsonfile",
- "@types/node"
+ "@types/node@24.2.0"
],
"tarball": "https://verdaccio.lossless.digital/@types/fs-extra/-/fs-extra-11.0.4.tgz"
},
@@ -1894,6 +3374,19 @@
],
"tarball": "https://verdaccio.lossless.digital/@types/hast/-/hast-3.0.4.tgz"
},
+ "@types/html-minifier@4.0.6": {
+ "integrity": "sha512-1Dcf38DkVMYo8SIOkUka7GxI+0BztCVsnfiG2Sxb6G8ShHDQTWQb1WKps/eb3O074HNDCn8wU7LMl5N99nNG+Q==",
+ "dependencies": [
+ "@types/clean-css",
+ "@types/relateurl",
+ "@types/uglify-js"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@types/html-minifier/-/html-minifier-4.0.6.tgz"
+ },
+ "@types/http-errors@2.0.5": {
+ "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==",
+ "tarball": "https://verdaccio.lossless.digital/@types/http-errors/-/http-errors-2.0.5.tgz"
+ },
"@types/js-yaml@3.12.10": {
"integrity": "sha512-/Mtaq/wf+HxXpvhzFYzrzCqNRcA958sW++7JOFC8nPrZcvfi/TrzOaaGbvt27ltJB2NQbHVAg5a1wUCsyMH7NA==",
"tarball": "https://verdaccio.lossless.digital/@types/js-yaml/-/js-yaml-3.12.10.tgz"
@@ -1905,7 +3398,7 @@
"@types/jsonfile@6.1.4": {
"integrity": "sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==",
"dependencies": [
- "@types/node"
+ "@types/node@24.2.0"
],
"tarball": "https://verdaccio.lossless.digital/@types/jsonfile/-/jsonfile-6.1.4.tgz"
},
@@ -1913,10 +3406,22 @@
"integrity": "sha512-asx5hIG9Qmf/1oStypjanR7iKTv0gXQ1Ov/jfrX6kS/EO0OFni8orbmGCn0672NHR3kXHwpAwR+B368ZGN/2rA==",
"dependencies": [
"@types/ms",
- "@types/node"
+ "@types/node@24.2.0"
],
"tarball": "https://verdaccio.lossless.digital/@types/jsonwebtoken/-/jsonwebtoken-9.0.10.tgz"
},
+ "@types/linkify-it@5.0.0": {
+ "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==",
+ "tarball": "https://verdaccio.lossless.digital/@types/linkify-it/-/linkify-it-5.0.0.tgz"
+ },
+ "@types/markdown-it@14.1.2": {
+ "integrity": "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==",
+ "dependencies": [
+ "@types/linkify-it",
+ "@types/mdurl"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@types/markdown-it/-/markdown-it-14.1.2.tgz"
+ },
"@types/mdast@4.0.4": {
"integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==",
"dependencies": [
@@ -1924,6 +3429,10 @@
],
"tarball": "https://verdaccio.lossless.digital/@types/mdast/-/mdast-4.0.4.tgz"
},
+ "@types/mdurl@2.0.0": {
+ "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==",
+ "tarball": "https://verdaccio.lossless.digital/@types/mdurl/-/mdurl-2.0.0.tgz"
+ },
"@types/mime-types@2.1.4": {
"integrity": "sha512-lfU4b34HOri+kAY5UheuFMWPDOI+OPceBSHZKp69gEyTL/mmJ4cnU6Y/rlme3UL3GyOn6Y42hyIEw0/q8sWx5w==",
"tarball": "https://verdaccio.lossless.digital/@types/mime-types/-/mime-types-2.1.4.tgz"
@@ -1936,20 +3445,65 @@
"integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==",
"tarball": "https://verdaccio.lossless.digital/@types/ms/-/ms-2.1.0.tgz"
},
+ "@types/mute-stream@0.0.4": {
+ "integrity": "sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==",
+ "dependencies": [
+ "@types/node@24.2.0"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@types/mute-stream/-/mute-stream-0.0.4.tgz"
+ },
"@types/node-forge@1.3.14": {
"integrity": "sha512-mhVF2BnD4BO+jtOp7z1CdzaK4mbuK0LLQYAvdOLqHTavxFNq4zA1EmYkpnFjP8HOUzedfQkRnp0E2ulSAYSzAw==",
"dependencies": [
- "@types/node"
+ "@types/node@24.2.0"
],
"tarball": "https://verdaccio.lossless.digital/@types/node-forge/-/node-forge-1.3.14.tgz"
},
+ "@types/node@22.19.15": {
+ "integrity": "sha512-F0R/h2+dsy5wJAUe3tAU6oqa2qbWY5TpNfL/RGmo1y38hiyO1w3x2jPtt76wmuaJI4DQnOBu21cNXQ2STIUUWg==",
+ "dependencies": [
+ "undici-types@6.21.0"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@types/node/-/node-22.19.15.tgz"
+ },
"@types/node@24.2.0": {
"integrity": "sha512-3xyG3pMCq3oYCNg7/ZP+E1ooTaGB4cG8JWRsqqOYQdbWNY4zbaV0Ennrd7stjiJEFZCaybcIgpTjJWHRfBSIDw==",
"dependencies": [
- "undici-types"
+ "undici-types@7.10.0"
],
"tarball": "https://verdaccio.lossless.digital/@types/node/-/node-24.2.0.tgz"
},
+ "@types/qs@6.15.0": {
+ "integrity": "sha512-JawvT8iBVWpzTrz3EGw9BTQFg3BQNmwERdKE22vlTxawwtbyUSlMppvZYKLZzB5zgACXdXxbD3m1bXaMqP/9ow==",
+ "tarball": "https://verdaccio.lossless.digital/@types/qs/-/qs-6.15.0.tgz"
+ },
+ "@types/randomatic@3.1.5": {
+ "integrity": "sha512-VCwCTw6qh1pRRw+5rNTAwqPmf6A+hdrkdM7dBpZVmhl7g+em3ONXlYK/bWPVKqVGMWgP0d1bog8Vc/X6zRwRRQ==",
+ "tarball": "https://verdaccio.lossless.digital/@types/randomatic/-/randomatic-3.1.5.tgz"
+ },
+ "@types/range-parser@1.2.7": {
+ "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==",
+ "tarball": "https://verdaccio.lossless.digital/@types/range-parser/-/range-parser-1.2.7.tgz"
+ },
+ "@types/relateurl@0.2.33": {
+ "integrity": "sha512-bTQCKsVbIdzLqZhLkF5fcJQreE4y1ro4DIyVrlDNSCJRRwHhB8Z+4zXXa8jN6eDvc2HbRsEYgbvrnGvi54EpSw==",
+ "tarball": "https://verdaccio.lossless.digital/@types/relateurl/-/relateurl-0.2.33.tgz"
+ },
+ "@types/send@1.2.1": {
+ "integrity": "sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==",
+ "dependencies": [
+ "@types/node@24.2.0"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@types/send/-/send-1.2.1.tgz"
+ },
+ "@types/serve-static@2.2.0": {
+ "integrity": "sha512-8mam4H1NHLtu7nmtalF7eyBH14QyOASmcxHhSfEoRyr0nP/YdoesEtU+uSRvMe96TW/HPTtkoKqQLl53N7UXMQ==",
+ "dependencies": [
+ "@types/http-errors",
+ "@types/node@24.2.0"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@types/serve-static/-/serve-static-2.2.0.tgz"
+ },
"@types/symbol-tree@3.2.5": {
"integrity": "sha512-zXnnyENt1TYQcS21MkPaJCVjfcPq7p7yc5mo5JACuumXp6sly5jnlS0IokHd+xmmuCbx6V7JqkMBpswR+nZAcw==",
"tarball": "https://verdaccio.lossless.digital/@types/symbol-tree/-/symbol-tree-3.2.5.tgz"
@@ -1957,7 +3511,7 @@
"@types/through2@2.0.41": {
"integrity": "sha512-ryQ0tidWkb1O1JuYvWKyMLYEtOWDqF5mHerJzKz/gQpoAaJq2l/dsMPBF0B5BNVT34rbARYJ5/tsZwLfUi2kwQ==",
"dependencies": [
- "@types/node"
+ "@types/node@24.2.0"
],
"tarball": "https://verdaccio.lossless.digital/@types/through2/-/through2-2.0.41.tgz"
},
@@ -1969,6 +3523,13 @@
"integrity": "sha512-ru00MoyeeouE5BX4gRL+6m/BsDfbRayOskWqUvh7CLGW+UXxHQItqALa38kKnOiZPqJrtzJUgAC2+F0rL1S4Pg==",
"tarball": "https://verdaccio.lossless.digital/@types/turndown/-/turndown-5.0.6.tgz"
},
+ "@types/uglify-js@3.17.5": {
+ "integrity": "sha512-TU+fZFBTBcXj/GpDpDaBmgWk/gn96kMZ+uocaFUlV2f8a6WdMzzI44QBCmGcCiYR0Y6ZlNRiyUyKKt5nl/lbzQ==",
+ "dependencies": [
+ "source-map"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/@types/uglify-js/-/uglify-js-3.17.5.tgz"
+ },
"@types/unist@3.0.3": {
"integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==",
"tarball": "https://verdaccio.lossless.digital/@types/unist/-/unist-3.0.3.tgz"
@@ -1999,10 +3560,30 @@
"integrity": "sha512-liyfuo/106JdlgSchJzXEQCVArk0CvevqPote8F8HgWgJ3dRCcTHgJIsLDuee0kxk/mhbInzIZk3QWSZJ8R+2w==",
"tarball": "https://verdaccio.lossless.digital/@types/which/-/which-3.0.4.tgz"
},
+ "@types/wrap-ansi@3.0.0": {
+ "integrity": "sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==",
+ "tarball": "https://verdaccio.lossless.digital/@types/wrap-ansi/-/wrap-ansi-3.0.0.tgz"
+ },
"@ungap/structured-clone@1.3.0": {
"integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==",
"tarball": "https://verdaccio.lossless.digital/@ungap/structured-clone/-/structured-clone-1.3.0.tgz"
},
+ "accepts@1.3.8": {
+ "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
+ "dependencies": [
+ "mime-types@2.1.35",
+ "negotiator@0.6.3"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/accepts/-/accepts-1.3.8.tgz"
+ },
+ "accepts@2.0.0": {
+ "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==",
+ "dependencies": [
+ "mime-types@3.0.2",
+ "negotiator@1.0.0"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/accepts/-/accepts-2.0.0.tgz"
+ },
"adm-zip@0.5.16": {
"integrity": "sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==",
"tarball": "https://verdaccio.lossless.digital/adm-zip/-/adm-zip-0.5.16.tgz"
@@ -2022,6 +3603,13 @@
"integrity": "910de50efcc7c09e3d82f2f87abd6b700c18818a",
"tarball": "https://verdaccio.lossless.digital/ansi-256-colors/-/ansi-256-colors-1.1.0.tgz"
},
+ "ansi-escapes@4.3.2": {
+ "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
+ "dependencies": [
+ "type-fest@0.21.3"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/ansi-escapes/-/ansi-escapes-4.3.2.tgz"
+ },
"ansi-regex@5.0.1": {
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
"tarball": "https://verdaccio.lossless.digital/ansi-regex/-/ansi-regex-5.0.1.tgz"
@@ -2033,6 +3621,10 @@
],
"tarball": "https://verdaccio.lossless.digital/ansi-styles/-/ansi-styles-4.3.0.tgz"
},
+ "apexcharts@5.10.4": {
+ "integrity": "sha512-gt0VUqZ2+mr25ScbUcKZgJr96jKYm4vjOcxEWCEh/E5F4dWqhyo3dBhPRvNNnkKiWxkMd2cBwj3ZYH3rK39fkA==",
+ "tarball": "https://verdaccio.lossless.digital/apexcharts/-/apexcharts-5.10.4.tgz"
+ },
"argparse@1.0.10": {
"integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
"dependencies": [
@@ -2116,10 +3708,41 @@
],
"tarball": "https://verdaccio.lossless.digital/bare-url/-/bare-url-2.4.0.tgz"
},
+ "base64-js@1.5.1": {
+ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
+ "tarball": "https://verdaccio.lossless.digital/base64-js/-/base64-js-1.5.1.tgz"
+ },
+ "base64id@2.0.0": {
+ "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==",
+ "tarball": "https://verdaccio.lossless.digital/base64id/-/base64id-2.0.0.tgz"
+ },
+ "body-parser@2.2.2": {
+ "integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==",
+ "dependencies": [
+ "bytes",
+ "content-type",
+ "debug@4.4.3",
+ "http-errors",
+ "iconv-lite@0.7.2",
+ "on-finished",
+ "qs",
+ "raw-body",
+ "type-is"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/body-parser/-/body-parser-2.2.2.tgz"
+ },
"bowser@2.14.1": {
"integrity": "sha512-tzPjzCxygAKWFOJP011oxFHs57HzIhOEracIgAePE4pqB3LikALKnSzUyU4MGs9/iCEUuHlAJTjTc5M+u7YEGg==",
"tarball": "https://verdaccio.lossless.digital/bowser/-/bowser-2.14.1.tgz"
},
+ "brace-expansion@1.1.12": {
+ "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
+ "dependencies": [
+ "balanced-match@1.0.2",
+ "concat-map"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/brace-expansion/-/brace-expansion-1.1.12.tgz"
+ },
"brace-expansion@2.0.2": {
"integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
"dependencies": [
@@ -2160,6 +3783,22 @@
"integrity": "f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819",
"tarball": "https://verdaccio.lossless.digital/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz"
},
+ "buffer-json@2.0.0": {
+ "integrity": "sha512-+jjPFVqyfF1esi9fvfUs3NqM0pH1ziZ36VP4hmA/y/Ssfo/5w5xHKfTw9BwQjoJ1w/oVtpLomqwUHKdefGyuHw==",
+ "tarball": "https://verdaccio.lossless.digital/buffer-json/-/buffer-json-2.0.0.tgz"
+ },
+ "buffer@6.0.3": {
+ "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
+ "dependencies": [
+ "base64-js",
+ "ieee754"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/buffer/-/buffer-6.0.3.tgz"
+ },
+ "bytes@3.1.2": {
+ "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
+ "tarball": "https://verdaccio.lossless.digital/bytes/-/bytes-3.1.2.tgz"
+ },
"call-bind-apply-helpers@1.0.2": {
"integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
"dependencies": [
@@ -2178,6 +3817,26 @@
],
"tarball": "https://verdaccio.lossless.digital/call-bind/-/call-bind-1.0.8.tgz"
},
+ "call-bound@1.0.4": {
+ "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
+ "dependencies": [
+ "call-bind-apply-helpers",
+ "get-intrinsic"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/call-bound/-/call-bound-1.0.4.tgz"
+ },
+ "callsites@3.1.0": {
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "tarball": "https://verdaccio.lossless.digital/callsites/-/callsites-3.1.0.tgz"
+ },
+ "camel-case@3.0.0": {
+ "integrity": "ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73",
+ "dependencies": [
+ "no-case",
+ "upper-case"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/camel-case/-/camel-case-3.0.0.tgz"
+ },
"camelcase@6.3.0": {
"integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
"tarball": "https://verdaccio.lossless.digital/camelcase/-/camelcase-6.3.0.tgz"
@@ -2186,14 +3845,6 @@
"integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==",
"tarball": "https://verdaccio.lossless.digital/ccount/-/ccount-2.0.1.tgz"
},
- "chalk@4.1.2": {
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dependencies": [
- "ansi-styles",
- "supports-color@7.2.0"
- ],
- "tarball": "https://verdaccio.lossless.digital/chalk/-/chalk-4.1.2.tgz"
- },
"character-entities-html4@2.1.0": {
"integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==",
"tarball": "https://verdaccio.lossless.digital/character-entities-html4/-/character-entities-html4-2.1.0.tgz"
@@ -2206,14 +3857,31 @@
"integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==",
"tarball": "https://verdaccio.lossless.digital/character-entities/-/character-entities-2.0.2.tgz"
},
- "cliui@8.0.1": {
- "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
+ "chardet@0.7.0": {
+ "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==",
+ "tarball": "https://verdaccio.lossless.digital/chardet/-/chardet-0.7.0.tgz"
+ },
+ "chokidar@5.0.0": {
+ "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==",
"dependencies": [
- "string-width",
- "strip-ansi",
- "wrap-ansi"
+ "readdirp"
],
- "tarball": "https://verdaccio.lossless.digital/cliui/-/cliui-8.0.1.tgz"
+ "tarball": "https://verdaccio.lossless.digital/chokidar/-/chokidar-5.0.0.tgz"
+ },
+ "clean-css@4.2.4": {
+ "integrity": "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==",
+ "dependencies": [
+ "source-map"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/clean-css/-/clean-css-4.2.4.tgz"
+ },
+ "clean-stack@1.3.0": {
+ "integrity": "9e821501ae979986c46b1d66d2d432db2fd4ae31",
+ "tarball": "https://verdaccio.lossless.digital/clean-stack/-/clean-stack-1.3.0.tgz"
+ },
+ "cli-width@4.1.0": {
+ "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==",
+ "tarball": "https://verdaccio.lossless.digital/cli-width/-/cli-width-4.1.0.tgz"
},
"color-convert@2.0.1": {
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
@@ -2237,22 +3905,45 @@
"integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==",
"tarball": "https://verdaccio.lossless.digital/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz"
},
+ "commander@2.20.3": {
+ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
+ "tarball": "https://verdaccio.lossless.digital/commander/-/commander-2.20.3.tgz"
+ },
"commondir@1.0.1": {
"integrity": "ddd800da0c66127393cca5950ea968a3aaf1253b",
"tarball": "https://verdaccio.lossless.digital/commondir/-/commondir-1.0.1.tgz"
},
- "concurrently@9.2.1": {
- "integrity": "sha512-fsfrO0MxV64Znoy8/l1vVIjjHa29SZyyqPgQBwhiDcaW8wJc2W3XWVOGx4M3oJBnv/zdUZIIp1gDeS98GzP8Ng==",
+ "concat-map@0.0.1": {
+ "integrity": "d8a96bd77fd68df7793a73036a3ba0d5405d477b",
+ "tarball": "https://verdaccio.lossless.digital/concat-map/-/concat-map-0.0.1.tgz"
+ },
+ "content-disposition@1.0.1": {
+ "integrity": "sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==",
+ "tarball": "https://verdaccio.lossless.digital/content-disposition/-/content-disposition-1.0.1.tgz"
+ },
+ "content-type@1.0.5": {
+ "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
+ "tarball": "https://verdaccio.lossless.digital/content-type/-/content-type-1.0.5.tgz"
+ },
+ "cookie-signature@1.2.2": {
+ "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==",
+ "tarball": "https://verdaccio.lossless.digital/cookie-signature/-/cookie-signature-1.2.2.tgz"
+ },
+ "cookie@0.7.2": {
+ "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==",
+ "tarball": "https://verdaccio.lossless.digital/cookie/-/cookie-0.7.2.tgz"
+ },
+ "cors@2.8.6": {
+ "integrity": "sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==",
"dependencies": [
- "chalk",
- "rxjs",
- "shell-quote",
- "supports-color@8.1.1",
- "tree-kill",
- "yargs"
+ "object-assign",
+ "vary"
],
- "bin": true,
- "tarball": "https://verdaccio.lossless.digital/concurrently/-/concurrently-9.2.1.tgz"
+ "tarball": "https://verdaccio.lossless.digital/cors/-/cors-2.8.6.tgz"
+ },
+ "crelt@1.0.6": {
+ "integrity": "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==",
+ "tarball": "https://verdaccio.lossless.digital/crelt/-/crelt-1.0.6.tgz"
},
"croner@10.0.1": {
"integrity": "sha512-ixNtAJndqh173VQ4KodSdJEI6nuioBWI0V1ITNKhZZsO0pEMoDxz539T4FTTbSZ/xIOSuDnzxLVRqBVSvPNE2g==",
@@ -2267,6 +3958,13 @@
],
"tarball": "https://verdaccio.lossless.digital/cross-spawn/-/cross-spawn-7.0.6.tgz"
},
+ "crypto-random-string@5.0.0": {
+ "integrity": "sha512-KWjTXWwxFd6a94m5CdRGW/t82Tr8DoBc9dNnPCAbFI1EBweN6v1tv8y4Y1m7ndkp/nkIBRxUxAzpaBnR2k3bcQ==",
+ "dependencies": [
+ "type-fest@2.19.0"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/crypto-random-string/-/crypto-random-string-5.0.0.tgz"
+ },
"date-fns@4.1.0": {
"integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==",
"tarball": "https://verdaccio.lossless.digital/date-fns/-/date-fns-4.1.0.tgz"
@@ -2275,6 +3973,13 @@
"integrity": "sha512-YbwwqR/uYpeoP4pu043q+LTDLFBLApUP6VxRihdfNTqu4ubqMlGDLd6ErXhEgsyvY0K6nCs7nggYumAN+9uEuQ==",
"tarball": "https://verdaccio.lossless.digital/dayjs/-/dayjs-1.11.20.tgz"
},
+ "debug@4.3.7": {
+ "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
+ "dependencies": [
+ "ms"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/debug/-/debug-4.3.7.tgz"
+ },
"debug@4.4.3": {
"integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
"dependencies": [
@@ -2298,6 +4003,10 @@
],
"tarball": "https://verdaccio.lossless.digital/define-data-property/-/define-data-property-1.1.4.tgz"
},
+ "define-lazy-prop@2.0.0": {
+ "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==",
+ "tarball": "https://verdaccio.lossless.digital/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz"
+ },
"define-properties@1.2.1": {
"integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
"dependencies": [
@@ -2311,6 +4020,10 @@
"integrity": "df3ae199acadfb7d440aaae0b29e2272b24ec619",
"tarball": "https://verdaccio.lossless.digital/delayed-stream/-/delayed-stream-1.0.0.tgz"
},
+ "depd@2.0.0": {
+ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
+ "tarball": "https://verdaccio.lossless.digital/depd/-/depd-2.0.0.tgz"
+ },
"dequal@2.0.3": {
"integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
"tarball": "https://verdaccio.lossless.digital/dequal/-/dequal-2.0.3.tgz"
@@ -2322,6 +4035,13 @@
],
"tarball": "https://verdaccio.lossless.digital/devlop/-/devlop-1.1.0.tgz"
},
+ "dompurify@3.2.7": {
+ "integrity": "sha512-WhL/YuveyGXJaerVlMYGWhvQswa7myDG17P7Vu65EWC05o8vfeNbvNf4d/BOvH99+ZW+LlQsc1GDKMa1vNK6dw==",
+ "optionalDependencies": [
+ "@types/trusted-types"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/dompurify/-/dompurify-3.2.7.tgz"
+ },
"dunder-proto@1.0.1": {
"integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
"dependencies": [
@@ -2338,10 +4058,52 @@
],
"tarball": "https://verdaccio.lossless.digital/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz"
},
+ "ee-first@1.1.1": {
+ "integrity": "590c61156b0ae2f4f0255732a158b266bc56b21d",
+ "tarball": "https://verdaccio.lossless.digital/ee-first/-/ee-first-1.1.1.tgz"
+ },
"emoji-regex@8.0.0": {
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
"tarball": "https://verdaccio.lossless.digital/emoji-regex/-/emoji-regex-8.0.0.tgz"
},
+ "encodeurl@2.0.0": {
+ "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",
+ "tarball": "https://verdaccio.lossless.digital/encodeurl/-/encodeurl-2.0.0.tgz"
+ },
+ "engine.io-client@6.6.4": {
+ "integrity": "sha512-+kjUJnZGwzewFDw951CDWcwj35vMNf2fcj7xQWOctq1F2i1jkDdVvdFG9kM/BEChymCH36KgjnW0NsL58JYRxw==",
+ "dependencies": [
+ "@socket.io/component-emitter",
+ "debug@4.4.3",
+ "engine.io-parser",
+ "ws@8.18.3",
+ "xmlhttprequest-ssl"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/engine.io-client/-/engine.io-client-6.6.4.tgz"
+ },
+ "engine.io-parser@5.2.3": {
+ "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==",
+ "tarball": "https://verdaccio.lossless.digital/engine.io-parser/-/engine.io-parser-5.2.3.tgz"
+ },
+ "engine.io@6.6.4": {
+ "integrity": "sha512-ZCkIjSYNDyGn0R6ewHDtXgns/Zre/NT6Agvq1/WobF7JXgFff4SeDroKiCO3fNJreU9YG429Sc81o4w5ok/W5g==",
+ "dependencies": [
+ "@types/cors",
+ "@types/node@24.2.0",
+ "accepts@1.3.8",
+ "base64id",
+ "cookie",
+ "cors",
+ "debug@4.3.7",
+ "engine.io-parser",
+ "ws@8.17.1"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/engine.io/-/engine.io-6.6.4.tgz"
+ },
+ "entities@4.5.0": {
+ "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+ "tarball": "https://verdaccio.lossless.digital/entities/-/entities-4.5.0.tgz"
+ },
"es-define-property@1.0.1": {
"integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
"tarball": "https://verdaccio.lossless.digital/es-define-property/-/es-define-property-1.0.1.tgz"
@@ -2367,19 +4129,65 @@
],
"tarball": "https://verdaccio.lossless.digital/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz"
},
- "escalade@3.2.0": {
- "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
- "tarball": "https://verdaccio.lossless.digital/escalade/-/escalade-3.2.0.tgz"
+ "esbuild@0.27.4": {
+ "integrity": "sha512-Rq4vbHnYkK5fws5NF7MYTU68FPRE1ajX7heQ/8QXXWqNgqqJ/GkmmyxIzUnf2Sr/bakf8l54716CcMGHYhMrrQ==",
+ "optionalDependencies": [
+ "@esbuild/aix-ppc64",
+ "@esbuild/android-arm",
+ "@esbuild/android-arm64",
+ "@esbuild/android-x64",
+ "@esbuild/darwin-arm64",
+ "@esbuild/darwin-x64",
+ "@esbuild/freebsd-arm64",
+ "@esbuild/freebsd-x64",
+ "@esbuild/linux-arm",
+ "@esbuild/linux-arm64",
+ "@esbuild/linux-ia32",
+ "@esbuild/linux-loong64",
+ "@esbuild/linux-mips64el",
+ "@esbuild/linux-ppc64",
+ "@esbuild/linux-riscv64",
+ "@esbuild/linux-s390x",
+ "@esbuild/linux-x64",
+ "@esbuild/netbsd-arm64",
+ "@esbuild/netbsd-x64",
+ "@esbuild/openbsd-arm64",
+ "@esbuild/openbsd-x64",
+ "@esbuild/openharmony-arm64",
+ "@esbuild/sunos-x64",
+ "@esbuild/win32-arm64",
+ "@esbuild/win32-ia32",
+ "@esbuild/win32-x64"
+ ],
+ "scripts": true,
+ "bin": true,
+ "tarball": "https://verdaccio.lossless.digital/esbuild/-/esbuild-0.27.4.tgz"
+ },
+ "escape-html@1.0.3": {
+ "integrity": "0258eae4d3d0c0974de1c169188ef0051d1d1988",
+ "tarball": "https://verdaccio.lossless.digital/escape-html/-/escape-html-1.0.3.tgz"
+ },
+ "escape-string-regexp@4.0.0": {
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "tarball": "https://verdaccio.lossless.digital/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz"
},
"escape-string-regexp@5.0.0": {
"integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==",
"tarball": "https://verdaccio.lossless.digital/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz"
},
+ "esm@3.2.25": {
+ "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==",
+ "tarball": "https://verdaccio.lossless.digital/esm/-/esm-3.2.25.tgz"
+ },
"esprima@4.0.1": {
"integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
"bin": true,
"tarball": "https://verdaccio.lossless.digital/esprima/-/esprima-4.0.1.tgz"
},
+ "etag@1.8.1": {
+ "integrity": "41ae2eeb65efa62268aebfea83ac7d79299b0887",
+ "tarball": "https://verdaccio.lossless.digital/etag/-/etag-1.8.1.tgz"
+ },
"eventemitter3@4.0.7": {
"integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==",
"tarball": "https://verdaccio.lossless.digital/eventemitter3/-/eventemitter3-4.0.7.tgz"
@@ -2391,14 +4199,68 @@
],
"tarball": "https://verdaccio.lossless.digital/events-universal/-/events-universal-1.0.1.tgz"
},
+ "express-force-ssl@0.3.2": {
+ "integrity": "01b2b498ae6fd2e41152b22b57a3e173773af67e",
+ "dependencies": [
+ "lodash.assign"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/express-force-ssl/-/express-force-ssl-0.3.2.tgz"
+ },
+ "express@5.2.1": {
+ "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==",
+ "dependencies": [
+ "accepts@2.0.0",
+ "body-parser",
+ "content-disposition",
+ "content-type",
+ "cookie",
+ "cookie-signature",
+ "debug@4.4.3",
+ "depd",
+ "encodeurl",
+ "escape-html",
+ "etag",
+ "finalhandler",
+ "fresh",
+ "http-errors",
+ "merge-descriptors",
+ "mime-types@3.0.2",
+ "on-finished",
+ "once",
+ "parseurl",
+ "proxy-addr",
+ "qs",
+ "range-parser",
+ "router",
+ "send",
+ "serve-static",
+ "statuses",
+ "type-is",
+ "vary"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/express/-/express-5.2.1.tgz"
+ },
"extend@3.0.2": {
"integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
"tarball": "https://verdaccio.lossless.digital/extend/-/extend-3.0.2.tgz"
},
+ "external-editor@3.1.0": {
+ "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==",
+ "dependencies": [
+ "chardet",
+ "iconv-lite@0.4.24",
+ "tmp"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/external-editor/-/external-editor-3.1.0.tgz"
+ },
"fake-indexeddb@5.0.2": {
"integrity": "sha512-cB507r5T3D55DfclY01GLkninZLfU7HXV/mhVRTnTRm5k2u+fY7Fof2dBkr80p5t7G7dlA/G5dI87QiMdPpMCQ==",
"tarball": "https://verdaccio.lossless.digital/fake-indexeddb/-/fake-indexeddb-5.0.2.tgz"
},
+ "fake-indexeddb@6.2.5": {
+ "integrity": "sha512-CGnyrvbhPlWYMngksqrSSUT1BAVP49dZocrHuK0SvtR0D5TMs5wP0o3j7jexDJW01KSadjBp1M/71o/KR3nD1w==",
+ "tarball": "https://verdaccio.lossless.digital/fake-indexeddb/-/fake-indexeddb-6.2.5.tgz"
+ },
"fast-deep-equal@3.1.3": {
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
"tarball": "https://verdaccio.lossless.digital/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz"
@@ -2418,12 +4280,20 @@
],
"tarball": "https://verdaccio.lossless.digital/fast-xml-builder/-/fast-xml-builder-1.1.4.tgz"
},
+ "fast-xml-parser@4.5.4": {
+ "integrity": "sha512-jE8ugADnYOBsu1uaoayVl1tVKAMNOXyjwvv2U6udEA2ORBhDooJDWoGxTkhd4Qn4yh59JVVt/pKXtjPwx9OguQ==",
+ "dependencies": [
+ "strnum@1.1.2"
+ ],
+ "bin": true,
+ "tarball": "https://verdaccio.lossless.digital/fast-xml-parser/-/fast-xml-parser-4.5.4.tgz"
+ },
"fast-xml-parser@5.5.6": {
"integrity": "sha512-3+fdZyBRVg29n4rXP0joHthhcHdPUHaIC16cuyyd1iLsuaO6Vea36MPrxgAzbZna8lhvZeRL8Bc9GP56/J9xEw==",
"dependencies": [
"fast-xml-builder",
"path-expression-matcher",
- "strnum"
+ "strnum@2.2.1"
],
"bin": true,
"tarball": "https://verdaccio.lossless.digital/fast-xml-parser/-/fast-xml-parser-5.5.6.tgz"
@@ -2445,6 +4315,18 @@
],
"tarball": "https://verdaccio.lossless.digital/file-type/-/file-type-19.6.0.tgz"
},
+ "finalhandler@2.1.1": {
+ "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==",
+ "dependencies": [
+ "debug@4.4.3",
+ "encodeurl",
+ "escape-html",
+ "on-finished",
+ "parseurl",
+ "statuses"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/finalhandler/-/finalhandler-2.1.1.tgz"
+ },
"find-cache-dir@3.3.2": {
"integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==",
"dependencies": [
@@ -2466,11 +4348,19 @@
"integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==",
"tarball": "https://verdaccio.lossless.digital/follow-redirects/-/follow-redirects-1.15.11.tgz"
},
+ "foreground-child@2.0.0": {
+ "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==",
+ "dependencies": [
+ "cross-spawn",
+ "signal-exit@3.0.7"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/foreground-child/-/foreground-child-2.0.0.tgz"
+ },
"foreground-child@3.3.1": {
"integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==",
"dependencies": [
"cross-spawn",
- "signal-exit"
+ "signal-exit@4.1.0"
],
"tarball": "https://verdaccio.lossless.digital/foreground-child/-/foreground-child-3.3.1.tgz"
},
@@ -2481,7 +4371,7 @@
"combined-stream",
"es-set-tostringtag",
"hasown",
- "mime-types"
+ "mime-types@2.1.35"
],
"tarball": "https://verdaccio.lossless.digital/form-data/-/form-data-4.0.5.tgz"
},
@@ -2489,6 +4379,14 @@
"integrity": "d6170107e9efdc4ed30c9dc39016df942b5cb58b",
"tarball": "https://verdaccio.lossless.digital/format/-/format-0.2.2.tgz"
},
+ "forwarded@0.2.0": {
+ "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
+ "tarball": "https://verdaccio.lossless.digital/forwarded/-/forwarded-0.2.0.tgz"
+ },
+ "fresh@2.0.0": {
+ "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==",
+ "tarball": "https://verdaccio.lossless.digital/fresh/-/fresh-2.0.0.tgz"
+ },
"fs-extra@11.3.4": {
"integrity": "sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA==",
"dependencies": [
@@ -2498,14 +4396,20 @@
],
"tarball": "https://verdaccio.lossless.digital/fs-extra/-/fs-extra-11.3.4.tgz"
},
+ "fs.realpath@1.0.0": {
+ "integrity": "1504ad2523158caa40db4a2787cb01411994ea4f",
+ "tarball": "https://verdaccio.lossless.digital/fs.realpath/-/fs.realpath-1.0.0.tgz"
+ },
+ "fsevents@2.3.3": {
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "os": ["darwin"],
+ "scripts": true,
+ "tarball": "https://verdaccio.lossless.digital/fsevents/-/fsevents-2.3.3.tgz"
+ },
"function-bind@1.1.2": {
"integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
"tarball": "https://verdaccio.lossless.digital/function-bind/-/function-bind-1.1.2.tgz"
},
- "get-caller-file@2.0.5": {
- "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
- "tarball": "https://verdaccio.lossless.digital/get-caller-file/-/get-caller-file-2.0.5.tgz"
- },
"get-intrinsic@1.3.0": {
"integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
"dependencies": [
@@ -2538,10 +4442,17 @@
],
"tarball": "https://verdaccio.lossless.digital/get-stream/-/get-stream-9.0.1.tgz"
},
+ "get-tsconfig@4.13.6": {
+ "integrity": "sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw==",
+ "dependencies": [
+ "resolve-pkg-maps"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/get-tsconfig/-/get-tsconfig-4.13.6.tgz"
+ },
"glob@11.1.0": {
"integrity": "sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==",
"dependencies": [
- "foreground-child",
+ "foreground-child@3.3.1",
"jackspeak",
"minimatch@10.2.4",
"minipass",
@@ -2551,6 +4462,18 @@
"bin": true,
"tarball": "https://verdaccio.lossless.digital/glob/-/glob-11.1.0.tgz"
},
+ "glob@7.2.3": {
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "dependencies": [
+ "fs.realpath",
+ "inflight",
+ "inherits",
+ "minimatch@3.1.5",
+ "once",
+ "path-is-absolute"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/glob/-/glob-7.2.3.tgz"
+ },
"gopd@1.2.0": {
"integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
"tarball": "https://verdaccio.lossless.digital/gopd/-/gopd-1.2.0.tgz"
@@ -2559,9 +4482,14 @@
"integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
"tarball": "https://verdaccio.lossless.digital/graceful-fs/-/graceful-fs-4.2.11.tgz"
},
- "has-flag@4.0.0": {
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "tarball": "https://verdaccio.lossless.digital/has-flag/-/has-flag-4.0.0.tgz"
+ "happy-dom@15.11.7": {
+ "integrity": "sha512-KyrFvnl+J9US63TEzwoiJOQzZBJY7KgBushJA8X61DMbNsH+2ONkDuLDnCnwUiPTF42tLoEmrPyoqbenVA5zrg==",
+ "dependencies": [
+ "entities",
+ "webidl-conversions",
+ "whatwg-mimetype"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/happy-dom/-/happy-dom-15.11.7.tgz"
},
"has-property-descriptors@1.0.2": {
"integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
@@ -2621,15 +4549,49 @@
],
"tarball": "https://verdaccio.lossless.digital/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz"
},
+ "he@1.2.0": {
+ "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
+ "bin": true,
+ "tarball": "https://verdaccio.lossless.digital/he/-/he-1.2.0.tgz"
+ },
+ "highlight.js@11.11.1": {
+ "integrity": "sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==",
+ "tarball": "https://verdaccio.lossless.digital/highlight.js/-/highlight.js-11.11.1.tgz"
+ },
+ "html-minifier@4.0.0": {
+ "integrity": "sha512-aoGxanpFPLg7MkIl/DDFYtb0iWz7jMFGqFhvEDZga6/4QTjneiD8I/NXL1x5aaoCp7FSIT6h/OhykDdPsbtMig==",
+ "dependencies": [
+ "camel-case",
+ "clean-css",
+ "commander",
+ "he",
+ "param-case",
+ "relateurl",
+ "uglify-js"
+ ],
+ "bin": true,
+ "tarball": "https://verdaccio.lossless.digital/html-minifier/-/html-minifier-4.0.0.tgz"
+ },
"html-void-elements@3.0.0": {
"integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==",
"tarball": "https://verdaccio.lossless.digital/html-void-elements/-/html-void-elements-3.0.0.tgz"
},
+ "http-errors@2.0.1": {
+ "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==",
+ "dependencies": [
+ "depd",
+ "inherits",
+ "setprototypeof",
+ "statuses",
+ "toidentifier"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/http-errors/-/http-errors-2.0.1.tgz"
+ },
"https-proxy-agent@7.0.6": {
"integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==",
"dependencies": [
"agent-base",
- "debug"
+ "debug@4.4.3"
],
"tarball": "https://verdaccio.lossless.digital/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz"
},
@@ -2640,14 +4602,63 @@
],
"tarball": "https://verdaccio.lossless.digital/humanize-ms/-/humanize-ms-1.2.1.tgz"
},
+ "ibantools@4.5.1": {
+ "integrity": "sha512-DfKQpLlFq9yEUIEnFuCJzss3XavD7iHZTU5PyqXiAJ+rmaMp+NFP3hboumHKuK8nZjuOJg93WemTzcQ5b9jOZA==",
+ "tarball": "https://verdaccio.lossless.digital/ibantools/-/ibantools-4.5.1.tgz"
+ },
+ "iconv-lite@0.4.24": {
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "dependencies": [
+ "safer-buffer"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/iconv-lite/-/iconv-lite-0.4.24.tgz"
+ },
+ "iconv-lite@0.7.2": {
+ "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==",
+ "dependencies": [
+ "safer-buffer"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/iconv-lite/-/iconv-lite-0.7.2.tgz"
+ },
"ieee754@1.2.1": {
"integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
"tarball": "https://verdaccio.lossless.digital/ieee754/-/ieee754-1.2.1.tgz"
},
+ "inflight@1.0.6": {
+ "integrity": "49bd6331d7d02d0c09bc910a1075ba8165b56df9",
+ "dependencies": [
+ "once",
+ "wrappy"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/inflight/-/inflight-1.0.6.tgz"
+ },
"inherits@2.0.4": {
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
"tarball": "https://verdaccio.lossless.digital/inherits/-/inherits-2.0.4.tgz"
},
+ "inquirer@11.1.0": {
+ "integrity": "sha512-CmLAZT65GG/v30c+D2Fk8+ceP6pxD6RL+hIUOWAltCmeyEqWYwqu9v76q03OvjyZ3AB0C1Ala2stn1z/rMqGEw==",
+ "dependencies": [
+ "@inquirer/core",
+ "@inquirer/prompts",
+ "@inquirer/type",
+ "@types/mute-stream",
+ "ansi-escapes",
+ "mute-stream",
+ "run-async",
+ "rxjs"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/inquirer/-/inquirer-11.1.0.tgz"
+ },
+ "ipaddr.js@1.9.1": {
+ "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
+ "tarball": "https://verdaccio.lossless.digital/ipaddr.js/-/ipaddr.js-1.9.1.tgz"
+ },
+ "is-docker@2.2.1": {
+ "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==",
+ "bin": true,
+ "tarball": "https://verdaccio.lossless.digital/is-docker/-/is-docker-2.2.1.tgz"
+ },
"is-fullwidth-code-point@3.0.0": {
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
"tarball": "https://verdaccio.lossless.digital/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz"
@@ -2660,14 +4671,37 @@
],
"tarball": "https://verdaccio.lossless.digital/is-nan/-/is-nan-1.3.2.tgz"
},
+ "is-number@4.0.0": {
+ "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
+ "tarball": "https://verdaccio.lossless.digital/is-number/-/is-number-4.0.0.tgz"
+ },
+ "is-observable@2.1.0": {
+ "integrity": "sha512-DailKdLb0WU+xX8K5w7VsJhapwHLZ9jjmazqCJq4X12CTgqq73TKnbRcnSLuXYPOoLQgV5IrD7ePiX/h1vnkBw==",
+ "tarball": "https://verdaccio.lossless.digital/is-observable/-/is-observable-2.1.0.tgz"
+ },
"is-plain-obj@4.1.0": {
"integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==",
"tarball": "https://verdaccio.lossless.digital/is-plain-obj/-/is-plain-obj-4.1.0.tgz"
},
+ "is-promise@4.0.0": {
+ "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==",
+ "tarball": "https://verdaccio.lossless.digital/is-promise/-/is-promise-4.0.0.tgz"
+ },
"is-stream@4.0.1": {
"integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==",
"tarball": "https://verdaccio.lossless.digital/is-stream/-/is-stream-4.0.1.tgz"
},
+ "is-windows@1.0.2": {
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+ "tarball": "https://verdaccio.lossless.digital/is-windows/-/is-windows-1.0.2.tgz"
+ },
+ "is-wsl@2.2.0": {
+ "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
+ "dependencies": [
+ "is-docker"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/is-wsl/-/is-wsl-2.2.0.tgz"
+ },
"isexe@2.0.0": {
"integrity": "e8fbf374dc556ff8947a10dcb0572d633f2cfa10",
"tarball": "https://verdaccio.lossless.digital/isexe/-/isexe-2.0.0.tgz"
@@ -2683,6 +4717,10 @@
],
"tarball": "https://verdaccio.lossless.digital/jackspeak/-/jackspeak-4.2.3.tgz"
},
+ "js-base64@3.7.8": {
+ "integrity": "sha512-hNngCeKxIUQiEUN3GPJOkz4wF/YvdUdbNL9hsBcMQTkKzboD7T/q3OYOuuPZLUE6dBxSGpwhk5mwuDud7JVAow==",
+ "tarball": "https://verdaccio.lossless.digital/js-base64/-/js-base64-3.7.8.tgz"
+ },
"js-yaml@3.14.2": {
"integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==",
"dependencies": [
@@ -2743,6 +4781,21 @@
],
"tarball": "https://verdaccio.lossless.digital/jws/-/jws-4.0.1.tgz"
},
+ "kind-of@6.0.3": {
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "tarball": "https://verdaccio.lossless.digital/kind-of/-/kind-of-6.0.3.tgz"
+ },
+ "linkify-it@5.0.0": {
+ "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==",
+ "dependencies": [
+ "uc.micro"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/linkify-it/-/linkify-it-5.0.0.tgz"
+ },
+ "linkifyjs@4.3.2": {
+ "integrity": "sha512-NT1CJtq3hHIreOianA8aSXn6Cw0JzYOuDQbOrSPe7gqFnCpKP++MQe3ODgO3oh2GJFORkAAdqredOa60z63GbA==",
+ "tarball": "https://verdaccio.lossless.digital/linkifyjs/-/linkifyjs-4.3.2.tgz"
+ },
"lit-element@4.2.2": {
"integrity": "sha512-aFKhNToWxoyhkNDmWZwEva2SlQia+jfG0fjIWV//YeTaWrVnOxD89dPKfigCUspXFmjzOEUQpOkejH5Ly6sG0w==",
"dependencies": [
@@ -2775,6 +4828,48 @@
],
"tarball": "https://verdaccio.lossless.digital/locate-path/-/locate-path-5.0.0.tgz"
},
+ "lodash._baseassign@3.2.0": {
+ "integrity": "8c38a099500f215ad09e59f1722fd0c52bfe0a4e",
+ "dependencies": [
+ "lodash._basecopy",
+ "lodash.keys"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz"
+ },
+ "lodash._basecopy@3.0.1": {
+ "integrity": "8da0e6a876cf344c0ad8a54882111dd3c5c7ca36",
+ "tarball": "https://verdaccio.lossless.digital/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz"
+ },
+ "lodash._bindcallback@3.0.1": {
+ "integrity": "e531c27644cf8b57a99e17ed95b35c748789392e",
+ "tarball": "https://verdaccio.lossless.digital/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz"
+ },
+ "lodash._createassigner@3.1.1": {
+ "integrity": "838a5bae2fdaca63ac22dee8e19fa4e6d6970b11",
+ "dependencies": [
+ "lodash._bindcallback",
+ "lodash._isiterateecall",
+ "lodash.restparam"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz"
+ },
+ "lodash._getnative@3.9.1": {
+ "integrity": "570bc7dede46d61cdcde687d65d3eecbaa3aaff5",
+ "tarball": "https://verdaccio.lossless.digital/lodash._getnative/-/lodash._getnative-3.9.1.tgz"
+ },
+ "lodash._isiterateecall@3.0.9": {
+ "integrity": "5203ad7ba425fae842460e696db9cf3e6aac057c",
+ "tarball": "https://verdaccio.lossless.digital/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz"
+ },
+ "lodash.assign@3.2.0": {
+ "integrity": "3ce9f0234b4b2223e296b8fa0ac1fee8ebca64fa",
+ "dependencies": [
+ "lodash._baseassign",
+ "lodash._createassigner",
+ "lodash.keys"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/lodash.assign/-/lodash.assign-3.2.0.tgz"
+ },
"lodash.clonedeep@4.5.0": {
"integrity": "e23f3f9c4f8fbdde872529c1071857a086e5ccef",
"tarball": "https://verdaccio.lossless.digital/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz"
@@ -2783,6 +4878,14 @@
"integrity": "60bb98a87cb923c68ca1e51325483314849f553f",
"tarball": "https://verdaccio.lossless.digital/lodash.includes/-/lodash.includes-4.3.0.tgz"
},
+ "lodash.isarguments@3.1.0": {
+ "integrity": "2f573d85c6a24289ff00663b491c1d338ff3458a",
+ "tarball": "https://verdaccio.lossless.digital/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz"
+ },
+ "lodash.isarray@3.0.4": {
+ "integrity": "79e4eb88c36a8122af86f844aa9bcd851b5fbb55",
+ "tarball": "https://verdaccio.lossless.digital/lodash.isarray/-/lodash.isarray-3.0.4.tgz"
+ },
"lodash.isboolean@3.0.3": {
"integrity": "6c2e171db2a257cd96802fd43b01b20d5f5870f6",
"tarball": "https://verdaccio.lossless.digital/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz"
@@ -2803,18 +4906,39 @@
"integrity": "d527dfb5456eca7cc9bb95d5daeaf88ba54a5451",
"tarball": "https://verdaccio.lossless.digital/lodash.isstring/-/lodash.isstring-4.0.1.tgz"
},
+ "lodash.keys@3.1.2": {
+ "integrity": "4dbc0472b156be50a0b286855d1bd0b0c656098a",
+ "dependencies": [
+ "lodash._getnative",
+ "lodash.isarguments",
+ "lodash.isarray"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/lodash.keys/-/lodash.keys-3.1.2.tgz"
+ },
"lodash.once@4.1.1": {
"integrity": "0dd3971213c7c56df880977d504c88fb471a97ac",
"tarball": "https://verdaccio.lossless.digital/lodash.once/-/lodash.once-4.1.1.tgz"
},
+ "lodash.restparam@3.6.1": {
+ "integrity": "936a4e309ef330a7645ed4145986c85ae5b20805",
+ "tarball": "https://verdaccio.lossless.digital/lodash.restparam/-/lodash.restparam-3.6.1.tgz"
+ },
"longest-streak@3.1.0": {
"integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==",
"tarball": "https://verdaccio.lossless.digital/longest-streak/-/longest-streak-3.1.0.tgz"
},
+ "lower-case@1.1.4": {
+ "integrity": "9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac",
+ "tarball": "https://verdaccio.lossless.digital/lower-case/-/lower-case-1.1.4.tgz"
+ },
"lru-cache@11.2.7": {
"integrity": "sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==",
"tarball": "https://verdaccio.lossless.digital/lru-cache/-/lru-cache-11.2.7.tgz"
},
+ "lucide@0.577.0": {
+ "integrity": "sha512-PpC/m5eOItp/WU/GlQPFBXDOhq6HibL73KzYP37OX3LM7VmzWQF8voEj8QRWUFvy9FIKfeDQkWYoyS1D/MdWFA==",
+ "tarball": "https://verdaccio.lossless.digital/lucide/-/lucide-0.577.0.tgz"
+ },
"make-dir@3.1.0": {
"integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
"dependencies": [
@@ -2822,14 +4946,43 @@
],
"tarball": "https://verdaccio.lossless.digital/make-dir/-/make-dir-3.1.0.tgz"
},
+ "make-error-cause@2.3.0": {
+ "integrity": "sha512-etgt+n4LlOkGSJbBTV9VROHA5R7ekIPS4vfh+bCAoJgRrJWdqJCBbpS3osRJ/HrT7R68MzMiY3L3sDJ/Fd8aBg==",
+ "dependencies": [
+ "make-error"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/make-error-cause/-/make-error-cause-2.3.0.tgz"
+ },
+ "make-error@1.3.6": {
+ "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
+ "tarball": "https://verdaccio.lossless.digital/make-error/-/make-error-1.3.6.tgz"
+ },
+ "markdown-it@14.1.1": {
+ "integrity": "sha512-BuU2qnTti9YKgK5N+IeMubp14ZUKUUw7yeJbkjtosvHiP0AZ5c8IAgEMk79D0eC8F23r4Ac/q8cAIFdm2FtyoA==",
+ "dependencies": [
+ "argparse@2.0.1",
+ "entities",
+ "linkify-it",
+ "mdurl",
+ "punycode.js",
+ "uc.micro"
+ ],
+ "bin": true,
+ "tarball": "https://verdaccio.lossless.digital/markdown-it/-/markdown-it-14.1.1.tgz"
+ },
"markdown-table@3.0.4": {
"integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==",
"tarball": "https://verdaccio.lossless.digital/markdown-table/-/markdown-table-3.0.4.tgz"
},
+ "marked@14.0.0": {
+ "integrity": "sha512-uIj4+faQ+MgHgwUW1l2PsPglZLOLOT1uErt06dAPtx2kjteLAkbsd/0FiYg/MGS+i7ZKLb7w2WClxHkzOOuryQ==",
+ "bin": true,
+ "tarball": "https://verdaccio.lossless.digital/marked/-/marked-14.0.0.tgz"
+ },
"matcher@5.0.0": {
"integrity": "sha512-s2EMBOWtXFc8dgqvoAzKJXxNHibcdJMV0gwqKUaw9E2JBJuGUK7DrNKrA6g/i+v72TT16+6sVm5mS3thaMLQUw==",
"dependencies": [
- "escape-string-regexp"
+ "escape-string-regexp@5.0.0"
],
"tarball": "https://verdaccio.lossless.digital/matcher/-/matcher-5.0.0.tgz"
},
@@ -2837,11 +4990,15 @@
"integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
"tarball": "https://verdaccio.lossless.digital/math-intrinsics/-/math-intrinsics-1.1.0.tgz"
},
+ "math-random@1.0.4": {
+ "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==",
+ "tarball": "https://verdaccio.lossless.digital/math-random/-/math-random-1.0.4.tgz"
+ },
"mdast-util-find-and-replace@3.0.2": {
"integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==",
"dependencies": [
"@types/mdast",
- "escape-string-regexp",
+ "escape-string-regexp@5.0.0",
"unist-util-is",
"unist-util-visit-parents"
],
@@ -2870,7 +5027,7 @@
"dependencies": [
"@types/mdast",
"devlop",
- "escape-string-regexp",
+ "escape-string-regexp@5.0.0",
"mdast-util-from-markdown",
"mdast-util-to-markdown",
"micromark-extension-frontmatter"
@@ -2987,10 +5144,22 @@
],
"tarball": "https://verdaccio.lossless.digital/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz"
},
+ "mdurl@2.0.0": {
+ "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==",
+ "tarball": "https://verdaccio.lossless.digital/mdurl/-/mdurl-2.0.0.tgz"
+ },
+ "media-typer@1.1.0": {
+ "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==",
+ "tarball": "https://verdaccio.lossless.digital/media-typer/-/media-typer-1.1.0.tgz"
+ },
"memory-pager@1.5.0": {
"integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==",
"tarball": "https://verdaccio.lossless.digital/memory-pager/-/memory-pager-1.5.0.tgz"
},
+ "merge-descriptors@2.0.0": {
+ "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==",
+ "tarball": "https://verdaccio.lossless.digital/merge-descriptors/-/merge-descriptors-2.0.0.tgz"
+ },
"micromark-core-commonmark@2.0.3": {
"integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==",
"dependencies": [
@@ -3251,7 +5420,7 @@
"integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==",
"dependencies": [
"@types/debug",
- "debug",
+ "debug@4.4.3",
"decode-named-character-reference",
"devlop",
"micromark-core-commonmark",
@@ -3274,13 +5443,24 @@
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
"tarball": "https://verdaccio.lossless.digital/mime-db/-/mime-db-1.52.0.tgz"
},
+ "mime-db@1.54.0": {
+ "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==",
+ "tarball": "https://verdaccio.lossless.digital/mime-db/-/mime-db-1.54.0.tgz"
+ },
"mime-types@2.1.35": {
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
"dependencies": [
- "mime-db"
+ "mime-db@1.52.0"
],
"tarball": "https://verdaccio.lossless.digital/mime-types/-/mime-types-2.1.35.tgz"
},
+ "mime-types@3.0.2": {
+ "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==",
+ "dependencies": [
+ "mime-db@1.54.0"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/mime-types/-/mime-types-3.0.2.tgz"
+ },
"mime@4.1.0": {
"integrity": "sha512-X5ju04+cAzsojXKes0B/S4tcYtFAJ6tTMuSPBEn9CPGlrWr8Fiw7qYeLT0XyH80HSoAoqWCaz+MWKh22P7G1cw==",
"bin": true,
@@ -3297,6 +5477,13 @@
],
"tarball": "https://verdaccio.lossless.digital/minimatch/-/minimatch-10.2.4.tgz"
},
+ "minimatch@3.1.5": {
+ "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
+ "dependencies": [
+ "brace-expansion@1.1.12"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/minimatch/-/minimatch-3.1.5.tgz"
+ },
"minimatch@9.0.9": {
"integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==",
"dependencies": [
@@ -3308,6 +5495,14 @@
"integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==",
"tarball": "https://verdaccio.lossless.digital/minipass/-/minipass-7.1.3.tgz"
},
+ "monaco-editor@0.55.1": {
+ "integrity": "sha512-jz4x+TJNFHwHtwuV9vA9rMujcZRb0CEilTEwG2rRSpe/A7Jdkuj8xPKttCgOh+v/lkHy7HsZ64oj+q3xoAFl9A==",
+ "dependencies": [
+ "dompurify",
+ "marked"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/monaco-editor/-/monaco-editor-0.55.1.tgz"
+ },
"mongodb-connection-string-url@3.0.2": {
"integrity": "sha512-rMO7CGo/9BFwyZABcKAWL8UJwH/Kc2x0g72uhDWzG48URRax5TCIcJ7Rc3RZqffZzO/Gwff/jyKwCU9TN8gehA==",
"dependencies": [
@@ -3329,7 +5524,7 @@
"dependencies": [
"async-mutex",
"camelcase",
- "debug",
+ "debug@4.4.3",
"find-cache-dir",
"follow-redirects",
"https-proxy-agent",
@@ -3373,22 +5568,56 @@
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
"tarball": "https://verdaccio.lossless.digital/ms/-/ms-2.1.3.tgz"
},
+ "mute-stream@1.0.0": {
+ "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==",
+ "tarball": "https://verdaccio.lossless.digital/mute-stream/-/mute-stream-1.0.0.tgz"
+ },
"nanoid@4.0.2": {
"integrity": "sha512-7ZtY5KTCNheRGfEFxnedV5zFiORN1+Y1N6zvPTnHQd8ENUvfaDBeuJDZb2bN/oXwXxu3qkTXDzy57W5vAmDTBw==",
"bin": true,
"tarball": "https://verdaccio.lossless.digital/nanoid/-/nanoid-4.0.2.tgz"
},
+ "negotiator@0.6.3": {
+ "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
+ "tarball": "https://verdaccio.lossless.digital/negotiator/-/negotiator-0.6.3.tgz"
+ },
+ "negotiator@1.0.0": {
+ "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==",
+ "tarball": "https://verdaccio.lossless.digital/negotiator/-/negotiator-1.0.0.tgz"
+ },
"new-find-package-json@2.0.0": {
"integrity": "sha512-lDcBsjBSMlj3LXH2v/FW3txlh2pYTjmbOXPYJD93HI5EwuLzI11tdHSIpUMmfq/IOsldj4Ps8M8flhm+pCK4Ew==",
"dependencies": [
- "debug"
+ "debug@4.4.3"
],
"tarball": "https://verdaccio.lossless.digital/new-find-package-json/-/new-find-package-json-2.0.0.tgz"
},
+ "no-case@2.3.2": {
+ "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==",
+ "dependencies": [
+ "lower-case"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/no-case/-/no-case-2.3.2.tgz"
+ },
"node-forge@1.3.3": {
"integrity": "sha512-rLvcdSyRCyouf6jcOIPe/BgwG/d7hKjzMKOas33/pHEr6gbq18IK9zV7DiPvzsz0oBJPme6qr6H6kGZuI9/DZg==",
"tarball": "https://verdaccio.lossless.digital/node-forge/-/node-forge-1.3.3.tgz"
},
+ "normalize-newline@4.1.0": {
+ "integrity": "sha512-ff4jKqMI8Xl50/4Mms/9jPobzAV/UK+kXG2XJ/7AqOmxIx8mqfqTIHYxuAnEgJ2AQeBbLnlbmZ5+38Y9A0w/YA==",
+ "dependencies": [
+ "replace-buffer"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/normalize-newline/-/normalize-newline-4.1.0.tgz"
+ },
+ "object-assign@4.1.1": {
+ "integrity": "2109adc7965887cfc05cbbd442cac8bfbb360863",
+ "tarball": "https://verdaccio.lossless.digital/object-assign/-/object-assign-4.1.1.tgz"
+ },
+ "object-inspect@1.13.4": {
+ "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==",
+ "tarball": "https://verdaccio.lossless.digital/object-inspect/-/object-inspect-1.13.4.tgz"
+ },
"object-keys@1.1.1": {
"integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
"tarball": "https://verdaccio.lossless.digital/object-keys/-/object-keys-1.1.1.tgz"
@@ -3397,6 +5626,41 @@
"integrity": "sha512-QOUH5Xrsced9fKXaQTjWoDGKeS/Or7E2jB0FN63N4mkAO4qJdB7WR7e6qWAOHM5nk25FJ8TGjhP7DH4l6vFVLg==",
"tarball": "https://verdaccio.lossless.digital/oblivious-set/-/oblivious-set-2.0.0.tgz"
},
+ "observable-fns@0.6.1": {
+ "integrity": "sha512-9gRK4+sRWzeN6AOewNBTLXir7Zl/i3GB6Yl26gK4flxz8BXVpD3kt8amREmWNb0mxYOGDotvE5a4N+PtGGKdkg==",
+ "tarball": "https://verdaccio.lossless.digital/observable-fns/-/observable-fns-0.6.1.tgz"
+ },
+ "on-finished@2.4.1": {
+ "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
+ "dependencies": [
+ "ee-first"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/on-finished/-/on-finished-2.4.1.tgz"
+ },
+ "once@1.4.0": {
+ "integrity": "583b1aa775961d4b113ac17d9c50baef9dd76bd1",
+ "dependencies": [
+ "wrappy"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/once/-/once-1.4.0.tgz"
+ },
+ "open@8.4.2": {
+ "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==",
+ "dependencies": [
+ "define-lazy-prop",
+ "is-docker",
+ "is-wsl"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/open/-/open-8.4.2.tgz"
+ },
+ "orderedmap@2.1.1": {
+ "integrity": "sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g==",
+ "tarball": "https://verdaccio.lossless.digital/orderedmap/-/orderedmap-2.1.1.tgz"
+ },
+ "os-tmpdir@1.0.2": {
+ "integrity": "bbe67406c79aa85c5cfec766fe5734555dfa1274",
+ "tarball": "https://verdaccio.lossless.digital/os-tmpdir/-/os-tmpdir-1.0.2.tgz"
+ },
"p-finally@1.0.0": {
"integrity": "3fbcfb15b899a44123b34b6dcc18b724336a2cae",
"tarball": "https://verdaccio.lossless.digital/p-finally/-/p-finally-1.0.0.tgz"
@@ -3438,10 +5702,21 @@
"integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
"tarball": "https://verdaccio.lossless.digital/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz"
},
+ "param-case@2.1.1": {
+ "integrity": "df94fd8cf6531ecf75e6bef9a0858fbc72be2247",
+ "dependencies": [
+ "no-case"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/param-case/-/param-case-2.1.1.tgz"
+ },
"parse-ms@4.0.0": {
"integrity": "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==",
"tarball": "https://verdaccio.lossless.digital/parse-ms/-/parse-ms-4.0.0.tgz"
},
+ "parseurl@1.3.3": {
+ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
+ "tarball": "https://verdaccio.lossless.digital/parseurl/-/parseurl-1.3.3.tgz"
+ },
"path-exists@4.0.0": {
"integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
"tarball": "https://verdaccio.lossless.digital/path-exists/-/path-exists-4.0.0.tgz"
@@ -3450,6 +5725,10 @@
"integrity": "sha512-qdVgY8KXmVdJZRSS1JdEPOKPdTiEK/pi0RkcT2sw1RhXxohdujUlJFPuS1TSkevZ9vzd3ZlL7ULl1MHGTApKzQ==",
"tarball": "https://verdaccio.lossless.digital/path-expression-matcher/-/path-expression-matcher-1.1.3.tgz"
},
+ "path-is-absolute@1.0.1": {
+ "integrity": "174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f",
+ "tarball": "https://verdaccio.lossless.digital/path-is-absolute/-/path-is-absolute-1.0.1.tgz"
+ },
"path-key@3.1.1": {
"integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
"tarball": "https://verdaccio.lossless.digital/path-key/-/path-key-3.1.1.tgz"
@@ -3466,6 +5745,13 @@
"integrity": "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==",
"tarball": "https://verdaccio.lossless.digital/path-to-regexp/-/path-to-regexp-8.3.0.tgz"
},
+ "pdfjs-dist@4.10.38": {
+ "integrity": "sha512-/Y3fcFrXEAsMjJXeL9J8+ZG9U01LbuWaYypvDW2ycW1jL269L3js3DVBjDJ0Up9Np1uqDXsDrRihHANhZOlwdQ==",
+ "optionalDependencies": [
+ "@napi-rs/canvas"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/pdfjs-dist/-/pdfjs-dist-4.10.38.tgz"
+ },
"peek-readable@5.4.2": {
"integrity": "sha512-peBp3qZyuS6cNIJ2akRNG1uo1WJ1d0wTxg/fxMdZ0BqCVhx242bSFHM9eNqflfJVS9SsgkzgT/1UgnsurBOTMg==",
"tarball": "https://verdaccio.lossless.digital/peek-readable/-/peek-readable-5.4.2.tgz"
@@ -3474,6 +5760,10 @@
"integrity": "7a57eb550a6783f9115331fcf4663d5c8e007a50",
"tarball": "https://verdaccio.lossless.digital/pend/-/pend-1.2.0.tgz"
},
+ "picomatch@4.0.3": {
+ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
+ "tarball": "https://verdaccio.lossless.digital/picomatch/-/picomatch-4.0.3.tgz"
+ },
"pkg-dir@4.2.0": {
"integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
"dependencies": [
@@ -3492,10 +5782,213 @@
"integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==",
"tarball": "https://verdaccio.lossless.digital/property-information/-/property-information-7.1.0.tgz"
},
+ "prosemirror-changeset@2.4.0": {
+ "integrity": "sha512-LvqH2v7Q2SF6yxatuPP2e8vSUKS/L+xAU7dPDC4RMyHMhZoGDfBC74mYuyYF4gLqOEG758wajtyhNnsTkuhvng==",
+ "dependencies": [
+ "prosemirror-transform"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/prosemirror-changeset/-/prosemirror-changeset-2.4.0.tgz"
+ },
+ "prosemirror-collab@1.3.1": {
+ "integrity": "sha512-4SnynYR9TTYaQVXd/ieUvsVV4PDMBzrq2xPUWutHivDuOshZXqQ5rGbZM84HEaXKbLdItse7weMGOUdDVcLKEQ==",
+ "dependencies": [
+ "prosemirror-state"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/prosemirror-collab/-/prosemirror-collab-1.3.1.tgz"
+ },
+ "prosemirror-commands@1.7.1": {
+ "integrity": "sha512-rT7qZnQtx5c0/y/KlYaGvtG411S97UaL6gdp6RIZ23DLHanMYLyfGBV5DtSnZdthQql7W+lEVbpSfwtO8T+L2w==",
+ "dependencies": [
+ "prosemirror-model",
+ "prosemirror-state",
+ "prosemirror-transform"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/prosemirror-commands/-/prosemirror-commands-1.7.1.tgz"
+ },
+ "prosemirror-dropcursor@1.8.2": {
+ "integrity": "sha512-CCk6Gyx9+Tt2sbYk5NK0nB1ukHi2ryaRgadV/LvyNuO3ena1payM2z6Cg0vO1ebK8cxbzo41ku2DE5Axj1Zuiw==",
+ "dependencies": [
+ "prosemirror-state",
+ "prosemirror-transform",
+ "prosemirror-view"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/prosemirror-dropcursor/-/prosemirror-dropcursor-1.8.2.tgz"
+ },
+ "prosemirror-gapcursor@1.4.1": {
+ "integrity": "sha512-pMdYaEnjNMSwl11yjEGtgTmLkR08m/Vl+Jj443167p9eB3HVQKhYCc4gmHVDsLPODfZfjr/MmirsdyZziXbQKw==",
+ "dependencies": [
+ "prosemirror-keymap",
+ "prosemirror-model",
+ "prosemirror-state",
+ "prosemirror-view"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/prosemirror-gapcursor/-/prosemirror-gapcursor-1.4.1.tgz"
+ },
+ "prosemirror-history@1.5.0": {
+ "integrity": "sha512-zlzTiH01eKA55UAf1MEjtssJeHnGxO0j4K4Dpx+gnmX9n+SHNlDqI2oO1Kv1iPN5B1dm5fsljCfqKF9nFL6HRg==",
+ "dependencies": [
+ "prosemirror-state",
+ "prosemirror-transform",
+ "prosemirror-view",
+ "rope-sequence"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/prosemirror-history/-/prosemirror-history-1.5.0.tgz"
+ },
+ "prosemirror-inputrules@1.5.1": {
+ "integrity": "sha512-7wj4uMjKaXWAQ1CDgxNzNtR9AlsuwzHfdFH1ygEHA2KHF2DOEaXl1CJfNPAKCg9qNEh4rum975QLaCiQPyY6Fw==",
+ "dependencies": [
+ "prosemirror-state",
+ "prosemirror-transform"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/prosemirror-inputrules/-/prosemirror-inputrules-1.5.1.tgz"
+ },
+ "prosemirror-keymap@1.2.3": {
+ "integrity": "sha512-4HucRlpiLd1IPQQXNqeo81BGtkY8Ai5smHhKW9jjPKRc2wQIxksg7Hl1tTI2IfT2B/LgX6bfYvXxEpJl7aKYKw==",
+ "dependencies": [
+ "prosemirror-state",
+ "w3c-keyname"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/prosemirror-keymap/-/prosemirror-keymap-1.2.3.tgz"
+ },
+ "prosemirror-markdown@1.13.4": {
+ "integrity": "sha512-D98dm4cQ3Hs6EmjK500TdAOew4Z03EV71ajEFiWra3Upr7diytJsjF4mPV2dW+eK5uNectiRj0xFxYI9NLXDbw==",
+ "dependencies": [
+ "@types/markdown-it",
+ "markdown-it",
+ "prosemirror-model"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/prosemirror-markdown/-/prosemirror-markdown-1.13.4.tgz"
+ },
+ "prosemirror-menu@1.3.0": {
+ "integrity": "sha512-TImyPXCHPcDsSka2/lwJ6WjTASr4re/qWq1yoTTuLOqfXucwF6VcRa2LWCkM/EyTD1UO3CUwiH8qURJoWJRxwg==",
+ "dependencies": [
+ "crelt",
+ "prosemirror-commands",
+ "prosemirror-history",
+ "prosemirror-state"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/prosemirror-menu/-/prosemirror-menu-1.3.0.tgz"
+ },
+ "prosemirror-model@1.25.4": {
+ "integrity": "sha512-PIM7E43PBxKce8OQeezAs9j4TP+5yDpZVbuurd1h5phUxEKIu+G2a+EUZzIC5nS1mJktDJWzbqS23n1tsAf5QA==",
+ "dependencies": [
+ "orderedmap"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/prosemirror-model/-/prosemirror-model-1.25.4.tgz"
+ },
+ "prosemirror-schema-basic@1.2.4": {
+ "integrity": "sha512-ELxP4TlX3yr2v5rM7Sb70SqStq5NvI15c0j9j/gjsrO5vaw+fnnpovCLEGIcpeGfifkuqJwl4fon6b+KdrODYQ==",
+ "dependencies": [
+ "prosemirror-model"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/prosemirror-schema-basic/-/prosemirror-schema-basic-1.2.4.tgz"
+ },
+ "prosemirror-schema-list@1.5.1": {
+ "integrity": "sha512-927lFx/uwyQaGwJxLWCZRkjXG0p48KpMj6ueoYiu4JX05GGuGcgzAy62dfiV8eFZftgyBUvLx76RsMe20fJl+Q==",
+ "dependencies": [
+ "prosemirror-model",
+ "prosemirror-state",
+ "prosemirror-transform"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/prosemirror-schema-list/-/prosemirror-schema-list-1.5.1.tgz"
+ },
+ "prosemirror-state@1.4.4": {
+ "integrity": "sha512-6jiYHH2CIGbCfnxdHbXZ12gySFY/fz/ulZE333G6bPqIZ4F+TXo9ifiR86nAHpWnfoNjOb3o5ESi7J8Uz1jXHw==",
+ "dependencies": [
+ "prosemirror-model",
+ "prosemirror-transform",
+ "prosemirror-view"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/prosemirror-state/-/prosemirror-state-1.4.4.tgz"
+ },
+ "prosemirror-tables@1.8.5": {
+ "integrity": "sha512-V/0cDCsHKHe/tfWkeCmthNUcEp1IVO3p6vwN8XtwE9PZQLAZJigbw3QoraAdfJPir4NKJtNvOB8oYGKRl+t0Dw==",
+ "dependencies": [
+ "prosemirror-keymap",
+ "prosemirror-model",
+ "prosemirror-state",
+ "prosemirror-transform",
+ "prosemirror-view"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/prosemirror-tables/-/prosemirror-tables-1.8.5.tgz"
+ },
+ "prosemirror-trailing-node@3.0.0_prosemirror-model@1.25.4_prosemirror-state@1.4.4_prosemirror-view@1.41.6": {
+ "integrity": "sha512-xiun5/3q0w5eRnGYfNlW1uU9W6x5MoFKWwq/0TIRgt09lv7Hcser2QYV8t4muXbEr+Fwo0geYn79Xs4GKywrRQ==",
+ "dependencies": [
+ "@remirror/core-constants",
+ "escape-string-regexp@4.0.0",
+ "prosemirror-model",
+ "prosemirror-state",
+ "prosemirror-view"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/prosemirror-trailing-node/-/prosemirror-trailing-node-3.0.0.tgz"
+ },
+ "prosemirror-transform@1.11.0": {
+ "integrity": "sha512-4I7Ce4KpygXb9bkiPS3hTEk4dSHorfRw8uI0pE8IhxlK2GXsqv5tIA7JUSxtSu7u8APVOTtbUBxTmnHIxVkIJw==",
+ "dependencies": [
+ "prosemirror-model"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/prosemirror-transform/-/prosemirror-transform-1.11.0.tgz"
+ },
+ "prosemirror-view@1.41.6": {
+ "integrity": "sha512-mxpcDG4hNQa/CPtzxjdlir5bJFDlm0/x5nGBbStB2BWX+XOQ9M8ekEG+ojqB5BcVu2Rc80/jssCMZzSstJuSYg==",
+ "dependencies": [
+ "prosemirror-model",
+ "prosemirror-state",
+ "prosemirror-transform"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/prosemirror-view/-/prosemirror-view-1.41.6.tgz"
+ },
+ "proxy-addr@2.0.7": {
+ "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
+ "dependencies": [
+ "forwarded",
+ "ipaddr.js"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/proxy-addr/-/proxy-addr-2.0.7.tgz"
+ },
+ "punycode.js@2.3.1": {
+ "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==",
+ "tarball": "https://verdaccio.lossless.digital/punycode.js/-/punycode.js-2.3.1.tgz"
+ },
+ "punycode@1.4.1": {
+ "integrity": "c0d5a63b2718800ad8e1eb0fa5269c84dd41845e",
+ "tarball": "https://verdaccio.lossless.digital/punycode/-/punycode-1.4.1.tgz"
+ },
"punycode@2.3.1": {
"integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
"tarball": "https://verdaccio.lossless.digital/punycode/-/punycode-2.3.1.tgz"
},
+ "qs@6.15.0": {
+ "integrity": "sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ==",
+ "dependencies": [
+ "side-channel"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/qs/-/qs-6.15.0.tgz"
+ },
+ "randomatic@3.1.1": {
+ "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==",
+ "dependencies": [
+ "is-number",
+ "kind-of",
+ "math-random"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/randomatic/-/randomatic-3.1.1.tgz"
+ },
+ "range-parser@1.2.1": {
+ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
+ "tarball": "https://verdaccio.lossless.digital/range-parser/-/range-parser-1.2.1.tgz"
+ },
+ "raw-body@3.0.2": {
+ "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==",
+ "dependencies": [
+ "bytes",
+ "http-errors",
+ "iconv-lite@0.7.2",
+ "unpipe"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/raw-body/-/raw-body-3.0.2.tgz"
+ },
"readable-stream@3.6.2": {
"integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
"dependencies": [
@@ -3505,6 +5998,14 @@
],
"tarball": "https://verdaccio.lossless.digital/readable-stream/-/readable-stream-3.6.2.tgz"
},
+ "readdirp@5.0.0": {
+ "integrity": "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==",
+ "tarball": "https://verdaccio.lossless.digital/readdirp/-/readdirp-5.0.0.tgz"
+ },
+ "relateurl@0.2.7": {
+ "integrity": "54dbf377e51440aca90a4cd274600d3ff2d888a9",
+ "tarball": "https://verdaccio.lossless.digital/relateurl/-/relateurl-0.2.7.tgz"
+ },
"remark-frontmatter@5.0.0": {
"integrity": "sha512-XTFYvNASMe5iPN0719nPrdItC9aU0ssC4v14mH1BCi1u0n1gAocqcujWUrByftZTbLhRtiKRyjYTSIOcr69UVQ==",
"dependencies": [
@@ -3557,9 +6058,65 @@
],
"tarball": "https://verdaccio.lossless.digital/remark-stringify/-/remark-stringify-11.0.0.tgz"
},
- "require-directory@2.1.1": {
- "integrity": "8c64ad5fd30dab1c976e2344ffe7f792a6a6df42",
- "tarball": "https://verdaccio.lossless.digital/require-directory/-/require-directory-2.1.1.tgz"
+ "replace-buffer@1.2.1": {
+ "integrity": "sha512-ly3OKwKu+3T55DjP5PjIMzxgz9lFx6dQnBmAIxryZyRKl8f22juy12ShOyuq8WrQE5UlFOseZgQZDua0iF9DHw==",
+ "tarball": "https://verdaccio.lossless.digital/replace-buffer/-/replace-buffer-1.2.1.tgz"
+ },
+ "resolve-pkg-maps@1.0.0": {
+ "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
+ "tarball": "https://verdaccio.lossless.digital/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz"
+ },
+ "rimraf@3.0.2": {
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "dependencies": [
+ "glob@7.2.3"
+ ],
+ "bin": true,
+ "tarball": "https://verdaccio.lossless.digital/rimraf/-/rimraf-3.0.2.tgz"
+ },
+ "rolldown@1.0.0-beta.52": {
+ "integrity": "sha512-Hbnpljue+JhMJrlOjQ1ixp9me7sUec7OjFvS+A1Qm8k8Xyxmw3ZhxFu7LlSXW1s9AX3POE9W9o2oqCEeR5uDmg==",
+ "dependencies": [
+ "@oxc-project/types",
+ "@rolldown/pluginutils"
+ ],
+ "optionalDependencies": [
+ "@rolldown/binding-android-arm64",
+ "@rolldown/binding-darwin-arm64",
+ "@rolldown/binding-darwin-x64",
+ "@rolldown/binding-freebsd-x64",
+ "@rolldown/binding-linux-arm-gnueabihf",
+ "@rolldown/binding-linux-arm64-gnu",
+ "@rolldown/binding-linux-arm64-musl",
+ "@rolldown/binding-linux-x64-gnu",
+ "@rolldown/binding-linux-x64-musl",
+ "@rolldown/binding-openharmony-arm64",
+ "@rolldown/binding-wasm32-wasi",
+ "@rolldown/binding-win32-arm64-msvc",
+ "@rolldown/binding-win32-ia32-msvc",
+ "@rolldown/binding-win32-x64-msvc"
+ ],
+ "bin": true,
+ "tarball": "https://verdaccio.lossless.digital/rolldown/-/rolldown-1.0.0-beta.52.tgz"
+ },
+ "rope-sequence@1.3.4": {
+ "integrity": "sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==",
+ "tarball": "https://verdaccio.lossless.digital/rope-sequence/-/rope-sequence-1.3.4.tgz"
+ },
+ "router@2.2.0": {
+ "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==",
+ "dependencies": [
+ "debug@4.4.3",
+ "depd",
+ "is-promise",
+ "parseurl",
+ "path-to-regexp"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/router/-/router-2.2.0.tgz"
+ },
+ "run-async@3.0.0": {
+ "integrity": "sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==",
+ "tarball": "https://verdaccio.lossless.digital/run-async/-/run-async-3.0.0.tgz"
},
"rxjs@7.8.2": {
"integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==",
@@ -3572,6 +6129,10 @@
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
"tarball": "https://verdaccio.lossless.digital/safe-buffer/-/safe-buffer-5.2.1.tgz"
},
+ "safer-buffer@2.1.2": {
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+ "tarball": "https://verdaccio.lossless.digital/safer-buffer/-/safer-buffer-2.1.2.tgz"
+ },
"semver@6.3.1": {
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
"bin": true,
@@ -3582,6 +6143,33 @@
"bin": true,
"tarball": "https://verdaccio.lossless.digital/semver/-/semver-7.7.4.tgz"
},
+ "send@1.2.1": {
+ "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==",
+ "dependencies": [
+ "debug@4.4.3",
+ "encodeurl",
+ "escape-html",
+ "etag",
+ "fresh",
+ "http-errors",
+ "mime-types@3.0.2",
+ "ms",
+ "on-finished",
+ "range-parser",
+ "statuses"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/send/-/send-1.2.1.tgz"
+ },
+ "serve-static@2.2.1": {
+ "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==",
+ "dependencies": [
+ "encodeurl",
+ "escape-html",
+ "parseurl",
+ "send"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/serve-static/-/serve-static-2.2.1.tgz"
+ },
"set-function-length@1.2.2": {
"integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
"dependencies": [
@@ -3594,6 +6182,10 @@
],
"tarball": "https://verdaccio.lossless.digital/set-function-length/-/set-function-length-1.2.2.tgz"
},
+ "setprototypeof@1.2.0": {
+ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
+ "tarball": "https://verdaccio.lossless.digital/setprototypeof/-/setprototypeof-1.2.0.tgz"
+ },
"shebang-command@2.0.0": {
"integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
"dependencies": [
@@ -3605,14 +6197,97 @@
"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
"tarball": "https://verdaccio.lossless.digital/shebang-regex/-/shebang-regex-3.0.0.tgz"
},
- "shell-quote@1.8.3": {
- "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==",
- "tarball": "https://verdaccio.lossless.digital/shell-quote/-/shell-quote-1.8.3.tgz"
+ "side-channel-list@1.0.0": {
+ "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==",
+ "dependencies": [
+ "es-errors",
+ "object-inspect"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/side-channel-list/-/side-channel-list-1.0.0.tgz"
+ },
+ "side-channel-map@1.0.1": {
+ "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",
+ "dependencies": [
+ "call-bound",
+ "es-errors",
+ "get-intrinsic",
+ "object-inspect"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/side-channel-map/-/side-channel-map-1.0.1.tgz"
+ },
+ "side-channel-weakmap@1.0.2": {
+ "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",
+ "dependencies": [
+ "call-bound",
+ "es-errors",
+ "get-intrinsic",
+ "object-inspect",
+ "side-channel-map"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz"
+ },
+ "side-channel@1.1.0": {
+ "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==",
+ "dependencies": [
+ "es-errors",
+ "object-inspect",
+ "side-channel-list",
+ "side-channel-map",
+ "side-channel-weakmap"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/side-channel/-/side-channel-1.1.0.tgz"
+ },
+ "signal-exit@3.0.7": {
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
+ "tarball": "https://verdaccio.lossless.digital/signal-exit/-/signal-exit-3.0.7.tgz"
},
"signal-exit@4.1.0": {
"integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
"tarball": "https://verdaccio.lossless.digital/signal-exit/-/signal-exit-4.1.0.tgz"
},
+ "socket.io-adapter@2.5.6": {
+ "integrity": "sha512-DkkO/dz7MGln0dHn5bmN3pPy+JmywNICWrJqVWiVOyvXjWQFIv9c2h24JrQLLFJ2aQVQf/Cvl1vblnd4r2apLQ==",
+ "dependencies": [
+ "debug@4.4.3",
+ "ws@8.18.3"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/socket.io-adapter/-/socket.io-adapter-2.5.6.tgz"
+ },
+ "socket.io-client@4.8.1": {
+ "integrity": "sha512-hJVXfu3E28NmzGk8o1sHhN3om52tRvwYeidbj7xKy2eIIse5IoKX3USlS6Tqt3BHAtflLIkCQBkzVrEEfWUyYQ==",
+ "dependencies": [
+ "@socket.io/component-emitter",
+ "debug@4.3.7",
+ "engine.io-client",
+ "socket.io-parser"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/socket.io-client/-/socket.io-client-4.8.1.tgz"
+ },
+ "socket.io-parser@4.2.5": {
+ "integrity": "sha512-bPMmpy/5WWKHea5Y/jYAP6k74A+hvmRCQaJuJB6I/ML5JZq/KfNieUVo/3Mh7SAqn7TyFdIo6wqYHInG1MU1bQ==",
+ "dependencies": [
+ "@socket.io/component-emitter",
+ "debug@4.4.3"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/socket.io-parser/-/socket.io-parser-4.2.5.tgz"
+ },
+ "socket.io@4.8.1": {
+ "integrity": "sha512-oZ7iUCxph8WYRHHcjBEc9unw3adt5CmSNlppj/5Q4k2RIrhl8Z5yY2Xr4j9zj0+wzVZ0bxmYoGSzKJnRl6A4yg==",
+ "dependencies": [
+ "accepts@1.3.8",
+ "base64id",
+ "cors",
+ "debug@4.3.7",
+ "engine.io",
+ "socket.io-adapter",
+ "socket.io-parser"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/socket.io/-/socket.io-4.8.1.tgz"
+ },
+ "source-map@0.6.1": {
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "tarball": "https://verdaccio.lossless.digital/source-map/-/source-map-0.6.1.tgz"
+ },
"space-separated-tokens@2.0.2": {
"integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==",
"tarball": "https://verdaccio.lossless.digital/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz"
@@ -3624,10 +6299,26 @@
],
"tarball": "https://verdaccio.lossless.digital/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz"
},
+ "spawn-wrap@2.0.0": {
+ "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==",
+ "dependencies": [
+ "foreground-child@2.0.0",
+ "is-windows",
+ "make-dir",
+ "rimraf",
+ "signal-exit@3.0.7",
+ "which@2.0.2"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/spawn-wrap/-/spawn-wrap-2.0.0.tgz"
+ },
"sprintf-js@1.0.3": {
"integrity": "04e6926f662895354f3dd015203633b857297e2c",
"tarball": "https://verdaccio.lossless.digital/sprintf-js/-/sprintf-js-1.0.3.tgz"
},
+ "statuses@2.0.2": {
+ "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==",
+ "tarball": "https://verdaccio.lossless.digital/statuses/-/statuses-2.0.2.tgz"
+ },
"streamx@2.25.0": {
"integrity": "sha512-0nQuG6jf1w+wddNEEXCF4nTg3LtufWINB5eFEN+5TNZW7KWJp6x87+JFL43vaAUPyCfH1wID+mNVyW6OHtFamg==",
"dependencies": [
@@ -3668,6 +6359,14 @@
],
"tarball": "https://verdaccio.lossless.digital/strip-ansi/-/strip-ansi-6.0.1.tgz"
},
+ "strip-indent@4.1.1": {
+ "integrity": "sha512-SlyRoSkdh1dYP0PzclLE7r0M9sgbFKKMFXpFRUMNuKhQSbC6VQIGzq3E0qsfvGJaUFJPGv6Ws1NZ/haTAjfbMA==",
+ "tarball": "https://verdaccio.lossless.digital/strip-indent/-/strip-indent-4.1.1.tgz"
+ },
+ "strnum@1.1.2": {
+ "integrity": "sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA==",
+ "tarball": "https://verdaccio.lossless.digital/strnum/-/strnum-1.1.2.tgz"
+ },
"strnum@2.2.1": {
"integrity": "sha512-BwRvNd5/QoAtyW1na1y1LsJGQNvRlkde6Q/ipqqEaivoMdV+B1OMOTVdwR+N/cwVUcIt9PYyHmV8HyexCZSupg==",
"tarball": "https://verdaccio.lossless.digital/strnum/-/strnum-2.2.1.tgz"
@@ -3680,20 +6379,6 @@
],
"tarball": "https://verdaccio.lossless.digital/strtok3/-/strtok3-9.1.1.tgz"
},
- "supports-color@7.2.0": {
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dependencies": [
- "has-flag"
- ],
- "tarball": "https://verdaccio.lossless.digital/supports-color/-/supports-color-7.2.0.tgz"
- },
- "supports-color@8.1.1": {
- "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
- "dependencies": [
- "has-flag"
- ],
- "tarball": "https://verdaccio.lossless.digital/supports-color/-/supports-color-8.1.1.tgz"
- },
"sweet-scroll@4.0.0": {
"integrity": "sha512-mR6fRsAQANtm3zpzhUE73KAOt2aT4ZsWzNSggiEsSqdO6Zh4gM7ioJG81EngrZEl0XAc3ZvzEfhxggOoEBc8jA==",
"tarball": "https://verdaccio.lossless.digital/sweet-scroll/-/sweet-scroll-4.0.0.tgz"
@@ -3730,6 +6415,19 @@
],
"tarball": "https://verdaccio.lossless.digital/text-decoder/-/text-decoder-1.2.7.tgz"
},
+ "threads@1.7.0": {
+ "integrity": "sha512-Mx5NBSHX3sQYR6iI9VYbgHKBLisyB+xROCBGjjWm1O9wb9vfLxdaGtmT/KCjUqMsSNW6nERzCW3T6H43LqjDZQ==",
+ "dependencies": [
+ "callsites",
+ "debug@4.4.3",
+ "is-observable",
+ "observable-fns"
+ ],
+ "optionalDependencies": [
+ "tiny-worker"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/threads/-/threads-1.7.0.tgz"
+ },
"through2@4.0.2": {
"integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==",
"dependencies": [
@@ -3737,6 +6435,24 @@
],
"tarball": "https://verdaccio.lossless.digital/through2/-/through2-4.0.2.tgz"
},
+ "tiny-worker@2.3.0": {
+ "integrity": "sha512-pJ70wq5EAqTAEl9IkGzA+fN0836rycEuz2Cn6yeZ6FRzlVS5IDOkFHpIoEsksPRQV34GDqXm65+OlnZqUSyK2g==",
+ "dependencies": [
+ "esm"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/tiny-worker/-/tiny-worker-2.3.0.tgz"
+ },
+ "tmp@0.0.33": {
+ "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
+ "dependencies": [
+ "os-tmpdir"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/tmp/-/tmp-0.0.33.tgz"
+ },
+ "toidentifier@1.0.1": {
+ "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
+ "tarball": "https://verdaccio.lossless.digital/toidentifier/-/toidentifier-1.0.1.tgz"
+ },
"token-types@6.1.2": {
"integrity": "sha512-dRXchy+C0IgK8WPC6xvCHFRIWYUbqqdEIKPaKo/AcTUNzwLTK6AH7RjdLWsEZcAN/TBdtfUw3PYEgPr5VPr6ww==",
"dependencies": [
@@ -3749,15 +6465,10 @@
"tr46@5.1.1": {
"integrity": "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==",
"dependencies": [
- "punycode"
+ "punycode@2.3.1"
],
"tarball": "https://verdaccio.lossless.digital/tr46/-/tr46-5.1.1.tgz"
},
- "tree-kill@1.2.2": {
- "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==",
- "bin": true,
- "tarball": "https://verdaccio.lossless.digital/tree-kill/-/tree-kill-1.2.2.tgz"
- },
"trim-lines@3.0.1": {
"integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==",
"tarball": "https://verdaccio.lossless.digital/trim-lines/-/trim-lines-3.0.1.tgz"
@@ -3770,6 +6481,18 @@
"integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
"tarball": "https://verdaccio.lossless.digital/tslib/-/tslib-2.8.1.tgz"
},
+ "tsx@4.21.0": {
+ "integrity": "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==",
+ "dependencies": [
+ "esbuild",
+ "get-tsconfig"
+ ],
+ "optionalDependencies": [
+ "fsevents"
+ ],
+ "bin": true,
+ "tarball": "https://verdaccio.lossless.digital/tsx/-/tsx-4.21.0.tgz"
+ },
"turndown-plugin-gfm@1.0.2": {
"integrity": "sha512-vwz9tfvF7XN/jE0dGoBei3FXWuvll78ohzCZQuOb+ZjWrs3a0XhQVomJEb2Qh4VHTPNRO4GPZh0V7VRbiWwkRg==",
"tarball": "https://verdaccio.lossless.digital/turndown-plugin-gfm/-/turndown-plugin-gfm-1.0.2.tgz"
@@ -3781,6 +6504,14 @@
],
"tarball": "https://verdaccio.lossless.digital/turndown/-/turndown-7.2.2.tgz"
},
+ "type-fest@0.21.3": {
+ "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
+ "tarball": "https://verdaccio.lossless.digital/type-fest/-/type-fest-0.21.3.tgz"
+ },
+ "type-fest@2.19.0": {
+ "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==",
+ "tarball": "https://verdaccio.lossless.digital/type-fest/-/type-fest-2.19.0.tgz"
+ },
"type-fest@4.41.0": {
"integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==",
"tarball": "https://verdaccio.lossless.digital/type-fest/-/type-fest-4.41.0.tgz"
@@ -3792,10 +6523,37 @@
],
"tarball": "https://verdaccio.lossless.digital/type-fest/-/type-fest-5.5.0.tgz"
},
+ "type-is@2.0.1": {
+ "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==",
+ "dependencies": [
+ "content-type",
+ "media-typer",
+ "mime-types@3.0.2"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/type-is/-/type-is-2.0.1.tgz"
+ },
+ "typescript@5.9.3": {
+ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
+ "bin": true,
+ "tarball": "https://verdaccio.lossless.digital/typescript/-/typescript-5.9.3.tgz"
+ },
+ "uc.micro@2.1.0": {
+ "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==",
+ "tarball": "https://verdaccio.lossless.digital/uc.micro/-/uc.micro-2.1.0.tgz"
+ },
+ "uglify-js@3.19.3": {
+ "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==",
+ "bin": true,
+ "tarball": "https://verdaccio.lossless.digital/uglify-js/-/uglify-js-3.19.3.tgz"
+ },
"uint8array-extras@1.5.0": {
"integrity": "sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==",
"tarball": "https://verdaccio.lossless.digital/uint8array-extras/-/uint8array-extras-1.5.0.tgz"
},
+ "undici-types@6.21.0": {
+ "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
+ "tarball": "https://verdaccio.lossless.digital/undici-types/-/undici-types-6.21.0.tgz"
+ },
"undici-types@7.10.0": {
"integrity": "sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==",
"tarball": "https://verdaccio.lossless.digital/undici-types/-/undici-types-7.10.0.tgz"
@@ -3859,6 +6617,22 @@
"integrity": "sha512-IViSAm8Z3sRBYA+9wc0fLQmU9Nrxb16rcDmIiR6Y9LJSZzI7QY5QsDhqPpKOjAn0O9/kfK1TfNEMMAGPTIraPw==",
"tarball": "https://verdaccio.lossless.digital/unload/-/unload-2.4.1.tgz"
},
+ "unpipe@1.0.0": {
+ "integrity": "b2bf4ee8514aae6165b4817829d21b2ef49904ec",
+ "tarball": "https://verdaccio.lossless.digital/unpipe/-/unpipe-1.0.0.tgz"
+ },
+ "upper-case@1.1.3": {
+ "integrity": "f6b4501c2ec4cdd26ba78be7222961de77621598",
+ "tarball": "https://verdaccio.lossless.digital/upper-case/-/upper-case-1.1.3.tgz"
+ },
+ "url@0.11.4": {
+ "integrity": "sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==",
+ "dependencies": [
+ "punycode@1.4.1",
+ "qs"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/url/-/url-0.11.4.tgz"
+ },
"util-deprecate@1.0.2": {
"integrity": "450d4dc9fa70de732762fbd2d4a28981419a0ccf",
"tarball": "https://verdaccio.lossless.digital/util-deprecate/-/util-deprecate-1.0.2.tgz"
@@ -3868,6 +6642,10 @@
"bin": true,
"tarball": "https://verdaccio.lossless.digital/uuid/-/uuid-9.0.1.tgz"
},
+ "vary@1.1.2": {
+ "integrity": "2299f02c6ded30d4a5961b0b9f74524a18f634fc",
+ "tarball": "https://verdaccio.lossless.digital/vary/-/vary-1.1.2.tgz"
+ },
"vfile-message@4.0.3": {
"integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==",
"dependencies": [
@@ -3884,10 +6662,18 @@
],
"tarball": "https://verdaccio.lossless.digital/vfile/-/vfile-6.0.3.tgz"
},
+ "w3c-keyname@2.2.8": {
+ "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==",
+ "tarball": "https://verdaccio.lossless.digital/w3c-keyname/-/w3c-keyname-2.2.8.tgz"
+ },
"webidl-conversions@7.0.0": {
"integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==",
"tarball": "https://verdaccio.lossless.digital/webidl-conversions/-/webidl-conversions-7.0.0.tgz"
},
+ "whatwg-mimetype@3.0.0": {
+ "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==",
+ "tarball": "https://verdaccio.lossless.digital/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz"
+ },
"whatwg-url@14.2.0": {
"integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==",
"dependencies": [
@@ -3912,40 +6698,51 @@
"bin": true,
"tarball": "https://verdaccio.lossless.digital/which/-/which-6.0.1.tgz"
},
- "wrap-ansi@7.0.0": {
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "wrap-ansi@6.2.0": {
+ "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
"dependencies": [
"ansi-styles",
"string-width",
"strip-ansi"
],
- "tarball": "https://verdaccio.lossless.digital/wrap-ansi/-/wrap-ansi-7.0.0.tgz"
+ "tarball": "https://verdaccio.lossless.digital/wrap-ansi/-/wrap-ansi-6.2.0.tgz"
},
- "y18n@5.0.8": {
- "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
- "tarball": "https://verdaccio.lossless.digital/y18n/-/y18n-5.0.8.tgz"
+ "wrappy@1.0.2": {
+ "integrity": "b5243d8f3ec1aa35f1364605bc0d1036e30ab69f",
+ "tarball": "https://verdaccio.lossless.digital/wrappy/-/wrappy-1.0.2.tgz"
},
- "yargs-parser@21.1.1": {
- "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
- "tarball": "https://verdaccio.lossless.digital/yargs-parser/-/yargs-parser-21.1.1.tgz"
+ "ws@8.17.1": {
+ "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==",
+ "tarball": "https://verdaccio.lossless.digital/ws/-/ws-8.17.1.tgz"
+ },
+ "ws@8.18.3": {
+ "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==",
+ "tarball": "https://verdaccio.lossless.digital/ws/-/ws-8.18.3.tgz"
+ },
+ "xmlhttprequest-ssl@2.1.2": {
+ "integrity": "sha512-TEU+nJVUUnA4CYJFLvK5X9AOeH4KvDvhIfm0vV1GaQRtchnG0hgK5p8hw/xjv8cunWYCsiPCSDzObPyhEwq3KQ==",
+ "tarball": "https://verdaccio.lossless.digital/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.1.2.tgz"
+ },
+ "xterm-addon-fit@0.8.0_xterm@5.3.0": {
+ "integrity": "sha512-yj3Np7XlvxxhYF/EJ7p3KHaMt6OdwQ+HDu573Vx1lRXsVxOcnVJs51RgjZOouIZOczTsskaS+CpXspK81/DLqw==",
+ "dependencies": [
+ "xterm"
+ ],
+ "tarball": "https://verdaccio.lossless.digital/xterm-addon-fit/-/xterm-addon-fit-0.8.0.tgz"
+ },
+ "xterm@5.3.0": {
+ "integrity": "sha512-8QqjlekLUFTrU6x7xck1MsPzPA571K5zNqWm0M0oroYEWVOptZ0+ubQSkQ3uxIEhcIHRujJy6emDWX4A7qyFzg==",
+ "tarball": "https://verdaccio.lossless.digital/xterm/-/xterm-5.3.0.tgz"
+ },
+ "yaml@2.8.2": {
+ "integrity": "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==",
+ "bin": true,
+ "tarball": "https://verdaccio.lossless.digital/yaml/-/yaml-2.8.2.tgz"
},
"yargs-parser@22.0.0": {
"integrity": "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==",
"tarball": "https://verdaccio.lossless.digital/yargs-parser/-/yargs-parser-22.0.0.tgz"
},
- "yargs@17.7.2": {
- "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
- "dependencies": [
- "cliui",
- "escalade",
- "get-caller-file",
- "require-directory",
- "string-width",
- "y18n",
- "yargs-parser@21.1.1"
- ],
- "tarball": "https://verdaccio.lossless.digital/yargs/-/yargs-17.7.2.tgz"
- },
"yauzl@3.2.1": {
"integrity": "sha512-k1isifdbpNSFEHFJ1ZY4YDewv0IH9FR61lDetaRMD3j2ae3bIXGV+7c+LHCqtQGofSd8PIyV4X6+dHMAnSr60A==",
"dependencies": [
@@ -3954,6 +6751,10 @@
],
"tarball": "https://verdaccio.lossless.digital/yauzl/-/yauzl-3.2.1.tgz"
},
+ "yoctocolors-cjs@2.1.3": {
+ "integrity": "sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==",
+ "tarball": "https://verdaccio.lossless.digital/yoctocolors-cjs/-/yoctocolors-cjs-2.1.3.tgz"
+ },
"zwitch@2.0.4": {
"integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==",
"tarball": "https://verdaccio.lossless.digital/zwitch/-/zwitch-2.0.4.tgz"
@@ -3964,6 +6765,9 @@
"jsr:@std/fs@1",
"jsr:@std/http@1",
"jsr:@std/path@1",
+ "npm:@api.global/typedrequest-interfaces@^3.0.19",
+ "npm:@api.global/typedrequest@^3.1.10",
+ "npm:@api.global/typedserver@^3.0.53",
"npm:@push.rocks/qenv@^6.1.3",
"npm:@push.rocks/smartbucket@^4.5.1",
"npm:@push.rocks/smartcli@^4.0.20",
@@ -3971,6 +6775,7 @@
"npm:@push.rocks/smartdata@^7.1.0",
"npm:@push.rocks/smartdelay@^3.0.5",
"npm:@push.rocks/smartenv@6",
+ "npm:@push.rocks/smartguard@^3.1.0",
"npm:@push.rocks/smartjwt@^2.2.1",
"npm:@push.rocks/smartlog@^3.2.1",
"npm:@push.rocks/smartpath@6",
@@ -3983,8 +6788,15 @@
],
"packageJson": {
"dependencies": [
+ "npm:@api.global/typedrequest-interfaces@^3.0.19",
+ "npm:@api.global/typedrequest@^3.1.10",
+ "npm:@api.global/typedserver@^8.4.2",
+ "npm:@design.estate/dees-catalog@^3.43.0",
+ "npm:@design.estate/dees-element@^2.1.6",
+ "npm:@git.zone/tsbundle@^2.8.3",
"npm:@git.zone/tsdeno@^1.2.0",
- "npm:concurrently@^9.1.2"
+ "npm:@git.zone/tswatch@^3.1.0",
+ "npm:@push.rocks/smartguard@^3.1.0"
]
}
}
diff --git a/design-system.md b/design-system.md
index 3368f8e..9dd05d1 100644
--- a/design-system.md
+++ b/design-system.md
@@ -1,37 +1,38 @@
# Stack.Gallery Design System
-Bloomberg terminal-inspired aesthetic with dark theme, sharp corners, and orange/green accent colors.
+Bloomberg terminal-inspired aesthetic with dark theme, sharp corners, and orange/green accent
+colors.
## Colors (HSL)
### Dark Theme (Default)
-| Token | HSL | Hex | Usage |
-|--------------------|---------------|---------|------------------------------------|
-| background | 0 0% 0% | #000000 | Page background |
-| foreground | 0 0% 100% | #FFFFFF | Primary text |
-| primary | 33 100% 50% | #FF8000 | Bloomberg orange, CTAs, highlights |
-| primary-foreground | 0 0% 0% | #000000 | Text on primary buttons |
-| accent | 142 71% 45% | #22C55E | Terminal green, success states |
-| accent-foreground | 0 0% 0% | #000000 | Text on accent |
-| muted | 0 0% 8% | #141414 | Subtle backgrounds |
-| muted-foreground | 0 0% 55% | #8C8C8C | Secondary text, labels |
-| card | 0 0% 4% | #0A0A0A | Card backgrounds |
-| border | 0 0% 15% | #262626 | All borders, dividers |
-| destructive | 0 84% 60% | #EF4444 | Errors, terminal red dots |
+| Token | HSL | Hex | Usage |
+| ------------------ | ----------- | ------- | ---------------------------------- |
+| background | 0 0% 0% | #000000 | Page background |
+| foreground | 0 0% 100% | #FFFFFF | Primary text |
+| primary | 33 100% 50% | #FF8000 | Bloomberg orange, CTAs, highlights |
+| primary-foreground | 0 0% 0% | #000000 | Text on primary buttons |
+| accent | 142 71% 45% | #22C55E | Terminal green, success states |
+| accent-foreground | 0 0% 0% | #000000 | Text on accent |
+| muted | 0 0% 8% | #141414 | Subtle backgrounds |
+| muted-foreground | 0 0% 55% | #8C8C8C | Secondary text, labels |
+| card | 0 0% 4% | #0A0A0A | Card backgrounds |
+| border | 0 0% 15% | #262626 | All borders, dividers |
+| destructive | 0 84% 60% | #EF4444 | Errors, terminal red dots |
### Light Theme
-| Token | HSL | Hex |
-|------------------|---------------|---------|
-| background | 0 0% 100% | #FFFFFF |
-| foreground | 0 0% 5% | #0D0D0D |
-| primary | 33 100% 45% | #E67300 |
-| accent | 142 71% 35% | #16A34A |
-| muted | 0 0% 96% | #F5F5F5 |
-| muted-foreground | 0 0% 40% | #666666 |
-| card | 0 0% 98% | #FAFAFA |
-| border | 0 0% 90% | #E5E5E5 |
+| Token | HSL | Hex |
+| ---------------- | ----------- | ------- |
+| background | 0 0% 100% | #FFFFFF |
+| foreground | 0 0% 5% | #0D0D0D |
+| primary | 33 100% 45% | #E67300 |
+| accent | 142 71% 35% | #16A34A |
+| muted | 0 0% 96% | #F5F5F5 |
+| muted-foreground | 0 0% 40% | #666666 |
+| card | 0 0% 98% | #FAFAFA |
+| border | 0 0% 90% | #E5E5E5 |
---
@@ -52,7 +53,7 @@ Bloomberg terminal-inspired aesthetic with dark theme, sharp corners, and orange
### Font Sizes
| Element | Size | Weight | Letter Spacing |
-|-----------------|------------------------|--------|-----------------|
+| --------------- | ---------------------- | ------ | --------------- |
| H1 (Hero) | 3rem / 4rem (md) | 700 | -0.02em (tight) |
| H2 (Section) | 1.5rem / 1.875rem (md) | 700 | -0.02em |
| H3 (Card title) | 0.875rem | 600 | normal |
@@ -72,7 +73,7 @@ Bloomberg terminal-inspired aesthetic with dark theme, sharp corners, and orange
### Border Radius
```css
---radius: 0px; /* All elements: sharp corners */
+--radius: 0px; /* All elements: sharp corners */
```
### Container
diff --git a/html/index.html b/html/index.html
new file mode 100644
index 0000000..dadb014
--- /dev/null
+++ b/html/index.html
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+ Stack.Gallery Registry
+
+
+
+
+
+
+
+
+
diff --git a/npmextra.json b/npmextra.json
index 2dcd0bd..4269968 100644
--- a/npmextra.json
+++ b/npmextra.json
@@ -64,5 +64,40 @@
}
]
},
- "@ship.zone/szci": {}
-}
\ No newline at end of file
+ "@ship.zone/szci": {},
+ "@git.zone/tsbundle": {
+ "bundles": [
+ {
+ "from": "./ts_web/index.ts",
+ "to": "./ts_bundled/bundle.ts",
+ "outputMode": "base64ts",
+ "bundler": "esbuild",
+ "production": true,
+ "includeFiles": [{"from": "./html/index.html", "to": "index.html"}]
+ }
+ ]
+ },
+ "@git.zone/tswatch": {
+ "bundles": [
+ {
+ "from": "./ts_web/index.ts",
+ "to": "./ts_bundled/bundle.ts",
+ "outputMode": "base64ts",
+ "bundler": "esbuild",
+ "production": true,
+ "watchPatterns": ["./ts_web/**/*", "./html/**/*"],
+ "includeFiles": [{"from": "./html/index.html", "to": "index.html"}]
+ }
+ ],
+ "watchers": [
+ {
+ "name": "backend",
+ "watch": ["./ts/**/*", "./ts_interfaces/**/*", "./ts_bundled/**/*"],
+ "command": "deno run --allow-all mod.ts server --ephemeral",
+ "restart": true,
+ "debounce": 500,
+ "runOnStart": true
+ }
+ ]
+ }
+}
diff --git a/package.json b/package.json
index 5b492fc..7e72000 100644
--- a/package.json
+++ b/package.json
@@ -7,7 +7,7 @@
"scripts": {
"start": "deno run --allow-all mod.ts server",
"dev": "deno run --allow-all --watch mod.ts server --ephemeral",
- "watch": "concurrently --kill-others --names \"BACKEND,UI,BUNDLER\" --prefix-colors \"cyan,magenta,yellow\" \"deno run --allow-all --watch mod.ts server --ephemeral\" \"cd ui && pnpm run watch\" \"deno task bundle-ui:watch\"",
+ "watch": "tswatch",
"build": "deno task check",
"test": "deno task test",
"lint": "deno task lint",
@@ -26,9 +26,19 @@
],
"author": "Stack.Gallery",
"license": "MIT",
+ "dependencies": {
+ "@api.global/typedrequest": "^3.1.10",
+ "@api.global/typedrequest-interfaces": "^3.0.19",
+ "@api.global/typedserver": "^8.4.2",
+ "@design.estate/dees-catalog": "^3.43.0",
+ "@design.estate/dees-element": "^2.1.6",
+ "@push.rocks/smartguard": "^3.1.0",
+ "@stack.gallery/catalog": "file:../catalog"
+ },
"devDependencies": {
+ "@git.zone/tsbundle": "^2.8.3",
"@git.zone/tsdeno": "^1.2.0",
- "concurrently": "^9.1.2"
+ "@git.zone/tswatch": "^3.1.0"
},
"packageManager": "pnpm@10.18.1+sha512.77a884a165cbba2d8d1c19e3b4880eee6d2fcabd0d879121e282196b80042351d5eb3ca0935fa599da1dc51265cc68816ad2bddd2a2de5ea9fdf92adbec7cd34"
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 591acf6..c464b4e 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -7,22 +7,58 @@ settings:
importers:
.:
+ dependencies:
+ '@api.global/typedrequest':
+ specifier: ^3.1.10
+ version: 3.3.0
+ '@api.global/typedrequest-interfaces':
+ specifier: ^3.0.19
+ version: 3.0.19
+ '@api.global/typedserver':
+ specifier: ^8.4.2
+ version: 8.4.2(@tiptap/pm@2.27.2)
+ '@design.estate/dees-catalog':
+ specifier: ^3.43.0
+ version: 3.49.0(@tiptap/pm@2.27.2)
+ '@design.estate/dees-element':
+ specifier: ^2.1.6
+ version: 2.2.3
+ '@push.rocks/smartguard':
+ specifier: ^3.1.0
+ version: 3.1.0
+ '@stack.gallery/catalog':
+ specifier: file:../catalog
+ version: file:../catalog(@tiptap/pm@2.27.2)
devDependencies:
+ '@git.zone/tsbundle':
+ specifier: ^2.8.3
+ version: 2.9.1
'@git.zone/tsdeno':
specifier: ^1.2.0
version: 1.2.0
- concurrently:
- specifier: ^9.1.2
- version: 9.2.1
+ '@git.zone/tswatch':
+ specifier: ^3.1.0
+ version: 3.3.0(@tiptap/pm@2.27.2)
packages:
+ '@api.global/typedrequest-interfaces@2.0.2':
+ resolution: {integrity: sha512-D+mkr4IiUZ/eUgrdp5jXjBKOW/iuMcl0z2ZLQsLLypKX/psFGD3viZJ58FNRa+/1OSM38JS5wFyoWl8oPEFLrw==}
+
'@api.global/typedrequest-interfaces@3.0.19':
resolution: {integrity: sha512-uuHUXJeOy/inWSDrwD0Cwax2rovpxYllDhM2RWh+6mVpQuNmZ3uw6IVg6dA2G1rOe24Ebs+Y9SzEogo+jYN7vw==}
'@api.global/typedrequest@3.3.0':
resolution: {integrity: sha512-Jwobqla+9k2IBG0duwrCFtc6GU6wsvHS3f0gJJsxTrpapylBW1YSF7NnGHPGs7F9hbATsO6IoUBpR2ScoKyGJA==}
+ '@api.global/typedserver@8.4.2':
+ resolution: {integrity: sha512-eESOcWvrbqkshR4s4OeTX1AK74bNCeGgiRebKgjxIzJ+b0+rkPQyn2DOaMtyXjFZRNgRHyytLm5Iqj5fdazeqw==}
+
+ '@api.global/typedsocket@4.1.2':
+ resolution: {integrity: sha512-fZFuJY9ucFCICjF4wi6OvK8drsv6UcwVVsfamOT1HxFj7OBOYw6QHOceQ+cAQ8IrWbX817sf8gzlesl+jlG8JA==}
+ peerDependencies:
+ '@push.rocks/smartserve': '>=1.1.0'
+
'@babel/runtime@7.28.6':
resolution: {integrity: sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==}
engines: {node: '>=6.9.0'}
@@ -30,9 +66,18 @@ packages:
'@borewit/text-codec@0.2.2':
resolution: {integrity: sha512-DDaRehssg1aNrH4+2hnj1B7vnUGEjU6OIlyRdkMd0aUdIUvKXrJfXsy8LVtXAy7DRvYVluWbMspsRhz2lcW0mQ==}
+ '@cfworker/json-schema@4.1.1':
+ resolution: {integrity: sha512-gAmrUZSGtKc3AiBL71iNWxDsyUC5uMaKKGdvzYsBoTW/xi42JQHl7eKV2OYzCUqvc+D2RCcf7EXY2iCyFIk6og==}
+
+ '@cloudflare/workers-types@4.20260317.1':
+ resolution: {integrity: sha512-+G4eVwyCpm8Au1ex8vQBCuA9wnwqetz4tPNRoB/53qvktERWBRMQnrtvC1k584yRE3emMThtuY0gWshvSJ++PQ==}
+
'@configvault.io/interfaces@1.0.17':
resolution: {integrity: sha512-bEcCUR2VBDJsTin8HQh8Uw/mlYl2v8A3jMIaQ+MTB9Hrqd6CZL2dL7iJdWyFl/3EIX+LDxWFR+Oq7liIq7w+1Q==}
+ '@design.estate/dees-catalog@3.49.0':
+ resolution: {integrity: sha512-ZtHroyBZekv+jVSDmtGOzoGVI+EA55kd5EcSsNmUByxN3UMcFFeg62QRNzm3RHpz01u1Zfynm0bN9E44pk6FDQ==}
+
'@design.estate/dees-comms@1.0.30':
resolution: {integrity: sha512-KchMlklJfKAjQiJiR0xmofXtQ27VgZtBIxcMwPE9d+h3jJRv+lPZxzBQVOM0eyM0uS44S5vJMZ11IeV4uDXSHg==}
@@ -42,10 +87,270 @@ packages:
'@design.estate/dees-element@2.2.3':
resolution: {integrity: sha512-MpAvJPrJDTDad8hUtdOzMgMFRE7n84O7INhvSlkTTLB3b84j8EKjwfUCMErGAo7Bq5zfw4LG7NnKhLYXXXjkXA==}
+ '@design.estate/dees-wcctools@3.8.0':
+ resolution: {integrity: sha512-CC14iVKUrguzD9jIrdPBd9fZ4egVJEZMxl5y8iy0l7WLumeoYvGsoXj5INVkRPLRVLqziIdi4Je1hXqHt2NU+g==}
+
+ '@emnapi/core@1.9.1':
+ resolution: {integrity: sha512-mukuNALVsoix/w1BJwFzwXBN/dHeejQtuVzcDsfOEsdpCumXb/E9j8w11h5S54tT1xhifGfbbSm/ICrObRb3KA==}
+
+ '@emnapi/runtime@1.9.1':
+ resolution: {integrity: sha512-VYi5+ZVLhpgK4hQ0TAjiQiZ6ol0oe4mBx7mVv7IflsiEp0OWoVsp/+f9Vc1hOhE0TtkORVrI1GvzyreqpgWtkA==}
+
+ '@emnapi/wasi-threads@1.2.0':
+ resolution: {integrity: sha512-N10dEJNSsUx41Z6pZsXU8FjPjpBEplgH24sfkmITrBED1/U2Esum9F3lfLrMjKHHjmi557zQn7kR9R+XWXu5Rg==}
+
+ '@esbuild/aix-ppc64@0.27.4':
+ resolution: {integrity: sha512-cQPwL2mp2nSmHHJlCyoXgHGhbEPMrEEU5xhkcy3Hs/O7nGZqEpZ2sUtLaL9MORLtDfRvVl2/3PAuEkYZH0Ty8Q==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [aix]
+
+ '@esbuild/android-arm64@0.27.4':
+ resolution: {integrity: sha512-gdLscB7v75wRfu7QSm/zg6Rx29VLdy9eTr2t44sfTW7CxwAtQghZ4ZnqHk3/ogz7xao0QAgrkradbBzcqFPasw==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [android]
+
+ '@esbuild/android-arm@0.27.4':
+ resolution: {integrity: sha512-X9bUgvxiC8CHAGKYufLIHGXPJWnr0OCdR0anD2e21vdvgCI8lIfqFbnoeOz7lBjdrAGUhqLZLcQo6MLhTO2DKQ==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [android]
+
+ '@esbuild/android-x64@0.27.4':
+ resolution: {integrity: sha512-PzPFnBNVF292sfpfhiyiXCGSn9HZg5BcAz+ivBuSsl6Rk4ga1oEXAamhOXRFyMcjwr2DVtm40G65N3GLeH1Lvw==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [android]
+
+ '@esbuild/darwin-arm64@0.27.4':
+ resolution: {integrity: sha512-b7xaGIwdJlht8ZFCvMkpDN6uiSmnxxK56N2GDTMYPr2/gzvfdQN8rTfBsvVKmIVY/X7EM+/hJKEIbbHs9oA4tQ==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@esbuild/darwin-x64@0.27.4':
+ resolution: {integrity: sha512-sR+OiKLwd15nmCdqpXMnuJ9W2kpy0KigzqScqHI3Hqwr7IXxBp3Yva+yJwoqh7rE8V77tdoheRYataNKL4QrPw==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@esbuild/freebsd-arm64@0.27.4':
+ resolution: {integrity: sha512-jnfpKe+p79tCnm4GVav68A7tUFeKQwQyLgESwEAUzyxk/TJr4QdGog9sqWNcUbr/bZt/O/HXouspuQDd9JxFSw==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-x64@0.27.4':
+ resolution: {integrity: sha512-2kb4ceA/CpfUrIcTUl1wrP/9ad9Atrp5J94Lq69w7UwOMolPIGrfLSvAKJp0RTvkPPyn6CIWrNy13kyLikZRZQ==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@esbuild/linux-arm64@0.27.4':
+ resolution: {integrity: sha512-7nQOttdzVGth1iz57kxg9uCz57dxQLHWxopL6mYuYthohPKEK0vU0C3O21CcBK6KDlkYVcnDXY099HcCDXd9dA==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@esbuild/linux-arm@0.27.4':
+ resolution: {integrity: sha512-aBYgcIxX/wd5n2ys0yESGeYMGF+pv6g0DhZr3G1ZG4jMfruU9Tl1i2Z+Wnj9/KjGz1lTLCcorqE2viePZqj4Eg==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [linux]
+
+ '@esbuild/linux-ia32@0.27.4':
+ resolution: {integrity: sha512-oPtixtAIzgvzYcKBQM/qZ3R+9TEUd1aNJQu0HhGyqtx6oS7qTpvjheIWBbes4+qu1bNlo2V4cbkISr8q6gRBFA==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [linux]
+
+ '@esbuild/linux-loong64@0.27.4':
+ resolution: {integrity: sha512-8mL/vh8qeCoRcFH2nM8wm5uJP+ZcVYGGayMavi8GmRJjuI3g1v6Z7Ni0JJKAJW+m0EtUuARb6Lmp4hMjzCBWzA==}
+ engines: {node: '>=18'}
+ cpu: [loong64]
+ os: [linux]
+
+ '@esbuild/linux-mips64el@0.27.4':
+ resolution: {integrity: sha512-1RdrWFFiiLIW7LQq9Q2NES+HiD4NyT8Itj9AUeCl0IVCA459WnPhREKgwrpaIfTOe+/2rdntisegiPWn/r/aAw==}
+ engines: {node: '>=18'}
+ cpu: [mips64el]
+ os: [linux]
+
+ '@esbuild/linux-ppc64@0.27.4':
+ resolution: {integrity: sha512-tLCwNG47l3sd9lpfyx9LAGEGItCUeRCWeAx6x2Jmbav65nAwoPXfewtAdtbtit/pJFLUWOhpv0FpS6GQAmPrHA==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@esbuild/linux-riscv64@0.27.4':
+ resolution: {integrity: sha512-BnASypppbUWyqjd1KIpU4AUBiIhVr6YlHx/cnPgqEkNoVOhHg+YiSVxM1RLfiy4t9cAulbRGTNCKOcqHrEQLIw==}
+ engines: {node: '>=18'}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@esbuild/linux-s390x@0.27.4':
+ resolution: {integrity: sha512-+eUqgb/Z7vxVLezG8bVB9SfBie89gMueS+I0xYh2tJdw3vqA/0ImZJ2ROeWwVJN59ihBeZ7Tu92dF/5dy5FttA==}
+ engines: {node: '>=18'}
+ cpu: [s390x]
+ os: [linux]
+
+ '@esbuild/linux-x64@0.27.4':
+ resolution: {integrity: sha512-S5qOXrKV8BQEzJPVxAwnryi2+Iq5pB40gTEIT69BQONqR7JH1EPIcQ/Uiv9mCnn05jff9umq/5nqzxlqTOg9NA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [linux]
+
+ '@esbuild/netbsd-arm64@0.27.4':
+ resolution: {integrity: sha512-xHT8X4sb0GS8qTqiwzHqpY00C95DPAq7nAwX35Ie/s+LO9830hrMd3oX0ZMKLvy7vsonee73x0lmcdOVXFzd6Q==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [netbsd]
+
+ '@esbuild/netbsd-x64@0.27.4':
+ resolution: {integrity: sha512-RugOvOdXfdyi5Tyv40kgQnI0byv66BFgAqjdgtAKqHoZTbTF2QqfQrFwa7cHEORJf6X2ht+l9ABLMP0dnKYsgg==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [netbsd]
+
+ '@esbuild/openbsd-arm64@0.27.4':
+ resolution: {integrity: sha512-2MyL3IAaTX+1/qP0O1SwskwcwCoOI4kV2IBX1xYnDDqthmq5ArrW94qSIKCAuRraMgPOmG0RDTA74mzYNQA9ow==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openbsd]
+
+ '@esbuild/openbsd-x64@0.27.4':
+ resolution: {integrity: sha512-u8fg/jQ5aQDfsnIV6+KwLOf1CmJnfu1ShpwqdwC0uA7ZPwFws55Ngc12vBdeUdnuWoQYx/SOQLGDcdlfXhYmXQ==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [openbsd]
+
+ '@esbuild/openharmony-arm64@0.27.4':
+ resolution: {integrity: sha512-JkTZrl6VbyO8lDQO3yv26nNr2RM2yZzNrNHEsj9bm6dOwwu9OYN28CjzZkH57bh4w0I2F7IodpQvUAEd1mbWXg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@esbuild/sunos-x64@0.27.4':
+ resolution: {integrity: sha512-/gOzgaewZJfeJTlsWhvUEmUG4tWEY2Spp5M20INYRg2ZKl9QPO3QEEgPeRtLjEWSW8FilRNacPOg8R1uaYkA6g==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [sunos]
+
+ '@esbuild/win32-arm64@0.27.4':
+ resolution: {integrity: sha512-Z9SExBg2y32smoDQdf1HRwHRt6vAHLXcxD2uGgO/v2jK7Y718Ix4ndsbNMU/+1Qiem9OiOdaqitioZwxivhXYg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@esbuild/win32-ia32@0.27.4':
+ resolution: {integrity: sha512-DAyGLS0Jz5G5iixEbMHi5KdiApqHBWMGzTtMiJ72ZOLhbu/bzxgAe8Ue8CTS3n3HbIUHQz/L51yMdGMeoxXNJw==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [win32]
+
+ '@esbuild/win32-x64@0.27.4':
+ resolution: {integrity: sha512-+knoa0BDoeXgkNvvV1vvbZX4+hizelrkwmGJBdT17t8FNPwG2lKemmuMZlmaNQ3ws3DKKCxpb4zRZEIp3UxFCg==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [win32]
+
+ '@fortawesome/fontawesome-common-types@7.2.0':
+ resolution: {integrity: sha512-IpR0bER9FY25p+e7BmFH25MZKEwFHTfRAfhOyJubgiDnoJNsSvJ7nigLraHtp4VOG/cy8D7uiV0dLkHOne5Fhw==}
+ engines: {node: '>=6'}
+
+ '@fortawesome/fontawesome-svg-core@7.2.0':
+ resolution: {integrity: sha512-6639htZMjEkwskf3J+e6/iar+4cTNM9qhoWuRfj9F3eJD6r7iCzV1SWnQr2Mdv0QT0suuqU8BoJCZUyCtP9R4Q==}
+ engines: {node: '>=6'}
+
+ '@fortawesome/free-brands-svg-icons@7.2.0':
+ resolution: {integrity: sha512-VNG8xqOip1JuJcC3zsVsKRQ60oXG9+oYNDCosjoU/H9pgYmLTEwWw8pE0jhPz/JWdHeUuK6+NQ3qsM4gIbdbYQ==}
+ engines: {node: '>=6'}
+
+ '@fortawesome/free-regular-svg-icons@7.2.0':
+ resolution: {integrity: sha512-iycmlN51EULlQ4D/UU9WZnHiN0CvjJ2TuuCrAh+1MVdzD+4ViKYH2deNAll4XAAYlZa8WAefHR5taSK8hYmSMw==}
+ engines: {node: '>=6'}
+
+ '@fortawesome/free-solid-svg-icons@7.2.0':
+ resolution: {integrity: sha512-YTVITFGN0/24PxzXrwqCgnyd7njDuzp5ZvaCx5nq/jg55kUYd94Nj8UTchBdBofi/L0nwRfjGOg0E41d2u9T1w==}
+ engines: {node: '>=6'}
+
+ '@git.zone/tsbundle@2.9.1':
+ resolution: {integrity: sha512-JW1xjSv7UjAm2lwAQPxhCWs14wqs+UIq5FqIGUPuI6rrDBWIMT2d0gpP6iP6TqXqgm6XpBlfU4rHcHheUXzXbQ==}
+ hasBin: true
+
'@git.zone/tsdeno@1.2.0':
resolution: {integrity: sha512-Kx/9NchzKRoBhgj44V/ymF3rtspMAO+U+x7d3CFfBAyHCzVCrFtzIdVb5JULSTSR89d9a0L4VJVyVUoRdz/MUA==}
hasBin: true
+ '@git.zone/tsrun@2.0.1':
+ resolution: {integrity: sha512-NEcnsjvlC1o3Z6SS3VhKCf6Ev+Sh4EAinmggslrIR/ppMrvjDbXNFXoyr3PB+GLeSAR0JRZ1fGvVYjpEzjBdIg==}
+ hasBin: true
+
+ '@git.zone/tswatch@3.3.0':
+ resolution: {integrity: sha512-2d5G4L6RpEGW7d16xz6Gg6P/JnrMncNRDy74WaFrNjdn2fe5yIPtqoiQ/9LTbxqk67snj0gN2xtlQTXiN+Xa/w==}
+ hasBin: true
+
+ '@happy-dom/global-registrator@15.11.7':
+ resolution: {integrity: sha512-mfOoUlIw8VBiJYPrl5RZfMzkXC/z7gbSpi2ecycrj/gRWLq2CMV+Q+0G+JPjeOmuNFgg0skEIzkVFzVYFP6URw==}
+ engines: {node: '>=18.0.0'}
+
+ '@inquirer/checkbox@3.0.1':
+ resolution: {integrity: sha512-0hm2nrToWUdD6/UHnel/UKGdk1//ke5zGUpHIvk5ZWmaKezlGxZkOJXNSWsdxO/rEqTkbB3lNC2J6nBElV2aAQ==}
+ engines: {node: '>=18'}
+
+ '@inquirer/confirm@4.0.1':
+ resolution: {integrity: sha512-46yL28o2NJ9doViqOy0VDcoTzng7rAb6yPQKU7VDLqkmbCaH4JqK4yk4XqlzNWy9PVC5pG1ZUXPBQv+VqnYs2w==}
+ engines: {node: '>=18'}
+
+ '@inquirer/core@9.2.1':
+ resolution: {integrity: sha512-F2VBt7W/mwqEU4bL0RnHNZmC/OxzNx9cOYxHqnXX3MP6ruYvZUZAW9imgN9+h/uBT/oP8Gh888J2OZSbjSeWcg==}
+ engines: {node: '>=18'}
+
+ '@inquirer/editor@3.0.1':
+ resolution: {integrity: sha512-VA96GPFaSOVudjKFraokEEmUQg/Lub6OXvbIEZU1SDCmBzRkHGhxoFAVaF30nyiB4m5cEbDgiI2QRacXZ2hw9Q==}
+ engines: {node: '>=18'}
+
+ '@inquirer/expand@3.0.1':
+ resolution: {integrity: sha512-ToG8d6RIbnVpbdPdiN7BCxZGiHOTomOX94C2FaT5KOHupV40tKEDozp12res6cMIfRKrXLJyexAZhWVHgbALSQ==}
+ engines: {node: '>=18'}
+
+ '@inquirer/figures@1.0.15':
+ resolution: {integrity: sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==}
+ engines: {node: '>=18'}
+
+ '@inquirer/input@3.0.1':
+ resolution: {integrity: sha512-BDuPBmpvi8eMCxqC5iacloWqv+5tQSJlUafYWUe31ow1BVXjW2a5qe3dh4X/Z25Wp22RwvcaLCc2siHobEOfzg==}
+ engines: {node: '>=18'}
+
+ '@inquirer/number@2.0.1':
+ resolution: {integrity: sha512-QpR8jPhRjSmlr/mD2cw3IR8HRO7lSVOnqUvQa8scv1Lsr3xoAMMworcYW3J13z3ppjBFBD2ef1Ci6AE5Qn8goQ==}
+ engines: {node: '>=18'}
+
+ '@inquirer/password@3.0.1':
+ resolution: {integrity: sha512-haoeEPUisD1NeE2IanLOiFr4wcTXGWrBOyAyPZi1FfLJuXOzNmxCJPgUrGYKVh+Y8hfGJenIfz5Wb/DkE9KkMQ==}
+ engines: {node: '>=18'}
+
+ '@inquirer/prompts@6.0.1':
+ resolution: {integrity: sha512-yl43JD/86CIj3Mz5mvvLJqAOfIup7ncxfJ0Btnl0/v5TouVUyeEdcpknfgc+yMevS/48oH9WAkkw93m7otLb/A==}
+ engines: {node: '>=18'}
+
+ '@inquirer/rawlist@3.0.1':
+ resolution: {integrity: sha512-VgRtFIwZInUzTiPLSfDXK5jLrnpkuSOh1ctfaoygKAdPqjcjKYmGh6sCY1pb0aGnCGsmhUxoqLDUAU0ud+lGXQ==}
+ engines: {node: '>=18'}
+
+ '@inquirer/search@2.0.1':
+ resolution: {integrity: sha512-r5hBKZk3g5MkIzLVoSgE4evypGqtOannnB3PKTG9NRZxyFRKcfzrdxXXPcoJQsxJPzvdSU2Rn7pB7lw0GCmGAg==}
+ engines: {node: '>=18'}
+
+ '@inquirer/select@3.0.1':
+ resolution: {integrity: sha512-lUDGUxPhdWMkN/fHy1Lk7pF3nK1fh/gqeyWXmctefhxLYxlDsc7vsPBEpxrfVGDsVdyYJsiJoD4bJ1b623cV1Q==}
+ engines: {node: '>=18'}
+
+ '@inquirer/type@2.0.0':
+ resolution: {integrity: sha512-XvJRx+2KR3YXyYtPUUy+qd9i7p+GO9Ko6VIIpWlBrpWwXDv8WLFeHTxz35CfQFUiBMLXlGHhGzys7lqit9gWag==}
+ engines: {node: '>=18'}
+
'@isaacs/cliui@9.0.0':
resolution: {integrity: sha512-AokJm4tuBHillT+FpMtxQ60n8ObyXBatq7jD2/JA9dxbDDokKQm8KMht5ibGzLVU9IJDIKK4TPKgMHEYMn3lMg==}
engines: {node: '>=18'}
@@ -59,12 +364,112 @@ packages:
'@mixmark-io/domino@2.2.0':
resolution: {integrity: sha512-Y28PR25bHXUg88kCV7nivXrP2Nj2RueZ3/l/jdx6J9f8J4nsEGcgX0Qe6lt7Pa+J79+kPiJU3LguR6O/6zrLOw==}
+ '@module-federation/error-codes@0.22.0':
+ resolution: {integrity: sha512-xF9SjnEy7vTdx+xekjPCV5cIHOGCkdn3pIxo9vU7gEZMIw0SvAEdsy6Uh17xaCpm8V0FWvR0SZoK9Ik6jGOaug==}
+
+ '@module-federation/runtime-core@0.22.0':
+ resolution: {integrity: sha512-GR1TcD6/s7zqItfhC87zAp30PqzvceoeDGYTgF3Vx2TXvsfDrhP6Qw9T4vudDQL3uJRne6t7CzdT29YyVxlgIA==}
+
+ '@module-federation/runtime-tools@0.22.0':
+ resolution: {integrity: sha512-4ScUJ/aUfEernb+4PbLdhM/c60VHl698Gn1gY21m9vyC1Ucn69fPCA1y2EwcCB7IItseRMoNhdcWQnzt/OPCNA==}
+
+ '@module-federation/runtime@0.22.0':
+ resolution: {integrity: sha512-38g5iPju2tPC3KHMPxRKmy4k4onNp6ypFPS1eKGsNLUkXgHsPMBFqAjDw96iEcjri91BrahG4XcdyKi97xZzlA==}
+
+ '@module-federation/sdk@0.22.0':
+ resolution: {integrity: sha512-x4aFNBKn2KVQRuNVC5A7SnrSCSqyfIWmm1DvubjbO9iKFe7ith5niw8dqSFBekYBg2Fwy+eMg4sEFNVvCAdo6g==}
+
+ '@module-federation/webpack-bundler-runtime@0.22.0':
+ resolution: {integrity: sha512-aM8gCqXu+/4wBmJtVeMeeMN5guw3chf+2i6HajKtQv7SJfxV/f4IyNQJUeUQu9HfiAZHjqtMV5Lvq/Lvh8LdyA==}
+
+ '@napi-rs/canvas-android-arm64@0.1.97':
+ resolution: {integrity: sha512-V1c/WVw+NzH8vk7ZK/O8/nyBSCQimU8sfMsB/9qeSvdkGKNU7+mxy/bIF0gTgeBFmHpj30S4E9WHMSrxXGQuVQ==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [android]
+
+ '@napi-rs/canvas-darwin-arm64@0.1.97':
+ resolution: {integrity: sha512-ok+SCEF4YejcxuJ9Rm+WWunHHpf2HmiPxfz6z1a/NFQECGXtsY7A4B8XocK1LmT1D7P174MzwPF9Wy3AUAwEPw==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@napi-rs/canvas-darwin-x64@0.1.97':
+ resolution: {integrity: sha512-PUP6e6/UGlclUvAQNnuXCcnkpdUou6VYZfQOQxExLp86epOylmiwLkqXIvpFmjoTEDmPmXrI+coL/9EFU1gKPA==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@napi-rs/canvas-linux-arm-gnueabihf@0.1.97':
+ resolution: {integrity: sha512-XyXH2L/cic8eTNtbrXCcvqHtMX/nEOxN18+7rMrAM2XtLYC/EB5s0wnO1FsLMWmK+04ZSLN9FBGipo7kpIkcOw==}
+ engines: {node: '>= 10'}
+ cpu: [arm]
+ os: [linux]
+
+ '@napi-rs/canvas-linux-arm64-gnu@0.1.97':
+ resolution: {integrity: sha512-Kuq/M3djq0K8ktgz6nPlK7Ne5d4uWeDxPpyKWOjWDK2RIOhHVtLtyLiJw2fuldw7Vn4mhw05EZXCEr4Q76rs9w==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@napi-rs/canvas-linux-arm64-musl@0.1.97':
+ resolution: {integrity: sha512-kKmSkQVnWeqg7qdsiXvYxKhAFuHz3tkBjW/zyQv5YKUPhotpaVhpBGv5LqCngzyuRV85SXoe+OFj+Tv0a0QXkQ==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@napi-rs/canvas-linux-riscv64-gnu@0.1.97':
+ resolution: {integrity: sha512-Jc7I3A51jnEOIAXeLsN/M/+Z28LUeakcsXs07FLq9prXc0eYOtVwsDEv913Gr+06IRo34gJJVgT0TXvmz+N2VA==}
+ engines: {node: '>= 10'}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@napi-rs/canvas-linux-x64-gnu@0.1.97':
+ resolution: {integrity: sha512-iDUBe7AilfuBSRbSa8/IGX38Mf+iCSBqoVKLSQ5XaY2JLOaqz1TVyPFEyIck7wT6mRQhQt5sN6ogfjIDfi74tg==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ '@napi-rs/canvas-linux-x64-musl@0.1.97':
+ resolution: {integrity: sha512-AKLFd/v0Z5fvgqBDqhvqtAdx+fHMJ5t9JcUNKq4FIZ5WH+iegGm8HPdj00NFlCSnm83Fp3Ln8I2f7uq1aIiWaA==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ '@napi-rs/canvas-win32-arm64-msvc@0.1.97':
+ resolution: {integrity: sha512-u883Yr6A6fO7Vpsy9YE4FVCIxzzo5sO+7pIUjjoDLjS3vQaNMkVzx5bdIpEL+ob+gU88WDK4VcxYMZ6nmnoX9A==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@napi-rs/canvas-win32-x64-msvc@0.1.97':
+ resolution: {integrity: sha512-sWtD2EE3fV0IzN+iiQUqr/Q1SwqWhs2O1FKItFlxtdDkikpEj5g7DKQpY3x55H/MAOnL8iomnlk3mcEeGiUMoQ==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [win32]
+
+ '@napi-rs/canvas@0.1.97':
+ resolution: {integrity: sha512-8cFniXvrIEnVwuNSRCW9wirRZbHvrD3JVujdS2P5n5xiJZNZMOZcfOvJ1pb66c7jXMKHHglJEDVJGbm8XWFcXQ==}
+ engines: {node: '>= 10'}
+
+ '@napi-rs/wasm-runtime@1.0.7':
+ resolution: {integrity: sha512-SeDnOO0Tk7Okiq6DbXmmBODgOAb9dp9gjlphokTUxmt8U3liIP1ZsozBahH69j/RJv+Rfs6IwUKHTgQYJ/HBAw==}
+
+ '@napi-rs/wasm-runtime@1.1.1':
+ resolution: {integrity: sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A==}
+
+ '@oxc-project/types@0.99.0':
+ resolution: {integrity: sha512-LLDEhXB7g1m5J+woRSgfKsFPS3LhR9xRhTeIoEBm5WrkwMxn6eZ0Ld0c0K5eHB57ChZX6I3uSmmLjZ8pcjlRcw==}
+
'@push.rocks/consolecolor@2.0.3':
resolution: {integrity: sha512-hA+m0BMqEwZNSAS7c2aQFfoPkpX/dNdsHzkdLdeERUOy7BLacb9ItTUofGtjtginP0yDj4NSpqSjNYyX3Y8Y/w==}
'@push.rocks/early@4.0.4':
resolution: {integrity: sha512-ak6/vqZ1PlFV08fSFQ6UwiBrr+K6IsfieZWWzT7eex1Ls6GvWEi8wZ3REFDPJq/qckNLWSgEy0EsqzRtltkaCA==}
+ '@push.rocks/isohash@2.0.1':
+ resolution: {integrity: sha512-UulhEui8O9Ei9fSqTldsB73TUmAFNqEBk82tHsJSLLpNK9gJZQE82iaSNsQUakoUQ2c9KueueMfwC3IoDaYRrQ==}
+
'@push.rocks/isounique@1.0.5':
resolution: {integrity: sha512-Z0BVqZZOCif1THTbIKWMgg0wxCzt9CyBtBBqQJiZ+jJ0KlQFrQHNHrPt81/LXe/L4x0cxWsn0bpL6W5DNSvNLw==}
@@ -80,6 +485,9 @@ packages:
'@push.rocks/smartbuffer@3.0.5':
resolution: {integrity: sha512-pWYF08Mn8s/KF/9nHRk7pZPzuMjmYVQay2c5gGexdayxn1W4eCSYYhWH73vR2JBfGeGq/izbRNuUuEaIEeTIKA==}
+ '@push.rocks/smartcache@1.0.18':
+ resolution: {integrity: sha512-3+cmLu9chbnmi4yD4kjlFP/Tn4NReaZIoicEcGTtwbcokTrSDMs3YPdJzIpDZkAs83PW7OcVSHa3Ak5KU5OWzA==}
+
'@push.rocks/smartcli@4.0.20':
resolution: {integrity: sha512-gCo4ItvsPj8WoVAJw/6vkuoGA5FtIoACux2ktcCeH0nrFe7/xGR6waJ1aZcYAi7QN4gi52TlsgwuKz7BzXqhmQ==}
@@ -95,15 +503,24 @@ packages:
'@push.rocks/smartenv@6.0.0':
resolution: {integrity: sha512-ktW5MqOFs0492sB4vrvl4lgRFQ/sQ4AyREgB+sCIzGqszHWGVvGXR95Y2a3z66jkLPYML2CUWHzmMlfv8fkG+A==}
+ '@push.rocks/smarterror@2.0.1':
+ resolution: {integrity: sha512-iCcH1D8tlDJgMFsaJ6lhdOTKhbU0KoprNv9MRP9o7691QOx4JEDXiHtr/lNtxVo8BUtdb9CF6kazaknO9KuORA==}
+
'@push.rocks/smartexit@2.0.3':
resolution: {integrity: sha512-ZWpZ3Elorpv/rKtUcCUejUHG4BIE5B3QWysBAgb7lTcA7y0vGdFY32Y5/Q5tHpZM6PPxl/WTdUOYtSojQTq+pA==}
+ '@push.rocks/smartfeed@1.4.0':
+ resolution: {integrity: sha512-bvj/3cGQI6TbbjbqrgC1uufcqprd/VthefuIsS8KHiHyCqYD5Z6RTjrbQY9WOCsmub/dcuMavfXQZqe9g2+OrQ==}
+
'@push.rocks/smartfile-interfaces@1.0.7':
resolution: {integrity: sha512-MeOl/200UOvSO4Pgq/DVFiBVZpL9gjOBQM+4XYNjSxda8c6VBvchHAntaFLQUlO8U1ckNaP9i+nMO4O4/0ymyw==}
'@push.rocks/smartfile@11.2.7':
resolution: {integrity: sha512-8Yp7/sAgPpWJBHohV92ogHWKzRomI5MEbSG6b5W2n18tqwfAmjMed0rQvsvGrSBlnEWCKgoOrYIIZbLO61+J0Q==}
+ '@push.rocks/smartfile@13.1.2':
+ resolution: {integrity: sha512-DaEhwmnGEpX4coeeToaw4cZe3pNBhH7CY1iGr+d3pIXihozREvzzAR9/0i2r7bUXXL5+Lgy8YYIk5ZS+fwxMKA==}
+
'@push.rocks/smartfs@1.5.0':
resolution: {integrity: sha512-QwMD44HgX3d9PPxUwR0uS+0PEMtesKvKbZR+s4pezL2er6oPneKJMLkO6TJPvJ38nug6Lmlk9Bu7UrwR2kS3Vw==}
@@ -113,15 +530,33 @@ packages:
'@push.rocks/smarthash@3.2.6':
resolution: {integrity: sha512-Mq/WNX0Tjjes3X1gHd/ZBwOOKSrAG/Z3Xoc0OcCm3P20WKpniihkMpsnlE7wGjvpHLi/ZRe/XkB3KC3d5r9X4g==}
+ '@push.rocks/smarti18n@1.0.4':
+ resolution: {integrity: sha512-bHIi9Iuzp2cbux9q79ZK5jOQYPsYJ9zDDS4p/xEPQH31gr0mcFRosLSQb1kvDQDVmUhI0ADlQMqr2ui9zEXQHA==}
+
+ '@push.rocks/smartinteract@2.0.16':
+ resolution: {integrity: sha512-eltvVRRUKBKd77DSFA4DPY2g4V4teZLNe8A93CDy/WglglYcUjxMoLY/b0DFTWCWKYT+yjk6Fe6p0FRrvX9Yvg==}
+
'@push.rocks/smartjson@5.2.0':
resolution: {integrity: sha512-710e8UwovRfPgUtaBHcd6unaODUjV5fjxtGcGCqtaTcmvOV6VpasdVfT66xMDzQmWH2E9ZfHDJeso9HdDQzNQA==}
'@push.rocks/smartjson@6.0.0':
resolution: {integrity: sha512-FYfJnmukt66WePn6xrVZ3BLmRQl9W82LcsICK3VU9sGW7kasig090jKXPm+yX8ibQcZAO/KyR/Q8tMIYZNxGew==}
+ '@push.rocks/smartlog-destination-devtools@1.0.12':
+ resolution: {integrity: sha512-zvsIkrqByc0JRaBgIyhh+PSz2SY/e/bmhZdUcr/OW6pudgAcqe2sso68EzrKux0w9OMl1P9ZnzF3FpCZPFWD/A==}
+
+ '@push.rocks/smartlog-destination-local@9.0.2':
+ resolution: {integrity: sha512-htzIY+4+hU61Z2J4Oz+IHnAB3RGe+fpS0VKCKnAoppZqzMWnJ3UOgYIyr4djDBy2WtgpXV/16KdisKrOmwuuvw==}
+
+ '@push.rocks/smartlog-interfaces@3.0.2':
+ resolution: {integrity: sha512-8hGRTJehbsFSJxLhCQkA018mZtXVPxPTblbg9VaE/EqISRzUw+eosJ2EJV7M4Qu0eiTJZjnWnNLn8CkD77ziWw==}
+
'@push.rocks/smartlog@3.2.1':
resolution: {integrity: sha512-x9/P59pfzY6HOGYmYrhqmoRl/pliTVx44g2Vbb8dIr/0zA39cAJHlPze1+UGncn37XKGmutK2iLSsJLEsexD0A==}
+ '@push.rocks/smartmanifest@2.0.2':
+ resolution: {integrity: sha512-QGc5C9vunjfUbYsPGz5bynV/mVmPHkrQDkWp8ZO8VJtK1GZe+njgbrNyxn2SUHR0IhSAbSXl1j4JvBqYf5eTVg==}
+
'@push.rocks/smartmarkdown@3.0.3':
resolution: {integrity: sha512-9KhKZxDQKPk4P/2CYdVqJa5dpGfTA8w1cxqoVZL3e8RPA7EGxbdYEqMp0n2d9mth0btk/m0KHHV+G09LfCVeBw==}
@@ -131,9 +566,15 @@ packages:
'@push.rocks/smartmime@2.0.4':
resolution: {integrity: sha512-mG6lRBLr5nF+GLZmgCcdjhdDsmTtJWBFZDCa1eJ8Au9TvUzbPW0fY5aqJBb3UwfyZzH6St8Th9cJSXjagOQkYA==}
+ '@push.rocks/smartntml@2.0.8':
+ resolution: {integrity: sha512-LIYeOQbmav2m2kZQz4pGS74xvWAm4YAGQnbPkofA2oas4RW9SGR1JTRpFd9pxGCOXd6djYdNGsZZ/xz+k/vRPQ==}
+
'@push.rocks/smartobject@1.0.12':
resolution: {integrity: sha512-xSMiqXiZXXUOixT3QIPsOUKOWjL3YA/1h9/YTiCzqs5C0D3tyfTbojnfcp6YbKZoBzans2I5LghaDHsGid2DKQ==}
+ '@push.rocks/smartopen@2.0.0':
+ resolution: {integrity: sha512-eVT0GhtQ2drb95j/kktYst/Toh1zCwCqjTJFYtaYFUnnBnBUajPtBZDFnPQo01DN8JxoeCTo8jggq+PCvzcfww==}
+
'@push.rocks/smartpath@6.0.0':
resolution: {integrity: sha512-r94u1MbBaIOSy+517PZp2P7SuZPSe9LkwJ8l3dXQKHeIOri/zDxk/RQPiFM+j4N9301ztkRyhvRj7xgUDroOsg==}
@@ -146,6 +587,9 @@ packages:
'@push.rocks/smartrequest@4.4.2':
resolution: {integrity: sha512-Om4y1Ce4YdSu8VoXREz2SgFz9pDxcFEm0+SC1YYa3RXd0AH2Mknaj/1XfvfMqojnK9L7N2z1fY4xX8tO1IwqFQ==}
+ '@push.rocks/smartrequest@5.0.1':
+ resolution: {integrity: sha512-gZQQF6HVt3LwTBxaPh6hHObd4VF76PUYQcs5pHD7f0VXaEewmrNAQSnccoinOY7fi45+0dOf04PJOXu9MibPzQ==}
+
'@push.rocks/smartrouter@1.3.3':
resolution: {integrity: sha512-1+xZEnWlhzqLWAaJ1zFNhQ0zgbfCWQl1DBT72LygLxTs+P0K8AwJKgqo/IX6CT55kGCFnPAZIYSbVJlGsgrB0w==}
@@ -155,9 +599,18 @@ packages:
'@push.rocks/smartrx@3.0.10':
resolution: {integrity: sha512-USjIYcsSfzn14cwOsxgq/bBmWDTTzy3ouWAnW5NdMyRRzEbmeNrvmy6TRqNeDlJ2PsYNTt1rr/zGUqvIy72ITg==}
+ '@push.rocks/smartserve@2.0.1':
+ resolution: {integrity: sha512-YQb2qexfCzCqOlLWBBXKMg6xG4zahCPAxomz/KEKAwHtW6wMTtuHKSTSkRTQ0vl9jssLMAmRz2OyafiL9XGJXQ==}
+
'@push.rocks/smartshell@3.3.8':
resolution: {integrity: sha512-t9J/py0vnea4ZtOs7Anc9dc6lcvg6EDvYBw5eE1mB+KUWxMQf/ROIQwWMo6B9SMNY4JS2UwvfuJQJ8makP/7Tg==}
+ '@push.rocks/smartsitemap@2.0.4':
+ resolution: {integrity: sha512-76dYWG/o/EjV4vYCK7ZKM35T9xgrI+oHEiiIE6E2MDaFIU6QnSfciTfbscH5nc0vxx8Ah+I0HPEJO94BM2S39w==}
+
+ '@push.rocks/smartspawn@3.0.3':
+ resolution: {integrity: sha512-DyrGPV69wwOiJgKkyruk5hS3UEGZ99xFAqBE9O2nM8VXCRLbbty3xt1Ug5Z092ZZmJYaaGMSnMw3ijyZJFCT0Q==}
+
'@push.rocks/smartstate@2.2.1':
resolution: {integrity: sha512-fLrilAJNI6QOs0hcBRD9eTwU2Rlo6NlDCKQo9N/zyp0VJ6AV1UVdEZcVIQILu1CO0RUHX9aBAbFunJrb2+Zrkg==}
@@ -176,9 +629,19 @@ packages:
'@push.rocks/smarturl@3.1.0':
resolution: {integrity: sha512-ij73Q4GERojdPSHxAvYKvspimcpAJC6GGQCWsC4b+1sAiOSByjfmkUHK8yiEEOPRU9AeGuyaIVqK6ZzKLEZ3vA==}
+ '@push.rocks/smartwatch@6.3.0':
+ resolution: {integrity: sha512-TeZ1PGBoBMpC4/CK8StIj5InEiFfKp7xWJSm3aYMjB/uaoeRP0vXqv1ORIC/TKYGJuEDuAXUsit8tZVjn0qT1Q==}
+ engines: {node: '>=20.0.0'}
+
+ '@push.rocks/smartxml@2.0.0':
+ resolution: {integrity: sha512-1d06zYJX4Zt8s5w5qFOUg2LAEz9ykrh9d6CQPK4WAgOBIefb1xzVEWHc7yoxicc2OkzNgC3IBCEg3s6BncZKWw==}
+
'@push.rocks/smartyaml@2.0.5':
resolution: {integrity: sha512-tBcf+HaOIfeEsTMwgUZDtZERCxXQyRsWO8Ar5DjBdiSRchbhVGZQEBzXswMS0W5ZoRenjgPK+4tPW3JQGRTfbg==}
+ '@push.rocks/smartyaml@3.0.4':
+ resolution: {integrity: sha512-1JRt+hnoc2zHw3AW+vXKlCdSVwqOmY/01fu+2HBviS0UDjoZCa+/rp6E3GaQb5lEEafKi8ENbffAfjXXp3N2xQ==}
+
'@push.rocks/taskbuffer@3.5.0':
resolution: {integrity: sha512-Y9WwIEIyp6oVFdj06j84tfrZIvjhbMb3DF52rYxlTeYLk3W7RPhSg1bGPCbtkXWeKdBrSe37V90BkOG7Qq8Pqg==}
@@ -194,17 +657,197 @@ packages:
'@push.rocks/webstream@1.0.10':
resolution: {integrity: sha512-45CcR0I4/9v0qSjLvz2dYTGMkR0YP3x66ItpStdad5hidJm86t1lfHF06d0oiEvJTpvQkeyIX/8YKAumf21d/Q==}
+ '@pushrocks/isounique@1.0.5':
+ resolution: {integrity: sha512-XYeoKGkmIdsWX64NlPA1fuA41n/1bQ7LdYXytlU/QqYeW7ojgA0ARRhBSh/2phL6o0Jpw6K/7gJ8jc7ab/Tc+w==}
+ deprecated: This package has been deprecated in favour of the new package at @push.rocks/isounique
+
'@pushrocks/smartdelay@3.0.1':
resolution: {integrity: sha512-I+i/QhC6kLsXsWyW19UgD1vH2r1YWVxK19VMxt2CEuvxMyC6tuCd0vqud9vv5JxaxsJwxWlOsrURkgL4tXeILQ==}
deprecated: This package has been deprecated in favour of the new package at @push.rocks/smartdelay
+ '@pushrocks/smartenv@5.0.5':
+ resolution: {integrity: sha512-VWON1OJ4qV2/9hzJbgRquRekaO9am3b8W82tgCwgO6LBg23ea2tanfd+gESVMbRFduxHVoFLvlhSBcDGM5zsLA==}
+ deprecated: This package has been deprecated in favour of the new package at @push.rocks/smartenv
+
+ '@pushrocks/smarthash@3.0.2':
+ resolution: {integrity: sha512-jXW4f8k6iqOQRvkCmXMID1C+qXyNvUMKm7apPETxnO+L172VlzxP1dml0Ey1+vjfpU2luKCteJWX7W95sOdLDg==}
+ deprecated: This package has been deprecated in favour of the new package at @push.rocks/smarthash
+
+ '@pushrocks/smartjson@5.0.6':
+ resolution: {integrity: sha512-9OJbnRgLTaCRQz+pqu5tB3ZCqRs5Zh0hnBe7t7URE+TgwIZ8aiELUIbWRkgn4mSGVzHyL6pqTyIowP6AjUCG3w==}
+ deprecated: This package has been deprecated in favour of the new package at @push.rocks/smartjson
+
+ '@pushrocks/smartpromise@3.1.10':
+ resolution: {integrity: sha512-VeTurbZ1+ZMxBDJk1Y1LV8SN9xLI+oDXKVeCFw41FAGEKOUEqordqFpi6t+7Vhe/TXUZzCVpZ5bXxAxrGf8yTQ==}
+ deprecated: This package has been deprecated in favour of the new package at @push.rocks/smartpromise
+
'@pushrocks/smartpromise@4.0.2':
resolution: {integrity: sha512-bqorOaGXPOuiOSV81luTKrTghg4O4NBRD0zyv7TIqmrMGf4a0uoozaUMp1X8vQdZW+y0gTzUJP9wkzAE6Cci0g==}
deprecated: This package has been deprecated in favour of the new package at @push.rocks/smartpromise
+ '@pushrocks/smartstring@4.0.7':
+ resolution: {integrity: sha512-TxHSar7Cj29E+GOcIj4DeZKWCNVzHKdqnrBRqcBqLqmeYZvzFosLXpFKoaCJDq7MSxuPoCvu5woSdp9YmPXyog==}
+ deprecated: This package has been deprecated in favour of the new package at @push.rocks/smartstring
+
+ '@remirror/core-constants@3.0.0':
+ resolution: {integrity: sha512-42aWfPrimMfDKDi4YegyS7x+/0tlzaqwPQCULLanv3DMIlu96KTJR0fM5isWX2UViOqlGnX6YFgqWepcX+XMNg==}
+
+ '@rolldown/binding-android-arm64@1.0.0-beta.52':
+ resolution: {integrity: sha512-MBGIgysimZPqTDcLXI+i9VveijkP5C3EAncEogXhqfax6YXj1Tr2LY3DVuEOMIjWfMPMhtQSPup4fSTAmgjqIw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [android]
+
+ '@rolldown/binding-darwin-arm64@1.0.0-beta.52':
+ resolution: {integrity: sha512-MmKeoLnKu1d9j6r19K8B+prJnIZ7u+zQ+zGQ3YHXGnr41rzE3eqQLovlkvoZnRoxDGPA4ps0pGiwXy6YE3lJyg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@rolldown/binding-darwin-x64@1.0.0-beta.52':
+ resolution: {integrity: sha512-qpHedvQBmIjT8zdnjN3nWPR2qjQyJttbXniCEKKdHeAbZG9HyNPBUzQF7AZZGwmS9coQKL+hWg9FhWzh2dZ2IA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [darwin]
+
+ '@rolldown/binding-freebsd-x64@1.0.0-beta.52':
+ resolution: {integrity: sha512-dDp7WbPapj/NVW0LSiH/CLwMhmLwwKb3R7mh2kWX+QW85X1DGVnIEyKh9PmNJjB/+suG1dJygdtdNPVXK1hylg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.52':
+ resolution: {integrity: sha512-9e4l6vy5qNSliDPqNfR6CkBOAx6PH7iDV4OJiEJzajajGrVy8gc/IKKJUsoE52G8ud8MX6r3PMl97NfwgOzB7g==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [linux]
+
+ '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.52':
+ resolution: {integrity: sha512-V48oDR84feRU2KRuzpALp594Uqlx27+zFsT6+BgTcXOtu7dWy350J1G28ydoCwKB+oxwsRPx2e7aeQnmd3YJbQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+
+ '@rolldown/binding-linux-arm64-musl@1.0.0-beta.52':
+ resolution: {integrity: sha512-ENLmSQCWqSA/+YN45V2FqTIemg7QspaiTjlm327eUAMeOLdqmSOVVyrQexJGNTQ5M8sDYCgVAig2Kk01Ggmqaw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+
+ '@rolldown/binding-linux-x64-gnu@1.0.0-beta.52':
+ resolution: {integrity: sha512-klahlb2EIFltSUubn/VLjuc3qxp1E7th8ukayPfdkcKvvYcQ5rJztgx8JsJSuAKVzKtNTqUGOhy4On71BuyV8g==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+
+ '@rolldown/binding-linux-x64-musl@1.0.0-beta.52':
+ resolution: {integrity: sha512-UuA+JqQIgqtkgGN2c/AQ5wi8M6mJHrahz/wciENPTeI6zEIbbLGoth5XN+sQe2pJDejEVofN9aOAp0kaazwnVg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+
+ '@rolldown/binding-openharmony-arm64@1.0.0-beta.52':
+ resolution: {integrity: sha512-1BNQW8u4ro8bsN1+tgKENJiqmvc+WfuaUhXzMImOVSMw28pkBKdfZtX2qJPADV3terx+vNJtlsgSGeb3+W6Jiw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@rolldown/binding-wasm32-wasi@1.0.0-beta.52':
+ resolution: {integrity: sha512-K/p7clhCqJOQpXGykrFaBX2Dp9AUVIDHGc+PtFGBwg7V+mvBTv/tsm3LC3aUmH02H2y3gz4y+nUTQ0MLpofEEg==}
+ engines: {node: '>=14.0.0'}
+ cpu: [wasm32]
+
+ '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.52':
+ resolution: {integrity: sha512-a4EkXBtnYYsKipjS7QOhEBM4bU5IlR9N1hU+JcVEVeuTiaslIyhWVKsvf7K2YkQHyVAJ+7/A9BtrGqORFcTgng==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [win32]
+
+ '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.52':
+ resolution: {integrity: sha512-5ZXcYyd4GxPA6QfbGrNcQjmjbuLGvfz6728pZMsQvGHI+06LT06M6TPtXvFvLgXtexc+OqvFe1yAIXJU1gob/w==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [ia32]
+ os: [win32]
+
+ '@rolldown/binding-win32-x64-msvc@1.0.0-beta.52':
+ resolution: {integrity: sha512-tzpnRQXJrSzb8Z9sm97UD3cY0toKOImx+xRKsDLX4zHaAlRXWh7jbaKBePJXEN7gNw7Nm03PBNwphdtA8KSUYQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [win32]
+
+ '@rolldown/pluginutils@1.0.0-beta.52':
+ resolution: {integrity: sha512-/L0htLJZbaZFL1g9OHOblTxbCYIGefErJjtYOwgl9ZqNx27P3L0SDfjhhHIss32gu5NWgnxuT2a2Hnnv6QGHKA==}
+
+ '@rspack/binding-darwin-arm64@1.7.9':
+ resolution: {integrity: sha512-64dgstte0If5czi9bA/cpOe0ryY6wC9AIQRtyJ3DlOF6Tt+y9cKkmUoGu3V+WYaYIZRT7HNk8V7kL8amVjFTYw==}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@rspack/binding-darwin-x64@1.7.9':
+ resolution: {integrity: sha512-2QSLs3w4rLy4UUGVnIlkt6IlIKOzR1e0RPsq2FYQW6s3p9JrwRCtOeHohyh7EJSqF54dtfhe9UZSAwba3LqH1Q==}
+ cpu: [x64]
+ os: [darwin]
+
+ '@rspack/binding-linux-arm64-gnu@1.7.9':
+ resolution: {integrity: sha512-qhUGI/uVfvLmKWts4QkVHGL8yfUyJkblZs+OFD5Upa2y676EOsbQgWsCwX4xGB6Tv+TOzFP0SLh/UfO8ZfdE+w==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@rspack/binding-linux-arm64-musl@1.7.9':
+ resolution: {integrity: sha512-VjfmR1hgO9n3L6MaE5KG+DXSrrLVqHHOkVcOtS2LMq3bjMTwbBywY7ycymcLnX5KJsol8d3ZGYep6IfSOt3lFA==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@rspack/binding-linux-x64-gnu@1.7.9':
+ resolution: {integrity: sha512-0kldV+3WTs/VYDWzxJ7K40hCW26IHtnk8xPK3whKoo1649rgeXXa0EdsU5P7hG8Ef5SWQjHHHZ/fuHYSO3Y6HA==}
+ cpu: [x64]
+ os: [linux]
+
+ '@rspack/binding-linux-x64-musl@1.7.9':
+ resolution: {integrity: sha512-Gi4872cFtc2d83FKATR6Qcf2VBa/tFCqffI/IwRRl6Hx5FulEBqx+tH7gAuRVF693vrbXNxK+FQ+k4iEsEJxrw==}
+ cpu: [x64]
+ os: [linux]
+
+ '@rspack/binding-wasm32-wasi@1.7.9':
+ resolution: {integrity: sha512-5QEzqo6EaolpuZmK6w/mgSueorgGnnzp7dJaAvBj6ECFIg/aLXhXXmWCWbxt7Ws2gKvG5/PgaxDqbUxYL51juA==}
+ cpu: [wasm32]
+
+ '@rspack/binding-win32-arm64-msvc@1.7.9':
+ resolution: {integrity: sha512-MMqvcrIc8aOqTuHjWkjdzilvoZ3Hv07Od0Foogiyq3JMudsS3Wcmh7T1dFerGg19MOJcRUeEkrg2NQOMOQ6xDA==}
+ cpu: [arm64]
+ os: [win32]
+
+ '@rspack/binding-win32-ia32-msvc@1.7.9':
+ resolution: {integrity: sha512-4kYYS+NZ2CuNbKjq40yB/UEyB51o1PHj5wpr+Y943oOJXpEKWU2Q4vkF8VEohPEcnA9cKVotYCnqStme+02suA==}
+ cpu: [ia32]
+ os: [win32]
+
+ '@rspack/binding-win32-x64-msvc@1.7.9':
+ resolution: {integrity: sha512-1g+QyXXvs+838Un/4GaUvJfARDGHMCs15eXDYWBl5m/Skubyng8djWAgr6ag1+cVoJZXCPOvybTItcblWF3gbQ==}
+ cpu: [x64]
+ os: [win32]
+
+ '@rspack/binding@1.7.9':
+ resolution: {integrity: sha512-A56e0NdfNwbOSJoilMkxzaPuVYaKCNn1shuiwWnCIBmhV9ix1n9S1XvquDjkGyv+gCdR1+zfJBOa5DMB7htLHw==}
+
+ '@rspack/core@1.7.9':
+ resolution: {integrity: sha512-VHuSKvRkuv42Ya+TxEGO0LE0r9+8P4tKGokmomj4R1f/Nu2vtS3yoaIMfC4fR6VuHGd3MZ+KTI0cNNwHfFcskw==}
+ engines: {node: '>=18.12.0'}
+ peerDependencies:
+ '@swc/helpers': '>=0.5.1'
+ peerDependenciesMeta:
+ '@swc/helpers':
+ optional: true
+
+ '@rspack/lite-tapable@1.1.0':
+ resolution: {integrity: sha512-E2B0JhYFmVAwdDiG14+DW0Di4Ze4Jg10Pc4/lILUrd5DRCaklduz2OvJ5HYQ6G+hd+WTzqQb3QnDNfK4yvAFYw==}
+
'@sec-ant/readable-stream@0.4.1':
resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==}
+ '@stack.gallery/catalog@file:../catalog':
+ resolution: {directory: ../catalog, type: directory}
+
'@tempfix/idb@8.0.3':
resolution: {integrity: sha512-hPJQKO7+oAIY+pDNImrZ9QAINbz9KmwT+yO4iRVwdPanok2YKpaUxdJzIvCUwY0YgAawlvYdffbLvRLV5hbs2g==}
@@ -222,6 +865,141 @@ packages:
vue:
optional: true
+ '@tempfix/webcontainer__api@1.6.1':
+ resolution: {integrity: sha512-Hgn3cwy0vPzjrVBqeVnY0jNZLaOCW7d+dxBe7Jv9YGHAjJ8udUMS+KbTywSv5paAfld3A/RN/iolmMzOwZxLTA==}
+
+ '@tiptap/core@2.27.2':
+ resolution: {integrity: sha512-ABL1N6eoxzDzC1bYvkMbvyexHacszsKdVPYqhl5GwHLOvpZcv9VE9QaKwDILTyz5voCA0lGcAAXZp+qnXOk5lQ==}
+ peerDependencies:
+ '@tiptap/pm': ^2.7.0
+
+ '@tiptap/extension-blockquote@2.27.2':
+ resolution: {integrity: sha512-oIGZgiAeA4tG3YxbTDfrmENL4/CIwGuP3THtHsNhwRqwsl9SfMk58Ucopi2GXTQSdYXpRJ0ahE6nPqB5D6j/Zw==}
+ peerDependencies:
+ '@tiptap/core': ^2.7.0
+
+ '@tiptap/extension-bold@2.27.2':
+ resolution: {integrity: sha512-bR7J5IwjCGQ0s3CIxyMvOCnMFMzIvsc5OVZKscTN5UkXzFsaY6muUAIqtKxayBUucjtUskm5qZowJITCeCb1/A==}
+ peerDependencies:
+ '@tiptap/core': ^2.7.0
+
+ '@tiptap/extension-bullet-list@2.27.2':
+ resolution: {integrity: sha512-gmFuKi97u5f8uFc/GQs+zmezjiulZmFiDYTh3trVoLRoc2SAHOjGEB7qxdx7dsqmMN7gwiAWAEVurLKIi1lnnw==}
+ peerDependencies:
+ '@tiptap/core': ^2.7.0
+
+ '@tiptap/extension-code-block@2.27.2':
+ resolution: {integrity: sha512-KgvdQHS4jXr79aU3wZOGBIZYYl9vCB7uDEuRFV4so2rYrfmiYMw3T8bTnlNEEGe4RUeAms1i4fdwwvQp9nR1Dw==}
+ peerDependencies:
+ '@tiptap/core': ^2.7.0
+ '@tiptap/pm': ^2.7.0
+
+ '@tiptap/extension-code@2.27.2':
+ resolution: {integrity: sha512-7X9AgwqiIGXoZX7uvdHQsGsjILnN/JaEVtqfXZnPECzKGaWHeK/Ao4sYvIIIffsyZJA8k5DC7ny2/0sAgr2TuA==}
+ peerDependencies:
+ '@tiptap/core': ^2.7.0
+
+ '@tiptap/extension-document@2.27.2':
+ resolution: {integrity: sha512-CFhAYsPnyYnosDC4639sCJnBUnYH4Cat9qH5NZWHVvdgtDwu8GZgZn2eSzaKSYXWH1vJ9DSlCK+7UyC3SNXIBA==}
+ peerDependencies:
+ '@tiptap/core': ^2.7.0
+
+ '@tiptap/extension-dropcursor@2.27.2':
+ resolution: {integrity: sha512-oEu/OrktNoQXq1x29NnH/GOIzQZm8ieTQl3FK27nxfBPA89cNoH4mFEUmBL5/OFIENIjiYG3qWpg6voIqzswNw==}
+ peerDependencies:
+ '@tiptap/core': ^2.7.0
+ '@tiptap/pm': ^2.7.0
+
+ '@tiptap/extension-gapcursor@2.27.2':
+ resolution: {integrity: sha512-/c9VF1HBxj+AP54XGVgCmD9bEGYc5w5OofYCFQgM7l7PB1J00A4vOke0oPkHJnqnOOyPlFaxO/7N6l3XwFcnKA==}
+ peerDependencies:
+ '@tiptap/core': ^2.7.0
+ '@tiptap/pm': ^2.7.0
+
+ '@tiptap/extension-hard-break@2.27.2':
+ resolution: {integrity: sha512-kSRVGKlCYK6AGR0h8xRkk0WOFGXHIIndod3GKgWU49APuIGDiXd8sziXsSlniUsWmqgDmDXcNnSzPcV7AQ8YNg==}
+ peerDependencies:
+ '@tiptap/core': ^2.7.0
+
+ '@tiptap/extension-heading@2.27.2':
+ resolution: {integrity: sha512-iM3yeRWuuQR/IRQ1djwNooJGfn9Jts9zF43qZIUf+U2NY8IlvdNsk2wTOdBgh6E0CamrStPxYGuln3ZS4fuglw==}
+ peerDependencies:
+ '@tiptap/core': ^2.7.0
+
+ '@tiptap/extension-history@2.27.2':
+ resolution: {integrity: sha512-+hSyqERoFNTWPiZx4/FCyZ/0eFqB9fuMdTB4AC/q9iwu3RNWAQtlsJg5230bf/qmyO6bZxRUc0k8p4hrV6ybAw==}
+ peerDependencies:
+ '@tiptap/core': ^2.7.0
+ '@tiptap/pm': ^2.7.0
+
+ '@tiptap/extension-horizontal-rule@2.27.2':
+ resolution: {integrity: sha512-WGWUSgX+jCsbtf9Y9OCUUgRZYuwjVoieW5n6mAUohJ9/6gc6sGIOrUpBShf+HHo6WD+gtQjRd+PssmX3NPWMpg==}
+ peerDependencies:
+ '@tiptap/core': ^2.7.0
+ '@tiptap/pm': ^2.7.0
+
+ '@tiptap/extension-italic@2.27.2':
+ resolution: {integrity: sha512-1OFsw2SZqfaqx5Fa5v90iNlPRcqyt+lVSjBwTDzuPxTPFY4Q0mL89mKgkq2gVHYNCiaRkXvFLDxaSvBWbmthgg==}
+ peerDependencies:
+ '@tiptap/core': ^2.7.0
+
+ '@tiptap/extension-link@2.27.2':
+ resolution: {integrity: sha512-bnP61qkr0Kj9Cgnop1hxn2zbOCBzNtmawxr92bVTOE31fJv6FhtCnQiD6tuPQVGMYhcmAj7eihtvuEMFfqEPcQ==}
+ peerDependencies:
+ '@tiptap/core': ^2.7.0
+ '@tiptap/pm': ^2.7.0
+
+ '@tiptap/extension-list-item@2.27.2':
+ resolution: {integrity: sha512-eJNee7IEGXMnmygM5SdMGDC8m/lMWmwNGf9fPCK6xk0NxuQRgmZHL6uApKcdH6gyNcRPHCqvTTkhEP7pbny/fg==}
+ peerDependencies:
+ '@tiptap/core': ^2.7.0
+
+ '@tiptap/extension-ordered-list@2.27.2':
+ resolution: {integrity: sha512-M7A4tLGJcLPYdLC4CI2Gwl8LOrENQW59u3cMVa+KkwG1hzSJyPsbDpa1DI6oXPC2WtYiTf22zrbq3gVvH+KA2w==}
+ peerDependencies:
+ '@tiptap/core': ^2.7.0
+
+ '@tiptap/extension-paragraph@2.27.2':
+ resolution: {integrity: sha512-elYVn2wHJJ+zB9LESENWOAfI4TNT0jqEN34sMA/hCtA4im1ZG2DdLHwkHIshj/c4H0dzQhmsS/YmNC5Vbqab/A==}
+ peerDependencies:
+ '@tiptap/core': ^2.7.0
+
+ '@tiptap/extension-strike@2.27.2':
+ resolution: {integrity: sha512-HHIjhafLhS2lHgfAsCwC1okqMsQzR4/mkGDm4M583Yftyjri1TNA7lzhzXWRFWiiMfJxKtdjHjUAQaHuteRTZw==}
+ peerDependencies:
+ '@tiptap/core': ^2.7.0
+
+ '@tiptap/extension-text-align@2.27.2':
+ resolution: {integrity: sha512-0Pyks6Hu+Q/+9+5/osoSv0SP6jIerdWMYbi13aaZLsJoj3lBj5WNaE11JtAwSFN5sx0IbqhDSlp1zkvRnzgZ8g==}
+ peerDependencies:
+ '@tiptap/core': ^2.7.0
+
+ '@tiptap/extension-text-style@2.27.2':
+ resolution: {integrity: sha512-Omk+uxjJLyEY69KStpCw5fA9asvV+MGcAX2HOxyISDFoLaL49TMrNjhGAuz09P1L1b0KGXo4ml7Q3v/Lfy4WPA==}
+ peerDependencies:
+ '@tiptap/core': ^2.7.0
+
+ '@tiptap/extension-text@2.27.2':
+ resolution: {integrity: sha512-Xk7nYcigljAY0GO9hAQpZ65ZCxqOqaAlTPDFcKerXmlkQZP/8ndx95OgUb1Xf63kmPOh3xypurGS2is3v0MXSA==}
+ peerDependencies:
+ '@tiptap/core': ^2.7.0
+
+ '@tiptap/extension-typography@2.27.2':
+ resolution: {integrity: sha512-NSyqDa8PlAZoVRfTWQuxueTZ6ftOD72EV7UKVpftf3C+Heme727mvwl1YHMnagOlqVoxBhFOrl9CnSs/q5uayQ==}
+ peerDependencies:
+ '@tiptap/core': ^2.7.0
+
+ '@tiptap/extension-underline@2.27.2':
+ resolution: {integrity: sha512-gPOsbAcw1S07ezpAISwoO8f0RxpjcSH7VsHEFDVuXm4ODE32nhvSinvHQjv2icRLOXev+bnA7oIBu7Oy859gWQ==}
+ peerDependencies:
+ '@tiptap/core': ^2.7.0
+
+ '@tiptap/pm@2.27.2':
+ resolution: {integrity: sha512-kaEg7BfiJPDQMKbjVIzEPO3wlcA+pZb2tlcK9gPrdDnEFaec2QTF1sXz2ak2IIb2curvnIrQ4yrfHgLlVA72wA==}
+
+ '@tiptap/starter-kit@2.27.2':
+ resolution: {integrity: sha512-bb0gJvPoDuyRUQ/iuN52j1//EtWWttw+RXAv1uJxfR0uKf8X7uAqzaOOgwjknoCIDC97+1YHwpGdnRjpDkOBxw==}
+
'@tokenizer/token@0.3.0':
resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==}
@@ -231,6 +1009,15 @@ packages:
'@tsclass/tsclass@9.5.0':
resolution: {integrity: sha512-HwMVwkrBnEFMjwOsMkGwWN/q+XEczSpf4a/PBAXgkDdV6sXdxAMFXUH1tW8Y5ecuvXFYMvFry4X57MCCT7Dm8A==}
+ '@tybys/wasm-util@0.10.1':
+ resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==}
+
+ '@types/buffer-json@2.0.3':
+ resolution: {integrity: sha512-ItD4UfF3Q5jA+PEV6ZUWEHvlWaXJbd0rpuBKOIrEebM053FHaJddKsgUf0vy7nLSTs44nqFj3Mh8J3TiT0xv4g==}
+
+ '@types/clean-css@4.2.11':
+ resolution: {integrity: sha512-Y8n81lQVTAfP2TOdtJJEsCoYl1AnOkqDqMvXb9/7pfgZZ7r8YrEyurrAvAoAjHOGXKRybay+5CsExqIH6liccw==}
+
'@types/debug@4.1.13':
resolution: {integrity: sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==}
@@ -240,6 +1027,9 @@ packages:
'@types/hast@3.0.4':
resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==}
+ '@types/html-minifier@4.0.6':
+ resolution: {integrity: sha512-1Dcf38DkVMYo8SIOkUka7GxI+0BztCVsnfiG2Sxb6G8ShHDQTWQb1WKps/eb3O074HNDCn8wU7LMl5N99nNG+Q==}
+
'@types/js-yaml@3.12.10':
resolution: {integrity: sha512-/Mtaq/wf+HxXpvhzFYzrzCqNRcA958sW++7JOFC8nPrZcvfi/TrzOaaGbvt27ltJB2NQbHVAg5a1wUCsyMH7NA==}
@@ -249,9 +1039,18 @@ packages:
'@types/jsonfile@6.1.4':
resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==}
+ '@types/linkify-it@5.0.0':
+ resolution: {integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==}
+
+ '@types/markdown-it@14.1.2':
+ resolution: {integrity: sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==}
+
'@types/mdast@4.0.4':
resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==}
+ '@types/mdurl@2.0.0':
+ resolution: {integrity: sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==}
+
'@types/mime-types@2.1.4':
resolution: {integrity: sha512-lfU4b34HOri+kAY5UheuFMWPDOI+OPceBSHZKp69gEyTL/mmJ4cnU6Y/rlme3UL3GyOn6Y42hyIEw0/q8sWx5w==}
@@ -261,9 +1060,21 @@ packages:
'@types/ms@2.1.0':
resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==}
+ '@types/mute-stream@0.0.4':
+ resolution: {integrity: sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==}
+
+ '@types/node@22.19.15':
+ resolution: {integrity: sha512-F0R/h2+dsy5wJAUe3tAU6oqa2qbWY5TpNfL/RGmo1y38hiyO1w3x2jPtt76wmuaJI4DQnOBu21cNXQ2STIUUWg==}
+
'@types/node@25.5.0':
resolution: {integrity: sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw==}
+ '@types/randomatic@3.1.5':
+ resolution: {integrity: sha512-VCwCTw6qh1pRRw+5rNTAwqPmf6A+hdrkdM7dBpZVmhl7g+em3ONXlYK/bWPVKqVGMWgP0d1bog8Vc/X6zRwRRQ==}
+
+ '@types/relateurl@0.2.33':
+ resolution: {integrity: sha512-bTQCKsVbIdzLqZhLkF5fcJQreE4y1ro4DIyVrlDNSCJRRwHhB8Z+4zXXa8jN6eDvc2HbRsEYgbvrnGvi54EpSw==}
+
'@types/symbol-tree@3.2.5':
resolution: {integrity: sha512-zXnnyENt1TYQcS21MkPaJCVjfcPq7p7yc5mo5JACuumXp6sly5jnlS0IokHd+xmmuCbx6V7JqkMBpswR+nZAcw==}
@@ -276,6 +1087,9 @@ packages:
'@types/turndown@5.0.6':
resolution: {integrity: sha512-ru00MoyeeouE5BX4gRL+6m/BsDfbRayOskWqUvh7CLGW+UXxHQItqALa38kKnOiZPqJrtzJUgAC2+F0rL1S4Pg==}
+ '@types/uglify-js@3.17.5':
+ resolution: {integrity: sha512-TU+fZFBTBcXj/GpDpDaBmgWk/gn96kMZ+uocaFUlV2f8a6WdMzzI44QBCmGcCiYR0Y6ZlNRiyUyKKt5nl/lbzQ==}
+
'@types/unist@3.0.3':
resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==}
@@ -285,6 +1099,9 @@ packages:
'@types/which@3.0.4':
resolution: {integrity: sha512-liyfuo/106JdlgSchJzXEQCVArk0CvevqPote8F8HgWgJ3dRCcTHgJIsLDuee0kxk/mhbInzIZk3QWSZJ8R+2w==}
+ '@types/wrap-ansi@3.0.0':
+ resolution: {integrity: sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==}
+
'@ungap/structured-clone@1.3.0':
resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==}
@@ -296,6 +1113,10 @@ packages:
resolution: {integrity: sha1-kQ3lDvzHwJ49gvL4er1rcAwYgYo=}
engines: {node: '>=0.10.0'}
+ ansi-escapes@4.3.2:
+ resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==}
+ engines: {node: '>=8'}
+
ansi-regex@5.0.1:
resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
engines: {node: '>=8'}
@@ -304,6 +1125,9 @@ packages:
resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
engines: {node: '>=8'}
+ apexcharts@5.10.4:
+ resolution: {integrity: sha512-gt0VUqZ2+mr25ScbUcKZgJr96jKYm4vjOcxEWCEh/E5F4dWqhyo3dBhPRvNNnkKiWxkMd2cBwj3ZYH3rK39fkA==}
+
argparse@1.0.10:
resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==}
@@ -323,6 +1147,12 @@ packages:
resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==}
engines: {node: 18 || 20 || >=22}
+ base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
+ brace-expansion@1.1.12:
+ resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==}
+
brace-expansion@2.0.2:
resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==}
@@ -333,6 +1163,12 @@ packages:
broadcast-channel@7.3.0:
resolution: {integrity: sha512-UHPhLBQKfQ8OmMFMpmPfO5dRakyA1vsfiDGWTYNvChYol65tbuhivPEGgZZiuetorvExdvxaWiBy/ym1Ty08yA==}
+ buffer-json@2.0.0:
+ resolution: {integrity: sha512-+jjPFVqyfF1esi9fvfUs3NqM0pH1ziZ36VP4hmA/y/Ssfo/5w5xHKfTw9BwQjoJ1w/oVtpLomqwUHKdefGyuHw==}
+
+ buffer@6.0.3:
+ resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
+
call-bind-apply-helpers@1.0.2:
resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
engines: {node: '>= 0.4'}
@@ -341,13 +1177,20 @@ packages:
resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==}
engines: {node: '>= 0.4'}
+ call-bound@1.0.4:
+ resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==}
+ engines: {node: '>= 0.4'}
+
+ callsites@3.1.0:
+ resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
+ engines: {node: '>=6'}
+
+ camel-case@3.0.0:
+ resolution: {integrity: sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=}
+
ccount@2.0.1:
resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
- chalk@4.1.2:
- resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
- engines: {node: '>=10'}
-
character-entities-html4@2.1.0:
resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==}
@@ -357,9 +1200,24 @@ packages:
character-entities@2.0.2:
resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==}
- cliui@8.0.1:
- resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
- engines: {node: '>=12'}
+ chardet@0.7.0:
+ resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==}
+
+ chokidar@5.0.0:
+ resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==}
+ engines: {node: '>= 20.19.0'}
+
+ clean-css@4.2.4:
+ resolution: {integrity: sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==}
+ engines: {node: '>= 4.0'}
+
+ clean-stack@1.3.0:
+ resolution: {integrity: sha1-noIVAa6XmYbEax1m0tQy2y/UrjE=}
+ engines: {node: '>=4'}
+
+ cli-width@4.1.0:
+ resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==}
+ engines: {node: '>= 12'}
color-convert@2.0.1:
resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
@@ -375,10 +1233,14 @@ packages:
comma-separated-tokens@2.0.3:
resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==}
- concurrently@9.2.1:
- resolution: {integrity: sha512-fsfrO0MxV64Znoy8/l1vVIjjHa29SZyyqPgQBwhiDcaW8wJc2W3XWVOGx4M3oJBnv/zdUZIIp1gDeS98GzP8Ng==}
- engines: {node: '>=18'}
- hasBin: true
+ commander@2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+
+ concat-map@0.0.1:
+ resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=}
+
+ crelt@1.0.6:
+ resolution: {integrity: sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==}
croner@10.0.1:
resolution: {integrity: sha512-ixNtAJndqh173VQ4KodSdJEI6nuioBWI0V1ITNKhZZsO0pEMoDxz539T4FTTbSZ/xIOSuDnzxLVRqBVSvPNE2g==}
@@ -388,6 +1250,10 @@ packages:
resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
engines: {node: '>= 8'}
+ crypto-random-string@5.0.0:
+ resolution: {integrity: sha512-KWjTXWwxFd6a94m5CdRGW/t82Tr8DoBc9dNnPCAbFI1EBweN6v1tv8y4Y1m7ndkp/nkIBRxUxAzpaBnR2k3bcQ==}
+ engines: {node: '>=14.16'}
+
date-fns@4.1.0:
resolution: {integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==}
@@ -410,6 +1276,10 @@ packages:
resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
engines: {node: '>= 0.4'}
+ define-lazy-prop@2.0.0:
+ resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==}
+ engines: {node: '>=8'}
+
define-properties@1.2.1:
resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
engines: {node: '>= 0.4'}
@@ -425,6 +1295,9 @@ packages:
devlop@1.1.0:
resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==}
+ dompurify@3.2.7:
+ resolution: {integrity: sha512-WhL/YuveyGXJaerVlMYGWhvQswa7myDG17P7Vu65EWC05o8vfeNbvNf4d/BOvH99+ZW+LlQsc1GDKMa1vNK6dw==}
+
dunder-proto@1.0.1:
resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
engines: {node: '>= 0.4'}
@@ -432,6 +1305,10 @@ packages:
emoji-regex@8.0.0:
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+ entities@4.5.0:
+ resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
+ engines: {node: '>=0.12'}
+
es-define-property@1.0.1:
resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==}
engines: {node: '>= 0.4'}
@@ -448,14 +1325,23 @@ packages:
resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==}
engines: {node: '>= 0.4'}
- escalade@3.2.0:
- resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
- engines: {node: '>=6'}
+ esbuild@0.27.4:
+ resolution: {integrity: sha512-Rq4vbHnYkK5fws5NF7MYTU68FPRE1ajX7heQ/8QXXWqNgqqJ/GkmmyxIzUnf2Sr/bakf8l54716CcMGHYhMrrQ==}
+ engines: {node: '>=18'}
+ hasBin: true
+
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
escape-string-regexp@5.0.0:
resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
engines: {node: '>=12'}
+ esm@3.2.25:
+ resolution: {integrity: sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==}
+ engines: {node: '>=6'}
+
esprima@4.0.1:
resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
engines: {node: '>=4'}
@@ -467,16 +1353,35 @@ packages:
extend@3.0.2:
resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}
+ external-editor@3.1.0:
+ resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==}
+ engines: {node: '>=4'}
+
fake-indexeddb@5.0.2:
resolution: {integrity: sha512-cB507r5T3D55DfclY01GLkninZLfU7HXV/mhVRTnTRm5k2u+fY7Fof2dBkr80p5t7G7dlA/G5dI87QiMdPpMCQ==}
engines: {node: '>=18'}
+ fake-indexeddb@6.2.5:
+ resolution: {integrity: sha512-CGnyrvbhPlWYMngksqrSSUT1BAVP49dZocrHuK0SvtR0D5TMs5wP0o3j7jexDJW01KSadjBp1M/71o/KR3nD1w==}
+ engines: {node: '>=18'}
+
fast-deep-equal@3.1.3:
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
fast-json-stable-stringify@2.1.0:
resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
+ fast-xml-builder@1.1.4:
+ resolution: {integrity: sha512-f2jhpN4Eccy0/Uz9csxh3Nu6q4ErKxf0XIsasomfOihuSUa3/xw6w8dnOtCDgEItQFJG8KyXPzQXzcODDrrbOg==}
+
+ fast-xml-parser@4.5.4:
+ resolution: {integrity: sha512-jE8ugADnYOBsu1uaoayVl1tVKAMNOXyjwvv2U6udEA2ORBhDooJDWoGxTkhd4Qn4yh59JVVt/pKXtjPwx9OguQ==}
+ hasBin: true
+
+ fast-xml-parser@5.5.8:
+ resolution: {integrity: sha512-Z7Fh2nVQSb2d+poDViM063ix2ZGt9jmY1nWhPfHBOK2Hgnb/OW3P4Et3P/81SEej0J7QbWtJqxO05h8QYfK7LQ==}
+ hasBin: true
+
fault@2.0.1:
resolution: {integrity: sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==}
@@ -484,6 +1389,10 @@ packages:
resolution: {integrity: sha512-VZR5I7k5wkD0HgFnMsq5hOsSc710MJMu5Nc5QYsbe38NN5iPV/XTObYLc/cpttRTf6lX538+5uO1ZQRhYibiZQ==}
engines: {node: '>=18'}
+ foreground-child@2.0.0:
+ resolution: {integrity: sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==}
+ engines: {node: '>=8.0.0'}
+
foreground-child@3.3.1:
resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==}
engines: {node: '>=14'}
@@ -500,13 +1409,17 @@ packages:
resolution: {integrity: sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA==}
engines: {node: '>=14.14'}
+ fs.realpath@1.0.0:
+ resolution: {integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8=}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
function-bind@1.1.2:
resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
- get-caller-file@2.0.5:
- resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
- engines: {node: 6.* || 8.* || >= 10.*}
-
get-intrinsic@1.3.0:
resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==}
engines: {node: '>= 0.4'}
@@ -519,11 +1432,17 @@ packages:
resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==}
engines: {node: '>=18'}
+ get-tsconfig@4.13.6:
+ resolution: {integrity: sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw==}
+
glob@11.1.0:
resolution: {integrity: sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==}
engines: {node: 20 || >=22}
hasBin: true
+ glob@7.2.3:
+ resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
+
gopd@1.2.0:
resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==}
engines: {node: '>= 0.4'}
@@ -531,9 +1450,9 @@ packages:
graceful-fs@4.2.11:
resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
- has-flag@4.0.0:
- resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
- engines: {node: '>=8'}
+ happy-dom@15.11.7:
+ resolution: {integrity: sha512-KyrFvnl+J9US63TEzwoiJOQzZBJY7KgBushJA8X61DMbNsH+2ONkDuLDnCnwUiPTF42tLoEmrPyoqbenVA5zrg==}
+ engines: {node: '>=18.0.0'}
has-property-descriptors@1.0.2:
resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==}
@@ -559,18 +1478,50 @@ packages:
hast-util-whitespace@3.0.0:
resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==}
+ he@1.2.0:
+ resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
+ hasBin: true
+
+ highlight.js@11.11.1:
+ resolution: {integrity: sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==}
+ engines: {node: '>=12.0.0'}
+
+ html-minifier@4.0.0:
+ resolution: {integrity: sha512-aoGxanpFPLg7MkIl/DDFYtb0iWz7jMFGqFhvEDZga6/4QTjneiD8I/NXL1x5aaoCp7FSIT6h/OhykDdPsbtMig==}
+ engines: {node: '>=6'}
+ hasBin: true
+
html-void-elements@3.0.0:
resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==}
humanize-ms@1.2.1:
resolution: {integrity: sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=}
+ ibantools@4.5.1:
+ resolution: {integrity: sha512-DfKQpLlFq9yEUIEnFuCJzss3XavD7iHZTU5PyqXiAJ+rmaMp+NFP3hboumHKuK8nZjuOJg93WemTzcQ5b9jOZA==}
+
+ iconv-lite@0.4.24:
+ resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
+ engines: {node: '>=0.10.0'}
+
ieee754@1.2.1:
resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+ inflight@1.0.6:
+ resolution: {integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=}
+
inherits@2.0.4:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+ inquirer@11.1.0:
+ resolution: {integrity: sha512-CmLAZT65GG/v30c+D2Fk8+ceP6pxD6RL+hIUOWAltCmeyEqWYwqu9v76q03OvjyZ3AB0C1Ala2stn1z/rMqGEw==}
+ engines: {node: '>=18'}
+
+ is-docker@2.2.1:
+ resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==}
+ engines: {node: '>=8'}
+ hasBin: true
+
is-fullwidth-code-point@3.0.0:
resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
engines: {node: '>=8'}
@@ -579,6 +1530,14 @@ packages:
resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==}
engines: {node: '>= 0.4'}
+ is-number@4.0.0:
+ resolution: {integrity: sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-observable@2.1.0:
+ resolution: {integrity: sha512-DailKdLb0WU+xX8K5w7VsJhapwHLZ9jjmazqCJq4X12CTgqq73TKnbRcnSLuXYPOoLQgV5IrD7ePiX/h1vnkBw==}
+ engines: {node: '>=8'}
+
is-plain-obj@4.1.0:
resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==}
engines: {node: '>=12'}
@@ -587,6 +1546,14 @@ packages:
resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==}
engines: {node: '>=18'}
+ is-windows@1.0.2:
+ resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==}
+ engines: {node: '>=0.10.0'}
+
+ is-wsl@2.2.0:
+ resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==}
+ engines: {node: '>=8'}
+
isexe@2.0.0:
resolution: {integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=}
@@ -598,6 +1565,9 @@ packages:
resolution: {integrity: sha512-ykkVRwrYvFm1nb2AJfKKYPr0emF6IiXDYUaFx4Zn9ZuIH7MrzEZ3sD5RlqGXNRpHtvUHJyOnCEFxOlNDtGo7wg==}
engines: {node: 20 || >=22}
+ js-base64@3.7.8:
+ resolution: {integrity: sha512-hNngCeKxIUQiEUN3GPJOkz4wF/YvdUdbNL9hsBcMQTkKzboD7T/q3OYOuuPZLUE6dBxSGpwhk5mwuDud7JVAow==}
+
js-yaml@3.14.2:
resolution: {integrity: sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==}
hasBin: true
@@ -609,6 +1579,16 @@ packages:
jsonfile@6.2.0:
resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==}
+ kind-of@6.0.3:
+ resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==}
+ engines: {node: '>=0.10.0'}
+
+ linkify-it@5.0.0:
+ resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==}
+
+ linkifyjs@4.3.2:
+ resolution: {integrity: sha512-NT1CJtq3hHIreOianA8aSXn6Cw0JzYOuDQbOrSPe7gqFnCpKP++MQe3ODgO3oh2GJFORkAAdqredOa60z63GbA==}
+
lit-element@4.2.2:
resolution: {integrity: sha512-aFKhNToWxoyhkNDmWZwEva2SlQia+jfG0fjIWV//YeTaWrVnOxD89dPKfigCUspXFmjzOEUQpOkejH5Ly6sG0w==}
@@ -624,13 +1604,38 @@ packages:
longest-streak@3.1.0:
resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==}
+ lower-case@1.1.4:
+ resolution: {integrity: sha1-miyr0bno4K6ZOkv31YdcOcQujqw=}
+
lru-cache@11.2.7:
resolution: {integrity: sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==}
engines: {node: 20 || >=22}
+ lucide@0.577.0:
+ resolution: {integrity: sha512-PpC/m5eOItp/WU/GlQPFBXDOhq6HibL73KzYP37OX3LM7VmzWQF8voEj8QRWUFvy9FIKfeDQkWYoyS1D/MdWFA==}
+
+ make-dir@3.1.0:
+ resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==}
+ engines: {node: '>=8'}
+
+ make-error-cause@2.3.0:
+ resolution: {integrity: sha512-etgt+n4LlOkGSJbBTV9VROHA5R7ekIPS4vfh+bCAoJgRrJWdqJCBbpS3osRJ/HrT7R68MzMiY3L3sDJ/Fd8aBg==}
+
+ make-error@1.3.6:
+ resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
+
+ markdown-it@14.1.1:
+ resolution: {integrity: sha512-BuU2qnTti9YKgK5N+IeMubp14ZUKUUw7yeJbkjtosvHiP0AZ5c8IAgEMk79D0eC8F23r4Ac/q8cAIFdm2FtyoA==}
+ hasBin: true
+
markdown-table@3.0.4:
resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==}
+ marked@14.0.0:
+ resolution: {integrity: sha512-uIj4+faQ+MgHgwUW1l2PsPglZLOLOT1uErt06dAPtx2kjteLAkbsd/0FiYg/MGS+i7ZKLb7w2WClxHkzOOuryQ==}
+ engines: {node: '>= 18'}
+ hasBin: true
+
matcher@5.0.0:
resolution: {integrity: sha512-s2EMBOWtXFc8dgqvoAzKJXxNHibcdJMV0gwqKUaw9E2JBJuGUK7DrNKrA6g/i+v72TT16+6sVm5mS3thaMLQUw==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
@@ -639,6 +1644,9 @@ packages:
resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
engines: {node: '>= 0.4'}
+ math-random@1.0.4:
+ resolution: {integrity: sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==}
+
mdast-util-find-and-replace@3.0.2:
resolution: {integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==}
@@ -678,6 +1686,9 @@ packages:
mdast-util-to-string@4.0.0:
resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==}
+ mdurl@2.0.0:
+ resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==}
+
micromark-core-commonmark@2.0.3:
resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==}
@@ -782,6 +1793,9 @@ packages:
resolution: {integrity: sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==}
engines: {node: 18 || 20 || >=22}
+ minimatch@3.1.5:
+ resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==}
+
minimatch@9.0.9:
resolution: {integrity: sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==}
engines: {node: '>=16 || 14 >=14.17'}
@@ -790,14 +1804,32 @@ packages:
resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==}
engines: {node: '>=16 || 14 >=14.17'}
+ monaco-editor@0.55.1:
+ resolution: {integrity: sha512-jz4x+TJNFHwHtwuV9vA9rMujcZRb0CEilTEwG2rRSpe/A7Jdkuj8xPKttCgOh+v/lkHy7HsZ64oj+q3xoAFl9A==}
+
ms@2.1.3:
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+ mute-stream@1.0.0:
+ resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
nanoid@4.0.2:
resolution: {integrity: sha512-7ZtY5KTCNheRGfEFxnedV5zFiORN1+Y1N6zvPTnHQd8ENUvfaDBeuJDZb2bN/oXwXxu3qkTXDzy57W5vAmDTBw==}
engines: {node: ^14 || ^16 || >=18}
hasBin: true
+ no-case@2.3.2:
+ resolution: {integrity: sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==}
+
+ normalize-newline@4.1.0:
+ resolution: {integrity: sha512-ff4jKqMI8Xl50/4Mms/9jPobzAV/UK+kXG2XJ/7AqOmxIx8mqfqTIHYxuAnEgJ2AQeBbLnlbmZ5+38Y9A0w/YA==}
+ engines: {node: '>=12'}
+
+ object-inspect@1.13.4:
+ resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==}
+ engines: {node: '>= 0.4'}
+
object-keys@1.1.1:
resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
engines: {node: '>= 0.4'}
@@ -806,6 +1838,23 @@ packages:
resolution: {integrity: sha512-QOUH5Xrsced9fKXaQTjWoDGKeS/Or7E2jB0FN63N4mkAO4qJdB7WR7e6qWAOHM5nk25FJ8TGjhP7DH4l6vFVLg==}
engines: {node: '>=16'}
+ observable-fns@0.6.1:
+ resolution: {integrity: sha512-9gRK4+sRWzeN6AOewNBTLXir7Zl/i3GB6Yl26gK4flxz8BXVpD3kt8amREmWNb0mxYOGDotvE5a4N+PtGGKdkg==}
+
+ once@1.4.0:
+ resolution: {integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=}
+
+ open@8.4.2:
+ resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==}
+ engines: {node: '>=12'}
+
+ orderedmap@2.1.1:
+ resolution: {integrity: sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g==}
+
+ os-tmpdir@1.0.2:
+ resolution: {integrity: sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=}
+ engines: {node: '>=0.10.0'}
+
p-finally@1.0.0:
resolution: {integrity: sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=}
engines: {node: '>=4'}
@@ -821,10 +1870,21 @@ packages:
package-json-from-dist@1.0.1:
resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==}
+ param-case@2.1.1:
+ resolution: {integrity: sha1-35T9jPZTHs915r75oIWPvHK+Ikc=}
+
parse-ms@4.0.0:
resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==}
engines: {node: '>=18'}
+ path-expression-matcher@1.2.0:
+ resolution: {integrity: sha512-DwmPWeFn+tq7TiyJ2CxezCAirXjFxvaiD03npak3cRjlP9+OjTmSy1EpIrEbh+l6JgUundniloMLDQ/6VTdhLQ==}
+ engines: {node: '>=14.0.0'}
+
+ path-is-absolute@1.0.1:
+ resolution: {integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18=}
+ engines: {node: '>=0.10.0'}
+
path-key@3.1.1:
resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
engines: {node: '>=8'}
@@ -836,10 +1896,18 @@ packages:
path-to-regexp@8.3.0:
resolution: {integrity: sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==}
+ pdfjs-dist@4.10.38:
+ resolution: {integrity: sha512-/Y3fcFrXEAsMjJXeL9J8+ZG9U01LbuWaYypvDW2ycW1jL269L3js3DVBjDJ0Up9Np1uqDXsDrRihHANhZOlwdQ==}
+ engines: {node: '>=20'}
+
peek-readable@5.4.2:
resolution: {integrity: sha512-peBp3qZyuS6cNIJ2akRNG1uo1WJ1d0wTxg/fxMdZ0BqCVhx242bSFHM9eNqflfJVS9SsgkzgT/1UgnsurBOTMg==}
engines: {node: '>=14.16'}
+ picomatch@4.0.3:
+ resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==}
+ engines: {node: '>=12'}
+
pretty-ms@9.3.0:
resolution: {integrity: sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ==}
engines: {node: '>=18'}
@@ -847,10 +1915,91 @@ packages:
property-information@7.1.0:
resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==}
+ prosemirror-changeset@2.4.0:
+ resolution: {integrity: sha512-LvqH2v7Q2SF6yxatuPP2e8vSUKS/L+xAU7dPDC4RMyHMhZoGDfBC74mYuyYF4gLqOEG758wajtyhNnsTkuhvng==}
+
+ prosemirror-collab@1.3.1:
+ resolution: {integrity: sha512-4SnynYR9TTYaQVXd/ieUvsVV4PDMBzrq2xPUWutHivDuOshZXqQ5rGbZM84HEaXKbLdItse7weMGOUdDVcLKEQ==}
+
+ prosemirror-commands@1.7.1:
+ resolution: {integrity: sha512-rT7qZnQtx5c0/y/KlYaGvtG411S97UaL6gdp6RIZ23DLHanMYLyfGBV5DtSnZdthQql7W+lEVbpSfwtO8T+L2w==}
+
+ prosemirror-dropcursor@1.8.2:
+ resolution: {integrity: sha512-CCk6Gyx9+Tt2sbYk5NK0nB1ukHi2ryaRgadV/LvyNuO3ena1payM2z6Cg0vO1ebK8cxbzo41ku2DE5Axj1Zuiw==}
+
+ prosemirror-gapcursor@1.4.1:
+ resolution: {integrity: sha512-pMdYaEnjNMSwl11yjEGtgTmLkR08m/Vl+Jj443167p9eB3HVQKhYCc4gmHVDsLPODfZfjr/MmirsdyZziXbQKw==}
+
+ prosemirror-history@1.5.0:
+ resolution: {integrity: sha512-zlzTiH01eKA55UAf1MEjtssJeHnGxO0j4K4Dpx+gnmX9n+SHNlDqI2oO1Kv1iPN5B1dm5fsljCfqKF9nFL6HRg==}
+
+ prosemirror-inputrules@1.5.1:
+ resolution: {integrity: sha512-7wj4uMjKaXWAQ1CDgxNzNtR9AlsuwzHfdFH1ygEHA2KHF2DOEaXl1CJfNPAKCg9qNEh4rum975QLaCiQPyY6Fw==}
+
+ prosemirror-keymap@1.2.3:
+ resolution: {integrity: sha512-4HucRlpiLd1IPQQXNqeo81BGtkY8Ai5smHhKW9jjPKRc2wQIxksg7Hl1tTI2IfT2B/LgX6bfYvXxEpJl7aKYKw==}
+
+ prosemirror-markdown@1.13.4:
+ resolution: {integrity: sha512-D98dm4cQ3Hs6EmjK500TdAOew4Z03EV71ajEFiWra3Upr7diytJsjF4mPV2dW+eK5uNectiRj0xFxYI9NLXDbw==}
+
+ prosemirror-menu@1.3.0:
+ resolution: {integrity: sha512-TImyPXCHPcDsSka2/lwJ6WjTASr4re/qWq1yoTTuLOqfXucwF6VcRa2LWCkM/EyTD1UO3CUwiH8qURJoWJRxwg==}
+
+ prosemirror-model@1.25.4:
+ resolution: {integrity: sha512-PIM7E43PBxKce8OQeezAs9j4TP+5yDpZVbuurd1h5phUxEKIu+G2a+EUZzIC5nS1mJktDJWzbqS23n1tsAf5QA==}
+
+ prosemirror-schema-basic@1.2.4:
+ resolution: {integrity: sha512-ELxP4TlX3yr2v5rM7Sb70SqStq5NvI15c0j9j/gjsrO5vaw+fnnpovCLEGIcpeGfifkuqJwl4fon6b+KdrODYQ==}
+
+ prosemirror-schema-list@1.5.1:
+ resolution: {integrity: sha512-927lFx/uwyQaGwJxLWCZRkjXG0p48KpMj6ueoYiu4JX05GGuGcgzAy62dfiV8eFZftgyBUvLx76RsMe20fJl+Q==}
+
+ prosemirror-state@1.4.4:
+ resolution: {integrity: sha512-6jiYHH2CIGbCfnxdHbXZ12gySFY/fz/ulZE333G6bPqIZ4F+TXo9ifiR86nAHpWnfoNjOb3o5ESi7J8Uz1jXHw==}
+
+ prosemirror-tables@1.8.5:
+ resolution: {integrity: sha512-V/0cDCsHKHe/tfWkeCmthNUcEp1IVO3p6vwN8XtwE9PZQLAZJigbw3QoraAdfJPir4NKJtNvOB8oYGKRl+t0Dw==}
+
+ prosemirror-trailing-node@3.0.0:
+ resolution: {integrity: sha512-xiun5/3q0w5eRnGYfNlW1uU9W6x5MoFKWwq/0TIRgt09lv7Hcser2QYV8t4muXbEr+Fwo0geYn79Xs4GKywrRQ==}
+ peerDependencies:
+ prosemirror-model: ^1.22.1
+ prosemirror-state: ^1.4.2
+ prosemirror-view: ^1.33.8
+
+ prosemirror-transform@1.11.0:
+ resolution: {integrity: sha512-4I7Ce4KpygXb9bkiPS3hTEk4dSHorfRw8uI0pE8IhxlK2GXsqv5tIA7JUSxtSu7u8APVOTtbUBxTmnHIxVkIJw==}
+
+ prosemirror-view@1.41.7:
+ resolution: {integrity: sha512-jUwKNCEIGiqdvhlS91/2QAg21e4dfU5bH2iwmSDQeosXJgKF7smG0YSplOWK0cjSNgIqXe7VXqo7EIfUFJdt3w==}
+
+ punycode.js@2.3.1:
+ resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==}
+ engines: {node: '>=6'}
+
+ punycode@1.4.1:
+ resolution: {integrity: sha1-wNWmOycYgArY4esPpSachN1BhF4=}
+
+ qs@6.15.0:
+ resolution: {integrity: sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ==}
+ engines: {node: '>=0.6'}
+
+ randomatic@3.1.1:
+ resolution: {integrity: sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==}
+ engines: {node: '>= 0.10.0'}
+
readable-stream@3.6.2:
resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
engines: {node: '>= 6'}
+ readdirp@5.0.0:
+ resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==}
+ engines: {node: '>= 20.19.0'}
+
+ relateurl@0.2.7:
+ resolution: {integrity: sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=}
+ engines: {node: '>= 0.10'}
+
remark-frontmatter@5.0.0:
resolution: {integrity: sha512-XTFYvNASMe5iPN0719nPrdItC9aU0ssC4v14mH1BCi1u0n1gAocqcujWUrByftZTbLhRtiKRyjYTSIOcr69UVQ==}
@@ -866,9 +2015,28 @@ packages:
remark-stringify@11.0.0:
resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==}
- require-directory@2.1.1:
- resolution: {integrity: sha1-jGStX9MNqxyXbiNE/+f3kqam30I=}
- engines: {node: '>=0.10.0'}
+ replace-buffer@1.2.1:
+ resolution: {integrity: sha512-ly3OKwKu+3T55DjP5PjIMzxgz9lFx6dQnBmAIxryZyRKl8f22juy12ShOyuq8WrQE5UlFOseZgQZDua0iF9DHw==}
+ engines: {node: '>=4'}
+
+ resolve-pkg-maps@1.0.0:
+ resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}
+
+ rimraf@3.0.2:
+ resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
+ hasBin: true
+
+ rolldown@1.0.0-beta.52:
+ resolution: {integrity: sha512-Hbnpljue+JhMJrlOjQ1ixp9me7sUec7OjFvS+A1Qm8k8Xyxmw3ZhxFu7LlSXW1s9AX3POE9W9o2oqCEeR5uDmg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ hasBin: true
+
+ rope-sequence@1.3.4:
+ resolution: {integrity: sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==}
+
+ run-async@3.0.0:
+ resolution: {integrity: sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==}
+ engines: {node: '>=0.12.0'}
rxjs@7.8.2:
resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==}
@@ -876,6 +2044,13 @@ packages:
safe-buffer@5.2.1:
resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+ safer-buffer@2.1.2:
+ resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
+
+ semver@6.3.1:
+ resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
+ hasBin: true
+
set-function-length@1.2.2:
resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
engines: {node: '>= 0.4'}
@@ -888,17 +2063,40 @@ packages:
resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
engines: {node: '>=8'}
- shell-quote@1.8.3:
- resolution: {integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==}
+ side-channel-list@1.0.0:
+ resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==}
engines: {node: '>= 0.4'}
+ side-channel-map@1.0.1:
+ resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==}
+ engines: {node: '>= 0.4'}
+
+ side-channel-weakmap@1.0.2:
+ resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==}
+ engines: {node: '>= 0.4'}
+
+ side-channel@1.1.0:
+ resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==}
+ engines: {node: '>= 0.4'}
+
+ signal-exit@3.0.7:
+ resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
+
signal-exit@4.1.0:
resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
engines: {node: '>=14'}
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
space-separated-tokens@2.0.2:
resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==}
+ spawn-wrap@2.0.0:
+ resolution: {integrity: sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==}
+ engines: {node: '>=8'}
+
sprintf-js@1.0.3:
resolution: {integrity: sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=}
@@ -916,18 +2114,20 @@ packages:
resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
engines: {node: '>=8'}
+ strip-indent@4.1.1:
+ resolution: {integrity: sha512-SlyRoSkdh1dYP0PzclLE7r0M9sgbFKKMFXpFRUMNuKhQSbC6VQIGzq3E0qsfvGJaUFJPGv6Ws1NZ/haTAjfbMA==}
+ engines: {node: '>=12'}
+
+ strnum@1.1.2:
+ resolution: {integrity: sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA==}
+
+ strnum@2.2.1:
+ resolution: {integrity: sha512-BwRvNd5/QoAtyW1na1y1LsJGQNvRlkde6Q/ipqqEaivoMdV+B1OMOTVdwR+N/cwVUcIt9PYyHmV8HyexCZSupg==}
+
strtok3@9.1.1:
resolution: {integrity: sha512-FhwotcEqjr241ZbjFzjlIYg6c5/L/s4yBGWSMvJ9UoExiSqL+FnFA/CaeZx17WGaZMS/4SOZp8wH18jSS4R4lw==}
engines: {node: '>=16'}
- supports-color@7.2.0:
- resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
- engines: {node: '>=8'}
-
- supports-color@8.1.1:
- resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
- engines: {node: '>=10'}
-
sweet-scroll@4.0.0:
resolution: {integrity: sha512-mR6fRsAQANtm3zpzhUE73KAOt2aT4ZsWzNSggiEsSqdO6Zh4gM7ioJG81EngrZEl0XAc3ZvzEfhxggOoEBc8jA==}
@@ -938,17 +2138,23 @@ packages:
resolution: {integrity: sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==}
engines: {node: '>=20'}
+ threads@1.7.0:
+ resolution: {integrity: sha512-Mx5NBSHX3sQYR6iI9VYbgHKBLisyB+xROCBGjjWm1O9wb9vfLxdaGtmT/KCjUqMsSNW6nERzCW3T6H43LqjDZQ==}
+
through2@4.0.2:
resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==}
+ tiny-worker@2.3.0:
+ resolution: {integrity: sha512-pJ70wq5EAqTAEl9IkGzA+fN0836rycEuz2Cn6yeZ6FRzlVS5IDOkFHpIoEsksPRQV34GDqXm65+OlnZqUSyK2g==}
+
+ tmp@0.0.33:
+ resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==}
+ engines: {node: '>=0.6.0'}
+
token-types@6.1.2:
resolution: {integrity: sha512-dRXchy+C0IgK8WPC6xvCHFRIWYUbqqdEIKPaKo/AcTUNzwLTK6AH7RjdLWsEZcAN/TBdtfUw3PYEgPr5VPr6ww==}
engines: {node: '>=14.16'}
- tree-kill@1.2.2:
- resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==}
- hasBin: true
-
trim-lines@3.0.1:
resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==}
@@ -958,12 +2164,25 @@ packages:
tslib@2.8.1:
resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
+ tsx@4.21.0:
+ resolution: {integrity: sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==}
+ engines: {node: '>=18.0.0'}
+ hasBin: true
+
turndown-plugin-gfm@1.0.2:
resolution: {integrity: sha512-vwz9tfvF7XN/jE0dGoBei3FXWuvll78ohzCZQuOb+ZjWrs3a0XhQVomJEb2Qh4VHTPNRO4GPZh0V7VRbiWwkRg==}
turndown@7.2.2:
resolution: {integrity: sha512-1F7db8BiExOKxjSMU2b7if62D/XOyQyZbPKq/nUwopfgnHlqXHqQ0lvfUTeUIr1lZJzOPFn43dODyMSIfvWRKQ==}
+ type-fest@0.21.3:
+ resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==}
+ engines: {node: '>=10'}
+
+ type-fest@2.19.0:
+ resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==}
+ engines: {node: '>=12.20'}
+
type-fest@4.41.0:
resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==}
engines: {node: '>=16'}
@@ -972,10 +2191,26 @@ packages:
resolution: {integrity: sha512-PlBfpQwiUvGViBNX84Yxwjsdhd1TUlXr6zjX7eoirtCPIr08NAmxwa+fcYBTeRQxHo9YC9wwF3m9i700sHma8g==}
engines: {node: '>=20'}
+ typescript@5.9.3:
+ resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==}
+ engines: {node: '>=14.17'}
+ hasBin: true
+
+ uc.micro@2.1.0:
+ resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==}
+
+ uglify-js@3.19.3:
+ resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==}
+ engines: {node: '>=0.8.0'}
+ hasBin: true
+
uint8array-extras@1.5.0:
resolution: {integrity: sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==}
engines: {node: '>=18'}
+ undici-types@6.21.0:
+ resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
+
undici-types@7.18.2:
resolution: {integrity: sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==}
@@ -1004,6 +2239,13 @@ packages:
unload@2.4.1:
resolution: {integrity: sha512-IViSAm8Z3sRBYA+9wc0fLQmU9Nrxb16rcDmIiR6Y9LJSZzI7QY5QsDhqPpKOjAn0O9/kfK1TfNEMMAGPTIraPw==}
+ upper-case@1.1.3:
+ resolution: {integrity: sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=}
+
+ url@0.11.4:
+ resolution: {integrity: sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==}
+ engines: {node: '>= 0.4'}
+
util-deprecate@1.0.2:
resolution: {integrity: sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=}
@@ -1017,6 +2259,17 @@ packages:
vfile@6.0.3:
resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==}
+ w3c-keyname@2.2.8:
+ resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==}
+
+ webidl-conversions@7.0.0:
+ resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==}
+ engines: {node: '>=12'}
+
+ whatwg-mimetype@3.0.0:
+ resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==}
+ engines: {node: '>=12'}
+
which@2.0.2:
resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
engines: {node: '>= 8'}
@@ -1027,31 +2280,53 @@ packages:
engines: {node: ^20.17.0 || >=22.9.0}
hasBin: true
- wrap-ansi@7.0.0:
- resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
- engines: {node: '>=10'}
+ wrap-ansi@6.2.0:
+ resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
+ engines: {node: '>=8'}
- y18n@5.0.8:
- resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
- engines: {node: '>=10'}
+ wrappy@1.0.2:
+ resolution: {integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=}
- yargs-parser@21.1.1:
- resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
- engines: {node: '>=12'}
+ ws@8.19.0:
+ resolution: {integrity: sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==}
+ 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
+
+ xterm-addon-fit@0.8.0:
+ resolution: {integrity: sha512-yj3Np7XlvxxhYF/EJ7p3KHaMt6OdwQ+HDu573Vx1lRXsVxOcnVJs51RgjZOouIZOczTsskaS+CpXspK81/DLqw==}
+ peerDependencies:
+ xterm: ^5.0.0
+
+ xterm@5.3.0:
+ resolution: {integrity: sha512-8QqjlekLUFTrU6x7xck1MsPzPA571K5zNqWm0M0oroYEWVOptZ0+ubQSkQ3uxIEhcIHRujJy6emDWX4A7qyFzg==}
+
+ yaml@2.8.2:
+ resolution: {integrity: sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==}
+ engines: {node: '>= 14.6'}
+ hasBin: true
yargs-parser@22.0.0:
resolution: {integrity: sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==}
engines: {node: ^20.19.0 || ^22.12.0 || >=23}
- yargs@17.7.2:
- resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
- engines: {node: '>=12'}
+ yoctocolors-cjs@2.1.3:
+ resolution: {integrity: sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==}
+ engines: {node: '>=18'}
zwitch@2.0.4:
resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==}
snapshots:
+ '@api.global/typedrequest-interfaces@2.0.2': {}
+
'@api.global/typedrequest-interfaces@3.0.19': {}
'@api.global/typedrequest@3.3.0':
@@ -1066,14 +2341,112 @@ snapshots:
'@push.rocks/webrequest': 4.0.5
'@push.rocks/webstream': 1.0.10
+ '@api.global/typedserver@8.4.2(@tiptap/pm@2.27.2)':
+ dependencies:
+ '@api.global/typedrequest': 3.3.0
+ '@api.global/typedrequest-interfaces': 3.0.19
+ '@api.global/typedsocket': 4.1.2(@push.rocks/smartserve@2.0.1)
+ '@cloudflare/workers-types': 4.20260317.1
+ '@design.estate/dees-catalog': 3.49.0(@tiptap/pm@2.27.2)
+ '@design.estate/dees-comms': 1.0.30
+ '@push.rocks/lik': 6.3.1
+ '@push.rocks/smartdelay': 3.0.5
+ '@push.rocks/smartenv': 6.0.0
+ '@push.rocks/smartfeed': 1.4.0
+ '@push.rocks/smartfile': 13.1.2
+ '@push.rocks/smartfs': 1.5.0
+ '@push.rocks/smartjson': 5.2.0
+ '@push.rocks/smartlog': 3.2.1
+ '@push.rocks/smartlog-destination-devtools': 1.0.12
+ '@push.rocks/smartlog-interfaces': 3.0.2
+ '@push.rocks/smartmanifest': 2.0.2
+ '@push.rocks/smartmatch': 2.0.0
+ '@push.rocks/smartmime': 2.0.4
+ '@push.rocks/smartntml': 2.0.8
+ '@push.rocks/smartopen': 2.0.0
+ '@push.rocks/smartpath': 6.0.0
+ '@push.rocks/smartpromise': 4.2.3
+ '@push.rocks/smartrequest': 5.0.1
+ '@push.rocks/smartrx': 3.0.10
+ '@push.rocks/smartserve': 2.0.1
+ '@push.rocks/smartsitemap': 2.0.4
+ '@push.rocks/smartstream': 3.4.0
+ '@push.rocks/smarttime': 4.2.3
+ '@push.rocks/smartwatch': 6.3.0
+ '@push.rocks/taskbuffer': 3.5.0
+ '@push.rocks/webrequest': 4.0.5
+ '@push.rocks/webstore': 2.0.20
+ '@tsclass/tsclass': 9.5.0
+ lit: 3.3.2
+ transitivePeerDependencies:
+ - '@nuxt/kit'
+ - '@tiptap/pm'
+ - bufferutil
+ - react
+ - supports-color
+ - utf-8-validate
+ - vue
+
+ '@api.global/typedsocket@4.1.2(@push.rocks/smartserve@2.0.1)':
+ dependencies:
+ '@api.global/typedrequest': 3.3.0
+ '@api.global/typedrequest-interfaces': 3.0.19
+ '@push.rocks/isohash': 2.0.1
+ '@push.rocks/smartdelay': 3.0.5
+ '@push.rocks/smartjson': 5.2.0
+ '@push.rocks/smartpromise': 4.2.3
+ '@push.rocks/smartrx': 3.0.10
+ '@push.rocks/smartserve': 2.0.1
+ '@push.rocks/smartstring': 4.1.0
+ '@push.rocks/smarturl': 3.1.0
+
'@babel/runtime@7.28.6': {}
'@borewit/text-codec@0.2.2': {}
+ '@cfworker/json-schema@4.1.1': {}
+
+ '@cloudflare/workers-types@4.20260317.1': {}
+
'@configvault.io/interfaces@1.0.17':
dependencies:
'@api.global/typedrequest-interfaces': 3.0.19
+ '@design.estate/dees-catalog@3.49.0(@tiptap/pm@2.27.2)':
+ dependencies:
+ '@design.estate/dees-domtools': 2.5.1
+ '@design.estate/dees-element': 2.2.3
+ '@design.estate/dees-wcctools': 3.8.0
+ '@fortawesome/fontawesome-svg-core': 7.2.0
+ '@fortawesome/free-brands-svg-icons': 7.2.0
+ '@fortawesome/free-regular-svg-icons': 7.2.0
+ '@fortawesome/free-solid-svg-icons': 7.2.0
+ '@push.rocks/smarti18n': 1.0.4
+ '@push.rocks/smartpromise': 4.2.3
+ '@push.rocks/smartstring': 4.1.0
+ '@tempfix/webcontainer__api': 1.6.1
+ '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2)
+ '@tiptap/extension-link': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/pm@2.27.2)
+ '@tiptap/extension-text-align': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))
+ '@tiptap/extension-typography': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))
+ '@tiptap/extension-underline': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))
+ '@tiptap/starter-kit': 2.27.2
+ '@tsclass/tsclass': 9.5.0
+ apexcharts: 5.10.4
+ highlight.js: 11.11.1
+ ibantools: 4.5.1
+ lucide: 0.577.0
+ monaco-editor: 0.55.1
+ pdfjs-dist: 4.10.38
+ xterm: 5.3.0
+ xterm-addon-fit: 0.8.0(xterm@5.3.0)
+ transitivePeerDependencies:
+ - '@nuxt/kit'
+ - '@tiptap/pm'
+ - react
+ - supports-color
+ - vue
+
'@design.estate/dees-comms@1.0.30':
dependencies:
'@api.global/typedrequest': 3.3.0
@@ -1119,6 +2492,156 @@ snapshots:
- supports-color
- vue
+ '@design.estate/dees-wcctools@3.8.0':
+ dependencies:
+ '@design.estate/dees-domtools': 2.5.1
+ '@design.estate/dees-element': 2.2.3
+ '@push.rocks/smartdelay': 3.0.5
+ lit: 3.3.2
+ transitivePeerDependencies:
+ - '@nuxt/kit'
+ - react
+ - supports-color
+ - vue
+
+ '@emnapi/core@1.9.1':
+ dependencies:
+ '@emnapi/wasi-threads': 1.2.0
+ tslib: 2.8.1
+ optional: true
+
+ '@emnapi/runtime@1.9.1':
+ dependencies:
+ tslib: 2.8.1
+ optional: true
+
+ '@emnapi/wasi-threads@1.2.0':
+ dependencies:
+ tslib: 2.8.1
+ optional: true
+
+ '@esbuild/aix-ppc64@0.27.4':
+ optional: true
+
+ '@esbuild/android-arm64@0.27.4':
+ optional: true
+
+ '@esbuild/android-arm@0.27.4':
+ optional: true
+
+ '@esbuild/android-x64@0.27.4':
+ optional: true
+
+ '@esbuild/darwin-arm64@0.27.4':
+ optional: true
+
+ '@esbuild/darwin-x64@0.27.4':
+ optional: true
+
+ '@esbuild/freebsd-arm64@0.27.4':
+ optional: true
+
+ '@esbuild/freebsd-x64@0.27.4':
+ optional: true
+
+ '@esbuild/linux-arm64@0.27.4':
+ optional: true
+
+ '@esbuild/linux-arm@0.27.4':
+ optional: true
+
+ '@esbuild/linux-ia32@0.27.4':
+ optional: true
+
+ '@esbuild/linux-loong64@0.27.4':
+ optional: true
+
+ '@esbuild/linux-mips64el@0.27.4':
+ optional: true
+
+ '@esbuild/linux-ppc64@0.27.4':
+ optional: true
+
+ '@esbuild/linux-riscv64@0.27.4':
+ optional: true
+
+ '@esbuild/linux-s390x@0.27.4':
+ optional: true
+
+ '@esbuild/linux-x64@0.27.4':
+ optional: true
+
+ '@esbuild/netbsd-arm64@0.27.4':
+ optional: true
+
+ '@esbuild/netbsd-x64@0.27.4':
+ optional: true
+
+ '@esbuild/openbsd-arm64@0.27.4':
+ optional: true
+
+ '@esbuild/openbsd-x64@0.27.4':
+ optional: true
+
+ '@esbuild/openharmony-arm64@0.27.4':
+ optional: true
+
+ '@esbuild/sunos-x64@0.27.4':
+ optional: true
+
+ '@esbuild/win32-arm64@0.27.4':
+ optional: true
+
+ '@esbuild/win32-ia32@0.27.4':
+ optional: true
+
+ '@esbuild/win32-x64@0.27.4':
+ optional: true
+
+ '@fortawesome/fontawesome-common-types@7.2.0': {}
+
+ '@fortawesome/fontawesome-svg-core@7.2.0':
+ dependencies:
+ '@fortawesome/fontawesome-common-types': 7.2.0
+
+ '@fortawesome/free-brands-svg-icons@7.2.0':
+ dependencies:
+ '@fortawesome/fontawesome-common-types': 7.2.0
+
+ '@fortawesome/free-regular-svg-icons@7.2.0':
+ dependencies:
+ '@fortawesome/fontawesome-common-types': 7.2.0
+
+ '@fortawesome/free-solid-svg-icons@7.2.0':
+ dependencies:
+ '@fortawesome/fontawesome-common-types': 7.2.0
+
+ '@git.zone/tsbundle@2.9.1':
+ dependencies:
+ '@push.rocks/early': 4.0.4
+ '@push.rocks/npmextra': 5.3.3
+ '@push.rocks/smartcli': 4.0.20
+ '@push.rocks/smartdelay': 3.0.5
+ '@push.rocks/smartfs': 1.5.0
+ '@push.rocks/smartinteract': 2.0.16
+ '@push.rocks/smartlog': 3.2.1
+ '@push.rocks/smartlog-destination-local': 9.0.2
+ '@push.rocks/smartpath': 6.0.0
+ '@push.rocks/smartpromise': 4.2.3
+ '@push.rocks/smartspawn': 3.0.3
+ '@rspack/core': 1.7.9
+ '@types/html-minifier': 4.0.6
+ esbuild: 0.27.4
+ html-minifier: 4.0.0
+ rolldown: 1.0.0-beta.52
+ typescript: 5.9.3
+ transitivePeerDependencies:
+ - '@nuxt/kit'
+ - '@swc/helpers'
+ - react
+ - supports-color
+ - vue
+
'@git.zone/tsdeno@1.2.0':
dependencies:
'@push.rocks/early': 4.0.4
@@ -1132,6 +2655,139 @@ snapshots:
- supports-color
- vue
+ '@git.zone/tsrun@2.0.1':
+ dependencies:
+ '@push.rocks/smartfile': 13.1.2
+ '@push.rocks/smartshell': 3.3.8
+ tsx: 4.21.0
+
+ '@git.zone/tswatch@3.3.0(@tiptap/pm@2.27.2)':
+ dependencies:
+ '@api.global/typedserver': 8.4.2(@tiptap/pm@2.27.2)
+ '@git.zone/tsbundle': 2.9.1
+ '@git.zone/tsrun': 2.0.1
+ '@push.rocks/early': 4.0.4
+ '@push.rocks/lik': 6.3.1
+ '@push.rocks/npmextra': 5.3.3
+ '@push.rocks/smartcli': 4.0.20
+ '@push.rocks/smartdelay': 3.0.5
+ '@push.rocks/smartexit': 2.0.3
+ '@push.rocks/smartfs': 1.5.0
+ '@push.rocks/smartinteract': 2.0.16
+ '@push.rocks/smartlog': 3.2.1
+ '@push.rocks/smartlog-destination-local': 9.0.2
+ '@push.rocks/smartshell': 3.3.8
+ '@push.rocks/smartwatch': 6.3.0
+ transitivePeerDependencies:
+ - '@nuxt/kit'
+ - '@swc/helpers'
+ - '@tiptap/pm'
+ - bufferutil
+ - react
+ - supports-color
+ - utf-8-validate
+ - vue
+
+ '@happy-dom/global-registrator@15.11.7':
+ dependencies:
+ happy-dom: 15.11.7
+
+ '@inquirer/checkbox@3.0.1':
+ dependencies:
+ '@inquirer/core': 9.2.1
+ '@inquirer/figures': 1.0.15
+ '@inquirer/type': 2.0.0
+ ansi-escapes: 4.3.2
+ yoctocolors-cjs: 2.1.3
+
+ '@inquirer/confirm@4.0.1':
+ dependencies:
+ '@inquirer/core': 9.2.1
+ '@inquirer/type': 2.0.0
+
+ '@inquirer/core@9.2.1':
+ dependencies:
+ '@inquirer/figures': 1.0.15
+ '@inquirer/type': 2.0.0
+ '@types/mute-stream': 0.0.4
+ '@types/node': 22.19.15
+ '@types/wrap-ansi': 3.0.0
+ ansi-escapes: 4.3.2
+ cli-width: 4.1.0
+ mute-stream: 1.0.0
+ signal-exit: 4.1.0
+ strip-ansi: 6.0.1
+ wrap-ansi: 6.2.0
+ yoctocolors-cjs: 2.1.3
+
+ '@inquirer/editor@3.0.1':
+ dependencies:
+ '@inquirer/core': 9.2.1
+ '@inquirer/type': 2.0.0
+ external-editor: 3.1.0
+
+ '@inquirer/expand@3.0.1':
+ dependencies:
+ '@inquirer/core': 9.2.1
+ '@inquirer/type': 2.0.0
+ yoctocolors-cjs: 2.1.3
+
+ '@inquirer/figures@1.0.15': {}
+
+ '@inquirer/input@3.0.1':
+ dependencies:
+ '@inquirer/core': 9.2.1
+ '@inquirer/type': 2.0.0
+
+ '@inquirer/number@2.0.1':
+ dependencies:
+ '@inquirer/core': 9.2.1
+ '@inquirer/type': 2.0.0
+
+ '@inquirer/password@3.0.1':
+ dependencies:
+ '@inquirer/core': 9.2.1
+ '@inquirer/type': 2.0.0
+ ansi-escapes: 4.3.2
+
+ '@inquirer/prompts@6.0.1':
+ dependencies:
+ '@inquirer/checkbox': 3.0.1
+ '@inquirer/confirm': 4.0.1
+ '@inquirer/editor': 3.0.1
+ '@inquirer/expand': 3.0.1
+ '@inquirer/input': 3.0.1
+ '@inquirer/number': 2.0.1
+ '@inquirer/password': 3.0.1
+ '@inquirer/rawlist': 3.0.1
+ '@inquirer/search': 2.0.1
+ '@inquirer/select': 3.0.1
+
+ '@inquirer/rawlist@3.0.1':
+ dependencies:
+ '@inquirer/core': 9.2.1
+ '@inquirer/type': 2.0.0
+ yoctocolors-cjs: 2.1.3
+
+ '@inquirer/search@2.0.1':
+ dependencies:
+ '@inquirer/core': 9.2.1
+ '@inquirer/figures': 1.0.15
+ '@inquirer/type': 2.0.0
+ yoctocolors-cjs: 2.1.3
+
+ '@inquirer/select@3.0.1':
+ dependencies:
+ '@inquirer/core': 9.2.1
+ '@inquirer/figures': 1.0.15
+ '@inquirer/type': 2.0.0
+ ansi-escapes: 4.3.2
+ yoctocolors-cjs: 2.1.3
+
+ '@inquirer/type@2.0.0':
+ dependencies:
+ mute-stream: 1.0.0
+
'@isaacs/cliui@9.0.0': {}
'@lit-labs/ssr-dom-shim@1.5.1': {}
@@ -1142,6 +2798,95 @@ snapshots:
'@mixmark-io/domino@2.2.0': {}
+ '@module-federation/error-codes@0.22.0': {}
+
+ '@module-federation/runtime-core@0.22.0':
+ dependencies:
+ '@module-federation/error-codes': 0.22.0
+ '@module-federation/sdk': 0.22.0
+
+ '@module-federation/runtime-tools@0.22.0':
+ dependencies:
+ '@module-federation/runtime': 0.22.0
+ '@module-federation/webpack-bundler-runtime': 0.22.0
+
+ '@module-federation/runtime@0.22.0':
+ dependencies:
+ '@module-federation/error-codes': 0.22.0
+ '@module-federation/runtime-core': 0.22.0
+ '@module-federation/sdk': 0.22.0
+
+ '@module-federation/sdk@0.22.0': {}
+
+ '@module-federation/webpack-bundler-runtime@0.22.0':
+ dependencies:
+ '@module-federation/runtime': 0.22.0
+ '@module-federation/sdk': 0.22.0
+
+ '@napi-rs/canvas-android-arm64@0.1.97':
+ optional: true
+
+ '@napi-rs/canvas-darwin-arm64@0.1.97':
+ optional: true
+
+ '@napi-rs/canvas-darwin-x64@0.1.97':
+ optional: true
+
+ '@napi-rs/canvas-linux-arm-gnueabihf@0.1.97':
+ optional: true
+
+ '@napi-rs/canvas-linux-arm64-gnu@0.1.97':
+ optional: true
+
+ '@napi-rs/canvas-linux-arm64-musl@0.1.97':
+ optional: true
+
+ '@napi-rs/canvas-linux-riscv64-gnu@0.1.97':
+ optional: true
+
+ '@napi-rs/canvas-linux-x64-gnu@0.1.97':
+ optional: true
+
+ '@napi-rs/canvas-linux-x64-musl@0.1.97':
+ optional: true
+
+ '@napi-rs/canvas-win32-arm64-msvc@0.1.97':
+ optional: true
+
+ '@napi-rs/canvas-win32-x64-msvc@0.1.97':
+ optional: true
+
+ '@napi-rs/canvas@0.1.97':
+ optionalDependencies:
+ '@napi-rs/canvas-android-arm64': 0.1.97
+ '@napi-rs/canvas-darwin-arm64': 0.1.97
+ '@napi-rs/canvas-darwin-x64': 0.1.97
+ '@napi-rs/canvas-linux-arm-gnueabihf': 0.1.97
+ '@napi-rs/canvas-linux-arm64-gnu': 0.1.97
+ '@napi-rs/canvas-linux-arm64-musl': 0.1.97
+ '@napi-rs/canvas-linux-riscv64-gnu': 0.1.97
+ '@napi-rs/canvas-linux-x64-gnu': 0.1.97
+ '@napi-rs/canvas-linux-x64-musl': 0.1.97
+ '@napi-rs/canvas-win32-arm64-msvc': 0.1.97
+ '@napi-rs/canvas-win32-x64-msvc': 0.1.97
+ optional: true
+
+ '@napi-rs/wasm-runtime@1.0.7':
+ dependencies:
+ '@emnapi/core': 1.9.1
+ '@emnapi/runtime': 1.9.1
+ '@tybys/wasm-util': 0.10.1
+ optional: true
+
+ '@napi-rs/wasm-runtime@1.1.1':
+ dependencies:
+ '@emnapi/core': 1.9.1
+ '@emnapi/runtime': 1.9.1
+ '@tybys/wasm-util': 0.10.1
+ optional: true
+
+ '@oxc-project/types@0.99.0': {}
+
'@push.rocks/consolecolor@2.0.3':
dependencies:
ansi-256-colors: 1.1.0
@@ -1151,6 +2896,11 @@ snapshots:
'@push.rocks/consolecolor': 2.0.3
'@push.rocks/smartpromise': 4.2.3
+ '@push.rocks/isohash@2.0.1':
+ dependencies:
+ '@pushrocks/smartenv': 5.0.5
+ '@pushrocks/smarthash': 3.0.2
+
'@push.rocks/isounique@1.0.5': {}
'@push.rocks/lik@6.3.1':
@@ -1193,6 +2943,14 @@ snapshots:
dependencies:
uint8array-extras: 1.5.0
+ '@push.rocks/smartcache@1.0.18':
+ dependencies:
+ '@push.rocks/smartdelay': 3.0.5
+ '@push.rocks/smarterror': 2.0.1
+ '@push.rocks/smarthash': 3.2.6
+ '@push.rocks/smartpromise': 4.2.3
+ '@push.rocks/smarttime': 4.2.3
+
'@push.rocks/smartcli@4.0.20':
dependencies:
'@push.rocks/lik': 6.3.1
@@ -1223,11 +2981,21 @@ snapshots:
dependencies:
'@push.rocks/smartpromise': 4.2.3
+ '@push.rocks/smarterror@2.0.1':
+ dependencies:
+ clean-stack: 1.3.0
+ make-error-cause: 2.3.0
+
'@push.rocks/smartexit@2.0.3':
dependencies:
'@push.rocks/lik': 6.3.1
'@push.rocks/smartpromise': 4.2.3
+ '@push.rocks/smartfeed@1.4.0':
+ dependencies:
+ '@tsclass/tsclass': 9.5.0
+ fast-xml-parser: 4.5.4
+
'@push.rocks/smartfile-interfaces@1.0.7': {}
'@push.rocks/smartfile@11.2.7':
@@ -1248,6 +3016,23 @@ snapshots:
glob: 11.1.0
js-yaml: 4.1.1
+ '@push.rocks/smartfile@13.1.2':
+ dependencies:
+ '@push.rocks/lik': 6.3.1
+ '@push.rocks/smartdelay': 3.0.5
+ '@push.rocks/smartfile-interfaces': 1.0.7
+ '@push.rocks/smartfs': 1.5.0
+ '@push.rocks/smarthash': 3.2.6
+ '@push.rocks/smartjson': 5.2.0
+ '@push.rocks/smartmime': 2.0.4
+ '@push.rocks/smartpath': 6.0.0
+ '@push.rocks/smartpromise': 4.2.3
+ '@push.rocks/smartrequest': 4.4.2
+ '@push.rocks/smartstream': 3.4.0
+ '@types/js-yaml': 4.0.9
+ glob: 11.1.0
+ js-yaml: 4.1.1
+
'@push.rocks/smartfs@1.5.0':
dependencies:
'@push.rocks/smartpath': 6.0.0
@@ -1266,6 +3051,15 @@ snapshots:
'@types/through2': 2.0.41
through2: 4.0.2
+ '@push.rocks/smarti18n@1.0.4': {}
+
+ '@push.rocks/smartinteract@2.0.16':
+ dependencies:
+ '@push.rocks/lik': 6.3.1
+ '@push.rocks/smartobject': 1.0.12
+ '@push.rocks/smartpromise': 4.2.3
+ inquirer: 11.1.0
+
'@push.rocks/smartjson@5.2.0':
dependencies:
'@push.rocks/smartenv': 5.0.13
@@ -1280,6 +3074,21 @@ snapshots:
fast-json-stable-stringify: 2.1.0
lodash.clonedeep: 4.5.0
+ '@push.rocks/smartlog-destination-devtools@1.0.12':
+ dependencies:
+ '@push.rocks/smartlog-interfaces': 3.0.2
+
+ '@push.rocks/smartlog-destination-local@9.0.2':
+ dependencies:
+ '@push.rocks/consolecolor': 2.0.3
+ '@push.rocks/smartlog-interfaces': 3.0.2
+ '@push.rocks/smartpromise': 4.2.3
+
+ '@push.rocks/smartlog-interfaces@3.0.2':
+ dependencies:
+ '@api.global/typedrequest-interfaces': 2.0.2
+ '@tsclass/tsclass': 4.4.4
+
'@push.rocks/smartlog@3.2.1':
dependencies:
'@api.global/typedrequest-interfaces': 3.0.19
@@ -1293,6 +3102,8 @@ snapshots:
'@push.rocks/webrequest': 4.0.5
'@tsclass/tsclass': 9.5.0
+ '@push.rocks/smartmanifest@2.0.2': {}
+
'@push.rocks/smartmarkdown@3.0.3':
dependencies:
'@push.rocks/smartyaml': 2.0.5
@@ -1318,11 +3129,27 @@ snapshots:
file-type: 19.6.0
mime: 4.1.0
+ '@push.rocks/smartntml@2.0.8':
+ dependencies:
+ '@design.estate/dees-element': 2.2.3
+ '@happy-dom/global-registrator': 15.11.7
+ '@push.rocks/smartpromise': 4.2.3
+ fake-indexeddb: 6.2.5
+ transitivePeerDependencies:
+ - '@nuxt/kit'
+ - react
+ - supports-color
+ - vue
+
'@push.rocks/smartobject@1.0.12':
dependencies:
fast-deep-equal: 3.1.3
minimatch: 9.0.9
+ '@push.rocks/smartopen@2.0.0':
+ dependencies:
+ open: 8.4.2
+
'@push.rocks/smartpath@6.0.0': {}
'@push.rocks/smartpromise@4.2.3': {}
@@ -1343,6 +3170,15 @@ snapshots:
agentkeepalive: 4.6.0
form-data: 4.0.5
+ '@push.rocks/smartrequest@5.0.1':
+ dependencies:
+ '@push.rocks/smartenv': 6.0.0
+ '@push.rocks/smartpath': 6.0.0
+ '@push.rocks/smartpromise': 4.2.3
+ '@push.rocks/smarturl': 3.1.0
+ agentkeepalive: 4.6.0
+ form-data: 4.0.5
+
'@push.rocks/smartrouter@1.3.3':
dependencies:
'@push.rocks/lik': 6.3.1
@@ -1358,6 +3194,19 @@ snapshots:
'@push.rocks/smartpromise': 4.2.3
rxjs: 7.8.2
+ '@push.rocks/smartserve@2.0.1':
+ dependencies:
+ '@api.global/typedrequest': 3.3.0
+ '@cfworker/json-schema': 4.1.1
+ '@push.rocks/lik': 6.3.1
+ '@push.rocks/smartenv': 6.0.0
+ '@push.rocks/smartlog': 3.2.1
+ '@push.rocks/smartpath': 6.0.0
+ ws: 8.19.0
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
'@push.rocks/smartshell@3.3.8':
dependencies:
'@push.rocks/smartdelay': 3.0.5
@@ -1366,6 +3215,24 @@ snapshots:
'@types/which': 3.0.4
which: 6.0.1
+ '@push.rocks/smartsitemap@2.0.4':
+ dependencies:
+ '@push.rocks/smartcache': 1.0.18
+ '@push.rocks/smartfeed': 1.4.0
+ '@push.rocks/smartxml': 2.0.0
+ '@push.rocks/smartyaml': 3.0.4
+ '@push.rocks/webrequest': 4.0.5
+ '@tsclass/tsclass': 9.5.0
+
+ '@push.rocks/smartspawn@3.0.3':
+ dependencies:
+ '@push.rocks/smartpromise': 4.2.3
+ spawn-wrap: 2.0.0
+ threads: 1.7.0
+ tiny-worker: 2.3.0
+ transitivePeerDependencies:
+ - supports-color
+
'@push.rocks/smartstate@2.2.1':
dependencies:
'@push.rocks/smarthash': 3.2.6
@@ -1404,11 +3271,28 @@ snapshots:
'@push.rocks/smarturl@3.1.0': {}
+ '@push.rocks/smartwatch@6.3.0':
+ dependencies:
+ '@push.rocks/lik': 6.3.1
+ '@push.rocks/smartenv': 6.0.0
+ '@push.rocks/smartpromise': 4.2.3
+ '@push.rocks/smartrx': 3.0.10
+ chokidar: 5.0.0
+ picomatch: 4.0.3
+
+ '@push.rocks/smartxml@2.0.0':
+ dependencies:
+ fast-xml-parser: 5.5.8
+
'@push.rocks/smartyaml@2.0.5':
dependencies:
'@types/js-yaml': 3.12.10
js-yaml: 3.14.2
+ '@push.rocks/smartyaml@3.0.4':
+ dependencies:
+ yaml: 2.8.2
+
'@push.rocks/taskbuffer@3.5.0':
dependencies:
'@design.estate/dees-element': 2.2.3
@@ -1454,18 +3338,318 @@ snapshots:
dependencies:
'@push.rocks/smartenv': 5.0.13
+ '@pushrocks/isounique@1.0.5': {}
+
'@pushrocks/smartdelay@3.0.1':
dependencies:
'@pushrocks/smartpromise': 4.0.2
+ '@pushrocks/smartenv@5.0.5':
+ dependencies:
+ '@pushrocks/smartpromise': 3.1.10
+
+ '@pushrocks/smarthash@3.0.2':
+ dependencies:
+ '@pushrocks/smartjson': 5.0.6
+ '@pushrocks/smartpromise': 3.1.10
+ '@types/through2': 2.0.41
+ through2: 4.0.2
+
+ '@pushrocks/smartjson@5.0.6':
+ dependencies:
+ '@pushrocks/smartstring': 4.0.7
+ '@types/buffer-json': 2.0.3
+ buffer-json: 2.0.0
+ fast-json-stable-stringify: 2.1.0
+ lodash.clonedeep: 4.5.0
+
+ '@pushrocks/smartpromise@3.1.10': {}
+
'@pushrocks/smartpromise@4.0.2': {}
+ '@pushrocks/smartstring@4.0.7':
+ dependencies:
+ '@pushrocks/isounique': 1.0.5
+ '@pushrocks/smartenv': 5.0.5
+ '@types/randomatic': 3.1.5
+ buffer: 6.0.3
+ crypto-random-string: 5.0.0
+ js-base64: 3.7.8
+ normalize-newline: 4.1.0
+ randomatic: 3.1.1
+ strip-indent: 4.1.1
+ url: 0.11.4
+
+ '@remirror/core-constants@3.0.0': {}
+
+ '@rolldown/binding-android-arm64@1.0.0-beta.52':
+ optional: true
+
+ '@rolldown/binding-darwin-arm64@1.0.0-beta.52':
+ optional: true
+
+ '@rolldown/binding-darwin-x64@1.0.0-beta.52':
+ optional: true
+
+ '@rolldown/binding-freebsd-x64@1.0.0-beta.52':
+ optional: true
+
+ '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.52':
+ optional: true
+
+ '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.52':
+ optional: true
+
+ '@rolldown/binding-linux-arm64-musl@1.0.0-beta.52':
+ optional: true
+
+ '@rolldown/binding-linux-x64-gnu@1.0.0-beta.52':
+ optional: true
+
+ '@rolldown/binding-linux-x64-musl@1.0.0-beta.52':
+ optional: true
+
+ '@rolldown/binding-openharmony-arm64@1.0.0-beta.52':
+ optional: true
+
+ '@rolldown/binding-wasm32-wasi@1.0.0-beta.52':
+ dependencies:
+ '@napi-rs/wasm-runtime': 1.1.1
+ optional: true
+
+ '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.52':
+ optional: true
+
+ '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.52':
+ optional: true
+
+ '@rolldown/binding-win32-x64-msvc@1.0.0-beta.52':
+ optional: true
+
+ '@rolldown/pluginutils@1.0.0-beta.52': {}
+
+ '@rspack/binding-darwin-arm64@1.7.9':
+ optional: true
+
+ '@rspack/binding-darwin-x64@1.7.9':
+ optional: true
+
+ '@rspack/binding-linux-arm64-gnu@1.7.9':
+ optional: true
+
+ '@rspack/binding-linux-arm64-musl@1.7.9':
+ optional: true
+
+ '@rspack/binding-linux-x64-gnu@1.7.9':
+ optional: true
+
+ '@rspack/binding-linux-x64-musl@1.7.9':
+ optional: true
+
+ '@rspack/binding-wasm32-wasi@1.7.9':
+ dependencies:
+ '@napi-rs/wasm-runtime': 1.0.7
+ optional: true
+
+ '@rspack/binding-win32-arm64-msvc@1.7.9':
+ optional: true
+
+ '@rspack/binding-win32-ia32-msvc@1.7.9':
+ optional: true
+
+ '@rspack/binding-win32-x64-msvc@1.7.9':
+ optional: true
+
+ '@rspack/binding@1.7.9':
+ optionalDependencies:
+ '@rspack/binding-darwin-arm64': 1.7.9
+ '@rspack/binding-darwin-x64': 1.7.9
+ '@rspack/binding-linux-arm64-gnu': 1.7.9
+ '@rspack/binding-linux-arm64-musl': 1.7.9
+ '@rspack/binding-linux-x64-gnu': 1.7.9
+ '@rspack/binding-linux-x64-musl': 1.7.9
+ '@rspack/binding-wasm32-wasi': 1.7.9
+ '@rspack/binding-win32-arm64-msvc': 1.7.9
+ '@rspack/binding-win32-ia32-msvc': 1.7.9
+ '@rspack/binding-win32-x64-msvc': 1.7.9
+
+ '@rspack/core@1.7.9':
+ dependencies:
+ '@module-federation/runtime-tools': 0.22.0
+ '@rspack/binding': 1.7.9
+ '@rspack/lite-tapable': 1.1.0
+
+ '@rspack/lite-tapable@1.1.0': {}
+
'@sec-ant/readable-stream@0.4.1': {}
+ '@stack.gallery/catalog@file:../catalog(@tiptap/pm@2.27.2)':
+ dependencies:
+ '@design.estate/dees-catalog': 3.49.0(@tiptap/pm@2.27.2)
+ '@design.estate/dees-domtools': 2.5.1
+ '@design.estate/dees-element': 2.2.3
+ '@design.estate/dees-wcctools': 3.8.0
+ transitivePeerDependencies:
+ - '@nuxt/kit'
+ - '@tiptap/pm'
+ - react
+ - supports-color
+ - vue
+
'@tempfix/idb@8.0.3': {}
'@tempfix/lenis@1.3.20': {}
+ '@tempfix/webcontainer__api@1.6.1': {}
+
+ '@tiptap/core@2.27.2(@tiptap/pm@2.27.2)':
+ dependencies:
+ '@tiptap/pm': 2.27.2
+
+ '@tiptap/extension-blockquote@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))':
+ dependencies:
+ '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2)
+
+ '@tiptap/extension-bold@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))':
+ dependencies:
+ '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2)
+
+ '@tiptap/extension-bullet-list@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))':
+ dependencies:
+ '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2)
+
+ '@tiptap/extension-code-block@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/pm@2.27.2)':
+ dependencies:
+ '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2)
+ '@tiptap/pm': 2.27.2
+
+ '@tiptap/extension-code@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))':
+ dependencies:
+ '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2)
+
+ '@tiptap/extension-document@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))':
+ dependencies:
+ '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2)
+
+ '@tiptap/extension-dropcursor@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/pm@2.27.2)':
+ dependencies:
+ '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2)
+ '@tiptap/pm': 2.27.2
+
+ '@tiptap/extension-gapcursor@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/pm@2.27.2)':
+ dependencies:
+ '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2)
+ '@tiptap/pm': 2.27.2
+
+ '@tiptap/extension-hard-break@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))':
+ dependencies:
+ '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2)
+
+ '@tiptap/extension-heading@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))':
+ dependencies:
+ '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2)
+
+ '@tiptap/extension-history@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/pm@2.27.2)':
+ dependencies:
+ '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2)
+ '@tiptap/pm': 2.27.2
+
+ '@tiptap/extension-horizontal-rule@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/pm@2.27.2)':
+ dependencies:
+ '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2)
+ '@tiptap/pm': 2.27.2
+
+ '@tiptap/extension-italic@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))':
+ dependencies:
+ '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2)
+
+ '@tiptap/extension-link@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/pm@2.27.2)':
+ dependencies:
+ '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2)
+ '@tiptap/pm': 2.27.2
+ linkifyjs: 4.3.2
+
+ '@tiptap/extension-list-item@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))':
+ dependencies:
+ '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2)
+
+ '@tiptap/extension-ordered-list@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))':
+ dependencies:
+ '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2)
+
+ '@tiptap/extension-paragraph@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))':
+ dependencies:
+ '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2)
+
+ '@tiptap/extension-strike@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))':
+ dependencies:
+ '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2)
+
+ '@tiptap/extension-text-align@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))':
+ dependencies:
+ '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2)
+
+ '@tiptap/extension-text-style@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))':
+ dependencies:
+ '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2)
+
+ '@tiptap/extension-text@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))':
+ dependencies:
+ '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2)
+
+ '@tiptap/extension-typography@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))':
+ dependencies:
+ '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2)
+
+ '@tiptap/extension-underline@2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))':
+ dependencies:
+ '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2)
+
+ '@tiptap/pm@2.27.2':
+ dependencies:
+ prosemirror-changeset: 2.4.0
+ prosemirror-collab: 1.3.1
+ prosemirror-commands: 1.7.1
+ prosemirror-dropcursor: 1.8.2
+ prosemirror-gapcursor: 1.4.1
+ prosemirror-history: 1.5.0
+ prosemirror-inputrules: 1.5.1
+ prosemirror-keymap: 1.2.3
+ prosemirror-markdown: 1.13.4
+ prosemirror-menu: 1.3.0
+ prosemirror-model: 1.25.4
+ prosemirror-schema-basic: 1.2.4
+ prosemirror-schema-list: 1.5.1
+ prosemirror-state: 1.4.4
+ prosemirror-tables: 1.8.5
+ prosemirror-trailing-node: 3.0.0(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.7)
+ prosemirror-transform: 1.11.0
+ prosemirror-view: 1.41.7
+
+ '@tiptap/starter-kit@2.27.2':
+ dependencies:
+ '@tiptap/core': 2.27.2(@tiptap/pm@2.27.2)
+ '@tiptap/extension-blockquote': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))
+ '@tiptap/extension-bold': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))
+ '@tiptap/extension-bullet-list': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))
+ '@tiptap/extension-code': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))
+ '@tiptap/extension-code-block': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/pm@2.27.2)
+ '@tiptap/extension-document': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))
+ '@tiptap/extension-dropcursor': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/pm@2.27.2)
+ '@tiptap/extension-gapcursor': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/pm@2.27.2)
+ '@tiptap/extension-hard-break': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))
+ '@tiptap/extension-heading': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))
+ '@tiptap/extension-history': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/pm@2.27.2)
+ '@tiptap/extension-horizontal-rule': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))(@tiptap/pm@2.27.2)
+ '@tiptap/extension-italic': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))
+ '@tiptap/extension-list-item': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))
+ '@tiptap/extension-ordered-list': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))
+ '@tiptap/extension-paragraph': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))
+ '@tiptap/extension-strike': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))
+ '@tiptap/extension-text': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))
+ '@tiptap/extension-text-style': 2.27.2(@tiptap/core@2.27.2(@tiptap/pm@2.27.2))
+ '@tiptap/pm': 2.27.2
+
'@tokenizer/token@0.3.0': {}
'@tsclass/tsclass@4.4.4':
@@ -1476,6 +3660,18 @@ snapshots:
dependencies:
type-fest: 5.5.0
+ '@tybys/wasm-util@0.10.1':
+ dependencies:
+ tslib: 2.8.1
+ optional: true
+
+ '@types/buffer-json@2.0.3': {}
+
+ '@types/clean-css@4.2.11':
+ dependencies:
+ '@types/node': 25.5.0
+ source-map: 0.6.1
+
'@types/debug@4.1.13':
dependencies:
'@types/ms': 2.1.0
@@ -1489,6 +3685,12 @@ snapshots:
dependencies:
'@types/unist': 3.0.3
+ '@types/html-minifier@4.0.6':
+ dependencies:
+ '@types/clean-css': 4.2.11
+ '@types/relateurl': 0.2.33
+ '@types/uglify-js': 3.17.5
+
'@types/js-yaml@3.12.10': {}
'@types/js-yaml@4.0.9': {}
@@ -1497,20 +3699,41 @@ snapshots:
dependencies:
'@types/node': 25.5.0
+ '@types/linkify-it@5.0.0': {}
+
+ '@types/markdown-it@14.1.2':
+ dependencies:
+ '@types/linkify-it': 5.0.0
+ '@types/mdurl': 2.0.0
+
'@types/mdast@4.0.4':
dependencies:
'@types/unist': 3.0.3
+ '@types/mdurl@2.0.0': {}
+
'@types/mime-types@2.1.4': {}
'@types/minimatch@5.1.2': {}
'@types/ms@2.1.0': {}
+ '@types/mute-stream@0.0.4':
+ dependencies:
+ '@types/node': 25.5.0
+
+ '@types/node@22.19.15':
+ dependencies:
+ undici-types: 6.21.0
+
'@types/node@25.5.0':
dependencies:
undici-types: 7.18.2
+ '@types/randomatic@3.1.5': {}
+
+ '@types/relateurl@0.2.33': {}
+
'@types/symbol-tree@3.2.5': {}
'@types/through2@2.0.41':
@@ -1521,12 +3744,18 @@ snapshots:
'@types/turndown@5.0.6': {}
+ '@types/uglify-js@3.17.5':
+ dependencies:
+ source-map: 0.6.1
+
'@types/unist@3.0.3': {}
'@types/uuid@9.0.8': {}
'@types/which@3.0.4': {}
+ '@types/wrap-ansi@3.0.0': {}
+
'@ungap/structured-clone@1.3.0': {}
agentkeepalive@4.6.0:
@@ -1535,12 +3764,18 @@ snapshots:
ansi-256-colors@1.1.0: {}
+ ansi-escapes@4.3.2:
+ dependencies:
+ type-fest: 0.21.3
+
ansi-regex@5.0.1: {}
ansi-styles@4.3.0:
dependencies:
color-convert: 2.0.1
+ apexcharts@5.10.4: {}
+
argparse@1.0.10:
dependencies:
sprintf-js: 1.0.3
@@ -1555,6 +3790,13 @@ snapshots:
balanced-match@4.0.4: {}
+ base64-js@1.5.1: {}
+
+ brace-expansion@1.1.12:
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
+
brace-expansion@2.0.2:
dependencies:
balanced-match: 1.0.2
@@ -1570,6 +3812,13 @@ snapshots:
p-queue: 6.6.2
unload: 2.4.1
+ buffer-json@2.0.0: {}
+
+ buffer@6.0.3:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
call-bind-apply-helpers@1.0.2:
dependencies:
es-errors: 1.3.0
@@ -1582,12 +3831,19 @@ snapshots:
get-intrinsic: 1.3.0
set-function-length: 1.2.2
- ccount@2.0.1: {}
-
- chalk@4.1.2:
+ call-bound@1.0.4:
dependencies:
- ansi-styles: 4.3.0
- supports-color: 7.2.0
+ call-bind-apply-helpers: 1.0.2
+ get-intrinsic: 1.3.0
+
+ callsites@3.1.0: {}
+
+ camel-case@3.0.0:
+ dependencies:
+ no-case: 2.3.2
+ upper-case: 1.1.3
+
+ ccount@2.0.1: {}
character-entities-html4@2.1.0: {}
@@ -1595,11 +3851,19 @@ snapshots:
character-entities@2.0.2: {}
- cliui@8.0.1:
+ chardet@0.7.0: {}
+
+ chokidar@5.0.0:
dependencies:
- string-width: 4.2.3
- strip-ansi: 6.0.1
- wrap-ansi: 7.0.0
+ readdirp: 5.0.0
+
+ clean-css@4.2.4:
+ dependencies:
+ source-map: 0.6.1
+
+ clean-stack@1.3.0: {}
+
+ cli-width@4.1.0: {}
color-convert@2.0.1:
dependencies:
@@ -1613,14 +3877,11 @@ snapshots:
comma-separated-tokens@2.0.3: {}
- concurrently@9.2.1:
- dependencies:
- chalk: 4.1.2
- rxjs: 7.8.2
- shell-quote: 1.8.3
- supports-color: 8.1.1
- tree-kill: 1.2.2
- yargs: 17.7.2
+ commander@2.20.3: {}
+
+ concat-map@0.0.1: {}
+
+ crelt@1.0.6: {}
croner@10.0.1: {}
@@ -1630,6 +3891,10 @@ snapshots:
shebang-command: 2.0.0
which: 2.0.2
+ crypto-random-string@5.0.0:
+ dependencies:
+ type-fest: 2.19.0
+
date-fns@4.1.0: {}
dayjs@1.11.20: {}
@@ -1648,6 +3913,8 @@ snapshots:
es-errors: 1.3.0
gopd: 1.2.0
+ define-lazy-prop@2.0.0: {}
+
define-properties@1.2.1:
dependencies:
define-data-property: 1.1.4
@@ -1662,6 +3929,10 @@ snapshots:
dependencies:
dequal: 2.0.3
+ dompurify@3.2.7:
+ optionalDependencies:
+ '@types/trusted-types': 2.0.7
+
dunder-proto@1.0.1:
dependencies:
call-bind-apply-helpers: 1.0.2
@@ -1670,6 +3941,8 @@ snapshots:
emoji-regex@8.0.0: {}
+ entities@4.5.0: {}
+
es-define-property@1.0.1: {}
es-errors@1.3.0: {}
@@ -1685,22 +3958,75 @@ snapshots:
has-tostringtag: 1.0.2
hasown: 2.0.2
- escalade@3.2.0: {}
+ esbuild@0.27.4:
+ optionalDependencies:
+ '@esbuild/aix-ppc64': 0.27.4
+ '@esbuild/android-arm': 0.27.4
+ '@esbuild/android-arm64': 0.27.4
+ '@esbuild/android-x64': 0.27.4
+ '@esbuild/darwin-arm64': 0.27.4
+ '@esbuild/darwin-x64': 0.27.4
+ '@esbuild/freebsd-arm64': 0.27.4
+ '@esbuild/freebsd-x64': 0.27.4
+ '@esbuild/linux-arm': 0.27.4
+ '@esbuild/linux-arm64': 0.27.4
+ '@esbuild/linux-ia32': 0.27.4
+ '@esbuild/linux-loong64': 0.27.4
+ '@esbuild/linux-mips64el': 0.27.4
+ '@esbuild/linux-ppc64': 0.27.4
+ '@esbuild/linux-riscv64': 0.27.4
+ '@esbuild/linux-s390x': 0.27.4
+ '@esbuild/linux-x64': 0.27.4
+ '@esbuild/netbsd-arm64': 0.27.4
+ '@esbuild/netbsd-x64': 0.27.4
+ '@esbuild/openbsd-arm64': 0.27.4
+ '@esbuild/openbsd-x64': 0.27.4
+ '@esbuild/openharmony-arm64': 0.27.4
+ '@esbuild/sunos-x64': 0.27.4
+ '@esbuild/win32-arm64': 0.27.4
+ '@esbuild/win32-ia32': 0.27.4
+ '@esbuild/win32-x64': 0.27.4
+
+ escape-string-regexp@4.0.0: {}
escape-string-regexp@5.0.0: {}
+ esm@3.2.25: {}
+
esprima@4.0.1: {}
eventemitter3@4.0.7: {}
extend@3.0.2: {}
+ external-editor@3.1.0:
+ dependencies:
+ chardet: 0.7.0
+ iconv-lite: 0.4.24
+ tmp: 0.0.33
+
fake-indexeddb@5.0.2: {}
+ fake-indexeddb@6.2.5: {}
+
fast-deep-equal@3.1.3: {}
fast-json-stable-stringify@2.1.0: {}
+ fast-xml-builder@1.1.4:
+ dependencies:
+ path-expression-matcher: 1.2.0
+
+ fast-xml-parser@4.5.4:
+ dependencies:
+ strnum: 1.1.2
+
+ fast-xml-parser@5.5.8:
+ dependencies:
+ fast-xml-builder: 1.1.4
+ path-expression-matcher: 1.2.0
+ strnum: 2.2.1
+
fault@2.0.1:
dependencies:
format: 0.2.2
@@ -1712,6 +4038,11 @@ snapshots:
token-types: 6.1.2
uint8array-extras: 1.5.0
+ foreground-child@2.0.0:
+ dependencies:
+ cross-spawn: 7.0.6
+ signal-exit: 3.0.7
+
foreground-child@3.3.1:
dependencies:
cross-spawn: 7.0.6
@@ -1733,9 +4064,12 @@ snapshots:
jsonfile: 6.2.0
universalify: 2.0.1
- function-bind@1.1.2: {}
+ fs.realpath@1.0.0: {}
- get-caller-file@2.0.5: {}
+ fsevents@2.3.3:
+ optional: true
+
+ function-bind@1.1.2: {}
get-intrinsic@1.3.0:
dependencies:
@@ -1760,6 +4094,10 @@ snapshots:
'@sec-ant/readable-stream': 0.4.1
is-stream: 4.0.1
+ get-tsconfig@4.13.6:
+ dependencies:
+ resolve-pkg-maps: 1.0.0
+
glob@11.1.0:
dependencies:
foreground-child: 3.3.1
@@ -1769,11 +4107,24 @@ snapshots:
package-json-from-dist: 1.0.1
path-scurry: 2.0.2
+ glob@7.2.3:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.5
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+
gopd@1.2.0: {}
graceful-fs@4.2.11: {}
- has-flag@4.0.0: {}
+ happy-dom@15.11.7:
+ dependencies:
+ entities: 4.5.0
+ webidl-conversions: 7.0.0
+ whatwg-mimetype: 3.0.0
has-property-descriptors@1.0.2:
dependencies:
@@ -1813,16 +4164,54 @@ snapshots:
dependencies:
'@types/hast': 3.0.4
+ he@1.2.0: {}
+
+ highlight.js@11.11.1: {}
+
+ html-minifier@4.0.0:
+ dependencies:
+ camel-case: 3.0.0
+ clean-css: 4.2.4
+ commander: 2.20.3
+ he: 1.2.0
+ param-case: 2.1.1
+ relateurl: 0.2.7
+ uglify-js: 3.19.3
+
html-void-elements@3.0.0: {}
humanize-ms@1.2.1:
dependencies:
ms: 2.1.3
+ ibantools@4.5.1: {}
+
+ iconv-lite@0.4.24:
+ dependencies:
+ safer-buffer: 2.1.2
+
ieee754@1.2.1: {}
+ inflight@1.0.6:
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+
inherits@2.0.4: {}
+ inquirer@11.1.0:
+ dependencies:
+ '@inquirer/core': 9.2.1
+ '@inquirer/prompts': 6.0.1
+ '@inquirer/type': 2.0.0
+ '@types/mute-stream': 0.0.4
+ ansi-escapes: 4.3.2
+ mute-stream: 1.0.0
+ run-async: 3.0.0
+ rxjs: 7.8.2
+
+ is-docker@2.2.1: {}
+
is-fullwidth-code-point@3.0.0: {}
is-nan@1.3.2:
@@ -1830,10 +4219,20 @@ snapshots:
call-bind: 1.0.8
define-properties: 1.2.1
+ is-number@4.0.0: {}
+
+ is-observable@2.1.0: {}
+
is-plain-obj@4.1.0: {}
is-stream@4.0.1: {}
+ is-windows@1.0.2: {}
+
+ is-wsl@2.2.0:
+ dependencies:
+ is-docker: 2.2.1
+
isexe@2.0.0: {}
isexe@4.0.0: {}
@@ -1842,6 +4241,8 @@ snapshots:
dependencies:
'@isaacs/cliui': 9.0.0
+ js-base64@3.7.8: {}
+
js-yaml@3.14.2:
dependencies:
argparse: 1.0.10
@@ -1857,6 +4258,14 @@ snapshots:
optionalDependencies:
graceful-fs: 4.2.11
+ kind-of@6.0.3: {}
+
+ linkify-it@5.0.0:
+ dependencies:
+ uc.micro: 2.1.0
+
+ linkifyjs@4.3.2: {}
+
lit-element@4.2.2:
dependencies:
'@lit-labs/ssr-dom-shim': 1.5.1
@@ -1877,16 +4286,43 @@ snapshots:
longest-streak@3.1.0: {}
+ lower-case@1.1.4: {}
+
lru-cache@11.2.7: {}
+ lucide@0.577.0: {}
+
+ make-dir@3.1.0:
+ dependencies:
+ semver: 6.3.1
+
+ make-error-cause@2.3.0:
+ dependencies:
+ make-error: 1.3.6
+
+ make-error@1.3.6: {}
+
+ markdown-it@14.1.1:
+ dependencies:
+ argparse: 2.0.1
+ entities: 4.5.0
+ linkify-it: 5.0.0
+ mdurl: 2.0.0
+ punycode.js: 2.3.1
+ uc.micro: 2.1.0
+
markdown-table@3.0.4: {}
+ marked@14.0.0: {}
+
matcher@5.0.0:
dependencies:
escape-string-regexp: 5.0.0
math-intrinsics@1.1.0: {}
+ math-random@1.0.4: {}
+
mdast-util-find-and-replace@3.0.2:
dependencies:
'@types/mdast': 4.0.4
@@ -2012,6 +4448,8 @@ snapshots:
dependencies:
'@types/mdast': 4.0.4
+ mdurl@2.0.0: {}
+
micromark-core-commonmark@2.0.3:
dependencies:
decode-named-character-reference: 1.3.0
@@ -2222,20 +4660,57 @@ snapshots:
dependencies:
brace-expansion: 5.0.4
+ minimatch@3.1.5:
+ dependencies:
+ brace-expansion: 1.1.12
+
minimatch@9.0.9:
dependencies:
brace-expansion: 2.0.2
minipass@7.1.3: {}
+ monaco-editor@0.55.1:
+ dependencies:
+ dompurify: 3.2.7
+ marked: 14.0.0
+
ms@2.1.3: {}
+ mute-stream@1.0.0: {}
+
nanoid@4.0.2: {}
+ no-case@2.3.2:
+ dependencies:
+ lower-case: 1.1.4
+
+ normalize-newline@4.1.0:
+ dependencies:
+ replace-buffer: 1.2.1
+
+ object-inspect@1.13.4: {}
+
object-keys@1.1.1: {}
oblivious-set@2.0.0: {}
+ observable-fns@0.6.1: {}
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
+ open@8.4.2:
+ dependencies:
+ define-lazy-prop: 2.0.0
+ is-docker: 2.2.1
+ is-wsl: 2.2.0
+
+ orderedmap@2.1.1: {}
+
+ os-tmpdir@1.0.2: {}
+
p-finally@1.0.0: {}
p-queue@6.6.2:
@@ -2249,8 +4724,16 @@ snapshots:
package-json-from-dist@1.0.1: {}
+ param-case@2.1.1:
+ dependencies:
+ no-case: 2.3.2
+
parse-ms@4.0.0: {}
+ path-expression-matcher@1.2.0: {}
+
+ path-is-absolute@1.0.1: {}
+
path-key@3.1.1: {}
path-scurry@2.0.2:
@@ -2260,20 +4743,147 @@ snapshots:
path-to-regexp@8.3.0: {}
+ pdfjs-dist@4.10.38:
+ optionalDependencies:
+ '@napi-rs/canvas': 0.1.97
+
peek-readable@5.4.2: {}
+ picomatch@4.0.3: {}
+
pretty-ms@9.3.0:
dependencies:
parse-ms: 4.0.0
property-information@7.1.0: {}
+ prosemirror-changeset@2.4.0:
+ dependencies:
+ prosemirror-transform: 1.11.0
+
+ prosemirror-collab@1.3.1:
+ dependencies:
+ prosemirror-state: 1.4.4
+
+ prosemirror-commands@1.7.1:
+ dependencies:
+ prosemirror-model: 1.25.4
+ prosemirror-state: 1.4.4
+ prosemirror-transform: 1.11.0
+
+ prosemirror-dropcursor@1.8.2:
+ dependencies:
+ prosemirror-state: 1.4.4
+ prosemirror-transform: 1.11.0
+ prosemirror-view: 1.41.7
+
+ prosemirror-gapcursor@1.4.1:
+ dependencies:
+ prosemirror-keymap: 1.2.3
+ prosemirror-model: 1.25.4
+ prosemirror-state: 1.4.4
+ prosemirror-view: 1.41.7
+
+ prosemirror-history@1.5.0:
+ dependencies:
+ prosemirror-state: 1.4.4
+ prosemirror-transform: 1.11.0
+ prosemirror-view: 1.41.7
+ rope-sequence: 1.3.4
+
+ prosemirror-inputrules@1.5.1:
+ dependencies:
+ prosemirror-state: 1.4.4
+ prosemirror-transform: 1.11.0
+
+ prosemirror-keymap@1.2.3:
+ dependencies:
+ prosemirror-state: 1.4.4
+ w3c-keyname: 2.2.8
+
+ prosemirror-markdown@1.13.4:
+ dependencies:
+ '@types/markdown-it': 14.1.2
+ markdown-it: 14.1.1
+ prosemirror-model: 1.25.4
+
+ prosemirror-menu@1.3.0:
+ dependencies:
+ crelt: 1.0.6
+ prosemirror-commands: 1.7.1
+ prosemirror-history: 1.5.0
+ prosemirror-state: 1.4.4
+
+ prosemirror-model@1.25.4:
+ dependencies:
+ orderedmap: 2.1.1
+
+ prosemirror-schema-basic@1.2.4:
+ dependencies:
+ prosemirror-model: 1.25.4
+
+ prosemirror-schema-list@1.5.1:
+ dependencies:
+ prosemirror-model: 1.25.4
+ prosemirror-state: 1.4.4
+ prosemirror-transform: 1.11.0
+
+ prosemirror-state@1.4.4:
+ dependencies:
+ prosemirror-model: 1.25.4
+ prosemirror-transform: 1.11.0
+ prosemirror-view: 1.41.7
+
+ prosemirror-tables@1.8.5:
+ dependencies:
+ prosemirror-keymap: 1.2.3
+ prosemirror-model: 1.25.4
+ prosemirror-state: 1.4.4
+ prosemirror-transform: 1.11.0
+ prosemirror-view: 1.41.7
+
+ prosemirror-trailing-node@3.0.0(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.7):
+ dependencies:
+ '@remirror/core-constants': 3.0.0
+ escape-string-regexp: 4.0.0
+ prosemirror-model: 1.25.4
+ prosemirror-state: 1.4.4
+ prosemirror-view: 1.41.7
+
+ prosemirror-transform@1.11.0:
+ dependencies:
+ prosemirror-model: 1.25.4
+
+ prosemirror-view@1.41.7:
+ dependencies:
+ prosemirror-model: 1.25.4
+ prosemirror-state: 1.4.4
+ prosemirror-transform: 1.11.0
+
+ punycode.js@2.3.1: {}
+
+ punycode@1.4.1: {}
+
+ qs@6.15.0:
+ dependencies:
+ side-channel: 1.1.0
+
+ randomatic@3.1.1:
+ dependencies:
+ is-number: 4.0.0
+ kind-of: 6.0.3
+ math-random: 1.0.4
+
readable-stream@3.6.2:
dependencies:
inherits: 2.0.4
string_decoder: 1.3.0
util-deprecate: 1.0.2
+ readdirp@5.0.0: {}
+
+ relateurl@0.2.7: {}
+
remark-frontmatter@5.0.0:
dependencies:
'@types/mdast': 4.0.4
@@ -2317,7 +4927,37 @@ snapshots:
mdast-util-to-markdown: 2.1.2
unified: 11.0.5
- require-directory@2.1.1: {}
+ replace-buffer@1.2.1: {}
+
+ resolve-pkg-maps@1.0.0: {}
+
+ rimraf@3.0.2:
+ dependencies:
+ glob: 7.2.3
+
+ rolldown@1.0.0-beta.52:
+ dependencies:
+ '@oxc-project/types': 0.99.0
+ '@rolldown/pluginutils': 1.0.0-beta.52
+ optionalDependencies:
+ '@rolldown/binding-android-arm64': 1.0.0-beta.52
+ '@rolldown/binding-darwin-arm64': 1.0.0-beta.52
+ '@rolldown/binding-darwin-x64': 1.0.0-beta.52
+ '@rolldown/binding-freebsd-x64': 1.0.0-beta.52
+ '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.52
+ '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.52
+ '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.52
+ '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.52
+ '@rolldown/binding-linux-x64-musl': 1.0.0-beta.52
+ '@rolldown/binding-openharmony-arm64': 1.0.0-beta.52
+ '@rolldown/binding-wasm32-wasi': 1.0.0-beta.52
+ '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.52
+ '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.52
+ '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.52
+
+ rope-sequence@1.3.4: {}
+
+ run-async@3.0.0: {}
rxjs@7.8.2:
dependencies:
@@ -2325,6 +4965,10 @@ snapshots:
safe-buffer@5.2.1: {}
+ safer-buffer@2.1.2: {}
+
+ semver@6.3.1: {}
+
set-function-length@1.2.2:
dependencies:
define-data-property: 1.1.4
@@ -2340,12 +4984,51 @@ snapshots:
shebang-regex@3.0.0: {}
- shell-quote@1.8.3: {}
+ side-channel-list@1.0.0:
+ dependencies:
+ es-errors: 1.3.0
+ object-inspect: 1.13.4
+
+ side-channel-map@1.0.1:
+ dependencies:
+ call-bound: 1.0.4
+ es-errors: 1.3.0
+ get-intrinsic: 1.3.0
+ object-inspect: 1.13.4
+
+ side-channel-weakmap@1.0.2:
+ dependencies:
+ call-bound: 1.0.4
+ es-errors: 1.3.0
+ get-intrinsic: 1.3.0
+ object-inspect: 1.13.4
+ side-channel-map: 1.0.1
+
+ side-channel@1.1.0:
+ dependencies:
+ es-errors: 1.3.0
+ object-inspect: 1.13.4
+ side-channel-list: 1.0.0
+ side-channel-map: 1.0.1
+ side-channel-weakmap: 1.0.2
+
+ signal-exit@3.0.7: {}
signal-exit@4.1.0: {}
+ source-map@0.6.1: {}
+
space-separated-tokens@2.0.2: {}
+ spawn-wrap@2.0.0:
+ dependencies:
+ foreground-child: 2.0.0
+ is-windows: 1.0.2
+ make-dir: 3.1.0
+ rimraf: 3.0.2
+ signal-exit: 3.0.7
+ which: 2.0.2
+
sprintf-js@1.0.3: {}
string-width@4.2.3:
@@ -2367,57 +5050,91 @@ snapshots:
dependencies:
ansi-regex: 5.0.1
+ strip-indent@4.1.1: {}
+
+ strnum@1.1.2: {}
+
+ strnum@2.2.1: {}
+
strtok3@9.1.1:
dependencies:
'@tokenizer/token': 0.3.0
peek-readable: 5.4.2
- supports-color@7.2.0:
- dependencies:
- has-flag: 4.0.0
-
- supports-color@8.1.1:
- dependencies:
- has-flag: 4.0.0
-
sweet-scroll@4.0.0: {}
symbol-tree@3.2.4: {}
tagged-tag@1.0.0: {}
+ threads@1.7.0:
+ dependencies:
+ callsites: 3.1.0
+ debug: 4.4.3
+ is-observable: 2.1.0
+ observable-fns: 0.6.1
+ optionalDependencies:
+ tiny-worker: 2.3.0
+ transitivePeerDependencies:
+ - supports-color
+
through2@4.0.2:
dependencies:
readable-stream: 3.6.2
+ tiny-worker@2.3.0:
+ dependencies:
+ esm: 3.2.25
+
+ tmp@0.0.33:
+ dependencies:
+ os-tmpdir: 1.0.2
+
token-types@6.1.2:
dependencies:
'@borewit/text-codec': 0.2.2
'@tokenizer/token': 0.3.0
ieee754: 1.2.1
- tree-kill@1.2.2: {}
-
trim-lines@3.0.1: {}
trough@2.2.0: {}
tslib@2.8.1: {}
+ tsx@4.21.0:
+ dependencies:
+ esbuild: 0.27.4
+ get-tsconfig: 4.13.6
+ optionalDependencies:
+ fsevents: 2.3.3
+
turndown-plugin-gfm@1.0.2: {}
turndown@7.2.2:
dependencies:
'@mixmark-io/domino': 2.2.0
+ type-fest@0.21.3: {}
+
+ type-fest@2.19.0: {}
+
type-fest@4.41.0: {}
type-fest@5.5.0:
dependencies:
tagged-tag: 1.0.0
+ typescript@5.9.3: {}
+
+ uc.micro@2.1.0: {}
+
+ uglify-js@3.19.3: {}
+
uint8array-extras@1.5.0: {}
+ undici-types@6.21.0: {}
+
undici-types@7.18.2: {}
unified@11.0.5:
@@ -2457,6 +5174,13 @@ snapshots:
unload@2.4.1: {}
+ upper-case@1.1.3: {}
+
+ url@0.11.4:
+ dependencies:
+ punycode: 1.4.1
+ qs: 6.15.0
+
util-deprecate@1.0.2: {}
uuid@9.0.1: {}
@@ -2471,6 +5195,12 @@ snapshots:
'@types/unist': 3.0.3
vfile-message: 4.0.3
+ w3c-keyname@2.2.8: {}
+
+ webidl-conversions@7.0.0: {}
+
+ whatwg-mimetype@3.0.0: {}
+
which@2.0.2:
dependencies:
isexe: 2.0.0
@@ -2479,26 +5209,26 @@ snapshots:
dependencies:
isexe: 4.0.0
- wrap-ansi@7.0.0:
+ wrap-ansi@6.2.0:
dependencies:
ansi-styles: 4.3.0
string-width: 4.2.3
strip-ansi: 6.0.1
- y18n@5.0.8: {}
+ wrappy@1.0.2: {}
- yargs-parser@21.1.1: {}
+ ws@8.19.0: {}
+
+ xterm-addon-fit@0.8.0(xterm@5.3.0):
+ dependencies:
+ xterm: 5.3.0
+
+ xterm@5.3.0: {}
+
+ yaml@2.8.2: {}
yargs-parser@22.0.0: {}
- yargs@17.7.2:
- dependencies:
- cliui: 8.0.1
- escalade: 3.2.0
- get-caller-file: 2.0.5
- require-directory: 2.1.1
- string-width: 4.2.3
- y18n: 5.0.8
- yargs-parser: 21.1.1
+ yoctocolors-cjs@2.1.3: {}
zwitch@2.0.4: {}
diff --git a/readme.md b/readme.md
index e5af38c..01b64b3 100644
--- a/readme.md
+++ b/readme.md
@@ -1,14 +1,21 @@
# @stack.gallery/registry 📦
-A self-hosted, multi-protocol package registry built with Deno and TypeScript. Run your own private **NPM**, **Docker/OCI**, **Maven**, **Cargo**, **PyPI**, **Composer**, and **RubyGems** registry — all behind a single binary with a modern web UI.
+A self-hosted, multi-protocol package registry built with Deno and TypeScript. Run your own private
+**NPM**, **Docker/OCI**, **Maven**, **Cargo**, **PyPI**, **Composer**, and **RubyGems** registry —
+all behind a single binary with a modern web UI.
## Issue Reporting and Security
-For reporting bugs, issues, or security vulnerabilities, please visit [community.foss.global/](https://community.foss.global/). This is the central community hub for all issue reporting. Developers who sign and comply with our contribution agreement and go through identification can also get a [code.foss.global/](https://code.foss.global/) account to submit Pull Requests directly.
+For reporting bugs, issues, or security vulnerabilities, please visit
+[community.foss.global/](https://community.foss.global/). This is the central community hub for all
+issue reporting. Developers who sign and comply with our contribution agreement and go through
+identification can also get a [code.foss.global/](https://code.foss.global/) account to submit Pull
+Requests directly.
## ✨ Features
-- 🔌 **7 Protocol Support** — NPM, OCI/Docker, Maven, Cargo, PyPI, Composer, RubyGems via [`@push.rocks/smartregistry`](https://code.foss.global/push.rocks/smartregistry)
+- 🔌 **7 Protocol Support** — NPM, OCI/Docker, Maven, Cargo, PyPI, Composer, RubyGems via
+ [`@push.rocks/smartregistry`](https://code.foss.global/push.rocks/smartregistry)
- 🏢 **Organizations & Teams** — Hierarchical access control: orgs → teams → repositories
- 🔐 **Flexible Authentication** — Local JWT auth, OAuth/OIDC, and LDAP with JIT user provisioning
- 🎫 **Scoped API Tokens** — Per-protocol, per-scope tokens (`srg_` prefix) for CI/CD pipelines
@@ -33,13 +40,14 @@ For reporting bugs, issues, or security vulnerabilities, please visit [community
curl -sSL https://code.foss.global/stack.gallery/registry/raw/branch/main/install.sh | sudo bash
# Install specific version
-curl -sSL https://code.foss.global/stack.gallery/registry/raw/branch/main/install.sh | sudo bash -s -- --version v1.3.0
+curl -sSL https://code.foss.global/stack.gallery/registry/raw/branch/main/install.sh | sudo bash -s -- --version v1.4.0
# Install + set up systemd service
curl -sSL https://code.foss.global/stack.gallery/registry/raw/branch/main/install.sh | sudo bash -s -- --setup-service
```
The installer:
+
- Detects your platform (Linux/macOS, x64/ARM64)
- Downloads the pre-compiled binary from Gitea releases
- Installs to `/opt/stack-gallery-registry/` with a symlink in `/usr/local/bin/`
@@ -63,24 +71,25 @@ The registry is available at `http://localhost:3000`.
## ⚙️ Configuration
-Configuration is loaded from **environment variables** (production) or from **`.nogit/env.json`** when using the `--ephemeral` flag (development).
+Configuration is loaded from **environment variables** (production) or from **`.nogit/env.json`**
+when using the `--ephemeral` flag (development).
-| Variable | Default | Description |
-|----------|---------|-------------|
-| `MONGODB_URL` | `mongodb://localhost:27017` | MongoDB connection string |
-| `MONGODB_DB` | `stackgallery` | Database name |
-| `S3_ENDPOINT` | `http://localhost:9000` | S3-compatible endpoint |
-| `S3_ACCESS_KEY` | `minioadmin` | S3 access key |
-| `S3_SECRET_KEY` | `minioadmin` | S3 secret key |
-| `S3_BUCKET` | `registry` | S3 bucket name |
-| `S3_REGION` | — | S3 region |
-| `HOST` | `0.0.0.0` | Server bind address |
-| `PORT` | `3000` | Server port |
-| `JWT_SECRET` | `change-me-in-production` | JWT signing secret |
-| `AUTH_ENCRYPTION_KEY` | *(ephemeral)* | 64-char hex for AES-256-GCM encryption of OAuth/LDAP secrets |
-| `STORAGE_PATH` | `packages` | Base path in S3 for artifacts |
-| `ENABLE_UPSTREAM_CACHE` | `true` | Cache packages from upstream registries |
-| `UPSTREAM_CACHE_EXPIRY` | `24` | Cache TTL in hours |
+| Variable | Default | Description |
+| ----------------------- | --------------------------- | ------------------------------------------------------------ |
+| `MONGODB_URL` | `mongodb://localhost:27017` | MongoDB connection string |
+| `MONGODB_DB` | `stackgallery` | Database name |
+| `S3_ENDPOINT` | `http://localhost:9000` | S3-compatible endpoint |
+| `S3_ACCESS_KEY` | `minioadmin` | S3 access key |
+| `S3_SECRET_KEY` | `minioadmin` | S3 secret key |
+| `S3_BUCKET` | `registry` | S3 bucket name |
+| `S3_REGION` | — | S3 region |
+| `HOST` | `0.0.0.0` | Server bind address |
+| `PORT` | `3000` | Server port |
+| `JWT_SECRET` | `change-me-in-production` | JWT signing secret |
+| `AUTH_ENCRYPTION_KEY` | _(ephemeral)_ | 64-char hex for AES-256-GCM encryption of OAuth/LDAP secrets |
+| `STORAGE_PATH` | `packages` | Base path in S3 for artifacts |
+| `ENABLE_UPSTREAM_CACHE` | `true` | Cache packages from upstream registries |
+| `UPSTREAM_CACHE_EXPIRY` | `24` | Cache TTL in hours |
**Example `.nogit/env.json`:**
@@ -99,33 +108,39 @@ Configuration is loaded from **environment variables** (production) or from **`.
## 🔌 Protocol Endpoints
-Each protocol is handled natively via [`@push.rocks/smartregistry`](https://code.foss.global/push.rocks/smartregistry). Point your package manager at the registry:
+Each protocol is handled natively via
+[`@push.rocks/smartregistry`](https://code.foss.global/push.rocks/smartregistry). Point your package
+manager at the registry:
-| Protocol | Paths | Client Config Example |
-|----------|-------|-----------------------|
-| **NPM** | `/-/*`, `/@scope/*` | `npm config set registry http://registry:3000` |
-| **OCI/Docker** | `/v2/*` | `docker login registry:3000` |
-| **Maven** | `/maven2/*` | Add repository URL in `pom.xml` |
-| **Cargo** | `/api/v1/crates/*` | Configure in `.cargo/config.toml` |
-| **PyPI** | `/simple/*`, `/pypi/*` | `pip install --index-url http://registry:3000/simple/` |
-| **Composer** | `/packages.json`, `/p/*` | Add repository in `composer.json` |
-| **RubyGems** | `/api/v1/gems/*`, `/gems/*` | `gem sources -a http://registry:3000` |
+| Protocol | Paths | Client Config Example |
+| -------------- | --------------------------- | ------------------------------------------------------ |
+| **NPM** | `/-/*`, `/@scope/*` | `npm config set registry http://registry:3000` |
+| **OCI/Docker** | `/v2/*` | `docker login registry:3000` |
+| **Maven** | `/maven2/*` | Add repository URL in `pom.xml` |
+| **Cargo** | `/api/v1/crates/*` | Configure in `.cargo/config.toml` |
+| **PyPI** | `/simple/*`, `/pypi/*` | `pip install --index-url http://registry:3000/simple/` |
+| **Composer** | `/packages.json`, `/p/*` | Add repository in `composer.json` |
+| **RubyGems** | `/api/v1/gems/*`, `/gems/*` | `gem sources -a http://registry:3000` |
-Authentication works with **Bearer tokens** (API tokens prefixed `srg_`) and **Basic auth** (email:password or username:token).
+Authentication works with **Bearer tokens** (API tokens prefixed `srg_`) and **Basic auth**
+(email:password or username:token).
## 🔐 Authentication & Security
### Local Auth
+
- JWT-based with **15-minute access tokens** and **7-day refresh tokens** (HS256)
- Session tracking — each login creates a session, tokens embed session IDs
- Password hashing with PBKDF2 (10,000 rounds SHA-256 + random salt)
### External Auth (OAuth/OIDC & LDAP)
+
- **OAuth/OIDC** — Connect to any OIDC-compliant provider (Keycloak, Okta, Auth0, Azure AD, etc.)
- **LDAP** — Bind + search authentication against Active Directory or OpenLDAP
- **JIT Provisioning** — Users are auto-created on first external login
- **Auto-linking** — External identities are linked to existing users by email match
-- **Encrypted secrets** — Provider client secrets and bind passwords are stored AES-256-GCM encrypted
+- **Encrypted secrets** — Provider client secrets and bind passwords are stored AES-256-GCM
+ encrypted
### RBAC Permissions
@@ -143,6 +158,7 @@ Platform Admin (full access)
### Scoped API Tokens
Tokens are prefixed with `srg_` and can be scoped to:
+
- Specific **protocols** (e.g., npm + oci only)
- Specific **actions** (read / write / delete)
- Specific **organizations**
@@ -150,88 +166,98 @@ Tokens are prefixed with `srg_` and can be scoped to:
## 📡 REST API
-All management endpoints live under `/api/v1/`. Authenticated via `Authorization: Bearer `.
+All management endpoints live under `/api/v1/`. Authenticated via
+`Authorization: Bearer `.
### Auth
-| Method | Endpoint | Description |
-|--------|----------|-------------|
-| `POST` | `/api/v1/auth/login` | Login (email + password) |
-| `POST` | `/api/v1/auth/refresh` | Refresh access token |
-| `POST` | `/api/v1/auth/logout` | Logout (invalidate session) |
-| `GET` | `/api/v1/auth/me` | Current user info |
-| `GET` | `/api/v1/auth/providers` | List active external auth providers |
-| `GET` | `/api/v1/auth/oauth/:id/authorize` | Initiate OAuth flow |
-| `GET` | `/api/v1/auth/oauth/:id/callback` | OAuth callback |
-| `POST` | `/api/v1/auth/ldap/:id/login` | LDAP login |
+
+| Method | Endpoint | Description |
+| ------ | ---------------------------------- | ----------------------------------- |
+| `POST` | `/api/v1/auth/login` | Login (email + password) |
+| `POST` | `/api/v1/auth/refresh` | Refresh access token |
+| `POST` | `/api/v1/auth/logout` | Logout (invalidate session) |
+| `GET` | `/api/v1/auth/me` | Current user info |
+| `GET` | `/api/v1/auth/providers` | List active external auth providers |
+| `GET` | `/api/v1/auth/oauth/:id/authorize` | Initiate OAuth flow |
+| `GET` | `/api/v1/auth/oauth/:id/callback` | OAuth callback |
+| `POST` | `/api/v1/auth/ldap/:id/login` | LDAP login |
### Users
-| Method | Endpoint | Description |
-|--------|----------|-------------|
-| `GET` | `/api/v1/users` | List users |
-| `POST` | `/api/v1/users` | Create user |
-| `GET` | `/api/v1/users/:id` | Get user |
-| `PUT` | `/api/v1/users/:id` | Update user |
+
+| Method | Endpoint | Description |
+| -------- | ------------------- | ----------- |
+| `GET` | `/api/v1/users` | List users |
+| `POST` | `/api/v1/users` | Create user |
+| `GET` | `/api/v1/users/:id` | Get user |
+| `PUT` | `/api/v1/users/:id` | Update user |
| `DELETE` | `/api/v1/users/:id` | Delete user |
### Organizations
-| Method | Endpoint | Description |
-|--------|----------|-------------|
-| `GET` | `/api/v1/organizations` | List organizations |
-| `POST` | `/api/v1/organizations` | Create organization |
-| `GET` | `/api/v1/organizations/:id` | Get organization |
-| `PUT` | `/api/v1/organizations/:id` | Update organization |
-| `DELETE` | `/api/v1/organizations/:id` | Delete organization |
-| `GET` | `/api/v1/organizations/:id/members` | List members |
-| `POST` | `/api/v1/organizations/:id/members` | Add member |
-| `PUT` | `/api/v1/organizations/:id/members/:userId` | Update member role |
-| `DELETE` | `/api/v1/organizations/:id/members/:userId` | Remove member |
+
+| Method | Endpoint | Description |
+| -------- | ------------------------------------------- | ------------------- |
+| `GET` | `/api/v1/organizations` | List organizations |
+| `POST` | `/api/v1/organizations` | Create organization |
+| `GET` | `/api/v1/organizations/:id` | Get organization |
+| `PUT` | `/api/v1/organizations/:id` | Update organization |
+| `DELETE` | `/api/v1/organizations/:id` | Delete organization |
+| `GET` | `/api/v1/organizations/:id/members` | List members |
+| `POST` | `/api/v1/organizations/:id/members` | Add member |
+| `PUT` | `/api/v1/organizations/:id/members/:userId` | Update member role |
+| `DELETE` | `/api/v1/organizations/:id/members/:userId` | Remove member |
### Repositories
-| Method | Endpoint | Description |
-|--------|----------|-------------|
-| `GET` | `/api/v1/organizations/:orgId/repositories` | List org repos |
-| `POST` | `/api/v1/organizations/:orgId/repositories` | Create repo |
-| `GET` | `/api/v1/repositories/:id` | Get repo |
-| `PUT` | `/api/v1/repositories/:id` | Update repo |
-| `DELETE` | `/api/v1/repositories/:id` | Delete repo |
+
+| Method | Endpoint | Description |
+| -------- | ------------------------------------------- | -------------- |
+| `GET` | `/api/v1/organizations/:orgId/repositories` | List org repos |
+| `POST` | `/api/v1/organizations/:orgId/repositories` | Create repo |
+| `GET` | `/api/v1/repositories/:id` | Get repo |
+| `PUT` | `/api/v1/repositories/:id` | Update repo |
+| `DELETE` | `/api/v1/repositories/:id` | Delete repo |
### Packages
-| Method | Endpoint | Description |
-|--------|----------|-------------|
-| `GET` | `/api/v1/packages` | Search packages |
-| `GET` | `/api/v1/packages/:id` | Get package details |
-| `GET` | `/api/v1/packages/:id/versions` | List versions |
-| `DELETE` | `/api/v1/packages/:id` | Delete package |
-| `DELETE` | `/api/v1/packages/:id/versions/:version` | Delete version |
+
+| Method | Endpoint | Description |
+| -------- | ---------------------------------------- | ------------------- |
+| `GET` | `/api/v1/packages` | Search packages |
+| `GET` | `/api/v1/packages/:id` | Get package details |
+| `GET` | `/api/v1/packages/:id/versions` | List versions |
+| `DELETE` | `/api/v1/packages/:id` | Delete package |
+| `DELETE` | `/api/v1/packages/:id/versions/:version` | Delete version |
### Tokens
-| Method | Endpoint | Description |
-|--------|----------|-------------|
-| `GET` | `/api/v1/tokens` | List your tokens |
-| `POST` | `/api/v1/tokens` | Create token |
-| `DELETE` | `/api/v1/tokens/:id` | Revoke token |
+
+| Method | Endpoint | Description |
+| -------- | -------------------- | ---------------- |
+| `GET` | `/api/v1/tokens` | List your tokens |
+| `POST` | `/api/v1/tokens` | Create token |
+| `DELETE` | `/api/v1/tokens/:id` | Revoke token |
### Audit
-| Method | Endpoint | Description |
-|--------|----------|-------------|
-| `GET` | `/api/v1/audit` | Query audit logs |
+
+| Method | Endpoint | Description |
+| ------ | --------------- | ---------------- |
+| `GET` | `/api/v1/audit` | Query audit logs |
### Admin (Platform Admins Only)
-| Method | Endpoint | Description |
-|--------|----------|-------------|
-| `GET` | `/api/v1/admin/auth/providers` | List all auth providers |
-| `POST` | `/api/v1/admin/auth/providers` | Create auth provider |
-| `GET` | `/api/v1/admin/auth/providers/:id` | Get provider details |
-| `PUT` | `/api/v1/admin/auth/providers/:id` | Update provider |
-| `DELETE` | `/api/v1/admin/auth/providers/:id` | Disable provider |
-| `POST` | `/api/v1/admin/auth/providers/:id/test` | Test provider connection |
-| `GET` | `/api/v1/admin/auth/settings` | Get platform settings |
-| `PUT` | `/api/v1/admin/auth/settings` | Update platform settings |
+
+| Method | Endpoint | Description |
+| -------- | --------------------------------------- | ------------------------ |
+| `GET` | `/api/v1/admin/auth/providers` | List all auth providers |
+| `POST` | `/api/v1/admin/auth/providers` | Create auth provider |
+| `GET` | `/api/v1/admin/auth/providers/:id` | Get provider details |
+| `PUT` | `/api/v1/admin/auth/providers/:id` | Update provider |
+| `DELETE` | `/api/v1/admin/auth/providers/:id` | Disable provider |
+| `POST` | `/api/v1/admin/auth/providers/:id/test` | Test provider connection |
+| `GET` | `/api/v1/admin/auth/settings` | Get platform settings |
+| `PUT` | `/api/v1/admin/auth/settings` | Update platform settings |
### Health Check
-| Method | Endpoint | Description |
-|--------|----------|-------------|
-| `GET` | `/health` or `/healthz` | Returns JSON status of MongoDB, S3, and registry |
+
+| Method | Endpoint | Description |
+| ------ | ----------------------- | ------------------------------------------------ |
+| `GET` | `/health` or `/healthz` | Returns JSON status of MongoDB, S3, and registry |
## 🏗️ Architecture
@@ -268,6 +294,9 @@ registry/
│ │ ├── auth.provider.ts # IAuthProvider implementation
│ │ └── storage.provider.ts # IStorageHooks for quota/audit
│ └── interfaces/ # TypeScript interfaces & types
+├── ts_interfaces/ # Shared API contract (TypedRequest interfaces)
+│ ├── data/ # Data types (auth, org, repo, package, token, audit, admin)
+│ └── requests/ # Request/response interfaces for all API endpoints
└── ui/ # Angular 19 + Tailwind CSS frontend
└── src/app/
├── features/ # Login, dashboard, orgs, repos, packages, tokens, admin
@@ -277,17 +306,17 @@ registry/
## 🔧 Technology Stack
-| Component | Technology |
-|-----------|------------|
-| **Runtime** | Deno 2.x |
-| **Language** | TypeScript (strict mode) |
-| **Database** | MongoDB via [`@push.rocks/smartdata`](https://code.foss.global/push.rocks/smartdata) |
-| **Storage** | S3 via [`@push.rocks/smartbucket`](https://code.foss.global/push.rocks/smartbucket) |
-| **Registry Core** | [`@push.rocks/smartregistry`](https://code.foss.global/push.rocks/smartregistry) |
-| **Frontend** | Angular 19 (Signals, Zoneless) + Tailwind CSS |
-| **Auth** | JWT (HS256) + OAuth/OIDC + LDAP |
-| **Build** | [`@git.zone/tsdeno`](https://code.foss.global/git.zone/tsdeno) cross-compilation |
-| **CI/CD** | Gitea Actions → binary releases |
+| Component | Technology |
+| ----------------- | ------------------------------------------------------------------------------------ |
+| **Runtime** | Deno 2.x |
+| **Language** | TypeScript (strict mode) |
+| **Database** | MongoDB via [`@push.rocks/smartdata`](https://code.foss.global/push.rocks/smartdata) |
+| **Storage** | S3 via [`@push.rocks/smartbucket`](https://code.foss.global/push.rocks/smartbucket) |
+| **Registry Core** | [`@push.rocks/smartregistry`](https://code.foss.global/push.rocks/smartregistry) |
+| **Frontend** | Angular 19 (Signals, Zoneless) + Tailwind CSS |
+| **Auth** | JWT (HS256) + OAuth/OIDC + LDAP |
+| **Build** | [`@git.zone/tsdeno`](https://code.foss.global/git.zone/tsdeno) cross-compilation |
+| **CI/CD** | Gitea Actions → binary releases |
## 🛠️ Development
@@ -327,7 +356,8 @@ Releases are automated via Gitea Actions (`.gitea/workflows/release.yml`):
1. Push a `v*` tag
2. CI builds the Angular UI and bundles it into TypeScript
-3. `tsdeno compile` produces binaries for 4 platforms (linux-x64, linux-arm64, macos-x64, macos-arm64)
+3. `tsdeno compile` produces binaries for 4 platforms (linux-x64, linux-arm64, macos-x64,
+ macos-arm64)
4. Binaries + SHA256 checksums are uploaded as Gitea release assets
Compile targets are configured in `npmextra.json` under `@git.zone/tsdeno`.
@@ -344,21 +374,31 @@ For example: `packages/npm/myorg/mypackage/1.0.0/mypackage-1.0.0.tgz`
## License and Legal Information
-This repository contains open-source code licensed under the MIT License. A copy of the license can be found in the [LICENSE](./LICENSE) file.
+This repository contains open-source code licensed under the MIT License. A copy of the license can
+be found in the [LICENSE](./LICENSE) file.
-**Please note:** The MIT License does not grant permission to use the trade names, trademarks, service marks, or product names of the project, except as required for reasonable and customary use in describing the origin of the work and reproducing the content of the NOTICE file.
+**Please note:** The MIT License does not grant permission to use the trade names, trademarks,
+service marks, or product names of the project, except as required for reasonable and customary use
+in describing the origin of the work and reproducing the content of the NOTICE file.
### Trademarks
-This project is owned and maintained by Task Venture Capital GmbH. The names and logos associated with Task Venture Capital GmbH and any related products or services are trademarks of Task Venture Capital GmbH or third parties, and are not included within the scope of the MIT license granted herein.
+This project is owned and maintained by Task Venture Capital GmbH. The names and logos associated
+with Task Venture Capital GmbH and any related products or services are trademarks of Task Venture
+Capital GmbH or third parties, and are not included within the scope of the MIT license granted
+herein.
-Use of these trademarks must comply with Task Venture Capital GmbH's Trademark Guidelines or the guidelines of the respective third-party owners, and any usage must be approved in writing. Third-party trademarks used herein are the property of their respective owners and used only in a descriptive manner, e.g. for an implementation of an API or similar.
+Use of these trademarks must comply with Task Venture Capital GmbH's Trademark Guidelines or the
+guidelines of the respective third-party owners, and any usage must be approved in writing.
+Third-party trademarks used herein are the property of their respective owners and used only in a
+descriptive manner, e.g. for an implementation of an API or similar.
### Company Information
-Task Venture Capital GmbH
-Registered at District Court Bremen HRB 35230 HB, Germany
+Task Venture Capital GmbH Registered at District Court Bremen HRB 35230 HB, Germany
For any legal inquiries or further information, please contact us via email at hello@task.vc.
-By using this repository, you acknowledge that you have read this section, agree to comply with its terms, and understand that the licensing of the code does not imply endorsement by Task Venture Capital GmbH of any derivative works.
+By using this repository, you acknowledge that you have read this section, agree to comply with its
+terms, and understand that the licensing of the code does not imply endorsement by Task Venture
+Capital GmbH of any derivative works.
diff --git a/scripts/bundle-ui.ts b/scripts/bundle-ui.ts
deleted file mode 100644
index 734821e..0000000
--- a/scripts/bundle-ui.ts
+++ /dev/null
@@ -1,214 +0,0 @@
-#!/usr/bin/env -S deno run --allow-all
-/**
- * UI Bundler Script
- * Encodes all files from ui/dist/registry-ui/browser/ as base64
- * and generates ts/embedded-ui.generated.ts
- *
- * Usage:
- * deno task bundle-ui # One-time bundle
- * deno task bundle-ui:watch # Watch mode for development
- */
-
-import { walk } from 'jsr:@std/fs@1/walk';
-import { extname, relative } from 'jsr:@std/path@1';
-import { encodeBase64 } from 'jsr:@std/encoding@1/base64';
-
-const UI_DIST_PATH = './ui/dist/registry-ui/browser';
-const OUTPUT_PATH = './ts/embedded-ui.generated.ts';
-
-const CONTENT_TYPES: Record = {
- '.html': 'text/html',
- '.js': 'application/javascript',
- '.css': 'text/css',
- '.json': 'application/json',
- '.png': 'image/png',
- '.jpg': 'image/jpeg',
- '.jpeg': 'image/jpeg',
- '.gif': 'image/gif',
- '.svg': 'image/svg+xml',
- '.ico': 'image/x-icon',
- '.woff': 'font/woff',
- '.woff2': 'font/woff2',
- '.ttf': 'font/ttf',
- '.eot': 'application/vnd.ms-fontobject',
- '.otf': 'font/otf',
- '.map': 'application/json',
- '.txt': 'text/plain',
- '.xml': 'application/xml',
- '.webp': 'image/webp',
- '.webmanifest': 'application/manifest+json',
-};
-
-interface IEmbeddedFile {
- path: string;
- base64: string;
- contentType: string;
- size: number;
-}
-
-async function bundleUI(): Promise {
- console.log('[bundle-ui] Starting UI bundling...');
- console.log(`[bundle-ui] Source: ${UI_DIST_PATH}`);
- console.log(`[bundle-ui] Output: ${OUTPUT_PATH}`);
-
- // Check if UI dist exists
- try {
- await Deno.stat(UI_DIST_PATH);
- } catch {
- console.error(`[bundle-ui] ERROR: UI dist not found at ${UI_DIST_PATH}`);
- console.error('[bundle-ui] Run "deno task build" first to build the UI');
- Deno.exit(1);
- }
-
- const files: IEmbeddedFile[] = [];
- let totalSize = 0;
-
- // Walk through all files in the dist directory
- for await (const entry of walk(UI_DIST_PATH, { includeFiles: true, includeDirs: false })) {
- const relativePath = '/' + relative(UI_DIST_PATH, entry.path).replace(/\\/g, '/');
- const ext = extname(entry.path).toLowerCase();
- const contentType = CONTENT_TYPES[ext] || 'application/octet-stream';
-
- // Read file and encode as base64
- const content = await Deno.readFile(entry.path);
- const base64 = encodeBase64(content);
-
- files.push({
- path: relativePath,
- base64,
- contentType,
- size: content.length,
- });
-
- totalSize += content.length;
- console.log(`[bundle-ui] Encoded: ${relativePath} (${formatSize(content.length)})`);
- }
-
- // Sort files for consistent output
- files.sort((a, b) => a.path.localeCompare(b.path));
-
- // Generate TypeScript module
- const tsContent = generateTypeScript(files, totalSize);
-
- // Write output file
- await Deno.writeTextFile(OUTPUT_PATH, tsContent);
-
- console.log(`[bundle-ui] Generated ${OUTPUT_PATH}`);
- console.log(`[bundle-ui] Total files: ${files.length}`);
- console.log(`[bundle-ui] Total size: ${formatSize(totalSize)}`);
- console.log(`[bundle-ui] Bundling complete!`);
-}
-
-function generateTypeScript(files: IEmbeddedFile[], totalSize: number): string {
- const fileEntries = files
- .map(
- (f) =>
- ` ['${f.path}', { base64: '${f.base64}', contentType: '${f.contentType}' }]`
- )
- .join(',\n');
-
- return `// AUTO-GENERATED FILE - DO NOT EDIT
-// Generated by scripts/bundle-ui.ts
-// Total files: ${files.length}
-// Total size: ${formatSize(totalSize)}
-// Generated at: ${new Date().toISOString()}
-
-interface IEmbeddedFile {
- base64: string;
- contentType: string;
-}
-
-const EMBEDDED_FILES: Map = new Map([
-${fileEntries}
-]);
-
-/**
- * Get an embedded file by path
- * @param path - The file path (e.g., '/index.html')
- * @returns The file data and content type, or null if not found
- */
-export function getEmbeddedFile(path: string): { data: Uint8Array; contentType: string } | null {
- const file = EMBEDDED_FILES.get(path);
- if (!file) return null;
-
- // Decode base64 to Uint8Array
- const binaryString = atob(file.base64);
- const bytes = new Uint8Array(binaryString.length);
- for (let i = 0; i < binaryString.length; i++) {
- bytes[i] = binaryString.charCodeAt(i);
- }
-
- return { data: bytes, contentType: file.contentType };
-}
-
-/**
- * Check if an embedded file exists
- * @param path - The file path to check
- */
-export function hasEmbeddedFile(path: string): boolean {
- return EMBEDDED_FILES.has(path);
-}
-
-/**
- * List all embedded file paths
- */
-export function listEmbeddedFiles(): string[] {
- return Array.from(EMBEDDED_FILES.keys());
-}
-
-/**
- * Get the total number of embedded files
- */
-export function getEmbeddedFileCount(): number {
- return EMBEDDED_FILES.size;
-}
-`;
-}
-
-function formatSize(bytes: number): string {
- if (bytes < 1024) return `${bytes} B`;
- if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;
- return `${(bytes / (1024 * 1024)).toFixed(2)} MB`;
-}
-
-async function watchMode(): Promise {
- console.log('[bundle-ui] Starting watch mode...');
- console.log(`[bundle-ui] Watching: ${UI_DIST_PATH}`);
- console.log('[bundle-ui] Press Ctrl+C to stop');
- console.log('');
-
- // Initial bundle
- await bundleUI();
-
- // Watch for changes
- const watcher = Deno.watchFs(UI_DIST_PATH);
- let debounceTimer: number | null = null;
-
- for await (const event of watcher) {
- if (event.kind === 'modify' || event.kind === 'create' || event.kind === 'remove') {
- // Debounce - wait 500ms after last change
- if (debounceTimer) {
- clearTimeout(debounceTimer);
- }
- debounceTimer = setTimeout(async () => {
- console.log('');
- console.log(`[bundle-ui] Change detected: ${event.kind}`);
- try {
- await bundleUI();
- } catch (error) {
- console.error('[bundle-ui] Error during rebundle:', error);
- }
- }, 500);
- }
- }
-}
-
-// Main entry point
-const args = Deno.args;
-const isWatch = args.includes('--watch') || args.includes('-w');
-
-if (isWatch) {
- await watchMode();
-} else {
- await bundleUI();
-}
diff --git a/test/docker-compose.test.yml b/test/docker-compose.test.yml
index e5858dd..e3d9dfe 100644
--- a/test/docker-compose.test.yml
+++ b/test/docker-compose.test.yml
@@ -1,18 +1,18 @@
-version: "3.8"
+version: '3.8'
services:
mongodb-test:
image: mongo:7
container_name: stack-gallery-test-mongo
ports:
- - "27117:27017"
+ - '27117:27017'
environment:
MONGO_INITDB_ROOT_USERNAME: testadmin
MONGO_INITDB_ROOT_PASSWORD: testpass
tmpfs:
- /data/db
healthcheck:
- test: ["CMD", "mongosh", "--eval", "db.adminCommand('ping')"]
+ test: ['CMD', 'mongosh', '--eval', "db.adminCommand('ping')"]
interval: 5s
timeout: 5s
retries: 5
@@ -21,8 +21,8 @@ services:
image: minio/minio:latest
container_name: stack-gallery-test-minio
ports:
- - "9100:9000"
- - "9101:9001"
+ - '9100:9000'
+ - '9101:9001'
environment:
MINIO_ROOT_USER: testadmin
MINIO_ROOT_PASSWORD: testpassword
@@ -30,7 +30,7 @@ services:
tmpfs:
- /data
healthcheck:
- test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
+ test: ['CMD', 'curl', '-f', 'http://localhost:9000/minio/health/live']
interval: 5s
timeout: 5s
retries: 5
diff --git a/test/e2e/npm.e2e.test.ts b/test/e2e/npm.e2e.test.ts
index e486961..b120aa5 100644
--- a/test/e2e/npm.e2e.test.ts
+++ b/test/e2e/npm.e2e.test.ts
@@ -6,25 +6,25 @@
*/
import { assertEquals, assertExists } from 'jsr:@std/assert';
-import { describe, it, beforeAll, afterAll, beforeEach } from 'jsr:@std/testing/bdd';
+import { afterAll, beforeAll, beforeEach, describe, it } from 'jsr:@std/testing/bdd';
import * as path from '@std/path';
import {
- setupTestDb,
- teardownTestDb,
cleanupTestDb,
- createTestUser,
- createOrgWithOwner,
- createTestRepository,
- createTestApiToken,
clients,
- skipIfMissing,
+ createOrgWithOwner,
+ createTestApiToken,
+ createTestRepository,
+ createTestUser,
runCommand,
+ setupTestDb,
+ skipIfMissing,
+ teardownTestDb,
testConfig,
} from '../helpers/index.ts';
const FIXTURE_DIR = path.join(
path.dirname(path.fromFileUrl(import.meta.url)),
- '../fixtures/npm/@stack-test/demo-package'
+ '../fixtures/npm/@stack-test/demo-package',
);
describe('NPM E2E: Full lifecycle', () => {
@@ -98,7 +98,7 @@ describe('NPM E2E: Full lifecycle', () => {
const result = await clients.npm.publish(
FIXTURE_DIR,
`${registryUrl}/-/npm/${testOrgName}/`,
- apiToken
+ apiToken,
);
assertEquals(result.success, true, `npm publish failed: ${result.stderr}`);
@@ -120,20 +120,28 @@ describe('NPM E2E: Full lifecycle', () => {
// First publish
const npmrcPath = path.join(FIXTURE_DIR, '.npmrc');
- const npmrcContent = `//${new URL(registryUrl).host}/-/npm/${testOrgName}/:_authToken=${apiToken}`;
+ const npmrcContent = `//${
+ new URL(registryUrl).host
+ }/-/npm/${testOrgName}/:_authToken=${apiToken}`;
await Deno.writeTextFile(npmrcPath, npmrcContent);
try {
await clients.npm.publish(
FIXTURE_DIR,
`${registryUrl}/-/npm/${testOrgName}/`,
- apiToken
+ apiToken,
);
// Fetch metadata via npm view
const viewResult = await runCommand(
- ['npm', 'view', '@stack-test/demo-package', '--registry', `${registryUrl}/-/npm/${testOrgName}/`],
- { env: { npm_config__authToken: apiToken } }
+ [
+ 'npm',
+ 'view',
+ '@stack-test/demo-package',
+ '--registry',
+ `${registryUrl}/-/npm/${testOrgName}/`,
+ ],
+ { env: { npm_config__authToken: apiToken } },
);
assertEquals(viewResult.success, true, `npm view failed: ${viewResult.stderr}`);
@@ -159,32 +167,36 @@ describe('NPM E2E: Full lifecycle', () => {
try {
// First publish
const npmrcPath = path.join(FIXTURE_DIR, '.npmrc');
- const npmrcContent = `//${new URL(registryUrl).host}/-/npm/${testOrgName}/:_authToken=${apiToken}`;
+ const npmrcContent = `//${
+ new URL(registryUrl).host
+ }/-/npm/${testOrgName}/:_authToken=${apiToken}`;
await Deno.writeTextFile(npmrcPath, npmrcContent);
await clients.npm.publish(
FIXTURE_DIR,
`${registryUrl}/-/npm/${testOrgName}/`,
- apiToken
+ apiToken,
);
// Create package.json in temp dir
await Deno.writeTextFile(
path.join(tempDir, 'package.json'),
- JSON.stringify({ name: 'test-install', version: '1.0.0' })
+ JSON.stringify({ name: 'test-install', version: '1.0.0' }),
);
// Create .npmrc in temp dir
await Deno.writeTextFile(
path.join(tempDir, '.npmrc'),
- `@stack-test:registry=${registryUrl}/-/npm/${testOrgName}/\n//${new URL(registryUrl).host}/-/npm/${testOrgName}/:_authToken=${apiToken}`
+ `@stack-test:registry=${registryUrl}/-/npm/${testOrgName}/\n//${
+ new URL(registryUrl).host
+ }/-/npm/${testOrgName}/:_authToken=${apiToken}`,
);
// Install
const installResult = await clients.npm.install(
'@stack-test/demo-package@1.0.0',
`${registryUrl}/-/npm/${testOrgName}/`,
- tempDir
+ tempDir,
);
assertEquals(installResult.success, true, `npm install failed: ${installResult.stderr}`);
@@ -213,33 +225,41 @@ describe('NPM E2E: Full lifecycle', () => {
// First publish
const npmrcPath = path.join(FIXTURE_DIR, '.npmrc');
- const npmrcContent = `//${new URL(registryUrl).host}/-/npm/${testOrgName}/:_authToken=${apiToken}`;
+ const npmrcContent = `//${
+ new URL(registryUrl).host
+ }/-/npm/${testOrgName}/:_authToken=${apiToken}`;
await Deno.writeTextFile(npmrcPath, npmrcContent);
try {
await clients.npm.publish(
FIXTURE_DIR,
`${registryUrl}/-/npm/${testOrgName}/`,
- apiToken
+ apiToken,
);
// Unpublish
const unpublishResult = await clients.npm.unpublish(
'@stack-test/demo-package@1.0.0',
`${registryUrl}/-/npm/${testOrgName}/`,
- apiToken
+ apiToken,
);
assertEquals(
unpublishResult.success,
true,
- `npm unpublish failed: ${unpublishResult.stderr}`
+ `npm unpublish failed: ${unpublishResult.stderr}`,
);
// Verify package is gone
const viewResult = await runCommand(
- ['npm', 'view', '@stack-test/demo-package', '--registry', `${registryUrl}/-/npm/${testOrgName}/`],
- { env: { npm_config__authToken: apiToken } }
+ [
+ 'npm',
+ 'view',
+ '@stack-test/demo-package',
+ '--registry',
+ `${registryUrl}/-/npm/${testOrgName}/`,
+ ],
+ { env: { npm_config__authToken: apiToken } },
);
// Should fail since package was unpublished
diff --git a/test/e2e/oci.e2e.test.ts b/test/e2e/oci.e2e.test.ts
index edd28c1..de10087 100644
--- a/test/e2e/oci.e2e.test.ts
+++ b/test/e2e/oci.e2e.test.ts
@@ -6,24 +6,24 @@
*/
import { assertEquals } from 'jsr:@std/assert';
-import { describe, it, beforeAll, afterAll, beforeEach } from 'jsr:@std/testing/bdd';
+import { afterAll, beforeAll, beforeEach, describe, it } from 'jsr:@std/testing/bdd';
import * as path from '@std/path';
import {
- setupTestDb,
- teardownTestDb,
cleanupTestDb,
- createTestUser,
- createOrgWithOwner,
- createTestRepository,
- createTestApiToken,
clients,
+ createOrgWithOwner,
+ createTestApiToken,
+ createTestRepository,
+ createTestUser,
+ setupTestDb,
skipIfMissing,
+ teardownTestDb,
testConfig,
} from '../helpers/index.ts';
const FIXTURE_DIR = path.join(
path.dirname(path.fromFileUrl(import.meta.url)),
- '../fixtures/oci'
+ '../fixtures/oci',
);
describe('OCI E2E: Full lifecycle', () => {
diff --git a/test/fixtures/composer/stacktest/demo-package/composer.json b/test/fixtures/composer/stacktest/demo-package/composer.json
index 42bc75b..b76883e 100644
--- a/test/fixtures/composer/stacktest/demo-package/composer.json
+++ b/test/fixtures/composer/stacktest/demo-package/composer.json
@@ -1,21 +1,21 @@
{
- "name": "stacktest/demo-package",
- "description": "Demo package for Stack.Gallery Registry e2e tests",
- "version": "1.0.0",
- "type": "library",
- "license": "MIT",
- "authors": [
- {
- "name": "Stack.Gallery Test",
- "email": "test@stack.gallery"
- }
- ],
- "require": {
- "php": ">=8.0"
- },
- "autoload": {
- "psr-4": {
- "StackTest\\DemoPackage\\": "src/"
- }
+ "name": "stacktest/demo-package",
+ "description": "Demo package for Stack.Gallery Registry e2e tests",
+ "version": "1.0.0",
+ "type": "library",
+ "license": "MIT",
+ "authors": [
+ {
+ "name": "Stack.Gallery Test",
+ "email": "test@stack.gallery"
}
+ ],
+ "require": {
+ "php": ">=8.0"
+ },
+ "autoload": {
+ "psr-4": {
+ "StackTest\\DemoPackage\\": "src/"
+ }
+ }
}
diff --git a/test/fixtures/maven/com/stacktest/demo-artifact/pom.xml b/test/fixtures/maven/com/stacktest/demo-artifact/pom.xml
index bd46b36..82b59f5 100644
--- a/test/fixtures/maven/com/stacktest/demo-artifact/pom.xml
+++ b/test/fixtures/maven/com/stacktest/demo-artifact/pom.xml
@@ -1,34 +1,36 @@
-
- 4.0.0
- com.stacktest
- demo-artifact
- 1.0.0
- jar
- Stack.Gallery Demo Artifact
- Demo Maven artifact for e2e tests
- https://github.com/stack-gallery/demo-artifact
+
+ 4.0.0
+ com.stacktest
+ demo-artifact
+ 1.0.0
+ jar
+ Stack.Gallery Demo Artifact
+ Demo Maven artifact for e2e tests
+ https://github.com/stack-gallery/demo-artifact
-
-
- MIT License
- https://opensource.org/licenses/MIT
-
-
+
+
+ MIT License
+ https://opensource.org/licenses/MIT
+
+
-
-
- Stack.Gallery Test
- test@stack.gallery
-
-
+
+
+ Stack.Gallery Test
+ test@stack.gallery
+
+
-
- 11
- 11
- UTF-8
-
+
+ 11
+ 11
+ UTF-8
+
diff --git a/test/fixtures/npm/@stack-test/demo-package/index.js b/test/fixtures/npm/@stack-test/demo-package/index.js
index 5903d22..2d9065c 100644
--- a/test/fixtures/npm/@stack-test/demo-package/index.js
+++ b/test/fixtures/npm/@stack-test/demo-package/index.js
@@ -5,5 +5,5 @@
module.exports = {
name: 'demo-package',
greet: (name) => `Hello, ${name}!`,
- version: () => require('./package.json').version
+ version: () => require('./package.json').version,
};
diff --git a/test/helpers/auth.helper.ts b/test/helpers/auth.helper.ts
index cbabbe9..14fbdf7 100644
--- a/test/helpers/auth.helper.ts
+++ b/test/helpers/auth.helper.ts
@@ -6,7 +6,11 @@ import { User } from '../../ts/models/user.ts';
import { ApiToken } from '../../ts/models/apitoken.ts';
import { AuthService } from '../../ts/services/auth.service.ts';
import { TokenService } from '../../ts/services/token.service.ts';
-import type { TRegistryProtocol, ITokenScope, TUserStatus } from '../../ts/interfaces/auth.interfaces.ts';
+import type {
+ ITokenScope,
+ TRegistryProtocol,
+ TUserStatus,
+} from '../../ts/interfaces/auth.interfaces.ts';
import { testConfig } from '../test.config.ts';
const TEST_PASSWORD = 'TestPassword123!';
@@ -25,7 +29,7 @@ export interface ICreateTestUserOptions {
* Create a test user with sensible defaults
*/
export async function createTestUser(
- overrides: ICreateTestUserOptions = {}
+ overrides: ICreateTestUserOptions = {},
): Promise<{ user: User; password: string }> {
const uniqueId = crypto.randomUUID().slice(0, 8);
const password = overrides.password || TEST_PASSWORD;
@@ -61,7 +65,7 @@ export async function createAdminUser(): Promise<{ user: User; password: string
*/
export async function loginUser(
email: string,
- password: string
+ password: string,
): Promise<{ accessToken: string; refreshToken: string; sessionId: string }> {
const authService = new AuthService({
jwtSecret: testConfig.jwt.secret,
@@ -96,7 +100,7 @@ export interface ICreateTestApiTokenOptions {
* Create test API token
*/
export async function createTestApiToken(
- options: ICreateTestApiTokenOptions
+ options: ICreateTestApiTokenOptions,
): Promise<{ rawToken: string; token: ApiToken }> {
const tokenService = new TokenService();
@@ -127,7 +131,7 @@ export function createAuthHeader(token: string): { Authorization: string } {
*/
export function createBasicAuthHeader(
username: string,
- password: string
+ password: string,
): { Authorization: string } {
const credentials = btoa(`${username}:${password}`);
return { Authorization: `Basic ${credentials}` };
diff --git a/test/helpers/db.helper.ts b/test/helpers/db.helper.ts
index 07c3c53..a666009 100644
--- a/test/helpers/db.helper.ts
+++ b/test/helpers/db.helper.ts
@@ -15,7 +15,7 @@ let isConnected = false;
// We need to patch the global db export since models reference it
// This is done by re-initializing with the test config
-import { initDb, closeDb } from '../../ts/models/db.ts';
+import { closeDb, initDb } from '../../ts/models/db.ts';
/**
* Initialize test database with unique name per test run
diff --git a/test/helpers/factory.helper.ts b/test/helpers/factory.helper.ts
index 4b9fe48..b59bfe3 100644
--- a/test/helpers/factory.helper.ts
+++ b/test/helpers/factory.helper.ts
@@ -11,10 +11,10 @@ import { Package } from '../../ts/models/package.ts';
import { RepositoryPermission } from '../../ts/models/repository.permission.ts';
import type {
TOrganizationRole,
- TTeamRole,
+ TRegistryProtocol,
TRepositoryRole,
TRepositoryVisibility,
- TRegistryProtocol,
+ TTeamRole,
} from '../../ts/interfaces/auth.interfaces.ts';
export interface ICreateTestOrganizationOptions {
@@ -29,7 +29,7 @@ export interface ICreateTestOrganizationOptions {
* Create test organization
*/
export async function createTestOrganization(
- options: ICreateTestOrganizationOptions
+ options: ICreateTestOrganizationOptions,
): Promise {
const uniqueId = crypto.randomUUID().slice(0, 8);
@@ -53,7 +53,7 @@ export async function createTestOrganization(
*/
export async function createOrgWithOwner(
ownerId: string,
- orgOptions?: Partial
+ orgOptions?: Partial,
): Promise<{
organization: Organization;
membership: OrganizationMember;
@@ -82,7 +82,7 @@ export async function addOrgMember(
organizationId: string,
userId: string,
role: TOrganizationRole = 'member',
- invitedBy?: string
+ invitedBy?: string,
): Promise {
const membership = await OrganizationMember.addMember({
organizationId,
@@ -113,7 +113,7 @@ export interface ICreateTestRepositoryOptions {
* Create test repository
*/
export async function createTestRepository(
- options: ICreateTestRepositoryOptions
+ options: ICreateTestRepositoryOptions,
): Promise {
const uniqueId = crypto.randomUUID().slice(0, 8);
@@ -152,7 +152,7 @@ export async function createTestTeam(options: ICreateTestTeamOptions): Promise {
const member = new TeamMember();
member.id = await TeamMember.getNewId();
@@ -176,7 +176,7 @@ export interface IGrantRepoPermissionOptions {
* Grant repository permission
*/
export async function grantRepoPermission(
- options: IGrantRepoPermissionOptions
+ options: IGrantRepoPermissionOptions,
): Promise {
const perm = new RepositoryPermission();
perm.id = await RepositoryPermission.getNewId();
diff --git a/test/helpers/http.helper.ts b/test/helpers/http.helper.ts
index 5d13001..ccdf5f4 100644
--- a/test/helpers/http.helper.ts
+++ b/test/helpers/http.helper.ts
@@ -75,7 +75,7 @@ export const del = (path: string, headers?: Record) =>
export function assertStatus(response: ITestResponse, expected: number): void {
if (response.status !== expected) {
throw new Error(
- `Expected status ${expected} but got ${response.status}: ${JSON.stringify(response.body)}`
+ `Expected status ${expected} but got ${response.status}: ${JSON.stringify(response.body)}`,
);
}
}
@@ -98,7 +98,7 @@ export function assertBodyHas(response: ITestResponse, keys: string[]): void {
export function assertSuccess(response: ITestResponse): void {
if (response.status < 200 || response.status >= 300) {
throw new Error(
- `Expected successful response but got ${response.status}: ${JSON.stringify(response.body)}`
+ `Expected successful response but got ${response.status}: ${JSON.stringify(response.body)}`,
);
}
}
diff --git a/test/helpers/index.ts b/test/helpers/index.ts
index 951d26f..cd64dc1 100644
--- a/test/helpers/index.ts
+++ b/test/helpers/index.ts
@@ -4,82 +4,82 @@
// Database helpers
export {
- setupTestDb,
cleanupTestDb,
- teardownTestDb,
clearCollections,
- getTestDbName,
getTestDb,
+ getTestDbName,
+ setupTestDb,
+ teardownTestDb,
} from './db.helper.ts';
// Auth helpers
export {
- createTestUser,
createAdminUser,
- loginUser,
- createTestApiToken,
createAuthHeader,
createBasicAuthHeader,
+ createTestApiToken,
+ createTestUser,
getTestPassword,
- type ICreateTestUserOptions,
type ICreateTestApiTokenOptions,
+ type ICreateTestUserOptions,
+ loginUser,
} from './auth.helper.ts';
// Factory helpers
export {
- createTestOrganization,
- createOrgWithOwner,
addOrgMember,
+ addTeamMember,
+ createFullTestScenario,
+ createOrgWithOwner,
+ createTestOrganization,
+ createTestPackage,
createTestRepository,
createTestTeam,
- addTeamMember,
grantRepoPermission,
- createTestPackage,
- createFullTestScenario,
type ICreateTestOrganizationOptions,
+ type ICreateTestPackageOptions,
type ICreateTestRepositoryOptions,
type ICreateTestTeamOptions,
type IGrantRepoPermissionOptions,
- type ICreateTestPackageOptions,
} from './factory.helper.ts';
// HTTP helpers
export {
- testRequest,
- get,
- post,
- put,
- patch,
- del,
- assertStatus,
assertBodyHas,
- assertSuccess,
assertError,
+ assertStatus,
+ assertSuccess,
+ del,
+ get,
type ITestRequest,
type ITestResponse,
+ patch,
+ post,
+ put,
+ testRequest,
} from './http.helper.ts';
// Subprocess helpers
export {
- runCommand,
- commandExists,
clients,
- skipIfMissing,
- type ICommandResult,
+ commandExists,
type ICommandOptions,
+ type ICommandResult,
+ runCommand,
+ skipIfMissing,
} from './subprocess.helper.ts';
// Storage helpers
export {
- setupTestStorage,
checkStorageAvailable,
- objectExists,
- listObjects,
+ cleanupTestStorage,
deleteObject,
deletePrefix,
- cleanupTestStorage,
isStorageAvailable,
+ listObjects,
+ objectExists,
+ setupTestStorage,
} from './storage.helper.ts';
// Re-export test config
-export { testConfig, getTestConfig } from '../test.config.ts';
+export { getTestConfig, testConfig } from '../test.config.ts';
diff --git a/test/helpers/subprocess.helper.ts b/test/helpers/subprocess.helper.ts
index 4b1d400..013e62d 100644
--- a/test/helpers/subprocess.helper.ts
+++ b/test/helpers/subprocess.helper.ts
@@ -22,7 +22,7 @@ export interface ICommandOptions {
*/
export async function runCommand(
cmd: string[],
- options: ICommandOptions = {}
+ options: ICommandOptions = {},
): Promise {
const { cwd, env, timeout = 60000, stdin } = options;
@@ -116,7 +116,7 @@ export const clients = {
publish: (dir: string, registry: string, token: string) =>
runCommand(
['cargo', 'publish', '--registry', 'stack-test', '--token', token, '--allow-dirty'],
- { cwd: dir }
+ { cwd: dir },
),
yank: (crate: string, version: string, token: string) =>
runCommand([
@@ -164,7 +164,7 @@ export const clients = {
'--repository',
JSON.stringify({ type: 'composer', url: repository }),
],
- { cwd: dir }
+ { cwd: dir },
),
},
@@ -190,7 +190,7 @@ export const clients = {
`-Dusername=${username}`,
`-Dpassword=${password}`,
],
- { cwd: dir }
+ { cwd: dir },
),
package: (dir: string) => runCommand(['mvn', 'package', '-DskipTests'], { cwd: dir }),
},
diff --git a/test/integration/auth.test.ts b/test/integration/auth.test.ts
index a69af67..a742a4a 100644
--- a/test/integration/auth.test.ts
+++ b/test/integration/auth.test.ts
@@ -4,16 +4,16 @@
*/
import { assertEquals, assertExists } from 'jsr:@std/assert';
-import { describe, it, beforeAll, afterAll, beforeEach } from 'jsr:@std/testing/bdd';
+import { afterAll, beforeAll, beforeEach, describe, it } from 'jsr:@std/testing/bdd';
import {
+ assertStatus,
+ cleanupTestDb,
+ createAuthHeader,
+ createTestUser,
+ get,
+ post,
setupTestDb,
teardownTestDb,
- cleanupTestDb,
- createTestUser,
- post,
- get,
- assertStatus,
- createAuthHeader,
} from '../helpers/index.ts';
describe('Auth API Integration', () => {
@@ -126,7 +126,7 @@ describe('Auth API Integration', () => {
// Get current user
const meResponse = await get(
'/api/v1/auth/me',
- createAuthHeader(loginBody.accessToken as string)
+ createAuthHeader(loginBody.accessToken as string),
);
assertStatus(meResponse, 200);
diff --git a/test/integration/organization.test.ts b/test/integration/organization.test.ts
index 39500fe..e6404d4 100644
--- a/test/integration/organization.test.ts
+++ b/test/integration/organization.test.ts
@@ -4,19 +4,19 @@
*/
import { assertEquals, assertExists } from 'jsr:@std/assert';
-import { describe, it, beforeAll, afterAll, beforeEach } from 'jsr:@std/testing/bdd';
+import { afterAll, beforeAll, beforeEach, describe, it } from 'jsr:@std/testing/bdd';
import {
- setupTestDb,
- teardownTestDb,
+ assertStatus,
cleanupTestDb,
+ createAuthHeader,
createTestUser,
+ del,
+ get,
loginUser,
post,
- get,
put,
- del,
- assertStatus,
- createAuthHeader,
+ setupTestDb,
+ teardownTestDb,
} from '../helpers/index.ts';
describe('Organization API Integration', () => {
@@ -48,7 +48,7 @@ describe('Organization API Integration', () => {
displayName: 'My Organization',
description: 'A test organization',
},
- createAuthHeader(accessToken)
+ createAuthHeader(accessToken),
);
assertStatus(response, 201);
@@ -64,7 +64,7 @@ describe('Organization API Integration', () => {
name: 'push.rocks',
displayName: 'Push Rocks',
},
- createAuthHeader(accessToken)
+ createAuthHeader(accessToken),
);
assertStatus(response, 201);
@@ -76,13 +76,13 @@ describe('Organization API Integration', () => {
await post(
'/api/v1/organizations',
{ name: 'duplicate', displayName: 'First' },
- createAuthHeader(accessToken)
+ createAuthHeader(accessToken),
);
const response = await post(
'/api/v1/organizations',
{ name: 'duplicate', displayName: 'Second' },
- createAuthHeader(accessToken)
+ createAuthHeader(accessToken),
);
assertStatus(response, 409);
@@ -92,7 +92,7 @@ describe('Organization API Integration', () => {
const response = await post(
'/api/v1/organizations',
{ name: '.invalid', displayName: 'Invalid' },
- createAuthHeader(accessToken)
+ createAuthHeader(accessToken),
);
assertStatus(response, 400);
@@ -105,12 +105,12 @@ describe('Organization API Integration', () => {
await post(
'/api/v1/organizations',
{ name: 'org1', displayName: 'Org 1' },
- createAuthHeader(accessToken)
+ createAuthHeader(accessToken),
);
await post(
'/api/v1/organizations',
{ name: 'org2', displayName: 'Org 2' },
- createAuthHeader(accessToken)
+ createAuthHeader(accessToken),
);
const response = await get('/api/v1/organizations', createAuthHeader(accessToken));
@@ -126,7 +126,7 @@ describe('Organization API Integration', () => {
await post(
'/api/v1/organizations',
{ name: 'get-me', displayName: 'Get Me' },
- createAuthHeader(accessToken)
+ createAuthHeader(accessToken),
);
const response = await get('/api/v1/organizations/get-me', createAuthHeader(accessToken));
@@ -139,7 +139,7 @@ describe('Organization API Integration', () => {
it('should return 404 for non-existent org', async () => {
const response = await get(
'/api/v1/organizations/non-existent',
- createAuthHeader(accessToken)
+ createAuthHeader(accessToken),
);
assertStatus(response, 404);
@@ -151,13 +151,13 @@ describe('Organization API Integration', () => {
await post(
'/api/v1/organizations',
{ name: 'update-me', displayName: 'Original' },
- createAuthHeader(accessToken)
+ createAuthHeader(accessToken),
);
const response = await put(
'/api/v1/organizations/update-me',
{ displayName: 'Updated', description: 'New description' },
- createAuthHeader(accessToken)
+ createAuthHeader(accessToken),
);
assertStatus(response, 200);
@@ -172,7 +172,7 @@ describe('Organization API Integration', () => {
await post(
'/api/v1/organizations',
{ name: 'delete-me', displayName: 'Delete Me' },
- createAuthHeader(accessToken)
+ createAuthHeader(accessToken),
);
const response = await del('/api/v1/organizations/delete-me', createAuthHeader(accessToken));
@@ -182,7 +182,7 @@ describe('Organization API Integration', () => {
// Verify deleted
const getResponse = await get(
'/api/v1/organizations/delete-me',
- createAuthHeader(accessToken)
+ createAuthHeader(accessToken),
);
assertStatus(getResponse, 404);
});
@@ -193,12 +193,12 @@ describe('Organization API Integration', () => {
await post(
'/api/v1/organizations',
{ name: 'members-org', displayName: 'Members Org' },
- createAuthHeader(accessToken)
+ createAuthHeader(accessToken),
);
const response = await get(
'/api/v1/organizations/members-org/members',
- createAuthHeader(accessToken)
+ createAuthHeader(accessToken),
);
assertStatus(response, 200);
@@ -213,13 +213,13 @@ describe('Organization API Integration', () => {
await post(
'/api/v1/organizations',
{ name: 'add-member-org', displayName: 'Add Member Org' },
- createAuthHeader(accessToken)
+ createAuthHeader(accessToken),
);
const response = await post(
'/api/v1/organizations/add-member-org/members',
{ userId: newUser.id, role: 'member' },
- createAuthHeader(accessToken)
+ createAuthHeader(accessToken),
);
assertStatus(response, 201);
diff --git a/test/test.config.ts b/test/test.config.ts
index 885d051..49b8091 100644
--- a/test/test.config.ts
+++ b/test/test.config.ts
@@ -7,10 +7,10 @@ import { Qenv } from '@push.rocks/qenv';
const testQenv = new Qenv('./', '.nogit/', false);
-const mongoUrl = await testQenv.getEnvVarOnDemand('MONGODB_URL')
- || 'mongodb://testadmin:testpass@localhost:27117/test-registry?authSource=admin';
-const mongoName = await testQenv.getEnvVarOnDemand('MONGODB_NAME')
- || 'test-registry';
+const mongoUrl = await testQenv.getEnvVarOnDemand('MONGODB_URL') ||
+ 'mongodb://testadmin:testpass@localhost:27117/test-registry?authSource=admin';
+const mongoName = await testQenv.getEnvVarOnDemand('MONGODB_NAME') ||
+ 'test-registry';
const s3Endpoint = await testQenv.getEnvVarOnDemand('S3_ENDPOINT') || 'localhost';
const s3Port = await testQenv.getEnvVarOnDemand('S3_PORT') || '9100';
diff --git a/test/unit/models/apitoken.test.ts b/test/unit/models/apitoken.test.ts
index ba4c97f..beaa222 100644
--- a/test/unit/models/apitoken.test.ts
+++ b/test/unit/models/apitoken.test.ts
@@ -3,8 +3,8 @@
*/
import { assertEquals, assertExists } from 'jsr:@std/assert';
-import { describe, it, beforeAll, afterAll, beforeEach } from 'jsr:@std/testing/bdd';
-import { setupTestDb, teardownTestDb, cleanupTestDb, createTestUser } from '../../helpers/index.ts';
+import { afterAll, beforeAll, beforeEach, describe, it } from 'jsr:@std/testing/bdd';
+import { cleanupTestDb, createTestUser, setupTestDb, teardownTestDb } from '../../helpers/index.ts';
import { ApiToken } from '../../../ts/models/apitoken.ts';
describe('ApiToken Model', () => {
diff --git a/test/unit/models/organization.test.ts b/test/unit/models/organization.test.ts
index b4fd689..9e345f3 100644
--- a/test/unit/models/organization.test.ts
+++ b/test/unit/models/organization.test.ts
@@ -3,8 +3,8 @@
*/
import { assertEquals, assertExists, assertRejects } from 'jsr:@std/assert';
-import { describe, it, beforeAll, afterAll, beforeEach } from 'jsr:@std/testing/bdd';
-import { setupTestDb, teardownTestDb, cleanupTestDb, createTestUser } from '../../helpers/index.ts';
+import { afterAll, beforeAll, beforeEach, describe, it } from 'jsr:@std/testing/bdd';
+import { cleanupTestDb, createTestUser, setupTestDb, teardownTestDb } from '../../helpers/index.ts';
import { Organization } from '../../../ts/models/organization.ts';
describe('Organization Model', () => {
@@ -73,7 +73,7 @@ describe('Organization Model', () => {
});
},
Error,
- 'lowercase alphanumeric'
+ 'lowercase alphanumeric',
);
});
@@ -87,7 +87,7 @@ describe('Organization Model', () => {
});
},
Error,
- 'lowercase alphanumeric'
+ 'lowercase alphanumeric',
);
});
@@ -101,7 +101,7 @@ describe('Organization Model', () => {
});
},
Error,
- 'lowercase alphanumeric'
+ 'lowercase alphanumeric',
);
});
@@ -115,7 +115,7 @@ describe('Organization Model', () => {
});
},
Error,
- 'lowercase alphanumeric'
+ 'lowercase alphanumeric',
);
});
diff --git a/test/unit/models/package.test.ts b/test/unit/models/package.test.ts
index def38bc..65fbda3 100644
--- a/test/unit/models/package.test.ts
+++ b/test/unit/models/package.test.ts
@@ -3,14 +3,14 @@
*/
import { assertEquals, assertExists } from 'jsr:@std/assert';
-import { describe, it, beforeAll, afterAll, beforeEach } from 'jsr:@std/testing/bdd';
+import { afterAll, beforeAll, beforeEach, describe, it } from 'jsr:@std/testing/bdd';
import {
- setupTestDb,
- teardownTestDb,
cleanupTestDb,
- createTestUser,
createOrgWithOwner,
createTestRepository,
+ createTestUser,
+ setupTestDb,
+ teardownTestDb,
} from '../../helpers/index.ts';
import { Package } from '../../../ts/models/package.ts';
import type { IPackageVersion } from '../../../ts/interfaces/package.interfaces.ts';
diff --git a/test/unit/models/repository.test.ts b/test/unit/models/repository.test.ts
index ff55985..ae9d28e 100644
--- a/test/unit/models/repository.test.ts
+++ b/test/unit/models/repository.test.ts
@@ -3,13 +3,13 @@
*/
import { assertEquals, assertExists, assertRejects } from 'jsr:@std/assert';
-import { describe, it, beforeAll, afterAll, beforeEach } from 'jsr:@std/testing/bdd';
+import { afterAll, beforeAll, beforeEach, describe, it } from 'jsr:@std/testing/bdd';
import {
+ cleanupTestDb,
+ createOrgWithOwner,
+ createTestUser,
setupTestDb,
teardownTestDb,
- cleanupTestDb,
- createTestUser,
- createOrgWithOwner,
} from '../../helpers/index.ts';
import { Repository } from '../../../ts/models/repository.ts';
@@ -103,7 +103,7 @@ describe('Repository Model', () => {
});
},
Error,
- 'already exists'
+ 'already exists',
);
});
@@ -137,7 +137,7 @@ describe('Repository Model', () => {
});
},
Error,
- 'lowercase alphanumeric'
+ 'lowercase alphanumeric',
);
});
diff --git a/test/unit/models/session.test.ts b/test/unit/models/session.test.ts
index 7746468..691f9cf 100644
--- a/test/unit/models/session.test.ts
+++ b/test/unit/models/session.test.ts
@@ -3,8 +3,8 @@
*/
import { assertEquals, assertExists } from 'jsr:@std/assert';
-import { describe, it, beforeAll, afterAll, beforeEach } from 'jsr:@std/testing/bdd';
-import { setupTestDb, teardownTestDb, cleanupTestDb, createTestUser } from '../../helpers/index.ts';
+import { afterAll, beforeAll, beforeEach, describe, it } from 'jsr:@std/testing/bdd';
+import { cleanupTestDb, createTestUser, setupTestDb, teardownTestDb } from '../../helpers/index.ts';
import { Session } from '../../../ts/models/session.ts';
describe('Session Model', () => {
@@ -70,9 +70,21 @@ describe('Session Model', () => {
describe('getUserSessions', () => {
it('should return all valid sessions for user', async () => {
- await Session.createSession({ userId: testUserId, userAgent: 'Agent 1', ipAddress: '1.1.1.1' });
- await Session.createSession({ userId: testUserId, userAgent: 'Agent 2', ipAddress: '2.2.2.2' });
- await Session.createSession({ userId: testUserId, userAgent: 'Agent 3', ipAddress: '3.3.3.3' });
+ await Session.createSession({
+ userId: testUserId,
+ userAgent: 'Agent 1',
+ ipAddress: '1.1.1.1',
+ });
+ await Session.createSession({
+ userId: testUserId,
+ userAgent: 'Agent 2',
+ ipAddress: '2.2.2.2',
+ });
+ await Session.createSession({
+ userId: testUserId,
+ userAgent: 'Agent 3',
+ ipAddress: '3.3.3.3',
+ });
const sessions = await Session.getUserSessions(testUserId);
assertEquals(sessions.length, 3);
@@ -110,9 +122,21 @@ describe('Session Model', () => {
describe('invalidateAllUserSessions', () => {
it('should invalidate all user sessions', async () => {
- await Session.createSession({ userId: testUserId, userAgent: 'Agent 1', ipAddress: '1.1.1.1' });
- await Session.createSession({ userId: testUserId, userAgent: 'Agent 2', ipAddress: '2.2.2.2' });
- await Session.createSession({ userId: testUserId, userAgent: 'Agent 3', ipAddress: '3.3.3.3' });
+ await Session.createSession({
+ userId: testUserId,
+ userAgent: 'Agent 1',
+ ipAddress: '1.1.1.1',
+ });
+ await Session.createSession({
+ userId: testUserId,
+ userAgent: 'Agent 2',
+ ipAddress: '2.2.2.2',
+ });
+ await Session.createSession({
+ userId: testUserId,
+ userAgent: 'Agent 3',
+ ipAddress: '3.3.3.3',
+ });
const count = await Session.invalidateAllUserSessions(testUserId, 'Security logout');
assertEquals(count, 3);
diff --git a/test/unit/models/user.test.ts b/test/unit/models/user.test.ts
index 91adce4..dcae538 100644
--- a/test/unit/models/user.test.ts
+++ b/test/unit/models/user.test.ts
@@ -3,8 +3,8 @@
*/
import { assertEquals, assertExists, assertRejects } from 'jsr:@std/assert';
-import { describe, it, beforeAll, afterAll, beforeEach } from 'jsr:@std/testing/bdd';
-import { setupTestDb, teardownTestDb, cleanupTestDb } from '../../helpers/index.ts';
+import { afterAll, beforeAll, beforeEach, describe, it } from 'jsr:@std/testing/bdd';
+import { cleanupTestDb, setupTestDb, teardownTestDb } from '../../helpers/index.ts';
import { User } from '../../../ts/models/user.ts';
describe('User Model', () => {
diff --git a/test/unit/services/auth.service.test.ts b/test/unit/services/auth.service.test.ts
index 8b16e58..c58881c 100644
--- a/test/unit/services/auth.service.test.ts
+++ b/test/unit/services/auth.service.test.ts
@@ -3,8 +3,8 @@
*/
import { assertEquals, assertExists } from 'jsr:@std/assert';
-import { describe, it, beforeAll, afterAll, beforeEach } from 'jsr:@std/testing/bdd';
-import { setupTestDb, teardownTestDb, cleanupTestDb, createTestUser } from '../../helpers/index.ts';
+import { afterAll, beforeAll, beforeEach, describe, it } from 'jsr:@std/testing/bdd';
+import { cleanupTestDb, createTestUser, setupTestDb, teardownTestDb } from '../../helpers/index.ts';
import { AuthService } from '../../../ts/services/auth.service.ts';
import { Session } from '../../../ts/models/session.ts';
import { testConfig } from '../../test.config.ts';
diff --git a/test/unit/services/token.service.test.ts b/test/unit/services/token.service.test.ts
index 6706404..055ed21 100644
--- a/test/unit/services/token.service.test.ts
+++ b/test/unit/services/token.service.test.ts
@@ -3,8 +3,8 @@
*/
import { assertEquals, assertExists, assertMatch } from 'jsr:@std/assert';
-import { describe, it, beforeAll, afterAll, beforeEach } from 'jsr:@std/testing/bdd';
-import { setupTestDb, teardownTestDb, cleanupTestDb, createTestUser } from '../../helpers/index.ts';
+import { afterAll, beforeAll, beforeEach, describe, it } from 'jsr:@std/testing/bdd';
+import { cleanupTestDb, createTestUser, setupTestDb, teardownTestDb } from '../../helpers/index.ts';
import { TokenService } from '../../../ts/services/token.service.ts';
import { ApiToken } from '../../../ts/models/apitoken.ts';
@@ -39,8 +39,8 @@ describe('TokenService', () => {
assertExists(result.rawToken);
assertExists(result.token);
- // Check token format: srg_{prefix}_{random}
- assertMatch(result.rawToken, /^srg_[a-z0-9]+_[a-z0-9]+$/);
+ // Check token format: srg_ + 64 hex chars
+ assertMatch(result.rawToken, /^srg_[a-f0-9]{64}$/);
assertEquals(result.token.name, 'test-token');
assertEquals(result.token.protocols.includes('npm'), true);
assertEquals(result.token.protocols.includes('oci'), true);
@@ -111,13 +111,19 @@ describe('TokenService', () => {
it('should reject invalid token format', async () => {
const validation = await tokenService.validateToken('invalid-format', '127.0.0.1');
- assertEquals(validation, null);
+ assertEquals(validation.valid, false);
+ assertEquals(validation.errorCode, 'INVALID_TOKEN_FORMAT');
});
it('should reject non-existent token', async () => {
- const validation = await tokenService.validateToken('srg_abc123_def456', '127.0.0.1');
+ // Must match srg_ prefix + 64 hex chars = 68 total
+ const validation = await tokenService.validateToken(
+ 'srg_0000000000000000000000000000000000000000000000000000000000000000',
+ '127.0.0.1',
+ );
- assertEquals(validation, null);
+ assertEquals(validation.valid, false);
+ assertEquals(validation.errorCode, 'TOKEN_NOT_FOUND');
});
it('should reject revoked token', async () => {
@@ -132,7 +138,9 @@ describe('TokenService', () => {
const validation = await tokenService.validateToken(rawToken, '127.0.0.1');
- assertEquals(validation, null);
+ assertEquals(validation.valid, false);
+ // findByHash excludes revoked tokens, so the token is not found
+ assertEquals(validation.errorCode, 'TOKEN_NOT_FOUND');
});
it('should reject expired token', async () => {
@@ -150,7 +158,8 @@ describe('TokenService', () => {
const validation = await tokenService.validateToken(rawToken, '127.0.0.1');
- assertEquals(validation, null);
+ assertEquals(validation.valid, false);
+ assertEquals(validation.errorCode, 'TOKEN_EXPIRED');
});
it('should record usage on validation', async () => {
diff --git a/ts/00_commitinfo_data.ts b/ts/00_commitinfo_data.ts
index 359fdf7..5b61d36 100644
--- a/ts/00_commitinfo_data.ts
+++ b/ts/00_commitinfo_data.ts
@@ -3,6 +3,6 @@
*/
export const commitinfo = {
name: '@stack.gallery/registry',
- version: '1.4.2',
+ version: '1.5.0',
description: 'Enterprise-grade multi-protocol package registry'
}
diff --git a/ts/api/handlers/admin.auth.api.ts b/ts/api/handlers/admin.auth.api.ts
index f02ff15..57d6568 100644
--- a/ts/api/handlers/admin.auth.api.ts
+++ b/ts/api/handlers/admin.auth.api.ts
@@ -113,7 +113,9 @@ export class AdminAuthApi {
});
} else if (body.type === 'ldap' && body.ldapConfig) {
// Encrypt bind password
- const encryptedPassword = await cryptoService.encrypt(body.ldapConfig.bindPasswordEncrypted);
+ const encryptedPassword = await cryptoService.encrypt(
+ body.ldapConfig.bindPasswordEncrypted,
+ );
provider = await AuthProvider.createLdapProvider({
name: body.name,
@@ -228,7 +230,7 @@ export class AdminAuthApi {
!cryptoService.isEncrypted(body.oauthConfig.clientSecretEncrypted)
) {
newOAuthConfig.clientSecretEncrypted = await cryptoService.encrypt(
- body.oauthConfig.clientSecretEncrypted
+ body.oauthConfig.clientSecretEncrypted,
);
}
@@ -245,7 +247,7 @@ export class AdminAuthApi {
!cryptoService.isEncrypted(body.ldapConfig.bindPasswordEncrypted)
) {
newLdapConfig.bindPasswordEncrypted = await cryptoService.encrypt(
- body.ldapConfig.bindPasswordEncrypted
+ body.ldapConfig.bindPasswordEncrypted,
);
}
diff --git a/ts/api/handlers/audit.api.ts b/ts/api/handlers/audit.api.ts
index 3ef40d6..cabfdc1 100644
--- a/ts/api/handlers/audit.api.ts
+++ b/ts/api/handlers/audit.api.ts
@@ -26,7 +26,9 @@ export class AuditApi {
// Parse query parameters
const organizationId = ctx.url.searchParams.get('organizationId') || undefined;
const repositoryId = ctx.url.searchParams.get('repositoryId') || undefined;
- const resourceType = ctx.url.searchParams.get('resourceType') as TAuditResourceType | undefined;
+ const resourceType = ctx.url.searchParams.get('resourceType') as
+ | TAuditResourceType
+ | undefined;
const actionsParam = ctx.url.searchParams.get('actions');
const actions = actionsParam ? (actionsParam.split(',') as TAuditAction[]) : undefined;
const success = ctx.url.searchParams.has('success')
@@ -54,7 +56,7 @@ export class AuditApi {
// Check if user can manage this org
const canManage = await this.permissionService.canManageOrganization(
ctx.actor.userId,
- organizationId
+ organizationId,
);
if (!canManage) {
// User can only see their own actions in this org
diff --git a/ts/api/handlers/oauth.api.ts b/ts/api/handlers/oauth.api.ts
index ad171fb..9bb2e59 100644
--- a/ts/api/handlers/oauth.api.ts
+++ b/ts/api/handlers/oauth.api.ts
@@ -93,7 +93,7 @@ export class OAuthApi {
const result = await externalAuthService.handleOAuthCallback(
{ code, state },
- { ipAddress: ctx.ip, userAgent: ctx.userAgent }
+ { ipAddress: ctx.ip, userAgent: ctx.userAgent },
);
if (!result.success) {
diff --git a/ts/api/handlers/organization.api.ts b/ts/api/handlers/organization.api.ts
index 22e7265..85f2fc7 100644
--- a/ts/api/handlers/organization.api.ts
+++ b/ts/api/handlers/organization.api.ts
@@ -208,7 +208,10 @@ export class OrganizationApi {
}
// Check admin permission using org.id
- const canManage = await this.permissionService.canManageOrganization(ctx.actor.userId, org.id);
+ const canManage = await this.permissionService.canManageOrganization(
+ ctx.actor.userId,
+ org.id,
+ );
if (!canManage) {
return { status: 403, body: { error: 'Admin access required' } };
}
@@ -319,13 +322,13 @@ export class OrganizationApi {
addedAt: m.joinedAt,
user: user
? {
- username: user.username,
- displayName: user.displayName,
- avatarUrl: user.avatarUrl,
- }
+ username: user.username,
+ displayName: user.displayName,
+ avatarUrl: user.avatarUrl,
+ }
: null,
};
- })
+ }),
);
return {
@@ -356,7 +359,10 @@ export class OrganizationApi {
}
// Check admin permission
- const canManage = await this.permissionService.canManageOrganization(ctx.actor.userId, org.id);
+ const canManage = await this.permissionService.canManageOrganization(
+ ctx.actor.userId,
+ org.id,
+ );
if (!canManage) {
return { status: 403, body: { error: 'Admin access required' } };
}
@@ -431,7 +437,10 @@ export class OrganizationApi {
}
// Check admin permission
- const canManage = await this.permissionService.canManageOrganization(ctx.actor.userId, org.id);
+ const canManage = await this.permissionService.canManageOrganization(
+ ctx.actor.userId,
+ org.id,
+ );
if (!canManage) {
return { status: 403, body: { error: 'Admin access required' } };
}
@@ -492,7 +501,10 @@ export class OrganizationApi {
// Users can remove themselves, admins can remove others
if (userId !== ctx.actor.userId) {
- const canManage = await this.permissionService.canManageOrganization(ctx.actor.userId, org.id);
+ const canManage = await this.permissionService.canManageOrganization(
+ ctx.actor.userId,
+ org.id,
+ );
if (!canManage) {
return { status: 403, body: { error: 'Admin access required' } };
}
diff --git a/ts/api/handlers/package.api.ts b/ts/api/handlers/package.api.ts
index 99ce84f..7b75cfd 100644
--- a/ts/api/handlers/package.api.ts
+++ b/ts/api/handlers/package.api.ts
@@ -50,7 +50,7 @@ export class PackageApi {
ctx.actor.userId,
pkg.organizationId,
pkg.repositoryId,
- 'read'
+ 'read',
);
if (canAccess) {
accessiblePackages.push(pkg);
@@ -106,7 +106,7 @@ export class PackageApi {
ctx.actor.userId,
pkg.organizationId,
pkg.repositoryId,
- 'read'
+ 'read',
);
if (!canAccess) {
@@ -161,7 +161,7 @@ export class PackageApi {
ctx.actor.userId,
pkg.organizationId,
pkg.repositoryId,
- 'read'
+ 'read',
);
if (!canAccess) {
@@ -213,7 +213,7 @@ export class PackageApi {
ctx.actor.userId,
pkg.organizationId,
pkg.repositoryId,
- 'delete'
+ 'delete',
);
if (!canDelete) {
@@ -267,7 +267,7 @@ export class PackageApi {
ctx.actor.userId,
pkg.organizationId,
pkg.repositoryId,
- 'delete'
+ 'delete',
);
if (!canDelete) {
diff --git a/ts/api/handlers/repository.api.ts b/ts/api/handlers/repository.api.ts
index 20b3b0a..505c9fa 100644
--- a/ts/api/handlers/repository.api.ts
+++ b/ts/api/handlers/repository.api.ts
@@ -5,7 +5,7 @@
import type { IApiContext, IApiResponse } from '../router.ts';
import { PermissionService } from '../../services/permission.service.ts';
import { AuditService } from '../../services/audit.service.ts';
-import { Repository, Organization } from '../../models/index.ts';
+import { Organization, Repository } from '../../models/index.ts';
import type { TRegistryProtocol, TRepositoryVisibility } from '../../interfaces/auth.interfaces.ts';
export class RepositoryApi {
@@ -28,7 +28,7 @@ export class RepositoryApi {
try {
const repositories = await this.permissionService.getAccessibleRepositories(
ctx.actor.userId,
- orgId
+ orgId,
);
return {
@@ -131,7 +131,10 @@ export class RepositoryApi {
if (!/^[a-z0-9]([a-z0-9._-]*[a-z0-9])?$/.test(name)) {
return {
status: 400,
- body: { error: 'Name must be lowercase alphanumeric with optional dots, hyphens, or underscores' },
+ body: {
+ error:
+ 'Name must be lowercase alphanumeric with optional dots, hyphens, or underscores',
+ },
};
}
@@ -198,7 +201,7 @@ export class RepositoryApi {
const canManage = await this.permissionService.canManageRepository(
ctx.actor.userId,
repo.organizationId,
- id
+ id,
);
if (!canManage) {
return { status: 403, body: { error: 'Admin access required' } };
@@ -252,7 +255,7 @@ export class RepositoryApi {
const canManage = await this.permissionService.canManageRepository(
ctx.actor.userId,
repo.organizationId,
- id
+ id,
);
if (!canManage) {
return { status: 403, body: { error: 'Admin access required' } };
diff --git a/ts/api/handlers/token.api.ts b/ts/api/handlers/token.api.ts
index 14b150f..155b7c1 100644
--- a/ts/api/handlers/token.api.ts
+++ b/ts/api/handlers/token.api.ts
@@ -33,7 +33,10 @@ export class TokenApi {
let tokens;
if (organizationId) {
// Check if user can manage org
- const canManage = await this.permissionService.canManageOrganization(ctx.actor.userId, organizationId);
+ const canManage = await this.permissionService.canManageOrganization(
+ ctx.actor.userId,
+ organizationId,
+ );
if (!canManage) {
return { status: 403, body: { error: 'Not authorized to view organization tokens' } };
}
@@ -119,7 +122,10 @@ export class TokenApi {
// If creating org token, verify permission
if (organizationId) {
- const canManage = await this.permissionService.canManageOrganization(ctx.actor.userId, organizationId);
+ const canManage = await this.permissionService.canManageOrganization(
+ ctx.actor.userId,
+ organizationId,
+ );
if (!canManage) {
return { status: 403, body: { error: 'Not authorized to create organization tokens' } };
}
@@ -181,7 +187,7 @@ export class TokenApi {
if (anyToken?.organizationId) {
const canManage = await this.permissionService.canManageOrganization(
ctx.actor.userId,
- anyToken.organizationId
+ anyToken.organizationId,
);
if (canManage) {
token = anyToken;
diff --git a/ts/api/router.ts b/ts/api/router.ts
index 3872f9b..ed40c4e 100644
--- a/ts/api/router.ts
+++ b/ts/api/router.ts
@@ -104,24 +104,56 @@ export class ApiRouter {
this.addRoute('POST', '/api/v1/organizations', (ctx) => this.organizationApi.create(ctx));
this.addRoute('PUT', '/api/v1/organizations/:id', (ctx) => this.organizationApi.update(ctx));
this.addRoute('DELETE', '/api/v1/organizations/:id', (ctx) => this.organizationApi.delete(ctx));
- this.addRoute('GET', '/api/v1/organizations/:id/members', (ctx) => this.organizationApi.listMembers(ctx));
- this.addRoute('POST', '/api/v1/organizations/:id/members', (ctx) => this.organizationApi.addMember(ctx));
- this.addRoute('PUT', '/api/v1/organizations/:id/members/:userId', (ctx) => this.organizationApi.updateMember(ctx));
- this.addRoute('DELETE', '/api/v1/organizations/:id/members/:userId', (ctx) => this.organizationApi.removeMember(ctx));
+ this.addRoute(
+ 'GET',
+ '/api/v1/organizations/:id/members',
+ (ctx) => this.organizationApi.listMembers(ctx),
+ );
+ this.addRoute(
+ 'POST',
+ '/api/v1/organizations/:id/members',
+ (ctx) => this.organizationApi.addMember(ctx),
+ );
+ this.addRoute(
+ 'PUT',
+ '/api/v1/organizations/:id/members/:userId',
+ (ctx) => this.organizationApi.updateMember(ctx),
+ );
+ this.addRoute(
+ 'DELETE',
+ '/api/v1/organizations/:id/members/:userId',
+ (ctx) => this.organizationApi.removeMember(ctx),
+ );
// Repository routes
- this.addRoute('GET', '/api/v1/organizations/:orgId/repositories', (ctx) => this.repositoryApi.list(ctx));
+ this.addRoute(
+ 'GET',
+ '/api/v1/organizations/:orgId/repositories',
+ (ctx) => this.repositoryApi.list(ctx),
+ );
this.addRoute('GET', '/api/v1/repositories/:id', (ctx) => this.repositoryApi.get(ctx));
- this.addRoute('POST', '/api/v1/organizations/:orgId/repositories', (ctx) => this.repositoryApi.create(ctx));
+ this.addRoute(
+ 'POST',
+ '/api/v1/organizations/:orgId/repositories',
+ (ctx) => this.repositoryApi.create(ctx),
+ );
this.addRoute('PUT', '/api/v1/repositories/:id', (ctx) => this.repositoryApi.update(ctx));
this.addRoute('DELETE', '/api/v1/repositories/:id', (ctx) => this.repositoryApi.delete(ctx));
// Package routes
this.addRoute('GET', '/api/v1/packages', (ctx) => this.packageApi.search(ctx));
this.addRoute('GET', '/api/v1/packages/:id', (ctx) => this.packageApi.get(ctx));
- this.addRoute('GET', '/api/v1/packages/:id/versions', (ctx) => this.packageApi.listVersions(ctx));
+ this.addRoute(
+ 'GET',
+ '/api/v1/packages/:id/versions',
+ (ctx) => this.packageApi.listVersions(ctx),
+ );
this.addRoute('DELETE', '/api/v1/packages/:id', (ctx) => this.packageApi.delete(ctx));
- this.addRoute('DELETE', '/api/v1/packages/:id/versions/:version', (ctx) => this.packageApi.deleteVersion(ctx));
+ this.addRoute(
+ 'DELETE',
+ '/api/v1/packages/:id/versions/:version',
+ (ctx) => this.packageApi.deleteVersion(ctx),
+ );
// Token routes
this.addRoute('GET', '/api/v1/tokens', (ctx) => this.tokenApi.list(ctx));
@@ -138,14 +170,46 @@ export class ApiRouter {
this.addRoute('POST', '/api/v1/auth/ldap/:id/login', (ctx) => this.oauthApi.ldapLogin(ctx));
// Admin auth routes (platform admin only)
- this.addRoute('GET', '/api/v1/admin/auth/providers', (ctx) => this.adminAuthApi.listProviders(ctx));
- this.addRoute('POST', '/api/v1/admin/auth/providers', (ctx) => this.adminAuthApi.createProvider(ctx));
- this.addRoute('GET', '/api/v1/admin/auth/providers/:id', (ctx) => this.adminAuthApi.getProvider(ctx));
- this.addRoute('PUT', '/api/v1/admin/auth/providers/:id', (ctx) => this.adminAuthApi.updateProvider(ctx));
- this.addRoute('DELETE', '/api/v1/admin/auth/providers/:id', (ctx) => this.adminAuthApi.deleteProvider(ctx));
- this.addRoute('POST', '/api/v1/admin/auth/providers/:id/test', (ctx) => this.adminAuthApi.testProvider(ctx));
- this.addRoute('GET', '/api/v1/admin/auth/settings', (ctx) => this.adminAuthApi.getSettings(ctx));
- this.addRoute('PUT', '/api/v1/admin/auth/settings', (ctx) => this.adminAuthApi.updateSettings(ctx));
+ this.addRoute(
+ 'GET',
+ '/api/v1/admin/auth/providers',
+ (ctx) => this.adminAuthApi.listProviders(ctx),
+ );
+ this.addRoute(
+ 'POST',
+ '/api/v1/admin/auth/providers',
+ (ctx) => this.adminAuthApi.createProvider(ctx),
+ );
+ this.addRoute(
+ 'GET',
+ '/api/v1/admin/auth/providers/:id',
+ (ctx) => this.adminAuthApi.getProvider(ctx),
+ );
+ this.addRoute(
+ 'PUT',
+ '/api/v1/admin/auth/providers/:id',
+ (ctx) => this.adminAuthApi.updateProvider(ctx),
+ );
+ this.addRoute(
+ 'DELETE',
+ '/api/v1/admin/auth/providers/:id',
+ (ctx) => this.adminAuthApi.deleteProvider(ctx),
+ );
+ this.addRoute(
+ 'POST',
+ '/api/v1/admin/auth/providers/:id/test',
+ (ctx) => this.adminAuthApi.testProvider(ctx),
+ );
+ this.addRoute(
+ 'GET',
+ '/api/v1/admin/auth/settings',
+ (ctx) => this.adminAuthApi.getSettings(ctx),
+ );
+ this.addRoute(
+ 'PUT',
+ '/api/v1/admin/auth/settings',
+ (ctx) => this.adminAuthApi.updateSettings(ctx),
+ );
}
/**
diff --git a/ts/cli.ts b/ts/cli.ts
index 65d9cdd..d64535e 100644
--- a/ts/cli.ts
+++ b/ts/cli.ts
@@ -3,9 +3,13 @@
*/
import * as plugins from './plugins.ts';
-import { StackGalleryRegistry, createRegistryFromEnv, createRegistryFromEnvFile } from './registry.ts';
+import {
+ createRegistryFromEnv,
+ createRegistryFromEnvFile,
+ StackGalleryRegistry,
+} from './registry.ts';
import { initDb } from './models/db.ts';
-import { User, Organization, OrganizationMember, Repository } from './models/index.ts';
+import { Organization, OrganizationMember, Repository, User } from './models/index.ts';
import { AuthService } from './services/auth.service.ts';
export async function runCli(): Promise {
@@ -21,9 +25,7 @@ export async function runCli(): Promise {
}
// Use env file in ephemeral/dev mode, otherwise use environment variables
- const registry = isEphemeral
- ? await createRegistryFromEnvFile()
- : createRegistryFromEnv();
+ const registry = isEphemeral ? await createRegistryFromEnvFile() : createRegistryFromEnv();
await registry.start();
// Handle shutdown gracefully
diff --git a/ts/interfaces/auth.interfaces.ts b/ts/interfaces/auth.interfaces.ts
index 2a0a563..09b0f58 100644
--- a/ts/interfaces/auth.interfaces.ts
+++ b/ts/interfaces/auth.interfaces.ts
@@ -103,7 +103,14 @@ export interface ITeamMember {
export type TRepositoryVisibility = 'public' | 'private' | 'internal';
export type TRepositoryRole = 'admin' | 'maintainer' | 'developer' | 'reader';
-export type TRegistryProtocol = 'oci' | 'npm' | 'maven' | 'cargo' | 'composer' | 'pypi' | 'rubygems';
+export type TRegistryProtocol =
+ | 'oci'
+ | 'npm'
+ | 'maven'
+ | 'cargo'
+ | 'composer'
+ | 'pypi'
+ | 'rubygems';
export interface IRepository {
id: string;
diff --git a/ts/models/apitoken.ts b/ts/models/apitoken.ts
index 88fd28e..c15b5fe 100644
--- a/ts/models/apitoken.ts
+++ b/ts/models/apitoken.ts
@@ -7,7 +7,8 @@ import type { IApiToken, ITokenScope, TRegistryProtocol } from '../interfaces/au
import { db } from './db.ts';
@plugins.smartdata.Collection(() => db)
-export class ApiToken extends plugins.smartdata.SmartDataDbDoc implements IApiToken {
+export class ApiToken extends plugins.smartdata.SmartDataDbDoc
+ implements IApiToken {
@plugins.smartdata.unI()
public id: string = '';
@@ -150,7 +151,7 @@ export class ApiToken extends plugins.smartdata.SmartDataDbDoc db)
-export class AuditLog extends plugins.smartdata.SmartDataDbDoc implements IAuditLog {
+export class AuditLog extends plugins.smartdata.SmartDataDbDoc
+ implements IAuditLog {
@plugins.smartdata.unI()
public id: string = '';
diff --git a/ts/models/auth.provider.ts b/ts/models/auth.provider.ts
index 3931ba8..bf7c975 100644
--- a/ts/models/auth.provider.ts
+++ b/ts/models/auth.provider.ts
@@ -5,13 +5,13 @@
import * as plugins from '../plugins.ts';
import type {
- IAuthProvider,
- TAuthProviderType,
- TAuthProviderStatus,
- IOAuthConfig,
- ILdapConfig,
IAttributeMapping,
+ IAuthProvider,
+ ILdapConfig,
+ IOAuthConfig,
IProvisioningSettings,
+ TAuthProviderStatus,
+ TAuthProviderType,
} from '../interfaces/auth.interfaces.ts';
import { db } from './db.ts';
@@ -27,10 +27,8 @@ const DEFAULT_PROVISIONING: IProvisioningSettings = {
};
@plugins.smartdata.Collection(() => db)
-export class AuthProvider
- extends plugins.smartdata.SmartDataDbDoc
- implements IAuthProvider
-{
+export class AuthProvider extends plugins.smartdata.SmartDataDbDoc
+ implements IAuthProvider {
@plugins.smartdata.unI()
public id: string = '';
diff --git a/ts/models/db.ts b/ts/models/db.ts
index f227859..b44fa72 100644
--- a/ts/models/db.ts
+++ b/ts/models/db.ts
@@ -20,7 +20,7 @@ let isInitialized = false;
*/
export async function initDb(
mongoDbUrl: string,
- mongoDbName?: string
+ mongoDbName?: string,
): Promise {
if (isInitialized && db) {
return db;
diff --git a/ts/models/external.identity.ts b/ts/models/external.identity.ts
index e40274f..1b68d9d 100644
--- a/ts/models/external.identity.ts
+++ b/ts/models/external.identity.ts
@@ -10,8 +10,7 @@ import { db } from './db.ts';
@plugins.smartdata.Collection(() => db)
export class ExternalIdentity
extends plugins.smartdata.SmartDataDbDoc
- implements IExternalIdentity
-{
+ implements IExternalIdentity {
@plugins.smartdata.unI()
public id: string = '';
@@ -55,7 +54,7 @@ export class ExternalIdentity
*/
public static async findByExternalId(
providerId: string,
- externalId: string
+ externalId: string,
): Promise {
return await ExternalIdentity.getInstance({ providerId, externalId });
}
@@ -72,7 +71,7 @@ export class ExternalIdentity
*/
public static async findByUserAndProvider(
userId: string,
- providerId: string
+ providerId: string,
): Promise {
return await ExternalIdentity.getInstance({ userId, providerId });
}
diff --git a/ts/models/index.ts b/ts/models/index.ts
index 3639fdd..aaa2b81 100644
--- a/ts/models/index.ts
+++ b/ts/models/index.ts
@@ -2,7 +2,7 @@
* Model exports
*/
-export { initDb, getDb, closeDb, isDbConnected } from './db.ts';
+export { closeDb, getDb, initDb, isDbConnected } from './db.ts';
export { User } from './user.ts';
export { Organization } from './organization.ts';
export { OrganizationMember } from './organization.member.ts';
diff --git a/ts/models/organization.member.ts b/ts/models/organization.member.ts
index b9d2999..a4da400 100644
--- a/ts/models/organization.member.ts
+++ b/ts/models/organization.member.ts
@@ -7,7 +7,9 @@ import type { IOrganizationMember, TOrganizationRole } from '../interfaces/auth.
import { db } from './db.ts';
@plugins.smartdata.Collection(() => db)
-export class OrganizationMember extends plugins.smartdata.SmartDataDbDoc implements IOrganizationMember {
+export class OrganizationMember
+ extends plugins.smartdata.SmartDataDbDoc
+ implements IOrganizationMember {
@plugins.smartdata.unI()
public id: string = '';
@@ -69,7 +71,7 @@ export class OrganizationMember extends plugins.smartdata.SmartDataDbDoc {
return await OrganizationMember.getInstance({
organizationId,
diff --git a/ts/models/organization.ts b/ts/models/organization.ts
index eb218fd..7f04a2b 100644
--- a/ts/models/organization.ts
+++ b/ts/models/organization.ts
@@ -18,7 +18,8 @@ const DEFAULT_SETTINGS: IOrganizationSettings = {
};
@plugins.smartdata.Collection(() => db)
-export class Organization extends plugins.smartdata.SmartDataDbDoc implements IOrganization {
+export class Organization extends plugins.smartdata.SmartDataDbDoc
+ implements IOrganization {
@plugins.smartdata.unI()
public id: string = '';
@@ -92,7 +93,7 @@ export class Organization extends plugins.smartdata.SmartDataDbDoc db)
-export class Package extends plugins.smartdata.SmartDataDbDoc implements IPackage {
+export class Package extends plugins.smartdata.SmartDataDbDoc
+ implements IPackage {
@plugins.smartdata.unI()
public id: string = ''; // {protocol}:{org}:{name}
@@ -94,7 +95,7 @@ export class Package extends plugins.smartdata.SmartDataDbDoc
public static async findByName(
protocol: TRegistryProtocol,
orgName: string,
- name: string
+ name: string,
): Promise {
const id = Package.generateId(protocol, orgName, name);
return await Package.findById(id);
@@ -118,7 +119,7 @@ export class Package extends plugins.smartdata.SmartDataDbDoc
isPrivate?: boolean;
limit?: number;
offset?: number;
- }
+ },
): Promise {
const filter: Record = {};
if (options?.protocol) filter.protocol = options.protocol;
@@ -133,7 +134,7 @@ export class Package extends plugins.smartdata.SmartDataDbDoc
const filtered = allPackages.filter(
(pkg) =>
pkg.name.toLowerCase().includes(lowerQuery) ||
- pkg.description?.toLowerCase().includes(lowerQuery)
+ pkg.description?.toLowerCase().includes(lowerQuery),
);
// Apply pagination
diff --git a/ts/models/platform.settings.ts b/ts/models/platform.settings.ts
index 0e92f49..d652a1b 100644
--- a/ts/models/platform.settings.ts
+++ b/ts/models/platform.settings.ts
@@ -4,7 +4,7 @@
*/
import * as plugins from '../plugins.ts';
-import type { IPlatformSettings, IPlatformAuthSettings } from '../interfaces/auth.interfaces.ts';
+import type { IPlatformAuthSettings, IPlatformSettings } from '../interfaces/auth.interfaces.ts';
import { db } from './db.ts';
const DEFAULT_AUTH_SETTINGS: IPlatformAuthSettings = {
@@ -16,8 +16,7 @@ const DEFAULT_AUTH_SETTINGS: IPlatformAuthSettings = {
@plugins.smartdata.Collection(() => db)
export class PlatformSettings
extends plugins.smartdata.SmartDataDbDoc
- implements IPlatformSettings
-{
+ implements IPlatformSettings {
@plugins.smartdata.unI()
public id: string = 'singleton';
@@ -51,7 +50,7 @@ export class PlatformSettings
*/
public async updateAuthSettings(
settings: Partial,
- updatedById?: string
+ updatedById?: string,
): Promise {
this.auth = { ...this.auth, ...settings };
this.updatedAt = new Date();
diff --git a/ts/models/repository.permission.ts b/ts/models/repository.permission.ts
index b19b7c2..1acd001 100644
--- a/ts/models/repository.permission.ts
+++ b/ts/models/repository.permission.ts
@@ -7,7 +7,9 @@ import type { IRepositoryPermission, TRepositoryRole } from '../interfaces/auth.
import { db } from './db.ts';
@plugins.smartdata.Collection(() => db)
-export class RepositoryPermission extends plugins.smartdata.SmartDataDbDoc implements IRepositoryPermission {
+export class RepositoryPermission
+ extends plugins.smartdata.SmartDataDbDoc
+ implements IRepositoryPermission {
@plugins.smartdata.unI()
public id: string = '';
@@ -104,7 +106,7 @@ export class RepositoryPermission extends plugins.smartdata.SmartDataDbDoc {
return await RepositoryPermission.getUserPermission(repositoryId, userId);
}
@@ -114,7 +116,7 @@ export class RepositoryPermission extends plugins.smartdata.SmartDataDbDoc {
return await RepositoryPermission.getInstance({
repositoryId,
@@ -127,7 +129,7 @@ export class RepositoryPermission extends plugins.smartdata.SmartDataDbDoc {
return await RepositoryPermission.getInstance({
repositoryId,
@@ -149,7 +151,7 @@ export class RepositoryPermission extends plugins.smartdata.SmartDataDbDoc {
if (teamIds.length === 0) return [];
return await RepositoryPermission.getInstances({
diff --git a/ts/models/repository.ts b/ts/models/repository.ts
index 2ce03c3..2ff4b6b 100644
--- a/ts/models/repository.ts
+++ b/ts/models/repository.ts
@@ -3,11 +3,16 @@
*/
import * as plugins from '../plugins.ts';
-import type { IRepository, TRepositoryVisibility, TRegistryProtocol } from '../interfaces/auth.interfaces.ts';
+import type {
+ IRepository,
+ TRegistryProtocol,
+ TRepositoryVisibility,
+} from '../interfaces/auth.interfaces.ts';
import { db } from './db.ts';
@plugins.smartdata.Collection(() => db)
-export class Repository extends plugins.smartdata.SmartDataDbDoc implements IRepository {
+export class Repository extends plugins.smartdata.SmartDataDbDoc
+ implements IRepository {
@plugins.smartdata.unI()
public id: string = '';
@@ -70,7 +75,9 @@ export class Repository extends plugins.smartdata.SmartDataDbDoc {
return await Repository.getInstance({
organizationId,
diff --git a/ts/models/session.ts b/ts/models/session.ts
index 9b6794d..68ad296 100644
--- a/ts/models/session.ts
+++ b/ts/models/session.ts
@@ -7,7 +7,8 @@ import type { ISession } from '../interfaces/auth.interfaces.ts';
import { db } from './db.ts';
@plugins.smartdata.Collection(() => db)
-export class Session extends plugins.smartdata.SmartDataDbDoc implements ISession {
+export class Session extends plugins.smartdata.SmartDataDbDoc
+ implements ISession {
@plugins.smartdata.unI()
public id: string = '';
@@ -94,7 +95,7 @@ export class Session extends plugins.smartdata.SmartDataDbDoc
*/
public static async invalidateAllUserSessions(
userId: string,
- reason: string = 'logout_all'
+ reason: string = 'logout_all',
): Promise {
const sessions = await Session.getUserSessions(userId);
for (const session of sessions) {
diff --git a/ts/models/team.member.ts b/ts/models/team.member.ts
index d1b06b2..1f9edc0 100644
--- a/ts/models/team.member.ts
+++ b/ts/models/team.member.ts
@@ -7,7 +7,8 @@ import type { ITeamMember, TTeamRole } from '../interfaces/auth.interfaces.ts';
import { db } from './db.ts';
@plugins.smartdata.Collection(() => db)
-export class TeamMember extends plugins.smartdata.SmartDataDbDoc implements ITeamMember {
+export class TeamMember extends plugins.smartdata.SmartDataDbDoc
+ implements ITeamMember {
@plugins.smartdata.unI()
public id: string = '';
diff --git a/ts/opsserver/classes.opsserver.ts b/ts/opsserver/classes.opsserver.ts
new file mode 100644
index 0000000..6d94de1
--- /dev/null
+++ b/ts/opsserver/classes.opsserver.ts
@@ -0,0 +1,51 @@
+import * as plugins from '../plugins.ts';
+import type { StackGalleryRegistry } from '../registry.ts';
+import * as handlers from './handlers/index.ts';
+
+export class OpsServer {
+ public registryRef: StackGalleryRegistry;
+ public typedrouter = new plugins.typedrequest.TypedRouter();
+
+ // Handler instances
+ public authHandler!: handlers.AuthHandler;
+ public organizationHandler!: handlers.OrganizationHandler;
+ public repositoryHandler!: handlers.RepositoryHandler;
+ public packageHandler!: handlers.PackageHandler;
+ public tokenHandler!: handlers.TokenHandler;
+ public auditHandler!: handlers.AuditHandler;
+ public adminHandler!: handlers.AdminHandler;
+ public oauthHandler!: handlers.OAuthHandler;
+ public userHandler!: handlers.UserHandler;
+
+ constructor(registryRef: StackGalleryRegistry) {
+ this.registryRef = registryRef;
+ }
+
+ /**
+ * Initialize all handlers. Must be called before routing requests.
+ */
+ public async start(): Promise {
+ // AuthHandler must be initialized first (other handlers depend on its guards)
+ this.authHandler = new handlers.AuthHandler(this);
+ await this.authHandler.initialize();
+
+ // All other handlers self-register in their constructors
+ this.organizationHandler = new handlers.OrganizationHandler(this);
+ this.repositoryHandler = new handlers.RepositoryHandler(this);
+ this.packageHandler = new handlers.PackageHandler(this);
+ this.tokenHandler = new handlers.TokenHandler(this);
+ this.auditHandler = new handlers.AuditHandler(this);
+ this.adminHandler = new handlers.AdminHandler(this);
+ this.oauthHandler = new handlers.OAuthHandler(this);
+ this.userHandler = new handlers.UserHandler(this);
+
+ console.log('[OpsServer] TypedRequest handlers initialized');
+ }
+
+ /**
+ * Cleanup resources
+ */
+ public async stop(): Promise {
+ console.log('[OpsServer] Stopped');
+ }
+}
diff --git a/ts/opsserver/handlers/admin.handler.ts b/ts/opsserver/handlers/admin.handler.ts
new file mode 100644
index 0000000..c3cc962
--- /dev/null
+++ b/ts/opsserver/handlers/admin.handler.ts
@@ -0,0 +1,380 @@
+import * as plugins from '../../plugins.ts';
+import * as interfaces from '../../../ts_interfaces/index.ts';
+import type { OpsServer } from '../classes.opsserver.ts';
+import { requireAdminIdentity } from '../helpers/guards.ts';
+import { AuthProvider, PlatformSettings } from '../../models/index.ts';
+import { cryptoService } from '../../services/crypto.service.ts';
+import { externalAuthService } from '../../services/external.auth.service.ts';
+import { AuditService } from '../../services/audit.service.ts';
+
+export class AdminHandler {
+ public typedrouter = new plugins.typedrequest.TypedRouter();
+
+ constructor(private opsServerRef: OpsServer) {
+ this.opsServerRef.typedrouter.addTypedRouter(this.typedrouter);
+ this.registerHandlers();
+ }
+
+ private registerHandlers(): void {
+ // Get Admin Providers
+ this.typedrouter.addTypedHandler(
+ new plugins.typedrequest.TypedHandler(
+ 'getAdminProviders',
+ async (dataArg) => {
+ await requireAdminIdentity(this.opsServerRef.authHandler, dataArg);
+
+ try {
+ const providers = await AuthProvider.getAllProviders();
+ return {
+ providers: providers.map((p) => p.toAdminInfo()),
+ };
+ } catch (error) {
+ if (error instanceof plugins.typedrequest.TypedResponseError) throw error;
+ throw new plugins.typedrequest.TypedResponseError('Failed to list providers');
+ }
+ },
+ ),
+ );
+
+ // Create Admin Provider
+ this.typedrouter.addTypedHandler(
+ new plugins.typedrequest.TypedHandler(
+ 'createAdminProvider',
+ async (dataArg) => {
+ await requireAdminIdentity(this.opsServerRef.authHandler, dataArg);
+
+ try {
+ const { name, displayName, type, oauthConfig, ldapConfig, attributeMapping, provisioning } = dataArg;
+
+ // Validate required fields
+ if (!name || !displayName || !type) {
+ throw new plugins.typedrequest.TypedResponseError(
+ 'name, displayName, and type are required',
+ );
+ }
+
+ // Check name uniqueness
+ const existing = await AuthProvider.findByName(name);
+ if (existing) {
+ throw new plugins.typedrequest.TypedResponseError('Provider name already exists');
+ }
+
+ // Validate type-specific config
+ if (type === 'oidc' && !oauthConfig) {
+ throw new plugins.typedrequest.TypedResponseError(
+ 'oauthConfig is required for OIDC provider',
+ );
+ }
+ if (type === 'ldap' && !ldapConfig) {
+ throw new plugins.typedrequest.TypedResponseError(
+ 'ldapConfig is required for LDAP provider',
+ );
+ }
+
+ let provider: AuthProvider;
+
+ if (type === 'oidc' && oauthConfig) {
+ // Encrypt client secret
+ const encryptedSecret = await cryptoService.encrypt(
+ oauthConfig.clientSecretEncrypted,
+ );
+
+ provider = await AuthProvider.createOAuthProvider({
+ name,
+ displayName,
+ oauthConfig: {
+ ...oauthConfig,
+ clientSecretEncrypted: encryptedSecret,
+ },
+ attributeMapping,
+ provisioning,
+ createdById: dataArg.identity.userId,
+ });
+ } else if (type === 'ldap' && ldapConfig) {
+ // Encrypt bind password
+ const encryptedPassword = await cryptoService.encrypt(
+ ldapConfig.bindPasswordEncrypted,
+ );
+
+ provider = await AuthProvider.createLdapProvider({
+ name,
+ displayName,
+ ldapConfig: {
+ ...ldapConfig,
+ bindPasswordEncrypted: encryptedPassword,
+ },
+ attributeMapping,
+ provisioning,
+ createdById: dataArg.identity.userId,
+ });
+ } else {
+ throw new plugins.typedrequest.TypedResponseError('Invalid provider type');
+ }
+
+ // Audit log
+ await AuditService.withContext({
+ actorId: dataArg.identity.userId,
+ actorType: 'user',
+ }).log('AUTH_PROVIDER_CREATED', 'auth_provider', {
+ resourceId: provider.id,
+ success: true,
+ metadata: {
+ providerName: provider.name,
+ providerType: provider.type,
+ },
+ });
+
+ return { provider: provider.toAdminInfo() };
+ } catch (error) {
+ if (error instanceof plugins.typedrequest.TypedResponseError) throw error;
+ throw new plugins.typedrequest.TypedResponseError('Failed to create provider');
+ }
+ },
+ ),
+ );
+
+ // Get Admin Provider
+ this.typedrouter.addTypedHandler(
+ new plugins.typedrequest.TypedHandler(
+ 'getAdminProvider',
+ async (dataArg) => {
+ await requireAdminIdentity(this.opsServerRef.authHandler, dataArg);
+
+ try {
+ const provider = await AuthProvider.findById(dataArg.providerId);
+ if (!provider) {
+ throw new plugins.typedrequest.TypedResponseError('Provider not found');
+ }
+
+ return { provider: provider.toAdminInfo() };
+ } catch (error) {
+ if (error instanceof plugins.typedrequest.TypedResponseError) throw error;
+ throw new plugins.typedrequest.TypedResponseError('Failed to get provider');
+ }
+ },
+ ),
+ );
+
+ // Update Admin Provider
+ this.typedrouter.addTypedHandler(
+ new plugins.typedrequest.TypedHandler(
+ 'updateAdminProvider',
+ async (dataArg) => {
+ await requireAdminIdentity(this.opsServerRef.authHandler, dataArg);
+
+ try {
+ const provider = await AuthProvider.findById(dataArg.providerId);
+ if (!provider) {
+ throw new plugins.typedrequest.TypedResponseError('Provider not found');
+ }
+
+ // Update basic fields
+ if (dataArg.displayName !== undefined) provider.displayName = dataArg.displayName;
+ if (dataArg.status !== undefined) provider.status = dataArg.status as any;
+ if (dataArg.priority !== undefined) provider.priority = dataArg.priority;
+
+ // Update OAuth config
+ if (dataArg.oauthConfig && provider.oauthConfig) {
+ const newOAuthConfig = { ...provider.oauthConfig, ...dataArg.oauthConfig };
+
+ // Encrypt new client secret if provided and not already encrypted
+ if (
+ dataArg.oauthConfig.clientSecretEncrypted &&
+ !cryptoService.isEncrypted(dataArg.oauthConfig.clientSecretEncrypted)
+ ) {
+ newOAuthConfig.clientSecretEncrypted = await cryptoService.encrypt(
+ dataArg.oauthConfig.clientSecretEncrypted,
+ );
+ }
+
+ provider.oauthConfig = newOAuthConfig;
+ }
+
+ // Update LDAP config
+ if (dataArg.ldapConfig && provider.ldapConfig) {
+ const newLdapConfig = { ...provider.ldapConfig, ...dataArg.ldapConfig };
+
+ // Encrypt new bind password if provided and not already encrypted
+ if (
+ dataArg.ldapConfig.bindPasswordEncrypted &&
+ !cryptoService.isEncrypted(dataArg.ldapConfig.bindPasswordEncrypted)
+ ) {
+ newLdapConfig.bindPasswordEncrypted = await cryptoService.encrypt(
+ dataArg.ldapConfig.bindPasswordEncrypted,
+ );
+ }
+
+ provider.ldapConfig = newLdapConfig;
+ }
+
+ // Update attribute mapping
+ if (dataArg.attributeMapping) {
+ provider.attributeMapping = {
+ ...provider.attributeMapping,
+ ...dataArg.attributeMapping,
+ } as any;
+ }
+
+ // Update provisioning settings
+ if (dataArg.provisioning) {
+ provider.provisioning = {
+ ...provider.provisioning,
+ ...dataArg.provisioning,
+ } as any;
+ }
+
+ await provider.save();
+
+ // Audit log
+ await AuditService.withContext({
+ actorId: dataArg.identity.userId,
+ actorType: 'user',
+ }).log('AUTH_PROVIDER_UPDATED', 'auth_provider', {
+ resourceId: provider.id,
+ success: true,
+ metadata: { providerName: provider.name },
+ });
+
+ return { provider: provider.toAdminInfo() };
+ } catch (error) {
+ if (error instanceof plugins.typedrequest.TypedResponseError) throw error;
+ throw new plugins.typedrequest.TypedResponseError('Failed to update provider');
+ }
+ },
+ ),
+ );
+
+ // Delete Admin Provider
+ this.typedrouter.addTypedHandler(
+ new plugins.typedrequest.TypedHandler(
+ 'deleteAdminProvider',
+ async (dataArg) => {
+ await requireAdminIdentity(this.opsServerRef.authHandler, dataArg);
+
+ try {
+ const provider = await AuthProvider.findById(dataArg.providerId);
+ if (!provider) {
+ throw new plugins.typedrequest.TypedResponseError('Provider not found');
+ }
+
+ // Soft delete - disable instead of removing
+ provider.status = 'disabled';
+ await provider.save();
+
+ // Audit log
+ await AuditService.withContext({
+ actorId: dataArg.identity.userId,
+ actorType: 'user',
+ }).log('AUTH_PROVIDER_DELETED', 'auth_provider', {
+ resourceId: provider.id,
+ success: true,
+ metadata: { providerName: provider.name },
+ });
+
+ return { message: 'Provider disabled' };
+ } catch (error) {
+ if (error instanceof plugins.typedrequest.TypedResponseError) throw error;
+ throw new plugins.typedrequest.TypedResponseError('Failed to delete provider');
+ }
+ },
+ ),
+ );
+
+ // Test Admin Provider
+ this.typedrouter.addTypedHandler(
+ new plugins.typedrequest.TypedHandler(
+ 'testAdminProvider',
+ async (dataArg) => {
+ await requireAdminIdentity(this.opsServerRef.authHandler, dataArg);
+
+ try {
+ const result = await externalAuthService.testConnection(dataArg.providerId);
+
+ // Audit log
+ await AuditService.withContext({
+ actorId: dataArg.identity.userId,
+ actorType: 'user',
+ }).log('AUTH_PROVIDER_TESTED', 'auth_provider', {
+ resourceId: dataArg.providerId,
+ success: result.success,
+ metadata: {
+ result: result.success ? 'success' : 'failure',
+ latencyMs: result.latencyMs,
+ error: result.error,
+ },
+ });
+
+ return { result };
+ } catch (error) {
+ if (error instanceof plugins.typedrequest.TypedResponseError) throw error;
+ throw new plugins.typedrequest.TypedResponseError('Failed to test provider');
+ }
+ },
+ ),
+ );
+
+ // Get Platform Settings
+ this.typedrouter.addTypedHandler(
+ new plugins.typedrequest.TypedHandler(
+ 'getPlatformSettings',
+ async (dataArg) => {
+ await requireAdminIdentity(this.opsServerRef.authHandler, dataArg);
+
+ try {
+ const settings = await PlatformSettings.get();
+ return {
+ settings: {
+ id: settings.id,
+ auth: settings.auth,
+ updatedAt: settings.updatedAt instanceof Date ? settings.updatedAt.toISOString() : String(settings.updatedAt),
+ updatedById: settings.updatedById,
+ },
+ };
+ } catch (error) {
+ if (error instanceof plugins.typedrequest.TypedResponseError) throw error;
+ throw new plugins.typedrequest.TypedResponseError('Failed to get settings');
+ }
+ },
+ ),
+ );
+
+ // Update Platform Settings
+ this.typedrouter.addTypedHandler(
+ new plugins.typedrequest.TypedHandler(
+ 'updatePlatformSettings',
+ async (dataArg) => {
+ await requireAdminIdentity(this.opsServerRef.authHandler, dataArg);
+
+ try {
+ const settings = await PlatformSettings.get();
+
+ if (dataArg.auth) {
+ await settings.updateAuthSettings(dataArg.auth as any, dataArg.identity.userId);
+ }
+
+ // Audit log
+ await AuditService.withContext({
+ actorId: dataArg.identity.userId,
+ actorType: 'user',
+ }).log('PLATFORM_SETTINGS_UPDATED', 'platform_settings', {
+ resourceId: 'platform-settings',
+ success: true,
+ });
+
+ return {
+ settings: {
+ id: settings.id,
+ auth: settings.auth,
+ updatedAt: settings.updatedAt instanceof Date ? settings.updatedAt.toISOString() : String(settings.updatedAt),
+ updatedById: settings.updatedById,
+ },
+ };
+ } catch (error) {
+ if (error instanceof plugins.typedrequest.TypedResponseError) throw error;
+ throw new plugins.typedrequest.TypedResponseError('Failed to update settings');
+ }
+ },
+ ),
+ );
+ }
+}
diff --git a/ts/opsserver/handlers/audit.handler.ts b/ts/opsserver/handlers/audit.handler.ts
new file mode 100644
index 0000000..2cbb5c6
--- /dev/null
+++ b/ts/opsserver/handlers/audit.handler.ts
@@ -0,0 +1,105 @@
+import * as plugins from '../../plugins.ts';
+import * as interfaces from '../../../ts_interfaces/index.ts';
+import type { OpsServer } from '../classes.opsserver.ts';
+import { requireValidIdentity } from '../helpers/guards.ts';
+import { AuditLog } from '../../models/auditlog.ts';
+import { PermissionService } from '../../services/permission.service.ts';
+
+export class AuditHandler {
+ public typedrouter = new plugins.typedrequest.TypedRouter();
+ private permissionService = new PermissionService();
+
+ constructor(private opsServerRef: OpsServer) {
+ this.opsServerRef.typedrouter.addTypedRouter(this.typedrouter);
+ this.registerHandlers();
+ }
+
+ private registerHandlers(): void {
+ // Query Audit Logs
+ this.typedrouter.addTypedHandler(
+ new plugins.typedrequest.TypedHandler(
+ 'queryAudit',
+ async (dataArg) => {
+ await requireValidIdentity(this.opsServerRef.authHandler, dataArg);
+
+ try {
+ const {
+ organizationId,
+ repositoryId,
+ resourceType,
+ actions,
+ success,
+ startDate: startDateStr,
+ endDate: endDateStr,
+ limit: limitParam,
+ offset: offsetParam,
+ } = dataArg;
+
+ const limit = limitParam || 100;
+ const offset = offsetParam || 0;
+ const startDate = startDateStr ? new Date(startDateStr) : undefined;
+ const endDate = endDateStr ? new Date(endDateStr) : undefined;
+
+ // Determine actor filter based on permissions
+ let actorId: string | undefined;
+
+ if (dataArg.identity.isSystemAdmin) {
+ // System admins can see all
+ actorId = dataArg.actorId;
+ } else if (organizationId) {
+ // Check if user can manage this org
+ const canManage = await this.permissionService.canManageOrganization(
+ dataArg.identity.userId,
+ organizationId,
+ );
+ if (!canManage) {
+ // User can only see their own actions in this org
+ actorId = dataArg.identity.userId;
+ }
+ } else {
+ // Non-admins without org filter can only see their own actions
+ actorId = dataArg.identity.userId;
+ }
+
+ const result = await AuditLog.query({
+ actorId,
+ organizationId,
+ repositoryId,
+ resourceType: resourceType as any,
+ action: actions as any[],
+ success,
+ startDate,
+ endDate,
+ limit,
+ offset,
+ });
+
+ return {
+ logs: result.logs.map((log) => ({
+ id: log.id,
+ actorId: log.actorId,
+ actorType: log.actorType as interfaces.data.IAuditEntry['actorType'],
+ action: log.action as interfaces.data.TAuditAction,
+ resourceType: log.resourceType as interfaces.data.TAuditResourceType,
+ resourceId: log.resourceId,
+ resourceName: log.resourceName,
+ organizationId: log.organizationId,
+ repositoryId: log.repositoryId,
+ success: log.success,
+ errorCode: log.errorCode,
+ timestamp: log.timestamp instanceof Date ? log.timestamp.toISOString() : String(log.timestamp),
+ metadata: log.metadata || {},
+ })),
+ total: result.total,
+ limit,
+ offset,
+ };
+ } catch (error) {
+ if (error instanceof plugins.typedrequest.TypedResponseError) throw error;
+ throw new plugins.typedrequest.TypedResponseError('Failed to query audit logs');
+ }
+ },
+ ),
+ );
+ }
+}
diff --git a/ts/opsserver/handlers/auth.handler.ts b/ts/opsserver/handlers/auth.handler.ts
new file mode 100644
index 0000000..1b658b4
--- /dev/null
+++ b/ts/opsserver/handlers/auth.handler.ts
@@ -0,0 +1,263 @@
+import * as plugins from '../../plugins.ts';
+import * as interfaces from '../../../ts_interfaces/index.ts';
+import type { OpsServer } from '../classes.opsserver.ts';
+import { AuthService } from '../../services/auth.service.ts';
+import { User } from '../../models/user.ts';
+import { AuthProvider, PlatformSettings } from '../../models/index.ts';
+
+export class AuthHandler {
+ public typedrouter = new plugins.typedrequest.TypedRouter();
+ private authService: AuthService;
+
+ constructor(private opsServerRef: OpsServer) {
+ this.opsServerRef.typedrouter.addTypedRouter(this.typedrouter);
+ this.authService = new AuthService();
+ }
+
+ /**
+ * Initialize auth handler - must be called after construction
+ */
+ public async initialize(): Promise {
+ this.registerHandlers();
+ }
+
+ private registerHandlers(): void {
+ // Login
+ this.typedrouter.addTypedHandler(
+ new plugins.typedrequest.TypedHandler(
+ 'login',
+ async (dataArg) => {
+ try {
+ const { email, password } = dataArg;
+
+ if (!email || !password) {
+ throw new plugins.typedrequest.TypedResponseError('Email and password are required');
+ }
+
+ const result = await this.authService.login(email, password);
+
+ if (!result.success || !result.user || !result.accessToken || !result.refreshToken) {
+ return {
+ errorCode: result.errorCode,
+ errorMessage: result.errorMessage,
+ };
+ }
+
+ const user = result.user;
+ const expiresAt = Date.now() + 15 * 60 * 1000; // 15 minutes
+
+ const identity: interfaces.data.IIdentity = {
+ jwt: result.accessToken,
+ refreshJwt: result.refreshToken,
+ userId: user.id,
+ email: user.email,
+ username: user.username,
+ displayName: user.displayName,
+ isSystemAdmin: user.isSystemAdmin,
+ expiresAt,
+ sessionId: result.sessionId!,
+ };
+
+ return {
+ identity,
+ user: {
+ id: user.id,
+ email: user.email,
+ username: user.username,
+ displayName: user.displayName,
+ avatarUrl: user.avatarUrl,
+ isSystemAdmin: user.isSystemAdmin,
+ isActive: user.isActive,
+ createdAt: user.createdAt instanceof Date
+ ? user.createdAt.toISOString()
+ : String(user.createdAt),
+ lastLoginAt: user.lastLoginAt instanceof Date
+ ? user.lastLoginAt.toISOString()
+ : user.lastLoginAt
+ ? String(user.lastLoginAt)
+ : undefined,
+ },
+ };
+ } catch (error) {
+ if (error instanceof plugins.typedrequest.TypedResponseError) throw error;
+ throw new plugins.typedrequest.TypedResponseError('Login failed');
+ }
+ },
+ ),
+ );
+
+ // Refresh Token
+ this.typedrouter.addTypedHandler(
+ new plugins.typedrequest.TypedHandler(
+ 'refreshToken',
+ async (dataArg) => {
+ try {
+ if (!dataArg.identity?.refreshJwt) {
+ throw new plugins.typedrequest.TypedResponseError('Refresh token is required');
+ }
+
+ const result = await this.authService.refresh(dataArg.identity.refreshJwt);
+
+ if (!result.success || !result.user || !result.accessToken) {
+ throw new plugins.typedrequest.TypedResponseError(
+ result.errorMessage || 'Token refresh failed',
+ );
+ }
+
+ const user = result.user;
+ const expiresAt = Date.now() + 15 * 60 * 1000;
+
+ return {
+ identity: {
+ jwt: result.accessToken,
+ refreshJwt: dataArg.identity.refreshJwt,
+ userId: user.id,
+ email: user.email,
+ username: user.username,
+ displayName: user.displayName,
+ isSystemAdmin: user.isSystemAdmin,
+ expiresAt,
+ sessionId: result.sessionId || dataArg.identity.sessionId,
+ },
+ };
+ } catch (error) {
+ if (error instanceof plugins.typedrequest.TypedResponseError) throw error;
+ throw new plugins.typedrequest.TypedResponseError('Token refresh failed');
+ }
+ },
+ ),
+ );
+
+ // Logout
+ this.typedrouter.addTypedHandler(
+ new plugins.typedrequest.TypedHandler(
+ 'logout',
+ async (dataArg) => {
+ try {
+ if (!dataArg.identity?.jwt) {
+ throw new plugins.typedrequest.TypedResponseError('Identity required');
+ }
+
+ if (dataArg.all) {
+ const count = await this.authService.logoutAll(dataArg.identity.userId);
+ return { message: `Logged out from ${count} sessions` };
+ }
+
+ const sessionId = dataArg.sessionId || dataArg.identity.sessionId;
+ if (sessionId) {
+ await this.authService.logout(sessionId, {
+ userId: dataArg.identity.userId,
+ });
+ }
+
+ return { message: 'Logged out successfully' };
+ } catch (error) {
+ if (error instanceof plugins.typedrequest.TypedResponseError) throw error;
+ throw new plugins.typedrequest.TypedResponseError('Logout failed');
+ }
+ },
+ ),
+ );
+
+ // Get Me
+ this.typedrouter.addTypedHandler(
+ new plugins.typedrequest.TypedHandler(
+ 'getMe',
+ async (dataArg) => {
+ try {
+ if (!dataArg.identity?.jwt) {
+ throw new plugins.typedrequest.TypedResponseError('Identity required');
+ }
+
+ const validated = await this.authService.validateAccessToken(dataArg.identity.jwt);
+ if (!validated) {
+ throw new plugins.typedrequest.TypedResponseError('Invalid or expired token');
+ }
+
+ const user = validated.user;
+ return {
+ user: {
+ id: user.id,
+ email: user.email,
+ username: user.username,
+ displayName: user.displayName,
+ avatarUrl: user.avatarUrl,
+ isSystemAdmin: user.isSystemAdmin,
+ isActive: user.isActive,
+ createdAt: user.createdAt instanceof Date
+ ? user.createdAt.toISOString()
+ : String(user.createdAt),
+ lastLoginAt: user.lastLoginAt instanceof Date
+ ? user.lastLoginAt.toISOString()
+ : user.lastLoginAt
+ ? String(user.lastLoginAt)
+ : undefined,
+ },
+ };
+ } catch (error) {
+ if (error instanceof plugins.typedrequest.TypedResponseError) throw error;
+ throw new plugins.typedrequest.TypedResponseError('Failed to get user info');
+ }
+ },
+ ),
+ );
+
+ // Get Auth Providers (public)
+ this.typedrouter.addTypedHandler(
+ new plugins.typedrequest.TypedHandler(
+ 'getAuthProviders',
+ async (_dataArg) => {
+ try {
+ const settings = await PlatformSettings.get();
+ const providers = await AuthProvider.getActiveProviders();
+
+ return {
+ providers: providers.map((p) => p.toPublicInfo()),
+ localAuthEnabled: settings.auth.localAuthEnabled,
+ defaultProviderId: settings.auth.defaultProviderId,
+ };
+ } catch (error) {
+ if (error instanceof plugins.typedrequest.TypedResponseError) throw error;
+ throw new plugins.typedrequest.TypedResponseError('Failed to get auth providers');
+ }
+ },
+ ),
+ );
+ }
+
+ // Guard for valid identity - validates JWT via AuthService
+ public validIdentityGuard = new plugins.smartguard.Guard<{
+ identity: interfaces.data.IIdentity;
+ }>(
+ async (dataArg) => {
+ if (!dataArg.identity?.jwt) return false;
+ try {
+ const validated = await this.authService.validateAccessToken(dataArg.identity.jwt);
+ if (!validated) return false;
+ // Verify the userId matches the identity claim
+ if (dataArg.identity.userId !== validated.user.id) return false;
+ return true;
+ } catch {
+ return false;
+ }
+ },
+ { failedHint: 'identity is not valid', name: 'validIdentityGuard' },
+ );
+
+ // Guard for admin identity - validates JWT + checks isSystemAdmin
+ public adminIdentityGuard = new plugins.smartguard.Guard<{
+ identity: interfaces.data.IIdentity;
+ }>(
+ async (dataArg) => {
+ const isValid = await this.validIdentityGuard.exec(dataArg);
+ if (!isValid) return false;
+ // Check isSystemAdmin claim from the identity
+ if (!dataArg.identity.isSystemAdmin) return false;
+ // Double-check from database
+ const user = await User.findById(dataArg.identity.userId);
+ if (!user || !user.isSystemAdmin) return false;
+ return true;
+ },
+ { failedHint: 'user is not admin', name: 'adminIdentityGuard' },
+ );
+}
diff --git a/ts/opsserver/handlers/index.ts b/ts/opsserver/handlers/index.ts
new file mode 100644
index 0000000..1b95a00
--- /dev/null
+++ b/ts/opsserver/handlers/index.ts
@@ -0,0 +1,9 @@
+export * from './auth.handler.ts';
+export * from './organization.handler.ts';
+export * from './repository.handler.ts';
+export * from './package.handler.ts';
+export * from './token.handler.ts';
+export * from './audit.handler.ts';
+export * from './admin.handler.ts';
+export * from './oauth.handler.ts';
+export * from './user.handler.ts';
diff --git a/ts/opsserver/handlers/oauth.handler.ts b/ts/opsserver/handlers/oauth.handler.ts
new file mode 100644
index 0000000..448fb0b
--- /dev/null
+++ b/ts/opsserver/handlers/oauth.handler.ts
@@ -0,0 +1,160 @@
+import * as plugins from '../../plugins.ts';
+import * as interfaces from '../../../ts_interfaces/index.ts';
+import type { OpsServer } from '../classes.opsserver.ts';
+import { externalAuthService } from '../../services/external.auth.service.ts';
+
+export class OAuthHandler {
+ public typedrouter = new plugins.typedrequest.TypedRouter();
+
+ constructor(private opsServerRef: OpsServer) {
+ this.opsServerRef.typedrouter.addTypedRouter(this.typedrouter);
+ this.registerHandlers();
+ }
+
+ private registerHandlers(): void {
+ // OAuth Authorize - initiate OAuth flow
+ this.typedrouter.addTypedHandler(
+ new plugins.typedrequest.TypedHandler(
+ 'oauthAuthorize',
+ async (dataArg) => {
+ try {
+ const { providerId, returnUrl } = dataArg;
+
+ const { authUrl } = await externalAuthService.initiateOAuth(providerId, returnUrl);
+
+ return { redirectUrl: authUrl };
+ } catch (error) {
+ if (error instanceof plugins.typedrequest.TypedResponseError) throw error;
+ const errorMessage = error instanceof Error ? error.message : 'Authorization failed';
+ throw new plugins.typedrequest.TypedResponseError(errorMessage);
+ }
+ },
+ ),
+ );
+
+ // OAuth Callback - handle provider callback
+ this.typedrouter.addTypedHandler(
+ new plugins.typedrequest.TypedHandler(
+ 'oauthCallback',
+ async (dataArg) => {
+ try {
+ const { code, state } = dataArg;
+
+ if (!code || !state) {
+ return {
+ errorCode: 'MISSING_PARAMETERS',
+ errorMessage: 'Code and state are required',
+ };
+ }
+
+ const result = await externalAuthService.handleOAuthCallback(
+ { code, state },
+ {},
+ );
+
+ if (!result.success) {
+ return {
+ errorCode: result.errorCode,
+ errorMessage: result.errorMessage,
+ };
+ }
+
+ const user = result.user!;
+ const expiresAt = Date.now() + 15 * 60 * 1000;
+
+ return {
+ identity: {
+ jwt: result.accessToken!,
+ refreshJwt: result.refreshToken!,
+ userId: user.id,
+ email: user.email,
+ username: user.username,
+ displayName: user.displayName,
+ isSystemAdmin: user.isSystemAdmin,
+ expiresAt,
+ sessionId: result.sessionId!,
+ },
+ user: {
+ id: user.id,
+ email: user.email,
+ username: user.username,
+ displayName: user.displayName,
+ avatarUrl: user.avatarUrl,
+ isSystemAdmin: user.isSystemAdmin,
+ isActive: user.isActive,
+ createdAt: user.createdAt instanceof Date ? user.createdAt.toISOString() : String(user.createdAt),
+ lastLoginAt: user.lastLoginAt instanceof Date ? user.lastLoginAt.toISOString() : user.lastLoginAt ? String(user.lastLoginAt) : undefined,
+ },
+ };
+ } catch (error) {
+ if (error instanceof plugins.typedrequest.TypedResponseError) throw error;
+ throw new plugins.typedrequest.TypedResponseError('OAuth callback failed');
+ }
+ },
+ ),
+ );
+
+ // LDAP Login
+ this.typedrouter.addTypedHandler(
+ new plugins.typedrequest.TypedHandler(
+ 'ldapLogin',
+ async (dataArg) => {
+ try {
+ const { providerId, username, password } = dataArg;
+
+ if (!username || !password) {
+ throw new plugins.typedrequest.TypedResponseError(
+ 'Username and password are required',
+ );
+ }
+
+ const result = await externalAuthService.authenticateLdap(
+ providerId,
+ username,
+ password,
+ {},
+ );
+
+ if (!result.success) {
+ return {
+ errorCode: result.errorCode,
+ errorMessage: result.errorMessage,
+ };
+ }
+
+ const user = result.user!;
+ const expiresAt = Date.now() + 15 * 60 * 1000;
+
+ return {
+ identity: {
+ jwt: result.accessToken!,
+ refreshJwt: result.refreshToken!,
+ userId: user.id,
+ email: user.email,
+ username: user.username,
+ displayName: user.displayName,
+ isSystemAdmin: user.isSystemAdmin,
+ expiresAt,
+ sessionId: result.sessionId!,
+ },
+ user: {
+ id: user.id,
+ email: user.email,
+ username: user.username,
+ displayName: user.displayName,
+ avatarUrl: user.avatarUrl,
+ isSystemAdmin: user.isSystemAdmin,
+ isActive: user.isActive,
+ createdAt: user.createdAt instanceof Date ? user.createdAt.toISOString() : String(user.createdAt),
+ lastLoginAt: user.lastLoginAt instanceof Date ? user.lastLoginAt.toISOString() : user.lastLoginAt ? String(user.lastLoginAt) : undefined,
+ },
+ };
+ } catch (error) {
+ if (error instanceof plugins.typedrequest.TypedResponseError) throw error;
+ throw new plugins.typedrequest.TypedResponseError('LDAP login failed');
+ }
+ },
+ ),
+ );
+ }
+}
diff --git a/ts/opsserver/handlers/organization.handler.ts b/ts/opsserver/handlers/organization.handler.ts
new file mode 100644
index 0000000..2c08367
--- /dev/null
+++ b/ts/opsserver/handlers/organization.handler.ts
@@ -0,0 +1,548 @@
+import * as plugins from '../../plugins.ts';
+import * as interfaces from '../../../ts_interfaces/index.ts';
+import type { OpsServer } from '../classes.opsserver.ts';
+import { requireValidIdentity } from '../helpers/guards.ts';
+import { Organization, OrganizationMember, User } from '../../models/index.ts';
+import { PermissionService } from '../../services/permission.service.ts';
+import { AuditService } from '../../services/audit.service.ts';
+
+export class OrganizationHandler {
+ public typedrouter = new plugins.typedrequest.TypedRouter();
+ private permissionService = new PermissionService();
+
+ constructor(private opsServerRef: OpsServer) {
+ this.opsServerRef.typedrouter.addTypedRouter(this.typedrouter);
+ this.registerHandlers();
+ }
+
+ /**
+ * Helper to resolve organization by ID or name
+ */
+ private async resolveOrganization(idOrName: string): Promise {
+ return idOrName.startsWith('Organization:')
+ ? await Organization.findById(idOrName)
+ : await Organization.findByName(idOrName);
+ }
+
+ private registerHandlers(): void {
+ // Get Organizations
+ this.typedrouter.addTypedHandler(
+ new plugins.typedrequest.TypedHandler(
+ 'getOrganizations',
+ async (dataArg) => {
+ await requireValidIdentity(this.opsServerRef.authHandler, dataArg);
+
+ try {
+ const userId = dataArg.identity.userId;
+ let organizations: Organization[];
+
+ if (dataArg.identity.isSystemAdmin) {
+ organizations = await Organization.getInstances({});
+ } else {
+ const memberships = await OrganizationMember.getUserOrganizations(userId);
+ const orgs: Organization[] = [];
+ for (const m of memberships) {
+ const org = await Organization.findById(m.organizationId);
+ if (org) orgs.push(org);
+ }
+ organizations = orgs;
+ }
+
+ return {
+ organizations: organizations.map((org) => ({
+ id: org.id,
+ name: org.name,
+ displayName: org.displayName,
+ description: org.description,
+ avatarUrl: org.avatarUrl,
+ website: org.website,
+ isPublic: org.isPublic,
+ memberCount: org.memberCount,
+ plan: (org as any).plan || 'free',
+ usedStorageBytes: org.usedStorageBytes || 0,
+ storageQuotaBytes: (org as any).storageQuotaBytes || 0,
+ createdAt: org.createdAt instanceof Date
+ ? org.createdAt.toISOString()
+ : String(org.createdAt),
+ })),
+ };
+ } catch (error) {
+ if (error instanceof plugins.typedrequest.TypedResponseError) throw error;
+ throw new plugins.typedrequest.TypedResponseError('Failed to list organizations');
+ }
+ },
+ ),
+ );
+
+ // Get Organization
+ this.typedrouter.addTypedHandler(
+ new plugins.typedrequest.TypedHandler(
+ 'getOrganization',
+ async (dataArg) => {
+ await requireValidIdentity(this.opsServerRef.authHandler, dataArg);
+
+ try {
+ const org = await this.resolveOrganization(dataArg.organizationId);
+ if (!org) {
+ throw new plugins.typedrequest.TypedResponseError('Organization not found');
+ }
+
+ // Check access - public orgs visible to all, private requires membership
+ if (!org.isPublic) {
+ const isMember = await OrganizationMember.findMembership(
+ org.id,
+ dataArg.identity.userId,
+ );
+ if (!isMember && !dataArg.identity.isSystemAdmin) {
+ throw new plugins.typedrequest.TypedResponseError('Access denied');
+ }
+ }
+
+ const orgData: interfaces.data.IOrganizationDetail = {
+ id: org.id,
+ name: org.name,
+ displayName: org.displayName,
+ description: org.description,
+ avatarUrl: org.avatarUrl,
+ website: org.website,
+ isPublic: org.isPublic,
+ memberCount: org.memberCount,
+ plan: (org as any).plan || 'free',
+ usedStorageBytes: org.usedStorageBytes || 0,
+ storageQuotaBytes: (org as any).storageQuotaBytes || 0,
+ createdAt: org.createdAt instanceof Date
+ ? org.createdAt.toISOString()
+ : String(org.createdAt),
+ };
+
+ // Include settings for admins
+ if (dataArg.identity.isSystemAdmin && org.settings) {
+ orgData.settings = org.settings as any;
+ }
+
+ return { organization: orgData };
+ } catch (error) {
+ if (error instanceof plugins.typedrequest.TypedResponseError) throw error;
+ throw new plugins.typedrequest.TypedResponseError('Failed to get organization');
+ }
+ },
+ ),
+ );
+
+ // Create Organization
+ this.typedrouter.addTypedHandler(
+ new plugins.typedrequest.TypedHandler(
+ 'createOrganization',
+ async (dataArg) => {
+ await requireValidIdentity(this.opsServerRef.authHandler, dataArg);
+
+ try {
+ const { name, displayName, description, isPublic } = dataArg;
+
+ if (!name) {
+ throw new plugins.typedrequest.TypedResponseError('Organization name is required');
+ }
+
+ // Validate name format
+ if (!/^[a-z0-9]([a-z0-9.-]*[a-z0-9])?$/.test(name)) {
+ throw new plugins.typedrequest.TypedResponseError(
+ 'Name must be lowercase alphanumeric with optional hyphens and dots',
+ );
+ }
+
+ // Check uniqueness
+ const existing = await Organization.findByName(name);
+ if (existing) {
+ throw new plugins.typedrequest.TypedResponseError('Organization name already taken');
+ }
+
+ // Create organization
+ const org = new Organization();
+ org.id = await Organization.getNewId();
+ org.name = name;
+ org.displayName = displayName || name;
+ org.description = description;
+ org.isPublic = isPublic ?? false;
+ org.memberCount = 1;
+ org.createdAt = new Date();
+ org.createdById = dataArg.identity.userId;
+
+ await org.save();
+
+ // Add creator as owner
+ const membership = new OrganizationMember();
+ membership.id = await OrganizationMember.getNewId();
+ membership.organizationId = org.id;
+ membership.userId = dataArg.identity.userId;
+ membership.role = 'owner';
+ membership.invitedBy = dataArg.identity.userId;
+ membership.joinedAt = new Date();
+
+ await membership.save();
+
+ // Audit log
+ await AuditService.withContext({
+ actorId: dataArg.identity.userId,
+ actorType: 'user',
+ }).logOrganizationCreated(org.id, org.name);
+
+ return {
+ organization: {
+ id: org.id,
+ name: org.name,
+ displayName: org.displayName,
+ description: org.description,
+ isPublic: org.isPublic,
+ memberCount: org.memberCount,
+ plan: (org as any).plan || 'free',
+ usedStorageBytes: org.usedStorageBytes || 0,
+ storageQuotaBytes: (org as any).storageQuotaBytes || 0,
+ createdAt: org.createdAt instanceof Date
+ ? org.createdAt.toISOString()
+ : String(org.createdAt),
+ },
+ };
+ } catch (error) {
+ if (error instanceof plugins.typedrequest.TypedResponseError) throw error;
+ throw new plugins.typedrequest.TypedResponseError('Failed to create organization');
+ }
+ },
+ ),
+ );
+
+ // Update Organization
+ this.typedrouter.addTypedHandler(
+ new plugins.typedrequest.TypedHandler(
+ 'updateOrganization',
+ async (dataArg) => {
+ await requireValidIdentity(this.opsServerRef.authHandler, dataArg);
+
+ try {
+ const org = await this.resolveOrganization(dataArg.organizationId);
+ if (!org) {
+ throw new plugins.typedrequest.TypedResponseError('Organization not found');
+ }
+
+ // Check admin permission
+ const canManage = await this.permissionService.canManageOrganization(
+ dataArg.identity.userId,
+ org.id,
+ );
+ if (!canManage) {
+ throw new plugins.typedrequest.TypedResponseError('Admin access required');
+ }
+
+ if (dataArg.displayName !== undefined) org.displayName = dataArg.displayName;
+ if (dataArg.description !== undefined) org.description = dataArg.description;
+ if (dataArg.avatarUrl !== undefined) org.avatarUrl = dataArg.avatarUrl;
+ if (dataArg.website !== undefined) org.website = dataArg.website;
+ if (dataArg.isPublic !== undefined) org.isPublic = dataArg.isPublic;
+
+ // Only system admins can change settings
+ if (dataArg.settings && dataArg.identity.isSystemAdmin) {
+ org.settings = { ...org.settings, ...dataArg.settings } as any;
+ }
+
+ await org.save();
+
+ return {
+ organization: {
+ id: org.id,
+ name: org.name,
+ displayName: org.displayName,
+ description: org.description,
+ avatarUrl: org.avatarUrl,
+ website: org.website,
+ isPublic: org.isPublic,
+ memberCount: org.memberCount,
+ plan: (org as any).plan || 'free',
+ usedStorageBytes: org.usedStorageBytes || 0,
+ storageQuotaBytes: (org as any).storageQuotaBytes || 0,
+ createdAt: org.createdAt instanceof Date
+ ? org.createdAt.toISOString()
+ : String(org.createdAt),
+ },
+ };
+ } catch (error) {
+ if (error instanceof plugins.typedrequest.TypedResponseError) throw error;
+ throw new plugins.typedrequest.TypedResponseError('Failed to update organization');
+ }
+ },
+ ),
+ );
+
+ // Delete Organization
+ this.typedrouter.addTypedHandler(
+ new plugins.typedrequest.TypedHandler(
+ 'deleteOrganization',
+ async (dataArg) => {
+ await requireValidIdentity(this.opsServerRef.authHandler, dataArg);
+
+ try {
+ const org = await this.resolveOrganization(dataArg.organizationId);
+ if (!org) {
+ throw new plugins.typedrequest.TypedResponseError('Organization not found');
+ }
+
+ // Only owners and system admins can delete
+ const membership = await OrganizationMember.findMembership(
+ org.id,
+ dataArg.identity.userId,
+ );
+ if (membership?.role !== 'owner' && !dataArg.identity.isSystemAdmin) {
+ throw new plugins.typedrequest.TypedResponseError('Owner access required');
+ }
+
+ await org.delete();
+
+ return { message: 'Organization deleted successfully' };
+ } catch (error) {
+ if (error instanceof plugins.typedrequest.TypedResponseError) throw error;
+ throw new plugins.typedrequest.TypedResponseError('Failed to delete organization');
+ }
+ },
+ ),
+ );
+
+ // Get Organization Members
+ this.typedrouter.addTypedHandler(
+ new plugins.typedrequest.TypedHandler(
+ 'getOrganizationMembers',
+ async (dataArg) => {
+ await requireValidIdentity(this.opsServerRef.authHandler, dataArg);
+
+ try {
+ const org = await this.resolveOrganization(dataArg.organizationId);
+ if (!org) {
+ throw new plugins.typedrequest.TypedResponseError('Organization not found');
+ }
+
+ // Check membership
+ const isMember = await OrganizationMember.findMembership(
+ org.id,
+ dataArg.identity.userId,
+ );
+ if (!isMember && !dataArg.identity.isSystemAdmin) {
+ throw new plugins.typedrequest.TypedResponseError('Access denied');
+ }
+
+ const members = await OrganizationMember.getOrgMembers(org.id);
+
+ const membersWithUsers = await Promise.all(
+ members.map(async (m) => {
+ const user = await User.findById(m.userId);
+ return {
+ userId: m.userId,
+ role: m.role as interfaces.data.TOrganizationRole,
+ addedAt: m.joinedAt instanceof Date
+ ? m.joinedAt.toISOString()
+ : String(m.joinedAt),
+ user: user
+ ? {
+ username: user.username,
+ displayName: user.displayName,
+ avatarUrl: user.avatarUrl,
+ }
+ : null,
+ };
+ }),
+ );
+
+ return { members: membersWithUsers };
+ } catch (error) {
+ if (error instanceof plugins.typedrequest.TypedResponseError) throw error;
+ throw new plugins.typedrequest.TypedResponseError('Failed to list members');
+ }
+ },
+ ),
+ );
+
+ // Add Organization Member
+ this.typedrouter.addTypedHandler(
+ new plugins.typedrequest.TypedHandler(
+ 'addOrganizationMember',
+ async (dataArg) => {
+ await requireValidIdentity(this.opsServerRef.authHandler, dataArg);
+
+ try {
+ const org = await this.resolveOrganization(dataArg.organizationId);
+ if (!org) {
+ throw new plugins.typedrequest.TypedResponseError('Organization not found');
+ }
+
+ // Check admin permission
+ const canManage = await this.permissionService.canManageOrganization(
+ dataArg.identity.userId,
+ org.id,
+ );
+ if (!canManage) {
+ throw new plugins.typedrequest.TypedResponseError('Admin access required');
+ }
+
+ const { userId, role } = dataArg;
+
+ if (!userId || !role) {
+ throw new plugins.typedrequest.TypedResponseError('userId and role are required');
+ }
+
+ if (!['owner', 'admin', 'member'].includes(role)) {
+ throw new plugins.typedrequest.TypedResponseError('Invalid role');
+ }
+
+ // Check user exists
+ const user = await User.findById(userId);
+ if (!user) {
+ throw new plugins.typedrequest.TypedResponseError('User not found');
+ }
+
+ // Check if already a member
+ const existing = await OrganizationMember.findMembership(org.id, userId);
+ if (existing) {
+ throw new plugins.typedrequest.TypedResponseError('User is already a member');
+ }
+
+ // Add member
+ const membership = new OrganizationMember();
+ membership.id = await OrganizationMember.getNewId();
+ membership.organizationId = org.id;
+ membership.userId = userId;
+ membership.role = role;
+ membership.invitedBy = dataArg.identity.userId;
+ membership.joinedAt = new Date();
+
+ await membership.save();
+
+ // Update member count
+ org.memberCount += 1;
+ await org.save();
+
+ return {
+ member: {
+ userId: membership.userId,
+ role: membership.role as interfaces.data.TOrganizationRole,
+ addedAt: membership.joinedAt instanceof Date
+ ? membership.joinedAt.toISOString()
+ : String(membership.joinedAt),
+ },
+ };
+ } catch (error) {
+ if (error instanceof plugins.typedrequest.TypedResponseError) throw error;
+ throw new plugins.typedrequest.TypedResponseError('Failed to add member');
+ }
+ },
+ ),
+ );
+
+ // Update Organization Member
+ this.typedrouter.addTypedHandler(
+ new plugins.typedrequest.TypedHandler(
+ 'updateOrganizationMember',
+ async (dataArg) => {
+ await requireValidIdentity(this.opsServerRef.authHandler, dataArg);
+
+ try {
+ const org = await this.resolveOrganization(dataArg.organizationId);
+ if (!org) {
+ throw new plugins.typedrequest.TypedResponseError('Organization not found');
+ }
+
+ // Check admin permission
+ const canManage = await this.permissionService.canManageOrganization(
+ dataArg.identity.userId,
+ org.id,
+ );
+ if (!canManage) {
+ throw new plugins.typedrequest.TypedResponseError('Admin access required');
+ }
+
+ const { userId, role } = dataArg;
+
+ if (!role || !['owner', 'admin', 'member'].includes(role)) {
+ throw new plugins.typedrequest.TypedResponseError('Valid role is required');
+ }
+
+ const membership = await OrganizationMember.findMembership(org.id, userId);
+ if (!membership) {
+ throw new plugins.typedrequest.TypedResponseError('Member not found');
+ }
+
+ // Cannot change last owner
+ if (membership.role === 'owner' && role !== 'owner') {
+ const members = await OrganizationMember.getOrgMembers(org.id);
+ const ownerCount = members.filter((m) => m.role === 'owner').length;
+ if (ownerCount <= 1) {
+ throw new plugins.typedrequest.TypedResponseError('Cannot remove the last owner');
+ }
+ }
+
+ membership.role = role;
+ await membership.save();
+
+ return {
+ member: {
+ userId: membership.userId,
+ role: membership.role as interfaces.data.TOrganizationRole,
+ },
+ };
+ } catch (error) {
+ if (error instanceof plugins.typedrequest.TypedResponseError) throw error;
+ throw new plugins.typedrequest.TypedResponseError('Failed to update member');
+ }
+ },
+ ),
+ );
+
+ // Remove Organization Member
+ this.typedrouter.addTypedHandler(
+ new plugins.typedrequest.TypedHandler(
+ 'removeOrganizationMember',
+ async (dataArg) => {
+ await requireValidIdentity(this.opsServerRef.authHandler, dataArg);
+
+ try {
+ const org = await this.resolveOrganization(dataArg.organizationId);
+ if (!org) {
+ throw new plugins.typedrequest.TypedResponseError('Organization not found');
+ }
+
+ // Users can remove themselves, admins can remove others
+ if (dataArg.userId !== dataArg.identity.userId) {
+ const canManage = await this.permissionService.canManageOrganization(
+ dataArg.identity.userId,
+ org.id,
+ );
+ if (!canManage) {
+ throw new plugins.typedrequest.TypedResponseError('Admin access required');
+ }
+ }
+
+ const membership = await OrganizationMember.findMembership(org.id, dataArg.userId);
+ if (!membership) {
+ throw new plugins.typedrequest.TypedResponseError('Member not found');
+ }
+
+ // Cannot remove last owner
+ if (membership.role === 'owner') {
+ const members = await OrganizationMember.getOrgMembers(org.id);
+ const ownerCount = members.filter((m) => m.role === 'owner').length;
+ if (ownerCount <= 1) {
+ throw new plugins.typedrequest.TypedResponseError('Cannot remove the last owner');
+ }
+ }
+
+ await membership.delete();
+
+ // Update member count
+ org.memberCount = Math.max(0, org.memberCount - 1);
+ await org.save();
+
+ return { message: 'Member removed successfully' };
+ } catch (error) {
+ if (error instanceof plugins.typedrequest.TypedResponseError) throw error;
+ throw new plugins.typedrequest.TypedResponseError('Failed to remove member');
+ }
+ },
+ ),
+ );
+ }
+}
diff --git a/ts/opsserver/handlers/package.handler.ts b/ts/opsserver/handlers/package.handler.ts
new file mode 100644
index 0000000..ce3404b
--- /dev/null
+++ b/ts/opsserver/handlers/package.handler.ts
@@ -0,0 +1,315 @@
+import * as plugins from '../../plugins.ts';
+import * as interfaces from '../../../ts_interfaces/index.ts';
+import type { OpsServer } from '../classes.opsserver.ts';
+import { requireValidIdentity } from '../helpers/guards.ts';
+import { Package, Repository } from '../../models/index.ts';
+import { PermissionService } from '../../services/permission.service.ts';
+
+export class PackageHandler {
+ public typedrouter = new plugins.typedrequest.TypedRouter();
+ private permissionService = new PermissionService();
+
+ constructor(private opsServerRef: OpsServer) {
+ this.opsServerRef.typedrouter.addTypedRouter(this.typedrouter);
+ this.registerHandlers();
+ }
+
+ private registerHandlers(): void {
+ // Search Packages
+ this.typedrouter.addTypedHandler(
+ new plugins.typedrequest.TypedHandler(
+ 'searchPackages',
+ async (dataArg) => {
+ try {
+ const query = dataArg.query || '';
+ const protocol = dataArg.protocol;
+ const organizationId = dataArg.organizationId;
+ const limit = dataArg.limit || 50;
+ const offset = dataArg.offset || 0;
+
+ // Determine visibility: anonymous users see only public packages
+ const hasIdentity = !!dataArg.identity?.jwt;
+ const isPrivate = hasIdentity ? undefined : false;
+
+ const packages = await Package.searchPackages(query, {
+ protocol,
+ organizationId,
+ isPrivate,
+ limit,
+ offset,
+ });
+
+ // Filter out packages user doesn't have access to
+ const accessiblePackages: typeof packages = [];
+ for (const pkg of packages) {
+ if (!pkg.isPrivate) {
+ accessiblePackages.push(pkg);
+ continue;
+ }
+
+ if (hasIdentity && dataArg.identity) {
+ const canAccess = await this.permissionService.canAccessPackage(
+ dataArg.identity.userId,
+ pkg.organizationId,
+ pkg.repositoryId,
+ 'read',
+ );
+ if (canAccess) {
+ accessiblePackages.push(pkg);
+ }
+ }
+ }
+
+ return {
+ packages: accessiblePackages.map((pkg) => ({
+ id: pkg.id,
+ name: pkg.name,
+ description: pkg.description,
+ protocol: pkg.protocol as interfaces.data.TRegistryProtocol,
+ organizationId: pkg.organizationId,
+ repositoryId: pkg.repositoryId,
+ latestVersion: pkg.distTags?.['latest'],
+ isPrivate: pkg.isPrivate,
+ downloadCount: pkg.downloadCount || 0,
+ starCount: pkg.starCount || 0,
+ storageBytes: pkg.storageBytes || 0,
+ updatedAt: pkg.updatedAt instanceof Date ? pkg.updatedAt.toISOString() : String(pkg.updatedAt),
+ createdAt: pkg.createdAt instanceof Date ? pkg.createdAt.toISOString() : String(pkg.createdAt),
+ })),
+ total: accessiblePackages.length,
+ limit,
+ offset,
+ };
+ } catch (error) {
+ if (error instanceof plugins.typedrequest.TypedResponseError) throw error;
+ throw new plugins.typedrequest.TypedResponseError('Failed to search packages');
+ }
+ },
+ ),
+ );
+
+ // Get Package
+ this.typedrouter.addTypedHandler(
+ new plugins.typedrequest.TypedHandler(
+ 'getPackage',
+ async (dataArg) => {
+ try {
+ const pkg = await Package.findById(dataArg.packageId);
+ if (!pkg) {
+ throw new plugins.typedrequest.TypedResponseError('Package not found');
+ }
+
+ // Check access for private packages
+ if (pkg.isPrivate) {
+ if (!dataArg.identity?.jwt) {
+ throw new plugins.typedrequest.TypedResponseError('Authentication required');
+ }
+
+ const canAccess = await this.permissionService.canAccessPackage(
+ dataArg.identity.userId,
+ pkg.organizationId,
+ pkg.repositoryId,
+ 'read',
+ );
+
+ if (!canAccess) {
+ throw new plugins.typedrequest.TypedResponseError('Access denied');
+ }
+ }
+
+ return {
+ package: {
+ id: pkg.id,
+ name: pkg.name,
+ description: pkg.description,
+ protocol: pkg.protocol as interfaces.data.TRegistryProtocol,
+ organizationId: pkg.organizationId,
+ repositoryId: pkg.repositoryId,
+ latestVersion: pkg.distTags?.['latest'],
+ isPrivate: pkg.isPrivate,
+ downloadCount: pkg.downloadCount || 0,
+ starCount: pkg.starCount || 0,
+ storageBytes: pkg.storageBytes || 0,
+ distTags: pkg.distTags || {},
+ versions: Object.keys(pkg.versions || {}),
+ updatedAt: pkg.updatedAt instanceof Date ? pkg.updatedAt.toISOString() : String(pkg.updatedAt),
+ createdAt: pkg.createdAt instanceof Date ? pkg.createdAt.toISOString() : String(pkg.createdAt),
+ },
+ };
+ } catch (error) {
+ if (error instanceof plugins.typedrequest.TypedResponseError) throw error;
+ throw new plugins.typedrequest.TypedResponseError('Failed to get package');
+ }
+ },
+ ),
+ );
+
+ // Get Package Versions
+ this.typedrouter.addTypedHandler(
+ new plugins.typedrequest.TypedHandler(
+ 'getPackageVersions',
+ async (dataArg) => {
+ try {
+ const pkg = await Package.findById(dataArg.packageId);
+ if (!pkg) {
+ throw new plugins.typedrequest.TypedResponseError('Package not found');
+ }
+
+ // Check access for private packages
+ if (pkg.isPrivate) {
+ if (!dataArg.identity?.jwt) {
+ throw new plugins.typedrequest.TypedResponseError('Authentication required');
+ }
+
+ const canAccess = await this.permissionService.canAccessPackage(
+ dataArg.identity.userId,
+ pkg.organizationId,
+ pkg.repositoryId,
+ 'read',
+ );
+
+ if (!canAccess) {
+ throw new plugins.typedrequest.TypedResponseError('Access denied');
+ }
+ }
+
+ const versions = Object.entries(pkg.versions || {}).map(([version, data]) => ({
+ version,
+ publishedAt: data.publishedAt instanceof Date ? data.publishedAt.toISOString() : String(data.publishedAt || ''),
+ size: data.size || 0,
+ downloads: data.downloads || 0,
+ checksum: data.metadata?.checksum as interfaces.data.IPackageVersion['checksum'],
+ }));
+
+ return {
+ packageId: pkg.id,
+ packageName: pkg.name,
+ distTags: pkg.distTags || {},
+ versions,
+ };
+ } catch (error) {
+ if (error instanceof plugins.typedrequest.TypedResponseError) throw error;
+ throw new plugins.typedrequest.TypedResponseError('Failed to list versions');
+ }
+ },
+ ),
+ );
+
+ // Delete Package
+ this.typedrouter.addTypedHandler(
+ new plugins.typedrequest.TypedHandler(
+ 'deletePackage',
+ async (dataArg) => {
+ await requireValidIdentity(this.opsServerRef.authHandler, dataArg);
+
+ try {
+ const pkg = await Package.findById(dataArg.packageId);
+ if (!pkg) {
+ throw new plugins.typedrequest.TypedResponseError('Package not found');
+ }
+
+ // Check delete permission
+ const canDelete = await this.permissionService.canAccessPackage(
+ dataArg.identity.userId,
+ pkg.organizationId,
+ pkg.repositoryId,
+ 'delete',
+ );
+
+ if (!canDelete) {
+ throw new plugins.typedrequest.TypedResponseError('Delete permission required');
+ }
+
+ // Update repository counts before deleting
+ const repo = await Repository.findById(pkg.repositoryId);
+ if (repo) {
+ repo.packageCount = Math.max(0, repo.packageCount - 1);
+ repo.storageBytes -= pkg.storageBytes;
+ await repo.save();
+ }
+
+ await pkg.delete();
+
+ return { message: 'Package deleted successfully' };
+ } catch (error) {
+ if (error instanceof plugins.typedrequest.TypedResponseError) throw error;
+ throw new plugins.typedrequest.TypedResponseError('Failed to delete package');
+ }
+ },
+ ),
+ );
+
+ // Delete Package Version
+ this.typedrouter.addTypedHandler(
+ new plugins.typedrequest.TypedHandler(
+ 'deletePackageVersion',
+ async (dataArg) => {
+ await requireValidIdentity(this.opsServerRef.authHandler, dataArg);
+
+ try {
+ const pkg = await Package.findById(dataArg.packageId);
+ if (!pkg) {
+ throw new plugins.typedrequest.TypedResponseError('Package not found');
+ }
+
+ const versionData = pkg.versions?.[dataArg.version];
+ if (!versionData) {
+ throw new plugins.typedrequest.TypedResponseError('Version not found');
+ }
+
+ // Check delete permission
+ const canDelete = await this.permissionService.canAccessPackage(
+ dataArg.identity.userId,
+ pkg.organizationId,
+ pkg.repositoryId,
+ 'delete',
+ );
+
+ if (!canDelete) {
+ throw new plugins.typedrequest.TypedResponseError('Delete permission required');
+ }
+
+ // Check if this is the only version
+ if (Object.keys(pkg.versions).length === 1) {
+ throw new plugins.typedrequest.TypedResponseError(
+ 'Cannot delete the only version. Delete the entire package instead.',
+ );
+ }
+
+ // Remove version
+ const sizeReduction = versionData.size || 0;
+ delete pkg.versions[dataArg.version];
+ pkg.storageBytes -= sizeReduction;
+
+ // Update dist tags
+ for (const [tag, tagVersion] of Object.entries(pkg.distTags || {})) {
+ if (tagVersion === dataArg.version) {
+ delete pkg.distTags[tag];
+ }
+ }
+
+ // Set new latest if needed
+ if (!pkg.distTags['latest'] && Object.keys(pkg.versions).length > 0) {
+ const versions = Object.keys(pkg.versions).sort();
+ pkg.distTags['latest'] = versions[versions.length - 1];
+ }
+
+ await pkg.save();
+
+ // Update repository storage
+ const repo = await Repository.findById(pkg.repositoryId);
+ if (repo) {
+ repo.storageBytes -= sizeReduction;
+ await repo.save();
+ }
+
+ return { message: 'Version deleted successfully' };
+ } catch (error) {
+ if (error instanceof plugins.typedrequest.TypedResponseError) throw error;
+ throw new plugins.typedrequest.TypedResponseError('Failed to delete version');
+ }
+ },
+ ),
+ );
+ }
+}
diff --git a/ts/opsserver/handlers/repository.handler.ts b/ts/opsserver/handlers/repository.handler.ts
new file mode 100644
index 0000000..8407951
--- /dev/null
+++ b/ts/opsserver/handlers/repository.handler.ts
@@ -0,0 +1,272 @@
+import * as plugins from '../../plugins.ts';
+import * as interfaces from '../../../ts_interfaces/index.ts';
+import type { OpsServer } from '../classes.opsserver.ts';
+import { requireValidIdentity } from '../helpers/guards.ts';
+import { Organization, Repository } from '../../models/index.ts';
+import { PermissionService } from '../../services/permission.service.ts';
+import { AuditService } from '../../services/audit.service.ts';
+
+export class RepositoryHandler {
+ public typedrouter = new plugins.typedrequest.TypedRouter();
+ private permissionService = new PermissionService();
+
+ constructor(private opsServerRef: OpsServer) {
+ this.opsServerRef.typedrouter.addTypedRouter(this.typedrouter);
+ this.registerHandlers();
+ }
+
+ private registerHandlers(): void {
+ // Get Repositories
+ this.typedrouter.addTypedHandler(
+ new plugins.typedrequest.TypedHandler(
+ 'getRepositories',
+ async (dataArg) => {
+ await requireValidIdentity(this.opsServerRef.authHandler, dataArg);
+
+ try {
+ const repositories = await this.permissionService.getAccessibleRepositories(
+ dataArg.identity.userId,
+ dataArg.organizationId,
+ );
+
+ return {
+ repositories: repositories.map((repo) => ({
+ id: repo.id,
+ organizationId: repo.organizationId,
+ name: repo.name,
+ description: repo.description,
+ protocol: repo.protocol as interfaces.data.TRegistryProtocol,
+ visibility: repo.visibility as interfaces.data.TRepositoryVisibility,
+ isPublic: repo.isPublic,
+ packageCount: repo.packageCount,
+ storageBytes: repo.storageBytes || 0,
+ downloadCount: (repo as any).downloadCount || 0,
+ createdAt: repo.createdAt instanceof Date ? repo.createdAt.toISOString() : String(repo.createdAt),
+ })),
+ };
+ } catch (error) {
+ if (error instanceof plugins.typedrequest.TypedResponseError) throw error;
+ throw new plugins.typedrequest.TypedResponseError('Failed to list repositories');
+ }
+ },
+ ),
+ );
+
+ // Get Repository
+ this.typedrouter.addTypedHandler(
+ new plugins.typedrequest.TypedHandler(
+ 'getRepository',
+ async (dataArg) => {
+ await requireValidIdentity(this.opsServerRef.authHandler, dataArg);
+
+ try {
+ const repo = await Repository.findById(dataArg.repositoryId);
+ if (!repo) {
+ throw new plugins.typedrequest.TypedResponseError('Repository not found');
+ }
+
+ // Check access
+ if (!repo.isPublic) {
+ const permissions = await this.permissionService.resolvePermissions({
+ userId: dataArg.identity.userId,
+ organizationId: repo.organizationId,
+ repositoryId: repo.id,
+ });
+
+ if (!permissions.canRead) {
+ throw new plugins.typedrequest.TypedResponseError('Access denied');
+ }
+ }
+
+ return {
+ repository: {
+ id: repo.id,
+ organizationId: repo.organizationId,
+ name: repo.name,
+ description: repo.description,
+ protocol: repo.protocol as interfaces.data.TRegistryProtocol,
+ visibility: repo.visibility as interfaces.data.TRepositoryVisibility,
+ isPublic: repo.isPublic,
+ packageCount: repo.packageCount,
+ storageBytes: repo.storageBytes || 0,
+ downloadCount: (repo as any).downloadCount || 0,
+ createdAt: repo.createdAt instanceof Date ? repo.createdAt.toISOString() : String(repo.createdAt),
+ },
+ };
+ } catch (error) {
+ if (error instanceof plugins.typedrequest.TypedResponseError) throw error;
+ throw new plugins.typedrequest.TypedResponseError('Failed to get repository');
+ }
+ },
+ ),
+ );
+
+ // Create Repository
+ this.typedrouter.addTypedHandler(
+ new plugins.typedrequest.TypedHandler(
+ 'createRepository',
+ async (dataArg) => {
+ await requireValidIdentity(this.opsServerRef.authHandler, dataArg);
+
+ try {
+ const { organizationId, name, description, protocol, visibility } = dataArg;
+
+ // Check admin permission
+ const canManage = await this.permissionService.canManageOrganization(
+ dataArg.identity.userId,
+ organizationId,
+ );
+ if (!canManage) {
+ throw new plugins.typedrequest.TypedResponseError('Admin access required');
+ }
+
+ if (!name) {
+ throw new plugins.typedrequest.TypedResponseError('Repository name is required');
+ }
+
+ // Validate name format
+ if (!/^[a-z0-9]([a-z0-9._-]*[a-z0-9])?$/.test(name)) {
+ throw new plugins.typedrequest.TypedResponseError(
+ 'Name must be lowercase alphanumeric with optional dots, hyphens, or underscores',
+ );
+ }
+
+ // Check org exists
+ const org = await Organization.findById(organizationId);
+ if (!org) {
+ throw new plugins.typedrequest.TypedResponseError('Organization not found');
+ }
+
+ // Create repository
+ const repo = await Repository.createRepository({
+ organizationId,
+ name,
+ description,
+ protocol: protocol || 'npm',
+ visibility: visibility || 'private',
+ createdById: dataArg.identity.userId,
+ });
+
+ // Audit log
+ await AuditService.withContext({
+ actorId: dataArg.identity.userId,
+ actorType: 'user',
+ organizationId,
+ }).logRepositoryCreated(repo.id, repo.name, organizationId);
+
+ return {
+ repository: {
+ id: repo.id,
+ organizationId: repo.organizationId,
+ name: repo.name,
+ description: repo.description,
+ protocol: repo.protocol as interfaces.data.TRegistryProtocol,
+ visibility: repo.visibility as interfaces.data.TRepositoryVisibility,
+ isPublic: repo.isPublic,
+ packageCount: repo.packageCount,
+ storageBytes: repo.storageBytes || 0,
+ downloadCount: 0,
+ createdAt: repo.createdAt instanceof Date ? repo.createdAt.toISOString() : String(repo.createdAt),
+ },
+ };
+ } catch (error) {
+ if (error instanceof plugins.typedrequest.TypedResponseError) throw error;
+ throw new plugins.typedrequest.TypedResponseError('Failed to create repository');
+ }
+ },
+ ),
+ );
+
+ // Update Repository
+ this.typedrouter.addTypedHandler(
+ new plugins.typedrequest.TypedHandler(
+ 'updateRepository',
+ async (dataArg) => {
+ await requireValidIdentity(this.opsServerRef.authHandler, dataArg);
+
+ try {
+ const repo = await Repository.findById(dataArg.repositoryId);
+ if (!repo) {
+ throw new plugins.typedrequest.TypedResponseError('Repository not found');
+ }
+
+ // Check admin permission
+ const canManage = await this.permissionService.canManageRepository(
+ dataArg.identity.userId,
+ repo.organizationId,
+ dataArg.repositoryId,
+ );
+ if (!canManage) {
+ throw new plugins.typedrequest.TypedResponseError('Admin access required');
+ }
+
+ if (dataArg.description !== undefined) repo.description = dataArg.description;
+ if (dataArg.visibility !== undefined) repo.visibility = dataArg.visibility as any;
+
+ await repo.save();
+
+ return {
+ repository: {
+ id: repo.id,
+ organizationId: repo.organizationId,
+ name: repo.name,
+ description: repo.description,
+ protocol: repo.protocol as interfaces.data.TRegistryProtocol,
+ visibility: repo.visibility as interfaces.data.TRepositoryVisibility,
+ isPublic: repo.isPublic,
+ packageCount: repo.packageCount,
+ storageBytes: repo.storageBytes || 0,
+ downloadCount: (repo as any).downloadCount || 0,
+ createdAt: repo.createdAt instanceof Date ? repo.createdAt.toISOString() : String(repo.createdAt),
+ },
+ };
+ } catch (error) {
+ if (error instanceof plugins.typedrequest.TypedResponseError) throw error;
+ throw new plugins.typedrequest.TypedResponseError('Failed to update repository');
+ }
+ },
+ ),
+ );
+
+ // Delete Repository
+ this.typedrouter.addTypedHandler(
+ new plugins.typedrequest.TypedHandler(
+ 'deleteRepository',
+ async (dataArg) => {
+ await requireValidIdentity(this.opsServerRef.authHandler, dataArg);
+
+ try {
+ const repo = await Repository.findById(dataArg.repositoryId);
+ if (!repo) {
+ throw new plugins.typedrequest.TypedResponseError('Repository not found');
+ }
+
+ // Check admin permission
+ const canManage = await this.permissionService.canManageRepository(
+ dataArg.identity.userId,
+ repo.organizationId,
+ dataArg.repositoryId,
+ );
+ if (!canManage) {
+ throw new plugins.typedrequest.TypedResponseError('Admin access required');
+ }
+
+ // Check for packages
+ if (repo.packageCount > 0) {
+ throw new plugins.typedrequest.TypedResponseError(
+ 'Cannot delete repository with packages. Remove all packages first.',
+ );
+ }
+
+ await repo.delete();
+
+ return { message: 'Repository deleted successfully' };
+ } catch (error) {
+ if (error instanceof plugins.typedrequest.TypedResponseError) throw error;
+ throw new plugins.typedrequest.TypedResponseError('Failed to delete repository');
+ }
+ },
+ ),
+ );
+ }
+}
diff --git a/ts/opsserver/handlers/token.handler.ts b/ts/opsserver/handlers/token.handler.ts
new file mode 100644
index 0000000..a1d0a4c
--- /dev/null
+++ b/ts/opsserver/handlers/token.handler.ts
@@ -0,0 +1,198 @@
+import * as plugins from '../../plugins.ts';
+import * as interfaces from '../../../ts_interfaces/index.ts';
+import type { OpsServer } from '../classes.opsserver.ts';
+import { requireValidIdentity } from '../helpers/guards.ts';
+import { ApiToken } from '../../models/index.ts';
+import { TokenService } from '../../services/token.service.ts';
+import { PermissionService } from '../../services/permission.service.ts';
+
+export class TokenHandler {
+ public typedrouter = new plugins.typedrequest.TypedRouter();
+ private tokenService = new TokenService();
+ private permissionService = new PermissionService();
+
+ constructor(private opsServerRef: OpsServer) {
+ this.opsServerRef.typedrouter.addTypedRouter(this.typedrouter);
+ this.registerHandlers();
+ }
+
+ private registerHandlers(): void {
+ // Get Tokens
+ this.typedrouter.addTypedHandler(
+ new plugins.typedrequest.TypedHandler(
+ 'getTokens',
+ async (dataArg) => {
+ await requireValidIdentity(this.opsServerRef.authHandler, dataArg);
+
+ try {
+ let tokens;
+ if (dataArg.organizationId) {
+ // Check if user can manage org
+ const canManage = await this.permissionService.canManageOrganization(
+ dataArg.identity.userId,
+ dataArg.organizationId,
+ );
+ if (!canManage) {
+ throw new plugins.typedrequest.TypedResponseError(
+ 'Not authorized to view organization tokens',
+ );
+ }
+ tokens = await this.tokenService.getOrgTokens(dataArg.organizationId);
+ } else {
+ tokens = await this.tokenService.getUserTokens(dataArg.identity.userId);
+ }
+
+ return {
+ tokens: tokens.map((t) => ({
+ id: t.id,
+ name: t.name,
+ tokenPrefix: t.tokenPrefix,
+ protocols: t.protocols as interfaces.data.TRegistryProtocol[],
+ scopes: t.scopes as interfaces.data.ITokenScope[],
+ organizationId: t.organizationId,
+ createdById: t.createdById,
+ expiresAt: t.expiresAt instanceof Date ? t.expiresAt.toISOString() : t.expiresAt ? String(t.expiresAt) : undefined,
+ lastUsedAt: t.lastUsedAt instanceof Date ? t.lastUsedAt.toISOString() : t.lastUsedAt ? String(t.lastUsedAt) : undefined,
+ usageCount: t.usageCount,
+ createdAt: t.createdAt instanceof Date ? t.createdAt.toISOString() : String(t.createdAt),
+ })),
+ };
+ } catch (error) {
+ if (error instanceof plugins.typedrequest.TypedResponseError) throw error;
+ throw new plugins.typedrequest.TypedResponseError('Failed to list tokens');
+ }
+ },
+ ),
+ );
+
+ // Create Token
+ this.typedrouter.addTypedHandler(
+ new plugins.typedrequest.TypedHandler(
+ 'createToken',
+ async (dataArg) => {
+ await requireValidIdentity(this.opsServerRef.authHandler, dataArg);
+
+ try {
+ const { name, organizationId, protocols, scopes, expiresInDays } = dataArg;
+
+ if (!name) {
+ throw new plugins.typedrequest.TypedResponseError('Token name is required');
+ }
+
+ if (!protocols || protocols.length === 0) {
+ throw new plugins.typedrequest.TypedResponseError('At least one protocol is required');
+ }
+
+ if (!scopes || scopes.length === 0) {
+ throw new plugins.typedrequest.TypedResponseError('At least one scope is required');
+ }
+
+ // Validate protocols
+ const validProtocols = ['npm', 'oci', 'maven', 'cargo', 'composer', 'pypi', 'rubygems', '*'];
+ for (const protocol of protocols) {
+ if (!validProtocols.includes(protocol)) {
+ throw new plugins.typedrequest.TypedResponseError(`Invalid protocol: ${protocol}`);
+ }
+ }
+
+ // Validate scopes
+ for (const scope of scopes) {
+ if (!scope.protocol || !scope.actions || scope.actions.length === 0) {
+ throw new plugins.typedrequest.TypedResponseError('Invalid scope configuration');
+ }
+ }
+
+ // If creating org token, verify permission
+ if (organizationId) {
+ const canManage = await this.permissionService.canManageOrganization(
+ dataArg.identity.userId,
+ organizationId,
+ );
+ if (!canManage) {
+ throw new plugins.typedrequest.TypedResponseError(
+ 'Not authorized to create organization tokens',
+ );
+ }
+ }
+
+ const result = await this.tokenService.createToken({
+ userId: dataArg.identity.userId,
+ organizationId,
+ createdById: dataArg.identity.userId,
+ name,
+ protocols: protocols as any[],
+ scopes: scopes as any[],
+ expiresInDays,
+ });
+
+ return {
+ token: {
+ id: result.token.id,
+ name: result.token.name,
+ token: result.rawToken,
+ tokenPrefix: result.token.tokenPrefix,
+ protocols: result.token.protocols as interfaces.data.TRegistryProtocol[],
+ scopes: result.token.scopes as interfaces.data.ITokenScope[],
+ organizationId: result.token.organizationId,
+ createdById: result.token.createdById,
+ expiresAt: result.token.expiresAt instanceof Date ? result.token.expiresAt.toISOString() : result.token.expiresAt ? String(result.token.expiresAt) : undefined,
+ usageCount: result.token.usageCount,
+ createdAt: result.token.createdAt instanceof Date ? result.token.createdAt.toISOString() : String(result.token.createdAt),
+ warning: 'Store this token securely. It will not be shown again.',
+ },
+ };
+ } catch (error) {
+ if (error instanceof plugins.typedrequest.TypedResponseError) throw error;
+ throw new plugins.typedrequest.TypedResponseError('Failed to create token');
+ }
+ },
+ ),
+ );
+
+ // Revoke Token
+ this.typedrouter.addTypedHandler(
+ new plugins.typedrequest.TypedHandler(
+ 'revokeToken',
+ async (dataArg) => {
+ await requireValidIdentity(this.opsServerRef.authHandler, dataArg);
+
+ try {
+ const { tokenId } = dataArg;
+
+ // Check if it's a personal token
+ const userTokens = await this.tokenService.getUserTokens(dataArg.identity.userId);
+ let token = userTokens.find((t) => t.id === tokenId);
+
+ if (!token) {
+ // Check if it's an org token the user can manage
+ const anyToken = await ApiToken.getInstance({ id: tokenId, isRevoked: false });
+ if (anyToken?.organizationId) {
+ const canManage = await this.permissionService.canManageOrganization(
+ dataArg.identity.userId,
+ anyToken.organizationId,
+ );
+ if (canManage) {
+ token = anyToken;
+ }
+ }
+ }
+
+ if (!token) {
+ throw new plugins.typedrequest.TypedResponseError('Token not found');
+ }
+
+ const success = await this.tokenService.revokeToken(tokenId, 'user_revoked');
+ if (!success) {
+ throw new plugins.typedrequest.TypedResponseError('Failed to revoke token');
+ }
+
+ return { message: 'Token revoked successfully' };
+ } catch (error) {
+ if (error instanceof plugins.typedrequest.TypedResponseError) throw error;
+ throw new plugins.typedrequest.TypedResponseError('Failed to revoke token');
+ }
+ },
+ ),
+ );
+ }
+}
diff --git a/ts/opsserver/handlers/user.handler.ts b/ts/opsserver/handlers/user.handler.ts
new file mode 100644
index 0000000..e2a5282
--- /dev/null
+++ b/ts/opsserver/handlers/user.handler.ts
@@ -0,0 +1,263 @@
+import * as plugins from '../../plugins.ts';
+import * as interfaces from '../../../ts_interfaces/index.ts';
+import type { OpsServer } from '../classes.opsserver.ts';
+import { requireValidIdentity, requireAdminIdentity } from '../helpers/guards.ts';
+import { User } from '../../models/user.ts';
+import { Session } from '../../models/session.ts';
+import { AuthService } from '../../services/auth.service.ts';
+
+export class UserHandler {
+ public typedrouter = new plugins.typedrequest.TypedRouter();
+ private authService = new AuthService();
+
+ constructor(private opsServerRef: OpsServer) {
+ this.opsServerRef.typedrouter.addTypedRouter(this.typedrouter);
+ this.registerHandlers();
+ }
+
+ /**
+ * Helper to format user to IUser interface
+ */
+ private formatUser(user: User): interfaces.data.IUser {
+ return {
+ id: user.id,
+ email: user.email,
+ username: user.username,
+ displayName: user.displayName,
+ avatarUrl: user.avatarUrl,
+ isSystemAdmin: user.isSystemAdmin,
+ isActive: user.isActive,
+ createdAt: user.createdAt instanceof Date ? user.createdAt.toISOString() : String(user.createdAt),
+ lastLoginAt: user.lastLoginAt instanceof Date ? user.lastLoginAt.toISOString() : user.lastLoginAt ? String(user.lastLoginAt) : undefined,
+ };
+ }
+
+ private registerHandlers(): void {
+ // Get Users (admin only)
+ this.typedrouter.addTypedHandler(
+ new plugins.typedrequest.TypedHandler(
+ 'getUsers',
+ async (dataArg) => {
+ await requireAdminIdentity(this.opsServerRef.authHandler, dataArg);
+
+ try {
+ const users = await User.getInstances({});
+ return {
+ users: users.map((u) => this.formatUser(u)),
+ };
+ } catch (error) {
+ if (error instanceof plugins.typedrequest.TypedResponseError) throw error;
+ throw new plugins.typedrequest.TypedResponseError('Failed to list users');
+ }
+ },
+ ),
+ );
+
+ // Get User
+ this.typedrouter.addTypedHandler(
+ new plugins.typedrequest.TypedHandler(
+ 'getUser',
+ async (dataArg) => {
+ await requireValidIdentity(this.opsServerRef.authHandler, dataArg);
+
+ try {
+ const { userId } = dataArg;
+
+ // Users can view their own profile, admins can view any
+ if (userId !== dataArg.identity.userId && !dataArg.identity.isSystemAdmin) {
+ throw new plugins.typedrequest.TypedResponseError('Access denied');
+ }
+
+ const user = await User.findById(userId);
+ if (!user) {
+ throw new plugins.typedrequest.TypedResponseError('User not found');
+ }
+
+ return { user: this.formatUser(user) };
+ } catch (error) {
+ if (error instanceof plugins.typedrequest.TypedResponseError) throw error;
+ throw new plugins.typedrequest.TypedResponseError('Failed to get user');
+ }
+ },
+ ),
+ );
+
+ // Update User
+ this.typedrouter.addTypedHandler(
+ new plugins.typedrequest.TypedHandler(
+ 'updateUser',
+ async (dataArg) => {
+ await requireValidIdentity(this.opsServerRef.authHandler, dataArg);
+
+ try {
+ const { userId, displayName, avatarUrl, password, isActive, isSystemAdmin } = dataArg;
+
+ // Users can update their own profile, admins can update any
+ if (userId !== dataArg.identity.userId && !dataArg.identity.isSystemAdmin) {
+ throw new plugins.typedrequest.TypedResponseError('Access denied');
+ }
+
+ const user = await User.findById(userId);
+ if (!user) {
+ throw new plugins.typedrequest.TypedResponseError('User not found');
+ }
+
+ if (displayName !== undefined) user.displayName = displayName;
+ if (avatarUrl !== undefined) user.avatarUrl = avatarUrl;
+
+ // Only admins can change these
+ if (dataArg.identity.isSystemAdmin) {
+ if (isActive !== undefined) user.status = isActive ? 'active' : 'suspended';
+ if (isSystemAdmin !== undefined) user.isPlatformAdmin = isSystemAdmin;
+ }
+
+ // Password change
+ if (password) {
+ user.passwordHash = await AuthService.hashPassword(password);
+ }
+
+ await user.save();
+
+ return { user: this.formatUser(user) };
+ } catch (error) {
+ if (error instanceof plugins.typedrequest.TypedResponseError) throw error;
+ throw new plugins.typedrequest.TypedResponseError('Failed to update user');
+ }
+ },
+ ),
+ );
+
+ // Get User Sessions
+ this.typedrouter.addTypedHandler(
+ new plugins.typedrequest.TypedHandler(
+ 'getUserSessions',
+ async (dataArg) => {
+ await requireValidIdentity(this.opsServerRef.authHandler, dataArg);
+
+ try {
+ const sessions = await Session.getUserSessions(dataArg.identity.userId);
+
+ return {
+ sessions: sessions.map((s) => ({
+ id: s.id,
+ userId: s.userId,
+ userAgent: s.userAgent,
+ ipAddress: s.ipAddress,
+ isValid: s.isValid,
+ lastActivityAt: s.lastActivityAt instanceof Date ? s.lastActivityAt.toISOString() : String(s.lastActivityAt),
+ createdAt: s.createdAt instanceof Date ? s.createdAt.toISOString() : String(s.createdAt),
+ })),
+ };
+ } catch (error) {
+ if (error instanceof plugins.typedrequest.TypedResponseError) throw error;
+ throw new plugins.typedrequest.TypedResponseError('Failed to get sessions');
+ }
+ },
+ ),
+ );
+
+ // Revoke Session
+ this.typedrouter.addTypedHandler(
+ new plugins.typedrequest.TypedHandler(
+ 'revokeSession',
+ async (dataArg) => {
+ await requireValidIdentity(this.opsServerRef.authHandler, dataArg);
+
+ try {
+ await this.authService.logout(dataArg.sessionId, {
+ userId: dataArg.identity.userId,
+ });
+
+ return { message: 'Session revoked successfully' };
+ } catch (error) {
+ if (error instanceof plugins.typedrequest.TypedResponseError) throw error;
+ throw new plugins.typedrequest.TypedResponseError('Failed to revoke session');
+ }
+ },
+ ),
+ );
+
+ // Change Password
+ this.typedrouter.addTypedHandler(
+ new plugins.typedrequest.TypedHandler(
+ 'changePassword',
+ async (dataArg) => {
+ await requireValidIdentity(this.opsServerRef.authHandler, dataArg);
+
+ try {
+ const { currentPassword, newPassword } = dataArg;
+
+ if (!currentPassword || !newPassword) {
+ throw new plugins.typedrequest.TypedResponseError(
+ 'Current password and new password are required',
+ );
+ }
+
+ const user = await User.findById(dataArg.identity.userId);
+ if (!user) {
+ throw new plugins.typedrequest.TypedResponseError('User not found');
+ }
+
+ // Verify current password
+ const isValid = await user.verifyPassword(currentPassword);
+ if (!isValid) {
+ throw new plugins.typedrequest.TypedResponseError('Current password is incorrect');
+ }
+
+ // Hash and set new password
+ user.passwordHash = await AuthService.hashPassword(newPassword);
+ await user.save();
+
+ return { message: 'Password changed successfully' };
+ } catch (error) {
+ if (error instanceof plugins.typedrequest.TypedResponseError) throw error;
+ throw new plugins.typedrequest.TypedResponseError('Failed to change password');
+ }
+ },
+ ),
+ );
+
+ // Delete Account
+ this.typedrouter.addTypedHandler(
+ new plugins.typedrequest.TypedHandler(
+ 'deleteAccount',
+ async (dataArg) => {
+ await requireValidIdentity(this.opsServerRef.authHandler, dataArg);
+
+ try {
+ const { password } = dataArg;
+
+ if (!password) {
+ throw new plugins.typedrequest.TypedResponseError(
+ 'Password is required to delete account',
+ );
+ }
+
+ const user = await User.findById(dataArg.identity.userId);
+ if (!user) {
+ throw new plugins.typedrequest.TypedResponseError('User not found');
+ }
+
+ // Verify password
+ const isValid = await user.verifyPassword(password);
+ if (!isValid) {
+ throw new plugins.typedrequest.TypedResponseError('Password is incorrect');
+ }
+
+ // Soft delete - deactivate instead of removing
+ user.status = 'suspended';
+ await user.save();
+
+ // Invalidate all sessions
+ await Session.invalidateAllUserSessions(user.id, 'account_deleted');
+
+ return { message: 'Account deactivated successfully' };
+ } catch (error) {
+ if (error instanceof plugins.typedrequest.TypedResponseError) throw error;
+ throw new plugins.typedrequest.TypedResponseError('Failed to delete account');
+ }
+ },
+ ),
+ );
+ }
+}
diff --git a/ts/opsserver/helpers/guards.ts b/ts/opsserver/helpers/guards.ts
new file mode 100644
index 0000000..9147ebf
--- /dev/null
+++ b/ts/opsserver/helpers/guards.ts
@@ -0,0 +1,29 @@
+import * as plugins from '../../plugins.ts';
+import type { AuthHandler } from '../handlers/auth.handler.ts';
+import * as interfaces from '../../../ts_interfaces/index.ts';
+
+export async function requireValidIdentity(
+ authHandler: AuthHandler,
+ dataArg: T,
+): Promise {
+ if (!dataArg.identity) {
+ throw new plugins.typedrequest.TypedResponseError('No identity provided');
+ }
+ const passed = await authHandler.validIdentityGuard.exec({ identity: dataArg.identity });
+ if (!passed) {
+ throw new plugins.typedrequest.TypedResponseError('Valid identity required');
+ }
+}
+
+export async function requireAdminIdentity(
+ authHandler: AuthHandler,
+ dataArg: T,
+): Promise {
+ if (!dataArg.identity) {
+ throw new plugins.typedrequest.TypedResponseError('No identity provided');
+ }
+ const passed = await authHandler.adminIdentityGuard.exec({ identity: dataArg.identity });
+ if (!passed) {
+ throw new plugins.typedrequest.TypedResponseError('Admin access required');
+ }
+}
diff --git a/ts/plugins.ts b/ts/plugins.ts
index 4dfd44a..72f30ae 100644
--- a/ts/plugins.ts
+++ b/ts/plugins.ts
@@ -18,6 +18,10 @@ import * as smartunique from '@push.rocks/smartunique';
import * as smartdelay from '@push.rocks/smartdelay';
import * as smartrx from '@push.rocks/smartrx';
import * as smartcli from '@push.rocks/smartcli';
+import * as smartguard from '@push.rocks/smartguard';
+
+// api.global packages
+import * as typedrequest from '@api.global/typedrequest';
// tsclass types
import * as tsclass from '@tsclass/tsclass';
@@ -28,25 +32,28 @@ import * as fs from '@std/fs';
import * as http from '@std/http';
export {
- // Push.rocks
- smartregistry,
- smartdata,
- smartbucket,
- smartlog,
- smartenv,
- smartpath,
- smartpromise,
- smartstring,
- smartcrypto,
- smartjwt,
- smartunique,
- smartdelay,
- smartrx,
- smartcli,
- // tsclass
- tsclass,
- // Deno std
- path,
fs,
http,
+ // Deno std
+ path,
+ smartbucket,
+ smartcli,
+ smartcrypto,
+ smartdata,
+ smartdelay,
+ smartenv,
+ smartguard,
+ smartjwt,
+ smartlog,
+ smartpath,
+ smartpromise,
+ // Push.rocks
+ smartregistry,
+ smartrx,
+ smartstring,
+ smartunique,
+ // tsclass
+ tsclass,
+ // api.global
+ typedrequest,
};
diff --git a/ts/providers/auth.provider.ts b/ts/providers/auth.provider.ts
index e5c6c42..1984239 100644
--- a/ts/providers/auth.provider.ts
+++ b/ts/providers/auth.provider.ts
@@ -50,7 +50,7 @@ export class StackGalleryAuthProvider implements plugins.smartregistry.IAuthProv
* Returns userId on success, null on failure
*/
public async authenticate(
- credentials: plugins.smartregistry.ICredentials
+ credentials: plugins.smartregistry.ICredentials,
): Promise {
const result = await this.authService.login(credentials.username, credentials.password);
if (!result.success || !result.user) return null;
@@ -62,7 +62,7 @@ export class StackGalleryAuthProvider implements plugins.smartregistry.IAuthProv
*/
public async validateToken(
token: string,
- protocol?: plugins.smartregistry.TRegistryProtocol
+ protocol?: plugins.smartregistry.TRegistryProtocol,
): Promise {
// Try API token (srg_ prefix)
if (token.startsWith('srg_')) {
@@ -70,11 +70,10 @@ export class StackGalleryAuthProvider implements plugins.smartregistry.IAuthProv
if (!result.valid || !result.token || !result.user) return null;
return {
- type: (protocol || result.token.protocols[0] || 'npm') as plugins.smartregistry.TRegistryProtocol,
+ type: (protocol || result.token.protocols[0] ||
+ 'npm') as plugins.smartregistry.TRegistryProtocol,
userId: result.user.id,
- scopes: result.token.scopes.map((s) =>
- `${s.protocol}:${s.actions.join(',')}`
- ),
+ scopes: result.token.scopes.map((s) => `${s.protocol}:${s.actions.join(',')}`),
readonly: !result.token.scopes.some((s) =>
s.actions.includes('write') || s.actions.includes('*')
),
@@ -98,7 +97,7 @@ export class StackGalleryAuthProvider implements plugins.smartregistry.IAuthProv
public async createToken(
userId: string,
protocol: plugins.smartregistry.TRegistryProtocol,
- options?: plugins.smartregistry.ITokenOptions
+ options?: plugins.smartregistry.ITokenOptions,
): Promise {
const result = await this.tokenService.createToken({
userId,
@@ -133,7 +132,7 @@ export class StackGalleryAuthProvider implements plugins.smartregistry.IAuthProv
public async authorize(
token: plugins.smartregistry.IAuthToken | null,
resource: string,
- action: string
+ action: string,
): Promise {
// Anonymous access: only public reads
if (!token) return false;
diff --git a/ts/providers/index.ts b/ts/providers/index.ts
index 169aecd..27302f1 100644
--- a/ts/providers/index.ts
+++ b/ts/providers/index.ts
@@ -2,5 +2,5 @@
* Provider exports
*/
-export { StackGalleryAuthProvider, type IStackGalleryActor } from './auth.provider.ts';
-export { StackGalleryStorageHooks, type IStorageConfig } from './storage.provider.ts';
+export { type IStackGalleryActor, StackGalleryAuthProvider } from './auth.provider.ts';
+export { type IStorageConfig, StackGalleryStorageHooks } from './storage.provider.ts';
diff --git a/ts/providers/storage.provider.ts b/ts/providers/storage.provider.ts
index b97a4cb..c0479af 100644
--- a/ts/providers/storage.provider.ts
+++ b/ts/providers/storage.provider.ts
@@ -30,7 +30,7 @@ export class StackGalleryStorageHooks implements plugins.smartregistry.IStorageH
* Called before a package is stored
*/
public async beforePut(
- context: plugins.smartregistry.IStorageHookContext
+ context: plugins.smartregistry.IStorageHookContext,
): Promise {
// Validate organization exists and has quota
const orgId = context.actor?.orgId;
@@ -54,7 +54,7 @@ export class StackGalleryStorageHooks implements plugins.smartregistry.IStorageH
* Called after a package is successfully stored
*/
public async afterPut(
- context: plugins.smartregistry.IStorageHookContext
+ context: plugins.smartregistry.IStorageHookContext,
): Promise {
const protocol = context.protocol as TRegistryProtocol;
const packageName = context.metadata?.packageName || context.key;
@@ -115,7 +115,7 @@ export class StackGalleryStorageHooks implements plugins.smartregistry.IStorageH
* Called after a package is fetched
*/
public async afterGet(
- context: plugins.smartregistry.IStorageHookContext
+ context: plugins.smartregistry.IStorageHookContext,
): Promise {
const protocol = context.protocol as TRegistryProtocol;
const packageName = context.metadata?.packageName || context.key;
@@ -134,7 +134,7 @@ export class StackGalleryStorageHooks implements plugins.smartregistry.IStorageH
* Called before a package is deleted
*/
public async beforeDelete(
- context: plugins.smartregistry.IStorageHookContext
+ context: plugins.smartregistry.IStorageHookContext,
): Promise {
return { allowed: true };
}
@@ -143,7 +143,7 @@ export class StackGalleryStorageHooks implements plugins.smartregistry.IStorageH
* Called after a package is deleted
*/
public async afterDelete(
- context: plugins.smartregistry.IStorageHookContext
+ context: plugins.smartregistry.IStorageHookContext,
): Promise {
const protocol = context.protocol as TRegistryProtocol;
const packageName = context.metadata?.packageName || context.key;
@@ -216,7 +216,7 @@ export class StackGalleryStorageHooks implements plugins.smartregistry.IStorageH
organizationName: string,
packageName: string,
version: string,
- filename: string
+ filename: string,
): string {
return `${this.config.basePath}/${protocol}/${organizationName}/${packageName}/${version}/${filename}`;
}
@@ -227,7 +227,7 @@ export class StackGalleryStorageHooks implements plugins.smartregistry.IStorageH
public async storeArtifact(
path: string,
data: Uint8Array,
- contentType?: string
+ contentType?: string,
): Promise {
const bucket = await this.config.bucket.getBucketByName(this.config.bucketName);
await bucket.fastPut({
diff --git a/ts/registry.ts b/ts/registry.ts
index aab6bc9..c6d1055 100644
--- a/ts/registry.ts
+++ b/ts/registry.ts
@@ -4,12 +4,46 @@
*/
import * as plugins from './plugins.ts';
-import { initDb, closeDb, isDbConnected } from './models/db.ts';
+import { closeDb, initDb, isDbConnected } from './models/db.ts';
import { StackGalleryAuthProvider } from './providers/auth.provider.ts';
import { StackGalleryStorageHooks } from './providers/storage.provider.ts';
-import { ApiRouter } from './api/router.ts';
-import { getEmbeddedFile } from './embedded-ui.generated.ts';
-import { ReloadSocketManager } from './reload-socket.ts';
+import { OpsServer } from './opsserver/classes.opsserver.ts';
+
+// Bundled UI files (generated by tsbundle with base64ts output mode)
+let bundledFileMap: Map | null = null;
+try {
+ // @ts-ignore - generated file may not exist yet
+ const { files } = await import('../ts_bundled/bundle.ts');
+ bundledFileMap = new Map();
+ for (const file of files as Array<{ path: string; contentBase64: string }>) {
+ const binary = Uint8Array.from(atob(file.contentBase64), (c) => c.charCodeAt(0));
+ const ext = file.path.split('.').pop() || '';
+ bundledFileMap.set(`/${file.path}`, { data: binary, contentType: getContentType(ext) });
+ }
+} catch {
+ console.warn('[StackGalleryRegistry] No bundled UI found (ts_bundled/bundle.ts missing)');
+}
+
+function getContentType(ext: string): string {
+ const types: Record = {
+ html: 'text/html',
+ js: 'application/javascript',
+ css: 'text/css',
+ json: 'application/json',
+ png: 'image/png',
+ jpg: 'image/jpeg',
+ jpeg: 'image/jpeg',
+ gif: 'image/gif',
+ svg: 'image/svg+xml',
+ ico: 'image/x-icon',
+ woff: 'font/woff',
+ woff2: 'font/woff2',
+ ttf: 'font/ttf',
+ eot: 'application/vnd.ms-fontobject',
+ map: 'application/json',
+ };
+ return types[ext] || 'application/octet-stream';
+}
export interface IRegistryConfig {
// MongoDB configuration
@@ -42,8 +76,7 @@ export class StackGalleryRegistry {
private smartRegistry: plugins.smartregistry.SmartRegistry | null = null;
private authProvider: StackGalleryAuthProvider | null = null;
private storageHooks: StackGalleryStorageHooks | null = null;
- private apiRouter: ApiRouter | null = null;
- private reloadSocket: ReloadSocketManager | null = null;
+ private opsServer: OpsServer | null = null;
private isInitialized = false;
constructor(config: IRegistryConfig) {
@@ -115,13 +148,11 @@ export class StackGalleryRegistry {
});
console.log('[StackGalleryRegistry] smartregistry initialized');
- // Initialize API router
- console.log('[StackGalleryRegistry] Initializing API router...');
- this.apiRouter = new ApiRouter();
- console.log('[StackGalleryRegistry] API router initialized');
-
- // Initialize reload socket for hot reload
- this.reloadSocket = new ReloadSocketManager();
+ // Initialize OpsServer (TypedRequest handlers)
+ console.log('[StackGalleryRegistry] Initializing OpsServer...');
+ this.opsServer = new OpsServer(this);
+ await this.opsServer.start();
+ console.log('[StackGalleryRegistry] OpsServer initialized');
this.isInitialized = true;
console.log('[StackGalleryRegistry] Initialization complete');
@@ -144,7 +175,7 @@ export class StackGalleryRegistry {
{ port, hostname: host },
async (request: Request): Promise => {
return await this.handleRequest(request);
- }
+ },
);
console.log(`[StackGalleryRegistry] Server running on http://${host}:${port}`);
@@ -162,11 +193,14 @@ export class StackGalleryRegistry {
return this.healthCheck();
}
- // API endpoints (handled by REST API layer)
- if (path.startsWith('/api/')) {
- return await this.handleApiRequest(request);
+ // TypedRequest endpoint (handled by OpsServer TypedRouter)
+ if (path === '/typedrequest' && request.method === 'POST') {
+ return await this.handleTypedRequest(request);
}
+ // Legacy REST API endpoints (keep for backwards compatibility during migration)
+ // TODO: Remove once frontend is fully migrated to TypedRequest
+
// Registry protocol endpoints (handled by smartregistry)
const registryPaths = [
'/-/',
@@ -180,8 +214,7 @@ export class StackGalleryRegistry {
'/api/v1/gems/',
'/gems/',
];
- const isRegistryPath =
- registryPaths.some((p) => path.startsWith(p)) ||
+ const isRegistryPath = registryPaths.some((p) => path.startsWith(p)) ||
(path.startsWith('/@') && !path.startsWith('/@stack'));
if (this.smartRegistry && isRegistryPath) {
@@ -199,11 +232,6 @@ export class StackGalleryRegistry {
}
}
- // WebSocket upgrade for hot reload
- if (path === '/ws/reload' && request.headers.get('upgrade') === 'websocket') {
- return this.reloadSocket!.handleUpgrade(request);
- }
-
// Serve static UI files
return this.serveStaticFile(path);
}
@@ -212,7 +240,7 @@ export class StackGalleryRegistry {
* Convert a Deno Request to smartregistry IRequestContext
*/
private async requestToContext(
- request: Request
+ request: Request,
): Promise {
const url = new URL(request.url);
const headers: Record = {};
@@ -285,24 +313,28 @@ export class StackGalleryRegistry {
}
/**
- * Serve static files from embedded UI
+ * Serve static files from bundled UI
*/
private serveStaticFile(path: string): Response {
+ if (!bundledFileMap) {
+ return new Response('UI not bundled. Run tsbundle first.', { status: 404 });
+ }
+
const filePath = path === '/' ? '/index.html' : path;
- // Get embedded file
- const embeddedFile = getEmbeddedFile(filePath);
- if (embeddedFile) {
- return new Response(embeddedFile.data as unknown as BodyInit, {
+ // Get bundled file
+ const file = bundledFileMap.get(filePath);
+ if (file) {
+ return new Response(file.data, {
status: 200,
- headers: { 'Content-Type': embeddedFile.contentType },
+ headers: { 'Content-Type': file.contentType },
});
}
// SPA fallback: serve index.html for unknown paths
- const indexFile = getEmbeddedFile('/index.html');
+ const indexFile = bundledFileMap.get('/index.html');
if (indexFile) {
- return new Response(indexFile.data as unknown as BodyInit, {
+ return new Response(indexFile.data, {
status: 200,
headers: { 'Content-Type': 'text/html' },
});
@@ -312,17 +344,34 @@ export class StackGalleryRegistry {
}
/**
- * Handle API requests
+ * Handle TypedRequest calls
*/
- private async handleApiRequest(request: Request): Promise {
- if (!this.apiRouter) {
- return new Response(JSON.stringify({ error: 'API router not initialized' }), {
+ private async handleTypedRequest(request: Request): Promise {
+ if (!this.opsServer) {
+ return new Response(JSON.stringify({ error: 'OpsServer not initialized' }), {
status: 503,
headers: { 'Content-Type': 'application/json' },
});
}
- return await this.apiRouter.handle(request);
+ try {
+ const body = await request.json();
+ const result = await this.opsServer.typedrouter.routeAndAddResponse(body);
+ return new Response(JSON.stringify(result), {
+ status: 200,
+ headers: { 'Content-Type': 'application/json' },
+ });
+ } catch (error) {
+ console.error('[StackGalleryRegistry] TypedRequest error:', error);
+ const message = error instanceof Error ? error.message : 'Internal server error';
+ return new Response(
+ JSON.stringify({ error: message }),
+ {
+ status: 500,
+ headers: { 'Content-Type': 'application/json' },
+ },
+ );
+ }
}
/**
@@ -352,6 +401,9 @@ export class StackGalleryRegistry {
*/
public async stop(): Promise {
console.log('[StackGalleryRegistry] Shutting down...');
+ if (this.opsServer) {
+ await this.opsServer.stop();
+ }
await closeDb();
this.isInitialized = false;
console.log('[StackGalleryRegistry] Shutdown complete');
@@ -420,9 +472,10 @@ export async function createRegistryFromEnvFile(): Promise
const s3Endpoint = `${s3Protocol}://${env.S3_HOST || 'localhost'}:${env.S3_PORT || '9000'}`;
const config: IRegistryConfig = {
- mongoUrl:
- env.MONGODB_URL ||
- `mongodb://${env.MONGODB_USER}:${env.MONGODB_PASS}@${env.MONGODB_HOST || 'localhost'}:${env.MONGODB_PORT || '27017'}/${env.MONGODB_NAME}?authSource=admin`,
+ mongoUrl: env.MONGODB_URL ||
+ `mongodb://${env.MONGODB_USER}:${env.MONGODB_PASS}@${env.MONGODB_HOST || 'localhost'}:${
+ env.MONGODB_PORT || '27017'
+ }/${env.MONGODB_NAME}?authSource=admin`,
mongoDb: env.MONGODB_NAME || 'stackgallery',
s3Endpoint: s3Endpoint,
s3AccessKey: env.S3_ACCESSKEY || env.S3_ACCESS_KEY || 'minioadmin',
@@ -444,7 +497,7 @@ export async function createRegistryFromEnvFile(): Promise
} else {
console.warn(
'[StackGalleryRegistry] Error reading .nogit/env.json, falling back to env vars:',
- error
+ error,
);
}
return createRegistryFromEnv();
diff --git a/ts/reload-socket.ts b/ts/reload-socket.ts
deleted file mode 100644
index f3379ed..0000000
--- a/ts/reload-socket.ts
+++ /dev/null
@@ -1,65 +0,0 @@
-/**
- * WebSocket manager for hot reload
- * Generates a unique instance ID on startup and broadcasts it to connected clients.
- * When the server restarts, clients detect the new ID and reload the page.
- */
-export class ReloadSocketManager {
- private instanceId: string;
- private clients: Set = new Set();
-
- constructor() {
- this.instanceId = crypto.randomUUID();
- console.log(`[ReloadSocket] Instance ID: ${this.instanceId}`);
- }
-
- /**
- * Get the current instance ID
- */
- getInstanceId(): string {
- return this.instanceId;
- }
-
- /**
- * Handle WebSocket upgrade request
- */
- handleUpgrade(request: Request): Response {
- const { socket, response } = Deno.upgradeWebSocket(request);
-
- socket.onopen = () => {
- this.clients.add(socket);
- console.log(`[ReloadSocket] Client connected (${this.clients.size} total)`);
- // Send instance ID immediately
- socket.send(JSON.stringify({ type: 'instance', id: this.instanceId }));
- };
-
- socket.onclose = () => {
- this.clients.delete(socket);
- console.log(`[ReloadSocket] Client disconnected (${this.clients.size} remaining)`);
- };
-
- socket.onerror = (error) => {
- console.error('[ReloadSocket] WebSocket error:', error);
- };
-
- return response;
- }
-
- /**
- * Broadcast a message to all connected clients
- */
- broadcast(message: object): void {
- const msg = JSON.stringify(message);
- for (const client of this.clients) {
- if (client.readyState === WebSocket.OPEN) {
- client.send(msg);
- }
- }
- }
-
- /**
- * Get the number of connected clients
- */
- getClientCount(): number {
- return this.clients.size;
- }
-}
diff --git a/ts/services/audit.service.ts b/ts/services/audit.service.ts
index 66994ad..84ebf5c 100644
--- a/ts/services/audit.service.ts
+++ b/ts/services/audit.service.ts
@@ -45,7 +45,7 @@ export class AuditService {
errorCode?: string;
errorMessage?: string;
durationMs?: number;
- } = {}
+ } = {},
): Promise {
return await AuditLog.log({
actorId: this.context.actorId,
@@ -75,7 +75,7 @@ export class AuditService {
resourceType: TAuditResourceType,
resourceId?: string,
resourceName?: string,
- metadata?: Record
+ metadata?: Record,
): Promise {
return await this.log(action, resourceType, {
resourceId,
@@ -94,7 +94,7 @@ export class AuditService {
errorCode: string,
errorMessage: string,
resourceId?: string,
- metadata?: Record
+ metadata?: Record,
): Promise {
return await this.log(action, resourceType, {
resourceId,
@@ -107,11 +107,21 @@ export class AuditService {
// Convenience methods for common actions
- public async logUserLogin(userId: string, success: boolean, errorMessage?: string): Promise {
+ public async logUserLogin(
+ userId: string,
+ success: boolean,
+ errorMessage?: string,
+ ): Promise {
if (success) {
return await this.logSuccess('AUTH_LOGIN', 'user', userId);
}
- return await this.logFailure('AUTH_LOGIN', 'user', 'LOGIN_FAILED', errorMessage || 'Login failed', userId);
+ return await this.logFailure(
+ 'AUTH_LOGIN',
+ 'user',
+ 'LOGIN_FAILED',
+ errorMessage || 'Login failed',
+ userId,
+ );
}
public async logUserLogout(userId: string): Promise {
@@ -131,7 +141,7 @@ export class AuditService {
packageName: string,
version: string,
organizationId: string,
- repositoryId: string
+ repositoryId: string,
): Promise {
return await this.log('PACKAGE_PUSHED', 'package', {
resourceId: packageId,
@@ -148,7 +158,7 @@ export class AuditService {
packageName: string,
version: string,
organizationId: string,
- repositoryId: string
+ repositoryId: string,
): Promise {
return await this.log('PACKAGE_PULLED', 'package', {
resourceId: packageId,
@@ -167,7 +177,7 @@ export class AuditService {
public async logRepositoryCreated(
repoId: string,
repoName: string,
- organizationId: string
+ organizationId: string,
): Promise {
return await this.log('REPO_CREATED', 'repository', {
resourceId: repoId,
@@ -182,7 +192,7 @@ export class AuditService {
resourceId: string,
targetUserId: string,
oldRole: string | null,
- newRole: string | null
+ newRole: string | null,
): Promise {
return await this.log('ORG_MEMBER_ROLE_CHANGED', resourceType, {
resourceId,
diff --git a/ts/services/auth.service.ts b/ts/services/auth.service.ts
index 3a8a120..e392e6e 100644
--- a/ts/services/auth.service.ts
+++ b/ts/services/auth.service.ts
@@ -3,7 +3,7 @@
*/
import * as plugins from '../plugins.ts';
-import { User, Session } from '../models/index.ts';
+import { Session, User } from '../models/index.ts';
import { AuditService } from './audit.service.ts';
export interface IJwtPayload {
@@ -52,7 +52,7 @@ export class AuthService {
public async login(
email: string,
password: string,
- options: { userAgent?: string; ipAddress?: string } = {}
+ options: { userAgent?: string; ipAddress?: string } = {},
): Promise {
const auditContext = AuditService.withContext({
actorIp: options.ipAddress,
@@ -195,7 +195,7 @@ export class AuthService {
*/
public async logout(
sessionId: string,
- options: { userId?: string; ipAddress?: string } = {}
+ options: { userId?: string; ipAddress?: string } = {},
): Promise {
const session = await Session.findValidSession(sessionId);
if (!session) return false;
@@ -218,7 +218,7 @@ export class AuthService {
*/
public async logoutAll(
userId: string,
- options: { ipAddress?: string } = {}
+ options: { ipAddress?: string } = {},
): Promise {
const count = await Session.invalidateAllUserSessions(userId, 'logout_all');
@@ -238,7 +238,9 @@ export class AuthService {
/**
* Validate access token and return user
*/
- public async validateAccessToken(accessToken: string): Promise<{ user: User; sessionId: string } | null> {
+ public async validateAccessToken(
+ accessToken: string,
+ ): Promise<{ user: User; sessionId: string } | null> {
const payload = await this.verifyToken(accessToken);
if (!payload || payload.type !== 'access') return null;
@@ -339,7 +341,7 @@ export class AuthService {
encoder.encode(this.config.jwtSecret),
{ name: 'HMAC', hash: 'SHA-256' },
false,
- ['sign']
+ ['sign'],
);
const signature = await crypto.subtle.sign('HMAC', key, encoder.encode(data));
diff --git a/ts/services/auth/strategies/auth.strategy.interface.ts b/ts/services/auth/strategies/auth.strategy.interface.ts
index 01860e5..c99406b 100644
--- a/ts/services/auth/strategies/auth.strategy.interface.ts
+++ b/ts/services/auth/strategies/auth.strategy.interface.ts
@@ -4,8 +4,8 @@
*/
import type {
- IExternalUserInfo,
IConnectionTestResult,
+ IExternalUserInfo,
} from '../../../interfaces/auth.interfaces.ts';
export interface IOAuthCallbackData {
diff --git a/ts/services/auth/strategies/ldap.strategy.ts b/ts/services/auth/strategies/ldap.strategy.ts
index e27fefc..9fd7cd3 100644
--- a/ts/services/auth/strategies/ldap.strategy.ts
+++ b/ts/services/auth/strategies/ldap.strategy.ts
@@ -9,8 +9,8 @@
import type { AuthProvider } from '../../../models/auth.provider.ts';
import type { CryptoService } from '../../crypto.service.ts';
import type {
- IExternalUserInfo,
IConnectionTestResult,
+ IExternalUserInfo,
} from '../../../interfaces/auth.interfaces.ts';
import type { IAuthStrategy } from './auth.strategy.interface.ts';
@@ -23,7 +23,7 @@ interface ILdapEntry {
export class LdapStrategy implements IAuthStrategy {
constructor(
private provider: AuthProvider,
- private cryptoService: CryptoService
+ private cryptoService: CryptoService,
) {}
/**
@@ -31,7 +31,7 @@ export class LdapStrategy implements IAuthStrategy {
*/
public async authenticateCredentials(
username: string,
- password: string
+ password: string,
): Promise {
const config = this.provider.ldapConfig;
if (!config) {
@@ -55,7 +55,7 @@ export class LdapStrategy implements IAuthStrategy {
bindPassword,
config.baseDn,
userFilter,
- password
+ password,
);
// Map LDAP attributes to user info
@@ -86,7 +86,7 @@ export class LdapStrategy implements IAuthStrategy {
config.serverUrl,
config.bindDn,
bindPassword,
- config.baseDn
+ config.baseDn,
);
return {
@@ -129,7 +129,7 @@ export class LdapStrategy implements IAuthStrategy {
bindPassword: string,
baseDn: string,
userFilter: string,
- userPassword: string
+ userPassword: string,
): Promise {
// In a real implementation, this would:
// 1. Connect to LDAP server
@@ -150,7 +150,7 @@ export class LdapStrategy implements IAuthStrategy {
throw new Error(
'LDAP authentication is not yet fully implemented. ' +
- 'Please integrate with a Deno-compatible LDAP library (e.g., ldapts via npm compatibility).'
+ 'Please integrate with a Deno-compatible LDAP library (e.g., ldapts via npm compatibility).',
);
}
@@ -161,7 +161,7 @@ export class LdapStrategy implements IAuthStrategy {
serverUrl: string,
bindDn: string,
bindPassword: string,
- baseDn: string
+ baseDn: string,
): Promise {
// Similar to ldapBind, this is a placeholder
// Would connect and bind with service account to verify connectivity
@@ -185,7 +185,9 @@ export class LdapStrategy implements IAuthStrategy {
// Return success for configuration validation
// Actual connectivity test would happen with LDAP library
- console.log('[LdapStrategy] LDAP configuration is valid (actual connection test requires LDAP library)');
+ console.log(
+ '[LdapStrategy] LDAP configuration is valid (actual connection test requires LDAP library)',
+ );
}
/**
@@ -206,15 +208,9 @@ export class LdapStrategy implements IAuthStrategy {
return {
externalId,
email,
- username: entry[mapping.username]
- ? String(entry[mapping.username])
- : undefined,
- displayName: entry[mapping.displayName]
- ? String(entry[mapping.displayName])
- : undefined,
- groups: mapping.groups
- ? this.parseGroups(entry[mapping.groups])
- : undefined,
+ username: entry[mapping.username] ? String(entry[mapping.username]) : undefined,
+ displayName: entry[mapping.displayName] ? String(entry[mapping.displayName]) : undefined,
+ groups: mapping.groups ? this.parseGroups(entry[mapping.groups]) : undefined,
rawAttributes: entry as Record,
};
}
diff --git a/ts/services/auth/strategies/oauth.strategy.ts b/ts/services/auth/strategies/oauth.strategy.ts
index fb17448..c69d4c3 100644
--- a/ts/services/auth/strategies/oauth.strategy.ts
+++ b/ts/services/auth/strategies/oauth.strategy.ts
@@ -6,8 +6,8 @@
import type { AuthProvider } from '../../../models/auth.provider.ts';
import type { CryptoService } from '../../crypto.service.ts';
import type {
- IExternalUserInfo,
IConnectionTestResult,
+ IExternalUserInfo,
} from '../../../interfaces/auth.interfaces.ts';
import type { IAuthStrategy, IOAuthCallbackData } from './auth.strategy.interface.ts';
@@ -34,7 +34,7 @@ export class OAuthStrategy implements IAuthStrategy {
constructor(
private provider: AuthProvider,
- private cryptoService: CryptoService
+ private cryptoService: CryptoService,
) {}
/**
@@ -243,19 +243,15 @@ export class OAuthStrategy implements IAuthStrategy {
return {
externalId,
email,
- username: rawInfo[mapping.username]
- ? String(rawInfo[mapping.username])
- : undefined,
- displayName: rawInfo[mapping.displayName]
- ? String(rawInfo[mapping.displayName])
- : undefined,
+ username: rawInfo[mapping.username] ? String(rawInfo[mapping.username]) : undefined,
+ displayName: rawInfo[mapping.displayName] ? String(rawInfo[mapping.displayName]) : undefined,
avatarUrl: mapping.avatarUrl && rawInfo[mapping.avatarUrl]
? String(rawInfo[mapping.avatarUrl])
: (rawInfo.picture ? String(rawInfo.picture) : undefined),
groups: mapping.groups && rawInfo[mapping.groups]
? (Array.isArray(rawInfo[mapping.groups])
- ? (rawInfo[mapping.groups] as string[])
- : [String(rawInfo[mapping.groups])])
+ ? (rawInfo[mapping.groups] as string[])
+ : [String(rawInfo[mapping.groups])])
: undefined,
rawAttributes: rawInfo,
};
diff --git a/ts/services/crypto.service.ts b/ts/services/crypto.service.ts
index 9b0d2d5..090d1f8 100644
--- a/ts/services/crypto.service.ts
+++ b/ts/services/crypto.service.ts
@@ -17,7 +17,7 @@ export class CryptoService {
const keyHex = Deno.env.get('AUTH_ENCRYPTION_KEY');
if (!keyHex) {
console.warn(
- '[CryptoService] AUTH_ENCRYPTION_KEY not set. Generating ephemeral key (NOT for production!)'
+ '[CryptoService] AUTH_ENCRYPTION_KEY not set. Generating ephemeral key (NOT for production!)',
);
const randomBytes = crypto.getRandomValues(new Uint8Array(32));
this.masterKey = await this.importKey(this.bytesToHex(randomBytes));
@@ -52,7 +52,7 @@ export class CryptoService {
const encrypted = await crypto.subtle.encrypt(
{ name: 'AES-GCM', iv: iv.buffer as ArrayBuffer },
this.masterKey,
- encoded.buffer as ArrayBuffer
+ encoded.buffer as ArrayBuffer,
);
// Format: iv:ciphertext (both base64)
@@ -88,7 +88,7 @@ export class CryptoService {
const decrypted = await crypto.subtle.decrypt(
{ name: 'AES-GCM', iv: iv.buffer as ArrayBuffer },
this.masterKey,
- encrypted.buffer as ArrayBuffer
+ encrypted.buffer as ArrayBuffer,
);
// Decode to string
@@ -123,7 +123,7 @@ export class CryptoService {
keyBytes.buffer as ArrayBuffer,
{ name: 'AES-GCM' },
false,
- ['encrypt', 'decrypt']
+ ['encrypt', 'decrypt'],
);
}
diff --git a/ts/services/external.auth.service.ts b/ts/services/external.auth.service.ts
index 0c90007..59a1263 100644
--- a/ts/services/external.auth.service.ts
+++ b/ts/services/external.auth.service.ts
@@ -3,12 +3,18 @@
* Orchestrates OAuth/OIDC and LDAP authentication flows
*/
-import { User, Session, AuthProvider, ExternalIdentity, PlatformSettings } from '../models/index.ts';
+import {
+ AuthProvider,
+ ExternalIdentity,
+ PlatformSettings,
+ Session,
+ User,
+} from '../models/index.ts';
import { AuthService, type IAuthResult } from './auth.service.ts';
import { AuditService } from './audit.service.ts';
import { cryptoService } from './crypto.service.ts';
import { AuthStrategyFactory, type IOAuthCallbackData } from './auth/strategies/index.ts';
-import type { IExternalUserInfo, IConnectionTestResult } from '../interfaces/auth.interfaces.ts';
+import type { IConnectionTestResult, IExternalUserInfo } from '../interfaces/auth.interfaces.ts';
export interface IOAuthState {
providerId: string;
@@ -33,7 +39,7 @@ export class ExternalAuthService {
*/
public async initiateOAuth(
providerId: string,
- returnUrl?: string
+ returnUrl?: string,
): Promise<{ authUrl: string; state: string }> {
const provider = await AuthProvider.findById(providerId);
if (!provider) {
@@ -67,7 +73,7 @@ export class ExternalAuthService {
*/
public async handleOAuthCallback(
data: IOAuthCallbackData,
- options: { ipAddress?: string; userAgent?: string } = {}
+ options: { ipAddress?: string; userAgent?: string } = {},
): Promise {
// Validate state
const stateData = await this.validateState(data.state);
@@ -170,7 +176,7 @@ export class ExternalAuthService {
providerId: string,
username: string,
password: string,
- options: { ipAddress?: string; userAgent?: string } = {}
+ options: { ipAddress?: string; userAgent?: string } = {},
): Promise {
const provider = await AuthProvider.findById(providerId);
if (!provider || provider.status !== 'active' || provider.type !== 'ldap') {
@@ -261,7 +267,7 @@ export class ExternalAuthService {
public async linkProvider(
userId: string,
providerId: string,
- externalUser: IExternalUserInfo
+ externalUser: IExternalUserInfo,
): Promise {
// Check if this external ID is already linked to another user
const existing = await ExternalIdentity.findByExternalId(providerId, externalUser.externalId);
@@ -377,12 +383,12 @@ export class ExternalAuthService {
private async findOrCreateUser(
provider: AuthProvider,
externalUser: IExternalUserInfo,
- options: { ipAddress?: string } = {}
+ options: { ipAddress?: string } = {},
): Promise<{ user: User; isNew: boolean }> {
// 1. Check if external identity already exists
const existingIdentity = await ExternalIdentity.findByExternalId(
provider.id,
- externalUser.externalId
+ externalUser.externalId,
);
if (existingIdentity) {
@@ -544,12 +550,12 @@ export class ExternalAuthService {
encoder.encode(secret),
{ name: 'HMAC', hash: 'SHA-256' },
false,
- ['sign']
+ ['sign'],
);
const signature = await crypto.subtle.sign('HMAC', key, encoder.encode(data));
const encodedSignature = this.base64UrlEncode(
- String.fromCharCode(...new Uint8Array(signature))
+ String.fromCharCode(...new Uint8Array(signature)),
);
return `${data}.${encodedSignature}`;
diff --git a/ts/services/index.ts b/ts/services/index.ts
index 290917d..86736f8 100644
--- a/ts/services/index.ts
+++ b/ts/services/index.ts
@@ -4,19 +4,19 @@
export { AuditService, type IAuditContext } from './audit.service.ts';
export {
- TokenService,
type ICreateTokenOptions,
type ITokenValidationResult,
+ TokenService,
} from './token.service.ts';
export {
- PermissionService,
- type TAction,
type IPermissionContext,
type IResolvedPermissions,
+ PermissionService,
+ type TAction,
} from './permission.service.ts';
export {
AuthService,
- type IJwtPayload,
- type IAuthResult,
type IAuthConfig,
+ type IAuthResult,
+ type IJwtPayload,
} from './auth.service.ts';
diff --git a/ts/services/permission.service.ts b/ts/services/permission.service.ts
index 4722fba..76e2ee1 100644
--- a/ts/services/permission.service.ts
+++ b/ts/services/permission.service.ts
@@ -4,18 +4,18 @@
import type {
TOrganizationRole,
- TTeamRole,
- TRepositoryRole,
TRegistryProtocol,
+ TRepositoryRole,
+ TTeamRole,
} from '../interfaces/auth.interfaces.ts';
import {
- User,
Organization,
OrganizationMember,
- Team,
- TeamMember,
Repository,
RepositoryPermission,
+ Team,
+ TeamMember,
+ User,
} from '../models/index.ts';
export type TAction = 'read' | 'write' | 'delete' | 'admin';
@@ -71,7 +71,10 @@ export class PermissionService {
if (!context.organizationId) return result;
// Get organization membership
- const orgMember = await OrganizationMember.findMembership(context.organizationId, context.userId);
+ const orgMember = await OrganizationMember.findMembership(
+ context.organizationId,
+ context.userId,
+ );
if (orgMember) {
result.organizationRole = orgMember.role;
@@ -137,7 +140,10 @@ export class PermissionService {
}
// Get direct repository permission (highest priority)
- const repoPerm = await RepositoryPermission.findPermission(context.repositoryId, context.userId);
+ const repoPerm = await RepositoryPermission.findPermission(
+ context.repositoryId,
+ context.userId,
+ );
if (repoPerm) {
result.repositoryRole = repoPerm.role;
this.applyRole(result, repoPerm.role);
@@ -151,7 +157,7 @@ export class PermissionService {
*/
public async checkPermission(
context: IPermissionContext,
- action: TAction
+ action: TAction,
): Promise {
const permissions = await this.resolvePermissions(context);
@@ -176,11 +182,11 @@ export class PermissionService {
userId: string,
organizationId: string,
repositoryId: string,
- action: 'read' | 'write' | 'delete'
+ action: 'read' | 'write' | 'delete',
): Promise {
return await this.checkPermission(
{ userId, organizationId, repositoryId },
- action
+ action,
);
}
@@ -202,7 +208,7 @@ export class PermissionService {
public async canManageRepository(
userId: string,
organizationId: string,
- repositoryId: string
+ repositoryId: string,
): Promise {
const permissions = await this.resolvePermissions({
userId,
@@ -217,7 +223,7 @@ export class PermissionService {
*/
public async getAccessibleRepositories(
userId: string,
- organizationId: string
+ organizationId: string,
): Promise {
const user = await User.findById(userId);
if (!user || !user.isActive) return [];
diff --git a/ts/services/token.service.ts b/ts/services/token.service.ts
index 85e39ce..244c3f8 100644
--- a/ts/services/token.service.ts
+++ b/ts/services/token.service.ts
@@ -37,7 +37,9 @@ export class TokenService {
* Generate a new API token
* Returns the raw token (only shown once) and the saved token record
*/
- public async createToken(options: ICreateTokenOptions): Promise<{ rawToken: string; token: ApiToken }> {
+ public async createToken(
+ options: ICreateTokenOptions,
+ ): Promise<{ rawToken: string; token: ApiToken }> {
// Generate secure random token: srg_{64 hex chars}
const randomBytes = new Uint8Array(32);
crypto.getRandomValues(randomBytes);
@@ -206,7 +208,7 @@ export class TokenService {
protocol: TRegistryProtocol,
organizationId?: string,
repositoryId?: string,
- action?: string
+ action?: string,
): boolean {
if (!token.hasProtocol(protocol)) return false;
return token.hasScope(protocol, organizationId, repositoryId, action);
diff --git a/ts_interfaces/data/admin.ts b/ts_interfaces/data/admin.ts
new file mode 100644
index 0000000..8c1a289
--- /dev/null
+++ b/ts_interfaces/data/admin.ts
@@ -0,0 +1,80 @@
+// ============================================================================
+// Admin Data Types
+// ============================================================================
+
+import type { TAuthProviderStatus, TAuthProviderType } from './auth.ts';
+
+export interface IOAuthConfig {
+ clientId: string;
+ clientSecretEncrypted: string;
+ issuer: string;
+ authorizationUrl?: string;
+ tokenUrl?: string;
+ userInfoUrl?: string;
+ scopes: string[];
+ callbackUrl: string;
+}
+
+export interface ILdapConfig {
+ serverUrl: string;
+ bindDn: string;
+ bindPasswordEncrypted: string;
+ baseDn: string;
+ userSearchFilter: string;
+ tlsEnabled: boolean;
+ tlsCaCert?: string;
+}
+
+export interface IAttributeMapping {
+ email: string;
+ username: string;
+ displayName: string;
+ avatarUrl?: string;
+ groups?: string;
+}
+
+export interface IProvisioningSettings {
+ jitEnabled: boolean;
+ autoLinkByEmail: boolean;
+ allowedEmailDomains?: string[];
+}
+
+export interface IAuthProvider {
+ id: string;
+ name: string;
+ displayName: string;
+ type: TAuthProviderType;
+ status: TAuthProviderStatus;
+ priority: number;
+ oauthConfig?: IOAuthConfig;
+ ldapConfig?: ILdapConfig;
+ attributeMapping: IAttributeMapping;
+ provisioning: IProvisioningSettings;
+ createdAt: string;
+ updatedAt: string;
+ createdById: string;
+ lastTestedAt?: string;
+ lastTestResult?: 'success' | 'failure';
+ lastTestError?: string;
+}
+
+export interface IPlatformAuthSettings {
+ localAuthEnabled: boolean;
+ allowUserRegistration: boolean;
+ sessionDurationMinutes: number;
+ defaultProviderId?: string;
+}
+
+export interface IPlatformSettings {
+ id: string;
+ auth: IPlatformAuthSettings;
+ updatedAt: string;
+ updatedById?: string;
+}
+
+export interface IConnectionTestResult {
+ success: boolean;
+ latencyMs: number;
+ serverInfo?: Record;
+ error?: string;
+}
diff --git a/ts_interfaces/data/audit.ts b/ts_interfaces/data/audit.ts
new file mode 100644
index 0000000..75d92f4
--- /dev/null
+++ b/ts_interfaces/data/audit.ts
@@ -0,0 +1,79 @@
+// ============================================================================
+// Audit Data Types
+// ============================================================================
+
+export type TAuditAction =
+ | 'AUTH_LOGIN'
+ | 'AUTH_LOGOUT'
+ | 'AUTH_FAILED'
+ | 'AUTH_MFA_ENABLED'
+ | 'AUTH_MFA_DISABLED'
+ | 'AUTH_PASSWORD_CHANGED'
+ | 'AUTH_PASSWORD_RESET'
+ | 'TOKEN_CREATED'
+ | 'TOKEN_USED'
+ | 'TOKEN_REVOKED'
+ | 'TOKEN_EXPIRED'
+ | 'USER_CREATED'
+ | 'USER_UPDATED'
+ | 'USER_DELETED'
+ | 'USER_SUSPENDED'
+ | 'USER_ACTIVATED'
+ | 'ORG_CREATED'
+ | 'ORG_UPDATED'
+ | 'ORG_DELETED'
+ | 'ORG_MEMBER_ADDED'
+ | 'ORG_MEMBER_REMOVED'
+ | 'ORG_MEMBER_ROLE_CHANGED'
+ | 'TEAM_CREATED'
+ | 'TEAM_UPDATED'
+ | 'TEAM_DELETED'
+ | 'TEAM_MEMBER_ADDED'
+ | 'TEAM_MEMBER_REMOVED'
+ | 'REPO_CREATED'
+ | 'REPO_UPDATED'
+ | 'REPO_DELETED'
+ | 'REPO_VISIBILITY_CHANGED'
+ | 'REPO_PERMISSION_GRANTED'
+ | 'REPO_PERMISSION_REVOKED'
+ | 'PACKAGE_PUSHED'
+ | 'PACKAGE_PULLED'
+ | 'PACKAGE_DELETED'
+ | 'PACKAGE_DEPRECATED'
+ | 'AUTH_PROVIDER_CREATED'
+ | 'AUTH_PROVIDER_UPDATED'
+ | 'AUTH_PROVIDER_DELETED'
+ | 'AUTH_PROVIDER_TESTED'
+ | 'PLATFORM_SETTINGS_UPDATED'
+ | 'SECURITY_SCAN_COMPLETED'
+ | 'SECURITY_VULNERABILITY_FOUND'
+ | 'SECURITY_IP_BLOCKED'
+ | 'SECURITY_RATE_LIMITED';
+
+export type TAuditResourceType =
+ | 'user'
+ | 'organization'
+ | 'team'
+ | 'repository'
+ | 'package'
+ | 'api_token'
+ | 'session'
+ | 'auth_provider'
+ | 'platform_settings'
+ | 'system';
+
+export interface IAuditEntry {
+ id: string;
+ actorId?: string;
+ actorType: 'user' | 'api_token' | 'system' | 'anonymous';
+ action: TAuditAction;
+ resourceType: TAuditResourceType;
+ resourceId?: string;
+ resourceName?: string;
+ organizationId?: string;
+ repositoryId?: string;
+ success: boolean;
+ errorCode?: string;
+ timestamp: string;
+ metadata: Record;
+}
diff --git a/ts_interfaces/data/auth.ts b/ts_interfaces/data/auth.ts
new file mode 100644
index 0000000..12f3009
--- /dev/null
+++ b/ts_interfaces/data/auth.ts
@@ -0,0 +1,49 @@
+// ============================================================================
+// Auth Data Types
+// ============================================================================
+
+export type TUserStatus = 'active' | 'suspended' | 'pending_verification';
+
+export interface IIdentity {
+ jwt: string;
+ refreshJwt: string;
+ userId: string;
+ email: string;
+ username: string;
+ displayName: string;
+ isSystemAdmin: boolean;
+ expiresAt: number;
+ sessionId: string;
+}
+
+export interface IUser {
+ id: string;
+ email: string;
+ username: string;
+ displayName: string;
+ avatarUrl?: string;
+ isSystemAdmin: boolean;
+ isActive: boolean;
+ createdAt: string;
+ lastLoginAt?: string;
+}
+
+export interface ISession {
+ id: string;
+ userId: string;
+ userAgent: string;
+ ipAddress: string;
+ isValid: boolean;
+ lastActivityAt: string;
+ createdAt: string;
+}
+
+export interface IPublicAuthProvider {
+ id: string;
+ name: string;
+ displayName: string;
+ type: TAuthProviderType;
+}
+
+export type TAuthProviderType = 'oidc' | 'ldap';
+export type TAuthProviderStatus = 'active' | 'disabled' | 'testing';
diff --git a/ts_interfaces/data/index.ts b/ts_interfaces/data/index.ts
new file mode 100644
index 0000000..8ae58aa
--- /dev/null
+++ b/ts_interfaces/data/index.ts
@@ -0,0 +1,7 @@
+export * from './auth.ts';
+export * from './organization.ts';
+export * from './repository.ts';
+export * from './package.ts';
+export * from './token.ts';
+export * from './audit.ts';
+export * from './admin.ts';
diff --git a/ts_interfaces/data/organization.ts b/ts_interfaces/data/organization.ts
new file mode 100644
index 0000000..c5bc9a1
--- /dev/null
+++ b/ts_interfaces/data/organization.ts
@@ -0,0 +1,48 @@
+// ============================================================================
+// Organization Data Types
+// ============================================================================
+
+export type TOrganizationPlan = 'free' | 'team' | 'enterprise';
+export type TOrganizationRole = 'owner' | 'admin' | 'member';
+
+export interface IOrganization {
+ id: string;
+ name: string;
+ displayName: string;
+ description?: string;
+ avatarUrl?: string;
+ website?: string;
+ isPublic: boolean;
+ memberCount: number;
+ plan: TOrganizationPlan;
+ usedStorageBytes: number;
+ storageQuotaBytes: number;
+ createdAt: string;
+}
+
+export interface IOrganizationDetail extends IOrganization {
+ settings?: IOrganizationSettings;
+}
+
+export interface IOrganizationSettings {
+ requireMfa: boolean;
+ allowPublicRepositories: boolean;
+ defaultRepositoryVisibility: TRepositoryVisibility;
+ allowedProtocols: TRegistryProtocol[];
+}
+
+export interface IOrganizationMember {
+ userId: string;
+ role: TOrganizationRole;
+ addedAt: string;
+ user: {
+ username: string;
+ displayName: string;
+ avatarUrl?: string;
+ } | null;
+}
+
+// Re-export types used by settings
+import type { TRepositoryVisibility } from './repository.ts';
+import type { TRegistryProtocol } from './package.ts';
+export type { TRegistryProtocol, TRepositoryVisibility };
diff --git a/ts_interfaces/data/package.ts b/ts_interfaces/data/package.ts
new file mode 100644
index 0000000..6fbc286
--- /dev/null
+++ b/ts_interfaces/data/package.ts
@@ -0,0 +1,53 @@
+// ============================================================================
+// Package Data Types
+// ============================================================================
+
+export type TRegistryProtocol =
+ | 'oci'
+ | 'npm'
+ | 'maven'
+ | 'cargo'
+ | 'composer'
+ | 'pypi'
+ | 'rubygems';
+
+export interface IPackage {
+ id: string;
+ name: string;
+ description?: string;
+ protocol: TRegistryProtocol;
+ organizationId: string;
+ repositoryId: string;
+ latestVersion?: string;
+ isPrivate: boolean;
+ downloadCount: number;
+ starCount: number;
+ storageBytes: number;
+ updatedAt: string;
+ createdAt: string;
+}
+
+export interface IPackageDetail extends IPackage {
+ distTags: Record;
+ versions: string[];
+}
+
+export interface IPackageVersion {
+ version: string;
+ publishedAt: string;
+ size: number;
+ downloads: number;
+ checksum?: {
+ sha256?: string;
+ sha512?: string;
+ md5?: string;
+ };
+}
+
+export interface IPackageSearchParams {
+ query?: string;
+ protocol?: TRegistryProtocol;
+ organizationId?: string;
+ limit?: number;
+ offset?: number;
+}
diff --git a/ts_interfaces/data/repository.ts b/ts_interfaces/data/repository.ts
new file mode 100644
index 0000000..09b6e33
--- /dev/null
+++ b/ts_interfaces/data/repository.ts
@@ -0,0 +1,22 @@
+// ============================================================================
+// Repository Data Types
+// ============================================================================
+
+import type { TRegistryProtocol } from './package.ts';
+
+export type TRepositoryVisibility = 'public' | 'private' | 'internal';
+export type TRepositoryRole = 'admin' | 'maintainer' | 'developer' | 'reader';
+
+export interface IRepository {
+ id: string;
+ organizationId: string;
+ name: string;
+ description?: string;
+ protocol: TRegistryProtocol;
+ visibility: TRepositoryVisibility;
+ isPublic: boolean;
+ packageCount: number;
+ storageBytes: number;
+ downloadCount: number;
+ createdAt: string;
+}
diff --git a/ts_interfaces/data/token.ts b/ts_interfaces/data/token.ts
new file mode 100644
index 0000000..47f5d90
--- /dev/null
+++ b/ts_interfaces/data/token.ts
@@ -0,0 +1,33 @@
+// ============================================================================
+// Token Data Types
+// ============================================================================
+
+import type { TRegistryProtocol } from './package.ts';
+
+export type TTokenAction = 'read' | 'write' | 'delete' | '*';
+
+export interface ITokenScope {
+ protocol: TRegistryProtocol | '*';
+ organizationId?: string;
+ repositoryId?: string;
+ actions: TTokenAction[];
+}
+
+export interface IToken {
+ id: string;
+ name: string;
+ tokenPrefix: string;
+ protocols: TRegistryProtocol[];
+ scopes: ITokenScope[];
+ organizationId?: string;
+ createdById?: string;
+ expiresAt?: string;
+ lastUsedAt?: string;
+ usageCount: number;
+ createdAt: string;
+}
+
+export interface ITokenCreateResult extends IToken {
+ token: string;
+ warning: string;
+}
diff --git a/ts_interfaces/index.ts b/ts_interfaces/index.ts
new file mode 100644
index 0000000..e08d37f
--- /dev/null
+++ b/ts_interfaces/index.ts
@@ -0,0 +1,5 @@
+import * as plugins from './plugins.ts';
+import * as data from './data/index.ts';
+import * as requests from './requests/index.ts';
+
+export { data, plugins, requests };
diff --git a/ts_interfaces/plugins.ts b/ts_interfaces/plugins.ts
new file mode 100644
index 0000000..b64432f
--- /dev/null
+++ b/ts_interfaces/plugins.ts
@@ -0,0 +1,3 @@
+import * as typedrequestInterfaces from '@api.global/typedrequest-interfaces';
+
+export { typedrequestInterfaces };
diff --git a/ts_interfaces/requests/admin.ts b/ts_interfaces/requests/admin.ts
new file mode 100644
index 0000000..27b271e
--- /dev/null
+++ b/ts_interfaces/requests/admin.ts
@@ -0,0 +1,137 @@
+import * as plugins from '../plugins.ts';
+import * as data from '../data/index.ts';
+
+// ============================================================================
+// Admin Requests
+// ============================================================================
+
+export interface IReq_GetAdminProviders extends
+ plugins.typedrequestInterfaces.implementsTR<
+ plugins.typedrequestInterfaces.ITypedRequest,
+ IReq_GetAdminProviders
+ > {
+ method: 'getAdminProviders';
+ request: {
+ identity: data.IIdentity;
+ };
+ response: {
+ providers: data.IAuthProvider[];
+ };
+}
+
+export interface IReq_CreateAdminProvider extends
+ plugins.typedrequestInterfaces.implementsTR<
+ plugins.typedrequestInterfaces.ITypedRequest,
+ IReq_CreateAdminProvider
+ > {
+ method: 'createAdminProvider';
+ request: {
+ identity: data.IIdentity;
+ name: string;
+ displayName: string;
+ type: data.TAuthProviderType;
+ oauthConfig?: data.IOAuthConfig;
+ ldapConfig?: data.ILdapConfig;
+ attributeMapping?: data.IAttributeMapping;
+ provisioning?: data.IProvisioningSettings;
+ };
+ response: {
+ provider: data.IAuthProvider;
+ };
+}
+
+export interface IReq_GetAdminProvider extends
+ plugins.typedrequestInterfaces.implementsTR<
+ plugins.typedrequestInterfaces.ITypedRequest,
+ IReq_GetAdminProvider
+ > {
+ method: 'getAdminProvider';
+ request: {
+ identity: data.IIdentity;
+ providerId: string;
+ };
+ response: {
+ provider: data.IAuthProvider;
+ };
+}
+
+export interface IReq_UpdateAdminProvider extends
+ plugins.typedrequestInterfaces.implementsTR<
+ plugins.typedrequestInterfaces.ITypedRequest,
+ IReq_UpdateAdminProvider
+ > {
+ method: 'updateAdminProvider';
+ request: {
+ identity: data.IIdentity;
+ providerId: string;
+ displayName?: string;
+ status?: data.TAuthProviderStatus;
+ priority?: number;
+ oauthConfig?: Partial;
+ ldapConfig?: Partial;
+ attributeMapping?: Partial;
+ provisioning?: Partial;
+ };
+ response: {
+ provider: data.IAuthProvider;
+ };
+}
+
+export interface IReq_DeleteAdminProvider extends
+ plugins.typedrequestInterfaces.implementsTR<
+ plugins.typedrequestInterfaces.ITypedRequest,
+ IReq_DeleteAdminProvider
+ > {
+ method: 'deleteAdminProvider';
+ request: {
+ identity: data.IIdentity;
+ providerId: string;
+ };
+ response: {
+ message: string;
+ };
+}
+
+export interface IReq_TestAdminProvider extends
+ plugins.typedrequestInterfaces.implementsTR<
+ plugins.typedrequestInterfaces.ITypedRequest,
+ IReq_TestAdminProvider
+ > {
+ method: 'testAdminProvider';
+ request: {
+ identity: data.IIdentity;
+ providerId: string;
+ };
+ response: {
+ result: data.IConnectionTestResult;
+ };
+}
+
+export interface IReq_GetPlatformSettings extends
+ plugins.typedrequestInterfaces.implementsTR<
+ plugins.typedrequestInterfaces.ITypedRequest,
+ IReq_GetPlatformSettings
+ > {
+ method: 'getPlatformSettings';
+ request: {
+ identity: data.IIdentity;
+ };
+ response: {
+ settings: data.IPlatformSettings;
+ };
+}
+
+export interface IReq_UpdatePlatformSettings extends
+ plugins.typedrequestInterfaces.implementsTR<
+ plugins.typedrequestInterfaces.ITypedRequest,
+ IReq_UpdatePlatformSettings
+ > {
+ method: 'updatePlatformSettings';
+ request: {
+ identity: data.IIdentity;
+ auth?: Partial;
+ };
+ response: {
+ settings: data.IPlatformSettings;
+ };
+}
diff --git a/ts_interfaces/requests/audit.ts b/ts_interfaces/requests/audit.ts
new file mode 100644
index 0000000..2811abf
--- /dev/null
+++ b/ts_interfaces/requests/audit.ts
@@ -0,0 +1,33 @@
+import * as plugins from '../plugins.ts';
+import * as data from '../data/index.ts';
+
+// ============================================================================
+// Audit Requests
+// ============================================================================
+
+export interface IReq_QueryAudit extends
+ plugins.typedrequestInterfaces.implementsTR<
+ plugins.typedrequestInterfaces.ITypedRequest,
+ IReq_QueryAudit
+ > {
+ method: 'queryAudit';
+ request: {
+ identity: data.IIdentity;
+ organizationId?: string;
+ repositoryId?: string;
+ resourceType?: data.TAuditResourceType;
+ actions?: data.TAuditAction[];
+ success?: boolean;
+ startDate?: string;
+ endDate?: string;
+ actorId?: string;
+ limit?: number;
+ offset?: number;
+ };
+ response: {
+ logs: data.IAuditEntry[];
+ total: number;
+ limit: number;
+ offset: number;
+ };
+}
diff --git a/ts_interfaces/requests/auth.ts b/ts_interfaces/requests/auth.ts
new file mode 100644
index 0000000..7d333d0
--- /dev/null
+++ b/ts_interfaces/requests/auth.ts
@@ -0,0 +1,82 @@
+import * as plugins from '../plugins.ts';
+import * as data from '../data/index.ts';
+
+// ============================================================================
+// Auth Requests
+// ============================================================================
+
+export interface IReq_Login extends
+ plugins.typedrequestInterfaces.implementsTR<
+ plugins.typedrequestInterfaces.ITypedRequest,
+ IReq_Login
+ > {
+ method: 'login';
+ request: {
+ email: string;
+ password: string;
+ };
+ response: {
+ identity?: data.IIdentity;
+ user?: data.IUser;
+ errorCode?: string;
+ errorMessage?: string;
+ };
+}
+
+export interface IReq_RefreshToken extends
+ plugins.typedrequestInterfaces.implementsTR<
+ plugins.typedrequestInterfaces.ITypedRequest,
+ IReq_RefreshToken
+ > {
+ method: 'refreshToken';
+ request: {
+ identity: data.IIdentity;
+ };
+ response: {
+ identity: data.IIdentity;
+ };
+}
+
+export interface IReq_Logout extends
+ plugins.typedrequestInterfaces.implementsTR<
+ plugins.typedrequestInterfaces.ITypedRequest,
+ IReq_Logout
+ > {
+ method: 'logout';
+ request: {
+ identity: data.IIdentity;
+ sessionId?: string;
+ all?: boolean;
+ };
+ response: {
+ message: string;
+ };
+}
+
+export interface IReq_GetMe extends
+ plugins.typedrequestInterfaces.implementsTR<
+ plugins.typedrequestInterfaces.ITypedRequest,
+ IReq_GetMe
+ > {
+ method: 'getMe';
+ request: {
+ identity: data.IIdentity;
+ };
+ response: {
+ user: data.IUser;
+ };
+}
+
+export interface IReq_GetAuthProviders extends
+ plugins.typedrequestInterfaces.implementsTR<
+ plugins.typedrequestInterfaces.ITypedRequest,
+ IReq_GetAuthProviders
+ > {
+ method: 'getAuthProviders';
+ request: {};
+ response: {
+ providers: data.IPublicAuthProvider[];
+ localAuthEnabled: boolean;
+ defaultProviderId?: string;
+ };
+}
diff --git a/ts_interfaces/requests/index.ts b/ts_interfaces/requests/index.ts
new file mode 100644
index 0000000..7d049c5
--- /dev/null
+++ b/ts_interfaces/requests/index.ts
@@ -0,0 +1,9 @@
+export * from './auth.ts';
+export * from './oauth.ts';
+export * from './organizations.ts';
+export * from './repositories.ts';
+export * from './packages.ts';
+export * from './tokens.ts';
+export * from './audit.ts';
+export * from './admin.ts';
+export * from './users.ts';
diff --git a/ts_interfaces/requests/oauth.ts b/ts_interfaces/requests/oauth.ts
new file mode 100644
index 0000000..7cc5d2b
--- /dev/null
+++ b/ts_interfaces/requests/oauth.ts
@@ -0,0 +1,61 @@
+import * as plugins from '../plugins.ts';
+import * as data from '../data/index.ts';
+
+// ============================================================================
+// OAuth / External Auth Requests
+// ============================================================================
+
+export interface IReq_OAuthAuthorize extends
+ plugins.typedrequestInterfaces.implementsTR<
+ plugins.typedrequestInterfaces.ITypedRequest,
+ IReq_OAuthAuthorize
+ > {
+ method: 'oauthAuthorize';
+ request: {
+ providerId: string;
+ returnUrl?: string;
+ };
+ response: {
+ redirectUrl: string;
+ };
+}
+
+export interface IReq_OAuthCallback extends
+ plugins.typedrequestInterfaces.implementsTR<
+ plugins.typedrequestInterfaces.ITypedRequest,
+ IReq_OAuthCallback
+ > {
+ method: 'oauthCallback';
+ request: {
+ providerId: string;
+ code: string;
+ state: string;
+ };
+ response: {
+ identity?: data.IIdentity;
+ user?: data.IUser;
+ isNewUser?: boolean;
+ errorCode?: string;
+ errorMessage?: string;
+ };
+}
+
+export interface IReq_LdapLogin extends
+ plugins.typedrequestInterfaces.implementsTR<
+ plugins.typedrequestInterfaces.ITypedRequest,
+ IReq_LdapLogin
+ > {
+ method: 'ldapLogin';
+ request: {
+ providerId: string;
+ username: string;
+ password: string;
+ };
+ response: {
+ identity?: data.IIdentity;
+ user?: data.IUser;
+ isNewUser?: boolean;
+ errorCode?: string;
+ errorMessage?: string;
+ };
+}
diff --git a/ts_interfaces/requests/organizations.ts b/ts_interfaces/requests/organizations.ts
new file mode 100644
index 0000000..03fcc73
--- /dev/null
+++ b/ts_interfaces/requests/organizations.ts
@@ -0,0 +1,161 @@
+import * as plugins from '../plugins.ts';
+import * as data from '../data/index.ts';
+
+// ============================================================================
+// Organization Requests
+// ============================================================================
+
+export interface IReq_GetOrganizations extends
+ plugins.typedrequestInterfaces.implementsTR<
+ plugins.typedrequestInterfaces.ITypedRequest,
+ IReq_GetOrganizations
+ > {
+ method: 'getOrganizations';
+ request: {
+ identity: data.IIdentity;
+ };
+ response: {
+ organizations: data.IOrganization[];
+ };
+}
+
+export interface IReq_GetOrganization extends
+ plugins.typedrequestInterfaces.implementsTR<
+ plugins.typedrequestInterfaces.ITypedRequest,
+ IReq_GetOrganization
+ > {
+ method: 'getOrganization';
+ request: {
+ identity: data.IIdentity;
+ organizationId: string;
+ };
+ response: {
+ organization: data.IOrganizationDetail;
+ };
+}
+
+export interface IReq_CreateOrganization extends
+ plugins.typedrequestInterfaces.implementsTR<
+ plugins.typedrequestInterfaces.ITypedRequest,
+ IReq_CreateOrganization
+ > {
+ method: 'createOrganization';
+ request: {
+ identity: data.IIdentity;
+ name: string;
+ displayName?: string;
+ description?: string;
+ isPublic?: boolean;
+ };
+ response: {
+ organization: data.IOrganization;
+ };
+}
+
+export interface IReq_UpdateOrganization extends
+ plugins.typedrequestInterfaces.implementsTR<
+ plugins.typedrequestInterfaces.ITypedRequest,
+ IReq_UpdateOrganization
+ > {
+ method: 'updateOrganization';
+ request: {
+ identity: data.IIdentity;
+ organizationId: string;
+ displayName?: string;
+ description?: string;
+ avatarUrl?: string;
+ website?: string;
+ isPublic?: boolean;
+ settings?: Partial;
+ };
+ response: {
+ organization: data.IOrganization;
+ };
+}
+
+export interface IReq_DeleteOrganization extends
+ plugins.typedrequestInterfaces.implementsTR<
+ plugins.typedrequestInterfaces.ITypedRequest,
+ IReq_DeleteOrganization
+ > {
+ method: 'deleteOrganization';
+ request: {
+ identity: data.IIdentity;
+ organizationId: string;
+ };
+ response: {
+ message: string;
+ };
+}
+
+export interface IReq_GetOrganizationMembers extends
+ plugins.typedrequestInterfaces.implementsTR<
+ plugins.typedrequestInterfaces.ITypedRequest,
+ IReq_GetOrganizationMembers
+ > {
+ method: 'getOrganizationMembers';
+ request: {
+ identity: data.IIdentity;
+ organizationId: string;
+ };
+ response: {
+ members: data.IOrganizationMember[];
+ };
+}
+
+export interface IReq_AddOrganizationMember extends
+ plugins.typedrequestInterfaces.implementsTR<
+ plugins.typedrequestInterfaces.ITypedRequest,
+ IReq_AddOrganizationMember
+ > {
+ method: 'addOrganizationMember';
+ request: {
+ identity: data.IIdentity;
+ organizationId: string;
+ userId: string;
+ role: data.TOrganizationRole;
+ };
+ response: {
+ member: {
+ userId: string;
+ role: data.TOrganizationRole;
+ addedAt: string;
+ };
+ };
+}
+
+export interface IReq_UpdateOrganizationMember extends
+ plugins.typedrequestInterfaces.implementsTR<
+ plugins.typedrequestInterfaces.ITypedRequest,
+ IReq_UpdateOrganizationMember
+ > {
+ method: 'updateOrganizationMember';
+ request: {
+ identity: data.IIdentity;
+ organizationId: string;
+ userId: string;
+ role: data.TOrganizationRole;
+ };
+ response: {
+ member: {
+ userId: string;
+ role: data.TOrganizationRole;
+ };
+ };
+}
+
+export interface IReq_RemoveOrganizationMember extends
+ plugins.typedrequestInterfaces.implementsTR<
+ plugins.typedrequestInterfaces.ITypedRequest,
+ IReq_RemoveOrganizationMember
+ > {
+ method: 'removeOrganizationMember';
+ request: {
+ identity: data.IIdentity;
+ organizationId: string;
+ userId: string;
+ };
+ response: {
+ message: string;
+ };
+}
diff --git a/ts_interfaces/requests/packages.ts b/ts_interfaces/requests/packages.ts
new file mode 100644
index 0000000..1e4b8fc
--- /dev/null
+++ b/ts_interfaces/requests/packages.ts
@@ -0,0 +1,92 @@
+import * as plugins from '../plugins.ts';
+import * as data from '../data/index.ts';
+
+// ============================================================================
+// Package Requests
+// ============================================================================
+
+export interface IReq_SearchPackages extends
+ plugins.typedrequestInterfaces.implementsTR<
+ plugins.typedrequestInterfaces.ITypedRequest,
+ IReq_SearchPackages
+ > {
+ method: 'searchPackages';
+ request: {
+ identity?: data.IIdentity;
+ query?: string;
+ protocol?: data.TRegistryProtocol;
+ organizationId?: string;
+ limit?: number;
+ offset?: number;
+ };
+ response: {
+ packages: data.IPackage[];
+ total: number;
+ limit: number;
+ offset: number;
+ };
+}
+
+export interface IReq_GetPackage extends
+ plugins.typedrequestInterfaces.implementsTR<
+ plugins.typedrequestInterfaces.ITypedRequest,
+ IReq_GetPackage
+ > {
+ method: 'getPackage';
+ request: {
+ identity?: data.IIdentity;
+ packageId: string;
+ };
+ response: {
+ package: data.IPackageDetail;
+ };
+}
+
+export interface IReq_GetPackageVersions extends
+ plugins.typedrequestInterfaces.implementsTR<
+ plugins.typedrequestInterfaces.ITypedRequest,
+ IReq_GetPackageVersions
+ > {
+ method: 'getPackageVersions';
+ request: {
+ identity?: data.IIdentity;
+ packageId: string;
+ };
+ response: {
+ packageId: string;
+ packageName: string;
+ distTags: Record;
+ versions: data.IPackageVersion[];
+ };
+}
+
+export interface IReq_DeletePackage extends
+ plugins.typedrequestInterfaces.implementsTR<
+ plugins.typedrequestInterfaces.ITypedRequest,
+ IReq_DeletePackage
+ > {
+ method: 'deletePackage';
+ request: {
+ identity: data.IIdentity;
+ packageId: string;
+ };
+ response: {
+ message: string;
+ };
+}
+
+export interface IReq_DeletePackageVersion extends
+ plugins.typedrequestInterfaces.implementsTR<
+ plugins.typedrequestInterfaces.ITypedRequest,
+ IReq_DeletePackageVersion
+ > {
+ method: 'deletePackageVersion';
+ request: {
+ identity: data.IIdentity;
+ packageId: string;
+ version: string;
+ };
+ response: {
+ message: string;
+ };
+}
diff --git a/ts_interfaces/requests/repositories.ts b/ts_interfaces/requests/repositories.ts
new file mode 100644
index 0000000..add49d3
--- /dev/null
+++ b/ts_interfaces/requests/repositories.ts
@@ -0,0 +1,87 @@
+import * as plugins from '../plugins.ts';
+import * as data from '../data/index.ts';
+
+// ============================================================================
+// Repository Requests
+// ============================================================================
+
+export interface IReq_GetRepositories extends
+ plugins.typedrequestInterfaces.implementsTR<
+ plugins.typedrequestInterfaces.ITypedRequest,
+ IReq_GetRepositories
+ > {
+ method: 'getRepositories';
+ request: {
+ identity: data.IIdentity;
+ organizationId: string;
+ };
+ response: {
+ repositories: data.IRepository[];
+ };
+}
+
+export interface IReq_GetRepository extends
+ plugins.typedrequestInterfaces.implementsTR<
+ plugins.typedrequestInterfaces.ITypedRequest,
+ IReq_GetRepository
+ > {
+ method: 'getRepository';
+ request: {
+ identity: data.IIdentity;
+ repositoryId: string;
+ };
+ response: {
+ repository: data.IRepository;
+ };
+}
+
+export interface IReq_CreateRepository extends
+ plugins.typedrequestInterfaces.implementsTR<
+ plugins.typedrequestInterfaces.ITypedRequest,
+ IReq_CreateRepository
+ > {
+ method: 'createRepository';
+ request: {
+ identity: data.IIdentity;
+ organizationId: string;
+ name: string;
+ description?: string;
+ protocol?: data.TRegistryProtocol;
+ visibility?: data.TRepositoryVisibility;
+ };
+ response: {
+ repository: data.IRepository;
+ };
+}
+
+export interface IReq_UpdateRepository extends
+ plugins.typedrequestInterfaces.implementsTR<
+ plugins.typedrequestInterfaces.ITypedRequest,
+ IReq_UpdateRepository
+ > {
+ method: 'updateRepository';
+ request: {
+ identity: data.IIdentity;
+ repositoryId: string;
+ description?: string;
+ visibility?: data.TRepositoryVisibility;
+ };
+ response: {
+ repository: data.IRepository;
+ };
+}
+
+export interface IReq_DeleteRepository extends
+ plugins.typedrequestInterfaces.implementsTR<
+ plugins.typedrequestInterfaces.ITypedRequest,
+ IReq_DeleteRepository
+ > {
+ method: 'deleteRepository';
+ request: {
+ identity: data.IIdentity;
+ repositoryId: string;
+ };
+ response: {
+ message: string;
+ };
+}
diff --git a/ts_interfaces/requests/tokens.ts b/ts_interfaces/requests/tokens.ts
new file mode 100644
index 0000000..1c706e6
--- /dev/null
+++ b/ts_interfaces/requests/tokens.ts
@@ -0,0 +1,55 @@
+import * as plugins from '../plugins.ts';
+import * as data from '../data/index.ts';
+
+// ============================================================================
+// Token Requests
+// ============================================================================
+
+export interface IReq_GetTokens extends
+ plugins.typedrequestInterfaces.implementsTR<
+ plugins.typedrequestInterfaces.ITypedRequest,
+ IReq_GetTokens
+ > {
+ method: 'getTokens';
+ request: {
+ identity: data.IIdentity;
+ organizationId?: string;
+ };
+ response: {
+ tokens: data.IToken[];
+ };
+}
+
+export interface IReq_CreateToken extends
+ plugins.typedrequestInterfaces.implementsTR<
+ plugins.typedrequestInterfaces.ITypedRequest,
+ IReq_CreateToken
+ > {
+ method: 'createToken';
+ request: {
+ identity: data.IIdentity;
+ name: string;
+ organizationId?: string;
+ protocols: data.TRegistryProtocol[];
+ scopes: data.ITokenScope[];
+ expiresInDays?: number;
+ };
+ response: {
+ token: data.ITokenCreateResult;
+ };
+}
+
+export interface IReq_RevokeToken extends
+ plugins.typedrequestInterfaces.implementsTR<
+ plugins.typedrequestInterfaces.ITypedRequest,
+ IReq_RevokeToken
+ > {
+ method: 'revokeToken';
+ request: {
+ identity: data.IIdentity;
+ tokenId: string;
+ };
+ response: {
+ message: string;
+ };
+}
diff --git a/ts_interfaces/requests/users.ts b/ts_interfaces/requests/users.ts
new file mode 100644
index 0000000..4e35d91
--- /dev/null
+++ b/ts_interfaces/requests/users.ts
@@ -0,0 +1,115 @@
+import * as plugins from '../plugins.ts';
+import * as data from '../data/index.ts';
+
+// ============================================================================
+// User Requests
+// ============================================================================
+
+export interface IReq_GetUsers extends
+ plugins.typedrequestInterfaces.implementsTR<
+ plugins.typedrequestInterfaces.ITypedRequest,
+ IReq_GetUsers
+ > {
+ method: 'getUsers';
+ request: {
+ identity: data.IIdentity;
+ };
+ response: {
+ users: data.IUser[];
+ };
+}
+
+export interface IReq_GetUser extends
+ plugins.typedrequestInterfaces.implementsTR<
+ plugins.typedrequestInterfaces.ITypedRequest,
+ IReq_GetUser
+ > {
+ method: 'getUser';
+ request: {
+ identity: data.IIdentity;
+ userId: string;
+ };
+ response: {
+ user: data.IUser;
+ };
+}
+
+export interface IReq_UpdateUser extends
+ plugins.typedrequestInterfaces.implementsTR<
+ plugins.typedrequestInterfaces.ITypedRequest,
+ IReq_UpdateUser
+ > {
+ method: 'updateUser';
+ request: {
+ identity: data.IIdentity;
+ userId: string;
+ displayName?: string;
+ avatarUrl?: string;
+ password?: string;
+ isActive?: boolean;
+ isSystemAdmin?: boolean;
+ };
+ response: {
+ user: data.IUser;
+ };
+}
+
+export interface IReq_GetUserSessions extends
+ plugins.typedrequestInterfaces.implementsTR<
+ plugins.typedrequestInterfaces.ITypedRequest,
+ IReq_GetUserSessions
+ > {
+ method: 'getUserSessions';
+ request: {
+ identity: data.IIdentity;
+ };
+ response: {
+ sessions: data.ISession[];
+ };
+}
+
+export interface IReq_RevokeSession extends
+ plugins.typedrequestInterfaces.implementsTR<
+ plugins.typedrequestInterfaces.ITypedRequest,
+ IReq_RevokeSession
+ > {
+ method: 'revokeSession';
+ request: {
+ identity: data.IIdentity;
+ sessionId: string;
+ };
+ response: {
+ message: string;
+ };
+}
+
+export interface IReq_ChangePassword extends
+ plugins.typedrequestInterfaces.implementsTR<
+ plugins.typedrequestInterfaces.ITypedRequest,
+ IReq_ChangePassword
+ > {
+ method: 'changePassword';
+ request: {
+ identity: data.IIdentity;
+ currentPassword: string;
+ newPassword: string;
+ };
+ response: {
+ message: string;
+ };
+}
+
+export interface IReq_DeleteAccount extends
+ plugins.typedrequestInterfaces.implementsTR<
+ plugins.typedrequestInterfaces.ITypedRequest,
+ IReq_DeleteAccount
+ > {
+ method: 'deleteAccount';
+ request: {
+ identity: data.IIdentity;
+ password: string;
+ };
+ response: {
+ message: string;
+ };
+}
diff --git a/ts_web/00_commitinfo_data.ts b/ts_web/00_commitinfo_data.ts
new file mode 100644
index 0000000..5b61d36
--- /dev/null
+++ b/ts_web/00_commitinfo_data.ts
@@ -0,0 +1,8 @@
+/**
+ * autocreated commitinfo by @push.rocks/commitinfo
+ */
+export const commitinfo = {
+ name: '@stack.gallery/registry',
+ version: '1.5.0',
+ description: 'Enterprise-grade multi-protocol package registry'
+}
diff --git a/ts_web/appstate.ts b/ts_web/appstate.ts
new file mode 100644
index 0000000..0b482fe
--- /dev/null
+++ b/ts_web/appstate.ts
@@ -0,0 +1,663 @@
+import * as plugins from './plugins.js';
+import * as interfaces from '../ts_interfaces/index.js';
+
+// ============================================================================
+// Smartstate instance
+// ============================================================================
+export const appState = new plugins.domtools.plugins.smartstate.Smartstate();
+
+// ============================================================================
+// State Part Interfaces
+// ============================================================================
+
+export interface ILoginState {
+ identity: interfaces.data.IIdentity | null;
+ isLoggedIn: boolean;
+}
+
+export interface IOrganizationsState {
+ organizations: interfaces.data.IOrganization[];
+ currentOrg: interfaces.data.IOrganizationDetail | null;
+ repositories: interfaces.data.IRepository[];
+ members: interfaces.data.IOrganizationMember[];
+}
+
+export interface IPackagesState {
+ packages: interfaces.data.IPackage[];
+ currentPackage: interfaces.data.IPackageDetail | null;
+ versions: interfaces.data.IPackageVersion[];
+ total: number;
+ query: string;
+ protocolFilter: string;
+}
+
+export interface ITokensState {
+ tokens: interfaces.data.IToken[];
+}
+
+export interface ISettingsState {
+ user: interfaces.data.IUser | null;
+ sessions: interfaces.data.ISession[];
+}
+
+export interface IAdminState {
+ providers: interfaces.data.IAuthProvider[];
+ platformSettings: interfaces.data.IPlatformSettings | null;
+}
+
+export interface IUiState {
+ activeView: string;
+ activeEntityId?: string;
+}
+
+// ============================================================================
+// State Parts
+// ============================================================================
+
+export const loginStatePart = await appState.getStatePart(
+ 'login',
+ {
+ identity: null,
+ isLoggedIn: false,
+ },
+ 'persistent',
+);
+
+export const organizationsStatePart = await appState.getStatePart(
+ 'organizations',
+ {
+ organizations: [],
+ currentOrg: null,
+ repositories: [],
+ members: [],
+ },
+ 'soft',
+);
+
+export const packagesStatePart = await appState.getStatePart(
+ 'packages',
+ {
+ packages: [],
+ currentPackage: null,
+ versions: [],
+ total: 0,
+ query: '',
+ protocolFilter: '',
+ },
+ 'soft',
+);
+
+export const tokensStatePart = await appState.getStatePart(
+ 'tokens',
+ { tokens: [] },
+ 'soft',
+);
+
+export const settingsStatePart = await appState.getStatePart(
+ 'settings',
+ { user: null, sessions: [] },
+ 'soft',
+);
+
+export const adminStatePart = await appState.getStatePart(
+ 'admin',
+ { providers: [], platformSettings: null },
+ 'soft',
+);
+
+export const uiStatePart = await appState.getStatePart(
+ 'ui',
+ { activeView: 'dashboard' },
+);
+
+// ============================================================================
+// Helpers
+// ============================================================================
+
+const getActionContext = () => ({
+ identity: loginStatePart.getState().identity,
+});
+
+function createTypedRequest(
+ method: string,
+) {
+ return new plugins.domtools.plugins.typedrequest.TypedRequest('/typedrequest', method);
+}
+
+// ============================================================================
+// Auth Actions
+// ============================================================================
+
+export const loginAction = loginStatePart.createAction<{
+ email: string;
+ password: string;
+}>(async (statePartArg, dataArg) => {
+ try {
+ const typedRequest = createTypedRequest('login');
+ const response = await typedRequest.fire({
+ email: dataArg.email,
+ password: dataArg.password,
+ });
+ if (response.identity) {
+ return { identity: response.identity, isLoggedIn: true };
+ }
+ return { identity: null, isLoggedIn: false };
+ } catch (err) {
+ console.error('Login failed:', err);
+ return { identity: null, isLoggedIn: false };
+ }
+});
+
+export const logoutAction = loginStatePart.createAction(async () => {
+ const context = getActionContext();
+ if (context.identity) {
+ try {
+ const typedRequest = createTypedRequest('logout');
+ await typedRequest.fire({ identity: context.identity });
+ } catch {
+ // Ignore logout errors
+ }
+ }
+ return { identity: null, isLoggedIn: false };
+});
+
+export const refreshTokenAction = loginStatePart.createAction(async (statePartArg) => {
+ const context = getActionContext();
+ if (!context.identity) return statePartArg.getState();
+ try {
+ const typedRequest = createTypedRequest('refreshToken');
+ const response = await typedRequest.fire({ identity: context.identity });
+ return { identity: response.identity, isLoggedIn: true };
+ } catch {
+ return { identity: null, isLoggedIn: false };
+ }
+});
+
+export const fetchMeAction = settingsStatePart.createAction(async (statePartArg) => {
+ const context = getActionContext();
+ if (!context.identity) return statePartArg.getState();
+ try {
+ const typedRequest = createTypedRequest('getMe');
+ const response = await typedRequest.fire({ identity: context.identity });
+ return { ...statePartArg.getState(), user: response.user };
+ } catch {
+ return statePartArg.getState();
+ }
+});
+
+// Handle OAuth callback tokens
+export function handleOAuthCallback(
+ accessToken: string,
+ refreshToken: string,
+ sessionId: string,
+) {
+ // Build a minimal identity from the callback tokens
+ // The full identity will be populated when getMe is called
+ loginStatePart.setState({
+ identity: {
+ jwt: accessToken,
+ refreshJwt: refreshToken,
+ userId: '',
+ email: '',
+ username: '',
+ displayName: '',
+ isSystemAdmin: false,
+ expiresAt: Date.now() + 900000,
+ sessionId,
+ },
+ isLoggedIn: true,
+ });
+}
+
+// ============================================================================
+// Organization Actions
+// ============================================================================
+
+export const fetchOrganizationsAction = organizationsStatePart.createAction(
+ async (statePartArg) => {
+ const context = getActionContext();
+ if (!context.identity) return statePartArg.getState();
+ try {
+ const typedRequest = createTypedRequest(
+ 'getOrganizations',
+ );
+ const response = await typedRequest.fire({ identity: context.identity });
+ return { ...statePartArg.getState(), organizations: response.organizations };
+ } catch {
+ return statePartArg.getState();
+ }
+ },
+);
+
+export const fetchOrganizationAction = organizationsStatePart.createAction<{
+ organizationId: string;
+}>(async (statePartArg, dataArg) => {
+ const context = getActionContext();
+ if (!context.identity) return statePartArg.getState();
+ try {
+ const typedRequest = createTypedRequest(
+ 'getOrganization',
+ );
+ const response = await typedRequest.fire({
+ identity: context.identity,
+ organizationId: dataArg.organizationId,
+ });
+ return { ...statePartArg.getState(), currentOrg: response.organization };
+ } catch {
+ return statePartArg.getState();
+ }
+});
+
+export const createOrganizationAction = organizationsStatePart.createAction<{
+ name: string;
+ displayName?: string;
+ description?: string;
+}>(async (statePartArg, dataArg) => {
+ const context = getActionContext();
+ if (!context.identity) return statePartArg.getState();
+ try {
+ const typedRequest = createTypedRequest(
+ 'createOrganization',
+ );
+ await typedRequest.fire({
+ identity: context.identity,
+ name: dataArg.name,
+ displayName: dataArg.displayName,
+ description: dataArg.description,
+ });
+ // Re-fetch list
+ const listReq = createTypedRequest(
+ 'getOrganizations',
+ );
+ const listResp = await listReq.fire({ identity: context.identity });
+ return { ...statePartArg.getState(), organizations: listResp.organizations };
+ } catch {
+ return statePartArg.getState();
+ }
+});
+
+export const deleteOrganizationAction = organizationsStatePart.createAction<{
+ organizationId: string;
+}>(async (statePartArg, dataArg) => {
+ const context = getActionContext();
+ if (!context.identity) return statePartArg.getState();
+ try {
+ const typedRequest = createTypedRequest(
+ 'deleteOrganization',
+ );
+ await typedRequest.fire({
+ identity: context.identity,
+ organizationId: dataArg.organizationId,
+ });
+ const listReq = createTypedRequest(
+ 'getOrganizations',
+ );
+ const listResp = await listReq.fire({ identity: context.identity });
+ return {
+ ...statePartArg.getState(),
+ organizations: listResp.organizations,
+ currentOrg: null,
+ };
+ } catch {
+ return statePartArg.getState();
+ }
+});
+
+export const fetchRepositoriesAction = organizationsStatePart.createAction<{
+ organizationId: string;
+}>(async (statePartArg, dataArg) => {
+ const context = getActionContext();
+ if (!context.identity) return statePartArg.getState();
+ try {
+ const typedRequest = createTypedRequest(
+ 'getRepositories',
+ );
+ const response = await typedRequest.fire({
+ identity: context.identity,
+ organizationId: dataArg.organizationId,
+ });
+ return { ...statePartArg.getState(), repositories: response.repositories };
+ } catch {
+ return statePartArg.getState();
+ }
+});
+
+export const fetchMembersAction = organizationsStatePart.createAction<{
+ organizationId: string;
+}>(async (statePartArg, dataArg) => {
+ const context = getActionContext();
+ if (!context.identity) return statePartArg.getState();
+ try {
+ const typedRequest = createTypedRequest(
+ 'getOrganizationMembers',
+ );
+ const response = await typedRequest.fire({
+ identity: context.identity,
+ organizationId: dataArg.organizationId,
+ });
+ return { ...statePartArg.getState(), members: response.members };
+ } catch {
+ return statePartArg.getState();
+ }
+});
+
+// ============================================================================
+// Package Actions
+// ============================================================================
+
+export const searchPackagesAction = packagesStatePart.createAction<{
+ query?: string;
+ protocol?: string;
+ offset?: number;
+}>(async (statePartArg, dataArg) => {
+ const context = getActionContext();
+ try {
+ const typedRequest = createTypedRequest(
+ 'searchPackages',
+ );
+ const response = await typedRequest.fire({
+ identity: context.identity || undefined,
+ query: dataArg.query,
+ protocol: dataArg.protocol as interfaces.data.TRegistryProtocol | undefined,
+ offset: dataArg.offset,
+ limit: 50,
+ });
+ return {
+ ...statePartArg.getState(),
+ packages: response.packages,
+ total: response.total,
+ query: dataArg.query || '',
+ protocolFilter: dataArg.protocol || '',
+ };
+ } catch {
+ return statePartArg.getState();
+ }
+});
+
+export const fetchPackageAction = packagesStatePart.createAction<{
+ packageId: string;
+}>(async (statePartArg, dataArg) => {
+ const context = getActionContext();
+ try {
+ const typedRequest = createTypedRequest('getPackage');
+ const response = await typedRequest.fire({
+ identity: context.identity || undefined,
+ packageId: dataArg.packageId,
+ });
+ return { ...statePartArg.getState(), currentPackage: response.package };
+ } catch {
+ return statePartArg.getState();
+ }
+});
+
+export const fetchPackageVersionsAction = packagesStatePart.createAction<{
+ packageId: string;
+}>(async (statePartArg, dataArg) => {
+ const context = getActionContext();
+ try {
+ const typedRequest = createTypedRequest(
+ 'getPackageVersions',
+ );
+ const response = await typedRequest.fire({
+ identity: context.identity || undefined,
+ packageId: dataArg.packageId,
+ });
+ return { ...statePartArg.getState(), versions: response.versions };
+ } catch {
+ return statePartArg.getState();
+ }
+});
+
+export const deletePackageAction = packagesStatePart.createAction<{
+ packageId: string;
+}>(async (statePartArg, dataArg) => {
+ const context = getActionContext();
+ if (!context.identity) return statePartArg.getState();
+ try {
+ const typedRequest = createTypedRequest(
+ 'deletePackage',
+ );
+ await typedRequest.fire({ identity: context.identity, packageId: dataArg.packageId });
+ return { ...statePartArg.getState(), currentPackage: null };
+ } catch {
+ return statePartArg.getState();
+ }
+});
+
+// ============================================================================
+// Token Actions
+// ============================================================================
+
+export const fetchTokensAction = tokensStatePart.createAction<{
+ organizationId?: string;
+}>(async (statePartArg, dataArg) => {
+ const context = getActionContext();
+ if (!context.identity) return statePartArg.getState();
+ try {
+ const typedRequest = createTypedRequest('getTokens');
+ const response = await typedRequest.fire({
+ identity: context.identity,
+ organizationId: dataArg?.organizationId,
+ });
+ return { tokens: response.tokens };
+ } catch {
+ return statePartArg.getState();
+ }
+});
+
+export const createTokenAction = tokensStatePart.createAction<{
+ name: string;
+ protocols: interfaces.data.TRegistryProtocol[];
+ scopes: interfaces.data.ITokenScope[];
+ organizationId?: string;
+ expiresInDays?: number;
+}>(async (statePartArg, dataArg) => {
+ const context = getActionContext();
+ if (!context.identity) return statePartArg.getState();
+ try {
+ const typedRequest = createTypedRequest('createToken');
+ await typedRequest.fire({
+ identity: context.identity,
+ ...dataArg,
+ });
+ // Re-fetch
+ const listReq = createTypedRequest('getTokens');
+ const listResp = await listReq.fire({ identity: context.identity });
+ return { tokens: listResp.tokens };
+ } catch {
+ return statePartArg.getState();
+ }
+});
+
+export const revokeTokenAction = tokensStatePart.createAction<{
+ tokenId: string;
+}>(async (statePartArg, dataArg) => {
+ const context = getActionContext();
+ if (!context.identity) return statePartArg.getState();
+ try {
+ const typedRequest = createTypedRequest('revokeToken');
+ await typedRequest.fire({
+ identity: context.identity,
+ tokenId: dataArg.tokenId,
+ });
+ const listReq = createTypedRequest('getTokens');
+ const listResp = await listReq.fire({ identity: context.identity });
+ return { tokens: listResp.tokens };
+ } catch {
+ return statePartArg.getState();
+ }
+});
+
+// ============================================================================
+// Settings Actions
+// ============================================================================
+
+export const fetchUserSessionsAction = settingsStatePart.createAction(async (statePartArg) => {
+ const context = getActionContext();
+ if (!context.identity) return statePartArg.getState();
+ try {
+ const typedRequest = createTypedRequest(
+ 'getUserSessions',
+ );
+ const response = await typedRequest.fire({ identity: context.identity });
+ return { ...statePartArg.getState(), sessions: response.sessions };
+ } catch {
+ return statePartArg.getState();
+ }
+});
+
+export const changePasswordAction = settingsStatePart.createAction<{
+ currentPassword: string;
+ newPassword: string;
+}>(async (statePartArg, dataArg) => {
+ const context = getActionContext();
+ if (!context.identity) return statePartArg.getState();
+ const typedRequest = createTypedRequest(
+ 'changePassword',
+ );
+ await typedRequest.fire({
+ identity: context.identity,
+ currentPassword: dataArg.currentPassword,
+ newPassword: dataArg.newPassword,
+ });
+ return statePartArg.getState();
+});
+
+export const updateProfileAction = settingsStatePart.createAction<{
+ displayName?: string;
+ avatarUrl?: string;
+}>(async (statePartArg, dataArg) => {
+ const context = getActionContext();
+ if (!context.identity) return statePartArg.getState();
+ try {
+ const typedRequest = createTypedRequest('updateUser');
+ const response = await typedRequest.fire({
+ identity: context.identity,
+ userId: context.identity.userId,
+ ...dataArg,
+ });
+ return { ...statePartArg.getState(), user: response.user };
+ } catch {
+ return statePartArg.getState();
+ }
+});
+
+export const revokeSessionAction = settingsStatePart.createAction<{
+ sessionId: string;
+}>(async (statePartArg, dataArg) => {
+ const context = getActionContext();
+ if (!context.identity) return statePartArg.getState();
+ try {
+ const typedRequest = createTypedRequest(
+ 'revokeSession',
+ );
+ await typedRequest.fire({
+ identity: context.identity,
+ sessionId: dataArg.sessionId,
+ });
+ // Re-fetch sessions
+ const listReq = createTypedRequest('getUserSessions');
+ const listResp = await listReq.fire({ identity: context.identity });
+ return { ...statePartArg.getState(), sessions: listResp.sessions };
+ } catch {
+ return statePartArg.getState();
+ }
+});
+
+// ============================================================================
+// Admin Actions
+// ============================================================================
+
+export const fetchAdminProvidersAction = adminStatePart.createAction(async (statePartArg) => {
+ const context = getActionContext();
+ if (!context.identity) return statePartArg.getState();
+ try {
+ const typedRequest = createTypedRequest(
+ 'getAdminProviders',
+ );
+ const response = await typedRequest.fire({ identity: context.identity });
+ return { ...statePartArg.getState(), providers: response.providers };
+ } catch {
+ return statePartArg.getState();
+ }
+});
+
+export const fetchPlatformSettingsAction = adminStatePart.createAction(async (statePartArg) => {
+ const context = getActionContext();
+ if (!context.identity) return statePartArg.getState();
+ try {
+ const typedRequest = createTypedRequest(
+ 'getPlatformSettings',
+ );
+ const response = await typedRequest.fire({ identity: context.identity });
+ return { ...statePartArg.getState(), platformSettings: response.settings };
+ } catch {
+ return statePartArg.getState();
+ }
+});
+
+export const updatePlatformSettingsAction = adminStatePart.createAction<{
+ auth?: Partial;
+}>(async (statePartArg, dataArg) => {
+ const context = getActionContext();
+ if (!context.identity) return statePartArg.getState();
+ try {
+ const typedRequest = createTypedRequest(
+ 'updatePlatformSettings',
+ );
+ const response = await typedRequest.fire({
+ identity: context.identity,
+ auth: dataArg.auth,
+ });
+ return { ...statePartArg.getState(), platformSettings: response.settings };
+ } catch {
+ return statePartArg.getState();
+ }
+});
+
+export const deleteAdminProviderAction = adminStatePart.createAction<{
+ providerId: string;
+}>(async (statePartArg, dataArg) => {
+ const context = getActionContext();
+ if (!context.identity) return statePartArg.getState();
+ try {
+ const typedRequest = createTypedRequest(
+ 'deleteAdminProvider',
+ );
+ await typedRequest.fire({
+ identity: context.identity,
+ providerId: dataArg.providerId,
+ });
+ const listReq = createTypedRequest(
+ 'getAdminProviders',
+ );
+ const listResp = await listReq.fire({ identity: context.identity });
+ return { ...statePartArg.getState(), providers: listResp.providers };
+ } catch {
+ return statePartArg.getState();
+ }
+});
+
+export const testAdminProviderAction = adminStatePart.createAction<{
+ providerId: string;
+}>(async (statePartArg, dataArg) => {
+ const context = getActionContext();
+ if (!context.identity) return statePartArg.getState();
+ try {
+ const typedRequest = createTypedRequest(
+ 'testAdminProvider',
+ );
+ await typedRequest.fire({
+ identity: context.identity,
+ providerId: dataArg.providerId,
+ });
+ // Re-fetch to get updated test results
+ const listReq = createTypedRequest(
+ 'getAdminProviders',
+ );
+ const listResp = await listReq.fire({ identity: context.identity });
+ return { ...statePartArg.getState(), providers: listResp.providers };
+ } catch {
+ return statePartArg.getState();
+ }
+});
diff --git a/ts_web/elements/index.ts b/ts_web/elements/index.ts
new file mode 100644
index 0000000..8f00b64
--- /dev/null
+++ b/ts_web/elements/index.ts
@@ -0,0 +1,8 @@
+export * from './shared/index.js';
+export * from './sg-app-shell.js';
+export * from './sg-view-dashboard.js';
+export * from './sg-view-organizations.js';
+export * from './sg-view-packages.js';
+export * from './sg-view-tokens.js';
+export * from './sg-view-settings.js';
+export * from './sg-view-admin.js';
diff --git a/ts_web/elements/sg-app-shell.ts b/ts_web/elements/sg-app-shell.ts
new file mode 100644
index 0000000..674738f
--- /dev/null
+++ b/ts_web/elements/sg-app-shell.ts
@@ -0,0 +1,289 @@
+import * as plugins from '../plugins.js';
+import * as appstate from '../appstate.js';
+import * as interfaces from '../../ts_interfaces/index.js';
+import { appRouter } from '../router.js';
+import {
+ DeesElement,
+ customElement,
+ html,
+ state,
+ css,
+ cssManager,
+ type TemplateResult,
+} from '@design.estate/dees-element';
+
+import type { SgViewDashboard } from './sg-view-dashboard.js';
+import type { SgViewOrganizations } from './sg-view-organizations.js';
+import type { SgViewPackages } from './sg-view-packages.js';
+import type { SgViewTokens } from './sg-view-tokens.js';
+import type { SgViewSettings } from './sg-view-settings.js';
+import type { SgViewAdmin } from './sg-view-admin.js';
+
+@customElement('sg-app-shell')
+export class SgAppShell extends DeesElement {
+ @state()
+ accessor loginState: appstate.ILoginState = { identity: null, isLoggedIn: false };
+
+ @state()
+ accessor uiState: appstate.IUiState = { activeView: 'dashboard' };
+
+ @state()
+ accessor loginLoading: boolean = false;
+
+ @state()
+ accessor loginError: string = '';
+
+ @state()
+ accessor authProviders: interfaces.data.IPublicAuthProvider[] = [];
+
+ @state()
+ accessor localAuthEnabled: boolean = true;
+
+ private viewTabs = [
+ {
+ name: 'Dashboard',
+ iconName: 'lucide:layoutDashboard',
+ element: (async () => (await import('./sg-view-dashboard.js')).SgViewDashboard)(),
+ },
+ {
+ name: 'Organizations',
+ iconName: 'lucide:building2',
+ element: (async () => (await import('./sg-view-organizations.js')).SgViewOrganizations)(),
+ },
+ {
+ name: 'Packages',
+ iconName: 'lucide:package',
+ element: (async () => (await import('./sg-view-packages.js')).SgViewPackages)(),
+ },
+ {
+ name: 'Tokens',
+ iconName: 'lucide:key',
+ element: (async () => (await import('./sg-view-tokens.js')).SgViewTokens)(),
+ },
+ {
+ name: 'Settings',
+ iconName: 'lucide:settings',
+ element: (async () => (await import('./sg-view-settings.js')).SgViewSettings)(),
+ },
+ {
+ name: 'Admin',
+ iconName: 'lucide:shield',
+ element: (async () => (await import('./sg-view-admin.js')).SgViewAdmin)(),
+ },
+ ];
+
+ private resolvedViewTabs: Array<{ name: string; iconName?: string; element: any }> = [];
+
+ constructor() {
+ super();
+ document.title = 'Stack.Gallery Registry';
+
+ // Make appRouter globally accessible for view elements
+ (globalThis as any).__sgAppRouter = appRouter;
+
+ const loginSubscription = appstate.loginStatePart
+ .select((s) => s)
+ .subscribe((loginState) => {
+ this.loginState = loginState;
+ });
+ this.rxSubscriptions.push(loginSubscription);
+
+ const uiSubscription = appstate.uiStatePart
+ .select((s) => s)
+ .subscribe((uiState) => {
+ this.uiState = uiState;
+ this.syncAppdashView(uiState.activeView);
+ });
+ this.rxSubscriptions.push(uiSubscription);
+ }
+
+ public static styles = [
+ cssManager.defaultStyles,
+ css`
+ :host {
+ display: block;
+ width: 100%;
+ height: 100%;
+ }
+ .maincontainer {
+ width: 100%;
+ height: 100vh;
+ }
+ `,
+ ];
+
+ public render(): TemplateResult {
+ if (!this.loginState.isLoggedIn) {
+ return html`
+
+ this.handleLocalLogin(e)}
+ @oauth-login=${(e: CustomEvent) => this.handleOAuthLogin(e)}
+ @ldap-login=${(e: CustomEvent) => this.handleLdapLogin(e)}
+ >
+
+ `;
+ }
+
+ return html`
+
+ t.name.toLowerCase().replace(/\s+/g, '-') === this.uiState.activeView,
+ ) || this.resolvedViewTabs[0]}
+ >
+
+
+ `;
+ }
+
+ public async firstUpdated() {
+ // Fetch auth providers for login page
+ this.fetchAuthProviders();
+
+ // Resolve async view tab imports
+ const allTabs = await Promise.all(
+ this.viewTabs.map(async (tab) => ({
+ name: tab.name,
+ iconName: tab.iconName,
+ element: await tab.element,
+ })),
+ );
+
+ // Filter admin tab based on user role
+ this.resolvedViewTabs = this.loginState.identity?.isSystemAdmin
+ ? allTabs
+ : allTabs.filter((t) => t.name !== 'Admin');
+
+ this.requestUpdate();
+ await this.updateComplete;
+
+ const appDash = this.shadowRoot!.querySelector('dees-simple-appdash') as any;
+ if (appDash) {
+ appDash.addEventListener('view-select', (e: CustomEvent) => {
+ const viewName = e.detail.view.name.toLowerCase().replace(/\s+/g, '-');
+ appRouter.navigateToView(viewName);
+ });
+ appDash.addEventListener('logout', async () => {
+ await appstate.loginStatePart.dispatchAction(appstate.logoutAction, null);
+ });
+
+ // Load initial view
+ if (this.resolvedViewTabs.length > 0) {
+ const currentActiveView = appstate.uiStatePart.getState().activeView;
+ const initialView = this.resolvedViewTabs.find(
+ (t) => t.name.toLowerCase().replace(/\s+/g, '-') === currentActiveView,
+ ) || this.resolvedViewTabs[0];
+ await appDash.loadView(initialView);
+ }
+ }
+
+ // Check for stored session
+ const loginState = appstate.loginStatePart.getState();
+ if (loginState.identity?.jwt) {
+ if (loginState.identity.expiresAt > Date.now()) {
+ // Validate token with server in the background
+ try {
+ await appstate.settingsStatePart.dispatchAction(appstate.fetchMeAction, null);
+ } catch {
+ console.warn('Stored session invalid, returning to login');
+ await appstate.loginStatePart.dispatchAction(appstate.logoutAction, null);
+ }
+ } else {
+ // Token expired, try refresh
+ const newState = await appstate.loginStatePart.dispatchAction(
+ appstate.refreshTokenAction, null,
+ );
+ if (!newState.isLoggedIn) {
+ // Refresh failed
+ await appstate.loginStatePart.dispatchAction(appstate.logoutAction, null);
+ }
+ }
+ }
+ }
+
+ private async fetchAuthProviders() {
+ try {
+ const typedRequest = new plugins.domtools.plugins.typedrequest.TypedRequest<
+ interfaces.requests.IReq_GetAuthProviders
+ >('/typedrequest', 'getAuthProviders');
+ const response = await typedRequest.fire({});
+ this.authProviders = response.providers;
+ this.localAuthEnabled = response.localAuthEnabled;
+ } catch {
+ // Default to local auth if we can't fetch providers
+ this.localAuthEnabled = true;
+ }
+ }
+
+ private async handleLocalLogin(e: CustomEvent) {
+ const { email, password } = e.detail;
+ this.loginLoading = true;
+ this.loginError = '';
+ try {
+ const newState = await appstate.loginStatePart.dispatchAction(appstate.loginAction, {
+ email,
+ password,
+ });
+ if (!newState.isLoggedIn) {
+ this.loginError = 'Invalid email or password';
+ }
+ } catch {
+ this.loginError = 'Login failed. Please try again.';
+ }
+ this.loginLoading = false;
+ }
+
+ private async handleOAuthLogin(e: CustomEvent) {
+ const { providerId } = e.detail;
+ try {
+ const typedRequest = new plugins.domtools.plugins.typedrequest.TypedRequest<
+ interfaces.requests.IReq_OAuthAuthorize
+ >('/typedrequest', 'oauthAuthorize');
+ const response = await typedRequest.fire({ providerId });
+ // Redirect to OAuth provider
+ window.location.href = response.redirectUrl;
+ } catch {
+ this.loginError = 'OAuth login failed. Please try again.';
+ }
+ }
+
+ private async handleLdapLogin(e: CustomEvent) {
+ const { providerId, username, password } = e.detail;
+ this.loginLoading = true;
+ this.loginError = '';
+ try {
+ const typedRequest = new plugins.domtools.plugins.typedrequest.TypedRequest<
+ interfaces.requests.IReq_LdapLogin
+ >('/typedrequest', 'ldapLogin');
+ const response = await typedRequest.fire({ providerId, username, password });
+ if (response.identity) {
+ appstate.loginStatePart.setState({
+ identity: response.identity,
+ isLoggedIn: true,
+ });
+ } else {
+ this.loginError = response.errorMessage || 'LDAP login failed';
+ }
+ } catch {
+ this.loginError = 'LDAP login failed. Please try again.';
+ }
+ this.loginLoading = false;
+ }
+
+ private syncAppdashView(viewName: string): void {
+ const appDash = this.shadowRoot?.querySelector('dees-simple-appdash') as any;
+ if (!appDash || this.resolvedViewTabs.length === 0) return;
+ const targetTab = this.resolvedViewTabs.find(
+ (t) => t.name.toLowerCase().replace(/\s+/g, '-') === viewName,
+ );
+ if (!targetTab) return;
+ appDash.loadView(targetTab);
+ }
+}
diff --git a/ts_web/elements/sg-view-admin.ts b/ts_web/elements/sg-view-admin.ts
new file mode 100644
index 0000000..1e03692
--- /dev/null
+++ b/ts_web/elements/sg-view-admin.ts
@@ -0,0 +1,100 @@
+import * as appstate from '../appstate.js';
+import * as shared from './shared/index.js';
+import {
+ css,
+ cssManager,
+ customElement,
+ DeesElement,
+ html,
+ state,
+ type TemplateResult,
+} from '@design.estate/dees-element';
+
+@customElement('sg-view-admin')
+export class SgViewAdmin extends DeesElement {
+ @state()
+ accessor adminState: appstate.IAdminState = { providers: [], platformSettings: null };
+
+ @state()
+ accessor editingProviderId: string | null = null;
+
+ constructor() {
+ super();
+ const sub = appstate.adminStatePart
+ .select((s) => s)
+ .subscribe((s) => {
+ this.adminState = s;
+ });
+ this.rxSubscriptions.push(sub);
+ }
+
+ public static styles = [
+ cssManager.defaultStyles,
+ shared.viewHostCss,
+ ];
+
+ async connectedCallback() {
+ super.connectedCallback();
+ await appstate.adminStatePart.dispatchAction(appstate.fetchAdminProvidersAction, null);
+ await appstate.adminStatePart.dispatchAction(appstate.fetchPlatformSettingsAction, null);
+ }
+
+ public render(): TemplateResult {
+ if (this.editingProviderId !== null) {
+ const provider = this.editingProviderId
+ ? this.adminState.providers.find((p) => p.id === this.editingProviderId) || null
+ : null;
+ return html`
+ this.saveProvider(e.detail)}"
+ @cancel="${() => {
+ this.editingProviderId = null;
+ }}"
+ >
+ `;
+ }
+
+ return html`
+ {
+ this.editingProviderId = '';
+ }}"
+ @edit="${(e: CustomEvent) => {
+ this.editingProviderId = e.detail.providerId;
+ }}"
+ @delete="${(e: CustomEvent) => this.deleteProvider(e.detail.providerId)}"
+ @test="${(e: CustomEvent) => this.testProvider(e.detail.providerId)}"
+ @save-settings="${(e: CustomEvent) => this.saveSettings(e.detail.settings)}"
+ >
+ `;
+ }
+
+ private async saveProvider(detail: any) {
+ // TODO: implement create/update provider
+ this.editingProviderId = null;
+ }
+
+ private async deleteProvider(providerId: string) {
+ await appstate.adminStatePart.dispatchAction(
+ appstate.deleteAdminProviderAction,
+ { providerId },
+ );
+ }
+
+ private async testProvider(providerId: string) {
+ await appstate.adminStatePart.dispatchAction(
+ appstate.testAdminProviderAction,
+ { providerId },
+ );
+ }
+
+ private async saveSettings(settings: any) {
+ await appstate.adminStatePart.dispatchAction(
+ appstate.updatePlatformSettingsAction,
+ { auth: settings },
+ );
+ }
+}
diff --git a/ts_web/elements/sg-view-dashboard.ts b/ts_web/elements/sg-view-dashboard.ts
new file mode 100644
index 0000000..ba328b9
--- /dev/null
+++ b/ts_web/elements/sg-view-dashboard.ts
@@ -0,0 +1,100 @@
+import * as appstate from '../appstate.js';
+import * as shared from './shared/index.js';
+import {
+ css,
+ cssManager,
+ customElement,
+ DeesElement,
+ html,
+ state,
+ type TemplateResult,
+} from '@design.estate/dees-element';
+
+@customElement('sg-view-dashboard')
+export class SgViewDashboard extends DeesElement {
+ @state()
+ accessor organizationsState: appstate.IOrganizationsState = {
+ organizations: [],
+ currentOrg: null,
+ repositories: [],
+ members: [],
+ };
+
+ @state()
+ accessor packagesState: appstate.IPackagesState = {
+ packages: [],
+ currentPackage: null,
+ versions: [],
+ total: 0,
+ query: '',
+ protocolFilter: '',
+ };
+
+ constructor() {
+ super();
+ const orgSub = appstate.organizationsStatePart
+ .select((s) => s)
+ .subscribe((s) => {
+ this.organizationsState = s;
+ });
+ this.rxSubscriptions.push(orgSub);
+
+ const pkgSub = appstate.packagesStatePart
+ .select((s) => s)
+ .subscribe((s) => {
+ this.packagesState = s;
+ });
+ this.rxSubscriptions.push(pkgSub);
+ }
+
+ public static styles = [
+ cssManager.defaultStyles,
+ shared.viewHostCss,
+ ];
+
+ async connectedCallback() {
+ super.connectedCallback();
+ await appstate.organizationsStatePart.dispatchAction(appstate.fetchOrganizationsAction, null);
+ await appstate.packagesStatePart.dispatchAction(appstate.searchPackagesAction, { offset: 0 });
+ }
+
+ public render(): TemplateResult {
+ return html`
+ this.handleNavigate(e)}"
+ >
+ `;
+ }
+
+ private handleNavigate(e: CustomEvent) {
+ const { type, id } = e.detail;
+ if (type === 'org' && id) {
+ const { appRouter } = await_import_router();
+ appRouter.navigateToEntity('organizations', id);
+ } else if (type === 'package' && id) {
+ const { appRouter } = await_import_router();
+ appRouter.navigateToEntity('packages', id);
+ } else if (type === 'packages') {
+ const { appRouter } = await_import_router();
+ appRouter.navigateToView('packages');
+ } else if (type === 'tokens') {
+ const { appRouter } = await_import_router();
+ appRouter.navigateToView('tokens');
+ }
+ }
+}
+
+// Lazy import to avoid circular dependency
+function await_import_router() {
+ // Dynamic import not needed here since router is a separate module
+ // We use a workaround by importing at the module level
+ return { appRouter: (globalThis as any).__sgAppRouter };
+}
diff --git a/ts_web/elements/sg-view-organizations.ts b/ts_web/elements/sg-view-organizations.ts
new file mode 100644
index 0000000..e1d7ad1
--- /dev/null
+++ b/ts_web/elements/sg-view-organizations.ts
@@ -0,0 +1,127 @@
+import * as appstate from '../appstate.js';
+import * as shared from './shared/index.js';
+import {
+ css,
+ cssManager,
+ customElement,
+ DeesElement,
+ html,
+ state,
+ type TemplateResult,
+} from '@design.estate/dees-element';
+
+@customElement('sg-view-organizations')
+export class SgViewOrganizations extends DeesElement {
+ @state()
+ accessor organizationsState: appstate.IOrganizationsState = {
+ organizations: [],
+ currentOrg: null,
+ repositories: [],
+ members: [],
+ };
+
+ @state()
+ accessor uiState: appstate.IUiState = { activeView: 'organizations' };
+
+ constructor() {
+ super();
+ const orgSub = appstate.organizationsStatePart
+ .select((s) => s)
+ .subscribe((s) => {
+ this.organizationsState = s;
+ });
+ this.rxSubscriptions.push(orgSub);
+
+ const uiSub = appstate.uiStatePart
+ .select((s) => s)
+ .subscribe((s) => {
+ this.uiState = s;
+ });
+ this.rxSubscriptions.push(uiSub);
+ }
+
+ public static styles = [
+ cssManager.defaultStyles,
+ shared.viewHostCss,
+ ];
+
+ async connectedCallback() {
+ super.connectedCallback();
+ await appstate.organizationsStatePart.dispatchAction(appstate.fetchOrganizationsAction, null);
+ // If there's an entity ID, load the detail
+ if (this.uiState.activeEntityId) {
+ await this.loadOrgDetail(this.uiState.activeEntityId);
+ }
+ }
+
+ private async loadOrgDetail(orgId: string) {
+ await appstate.organizationsStatePart.dispatchAction(
+ appstate.fetchOrganizationAction,
+ { organizationId: orgId },
+ );
+ await appstate.organizationsStatePart.dispatchAction(
+ appstate.fetchRepositoriesAction,
+ { organizationId: orgId },
+ );
+ await appstate.organizationsStatePart.dispatchAction(
+ appstate.fetchMembersAction,
+ { organizationId: orgId },
+ );
+ }
+
+ public render(): TemplateResult {
+ if (this.uiState.activeEntityId && this.organizationsState.currentOrg) {
+ return html`
+ this.goBack()}"
+ @select-repo="${(e: CustomEvent) => this.selectRepo(e.detail.repositoryId)}"
+ @create-repo="${() => {/* TODO: create repo modal */}}"
+ >
+ `;
+ }
+
+ return html`
+ this.selectOrg(e.detail.organizationId)}"
+ @create="${(e: CustomEvent) => this.createOrg(e.detail)}"
+ >
+ `;
+ }
+
+ private selectOrg(orgId: string) {
+ appstate.uiStatePart.setState({
+ ...appstate.uiStatePart.getState(),
+ activeEntityId: orgId,
+ });
+ this.loadOrgDetail(orgId);
+ }
+
+ private selectRepo(repoId: string) {
+ // Navigate to repository within org context
+ // For now, we could switch to packages view
+ }
+
+ private goBack() {
+ appstate.uiStatePart.setState({
+ ...appstate.uiStatePart.getState(),
+ activeEntityId: undefined,
+ });
+ appstate.organizationsStatePart.setState({
+ ...appstate.organizationsStatePart.getState(),
+ currentOrg: null,
+ repositories: [],
+ members: [],
+ });
+ }
+
+ private async createOrg(data: { name: string; displayName?: string; description?: string }) {
+ await appstate.organizationsStatePart.dispatchAction(
+ appstate.createOrganizationAction,
+ data,
+ );
+ }
+}
diff --git a/ts_web/elements/sg-view-packages.ts b/ts_web/elements/sg-view-packages.ts
new file mode 100644
index 0000000..e7e3f16
--- /dev/null
+++ b/ts_web/elements/sg-view-packages.ts
@@ -0,0 +1,156 @@
+import * as appstate from '../appstate.js';
+import * as shared from './shared/index.js';
+import {
+ css,
+ cssManager,
+ customElement,
+ DeesElement,
+ html,
+ state,
+ type TemplateResult,
+} from '@design.estate/dees-element';
+
+@customElement('sg-view-packages')
+export class SgViewPackages extends DeesElement {
+ @state()
+ accessor packagesState: appstate.IPackagesState = {
+ packages: [],
+ currentPackage: null,
+ versions: [],
+ total: 0,
+ query: '',
+ protocolFilter: '',
+ };
+
+ @state()
+ accessor uiState: appstate.IUiState = { activeView: 'packages' };
+
+ constructor() {
+ super();
+ const pkgSub = appstate.packagesStatePart
+ .select((s) => s)
+ .subscribe((s) => {
+ this.packagesState = s;
+ });
+ this.rxSubscriptions.push(pkgSub);
+
+ const uiSub = appstate.uiStatePart
+ .select((s) => s)
+ .subscribe((s) => {
+ this.uiState = s;
+ });
+ this.rxSubscriptions.push(uiSub);
+ }
+
+ public static styles = [
+ cssManager.defaultStyles,
+ shared.viewHostCss,
+ ];
+
+ async connectedCallback() {
+ super.connectedCallback();
+ if (this.uiState.activeEntityId) {
+ await this.loadPackageDetail(this.uiState.activeEntityId);
+ } else {
+ await appstate.packagesStatePart.dispatchAction(
+ appstate.searchPackagesAction,
+ { offset: 0 },
+ );
+ }
+ }
+
+ private async loadPackageDetail(packageId: string) {
+ await appstate.packagesStatePart.dispatchAction(
+ appstate.fetchPackageAction,
+ { packageId },
+ );
+ await appstate.packagesStatePart.dispatchAction(
+ appstate.fetchPackageVersionsAction,
+ { packageId },
+ );
+ }
+
+ public render(): TemplateResult {
+ if (this.uiState.activeEntityId && this.packagesState.currentPackage) {
+ return html`
+ this.goBack()}"
+ @delete="${(e: CustomEvent) => this.deletePackage(e.detail.packageId)}"
+ @delete-version="${(e: CustomEvent) => this.deleteVersion(e.detail)}"
+ >
+ `;
+ }
+
+ return html`
+ this.search(e.detail.query)}"
+ @filter="${(e: CustomEvent) => this.filter(e.detail.protocol)}"
+ @select="${(e: CustomEvent) => this.selectPackage(e.detail.packageId)}"
+ @page="${(e: CustomEvent) => this.paginate(e.detail.offset)}"
+ >
+ `;
+ }
+
+ private selectPackage(packageId: string) {
+ appstate.uiStatePart.setState({
+ ...appstate.uiStatePart.getState(),
+ activeEntityId: packageId,
+ });
+ this.loadPackageDetail(packageId);
+ }
+
+ private goBack() {
+ appstate.uiStatePart.setState({
+ ...appstate.uiStatePart.getState(),
+ activeEntityId: undefined,
+ });
+ appstate.packagesStatePart.setState({
+ ...appstate.packagesStatePart.getState(),
+ currentPackage: null,
+ versions: [],
+ });
+ }
+
+ private async search(query: string) {
+ await appstate.packagesStatePart.dispatchAction(
+ appstate.searchPackagesAction,
+ { query, protocol: this.packagesState.protocolFilter, offset: 0 },
+ );
+ }
+
+ private async filter(protocol: string) {
+ await appstate.packagesStatePart.dispatchAction(
+ appstate.searchPackagesAction,
+ { query: this.packagesState.query, protocol, offset: 0 },
+ );
+ }
+
+ private async paginate(offset: number) {
+ await appstate.packagesStatePart.dispatchAction(
+ appstate.searchPackagesAction,
+ {
+ query: this.packagesState.query,
+ protocol: this.packagesState.protocolFilter,
+ offset,
+ },
+ );
+ }
+
+ private async deletePackage(packageId: string) {
+ await appstate.packagesStatePart.dispatchAction(
+ appstate.deletePackageAction,
+ { packageId },
+ );
+ this.goBack();
+ }
+
+ private async deleteVersion(detail: { packageId: string; version: string }) {
+ // TODO: implement deletePackageVersion action
+ }
+}
diff --git a/ts_web/elements/sg-view-settings.ts b/ts_web/elements/sg-view-settings.ts
new file mode 100644
index 0000000..3bfe38c
--- /dev/null
+++ b/ts_web/elements/sg-view-settings.ts
@@ -0,0 +1,67 @@
+import * as appstate from '../appstate.js';
+import * as shared from './shared/index.js';
+import {
+ css,
+ cssManager,
+ customElement,
+ DeesElement,
+ html,
+ state,
+ type TemplateResult,
+} from '@design.estate/dees-element';
+
+@customElement('sg-view-settings')
+export class SgViewSettings extends DeesElement {
+ @state()
+ accessor settingsState: appstate.ISettingsState = { user: null, sessions: [] };
+
+ constructor() {
+ super();
+ const sub = appstate.settingsStatePart
+ .select((s) => s)
+ .subscribe((s) => {
+ this.settingsState = s;
+ });
+ this.rxSubscriptions.push(sub);
+ }
+
+ public static styles = [
+ cssManager.defaultStyles,
+ shared.viewHostCss,
+ ];
+
+ async connectedCallback() {
+ super.connectedCallback();
+ await appstate.settingsStatePart.dispatchAction(appstate.fetchMeAction, null);
+ await appstate.settingsStatePart.dispatchAction(appstate.fetchUserSessionsAction, null);
+ }
+
+ public render(): TemplateResult {
+ return html`
+ this.saveProfile(e.detail)}"
+ @change-password="${(e: CustomEvent) => this.changePassword(e.detail)}"
+ @revoke-session="${(e: CustomEvent) => this.revokeSession(e.detail.sessionId)}"
+ @delete-account="${(e: CustomEvent) => this.deleteAccount(e.detail.password)}"
+ >
+ `;
+ }
+
+ private async saveProfile(detail: { displayName?: string; avatarUrl?: string }) {
+ await appstate.settingsStatePart.dispatchAction(appstate.updateProfileAction, detail);
+ }
+
+ private async changePassword(detail: { currentPassword: string; newPassword: string }) {
+ await appstate.settingsStatePart.dispatchAction(appstate.changePasswordAction, detail);
+ }
+
+ private async revokeSession(sessionId: string) {
+ await appstate.settingsStatePart.dispatchAction(appstate.revokeSessionAction, { sessionId });
+ }
+
+ private async deleteAccount(password: string) {
+ // TODO: implement delete account action
+ }
+}
diff --git a/ts_web/elements/sg-view-tokens.ts b/ts_web/elements/sg-view-tokens.ts
new file mode 100644
index 0000000..cc8cad4
--- /dev/null
+++ b/ts_web/elements/sg-view-tokens.ts
@@ -0,0 +1,72 @@
+import * as appstate from '../appstate.js';
+import * as shared from './shared/index.js';
+import {
+ css,
+ cssManager,
+ customElement,
+ DeesElement,
+ html,
+ state,
+ type TemplateResult,
+} from '@design.estate/dees-element';
+
+@customElement('sg-view-tokens')
+export class SgViewTokens extends DeesElement {
+ @state()
+ accessor tokensState: appstate.ITokensState = { tokens: [] };
+
+ @state()
+ accessor organizationsState: appstate.IOrganizationsState = {
+ organizations: [],
+ currentOrg: null,
+ repositories: [],
+ members: [],
+ };
+
+ constructor() {
+ super();
+ const tokenSub = appstate.tokensStatePart
+ .select((s) => s)
+ .subscribe((s) => {
+ this.tokensState = s;
+ });
+ this.rxSubscriptions.push(tokenSub);
+
+ const orgSub = appstate.organizationsStatePart
+ .select((s) => s)
+ .subscribe((s) => {
+ this.organizationsState = s;
+ });
+ this.rxSubscriptions.push(orgSub);
+ }
+
+ public static styles = [
+ cssManager.defaultStyles,
+ shared.viewHostCss,
+ ];
+
+ async connectedCallback() {
+ super.connectedCallback();
+ await appstate.tokensStatePart.dispatchAction(appstate.fetchTokensAction, {});
+ await appstate.organizationsStatePart.dispatchAction(appstate.fetchOrganizationsAction, null);
+ }
+
+ public render(): TemplateResult {
+ return html`
+ this.createToken(e.detail)}"
+ @revoke="${(e: CustomEvent) => this.revokeToken(e.detail.tokenId)}"
+ >
+ `;
+ }
+
+ private async createToken(detail: any) {
+ await appstate.tokensStatePart.dispatchAction(appstate.createTokenAction, detail);
+ }
+
+ private async revokeToken(tokenId: string) {
+ await appstate.tokensStatePart.dispatchAction(appstate.revokeTokenAction, { tokenId });
+ }
+}
diff --git a/ts_web/elements/shared/css.ts b/ts_web/elements/shared/css.ts
new file mode 100644
index 0000000..54e6227
--- /dev/null
+++ b/ts_web/elements/shared/css.ts
@@ -0,0 +1,12 @@
+import { css } from '@design.estate/dees-element';
+
+export const viewHostCss = css`
+ :host {
+ display: block;
+ width: 100%;
+ height: 100%;
+ overflow-y: auto;
+ padding: 24px;
+ box-sizing: border-box;
+ }
+`;
diff --git a/ts_web/elements/shared/index.ts b/ts_web/elements/shared/index.ts
new file mode 100644
index 0000000..70d7106
--- /dev/null
+++ b/ts_web/elements/shared/index.ts
@@ -0,0 +1,2 @@
+export * from './css.js';
+export * from './sg-sectionheading.js';
diff --git a/ts_web/elements/shared/sg-sectionheading.ts b/ts_web/elements/shared/sg-sectionheading.ts
new file mode 100644
index 0000000..290d35e
--- /dev/null
+++ b/ts_web/elements/shared/sg-sectionheading.ts
@@ -0,0 +1,43 @@
+import {
+ css,
+ cssManager,
+ customElement,
+ DeesElement,
+ html,
+ type TemplateResult,
+} from '@design.estate/dees-element';
+
+declare global {
+ interface HTMLElementTagNameMap {
+ 'sg-sectionheading': SgSectionheading;
+ }
+}
+
+@customElement('sg-sectionheading')
+export class SgSectionheading extends DeesElement {
+ public static styles = [
+ cssManager.defaultStyles,
+ css`
+ :host {
+ display: block;
+ margin-bottom: 16px;
+ }
+ .heading {
+ font-size: 20px;
+ font-weight: 700;
+ color: ${cssManager.bdTheme('#111', '#fff')};
+ font-family: "JetBrains Mono", monospace;
+ padding-bottom: 8px;
+ border-bottom: 2px solid ${cssManager.bdTheme('#111', '#fff')};
+ }
+ `,
+ ];
+
+ public render(): TemplateResult {
+ return html`
+
+
+
+ `;
+ }
+}
diff --git a/ts_web/index.ts b/ts_web/index.ts
new file mode 100644
index 0000000..25a2dff
--- /dev/null
+++ b/ts_web/index.ts
@@ -0,0 +1,14 @@
+import * as plugins from './plugins.js';
+import { html } from '@design.estate/dees-element';
+import './elements/index.js';
+import { appRouter } from './router.js';
+
+// Initialize router before rendering (handles initial URL -> state)
+appRouter.init();
+
+plugins.deesElement.render(
+ html`
+
+`,
+ document.body,
+);
diff --git a/ts_web/plugins.ts b/ts_web/plugins.ts
new file mode 100644
index 0000000..623a365
--- /dev/null
+++ b/ts_web/plugins.ts
@@ -0,0 +1,11 @@
+// @design.estate scope
+import * as deesElement from '@design.estate/dees-element';
+import * as deesCatalog from '@design.estate/dees-catalog';
+
+// @stack.gallery scope — side-effect import registers all sg-* custom elements
+import '@stack.gallery/catalog';
+
+export { deesCatalog, deesElement };
+
+// domtools gives us TypedRequest, smartstate, smartrouter, and other utilities
+export const domtools = deesElement.domtools;
diff --git a/ts_web/router.ts b/ts_web/router.ts
new file mode 100644
index 0000000..67d762e
--- /dev/null
+++ b/ts_web/router.ts
@@ -0,0 +1,155 @@
+import * as plugins from './plugins.js';
+import * as appstate from './appstate.js';
+
+const SmartRouter = plugins.domtools.plugins.smartrouter.SmartRouter;
+
+export const validViews = [
+ 'dashboard',
+ 'organizations',
+ 'packages',
+ 'tokens',
+ 'settings',
+ 'admin',
+] as const;
+
+export type TValidView = typeof validViews[number];
+
+class AppRouter {
+ private router: InstanceType;
+ private initialized = false;
+ private suppressStateUpdate = false;
+
+ constructor() {
+ this.router = new SmartRouter({ debug: false });
+ }
+
+ public init(): void {
+ if (this.initialized) return;
+ this.setupRoutes();
+ this.setupStateSync();
+ this.handleInitialRoute();
+ this.initialized = true;
+ }
+
+ private setupRoutes(): void {
+ for (const view of validViews) {
+ this.router.on(`/${view}`, async () => {
+ this.updateViewState(view);
+ });
+ }
+
+ // Root redirect
+ this.router.on('/', async () => {
+ this.navigateTo('/dashboard');
+ });
+ }
+
+ private setupStateSync(): void {
+ appstate.uiStatePart.select((s) => s.activeView).subscribe((activeView) => {
+ if (this.suppressStateUpdate) return;
+
+ const currentPath = window.location.pathname;
+ const expectedPath = `/${activeView}`;
+
+ if (currentPath !== expectedPath) {
+ this.suppressStateUpdate = true;
+ this.router.pushUrl(expectedPath);
+ this.suppressStateUpdate = false;
+ }
+ });
+ }
+
+ private handleInitialRoute(): void {
+ const path = window.location.pathname;
+
+ // Handle OAuth callback
+ if (path === '/oauth-callback') {
+ this.handleOAuthCallback();
+ return;
+ }
+
+ if (!path || path === '/') {
+ this.router.pushUrl('/dashboard');
+ } else {
+ const segments = path.split('/').filter(Boolean);
+ const view = segments[0];
+
+ if (validViews.includes(view as TValidView)) {
+ this.updateViewState(view as TValidView);
+ // If there's a sub-path, store the entity ID
+ if (segments[1]) {
+ const currentState = appstate.uiStatePart.getState();
+ appstate.uiStatePart.setState({
+ ...currentState,
+ activeEntityId: segments[1],
+ });
+ }
+ } else {
+ this.router.pushUrl('/dashboard');
+ }
+ }
+ }
+
+ private handleOAuthCallback(): void {
+ const params = new URLSearchParams(window.location.search);
+ const accessToken = params.get('accessToken');
+ const refreshToken = params.get('refreshToken');
+ const sessionId = params.get('sessionId');
+
+ if (accessToken && refreshToken && sessionId) {
+ // Store tokens and redirect to dashboard
+ // The app shell will pick up the identity from loginStatePart
+ appstate.handleOAuthCallback(accessToken, refreshToken, sessionId);
+ }
+
+ // Redirect to dashboard
+ this.navigateTo('/dashboard');
+ }
+
+ private updateViewState(view: string): void {
+ this.suppressStateUpdate = true;
+ const currentState = appstate.uiStatePart.getState();
+ if (currentState.activeView !== view) {
+ appstate.uiStatePart.setState({
+ ...currentState,
+ activeView: view,
+ activeEntityId: undefined,
+ });
+ }
+ this.suppressStateUpdate = false;
+ }
+
+ public navigateTo(path: string): void {
+ this.router.pushUrl(path);
+ }
+
+ public navigateToView(view: string): void {
+ const normalized = view.toLowerCase().replace(/\s+/g, '-');
+ if (validViews.includes(normalized as TValidView)) {
+ this.navigateTo(`/${normalized}`);
+ } else {
+ this.navigateTo('/dashboard');
+ }
+ }
+
+ public navigateToEntity(view: string, entityId: string): void {
+ const currentState = appstate.uiStatePart.getState();
+ appstate.uiStatePart.setState({
+ ...currentState,
+ activeView: view,
+ activeEntityId: entityId,
+ });
+ this.router.pushUrl(`/${view}/${entityId}`);
+ }
+
+ public getCurrentView(): string {
+ return appstate.uiStatePart.getState().activeView;
+ }
+
+ public destroy(): void {
+ this.router.destroy();
+ this.initialized = false;
+ }
+}
+
+export const appRouter = new AppRouter();
diff --git a/ui/angular.json b/ui/angular.json
deleted file mode 100644
index c88fda7..0000000
--- a/ui/angular.json
+++ /dev/null
@@ -1,94 +0,0 @@
-{
- "$schema": "./node_modules/@angular/cli/lib/config/schema.json",
- "version": 1,
- "newProjectRoot": "projects",
- "projects": {
- "registry-ui": {
- "projectType": "application",
- "schematics": {},
- "root": "",
- "sourceRoot": "src",
- "prefix": "app",
- "architect": {
- "build": {
- "builder": "@angular-devkit/build-angular:application",
- "options": {
- "outputPath": "dist/registry-ui",
- "index": "src/index.html",
- "browser": "src/main.ts",
- "polyfills": [],
- "tsConfig": "tsconfig.app.json",
- "assets": [
- {
- "glob": "**/*",
- "input": "public"
- }
- ],
- "styles": [
- "src/styles.css"
- ],
- "scripts": []
- },
- "configurations": {
- "production": {
- "budgets": [
- {
- "type": "initial",
- "maximumWarning": "500kB",
- "maximumError": "1MB"
- },
- {
- "type": "anyComponentStyle",
- "maximumWarning": "4kB",
- "maximumError": "8kB"
- }
- ],
- "outputHashing": "all"
- },
- "development": {
- "optimization": false,
- "extractLicenses": false,
- "sourceMap": true
- }
- },
- "defaultConfiguration": "production"
- },
- "serve": {
- "builder": "@angular-devkit/build-angular:dev-server",
- "options": {
- "proxyConfig": "proxy.conf.json"
- },
- "configurations": {
- "production": {
- "buildTarget": "registry-ui:build:production"
- },
- "development": {
- "buildTarget": "registry-ui:build:development"
- }
- },
- "defaultConfiguration": "development"
- },
- "extract-i18n": {
- "builder": "@angular-devkit/build-angular:extract-i18n"
- },
- "test": {
- "builder": "@angular-devkit/build-angular:karma",
- "options": {
- "polyfills": [],
- "tsConfig": "tsconfig.spec.json",
- "assets": [
- {
- "glob": "**/*",
- "input": "public"
- }
- ],
- "styles": [
- "src/styles.css"
- ],
- "scripts": []
- }
- }
- }
- }
- }
-}
diff --git a/ui/package.json b/ui/package.json
deleted file mode 100644
index 21b4dc1..0000000
--- a/ui/package.json
+++ /dev/null
@@ -1,34 +0,0 @@
-{
- "name": "@stack.gallery/registry-ui",
- "version": "1.0.0",
- "private": true,
- "scripts": {
- "ng": "ng",
- "start": "ng serve",
- "build": "ng build",
- "watch": "ng build --watch --configuration development",
- "test": "ng test"
- },
- "dependencies": {
- "@angular/animations": "^19.0.0",
- "@angular/common": "^19.0.0",
- "@angular/compiler": "^19.0.0",
- "@angular/core": "^19.0.0",
- "@angular/forms": "^19.0.0",
- "@angular/platform-browser": "^19.0.0",
- "@angular/platform-browser-dynamic": "^19.0.0",
- "@angular/router": "^19.0.0",
- "rxjs": "~7.8.0",
- "tslib": "^2.6.0"
- },
- "devDependencies": {
- "@angular-devkit/build-angular": "^19.0.0",
- "@angular/cli": "^19.0.0",
- "@angular/compiler-cli": "^19.0.0",
- "@types/node": "^20.0.0",
- "autoprefixer": "^10.4.0",
- "postcss": "^8.4.0",
- "tailwindcss": "^3.4.0",
- "typescript": "~5.6.0"
- }
-}
diff --git a/ui/pnpm-lock.yaml b/ui/pnpm-lock.yaml
deleted file mode 100644
index 862c3a9..0000000
--- a/ui/pnpm-lock.yaml
+++ /dev/null
@@ -1,8529 +0,0 @@
-lockfileVersion: '9.0'
-
-settings:
- autoInstallPeers: true
- excludeLinksFromLockfile: false
-
-importers:
-
- .:
- dependencies:
- '@angular/animations':
- specifier: ^19.0.0
- version: 19.2.16(@angular/common@19.2.16(@angular/core@19.2.16(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.16(rxjs@7.8.2)(zone.js@0.15.1))
- '@angular/common':
- specifier: ^19.0.0
- version: 19.2.16(@angular/core@19.2.16(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2)
- '@angular/compiler':
- specifier: ^19.0.0
- version: 19.2.16
- '@angular/core':
- specifier: ^19.0.0
- version: 19.2.16(rxjs@7.8.2)(zone.js@0.15.1)
- '@angular/forms':
- specifier: ^19.0.0
- version: 19.2.16(@angular/common@19.2.16(@angular/core@19.2.16(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.16(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@19.2.16(@angular/animations@19.2.16(@angular/common@19.2.16(@angular/core@19.2.16(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.16(rxjs@7.8.2)(zone.js@0.15.1)))(@angular/common@19.2.16(@angular/core@19.2.16(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.16(rxjs@7.8.2)(zone.js@0.15.1)))(rxjs@7.8.2)
- '@angular/platform-browser':
- specifier: ^19.0.0
- version: 19.2.16(@angular/animations@19.2.16(@angular/common@19.2.16(@angular/core@19.2.16(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.16(rxjs@7.8.2)(zone.js@0.15.1)))(@angular/common@19.2.16(@angular/core@19.2.16(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.16(rxjs@7.8.2)(zone.js@0.15.1))
- '@angular/platform-browser-dynamic':
- specifier: ^19.0.0
- version: 19.2.16(@angular/common@19.2.16(@angular/core@19.2.16(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/compiler@19.2.16)(@angular/core@19.2.16(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@19.2.16(@angular/animations@19.2.16(@angular/common@19.2.16(@angular/core@19.2.16(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.16(rxjs@7.8.2)(zone.js@0.15.1)))(@angular/common@19.2.16(@angular/core@19.2.16(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.16(rxjs@7.8.2)(zone.js@0.15.1)))
- '@angular/router':
- specifier: ^19.0.0
- version: 19.2.16(@angular/common@19.2.16(@angular/core@19.2.16(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.16(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@19.2.16(@angular/animations@19.2.16(@angular/common@19.2.16(@angular/core@19.2.16(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.16(rxjs@7.8.2)(zone.js@0.15.1)))(@angular/common@19.2.16(@angular/core@19.2.16(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.16(rxjs@7.8.2)(zone.js@0.15.1)))(rxjs@7.8.2)
- rxjs:
- specifier: ~7.8.0
- version: 7.8.2
- tslib:
- specifier: ^2.6.0
- version: 2.8.1
- devDependencies:
- '@angular-devkit/build-angular':
- specifier: ^19.0.0
- version: 19.2.19(@angular/compiler-cli@19.2.16(@angular/compiler@19.2.16)(typescript@5.6.3))(@angular/compiler@19.2.16)(@types/node@20.19.25)(chokidar@4.0.3)(jiti@1.21.7)(tailwindcss@3.4.18)(typescript@5.6.3)(vite@6.4.1(@types/node@20.19.25)(jiti@1.21.7)(less@4.2.2)(sass@1.85.0)(terser@5.39.0))
- '@angular/cli':
- specifier: ^19.0.0
- version: 19.2.19(@types/node@20.19.25)(chokidar@4.0.3)
- '@angular/compiler-cli':
- specifier: ^19.0.0
- version: 19.2.16(@angular/compiler@19.2.16)(typescript@5.6.3)
- '@types/node':
- specifier: ^20.0.0
- version: 20.19.25
- autoprefixer:
- specifier: ^10.4.0
- version: 10.4.22(postcss@8.5.6)
- postcss:
- specifier: ^8.4.0
- version: 8.5.6
- tailwindcss:
- specifier: ^3.4.0
- version: 3.4.18
- typescript:
- specifier: ~5.6.0
- version: 5.6.3
-
-packages:
-
- '@alloc/quick-lru@5.2.0':
- resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==}
- engines: {node: '>=10'}
-
- '@ampproject/remapping@2.3.0':
- resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
- engines: {node: '>=6.0.0'}
-
- '@angular-devkit/architect@0.1902.19':
- resolution: {integrity: sha512-iexYDIYpGAeAU7T60bGcfrGwtq1bxpZixYxWuHYiaD1b5baQgNSfd1isGEOh37GgDNsf4In9i2LOLPm0wBdtgQ==}
- engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'}
-
- '@angular-devkit/build-angular@19.2.19':
- resolution: {integrity: sha512-uIxi6Vzss6+ycljVhkyPUPWa20w8qxJL9lEn0h6+sX/fhM8Djt0FHIuTQjoX58EoMaQ/1jrXaRaGimkbaFcG9A==}
- engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'}
- peerDependencies:
- '@angular/compiler-cli': ^19.0.0 || ^19.2.0-next.0
- '@angular/localize': ^19.0.0 || ^19.2.0-next.0
- '@angular/platform-server': ^19.0.0 || ^19.2.0-next.0
- '@angular/service-worker': ^19.0.0 || ^19.2.0-next.0
- '@angular/ssr': ^19.2.19
- '@web/test-runner': ^0.20.0
- browser-sync: ^3.0.2
- jest: ^29.5.0
- jest-environment-jsdom: ^29.5.0
- karma: ^6.3.0
- ng-packagr: ^19.0.0 || ^19.2.0-next.0
- protractor: ^7.0.0
- tailwindcss: ^2.0.0 || ^3.0.0 || ^4.0.0
- typescript: '>=5.5 <5.9'
- peerDependenciesMeta:
- '@angular/localize':
- optional: true
- '@angular/platform-server':
- optional: true
- '@angular/service-worker':
- optional: true
- '@angular/ssr':
- optional: true
- '@web/test-runner':
- optional: true
- browser-sync:
- optional: true
- jest:
- optional: true
- jest-environment-jsdom:
- optional: true
- karma:
- optional: true
- ng-packagr:
- optional: true
- protractor:
- optional: true
- tailwindcss:
- optional: true
-
- '@angular-devkit/build-webpack@0.1902.19':
- resolution: {integrity: sha512-x2tlGg5CsUveFzuRuqeHknSbGirSAoRynEh+KqPRGK0G3WpMViW/M8SuVurecasegfIrDWtYZ4FnVxKqNbKwXQ==}
- engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'}
- peerDependencies:
- webpack: ^5.30.0
- webpack-dev-server: ^5.0.2
-
- '@angular-devkit/core@19.2.19':
- resolution: {integrity: sha512-JbLL+4IMLMBgjLZlnPG4lYDfz4zGrJ/s6Aoon321NJKuw1Kb1k5KpFu9dUY0BqLIe8xPQ2UJBpI+xXdK5MXMHQ==}
- engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'}
- peerDependencies:
- chokidar: ^4.0.0
- peerDependenciesMeta:
- chokidar:
- optional: true
-
- '@angular-devkit/schematics@19.2.19':
- resolution: {integrity: sha512-J4Jarr0SohdrHcb40gTL4wGPCQ952IMWF1G/MSAQfBAPvA9ZKApYhpxcY7PmehVePve+ujpus1dGsJ7dPxz8Kg==}
- engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'}
-
- '@angular/animations@19.2.16':
- resolution: {integrity: sha512-K9kHMgHR49hBy6brFI9N4t0yWytcAHZER8zYhcsCoBhdJI69b5Va2Hm88g1bwrHCbw2laCkKOc3LsLpSr3s12A==}
- engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0}
- peerDependencies:
- '@angular/common': 19.2.16
- '@angular/core': 19.2.16
-
- '@angular/build@19.2.19':
- resolution: {integrity: sha512-SFzQ1bRkNFiOVu+aaz+9INmts7tDUrsHLEr9HmARXr9qk5UmR8prlw39p2u+Bvi6/lCiJ18TZMQQl9mGyr63lg==}
- engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'}
- peerDependencies:
- '@angular/compiler': ^19.0.0 || ^19.2.0-next.0
- '@angular/compiler-cli': ^19.0.0 || ^19.2.0-next.0
- '@angular/localize': ^19.0.0 || ^19.2.0-next.0
- '@angular/platform-server': ^19.0.0 || ^19.2.0-next.0
- '@angular/service-worker': ^19.0.0 || ^19.2.0-next.0
- '@angular/ssr': ^19.2.19
- karma: ^6.4.0
- less: ^4.2.0
- ng-packagr: ^19.0.0 || ^19.2.0-next.0
- postcss: ^8.4.0
- tailwindcss: ^2.0.0 || ^3.0.0 || ^4.0.0
- typescript: '>=5.5 <5.9'
- peerDependenciesMeta:
- '@angular/localize':
- optional: true
- '@angular/platform-server':
- optional: true
- '@angular/service-worker':
- optional: true
- '@angular/ssr':
- optional: true
- karma:
- optional: true
- less:
- optional: true
- ng-packagr:
- optional: true
- postcss:
- optional: true
- tailwindcss:
- optional: true
-
- '@angular/cli@19.2.19':
- resolution: {integrity: sha512-e9tAzFNOL4mMWfMnpC9Up83OCTOp2siIj8W41FCp8jfoEnw79AXDDLh3d70kOayiObchksTJVShslTogLUyhMw==}
- engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'}
- hasBin: true
-
- '@angular/common@19.2.16':
- resolution: {integrity: sha512-sugztO7XIiLRoVjn0WJK9ooBm9zejsqlE5k4ZGvy1zFafM8LMjFHwD4KymN8JB3AOb7Ad4lJHVq1IvwWnpqeWw==}
- engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0}
- peerDependencies:
- '@angular/core': 19.2.16
- rxjs: ^6.5.3 || ^7.4.0
-
- '@angular/compiler-cli@19.2.16':
- resolution: {integrity: sha512-DCpEY6krTRcgLgRp/CmYxJ0JCB1LWyXPfEGIAxdDq8QFT2e+DM+MDMMB2n7VE3vr1Cx+Xz3QgZQ9qwRkGybBKQ==}
- engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0}
- hasBin: true
- peerDependencies:
- '@angular/compiler': 19.2.16
- typescript: '>=5.5 <5.9'
-
- '@angular/compiler@19.2.16':
- resolution: {integrity: sha512-7aZxmk1FRi0gWbZIxXyQ4zRm3tfQ9HiyjL6z6CphC8WthH4oq4JhfuW5zpx0CzHSchcR2Gsnox7VKrekklvtVQ==}
- engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0}
-
- '@angular/core@19.2.16':
- resolution: {integrity: sha512-aBt4rYq0sMonUsl7k9kHAVgeP+6NM3CNGVvxqLmeSiQI2BUTWTTvfGR/52cQyUmDBuBRmaV6YK0F3zEAnOZzyA==}
- engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0}
- peerDependencies:
- rxjs: ^6.5.3 || ^7.4.0
- zone.js: ~0.15.0
-
- '@angular/forms@19.2.16':
- resolution: {integrity: sha512-463Blq8gcpBTTH5qdInbdnHeNVsQagsBHNa0NUJIK1lGiaxfAf5mnCosZdi1nu/rqtwE9CZgyRm7WidzoemGaA==}
- engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0}
- peerDependencies:
- '@angular/common': 19.2.16
- '@angular/core': 19.2.16
- '@angular/platform-browser': 19.2.16
- rxjs: ^6.5.3 || ^7.4.0
-
- '@angular/platform-browser-dynamic@19.2.16':
- resolution: {integrity: sha512-bq4wqUgVAR9cr5QzjLjuSXEHo1Cstx8z/z1gZz0OM9HMSnA95bgPvQMtwtuZYOds0ItOUsLMDyFsDiAD3dAAmw==}
- engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0}
- peerDependencies:
- '@angular/common': 19.2.16
- '@angular/compiler': 19.2.16
- '@angular/core': 19.2.16
- '@angular/platform-browser': 19.2.16
-
- '@angular/platform-browser@19.2.16':
- resolution: {integrity: sha512-oDg0YWE0ZxW6AI2m5Da4fAVIhmNrrXLCvzE7bKZjBK1FsFx6FduBfQFsCg4K7D+72aGj0WDmEia8IVcBDtwvog==}
- engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0}
- peerDependencies:
- '@angular/animations': 19.2.16
- '@angular/common': 19.2.16
- '@angular/core': 19.2.16
- peerDependenciesMeta:
- '@angular/animations':
- optional: true
-
- '@angular/router@19.2.16':
- resolution: {integrity: sha512-vQMrZKmdU9rKz7HhT2wmXDGci2+bsLj37VPwoZOU/b0BCyK+5LM/OVpDvpA4yM42SXbRLqv28nXcVPoiz97HUg==}
- engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0}
- peerDependencies:
- '@angular/common': 19.2.16
- '@angular/core': 19.2.16
- '@angular/platform-browser': 19.2.16
- rxjs: ^6.5.3 || ^7.4.0
-
- '@babel/code-frame@7.27.1':
- resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==}
- engines: {node: '>=6.9.0'}
-
- '@babel/compat-data@7.28.5':
- resolution: {integrity: sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==}
- engines: {node: '>=6.9.0'}
-
- '@babel/core@7.26.10':
- resolution: {integrity: sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==}
- engines: {node: '>=6.9.0'}
-
- '@babel/core@7.26.9':
- resolution: {integrity: sha512-lWBYIrF7qK5+GjY5Uy+/hEgp8OJWOD/rpy74GplYRhEauvbHDeFB8t5hPOZxCZ0Oxf4Cc36tK51/l3ymJysrKw==}
- engines: {node: '>=6.9.0'}
-
- '@babel/generator@7.26.10':
- resolution: {integrity: sha512-rRHT8siFIXQrAYOYqZQVsAr8vJ+cBNqcVAY6m5V8/4QqzaPl+zDBe6cLEPRDuNOUf3ww8RfJVlOyQMoSI+5Ang==}
- engines: {node: '>=6.9.0'}
-
- '@babel/generator@7.28.5':
- resolution: {integrity: sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==}
- engines: {node: '>=6.9.0'}
-
- '@babel/helper-annotate-as-pure@7.25.9':
- resolution: {integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==}
- engines: {node: '>=6.9.0'}
-
- '@babel/helper-annotate-as-pure@7.27.3':
- resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==}
- engines: {node: '>=6.9.0'}
-
- '@babel/helper-compilation-targets@7.27.2':
- resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==}
- engines: {node: '>=6.9.0'}
-
- '@babel/helper-create-class-features-plugin@7.28.5':
- resolution: {integrity: sha512-q3WC4JfdODypvxArsJQROfupPBq9+lMwjKq7C33GhbFYJsufD0yd/ziwD+hJucLeWsnFPWZjsU2DNFqBPE7jwQ==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0
-
- '@babel/helper-create-regexp-features-plugin@7.28.5':
- resolution: {integrity: sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0
-
- '@babel/helper-define-polyfill-provider@0.6.5':
- resolution: {integrity: sha512-uJnGFcPsWQK8fvjgGP5LZUZZsYGIoPeRjSF5PGwrelYgq7Q15/Ft9NGFp1zglwgIv//W0uG4BevRuSJRyylZPg==}
- peerDependencies:
- '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
-
- '@babel/helper-globals@7.28.0':
- resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==}
- engines: {node: '>=6.9.0'}
-
- '@babel/helper-member-expression-to-functions@7.28.5':
- resolution: {integrity: sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==}
- engines: {node: '>=6.9.0'}
-
- '@babel/helper-module-imports@7.27.1':
- resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==}
- engines: {node: '>=6.9.0'}
-
- '@babel/helper-module-transforms@7.28.3':
- resolution: {integrity: sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0
-
- '@babel/helper-optimise-call-expression@7.27.1':
- resolution: {integrity: sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==}
- engines: {node: '>=6.9.0'}
-
- '@babel/helper-plugin-utils@7.27.1':
- resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==}
- engines: {node: '>=6.9.0'}
-
- '@babel/helper-remap-async-to-generator@7.27.1':
- resolution: {integrity: sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0
-
- '@babel/helper-replace-supers@7.27.1':
- resolution: {integrity: sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0
-
- '@babel/helper-skip-transparent-expression-wrappers@7.27.1':
- resolution: {integrity: sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==}
- engines: {node: '>=6.9.0'}
-
- '@babel/helper-split-export-declaration@7.24.7':
- resolution: {integrity: sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==}
- engines: {node: '>=6.9.0'}
-
- '@babel/helper-string-parser@7.27.1':
- resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
- engines: {node: '>=6.9.0'}
-
- '@babel/helper-validator-identifier@7.28.5':
- resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==}
- engines: {node: '>=6.9.0'}
-
- '@babel/helper-validator-option@7.27.1':
- resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==}
- engines: {node: '>=6.9.0'}
-
- '@babel/helper-wrap-function@7.28.3':
- resolution: {integrity: sha512-zdf983tNfLZFletc0RRXYrHrucBEg95NIFMkn6K9dbeMYnsgHaSBGcQqdsCSStG2PYwRre0Qc2NNSCXbG+xc6g==}
- engines: {node: '>=6.9.0'}
-
- '@babel/helpers@7.28.4':
- resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==}
- engines: {node: '>=6.9.0'}
-
- '@babel/parser@7.28.5':
- resolution: {integrity: sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==}
- engines: {node: '>=6.0.0'}
- hasBin: true
-
- '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.28.5':
- resolution: {integrity: sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0
-
- '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1':
- resolution: {integrity: sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0
-
- '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1':
- resolution: {integrity: sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0
-
- '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1':
- resolution: {integrity: sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.13.0
-
- '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.3':
- resolution: {integrity: sha512-b6YTX108evsvE4YgWyQ921ZAFFQm3Bn+CA3+ZXlNVnPhx+UfsVURoPjfGAPCjBgrqo30yX/C2nZGX96DxvR9Iw==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0
-
- '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2':
- resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-syntax-import-assertions@7.27.1':
- resolution: {integrity: sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-syntax-import-attributes@7.26.0':
- resolution: {integrity: sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-syntax-import-attributes@7.27.1':
- resolution: {integrity: sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-syntax-unicode-sets-regex@7.18.6':
- resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0
-
- '@babel/plugin-transform-arrow-functions@7.27.1':
- resolution: {integrity: sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-transform-async-generator-functions@7.26.8':
- resolution: {integrity: sha512-He9Ej2X7tNf2zdKMAGOsmg2MrFc+hfoAhd3po4cWfo/NWjzEAKa0oQruj1ROVUdl0e6fb6/kE/G3SSxE0lRJOg==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-transform-async-to-generator@7.25.9':
- resolution: {integrity: sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-transform-block-scoped-functions@7.27.1':
- resolution: {integrity: sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-transform-block-scoping@7.28.5':
- resolution: {integrity: sha512-45DmULpySVvmq9Pj3X9B+62Xe+DJGov27QravQJU1LLcapR6/10i+gYVAucGGJpHBp5mYxIMK4nDAT/QDLr47g==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-transform-class-properties@7.27.1':
- resolution: {integrity: sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-transform-class-static-block@7.28.3':
- resolution: {integrity: sha512-LtPXlBbRoc4Njl/oh1CeD/3jC+atytbnf/UqLoqTDcEYGUPj022+rvfkbDYieUrSj3CaV4yHDByPE+T2HwfsJg==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.12.0
-
- '@babel/plugin-transform-classes@7.28.4':
- resolution: {integrity: sha512-cFOlhIYPBv/iBoc+KS3M6et2XPtbT2HiCRfBXWtfpc9OAyostldxIf9YAYB6ypURBBbx+Qv6nyrLzASfJe+hBA==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-transform-computed-properties@7.27.1':
- resolution: {integrity: sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-transform-destructuring@7.28.5':
- resolution: {integrity: sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-transform-dotall-regex@7.27.1':
- resolution: {integrity: sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-transform-duplicate-keys@7.27.1':
- resolution: {integrity: sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1':
- resolution: {integrity: sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0
-
- '@babel/plugin-transform-dynamic-import@7.27.1':
- resolution: {integrity: sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-transform-exponentiation-operator@7.28.5':
- resolution: {integrity: sha512-D4WIMaFtwa2NizOp+dnoFjRez/ClKiC2BqqImwKd1X28nqBtZEyCYJ2ozQrrzlxAFrcrjxo39S6khe9RNDlGzw==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-transform-export-namespace-from@7.27.1':
- resolution: {integrity: sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-transform-for-of@7.27.1':
- resolution: {integrity: sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-transform-function-name@7.27.1':
- resolution: {integrity: sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-transform-json-strings@7.27.1':
- resolution: {integrity: sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-transform-literals@7.27.1':
- resolution: {integrity: sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-transform-logical-assignment-operators@7.28.5':
- resolution: {integrity: sha512-axUuqnUTBuXyHGcJEVVh9pORaN6wC5bYfE7FGzPiaWa3syib9m7g+/IT/4VgCOe2Upef43PHzeAvcrVek6QuuA==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-transform-member-expression-literals@7.27.1':
- resolution: {integrity: sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-transform-modules-amd@7.27.1':
- resolution: {integrity: sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-transform-modules-commonjs@7.27.1':
- resolution: {integrity: sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-transform-modules-systemjs@7.28.5':
- resolution: {integrity: sha512-vn5Jma98LCOeBy/KpeQhXcV2WZgaRUtjwQmjoBuLNlOmkg0fB5pdvYVeWRYI69wWKwK2cD1QbMiUQnoujWvrew==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-transform-modules-umd@7.27.1':
- resolution: {integrity: sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-transform-named-capturing-groups-regex@7.27.1':
- resolution: {integrity: sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0
-
- '@babel/plugin-transform-new-target@7.27.1':
- resolution: {integrity: sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-transform-nullish-coalescing-operator@7.27.1':
- resolution: {integrity: sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-transform-numeric-separator@7.27.1':
- resolution: {integrity: sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-transform-object-rest-spread@7.28.4':
- resolution: {integrity: sha512-373KA2HQzKhQCYiRVIRr+3MjpCObqzDlyrM6u4I201wL8Mp2wHf7uB8GhDwis03k2ti8Zr65Zyyqs1xOxUF/Ew==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-transform-object-super@7.27.1':
- resolution: {integrity: sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-transform-optional-catch-binding@7.27.1':
- resolution: {integrity: sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-transform-optional-chaining@7.28.5':
- resolution: {integrity: sha512-N6fut9IZlPnjPwgiQkXNhb+cT8wQKFlJNqcZkWlcTqkcqx6/kU4ynGmLFoa4LViBSirn05YAwk+sQBbPfxtYzQ==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-transform-parameters@7.27.7':
- resolution: {integrity: sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-transform-private-methods@7.27.1':
- resolution: {integrity: sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-transform-private-property-in-object@7.27.1':
- resolution: {integrity: sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-transform-property-literals@7.27.1':
- resolution: {integrity: sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-transform-regenerator@7.28.4':
- resolution: {integrity: sha512-+ZEdQlBoRg9m2NnzvEeLgtvBMO4tkFBw5SQIUgLICgTrumLoU7lr+Oghi6km2PFj+dbUt2u1oby2w3BDO9YQnA==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-transform-regexp-modifiers@7.27.1':
- resolution: {integrity: sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0
-
- '@babel/plugin-transform-reserved-words@7.27.1':
- resolution: {integrity: sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-transform-runtime@7.26.10':
- resolution: {integrity: sha512-NWaL2qG6HRpONTnj4JvDU6th4jYeZOJgu3QhmFTCihib0ermtOJqktA5BduGm3suhhVe9EMP9c9+mfJ/I9slqw==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-transform-shorthand-properties@7.27.1':
- resolution: {integrity: sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-transform-spread@7.27.1':
- resolution: {integrity: sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-transform-sticky-regex@7.27.1':
- resolution: {integrity: sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-transform-template-literals@7.27.1':
- resolution: {integrity: sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-transform-typeof-symbol@7.27.1':
- resolution: {integrity: sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-transform-unicode-escapes@7.27.1':
- resolution: {integrity: sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-transform-unicode-property-regex@7.27.1':
- resolution: {integrity: sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-transform-unicode-regex@7.27.1':
- resolution: {integrity: sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-transform-unicode-sets-regex@7.27.1':
- resolution: {integrity: sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0
-
- '@babel/preset-env@7.26.9':
- resolution: {integrity: sha512-vX3qPGE8sEKEAZCWk05k3cpTAE3/nOYca++JA+Rd0z2NCNzabmYvEiSShKzm10zdquOIAVXsy2Ei/DTW34KlKQ==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/preset-modules@0.1.6-no-external-plugins':
- resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==}
- peerDependencies:
- '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0
-
- '@babel/runtime@7.26.10':
- resolution: {integrity: sha512-2WJMeRQPHKSPemqk/awGrAiuFfzBmOIPXKizAsVhWH9YJqLZ0H+HS4c8loHGgW6utJ3E/ejXQUsiGaQy2NZ9Fw==}
- engines: {node: '>=6.9.0'}
-
- '@babel/template@7.27.2':
- resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==}
- engines: {node: '>=6.9.0'}
-
- '@babel/traverse@7.28.5':
- resolution: {integrity: sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==}
- engines: {node: '>=6.9.0'}
-
- '@babel/types@7.28.5':
- resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==}
- engines: {node: '>=6.9.0'}
-
- '@discoveryjs/json-ext@0.6.3':
- resolution: {integrity: sha512-4B4OijXeVNOPZlYA2oEwWOTkzyltLao+xbotHQeqN++Rv27Y6s818+n2Qkp8q+Fxhn0t/5lA5X1Mxktud8eayQ==}
- engines: {node: '>=14.17.0'}
-
- '@esbuild/aix-ppc64@0.25.4':
- resolution: {integrity: sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==}
- engines: {node: '>=18'}
- cpu: [ppc64]
- os: [aix]
-
- '@esbuild/android-arm64@0.25.4':
- resolution: {integrity: sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [android]
-
- '@esbuild/android-arm@0.25.4':
- resolution: {integrity: sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==}
- engines: {node: '>=18'}
- cpu: [arm]
- os: [android]
-
- '@esbuild/android-x64@0.25.4':
- resolution: {integrity: sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [android]
-
- '@esbuild/darwin-arm64@0.25.4':
- resolution: {integrity: sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [darwin]
-
- '@esbuild/darwin-x64@0.25.4':
- resolution: {integrity: sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [darwin]
-
- '@esbuild/freebsd-arm64@0.25.4':
- resolution: {integrity: sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [freebsd]
-
- '@esbuild/freebsd-x64@0.25.4':
- resolution: {integrity: sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [freebsd]
-
- '@esbuild/linux-arm64@0.25.4':
- resolution: {integrity: sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [linux]
-
- '@esbuild/linux-arm@0.25.4':
- resolution: {integrity: sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==}
- engines: {node: '>=18'}
- cpu: [arm]
- os: [linux]
-
- '@esbuild/linux-ia32@0.25.4':
- resolution: {integrity: sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==}
- engines: {node: '>=18'}
- cpu: [ia32]
- os: [linux]
-
- '@esbuild/linux-loong64@0.25.4':
- resolution: {integrity: sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==}
- engines: {node: '>=18'}
- cpu: [loong64]
- os: [linux]
-
- '@esbuild/linux-mips64el@0.25.4':
- resolution: {integrity: sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==}
- engines: {node: '>=18'}
- cpu: [mips64el]
- os: [linux]
-
- '@esbuild/linux-ppc64@0.25.4':
- resolution: {integrity: sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==}
- engines: {node: '>=18'}
- cpu: [ppc64]
- os: [linux]
-
- '@esbuild/linux-riscv64@0.25.4':
- resolution: {integrity: sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==}
- engines: {node: '>=18'}
- cpu: [riscv64]
- os: [linux]
-
- '@esbuild/linux-s390x@0.25.4':
- resolution: {integrity: sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==}
- engines: {node: '>=18'}
- cpu: [s390x]
- os: [linux]
-
- '@esbuild/linux-x64@0.25.4':
- resolution: {integrity: sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [linux]
-
- '@esbuild/netbsd-arm64@0.25.4':
- resolution: {integrity: sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [netbsd]
-
- '@esbuild/netbsd-x64@0.25.4':
- resolution: {integrity: sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [netbsd]
-
- '@esbuild/openbsd-arm64@0.25.4':
- resolution: {integrity: sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [openbsd]
-
- '@esbuild/openbsd-x64@0.25.4':
- resolution: {integrity: sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [openbsd]
-
- '@esbuild/sunos-x64@0.25.4':
- resolution: {integrity: sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [sunos]
-
- '@esbuild/win32-arm64@0.25.4':
- resolution: {integrity: sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [win32]
-
- '@esbuild/win32-ia32@0.25.4':
- resolution: {integrity: sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==}
- engines: {node: '>=18'}
- cpu: [ia32]
- os: [win32]
-
- '@esbuild/win32-x64@0.25.4':
- resolution: {integrity: sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [win32]
-
- '@inquirer/ansi@1.0.2':
- resolution: {integrity: sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ==}
- engines: {node: '>=18'}
-
- '@inquirer/checkbox@4.3.2':
- resolution: {integrity: sha512-VXukHf0RR1doGe6Sm4F0Em7SWYLTHSsbGfJdS9Ja2bX5/D5uwVOEjr07cncLROdBvmnvCATYEWlHqYmXv2IlQA==}
- engines: {node: '>=18'}
- peerDependencies:
- '@types/node': '>=18'
- peerDependenciesMeta:
- '@types/node':
- optional: true
-
- '@inquirer/confirm@5.1.21':
- resolution: {integrity: sha512-KR8edRkIsUayMXV+o3Gv+q4jlhENF9nMYUZs9PA2HzrXeHI8M5uDag70U7RJn9yyiMZSbtF5/UexBtAVtZGSbQ==}
- engines: {node: '>=18'}
- peerDependencies:
- '@types/node': '>=18'
- peerDependenciesMeta:
- '@types/node':
- optional: true
-
- '@inquirer/confirm@5.1.6':
- resolution: {integrity: sha512-6ZXYK3M1XmaVBZX6FCfChgtponnL0R6I7k8Nu+kaoNkT828FVZTcca1MqmWQipaW2oNREQl5AaPCUOOCVNdRMw==}
- engines: {node: '>=18'}
- peerDependencies:
- '@types/node': '>=18'
- peerDependenciesMeta:
- '@types/node':
- optional: true
-
- '@inquirer/core@10.3.2':
- resolution: {integrity: sha512-43RTuEbfP8MbKzedNqBrlhhNKVwoK//vUFNW3Q3vZ88BLcrs4kYpGg+B2mm5p2K/HfygoCxuKwJJiv8PbGmE0A==}
- engines: {node: '>=18'}
- peerDependencies:
- '@types/node': '>=18'
- peerDependenciesMeta:
- '@types/node':
- optional: true
-
- '@inquirer/editor@4.2.23':
- resolution: {integrity: sha512-aLSROkEwirotxZ1pBaP8tugXRFCxW94gwrQLxXfrZsKkfjOYC1aRvAZuhpJOb5cu4IBTJdsCigUlf2iCOu4ZDQ==}
- engines: {node: '>=18'}
- peerDependencies:
- '@types/node': '>=18'
- peerDependenciesMeta:
- '@types/node':
- optional: true
-
- '@inquirer/expand@4.0.23':
- resolution: {integrity: sha512-nRzdOyFYnpeYTTR2qFwEVmIWypzdAx/sIkCMeTNTcflFOovfqUk+HcFhQQVBftAh9gmGrpFj6QcGEqrDMDOiew==}
- engines: {node: '>=18'}
- peerDependencies:
- '@types/node': '>=18'
- peerDependenciesMeta:
- '@types/node':
- optional: true
-
- '@inquirer/external-editor@1.0.3':
- resolution: {integrity: sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==}
- engines: {node: '>=18'}
- peerDependencies:
- '@types/node': '>=18'
- peerDependenciesMeta:
- '@types/node':
- optional: true
-
- '@inquirer/figures@1.0.15':
- resolution: {integrity: sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==}
- engines: {node: '>=18'}
-
- '@inquirer/input@4.3.1':
- resolution: {integrity: sha512-kN0pAM4yPrLjJ1XJBjDxyfDduXOuQHrBB8aLDMueuwUGn+vNpF7Gq7TvyVxx8u4SHlFFj4trmj+a2cbpG4Jn1g==}
- engines: {node: '>=18'}
- peerDependencies:
- '@types/node': '>=18'
- peerDependenciesMeta:
- '@types/node':
- optional: true
-
- '@inquirer/number@3.0.23':
- resolution: {integrity: sha512-5Smv0OK7K0KUzUfYUXDXQc9jrf8OHo4ktlEayFlelCjwMXz0299Y8OrI+lj7i4gCBY15UObk76q0QtxjzFcFcg==}
- engines: {node: '>=18'}
- peerDependencies:
- '@types/node': '>=18'
- peerDependenciesMeta:
- '@types/node':
- optional: true
-
- '@inquirer/password@4.0.23':
- resolution: {integrity: sha512-zREJHjhT5vJBMZX/IUbyI9zVtVfOLiTO66MrF/3GFZYZ7T4YILW5MSkEYHceSii/KtRk+4i3RE7E1CUXA2jHcA==}
- engines: {node: '>=18'}
- peerDependencies:
- '@types/node': '>=18'
- peerDependenciesMeta:
- '@types/node':
- optional: true
-
- '@inquirer/prompts@7.3.2':
- resolution: {integrity: sha512-G1ytyOoHh5BphmEBxSwALin3n1KGNYB6yImbICcRQdzXfOGbuJ9Jske/Of5Sebk339NSGGNfUshnzK8YWkTPsQ==}
- engines: {node: '>=18'}
- peerDependencies:
- '@types/node': '>=18'
- peerDependenciesMeta:
- '@types/node':
- optional: true
-
- '@inquirer/rawlist@4.1.11':
- resolution: {integrity: sha512-+LLQB8XGr3I5LZN/GuAHo+GpDJegQwuPARLChlMICNdwW7OwV2izlCSCxN6cqpL0sMXmbKbFcItJgdQq5EBXTw==}
- engines: {node: '>=18'}
- peerDependencies:
- '@types/node': '>=18'
- peerDependenciesMeta:
- '@types/node':
- optional: true
-
- '@inquirer/search@3.2.2':
- resolution: {integrity: sha512-p2bvRfENXCZdWF/U2BXvnSI9h+tuA8iNqtUKb9UWbmLYCRQxd8WkvwWvYn+3NgYaNwdUkHytJMGG4MMLucI1kA==}
- engines: {node: '>=18'}
- peerDependencies:
- '@types/node': '>=18'
- peerDependenciesMeta:
- '@types/node':
- optional: true
-
- '@inquirer/select@4.4.2':
- resolution: {integrity: sha512-l4xMuJo55MAe+N7Qr4rX90vypFwCajSakx59qe/tMaC1aEHWLyw68wF4o0A4SLAY4E0nd+Vt+EyskeDIqu1M6w==}
- engines: {node: '>=18'}
- peerDependencies:
- '@types/node': '>=18'
- peerDependenciesMeta:
- '@types/node':
- optional: true
-
- '@inquirer/type@1.5.5':
- resolution: {integrity: sha512-MzICLu4yS7V8AA61sANROZ9vT1H3ooca5dSmI1FjZkzq7o/koMsRfQSzRtFo+F3Ao4Sf1C0bpLKejpKB/+j6MA==}
- engines: {node: '>=18'}
-
- '@inquirer/type@3.0.10':
- resolution: {integrity: sha512-BvziSRxfz5Ov8ch0z/n3oijRSEcEsHnhggm4xFZe93DHcUCTlutlq9Ox4SVENAfcRD22UQq7T/atg9Wr3k09eA==}
- engines: {node: '>=18'}
- peerDependencies:
- '@types/node': '>=18'
- peerDependenciesMeta:
- '@types/node':
- optional: true
-
- '@isaacs/cliui@8.0.2':
- resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
- engines: {node: '>=12'}
-
- '@isaacs/fs-minipass@4.0.1':
- resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==}
- engines: {node: '>=18.0.0'}
-
- '@istanbuljs/schema@0.1.3':
- resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==}
- engines: {node: '>=8'}
-
- '@jridgewell/gen-mapping@0.3.13':
- resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
-
- '@jridgewell/resolve-uri@3.1.2':
- resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
- engines: {node: '>=6.0.0'}
-
- '@jridgewell/source-map@0.3.11':
- resolution: {integrity: sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==}
-
- '@jridgewell/sourcemap-codec@1.5.5':
- resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
-
- '@jridgewell/trace-mapping@0.3.31':
- resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
-
- '@jsonjoy.com/base64@1.1.2':
- resolution: {integrity: sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==}
- engines: {node: '>=10.0'}
- peerDependencies:
- tslib: '2'
-
- '@jsonjoy.com/buffers@1.2.1':
- resolution: {integrity: sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA==}
- engines: {node: '>=10.0'}
- peerDependencies:
- tslib: '2'
-
- '@jsonjoy.com/codegen@1.0.0':
- resolution: {integrity: sha512-E8Oy+08cmCf0EK/NMxpaJZmOxPqM+6iSe2S4nlSBrPZOORoDJILxtbSUEDKQyTamm/BVAhIGllOBNU79/dwf0g==}
- engines: {node: '>=10.0'}
- peerDependencies:
- tslib: '2'
-
- '@jsonjoy.com/json-pack@1.21.0':
- resolution: {integrity: sha512-+AKG+R2cfZMShzrF2uQw34v3zbeDYUqnQ+jg7ORic3BGtfw9p/+N6RJbq/kkV8JmYZaINknaEQ2m0/f693ZPpg==}
- engines: {node: '>=10.0'}
- peerDependencies:
- tslib: '2'
-
- '@jsonjoy.com/json-pointer@1.0.2':
- resolution: {integrity: sha512-Fsn6wM2zlDzY1U+v4Nc8bo3bVqgfNTGcn6dMgs6FjrEnt4ZCe60o6ByKRjOGlI2gow0aE/Q41QOigdTqkyK5fg==}
- engines: {node: '>=10.0'}
- peerDependencies:
- tslib: '2'
-
- '@jsonjoy.com/util@1.9.0':
- resolution: {integrity: sha512-pLuQo+VPRnN8hfPqUTLTHk126wuYdXVxE6aDmjSeV4NCAgyxWbiOIeNJVtID3h1Vzpoi9m4jXezf73I6LgabgQ==}
- engines: {node: '>=10.0'}
- peerDependencies:
- tslib: '2'
-
- '@leichtgewicht/ip-codec@2.0.5':
- resolution: {integrity: sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==}
-
- '@listr2/prompt-adapter-inquirer@2.0.18':
- resolution: {integrity: sha512-0hz44rAcrphyXcA8IS7EJ2SCoaBZD2u5goE8S/e+q/DL+dOGpqpcLidVOFeLG3VgML62SXmfRLAhWt0zL1oW4Q==}
- engines: {node: '>=18.0.0'}
- peerDependencies:
- '@inquirer/prompts': '>= 3 < 8'
-
- '@lmdb/lmdb-darwin-arm64@3.2.6':
- resolution: {integrity: sha512-yF/ih9EJJZc72psFQbwnn8mExIWfTnzWJg+N02hnpXtDPETYLmQswIMBn7+V88lfCaFrMozJsUvcEQIkEPU0Gg==}
- cpu: [arm64]
- os: [darwin]
-
- '@lmdb/lmdb-darwin-x64@3.2.6':
- resolution: {integrity: sha512-5BbCumsFLbCi586Bb1lTWQFkekdQUw8/t8cy++Uq251cl3hbDIGEwD9HAwh8H6IS2F6QA9KdKmO136LmipRNkg==}
- cpu: [x64]
- os: [darwin]
-
- '@lmdb/lmdb-linux-arm64@3.2.6':
- resolution: {integrity: sha512-l5VmJamJ3nyMmeD1ANBQCQqy7do1ESaJQfKPSm2IG9/ADZryptTyCj8N6QaYgIWewqNUrcbdMkJajRQAt5Qjfg==}
- cpu: [arm64]
- os: [linux]
-
- '@lmdb/lmdb-linux-arm@3.2.6':
- resolution: {integrity: sha512-+6XgLpMb7HBoWxXj+bLbiiB4s0mRRcDPElnRS3LpWRzdYSe+gFk5MT/4RrVNqd2MESUDmb53NUXw1+BP69bjiQ==}
- cpu: [arm]
- os: [linux]
-
- '@lmdb/lmdb-linux-x64@3.2.6':
- resolution: {integrity: sha512-nDYT8qN9si5+onHYYaI4DiauDMx24OAiuZAUsEqrDy+ja/3EbpXPX/VAkMV8AEaQhy3xc4dRC+KcYIvOFefJ4Q==}
- cpu: [x64]
- os: [linux]
-
- '@lmdb/lmdb-win32-x64@3.2.6':
- resolution: {integrity: sha512-XlqVtILonQnG+9fH2N3Aytria7P/1fwDgDhl29rde96uH2sLB8CHORIf2PfuLVzFQJ7Uqp8py9AYwr3ZUCFfWg==}
- cpu: [x64]
- os: [win32]
-
- '@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.3':
- resolution: {integrity: sha512-QZHtlVgbAdy2zAqNA9Gu1UpIuI8Xvsd1v8ic6B2pZmeFnFcMWiPLfWXh7TVw4eGEZ/C9TH281KwhVoeQUKbyjw==}
- cpu: [arm64]
- os: [darwin]
-
- '@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.3':
- resolution: {integrity: sha512-mdzd3AVzYKuUmiWOQ8GNhl64/IoFGol569zNRdkLReh6LRLHOXxU4U8eq0JwaD8iFHdVGqSy4IjFL4reoWCDFw==}
- cpu: [x64]
- os: [darwin]
-
- '@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.3':
- resolution: {integrity: sha512-YxQL+ax0XqBJDZiKimS2XQaf+2wDGVa1enVRGzEvLLVFeqa5kx2bWbtcSXgsxjQB7nRqqIGFIcLteF/sHeVtQg==}
- cpu: [arm64]
- os: [linux]
-
- '@msgpackr-extract/msgpackr-extract-linux-arm@3.0.3':
- resolution: {integrity: sha512-fg0uy/dG/nZEXfYilKoRe7yALaNmHoYeIoJuJ7KJ+YyU2bvY8vPv27f7UKhGRpY6euFYqEVhxCFZgAUNQBM3nw==}
- cpu: [arm]
- os: [linux]
-
- '@msgpackr-extract/msgpackr-extract-linux-x64@3.0.3':
- resolution: {integrity: sha512-cvwNfbP07pKUfq1uH+S6KJ7dT9K8WOE4ZiAcsrSes+UY55E/0jLYc+vq+DO7jlmqRb5zAggExKm0H7O/CBaesg==}
- cpu: [x64]
- os: [linux]
-
- '@msgpackr-extract/msgpackr-extract-win32-x64@3.0.3':
- resolution: {integrity: sha512-x0fWaQtYp4E6sktbsdAqnehxDgEc/VwM7uLsRCYWaiGu0ykYdZPiS8zCWdnjHwyiumousxfBm4SO31eXqwEZhQ==}
- cpu: [x64]
- os: [win32]
-
- '@napi-rs/nice-android-arm-eabi@1.1.1':
- resolution: {integrity: sha512-kjirL3N6TnRPv5iuHw36wnucNqXAO46dzK9oPb0wj076R5Xm8PfUVA9nAFB5ZNMmfJQJVKACAPd/Z2KYMppthw==}
- engines: {node: '>= 10'}
- cpu: [arm]
- os: [android]
-
- '@napi-rs/nice-android-arm64@1.1.1':
- resolution: {integrity: sha512-blG0i7dXgbInN5urONoUCNf+DUEAavRffrO7fZSeoRMJc5qD+BJeNcpr54msPF6qfDD6kzs9AQJogZvT2KD5nw==}
- engines: {node: '>= 10'}
- cpu: [arm64]
- os: [android]
-
- '@napi-rs/nice-darwin-arm64@1.1.1':
- resolution: {integrity: sha512-s/E7w45NaLqTGuOjC2p96pct4jRfo61xb9bU1unM/MJ/RFkKlJyJDx7OJI/O0ll/hrfpqKopuAFDV8yo0hfT7A==}
- engines: {node: '>= 10'}
- cpu: [arm64]
- os: [darwin]
-
- '@napi-rs/nice-darwin-x64@1.1.1':
- resolution: {integrity: sha512-dGoEBnVpsdcC+oHHmW1LRK5eiyzLwdgNQq3BmZIav+9/5WTZwBYX7r5ZkQC07Nxd3KHOCkgbHSh4wPkH1N1LiQ==}
- engines: {node: '>= 10'}
- cpu: [x64]
- os: [darwin]
-
- '@napi-rs/nice-freebsd-x64@1.1.1':
- resolution: {integrity: sha512-kHv4kEHAylMYmlNwcQcDtXjklYp4FCf0b05E+0h6nDHsZ+F0bDe04U/tXNOqrx5CmIAth4vwfkjjUmp4c4JktQ==}
- engines: {node: '>= 10'}
- cpu: [x64]
- os: [freebsd]
-
- '@napi-rs/nice-linux-arm-gnueabihf@1.1.1':
- resolution: {integrity: sha512-E1t7K0efyKXZDoZg1LzCOLxgolxV58HCkaEkEvIYQx12ht2pa8hoBo+4OB3qh7e+QiBlp1SRf+voWUZFxyhyqg==}
- engines: {node: '>= 10'}
- cpu: [arm]
- os: [linux]
-
- '@napi-rs/nice-linux-arm64-gnu@1.1.1':
- resolution: {integrity: sha512-CIKLA12DTIZlmTaaKhQP88R3Xao+gyJxNWEn04wZwC2wmRapNnxCUZkVwggInMJvtVElA+D4ZzOU5sX4jV+SmQ==}
- engines: {node: '>= 10'}
- cpu: [arm64]
- os: [linux]
-
- '@napi-rs/nice-linux-arm64-musl@1.1.1':
- resolution: {integrity: sha512-+2Rzdb3nTIYZ0YJF43qf2twhqOCkiSrHx2Pg6DJaCPYhhaxbLcdlV8hCRMHghQ+EtZQWGNcS2xF4KxBhSGeutg==}
- engines: {node: '>= 10'}
- cpu: [arm64]
- os: [linux]
-
- '@napi-rs/nice-linux-ppc64-gnu@1.1.1':
- resolution: {integrity: sha512-4FS8oc0GeHpwvv4tKciKkw3Y4jKsL7FRhaOeiPei0X9T4Jd619wHNe4xCLmN2EMgZoeGg+Q7GY7BsvwKpL22Tg==}
- engines: {node: '>= 10'}
- cpu: [ppc64]
- os: [linux]
-
- '@napi-rs/nice-linux-riscv64-gnu@1.1.1':
- resolution: {integrity: sha512-HU0nw9uD4FO/oGCCk409tCi5IzIZpH2agE6nN4fqpwVlCn5BOq0MS1dXGjXaG17JaAvrlpV5ZeyZwSon10XOXw==}
- engines: {node: '>= 10'}
- cpu: [riscv64]
- os: [linux]
-
- '@napi-rs/nice-linux-s390x-gnu@1.1.1':
- resolution: {integrity: sha512-2YqKJWWl24EwrX0DzCQgPLKQBxYDdBxOHot1KWEq7aY2uYeX+Uvtv4I8xFVVygJDgf6/92h9N3Y43WPx8+PAgQ==}
- engines: {node: '>= 10'}
- cpu: [s390x]
- os: [linux]
-
- '@napi-rs/nice-linux-x64-gnu@1.1.1':
- resolution: {integrity: sha512-/gaNz3R92t+dcrfCw/96pDopcmec7oCcAQ3l/M+Zxr82KT4DljD37CpgrnXV+pJC263JkW572pdbP3hP+KjcIg==}
- engines: {node: '>= 10'}
- cpu: [x64]
- os: [linux]
-
- '@napi-rs/nice-linux-x64-musl@1.1.1':
- resolution: {integrity: sha512-xScCGnyj/oppsNPMnevsBe3pvNaoK7FGvMjT35riz9YdhB2WtTG47ZlbxtOLpjeO9SqqQ2J2igCmz6IJOD5JYw==}
- engines: {node: '>= 10'}
- cpu: [x64]
- os: [linux]
-
- '@napi-rs/nice-openharmony-arm64@1.1.1':
- resolution: {integrity: sha512-6uJPRVwVCLDeoOaNyeiW0gp2kFIM4r7PL2MczdZQHkFi9gVlgm+Vn+V6nTWRcu856mJ2WjYJiumEajfSm7arPQ==}
- engines: {node: '>= 10'}
- cpu: [arm64]
- os: [openharmony]
-
- '@napi-rs/nice-win32-arm64-msvc@1.1.1':
- resolution: {integrity: sha512-uoTb4eAvM5B2aj/z8j+Nv8OttPf2m+HVx3UjA5jcFxASvNhQriyCQF1OB1lHL43ZhW+VwZlgvjmP5qF3+59atA==}
- engines: {node: '>= 10'}
- cpu: [arm64]
- os: [win32]
-
- '@napi-rs/nice-win32-ia32-msvc@1.1.1':
- resolution: {integrity: sha512-CNQqlQT9MwuCsg1Vd/oKXiuH+TcsSPJmlAFc5frFyX/KkOh0UpBLEj7aoY656d5UKZQMQFP7vJNa1DNUNORvug==}
- engines: {node: '>= 10'}
- cpu: [ia32]
- os: [win32]
-
- '@napi-rs/nice-win32-x64-msvc@1.1.1':
- resolution: {integrity: sha512-vB+4G/jBQCAh0jelMTY3+kgFy00Hlx2f2/1zjMoH821IbplbWZOkLiTYXQkygNTzQJTq5cvwBDgn2ppHD+bglQ==}
- engines: {node: '>= 10'}
- cpu: [x64]
- os: [win32]
-
- '@napi-rs/nice@1.1.1':
- resolution: {integrity: sha512-xJIPs+bYuc9ASBl+cvGsKbGrJmS6fAKaSZCnT0lhahT5rhA2VVy9/EcIgd2JhtEuFOJNx7UHNn/qiTPTY4nrQw==}
- engines: {node: '>= 10'}
-
- '@ngtools/webpack@19.2.19':
- resolution: {integrity: sha512-R9aeTrOBiRVl8I698JWPniUAAEpSvzc8SUGWSM5UXWMcHnWqd92cOnJJ1aXDGJZKXrbhMhCBx9Dglmcks5IDpg==}
- engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'}
- peerDependencies:
- '@angular/compiler-cli': ^19.0.0 || ^19.2.0-next.0
- typescript: '>=5.5 <5.9'
- webpack: ^5.54.0
-
- '@nodelib/fs.scandir@2.1.5':
- resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
- engines: {node: '>= 8'}
-
- '@nodelib/fs.stat@2.0.5':
- resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
- engines: {node: '>= 8'}
-
- '@nodelib/fs.walk@1.2.8':
- resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
- engines: {node: '>= 8'}
-
- '@npmcli/agent@3.0.0':
- resolution: {integrity: sha512-S79NdEgDQd/NGCay6TCoVzXSj74skRZIKJcpJjC5lOq34SZzyI6MqtiiWoiVWoVrTcGjNeC4ipbh1VIHlpfF5Q==}
- engines: {node: ^18.17.0 || >=20.5.0}
-
- '@npmcli/fs@4.0.0':
- resolution: {integrity: sha512-/xGlezI6xfGO9NwuJlnwz/K14qD1kCSAGtacBHnGzeAIuJGazcp45KP5NuyARXoKb7cwulAGWVsbeSxdG/cb0Q==}
- engines: {node: ^18.17.0 || >=20.5.0}
-
- '@npmcli/git@6.0.3':
- resolution: {integrity: sha512-GUYESQlxZRAdhs3UhbB6pVRNUELQOHXwK9ruDkwmCv2aZ5y0SApQzUJCg02p3A7Ue2J5hxvlk1YI53c00NmRyQ==}
- engines: {node: ^18.17.0 || >=20.5.0}
-
- '@npmcli/installed-package-contents@3.0.0':
- resolution: {integrity: sha512-fkxoPuFGvxyrH+OQzyTkX2LUEamrF4jZSmxjAtPPHHGO0dqsQ8tTKjnIS8SAnPHdk2I03BDtSMR5K/4loKg79Q==}
- engines: {node: ^18.17.0 || >=20.5.0}
- hasBin: true
-
- '@npmcli/node-gyp@4.0.0':
- resolution: {integrity: sha512-+t5DZ6mO/QFh78PByMq1fGSAub/agLJZDRfJRMeOSNCt8s9YVlTjmGpIPwPhvXTGUIJk+WszlT0rQa1W33yzNA==}
- engines: {node: ^18.17.0 || >=20.5.0}
-
- '@npmcli/package-json@6.2.0':
- resolution: {integrity: sha512-rCNLSB/JzNvot0SEyXqWZ7tX2B5dD2a1br2Dp0vSYVo5jh8Z0EZ7lS9TsZ1UtziddB1UfNUaMCc538/HztnJGA==}
- engines: {node: ^18.17.0 || >=20.5.0}
-
- '@npmcli/promise-spawn@8.0.3':
- resolution: {integrity: sha512-Yb00SWaL4F8w+K8YGhQ55+xE4RUNdMHV43WZGsiTM92gS+lC0mGsn7I4hLug7pbao035S6bj3Y3w0cUNGLfmkg==}
- engines: {node: ^18.17.0 || >=20.5.0}
-
- '@npmcli/redact@3.2.2':
- resolution: {integrity: sha512-7VmYAmk4csGv08QzrDKScdzn11jHPFGyqJW39FyPgPuAp3zIaUmuCo1yxw9aGs+NEJuTGQ9Gwqpt93vtJubucg==}
- engines: {node: ^18.17.0 || >=20.5.0}
-
- '@npmcli/run-script@9.1.0':
- resolution: {integrity: sha512-aoNSbxtkePXUlbZB+anS1LqsJdctG5n3UVhfU47+CDdwMi6uNTBMF9gPcQRnqghQd2FGzcwwIFBruFMxjhBewg==}
- engines: {node: ^18.17.0 || >=20.5.0}
-
- '@parcel/watcher-android-arm64@2.5.1':
- resolution: {integrity: sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==}
- engines: {node: '>= 10.0.0'}
- cpu: [arm64]
- os: [android]
-
- '@parcel/watcher-darwin-arm64@2.5.1':
- resolution: {integrity: sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==}
- engines: {node: '>= 10.0.0'}
- cpu: [arm64]
- os: [darwin]
-
- '@parcel/watcher-darwin-x64@2.5.1':
- resolution: {integrity: sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==}
- engines: {node: '>= 10.0.0'}
- cpu: [x64]
- os: [darwin]
-
- '@parcel/watcher-freebsd-x64@2.5.1':
- resolution: {integrity: sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==}
- engines: {node: '>= 10.0.0'}
- cpu: [x64]
- os: [freebsd]
-
- '@parcel/watcher-linux-arm-glibc@2.5.1':
- resolution: {integrity: sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==}
- engines: {node: '>= 10.0.0'}
- cpu: [arm]
- os: [linux]
-
- '@parcel/watcher-linux-arm-musl@2.5.1':
- resolution: {integrity: sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==}
- engines: {node: '>= 10.0.0'}
- cpu: [arm]
- os: [linux]
-
- '@parcel/watcher-linux-arm64-glibc@2.5.1':
- resolution: {integrity: sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==}
- engines: {node: '>= 10.0.0'}
- cpu: [arm64]
- os: [linux]
-
- '@parcel/watcher-linux-arm64-musl@2.5.1':
- resolution: {integrity: sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==}
- engines: {node: '>= 10.0.0'}
- cpu: [arm64]
- os: [linux]
-
- '@parcel/watcher-linux-x64-glibc@2.5.1':
- resolution: {integrity: sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==}
- engines: {node: '>= 10.0.0'}
- cpu: [x64]
- os: [linux]
-
- '@parcel/watcher-linux-x64-musl@2.5.1':
- resolution: {integrity: sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==}
- engines: {node: '>= 10.0.0'}
- cpu: [x64]
- os: [linux]
-
- '@parcel/watcher-win32-arm64@2.5.1':
- resolution: {integrity: sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==}
- engines: {node: '>= 10.0.0'}
- cpu: [arm64]
- os: [win32]
-
- '@parcel/watcher-win32-ia32@2.5.1':
- resolution: {integrity: sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==}
- engines: {node: '>= 10.0.0'}
- cpu: [ia32]
- os: [win32]
-
- '@parcel/watcher-win32-x64@2.5.1':
- resolution: {integrity: sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==}
- engines: {node: '>= 10.0.0'}
- cpu: [x64]
- os: [win32]
-
- '@parcel/watcher@2.5.1':
- resolution: {integrity: sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==}
- engines: {node: '>= 10.0.0'}
-
- '@pkgjs/parseargs@0.11.0':
- resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
- engines: {node: '>=14'}
-
- '@rollup/rollup-android-arm-eabi@4.34.8':
- resolution: {integrity: sha512-q217OSE8DTp8AFHuNHXo0Y86e1wtlfVrXiAlwkIvGRQv9zbc6mE3sjIVfwI8sYUyNxwOg0j/Vm1RKM04JcWLJw==}
- cpu: [arm]
- os: [android]
-
- '@rollup/rollup-android-arm-eabi@4.53.3':
- resolution: {integrity: sha512-mRSi+4cBjrRLoaal2PnqH82Wqyb+d3HsPUN/W+WslCXsZsyHa9ZeQQX/pQsZaVIWDkPcpV6jJ+3KLbTbgnwv8w==}
- cpu: [arm]
- os: [android]
-
- '@rollup/rollup-android-arm64@4.34.8':
- resolution: {integrity: sha512-Gigjz7mNWaOL9wCggvoK3jEIUUbGul656opstjaUSGC3eT0BM7PofdAJaBfPFWWkXNVAXbaQtC99OCg4sJv70Q==}
- cpu: [arm64]
- os: [android]
-
- '@rollup/rollup-android-arm64@4.53.3':
- resolution: {integrity: sha512-CbDGaMpdE9sh7sCmTrTUyllhrg65t6SwhjlMJsLr+J8YjFuPmCEjbBSx4Z/e4SmDyH3aB5hGaJUP2ltV/vcs4w==}
- cpu: [arm64]
- os: [android]
-
- '@rollup/rollup-darwin-arm64@4.34.8':
- resolution: {integrity: sha512-02rVdZ5tgdUNRxIUrFdcMBZQoaPMrxtwSb+/hOfBdqkatYHR3lZ2A2EGyHq2sGOd0Owk80oV3snlDASC24He3Q==}
- cpu: [arm64]
- os: [darwin]
-
- '@rollup/rollup-darwin-arm64@4.53.3':
- resolution: {integrity: sha512-Nr7SlQeqIBpOV6BHHGZgYBuSdanCXuw09hon14MGOLGmXAFYjx1wNvquVPmpZnl0tLjg25dEdr4IQ6GgyToCUA==}
- cpu: [arm64]
- os: [darwin]
-
- '@rollup/rollup-darwin-x64@4.34.8':
- resolution: {integrity: sha512-qIP/elwR/tq/dYRx3lgwK31jkZvMiD6qUtOycLhTzCvrjbZ3LjQnEM9rNhSGpbLXVJYQ3rq39A6Re0h9tU2ynw==}
- cpu: [x64]
- os: [darwin]
-
- '@rollup/rollup-darwin-x64@4.53.3':
- resolution: {integrity: sha512-DZ8N4CSNfl965CmPktJ8oBnfYr3F8dTTNBQkRlffnUarJ2ohudQD17sZBa097J8xhQ26AwhHJ5mvUyQW8ddTsQ==}
- cpu: [x64]
- os: [darwin]
-
- '@rollup/rollup-freebsd-arm64@4.34.8':
- resolution: {integrity: sha512-IQNVXL9iY6NniYbTaOKdrlVP3XIqazBgJOVkddzJlqnCpRi/yAeSOa8PLcECFSQochzqApIOE1GHNu3pCz+BDA==}
- cpu: [arm64]
- os: [freebsd]
-
- '@rollup/rollup-freebsd-arm64@4.53.3':
- resolution: {integrity: sha512-yMTrCrK92aGyi7GuDNtGn2sNW+Gdb4vErx4t3Gv/Tr+1zRb8ax4z8GWVRfr3Jw8zJWvpGHNpss3vVlbF58DZ4w==}
- cpu: [arm64]
- os: [freebsd]
-
- '@rollup/rollup-freebsd-x64@4.34.8':
- resolution: {integrity: sha512-TYXcHghgnCqYFiE3FT5QwXtOZqDj5GmaFNTNt3jNC+vh22dc/ukG2cG+pi75QO4kACohZzidsq7yKTKwq/Jq7Q==}
- cpu: [x64]
- os: [freebsd]
-
- '@rollup/rollup-freebsd-x64@4.53.3':
- resolution: {integrity: sha512-lMfF8X7QhdQzseM6XaX0vbno2m3hlyZFhwcndRMw8fbAGUGL3WFMBdK0hbUBIUYcEcMhVLr1SIamDeuLBnXS+Q==}
- cpu: [x64]
- os: [freebsd]
-
- '@rollup/rollup-linux-arm-gnueabihf@4.34.8':
- resolution: {integrity: sha512-A4iphFGNkWRd+5m3VIGuqHnG3MVnqKe7Al57u9mwgbyZ2/xF9Jio72MaY7xxh+Y87VAHmGQr73qoKL9HPbXj1g==}
- cpu: [arm]
- os: [linux]
-
- '@rollup/rollup-linux-arm-gnueabihf@4.53.3':
- resolution: {integrity: sha512-k9oD15soC/Ln6d2Wv/JOFPzZXIAIFLp6B+i14KhxAfnq76ajt0EhYc5YPeX6W1xJkAdItcVT+JhKl1QZh44/qw==}
- cpu: [arm]
- os: [linux]
-
- '@rollup/rollup-linux-arm-musleabihf@4.34.8':
- resolution: {integrity: sha512-S0lqKLfTm5u+QTxlFiAnb2J/2dgQqRy/XvziPtDd1rKZFXHTyYLoVL58M/XFwDI01AQCDIevGLbQrMAtdyanpA==}
- cpu: [arm]
- os: [linux]
-
- '@rollup/rollup-linux-arm-musleabihf@4.53.3':
- resolution: {integrity: sha512-vTNlKq+N6CK/8UktsrFuc+/7NlEYVxgaEgRXVUVK258Z5ymho29skzW1sutgYjqNnquGwVUObAaxae8rZ6YMhg==}
- cpu: [arm]
- os: [linux]
-
- '@rollup/rollup-linux-arm64-gnu@4.34.8':
- resolution: {integrity: sha512-jpz9YOuPiSkL4G4pqKrus0pn9aYwpImGkosRKwNi+sJSkz+WU3anZe6hi73StLOQdfXYXC7hUfsQlTnjMd3s1A==}
- cpu: [arm64]
- os: [linux]
-
- '@rollup/rollup-linux-arm64-gnu@4.53.3':
- resolution: {integrity: sha512-RGrFLWgMhSxRs/EWJMIFM1O5Mzuz3Xy3/mnxJp/5cVhZ2XoCAxJnmNsEyeMJtpK+wu0FJFWz+QF4mjCA7AUQ3w==}
- cpu: [arm64]
- os: [linux]
-
- '@rollup/rollup-linux-arm64-musl@4.34.8':
- resolution: {integrity: sha512-KdSfaROOUJXgTVxJNAZ3KwkRc5nggDk+06P6lgi1HLv1hskgvxHUKZ4xtwHkVYJ1Rep4GNo+uEfycCRRxht7+Q==}
- cpu: [arm64]
- os: [linux]
-
- '@rollup/rollup-linux-arm64-musl@4.53.3':
- resolution: {integrity: sha512-kASyvfBEWYPEwe0Qv4nfu6pNkITLTb32p4yTgzFCocHnJLAHs+9LjUu9ONIhvfT/5lv4YS5muBHyuV84epBo/A==}
- cpu: [arm64]
- os: [linux]
-
- '@rollup/rollup-linux-loong64-gnu@4.53.3':
- resolution: {integrity: sha512-JiuKcp2teLJwQ7vkJ95EwESWkNRFJD7TQgYmCnrPtlu50b4XvT5MOmurWNrCj3IFdyjBQ5p9vnrX4JM6I8OE7g==}
- cpu: [loong64]
- os: [linux]
-
- '@rollup/rollup-linux-loongarch64-gnu@4.34.8':
- resolution: {integrity: sha512-NyF4gcxwkMFRjgXBM6g2lkT58OWztZvw5KkV2K0qqSnUEqCVcqdh2jN4gQrTn/YUpAcNKyFHfoOZEer9nwo6uQ==}
- cpu: [loong64]
- os: [linux]
-
- '@rollup/rollup-linux-powerpc64le-gnu@4.34.8':
- resolution: {integrity: sha512-LMJc999GkhGvktHU85zNTDImZVUCJ1z/MbAJTnviiWmmjyckP5aQsHtcujMjpNdMZPT2rQEDBlJfubhs3jsMfw==}
- cpu: [ppc64]
- os: [linux]
-
- '@rollup/rollup-linux-ppc64-gnu@4.53.3':
- resolution: {integrity: sha512-EoGSa8nd6d3T7zLuqdojxC20oBfNT8nexBbB/rkxgKj5T5vhpAQKKnD+h3UkoMuTyXkP5jTjK/ccNRmQrPNDuw==}
- cpu: [ppc64]
- os: [linux]
-
- '@rollup/rollup-linux-riscv64-gnu@4.34.8':
- resolution: {integrity: sha512-xAQCAHPj8nJq1PI3z8CIZzXuXCstquz7cIOL73HHdXiRcKk8Ywwqtx2wrIy23EcTn4aZ2fLJNBB8d0tQENPCmw==}
- cpu: [riscv64]
- os: [linux]
-
- '@rollup/rollup-linux-riscv64-gnu@4.53.3':
- resolution: {integrity: sha512-4s+Wped2IHXHPnAEbIB0YWBv7SDohqxobiiPA1FIWZpX+w9o2i4LezzH/NkFUl8LRci/8udci6cLq+jJQlh+0g==}
- cpu: [riscv64]
- os: [linux]
-
- '@rollup/rollup-linux-riscv64-musl@4.53.3':
- resolution: {integrity: sha512-68k2g7+0vs2u9CxDt5ktXTngsxOQkSEV/xBbwlqYcUrAVh6P9EgMZvFsnHy4SEiUl46Xf0IObWVbMvPrr2gw8A==}
- cpu: [riscv64]
- os: [linux]
-
- '@rollup/rollup-linux-s390x-gnu@4.34.8':
- resolution: {integrity: sha512-DdePVk1NDEuc3fOe3dPPTb+rjMtuFw89gw6gVWxQFAuEqqSdDKnrwzZHrUYdac7A7dXl9Q2Vflxpme15gUWQFA==}
- cpu: [s390x]
- os: [linux]
-
- '@rollup/rollup-linux-s390x-gnu@4.53.3':
- resolution: {integrity: sha512-VYsFMpULAz87ZW6BVYw3I6sWesGpsP9OPcyKe8ofdg9LHxSbRMd7zrVrr5xi/3kMZtpWL/wC+UIJWJYVX5uTKg==}
- cpu: [s390x]
- os: [linux]
-
- '@rollup/rollup-linux-x64-gnu@4.34.8':
- resolution: {integrity: sha512-8y7ED8gjxITUltTUEJLQdgpbPh1sUQ0kMTmufRF/Ns5tI9TNMNlhWtmPKKHCU0SilX+3MJkZ0zERYYGIVBYHIA==}
- cpu: [x64]
- os: [linux]
-
- '@rollup/rollup-linux-x64-gnu@4.53.3':
- resolution: {integrity: sha512-3EhFi1FU6YL8HTUJZ51imGJWEX//ajQPfqWLI3BQq4TlvHy4X0MOr5q3D2Zof/ka0d5FNdPwZXm3Yyib/UEd+w==}
- cpu: [x64]
- os: [linux]
-
- '@rollup/rollup-linux-x64-musl@4.34.8':
- resolution: {integrity: sha512-SCXcP0ZpGFIe7Ge+McxY5zKxiEI5ra+GT3QRxL0pMMtxPfpyLAKleZODi1zdRHkz5/BhueUrYtYVgubqe9JBNQ==}
- cpu: [x64]
- os: [linux]
-
- '@rollup/rollup-linux-x64-musl@4.53.3':
- resolution: {integrity: sha512-eoROhjcc6HbZCJr+tvVT8X4fW3/5g/WkGvvmwz/88sDtSJzO7r/blvoBDgISDiCjDRZmHpwud7h+6Q9JxFwq1Q==}
- cpu: [x64]
- os: [linux]
-
- '@rollup/rollup-openharmony-arm64@4.53.3':
- resolution: {integrity: sha512-OueLAWgrNSPGAdUdIjSWXw+u/02BRTcnfw9PN41D2vq/JSEPnJnVuBgw18VkN8wcd4fjUs+jFHVM4t9+kBSNLw==}
- cpu: [arm64]
- os: [openharmony]
-
- '@rollup/rollup-win32-arm64-msvc@4.34.8':
- resolution: {integrity: sha512-YHYsgzZgFJzTRbth4h7Or0m5O74Yda+hLin0irAIobkLQFRQd1qWmnoVfwmKm9TXIZVAD0nZ+GEb2ICicLyCnQ==}
- cpu: [arm64]
- os: [win32]
-
- '@rollup/rollup-win32-arm64-msvc@4.53.3':
- resolution: {integrity: sha512-GOFuKpsxR/whszbF/bzydebLiXIHSgsEUp6M0JI8dWvi+fFa1TD6YQa4aSZHtpmh2/uAlj/Dy+nmby3TJ3pkTw==}
- cpu: [arm64]
- os: [win32]
-
- '@rollup/rollup-win32-ia32-msvc@4.34.8':
- resolution: {integrity: sha512-r3NRQrXkHr4uWy5TOjTpTYojR9XmF0j/RYgKCef+Ag46FWUTltm5ziticv8LdNsDMehjJ543x/+TJAek/xBA2w==}
- cpu: [ia32]
- os: [win32]
-
- '@rollup/rollup-win32-ia32-msvc@4.53.3':
- resolution: {integrity: sha512-iah+THLcBJdpfZ1TstDFbKNznlzoxa8fmnFYK4V67HvmuNYkVdAywJSoteUszvBQ9/HqN2+9AZghbajMsFT+oA==}
- cpu: [ia32]
- os: [win32]
-
- '@rollup/rollup-win32-x64-gnu@4.53.3':
- resolution: {integrity: sha512-J9QDiOIZlZLdcot5NXEepDkstocktoVjkaKUtqzgzpt2yWjGlbYiKyp05rWwk4nypbYUNoFAztEgixoLaSETkg==}
- cpu: [x64]
- os: [win32]
-
- '@rollup/rollup-win32-x64-msvc@4.34.8':
- resolution: {integrity: sha512-U0FaE5O1BCpZSeE6gBl3c5ObhePQSfk9vDRToMmTkbhCOgW4jqvtS5LGyQ76L1fH8sM0keRp4uDTsbjiUyjk0g==}
- cpu: [x64]
- os: [win32]
-
- '@rollup/rollup-win32-x64-msvc@4.53.3':
- resolution: {integrity: sha512-UhTd8u31dXadv0MopwGgNOBpUVROFKWVQgAg5N1ESyCz8AuBcMqm4AuTjrwgQKGDfoFuz02EuMRHQIw/frmYKQ==}
- cpu: [x64]
- os: [win32]
-
- '@schematics/angular@19.2.19':
- resolution: {integrity: sha512-6/0pvbPCY4UHeB4lnM/5r250QX5gcLgOYbR5FdhFu+22mOPHfWpRc5tNuY9kCephDHzAHjo6fTW1vefOOmA4jw==}
- engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'}
-
- '@sigstore/bundle@3.1.0':
- resolution: {integrity: sha512-Mm1E3/CmDDCz3nDhFKTuYdB47EdRFRQMOE/EAbiG1MJW77/w1b3P7Qx7JSrVJs8PfwOLOVcKQCHErIwCTyPbag==}
- engines: {node: ^18.17.0 || >=20.5.0}
-
- '@sigstore/core@2.0.0':
- resolution: {integrity: sha512-nYxaSb/MtlSI+JWcwTHQxyNmWeWrUXJJ/G4liLrGG7+tS4vAz6LF3xRXqLH6wPIVUoZQel2Fs4ddLx4NCpiIYg==}
- engines: {node: ^18.17.0 || >=20.5.0}
-
- '@sigstore/protobuf-specs@0.4.3':
- resolution: {integrity: sha512-fk2zjD9117RL9BjqEwF7fwv7Q/P9yGsMV4MUJZ/DocaQJ6+3pKr+syBq1owU5Q5qGw5CUbXzm+4yJ2JVRDQeSA==}
- engines: {node: ^18.17.0 || >=20.5.0}
-
- '@sigstore/sign@3.1.0':
- resolution: {integrity: sha512-knzjmaOHOov1Ur7N/z4B1oPqZ0QX5geUfhrVaqVlu+hl0EAoL4o+l0MSULINcD5GCWe3Z0+YJO8ues6vFlW0Yw==}
- engines: {node: ^18.17.0 || >=20.5.0}
-
- '@sigstore/tuf@3.1.1':
- resolution: {integrity: sha512-eFFvlcBIoGwVkkwmTi/vEQFSva3xs5Ot3WmBcjgjVdiaoelBLQaQ/ZBfhlG0MnG0cmTYScPpk7eDdGDWUcFUmg==}
- engines: {node: ^18.17.0 || >=20.5.0}
-
- '@sigstore/verify@2.1.1':
- resolution: {integrity: sha512-hVJD77oT67aowHxwT4+M6PGOp+E2LtLdTK3+FC0lBO9T7sYwItDMXZ7Z07IDCvR1M717a4axbIWckrW67KMP/w==}
- engines: {node: ^18.17.0 || >=20.5.0}
-
- '@sindresorhus/merge-streams@2.3.0':
- resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==}
- engines: {node: '>=18'}
-
- '@tufjs/canonical-json@2.0.0':
- resolution: {integrity: sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==}
- engines: {node: ^16.14.0 || >=18.0.0}
-
- '@tufjs/models@3.0.1':
- resolution: {integrity: sha512-UUYHISyhCU3ZgN8yaear3cGATHb3SMuKHsQ/nVbHXcmnBf+LzQ/cQfhNG+rfaSHgqGKNEm2cOCLVLELStUQ1JA==}
- engines: {node: ^18.17.0 || >=20.5.0}
-
- '@types/body-parser@1.19.6':
- resolution: {integrity: sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==}
-
- '@types/bonjour@3.5.13':
- resolution: {integrity: sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==}
-
- '@types/connect-history-api-fallback@1.5.4':
- resolution: {integrity: sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==}
-
- '@types/connect@3.4.38':
- resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
-
- '@types/eslint-scope@3.7.7':
- resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==}
-
- '@types/eslint@9.6.1':
- resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==}
-
- '@types/estree@1.0.6':
- resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==}
-
- '@types/estree@1.0.8':
- resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
-
- '@types/express-serve-static-core@4.19.7':
- resolution: {integrity: sha512-FvPtiIf1LfhzsaIXhv/PHan/2FeQBbtBDtfX2QfvPxdUelMDEckK08SM6nqo1MIZY3RUlfA+HV8+hFUSio78qg==}
-
- '@types/express@4.17.25':
- resolution: {integrity: sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw==}
-
- '@types/http-errors@2.0.5':
- resolution: {integrity: sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==}
-
- '@types/http-proxy@1.17.17':
- resolution: {integrity: sha512-ED6LB+Z1AVylNTu7hdzuBqOgMnvG/ld6wGCG8wFnAzKX5uyW2K3WD52v0gnLCTK/VLpXtKckgWuyScYK6cSPaw==}
-
- '@types/json-schema@7.0.15':
- resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
-
- '@types/mime@1.3.5':
- resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==}
-
- '@types/node-forge@1.3.14':
- resolution: {integrity: sha512-mhVF2BnD4BO+jtOp7z1CdzaK4mbuK0LLQYAvdOLqHTavxFNq4zA1EmYkpnFjP8HOUzedfQkRnp0E2ulSAYSzAw==}
-
- '@types/node@20.19.25':
- resolution: {integrity: sha512-ZsJzA5thDQMSQO788d7IocwwQbI8B5OPzmqNvpf3NY/+MHDAS759Wo0gd2WQeXYt5AAAQjzcrTVC6SKCuYgoCQ==}
-
- '@types/qs@6.14.0':
- resolution: {integrity: sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==}
-
- '@types/range-parser@1.2.7':
- resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==}
-
- '@types/retry@0.12.2':
- resolution: {integrity: sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==}
-
- '@types/send@0.17.6':
- resolution: {integrity: sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og==}
-
- '@types/send@1.2.1':
- resolution: {integrity: sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==}
-
- '@types/serve-index@1.9.4':
- resolution: {integrity: sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==}
-
- '@types/serve-static@1.15.10':
- resolution: {integrity: sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw==}
-
- '@types/sockjs@0.3.36':
- resolution: {integrity: sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==}
-
- '@types/ws@8.18.1':
- resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==}
-
- '@vitejs/plugin-basic-ssl@1.2.0':
- resolution: {integrity: sha512-mkQnxTkcldAzIsomk1UuLfAu9n+kpQ3JbHcpCp7d2Oo6ITtji8pHS3QToOWjhPFvNQSnhlkAjmGbhv2QvwO/7Q==}
- engines: {node: '>=14.21.3'}
- peerDependencies:
- vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0
-
- '@webassemblyjs/ast@1.14.1':
- resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==}
-
- '@webassemblyjs/floating-point-hex-parser@1.13.2':
- resolution: {integrity: sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==}
-
- '@webassemblyjs/helper-api-error@1.13.2':
- resolution: {integrity: sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==}
-
- '@webassemblyjs/helper-buffer@1.14.1':
- resolution: {integrity: sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==}
-
- '@webassemblyjs/helper-numbers@1.13.2':
- resolution: {integrity: sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==}
-
- '@webassemblyjs/helper-wasm-bytecode@1.13.2':
- resolution: {integrity: sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==}
-
- '@webassemblyjs/helper-wasm-section@1.14.1':
- resolution: {integrity: sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==}
-
- '@webassemblyjs/ieee754@1.13.2':
- resolution: {integrity: sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==}
-
- '@webassemblyjs/leb128@1.13.2':
- resolution: {integrity: sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==}
-
- '@webassemblyjs/utf8@1.13.2':
- resolution: {integrity: sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==}
-
- '@webassemblyjs/wasm-edit@1.14.1':
- resolution: {integrity: sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==}
-
- '@webassemblyjs/wasm-gen@1.14.1':
- resolution: {integrity: sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==}
-
- '@webassemblyjs/wasm-opt@1.14.1':
- resolution: {integrity: sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==}
-
- '@webassemblyjs/wasm-parser@1.14.1':
- resolution: {integrity: sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==}
-
- '@webassemblyjs/wast-printer@1.14.1':
- resolution: {integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==}
-
- '@xtuc/ieee754@1.2.0':
- resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==}
-
- '@xtuc/long@4.2.2':
- resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==}
-
- '@yarnpkg/lockfile@1.1.0':
- resolution: {integrity: sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==}
-
- abbrev@3.0.1:
- resolution: {integrity: sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==}
- engines: {node: ^18.17.0 || >=20.5.0}
-
- accepts@1.3.8:
- resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==}
- engines: {node: '>= 0.6'}
-
- acorn@8.15.0:
- resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==}
- engines: {node: '>=0.4.0'}
- hasBin: true
-
- adjust-sourcemap-loader@4.0.0:
- resolution: {integrity: sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==}
- engines: {node: '>=8.9'}
-
- agent-base@7.1.4:
- resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==}
- engines: {node: '>= 14'}
-
- ajv-formats@2.1.1:
- resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==}
- peerDependencies:
- ajv: ^8.0.0
- peerDependenciesMeta:
- ajv:
- optional: true
-
- ajv-formats@3.0.1:
- resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==}
- peerDependencies:
- ajv: ^8.0.0
- peerDependenciesMeta:
- ajv:
- optional: true
-
- ajv-keywords@5.1.0:
- resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==}
- peerDependencies:
- ajv: ^8.8.2
-
- ajv@8.17.1:
- resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==}
-
- ansi-colors@4.1.3:
- resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==}
- engines: {node: '>=6'}
-
- ansi-escapes@7.2.0:
- resolution: {integrity: sha512-g6LhBsl+GBPRWGWsBtutpzBYuIIdBkLEvad5C/va/74Db018+5TZiyA26cZJAr3Rft5lprVqOIPxf5Vid6tqAw==}
- engines: {node: '>=18'}
-
- ansi-html-community@0.0.8:
- resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==}
- engines: {'0': node >= 0.8.0}
- hasBin: true
-
- ansi-regex@5.0.1:
- resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
- engines: {node: '>=8'}
-
- ansi-regex@6.2.2:
- resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==}
- engines: {node: '>=12'}
-
- ansi-styles@4.3.0:
- resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
- engines: {node: '>=8'}
-
- ansi-styles@6.2.3:
- resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==}
- engines: {node: '>=12'}
-
- any-promise@1.3.0:
- resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==}
-
- anymatch@3.1.3:
- resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
- engines: {node: '>= 8'}
-
- arg@5.0.2:
- resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==}
-
- argparse@2.0.1:
- resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
-
- array-flatten@1.1.1:
- resolution: {integrity: sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=}
-
- autoprefixer@10.4.20:
- resolution: {integrity: sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==}
- engines: {node: ^10 || ^12 || >=14}
- hasBin: true
- peerDependencies:
- postcss: ^8.1.0
-
- autoprefixer@10.4.22:
- resolution: {integrity: sha512-ARe0v/t9gO28Bznv6GgqARmVqcWOV3mfgUPn9becPHMiD3o9BwlRgaeccZnwTpZ7Zwqrm+c1sUSsMxIzQzc8Xg==}
- engines: {node: ^10 || ^12 || >=14}
- hasBin: true
- peerDependencies:
- postcss: ^8.1.0
-
- babel-loader@9.2.1:
- resolution: {integrity: sha512-fqe8naHt46e0yIdkjUZYqddSXfej3AHajX+CSO5X7oy0EmPc6o5Xh+RClNoHjnieWz9AW4kZxW9yyFMhVB1QLA==}
- engines: {node: '>= 14.15.0'}
- peerDependencies:
- '@babel/core': ^7.12.0
- webpack: '>=5'
-
- babel-plugin-polyfill-corejs2@0.4.14:
- resolution: {integrity: sha512-Co2Y9wX854ts6U8gAAPXfn0GmAyctHuK8n0Yhfjd6t30g7yvKjspvvOo9yG+z52PZRgFErt7Ka2pYnXCjLKEpg==}
- peerDependencies:
- '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
-
- babel-plugin-polyfill-corejs3@0.11.1:
- resolution: {integrity: sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ==}
- peerDependencies:
- '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
-
- babel-plugin-polyfill-regenerator@0.6.5:
- resolution: {integrity: sha512-ISqQ2frbiNU9vIJkzg7dlPpznPZ4jOiUQ1uSmB0fEHeowtN3COYRsXr/xexn64NpU13P06jc/L5TgiJXOgrbEg==}
- peerDependencies:
- '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
-
- balanced-match@1.0.2:
- resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
-
- base64-js@1.5.1:
- resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
-
- baseline-browser-mapping@2.8.31:
- resolution: {integrity: sha512-a28v2eWrrRWPpJSzxc+mKwm0ZtVx/G8SepdQZDArnXYU/XS+IF6mp8aB/4E+hH1tyGCoDo3KlUCdlSxGDsRkAw==}
- hasBin: true
-
- batch@0.6.1:
- resolution: {integrity: sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=}
-
- beasties@0.3.2:
- resolution: {integrity: sha512-p4AF8uYzm9Fwu8m/hSVTCPXrRBPmB34hQpHsec2KOaR9CZmgoU8IOv4Cvwq4hgz2p4hLMNbsdNl5XeA6XbAQwA==}
- engines: {node: '>=14.0.0'}
-
- big.js@5.2.2:
- resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==}
-
- binary-extensions@2.3.0:
- resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
- engines: {node: '>=8'}
-
- bl@4.1.0:
- resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==}
-
- body-parser@1.20.3:
- resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==}
- engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
-
- bonjour-service@1.3.0:
- resolution: {integrity: sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==}
-
- boolbase@1.0.0:
- resolution: {integrity: sha1-aN/1++YMUes3cl6p4+0xDcwed24=}
-
- brace-expansion@2.0.2:
- resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==}
-
- braces@3.0.3:
- resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
- engines: {node: '>=8'}
-
- browserslist@4.28.0:
- resolution: {integrity: sha512-tbydkR/CxfMwelN0vwdP/pLkDwyAASZ+VfWm4EOwlB6SWhx1sYnWLqo8N5j0rAzPfzfRaxt0mM/4wPU/Su84RQ==}
- engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
- hasBin: true
-
- buffer-from@1.1.2:
- resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
-
- buffer@5.7.1:
- resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
-
- bundle-name@4.1.0:
- resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==}
- engines: {node: '>=18'}
-
- bytes@3.1.2:
- resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==}
- engines: {node: '>= 0.8'}
-
- cacache@19.0.1:
- resolution: {integrity: sha512-hdsUxulXCi5STId78vRVYEtDAjq99ICAUktLTeTYsLoTE6Z8dS0c8pWNCxwdrk9YfJeobDZc2Y186hD/5ZQgFQ==}
- engines: {node: ^18.17.0 || >=20.5.0}
-
- call-bind-apply-helpers@1.0.2:
- resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
- engines: {node: '>= 0.4'}
-
- call-bound@1.0.4:
- resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==}
- engines: {node: '>= 0.4'}
-
- callsites@3.1.0:
- resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
- engines: {node: '>=6'}
-
- camelcase-css@2.0.1:
- resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==}
- engines: {node: '>= 6'}
-
- caniuse-lite@1.0.30001757:
- resolution: {integrity: sha512-r0nnL/I28Zi/yjk1el6ilj27tKcdjLsNqAOZr0yVjWPrSQyHgKI2INaEWw21bAQSv2LXRt1XuCS/GomNpWOxsQ==}
-
- chalk@4.1.2:
- resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
- engines: {node: '>=10'}
-
- chardet@2.1.1:
- resolution: {integrity: sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==}
-
- chokidar@3.6.0:
- resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
- engines: {node: '>= 8.10.0'}
-
- chokidar@4.0.3:
- resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==}
- engines: {node: '>= 14.16.0'}
-
- chownr@2.0.0:
- resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==}
- engines: {node: '>=10'}
-
- chownr@3.0.0:
- resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==}
- engines: {node: '>=18'}
-
- chrome-trace-event@1.0.4:
- resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==}
- engines: {node: '>=6.0'}
-
- cli-cursor@3.1.0:
- resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==}
- engines: {node: '>=8'}
-
- cli-cursor@5.0.0:
- resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==}
- engines: {node: '>=18'}
-
- cli-spinners@2.9.2:
- resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==}
- engines: {node: '>=6'}
-
- cli-truncate@4.0.0:
- resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==}
- engines: {node: '>=18'}
-
- cli-width@4.1.0:
- resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==}
- engines: {node: '>= 12'}
-
- cliui@8.0.1:
- resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
- engines: {node: '>=12'}
-
- clone-deep@4.0.1:
- resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==}
- engines: {node: '>=6'}
-
- clone@1.0.4:
- resolution: {integrity: sha1-2jCcwmPfFZlMaIypAheco8fNfH4=}
- engines: {node: '>=0.8'}
-
- color-convert@2.0.1:
- resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
- engines: {node: '>=7.0.0'}
-
- color-name@1.1.4:
- resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
-
- colorette@2.0.20:
- resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==}
-
- commander@2.20.3:
- resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
-
- commander@4.1.1:
- resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
- engines: {node: '>= 6'}
-
- common-path-prefix@3.0.0:
- resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==}
-
- compressible@2.0.18:
- resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==}
- engines: {node: '>= 0.6'}
-
- compression@1.8.1:
- resolution: {integrity: sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==}
- engines: {node: '>= 0.8.0'}
-
- connect-history-api-fallback@2.0.0:
- resolution: {integrity: sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==}
- engines: {node: '>=0.8'}
-
- content-disposition@0.5.4:
- resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==}
- engines: {node: '>= 0.6'}
-
- content-type@1.0.5:
- resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==}
- engines: {node: '>= 0.6'}
-
- convert-source-map@1.9.0:
- resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==}
-
- convert-source-map@2.0.0:
- resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
-
- cookie-signature@1.0.6:
- resolution: {integrity: sha1-4wOogrNCzD7oylE6eZmXNNqzriw=}
-
- cookie@0.7.1:
- resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==}
- engines: {node: '>= 0.6'}
-
- copy-anything@2.0.6:
- resolution: {integrity: sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==}
-
- copy-webpack-plugin@12.0.2:
- resolution: {integrity: sha512-SNwdBeHyII+rWvee/bTnAYyO8vfVdcSTud4EIb6jcZ8inLeWucJE0DnxXQBjlQ5zlteuuvooGQy3LIyGxhvlOA==}
- engines: {node: '>= 18.12.0'}
- peerDependencies:
- webpack: ^5.1.0
-
- core-js-compat@3.47.0:
- resolution: {integrity: sha512-IGfuznZ/n7Kp9+nypamBhvwdwLsW6KC8IOaURw2doAK5e98AG3acVLdh0woOnEqCfUtS+Vu882JE4k/DAm3ItQ==}
-
- core-util-is@1.0.3:
- resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
-
- cosmiconfig@9.0.0:
- resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==}
- engines: {node: '>=14'}
- peerDependencies:
- typescript: '>=4.9.5'
- peerDependenciesMeta:
- typescript:
- optional: true
-
- cross-spawn@7.0.6:
- resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
- engines: {node: '>= 8'}
-
- css-loader@7.1.2:
- resolution: {integrity: sha512-6WvYYn7l/XEGN8Xu2vWFt9nVzrCn39vKyTEFf/ExEyoksJjjSZV/0/35XPlMbpnr6VGhZIUg5yJrL8tGfes/FA==}
- engines: {node: '>= 18.12.0'}
- peerDependencies:
- '@rspack/core': 0.x || 1.x
- webpack: ^5.27.0
- peerDependenciesMeta:
- '@rspack/core':
- optional: true
- webpack:
- optional: true
-
- css-select@5.2.2:
- resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==}
-
- css-what@6.2.2:
- resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==}
- engines: {node: '>= 6'}
-
- cssesc@3.0.0:
- resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
- engines: {node: '>=4'}
- hasBin: true
-
- debug@2.6.9:
- resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
- peerDependencies:
- supports-color: '*'
- peerDependenciesMeta:
- supports-color:
- optional: true
-
- debug@4.4.3:
- resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==}
- engines: {node: '>=6.0'}
- peerDependencies:
- supports-color: '*'
- peerDependenciesMeta:
- supports-color:
- optional: true
-
- default-browser-id@5.0.1:
- resolution: {integrity: sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==}
- engines: {node: '>=18'}
-
- default-browser@5.4.0:
- resolution: {integrity: sha512-XDuvSq38Hr1MdN47EDvYtx3U0MTqpCEn+F6ft8z2vYDzMrvQhVp0ui9oQdqW3MvK3vqUETglt1tVGgjLuJ5izg==}
- engines: {node: '>=18'}
-
- defaults@1.0.4:
- resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==}
-
- define-lazy-prop@3.0.0:
- resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==}
- engines: {node: '>=12'}
-
- depd@1.1.2:
- resolution: {integrity: sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=}
- engines: {node: '>= 0.6'}
-
- depd@2.0.0:
- resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==}
- engines: {node: '>= 0.8'}
-
- destroy@1.2.0:
- resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==}
- engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
-
- detect-libc@1.0.3:
- resolution: {integrity: sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=}
- engines: {node: '>=0.10'}
- hasBin: true
-
- detect-libc@2.1.2:
- resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==}
- engines: {node: '>=8'}
-
- detect-node@2.1.0:
- resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==}
-
- didyoumean@1.2.2:
- resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==}
-
- dlv@1.1.3:
- resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==}
-
- dns-packet@5.6.1:
- resolution: {integrity: sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==}
- engines: {node: '>=6'}
-
- dom-serializer@2.0.0:
- resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==}
-
- domelementtype@2.3.0:
- resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==}
-
- domhandler@5.0.3:
- resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==}
- engines: {node: '>= 4'}
-
- domutils@3.2.2:
- resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==}
-
- dunder-proto@1.0.1:
- resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
- engines: {node: '>= 0.4'}
-
- eastasianwidth@0.2.0:
- resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
-
- ee-first@1.1.1:
- resolution: {integrity: sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=}
-
- electron-to-chromium@1.5.262:
- resolution: {integrity: sha512-NlAsMteRHek05jRUxUR0a5jpjYq9ykk6+kO0yRaMi5moe7u0fVIOeQ3Y30A8dIiWFBNUoQGi1ljb1i5VtS9WQQ==}
-
- emoji-regex@10.6.0:
- resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==}
-
- emoji-regex@8.0.0:
- resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
-
- emoji-regex@9.2.2:
- resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
-
- emojis-list@3.0.0:
- resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==}
- engines: {node: '>= 4'}
-
- encodeurl@1.0.2:
- resolution: {integrity: sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=}
- engines: {node: '>= 0.8'}
-
- encodeurl@2.0.0:
- resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==}
- engines: {node: '>= 0.8'}
-
- encoding@0.1.13:
- resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==}
-
- enhanced-resolve@5.18.3:
- resolution: {integrity: sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==}
- engines: {node: '>=10.13.0'}
-
- entities@4.5.0:
- resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
- engines: {node: '>=0.12'}
-
- entities@6.0.1:
- resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==}
- engines: {node: '>=0.12'}
-
- env-paths@2.2.1:
- resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==}
- engines: {node: '>=6'}
-
- environment@1.1.0:
- resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==}
- engines: {node: '>=18'}
-
- err-code@2.0.3:
- resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==}
-
- errno@0.1.8:
- resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==}
- hasBin: true
-
- error-ex@1.3.4:
- resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==}
-
- es-define-property@1.0.1:
- resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==}
- engines: {node: '>= 0.4'}
-
- es-errors@1.3.0:
- resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
- engines: {node: '>= 0.4'}
-
- es-module-lexer@1.7.0:
- resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==}
-
- es-object-atoms@1.1.1:
- resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==}
- engines: {node: '>= 0.4'}
-
- esbuild-wasm@0.25.4:
- resolution: {integrity: sha512-2HlCS6rNvKWaSKhWaG/YIyRsTsL3gUrMP2ToZMBIjw9LM7vVcIs+rz8kE2vExvTJgvM8OKPqNpcHawY/BQc/qQ==}
- engines: {node: '>=18'}
- hasBin: true
-
- esbuild@0.25.4:
- resolution: {integrity: sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==}
- engines: {node: '>=18'}
- hasBin: true
-
- escalade@3.2.0:
- resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
- engines: {node: '>=6'}
-
- escape-html@1.0.3:
- resolution: {integrity: sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=}
-
- eslint-scope@5.1.1:
- resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==}
- engines: {node: '>=8.0.0'}
-
- esrecurse@4.3.0:
- resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
- engines: {node: '>=4.0'}
-
- estraverse@4.3.0:
- resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==}
- engines: {node: '>=4.0'}
-
- estraverse@5.3.0:
- resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
- engines: {node: '>=4.0'}
-
- esutils@2.0.3:
- resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
- engines: {node: '>=0.10.0'}
-
- etag@1.8.1:
- resolution: {integrity: sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=}
- engines: {node: '>= 0.6'}
-
- eventemitter3@4.0.7:
- resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==}
-
- eventemitter3@5.0.1:
- resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
-
- events@3.3.0:
- resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==}
- engines: {node: '>=0.8.x'}
-
- exponential-backoff@3.1.3:
- resolution: {integrity: sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==}
-
- express@4.21.2:
- resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==}
- engines: {node: '>= 0.10.0'}
-
- fast-deep-equal@3.1.3:
- resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
-
- fast-glob@3.3.3:
- resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==}
- engines: {node: '>=8.6.0'}
-
- fast-uri@3.1.0:
- resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==}
-
- fastq@1.19.1:
- resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==}
-
- faye-websocket@0.11.4:
- resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==}
- engines: {node: '>=0.8.0'}
-
- fdir@6.5.0:
- resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==}
- engines: {node: '>=12.0.0'}
- peerDependencies:
- picomatch: ^3 || ^4
- peerDependenciesMeta:
- picomatch:
- optional: true
-
- fill-range@7.1.1:
- resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
- engines: {node: '>=8'}
-
- finalhandler@1.3.1:
- resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==}
- engines: {node: '>= 0.8'}
-
- find-cache-dir@4.0.0:
- resolution: {integrity: sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==}
- engines: {node: '>=14.16'}
-
- find-up@6.3.0:
- resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
- flat@5.0.2:
- resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==}
- hasBin: true
-
- follow-redirects@1.15.11:
- resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==}
- engines: {node: '>=4.0'}
- peerDependencies:
- debug: '*'
- peerDependenciesMeta:
- debug:
- optional: true
-
- foreground-child@3.3.1:
- resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==}
- engines: {node: '>=14'}
-
- forwarded@0.2.0:
- resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==}
- engines: {node: '>= 0.6'}
-
- fraction.js@4.3.7:
- resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==}
-
- fraction.js@5.3.4:
- resolution: {integrity: sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==}
-
- fresh@0.5.2:
- resolution: {integrity: sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=}
- engines: {node: '>= 0.6'}
-
- fs-minipass@2.1.0:
- resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==}
- engines: {node: '>= 8'}
-
- fs-minipass@3.0.3:
- resolution: {integrity: sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==}
- engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
-
- fsevents@2.3.3:
- resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
- engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
- os: [darwin]
-
- function-bind@1.1.2:
- resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
-
- gensync@1.0.0-beta.2:
- resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
- engines: {node: '>=6.9.0'}
-
- get-caller-file@2.0.5:
- resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
- engines: {node: 6.* || 8.* || >= 10.*}
-
- get-east-asian-width@1.4.0:
- resolution: {integrity: sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==}
- engines: {node: '>=18'}
-
- get-intrinsic@1.3.0:
- resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==}
- engines: {node: '>= 0.4'}
-
- get-proto@1.0.1:
- resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==}
- engines: {node: '>= 0.4'}
-
- glob-parent@5.1.2:
- resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
- engines: {node: '>= 6'}
-
- glob-parent@6.0.2:
- resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
- engines: {node: '>=10.13.0'}
-
- glob-to-regex.js@1.2.0:
- resolution: {integrity: sha512-QMwlOQKU/IzqMUOAZWubUOT8Qft+Y0KQWnX9nK3ch0CJg0tTp4TvGZsTfudYKv2NzoQSyPcnA6TYeIQ3jGichQ==}
- engines: {node: '>=10.0'}
- peerDependencies:
- tslib: '2'
-
- glob-to-regexp@0.4.1:
- resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==}
-
- glob@10.5.0:
- resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==}
- hasBin: true
-
- globby@14.1.0:
- resolution: {integrity: sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==}
- engines: {node: '>=18'}
-
- gopd@1.2.0:
- resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==}
- engines: {node: '>= 0.4'}
-
- graceful-fs@4.2.11:
- resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
-
- handle-thing@2.0.1:
- resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==}
-
- has-flag@4.0.0:
- resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
- engines: {node: '>=8'}
-
- has-symbols@1.1.0:
- resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==}
- engines: {node: '>= 0.4'}
-
- hasown@2.0.2:
- resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
- engines: {node: '>= 0.4'}
-
- hosted-git-info@8.1.0:
- resolution: {integrity: sha512-Rw/B2DNQaPBICNXEm8balFz9a6WpZrkCGpcWFpy7nCj+NyhSdqXipmfvtmWt9xGfp0wZnBxB+iVpLmQMYt47Tw==}
- engines: {node: ^18.17.0 || >=20.5.0}
-
- hpack.js@2.1.6:
- resolution: {integrity: sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==}
-
- htmlparser2@10.0.0:
- resolution: {integrity: sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g==}
-
- http-cache-semantics@4.2.0:
- resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==}
-
- http-deceiver@1.2.7:
- resolution: {integrity: sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==}
-
- http-errors@1.6.3:
- resolution: {integrity: sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=}
- engines: {node: '>= 0.6'}
-
- http-errors@2.0.0:
- resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==}
- engines: {node: '>= 0.8'}
-
- http-parser-js@0.5.10:
- resolution: {integrity: sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==}
-
- http-proxy-agent@7.0.2:
- resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==}
- engines: {node: '>= 14'}
-
- http-proxy-middleware@2.0.9:
- resolution: {integrity: sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==}
- engines: {node: '>=12.0.0'}
- peerDependencies:
- '@types/express': ^4.17.13
- peerDependenciesMeta:
- '@types/express':
- optional: true
-
- http-proxy-middleware@3.0.5:
- resolution: {integrity: sha512-GLZZm1X38BPY4lkXA01jhwxvDoOkkXqjgVyUzVxiEK4iuRu03PZoYHhHRwxnfhQMDuaxi3vVri0YgSro/1oWqg==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
-
- http-proxy@1.18.1:
- resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==}
- engines: {node: '>=8.0.0'}
-
- https-proxy-agent@7.0.6:
- resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==}
- engines: {node: '>= 14'}
-
- hyperdyperid@1.2.0:
- resolution: {integrity: sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==}
- engines: {node: '>=10.18'}
-
- iconv-lite@0.4.24:
- resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
- engines: {node: '>=0.10.0'}
-
- iconv-lite@0.6.3:
- resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
- engines: {node: '>=0.10.0'}
-
- iconv-lite@0.7.0:
- resolution: {integrity: sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==}
- engines: {node: '>=0.10.0'}
-
- icss-utils@5.1.0:
- resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==}
- engines: {node: ^10 || ^12 || >= 14}
- peerDependencies:
- postcss: ^8.1.0
-
- ieee754@1.2.1:
- resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
-
- ignore-walk@7.0.0:
- resolution: {integrity: sha512-T4gbf83A4NH95zvhVYZc+qWocBBGlpzUXLPGurJggw/WIOwicfXJChLDP/iBZnN5WqROSu5Bm3hhle4z8a8YGQ==}
- engines: {node: ^18.17.0 || >=20.5.0}
-
- ignore@7.0.5:
- resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==}
- engines: {node: '>= 4'}
-
- image-size@0.5.5:
- resolution: {integrity: sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==}
- engines: {node: '>=0.10.0'}
- hasBin: true
-
- immutable@5.1.4:
- resolution: {integrity: sha512-p6u1bG3YSnINT5RQmx/yRZBpenIl30kVxkTLDyHLIMk0gict704Q9n+thfDI7lTRm9vXdDYutVzXhzcThxTnXA==}
-
- import-fresh@3.3.1:
- resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==}
- engines: {node: '>=6'}
-
- imurmurhash@0.1.4:
- resolution: {integrity: sha1-khi5srkoojixPcT7a21XbyMUU+o=}
- engines: {node: '>=0.8.19'}
-
- inherits@2.0.3:
- resolution: {integrity: sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=}
-
- inherits@2.0.4:
- resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
-
- ini@5.0.0:
- resolution: {integrity: sha512-+N0ngpO3e7cRUWOJAS7qw0IZIVc6XPrW4MlFBdD066F2L4k1L6ker3hLqSq7iXxU5tgS4WGkIUElWn5vogAEnw==}
- engines: {node: ^18.17.0 || >=20.5.0}
-
- ip-address@10.1.0:
- resolution: {integrity: sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==}
- engines: {node: '>= 12'}
-
- ipaddr.js@1.9.1:
- resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==}
- engines: {node: '>= 0.10'}
-
- ipaddr.js@2.2.0:
- resolution: {integrity: sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==}
- engines: {node: '>= 10'}
-
- is-arrayish@0.2.1:
- resolution: {integrity: sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=}
-
- is-binary-path@2.1.0:
- resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
- engines: {node: '>=8'}
-
- is-core-module@2.16.1:
- resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==}
- engines: {node: '>= 0.4'}
-
- is-docker@3.0.0:
- resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
- hasBin: true
-
- is-extglob@2.1.1:
- resolution: {integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=}
- engines: {node: '>=0.10.0'}
-
- is-fullwidth-code-point@3.0.0:
- resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
- engines: {node: '>=8'}
-
- is-fullwidth-code-point@4.0.0:
- resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==}
- engines: {node: '>=12'}
-
- is-fullwidth-code-point@5.1.0:
- resolution: {integrity: sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==}
- engines: {node: '>=18'}
-
- is-glob@4.0.3:
- resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
- engines: {node: '>=0.10.0'}
-
- is-inside-container@1.0.0:
- resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==}
- engines: {node: '>=14.16'}
- hasBin: true
-
- is-interactive@1.0.0:
- resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==}
- engines: {node: '>=8'}
-
- is-network-error@1.3.0:
- resolution: {integrity: sha512-6oIwpsgRfnDiyEDLMay/GqCl3HoAtH5+RUKW29gYkL0QA+ipzpDLA16yQs7/RHCSu+BwgbJaOUqa4A99qNVQVw==}
- engines: {node: '>=16'}
-
- is-number@7.0.0:
- resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
- engines: {node: '>=0.12.0'}
-
- is-plain-obj@3.0.0:
- resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==}
- engines: {node: '>=10'}
-
- is-plain-object@2.0.4:
- resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==}
- engines: {node: '>=0.10.0'}
-
- is-plain-object@5.0.0:
- resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==}
- engines: {node: '>=0.10.0'}
-
- is-unicode-supported@0.1.0:
- resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
- engines: {node: '>=10'}
-
- is-what@3.14.1:
- resolution: {integrity: sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==}
-
- is-wsl@3.1.0:
- resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==}
- engines: {node: '>=16'}
-
- isarray@1.0.0:
- resolution: {integrity: sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=}
-
- isexe@2.0.0:
- resolution: {integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=}
-
- isexe@3.1.1:
- resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==}
- engines: {node: '>=16'}
-
- isobject@3.0.1:
- resolution: {integrity: sha1-TkMekrEalzFjaqH5yNHMvP2reN8=}
- engines: {node: '>=0.10.0'}
-
- istanbul-lib-coverage@3.2.2:
- resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==}
- engines: {node: '>=8'}
-
- istanbul-lib-instrument@6.0.3:
- resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==}
- engines: {node: '>=10'}
-
- jackspeak@3.4.3:
- resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
-
- jest-worker@27.5.1:
- resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==}
- engines: {node: '>= 10.13.0'}
-
- jiti@1.21.7:
- resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==}
- hasBin: true
-
- js-tokens@4.0.0:
- resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
-
- js-yaml@4.1.1:
- resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==}
- hasBin: true
-
- jsesc@3.1.0:
- resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==}
- engines: {node: '>=6'}
- hasBin: true
-
- json-parse-even-better-errors@2.3.1:
- resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
-
- json-parse-even-better-errors@4.0.0:
- resolution: {integrity: sha512-lR4MXjGNgkJc7tkQ97kb2nuEMnNCyU//XYVH0MKTGcXEiSudQ5MKGKen3C5QubYy0vmq+JGitUg92uuywGEwIA==}
- engines: {node: ^18.17.0 || >=20.5.0}
-
- json-schema-traverse@1.0.0:
- resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==}
-
- json5@2.2.3:
- resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
- engines: {node: '>=6'}
- hasBin: true
-
- jsonc-parser@3.3.1:
- resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==}
-
- jsonparse@1.3.1:
- resolution: {integrity: sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=}
- engines: {'0': node >= 0.2.0}
-
- karma-source-map-support@1.4.0:
- resolution: {integrity: sha512-RsBECncGO17KAoJCYXjv+ckIz+Ii9NCi+9enk+rq6XC81ezYkb4/RHE6CTXdA7IOJqoF3wcaLfVG0CPmE5ca6A==}
-
- kind-of@6.0.3:
- resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==}
- engines: {node: '>=0.10.0'}
-
- launch-editor@2.12.0:
- resolution: {integrity: sha512-giOHXoOtifjdHqUamwKq6c49GzBdLjvxrd2D+Q4V6uOHopJv7p9VJxikDsQ/CBXZbEITgUqSVHXLTG3VhPP1Dg==}
-
- less-loader@12.2.0:
- resolution: {integrity: sha512-MYUxjSQSBUQmowc0l5nPieOYwMzGPUaTzB6inNW/bdPEG9zOL3eAAD1Qw5ZxSPk7we5dMojHwNODYMV1hq4EVg==}
- engines: {node: '>= 18.12.0'}
- peerDependencies:
- '@rspack/core': 0.x || 1.x
- less: ^3.5.0 || ^4.0.0
- webpack: ^5.0.0
- peerDependenciesMeta:
- '@rspack/core':
- optional: true
- webpack:
- optional: true
-
- less@4.2.2:
- resolution: {integrity: sha512-tkuLHQlvWUTeQ3doAqnHbNn8T6WX1KA8yvbKG9x4VtKtIjHsVKQZCH11zRgAfbDAXC2UNIg/K9BYAAcEzUIrNg==}
- engines: {node: '>=6'}
- hasBin: true
-
- license-webpack-plugin@4.0.2:
- resolution: {integrity: sha512-771TFWFD70G1wLTC4oU2Cw4qvtmNrIw+wRvBtn+okgHl7slJVi7zfNcdmqDL72BojM30VNJ2UHylr1o77U37Jw==}
- peerDependencies:
- webpack: '*'
- peerDependenciesMeta:
- webpack:
- optional: true
-
- lilconfig@3.1.3:
- resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==}
- engines: {node: '>=14'}
-
- lines-and-columns@1.2.4:
- resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
-
- listr2@8.2.5:
- resolution: {integrity: sha512-iyAZCeyD+c1gPyE9qpFu8af0Y+MRtmKOncdGoA2S5EY8iFq99dmmvkNnHiWo+pj0s7yH7l3KPIgee77tKpXPWQ==}
- engines: {node: '>=18.0.0'}
-
- lmdb@3.2.6:
- resolution: {integrity: sha512-SuHqzPl7mYStna8WRotY8XX/EUZBjjv3QyKIByeCLFfC9uXT/OIHByEcA07PzbMfQAM0KYJtLgtpMRlIe5dErQ==}
- hasBin: true
-
- loader-runner@4.3.1:
- resolution: {integrity: sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==}
- engines: {node: '>=6.11.5'}
-
- loader-utils@2.0.4:
- resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==}
- engines: {node: '>=8.9.0'}
-
- loader-utils@3.3.1:
- resolution: {integrity: sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==}
- engines: {node: '>= 12.13.0'}
-
- locate-path@7.2.0:
- resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
- lodash.debounce@4.0.8:
- resolution: {integrity: sha1-gteb/zCmfEAF/9XiUVMArZyk168=}
-
- log-symbols@4.1.0:
- resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
- engines: {node: '>=10'}
-
- log-update@6.1.0:
- resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==}
- engines: {node: '>=18'}
-
- lru-cache@10.4.3:
- resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
-
- lru-cache@5.1.1:
- resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
-
- magic-string@0.30.17:
- resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==}
-
- make-dir@2.1.0:
- resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==}
- engines: {node: '>=6'}
-
- make-fetch-happen@14.0.3:
- resolution: {integrity: sha512-QMjGbFTP0blj97EeidG5hk/QhKQ3T4ICckQGLgz38QF7Vgbk6e6FTARN8KhKxyBbWn8R0HU+bnw8aSoFPD4qtQ==}
- engines: {node: ^18.17.0 || >=20.5.0}
-
- math-intrinsics@1.1.0:
- resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
- engines: {node: '>= 0.4'}
-
- media-typer@0.3.0:
- resolution: {integrity: sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=}
- engines: {node: '>= 0.6'}
-
- memfs@4.51.0:
- resolution: {integrity: sha512-4zngfkVM/GpIhC8YazOsM6E8hoB33NP0BCESPOA6z7qaL6umPJNqkO8CNYaLV2FB2MV6H1O3x2luHHOSqppv+A==}
-
- merge-descriptors@1.0.3:
- resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==}
-
- merge-stream@2.0.0:
- resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
-
- merge2@1.4.1:
- resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
- engines: {node: '>= 8'}
-
- methods@1.1.2:
- resolution: {integrity: sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=}
- engines: {node: '>= 0.6'}
-
- micromatch@4.0.8:
- resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
- engines: {node: '>=8.6'}
-
- mime-db@1.52.0:
- resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
- engines: {node: '>= 0.6'}
-
- mime-db@1.54.0:
- resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==}
- engines: {node: '>= 0.6'}
-
- mime-types@2.1.35:
- resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
- engines: {node: '>= 0.6'}
-
- mime@1.6.0:
- resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==}
- engines: {node: '>=4'}
- hasBin: true
-
- mimic-fn@2.1.0:
- resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
- engines: {node: '>=6'}
-
- mimic-function@5.0.1:
- resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==}
- engines: {node: '>=18'}
-
- mini-css-extract-plugin@2.9.2:
- resolution: {integrity: sha512-GJuACcS//jtq4kCtd5ii/M0SZf7OZRH+BxdqXZHaJfb8TJiVl+NgQRPwiYt2EuqeSkNydn/7vP+bcE27C5mb9w==}
- engines: {node: '>= 12.13.0'}
- peerDependencies:
- webpack: ^5.0.0
-
- minimalistic-assert@1.0.1:
- resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==}
-
- minimatch@9.0.5:
- resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
- engines: {node: '>=16 || 14 >=14.17'}
-
- minipass-collect@2.0.1:
- resolution: {integrity: sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==}
- engines: {node: '>=16 || 14 >=14.17'}
-
- minipass-fetch@4.0.1:
- resolution: {integrity: sha512-j7U11C5HXigVuutxebFadoYBbd7VSdZWggSe64NVdvWNBqGAiXPL2QVCehjmw7lY1oF9gOllYbORh+hiNgfPgQ==}
- engines: {node: ^18.17.0 || >=20.5.0}
-
- minipass-flush@1.0.5:
- resolution: {integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==}
- engines: {node: '>= 8'}
-
- minipass-pipeline@1.2.4:
- resolution: {integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==}
- engines: {node: '>=8'}
-
- minipass-sized@1.0.3:
- resolution: {integrity: sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==}
- engines: {node: '>=8'}
-
- minipass@3.3.6:
- resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==}
- engines: {node: '>=8'}
-
- minipass@5.0.0:
- resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==}
- engines: {node: '>=8'}
-
- minipass@7.1.2:
- resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
- engines: {node: '>=16 || 14 >=14.17'}
-
- minizlib@2.1.2:
- resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==}
- engines: {node: '>= 8'}
-
- minizlib@3.1.0:
- resolution: {integrity: sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==}
- engines: {node: '>= 18'}
-
- mkdirp@1.0.4:
- resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==}
- engines: {node: '>=10'}
- hasBin: true
-
- mrmime@2.0.1:
- resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==}
- engines: {node: '>=10'}
-
- ms@2.0.0:
- resolution: {integrity: sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=}
-
- ms@2.1.3:
- resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
-
- msgpackr-extract@3.0.3:
- resolution: {integrity: sha512-P0efT1C9jIdVRefqjzOQ9Xml57zpOXnIuS+csaB4MdZbTdmGDLo8XhzBG1N7aO11gKDDkJvBLULeFTo46wwreA==}
- hasBin: true
-
- msgpackr@1.11.5:
- resolution: {integrity: sha512-UjkUHN0yqp9RWKy0Lplhh+wlpdt9oQBYgULZOiFhV3VclSF1JnSQWZ5r9gORQlNYaUKQoR8itv7g7z1xDDuACA==}
-
- multicast-dns@7.2.5:
- resolution: {integrity: sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==}
- hasBin: true
-
- mute-stream@1.0.0:
- resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==}
- engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
-
- mute-stream@2.0.0:
- resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==}
- engines: {node: ^18.17.0 || >=20.5.0}
-
- mz@2.7.0:
- resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==}
-
- nanoid@3.3.11:
- resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
- engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
- hasBin: true
-
- needle@3.3.1:
- resolution: {integrity: sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==}
- engines: {node: '>= 4.4.x'}
- hasBin: true
-
- negotiator@0.6.3:
- resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==}
- engines: {node: '>= 0.6'}
-
- negotiator@0.6.4:
- resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==}
- engines: {node: '>= 0.6'}
-
- negotiator@1.0.0:
- resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==}
- engines: {node: '>= 0.6'}
-
- neo-async@2.6.2:
- resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==}
-
- node-addon-api@6.1.0:
- resolution: {integrity: sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==}
-
- node-addon-api@7.1.1:
- resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==}
-
- node-forge@1.3.2:
- resolution: {integrity: sha512-6xKiQ+cph9KImrRh0VsjH2d8/GXA4FIMlgU4B757iI1ApvcyA9VlouP0yZJha01V+huImO+kKMU7ih+2+E14fw==}
- engines: {node: '>= 6.13.0'}
-
- node-gyp-build-optional-packages@5.2.2:
- resolution: {integrity: sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw==}
- hasBin: true
-
- node-gyp@11.5.0:
- resolution: {integrity: sha512-ra7Kvlhxn5V9Slyus0ygMa2h+UqExPqUIkfk7Pc8QTLT956JLSy51uWFwHtIYy0vI8cB4BDhc/S03+880My/LQ==}
- engines: {node: ^18.17.0 || >=20.5.0}
- hasBin: true
-
- node-releases@2.0.27:
- resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==}
-
- nopt@8.1.0:
- resolution: {integrity: sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==}
- engines: {node: ^18.17.0 || >=20.5.0}
- hasBin: true
-
- normalize-path@3.0.0:
- resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
- engines: {node: '>=0.10.0'}
-
- normalize-range@0.1.2:
- resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==}
- engines: {node: '>=0.10.0'}
-
- npm-bundled@4.0.0:
- resolution: {integrity: sha512-IxaQZDMsqfQ2Lz37VvyyEtKLe8FsRZuysmedy/N06TU1RyVppYKXrO4xIhR0F+7ubIBox6Q7nir6fQI3ej39iA==}
- engines: {node: ^18.17.0 || >=20.5.0}
-
- npm-install-checks@7.1.2:
- resolution: {integrity: sha512-z9HJBCYw9Zr8BqXcllKIs5nI+QggAImbBdHphOzVYrz2CB4iQ6FzWyKmlqDZua+51nAu7FcemlbTc9VgQN5XDQ==}
- engines: {node: ^18.17.0 || >=20.5.0}
-
- npm-normalize-package-bin@4.0.0:
- resolution: {integrity: sha512-TZKxPvItzai9kN9H/TkmCtx/ZN/hvr3vUycjlfmH0ootY9yFBzNOpiXAdIn1Iteqsvk4lQn6B5PTrt+n6h8k/w==}
- engines: {node: ^18.17.0 || >=20.5.0}
-
- npm-package-arg@12.0.2:
- resolution: {integrity: sha512-f1NpFjNI9O4VbKMOlA5QoBq/vSQPORHcTZ2feJpFkTHJ9eQkdlmZEKSjcAhxTGInC7RlEyScT9ui67NaOsjFWA==}
- engines: {node: ^18.17.0 || >=20.5.0}
-
- npm-packlist@9.0.0:
- resolution: {integrity: sha512-8qSayfmHJQTx3nJWYbbUmflpyarbLMBc6LCAjYsiGtXxDB68HaZpb8re6zeaLGxZzDuMdhsg70jryJe+RrItVQ==}
- engines: {node: ^18.17.0 || >=20.5.0}
-
- npm-pick-manifest@10.0.0:
- resolution: {integrity: sha512-r4fFa4FqYY8xaM7fHecQ9Z2nE9hgNfJR+EmoKv0+chvzWkBcORX3r0FpTByP+CbOVJDladMXnPQGVN8PBLGuTQ==}
- engines: {node: ^18.17.0 || >=20.5.0}
-
- npm-registry-fetch@18.0.2:
- resolution: {integrity: sha512-LeVMZBBVy+oQb5R6FDV9OlJCcWDU+al10oKpe+nsvcHnG24Z3uM3SvJYKfGJlfGjVU8v9liejCrUR/M5HO5NEQ==}
- engines: {node: ^18.17.0 || >=20.5.0}
-
- nth-check@2.1.1:
- resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
-
- object-assign@4.1.1:
- resolution: {integrity: sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=}
- engines: {node: '>=0.10.0'}
-
- object-hash@3.0.0:
- resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==}
- engines: {node: '>= 6'}
-
- object-inspect@1.13.4:
- resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==}
- engines: {node: '>= 0.4'}
-
- obuf@1.1.2:
- resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==}
-
- on-finished@2.4.1:
- resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==}
- engines: {node: '>= 0.8'}
-
- on-headers@1.1.0:
- resolution: {integrity: sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==}
- engines: {node: '>= 0.8'}
-
- onetime@5.1.2:
- resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
- engines: {node: '>=6'}
-
- onetime@7.0.0:
- resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==}
- engines: {node: '>=18'}
-
- open@10.1.0:
- resolution: {integrity: sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==}
- engines: {node: '>=18'}
-
- ora@5.4.1:
- resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==}
- engines: {node: '>=10'}
-
- ordered-binary@1.6.0:
- resolution: {integrity: sha512-IQh2aMfMIDbPjI/8a3Edr+PiOpcsB7yo8NdW7aHWVaoR/pcDldunMvnnwbk/auPGqmKeAdxtZl7MHX/QmPwhvQ==}
-
- p-limit@4.0.0:
- resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
- p-locate@6.0.0:
- resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
- p-map@7.0.4:
- resolution: {integrity: sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ==}
- engines: {node: '>=18'}
-
- p-retry@6.2.1:
- resolution: {integrity: sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ==}
- engines: {node: '>=16.17'}
-
- package-json-from-dist@1.0.1:
- resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==}
-
- pacote@20.0.0:
- resolution: {integrity: sha512-pRjC5UFwZCgx9kUFDVM9YEahv4guZ1nSLqwmWiLUnDbGsjs+U5w7z6Uc8HNR1a6x8qnu5y9xtGE6D1uAuYz+0A==}
- engines: {node: ^18.17.0 || >=20.5.0}
- hasBin: true
-
- parent-module@1.0.1:
- resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
- engines: {node: '>=6'}
-
- parse-json@5.2.0:
- resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
- engines: {node: '>=8'}
-
- parse-node-version@1.0.1:
- resolution: {integrity: sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==}
- engines: {node: '>= 0.10'}
-
- parse5-html-rewriting-stream@7.0.0:
- resolution: {integrity: sha512-mazCyGWkmCRWDI15Zp+UiCqMp/0dgEmkZRvhlsqqKYr4SsVm/TvnSpD9fCvqCA2zoWJcfRym846ejWBBHRiYEg==}
-
- parse5-sax-parser@7.0.0:
- resolution: {integrity: sha512-5A+v2SNsq8T6/mG3ahcz8ZtQ0OUFTatxPbeidoMB7tkJSGDY3tdfl4MHovtLQHkEn5CGxijNWRQHhRQ6IRpXKg==}
-
- parse5@7.3.0:
- resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==}
-
- parseurl@1.3.3:
- resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==}
- engines: {node: '>= 0.8'}
-
- path-exists@5.0.0:
- resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
- path-key@3.1.1:
- resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
- engines: {node: '>=8'}
-
- path-parse@1.0.7:
- resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
-
- path-scurry@1.11.1:
- resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
- engines: {node: '>=16 || 14 >=14.18'}
-
- path-to-regexp@0.1.12:
- resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==}
-
- path-type@6.0.0:
- resolution: {integrity: sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==}
- engines: {node: '>=18'}
-
- picocolors@1.1.1:
- resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
-
- picomatch@2.3.1:
- resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
- engines: {node: '>=8.6'}
-
- picomatch@4.0.2:
- resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==}
- engines: {node: '>=12'}
-
- picomatch@4.0.3:
- resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==}
- engines: {node: '>=12'}
-
- pify@2.3.0:
- resolution: {integrity: sha1-7RQaasBDqEnqWISY59yosVMw6Qw=}
- engines: {node: '>=0.10.0'}
-
- pify@4.0.1:
- resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==}
- engines: {node: '>=6'}
-
- pirates@4.0.7:
- resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==}
- engines: {node: '>= 6'}
-
- piscina@4.8.0:
- resolution: {integrity: sha512-EZJb+ZxDrQf3dihsUL7p42pjNyrNIFJCrRHPMgxu/svsj+P3xS3fuEWp7k2+rfsavfl1N0G29b1HGs7J0m8rZA==}
-
- pkg-dir@7.0.0:
- resolution: {integrity: sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==}
- engines: {node: '>=14.16'}
-
- postcss-import@15.1.0:
- resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==}
- engines: {node: '>=14.0.0'}
- peerDependencies:
- postcss: ^8.0.0
-
- postcss-js@4.1.0:
- resolution: {integrity: sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==}
- engines: {node: ^12 || ^14 || >= 16}
- peerDependencies:
- postcss: ^8.4.21
-
- postcss-load-config@6.0.1:
- 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
-
- postcss-loader@8.1.1:
- resolution: {integrity: sha512-0IeqyAsG6tYiDRCYKQJLAmgQr47DX6N7sFSWvQxt6AcupX8DIdmykuk/o/tx0Lze3ErGHJEp5OSRxrelC6+NdQ==}
- engines: {node: '>= 18.12.0'}
- peerDependencies:
- '@rspack/core': 0.x || 1.x
- postcss: ^7.0.0 || ^8.0.1
- webpack: ^5.0.0
- peerDependenciesMeta:
- '@rspack/core':
- optional: true
- webpack:
- optional: true
-
- postcss-media-query-parser@0.2.3:
- resolution: {integrity: sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==}
-
- postcss-modules-extract-imports@3.1.0:
- resolution: {integrity: sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==}
- engines: {node: ^10 || ^12 || >= 14}
- peerDependencies:
- postcss: ^8.1.0
-
- postcss-modules-local-by-default@4.2.0:
- resolution: {integrity: sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==}
- engines: {node: ^10 || ^12 || >= 14}
- peerDependencies:
- postcss: ^8.1.0
-
- postcss-modules-scope@3.2.1:
- resolution: {integrity: sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==}
- engines: {node: ^10 || ^12 || >= 14}
- peerDependencies:
- postcss: ^8.1.0
-
- postcss-modules-values@4.0.0:
- resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==}
- engines: {node: ^10 || ^12 || >= 14}
- peerDependencies:
- postcss: ^8.1.0
-
- postcss-nested@6.2.0:
- resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==}
- engines: {node: '>=12.0'}
- peerDependencies:
- postcss: ^8.2.14
-
- postcss-selector-parser@6.1.2:
- resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==}
- engines: {node: '>=4'}
-
- postcss-selector-parser@7.1.1:
- resolution: {integrity: sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==}
- engines: {node: '>=4'}
-
- postcss-value-parser@4.2.0:
- resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
-
- postcss@8.5.2:
- resolution: {integrity: sha512-MjOadfU3Ys9KYoX0AdkBlFEF1Vx37uCCeN4ZHnmwm9FfpbsGWMZeBLMmmpY+6Ocqod7mkdZ0DT31OlbsFrLlkA==}
- engines: {node: ^10 || ^12 || >=14}
-
- postcss@8.5.6:
- resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==}
- engines: {node: ^10 || ^12 || >=14}
-
- proc-log@5.0.0:
- resolution: {integrity: sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ==}
- engines: {node: ^18.17.0 || >=20.5.0}
-
- process-nextick-args@2.0.1:
- resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
-
- promise-retry@2.0.1:
- resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==}
- engines: {node: '>=10'}
-
- proxy-addr@2.0.7:
- resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==}
- engines: {node: '>= 0.10'}
-
- prr@1.0.1:
- resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==}
-
- qs@6.13.0:
- resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==}
- engines: {node: '>=0.6'}
-
- queue-microtask@1.2.3:
- resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
-
- randombytes@2.1.0:
- resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
-
- range-parser@1.2.1:
- resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==}
- engines: {node: '>= 0.6'}
-
- raw-body@2.5.2:
- resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==}
- engines: {node: '>= 0.8'}
-
- read-cache@1.0.0:
- resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==}
-
- readable-stream@2.3.8:
- resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==}
-
- readable-stream@3.6.2:
- resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
- engines: {node: '>= 6'}
-
- readdirp@3.6.0:
- resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
- engines: {node: '>=8.10.0'}
-
- readdirp@4.1.2:
- resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==}
- engines: {node: '>= 14.18.0'}
-
- reflect-metadata@0.2.2:
- resolution: {integrity: sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==}
-
- regenerate-unicode-properties@10.2.2:
- resolution: {integrity: sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==}
- engines: {node: '>=4'}
-
- regenerate@1.4.2:
- resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==}
-
- regenerator-runtime@0.14.1:
- resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
-
- regex-parser@2.3.1:
- resolution: {integrity: sha512-yXLRqatcCuKtVHsWrNg0JL3l1zGfdXeEvDa0bdu4tCDQw0RpMDZsqbkyRTUnKMR0tXF627V2oEWjBEaEdqTwtQ==}
-
- regexpu-core@6.4.0:
- resolution: {integrity: sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==}
- engines: {node: '>=4'}
-
- regjsgen@0.8.0:
- resolution: {integrity: sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==}
-
- regjsparser@0.13.0:
- resolution: {integrity: sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q==}
- hasBin: true
-
- require-directory@2.1.1:
- resolution: {integrity: sha1-jGStX9MNqxyXbiNE/+f3kqam30I=}
- engines: {node: '>=0.10.0'}
-
- require-from-string@2.0.2:
- resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
- engines: {node: '>=0.10.0'}
-
- requires-port@1.0.0:
- resolution: {integrity: sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=}
-
- resolve-from@4.0.0:
- resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
- engines: {node: '>=4'}
-
- resolve-url-loader@5.0.0:
- resolution: {integrity: sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==}
- engines: {node: '>=12'}
-
- resolve@1.22.10:
- resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==}
- engines: {node: '>= 0.4'}
- hasBin: true
-
- resolve@1.22.11:
- resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==}
- engines: {node: '>= 0.4'}
- hasBin: true
-
- restore-cursor@3.1.0:
- resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==}
- engines: {node: '>=8'}
-
- restore-cursor@5.1.0:
- resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==}
- engines: {node: '>=18'}
-
- retry@0.12.0:
- resolution: {integrity: sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=}
- engines: {node: '>= 4'}
-
- retry@0.13.1:
- resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==}
- engines: {node: '>= 4'}
-
- reusify@1.1.0:
- resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
- engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
-
- rfdc@1.4.1:
- resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==}
-
- rollup@4.34.8:
- resolution: {integrity: sha512-489gTVMzAYdiZHFVA/ig/iYFllCcWFHMvUHI1rpFmkoUtRlQxqh6/yiNqnYibjMZ2b/+FUQwldG+aLsEt6bglQ==}
- engines: {node: '>=18.0.0', npm: '>=8.0.0'}
- hasBin: true
-
- rollup@4.53.3:
- resolution: {integrity: sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA==}
- engines: {node: '>=18.0.0', npm: '>=8.0.0'}
- hasBin: true
-
- run-applescript@7.1.0:
- resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==}
- engines: {node: '>=18'}
-
- run-parallel@1.2.0:
- resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
-
- rxjs@7.8.1:
- resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==}
-
- rxjs@7.8.2:
- resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==}
-
- safe-buffer@5.1.2:
- resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
-
- safe-buffer@5.2.1:
- resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
-
- safer-buffer@2.1.2:
- resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
-
- sass-loader@16.0.5:
- resolution: {integrity: sha512-oL+CMBXrj6BZ/zOq4os+UECPL+bWqt6OAC6DWS8Ln8GZRcMDjlJ4JC3FBDuHJdYaFWIdKNIBYmtZtK2MaMkNIw==}
- engines: {node: '>= 18.12.0'}
- peerDependencies:
- '@rspack/core': 0.x || 1.x
- node-sass: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0
- sass: ^1.3.0
- sass-embedded: '*'
- webpack: ^5.0.0
- peerDependenciesMeta:
- '@rspack/core':
- optional: true
- node-sass:
- optional: true
- sass:
- optional: true
- sass-embedded:
- optional: true
- webpack:
- optional: true
-
- sass@1.85.0:
- resolution: {integrity: sha512-3ToiC1xZ1Y8aU7+CkgCI/tqyuPXEmYGJXO7H4uqp0xkLXUqp88rQQ4j1HmP37xSJLbCJPaIiv+cT1y+grssrww==}
- engines: {node: '>=14.0.0'}
- hasBin: true
-
- sax@1.4.3:
- resolution: {integrity: sha512-yqYn1JhPczigF94DMS+shiDMjDowYO6y9+wB/4WgO0Y19jWYk0lQ4tuG5KI7kj4FTp1wxPj5IFfcrz/s1c3jjQ==}
-
- schema-utils@4.3.3:
- resolution: {integrity: sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==}
- engines: {node: '>= 10.13.0'}
-
- select-hose@2.0.0:
- resolution: {integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==}
-
- selfsigned@2.4.1:
- resolution: {integrity: sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==}
- engines: {node: '>=10'}
-
- semver@5.7.2:
- resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==}
- hasBin: true
-
- semver@6.3.1:
- resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
- hasBin: true
-
- semver@7.7.1:
- resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==}
- engines: {node: '>=10'}
- hasBin: true
-
- semver@7.7.3:
- resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==}
- engines: {node: '>=10'}
- hasBin: true
-
- send@0.19.0:
- resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==}
- engines: {node: '>= 0.8.0'}
-
- serialize-javascript@6.0.2:
- resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==}
-
- serve-index@1.9.1:
- resolution: {integrity: sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=}
- engines: {node: '>= 0.8.0'}
-
- serve-static@1.16.2:
- resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==}
- engines: {node: '>= 0.8.0'}
-
- setprototypeof@1.1.0:
- resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==}
-
- setprototypeof@1.2.0:
- resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==}
-
- shallow-clone@3.0.1:
- resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==}
- engines: {node: '>=8'}
-
- shebang-command@2.0.0:
- resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
- engines: {node: '>=8'}
-
- shebang-regex@3.0.0:
- resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
- engines: {node: '>=8'}
-
- shell-quote@1.8.3:
- resolution: {integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==}
- engines: {node: '>= 0.4'}
-
- side-channel-list@1.0.0:
- resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==}
- engines: {node: '>= 0.4'}
-
- side-channel-map@1.0.1:
- resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==}
- engines: {node: '>= 0.4'}
-
- side-channel-weakmap@1.0.2:
- resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==}
- engines: {node: '>= 0.4'}
-
- side-channel@1.1.0:
- resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==}
- engines: {node: '>= 0.4'}
-
- signal-exit@3.0.7:
- resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
-
- signal-exit@4.1.0:
- resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
- engines: {node: '>=14'}
-
- sigstore@3.1.0:
- resolution: {integrity: sha512-ZpzWAFHIFqyFE56dXqgX/DkDRZdz+rRcjoIk/RQU4IX0wiCv1l8S7ZrXDHcCc+uaf+6o7w3h2l3g6GYG5TKN9Q==}
- engines: {node: ^18.17.0 || >=20.5.0}
-
- slash@5.1.0:
- resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==}
- engines: {node: '>=14.16'}
-
- slice-ansi@5.0.0:
- resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==}
- engines: {node: '>=12'}
-
- slice-ansi@7.1.2:
- resolution: {integrity: sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==}
- engines: {node: '>=18'}
-
- smart-buffer@4.2.0:
- resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==}
- engines: {node: '>= 6.0.0', npm: '>= 3.0.0'}
-
- sockjs@0.3.24:
- resolution: {integrity: sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==}
-
- socks-proxy-agent@8.0.5:
- resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==}
- engines: {node: '>= 14'}
-
- socks@2.8.7:
- resolution: {integrity: sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==}
- engines: {node: '>= 10.0.0', npm: '>= 3.0.0'}
-
- source-map-js@1.2.1:
- resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
- engines: {node: '>=0.10.0'}
-
- source-map-loader@5.0.0:
- resolution: {integrity: sha512-k2Dur7CbSLcAH73sBcIkV5xjPV4SzqO1NJ7+XaQl8if3VODDUj3FNchNGpqgJSKbvUfJuhVdv8K2Eu8/TNl2eA==}
- engines: {node: '>= 18.12.0'}
- peerDependencies:
- webpack: ^5.72.1
-
- source-map-support@0.5.21:
- resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
-
- source-map@0.6.1:
- resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
- engines: {node: '>=0.10.0'}
-
- source-map@0.7.4:
- resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==}
- engines: {node: '>= 8'}
-
- spdx-correct@3.2.0:
- resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==}
-
- spdx-exceptions@2.5.0:
- resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==}
-
- spdx-expression-parse@3.0.1:
- resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==}
-
- spdx-license-ids@3.0.22:
- resolution: {integrity: sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==}
-
- spdy-transport@3.0.0:
- resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==}
-
- spdy@4.0.2:
- resolution: {integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==}
- engines: {node: '>=6.0.0'}
-
- ssri@12.0.0:
- resolution: {integrity: sha512-S7iGNosepx9RadX82oimUkvr0Ct7IjJbEbs4mJcTxst8um95J3sDYU1RBEOvdu6oL1Wek2ODI5i4MAw+dZ6cAQ==}
- engines: {node: ^18.17.0 || >=20.5.0}
-
- statuses@1.5.0:
- resolution: {integrity: sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=}
- engines: {node: '>= 0.6'}
-
- statuses@2.0.1:
- resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==}
- engines: {node: '>= 0.8'}
-
- string-width@4.2.3:
- resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
- engines: {node: '>=8'}
-
- string-width@5.1.2:
- resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
- engines: {node: '>=12'}
-
- string-width@7.2.0:
- resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==}
- engines: {node: '>=18'}
-
- string_decoder@1.1.1:
- resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
-
- string_decoder@1.3.0:
- resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
-
- strip-ansi@6.0.1:
- resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
- engines: {node: '>=8'}
-
- strip-ansi@7.1.2:
- resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==}
- engines: {node: '>=12'}
-
- sucrase@3.35.1:
- resolution: {integrity: sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==}
- engines: {node: '>=16 || 14 >=14.17'}
- hasBin: true
-
- supports-color@7.2.0:
- resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
- engines: {node: '>=8'}
-
- supports-color@8.1.1:
- resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
- engines: {node: '>=10'}
-
- supports-preserve-symlinks-flag@1.0.0:
- resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
- engines: {node: '>= 0.4'}
-
- symbol-observable@4.0.0:
- resolution: {integrity: sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==}
- engines: {node: '>=0.10'}
-
- tailwindcss@3.4.18:
- resolution: {integrity: sha512-6A2rnmW5xZMdw11LYjhcI5846rt9pbLSabY5XPxo+XWdxwZaFEn47Go4NzFiHu9sNNmr/kXivP1vStfvMaK1GQ==}
- engines: {node: '>=14.0.0'}
- hasBin: true
-
- tapable@2.3.0:
- resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==}
- engines: {node: '>=6'}
-
- tar@6.2.1:
- resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==}
- engines: {node: '>=10'}
-
- tar@7.5.2:
- resolution: {integrity: sha512-7NyxrTE4Anh8km8iEy7o0QYPs+0JKBTj5ZaqHg6B39erLg0qYXN3BijtShwbsNSvQ+LN75+KV+C4QR/f6Gwnpg==}
- engines: {node: '>=18'}
-
- terser-webpack-plugin@5.3.14:
- resolution: {integrity: sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==}
- engines: {node: '>= 10.13.0'}
- peerDependencies:
- '@swc/core': '*'
- esbuild: '*'
- uglify-js: '*'
- webpack: ^5.1.0
- peerDependenciesMeta:
- '@swc/core':
- optional: true
- esbuild:
- optional: true
- uglify-js:
- optional: true
-
- terser@5.39.0:
- resolution: {integrity: sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==}
- engines: {node: '>=10'}
- hasBin: true
-
- thenify-all@1.6.0:
- resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==}
- engines: {node: '>=0.8'}
-
- thenify@3.3.1:
- resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==}
-
- thingies@2.5.0:
- resolution: {integrity: sha512-s+2Bwztg6PhWUD7XMfeYm5qliDdSiZm7M7n8KjTkIsm3l/2lgVRc2/Gx/v+ZX8lT4FMA+i8aQvhcWylldc+ZNw==}
- engines: {node: '>=10.18'}
- peerDependencies:
- tslib: ^2
-
- thunky@1.1.0:
- resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==}
-
- tinyglobby@0.2.15:
- resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==}
- engines: {node: '>=12.0.0'}
-
- to-regex-range@5.0.1:
- resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
- engines: {node: '>=8.0'}
-
- toidentifier@1.0.1:
- resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==}
- engines: {node: '>=0.6'}
-
- tree-dump@1.1.0:
- resolution: {integrity: sha512-rMuvhU4MCDbcbnleZTFezWsaZXRFemSqAM+7jPnzUl1fo9w3YEKOxAeui0fz3OI4EU4hf23iyA7uQRVko+UaBA==}
- engines: {node: '>=10.0'}
- peerDependencies:
- tslib: '2'
-
- tree-kill@1.2.2:
- resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==}
- hasBin: true
-
- ts-interface-checker@0.1.13:
- resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}
-
- tslib@2.8.1:
- resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
-
- tuf-js@3.1.0:
- resolution: {integrity: sha512-3T3T04WzowbwV2FDiGXBbr81t64g1MUGGJRgT4x5o97N+8ArdhVCAF9IxFrxuSJmM3E5Asn7nKHkao0ibcZXAg==}
- engines: {node: ^18.17.0 || >=20.5.0}
-
- type-is@1.6.18:
- resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==}
- engines: {node: '>= 0.6'}
-
- typed-assert@1.0.9:
- resolution: {integrity: sha512-KNNZtayBCtmnNmbo5mG47p1XsCyrx6iVqomjcZnec/1Y5GGARaxPs6r49RnSPeUP3YjNYiU9sQHAtY4BBvnZwg==}
-
- typescript@5.6.3:
- resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==}
- engines: {node: '>=14.17'}
- hasBin: true
-
- undici-types@6.21.0:
- resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
-
- unicode-canonical-property-names-ecmascript@2.0.1:
- resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==}
- engines: {node: '>=4'}
-
- unicode-match-property-ecmascript@2.0.0:
- resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==}
- engines: {node: '>=4'}
-
- unicode-match-property-value-ecmascript@2.2.1:
- resolution: {integrity: sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==}
- engines: {node: '>=4'}
-
- unicode-property-aliases-ecmascript@2.2.0:
- resolution: {integrity: sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==}
- engines: {node: '>=4'}
-
- unicorn-magic@0.3.0:
- resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==}
- engines: {node: '>=18'}
-
- unique-filename@4.0.0:
- resolution: {integrity: sha512-XSnEewXmQ+veP7xX2dS5Q4yZAvO40cBN2MWkJ7D/6sW4Dg6wYBNwM1Vrnz1FhH5AdeLIlUXRI9e28z1YZi71NQ==}
- engines: {node: ^18.17.0 || >=20.5.0}
-
- unique-slug@5.0.0:
- resolution: {integrity: sha512-9OdaqO5kwqR+1kVgHAhsp5vPNU0hnxRa26rBFNfNgM7M6pNtgzeBn3s/xbyCQL3dcjzOatcef6UUHpB/6MaETg==}
- engines: {node: ^18.17.0 || >=20.5.0}
-
- unpipe@1.0.0:
- resolution: {integrity: sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=}
- engines: {node: '>= 0.8'}
-
- update-browserslist-db@1.1.4:
- resolution: {integrity: sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==}
- hasBin: true
- peerDependencies:
- browserslist: '>= 4.21.0'
-
- util-deprecate@1.0.2:
- resolution: {integrity: sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=}
-
- utils-merge@1.0.1:
- resolution: {integrity: sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=}
- engines: {node: '>= 0.4.0'}
-
- uuid@8.3.2:
- resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
- hasBin: true
-
- validate-npm-package-license@3.0.4:
- resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==}
-
- validate-npm-package-name@6.0.2:
- resolution: {integrity: sha512-IUoow1YUtvoBBC06dXs8bR8B9vuA3aJfmQNKMoaPG/OFsPmoQvw8xh+6Ye25Gx9DQhoEom3Pcu9MKHerm/NpUQ==}
- engines: {node: ^18.17.0 || >=20.5.0}
-
- vary@1.1.2:
- resolution: {integrity: sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=}
- engines: {node: '>= 0.8'}
-
- vite@6.4.1:
- resolution: {integrity: sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==}
- engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
- hasBin: true
- peerDependencies:
- '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0
- jiti: '>=1.21.0'
- less: '*'
- lightningcss: ^1.21.0
- sass: '*'
- sass-embedded: '*'
- stylus: '*'
- sugarss: '*'
- terser: ^5.16.0
- tsx: ^4.8.1
- yaml: ^2.4.2
- peerDependenciesMeta:
- '@types/node':
- optional: true
- jiti:
- optional: true
- less:
- optional: true
- lightningcss:
- optional: true
- sass:
- optional: true
- sass-embedded:
- optional: true
- stylus:
- optional: true
- sugarss:
- optional: true
- terser:
- optional: true
- tsx:
- optional: true
- yaml:
- optional: true
-
- watchpack@2.4.2:
- resolution: {integrity: sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==}
- engines: {node: '>=10.13.0'}
-
- watchpack@2.4.4:
- resolution: {integrity: sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==}
- engines: {node: '>=10.13.0'}
-
- wbuf@1.7.3:
- resolution: {integrity: sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==}
-
- wcwidth@1.0.1:
- resolution: {integrity: sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=}
-
- weak-lru-cache@1.2.2:
- resolution: {integrity: sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw==}
-
- webpack-dev-middleware@7.4.2:
- resolution: {integrity: sha512-xOO8n6eggxnwYpy1NlzUKpvrjfJTvae5/D6WOK0S2LSo7vjmo5gCM1DbLUmFqrMTJP+W/0YZNctm7jasWvLuBA==}
- engines: {node: '>= 18.12.0'}
- peerDependencies:
- webpack: ^5.0.0
- peerDependenciesMeta:
- webpack:
- optional: true
-
- webpack-dev-server@5.2.2:
- resolution: {integrity: sha512-QcQ72gh8a+7JO63TAx/6XZf/CWhgMzu5m0QirvPfGvptOusAxG12w2+aua1Jkjr7hzaWDnJ2n6JFeexMHI+Zjg==}
- engines: {node: '>= 18.12.0'}
- hasBin: true
- peerDependencies:
- webpack: ^5.0.0
- webpack-cli: '*'
- peerDependenciesMeta:
- webpack:
- optional: true
- webpack-cli:
- optional: true
-
- webpack-merge@6.0.1:
- resolution: {integrity: sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==}
- engines: {node: '>=18.0.0'}
-
- webpack-sources@3.3.3:
- resolution: {integrity: sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==}
- engines: {node: '>=10.13.0'}
-
- webpack-subresource-integrity@5.1.0:
- resolution: {integrity: sha512-sacXoX+xd8r4WKsy9MvH/q/vBtEHr86cpImXwyg74pFIpERKt6FmB8cXpeuh0ZLgclOlHI4Wcll7+R5L02xk9Q==}
- engines: {node: '>= 12'}
- peerDependencies:
- html-webpack-plugin: '>= 5.0.0-beta.1 < 6'
- webpack: ^5.12.0
- peerDependenciesMeta:
- html-webpack-plugin:
- optional: true
-
- webpack@5.98.0:
- resolution: {integrity: sha512-UFynvx+gM44Gv9qFgj0acCQK2VE1CtdfwFdimkapco3hlPCJ/zeq73n2yVKimVbtm+TnApIugGhLJnkU6gjYXA==}
- engines: {node: '>=10.13.0'}
- hasBin: true
- peerDependencies:
- webpack-cli: '*'
- peerDependenciesMeta:
- webpack-cli:
- optional: true
-
- websocket-driver@0.7.4:
- resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==}
- engines: {node: '>=0.8.0'}
-
- websocket-extensions@0.1.4:
- resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==}
- engines: {node: '>=0.8.0'}
-
- which@2.0.2:
- resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
- engines: {node: '>= 8'}
- hasBin: true
-
- which@5.0.0:
- resolution: {integrity: sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==}
- engines: {node: ^18.17.0 || >=20.5.0}
- hasBin: true
-
- wildcard@2.0.1:
- resolution: {integrity: sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==}
-
- wrap-ansi@6.2.0:
- resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
- engines: {node: '>=8'}
-
- wrap-ansi@7.0.0:
- resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
- engines: {node: '>=10'}
-
- wrap-ansi@8.1.0:
- resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
- engines: {node: '>=12'}
-
- wrap-ansi@9.0.2:
- resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==}
- engines: {node: '>=18'}
-
- ws@8.18.3:
- resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==}
- 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
-
- y18n@5.0.8:
- resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
- engines: {node: '>=10'}
-
- yallist@3.1.1:
- resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
-
- yallist@4.0.0:
- resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
-
- yallist@5.0.0:
- resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==}
- engines: {node: '>=18'}
-
- yargs-parser@21.1.1:
- resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
- engines: {node: '>=12'}
-
- yargs@17.7.2:
- resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
- engines: {node: '>=12'}
-
- yocto-queue@1.2.2:
- resolution: {integrity: sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==}
- engines: {node: '>=12.20'}
-
- yoctocolors-cjs@2.1.3:
- resolution: {integrity: sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==}
- engines: {node: '>=18'}
-
- zone.js@0.15.1:
- resolution: {integrity: sha512-XE96n56IQpJM7NAoXswY3XRLcWFW83xe0BiAOeMD7K5k5xecOeul3Qcpx6GqEeeHNkW5DWL5zOyTbEfB4eti8w==}
-
-snapshots:
-
- '@alloc/quick-lru@5.2.0': {}
-
- '@ampproject/remapping@2.3.0':
- dependencies:
- '@jridgewell/gen-mapping': 0.3.13
- '@jridgewell/trace-mapping': 0.3.31
-
- '@angular-devkit/architect@0.1902.19(chokidar@4.0.3)':
- dependencies:
- '@angular-devkit/core': 19.2.19(chokidar@4.0.3)
- rxjs: 7.8.1
- transitivePeerDependencies:
- - chokidar
-
- '@angular-devkit/build-angular@19.2.19(@angular/compiler-cli@19.2.16(@angular/compiler@19.2.16)(typescript@5.6.3))(@angular/compiler@19.2.16)(@types/node@20.19.25)(chokidar@4.0.3)(jiti@1.21.7)(tailwindcss@3.4.18)(typescript@5.6.3)(vite@6.4.1(@types/node@20.19.25)(jiti@1.21.7)(less@4.2.2)(sass@1.85.0)(terser@5.39.0))':
- dependencies:
- '@ampproject/remapping': 2.3.0
- '@angular-devkit/architect': 0.1902.19(chokidar@4.0.3)
- '@angular-devkit/build-webpack': 0.1902.19(chokidar@4.0.3)(webpack-dev-server@5.2.2(webpack@5.98.0))(webpack@5.98.0(esbuild@0.25.4))
- '@angular-devkit/core': 19.2.19(chokidar@4.0.3)
- '@angular/build': 19.2.19(@angular/compiler-cli@19.2.16(@angular/compiler@19.2.16)(typescript@5.6.3))(@angular/compiler@19.2.16)(@types/node@20.19.25)(chokidar@4.0.3)(jiti@1.21.7)(less@4.2.2)(postcss@8.5.2)(tailwindcss@3.4.18)(terser@5.39.0)(typescript@5.6.3)
- '@angular/compiler-cli': 19.2.16(@angular/compiler@19.2.16)(typescript@5.6.3)
- '@babel/core': 7.26.10
- '@babel/generator': 7.26.10
- '@babel/helper-annotate-as-pure': 7.25.9
- '@babel/helper-split-export-declaration': 7.24.7
- '@babel/plugin-transform-async-generator-functions': 7.26.8(@babel/core@7.26.10)
- '@babel/plugin-transform-async-to-generator': 7.25.9(@babel/core@7.26.10)
- '@babel/plugin-transform-runtime': 7.26.10(@babel/core@7.26.10)
- '@babel/preset-env': 7.26.9(@babel/core@7.26.10)
- '@babel/runtime': 7.26.10
- '@discoveryjs/json-ext': 0.6.3
- '@ngtools/webpack': 19.2.19(@angular/compiler-cli@19.2.16(@angular/compiler@19.2.16)(typescript@5.6.3))(typescript@5.6.3)(webpack@5.98.0(esbuild@0.25.4))
- '@vitejs/plugin-basic-ssl': 1.2.0(vite@6.4.1(@types/node@20.19.25)(jiti@1.21.7)(less@4.2.2)(sass@1.85.0)(terser@5.39.0))
- ansi-colors: 4.1.3
- autoprefixer: 10.4.20(postcss@8.5.2)
- babel-loader: 9.2.1(@babel/core@7.26.10)(webpack@5.98.0(esbuild@0.25.4))
- browserslist: 4.28.0
- copy-webpack-plugin: 12.0.2(webpack@5.98.0(esbuild@0.25.4))
- css-loader: 7.1.2(webpack@5.98.0(esbuild@0.25.4))
- esbuild-wasm: 0.25.4
- fast-glob: 3.3.3
- http-proxy-middleware: 3.0.5
- istanbul-lib-instrument: 6.0.3
- jsonc-parser: 3.3.1
- karma-source-map-support: 1.4.0
- less: 4.2.2
- less-loader: 12.2.0(less@4.2.2)(webpack@5.98.0(esbuild@0.25.4))
- license-webpack-plugin: 4.0.2(webpack@5.98.0(esbuild@0.25.4))
- loader-utils: 3.3.1
- mini-css-extract-plugin: 2.9.2(webpack@5.98.0(esbuild@0.25.4))
- open: 10.1.0
- ora: 5.4.1
- picomatch: 4.0.2
- piscina: 4.8.0
- postcss: 8.5.2
- postcss-loader: 8.1.1(postcss@8.5.2)(typescript@5.6.3)(webpack@5.98.0(esbuild@0.25.4))
- resolve-url-loader: 5.0.0
- rxjs: 7.8.1
- sass: 1.85.0
- sass-loader: 16.0.5(sass@1.85.0)(webpack@5.98.0(esbuild@0.25.4))
- semver: 7.7.1
- source-map-loader: 5.0.0(webpack@5.98.0(esbuild@0.25.4))
- source-map-support: 0.5.21
- terser: 5.39.0
- tree-kill: 1.2.2
- tslib: 2.8.1
- typescript: 5.6.3
- webpack: 5.98.0(esbuild@0.25.4)
- webpack-dev-middleware: 7.4.2(webpack@5.98.0)
- webpack-dev-server: 5.2.2(webpack@5.98.0)
- webpack-merge: 6.0.1
- webpack-subresource-integrity: 5.1.0(webpack@5.98.0(esbuild@0.25.4))
- optionalDependencies:
- esbuild: 0.25.4
- tailwindcss: 3.4.18
- transitivePeerDependencies:
- - '@angular/compiler'
- - '@rspack/core'
- - '@swc/core'
- - '@types/node'
- - bufferutil
- - chokidar
- - debug
- - html-webpack-plugin
- - jiti
- - lightningcss
- - node-sass
- - sass-embedded
- - stylus
- - sugarss
- - supports-color
- - tsx
- - uglify-js
- - utf-8-validate
- - vite
- - webpack-cli
- - yaml
-
- '@angular-devkit/build-webpack@0.1902.19(chokidar@4.0.3)(webpack-dev-server@5.2.2(webpack@5.98.0))(webpack@5.98.0(esbuild@0.25.4))':
- dependencies:
- '@angular-devkit/architect': 0.1902.19(chokidar@4.0.3)
- rxjs: 7.8.1
- webpack: 5.98.0(esbuild@0.25.4)
- webpack-dev-server: 5.2.2(webpack@5.98.0)
- transitivePeerDependencies:
- - chokidar
-
- '@angular-devkit/core@19.2.19(chokidar@4.0.3)':
- dependencies:
- ajv: 8.17.1
- ajv-formats: 3.0.1(ajv@8.17.1)
- jsonc-parser: 3.3.1
- picomatch: 4.0.2
- rxjs: 7.8.1
- source-map: 0.7.4
- optionalDependencies:
- chokidar: 4.0.3
-
- '@angular-devkit/schematics@19.2.19(chokidar@4.0.3)':
- dependencies:
- '@angular-devkit/core': 19.2.19(chokidar@4.0.3)
- jsonc-parser: 3.3.1
- magic-string: 0.30.17
- ora: 5.4.1
- rxjs: 7.8.1
- transitivePeerDependencies:
- - chokidar
-
- '@angular/animations@19.2.16(@angular/common@19.2.16(@angular/core@19.2.16(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.16(rxjs@7.8.2)(zone.js@0.15.1))':
- dependencies:
- '@angular/common': 19.2.16(@angular/core@19.2.16(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2)
- '@angular/core': 19.2.16(rxjs@7.8.2)(zone.js@0.15.1)
- tslib: 2.8.1
-
- '@angular/build@19.2.19(@angular/compiler-cli@19.2.16(@angular/compiler@19.2.16)(typescript@5.6.3))(@angular/compiler@19.2.16)(@types/node@20.19.25)(chokidar@4.0.3)(jiti@1.21.7)(less@4.2.2)(postcss@8.5.2)(tailwindcss@3.4.18)(terser@5.39.0)(typescript@5.6.3)':
- dependencies:
- '@ampproject/remapping': 2.3.0
- '@angular-devkit/architect': 0.1902.19(chokidar@4.0.3)
- '@angular/compiler': 19.2.16
- '@angular/compiler-cli': 19.2.16(@angular/compiler@19.2.16)(typescript@5.6.3)
- '@babel/core': 7.26.10
- '@babel/helper-annotate-as-pure': 7.25.9
- '@babel/helper-split-export-declaration': 7.24.7
- '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.10)
- '@inquirer/confirm': 5.1.6(@types/node@20.19.25)
- '@vitejs/plugin-basic-ssl': 1.2.0(vite@6.4.1(@types/node@20.19.25)(jiti@1.21.7)(less@4.2.2)(sass@1.85.0)(terser@5.39.0))
- beasties: 0.3.2
- browserslist: 4.28.0
- esbuild: 0.25.4
- fast-glob: 3.3.3
- https-proxy-agent: 7.0.6
- istanbul-lib-instrument: 6.0.3
- listr2: 8.2.5
- magic-string: 0.30.17
- mrmime: 2.0.1
- parse5-html-rewriting-stream: 7.0.0
- picomatch: 4.0.2
- piscina: 4.8.0
- rollup: 4.34.8
- sass: 1.85.0
- semver: 7.7.1
- source-map-support: 0.5.21
- typescript: 5.6.3
- vite: 6.4.1(@types/node@20.19.25)(jiti@1.21.7)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)
- watchpack: 2.4.2
- optionalDependencies:
- less: 4.2.2
- lmdb: 3.2.6
- postcss: 8.5.2
- tailwindcss: 3.4.18
- transitivePeerDependencies:
- - '@types/node'
- - chokidar
- - jiti
- - lightningcss
- - sass-embedded
- - stylus
- - sugarss
- - supports-color
- - terser
- - tsx
- - yaml
-
- '@angular/cli@19.2.19(@types/node@20.19.25)(chokidar@4.0.3)':
- dependencies:
- '@angular-devkit/architect': 0.1902.19(chokidar@4.0.3)
- '@angular-devkit/core': 19.2.19(chokidar@4.0.3)
- '@angular-devkit/schematics': 19.2.19(chokidar@4.0.3)
- '@inquirer/prompts': 7.3.2(@types/node@20.19.25)
- '@listr2/prompt-adapter-inquirer': 2.0.18(@inquirer/prompts@7.3.2(@types/node@20.19.25))
- '@schematics/angular': 19.2.19(chokidar@4.0.3)
- '@yarnpkg/lockfile': 1.1.0
- ini: 5.0.0
- jsonc-parser: 3.3.1
- listr2: 8.2.5
- npm-package-arg: 12.0.2
- npm-pick-manifest: 10.0.0
- pacote: 20.0.0
- resolve: 1.22.10
- semver: 7.7.1
- symbol-observable: 4.0.0
- yargs: 17.7.2
- transitivePeerDependencies:
- - '@types/node'
- - chokidar
- - supports-color
-
- '@angular/common@19.2.16(@angular/core@19.2.16(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2)':
- dependencies:
- '@angular/core': 19.2.16(rxjs@7.8.2)(zone.js@0.15.1)
- rxjs: 7.8.2
- tslib: 2.8.1
-
- '@angular/compiler-cli@19.2.16(@angular/compiler@19.2.16)(typescript@5.6.3)':
- dependencies:
- '@angular/compiler': 19.2.16
- '@babel/core': 7.26.9
- '@jridgewell/sourcemap-codec': 1.5.5
- chokidar: 4.0.3
- convert-source-map: 1.9.0
- reflect-metadata: 0.2.2
- semver: 7.7.3
- tslib: 2.8.1
- typescript: 5.6.3
- yargs: 17.7.2
- transitivePeerDependencies:
- - supports-color
-
- '@angular/compiler@19.2.16':
- dependencies:
- tslib: 2.8.1
-
- '@angular/core@19.2.16(rxjs@7.8.2)(zone.js@0.15.1)':
- dependencies:
- rxjs: 7.8.2
- tslib: 2.8.1
- zone.js: 0.15.1
-
- '@angular/forms@19.2.16(@angular/common@19.2.16(@angular/core@19.2.16(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.16(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@19.2.16(@angular/animations@19.2.16(@angular/common@19.2.16(@angular/core@19.2.16(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.16(rxjs@7.8.2)(zone.js@0.15.1)))(@angular/common@19.2.16(@angular/core@19.2.16(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.16(rxjs@7.8.2)(zone.js@0.15.1)))(rxjs@7.8.2)':
- dependencies:
- '@angular/common': 19.2.16(@angular/core@19.2.16(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2)
- '@angular/core': 19.2.16(rxjs@7.8.2)(zone.js@0.15.1)
- '@angular/platform-browser': 19.2.16(@angular/animations@19.2.16(@angular/common@19.2.16(@angular/core@19.2.16(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.16(rxjs@7.8.2)(zone.js@0.15.1)))(@angular/common@19.2.16(@angular/core@19.2.16(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.16(rxjs@7.8.2)(zone.js@0.15.1))
- rxjs: 7.8.2
- tslib: 2.8.1
-
- '@angular/platform-browser-dynamic@19.2.16(@angular/common@19.2.16(@angular/core@19.2.16(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/compiler@19.2.16)(@angular/core@19.2.16(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@19.2.16(@angular/animations@19.2.16(@angular/common@19.2.16(@angular/core@19.2.16(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.16(rxjs@7.8.2)(zone.js@0.15.1)))(@angular/common@19.2.16(@angular/core@19.2.16(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.16(rxjs@7.8.2)(zone.js@0.15.1)))':
- dependencies:
- '@angular/common': 19.2.16(@angular/core@19.2.16(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2)
- '@angular/compiler': 19.2.16
- '@angular/core': 19.2.16(rxjs@7.8.2)(zone.js@0.15.1)
- '@angular/platform-browser': 19.2.16(@angular/animations@19.2.16(@angular/common@19.2.16(@angular/core@19.2.16(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.16(rxjs@7.8.2)(zone.js@0.15.1)))(@angular/common@19.2.16(@angular/core@19.2.16(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.16(rxjs@7.8.2)(zone.js@0.15.1))
- tslib: 2.8.1
-
- '@angular/platform-browser@19.2.16(@angular/animations@19.2.16(@angular/common@19.2.16(@angular/core@19.2.16(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.16(rxjs@7.8.2)(zone.js@0.15.1)))(@angular/common@19.2.16(@angular/core@19.2.16(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.16(rxjs@7.8.2)(zone.js@0.15.1))':
- dependencies:
- '@angular/common': 19.2.16(@angular/core@19.2.16(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2)
- '@angular/core': 19.2.16(rxjs@7.8.2)(zone.js@0.15.1)
- tslib: 2.8.1
- optionalDependencies:
- '@angular/animations': 19.2.16(@angular/common@19.2.16(@angular/core@19.2.16(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.16(rxjs@7.8.2)(zone.js@0.15.1))
-
- '@angular/router@19.2.16(@angular/common@19.2.16(@angular/core@19.2.16(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.16(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@19.2.16(@angular/animations@19.2.16(@angular/common@19.2.16(@angular/core@19.2.16(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.16(rxjs@7.8.2)(zone.js@0.15.1)))(@angular/common@19.2.16(@angular/core@19.2.16(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.16(rxjs@7.8.2)(zone.js@0.15.1)))(rxjs@7.8.2)':
- dependencies:
- '@angular/common': 19.2.16(@angular/core@19.2.16(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2)
- '@angular/core': 19.2.16(rxjs@7.8.2)(zone.js@0.15.1)
- '@angular/platform-browser': 19.2.16(@angular/animations@19.2.16(@angular/common@19.2.16(@angular/core@19.2.16(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.16(rxjs@7.8.2)(zone.js@0.15.1)))(@angular/common@19.2.16(@angular/core@19.2.16(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@19.2.16(rxjs@7.8.2)(zone.js@0.15.1))
- rxjs: 7.8.2
- tslib: 2.8.1
-
- '@babel/code-frame@7.27.1':
- dependencies:
- '@babel/helper-validator-identifier': 7.28.5
- js-tokens: 4.0.0
- picocolors: 1.1.1
-
- '@babel/compat-data@7.28.5': {}
-
- '@babel/core@7.26.10':
- dependencies:
- '@ampproject/remapping': 2.3.0
- '@babel/code-frame': 7.27.1
- '@babel/generator': 7.26.10
- '@babel/helper-compilation-targets': 7.27.2
- '@babel/helper-module-transforms': 7.28.3(@babel/core@7.26.10)
- '@babel/helpers': 7.28.4
- '@babel/parser': 7.28.5
- '@babel/template': 7.27.2
- '@babel/traverse': 7.28.5
- '@babel/types': 7.28.5
- convert-source-map: 2.0.0
- debug: 4.4.3
- gensync: 1.0.0-beta.2
- json5: 2.2.3
- semver: 6.3.1
- transitivePeerDependencies:
- - supports-color
-
- '@babel/core@7.26.9':
- dependencies:
- '@ampproject/remapping': 2.3.0
- '@babel/code-frame': 7.27.1
- '@babel/generator': 7.28.5
- '@babel/helper-compilation-targets': 7.27.2
- '@babel/helper-module-transforms': 7.28.3(@babel/core@7.26.9)
- '@babel/helpers': 7.28.4
- '@babel/parser': 7.28.5
- '@babel/template': 7.27.2
- '@babel/traverse': 7.28.5
- '@babel/types': 7.28.5
- convert-source-map: 2.0.0
- debug: 4.4.3
- gensync: 1.0.0-beta.2
- json5: 2.2.3
- semver: 6.3.1
- transitivePeerDependencies:
- - supports-color
-
- '@babel/generator@7.26.10':
- dependencies:
- '@babel/parser': 7.28.5
- '@babel/types': 7.28.5
- '@jridgewell/gen-mapping': 0.3.13
- '@jridgewell/trace-mapping': 0.3.31
- jsesc: 3.1.0
-
- '@babel/generator@7.28.5':
- dependencies:
- '@babel/parser': 7.28.5
- '@babel/types': 7.28.5
- '@jridgewell/gen-mapping': 0.3.13
- '@jridgewell/trace-mapping': 0.3.31
- jsesc: 3.1.0
-
- '@babel/helper-annotate-as-pure@7.25.9':
- dependencies:
- '@babel/types': 7.28.5
-
- '@babel/helper-annotate-as-pure@7.27.3':
- dependencies:
- '@babel/types': 7.28.5
-
- '@babel/helper-compilation-targets@7.27.2':
- dependencies:
- '@babel/compat-data': 7.28.5
- '@babel/helper-validator-option': 7.27.1
- browserslist: 4.28.0
- lru-cache: 5.1.1
- semver: 6.3.1
-
- '@babel/helper-create-class-features-plugin@7.28.5(@babel/core@7.26.10)':
- dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-annotate-as-pure': 7.27.3
- '@babel/helper-member-expression-to-functions': 7.28.5
- '@babel/helper-optimise-call-expression': 7.27.1
- '@babel/helper-replace-supers': 7.27.1(@babel/core@7.26.10)
- '@babel/helper-skip-transparent-expression-wrappers': 7.27.1
- '@babel/traverse': 7.28.5
- semver: 6.3.1
- transitivePeerDependencies:
- - supports-color
-
- '@babel/helper-create-regexp-features-plugin@7.28.5(@babel/core@7.26.10)':
- dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-annotate-as-pure': 7.27.3
- regexpu-core: 6.4.0
- semver: 6.3.1
-
- '@babel/helper-define-polyfill-provider@0.6.5(@babel/core@7.26.10)':
- dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-compilation-targets': 7.27.2
- '@babel/helper-plugin-utils': 7.27.1
- debug: 4.4.3
- lodash.debounce: 4.0.8
- resolve: 1.22.11
- transitivePeerDependencies:
- - supports-color
-
- '@babel/helper-globals@7.28.0': {}
-
- '@babel/helper-member-expression-to-functions@7.28.5':
- dependencies:
- '@babel/traverse': 7.28.5
- '@babel/types': 7.28.5
- transitivePeerDependencies:
- - supports-color
-
- '@babel/helper-module-imports@7.27.1':
- dependencies:
- '@babel/traverse': 7.28.5
- '@babel/types': 7.28.5
- transitivePeerDependencies:
- - supports-color
-
- '@babel/helper-module-transforms@7.28.3(@babel/core@7.26.10)':
- dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-module-imports': 7.27.1
- '@babel/helper-validator-identifier': 7.28.5
- '@babel/traverse': 7.28.5
- transitivePeerDependencies:
- - supports-color
-
- '@babel/helper-module-transforms@7.28.3(@babel/core@7.26.9)':
- dependencies:
- '@babel/core': 7.26.9
- '@babel/helper-module-imports': 7.27.1
- '@babel/helper-validator-identifier': 7.28.5
- '@babel/traverse': 7.28.5
- transitivePeerDependencies:
- - supports-color
-
- '@babel/helper-optimise-call-expression@7.27.1':
- dependencies:
- '@babel/types': 7.28.5
-
- '@babel/helper-plugin-utils@7.27.1': {}
-
- '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.26.10)':
- dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-annotate-as-pure': 7.27.3
- '@babel/helper-wrap-function': 7.28.3
- '@babel/traverse': 7.28.5
- transitivePeerDependencies:
- - supports-color
-
- '@babel/helper-replace-supers@7.27.1(@babel/core@7.26.10)':
- dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-member-expression-to-functions': 7.28.5
- '@babel/helper-optimise-call-expression': 7.27.1
- '@babel/traverse': 7.28.5
- transitivePeerDependencies:
- - supports-color
-
- '@babel/helper-skip-transparent-expression-wrappers@7.27.1':
- dependencies:
- '@babel/traverse': 7.28.5
- '@babel/types': 7.28.5
- transitivePeerDependencies:
- - supports-color
-
- '@babel/helper-split-export-declaration@7.24.7':
- dependencies:
- '@babel/types': 7.28.5
-
- '@babel/helper-string-parser@7.27.1': {}
-
- '@babel/helper-validator-identifier@7.28.5': {}
-
- '@babel/helper-validator-option@7.27.1': {}
-
- '@babel/helper-wrap-function@7.28.3':
- dependencies:
- '@babel/template': 7.27.2
- '@babel/traverse': 7.28.5
- '@babel/types': 7.28.5
- transitivePeerDependencies:
- - supports-color
-
- '@babel/helpers@7.28.4':
- dependencies:
- '@babel/template': 7.27.2
- '@babel/types': 7.28.5
-
- '@babel/parser@7.28.5':
- dependencies:
- '@babel/types': 7.28.5
-
- '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.28.5(@babel/core@7.26.10)':
- dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-plugin-utils': 7.27.1
- '@babel/traverse': 7.28.5
- transitivePeerDependencies:
- - supports-color
-
- '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1(@babel/core@7.26.10)':
- dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.26.10)':
- dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.26.10)':
- dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-plugin-utils': 7.27.1
- '@babel/helper-skip-transparent-expression-wrappers': 7.27.1
- '@babel/plugin-transform-optional-chaining': 7.28.5(@babel/core@7.26.10)
- transitivePeerDependencies:
- - supports-color
-
- '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.3(@babel/core@7.26.10)':
- dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-plugin-utils': 7.27.1
- '@babel/traverse': 7.28.5
- transitivePeerDependencies:
- - supports-color
-
- '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.10)':
- dependencies:
- '@babel/core': 7.26.10
-
- '@babel/plugin-syntax-import-assertions@7.27.1(@babel/core@7.26.10)':
- dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.26.10)':
- dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.26.10)':
- dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.26.10)':
- dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.26.10)
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.26.10)':
- dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-transform-async-generator-functions@7.26.8(@babel/core@7.26.10)':
- dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-plugin-utils': 7.27.1
- '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.26.10)
- '@babel/traverse': 7.28.5
- transitivePeerDependencies:
- - supports-color
-
- '@babel/plugin-transform-async-to-generator@7.25.9(@babel/core@7.26.10)':
- dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-module-imports': 7.27.1
- '@babel/helper-plugin-utils': 7.27.1
- '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.26.10)
- transitivePeerDependencies:
- - supports-color
-
- '@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.26.10)':
- dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-transform-block-scoping@7.28.5(@babel/core@7.26.10)':
- dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-transform-class-properties@7.27.1(@babel/core@7.26.10)':
- dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.26.10)
- '@babel/helper-plugin-utils': 7.27.1
- transitivePeerDependencies:
- - supports-color
-
- '@babel/plugin-transform-class-static-block@7.28.3(@babel/core@7.26.10)':
- dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.26.10)
- '@babel/helper-plugin-utils': 7.27.1
- transitivePeerDependencies:
- - supports-color
-
- '@babel/plugin-transform-classes@7.28.4(@babel/core@7.26.10)':
- dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-annotate-as-pure': 7.27.3
- '@babel/helper-compilation-targets': 7.27.2
- '@babel/helper-globals': 7.28.0
- '@babel/helper-plugin-utils': 7.27.1
- '@babel/helper-replace-supers': 7.27.1(@babel/core@7.26.10)
- '@babel/traverse': 7.28.5
- transitivePeerDependencies:
- - supports-color
-
- '@babel/plugin-transform-computed-properties@7.27.1(@babel/core@7.26.10)':
- dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-plugin-utils': 7.27.1
- '@babel/template': 7.27.2
-
- '@babel/plugin-transform-destructuring@7.28.5(@babel/core@7.26.10)':
- dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-plugin-utils': 7.27.1
- '@babel/traverse': 7.28.5
- transitivePeerDependencies:
- - supports-color
-
- '@babel/plugin-transform-dotall-regex@7.27.1(@babel/core@7.26.10)':
- dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.26.10)
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.26.10)':
- dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1(@babel/core@7.26.10)':
- dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.26.10)
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.26.10)':
- dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-transform-exponentiation-operator@7.28.5(@babel/core@7.26.10)':
- dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.26.10)':
- dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.26.10)':
- dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-plugin-utils': 7.27.1
- '@babel/helper-skip-transparent-expression-wrappers': 7.27.1
- transitivePeerDependencies:
- - supports-color
-
- '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.26.10)':
- dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-compilation-targets': 7.27.2
- '@babel/helper-plugin-utils': 7.27.1
- '@babel/traverse': 7.28.5
- transitivePeerDependencies:
- - supports-color
-
- '@babel/plugin-transform-json-strings@7.27.1(@babel/core@7.26.10)':
- dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-transform-literals@7.27.1(@babel/core@7.26.10)':
- dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-transform-logical-assignment-operators@7.28.5(@babel/core@7.26.10)':
- dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.26.10)':
- dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.26.10)':
- dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-module-transforms': 7.28.3(@babel/core@7.26.10)
- '@babel/helper-plugin-utils': 7.27.1
- transitivePeerDependencies:
- - supports-color
-
- '@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.26.10)':
- dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-module-transforms': 7.28.3(@babel/core@7.26.10)
- '@babel/helper-plugin-utils': 7.27.1
- transitivePeerDependencies:
- - supports-color
-
- '@babel/plugin-transform-modules-systemjs@7.28.5(@babel/core@7.26.10)':
- dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-module-transforms': 7.28.3(@babel/core@7.26.10)
- '@babel/helper-plugin-utils': 7.27.1
- '@babel/helper-validator-identifier': 7.28.5
- '@babel/traverse': 7.28.5
- transitivePeerDependencies:
- - supports-color
-
- '@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.26.10)':
- dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-module-transforms': 7.28.3(@babel/core@7.26.10)
- '@babel/helper-plugin-utils': 7.27.1
- transitivePeerDependencies:
- - supports-color
-
- '@babel/plugin-transform-named-capturing-groups-regex@7.27.1(@babel/core@7.26.10)':
- dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.26.10)
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.26.10)':
- dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-transform-nullish-coalescing-operator@7.27.1(@babel/core@7.26.10)':
- dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-transform-numeric-separator@7.27.1(@babel/core@7.26.10)':
- dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-transform-object-rest-spread@7.28.4(@babel/core@7.26.10)':
- dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-compilation-targets': 7.27.2
- '@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.26.10)
- '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.26.10)
- '@babel/traverse': 7.28.5
- transitivePeerDependencies:
- - supports-color
-
- '@babel/plugin-transform-object-super@7.27.1(@babel/core@7.26.10)':
- dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-plugin-utils': 7.27.1
- '@babel/helper-replace-supers': 7.27.1(@babel/core@7.26.10)
- transitivePeerDependencies:
- - supports-color
-
- '@babel/plugin-transform-optional-catch-binding@7.27.1(@babel/core@7.26.10)':
- dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-transform-optional-chaining@7.28.5(@babel/core@7.26.10)':
- dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-plugin-utils': 7.27.1
- '@babel/helper-skip-transparent-expression-wrappers': 7.27.1
- transitivePeerDependencies:
- - supports-color
-
- '@babel/plugin-transform-parameters@7.27.7(@babel/core@7.26.10)':
- dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-transform-private-methods@7.27.1(@babel/core@7.26.10)':
- dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.26.10)
- '@babel/helper-plugin-utils': 7.27.1
- transitivePeerDependencies:
- - supports-color
-
- '@babel/plugin-transform-private-property-in-object@7.27.1(@babel/core@7.26.10)':
- dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-annotate-as-pure': 7.27.3
- '@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.26.10)
- '@babel/helper-plugin-utils': 7.27.1
- transitivePeerDependencies:
- - supports-color
-
- '@babel/plugin-transform-property-literals@7.27.1(@babel/core@7.26.10)':
- dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-transform-regenerator@7.28.4(@babel/core@7.26.10)':
- dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-transform-regexp-modifiers@7.27.1(@babel/core@7.26.10)':
- dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.26.10)
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.26.10)':
- dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-transform-runtime@7.26.10(@babel/core@7.26.10)':
- dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-module-imports': 7.27.1
- '@babel/helper-plugin-utils': 7.27.1
- babel-plugin-polyfill-corejs2: 0.4.14(@babel/core@7.26.10)
- babel-plugin-polyfill-corejs3: 0.11.1(@babel/core@7.26.10)
- babel-plugin-polyfill-regenerator: 0.6.5(@babel/core@7.26.10)
- semver: 6.3.1
- transitivePeerDependencies:
- - supports-color
-
- '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.26.10)':
- dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-transform-spread@7.27.1(@babel/core@7.26.10)':
- dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-plugin-utils': 7.27.1
- '@babel/helper-skip-transparent-expression-wrappers': 7.27.1
- transitivePeerDependencies:
- - supports-color
-
- '@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.26.10)':
- dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.26.10)':
- dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.26.10)':
- dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.26.10)':
- dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-transform-unicode-property-regex@7.27.1(@babel/core@7.26.10)':
- dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.26.10)
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.26.10)':
- dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.26.10)
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-transform-unicode-sets-regex@7.27.1(@babel/core@7.26.10)':
- dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.26.10)
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/preset-env@7.26.9(@babel/core@7.26.10)':
- dependencies:
- '@babel/compat-data': 7.28.5
- '@babel/core': 7.26.10
- '@babel/helper-compilation-targets': 7.27.2
- '@babel/helper-plugin-utils': 7.27.1
- '@babel/helper-validator-option': 7.27.1
- '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.28.5(@babel/core@7.26.10)
- '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.27.1(@babel/core@7.26.10)
- '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.27.1(@babel/core@7.26.10)
- '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.27.1(@babel/core@7.26.10)
- '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.28.3(@babel/core@7.26.10)
- '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.10)
- '@babel/plugin-syntax-import-assertions': 7.27.1(@babel/core@7.26.10)
- '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.26.10)
- '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.26.10)
- '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.26.10)
- '@babel/plugin-transform-async-generator-functions': 7.26.8(@babel/core@7.26.10)
- '@babel/plugin-transform-async-to-generator': 7.25.9(@babel/core@7.26.10)
- '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.26.10)
- '@babel/plugin-transform-block-scoping': 7.28.5(@babel/core@7.26.10)
- '@babel/plugin-transform-class-properties': 7.27.1(@babel/core@7.26.10)
- '@babel/plugin-transform-class-static-block': 7.28.3(@babel/core@7.26.10)
- '@babel/plugin-transform-classes': 7.28.4(@babel/core@7.26.10)
- '@babel/plugin-transform-computed-properties': 7.27.1(@babel/core@7.26.10)
- '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.26.10)
- '@babel/plugin-transform-dotall-regex': 7.27.1(@babel/core@7.26.10)
- '@babel/plugin-transform-duplicate-keys': 7.27.1(@babel/core@7.26.10)
- '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.27.1(@babel/core@7.26.10)
- '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.26.10)
- '@babel/plugin-transform-exponentiation-operator': 7.28.5(@babel/core@7.26.10)
- '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.26.10)
- '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.26.10)
- '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.26.10)
- '@babel/plugin-transform-json-strings': 7.27.1(@babel/core@7.26.10)
- '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.26.10)
- '@babel/plugin-transform-logical-assignment-operators': 7.28.5(@babel/core@7.26.10)
- '@babel/plugin-transform-member-expression-literals': 7.27.1(@babel/core@7.26.10)
- '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.26.10)
- '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.26.10)
- '@babel/plugin-transform-modules-systemjs': 7.28.5(@babel/core@7.26.10)
- '@babel/plugin-transform-modules-umd': 7.27.1(@babel/core@7.26.10)
- '@babel/plugin-transform-named-capturing-groups-regex': 7.27.1(@babel/core@7.26.10)
- '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.26.10)
- '@babel/plugin-transform-nullish-coalescing-operator': 7.27.1(@babel/core@7.26.10)
- '@babel/plugin-transform-numeric-separator': 7.27.1(@babel/core@7.26.10)
- '@babel/plugin-transform-object-rest-spread': 7.28.4(@babel/core@7.26.10)
- '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.26.10)
- '@babel/plugin-transform-optional-catch-binding': 7.27.1(@babel/core@7.26.10)
- '@babel/plugin-transform-optional-chaining': 7.28.5(@babel/core@7.26.10)
- '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.26.10)
- '@babel/plugin-transform-private-methods': 7.27.1(@babel/core@7.26.10)
- '@babel/plugin-transform-private-property-in-object': 7.27.1(@babel/core@7.26.10)
- '@babel/plugin-transform-property-literals': 7.27.1(@babel/core@7.26.10)
- '@babel/plugin-transform-regenerator': 7.28.4(@babel/core@7.26.10)
- '@babel/plugin-transform-regexp-modifiers': 7.27.1(@babel/core@7.26.10)
- '@babel/plugin-transform-reserved-words': 7.27.1(@babel/core@7.26.10)
- '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.26.10)
- '@babel/plugin-transform-spread': 7.27.1(@babel/core@7.26.10)
- '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.26.10)
- '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.26.10)
- '@babel/plugin-transform-typeof-symbol': 7.27.1(@babel/core@7.26.10)
- '@babel/plugin-transform-unicode-escapes': 7.27.1(@babel/core@7.26.10)
- '@babel/plugin-transform-unicode-property-regex': 7.27.1(@babel/core@7.26.10)
- '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.26.10)
- '@babel/plugin-transform-unicode-sets-regex': 7.27.1(@babel/core@7.26.10)
- '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.26.10)
- babel-plugin-polyfill-corejs2: 0.4.14(@babel/core@7.26.10)
- babel-plugin-polyfill-corejs3: 0.11.1(@babel/core@7.26.10)
- babel-plugin-polyfill-regenerator: 0.6.5(@babel/core@7.26.10)
- core-js-compat: 3.47.0
- semver: 6.3.1
- transitivePeerDependencies:
- - supports-color
-
- '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.26.10)':
- dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-plugin-utils': 7.27.1
- '@babel/types': 7.28.5
- esutils: 2.0.3
-
- '@babel/runtime@7.26.10':
- dependencies:
- regenerator-runtime: 0.14.1
-
- '@babel/template@7.27.2':
- dependencies:
- '@babel/code-frame': 7.27.1
- '@babel/parser': 7.28.5
- '@babel/types': 7.28.5
-
- '@babel/traverse@7.28.5':
- dependencies:
- '@babel/code-frame': 7.27.1
- '@babel/generator': 7.28.5
- '@babel/helper-globals': 7.28.0
- '@babel/parser': 7.28.5
- '@babel/template': 7.27.2
- '@babel/types': 7.28.5
- debug: 4.4.3
- transitivePeerDependencies:
- - supports-color
-
- '@babel/types@7.28.5':
- dependencies:
- '@babel/helper-string-parser': 7.27.1
- '@babel/helper-validator-identifier': 7.28.5
-
- '@discoveryjs/json-ext@0.6.3': {}
-
- '@esbuild/aix-ppc64@0.25.4':
- optional: true
-
- '@esbuild/android-arm64@0.25.4':
- optional: true
-
- '@esbuild/android-arm@0.25.4':
- optional: true
-
- '@esbuild/android-x64@0.25.4':
- optional: true
-
- '@esbuild/darwin-arm64@0.25.4':
- optional: true
-
- '@esbuild/darwin-x64@0.25.4':
- optional: true
-
- '@esbuild/freebsd-arm64@0.25.4':
- optional: true
-
- '@esbuild/freebsd-x64@0.25.4':
- optional: true
-
- '@esbuild/linux-arm64@0.25.4':
- optional: true
-
- '@esbuild/linux-arm@0.25.4':
- optional: true
-
- '@esbuild/linux-ia32@0.25.4':
- optional: true
-
- '@esbuild/linux-loong64@0.25.4':
- optional: true
-
- '@esbuild/linux-mips64el@0.25.4':
- optional: true
-
- '@esbuild/linux-ppc64@0.25.4':
- optional: true
-
- '@esbuild/linux-riscv64@0.25.4':
- optional: true
-
- '@esbuild/linux-s390x@0.25.4':
- optional: true
-
- '@esbuild/linux-x64@0.25.4':
- optional: true
-
- '@esbuild/netbsd-arm64@0.25.4':
- optional: true
-
- '@esbuild/netbsd-x64@0.25.4':
- optional: true
-
- '@esbuild/openbsd-arm64@0.25.4':
- optional: true
-
- '@esbuild/openbsd-x64@0.25.4':
- optional: true
-
- '@esbuild/sunos-x64@0.25.4':
- optional: true
-
- '@esbuild/win32-arm64@0.25.4':
- optional: true
-
- '@esbuild/win32-ia32@0.25.4':
- optional: true
-
- '@esbuild/win32-x64@0.25.4':
- optional: true
-
- '@inquirer/ansi@1.0.2': {}
-
- '@inquirer/checkbox@4.3.2(@types/node@20.19.25)':
- dependencies:
- '@inquirer/ansi': 1.0.2
- '@inquirer/core': 10.3.2(@types/node@20.19.25)
- '@inquirer/figures': 1.0.15
- '@inquirer/type': 3.0.10(@types/node@20.19.25)
- yoctocolors-cjs: 2.1.3
- optionalDependencies:
- '@types/node': 20.19.25
-
- '@inquirer/confirm@5.1.21(@types/node@20.19.25)':
- dependencies:
- '@inquirer/core': 10.3.2(@types/node@20.19.25)
- '@inquirer/type': 3.0.10(@types/node@20.19.25)
- optionalDependencies:
- '@types/node': 20.19.25
-
- '@inquirer/confirm@5.1.6(@types/node@20.19.25)':
- dependencies:
- '@inquirer/core': 10.3.2(@types/node@20.19.25)
- '@inquirer/type': 3.0.10(@types/node@20.19.25)
- optionalDependencies:
- '@types/node': 20.19.25
-
- '@inquirer/core@10.3.2(@types/node@20.19.25)':
- dependencies:
- '@inquirer/ansi': 1.0.2
- '@inquirer/figures': 1.0.15
- '@inquirer/type': 3.0.10(@types/node@20.19.25)
- cli-width: 4.1.0
- mute-stream: 2.0.0
- signal-exit: 4.1.0
- wrap-ansi: 6.2.0
- yoctocolors-cjs: 2.1.3
- optionalDependencies:
- '@types/node': 20.19.25
-
- '@inquirer/editor@4.2.23(@types/node@20.19.25)':
- dependencies:
- '@inquirer/core': 10.3.2(@types/node@20.19.25)
- '@inquirer/external-editor': 1.0.3(@types/node@20.19.25)
- '@inquirer/type': 3.0.10(@types/node@20.19.25)
- optionalDependencies:
- '@types/node': 20.19.25
-
- '@inquirer/expand@4.0.23(@types/node@20.19.25)':
- dependencies:
- '@inquirer/core': 10.3.2(@types/node@20.19.25)
- '@inquirer/type': 3.0.10(@types/node@20.19.25)
- yoctocolors-cjs: 2.1.3
- optionalDependencies:
- '@types/node': 20.19.25
-
- '@inquirer/external-editor@1.0.3(@types/node@20.19.25)':
- dependencies:
- chardet: 2.1.1
- iconv-lite: 0.7.0
- optionalDependencies:
- '@types/node': 20.19.25
-
- '@inquirer/figures@1.0.15': {}
-
- '@inquirer/input@4.3.1(@types/node@20.19.25)':
- dependencies:
- '@inquirer/core': 10.3.2(@types/node@20.19.25)
- '@inquirer/type': 3.0.10(@types/node@20.19.25)
- optionalDependencies:
- '@types/node': 20.19.25
-
- '@inquirer/number@3.0.23(@types/node@20.19.25)':
- dependencies:
- '@inquirer/core': 10.3.2(@types/node@20.19.25)
- '@inquirer/type': 3.0.10(@types/node@20.19.25)
- optionalDependencies:
- '@types/node': 20.19.25
-
- '@inquirer/password@4.0.23(@types/node@20.19.25)':
- dependencies:
- '@inquirer/ansi': 1.0.2
- '@inquirer/core': 10.3.2(@types/node@20.19.25)
- '@inquirer/type': 3.0.10(@types/node@20.19.25)
- optionalDependencies:
- '@types/node': 20.19.25
-
- '@inquirer/prompts@7.3.2(@types/node@20.19.25)':
- dependencies:
- '@inquirer/checkbox': 4.3.2(@types/node@20.19.25)
- '@inquirer/confirm': 5.1.21(@types/node@20.19.25)
- '@inquirer/editor': 4.2.23(@types/node@20.19.25)
- '@inquirer/expand': 4.0.23(@types/node@20.19.25)
- '@inquirer/input': 4.3.1(@types/node@20.19.25)
- '@inquirer/number': 3.0.23(@types/node@20.19.25)
- '@inquirer/password': 4.0.23(@types/node@20.19.25)
- '@inquirer/rawlist': 4.1.11(@types/node@20.19.25)
- '@inquirer/search': 3.2.2(@types/node@20.19.25)
- '@inquirer/select': 4.4.2(@types/node@20.19.25)
- optionalDependencies:
- '@types/node': 20.19.25
-
- '@inquirer/rawlist@4.1.11(@types/node@20.19.25)':
- dependencies:
- '@inquirer/core': 10.3.2(@types/node@20.19.25)
- '@inquirer/type': 3.0.10(@types/node@20.19.25)
- yoctocolors-cjs: 2.1.3
- optionalDependencies:
- '@types/node': 20.19.25
-
- '@inquirer/search@3.2.2(@types/node@20.19.25)':
- dependencies:
- '@inquirer/core': 10.3.2(@types/node@20.19.25)
- '@inquirer/figures': 1.0.15
- '@inquirer/type': 3.0.10(@types/node@20.19.25)
- yoctocolors-cjs: 2.1.3
- optionalDependencies:
- '@types/node': 20.19.25
-
- '@inquirer/select@4.4.2(@types/node@20.19.25)':
- dependencies:
- '@inquirer/ansi': 1.0.2
- '@inquirer/core': 10.3.2(@types/node@20.19.25)
- '@inquirer/figures': 1.0.15
- '@inquirer/type': 3.0.10(@types/node@20.19.25)
- yoctocolors-cjs: 2.1.3
- optionalDependencies:
- '@types/node': 20.19.25
-
- '@inquirer/type@1.5.5':
- dependencies:
- mute-stream: 1.0.0
-
- '@inquirer/type@3.0.10(@types/node@20.19.25)':
- optionalDependencies:
- '@types/node': 20.19.25
-
- '@isaacs/cliui@8.0.2':
- dependencies:
- string-width: 5.1.2
- string-width-cjs: string-width@4.2.3
- strip-ansi: 7.1.2
- strip-ansi-cjs: strip-ansi@6.0.1
- wrap-ansi: 8.1.0
- wrap-ansi-cjs: wrap-ansi@7.0.0
-
- '@isaacs/fs-minipass@4.0.1':
- dependencies:
- minipass: 7.1.2
-
- '@istanbuljs/schema@0.1.3': {}
-
- '@jridgewell/gen-mapping@0.3.13':
- dependencies:
- '@jridgewell/sourcemap-codec': 1.5.5
- '@jridgewell/trace-mapping': 0.3.31
-
- '@jridgewell/resolve-uri@3.1.2': {}
-
- '@jridgewell/source-map@0.3.11':
- dependencies:
- '@jridgewell/gen-mapping': 0.3.13
- '@jridgewell/trace-mapping': 0.3.31
-
- '@jridgewell/sourcemap-codec@1.5.5': {}
-
- '@jridgewell/trace-mapping@0.3.31':
- dependencies:
- '@jridgewell/resolve-uri': 3.1.2
- '@jridgewell/sourcemap-codec': 1.5.5
-
- '@jsonjoy.com/base64@1.1.2(tslib@2.8.1)':
- dependencies:
- tslib: 2.8.1
-
- '@jsonjoy.com/buffers@1.2.1(tslib@2.8.1)':
- dependencies:
- tslib: 2.8.1
-
- '@jsonjoy.com/codegen@1.0.0(tslib@2.8.1)':
- dependencies:
- tslib: 2.8.1
-
- '@jsonjoy.com/json-pack@1.21.0(tslib@2.8.1)':
- dependencies:
- '@jsonjoy.com/base64': 1.1.2(tslib@2.8.1)
- '@jsonjoy.com/buffers': 1.2.1(tslib@2.8.1)
- '@jsonjoy.com/codegen': 1.0.0(tslib@2.8.1)
- '@jsonjoy.com/json-pointer': 1.0.2(tslib@2.8.1)
- '@jsonjoy.com/util': 1.9.0(tslib@2.8.1)
- hyperdyperid: 1.2.0
- thingies: 2.5.0(tslib@2.8.1)
- tree-dump: 1.1.0(tslib@2.8.1)
- tslib: 2.8.1
-
- '@jsonjoy.com/json-pointer@1.0.2(tslib@2.8.1)':
- dependencies:
- '@jsonjoy.com/codegen': 1.0.0(tslib@2.8.1)
- '@jsonjoy.com/util': 1.9.0(tslib@2.8.1)
- tslib: 2.8.1
-
- '@jsonjoy.com/util@1.9.0(tslib@2.8.1)':
- dependencies:
- '@jsonjoy.com/buffers': 1.2.1(tslib@2.8.1)
- '@jsonjoy.com/codegen': 1.0.0(tslib@2.8.1)
- tslib: 2.8.1
-
- '@leichtgewicht/ip-codec@2.0.5': {}
-
- '@listr2/prompt-adapter-inquirer@2.0.18(@inquirer/prompts@7.3.2(@types/node@20.19.25))':
- dependencies:
- '@inquirer/prompts': 7.3.2(@types/node@20.19.25)
- '@inquirer/type': 1.5.5
-
- '@lmdb/lmdb-darwin-arm64@3.2.6':
- optional: true
-
- '@lmdb/lmdb-darwin-x64@3.2.6':
- optional: true
-
- '@lmdb/lmdb-linux-arm64@3.2.6':
- optional: true
-
- '@lmdb/lmdb-linux-arm@3.2.6':
- optional: true
-
- '@lmdb/lmdb-linux-x64@3.2.6':
- optional: true
-
- '@lmdb/lmdb-win32-x64@3.2.6':
- optional: true
-
- '@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.3':
- optional: true
-
- '@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.3':
- optional: true
-
- '@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.3':
- optional: true
-
- '@msgpackr-extract/msgpackr-extract-linux-arm@3.0.3':
- optional: true
-
- '@msgpackr-extract/msgpackr-extract-linux-x64@3.0.3':
- optional: true
-
- '@msgpackr-extract/msgpackr-extract-win32-x64@3.0.3':
- optional: true
-
- '@napi-rs/nice-android-arm-eabi@1.1.1':
- optional: true
-
- '@napi-rs/nice-android-arm64@1.1.1':
- optional: true
-
- '@napi-rs/nice-darwin-arm64@1.1.1':
- optional: true
-
- '@napi-rs/nice-darwin-x64@1.1.1':
- optional: true
-
- '@napi-rs/nice-freebsd-x64@1.1.1':
- optional: true
-
- '@napi-rs/nice-linux-arm-gnueabihf@1.1.1':
- optional: true
-
- '@napi-rs/nice-linux-arm64-gnu@1.1.1':
- optional: true
-
- '@napi-rs/nice-linux-arm64-musl@1.1.1':
- optional: true
-
- '@napi-rs/nice-linux-ppc64-gnu@1.1.1':
- optional: true
-
- '@napi-rs/nice-linux-riscv64-gnu@1.1.1':
- optional: true
-
- '@napi-rs/nice-linux-s390x-gnu@1.1.1':
- optional: true
-
- '@napi-rs/nice-linux-x64-gnu@1.1.1':
- optional: true
-
- '@napi-rs/nice-linux-x64-musl@1.1.1':
- optional: true
-
- '@napi-rs/nice-openharmony-arm64@1.1.1':
- optional: true
-
- '@napi-rs/nice-win32-arm64-msvc@1.1.1':
- optional: true
-
- '@napi-rs/nice-win32-ia32-msvc@1.1.1':
- optional: true
-
- '@napi-rs/nice-win32-x64-msvc@1.1.1':
- optional: true
-
- '@napi-rs/nice@1.1.1':
- optionalDependencies:
- '@napi-rs/nice-android-arm-eabi': 1.1.1
- '@napi-rs/nice-android-arm64': 1.1.1
- '@napi-rs/nice-darwin-arm64': 1.1.1
- '@napi-rs/nice-darwin-x64': 1.1.1
- '@napi-rs/nice-freebsd-x64': 1.1.1
- '@napi-rs/nice-linux-arm-gnueabihf': 1.1.1
- '@napi-rs/nice-linux-arm64-gnu': 1.1.1
- '@napi-rs/nice-linux-arm64-musl': 1.1.1
- '@napi-rs/nice-linux-ppc64-gnu': 1.1.1
- '@napi-rs/nice-linux-riscv64-gnu': 1.1.1
- '@napi-rs/nice-linux-s390x-gnu': 1.1.1
- '@napi-rs/nice-linux-x64-gnu': 1.1.1
- '@napi-rs/nice-linux-x64-musl': 1.1.1
- '@napi-rs/nice-openharmony-arm64': 1.1.1
- '@napi-rs/nice-win32-arm64-msvc': 1.1.1
- '@napi-rs/nice-win32-ia32-msvc': 1.1.1
- '@napi-rs/nice-win32-x64-msvc': 1.1.1
- optional: true
-
- '@ngtools/webpack@19.2.19(@angular/compiler-cli@19.2.16(@angular/compiler@19.2.16)(typescript@5.6.3))(typescript@5.6.3)(webpack@5.98.0(esbuild@0.25.4))':
- dependencies:
- '@angular/compiler-cli': 19.2.16(@angular/compiler@19.2.16)(typescript@5.6.3)
- typescript: 5.6.3
- webpack: 5.98.0(esbuild@0.25.4)
-
- '@nodelib/fs.scandir@2.1.5':
- dependencies:
- '@nodelib/fs.stat': 2.0.5
- run-parallel: 1.2.0
-
- '@nodelib/fs.stat@2.0.5': {}
-
- '@nodelib/fs.walk@1.2.8':
- dependencies:
- '@nodelib/fs.scandir': 2.1.5
- fastq: 1.19.1
-
- '@npmcli/agent@3.0.0':
- dependencies:
- agent-base: 7.1.4
- http-proxy-agent: 7.0.2
- https-proxy-agent: 7.0.6
- lru-cache: 10.4.3
- socks-proxy-agent: 8.0.5
- transitivePeerDependencies:
- - supports-color
-
- '@npmcli/fs@4.0.0':
- dependencies:
- semver: 7.7.1
-
- '@npmcli/git@6.0.3':
- dependencies:
- '@npmcli/promise-spawn': 8.0.3
- ini: 5.0.0
- lru-cache: 10.4.3
- npm-pick-manifest: 10.0.0
- proc-log: 5.0.0
- promise-retry: 2.0.1
- semver: 7.7.1
- which: 5.0.0
-
- '@npmcli/installed-package-contents@3.0.0':
- dependencies:
- npm-bundled: 4.0.0
- npm-normalize-package-bin: 4.0.0
-
- '@npmcli/node-gyp@4.0.0': {}
-
- '@npmcli/package-json@6.2.0':
- dependencies:
- '@npmcli/git': 6.0.3
- glob: 10.5.0
- hosted-git-info: 8.1.0
- json-parse-even-better-errors: 4.0.0
- proc-log: 5.0.0
- semver: 7.7.1
- validate-npm-package-license: 3.0.4
-
- '@npmcli/promise-spawn@8.0.3':
- dependencies:
- which: 5.0.0
-
- '@npmcli/redact@3.2.2': {}
-
- '@npmcli/run-script@9.1.0':
- dependencies:
- '@npmcli/node-gyp': 4.0.0
- '@npmcli/package-json': 6.2.0
- '@npmcli/promise-spawn': 8.0.3
- node-gyp: 11.5.0
- proc-log: 5.0.0
- which: 5.0.0
- transitivePeerDependencies:
- - supports-color
-
- '@parcel/watcher-android-arm64@2.5.1':
- optional: true
-
- '@parcel/watcher-darwin-arm64@2.5.1':
- optional: true
-
- '@parcel/watcher-darwin-x64@2.5.1':
- optional: true
-
- '@parcel/watcher-freebsd-x64@2.5.1':
- optional: true
-
- '@parcel/watcher-linux-arm-glibc@2.5.1':
- optional: true
-
- '@parcel/watcher-linux-arm-musl@2.5.1':
- optional: true
-
- '@parcel/watcher-linux-arm64-glibc@2.5.1':
- optional: true
-
- '@parcel/watcher-linux-arm64-musl@2.5.1':
- optional: true
-
- '@parcel/watcher-linux-x64-glibc@2.5.1':
- optional: true
-
- '@parcel/watcher-linux-x64-musl@2.5.1':
- optional: true
-
- '@parcel/watcher-win32-arm64@2.5.1':
- optional: true
-
- '@parcel/watcher-win32-ia32@2.5.1':
- optional: true
-
- '@parcel/watcher-win32-x64@2.5.1':
- optional: true
-
- '@parcel/watcher@2.5.1':
- dependencies:
- detect-libc: 1.0.3
- is-glob: 4.0.3
- micromatch: 4.0.8
- node-addon-api: 7.1.1
- optionalDependencies:
- '@parcel/watcher-android-arm64': 2.5.1
- '@parcel/watcher-darwin-arm64': 2.5.1
- '@parcel/watcher-darwin-x64': 2.5.1
- '@parcel/watcher-freebsd-x64': 2.5.1
- '@parcel/watcher-linux-arm-glibc': 2.5.1
- '@parcel/watcher-linux-arm-musl': 2.5.1
- '@parcel/watcher-linux-arm64-glibc': 2.5.1
- '@parcel/watcher-linux-arm64-musl': 2.5.1
- '@parcel/watcher-linux-x64-glibc': 2.5.1
- '@parcel/watcher-linux-x64-musl': 2.5.1
- '@parcel/watcher-win32-arm64': 2.5.1
- '@parcel/watcher-win32-ia32': 2.5.1
- '@parcel/watcher-win32-x64': 2.5.1
- optional: true
-
- '@pkgjs/parseargs@0.11.0':
- optional: true
-
- '@rollup/rollup-android-arm-eabi@4.34.8':
- optional: true
-
- '@rollup/rollup-android-arm-eabi@4.53.3':
- optional: true
-
- '@rollup/rollup-android-arm64@4.34.8':
- optional: true
-
- '@rollup/rollup-android-arm64@4.53.3':
- optional: true
-
- '@rollup/rollup-darwin-arm64@4.34.8':
- optional: true
-
- '@rollup/rollup-darwin-arm64@4.53.3':
- optional: true
-
- '@rollup/rollup-darwin-x64@4.34.8':
- optional: true
-
- '@rollup/rollup-darwin-x64@4.53.3':
- optional: true
-
- '@rollup/rollup-freebsd-arm64@4.34.8':
- optional: true
-
- '@rollup/rollup-freebsd-arm64@4.53.3':
- optional: true
-
- '@rollup/rollup-freebsd-x64@4.34.8':
- optional: true
-
- '@rollup/rollup-freebsd-x64@4.53.3':
- optional: true
-
- '@rollup/rollup-linux-arm-gnueabihf@4.34.8':
- optional: true
-
- '@rollup/rollup-linux-arm-gnueabihf@4.53.3':
- optional: true
-
- '@rollup/rollup-linux-arm-musleabihf@4.34.8':
- optional: true
-
- '@rollup/rollup-linux-arm-musleabihf@4.53.3':
- optional: true
-
- '@rollup/rollup-linux-arm64-gnu@4.34.8':
- optional: true
-
- '@rollup/rollup-linux-arm64-gnu@4.53.3':
- optional: true
-
- '@rollup/rollup-linux-arm64-musl@4.34.8':
- optional: true
-
- '@rollup/rollup-linux-arm64-musl@4.53.3':
- optional: true
-
- '@rollup/rollup-linux-loong64-gnu@4.53.3':
- optional: true
-
- '@rollup/rollup-linux-loongarch64-gnu@4.34.8':
- optional: true
-
- '@rollup/rollup-linux-powerpc64le-gnu@4.34.8':
- optional: true
-
- '@rollup/rollup-linux-ppc64-gnu@4.53.3':
- optional: true
-
- '@rollup/rollup-linux-riscv64-gnu@4.34.8':
- optional: true
-
- '@rollup/rollup-linux-riscv64-gnu@4.53.3':
- optional: true
-
- '@rollup/rollup-linux-riscv64-musl@4.53.3':
- optional: true
-
- '@rollup/rollup-linux-s390x-gnu@4.34.8':
- optional: true
-
- '@rollup/rollup-linux-s390x-gnu@4.53.3':
- optional: true
-
- '@rollup/rollup-linux-x64-gnu@4.34.8':
- optional: true
-
- '@rollup/rollup-linux-x64-gnu@4.53.3':
- optional: true
-
- '@rollup/rollup-linux-x64-musl@4.34.8':
- optional: true
-
- '@rollup/rollup-linux-x64-musl@4.53.3':
- optional: true
-
- '@rollup/rollup-openharmony-arm64@4.53.3':
- optional: true
-
- '@rollup/rollup-win32-arm64-msvc@4.34.8':
- optional: true
-
- '@rollup/rollup-win32-arm64-msvc@4.53.3':
- optional: true
-
- '@rollup/rollup-win32-ia32-msvc@4.34.8':
- optional: true
-
- '@rollup/rollup-win32-ia32-msvc@4.53.3':
- optional: true
-
- '@rollup/rollup-win32-x64-gnu@4.53.3':
- optional: true
-
- '@rollup/rollup-win32-x64-msvc@4.34.8':
- optional: true
-
- '@rollup/rollup-win32-x64-msvc@4.53.3':
- optional: true
-
- '@schematics/angular@19.2.19(chokidar@4.0.3)':
- dependencies:
- '@angular-devkit/core': 19.2.19(chokidar@4.0.3)
- '@angular-devkit/schematics': 19.2.19(chokidar@4.0.3)
- jsonc-parser: 3.3.1
- transitivePeerDependencies:
- - chokidar
-
- '@sigstore/bundle@3.1.0':
- dependencies:
- '@sigstore/protobuf-specs': 0.4.3
-
- '@sigstore/core@2.0.0': {}
-
- '@sigstore/protobuf-specs@0.4.3': {}
-
- '@sigstore/sign@3.1.0':
- dependencies:
- '@sigstore/bundle': 3.1.0
- '@sigstore/core': 2.0.0
- '@sigstore/protobuf-specs': 0.4.3
- make-fetch-happen: 14.0.3
- proc-log: 5.0.0
- promise-retry: 2.0.1
- transitivePeerDependencies:
- - supports-color
-
- '@sigstore/tuf@3.1.1':
- dependencies:
- '@sigstore/protobuf-specs': 0.4.3
- tuf-js: 3.1.0
- transitivePeerDependencies:
- - supports-color
-
- '@sigstore/verify@2.1.1':
- dependencies:
- '@sigstore/bundle': 3.1.0
- '@sigstore/core': 2.0.0
- '@sigstore/protobuf-specs': 0.4.3
-
- '@sindresorhus/merge-streams@2.3.0': {}
-
- '@tufjs/canonical-json@2.0.0': {}
-
- '@tufjs/models@3.0.1':
- dependencies:
- '@tufjs/canonical-json': 2.0.0
- minimatch: 9.0.5
-
- '@types/body-parser@1.19.6':
- dependencies:
- '@types/connect': 3.4.38
- '@types/node': 20.19.25
-
- '@types/bonjour@3.5.13':
- dependencies:
- '@types/node': 20.19.25
-
- '@types/connect-history-api-fallback@1.5.4':
- dependencies:
- '@types/express-serve-static-core': 4.19.7
- '@types/node': 20.19.25
-
- '@types/connect@3.4.38':
- dependencies:
- '@types/node': 20.19.25
-
- '@types/eslint-scope@3.7.7':
- dependencies:
- '@types/eslint': 9.6.1
- '@types/estree': 1.0.8
-
- '@types/eslint@9.6.1':
- dependencies:
- '@types/estree': 1.0.8
- '@types/json-schema': 7.0.15
-
- '@types/estree@1.0.6': {}
-
- '@types/estree@1.0.8': {}
-
- '@types/express-serve-static-core@4.19.7':
- dependencies:
- '@types/node': 20.19.25
- '@types/qs': 6.14.0
- '@types/range-parser': 1.2.7
- '@types/send': 1.2.1
-
- '@types/express@4.17.25':
- dependencies:
- '@types/body-parser': 1.19.6
- '@types/express-serve-static-core': 4.19.7
- '@types/qs': 6.14.0
- '@types/serve-static': 1.15.10
-
- '@types/http-errors@2.0.5': {}
-
- '@types/http-proxy@1.17.17':
- dependencies:
- '@types/node': 20.19.25
-
- '@types/json-schema@7.0.15': {}
-
- '@types/mime@1.3.5': {}
-
- '@types/node-forge@1.3.14':
- dependencies:
- '@types/node': 20.19.25
-
- '@types/node@20.19.25':
- dependencies:
- undici-types: 6.21.0
-
- '@types/qs@6.14.0': {}
-
- '@types/range-parser@1.2.7': {}
-
- '@types/retry@0.12.2': {}
-
- '@types/send@0.17.6':
- dependencies:
- '@types/mime': 1.3.5
- '@types/node': 20.19.25
-
- '@types/send@1.2.1':
- dependencies:
- '@types/node': 20.19.25
-
- '@types/serve-index@1.9.4':
- dependencies:
- '@types/express': 4.17.25
-
- '@types/serve-static@1.15.10':
- dependencies:
- '@types/http-errors': 2.0.5
- '@types/node': 20.19.25
- '@types/send': 0.17.6
-
- '@types/sockjs@0.3.36':
- dependencies:
- '@types/node': 20.19.25
-
- '@types/ws@8.18.1':
- dependencies:
- '@types/node': 20.19.25
-
- '@vitejs/plugin-basic-ssl@1.2.0(vite@6.4.1(@types/node@20.19.25)(jiti@1.21.7)(less@4.2.2)(sass@1.85.0)(terser@5.39.0))':
- dependencies:
- vite: 6.4.1(@types/node@20.19.25)(jiti@1.21.7)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)
-
- '@webassemblyjs/ast@1.14.1':
- dependencies:
- '@webassemblyjs/helper-numbers': 1.13.2
- '@webassemblyjs/helper-wasm-bytecode': 1.13.2
-
- '@webassemblyjs/floating-point-hex-parser@1.13.2': {}
-
- '@webassemblyjs/helper-api-error@1.13.2': {}
-
- '@webassemblyjs/helper-buffer@1.14.1': {}
-
- '@webassemblyjs/helper-numbers@1.13.2':
- dependencies:
- '@webassemblyjs/floating-point-hex-parser': 1.13.2
- '@webassemblyjs/helper-api-error': 1.13.2
- '@xtuc/long': 4.2.2
-
- '@webassemblyjs/helper-wasm-bytecode@1.13.2': {}
-
- '@webassemblyjs/helper-wasm-section@1.14.1':
- dependencies:
- '@webassemblyjs/ast': 1.14.1
- '@webassemblyjs/helper-buffer': 1.14.1
- '@webassemblyjs/helper-wasm-bytecode': 1.13.2
- '@webassemblyjs/wasm-gen': 1.14.1
-
- '@webassemblyjs/ieee754@1.13.2':
- dependencies:
- '@xtuc/ieee754': 1.2.0
-
- '@webassemblyjs/leb128@1.13.2':
- dependencies:
- '@xtuc/long': 4.2.2
-
- '@webassemblyjs/utf8@1.13.2': {}
-
- '@webassemblyjs/wasm-edit@1.14.1':
- dependencies:
- '@webassemblyjs/ast': 1.14.1
- '@webassemblyjs/helper-buffer': 1.14.1
- '@webassemblyjs/helper-wasm-bytecode': 1.13.2
- '@webassemblyjs/helper-wasm-section': 1.14.1
- '@webassemblyjs/wasm-gen': 1.14.1
- '@webassemblyjs/wasm-opt': 1.14.1
- '@webassemblyjs/wasm-parser': 1.14.1
- '@webassemblyjs/wast-printer': 1.14.1
-
- '@webassemblyjs/wasm-gen@1.14.1':
- dependencies:
- '@webassemblyjs/ast': 1.14.1
- '@webassemblyjs/helper-wasm-bytecode': 1.13.2
- '@webassemblyjs/ieee754': 1.13.2
- '@webassemblyjs/leb128': 1.13.2
- '@webassemblyjs/utf8': 1.13.2
-
- '@webassemblyjs/wasm-opt@1.14.1':
- dependencies:
- '@webassemblyjs/ast': 1.14.1
- '@webassemblyjs/helper-buffer': 1.14.1
- '@webassemblyjs/wasm-gen': 1.14.1
- '@webassemblyjs/wasm-parser': 1.14.1
-
- '@webassemblyjs/wasm-parser@1.14.1':
- dependencies:
- '@webassemblyjs/ast': 1.14.1
- '@webassemblyjs/helper-api-error': 1.13.2
- '@webassemblyjs/helper-wasm-bytecode': 1.13.2
- '@webassemblyjs/ieee754': 1.13.2
- '@webassemblyjs/leb128': 1.13.2
- '@webassemblyjs/utf8': 1.13.2
-
- '@webassemblyjs/wast-printer@1.14.1':
- dependencies:
- '@webassemblyjs/ast': 1.14.1
- '@xtuc/long': 4.2.2
-
- '@xtuc/ieee754@1.2.0': {}
-
- '@xtuc/long@4.2.2': {}
-
- '@yarnpkg/lockfile@1.1.0': {}
-
- abbrev@3.0.1: {}
-
- accepts@1.3.8:
- dependencies:
- mime-types: 2.1.35
- negotiator: 0.6.3
-
- acorn@8.15.0: {}
-
- adjust-sourcemap-loader@4.0.0:
- dependencies:
- loader-utils: 2.0.4
- regex-parser: 2.3.1
-
- agent-base@7.1.4: {}
-
- ajv-formats@2.1.1(ajv@8.17.1):
- optionalDependencies:
- ajv: 8.17.1
-
- ajv-formats@3.0.1(ajv@8.17.1):
- optionalDependencies:
- ajv: 8.17.1
-
- ajv-keywords@5.1.0(ajv@8.17.1):
- dependencies:
- ajv: 8.17.1
- fast-deep-equal: 3.1.3
-
- ajv@8.17.1:
- dependencies:
- fast-deep-equal: 3.1.3
- fast-uri: 3.1.0
- json-schema-traverse: 1.0.0
- require-from-string: 2.0.2
-
- ansi-colors@4.1.3: {}
-
- ansi-escapes@7.2.0:
- dependencies:
- environment: 1.1.0
-
- ansi-html-community@0.0.8: {}
-
- ansi-regex@5.0.1: {}
-
- ansi-regex@6.2.2: {}
-
- ansi-styles@4.3.0:
- dependencies:
- color-convert: 2.0.1
-
- ansi-styles@6.2.3: {}
-
- any-promise@1.3.0: {}
-
- anymatch@3.1.3:
- dependencies:
- normalize-path: 3.0.0
- picomatch: 2.3.1
-
- arg@5.0.2: {}
-
- argparse@2.0.1: {}
-
- array-flatten@1.1.1: {}
-
- autoprefixer@10.4.20(postcss@8.5.2):
- dependencies:
- browserslist: 4.28.0
- caniuse-lite: 1.0.30001757
- fraction.js: 4.3.7
- normalize-range: 0.1.2
- picocolors: 1.1.1
- postcss: 8.5.2
- postcss-value-parser: 4.2.0
-
- autoprefixer@10.4.22(postcss@8.5.6):
- dependencies:
- browserslist: 4.28.0
- caniuse-lite: 1.0.30001757
- fraction.js: 5.3.4
- normalize-range: 0.1.2
- picocolors: 1.1.1
- postcss: 8.5.6
- postcss-value-parser: 4.2.0
-
- babel-loader@9.2.1(@babel/core@7.26.10)(webpack@5.98.0(esbuild@0.25.4)):
- dependencies:
- '@babel/core': 7.26.10
- find-cache-dir: 4.0.0
- schema-utils: 4.3.3
- webpack: 5.98.0(esbuild@0.25.4)
-
- babel-plugin-polyfill-corejs2@0.4.14(@babel/core@7.26.10):
- dependencies:
- '@babel/compat-data': 7.28.5
- '@babel/core': 7.26.10
- '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.26.10)
- semver: 6.3.1
- transitivePeerDependencies:
- - supports-color
-
- babel-plugin-polyfill-corejs3@0.11.1(@babel/core@7.26.10):
- dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.26.10)
- core-js-compat: 3.47.0
- transitivePeerDependencies:
- - supports-color
-
- babel-plugin-polyfill-regenerator@0.6.5(@babel/core@7.26.10):
- dependencies:
- '@babel/core': 7.26.10
- '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.26.10)
- transitivePeerDependencies:
- - supports-color
-
- balanced-match@1.0.2: {}
-
- base64-js@1.5.1: {}
-
- baseline-browser-mapping@2.8.31: {}
-
- batch@0.6.1: {}
-
- beasties@0.3.2:
- dependencies:
- css-select: 5.2.2
- css-what: 6.2.2
- dom-serializer: 2.0.0
- domhandler: 5.0.3
- htmlparser2: 10.0.0
- picocolors: 1.1.1
- postcss: 8.5.6
- postcss-media-query-parser: 0.2.3
-
- big.js@5.2.2: {}
-
- binary-extensions@2.3.0: {}
-
- bl@4.1.0:
- dependencies:
- buffer: 5.7.1
- inherits: 2.0.4
- readable-stream: 3.6.2
-
- body-parser@1.20.3:
- 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.13.0
- raw-body: 2.5.2
- type-is: 1.6.18
- unpipe: 1.0.0
- transitivePeerDependencies:
- - supports-color
-
- bonjour-service@1.3.0:
- dependencies:
- fast-deep-equal: 3.1.3
- multicast-dns: 7.2.5
-
- boolbase@1.0.0: {}
-
- brace-expansion@2.0.2:
- dependencies:
- balanced-match: 1.0.2
-
- braces@3.0.3:
- dependencies:
- fill-range: 7.1.1
-
- browserslist@4.28.0:
- dependencies:
- baseline-browser-mapping: 2.8.31
- caniuse-lite: 1.0.30001757
- electron-to-chromium: 1.5.262
- node-releases: 2.0.27
- update-browserslist-db: 1.1.4(browserslist@4.28.0)
-
- buffer-from@1.1.2: {}
-
- buffer@5.7.1:
- dependencies:
- base64-js: 1.5.1
- ieee754: 1.2.1
-
- bundle-name@4.1.0:
- dependencies:
- run-applescript: 7.1.0
-
- bytes@3.1.2: {}
-
- cacache@19.0.1:
- dependencies:
- '@npmcli/fs': 4.0.0
- fs-minipass: 3.0.3
- glob: 10.5.0
- lru-cache: 10.4.3
- minipass: 7.1.2
- minipass-collect: 2.0.1
- minipass-flush: 1.0.5
- minipass-pipeline: 1.2.4
- p-map: 7.0.4
- ssri: 12.0.0
- tar: 7.5.2
- unique-filename: 4.0.0
-
- call-bind-apply-helpers@1.0.2:
- dependencies:
- es-errors: 1.3.0
- function-bind: 1.1.2
-
- call-bound@1.0.4:
- dependencies:
- call-bind-apply-helpers: 1.0.2
- get-intrinsic: 1.3.0
-
- callsites@3.1.0: {}
-
- camelcase-css@2.0.1: {}
-
- caniuse-lite@1.0.30001757: {}
-
- chalk@4.1.2:
- dependencies:
- ansi-styles: 4.3.0
- supports-color: 7.2.0
-
- chardet@2.1.1: {}
-
- chokidar@3.6.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
-
- chokidar@4.0.3:
- dependencies:
- readdirp: 4.1.2
-
- chownr@2.0.0: {}
-
- chownr@3.0.0: {}
-
- chrome-trace-event@1.0.4: {}
-
- cli-cursor@3.1.0:
- dependencies:
- restore-cursor: 3.1.0
-
- cli-cursor@5.0.0:
- dependencies:
- restore-cursor: 5.1.0
-
- cli-spinners@2.9.2: {}
-
- cli-truncate@4.0.0:
- dependencies:
- slice-ansi: 5.0.0
- string-width: 7.2.0
-
- cli-width@4.1.0: {}
-
- cliui@8.0.1:
- dependencies:
- string-width: 4.2.3
- strip-ansi: 6.0.1
- wrap-ansi: 7.0.0
-
- clone-deep@4.0.1:
- dependencies:
- is-plain-object: 2.0.4
- kind-of: 6.0.3
- shallow-clone: 3.0.1
-
- clone@1.0.4: {}
-
- color-convert@2.0.1:
- dependencies:
- color-name: 1.1.4
-
- color-name@1.1.4: {}
-
- colorette@2.0.20: {}
-
- commander@2.20.3: {}
-
- commander@4.1.1: {}
-
- common-path-prefix@3.0.0: {}
-
- compressible@2.0.18:
- dependencies:
- mime-db: 1.54.0
-
- compression@1.8.1:
- dependencies:
- bytes: 3.1.2
- compressible: 2.0.18
- debug: 2.6.9
- negotiator: 0.6.4
- on-headers: 1.1.0
- safe-buffer: 5.2.1
- vary: 1.1.2
- transitivePeerDependencies:
- - supports-color
-
- connect-history-api-fallback@2.0.0: {}
-
- content-disposition@0.5.4:
- dependencies:
- safe-buffer: 5.2.1
-
- content-type@1.0.5: {}
-
- convert-source-map@1.9.0: {}
-
- convert-source-map@2.0.0: {}
-
- cookie-signature@1.0.6: {}
-
- cookie@0.7.1: {}
-
- copy-anything@2.0.6:
- dependencies:
- is-what: 3.14.1
-
- copy-webpack-plugin@12.0.2(webpack@5.98.0(esbuild@0.25.4)):
- dependencies:
- fast-glob: 3.3.3
- glob-parent: 6.0.2
- globby: 14.1.0
- normalize-path: 3.0.0
- schema-utils: 4.3.3
- serialize-javascript: 6.0.2
- webpack: 5.98.0(esbuild@0.25.4)
-
- core-js-compat@3.47.0:
- dependencies:
- browserslist: 4.28.0
-
- core-util-is@1.0.3: {}
-
- cosmiconfig@9.0.0(typescript@5.6.3):
- dependencies:
- env-paths: 2.2.1
- import-fresh: 3.3.1
- js-yaml: 4.1.1
- parse-json: 5.2.0
- optionalDependencies:
- typescript: 5.6.3
-
- cross-spawn@7.0.6:
- dependencies:
- path-key: 3.1.1
- shebang-command: 2.0.0
- which: 2.0.2
-
- css-loader@7.1.2(webpack@5.98.0(esbuild@0.25.4)):
- dependencies:
- icss-utils: 5.1.0(postcss@8.5.6)
- postcss: 8.5.6
- postcss-modules-extract-imports: 3.1.0(postcss@8.5.6)
- postcss-modules-local-by-default: 4.2.0(postcss@8.5.6)
- postcss-modules-scope: 3.2.1(postcss@8.5.6)
- postcss-modules-values: 4.0.0(postcss@8.5.6)
- postcss-value-parser: 4.2.0
- semver: 7.7.1
- optionalDependencies:
- webpack: 5.98.0(esbuild@0.25.4)
-
- css-select@5.2.2:
- dependencies:
- boolbase: 1.0.0
- css-what: 6.2.2
- domhandler: 5.0.3
- domutils: 3.2.2
- nth-check: 2.1.1
-
- css-what@6.2.2: {}
-
- cssesc@3.0.0: {}
-
- debug@2.6.9:
- dependencies:
- ms: 2.0.0
-
- debug@4.4.3:
- dependencies:
- ms: 2.1.3
-
- default-browser-id@5.0.1: {}
-
- default-browser@5.4.0:
- dependencies:
- bundle-name: 4.1.0
- default-browser-id: 5.0.1
-
- defaults@1.0.4:
- dependencies:
- clone: 1.0.4
-
- define-lazy-prop@3.0.0: {}
-
- depd@1.1.2: {}
-
- depd@2.0.0: {}
-
- destroy@1.2.0: {}
-
- detect-libc@1.0.3:
- optional: true
-
- detect-libc@2.1.2:
- optional: true
-
- detect-node@2.1.0: {}
-
- didyoumean@1.2.2: {}
-
- dlv@1.1.3: {}
-
- dns-packet@5.6.1:
- dependencies:
- '@leichtgewicht/ip-codec': 2.0.5
-
- dom-serializer@2.0.0:
- dependencies:
- domelementtype: 2.3.0
- domhandler: 5.0.3
- entities: 4.5.0
-
- domelementtype@2.3.0: {}
-
- domhandler@5.0.3:
- dependencies:
- domelementtype: 2.3.0
-
- domutils@3.2.2:
- dependencies:
- dom-serializer: 2.0.0
- domelementtype: 2.3.0
- domhandler: 5.0.3
-
- dunder-proto@1.0.1:
- dependencies:
- call-bind-apply-helpers: 1.0.2
- es-errors: 1.3.0
- gopd: 1.2.0
-
- eastasianwidth@0.2.0: {}
-
- ee-first@1.1.1: {}
-
- electron-to-chromium@1.5.262: {}
-
- emoji-regex@10.6.0: {}
-
- emoji-regex@8.0.0: {}
-
- emoji-regex@9.2.2: {}
-
- emojis-list@3.0.0: {}
-
- encodeurl@1.0.2: {}
-
- encodeurl@2.0.0: {}
-
- encoding@0.1.13:
- dependencies:
- iconv-lite: 0.6.3
- optional: true
-
- enhanced-resolve@5.18.3:
- dependencies:
- graceful-fs: 4.2.11
- tapable: 2.3.0
-
- entities@4.5.0: {}
-
- entities@6.0.1: {}
-
- env-paths@2.2.1: {}
-
- environment@1.1.0: {}
-
- err-code@2.0.3: {}
-
- errno@0.1.8:
- dependencies:
- prr: 1.0.1
- optional: true
-
- error-ex@1.3.4:
- dependencies:
- is-arrayish: 0.2.1
-
- es-define-property@1.0.1: {}
-
- es-errors@1.3.0: {}
-
- es-module-lexer@1.7.0: {}
-
- es-object-atoms@1.1.1:
- dependencies:
- es-errors: 1.3.0
-
- esbuild-wasm@0.25.4: {}
-
- esbuild@0.25.4:
- optionalDependencies:
- '@esbuild/aix-ppc64': 0.25.4
- '@esbuild/android-arm': 0.25.4
- '@esbuild/android-arm64': 0.25.4
- '@esbuild/android-x64': 0.25.4
- '@esbuild/darwin-arm64': 0.25.4
- '@esbuild/darwin-x64': 0.25.4
- '@esbuild/freebsd-arm64': 0.25.4
- '@esbuild/freebsd-x64': 0.25.4
- '@esbuild/linux-arm': 0.25.4
- '@esbuild/linux-arm64': 0.25.4
- '@esbuild/linux-ia32': 0.25.4
- '@esbuild/linux-loong64': 0.25.4
- '@esbuild/linux-mips64el': 0.25.4
- '@esbuild/linux-ppc64': 0.25.4
- '@esbuild/linux-riscv64': 0.25.4
- '@esbuild/linux-s390x': 0.25.4
- '@esbuild/linux-x64': 0.25.4
- '@esbuild/netbsd-arm64': 0.25.4
- '@esbuild/netbsd-x64': 0.25.4
- '@esbuild/openbsd-arm64': 0.25.4
- '@esbuild/openbsd-x64': 0.25.4
- '@esbuild/sunos-x64': 0.25.4
- '@esbuild/win32-arm64': 0.25.4
- '@esbuild/win32-ia32': 0.25.4
- '@esbuild/win32-x64': 0.25.4
-
- escalade@3.2.0: {}
-
- escape-html@1.0.3: {}
-
- eslint-scope@5.1.1:
- dependencies:
- esrecurse: 4.3.0
- estraverse: 4.3.0
-
- esrecurse@4.3.0:
- dependencies:
- estraverse: 5.3.0
-
- estraverse@4.3.0: {}
-
- estraverse@5.3.0: {}
-
- esutils@2.0.3: {}
-
- etag@1.8.1: {}
-
- eventemitter3@4.0.7: {}
-
- eventemitter3@5.0.1: {}
-
- events@3.3.0: {}
-
- exponential-backoff@3.1.3: {}
-
- express@4.21.2:
- dependencies:
- accepts: 1.3.8
- array-flatten: 1.1.1
- body-parser: 1.20.3
- content-disposition: 0.5.4
- content-type: 1.0.5
- cookie: 0.7.1
- cookie-signature: 1.0.6
- debug: 2.6.9
- depd: 2.0.0
- encodeurl: 2.0.0
- escape-html: 1.0.3
- etag: 1.8.1
- finalhandler: 1.3.1
- fresh: 0.5.2
- http-errors: 2.0.0
- merge-descriptors: 1.0.3
- methods: 1.1.2
- on-finished: 2.4.1
- parseurl: 1.3.3
- path-to-regexp: 0.1.12
- proxy-addr: 2.0.7
- qs: 6.13.0
- range-parser: 1.2.1
- safe-buffer: 5.2.1
- send: 0.19.0
- serve-static: 1.16.2
- 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
-
- fast-deep-equal@3.1.3: {}
-
- fast-glob@3.3.3:
- 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.8
-
- fast-uri@3.1.0: {}
-
- fastq@1.19.1:
- dependencies:
- reusify: 1.1.0
-
- faye-websocket@0.11.4:
- dependencies:
- websocket-driver: 0.7.4
-
- fdir@6.5.0(picomatch@4.0.2):
- optionalDependencies:
- picomatch: 4.0.2
-
- fdir@6.5.0(picomatch@4.0.3):
- optionalDependencies:
- picomatch: 4.0.3
-
- fill-range@7.1.1:
- dependencies:
- to-regex-range: 5.0.1
-
- finalhandler@1.3.1:
- dependencies:
- debug: 2.6.9
- encodeurl: 2.0.0
- 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
-
- find-cache-dir@4.0.0:
- dependencies:
- common-path-prefix: 3.0.0
- pkg-dir: 7.0.0
-
- find-up@6.3.0:
- dependencies:
- locate-path: 7.2.0
- path-exists: 5.0.0
-
- flat@5.0.2: {}
-
- follow-redirects@1.15.11(debug@4.4.3):
- optionalDependencies:
- debug: 4.4.3
-
- foreground-child@3.3.1:
- dependencies:
- cross-spawn: 7.0.6
- signal-exit: 4.1.0
-
- forwarded@0.2.0: {}
-
- fraction.js@4.3.7: {}
-
- fraction.js@5.3.4: {}
-
- fresh@0.5.2: {}
-
- fs-minipass@2.1.0:
- dependencies:
- minipass: 3.3.6
-
- fs-minipass@3.0.3:
- dependencies:
- minipass: 7.1.2
-
- fsevents@2.3.3:
- optional: true
-
- function-bind@1.1.2: {}
-
- gensync@1.0.0-beta.2: {}
-
- get-caller-file@2.0.5: {}
-
- get-east-asian-width@1.4.0: {}
-
- get-intrinsic@1.3.0:
- dependencies:
- call-bind-apply-helpers: 1.0.2
- es-define-property: 1.0.1
- es-errors: 1.3.0
- es-object-atoms: 1.1.1
- function-bind: 1.1.2
- get-proto: 1.0.1
- gopd: 1.2.0
- has-symbols: 1.1.0
- hasown: 2.0.2
- math-intrinsics: 1.1.0
-
- get-proto@1.0.1:
- dependencies:
- dunder-proto: 1.0.1
- es-object-atoms: 1.1.1
-
- glob-parent@5.1.2:
- dependencies:
- is-glob: 4.0.3
-
- glob-parent@6.0.2:
- dependencies:
- is-glob: 4.0.3
-
- glob-to-regex.js@1.2.0(tslib@2.8.1):
- dependencies:
- tslib: 2.8.1
-
- glob-to-regexp@0.4.1: {}
-
- glob@10.5.0:
- dependencies:
- foreground-child: 3.3.1
- jackspeak: 3.4.3
- minimatch: 9.0.5
- minipass: 7.1.2
- package-json-from-dist: 1.0.1
- path-scurry: 1.11.1
-
- globby@14.1.0:
- dependencies:
- '@sindresorhus/merge-streams': 2.3.0
- fast-glob: 3.3.3
- ignore: 7.0.5
- path-type: 6.0.0
- slash: 5.1.0
- unicorn-magic: 0.3.0
-
- gopd@1.2.0: {}
-
- graceful-fs@4.2.11: {}
-
- handle-thing@2.0.1: {}
-
- has-flag@4.0.0: {}
-
- has-symbols@1.1.0: {}
-
- hasown@2.0.2:
- dependencies:
- function-bind: 1.1.2
-
- hosted-git-info@8.1.0:
- dependencies:
- lru-cache: 10.4.3
-
- hpack.js@2.1.6:
- dependencies:
- inherits: 2.0.4
- obuf: 1.1.2
- readable-stream: 2.3.8
- wbuf: 1.7.3
-
- htmlparser2@10.0.0:
- dependencies:
- domelementtype: 2.3.0
- domhandler: 5.0.3
- domutils: 3.2.2
- entities: 6.0.1
-
- http-cache-semantics@4.2.0: {}
-
- http-deceiver@1.2.7: {}
-
- http-errors@1.6.3:
- dependencies:
- depd: 1.1.2
- inherits: 2.0.3
- setprototypeof: 1.1.0
- statuses: 1.5.0
-
- http-errors@2.0.0:
- dependencies:
- depd: 2.0.0
- inherits: 2.0.4
- setprototypeof: 1.2.0
- statuses: 2.0.1
- toidentifier: 1.0.1
-
- http-parser-js@0.5.10: {}
-
- http-proxy-agent@7.0.2:
- dependencies:
- agent-base: 7.1.4
- debug: 4.4.3
- transitivePeerDependencies:
- - supports-color
-
- http-proxy-middleware@2.0.9(@types/express@4.17.25):
- dependencies:
- '@types/http-proxy': 1.17.17
- http-proxy: 1.18.1(debug@4.4.3)
- is-glob: 4.0.3
- is-plain-obj: 3.0.0
- micromatch: 4.0.8
- optionalDependencies:
- '@types/express': 4.17.25
- transitivePeerDependencies:
- - debug
-
- http-proxy-middleware@3.0.5:
- dependencies:
- '@types/http-proxy': 1.17.17
- debug: 4.4.3
- http-proxy: 1.18.1(debug@4.4.3)
- is-glob: 4.0.3
- is-plain-object: 5.0.0
- micromatch: 4.0.8
- transitivePeerDependencies:
- - supports-color
-
- http-proxy@1.18.1(debug@4.4.3):
- dependencies:
- eventemitter3: 4.0.7
- follow-redirects: 1.15.11(debug@4.4.3)
- requires-port: 1.0.0
- transitivePeerDependencies:
- - debug
-
- https-proxy-agent@7.0.6:
- dependencies:
- agent-base: 7.1.4
- debug: 4.4.3
- transitivePeerDependencies:
- - supports-color
-
- hyperdyperid@1.2.0: {}
-
- iconv-lite@0.4.24:
- dependencies:
- safer-buffer: 2.1.2
-
- iconv-lite@0.6.3:
- dependencies:
- safer-buffer: 2.1.2
-
- iconv-lite@0.7.0:
- dependencies:
- safer-buffer: 2.1.2
-
- icss-utils@5.1.0(postcss@8.5.6):
- dependencies:
- postcss: 8.5.6
-
- ieee754@1.2.1: {}
-
- ignore-walk@7.0.0:
- dependencies:
- minimatch: 9.0.5
-
- ignore@7.0.5: {}
-
- image-size@0.5.5:
- optional: true
-
- immutable@5.1.4: {}
-
- import-fresh@3.3.1:
- dependencies:
- parent-module: 1.0.1
- resolve-from: 4.0.0
-
- imurmurhash@0.1.4: {}
-
- inherits@2.0.3: {}
-
- inherits@2.0.4: {}
-
- ini@5.0.0: {}
-
- ip-address@10.1.0: {}
-
- ipaddr.js@1.9.1: {}
-
- ipaddr.js@2.2.0: {}
-
- is-arrayish@0.2.1: {}
-
- is-binary-path@2.1.0:
- dependencies:
- binary-extensions: 2.3.0
-
- is-core-module@2.16.1:
- dependencies:
- hasown: 2.0.2
-
- is-docker@3.0.0: {}
-
- is-extglob@2.1.1: {}
-
- is-fullwidth-code-point@3.0.0: {}
-
- is-fullwidth-code-point@4.0.0: {}
-
- is-fullwidth-code-point@5.1.0:
- dependencies:
- get-east-asian-width: 1.4.0
-
- is-glob@4.0.3:
- dependencies:
- is-extglob: 2.1.1
-
- is-inside-container@1.0.0:
- dependencies:
- is-docker: 3.0.0
-
- is-interactive@1.0.0: {}
-
- is-network-error@1.3.0: {}
-
- is-number@7.0.0: {}
-
- is-plain-obj@3.0.0: {}
-
- is-plain-object@2.0.4:
- dependencies:
- isobject: 3.0.1
-
- is-plain-object@5.0.0: {}
-
- is-unicode-supported@0.1.0: {}
-
- is-what@3.14.1: {}
-
- is-wsl@3.1.0:
- dependencies:
- is-inside-container: 1.0.0
-
- isarray@1.0.0: {}
-
- isexe@2.0.0: {}
-
- isexe@3.1.1: {}
-
- isobject@3.0.1: {}
-
- istanbul-lib-coverage@3.2.2: {}
-
- istanbul-lib-instrument@6.0.3:
- dependencies:
- '@babel/core': 7.26.10
- '@babel/parser': 7.28.5
- '@istanbuljs/schema': 0.1.3
- istanbul-lib-coverage: 3.2.2
- semver: 7.7.1
- transitivePeerDependencies:
- - supports-color
-
- jackspeak@3.4.3:
- dependencies:
- '@isaacs/cliui': 8.0.2
- optionalDependencies:
- '@pkgjs/parseargs': 0.11.0
-
- jest-worker@27.5.1:
- dependencies:
- '@types/node': 20.19.25
- merge-stream: 2.0.0
- supports-color: 8.1.1
-
- jiti@1.21.7: {}
-
- js-tokens@4.0.0: {}
-
- js-yaml@4.1.1:
- dependencies:
- argparse: 2.0.1
-
- jsesc@3.1.0: {}
-
- json-parse-even-better-errors@2.3.1: {}
-
- json-parse-even-better-errors@4.0.0: {}
-
- json-schema-traverse@1.0.0: {}
-
- json5@2.2.3: {}
-
- jsonc-parser@3.3.1: {}
-
- jsonparse@1.3.1: {}
-
- karma-source-map-support@1.4.0:
- dependencies:
- source-map-support: 0.5.21
-
- kind-of@6.0.3: {}
-
- launch-editor@2.12.0:
- dependencies:
- picocolors: 1.1.1
- shell-quote: 1.8.3
-
- less-loader@12.2.0(less@4.2.2)(webpack@5.98.0(esbuild@0.25.4)):
- dependencies:
- less: 4.2.2
- optionalDependencies:
- webpack: 5.98.0(esbuild@0.25.4)
-
- less@4.2.2:
- dependencies:
- copy-anything: 2.0.6
- parse-node-version: 1.0.1
- tslib: 2.8.1
- optionalDependencies:
- errno: 0.1.8
- graceful-fs: 4.2.11
- image-size: 0.5.5
- make-dir: 2.1.0
- mime: 1.6.0
- needle: 3.3.1
- source-map: 0.6.1
-
- license-webpack-plugin@4.0.2(webpack@5.98.0(esbuild@0.25.4)):
- dependencies:
- webpack-sources: 3.3.3
- optionalDependencies:
- webpack: 5.98.0(esbuild@0.25.4)
-
- lilconfig@3.1.3: {}
-
- lines-and-columns@1.2.4: {}
-
- listr2@8.2.5:
- 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.2
-
- lmdb@3.2.6:
- dependencies:
- msgpackr: 1.11.5
- node-addon-api: 6.1.0
- node-gyp-build-optional-packages: 5.2.2
- ordered-binary: 1.6.0
- weak-lru-cache: 1.2.2
- optionalDependencies:
- '@lmdb/lmdb-darwin-arm64': 3.2.6
- '@lmdb/lmdb-darwin-x64': 3.2.6
- '@lmdb/lmdb-linux-arm': 3.2.6
- '@lmdb/lmdb-linux-arm64': 3.2.6
- '@lmdb/lmdb-linux-x64': 3.2.6
- '@lmdb/lmdb-win32-x64': 3.2.6
- optional: true
-
- loader-runner@4.3.1: {}
-
- loader-utils@2.0.4:
- dependencies:
- big.js: 5.2.2
- emojis-list: 3.0.0
- json5: 2.2.3
-
- loader-utils@3.3.1: {}
-
- locate-path@7.2.0:
- dependencies:
- p-locate: 6.0.0
-
- lodash.debounce@4.0.8: {}
-
- log-symbols@4.1.0:
- dependencies:
- chalk: 4.1.2
- is-unicode-supported: 0.1.0
-
- log-update@6.1.0:
- dependencies:
- ansi-escapes: 7.2.0
- cli-cursor: 5.0.0
- slice-ansi: 7.1.2
- strip-ansi: 7.1.2
- wrap-ansi: 9.0.2
-
- lru-cache@10.4.3: {}
-
- lru-cache@5.1.1:
- dependencies:
- yallist: 3.1.1
-
- magic-string@0.30.17:
- dependencies:
- '@jridgewell/sourcemap-codec': 1.5.5
-
- make-dir@2.1.0:
- dependencies:
- pify: 4.0.1
- semver: 5.7.2
- optional: true
-
- make-fetch-happen@14.0.3:
- dependencies:
- '@npmcli/agent': 3.0.0
- cacache: 19.0.1
- http-cache-semantics: 4.2.0
- minipass: 7.1.2
- minipass-fetch: 4.0.1
- minipass-flush: 1.0.5
- minipass-pipeline: 1.2.4
- negotiator: 1.0.0
- proc-log: 5.0.0
- promise-retry: 2.0.1
- ssri: 12.0.0
- transitivePeerDependencies:
- - supports-color
-
- math-intrinsics@1.1.0: {}
-
- media-typer@0.3.0: {}
-
- memfs@4.51.0:
- dependencies:
- '@jsonjoy.com/json-pack': 1.21.0(tslib@2.8.1)
- '@jsonjoy.com/util': 1.9.0(tslib@2.8.1)
- glob-to-regex.js: 1.2.0(tslib@2.8.1)
- thingies: 2.5.0(tslib@2.8.1)
- tree-dump: 1.1.0(tslib@2.8.1)
- tslib: 2.8.1
-
- merge-descriptors@1.0.3: {}
-
- merge-stream@2.0.0: {}
-
- merge2@1.4.1: {}
-
- methods@1.1.2: {}
-
- micromatch@4.0.8:
- dependencies:
- braces: 3.0.3
- picomatch: 2.3.1
-
- mime-db@1.52.0: {}
-
- mime-db@1.54.0: {}
-
- mime-types@2.1.35:
- dependencies:
- mime-db: 1.52.0
-
- mime@1.6.0: {}
-
- mimic-fn@2.1.0: {}
-
- mimic-function@5.0.1: {}
-
- mini-css-extract-plugin@2.9.2(webpack@5.98.0(esbuild@0.25.4)):
- dependencies:
- schema-utils: 4.3.3
- tapable: 2.3.0
- webpack: 5.98.0(esbuild@0.25.4)
-
- minimalistic-assert@1.0.1: {}
-
- minimatch@9.0.5:
- dependencies:
- brace-expansion: 2.0.2
-
- minipass-collect@2.0.1:
- dependencies:
- minipass: 7.1.2
-
- minipass-fetch@4.0.1:
- dependencies:
- minipass: 7.1.2
- minipass-sized: 1.0.3
- minizlib: 3.1.0
- optionalDependencies:
- encoding: 0.1.13
-
- minipass-flush@1.0.5:
- dependencies:
- minipass: 3.3.6
-
- minipass-pipeline@1.2.4:
- dependencies:
- minipass: 3.3.6
-
- minipass-sized@1.0.3:
- dependencies:
- minipass: 3.3.6
-
- minipass@3.3.6:
- dependencies:
- yallist: 4.0.0
-
- minipass@5.0.0: {}
-
- minipass@7.1.2: {}
-
- minizlib@2.1.2:
- dependencies:
- minipass: 3.3.6
- yallist: 4.0.0
-
- minizlib@3.1.0:
- dependencies:
- minipass: 7.1.2
-
- mkdirp@1.0.4: {}
-
- mrmime@2.0.1: {}
-
- ms@2.0.0: {}
-
- ms@2.1.3: {}
-
- msgpackr-extract@3.0.3:
- dependencies:
- node-gyp-build-optional-packages: 5.2.2
- optionalDependencies:
- '@msgpackr-extract/msgpackr-extract-darwin-arm64': 3.0.3
- '@msgpackr-extract/msgpackr-extract-darwin-x64': 3.0.3
- '@msgpackr-extract/msgpackr-extract-linux-arm': 3.0.3
- '@msgpackr-extract/msgpackr-extract-linux-arm64': 3.0.3
- '@msgpackr-extract/msgpackr-extract-linux-x64': 3.0.3
- '@msgpackr-extract/msgpackr-extract-win32-x64': 3.0.3
- optional: true
-
- msgpackr@1.11.5:
- optionalDependencies:
- msgpackr-extract: 3.0.3
- optional: true
-
- multicast-dns@7.2.5:
- dependencies:
- dns-packet: 5.6.1
- thunky: 1.1.0
-
- mute-stream@1.0.0: {}
-
- mute-stream@2.0.0: {}
-
- mz@2.7.0:
- dependencies:
- any-promise: 1.3.0
- object-assign: 4.1.1
- thenify-all: 1.6.0
-
- nanoid@3.3.11: {}
-
- needle@3.3.1:
- dependencies:
- iconv-lite: 0.6.3
- sax: 1.4.3
- optional: true
-
- negotiator@0.6.3: {}
-
- negotiator@0.6.4: {}
-
- negotiator@1.0.0: {}
-
- neo-async@2.6.2: {}
-
- node-addon-api@6.1.0:
- optional: true
-
- node-addon-api@7.1.1:
- optional: true
-
- node-forge@1.3.2: {}
-
- node-gyp-build-optional-packages@5.2.2:
- dependencies:
- detect-libc: 2.1.2
- optional: true
-
- node-gyp@11.5.0:
- dependencies:
- env-paths: 2.2.1
- exponential-backoff: 3.1.3
- graceful-fs: 4.2.11
- make-fetch-happen: 14.0.3
- nopt: 8.1.0
- proc-log: 5.0.0
- semver: 7.7.1
- tar: 7.5.2
- tinyglobby: 0.2.15
- which: 5.0.0
- transitivePeerDependencies:
- - supports-color
-
- node-releases@2.0.27: {}
-
- nopt@8.1.0:
- dependencies:
- abbrev: 3.0.1
-
- normalize-path@3.0.0: {}
-
- normalize-range@0.1.2: {}
-
- npm-bundled@4.0.0:
- dependencies:
- npm-normalize-package-bin: 4.0.0
-
- npm-install-checks@7.1.2:
- dependencies:
- semver: 7.7.1
-
- npm-normalize-package-bin@4.0.0: {}
-
- npm-package-arg@12.0.2:
- dependencies:
- hosted-git-info: 8.1.0
- proc-log: 5.0.0
- semver: 7.7.1
- validate-npm-package-name: 6.0.2
-
- npm-packlist@9.0.0:
- dependencies:
- ignore-walk: 7.0.0
-
- npm-pick-manifest@10.0.0:
- dependencies:
- npm-install-checks: 7.1.2
- npm-normalize-package-bin: 4.0.0
- npm-package-arg: 12.0.2
- semver: 7.7.1
-
- npm-registry-fetch@18.0.2:
- dependencies:
- '@npmcli/redact': 3.2.2
- jsonparse: 1.3.1
- make-fetch-happen: 14.0.3
- minipass: 7.1.2
- minipass-fetch: 4.0.1
- minizlib: 3.1.0
- npm-package-arg: 12.0.2
- proc-log: 5.0.0
- transitivePeerDependencies:
- - supports-color
-
- nth-check@2.1.1:
- dependencies:
- boolbase: 1.0.0
-
- object-assign@4.1.1: {}
-
- object-hash@3.0.0: {}
-
- object-inspect@1.13.4: {}
-
- obuf@1.1.2: {}
-
- on-finished@2.4.1:
- dependencies:
- ee-first: 1.1.1
-
- on-headers@1.1.0: {}
-
- onetime@5.1.2:
- dependencies:
- mimic-fn: 2.1.0
-
- onetime@7.0.0:
- dependencies:
- mimic-function: 5.0.1
-
- open@10.1.0:
- dependencies:
- default-browser: 5.4.0
- define-lazy-prop: 3.0.0
- is-inside-container: 1.0.0
- is-wsl: 3.1.0
-
- ora@5.4.1:
- dependencies:
- bl: 4.1.0
- chalk: 4.1.2
- cli-cursor: 3.1.0
- cli-spinners: 2.9.2
- is-interactive: 1.0.0
- is-unicode-supported: 0.1.0
- log-symbols: 4.1.0
- strip-ansi: 6.0.1
- wcwidth: 1.0.1
-
- ordered-binary@1.6.0:
- optional: true
-
- p-limit@4.0.0:
- dependencies:
- yocto-queue: 1.2.2
-
- p-locate@6.0.0:
- dependencies:
- p-limit: 4.0.0
-
- p-map@7.0.4: {}
-
- p-retry@6.2.1:
- dependencies:
- '@types/retry': 0.12.2
- is-network-error: 1.3.0
- retry: 0.13.1
-
- package-json-from-dist@1.0.1: {}
-
- pacote@20.0.0:
- dependencies:
- '@npmcli/git': 6.0.3
- '@npmcli/installed-package-contents': 3.0.0
- '@npmcli/package-json': 6.2.0
- '@npmcli/promise-spawn': 8.0.3
- '@npmcli/run-script': 9.1.0
- cacache: 19.0.1
- fs-minipass: 3.0.3
- minipass: 7.1.2
- npm-package-arg: 12.0.2
- npm-packlist: 9.0.0
- npm-pick-manifest: 10.0.0
- npm-registry-fetch: 18.0.2
- proc-log: 5.0.0
- promise-retry: 2.0.1
- sigstore: 3.1.0
- ssri: 12.0.0
- tar: 6.2.1
- transitivePeerDependencies:
- - supports-color
-
- parent-module@1.0.1:
- dependencies:
- callsites: 3.1.0
-
- parse-json@5.2.0:
- dependencies:
- '@babel/code-frame': 7.27.1
- error-ex: 1.3.4
- json-parse-even-better-errors: 2.3.1
- lines-and-columns: 1.2.4
-
- parse-node-version@1.0.1: {}
-
- parse5-html-rewriting-stream@7.0.0:
- dependencies:
- entities: 4.5.0
- parse5: 7.3.0
- parse5-sax-parser: 7.0.0
-
- parse5-sax-parser@7.0.0:
- dependencies:
- parse5: 7.3.0
-
- parse5@7.3.0:
- dependencies:
- entities: 6.0.1
-
- parseurl@1.3.3: {}
-
- path-exists@5.0.0: {}
-
- path-key@3.1.1: {}
-
- path-parse@1.0.7: {}
-
- path-scurry@1.11.1:
- dependencies:
- lru-cache: 10.4.3
- minipass: 7.1.2
-
- path-to-regexp@0.1.12: {}
-
- path-type@6.0.0: {}
-
- picocolors@1.1.1: {}
-
- picomatch@2.3.1: {}
-
- picomatch@4.0.2: {}
-
- picomatch@4.0.3: {}
-
- pify@2.3.0: {}
-
- pify@4.0.1:
- optional: true
-
- pirates@4.0.7: {}
-
- piscina@4.8.0:
- optionalDependencies:
- '@napi-rs/nice': 1.1.1
-
- pkg-dir@7.0.0:
- dependencies:
- find-up: 6.3.0
-
- postcss-import@15.1.0(postcss@8.5.6):
- dependencies:
- postcss: 8.5.6
- postcss-value-parser: 4.2.0
- read-cache: 1.0.0
- resolve: 1.22.11
-
- postcss-js@4.1.0(postcss@8.5.6):
- dependencies:
- camelcase-css: 2.0.1
- postcss: 8.5.6
-
- postcss-load-config@6.0.1(jiti@1.21.7)(postcss@8.5.6):
- dependencies:
- lilconfig: 3.1.3
- optionalDependencies:
- jiti: 1.21.7
- postcss: 8.5.6
-
- postcss-loader@8.1.1(postcss@8.5.2)(typescript@5.6.3)(webpack@5.98.0(esbuild@0.25.4)):
- dependencies:
- cosmiconfig: 9.0.0(typescript@5.6.3)
- jiti: 1.21.7
- postcss: 8.5.2
- semver: 7.7.1
- optionalDependencies:
- webpack: 5.98.0(esbuild@0.25.4)
- transitivePeerDependencies:
- - typescript
-
- postcss-media-query-parser@0.2.3: {}
-
- postcss-modules-extract-imports@3.1.0(postcss@8.5.6):
- dependencies:
- postcss: 8.5.6
-
- postcss-modules-local-by-default@4.2.0(postcss@8.5.6):
- dependencies:
- icss-utils: 5.1.0(postcss@8.5.6)
- postcss: 8.5.6
- postcss-selector-parser: 7.1.1
- postcss-value-parser: 4.2.0
-
- postcss-modules-scope@3.2.1(postcss@8.5.6):
- dependencies:
- postcss: 8.5.6
- postcss-selector-parser: 7.1.1
-
- postcss-modules-values@4.0.0(postcss@8.5.6):
- dependencies:
- icss-utils: 5.1.0(postcss@8.5.6)
- postcss: 8.5.6
-
- postcss-nested@6.2.0(postcss@8.5.6):
- dependencies:
- postcss: 8.5.6
- postcss-selector-parser: 6.1.2
-
- postcss-selector-parser@6.1.2:
- dependencies:
- cssesc: 3.0.0
- util-deprecate: 1.0.2
-
- postcss-selector-parser@7.1.1:
- dependencies:
- cssesc: 3.0.0
- util-deprecate: 1.0.2
-
- postcss-value-parser@4.2.0: {}
-
- postcss@8.5.2:
- dependencies:
- nanoid: 3.3.11
- picocolors: 1.1.1
- source-map-js: 1.2.1
-
- postcss@8.5.6:
- dependencies:
- nanoid: 3.3.11
- picocolors: 1.1.1
- source-map-js: 1.2.1
-
- proc-log@5.0.0: {}
-
- process-nextick-args@2.0.1: {}
-
- promise-retry@2.0.1:
- dependencies:
- err-code: 2.0.3
- retry: 0.12.0
-
- proxy-addr@2.0.7:
- dependencies:
- forwarded: 0.2.0
- ipaddr.js: 1.9.1
-
- prr@1.0.1:
- optional: true
-
- qs@6.13.0:
- dependencies:
- side-channel: 1.1.0
-
- queue-microtask@1.2.3: {}
-
- randombytes@2.1.0:
- dependencies:
- safe-buffer: 5.2.1
-
- range-parser@1.2.1: {}
-
- raw-body@2.5.2:
- dependencies:
- bytes: 3.1.2
- http-errors: 2.0.0
- iconv-lite: 0.4.24
- unpipe: 1.0.0
-
- read-cache@1.0.0:
- dependencies:
- pify: 2.3.0
-
- readable-stream@2.3.8:
- dependencies:
- core-util-is: 1.0.3
- inherits: 2.0.4
- isarray: 1.0.0
- process-nextick-args: 2.0.1
- safe-buffer: 5.1.2
- string_decoder: 1.1.1
- util-deprecate: 1.0.2
-
- readable-stream@3.6.2:
- dependencies:
- inherits: 2.0.4
- string_decoder: 1.3.0
- util-deprecate: 1.0.2
-
- readdirp@3.6.0:
- dependencies:
- picomatch: 2.3.1
-
- readdirp@4.1.2: {}
-
- reflect-metadata@0.2.2: {}
-
- regenerate-unicode-properties@10.2.2:
- dependencies:
- regenerate: 1.4.2
-
- regenerate@1.4.2: {}
-
- regenerator-runtime@0.14.1: {}
-
- regex-parser@2.3.1: {}
-
- regexpu-core@6.4.0:
- dependencies:
- regenerate: 1.4.2
- regenerate-unicode-properties: 10.2.2
- regjsgen: 0.8.0
- regjsparser: 0.13.0
- unicode-match-property-ecmascript: 2.0.0
- unicode-match-property-value-ecmascript: 2.2.1
-
- regjsgen@0.8.0: {}
-
- regjsparser@0.13.0:
- dependencies:
- jsesc: 3.1.0
-
- require-directory@2.1.1: {}
-
- require-from-string@2.0.2: {}
-
- requires-port@1.0.0: {}
-
- resolve-from@4.0.0: {}
-
- resolve-url-loader@5.0.0:
- dependencies:
- adjust-sourcemap-loader: 4.0.0
- convert-source-map: 1.9.0
- loader-utils: 2.0.4
- postcss: 8.5.6
- source-map: 0.6.1
-
- resolve@1.22.10:
- dependencies:
- is-core-module: 2.16.1
- path-parse: 1.0.7
- supports-preserve-symlinks-flag: 1.0.0
-
- resolve@1.22.11:
- dependencies:
- is-core-module: 2.16.1
- path-parse: 1.0.7
- supports-preserve-symlinks-flag: 1.0.0
-
- restore-cursor@3.1.0:
- dependencies:
- onetime: 5.1.2
- signal-exit: 3.0.7
-
- restore-cursor@5.1.0:
- dependencies:
- onetime: 7.0.0
- signal-exit: 4.1.0
-
- retry@0.12.0: {}
-
- retry@0.13.1: {}
-
- reusify@1.1.0: {}
-
- rfdc@1.4.1: {}
-
- rollup@4.34.8:
- dependencies:
- '@types/estree': 1.0.6
- optionalDependencies:
- '@rollup/rollup-android-arm-eabi': 4.34.8
- '@rollup/rollup-android-arm64': 4.34.8
- '@rollup/rollup-darwin-arm64': 4.34.8
- '@rollup/rollup-darwin-x64': 4.34.8
- '@rollup/rollup-freebsd-arm64': 4.34.8
- '@rollup/rollup-freebsd-x64': 4.34.8
- '@rollup/rollup-linux-arm-gnueabihf': 4.34.8
- '@rollup/rollup-linux-arm-musleabihf': 4.34.8
- '@rollup/rollup-linux-arm64-gnu': 4.34.8
- '@rollup/rollup-linux-arm64-musl': 4.34.8
- '@rollup/rollup-linux-loongarch64-gnu': 4.34.8
- '@rollup/rollup-linux-powerpc64le-gnu': 4.34.8
- '@rollup/rollup-linux-riscv64-gnu': 4.34.8
- '@rollup/rollup-linux-s390x-gnu': 4.34.8
- '@rollup/rollup-linux-x64-gnu': 4.34.8
- '@rollup/rollup-linux-x64-musl': 4.34.8
- '@rollup/rollup-win32-arm64-msvc': 4.34.8
- '@rollup/rollup-win32-ia32-msvc': 4.34.8
- '@rollup/rollup-win32-x64-msvc': 4.34.8
- fsevents: 2.3.3
-
- rollup@4.53.3:
- dependencies:
- '@types/estree': 1.0.8
- optionalDependencies:
- '@rollup/rollup-android-arm-eabi': 4.53.3
- '@rollup/rollup-android-arm64': 4.53.3
- '@rollup/rollup-darwin-arm64': 4.53.3
- '@rollup/rollup-darwin-x64': 4.53.3
- '@rollup/rollup-freebsd-arm64': 4.53.3
- '@rollup/rollup-freebsd-x64': 4.53.3
- '@rollup/rollup-linux-arm-gnueabihf': 4.53.3
- '@rollup/rollup-linux-arm-musleabihf': 4.53.3
- '@rollup/rollup-linux-arm64-gnu': 4.53.3
- '@rollup/rollup-linux-arm64-musl': 4.53.3
- '@rollup/rollup-linux-loong64-gnu': 4.53.3
- '@rollup/rollup-linux-ppc64-gnu': 4.53.3
- '@rollup/rollup-linux-riscv64-gnu': 4.53.3
- '@rollup/rollup-linux-riscv64-musl': 4.53.3
- '@rollup/rollup-linux-s390x-gnu': 4.53.3
- '@rollup/rollup-linux-x64-gnu': 4.53.3
- '@rollup/rollup-linux-x64-musl': 4.53.3
- '@rollup/rollup-openharmony-arm64': 4.53.3
- '@rollup/rollup-win32-arm64-msvc': 4.53.3
- '@rollup/rollup-win32-ia32-msvc': 4.53.3
- '@rollup/rollup-win32-x64-gnu': 4.53.3
- '@rollup/rollup-win32-x64-msvc': 4.53.3
- fsevents: 2.3.3
-
- run-applescript@7.1.0: {}
-
- run-parallel@1.2.0:
- dependencies:
- queue-microtask: 1.2.3
-
- rxjs@7.8.1:
- dependencies:
- tslib: 2.8.1
-
- rxjs@7.8.2:
- dependencies:
- tslib: 2.8.1
-
- safe-buffer@5.1.2: {}
-
- safe-buffer@5.2.1: {}
-
- safer-buffer@2.1.2: {}
-
- sass-loader@16.0.5(sass@1.85.0)(webpack@5.98.0(esbuild@0.25.4)):
- dependencies:
- neo-async: 2.6.2
- optionalDependencies:
- sass: 1.85.0
- webpack: 5.98.0(esbuild@0.25.4)
-
- sass@1.85.0:
- dependencies:
- chokidar: 4.0.3
- immutable: 5.1.4
- source-map-js: 1.2.1
- optionalDependencies:
- '@parcel/watcher': 2.5.1
-
- sax@1.4.3:
- optional: true
-
- schema-utils@4.3.3:
- dependencies:
- '@types/json-schema': 7.0.15
- ajv: 8.17.1
- ajv-formats: 2.1.1(ajv@8.17.1)
- ajv-keywords: 5.1.0(ajv@8.17.1)
-
- select-hose@2.0.0: {}
-
- selfsigned@2.4.1:
- dependencies:
- '@types/node-forge': 1.3.14
- node-forge: 1.3.2
-
- semver@5.7.2:
- optional: true
-
- semver@6.3.1: {}
-
- semver@7.7.1: {}
-
- semver@7.7.3: {}
-
- send@0.19.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
-
- serialize-javascript@6.0.2:
- dependencies:
- randombytes: 2.1.0
-
- serve-index@1.9.1:
- dependencies:
- accepts: 1.3.8
- batch: 0.6.1
- debug: 2.6.9
- escape-html: 1.0.3
- http-errors: 1.6.3
- mime-types: 2.1.35
- parseurl: 1.3.3
- transitivePeerDependencies:
- - supports-color
-
- serve-static@1.16.2:
- dependencies:
- encodeurl: 2.0.0
- escape-html: 1.0.3
- parseurl: 1.3.3
- send: 0.19.0
- transitivePeerDependencies:
- - supports-color
-
- setprototypeof@1.1.0: {}
-
- setprototypeof@1.2.0: {}
-
- shallow-clone@3.0.1:
- dependencies:
- kind-of: 6.0.3
-
- shebang-command@2.0.0:
- dependencies:
- shebang-regex: 3.0.0
-
- shebang-regex@3.0.0: {}
-
- shell-quote@1.8.3: {}
-
- side-channel-list@1.0.0:
- dependencies:
- es-errors: 1.3.0
- object-inspect: 1.13.4
-
- side-channel-map@1.0.1:
- dependencies:
- call-bound: 1.0.4
- es-errors: 1.3.0
- get-intrinsic: 1.3.0
- object-inspect: 1.13.4
-
- side-channel-weakmap@1.0.2:
- dependencies:
- call-bound: 1.0.4
- es-errors: 1.3.0
- get-intrinsic: 1.3.0
- object-inspect: 1.13.4
- side-channel-map: 1.0.1
-
- side-channel@1.1.0:
- dependencies:
- es-errors: 1.3.0
- object-inspect: 1.13.4
- side-channel-list: 1.0.0
- side-channel-map: 1.0.1
- side-channel-weakmap: 1.0.2
-
- signal-exit@3.0.7: {}
-
- signal-exit@4.1.0: {}
-
- sigstore@3.1.0:
- dependencies:
- '@sigstore/bundle': 3.1.0
- '@sigstore/core': 2.0.0
- '@sigstore/protobuf-specs': 0.4.3
- '@sigstore/sign': 3.1.0
- '@sigstore/tuf': 3.1.1
- '@sigstore/verify': 2.1.1
- transitivePeerDependencies:
- - supports-color
-
- slash@5.1.0: {}
-
- slice-ansi@5.0.0:
- dependencies:
- ansi-styles: 6.2.3
- is-fullwidth-code-point: 4.0.0
-
- slice-ansi@7.1.2:
- dependencies:
- ansi-styles: 6.2.3
- is-fullwidth-code-point: 5.1.0
-
- smart-buffer@4.2.0: {}
-
- sockjs@0.3.24:
- dependencies:
- faye-websocket: 0.11.4
- uuid: 8.3.2
- websocket-driver: 0.7.4
-
- socks-proxy-agent@8.0.5:
- dependencies:
- agent-base: 7.1.4
- debug: 4.4.3
- socks: 2.8.7
- transitivePeerDependencies:
- - supports-color
-
- socks@2.8.7:
- dependencies:
- ip-address: 10.1.0
- smart-buffer: 4.2.0
-
- source-map-js@1.2.1: {}
-
- source-map-loader@5.0.0(webpack@5.98.0(esbuild@0.25.4)):
- dependencies:
- iconv-lite: 0.6.3
- source-map-js: 1.2.1
- webpack: 5.98.0(esbuild@0.25.4)
-
- source-map-support@0.5.21:
- dependencies:
- buffer-from: 1.1.2
- source-map: 0.6.1
-
- source-map@0.6.1: {}
-
- source-map@0.7.4: {}
-
- spdx-correct@3.2.0:
- dependencies:
- spdx-expression-parse: 3.0.1
- spdx-license-ids: 3.0.22
-
- spdx-exceptions@2.5.0: {}
-
- spdx-expression-parse@3.0.1:
- dependencies:
- spdx-exceptions: 2.5.0
- spdx-license-ids: 3.0.22
-
- spdx-license-ids@3.0.22: {}
-
- spdy-transport@3.0.0:
- dependencies:
- debug: 4.4.3
- detect-node: 2.1.0
- hpack.js: 2.1.6
- obuf: 1.1.2
- readable-stream: 3.6.2
- wbuf: 1.7.3
- transitivePeerDependencies:
- - supports-color
-
- spdy@4.0.2:
- dependencies:
- debug: 4.4.3
- handle-thing: 2.0.1
- http-deceiver: 1.2.7
- select-hose: 2.0.0
- spdy-transport: 3.0.0
- transitivePeerDependencies:
- - supports-color
-
- ssri@12.0.0:
- dependencies:
- minipass: 7.1.2
-
- statuses@1.5.0: {}
-
- statuses@2.0.1: {}
-
- string-width@4.2.3:
- dependencies:
- emoji-regex: 8.0.0
- is-fullwidth-code-point: 3.0.0
- strip-ansi: 6.0.1
-
- string-width@5.1.2:
- dependencies:
- eastasianwidth: 0.2.0
- emoji-regex: 9.2.2
- strip-ansi: 7.1.2
-
- string-width@7.2.0:
- dependencies:
- emoji-regex: 10.6.0
- get-east-asian-width: 1.4.0
- strip-ansi: 7.1.2
-
- string_decoder@1.1.1:
- dependencies:
- safe-buffer: 5.1.2
-
- string_decoder@1.3.0:
- dependencies:
- safe-buffer: 5.2.1
-
- strip-ansi@6.0.1:
- dependencies:
- ansi-regex: 5.0.1
-
- strip-ansi@7.1.2:
- dependencies:
- ansi-regex: 6.2.2
-
- sucrase@3.35.1:
- dependencies:
- '@jridgewell/gen-mapping': 0.3.13
- commander: 4.1.1
- lines-and-columns: 1.2.4
- mz: 2.7.0
- pirates: 4.0.7
- tinyglobby: 0.2.15
- ts-interface-checker: 0.1.13
-
- supports-color@7.2.0:
- dependencies:
- has-flag: 4.0.0
-
- supports-color@8.1.1:
- dependencies:
- has-flag: 4.0.0
-
- supports-preserve-symlinks-flag@1.0.0: {}
-
- symbol-observable@4.0.0: {}
-
- tailwindcss@3.4.18:
- dependencies:
- '@alloc/quick-lru': 5.2.0
- arg: 5.0.2
- chokidar: 3.6.0
- didyoumean: 1.2.2
- dlv: 1.1.3
- fast-glob: 3.3.3
- glob-parent: 6.0.2
- is-glob: 4.0.3
- jiti: 1.21.7
- lilconfig: 3.1.3
- micromatch: 4.0.8
- normalize-path: 3.0.0
- object-hash: 3.0.0
- picocolors: 1.1.1
- postcss: 8.5.6
- postcss-import: 15.1.0(postcss@8.5.6)
- postcss-js: 4.1.0(postcss@8.5.6)
- postcss-load-config: 6.0.1(jiti@1.21.7)(postcss@8.5.6)
- postcss-nested: 6.2.0(postcss@8.5.6)
- postcss-selector-parser: 6.1.2
- resolve: 1.22.11
- sucrase: 3.35.1
- transitivePeerDependencies:
- - tsx
- - yaml
-
- tapable@2.3.0: {}
-
- tar@6.2.1:
- dependencies:
- chownr: 2.0.0
- fs-minipass: 2.1.0
- minipass: 5.0.0
- minizlib: 2.1.2
- mkdirp: 1.0.4
- yallist: 4.0.0
-
- tar@7.5.2:
- dependencies:
- '@isaacs/fs-minipass': 4.0.1
- chownr: 3.0.0
- minipass: 7.1.2
- minizlib: 3.1.0
- yallist: 5.0.0
-
- terser-webpack-plugin@5.3.14(esbuild@0.25.4)(webpack@5.98.0):
- dependencies:
- '@jridgewell/trace-mapping': 0.3.31
- jest-worker: 27.5.1
- schema-utils: 4.3.3
- serialize-javascript: 6.0.2
- terser: 5.39.0
- webpack: 5.98.0(esbuild@0.25.4)
- optionalDependencies:
- esbuild: 0.25.4
-
- terser@5.39.0:
- dependencies:
- '@jridgewell/source-map': 0.3.11
- acorn: 8.15.0
- commander: 2.20.3
- source-map-support: 0.5.21
-
- thenify-all@1.6.0:
- dependencies:
- thenify: 3.3.1
-
- thenify@3.3.1:
- dependencies:
- any-promise: 1.3.0
-
- thingies@2.5.0(tslib@2.8.1):
- dependencies:
- tslib: 2.8.1
-
- thunky@1.1.0: {}
-
- tinyglobby@0.2.15:
- dependencies:
- fdir: 6.5.0(picomatch@4.0.3)
- picomatch: 4.0.3
-
- to-regex-range@5.0.1:
- dependencies:
- is-number: 7.0.0
-
- toidentifier@1.0.1: {}
-
- tree-dump@1.1.0(tslib@2.8.1):
- dependencies:
- tslib: 2.8.1
-
- tree-kill@1.2.2: {}
-
- ts-interface-checker@0.1.13: {}
-
- tslib@2.8.1: {}
-
- tuf-js@3.1.0:
- dependencies:
- '@tufjs/models': 3.0.1
- debug: 4.4.3
- make-fetch-happen: 14.0.3
- transitivePeerDependencies:
- - supports-color
-
- type-is@1.6.18:
- dependencies:
- media-typer: 0.3.0
- mime-types: 2.1.35
-
- typed-assert@1.0.9: {}
-
- typescript@5.6.3: {}
-
- undici-types@6.21.0: {}
-
- unicode-canonical-property-names-ecmascript@2.0.1: {}
-
- unicode-match-property-ecmascript@2.0.0:
- dependencies:
- unicode-canonical-property-names-ecmascript: 2.0.1
- unicode-property-aliases-ecmascript: 2.2.0
-
- unicode-match-property-value-ecmascript@2.2.1: {}
-
- unicode-property-aliases-ecmascript@2.2.0: {}
-
- unicorn-magic@0.3.0: {}
-
- unique-filename@4.0.0:
- dependencies:
- unique-slug: 5.0.0
-
- unique-slug@5.0.0:
- dependencies:
- imurmurhash: 0.1.4
-
- unpipe@1.0.0: {}
-
- update-browserslist-db@1.1.4(browserslist@4.28.0):
- dependencies:
- browserslist: 4.28.0
- escalade: 3.2.0
- picocolors: 1.1.1
-
- util-deprecate@1.0.2: {}
-
- utils-merge@1.0.1: {}
-
- uuid@8.3.2: {}
-
- validate-npm-package-license@3.0.4:
- dependencies:
- spdx-correct: 3.2.0
- spdx-expression-parse: 3.0.1
-
- validate-npm-package-name@6.0.2: {}
-
- vary@1.1.2: {}
-
- vite@6.4.1(@types/node@20.19.25)(jiti@1.21.7)(less@4.2.2)(sass@1.85.0)(terser@5.39.0):
- dependencies:
- esbuild: 0.25.4
- fdir: 6.5.0(picomatch@4.0.2)
- picomatch: 4.0.2
- postcss: 8.5.6
- rollup: 4.53.3
- tinyglobby: 0.2.15
- optionalDependencies:
- '@types/node': 20.19.25
- fsevents: 2.3.3
- jiti: 1.21.7
- less: 4.2.2
- sass: 1.85.0
- terser: 5.39.0
-
- watchpack@2.4.2:
- dependencies:
- glob-to-regexp: 0.4.1
- graceful-fs: 4.2.11
-
- watchpack@2.4.4:
- dependencies:
- glob-to-regexp: 0.4.1
- graceful-fs: 4.2.11
-
- wbuf@1.7.3:
- dependencies:
- minimalistic-assert: 1.0.1
-
- wcwidth@1.0.1:
- dependencies:
- defaults: 1.0.4
-
- weak-lru-cache@1.2.2:
- optional: true
-
- webpack-dev-middleware@7.4.2(webpack@5.98.0):
- dependencies:
- colorette: 2.0.20
- memfs: 4.51.0
- mime-types: 2.1.35
- on-finished: 2.4.1
- range-parser: 1.2.1
- schema-utils: 4.3.3
- optionalDependencies:
- webpack: 5.98.0(esbuild@0.25.4)
-
- webpack-dev-server@5.2.2(webpack@5.98.0):
- dependencies:
- '@types/bonjour': 3.5.13
- '@types/connect-history-api-fallback': 1.5.4
- '@types/express': 4.17.25
- '@types/express-serve-static-core': 4.19.7
- '@types/serve-index': 1.9.4
- '@types/serve-static': 1.15.10
- '@types/sockjs': 0.3.36
- '@types/ws': 8.18.1
- ansi-html-community: 0.0.8
- bonjour-service: 1.3.0
- chokidar: 3.6.0
- colorette: 2.0.20
- compression: 1.8.1
- connect-history-api-fallback: 2.0.0
- express: 4.21.2
- graceful-fs: 4.2.11
- http-proxy-middleware: 2.0.9(@types/express@4.17.25)
- ipaddr.js: 2.2.0
- launch-editor: 2.12.0
- open: 10.1.0
- p-retry: 6.2.1
- schema-utils: 4.3.3
- selfsigned: 2.4.1
- serve-index: 1.9.1
- sockjs: 0.3.24
- spdy: 4.0.2
- webpack-dev-middleware: 7.4.2(webpack@5.98.0)
- ws: 8.18.3
- optionalDependencies:
- webpack: 5.98.0(esbuild@0.25.4)
- transitivePeerDependencies:
- - bufferutil
- - debug
- - supports-color
- - utf-8-validate
-
- webpack-merge@6.0.1:
- dependencies:
- clone-deep: 4.0.1
- flat: 5.0.2
- wildcard: 2.0.1
-
- webpack-sources@3.3.3: {}
-
- webpack-subresource-integrity@5.1.0(webpack@5.98.0(esbuild@0.25.4)):
- dependencies:
- typed-assert: 1.0.9
- webpack: 5.98.0(esbuild@0.25.4)
-
- webpack@5.98.0(esbuild@0.25.4):
- dependencies:
- '@types/eslint-scope': 3.7.7
- '@types/estree': 1.0.8
- '@webassemblyjs/ast': 1.14.1
- '@webassemblyjs/wasm-edit': 1.14.1
- '@webassemblyjs/wasm-parser': 1.14.1
- acorn: 8.15.0
- browserslist: 4.28.0
- chrome-trace-event: 1.0.4
- enhanced-resolve: 5.18.3
- es-module-lexer: 1.7.0
- eslint-scope: 5.1.1
- events: 3.3.0
- glob-to-regexp: 0.4.1
- graceful-fs: 4.2.11
- json-parse-even-better-errors: 2.3.1
- loader-runner: 4.3.1
- mime-types: 2.1.35
- neo-async: 2.6.2
- schema-utils: 4.3.3
- tapable: 2.3.0
- terser-webpack-plugin: 5.3.14(esbuild@0.25.4)(webpack@5.98.0)
- watchpack: 2.4.4
- webpack-sources: 3.3.3
- transitivePeerDependencies:
- - '@swc/core'
- - esbuild
- - uglify-js
-
- websocket-driver@0.7.4:
- dependencies:
- http-parser-js: 0.5.10
- safe-buffer: 5.2.1
- websocket-extensions: 0.1.4
-
- websocket-extensions@0.1.4: {}
-
- which@2.0.2:
- dependencies:
- isexe: 2.0.0
-
- which@5.0.0:
- dependencies:
- isexe: 3.1.1
-
- wildcard@2.0.1: {}
-
- wrap-ansi@6.2.0:
- dependencies:
- ansi-styles: 4.3.0
- string-width: 4.2.3
- strip-ansi: 6.0.1
-
- wrap-ansi@7.0.0:
- dependencies:
- ansi-styles: 4.3.0
- string-width: 4.2.3
- strip-ansi: 6.0.1
-
- wrap-ansi@8.1.0:
- dependencies:
- ansi-styles: 6.2.3
- string-width: 5.1.2
- strip-ansi: 7.1.2
-
- wrap-ansi@9.0.2:
- dependencies:
- ansi-styles: 6.2.3
- string-width: 7.2.0
- strip-ansi: 7.1.2
-
- ws@8.18.3: {}
-
- y18n@5.0.8: {}
-
- yallist@3.1.1: {}
-
- yallist@4.0.0: {}
-
- yallist@5.0.0: {}
-
- yargs-parser@21.1.1: {}
-
- yargs@17.7.2:
- dependencies:
- cliui: 8.0.1
- escalade: 3.2.0
- get-caller-file: 2.0.5
- require-directory: 2.1.1
- string-width: 4.2.3
- y18n: 5.0.8
- yargs-parser: 21.1.1
-
- yocto-queue@1.2.2: {}
-
- yoctocolors-cjs@2.1.3: {}
-
- zone.js@0.15.1: {}
diff --git a/ui/postcss.config.js b/ui/postcss.config.js
deleted file mode 100644
index 33ad091..0000000
--- a/ui/postcss.config.js
+++ /dev/null
@@ -1,6 +0,0 @@
-module.exports = {
- plugins: {
- tailwindcss: {},
- autoprefixer: {},
- },
-}
diff --git a/ui/proxy.conf.json b/ui/proxy.conf.json
deleted file mode 100644
index 527d410..0000000
--- a/ui/proxy.conf.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "/api": {
- "target": "http://localhost:3000",
- "secure": false,
- "changeOrigin": true
- }
-}
diff --git a/ui/public/favicon.ico b/ui/public/favicon.ico
deleted file mode 100644
index e69de29..0000000
diff --git a/ui/src/app/app.component.ts b/ui/src/app/app.component.ts
deleted file mode 100644
index d9e892c..0000000
--- a/ui/src/app/app.component.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-import { Component, inject } from '@angular/core';
-import { RouterOutlet } from '@angular/router';
-import { ReloadService } from './core/services/reload.service';
-
-@Component({
- selector: 'app-root',
- standalone: true,
- imports: [RouterOutlet],
- template: ``,
-})
-export class AppComponent {
- // Inject to trigger instantiation for hot reload
- private reloadService = inject(ReloadService);
-}
diff --git a/ui/src/app/app.config.ts b/ui/src/app/app.config.ts
deleted file mode 100644
index fa77ec8..0000000
--- a/ui/src/app/app.config.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-import { ApplicationConfig, provideExperimentalZonelessChangeDetection } from '@angular/core';
-import { provideRouter } from '@angular/router';
-import { provideHttpClient, withInterceptors } from '@angular/common/http';
-import { routes } from './app.routes';
-import { authInterceptor } from './core/interceptors/auth.interceptor';
-import { ReloadService } from './core/services/reload.service';
-
-export const appConfig: ApplicationConfig = {
- providers: [
- provideExperimentalZonelessChangeDetection(),
- provideRouter(routes),
- provideHttpClient(withInterceptors([authInterceptor])),
- ReloadService,
- ],
-};
diff --git a/ui/src/app/app.routes.ts b/ui/src/app/app.routes.ts
deleted file mode 100644
index d279839..0000000
--- a/ui/src/app/app.routes.ts
+++ /dev/null
@@ -1,136 +0,0 @@
-import { Routes } from '@angular/router';
-import { authGuard } from './core/guards/auth.guard';
-import { adminGuard } from './core/guards/admin.guard';
-
-export const routes: Routes = [
- {
- path: 'login',
- loadComponent: () =>
- import('./features/login/login.component').then((m) => m.LoginComponent),
- },
- {
- path: 'oauth-callback',
- loadComponent: () =>
- import('./features/oauth-callback/oauth-callback.component').then(
- (m) => m.OAuthCallbackComponent
- ),
- },
- {
- path: '',
- loadComponent: () =>
- import('./shared/components/layout/layout.component').then(
- (m) => m.LayoutComponent
- ),
- canActivate: [authGuard],
- children: [
- {
- path: '',
- redirectTo: 'dashboard',
- pathMatch: 'full',
- },
- {
- path: 'dashboard',
- loadComponent: () =>
- import('./features/dashboard/dashboard.component').then(
- (m) => m.DashboardComponent
- ),
- },
- {
- path: 'organizations',
- children: [
- {
- path: '',
- loadComponent: () =>
- import('./features/organizations/organizations.component').then(
- (m) => m.OrganizationsComponent
- ),
- },
- {
- path: ':orgName',
- loadComponent: () =>
- import('./features/organizations/organization-detail.component').then(
- (m) => m.OrganizationDetailComponent
- ),
- },
- {
- path: ':orgName/repositories/:repoId',
- loadComponent: () =>
- import('./features/repositories/repository-detail.component').then(
- (m) => m.RepositoryDetailComponent
- ),
- },
- ],
- },
- {
- path: 'packages',
- children: [
- {
- path: '',
- loadComponent: () =>
- import('./features/packages/packages.component').then(
- (m) => m.PackagesComponent
- ),
- },
- {
- path: ':packageId',
- loadComponent: () =>
- import('./features/packages/package-detail.component').then(
- (m) => m.PackageDetailComponent
- ),
- },
- ],
- },
- {
- path: 'tokens',
- loadComponent: () =>
- import('./features/tokens/tokens.component').then(
- (m) => m.TokensComponent
- ),
- },
- {
- path: 'settings',
- loadComponent: () =>
- import('./features/settings/settings.component').then(
- (m) => m.SettingsComponent
- ),
- },
- // Admin routes
- {
- path: 'admin',
- canActivate: [adminGuard],
- children: [
- {
- path: '',
- redirectTo: 'auth',
- pathMatch: 'full',
- },
- {
- path: 'auth',
- loadComponent: () =>
- import('./features/admin/auth-providers/auth-providers.component').then(
- (m) => m.AuthProvidersComponent
- ),
- },
- {
- path: 'auth/providers/new',
- loadComponent: () =>
- import('./features/admin/auth-providers/provider-form.component').then(
- (m) => m.ProviderFormComponent
- ),
- },
- {
- path: 'auth/providers/:id',
- loadComponent: () =>
- import('./features/admin/auth-providers/provider-form.component').then(
- (m) => m.ProviderFormComponent
- ),
- },
- ],
- },
- ],
- },
- {
- path: '**',
- redirectTo: 'dashboard',
- },
-];
diff --git a/ui/src/app/core/guards/admin.guard.ts b/ui/src/app/core/guards/admin.guard.ts
deleted file mode 100644
index d542432..0000000
--- a/ui/src/app/core/guards/admin.guard.ts
+++ /dev/null
@@ -1,27 +0,0 @@
-import { inject } from '@angular/core';
-import { Router, type CanActivateFn } from '@angular/router';
-import { AuthService } from '../services/auth.service';
-
-export const adminGuard: CanActivateFn = async () => {
- const authService = inject(AuthService);
- const router = inject(Router);
-
- // First check if authenticated
- if (!authService.isAuthenticated()) {
- // Try to refresh the token
- const refreshed = await authService.refreshAccessToken();
- if (!refreshed) {
- router.navigate(['/login']);
- return false;
- }
- }
-
- // Then check if admin
- if (!authService.isAdmin()) {
- // Not an admin, redirect to dashboard
- router.navigate(['/dashboard']);
- return false;
- }
-
- return true;
-};
diff --git a/ui/src/app/core/guards/auth.guard.ts b/ui/src/app/core/guards/auth.guard.ts
deleted file mode 100644
index ce6cd98..0000000
--- a/ui/src/app/core/guards/auth.guard.ts
+++ /dev/null
@@ -1,21 +0,0 @@
-import { inject } from '@angular/core';
-import { Router, type CanActivateFn } from '@angular/router';
-import { AuthService } from '../services/auth.service';
-
-export const authGuard: CanActivateFn = async () => {
- const authService = inject(AuthService);
- const router = inject(Router);
-
- if (authService.isAuthenticated()) {
- return true;
- }
-
- // Try to refresh the token
- const refreshed = await authService.refreshAccessToken();
- if (refreshed) {
- return true;
- }
-
- router.navigate(['/login']);
- return false;
-};
diff --git a/ui/src/app/core/interceptors/auth.interceptor.ts b/ui/src/app/core/interceptors/auth.interceptor.ts
deleted file mode 100644
index 4115e5d..0000000
--- a/ui/src/app/core/interceptors/auth.interceptor.ts
+++ /dev/null
@@ -1,59 +0,0 @@
-import { inject } from '@angular/core';
-import {
- HttpInterceptorFn,
- HttpRequest,
- HttpHandlerFn,
- HttpErrorResponse,
-} from '@angular/common/http';
-import { catchError, switchMap, throwError, from, Observable } from 'rxjs';
-import { AuthService } from '../services/auth.service';
-import { Router } from '@angular/router';
-
-export const authInterceptor: HttpInterceptorFn = (
- req: HttpRequest,
- next: HttpHandlerFn
-) => {
- const authService = inject(AuthService);
- const router = inject(Router);
-
- // Skip auth header for login/refresh endpoints
- if (req.url.includes('/auth/login') || req.url.includes('/auth/refresh')) {
- return next(req);
- }
-
- const token = authService.accessToken;
- if (token) {
- req = req.clone({
- setHeaders: {
- Authorization: `Bearer ${token}`,
- },
- });
- }
-
- return next(req).pipe(
- catchError((error: HttpErrorResponse) => {
- if (error.status === 401) {
- // Try to refresh the token using from() to convert Promise to Observable
- return from(authService.refreshAccessToken()).pipe(
- switchMap((success) => {
- if (success) {
- // Retry the request with new token
- const newToken = authService.accessToken;
- const retryReq = req.clone({
- setHeaders: {
- Authorization: `Bearer ${newToken}`,
- },
- });
- return next(retryReq);
- } else {
- // Redirect to login
- router.navigate(['/login']);
- return throwError(() => error);
- }
- })
- );
- }
- return throwError(() => error);
- })
- );
-};
diff --git a/ui/src/app/core/services/admin-auth.service.ts b/ui/src/app/core/services/admin-auth.service.ts
deleted file mode 100644
index 54476cc..0000000
--- a/ui/src/app/core/services/admin-auth.service.ts
+++ /dev/null
@@ -1,141 +0,0 @@
-import { Injectable } from '@angular/core';
-import { HttpClient } from '@angular/common/http';
-import { Observable } from 'rxjs';
-
-// Types
-export type TAuthProviderType = 'oidc' | 'ldap';
-export type TAuthProviderStatus = 'active' | 'disabled' | 'testing';
-
-export interface IOAuthConfig {
- clientId: string;
- clientSecretEncrypted: string;
- issuer: string;
- authorizationUrl?: string;
- tokenUrl?: string;
- userInfoUrl?: string;
- scopes: string[];
- callbackUrl: string;
-}
-
-export interface ILdapConfig {
- serverUrl: string;
- bindDn: string;
- bindPasswordEncrypted: string;
- baseDn: string;
- userSearchFilter: string;
- tlsEnabled: boolean;
- tlsCaCert?: string;
-}
-
-export interface IAttributeMapping {
- email: string;
- username: string;
- displayName: string;
- avatarUrl?: string;
- groups?: string;
-}
-
-export interface IProvisioningSettings {
- jitEnabled: boolean;
- autoLinkByEmail: boolean;
- allowedEmailDomains?: string[];
-}
-
-export interface IAuthProvider {
- id: string;
- name: string;
- displayName: string;
- type: TAuthProviderType;
- status: TAuthProviderStatus;
- priority: number;
- oauthConfig?: IOAuthConfig;
- ldapConfig?: ILdapConfig;
- attributeMapping: IAttributeMapping;
- provisioning: IProvisioningSettings;
- createdAt: string;
- updatedAt: string;
- createdById: string;
- lastTestedAt?: string;
- lastTestResult?: 'success' | 'failure';
- lastTestError?: string;
-}
-
-export interface IPlatformAuthSettings {
- localAuthEnabled: boolean;
- allowUserRegistration: boolean;
- sessionDurationMinutes: number;
- defaultProviderId?: string;
-}
-
-export interface IPlatformSettings {
- id: string;
- auth: IPlatformAuthSettings;
- updatedAt: string;
- updatedById?: string;
-}
-
-export interface IConnectionTestResult {
- success: boolean;
- latencyMs: number;
- serverInfo?: Record;
- error?: string;
-}
-
-export interface ICreateAuthProviderDto {
- name: string;
- displayName: string;
- type: TAuthProviderType;
- oauthConfig?: IOAuthConfig;
- ldapConfig?: ILdapConfig;
- attributeMapping?: IAttributeMapping;
- provisioning?: IProvisioningSettings;
-}
-
-export interface IUpdateAuthProviderDto {
- displayName?: string;
- status?: TAuthProviderStatus;
- priority?: number;
- oauthConfig?: Partial;
- ldapConfig?: Partial;
- attributeMapping?: Partial;
- provisioning?: Partial;
-}
-
-@Injectable({ providedIn: 'root' })
-export class AdminAuthService {
- constructor(private http: HttpClient) {}
-
- // Provider CRUD
- listProviders(): Observable<{ providers: IAuthProvider[] }> {
- return this.http.get<{ providers: IAuthProvider[] }>('/api/v1/admin/auth/providers');
- }
-
- getProvider(id: string): Observable {
- return this.http.get(`/api/v1/admin/auth/providers/${id}`);
- }
-
- createProvider(dto: ICreateAuthProviderDto): Observable {
- return this.http.post('/api/v1/admin/auth/providers', dto);
- }
-
- updateProvider(id: string, dto: IUpdateAuthProviderDto): Observable {
- return this.http.put(`/api/v1/admin/auth/providers/${id}`, dto);
- }
-
- deleteProvider(id: string): Observable<{ message: string }> {
- return this.http.delete<{ message: string }>(`/api/v1/admin/auth/providers/${id}`);
- }
-
- testProvider(id: string): Observable {
- return this.http.post(`/api/v1/admin/auth/providers/${id}/test`, {});
- }
-
- // Platform settings
- getSettings(): Observable {
- return this.http.get('/api/v1/admin/auth/settings');
- }
-
- updateSettings(settings: Partial<{ auth: Partial }>): Observable {
- return this.http.put('/api/v1/admin/auth/settings', settings);
- }
-}
diff --git a/ui/src/app/core/services/api.service.ts b/ui/src/app/core/services/api.service.ts
deleted file mode 100644
index b573791..0000000
--- a/ui/src/app/core/services/api.service.ts
+++ /dev/null
@@ -1,243 +0,0 @@
-import { Injectable } from '@angular/core';
-import { HttpClient, HttpParams } from '@angular/common/http';
-import { Observable } from 'rxjs';
-
-// Types
-export interface IOrganization {
- id: string;
- name: string;
- displayName: string;
- description?: string;
- avatarUrl?: string;
- isPublic: boolean;
- memberCount: number;
- createdAt: string;
-}
-
-export interface IRepository {
- id: string;
- organizationId: string;
- name: string;
- displayName: string;
- description?: string;
- protocols: string[];
- isPublic: boolean;
- packageCount: number;
- createdAt: string;
-}
-
-export interface IPackage {
- id: string;
- name: string;
- description?: string;
- protocol: string;
- organizationId: string;
- repositoryId: string;
- latestVersion?: string;
- isPrivate: boolean;
- downloadCount: number;
- updatedAt: string;
-}
-
-export interface ITokenScope {
- protocol: string;
- organizationId?: string;
- repositoryId?: string;
- actions: string[];
-}
-
-export interface IToken {
- id: string;
- name: string;
- tokenPrefix: string;
- protocols: string[];
- scopes?: ITokenScope[];
- organizationId?: string;
- createdById?: string;
- expiresAt?: string;
- lastUsedAt?: string;
- usageCount: number;
- createdAt: string;
-}
-
-export interface IAuditLog {
- id: string;
- actorId?: string;
- actorType: string;
- action: string;
- resourceType: string;
- resourceId?: string;
- resourceName?: string;
- success: boolean;
- timestamp: string;
-}
-
-@Injectable({ providedIn: 'root' })
-export class ApiService {
- private readonly baseUrl = '/api/v1';
-
- constructor(private http: HttpClient) {}
-
- // Organizations
- getOrganizations(): Observable<{ organizations: IOrganization[] }> {
- return this.http.get<{ organizations: IOrganization[] }>(
- `${this.baseUrl}/organizations`
- );
- }
-
- getOrganization(id: string): Observable {
- return this.http.get(`${this.baseUrl}/organizations/${id}`);
- }
-
- createOrganization(data: {
- name: string;
- displayName?: string;
- description?: string;
- isPublic?: boolean;
- }): Observable {
- return this.http.post(`${this.baseUrl}/organizations`, data);
- }
-
- updateOrganization(
- id: string,
- data: Partial
- ): Observable {
- return this.http.put(
- `${this.baseUrl}/organizations/${id}`,
- data
- );
- }
-
- deleteOrganization(id: string): Observable<{ message: string }> {
- return this.http.delete<{ message: string }>(
- `${this.baseUrl}/organizations/${id}`
- );
- }
-
- // Repositories
- getRepositories(orgId: string): Observable<{ repositories: IRepository[] }> {
- return this.http.get<{ repositories: IRepository[] }>(
- `${this.baseUrl}/organizations/${orgId}/repositories`
- );
- }
-
- getRepository(id: string): Observable {
- return this.http.get(`${this.baseUrl}/repositories/${id}`);
- }
-
- createRepository(
- orgId: string,
- data: {
- name: string;
- displayName?: string;
- description?: string;
- protocols?: string[];
- isPublic?: boolean;
- }
- ): Observable {
- return this.http.post(
- `${this.baseUrl}/organizations/${orgId}/repositories`,
- data
- );
- }
-
- updateRepository(
- id: string,
- data: Partial
- ): Observable {
- return this.http.put(`${this.baseUrl}/repositories/${id}`, data);
- }
-
- deleteRepository(id: string): Observable<{ message: string }> {
- return this.http.delete<{ message: string }>(
- `${this.baseUrl}/repositories/${id}`
- );
- }
-
- // Packages
- searchPackages(params?: {
- q?: string;
- protocol?: string;
- organizationId?: string;
- limit?: number;
- offset?: number;
- }): Observable<{ packages: IPackage[]; total: number }> {
- let httpParams = new HttpParams();
- if (params?.q) httpParams = httpParams.set('q', params.q);
- if (params?.protocol) httpParams = httpParams.set('protocol', params.protocol);
- if (params?.organizationId)
- httpParams = httpParams.set('organizationId', params.organizationId);
- if (params?.limit) httpParams = httpParams.set('limit', params.limit.toString());
- if (params?.offset) httpParams = httpParams.set('offset', params.offset.toString());
-
- return this.http.get<{ packages: IPackage[]; total: number }>(
- `${this.baseUrl}/packages`,
- { params: httpParams }
- );
- }
-
- getPackage(id: string): Observable {
- return this.http.get(
- `${this.baseUrl}/packages/${encodeURIComponent(id)}`
- );
- }
-
- deletePackage(id: string): Observable<{ message: string }> {
- return this.http.delete<{ message: string }>(
- `${this.baseUrl}/packages/${encodeURIComponent(id)}`
- );
- }
-
- // Tokens
- getTokens(organizationId?: string): Observable<{ tokens: IToken[] }> {
- let httpParams = new HttpParams();
- if (organizationId) {
- httpParams = httpParams.set('organizationId', organizationId);
- }
- return this.http.get<{ tokens: IToken[] }>(`${this.baseUrl}/tokens`, {
- params: httpParams,
- });
- }
-
- createToken(data: {
- name: string;
- organizationId?: string;
- protocols: string[];
- scopes: ITokenScope[];
- expiresInDays?: number;
- }): Observable