diff --git a/.changeset/nice-flies-fry.md b/.changeset/nice-flies-fry.md new file mode 100644 index 0000000000..97c36fde95 --- /dev/null +++ b/.changeset/nice-flies-fry.md @@ -0,0 +1,5 @@ +--- +"@directus/api": patch +--- + +Prevented slow down of the main thread by moving file import to worker threads diff --git a/api/package.json b/api/package.json index 806cbb4fd9..2b7e64afb2 100644 --- a/api/package.json +++ b/api/package.json @@ -157,7 +157,7 @@ "snappy": "7.2.2", "stream-json": "1.7.5", "strip-bom-stream": "5.0.0", - "tmp-promise": "3.0.3", + "tinypool": "0.8.1", "tsx": "3.12.7", "uuid": "9.0.0", "uuid-validate": "0.0.3", diff --git a/api/src/controllers/utils.ts b/api/src/controllers/utils.ts index b14a9a77e4..327b2bd886 100644 --- a/api/src/controllers/utils.ts +++ b/api/src/controllers/utils.ts @@ -2,11 +2,14 @@ import argon2 from 'argon2'; import Busboy from 'busboy'; import { Router } from 'express'; import Joi from 'joi'; +import fs from 'node:fs'; +import { createRequire } from 'node:module'; import { flushCaches } from '../cache.js'; import { ForbiddenError, InvalidPayloadError, InvalidQueryError, UnsupportedMediaTypeError } from '../errors/index.js'; import collectionExists from '../middleware/collection-exists.js'; import { respond } from '../middleware/respond.js'; -import { ExportService, ImportService } from '../services/import-export.js'; +import type { ImportWorkerData } from '../services/import-export/import-worker.js'; +import { ExportService } from '../services/import-export/index.js'; import { RevisionsService } from '../services/revisions.js'; import { UtilsService } from '../services/utils.js'; import asyncHandler from '../utils/async-handler.js'; @@ -105,11 +108,6 @@ router.post( throw new UnsupportedMediaTypeError({ mediaType: req.headers['content-type']!, where: 'Content-Type header' }); } - const service = new ImportService({ - accountability: req.accountability, - schema: req.schema, - }); - let headers; if (req.headers['content-type']) { @@ -124,13 +122,38 @@ router.post( const busboy = Busboy({ headers }); busboy.on('file', async (_fieldname, fileStream, { mimeType }) => { - try { - await service.import(req.params['collection']!, mimeType, fileStream); - } catch (err: any) { - return next(err); - } + const { createTmpFile } = await import('@directus/utils/node'); + const { getWorkerPool } = await import('../worker-pool.js'); - return res.status(200).end(); + const tmpFile = await createTmpFile().catch(() => null); + + if (!tmpFile) throw new Error('Failed to create temporary file for import'); + + fileStream.pipe(fs.createWriteStream(tmpFile.path)); + + fileStream.on('end', async () => { + const workerPool = getWorkerPool(); + + const require = createRequire(import.meta.url); + const filename = require.resolve('../services/import-export/import-worker'); + + const workerData: ImportWorkerData = { + collection: req.params['collection']!, + mimeType, + filePath: tmpFile.path, + accountability: req.accountability, + schema: req.schema, + }; + + try { + await workerPool.run(workerData, { filename }); + res.status(200).end(); + } catch (error) { + next(error); + } finally { + await tmpFile.cleanup(); + } + }); }); busboy.on('error', (err: Error) => next(err)); diff --git a/api/src/middleware/respond.ts b/api/src/middleware/respond.ts index 68da8f8770..8eba0f92c6 100644 --- a/api/src/middleware/respond.ts +++ b/api/src/middleware/respond.ts @@ -3,7 +3,7 @@ import type { RequestHandler } from 'express'; import { getCache, setCacheValue } from '../cache.js'; import env from '../env.js'; import logger from '../logger.js'; -import { ExportService } from '../services/import-export.js'; +import { ExportService } from '../services/import-export/index.js'; import asyncHandler from '../utils/async-handler.js'; import { getCacheControlHeader } from '../utils/get-cache-headers.js'; import { getCacheKey } from '../utils/get-cache-key.js'; diff --git a/api/src/services/import-export/import-worker.ts b/api/src/services/import-export/import-worker.ts new file mode 100644 index 0000000000..14c64b063a --- /dev/null +++ b/api/src/services/import-export/import-worker.ts @@ -0,0 +1,20 @@ +import type { Accountability, SchemaOverview } from '@directus/types'; +import { createReadStream } from 'node:fs'; +import { ImportService } from './index.js'; + +export type ImportWorkerData = { + collection: string; + mimeType: string; + filePath: string; + accountability: Accountability | undefined; + schema: SchemaOverview; +}; + +export default async function ({ collection, mimeType, filePath, accountability, schema }: ImportWorkerData) { + const service = new ImportService({ + accountability: accountability, + schema: schema, + }); + + await service.import(collection, mimeType, createReadStream(filePath)); +} diff --git a/api/src/services/import-export.ts b/api/src/services/import-export/index.ts similarity index 92% rename from api/src/services/import-export.ts rename to api/src/services/import-export/index.ts index 3ed0a259c1..31c48dfaae 100644 --- a/api/src/services/import-export.ts +++ b/api/src/services/import-export/index.ts @@ -13,25 +13,24 @@ import { appendFile } from 'node:fs/promises'; import type { Readable } from 'node:stream'; import StreamArray from 'stream-json/streamers/StreamArray.js'; import stripBomStream from 'strip-bom-stream'; -import { file as createTmpFile } from 'tmp-promise'; -import getDatabase from '../database/index.js'; -import emitter from '../emitter.js'; -import env from '../env.js'; +import getDatabase from '../../database/index.js'; +import emitter from '../../emitter.js'; +import env from '../../env.js'; import { ForbiddenError, InvalidPayloadError, ServiceUnavailableError, UnsupportedMediaTypeError, -} from '../errors/index.js'; -import logger from '../logger.js'; -import type { AbstractServiceOptions, ActionEventParams } from '../types/index.js'; -import { getDateFormatted } from '../utils/get-date-formatted.js'; -import { Url } from '../utils/url.js'; -import { userName } from '../utils/user-name.js'; -import { FilesService } from './files.js'; -import { ItemsService } from './items.js'; -import { NotificationsService } from './notifications.js'; -import { UsersService } from './users.js'; +} from '../../errors/index.js'; +import logger from '../../logger.js'; +import type { AbstractServiceOptions, ActionEventParams } from '../../types/index.js'; +import { getDateFormatted } from '../../utils/get-date-formatted.js'; +import { Url } from '../../utils/url.js'; +import { userName } from '../../utils/user-name.js'; +import { FilesService } from '../files.js'; +import { ItemsService } from '../items.js'; +import { NotificationsService } from '../notifications.js'; +import { UsersService } from '../users.js'; type ExportFormat = 'csv' | 'json' | 'xml' | 'yaml'; @@ -203,7 +202,12 @@ export class ExportService { file?: Partial; } ) { + const { createTmpFile } = await import('@directus/utils/node'); + const tmpFile = await createTmpFile().catch(() => null); + try { + if (!tmpFile) throw new Error('Failed to create temporary file for export'); + const mimeTypes = { csv: 'text/csv', json: 'application/json', @@ -213,8 +217,6 @@ export class ExportService { const database = getDatabase(); - const { path, cleanup } = await createTmpFile(); - await database.transaction(async (trx) => { const service = new ItemsService(collection, { accountability: this.accountability, @@ -264,7 +266,7 @@ export class ExportService { if (result.length) { await appendFile( - path, + tmpFile.path, this.transform(result, format, { includeHeader: batch === 0, includeFooter: batch + 1 === batchesRequired, @@ -292,7 +294,7 @@ export class ExportService { type: mimeTypes[format], }; - const savedFile = await filesService.uploadOne(createReadStream(path), fileWithDefaults); + const savedFile = await filesService.uploadOne(createReadStream(tmpFile.path), fileWithDefaults); if (this.accountability?.user) { const notificationsService = new NotificationsService({ @@ -325,8 +327,6 @@ Your export of ${collection} is ready. Click here to view. item: savedFile, }); } - - await cleanup(); } catch (err: any) { logger.error(err, `Couldn't export ${collection}: ${err.message}`); @@ -343,6 +343,8 @@ Your export of ${collection} is ready. Click here to view. message: `Please contact your system administrator for more information.`, }); } + } finally { + await tmpFile?.cleanup(); } } diff --git a/api/src/services/index.ts b/api/src/services/index.ts index 40aa6da8cb..95512319ee 100644 --- a/api/src/services/index.ts +++ b/api/src/services/index.ts @@ -9,7 +9,7 @@ export * from './files.js'; export * from './flows.js'; export * from './folders.js'; export * from './graphql/index.js'; -export * from './import-export.js'; +export * from './import-export/index.js'; export * from './items.js'; export * from './mail/index.js'; export * from './meta.js'; diff --git a/api/src/worker-pool.ts b/api/src/worker-pool.ts new file mode 100644 index 0000000000..4c87c69c20 --- /dev/null +++ b/api/src/worker-pool.ts @@ -0,0 +1,14 @@ +import Tinypool from 'tinypool'; + +let workerPool: Tinypool | undefined; + +export function getWorkerPool() { + if (!workerPool) { + workerPool = new Tinypool({ + minThreads: 0, + maxQueue: 'auto', + }); + } + + return workerPool; +} diff --git a/packages/utils/node/index.ts b/packages/utils/node/index.ts index 9fb317432c..61796d525a 100644 --- a/packages/utils/node/index.ts +++ b/packages/utils/node/index.ts @@ -8,3 +8,4 @@ export * from './path-to-relative-url.js'; export * from './pluralize.js'; export * from './readable-stream-to-string.js'; export * from './resolve-package.js'; +export * from './tmp.js'; diff --git a/packages/utils/node/tmp.ts b/packages/utils/node/tmp.ts new file mode 100644 index 0000000000..c2140abcfe --- /dev/null +++ b/packages/utils/node/tmp.ts @@ -0,0 +1,41 @@ +import { createHash } from 'node:crypto'; +import fs from 'node:fs/promises'; +import { tmpdir } from 'node:os'; +import { join } from 'node:path'; + +async function createTmpDirectory() { + const path = await fs.mkdtemp(join(tmpdir(), 'directus-')); + + async function cleanup() { + return await fs.rmdir(path); + } + + return { + path, + cleanup, + }; +} + +export async function createTmpFile() { + const dir = await createTmpDirectory(); + const filename = createHash('sha1').update(new Date().toString()).digest('hex').substring(0, 8); + const path = join(dir.path, filename); + + try { + const fd = await fs.open(path, 'wx'); + await fd.close(); + } catch (err) { + await dir.cleanup(); + throw err; + } + + async function cleanup() { + await fs.unlink(path); + await dir.cleanup(); + } + + return { + path, + cleanup, + }; +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 22c661b27e..dd2877d374 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -314,9 +314,9 @@ importers: strip-bom-stream: specifier: 5.0.0 version: 5.0.0 - tmp-promise: - specifier: 3.0.3 - version: 3.0.3 + tinypool: + specifier: 0.8.1 + version: 0.8.1 tsx: specifier: 3.12.7 version: 3.12.7 @@ -3289,12 +3289,14 @@ packages: /@azure/abort-controller@1.1.0: resolution: {integrity: sha512-TrRLIoSQVzfAJX9H1JeFjzAoDGcoK1IYX1UImfceTZpsyYfWr09Ss1aHW1y5TrrR3iq6RZLBwJ3E24uwPhwahw==} engines: {node: '>=12.0.0'} + requiresBuild: true dependencies: tslib: 2.6.2 /@azure/core-auth@1.5.0: resolution: {integrity: sha512-udzoBuYG1VBoHVohDTrvKjyzel34zt77Bhp7dQntVGGD0ehVq48owENbBG8fIgkHRNUBQH5k1r0hpoMu5L8+kw==} engines: {node: '>=14.0.0'} + requiresBuild: true dependencies: '@azure/abort-controller': 1.1.0 '@azure/core-util': 1.4.0 @@ -3351,6 +3353,7 @@ packages: /@azure/core-lro@2.5.4: resolution: {integrity: sha512-3GJiMVH7/10bulzOKGrrLeG/uCBH/9VtxqaMcB9lIqAeamI/xYQSHJL/KcsLDuH+yTjYpro/u6D/MuRe4dN70Q==} engines: {node: '>=14.0.0'} + requiresBuild: true dependencies: '@azure/abort-controller': 1.1.0 '@azure/core-util': 1.4.0 @@ -3360,6 +3363,7 @@ packages: /@azure/core-paging@1.5.0: resolution: {integrity: sha512-zqWdVIt+2Z+3wqxEOGzR5hXFZ8MGKK52x4vFLw8n58pR6ZfKRx3EXYTxTaYxYHc/PexPUTyimcTWFJbji9Z6Iw==} engines: {node: '>=14.0.0'} + requiresBuild: true dependencies: tslib: 2.6.2 @@ -3398,6 +3402,7 @@ packages: /@azure/core-util@1.4.0: resolution: {integrity: sha512-eGAyJpm3skVQoLiRqm/xPa+SXi/NPDdSHMxbRAz2lSprd+Zs+qrpQGQQ2VQ3Nttu+nSZR4XoYQC71LbEI7jsig==} engines: {node: '>=14.0.0'} + requiresBuild: true dependencies: '@azure/abort-controller': 1.1.0 tslib: 2.6.2 @@ -3448,6 +3453,7 @@ packages: /@azure/logger@1.0.4: resolution: {integrity: sha512-ustrPY8MryhloQj7OWGe+HrYx+aoiOxzbXTtgblbV3xwCqpzUK36phH3XNHQKj3EPonyFUuDTfR3qFhTEAuZEg==} engines: {node: '>=14.0.0'} + requiresBuild: true dependencies: tslib: 2.6.2 @@ -8346,6 +8352,7 @@ packages: /@tootallnate/once@2.0.0: resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} engines: {node: '>= 10'} + requiresBuild: true /@trysound/sax@0.2.0: resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} @@ -9803,6 +9810,7 @@ packages: /aggregate-error@3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} + requiresBuild: true dependencies: clean-stack: 2.2.0 indent-string: 4.0.0 @@ -9848,6 +9856,7 @@ packages: /ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + requiresBuild: true dependencies: fast-deep-equal: 3.1.3 fast-json-stable-stringify: 2.1.0 @@ -10050,6 +10059,7 @@ packages: /array-buffer-byte-length@1.0.0: resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} + requiresBuild: true dependencies: call-bind: 1.0.2 is-array-buffer: 3.0.2 @@ -10110,6 +10120,7 @@ packages: /arraybuffer.prototype.slice@1.0.1: resolution: {integrity: sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==} engines: {node: '>= 0.4'} + requiresBuild: true dependencies: array-buffer-byte-length: 1.0.0 call-bind: 1.0.2 @@ -10250,6 +10261,7 @@ packages: /available-typed-arrays@1.0.5: resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} engines: {node: '>= 0.4'} + requiresBuild: true /aws-sign2@0.7.0: resolution: {integrity: sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==} @@ -10432,6 +10444,7 @@ packages: /base-64@1.0.0: resolution: {integrity: sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==} + requiresBuild: true /base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} @@ -10647,6 +10660,7 @@ packages: /buffer-writer@2.0.0: resolution: {integrity: sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==} engines: {node: '>=4'} + requiresBuild: true /buffer@5.6.0: resolution: {integrity: sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==} @@ -10997,6 +11011,7 @@ packages: /chownr@2.0.0: resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} engines: {node: '>=10'} + requiresBuild: true /chroma-js@2.4.2: resolution: {integrity: sha512-U9eDw6+wt7V8z5NncY2jJfZa+hUH8XEj8FQHgFJTrUFnJfXYf4Ml4adI2vXZOjqRDpFWtYVWypDfZwnJ+HIR4A==} @@ -12028,6 +12043,7 @@ packages: /define-lazy-prop@2.0.0: resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} engines: {node: '>=8'} + requiresBuild: true /define-lazy-prop@3.0.0: resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} @@ -12037,6 +12053,7 @@ packages: /define-properties@1.2.0: resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==} engines: {node: '>= 0.4'} + requiresBuild: true dependencies: has-property-descriptors: 1.0.0 object-keys: 1.1.1 @@ -12458,6 +12475,7 @@ packages: /es-abstract@1.22.1: resolution: {integrity: sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==} engines: {node: '>= 0.4'} + requiresBuild: true dependencies: array-buffer-byte-length: 1.0.0 arraybuffer.prototype.slice: 1.0.1 @@ -12541,6 +12559,7 @@ packages: /es-set-tostringtag@2.0.1: resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} engines: {node: '>= 0.4'} + requiresBuild: true dependencies: get-intrinsic: 1.2.1 has: 1.0.3 @@ -12555,6 +12574,7 @@ packages: /es-to-primitive@1.2.1: resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} engines: {node: '>= 0.4'} + requiresBuild: true dependencies: is-callable: 1.2.7 is-date-object: 1.0.5 @@ -12992,6 +13012,7 @@ packages: /extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + requiresBuild: true /extendable-error@0.1.7: resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} @@ -13035,6 +13056,7 @@ packages: /fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + requiresBuild: true /fast-diff@1.3.0: resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} @@ -13056,6 +13078,7 @@ packages: /fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + requiresBuild: true /fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} @@ -13339,6 +13362,7 @@ packages: /for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + requiresBuild: true dependencies: is-callable: 1.2.7 @@ -13476,6 +13500,7 @@ packages: /fs-minipass@2.1.0: resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} engines: {node: '>= 8'} + requiresBuild: true dependencies: minipass: 3.3.6 @@ -13495,6 +13520,7 @@ packages: /function.prototype.name@1.1.5: resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==} engines: {node: '>= 0.4'} + requiresBuild: true dependencies: call-bind: 1.0.2 define-properties: 1.2.0 @@ -13503,6 +13529,7 @@ packages: /functions-have-names@1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + requiresBuild: true /fuzzy@0.1.3: resolution: {integrity: sha512-/gZffu4ykarLrCiP3Ygsa86UAo1E5vEVlvTrpkKywXSbP9Xhln3oSp9QSV57gEq3JFFpGJ4GZ+5zdEp3FcUh4w==} @@ -13642,6 +13669,7 @@ packages: /get-symbol-description@1.0.0: resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} engines: {node: '>= 0.4'} + requiresBuild: true dependencies: call-bind: 1.0.2 get-intrinsic: 1.2.1 @@ -13763,6 +13791,7 @@ packages: /globalthis@1.0.3: resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} engines: {node: '>= 0.4'} + requiresBuild: true dependencies: define-properties: 1.2.0 @@ -13817,6 +13846,7 @@ packages: /gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + requiresBuild: true dependencies: get-intrinsic: 1.2.1 @@ -13995,6 +14025,7 @@ packages: /has-bigints@1.0.2: resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + requiresBuild: true /has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} @@ -14006,6 +14037,7 @@ packages: /has-property-descriptors@1.0.0: resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} + requiresBuild: true dependencies: get-intrinsic: 1.2.1 @@ -14020,6 +14052,7 @@ packages: /has-tostringtag@1.0.0: resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} engines: {node: '>= 0.4'} + requiresBuild: true dependencies: has-symbols: 1.0.3 @@ -14173,6 +14206,7 @@ packages: /http-cache-semantics@4.1.1: resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} + requiresBuild: true /http-errors@2.0.0: resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} @@ -14203,6 +14237,7 @@ packages: /http-proxy-agent@5.0.0: resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} engines: {node: '>= 6'} + requiresBuild: true dependencies: '@tootallnate/once': 2.0.0 agent-base: 6.0.2 @@ -14296,6 +14331,7 @@ packages: /iconv-lite@0.6.3: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} + requiresBuild: true dependencies: safer-buffer: 2.1.2 @@ -14347,10 +14383,12 @@ packages: /imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} + requiresBuild: true /indent-string@4.0.0: resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} engines: {node: '>=8'} + requiresBuild: true /individual@3.0.0: resolution: {integrity: sha512-rUY5vtT748NMRbEMrTNiFfy29BgGZwGXUi2NFUVMWQrogSLzlJvQV9eeMWi+g1aVaQ53tpyLAQtd5x/JH0Nh1g==} @@ -14406,6 +14444,7 @@ packages: /internal-slot@1.0.5: resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} engines: {node: '>= 0.4'} + requiresBuild: true dependencies: get-intrinsic: 1.2.1 has: 1.0.3 @@ -14439,6 +14478,7 @@ packages: /ip@2.0.0: resolution: {integrity: sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==} + requiresBuild: true /ipaddr.js@1.9.1: resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} @@ -14470,6 +14510,7 @@ packages: /is-array-buffer@3.0.2: resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} + requiresBuild: true dependencies: call-bind: 1.0.2 get-intrinsic: 1.2.1 @@ -14490,6 +14531,7 @@ packages: /is-bigint@1.0.4: resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + requiresBuild: true dependencies: has-bigints: 1.0.2 @@ -14502,6 +14544,7 @@ packages: /is-boolean-object@1.1.2: resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} engines: {node: '>= 0.4'} + requiresBuild: true dependencies: call-bind: 1.0.2 has-tostringtag: 1.0.0 @@ -14520,6 +14563,7 @@ packages: /is-callable@1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} + requiresBuild: true /is-ci@3.0.1: resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==} @@ -14536,6 +14580,7 @@ packages: /is-date-object@1.0.5: resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} engines: {node: '>= 0.4'} + requiresBuild: true dependencies: has-tostringtag: 1.0.0 @@ -14551,6 +14596,7 @@ packages: resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} engines: {node: '>=8'} hasBin: true + requiresBuild: true /is-docker@3.0.0: resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} @@ -14657,10 +14703,12 @@ packages: /is-negative-zero@2.0.2: resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} engines: {node: '>= 0.4'} + requiresBuild: true /is-number-object@1.0.7: resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} engines: {node: '>= 0.4'} + requiresBuild: true dependencies: has-tostringtag: 1.0.0 @@ -14722,6 +14770,7 @@ packages: /is-regex@1.1.4: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} + requiresBuild: true dependencies: call-bind: 1.0.2 has-tostringtag: 1.0.0 @@ -14732,6 +14781,7 @@ packages: /is-shared-array-buffer@1.0.2: resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} + requiresBuild: true dependencies: call-bind: 1.0.2 @@ -14746,6 +14796,7 @@ packages: /is-string@1.0.7: resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} engines: {node: '>= 0.4'} + requiresBuild: true dependencies: has-tostringtag: 1.0.0 @@ -14758,17 +14809,20 @@ packages: /is-symbol@1.0.4: resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} engines: {node: '>= 0.4'} + requiresBuild: true dependencies: has-symbols: 1.0.3 /is-typed-array@1.1.12: resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} engines: {node: '>= 0.4'} + requiresBuild: true dependencies: which-typed-array: 1.1.11 /is-typedarray@1.0.0: resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} + requiresBuild: true dev: false /is-unicode-supported@0.1.0: @@ -14791,6 +14845,7 @@ packages: /is-weakref@1.0.2: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + requiresBuild: true dependencies: call-bind: 1.0.2 @@ -14808,6 +14863,7 @@ packages: /is-wsl@2.2.0: resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} engines: {node: '>=8'} + requiresBuild: true dependencies: is-docker: 2.2.1 @@ -14820,6 +14876,7 @@ packages: /isarray@2.0.5: resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + requiresBuild: true /isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} @@ -15555,6 +15612,7 @@ packages: /json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + requiresBuild: true /json-schema-traverse@1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} @@ -15700,6 +15758,7 @@ packages: /jwa@2.0.0: resolution: {integrity: sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==} + requiresBuild: true dependencies: buffer-equal-constant-time: 1.0.1 ecdsa-sig-formatter: 1.0.11 @@ -15713,6 +15772,7 @@ packages: /jws@4.0.0: resolution: {integrity: sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==} + requiresBuild: true dependencies: jwa: 2.0.0 safe-buffer: 5.2.1 @@ -17037,6 +17097,7 @@ packages: /minipass@5.0.0: resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} engines: {node: '>=8'} + requiresBuild: true /minisearch@6.1.0: resolution: {integrity: sha512-PNxA/X8pWk+TiqPbsoIYH0GQ5Di7m6326/lwU/S4mlo4wGQddIcf/V//1f9TB0V4j59b57b+HZxt8h3iMROGvg==} @@ -17045,6 +17106,7 @@ packages: /minizlib@2.1.2: resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} engines: {node: '>= 8'} + requiresBuild: true dependencies: minipass: 3.3.6 yallist: 4.0.0 @@ -17624,10 +17686,12 @@ packages: /object-keys@1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} + requiresBuild: true /object.assign@4.1.4: resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} engines: {node: '>= 0.4'} + requiresBuild: true dependencies: call-bind: 1.0.2 define-properties: 1.2.0 @@ -17732,6 +17796,7 @@ packages: /open@8.4.2: resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} engines: {node: '>=12'} + requiresBuild: true dependencies: define-lazy-prop: 2.0.0 is-docker: 2.2.1 @@ -17902,6 +17967,7 @@ packages: /p-map@4.0.0: resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} engines: {node: '>=10'} + requiresBuild: true dependencies: aggregate-error: 3.1.0 @@ -17946,6 +18012,7 @@ packages: /packet-reader@1.0.0: resolution: {integrity: sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==} + requiresBuild: true /pako@0.2.9: resolution: {integrity: sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==} @@ -18167,6 +18234,7 @@ packages: /pg-connection-string@2.6.2: resolution: {integrity: sha512-ch6OwaeaPYcova4kKZ15sbJ2hKb/VP48ZD2gE7i1J+L4MspCtBMAx8nMgz7bksc7IojCIIWuEhHibSMFH8m8oA==} + requiresBuild: true /pg-cursor@2.10.2(pg@8.10.0): resolution: {integrity: sha512-fqn5FBDMu2TmecI205rD1Oi/85RtE/iBOP5amN1gaLdnkGGvA8+OsolzkUqnof1zsAgnvwO3LymKgvFlVZAlbw==} @@ -18179,9 +18247,11 @@ packages: /pg-int8@1.0.1: resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==} engines: {node: '>=4.0.0'} + requiresBuild: true /pg-pool@3.6.1(pg@8.10.0): resolution: {integrity: sha512-jizsIzhkIitxCGfPRzJn1ZdcosIt3pz9Sh3V01fm1vZnbnCMgmGl5wvGGdNN2EL9Rmb0EcFoCkixH4Pu+sP9Og==} + requiresBuild: true peerDependencies: pg: '>=8.0' dependencies: @@ -18190,6 +18260,7 @@ packages: /pg-pool@3.6.1(pg@8.11.0): resolution: {integrity: sha512-jizsIzhkIitxCGfPRzJn1ZdcosIt3pz9Sh3V01fm1vZnbnCMgmGl5wvGGdNN2EL9Rmb0EcFoCkixH4Pu+sP9Og==} + requiresBuild: true peerDependencies: pg: '>=8.0' dependencies: @@ -18197,6 +18268,7 @@ packages: /pg-protocol@1.6.0: resolution: {integrity: sha512-M+PDm637OY5WM307051+bsDia5Xej6d9IR4GwJse1qA1DIhiKlksvrneZOYQq42OM+spubpcNYEo2FcKQrDk+Q==} + requiresBuild: true /pg-query-stream@4.5.0(pg@8.10.0): resolution: {integrity: sha512-9slxIXMssuqKUVyCtuVU5/pr2+RLTKva5VE90PFzi6Mi8o3crbyZQvReoWJimgm9c1zY2+Jv3lvYYsqvaKmQ4g==} @@ -18210,6 +18282,7 @@ packages: /pg-types@2.2.0: resolution: {integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==} engines: {node: '>=4'} + requiresBuild: true dependencies: pg-int8: 1.0.1 postgres-array: 2.0.0 @@ -18257,6 +18330,7 @@ packages: /pgpass@1.0.5: resolution: {integrity: sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==} + requiresBuild: true dependencies: split2: 4.2.0 @@ -18813,18 +18887,22 @@ packages: /postgres-array@2.0.0: resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==} engines: {node: '>=4'} + requiresBuild: true /postgres-bytea@1.0.0: resolution: {integrity: sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==} engines: {node: '>=0.10.0'} + requiresBuild: true /postgres-date@1.0.7: resolution: {integrity: sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==} engines: {node: '>=0.10.0'} + requiresBuild: true /postgres-interval@1.2.0: resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==} engines: {node: '>=0.10.0'} + requiresBuild: true dependencies: xtend: 4.0.2 @@ -19020,6 +19098,7 @@ packages: /psl@1.9.0: resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} + requiresBuild: true /pstree.remy@1.1.8: resolution: {integrity: sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==} @@ -19140,6 +19219,7 @@ packages: /punycode@2.3.0: resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} engines: {node: '>=6'} + requiresBuild: true /puppeteer-core@2.1.1: resolution: {integrity: sha512-n13AWriBMPYxnpbb6bnaY5YoY6rGj8vPLrz6CZF3o0qJNEwlcfJVxBzYZ0NJsQ21UbdJoijPCDrM++SUVEz7+w==} @@ -19536,6 +19616,7 @@ packages: /regexp.prototype.flags@1.5.0: resolution: {integrity: sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==} engines: {node: '>= 0.4'} + requiresBuild: true dependencies: call-bind: 1.0.2 define-properties: 1.2.0 @@ -20051,6 +20132,7 @@ packages: /safe-array-concat@1.0.0: resolution: {integrity: sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==} engines: {node: '>=0.4'} + requiresBuild: true dependencies: call-bind: 1.0.2 get-intrinsic: 1.2.1 @@ -20078,6 +20160,7 @@ packages: /safe-regex-test@1.0.0: resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} + requiresBuild: true dependencies: call-bind: 1.0.2 get-intrinsic: 1.2.1 @@ -20894,6 +20977,7 @@ packages: /string.prototype.trim@1.2.7: resolution: {integrity: sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==} engines: {node: '>= 0.4'} + requiresBuild: true dependencies: call-bind: 1.0.2 define-properties: 1.2.0 @@ -20901,6 +20985,7 @@ packages: /string.prototype.trimend@1.0.6: resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} + requiresBuild: true dependencies: call-bind: 1.0.2 define-properties: 1.2.0 @@ -20908,6 +20993,7 @@ packages: /string.prototype.trimstart@1.0.6: resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==} + requiresBuild: true dependencies: call-bind: 1.0.2 define-properties: 1.2.0 @@ -21328,6 +21414,7 @@ packages: /tar@6.2.0: resolution: {integrity: sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==} engines: {node: '>=10'} + requiresBuild: true dependencies: chownr: 2.0.0 fs-minipass: 2.1.0 @@ -21527,6 +21614,11 @@ packages: engines: {node: '>=14.0.0'} dev: true + /tinypool@0.8.1: + resolution: {integrity: sha512-zBTCK0cCgRROxvs9c0CGK838sPkeokNGdQVUUwHAbynHFlmyJYj825f/oRs528HaIJ97lo0pLIlDUzwN+IorWg==} + engines: {node: '>=14.0.0'} + dev: false + /tinyqueue@2.0.3: resolution: {integrity: sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA==} dev: true @@ -21541,12 +21633,6 @@ packages: engines: {node: '>=12'} dev: true - /tmp-promise@3.0.3: - resolution: {integrity: sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==} - dependencies: - tmp: 0.2.1 - dev: false - /tmp@0.0.33: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} engines: {node: '>=0.6.0'} @@ -21883,6 +21969,7 @@ packages: /typed-array-buffer@1.0.0: resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} engines: {node: '>= 0.4'} + requiresBuild: true dependencies: call-bind: 1.0.2 get-intrinsic: 1.2.1 @@ -21891,6 +21978,7 @@ packages: /typed-array-byte-length@1.0.0: resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} engines: {node: '>= 0.4'} + requiresBuild: true dependencies: call-bind: 1.0.2 for-each: 0.3.3 @@ -21900,6 +21988,7 @@ packages: /typed-array-byte-offset@1.0.0: resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} engines: {node: '>= 0.4'} + requiresBuild: true dependencies: available-typed-arrays: 1.0.5 call-bind: 1.0.2 @@ -21909,6 +21998,7 @@ packages: /typed-array-length@1.0.4: resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} + requiresBuild: true dependencies: call-bind: 1.0.2 for-each: 0.3.3 @@ -22017,6 +22107,7 @@ packages: /unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + requiresBuild: true dependencies: call-bind: 1.0.2 has-bigints: 1.0.2 @@ -22285,6 +22376,7 @@ packages: /uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + requiresBuild: true dependencies: punycode: 2.3.0 @@ -23034,6 +23126,7 @@ packages: /which-boxed-primitive@1.0.2: resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + requiresBuild: true dependencies: is-bigint: 1.0.4 is-boolean-object: 1.1.2 @@ -23083,6 +23176,7 @@ packages: /which-typed-array@1.1.11: resolution: {integrity: sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==} engines: {node: '>= 0.4'} + requiresBuild: true dependencies: available-typed-arrays: 1.0.5 call-bind: 1.0.2