Import: Do task in a separate worker (#19691)

Co-authored-by: Pascal Jufer <pascal-jufer@bluewin.ch>
Co-authored-by: ian <licitdev@gmail.com>
This commit is contained in:
José Varela
2023-10-04 10:39:40 +01:00
committed by GitHub
parent 4b26bfad1d
commit f96eda89e1
11 changed files with 244 additions and 44 deletions

View File

@@ -0,0 +1,5 @@
---
"@directus/api": patch
---
Prevented slow down of the main thread by moving file import to worker threads

View File

@@ -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",

View File

@@ -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));

View File

@@ -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';

View File

@@ -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));
}

View File

@@ -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<File>;
}
) {
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. <a href="${href}">Click here to view.</a>
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. <a href="${href}">Click here to view.</a>
message: `Please contact your system administrator for more information.`,
});
}
} finally {
await tmpFile?.cleanup();
}
}

View File

@@ -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';

14
api/src/worker-pool.ts Normal file
View File

@@ -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;
}

View File

@@ -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';

View File

@@ -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,
};
}

112
pnpm-lock.yaml generated
View File

@@ -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