From acd47f53d0f687b4e8ceb603bad9af09505c14b3 Mon Sep 17 00:00:00 2001 From: Charles Lyding <19598772+clydin@users.noreply.github.com> Date: Mon, 2 Mar 2026 17:29:34 -0500 Subject: [PATCH] refactor(@angular/build): replace lmdb with node:sqlite for persistent caching The persistent cache implementation for the esbuild-based build system is now using the Node.js built-in `node:sqlite` module, removing the third-party `lmdb` dependency. The database uses WAL (Write-Ahead Logging) mode and normal synchronous settings for optimal performance during parallel builds. --- packages/angular/build/BUILD.bazel | 1 - packages/angular/build/package.json | 3 - .../tools/esbuild/angular/compiler-plugin.ts | 8 +- .../build/src/tools/esbuild/i18n-inliner.ts | 8 +- .../src/tools/esbuild/lmdb-cache-store.ts | 59 ------ .../src/tools/esbuild/sqlite-cache-store.ts | 89 +++++++++ pnpm-lock.yaml | 187 ------------------ 7 files changed, 97 insertions(+), 258 deletions(-) delete mode 100644 packages/angular/build/src/tools/esbuild/lmdb-cache-store.ts create mode 100644 packages/angular/build/src/tools/esbuild/sqlite-cache-store.ts diff --git a/packages/angular/build/BUILD.bazel b/packages/angular/build/BUILD.bazel index 5303f6763020..dc7e42dca706 100644 --- a/packages/angular/build/BUILD.bazel +++ b/packages/angular/build/BUILD.bazel @@ -93,7 +93,6 @@ ts_project( ":node_modules/jsonc-parser", ":node_modules/less", ":node_modules/listr2", - ":node_modules/lmdb", ":node_modules/magic-string", ":node_modules/mrmime", ":node_modules/ng-packagr", diff --git a/packages/angular/build/package.json b/packages/angular/build/package.json index 54731e23c099..f03a65dbfb4a 100644 --- a/packages/angular/build/package.json +++ b/packages/angular/build/package.json @@ -45,9 +45,6 @@ "vite": "7.3.1", "watchpack": "2.5.1" }, - "optionalDependencies": { - "lmdb": "3.5.1" - }, "devDependencies": { "@angular-devkit/core": "workspace:*", "@angular/ssr": "workspace:*", diff --git a/packages/angular/build/src/tools/esbuild/angular/compiler-plugin.ts b/packages/angular/build/src/tools/esbuild/angular/compiler-plugin.ts index af4dcaea01fb..646f18da3221 100644 --- a/packages/angular/build/src/tools/esbuild/angular/compiler-plugin.ts +++ b/packages/angular/build/src/tools/esbuild/angular/compiler-plugin.ts @@ -73,11 +73,11 @@ export function createCompilerPlugin( // Initialize a worker pool for JavaScript transformations. // Webcontainers currently do not support this persistent cache store. - let cacheStore: import('../lmdb-cache-store').LmdbCacheStore | undefined; + let cacheStore: import('../sqlite-cache-store').SqliteCacheStore | undefined; if (pluginOptions.sourceFileCache?.persistentCachePath && !process.versions.webcontainer) { try { - const { LmdbCacheStore } = await import('../lmdb-cache-store'); - cacheStore = new LmdbCacheStore( + const { SqliteCacheStore } = await import('../sqlite-cache-store'); + cacheStore = new SqliteCacheStore( path.join(pluginOptions.sourceFileCache.persistentCachePath, 'angular-compiler.db'), ); } catch (e) { @@ -85,7 +85,7 @@ export function createCompilerPlugin( text: 'Unable to initialize JavaScript cache storage.', location: null, notes: [ - // Only show first line of lmdb load error which has platform support listed + // Only show first line of sqlite load error { text: (e as Error)?.message.split('\n')[0] ?? `${e}` }, { text: 'This will not affect the build output content but may result in slower builds.', diff --git a/packages/angular/build/src/tools/esbuild/i18n-inliner.ts b/packages/angular/build/src/tools/esbuild/i18n-inliner.ts index fcb439b84c5c..d09489214857 100644 --- a/packages/angular/build/src/tools/esbuild/i18n-inliner.ts +++ b/packages/angular/build/src/tools/esbuild/i18n-inliner.ts @@ -11,7 +11,7 @@ import { createHash } from 'node:crypto'; import { extname, join } from 'node:path'; import { WorkerPool } from '../../utils/worker-pool'; import { BuildOutputFile, BuildOutputFileType } from './bundler-context'; -import type { LmdbCacheStore } from './lmdb-cache-store'; +import type { SqliteCacheStore } from './sqlite-cache-store'; import { createOutputFile } from './utils'; /** @@ -39,7 +39,7 @@ export interface I18nInlinerOptions { export class I18nInliner { #cacheInitFailed = false; #workerPool: WorkerPool; - #cache: LmdbCacheStore | undefined; + #cache: SqliteCacheStore | undefined; readonly #localizeFiles: ReadonlyMap; readonly #unmodifiedFiles: Array; @@ -274,9 +274,9 @@ export class I18nInliner { // Initialize a persistent cache for i18n transformations. try { - const { LmdbCacheStore } = await import('./lmdb-cache-store'); + const { SqliteCacheStore } = await import('./sqlite-cache-store'); - this.#cache = new LmdbCacheStore(join(persistentCachePath, 'angular-i18n.db')); + this.#cache = new SqliteCacheStore(join(persistentCachePath, 'angular-i18n.db')); } catch { this.#cacheInitFailed = true; diff --git a/packages/angular/build/src/tools/esbuild/lmdb-cache-store.ts b/packages/angular/build/src/tools/esbuild/lmdb-cache-store.ts deleted file mode 100644 index dba108285342..000000000000 --- a/packages/angular/build/src/tools/esbuild/lmdb-cache-store.ts +++ /dev/null @@ -1,59 +0,0 @@ -/** - * @license - * Copyright Google LLC All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.dev/license - */ - -import { RootDatabase, open } from 'lmdb'; -import { Cache, CacheStore } from './cache'; - -export class LmdbCacheStore implements CacheStore { - readonly #cacheFileUrl; - #db: RootDatabase | undefined; - - constructor(readonly cachePath: string) { - this.#cacheFileUrl = cachePath; - } - - #ensureCacheFile(): RootDatabase { - this.#db ??= open({ - path: this.#cacheFileUrl, - compression: true, - }); - - return this.#db; - } - - // eslint-disable-next-line @typescript-eslint/no-explicit-any - async get(key: string): Promise { - const db = this.#ensureCacheFile(); - const value = db.get(key); - - return value; - } - - has(key: string): boolean { - return this.#ensureCacheFile().doesExist(key); - } - - async set(key: string, value: unknown): Promise { - const db = this.#ensureCacheFile(); - await db.put(key, value); - - return this; - } - - createCache(namespace: string): Cache { - return new Cache(this, namespace); - } - - async close() { - try { - await this.#db?.close(); - } catch { - // Failure to close should not be fatal - } - } -} diff --git a/packages/angular/build/src/tools/esbuild/sqlite-cache-store.ts b/packages/angular/build/src/tools/esbuild/sqlite-cache-store.ts new file mode 100644 index 000000000000..f4d8a1187372 --- /dev/null +++ b/packages/angular/build/src/tools/esbuild/sqlite-cache-store.ts @@ -0,0 +1,89 @@ +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.dev/license + */ + +import assert from 'node:assert'; +import { DatabaseSync, StatementSync } from 'node:sqlite'; +import { deserialize, serialize } from 'node:v8'; +import { Cache, type CacheStore } from './cache'; + +export class SqliteCacheStore implements CacheStore { + #db: DatabaseSync | undefined; + #getStatement: StatementSync | undefined; + #hasStatement: StatementSync | undefined; + #setStatement: StatementSync | undefined; + + constructor(readonly cachePath: string) {} + + #ensureDb(): void { + if (this.#db) { + return; + } + + const db = new DatabaseSync(this.cachePath); + db.exec(` + PRAGMA journal_mode = WAL; + PRAGMA synchronous = NORMAL; + CREATE TABLE IF NOT EXISTS cache ( + key TEXT PRIMARY KEY, + value BLOB + ); + `); + + this.#getStatement = db.prepare('SELECT value FROM cache WHERE key = ?'); + this.#hasStatement = db.prepare('SELECT 1 FROM cache WHERE key = ?'); + this.#setStatement = db.prepare('INSERT OR REPLACE INTO cache (key, value) VALUES (?, ?)'); + + this.#db = db; + } + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + async get(key: string): Promise { + this.#ensureDb(); + + assert(this.#getStatement, 'getStatement should be initialized by ensureDb'); + + const result = this.#getStatement.get(key) as { value: Uint8Array } | undefined; + if (result) { + return deserialize(result.value); + } + + return undefined; + } + + has(key: string): boolean { + this.#ensureDb(); + + assert(this.#hasStatement, 'hasStatement should be initialized by ensureDb'); + + const result = this.#hasStatement.get(key); + + return result !== undefined; + } + + async set(key: string, value: unknown): Promise { + this.#ensureDb(); + + assert(this.#setStatement, 'setStatement should be initialized by ensureDb'); + + this.#setStatement.run(key, serialize(value)); + + return this; + } + + createCache(namespace: string): Cache { + return new Cache(this, namespace); + } + + async close() { + try { + this.#db?.close(); + } catch { + // Failure to close should not be fatal + } + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5dba7004dae2..4e14237d8818 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -428,10 +428,6 @@ importers: vitest: specifier: 4.0.18 version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(jiti@2.6.1)(jsdom@28.1.0)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) - optionalDependencies: - lmdb: - specifier: 3.5.1 - version: 3.5.1 packages/angular/cli: dependencies: @@ -2123,9 +2119,6 @@ packages: engines: {node: '>=6'} hasBin: true - '@harperfast/extended-iterable@1.0.3': - resolution: {integrity: sha512-sSAYhQca3rDWtQUHSAPeO7axFIUJOI6hn1gjRC5APVE1a90tuyT8f5WIgRsFhhWA7htNkju2veB9eWL6YHi/Lw==} - '@hono/node-server@1.19.9': resolution: {integrity: sha512-vHL6w3ecZsky+8P5MD+eFfaGTyCeOHUIFYMGpQGbrBTSmNNoxv0if69rEZ5giu36weC5saFuznL411gRX7bJDw==} engines: {node: '>=18.14.1'} @@ -2449,41 +2442,6 @@ packages: '@inquirer/prompts': '>= 3 < 9' listr2: 10.1.1 - '@lmdb/lmdb-darwin-arm64@3.5.1': - resolution: {integrity: sha512-tpfN4kKrrMpQ+If1l8bhmoNkECJi0iOu6AEdrTJvWVC+32sLxTARX5Rsu579mPImRP9YFWfWgeRQ5oav7zApQQ==} - cpu: [arm64] - os: [darwin] - - '@lmdb/lmdb-darwin-x64@3.5.1': - resolution: {integrity: sha512-+a2tTfc3rmWhLAolFUWRgJtpSuu+Fw/yjn4rF406NMxhfjbMuiOUTDRvRlMFV+DzyjkwnokisskHbCWkS3Ly5w==} - cpu: [x64] - os: [darwin] - - '@lmdb/lmdb-linux-arm64@3.5.1': - resolution: {integrity: sha512-aoERa5B6ywXdyFeYGQ1gbQpkMkDbEo45qVoXE5QpIRavqjnyPwjOulMkmkypkmsbJ5z4Wi0TBztON8agCTG0Vg==} - cpu: [arm64] - os: [linux] - - '@lmdb/lmdb-linux-arm@3.5.1': - resolution: {integrity: sha512-0EgcE6reYr8InjD7V37EgXcYrloqpxVPINy3ig1MwDSbl6LF/vXTYRH9OE1Ti1D8YZnB35ZH9aTcdfSb5lql2A==} - cpu: [arm] - os: [linux] - - '@lmdb/lmdb-linux-x64@3.5.1': - resolution: {integrity: sha512-SqNDY1+vpji7bh0sFH5wlWyFTOzjbDOl0/kB5RLLYDAFyd/uw3n7wyrmas3rYPpAW7z18lMOi1yKlTPv967E3g==} - cpu: [x64] - os: [linux] - - '@lmdb/lmdb-win32-arm64@3.5.1': - resolution: {integrity: sha512-50v0O1Lt37cwrmR9vWZK5hRW0Aw+KEmxJJ75fge/zIYdvNKB/0bSMSVR5Uc2OV9JhosIUyklOmrEvavwNJ8D6w==} - cpu: [arm64] - os: [win32] - - '@lmdb/lmdb-win32-x64@3.5.1': - resolution: {integrity: sha512-qwosvPyl+zpUlp3gRb7UcJ3H8S28XHCzkv0Y0EgQToXjQP91ZD67EHSCDmaLjtKhe+GVIW5om1KUpzVLA0l6pg==} - cpu: [x64] - os: [win32] - '@modelcontextprotocol/sdk@1.27.1': resolution: {integrity: sha512-sr6GbP+4edBwFndLbM60gf07z0FQ79gaExpnsjMGePXqFcSSb7t6iscpjk9DhFhwd+mTEQrzNafGP8/iGGFYaA==} engines: {node: '>=18'} @@ -2494,36 +2452,6 @@ packages: '@cfworker/json-schema': optional: true - '@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] - '@mswjs/interceptors@0.41.3': resolution: {integrity: sha512-cXu86tF4VQVfwz8W1SPbhoRyHJkti6mjH/XJIxp40jhO4j2k1m4KYrEykxqWPkFF3vrK4rgQppBh//AwyGSXPA==} engines: {node: '>=18'} @@ -6093,10 +6021,6 @@ packages: resolution: {integrity: sha512-4oogpJzRRGtq41B0GKZIldzYCnQTgX2DPM/XvcfNu7g2E7sxaast009150RKFZBnrHAnfMOUaedIqdIOLCCRxQ==} engines: {node: '>=22.0.0'} - lmdb@3.5.1: - resolution: {integrity: sha512-NYHA0MRPjvNX+vSw8Xxg6FLKxzAG+e7Pt8RqAQA/EehzHVXq9SxDqJIN3JL1hK0dweb884y8kIh6rkWvPyg9Wg==} - hasBin: true - loader-runner@4.3.1: resolution: {integrity: sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==} engines: {node: '>=6.11.5'} @@ -6394,13 +6318,6 @@ packages: 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.8: - resolution: {integrity: sha512-bC4UGzHhVvgDNS7kn9tV8fAucIYUBuGojcaLiz7v+P63Lmtm0Xeji8B/8tYKddALXxJLpwIeBmUN3u64C4YkRA==} - multicast-dns@7.2.5: resolution: {integrity: sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==} hasBin: true @@ -6462,9 +6379,6 @@ packages: resolution: {integrity: sha512-u5xUnYE+UOOBA6SpELJheMCtj2Laqx15Vl70QxKo43Wz/6nMHXS7PrEioXLjXAwhmawdEMNImwKCcPhBJWbKVw==} engines: {node: '>=18.20.0 <20 || >=20.12.1'} - node-addon-api@6.1.0: - resolution: {integrity: sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==} - node-addon-api@7.1.1: resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} @@ -6498,10 +6412,6 @@ packages: resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - node-gyp-build-optional-packages@5.2.2: - resolution: {integrity: sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw==} - hasBin: true - node-gyp-build@4.8.4: resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} hasBin: true @@ -6639,9 +6549,6 @@ packages: resolution: {integrity: sha512-lBX72MWFduWEf7v7uWf5DHp9Jn5BI8bNPGuFgtXMmr2uDz2Gz2749y3am3agSDdkhHPHYmmxEGSKH85ZLGzgXw==} engines: {node: '>=20'} - ordered-binary@1.6.1: - resolution: {integrity: sha512-QkCdPooczexPLiXIrbVOPYkR3VO3T6v2OyKRkR1Xbhpy7/LAVXwahnRCgRp78Oe/Ehf0C/HATAxfSr6eA1oX+w==} - outvariant@1.4.3: resolution: {integrity: sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==} @@ -8069,9 +7976,6 @@ packages: wbuf@1.7.3: resolution: {integrity: sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==} - weak-lru-cache@1.2.2: - resolution: {integrity: sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw==} - web-streams-polyfill@3.3.3: resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} engines: {node: '>= 8'} @@ -9944,9 +9848,6 @@ snapshots: protobufjs: 7.5.4 yargs: 17.7.2 - '@harperfast/extended-iterable@1.0.3': - optional: true - '@hono/node-server@1.19.9(hono@4.12.3)': dependencies: hono: 4.12.3 @@ -10261,27 +10162,6 @@ snapshots: transitivePeerDependencies: - '@types/node' - '@lmdb/lmdb-darwin-arm64@3.5.1': - optional: true - - '@lmdb/lmdb-darwin-x64@3.5.1': - optional: true - - '@lmdb/lmdb-linux-arm64@3.5.1': - optional: true - - '@lmdb/lmdb-linux-arm@3.5.1': - optional: true - - '@lmdb/lmdb-linux-x64@3.5.1': - optional: true - - '@lmdb/lmdb-win32-arm64@3.5.1': - optional: true - - '@lmdb/lmdb-win32-x64@3.5.1': - optional: true - '@modelcontextprotocol/sdk@1.27.1(zod@4.3.6)': dependencies: '@hono/node-server': 1.19.9(hono@4.12.3) @@ -10304,24 +10184,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@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 - '@mswjs/interceptors@0.41.3': dependencies: '@open-draft/deferred-promise': 2.2.0 @@ -14449,24 +14311,6 @@ snapshots: rfdc: 1.4.1 wrap-ansi: 10.0.0 - lmdb@3.5.1: - dependencies: - '@harperfast/extended-iterable': 1.0.3 - msgpackr: 1.11.8 - node-addon-api: 6.1.0 - node-gyp-build-optional-packages: 5.2.2 - ordered-binary: 1.6.1 - weak-lru-cache: 1.2.2 - optionalDependencies: - '@lmdb/lmdb-darwin-arm64': 3.5.1 - '@lmdb/lmdb-darwin-x64': 3.5.1 - '@lmdb/lmdb-linux-arm': 3.5.1 - '@lmdb/lmdb-linux-arm64': 3.5.1 - '@lmdb/lmdb-linux-x64': 3.5.1 - '@lmdb/lmdb-win32-arm64': 3.5.1 - '@lmdb/lmdb-win32-x64': 3.5.1 - optional: true - loader-runner@4.3.1: {} loader-utils@2.0.4: @@ -14744,23 +14588,6 @@ snapshots: 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.8: - optionalDependencies: - msgpackr-extract: 3.0.3 - optional: true - multicast-dns@7.2.5: dependencies: dns-packet: 5.6.1 @@ -14829,9 +14656,6 @@ snapshots: json-stringify-safe: 5.0.1 propagate: 2.0.1 - node-addon-api@6.1.0: - optional: true - node-addon-api@7.1.1: optional: true @@ -14857,11 +14681,6 @@ snapshots: fetch-blob: 3.2.0 formdata-polyfill: 4.0.10 - node-gyp-build-optional-packages@5.2.2: - dependencies: - detect-libc: 2.1.2 - optional: true - node-gyp-build@4.8.4: {} node-gyp@12.2.0: @@ -15036,9 +14855,6 @@ snapshots: stdin-discarder: 0.3.1 string-width: 8.2.0 - ordered-binary@1.6.1: - optional: true - outvariant@1.4.3: {} own-keys@1.0.1: @@ -16746,9 +16562,6 @@ snapshots: dependencies: minimalistic-assert: 1.0.1 - weak-lru-cache@1.2.2: - optional: true - web-streams-polyfill@3.3.3: {} web-vitals@4.2.4: {}