From eec173c83ead0a0054f689e5d3b1d1170d462b9e Mon Sep 17 00:00:00 2001 From: Jake Holland Date: Thu, 19 Jun 2025 00:17:25 +0100 Subject: [PATCH 01/12] Swap jest to vitest This stops jest being the limiting factor which is stopping the use of ESM only packages --- .babelrc | 27 ----------------------- .npmignore | 2 +- package.json | 23 ++++++-------------- tests/unit/document.spec.js | 4 ++-- tests/unit/font.spec.js | 6 ++++-- tests/unit/png.spec.js | 4 +++- tests/visual/vector.spec.js | 43 ++++++++++++++++++++----------------- vitest.config.js | 8 +++++++ 8 files changed, 48 insertions(+), 69 deletions(-) delete mode 100644 .babelrc create mode 100644 vitest.config.js diff --git a/.babelrc b/.babelrc deleted file mode 100644 index bfe88dc1..00000000 --- a/.babelrc +++ /dev/null @@ -1,27 +0,0 @@ -{ - "presets": [ - [ - "@babel/preset-env", - { - "modules": false, - "targets": { - "node": "18" - } - } - ] - ], - "env": { - "test": { - "presets": [ - [ - "@babel/preset-env", - { - "targets": { - "node": "18" - } - } - ] - ] - } - } -} \ No newline at end of file diff --git a/.npmignore b/.npmignore index 45b172f5..6e79c9f1 100644 --- a/.npmignore +++ b/.npmignore @@ -2,7 +2,6 @@ .git-blame-ignore-revs .prettierrc .prettierignore -.babelrc node-zlib/ node-modules/ CONTRIBUTING.md @@ -19,3 +18,4 @@ index.html yarn.lock rollup.config.js eslint.config.mjs +vitest.config.js diff --git a/package.json b/package.json index fb007cb8..8b950a8f 100644 --- a/package.json +++ b/package.json @@ -38,15 +38,15 @@ "eslint": "^9.17.0", "gh-pages": "^6.2.0", "globals": "^15.14.0", - "jest": "^29.7.0", - "jest-environment-jsdom": "^29.7.0", + "jest-diff": "^30.0.1", "jest-image-snapshot": "^6.4.0", "markdown": "~0.5.0", "pdfjs-dist": "^2.14.305", "prettier": "3.4.2", "pug": "^3.0.3", "rollup": "^2.79.2", - "rollup-plugin-copy": "^3.5.0" + "rollup-plugin-copy": "^3.5.0", + "vitest": "^3.2.4" }, "dependencies": { "crypto-js": "^4.2.0", @@ -66,9 +66,9 @@ "docs": "npm run pdf-guide && npm run website && npm run browserify-example", "lint": "eslint {lib,tests}/**/*.js", "prettier": "prettier lib tests docs", - "test": "jest -i --env=node", - "test:visual": "jest visual/ -i --env=node", - "test:unit": "jest unit/ --env=node" + "test": "vitest run", + "test:visual": "vitest run visual/", + "test:unit": "vitest run unit/" }, "main": "js/pdfkit.js", "module": "js/pdfkit.es.js", @@ -80,14 +80,5 @@ "engine": [ "node >= v18.0.0" ], - "jest": { - "testEnvironment": "jest-environment-jsdom", - "testPathIgnorePatterns": [ - "/node_modules/", - "/examples/" - ], - "setupFilesAfterEnv": [ - "/tests/unit/setupTests.js" - ] } -} \ No newline at end of file +} diff --git a/tests/unit/document.spec.js b/tests/unit/document.spec.js index 16441787..baed7813 100644 --- a/tests/unit/document.spec.js +++ b/tests/unit/document.spec.js @@ -6,11 +6,11 @@ describe('PDFDocument', () => { let fontSpy; beforeEach(() => { - fontSpy = jest.spyOn(PDFDocument.prototype, 'font').mockReturnThis(); + fontSpy = vi.spyOn(PDFDocument.prototype, 'font').mockReturnThis(); }); afterEach(() => { - fontSpy.mockRestore(); + vi.restoreAllMocks(); }); test('not defined', () => { diff --git a/tests/unit/font.spec.js b/tests/unit/font.spec.js index ae3c8f2c..4b945a6c 100644 --- a/tests/unit/font.spec.js +++ b/tests/unit/font.spec.js @@ -3,13 +3,15 @@ import PDFFontFactory from '../../lib/font_factory'; import { logData } from './helpers'; describe('EmbeddedFont', () => { + afterEach(() => vi.restoreAllMocks()); + test('no fontLayoutCache option', () => { const document = new PDFDocument(); const font = PDFFontFactory.open( document, 'tests/fonts/Roboto-Regular.ttf', ); - const runSpy = jest.spyOn(font, 'layoutRun'); + const runSpy = vi.spyOn(font, 'layoutRun'); font.layout('test'); font.layout('test'); @@ -25,7 +27,7 @@ describe('EmbeddedFont', () => { document, 'tests/fonts/Roboto-Regular.ttf', ); - const runSpy = jest.spyOn(font, 'layoutRun'); + const runSpy = vi.spyOn(font, 'layoutRun'); font.layout('test'); font.layout('test'); diff --git a/tests/unit/png.spec.js b/tests/unit/png.spec.js index 9c6cd521..b608ea5a 100644 --- a/tests/unit/png.spec.js +++ b/tests/unit/png.spec.js @@ -25,7 +25,7 @@ describe('PNGImage', () => { img.finalize(); }; const finalizeFn = img.finalize; - jest.spyOn(img, 'finalize').mockImplementation(() => finalizeFn.call(img)); + vi.spyOn(img, 'finalize').mockImplementation(() => finalizeFn.call(img)); img.embed(document); return img; }; @@ -34,6 +34,8 @@ describe('PNGImage', () => { document = new PDFDocument(); }); + afterEach(() => vi.restoreAllMocks()); + test('RGB', () => { // ImageWidth = 400 // ImageHeight = 533 diff --git a/tests/visual/vector.spec.js b/tests/visual/vector.spec.js index 64401d3a..7a2f4082 100644 --- a/tests/visual/vector.spec.js +++ b/tests/visual/vector.spec.js @@ -24,29 +24,32 @@ describe('vector', function () { }); test('complex svg', function () { - return runDocTest(function (doc) { - var i, len, part; - doc.translate(220, 300); - for (i = 0, len = tiger.length; i < len; i++) { - part = tiger[i]; - doc.save(); - doc.path(part.path); - if (part['stroke-width']) { - doc.lineWidth(part['stroke-width']); - } - if (part.fill !== 'none' && part.stroke !== 'none') { - doc.fillAndStroke(part.fill, part.stroke); - } else { - if (part.fill !== 'none') { - doc.fill(part.fill); + return runDocTest( + { failureThreshold: 0.0001, failureThresholdType: 'percent' }, + function (doc) { + var i, len, part; + doc.translate(220, 300); + for (i = 0, len = tiger.length; i < len; i++) { + part = tiger[i]; + doc.save(); + doc.path(part.path); + if (part['stroke-width']) { + doc.lineWidth(part['stroke-width']); } - if (part.stroke !== 'none') { - doc.stroke(part.stroke); + if (part.fill !== 'none' && part.stroke !== 'none') { + doc.fillAndStroke(part.fill, part.stroke); + } else { + if (part.fill !== 'none') { + doc.fill(part.fill); + } + if (part.stroke !== 'none') { + doc.stroke(part.stroke); + } } + doc.restore(); } - doc.restore(); - } - }); + }, + ); }); test('svg path', function () { diff --git a/vitest.config.js b/vitest.config.js new file mode 100644 index 00000000..272d7575 --- /dev/null +++ b/vitest.config.js @@ -0,0 +1,8 @@ +import { defineConfig } from 'vitest/config'; + +export default defineConfig({ + test: { + globals: true, + setupFiles: './tests/unit/setupTests.js', + }, +}); From 203744cc6e4a28118b8025a54fae6eaffaf481e9 Mon Sep 17 00:00:00 2001 From: Jake Holland Date: Fri, 20 Jun 2025 11:07:06 +0100 Subject: [PATCH 02/12] First pass of new text renderer --- lib/mixins/fonts.js | 11 +- lib/text/layout.js | 604 ++++++ lib/text/types.js | 118 + lib/utils.js | 142 -- lib/utils/bounds.js | 117 + lib/utils/index.js | 6 + lib/utils/math.js | 29 + lib/utils/normalize.js | 88 + lib/utils/number.js | 28 + lib/utils/rotate.js | 47 + lib/utils/types.js | 28 + package.json | 6 +- rollup.config.js | 3 +- .../text-spec-js-text-rewrite-1-snap.png | Bin 0 -> 30546 bytes tests/visual/text.spec.js | 87 +- yarn.lock | 1929 ++++++----------- 16 files changed, 1794 insertions(+), 1449 deletions(-) create mode 100644 lib/text/layout.js create mode 100644 lib/text/types.js delete mode 100644 lib/utils.js create mode 100644 lib/utils/bounds.js create mode 100644 lib/utils/index.js create mode 100644 lib/utils/math.js create mode 100644 lib/utils/normalize.js create mode 100644 lib/utils/number.js create mode 100644 lib/utils/rotate.js create mode 100644 lib/utils/types.js create mode 100644 tests/visual/__image_snapshots__/text-spec-js-text-rewrite-1-snap.png diff --git a/lib/mixins/fonts.js b/lib/mixins/fonts.js index 9b8d915d..852978bd 100644 --- a/lib/mixins/fonts.js +++ b/lib/mixins/fonts.js @@ -1,5 +1,4 @@ import PDFFontFactory from '../font_factory'; -import { CM_TO_IN, IN_TO_PT, MM_TO_CM, PC_TO_PT, PX_TO_IN } from '../utils'; const isEqualFont = (font1, font2) => { // compare font checksum @@ -115,6 +114,10 @@ export default { return this._font.lineHeight(this._fontSize, includeGap); }, + currentLineGap() { + return (this._font.lineGap * this._fontSize) / 1000; + }, + registerFont(name, src, family) { this._registeredFonts[name] = { src, @@ -203,3 +206,9 @@ export default { return multiplier * Number(match[1]); }, }; + +const MM_TO_CM = 1 / 10; // 1MM = 1CM +const CM_TO_IN = 1 / 2.54; // 1CM = 1/2.54 IN +const PX_TO_IN = 1 / 96; // 1 PX = 1/96 IN +const IN_TO_PT = 72; // 1 IN = 72 PT +const PC_TO_PT = 12; // 1 PC = 12 PT diff --git a/lib/text/layout.js b/lib/text/layout.js new file mode 100644 index 00000000..66265a34 --- /dev/null +++ b/lib/text/layout.js @@ -0,0 +1,604 @@ +import { Rules } from '@cto.af/linebreak'; +import { computeInscribedBounds, normalizeAlignment, normalizeRotation, normalizeSides, rotateBox } from '../utils'; + +const SOFT_HYPHEN = '\u00AD'; +const HYPHEN = '-'; + +/* + * TODO: Add backwards compatability for event emitter (if that's something we still want) + * TODO: continued text + * TODO: text transformation + * TODO: sort out document elements like structures and page breaks + * + * Future idea, allow support for inline styling of text e.g. ["Hello", {text: "world", font: "bold"}], or even template literals + */ + +export default class LayoutEngine { + /** + * @param {PDFDocument} doc + * @param {LayoutOptions} [options] + */ + constructor(doc, options) { + /** @type {any} */ + this.doc = doc; + this.options = this._normalizeLayoutOptions(options); + // TODO: This may need to a polyfill + this.segmenter = new Intl.Segmenter(this.options.locales, { granularity: 'grapheme' }); + this.lineBreaker = new Rules({ string: true }); + /** + * Cache computed widths of string to skip processing of equal segments + * @type {Map} + */ + this.widthCache = new Map(); + } + + /** + * Compute the horizon-locked circumscribed bounding box on a block of text. + * + * @note This factors in text rotation (if provided) + * and computes the bounds of where the text would be rendered on the screen. + * + * @example + * ``` + * <───────width───────> + * ╔═══════════▄═══════╗ ˄ + * ║░░░░░░ ██ ██ ║ │ + * ║░90-Θ░░██ ██ ║ h + * ║░░░░░██ t d ██ ║ e + * ║░░░░█ s n █║ i + * ║░░██ r o d ██ ║ g + * ║██ i c r ██ ║ h + * x,y─>*█ F e i ██ ║ t + * ║ ██ S h ██ ║ │ + * ║ ██ T ██ ║ │ + * ╚═════▀▀▀═══════════╝ ˅ + * 'Imagine the characters are also rotated' + * ``` + * + * @param {string} text - The string + * @param {TextOptions} [options] - The options + * + * @returns {{x: number, y: number, width: number, height: number}} + */ + boundsOfString(text, options) { + const textOptions = this._normalizeTextOptions(options); + + // Compute max bounds + const [maxWidth, maxHeight] = computeInscribedBounds( + textOptions.width, + textOptions.height, + textOptions.rotation, + ); + + let contentHeight = 0; + let contentWidth = 0; + + // Use `_constrainedLines()` as we don't care about the formatting applied in `lines()` + for (const [, width, height] of this._constrainedLines(text, maxWidth, maxHeight, textOptions)) { + contentHeight += height; + contentWidth = Math.max(contentWidth, width); + } + + // Lock the bounding box to the horizon + const [x, y, width, height] = rotateBox(textOptions.x, textOptions.y, contentWidth, contentHeight, textOptions.rotation); + return { x, y, width, height }; + } + + /** + * Compute the height of a string at a specified position + * + * @note This factors in text rotation (if provided) + * and computes the vertical height of the text (not the height of the lines) + * i.e. + * ``` + * ╔═══════════▄═══════╗ ˄ + * ║░░░░░░ ██ ██ ║ │ + * ║░90-Θ░░██ ██ ║ h + * ║░░░░░██ t d ██ ║ e + * ║░░░░█ s n █║ i + * ║░░██ r o d ██ ║ g + * ║██ i c r ██ ║ h + * x,y─>*█ F e i ██ ║ t + * ║ ██ S h ██ ║ │ + * ║ ██ T ██ ║ │ + * ╚═════▀▀▀═══════════╝ ˅ + * 'Imagine the characters are also be rotated' + * ``` + * + * @param {string} text - The string + * @param {TextOptions} [options] - The options + * + * @returns {number} + */ + heightOfString(text, options) { + return this.boundsOfString(text, options).height; + } + + /** + * Compute the width of a string at a specified position + * + * @note This factors in text rotation (if provided) + * and computes the horizontal width of the text (not the width of the lines) + * i.e. + * ``` + * <───────width───────> + * ╔═══════════▄═══════╗ + * ║░░░░░░ ██ ██ ║ + * ║░90-Θ░░██ ██ ║ + * ║░░░░░██ t d ██ ║ + * ║░░░░█ s n █║ + * ║░░██ r o d ██ ║ + * ║██ i c r ██ ║ + * x,y─>*█ F e i ██ ║ + * ║ ██ S h ██ ║ + * ║ ██ T ██ ║ + * ╚═════▀▀▀═══════════╝ + * 'Imagine the characters are also rotated' + * ``` + * + * @param {string} text - The string + * @param {TextOptions} [options] - The options + * + * @returns {number} + */ + widthOfString(text, options) { + return this.boundsOfString(text, options).width; + } + + /** + * Render the text to the document + * + * Unlike {@link LayoutEngine.textBox}, this uses the x,y position as the origin of the text, + * this means that text follows the standard PDF text placement logic, + * and can (if rotated) go above the starting x,y position. + * + * ``` + * <───────width───────> + * ╔═══════════▄═══════╗ ˄ + * ║░░░░░░ ██ ██ ║ │ + * ║░90-Θ░░██ ██ ║ h + * ║░░░░░██ t d ██ ║ e + * ║░░░░█ s n █║ i + * ║░░██ r o d ██ ║ g + * ║██ i c r ██ ║ h + * x,y─>*█ F e i ██ ║ t + * ║ ██ S h ██ ║ │ + * ║ ██ T ██ ║ │ + * ╚═════▀▀▀═══════════╝ ˅ + * 'Imagine the characters are also rotated' + * ``` + * + * If you wish for it to be top-left aligned see {@link LayoutEngine.textBox} + * + * @param {string} text - The string + * @param {TextOptions} [options] - customize the rendering of the text + */ + text(text, options) { + text = `${text}`; + const textOpts = this._normalizeTextOptions(options); + + if (textOpts.rotation) { + this.doc.save(); + this.doc.rotate(-textOpts.rotation, { origin: [textOpts.x, textOpts.y] }); + } + + for (const { line, x, y } of this._lines(text, textOpts)) { + // Render each formatted line (ignore rotation as that is set per render not per line) + this._renderFragment(line, x, y, { ...textOpts, rotation: 0 }); + } + if (textOpts.rotation) this.doc.restore(); + } + + /** + * Render text in a box + * + * Unlike {@link LayoutEngine.text}, this uses the x,y position not as the origin of the text, + * but as the origin of the text box, this means that when the text is rotated, + * it does not go outside the origin bounding box. + * + * ``` + * <───────width───────> + * x,y─>*═══════════▄═══════╗ ˄ + * ║░░░░░░ ██ ██ ║ │ + * ║░90-Θ░░██ ██ ║ h + * ║░░░░░██ t d ██ ║ e + * ║░░░░█ s n █║ i + * ║░░██ r o d ██ ║ g + * ║██ i c r ██ ║ h + * ║█ F e i ██ ║ t + * ║ ██ S h ██ ║ │ + * ║ ██ T ██ ║ │ + * ╚═════▀▀▀═══════════╝ ˅ + * 'Imagine the characters are also rotated' + * ``` + * + * @param {string} text - The string + * @param {TextBoxOptions} [options] - customize the rendering of the textbox + */ + textBox(text, options) { + text = `${text}`; + const textBoxOpts = this._normalizeTextBoxOptions(options); + + let dx = 0, dy = 0; + // We only need to know the bounds if either the text is rotated or the border is going to be rendered + if (textBoxOpts.rotation || (textBoxOpts.border && textBoxOpts.borderColor && textBoxOpts.borderOpacity)) { + // We need to know how big the text will be so that we can then offset the text origin + const bounds = this.boundsOfString(text, textBoxOpts); + + // Render the border + // This ignores rotation + this.box(textBoxOpts.x, textBoxOpts.y, bounds.width, bounds.height, { ...textBoxOpts, rotation: 0 }); + + // We offset the text position by the relative shift that the rotation has created + dx = textBoxOpts.x - bounds.x; + dy = textBoxOpts.y - bounds.y; + } + + // Render the text + this.text(text, { ...textBoxOpts, x: textBoxOpts.x + dx, y: textBoxOpts.y + dy }); + } + + box(x, y, width, height, options) { + const { border, borderColor, borderOpacity, rotation } = this._normalizeBoxOptions(options); + + if (!border || !borderColor || !borderOpacity) return; + + if (rotation) { + this.doc.save(); + this.doc.rotate(-rotation, { origin: [x, y] }); + } + + // Combine border, color and opacity + const bco = { + top: [border.top, borderColor.top, borderOpacity.top], + right: [border.right, borderColor.right, borderOpacity.right], + bottom: [border.bottom, borderColor.bottom, borderOpacity.bottom], + left: [border.left, borderColor.left, borderOpacity.left], + }; + + // Optimization: if all sides are the same, we can render as a rectangle + if ([bco.right, bco.bottom, bco.left].every(side => side.every((s, i) => s === bco.top[i]))) { + // Skip if no width or opacity + if (bco.top[0] > 0 && bco.top[2] > 0) { + this.doc + .save() + .lineWidth(bco.top[0]) + .rect(x, y, width, height) + .strokeColor(bco.top[1], bco.top[2]) + .stroke() + .restore(); + } + } else { + // Top + if (bco.top[0] > 0 && bco.top[2] > 0) { + this.doc + .save() + .lineWidth(bco.top[0]) + .moveTo(x, y) + .lineTo(x + width, y) + .strokeColor(bco.top[1], bco.top[2]) + .stroke() + .restore(); + } + // Right + if (bco.right[0] > 0 && bco.right[2] > 0) { + this.doc + .save() + .lineWidth(bco.right[0]) + .moveTo(x + width, y) + .lineTo(x + width, y + height) + .strokeColor(bco.right[1], bco.right[2]) + .stroke() + .restore(); + } + // Bottom + if (bco.bottom[0] > 0 && bco.bottom[2] > 0) { + this.doc + .save() + .lineWidth(bco.bottom[0]) + .moveTo(x + width, y + height) + .lineTo(x, y + height) + .strokeColor(bco.bottom[1], bco.bottom[2]) + .stroke() + .restore(); + } + // Left + if (bco.left[0] > 0 && bco.left[2] > 0) { + this.doc + .save() + .lineWidth(bco.left[0]) + .moveTo(x, y + height) + .lineTo(x, y) + .strokeColor(bco.left[1], bco.left[2]) + .stroke() + .restore(); + } + } + + if (rotation) this.doc.restore(); + } + + /** + * @private + * + * @param {LayoutOptions} [options] + * + * @returns {LayoutOptions} + */ + _normalizeLayoutOptions(options) { + options = options ?? {}; + const normalizedOptions = {}; + + normalizedOptions.locales = options.locales; + + return normalizedOptions; + } + + /** + * @private + * + * @param {TextOptions} [options] + * @returns {NormalizedTextOptions} + */ + _normalizeTextOptions(options) { + options = options ?? {}; + + const normalizedOptions = {}; + normalizedOptions.x = this.doc.sizeToPoint(options.x, this.doc.x); + normalizedOptions.y = this.doc.sizeToPoint(options.y, this.doc.x); + normalizedOptions.width = this.doc.sizeToPoint(options.width, this.doc.page.width - this.doc.page.margins.right - normalizedOptions.x); + normalizedOptions.height = this.doc.sizeToPoint(options.height, this.doc.page.height - this.doc.page.margins.bottom - normalizedOptions.y); + + normalizedOptions.rotation = (options.rotation ?? 0) % 360; + if (normalizedOptions.rotation < 0) normalizedOptions.rotation += 360; + + normalizedOptions.ellipsis = options.ellipsis ?? false; + if (typeof normalizedOptions.ellipsis === 'boolean') normalizedOptions.ellipsis = normalizedOptions.ellipsis ? '…' : ''; + normalizedOptions.ellipsisWidth = this._widthOfSegment(normalizedOptions.ellipsis); + + return normalizedOptions; + } + + /** + * @private + * + * @param {BoxOptions} [options] + * @param {number} [defaultBorder=1] + * @returns {NormalizedBoxOptions} + */ + _normalizeBoxOptions(options, defaultBorder = 1) { + options = options ?? {}; + const normalizedOptions = {}; + normalizedOptions.border = normalizeSides(options.border, defaultBorder); + normalizedOptions.borderColor = normalizeSides(options.borderColor, 'black'); + normalizedOptions.borderOpacity = normalizeSides(options.borderOpacity, 1); + normalizedOptions.rotation = normalizeRotation(options.rotation, 0); + return normalizedOptions; + } + + /** + * @private + * + * @param {TextBoxOptions} [options] + * @returns {NormalizedTextBoxOptions} + */ + _normalizeTextBoxOptions(options) { + options = options ?? {}; + const textOptions = this._normalizeTextOptions(options); + const boxOptions = this._normalizeBoxOptions(options, 0); + + const normalizedOptions = {}; + Object.assign(normalizedOptions, textOptions, boxOptions); + + normalizedOptions.alignContent = normalizeAlignment(options.alignContent, { x: 'left', y: 'top' }); + + return normalizedOptions; + } + + /** + * Fetch the width of a text segment using the current document font. + * This value is also then stored in the cache for reuse + * + * @param {string} text - The text + * @returns {number} + * @private + */ + _widthOfSegment(text) { + if (!text) return 0; + if (!this.widthCache.has(text)) { + this.widthCache.set(text, this.doc._font.widthOfString(text, this.doc._fontSize, this.options.features)); + } + return this.widthCache.get(text); + } + + /** + * Split a string into lines that will fit in the provided bounds + * + * text that does not fit in the bounds will be truncated/ellipsis + * + * @param {string} text - The string + * @param {NormalizedTextOptions} options - The options + * + * @note the returning values do not factor in rotation (as rotation is applied to the entire textbox) + * @returns {Iterator<{line: string, x: number, y: number, width: number, height: number}>} + */ + * _lines(text, options) { + // Compute max bounds + const [maxWidth, maxHeight] = computeInscribedBounds( + options.width, + options.height, + options.rotation, + ); + + // Apply any formatting to the line + let currHeight = options.y; + for (const [line, width, height] of this._constrainedLines(text, maxWidth, maxHeight, options)) { + yield { line, x: options.x, y: currHeight, width, height }; + currHeight += height; + } + } + + /** + * Split a string into lines ensuring they are contained in the bounding box + * + * @param {string} text - The string + * @param {number} maxWidth - The max width of a line + * @param {number} maxHeight - The max height of the text block + * @param {NormalizedTextOptions} options - The options + * + * @returns {Iterator<[line: string, width: number, height: number]>} + */ + * _constrainedLines(text, maxWidth, maxHeight, options) { + // There is no way to have any lines if the maxHeight is 0 + if (maxHeight === 0) return undefined; + + // The current position of the text bottom + let currHeight = 0; + const lineHeight = this.doc.currentLineHeight(); + + // We are unable to fit at least one line in the bounds, so terminate early + if (lineHeight > maxHeight) return undefined; + + const lineGap = this.doc.currentLineGap(); + + let currLine; + for (let newLine of this._widthConstrainedLines(text, maxWidth)) { + // The last character is a soft hyphen - replace it with visible hyphen. + switch (newLine[newLine.length - 1]) { + case SOFT_HYPHEN: + newLine[newLine.length - 1] = HYPHEN; + break; + case '\n': + newLine = newLine.slice(0, -1); + break; + } + + // Compute width of newLine + const newLineWidth = this._widthOfSegment(newLine); + + // Release the current line as we know there is a new one + if (currLine) { + // If the new line can't fit, then we need to truncate the current one and flush + if (currHeight + lineGap + lineHeight > maxHeight) { + let truncatedCurrLine = currLine.line.trimEnd(); + let truncatedCurrLineWidth = this._widthOfSegment(currLine.line); + + if (truncatedCurrLineWidth + options.ellipsisWidth > maxWidth) { + truncatedCurrLine = ''; + truncatedCurrLineWidth = 0; + for (const { segment } of this.segmenter.segment(currLine.line)) { + const segWidth = this._widthOfSegment(segment); + truncatedCurrLineWidth += segWidth; + + if (truncatedCurrLineWidth + options.ellipsisWidth > maxWidth) break; + truncatedCurrLine += segment; + } + } + + if (options.ellipsis) { + truncatedCurrLine += options.ellipsis; + truncatedCurrLineWidth += options.ellipsisWidth; + } + + // No gap as it's the last line + yield [truncatedCurrLine, truncatedCurrLineWidth, lineHeight]; + + // No new lines can fit so terminate early + return undefined; + } + + // Flush the current line as we know it can fit + yield [currLine.line, currLine.width, lineHeight + lineGap]; + } + + currLine = { line: newLine, width: newLineWidth }; + currHeight += lineHeight + lineGap; + } + + if (currLine) { + // No gap as it's the last line + yield [currLine.line, currLine.width, lineHeight]; + } + } + + /** + * Split a string into lines ensuring they are contained in the width option + * + * @param {string} text - The string + * @param {number} maxWidth - The max width of a line + * + * @returns {Iterator} + */ + * _widthConstrainedLines(text, maxWidth) { + // There is no way to have any lines if the maxWidth is 0 + if (maxWidth === 0) return undefined; + + let buffer = ''; + let bufferLen = 0; + + // Find line break opportunities + for (const brk of this.lineBreaker.breaks(text)) { + const seg = brk.string; + const segWidth = this._widthOfSegment(seg); + + + // Check if the current segment will fit on the current line + if (bufferLen + segWidth <= maxWidth) { + buffer += seg; + bufferLen += segWidth; + } else { + // Terminate the previous line + if (buffer) yield buffer; + + // if the segment itself is too wide, then split it by graphemes + if (segWidth <= maxWidth) { + // Move string to new line + bufferLen = segWidth; + buffer = seg; + } else { + buffer = ''; + bufferLen = 0; + + for (const data of this.segmenter.segment(seg)) { + const grapheme = data.segment; + const graphemeWidth = this._widthOfSegment(grapheme); + if (bufferLen + graphemeWidth > maxWidth) { + if (buffer) yield buffer; + + bufferLen = graphemeWidth; + buffer = grapheme; + } else { + // Add grapheme to the buffer + buffer += grapheme; + bufferLen += graphemeWidth; + } + } + } + } + + // Force a break if required + if (brk.required && buffer) { + yield buffer; + buffer = ''; + bufferLen = 0; + } + } + // Flush any remaining text + if (buffer) yield buffer; + } + + /** + * @private + * + * Write the fragment to the document + * + * @param {string} frag + * @param {number} x + * @param {number} y + * @param {NormalizedTextOptions} options + */ + _renderFragment(frag, x, y, options) { + //TODO: replace fragment generation with custom system + this.doc._fragment(frag, x, y, options); + } +} diff --git a/lib/text/types.js b/lib/text/types.js new file mode 100644 index 00000000..d096bb83 --- /dev/null +++ b/lib/text/types.js @@ -0,0 +1,118 @@ +/** + * @typedef {Object} LayoutOptions + * + * @property {Intl.LocalesArgument} [locales] + * Locale(s) for use in the grapheme segmenter + * + * Defaults to system locale + * @property {string[]} [features] + * The font features + */ + +/** + * @typedef {Object} TextOptions + * + * @property {Size} [x] + * X position of the text + * + * Defaults to this.doc.x + * @property {Size} [y] + * Y position of the text + * + * Defaults to this.doc.y + * @property {Size} [width] + * The max width of the content + * + * Defaults to the remaining document content width + * @property {Size} [height] + * The max height of the content + * + * Defaults to the remaining document content height + * @property {Font} [font] + * Font options for the cell + * + * Defaults to the current document font + * @property {Align} [align] + * The alignment of the text + * + * Defaults to left + * @property {number} [rotation] + * The rotation of the text (in degrees) + * + * This rotation is applied anti-clockwise from the top-left corner of the text. + * + * Defaults to 0 + * @property {string | boolean} [ellipsis] + * What character to append to indicate overflowing text + * + * Defaults to false (aka ''), the text will simply truncate + */ + +/** + * @typedef {TextOptions} NormalizedTextOptions + * + * @property {number} x + * @property {number} y + * @property {number} width + * @property {number} height + * @property {number} rotation + * @property {string} ellipsis + * @property {number} ellipsisWidth + */ + +/** + * @typedef {Object} BoxOptions + * + * @property {SideDefinition} [border] + * The width of the box borders + * + * Defaults to 0 (no border) + * @property {SideDefinition} [borderColor] + * The color of the box borders + * + * Defaults to black + * @property {SideDefinition} [borderOpacity] + * The opacity of the box borders + * + * Defaults to 1 + * @property {number} [rotation] + * The rotation of the box (in degrees) + * + * Defaults to 0 + */ + +/** + * @typedef {BoxOptions} NormalizedBoxOptions + * + * @property {ExpandedSideDefinition} border + * @property {ExpandedSideDefinition} borderColor + * @property {ExpandedSideDefinition} borderOpacity + * @property {number} rotation + */ + +/** + * @typedef {TextOptions & BoxOptions} TextBoxOptions + * + * @property {Size} [x] + * X position of the text box + * + * Defaults to this.doc.x + * @property {Size} [y] + * Y position of the text box + * + * Defaults to this.doc.y + * @property {SideDefinition} [padding] + * Controls the padding of the text relative to the box + * + * Defaults to `0` + * @property {Align} [alignContent] + * Sets the alignment of the box's text + * + * Defaults to `{x: 'left', y: 'top'}` + */ + +/** + * @typedef {NormalizedTextOptions & NormalizedBoxOptions} NormalizedTextBoxOptions + * + * @property {ExpandedAlign} alignContent + */ diff --git a/lib/utils.js b/lib/utils.js deleted file mode 100644 index 6cab97f7..00000000 --- a/lib/utils.js +++ /dev/null @@ -1,142 +0,0 @@ -const fArray = new Float32Array(1); -const uArray = new Uint32Array(fArray.buffer); - -export function PDFNumber(n) { - // PDF numbers are strictly 32bit - // so convert this number to a 32bit number - // @see ISO 32000-1 Annex C.2 (real numbers) - const rounded = Math.fround(n); - if (rounded <= n) return rounded; - - // Will have to perform 32bit float truncation - fArray[0] = n; - - // Get the 32-bit representation as integer and shift bits - if (n <= 0) { - uArray[0] += 1; - } else { - uArray[0] -= 1; - } - - // Return the float value - return fArray[0]; -} - -/** - * Measurement of size - * - * @typedef {number | `${number}` | `${number}${'em' | 'in' | 'px' | 'cm' | 'mm' | 'pc' | 'ex' | 'ch' | 'rem' | 'vw' | 'vmin' | 'vmax' | '%' | 'pt'}`} Size - */ - -/** - * @typedef {Array | string | Array} PDFColor - */ - -/** @typedef {string | Buffer | Uint8Array | ArrayBuffer} PDFFontSource */ -/** - * Side definitions - * - To define all sides, use a single value - * - To define up-down left-right, use a `[Y, X]` array - * - To define each side, use `[top, right, bottom, left]` array - * - Or `{vertical: SideValue, horizontal: SideValue}` - * - Or `{top: SideValue, right: SideValue, bottom: SideValue, left: SideValue}` - * - * @template T - * @typedef {T | [T, T] | [T, T, T, T] | { vertical: T; horizontal: T } | ExpandedSideDefinition} SideDefinition - **/ - -/** - * @template T - * @typedef {{ top: T; right: T; bottom: T; left: T }} ExpandedSideDefinition - */ - -/** - * Convert any side definition into a static structure - * - * @template S - * @template D - * @template O - * @template {S | D} T - * @param {SideDefinition} sides - The sides to convert - * @param {SideDefinition} defaultDefinition - The value to use when no definition is provided - * @param {function(T): O} transformer - The transformation to apply to the sides once normalized - * @returns {ExpandedSideDefinition} - */ -export function normalizeSides( - sides, - defaultDefinition = undefined, - transformer = (v) => v, -) { - if ( - sides == null || - (typeof sides === 'object' && Object.keys(sides).length === 0) - ) { - sides = defaultDefinition; - } - if (sides == null || typeof sides !== 'object') { - sides = { top: sides, right: sides, bottom: sides, left: sides }; - } else if (Array.isArray(sides)) { - if (sides.length === 2) { - sides = { vertical: sides[0], horizontal: sides[1] }; - } else { - sides = { - top: sides[0], - right: sides[1], - bottom: sides[2], - left: sides[3], - }; - } - } - - if ('vertical' in sides || 'horizontal' in sides) { - sides = { - top: sides.vertical, - right: sides.horizontal, - bottom: sides.vertical, - left: sides.horizontal, - }; - } - - return { - top: transformer(sides.top), - right: transformer(sides.right), - bottom: transformer(sides.bottom), - left: transformer(sides.left), - }; -} - -export const MM_TO_CM = 1 / 10; // 1MM = 1CM -export const CM_TO_IN = 1 / 2.54; // 1CM = 1/2.54 IN -export const PX_TO_IN = 1 / 96; // 1 PX = 1/96 IN -export const IN_TO_PT = 72; // 1 IN = 72 PT -export const PC_TO_PT = 12; // 1 PC = 12 PT - -/** - * Get cosine in degrees of a - * - * Rounding errors are handled - * @param a - * @returns {number} - */ -export function cosine(a) { - if (a === 0) return 1; - if (a === 90) return 0; - if (a === 180) return -1; - if (a === 270) return 0; - return Math.cos((a * Math.PI) / 180); -} - -/** - * Get sine in degrees of a - * - * Rounding errors are handled - * @param a - * @returns {number} - */ -export function sine(a) { - if (a === 0) return 0; - if (a === 90) return 1; - if (a === 180) return 0; - if (a === 270) return -1; - return Math.sin((a * Math.PI) / 180); -} diff --git a/lib/utils/bounds.js b/lib/utils/bounds.js new file mode 100644 index 00000000..3e08a580 --- /dev/null +++ b/lib/utils/bounds.js @@ -0,0 +1,117 @@ +import { cosine, sine } from './math'; + +/** + * Given a rectangle ABCD, + * with a fixed side AB of width boundingWidth, + * and a maxHeight BC of boundingHeight. + * + * Find the largest (by area) inscribed rectangle EFGH, + * where the angle Θ is equal to rotation anti-clockwise about the x-axis + * + * @example + * ``` + * <───────────boundingWidth─────────────> + * A══════════════F══════════════════════B ˄ + * ║ ██ ███ ║ │ + * ║ h ██ ██ h ║ │ + * ║ t █ ██ e ║ b + * ║ d ██ ██ i ║ o + * ║ i ██ ██ g ║ u + * ║ w █░░░ ██ h ║ n + * ║ ██░░Θ░░░ ██ t ║ d + * ║██░░░░░░░░░ ██ ║ i + * E█───────────────────────────────██───║ n + * ║ ██ ██ ║ g + * ║ ██ █G H + * ║ ██ ██║ e + * ║ ██ ██ ║ i + * ║ ██ ██ ║ g + * ║ ██ █ ║ h + * ║ ██ ██ ║ t + * ║ ██ ██ ║ │ + * ║ ██ ██ ║ │ + * ║ ██ ██ ║ │ + * D═════════════════════H═══════════════C ˅ + * ``` + * + * @param {number} boundingWidth - The maximum width of the bounding box (Infinity for no limit) + * @param {number} boundingHeight - The maximum height of the bounding box (Infinity for no limit) + * @param {number} rotation - The rotation angle + * + * @returns {[width: number, height: number]} + * - width - corresponds with length EF + * - height - corresponds with length FG + */ +export function computeInscribedBounds(boundingWidth, boundingHeight, rotation) { + if (boundingWidth == null) boundingWidth = Infinity; + if (boundingHeight == null) boundingHeight = Infinity; + + // Shortcut for the base cases + if (rotation === 0 || rotation === 180) return [boundingWidth, boundingHeight]; + if (rotation === 90 || rotation === 270) return [boundingHeight, boundingWidth]; + + let textMaxWidth, textMaxHeight; + + // We use these a lot so pre-compute + const cos = cosine(rotation); + const sin = sine(rotation); + + // From above we can infer + // > AF = EF * cos(Θ) + // > FB = AB - AF + // > FB = FG * sin(Θ) + // Rearrange + // > FG = FB / sin(Θ) + // Substitute + // > FG = (AB - EF*cos(Θ)) / sin(Θ) + // Area of a rectangle + // > A = EF * FG + // Substitute + // > A = EF * (AB - EF*cos(Θ)) / sin(Θ) + // > dA/dEF = (AB - 2*EF*cos(Θ)) / sin(Θ) + // Find peak at dA/dEF = 0 + // > 0 = (AB - 2*EF*cos(Θ)) / sin(Θ) + // > EF = AB / (2*cos(Θ)) + // Substitute + // > FG = (AB - (AB*cos(Θ)) / (2*cos(Θ))) / sin(Θ) + // > FG = AB / (2*sin(Θ)) + // + // Final outcome + // Length EF = AB / (2*cos(Θ)) + // Length FG = AB / (2*sin(Θ)) + if (rotation < 90 || (rotation > 180 && rotation < 270)) { + textMaxWidth = boundingWidth / (2 * cos); + textMaxHeight = boundingWidth / (2 * sin); + } else { + textMaxHeight = boundingWidth / (2 * cos); + textMaxWidth = boundingWidth / (2 * sin); + } + + // If the bounding box of the text is beyond the boundingHeight + // then we need to clamp it and recompute the bounds + // This time we are computing the sizes based on the outer box ABCD + const EF = sin * textMaxWidth; + const FG = cos * textMaxHeight; + if (EF + FG > boundingHeight) { + // > AB = EF * cos(Θ) + FG * sin(Θ) + // > BC = BG + GC + // > BG = FG * cos(Θ) + // > GC = EF * sin(Θ) + // > BC = FG * cos(Θ) + EF * sin(Θ) + // > AB = EF * cos(Θ) + FG * sin(Θ) + // Substitution solve + // > EF = (AB*cos(Θ) - BC*sin(Θ)) / (cos^2(Θ)-sin^2(Θ)) + // > FG = (BC*cos(Θ) - AB*sin(Θ)) / (cos^2(Θ)-sin^2(Θ)) + const denominator = cos * cos - sin * sin; + + if (rotation < 90 || (rotation > 180 && rotation < 270)) { + textMaxWidth = (boundingWidth * cos - boundingHeight * sin) / denominator; + textMaxHeight = (boundingHeight * cos - boundingWidth * sin) / denominator; + } else { + textMaxHeight = (boundingWidth * cos - boundingHeight * sin) / denominator; + textMaxWidth = (boundingHeight * cos - boundingWidth * sin) / denominator; + } + } + + return [Math.abs(textMaxWidth), Math.abs(textMaxHeight)]; +} diff --git a/lib/utils/index.js b/lib/utils/index.js new file mode 100644 index 00000000..9e56c774 --- /dev/null +++ b/lib/utils/index.js @@ -0,0 +1,6 @@ +export * from './bounds'; +export * from './math'; +export * from './normalize'; +export * from './number'; +export * from './rotate'; +export * from './types'; diff --git a/lib/utils/math.js b/lib/utils/math.js new file mode 100644 index 00000000..b5deb771 --- /dev/null +++ b/lib/utils/math.js @@ -0,0 +1,29 @@ +/** + * Get cosine in degrees of a + * + * Rounding errors are handled + * @param {number} a + * @returns {number} + */ +export function cosine(a) { + if (a === 0) return 1; + if (a === 90) return 0; + if (a === 180) return -1; + if (a === 270) return 0; + return Math.cos((a * Math.PI) / 180); +} + +/** + * Get sine in degrees of a + * + * Rounding errors are handled + * @param {number} a + * @returns {number} + */ +export function sine(a) { + if (a === 0) return 0; + if (a === 90) return 1; + if (a === 180) return 0; + if (a === 270) return -1; + return Math.sin((a * Math.PI) / 180); +} diff --git a/lib/utils/normalize.js b/lib/utils/normalize.js new file mode 100644 index 00000000..7394e6ab --- /dev/null +++ b/lib/utils/normalize.js @@ -0,0 +1,88 @@ +/** @typedef {'left' | 'center' | 'right' | 'justify'} AlignX **/ +/** @typedef {'top' | 'center' | 'bottom'} AlignY **/ +/** + * @typedef {Object} ExpandedAlign + * @property {AlignX} [x] + * @property {AlignY} [y] + */ +/** @typedef {'center' | ExpandedAlign} Align */ + +/** + * Convert any alignment definition into a static structure + * + * @param {Align} align + * @param {ExpandedAlign} defaults + * @returns {ExpandedAlign} + */ +export function normalizeAlignment(align, defaults) { + align = align == null || typeof align === 'string' + ? { x: align, y: align } + : align; + + if (defaults) { + align.x = align.x ?? defaults.x; + align.y = align.y ?? defaults.y; + } + return align; +} + +/** + * Convert any side definition into a static structure + * + * @template S + * @template D + * @template O + * @template {S | D} T + * @param {SideDefinition} sides - The sides to convert + * @param {SideDefinition} defaultDefinition - The value to use when no definition is provided + * @param {function(T): O} transformer - The transformation to apply to the sides once normalized + * @returns {ExpandedSideDefinition} + */ +export function normalizeSides( + sides, + defaultDefinition = undefined, + transformer = (v) => v, +) { + if ( + sides == null || + (typeof sides === 'object' && Object.keys(sides).length === 0) + ) { + sides = defaultDefinition; + } + if (sides == null || typeof sides !== 'object') { + sides = { top: sides, right: sides, bottom: sides, left: sides }; + } else if (Array.isArray(sides)) { + if (sides.length === 2) { + sides = { vertical: sides[0], horizontal: sides[1] }; + } else { + sides = { + top: sides[0], + right: sides[1], + bottom: sides[2], + left: sides[3], + }; + } + } + + if ('vertical' in sides || 'horizontal' in sides) { + sides = { + top: sides.vertical, + right: sides.horizontal, + bottom: sides.vertical, + left: sides.horizontal, + }; + } + + return { + top: transformer(sides.top), + right: transformer(sides.right), + bottom: transformer(sides.bottom), + left: transformer(sides.left), + }; +} + +export function normalizeRotation(rot, defaultValue = 0) { + rot = (rot ?? defaultValue) % 360; + if (rot < 0) rot += 360; + return rot; +} diff --git a/lib/utils/number.js b/lib/utils/number.js new file mode 100644 index 00000000..38a61fc5 --- /dev/null +++ b/lib/utils/number.js @@ -0,0 +1,28 @@ +const fArray = new Float32Array(1); +const uArray = new Uint32Array(fArray.buffer); + +/** + * PDF numbers are strictly 32bit + * so convert this number to a 32bit number + * @see ISO 32000-1 Annex C.2 (real numbers) + * + * @param {number} n 64bit number + * @returns {number} 32bit number + */ +export function PDFNumber(n) { + const rounded = Math.fround(n); + if (rounded <= n) return rounded; + + // Will have to perform 32bit float truncation + fArray[0] = n; + + // Get the 32-bit representation as integer and shift bits + if (n <= 0) { + uArray[0] += 1; + } else { + uArray[0] -= 1; + } + + // Return the float value + return fArray[0]; +} diff --git a/lib/utils/rotate.js b/lib/utils/rotate.js new file mode 100644 index 00000000..741fe60e --- /dev/null +++ b/lib/utils/rotate.js @@ -0,0 +1,47 @@ +import { cosine, sine } from './math'; + +/** + * Rotates around top left corner + * + * @example + * ``` + * width + * [x1,y1] > [x2,y2] + * ⌃ ⌄ height + * [x4,y4] < [x3,y3] + * ``` + * + * @property {number} x + * @property {number} y + * @property {number} width + * @property {number} height + * @property {number} angle + * + * @returns {[x: number, y: number, width: number, height: number]} + */ +export function rotateBox(x, y, width, height, angle) { + // No rotation so we can use the existing values + if (angle === 0) return [x, y, width, height]; + // Use fast computation without explicit trig + if (angle === 90) return [x, y - width, height, width]; + else if (angle === 180) return [x - width, y - height, width, height]; + else if (angle === 270) return [x - height, y, height, width]; + + // Non-trivial values so time for trig + const cos = cosine(angle); + const sin = sine(angle); + + const x1 = x, y1 = y, + x2 = x + width * cos, + y2 = y - width * sin, + x3 = x + width * cos + height * sin, + y3 = y - width * sin + height * cos, + x4 = x + height * sin, + y4 = y + height * cos, + xMin = Math.min(x1, x2, x3, x4), + xMax = Math.max(x1, x2, x3, x4), + yMin = Math.min(y1, y2, y3, y4), + yMax = Math.max(y1, y2, y3, y4); + + return [xMin, yMin, xMax - xMin, yMax - yMin]; +} diff --git a/lib/utils/types.js b/lib/utils/types.js new file mode 100644 index 00000000..1bfe8db3 --- /dev/null +++ b/lib/utils/types.js @@ -0,0 +1,28 @@ +/** + * Measurement of size + * + * @typedef {number | `${number}` | `${number}${'em' | 'in' | 'px' | 'cm' | 'mm' | 'pc' | 'ex' | 'ch' | 'rem' | 'vw' | 'vmin' | 'vmax' | '%' | 'pt'}`} Size + */ + +/** + * @typedef {Array | string | Array} PDFColor + */ + +/** @typedef {string | Buffer | Uint8Array | ArrayBuffer} PDFFontSource */ + +/** + * Side definitions + * - To define all sides, use a single value + * - To define up-down left-right, use a `[Y, X]` array + * - To define each side, use `[top, right, bottom, left]` array + * - Or `{vertical: SideValue, horizontal: SideValue}` + * - Or `{top: SideValue, right: SideValue, bottom: SideValue, left: SideValue}` + * + * @template T + * @typedef {T | [T, T] | [T, T, T, T] | { vertical: T; horizontal: T } | ExpandedSideDefinition} SideDefinition + **/ + +/** + * @template T + * @typedef {{ top: T; right: T; bottom: T; left: T }} ExpandedSideDefinition + */ diff --git a/package.json b/package.json index 8b950a8f..ee75c975 100644 --- a/package.json +++ b/package.json @@ -53,6 +53,7 @@ "fontkit": "^2.0.4", "jpeg-exif": "^1.1.4", "linebreak": "^1.1.0", + "@cto.af/linebreak": "^3.0.0", "png-js": "^1.0.0" }, "scripts": { @@ -77,8 +78,7 @@ "brfs" ] }, - "engine": [ - "node >= v18.0.0" - ], + "engines": { + "node": ">=20" } } diff --git a/rollup.config.js b/rollup.config.js index c3a8b867..e2bceb0b 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -9,6 +9,7 @@ const external = [ 'fontkit', 'events', 'linebreak', + '@cto.af/linebreak', 'png-js', 'crypto-js', 'saslprep', @@ -43,7 +44,7 @@ export default [ { modules: false, targets: { - node: '18' + node: '20' } } ] diff --git a/tests/visual/__image_snapshots__/text-spec-js-text-rewrite-1-snap.png b/tests/visual/__image_snapshots__/text-spec-js-text-rewrite-1-snap.png new file mode 100644 index 0000000000000000000000000000000000000000..1666e6edfe9f7c64d354c7b9d06b1e14133b98fe GIT binary patch literal 30546 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 literal 0 HcmV?d00001 diff --git a/tests/visual/text.spec.js b/tests/visual/text.spec.js index 8fb3150e..c395718c 100644 --- a/tests/visual/text.spec.js +++ b/tests/visual/text.spec.js @@ -1,15 +1,48 @@ import { runDocTest } from './helpers'; +import LayoutEngine from '../../lib/text/layout'; -describe('text', function () { - test('simple text', function () { - return runDocTest(function (doc) { +describe('text', function() { + test('rewrite', function() { + return runDocTest(function(doc) { + doc.font('tests/fonts/Roboto-Regular.ttf'); + + // TODO: add these methods to the base document + const layout = new LayoutEngine(doc); + + // Draw bounds of the page + layout.box(doc.x, doc.y, doc.page.contentWidth, doc.page.contentHeight); + + // Draw textBox + layout.textBox('fancy textBox()', { rotation: 20, border: 1, borderColor: 'red' }); + doc.save().circle(doc.x, doc.y, 2).fill('pink').restore(); // Display the origin + + // Draw normal text + // Render the bounding box + const boundingBox = layout.boundsOfString('some normal text()', { y: 200, rotation: 20 }); + layout.box(boundingBox.x, boundingBox.y, boundingBox.width, boundingBox.height, { borderColor: 'lightgreen' }); + // Render the text bounds + // This is achieved by getting the size of the text without rotation and then rendering it as a rotated box + const textBounds = layout.boundsOfString('some normal text()', { y: 200, rotation: 0 }); + layout.box(textBounds.x, textBounds.y, textBounds.width, textBounds.height, { + borderColor: 'lightgreen', + rotation: 20, + }); + // Display the origin + doc.save().circle(doc.x, 200, 2).fill('darkgreen').restore(); + // Render the text + layout.text('some normal text()', { y: 200, rotation: 20 }); + }); + }); + + test('simple text', function() { + return runDocTest(function(doc) { doc.font('tests/fonts/Roboto-Regular.ttf'); doc.text('Really simple text', 100, 100); }); }); - test('alignment', function () { - return runDocTest(function (doc) { + test('alignment', function() { + return runDocTest(function(doc) { doc.font('tests/fonts/Roboto-Regular.ttf'); doc.text('Left aligned text', { align: 'left' }); doc.text('Right aligned text', { align: 'right' }); @@ -20,8 +53,8 @@ describe('text', function () { }); }); - test('soft hyphen', function () { - return runDocTest(function (doc) { + test('soft hyphen', function() { + return runDocTest(function(doc) { doc.font('tests/fonts/Roboto-Regular.ttf'); doc.text( 'Text with soft hyphen - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lo ip\u00ADsum', @@ -34,8 +67,8 @@ describe('text', function () { }); }); - test('decoration', function () { - return runDocTest(function (doc) { + test('decoration', function() { + return runDocTest(function(doc) { doc.font('tests/fonts/Roboto-Regular.ttf'); doc.fillColor('blue').text('Here is a link!', 100, 100, { link: 'http://google.com/', @@ -51,22 +84,22 @@ describe('text', function () { }); }); - test('list', function () { - return runDocTest(function (doc) { + test('list', function() { + return runDocTest(function(doc) { doc.font('tests/fonts/Roboto-Regular.ttf'); doc.fillColor('#000').list(['One', 'Two', 'Three'], 100, 150); }); }); - test('list with line breaks in items', function () { - return runDocTest(function (doc) { + test('list with line breaks in items', function() { + return runDocTest(function(doc) { doc.font('tests/fonts/Roboto-Regular.ttf'); doc.list(['Foo\nBar', 'Foo\rBar', 'Foo\r\nBar'], [100, 150]); }); }); - test('list (numbered)', function () { - return runDocTest(function (doc) { + test('list (numbered)', function() { + return runDocTest(function(doc) { doc.font('tests/fonts/Roboto-Regular.ttf'); doc .fillColor('#000') @@ -74,8 +107,8 @@ describe('text', function () { }); }); - test('list (lettered)', function () { - return runDocTest(function (doc) { + test('list (lettered)', function() { + return runDocTest(function(doc) { doc.font('tests/fonts/Roboto-Regular.ttf'); doc .fillColor('#000') @@ -83,8 +116,8 @@ describe('text', function () { }); }); - test('list with sub-list (unordered)', function () { - return runDocTest(function (doc) { + test('list with sub-list (unordered)', function() { + return runDocTest(function(doc) { doc.font('tests/fonts/Roboto-Regular.ttf'); doc .fillColor('#000') @@ -92,8 +125,8 @@ describe('text', function () { }); }); - test('list with sub-list (ordered)', function () { - return runDocTest(function (doc) { + test('list with sub-list (ordered)', function() { + return runDocTest(function(doc) { doc.font('tests/fonts/Roboto-Regular.ttf'); doc .fillColor('#000') @@ -103,8 +136,8 @@ describe('text', function () { }); }); - test('continued text with OpenType features', function () { - return runDocTest(function (doc) { + test('continued text with OpenType features', function() { + return runDocTest(function(doc) { doc.font('tests/fonts/Roboto-Regular.ttf'); doc.text('Really simple', 100, 100, { features: ['smcp'], @@ -115,7 +148,7 @@ describe('text', function () { }); }); - test('rotated text', function () { + test('rotated text', function() { let i = 0; const cols = [ '#292f56', @@ -132,7 +165,7 @@ describe('text', function () { return cols[i++ % cols.length]; } - return runDocTest(function (doc) { + return runDocTest(function(doc) { doc.font('tests/fonts/Roboto-Regular.ttf'); for (let i = -360; i < 360; i += 5) { const withLabel = i % 45 === 0; @@ -158,8 +191,8 @@ describe('text', function () { }); }); - test('rotated multi line text', function () { - return runDocTest(function (doc) { + test('rotated multi line text', function() { + return runDocTest(function(doc) { doc.font('tests/fonts/Roboto-Regular.ttf'); let text = `Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.`; diff --git a/yarn.lock b/yarn.lock index 87c3ddff..d3baea8e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10,7 +10,7 @@ "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.24" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.26.2": +"@babel/code-frame@^7.26.2": version "7.26.2" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85" integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ== @@ -24,7 +24,7 @@ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.26.8.tgz#821c1d35641c355284d4a870b8a4a7b0c141e367" integrity sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ== -"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.23.9", "@babel/core@^7.26.0": +"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.26.0": version "7.26.10" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.26.10.tgz#5c876f83c8c4dcb233ee4b670c0606f2ac3000f9" integrity sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ== @@ -45,7 +45,7 @@ json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@^7.26.10", "@babel/generator@^7.27.0", "@babel/generator@^7.7.2": +"@babel/generator@^7.26.10", "@babel/generator@^7.27.0": version "7.27.0" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.27.0.tgz#764382b5392e5b9aff93cadb190d0745866cbc2c" integrity sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw== @@ -202,7 +202,7 @@ "@babel/template" "^7.27.0" "@babel/types" "^7.27.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.26.10", "@babel/parser@^7.27.0", "@babel/parser@^7.6.0", "@babel/parser@^7.9.6": +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.26.10", "@babel/parser@^7.27.0", "@babel/parser@^7.6.0", "@babel/parser@^7.9.6": version "7.27.0" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.27.0.tgz#3d7d6ee268e41d2600091cbd4e145ffee85a44ec" integrity sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg== @@ -316,13 +316,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-jsx@^7.7.2": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz#a34313a178ea56f1951599b929c1ceacee719290" - integrity sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/plugin-syntax-logical-assignment-operators@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" @@ -379,13 +372,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-typescript@^7.7.2": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz#67dda2b74da43727cf21d46cf9afef23f4365399" - integrity sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/plugin-syntax-unicode-sets-regex@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357" @@ -902,10 +888,144 @@ "@babel/helper-string-parser" "^7.25.9" "@babel/helper-validator-identifier" "^7.25.9" -"@bcoe/v8-coverage@^0.2.3": - version "0.2.3" - resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" - integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== +"@cto.af/linebreak@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@cto.af/linebreak/-/linebreak-3.0.0.tgz#d0938d577b2f9bf1ba51b5d8202f7d11786acc5b" + integrity sha512-JrTYCIA8bQjvpOT5WfQqCjISrbmf9K25d2jaT7En0+8/b2EQMtcxBz63DqNjIzjDfqYBRA/QzKa2t9gTgr723g== + dependencies: + "@cto.af/unicode-trie-runtime" "3.2.3" + +"@cto.af/unicode-trie-runtime@3.2.3": + version "3.2.3" + resolved "https://registry.yarnpkg.com/@cto.af/unicode-trie-runtime/-/unicode-trie-runtime-3.2.3.tgz#5207c1b0cf62a623f8e31624ca15c9365ae1a884" + integrity sha512-lP8tpf6C4UYqyT2h3IOjzgueixbQlxTZOSnpEswIrY9I79hqt1F4xK9q0MDM2e+mck13xOGlDLig9gcxLzhfzQ== + dependencies: + fflate "^0.8.2" + +"@esbuild/aix-ppc64@0.25.5": + version "0.25.5" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.5.tgz#4e0f91776c2b340e75558f60552195f6fad09f18" + integrity sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA== + +"@esbuild/android-arm64@0.25.5": + version "0.25.5" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.25.5.tgz#bc766407f1718923f6b8079c8c61bf86ac3a6a4f" + integrity sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg== + +"@esbuild/android-arm@0.25.5": + version "0.25.5" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.25.5.tgz#4290d6d3407bae3883ad2cded1081a234473ce26" + integrity sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA== + +"@esbuild/android-x64@0.25.5": + version "0.25.5" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.25.5.tgz#40c11d9cbca4f2406548c8a9895d321bc3b35eff" + integrity sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw== + +"@esbuild/darwin-arm64@0.25.5": + version "0.25.5" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.25.5.tgz#49d8bf8b1df95f759ac81eb1d0736018006d7e34" + integrity sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ== + +"@esbuild/darwin-x64@0.25.5": + version "0.25.5" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.25.5.tgz#e27a5d92a14886ef1d492fd50fc61a2d4d87e418" + integrity sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ== + +"@esbuild/freebsd-arm64@0.25.5": + version "0.25.5" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.5.tgz#97cede59d638840ca104e605cdb9f1b118ba0b1c" + integrity sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw== + +"@esbuild/freebsd-x64@0.25.5": + version "0.25.5" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.25.5.tgz#71c77812042a1a8190c3d581e140d15b876b9c6f" + integrity sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw== + +"@esbuild/linux-arm64@0.25.5": + version "0.25.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.25.5.tgz#f7b7c8f97eff8ffd2e47f6c67eb5c9765f2181b8" + integrity sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg== + +"@esbuild/linux-arm@0.25.5": + version "0.25.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.25.5.tgz#2a0be71b6cd8201fa559aea45598dffabc05d911" + integrity sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw== + +"@esbuild/linux-ia32@0.25.5": + version "0.25.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.25.5.tgz#763414463cd9ea6fa1f96555d2762f9f84c61783" + integrity sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA== + +"@esbuild/linux-loong64@0.25.5": + version "0.25.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.25.5.tgz#428cf2213ff786a502a52c96cf29d1fcf1eb8506" + integrity sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg== + +"@esbuild/linux-mips64el@0.25.5": + version "0.25.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.25.5.tgz#5cbcc7fd841b4cd53358afd33527cd394e325d96" + integrity sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg== + +"@esbuild/linux-ppc64@0.25.5": + version "0.25.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.25.5.tgz#0d954ab39ce4f5e50f00c4f8c4fd38f976c13ad9" + integrity sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ== + +"@esbuild/linux-riscv64@0.25.5": + version "0.25.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.25.5.tgz#0e7dd30730505abd8088321e8497e94b547bfb1e" + integrity sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA== + +"@esbuild/linux-s390x@0.25.5": + version "0.25.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.25.5.tgz#5669af81327a398a336d7e40e320b5bbd6e6e72d" + integrity sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ== + +"@esbuild/linux-x64@0.25.5": + version "0.25.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.25.5.tgz#b2357dd153aa49038967ddc1ffd90c68a9d2a0d4" + integrity sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw== + +"@esbuild/netbsd-arm64@0.25.5": + version "0.25.5" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.5.tgz#53b4dfb8fe1cee93777c9e366893bd3daa6ba63d" + integrity sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw== + +"@esbuild/netbsd-x64@0.25.5": + version "0.25.5" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.25.5.tgz#a0206f6314ce7dc8713b7732703d0f58de1d1e79" + integrity sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ== + +"@esbuild/openbsd-arm64@0.25.5": + version "0.25.5" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.5.tgz#2a796c87c44e8de78001d808c77d948a21ec22fd" + integrity sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw== + +"@esbuild/openbsd-x64@0.25.5": + version "0.25.5" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.25.5.tgz#28d0cd8909b7fa3953af998f2b2ed34f576728f0" + integrity sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg== + +"@esbuild/sunos-x64@0.25.5": + version "0.25.5" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.25.5.tgz#a28164f5b997e8247d407e36c90d3fd5ddbe0dc5" + integrity sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA== + +"@esbuild/win32-arm64@0.25.5": + version "0.25.5" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.25.5.tgz#6eadbead38e8bd12f633a5190e45eff80e24007e" + integrity sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw== + +"@esbuild/win32-ia32@0.25.5": + version "0.25.5" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.25.5.tgz#bab6288005482f9ed2adb9ded7e88eba9a62cc0d" + integrity sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ== + +"@esbuild/win32-x64@0.25.5": + version "0.25.5" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.25.5.tgz#7fc114af5f6563f19f73324b5d5ff36ece0803d1" + integrity sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g== "@eslint-community/eslint-utils@^4.2.0": version "4.6.1" @@ -1019,133 +1139,27 @@ js-yaml "^3.13.1" resolve-from "^5.0.0" -"@istanbuljs/schema@^0.1.2", "@istanbuljs/schema@^0.1.3": +"@istanbuljs/schema@^0.1.2": version "0.1.3" resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== -"@jest/console@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.7.0.tgz#cd4822dbdb84529265c5a2bdb529a3c9cc950ffc" - integrity sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg== - dependencies: - "@jest/types" "^29.6.3" - "@types/node" "*" - chalk "^4.0.0" - jest-message-util "^29.7.0" - jest-util "^29.7.0" - slash "^3.0.0" - -"@jest/core@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.7.0.tgz#b6cccc239f30ff36609658c5a5e2291757ce448f" - integrity sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg== - dependencies: - "@jest/console" "^29.7.0" - "@jest/reporters" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - ci-info "^3.2.0" - exit "^0.1.2" - graceful-fs "^4.2.9" - jest-changed-files "^29.7.0" - jest-config "^29.7.0" - jest-haste-map "^29.7.0" - jest-message-util "^29.7.0" - jest-regex-util "^29.6.3" - jest-resolve "^29.7.0" - jest-resolve-dependencies "^29.7.0" - jest-runner "^29.7.0" - jest-runtime "^29.7.0" - jest-snapshot "^29.7.0" - jest-util "^29.7.0" - jest-validate "^29.7.0" - jest-watcher "^29.7.0" - micromatch "^4.0.4" - pretty-format "^29.7.0" - slash "^3.0.0" - strip-ansi "^6.0.0" - -"@jest/environment@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.7.0.tgz#24d61f54ff1f786f3cd4073b4b94416383baf2a7" - integrity sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw== - dependencies: - "@jest/fake-timers" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - jest-mock "^29.7.0" - -"@jest/expect-utils@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.7.0.tgz#023efe5d26a8a70f21677d0a1afc0f0a44e3a1c6" - integrity sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA== - dependencies: - jest-get-type "^29.6.3" - -"@jest/expect@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.7.0.tgz#76a3edb0cb753b70dfbfe23283510d3d45432bf2" - integrity sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ== - dependencies: - expect "^29.7.0" - jest-snapshot "^29.7.0" - -"@jest/fake-timers@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.7.0.tgz#fd91bf1fffb16d7d0d24a426ab1a47a49881a565" - integrity sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ== - dependencies: - "@jest/types" "^29.6.3" - "@sinonjs/fake-timers" "^10.0.2" - "@types/node" "*" - jest-message-util "^29.7.0" - jest-mock "^29.7.0" - jest-util "^29.7.0" +"@jest/diff-sequences@30.0.1": + version "30.0.1" + resolved "https://registry.yarnpkg.com/@jest/diff-sequences/-/diff-sequences-30.0.1.tgz#0ededeae4d071f5c8ffe3678d15f3a1be09156be" + integrity sha512-n5H8QLDJ47QqbCNn5SuFjCRDrOLEZ0h8vAHCK5RL9Ls7Xa8AQLa/YxAc9UjFqoEDM48muwtBGjtMY5cr0PLDCw== -"@jest/globals@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.7.0.tgz#8d9290f9ec47ff772607fa864ca1d5a2efae1d4d" - integrity sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ== - dependencies: - "@jest/environment" "^29.7.0" - "@jest/expect" "^29.7.0" - "@jest/types" "^29.6.3" - jest-mock "^29.7.0" +"@jest/get-type@30.0.1": + version "30.0.1" + resolved "https://registry.yarnpkg.com/@jest/get-type/-/get-type-30.0.1.tgz#0d32f1bbfba511948ad247ab01b9007724fc9f52" + integrity sha512-AyYdemXCptSRFirI5EPazNxyPwAL0jXt3zceFjaj8NFiKP9pOi0bfXonf6qkf82z2t3QWPeLCWWw4stPBzctLw== -"@jest/reporters@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.7.0.tgz#04b262ecb3b8faa83b0b3d321623972393e8f4c7" - integrity sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg== +"@jest/schemas@30.0.1": + version "30.0.1" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-30.0.1.tgz#27c00d707d480ece0c19126af97081a1af3bc46e" + integrity sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w== dependencies: - "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" - "@jridgewell/trace-mapping" "^0.3.18" - "@types/node" "*" - chalk "^4.0.0" - collect-v8-coverage "^1.0.0" - exit "^0.1.2" - glob "^7.1.3" - graceful-fs "^4.2.9" - istanbul-lib-coverage "^3.0.0" - istanbul-lib-instrument "^6.0.0" - istanbul-lib-report "^3.0.0" - istanbul-lib-source-maps "^4.0.0" - istanbul-reports "^3.1.3" - jest-message-util "^29.7.0" - jest-util "^29.7.0" - jest-worker "^29.7.0" - slash "^3.0.0" - string-length "^4.0.1" - strip-ansi "^6.0.0" - v8-to-istanbul "^9.0.1" + "@sinclair/typebox" "^0.34.0" "@jest/schemas@^29.6.3": version "29.6.3" @@ -1154,35 +1168,6 @@ dependencies: "@sinclair/typebox" "^0.27.8" -"@jest/source-map@^29.6.3": - version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.6.3.tgz#d90ba772095cf37a34a5eb9413f1b562a08554c4" - integrity sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw== - dependencies: - "@jridgewell/trace-mapping" "^0.3.18" - callsites "^3.0.0" - graceful-fs "^4.2.9" - -"@jest/test-result@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.7.0.tgz#8db9a80aa1a097bb2262572686734baed9b1657c" - integrity sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA== - dependencies: - "@jest/console" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/istanbul-lib-coverage" "^2.0.0" - collect-v8-coverage "^1.0.0" - -"@jest/test-sequencer@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz#6cef977ce1d39834a3aea887a1726628a6f072ce" - integrity sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw== - dependencies: - "@jest/test-result" "^29.7.0" - graceful-fs "^4.2.9" - jest-haste-map "^29.7.0" - slash "^3.0.0" - "@jest/transform@^29.7.0": version "29.7.0" resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.7.0.tgz#df2dd9c346c7d7768b8a06639994640c642e284c" @@ -1235,12 +1220,12 @@ resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== -"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.5.0": version "1.5.0" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== -"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": +"@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": version "0.3.25" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== @@ -1286,24 +1271,115 @@ estree-walker "^2.0.2" picomatch "^4.0.2" +"@rollup/rollup-android-arm-eabi@4.43.0": + version "4.43.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.43.0.tgz#9241b59af721beb7e3587a56c6c245d6c465753d" + integrity sha512-Krjy9awJl6rKbruhQDgivNbD1WuLb8xAclM4IR4cN5pHGAs2oIMMQJEiC3IC/9TZJ+QZkmZhlMO/6MBGxPidpw== + +"@rollup/rollup-android-arm64@4.43.0": + version "4.43.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.43.0.tgz#f70ee53ba991fdd65c277b0716c559736d490a58" + integrity sha512-ss4YJwRt5I63454Rpj+mXCXicakdFmKnUNxr1dLK+5rv5FJgAxnN7s31a5VchRYxCFWdmnDWKd0wbAdTr0J5EA== + +"@rollup/rollup-darwin-arm64@4.43.0": + version "4.43.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.43.0.tgz#9f59000e817cf5760d87515ce899f8b93fe8756a" + integrity sha512-eKoL8ykZ7zz8MjgBenEF2OoTNFAPFz1/lyJ5UmmFSz5jW+7XbH1+MAgCVHy72aG59rbuQLcJeiMrP8qP5d/N0A== + +"@rollup/rollup-darwin-x64@4.43.0": + version "4.43.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.43.0.tgz#c92aebd02725ae1b88bdce40f08f7823e8055c78" + integrity sha512-SYwXJgaBYW33Wi/q4ubN+ldWC4DzQY62S4Ll2dgfr/dbPoF50dlQwEaEHSKrQdSjC6oIe1WgzosoaNoHCdNuMg== + +"@rollup/rollup-freebsd-arm64@4.43.0": + version "4.43.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.43.0.tgz#b128dbe7b353922ddd729a4fc4e408ddcbf338b5" + integrity sha512-SV+U5sSo0yujrjzBF7/YidieK2iF6E7MdF6EbYxNz94lA+R0wKl3SiixGyG/9Klab6uNBIqsN7j4Y/Fya7wAjQ== + +"@rollup/rollup-freebsd-x64@4.43.0": + version "4.43.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.43.0.tgz#88297a0ddfadddd61d7d9b73eb42b3f227301d30" + integrity sha512-J7uCsiV13L/VOeHJBo5SjasKiGxJ0g+nQTrBkAsmQBIdil3KhPnSE9GnRon4ejX1XDdsmK/l30IYLiAaQEO0Cg== + +"@rollup/rollup-linux-arm-gnueabihf@4.43.0": + version "4.43.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.43.0.tgz#a59afc092523ebe43d3899f33da9cdd2ec01fb87" + integrity sha512-gTJ/JnnjCMc15uwB10TTATBEhK9meBIY+gXP4s0sHD1zHOaIh4Dmy1X9wup18IiY9tTNk5gJc4yx9ctj/fjrIw== + +"@rollup/rollup-linux-arm-musleabihf@4.43.0": + version "4.43.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.43.0.tgz#3095c1327b794bd187d03e372e633717fb69b4c0" + integrity sha512-ZJ3gZynL1LDSIvRfz0qXtTNs56n5DI2Mq+WACWZ7yGHFUEirHBRt7fyIk0NsCKhmRhn7WAcjgSkSVVxKlPNFFw== + +"@rollup/rollup-linux-arm64-gnu@4.43.0": + version "4.43.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.43.0.tgz#e43bb77df3a6de85312e991d1e3ad352d1abb00d" + integrity sha512-8FnkipasmOOSSlfucGYEu58U8cxEdhziKjPD2FIa0ONVMxvl/hmONtX/7y4vGjdUhjcTHlKlDhw3H9t98fPvyA== + +"@rollup/rollup-linux-arm64-musl@4.43.0": + version "4.43.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.43.0.tgz#34873a437bcd87618f702dc66f0cbce170aebf9f" + integrity sha512-KPPyAdlcIZ6S9C3S2cndXDkV0Bb1OSMsX0Eelr2Bay4EsF9yi9u9uzc9RniK3mcUGCLhWY9oLr6er80P5DE6XA== + +"@rollup/rollup-linux-loongarch64-gnu@4.43.0": + version "4.43.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.43.0.tgz#224ff524349e365baa56f1f512822548c2d76910" + integrity sha512-HPGDIH0/ZzAZjvtlXj6g+KDQ9ZMHfSP553za7o2Odegb/BEfwJcR0Sw0RLNpQ9nC6Gy8s+3mSS9xjZ0n3rhcYg== + +"@rollup/rollup-linux-powerpc64le-gnu@4.43.0": + version "4.43.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.43.0.tgz#43c3c053b26ace18a1d3dab204596a466c1b0e34" + integrity sha512-gEmwbOws4U4GLAJDhhtSPWPXUzDfMRedT3hFMyRAvM9Mrnj+dJIFIeL7otsv2WF3D7GrV0GIewW0y28dOYWkmw== + +"@rollup/rollup-linux-riscv64-gnu@4.43.0": + version "4.43.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.43.0.tgz#e7df825d71daefa7037605015455aa58be43cd7a" + integrity sha512-XXKvo2e+wFtXZF/9xoWohHg+MuRnvO29TI5Hqe9xwN5uN8NKUYy7tXUG3EZAlfchufNCTHNGjEx7uN78KsBo0g== + +"@rollup/rollup-linux-riscv64-musl@4.43.0": + version "4.43.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.43.0.tgz#d76ad93a7f4c0b2855a024d8d859196acf38acf5" + integrity sha512-ruf3hPWhjw6uDFsOAzmbNIvlXFXlBQ4nk57Sec8E8rUxs/AI4HD6xmiiasOOx/3QxS2f5eQMKTAwk7KHwpzr/Q== + +"@rollup/rollup-linux-s390x-gnu@4.43.0": + version "4.43.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.43.0.tgz#0852608843d05852af3f447bf43bb63d80d62b6a" + integrity sha512-QmNIAqDiEMEvFV15rsSnjoSmO0+eJLoKRD9EAa9rrYNwO/XRCtOGM3A5A0X+wmG+XRrw9Fxdsw+LnyYiZWWcVw== + +"@rollup/rollup-linux-x64-gnu@4.43.0": + version "4.43.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.43.0.tgz#d16a57f86357a4e697142bee244afed59b24e6c5" + integrity sha512-jAHr/S0iiBtFyzjhOkAics/2SrXE092qyqEg96e90L3t9Op8OTzS6+IX0Fy5wCt2+KqeHAkti+eitV0wvblEoQ== + +"@rollup/rollup-linux-x64-musl@4.43.0": + version "4.43.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.43.0.tgz#51cbc8b1eb46ebc0e284725418b6fbf48686e4e2" + integrity sha512-3yATWgdeXyuHtBhrLt98w+5fKurdqvs8B53LaoKD7P7H7FKOONLsBVMNl9ghPQZQuYcceV5CDyPfyfGpMWD9mQ== + +"@rollup/rollup-win32-arm64-msvc@4.43.0": + version "4.43.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.43.0.tgz#d6d84aace2b211119bf0ab1c586e29d01e32aa01" + integrity sha512-wVzXp2qDSCOpcBCT5WRWLmpJRIzv23valvcTwMHEobkjippNf+C3ys/+wf07poPkeNix0paTNemB2XrHr2TnGw== + +"@rollup/rollup-win32-ia32-msvc@4.43.0": + version "4.43.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.43.0.tgz#4af33168de2f65b97a8f36bd1d8d21cea34d3ccb" + integrity sha512-fYCTEyzf8d+7diCw8b+asvWDCLMjsCEA8alvtAutqJOJp/wL5hs1rWSqJ1vkjgW0L2NB4bsYJrpKkiIPRR9dvw== + +"@rollup/rollup-win32-x64-msvc@4.43.0": + version "4.43.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.43.0.tgz#42a88207659e404e8ffa655cae763cbad94906ab" + integrity sha512-SnGhLiE5rlK0ofq8kzuDkM0g7FN1s5VYY+YSMTibP7CqShxCQvqtNxTARS4xX4PFJfHjG0ZQYX9iGzI3FQh5Aw== + "@sinclair/typebox@^0.27.8": version "0.27.8" resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== -"@sinonjs/commons@^3.0.0": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-3.0.1.tgz#1029357e44ca901a615585f6d27738dbc89084cd" - integrity sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ== - dependencies: - type-detect "4.0.8" - -"@sinonjs/fake-timers@^10.0.2": - version "10.3.0" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz#55fdff1ecab9f354019129daf4df0dd4d923ea66" - integrity sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA== - dependencies: - "@sinonjs/commons" "^3.0.0" +"@sinclair/typebox@^0.34.0": + version "0.34.35" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.34.35.tgz#185c57551d5edf9a2f6e9d012822b06f942cfbfc" + integrity sha512-C6ypdODf2VZkgRT6sFM8E1F8vR+HcffniX0Kp8MsU8PIfrlXbNCBz0jzj17GjdmjTx1OtZzdH8+iALL21UjF5A== "@swc/helpers@^0.5.12": version "0.5.17" @@ -1312,11 +1388,6 @@ dependencies: tslib "^2.8.0" -"@tootallnate/once@2": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" - integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== - "@types/babel__core@^7.1.14": version "7.20.5" resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" @@ -1350,7 +1421,19 @@ dependencies: "@babel/types" "^7.20.7" -"@types/estree@^1.0.0", "@types/estree@^1.0.6": +"@types/chai@^5.2.2": + version "5.2.2" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-5.2.2.tgz#6f14cea18180ffc4416bc0fd12be05fdd73bdd6b" + integrity sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg== + dependencies: + "@types/deep-eql" "*" + +"@types/deep-eql@*": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@types/deep-eql/-/deep-eql-4.0.2.tgz#334311971d3a07121e7eb91b684a605e7eea9cbd" + integrity sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw== + +"@types/estree@1.0.7", "@types/estree@^1.0.0", "@types/estree@^1.0.6": version "1.0.7" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.7.tgz#4158d3105276773d5b7695cd4834b1722e4f37a8" integrity sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ== @@ -1377,7 +1460,7 @@ dependencies: "@types/node" "*" -"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": version "2.0.6" resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== @@ -1396,15 +1479,6 @@ dependencies: "@types/istanbul-lib-report" "*" -"@types/jsdom@^20.0.0": - version "20.0.1" - resolved "https://registry.yarnpkg.com/@types/jsdom/-/jsdom-20.0.1.tgz#07c14bc19bd2f918c1929541cdaacae894744808" - integrity sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ== - dependencies: - "@types/node" "*" - "@types/tough-cookie" "*" - parse5 "^7.0.0" - "@types/json-schema@^7.0.15": version "7.0.15" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" @@ -1422,16 +1496,6 @@ dependencies: undici-types "~6.21.0" -"@types/stack-utils@^2.0.0": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8" - integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw== - -"@types/tough-cookie@*": - version "4.0.5" - resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-4.0.5.tgz#cb6e2a691b70cb177c6e3ae9c1d2e8b2ea8cd304" - integrity sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA== - "@types/yargs-parser@*": version "21.0.3" resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" @@ -1444,6 +1508,67 @@ dependencies: "@types/yargs-parser" "*" +"@vitest/expect@3.2.4": + version "3.2.4" + resolved "https://registry.yarnpkg.com/@vitest/expect/-/expect-3.2.4.tgz#8362124cd811a5ee11c5768207b9df53d34f2433" + integrity sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig== + dependencies: + "@types/chai" "^5.2.2" + "@vitest/spy" "3.2.4" + "@vitest/utils" "3.2.4" + chai "^5.2.0" + tinyrainbow "^2.0.0" + +"@vitest/mocker@3.2.4": + version "3.2.4" + resolved "https://registry.yarnpkg.com/@vitest/mocker/-/mocker-3.2.4.tgz#4471c4efbd62db0d4fa203e65cc6b058a85cabd3" + integrity sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ== + dependencies: + "@vitest/spy" "3.2.4" + estree-walker "^3.0.3" + magic-string "^0.30.17" + +"@vitest/pretty-format@3.2.4", "@vitest/pretty-format@^3.2.4": + version "3.2.4" + resolved "https://registry.yarnpkg.com/@vitest/pretty-format/-/pretty-format-3.2.4.tgz#3c102f79e82b204a26c7a5921bf47d534919d3b4" + integrity sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA== + dependencies: + tinyrainbow "^2.0.0" + +"@vitest/runner@3.2.4": + version "3.2.4" + resolved "https://registry.yarnpkg.com/@vitest/runner/-/runner-3.2.4.tgz#5ce0274f24a971f6500f6fc166d53d8382430766" + integrity sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ== + dependencies: + "@vitest/utils" "3.2.4" + pathe "^2.0.3" + strip-literal "^3.0.0" + +"@vitest/snapshot@3.2.4": + version "3.2.4" + resolved "https://registry.yarnpkg.com/@vitest/snapshot/-/snapshot-3.2.4.tgz#40a8bc0346ac0aee923c0eefc2dc005d90bc987c" + integrity sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ== + dependencies: + "@vitest/pretty-format" "3.2.4" + magic-string "^0.30.17" + pathe "^2.0.3" + +"@vitest/spy@3.2.4": + version "3.2.4" + resolved "https://registry.yarnpkg.com/@vitest/spy/-/spy-3.2.4.tgz#cc18f26f40f3f028da6620046881f4e4518c2599" + integrity sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw== + dependencies: + tinyspy "^4.0.3" + +"@vitest/utils@3.2.4": + version "3.2.4" + resolved "https://registry.yarnpkg.com/@vitest/utils/-/utils-3.2.4.tgz#c0813bc42d99527fb8c5b138c7a88516bca46fea" + integrity sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA== + dependencies: + "@vitest/pretty-format" "3.2.4" + loupe "^3.1.4" + tinyrainbow "^2.0.0" + JSONStream@^1.0.3: version "1.3.5" resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" @@ -1452,24 +1577,11 @@ JSONStream@^1.0.3: jsonparse "^1.2.0" through ">=2.2.7 <3" -abab@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" - integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== - abbrev@1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== -acorn-globals@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-7.0.1.tgz#0dbf05c44fa7c94332914c02066d5beff62c40c3" - integrity sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q== - dependencies: - acorn "^8.1.0" - acorn-walk "^8.0.2" - acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" @@ -1489,30 +1601,16 @@ acorn-walk@^7.0.0: resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== -acorn-walk@^8.0.2: - version "8.3.4" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.4.tgz#794dd169c3977edf4ba4ea47583587c5866236b7" - integrity sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g== - dependencies: - acorn "^8.11.0" - acorn@^7.0.0, acorn@^7.1.1: version "7.4.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^8.1.0, acorn@^8.11.0, acorn@^8.14.0, acorn@^8.8.1: +acorn@^8.14.0: version "8.14.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.1.tgz#721d5dc10f7d5b5609a891773d47731796935dfb" integrity sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg== -agent-base@6: - version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - ajv@^6.12.4: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" @@ -1523,26 +1621,14 @@ ajv@^6.12.4: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ansi-escapes@^4.2.1: - version "4.3.2" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" - integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== - dependencies: - type-fest "^0.21.3" - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: +ansi-styles@^4.1.0: version "4.3.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: color-convert "^2.0.1" -ansi-styles@^5.0.0: +ansi-styles@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== @@ -1604,16 +1690,16 @@ assert@^1.4.0: object.assign "^4.1.4" util "^0.10.4" +assertion-error@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-2.0.1.tgz#f641a196b335690b1070bf00b6e7593fec190bf7" + integrity sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA== + async@^3.2.4: version "3.2.6" resolved "https://registry.yarnpkg.com/async/-/async-3.2.6.tgz#1b0728e14929d51b85b449b7f06e27c1145e38ce" integrity sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA== -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== - available-typed-arrays@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" @@ -1992,6 +2078,11 @@ builtin-status-codes@^3.0.0: resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" integrity sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ== +cac@^6.7.14: + version "6.7.14" + resolved "https://registry.yarnpkg.com/cac/-/cac-6.7.14.tgz#804e1e6f506ee363cb0e3ccbb09cad5dd9870959" + integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ== + cached-path-relative@^1.0.0, cached-path-relative@^1.0.2: version "1.1.0" resolved "https://registry.yarnpkg.com/cached-path-relative/-/cached-path-relative-1.1.0.tgz#865576dfef39c0d6a7defde794d078f5308e3ef3" @@ -2033,11 +2124,6 @@ camelcase@^5.3.1: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -camelcase@^6.2.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" - integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== - caniuse-lite@^1.0.30001688: version "1.0.30001714" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001714.tgz#cfd27ff07e6fa20a0f45c7a10d28a0ffeaba2122" @@ -2051,7 +2137,18 @@ canvas@^3.1.0: node-addon-api "^7.0.0" prebuild-install "^7.1.1" -chalk@^4.0.0: +chai@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/chai/-/chai-5.2.0.tgz#1358ee106763624114addf84ab02697e411c9c05" + integrity sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw== + dependencies: + assertion-error "^2.0.1" + check-error "^2.1.1" + deep-eql "^5.0.1" + loupe "^3.1.0" + pathval "^2.0.0" + +chalk@^4.0.0, chalk@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -2059,11 +2156,6 @@ chalk@^4.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -char-regex@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" - integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== - character-parser@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/character-parser/-/character-parser-2.2.0.tgz#c7ce28f36d4bcd9744e5ffc2c5fcde1c73261fc0" @@ -2071,6 +2163,11 @@ character-parser@^2.2.0: dependencies: is-regex "^1.0.3" +check-error@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/check-error/-/check-error-2.1.1.tgz#87eb876ae71ee388fa0471fe423f494be1d96ccc" + integrity sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw== + chownr@^1.1.1: version "1.1.4" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" @@ -2089,40 +2186,16 @@ cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: inherits "^2.0.4" safe-buffer "^5.2.1" -cjs-module-lexer@^1.0.0: - version "1.4.3" - resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz#0f79731eb8cfe1ec72acd4066efac9d61991b00d" - integrity sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q== - -cliui@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" - integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.1" - wrap-ansi "^7.0.0" - clone@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" integrity sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w== -co@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== - codemirror@~5.65.18: version "5.65.19" resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-5.65.19.tgz#71016c701d6a4b6e1982b0f6e7186be65e49653d" integrity sha512-+aFkvqhaAVr1gferNMuN8vkTSrWIFvzlMV9I2KBLCWS2WpZ2+UAkZjlMZmEuT+gcXTi6RrGQCkWq1/bDtGqhIA== -collect-v8-coverage@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz#c0b29bcd33bcd0779a1344c2136051e6afd3d9e9" - integrity sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q== - color-convert@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" @@ -2150,13 +2223,6 @@ combine-source-map@^0.8.0, combine-source-map@~0.8.0: lodash.memoize "~3.0.3" source-map "~0.5.3" -combined-stream@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - commander@^13.0.0: version "13.1.0" resolved "https://registry.yarnpkg.com/commander/-/commander-13.1.0.tgz#776167db68c78f38dcce1f9b8d7b8b9a488abf46" @@ -2258,20 +2324,7 @@ create-hmac@^1.1.4, create-hmac@^1.1.7: safe-buffer "^5.0.1" sha.js "^2.4.8" -create-jest@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/create-jest/-/create-jest-29.7.0.tgz#a355c5b3cb1e1af02ba177fe7afd7feee49a5320" - integrity sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q== - dependencies: - "@jest/types" "^29.6.3" - chalk "^4.0.0" - exit "^0.1.2" - graceful-fs "^4.2.9" - jest-config "^29.7.0" - jest-util "^29.7.0" - prompts "^2.0.1" - -cross-spawn@^7.0.3, cross-spawn@^7.0.6: +cross-spawn@^7.0.6: version "7.0.6" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== @@ -2303,23 +2356,6 @@ crypto-js@^4.2.0: resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-4.2.0.tgz#4d931639ecdfd12ff80e8186dba6af2c2e856631" integrity sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q== -cssom@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.5.0.tgz#d254fa92cd8b6fbd83811b9fbaed34663cc17c36" - integrity sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw== - -cssom@~0.3.6: - version "0.3.8" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" - integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== - -cssstyle@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" - integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== - dependencies: - cssom "~0.3.6" - d@1, d@^1.0.1, d@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/d/-/d-1.0.2.tgz#2aefd554b81981e7dccf72d6842ae725cb17e5de" @@ -2338,26 +2374,19 @@ dash-ast@^2.0.1: resolved "https://registry.yarnpkg.com/dash-ast/-/dash-ast-2.0.1.tgz#8d0fd2e601c59bf874cc22877ee7dd889f54dee8" integrity sha512-5TXltWJGc+RdnabUGzhRae1TRq6m4gr+3K2wQX0is5/F2yS6MJXJvLyI3ErAnsAXuJoGqvfVD5icRgim07DrxQ== -data-urls@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-3.0.2.tgz#9cf24a477ae22bcef5cd5f6f0bfbc1d2d3be9143" - integrity sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ== - dependencies: - abab "^2.0.6" - whatwg-mimetype "^3.0.0" - whatwg-url "^11.0.0" - -debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2: +debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2: version "4.4.0" resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a" integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== dependencies: ms "^2.1.3" -decimal.js@^10.4.2: - version "10.5.0" - resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.5.0.tgz#0f371c7cf6c4898ce0afb09836db73cd82010f22" - integrity sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw== +debug@^4.4.1: + version "4.4.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.1.tgz#e5a8bc6cbc4c6cd3e64308b0693a3d4fa550189b" + integrity sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ== + dependencies: + ms "^2.1.3" decompress-response@^6.0.0: version "6.0.0" @@ -2366,10 +2395,10 @@ decompress-response@^6.0.0: dependencies: mimic-response "^3.1.0" -dedent@^1.0.0: - version "1.5.3" - resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.3.tgz#99aee19eb9bae55a67327717b6e848d0bf777e5a" - integrity sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ== +deep-eql@^5.0.1: + version "5.0.2" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-5.0.2.tgz#4b756d8d770a9257300825d52a2c2cff99c3a341" + integrity sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q== deep-extend@^0.6.0: version "0.6.0" @@ -2381,11 +2410,6 @@ deep-is@^0.1.3, deep-is@~0.1.3: resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== -deepmerge@^4.2.2: - version "4.3.1" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" - integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== - define-data-property@^1.0.1, define-data-property@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" @@ -2409,11 +2433,6 @@ defined@^1.0.0: resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.1.tgz#c0b9db27bfaffd95d6f61399419b893df0f91ebf" integrity sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q== -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== - deps-sort@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/deps-sort/-/deps-sort-2.0.1.tgz#9dfdc876d2bcec3386b6829ac52162cda9fa208d" @@ -2437,11 +2456,6 @@ detect-libc@^2.0.0: resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.3.tgz#f0cd503b40f9939b894697d19ad50895e30cf700" integrity sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw== -detect-newline@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" - integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== - detective@^5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/detective/-/detective-5.2.1.tgz#6af01eeda11015acb0e73f933242b70f24f91034" @@ -2456,11 +2470,6 @@ dfa@^1.2.0: resolved "https://registry.yarnpkg.com/dfa/-/dfa-1.2.0.tgz#96ac3204e2d29c49ea5b57af8d92c2ae12790657" integrity sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q== -diff-sequences@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" - integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== - diffie-hellman@^5.0.3: version "5.0.3" resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" @@ -2487,13 +2496,6 @@ domain-browser@^1.2.0: resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== -domexception@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/domexception/-/domexception-4.0.0.tgz#4ad1be56ccadc86fc76d033353999a8037d03673" - integrity sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw== - dependencies: - webidl-conversions "^7.0.0" - dommatrix@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/dommatrix/-/dommatrix-1.0.3.tgz#e7c18e8d6f3abdd1fef3dd4aa74c4d2e620a0525" @@ -2538,16 +2540,6 @@ email-addresses@^5.0.0: resolved "https://registry.yarnpkg.com/email-addresses/-/email-addresses-5.0.0.tgz#7ae9e7f58eef7d5e3e2c2c2d3ea49b78dc854fa6" integrity sha512-4OIPYlA6JXqtVn8zpHpGiI7vE6EQOAg16aGnDMIAlZVinnoZ8208tW1hAbjWydgN/4PLTT9q+O1K6AH/vALJGw== -emittery@^0.13.1: - version "0.13.1" - resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" - integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - end-of-stream@^1.1.0, end-of-stream@^1.4.1: version "1.4.4" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" @@ -2555,18 +2547,6 @@ end-of-stream@^1.1.0, end-of-stream@^1.4.1: dependencies: once "^1.4.0" -entities@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" - integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== - -error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - es-define-property@^1.0.0, es-define-property@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" @@ -2577,6 +2557,11 @@ es-errors@^1.3.0: resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== +es-module-lexer@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.7.0.tgz#9159601561880a85f2734560a9099b2c31e5372a" + integrity sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA== + es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1" @@ -2584,16 +2569,6 @@ es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: dependencies: es-errors "^1.3.0" -es-set-tostringtag@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d" - integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA== - dependencies: - es-errors "^1.3.0" - get-intrinsic "^1.2.6" - has-tostringtag "^1.0.2" - hasown "^2.0.2" - es5-ext@^0.10.35, es5-ext@^0.10.62, es5-ext@^0.10.64, es5-ext@~0.10.14: version "0.10.64" resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.64.tgz#12e4ffb48f1ba2ea777f1fcdd1918ef73ea21714" @@ -2645,7 +2620,38 @@ es6-symbol@^3.1.1, es6-symbol@^3.1.3, es6-symbol@~3.1.1: d "^1.0.2" ext "^1.7.0" -escalade@^3.1.1, escalade@^3.2.0: +esbuild@^0.25.0: + version "0.25.5" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.25.5.tgz#71075054993fdfae76c66586f9b9c1f8d7edd430" + integrity sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ== + optionalDependencies: + "@esbuild/aix-ppc64" "0.25.5" + "@esbuild/android-arm" "0.25.5" + "@esbuild/android-arm64" "0.25.5" + "@esbuild/android-x64" "0.25.5" + "@esbuild/darwin-arm64" "0.25.5" + "@esbuild/darwin-x64" "0.25.5" + "@esbuild/freebsd-arm64" "0.25.5" + "@esbuild/freebsd-x64" "0.25.5" + "@esbuild/linux-arm" "0.25.5" + "@esbuild/linux-arm64" "0.25.5" + "@esbuild/linux-ia32" "0.25.5" + "@esbuild/linux-loong64" "0.25.5" + "@esbuild/linux-mips64el" "0.25.5" + "@esbuild/linux-ppc64" "0.25.5" + "@esbuild/linux-riscv64" "0.25.5" + "@esbuild/linux-s390x" "0.25.5" + "@esbuild/linux-x64" "0.25.5" + "@esbuild/netbsd-arm64" "0.25.5" + "@esbuild/netbsd-x64" "0.25.5" + "@esbuild/openbsd-arm64" "0.25.5" + "@esbuild/openbsd-x64" "0.25.5" + "@esbuild/sunos-x64" "0.25.5" + "@esbuild/win32-arm64" "0.25.5" + "@esbuild/win32-ia32" "0.25.5" + "@esbuild/win32-x64" "0.25.5" + +escalade@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== @@ -2655,11 +2661,6 @@ escape-string-regexp@^1.0.2: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== -escape-string-regexp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" - integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== - escape-string-regexp@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" @@ -2677,7 +2678,7 @@ escodegen@^1.11.1: optionalDependencies: source-map "~0.6.1" -escodegen@^2.0.0, escodegen@^2.1.0: +escodegen@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.1.0.tgz#ba93bbb7a43986d29d6041f99f5262da773e2e17" integrity sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w== @@ -2805,6 +2806,13 @@ estree-walker@^2.0.2: resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== +estree-walker@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-3.0.3.tgz#67c3e549ec402a487b4fc193d1953a524752340d" + integrity sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g== + dependencies: + "@types/estree" "^1.0.0" + esutils@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" @@ -2831,41 +2839,15 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: md5.js "^1.3.4" safe-buffer "^5.1.1" -execa@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" - integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.0" - human-signals "^2.1.0" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.1" - onetime "^5.1.2" - signal-exit "^3.0.3" - strip-final-newline "^2.0.0" - -exit@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" - integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== - expand-template@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== -expect@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/expect/-/expect-29.7.0.tgz#578874590dcb3214514084c08115d8aee61e11bc" - integrity sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw== - dependencies: - "@jest/expect-utils" "^29.7.0" - jest-get-type "^29.6.3" - jest-matcher-utils "^29.7.0" - jest-message-util "^29.7.0" - jest-util "^29.7.0" +expect-type@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/expect-type/-/expect-type-1.2.1.tgz#af76d8b357cf5fa76c41c09dafb79c549e75f71f" + integrity sha512-/kP8CAwxzLVEeFrMm4kMmy4CCDlpipyA7MYLVrdJIkV0fYF0UaigQHRsxHiuY/GEea+bh4KSv3TIlgr+2UL6bw== ext@^1.7.0: version "1.7.0" @@ -2919,6 +2901,16 @@ fb-watchman@^2.0.0: dependencies: bser "2.1.1" +fdir@^6.4.4: + version "6.4.6" + resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.4.6.tgz#2b268c0232697063111bbf3f64810a2a741ba281" + integrity sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w== + +fflate@^0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/fflate/-/fflate-0.8.2.tgz#fc8631f5347812ad6028bbe4a2308b2792aa1dea" + integrity sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A== + file-entry-cache@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-8.0.0.tgz#7787bddcf1131bffb92636c69457bbc0edd6d81f" @@ -3007,16 +2999,6 @@ for-each@^0.3.5: dependencies: is-callable "^1.2.7" -form-data@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.2.tgz#35cabbdd30c3ce73deb2c42d3c8d3ed9ca51794c" - integrity sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - es-set-tostringtag "^2.1.0" - mime-types "^2.1.12" - fs-constants@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" @@ -3045,7 +3027,7 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== -fsevents@^2.3.2, fsevents@~2.3.2: +fsevents@^2.3.2, fsevents@~2.3.2, fsevents@~2.3.3: version "2.3.3" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== @@ -3065,12 +3047,7 @@ get-assigned-identifiers@^1.1.0, get-assigned-identifiers@^1.2.0: resolved "https://registry.yarnpkg.com/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz#6dbf411de648cbaf8d9169ebb0d2d576191e2ff1" integrity sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ== -get-caller-file@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.3.0: +get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== @@ -3104,11 +3081,6 @@ get-stdin@^5.0.1: resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-5.0.1.tgz#122e161591e21ff4c52530305693f20e6393a398" integrity sha512-jZV7n6jGE3Gt7fgSTJoz91Ak5MuTLwMwkoYdjxuJ/AmjIsE1UC03y/IWkZCQGEvVNS9qoRNwy5BCqxImv0FVeA== -get-stream@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" - integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== - gh-pages@^6.2.0: version "6.3.0" resolved "https://registry.yarnpkg.com/gh-pages/-/gh-pages-6.3.0.tgz#a5b9476dd4385ceaf85c6467b2e05397093e7613" @@ -3279,57 +3251,16 @@ hmac-drbg@^1.0.1: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" -html-encoding-sniffer@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz#2cb1a8cf0db52414776e5b2a7a04d5dd98158de9" - integrity sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA== - dependencies: - whatwg-encoding "^2.0.0" - -html-escaper@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" - integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== - htmlescape@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/htmlescape/-/htmlescape-1.1.1.tgz#3a03edc2214bca3b66424a3e7959349509cb0351" integrity sha512-eVcrzgbR4tim7c7soKQKtxa/kQM4TzjnlU83rcZ9bHU6t31ehfV7SktN6McWgwPWg+JYMA/O3qpGxBvFq1z2Jg== -http-proxy-agent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" - integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== - dependencies: - "@tootallnate/once" "2" - agent-base "6" - debug "4" - https-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" integrity sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg== -https-proxy-agent@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" - integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== - dependencies: - agent-base "6" - debug "4" - -human-signals@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" - integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== - -iconv-lite@0.6.3: - version "0.6.3" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" - integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== - dependencies: - safer-buffer ">= 2.1.2 < 3.0.0" - ieee754@^1.1.13, ieee754@^1.1.4: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" @@ -3348,14 +3279,6 @@ import-fresh@^3.2.1: parent-module "^1.0.0" resolve-from "^4.0.0" -import-local@^3.0.2: - version "3.2.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.2.0.tgz#c3d5c745798c02a6f8b897726aba5100186ee260" - integrity sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA== - dependencies: - pkg-dir "^4.2.0" - resolve-cwd "^3.0.0" - imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" @@ -3415,11 +3338,6 @@ is-arguments@^1.0.4: call-bound "^1.0.2" has-tostringtag "^1.0.2" -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== - is-buffer@^1.1.0: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" @@ -3450,16 +3368,6 @@ is-extglob@^2.1.1: resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-generator-fn@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" - integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== - is-generator-function@^1.0.7: version "1.1.0" resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.1.0.tgz#bf3eeda931201394f57b5dba2800f91a238309ca" @@ -3487,11 +3395,6 @@ is-plain-object@^3.0.0: resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-3.0.1.tgz#662d92d24c0aa4302407b0d45d21f2251c85f85b" integrity sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g== -is-potential-custom-element-name@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" - integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== - is-promise@^2.0.0: version "2.2.2" resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1" @@ -3507,11 +3410,6 @@ is-regex@^1.0.3, is-regex@^1.2.1: has-tostringtag "^1.0.2" hasown "^2.0.2" -is-stream@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" - integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== - is-typed-array@^1.1.3: version "1.1.15" resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.15.tgz#4bfb4a45b61cee83a5a46fba778e4e8d59c0ce0b" @@ -3529,7 +3427,7 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== -istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: +istanbul-lib-coverage@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== @@ -3545,181 +3443,15 @@ istanbul-lib-instrument@^5.0.4: istanbul-lib-coverage "^3.2.0" semver "^6.3.0" -istanbul-lib-instrument@^6.0.0: - version "6.0.3" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz#fa15401df6c15874bcb2105f773325d78c666765" - integrity sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q== - dependencies: - "@babel/core" "^7.23.9" - "@babel/parser" "^7.23.9" - "@istanbuljs/schema" "^0.1.3" - istanbul-lib-coverage "^3.2.0" - semver "^7.5.4" - -istanbul-lib-report@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" - integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== +jest-diff@^30.0.1: + version "30.0.1" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-30.0.1.tgz#ec577188db9921bbaabdb1c770afc97a50f2084a" + integrity sha512-9uJGfS2tBBFTvn3ZjfPjrw0r7KtAcutTMs3k39+ur2xD0/MTdmz8SrTzuy1dMlGxmbSet1k79UFSJ2+U7dNEvQ== dependencies: - istanbul-lib-coverage "^3.0.0" - make-dir "^4.0.0" - supports-color "^7.1.0" - -istanbul-lib-source-maps@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" - integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== - dependencies: - debug "^4.1.1" - istanbul-lib-coverage "^3.0.0" - source-map "^0.6.1" - -istanbul-reports@^3.1.3: - version "3.1.7" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.7.tgz#daed12b9e1dca518e15c056e1e537e741280fa0b" - integrity sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g== - dependencies: - html-escaper "^2.0.0" - istanbul-lib-report "^3.0.0" - -jest-changed-files@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.7.0.tgz#1c06d07e77c78e1585d020424dedc10d6e17ac3a" - integrity sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w== - dependencies: - execa "^5.0.0" - jest-util "^29.7.0" - p-limit "^3.1.0" - -jest-circus@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.7.0.tgz#b6817a45fcc835d8b16d5962d0c026473ee3668a" - integrity sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw== - dependencies: - "@jest/environment" "^29.7.0" - "@jest/expect" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - chalk "^4.0.0" - co "^4.6.0" - dedent "^1.0.0" - is-generator-fn "^2.0.0" - jest-each "^29.7.0" - jest-matcher-utils "^29.7.0" - jest-message-util "^29.7.0" - jest-runtime "^29.7.0" - jest-snapshot "^29.7.0" - jest-util "^29.7.0" - p-limit "^3.1.0" - pretty-format "^29.7.0" - pure-rand "^6.0.0" - slash "^3.0.0" - stack-utils "^2.0.3" - -jest-cli@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.7.0.tgz#5592c940798e0cae677eec169264f2d839a37995" - integrity sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg== - dependencies: - "@jest/core" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/types" "^29.6.3" - chalk "^4.0.0" - create-jest "^29.7.0" - exit "^0.1.2" - import-local "^3.0.2" - jest-config "^29.7.0" - jest-util "^29.7.0" - jest-validate "^29.7.0" - yargs "^17.3.1" - -jest-config@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.7.0.tgz#bcbda8806dbcc01b1e316a46bb74085a84b0245f" - integrity sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ== - dependencies: - "@babel/core" "^7.11.6" - "@jest/test-sequencer" "^29.7.0" - "@jest/types" "^29.6.3" - babel-jest "^29.7.0" - chalk "^4.0.0" - ci-info "^3.2.0" - deepmerge "^4.2.2" - glob "^7.1.3" - graceful-fs "^4.2.9" - jest-circus "^29.7.0" - jest-environment-node "^29.7.0" - jest-get-type "^29.6.3" - jest-regex-util "^29.6.3" - jest-resolve "^29.7.0" - jest-runner "^29.7.0" - jest-util "^29.7.0" - jest-validate "^29.7.0" - micromatch "^4.0.4" - parse-json "^5.2.0" - pretty-format "^29.7.0" - slash "^3.0.0" - strip-json-comments "^3.1.1" - -jest-diff@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.7.0.tgz#017934a66ebb7ecf6f205e84699be10afd70458a" - integrity sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw== - dependencies: - chalk "^4.0.0" - diff-sequences "^29.6.3" - jest-get-type "^29.6.3" - pretty-format "^29.7.0" - -jest-docblock@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.7.0.tgz#8fddb6adc3cdc955c93e2a87f61cfd350d5d119a" - integrity sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g== - dependencies: - detect-newline "^3.0.0" - -jest-each@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.7.0.tgz#162a9b3f2328bdd991beaabffbb74745e56577d1" - integrity sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ== - dependencies: - "@jest/types" "^29.6.3" - chalk "^4.0.0" - jest-get-type "^29.6.3" - jest-util "^29.7.0" - pretty-format "^29.7.0" - -jest-environment-jsdom@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-29.7.0.tgz#d206fa3551933c3fd519e5dfdb58a0f5139a837f" - integrity sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA== - dependencies: - "@jest/environment" "^29.7.0" - "@jest/fake-timers" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/jsdom" "^20.0.0" - "@types/node" "*" - jest-mock "^29.7.0" - jest-util "^29.7.0" - jsdom "^20.0.0" - -jest-environment-node@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.7.0.tgz#0b93e111dda8ec120bc8300e6d1fb9576e164376" - integrity sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw== - dependencies: - "@jest/environment" "^29.7.0" - "@jest/fake-timers" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - jest-mock "^29.7.0" - jest-util "^29.7.0" - -jest-get-type@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1" - integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw== + "@jest/diff-sequences" "30.0.1" + "@jest/get-type" "30.0.1" + chalk "^4.1.2" + pretty-format "30.0.1" jest-haste-map@^29.7.0: version "29.7.0" @@ -3754,162 +3486,11 @@ jest-image-snapshot@^6.4.0: rimraf "^2.6.2" ssim.js "^3.1.1" -jest-leak-detector@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz#5b7ec0dadfdfec0ca383dc9aa016d36b5ea4c728" - integrity sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw== - dependencies: - jest-get-type "^29.6.3" - pretty-format "^29.7.0" - -jest-matcher-utils@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz#ae8fec79ff249fd592ce80e3ee474e83a6c44f12" - integrity sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g== - dependencies: - chalk "^4.0.0" - jest-diff "^29.7.0" - jest-get-type "^29.6.3" - pretty-format "^29.7.0" - -jest-message-util@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.7.0.tgz#8bc392e204e95dfe7564abbe72a404e28e51f7f3" - integrity sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w== - dependencies: - "@babel/code-frame" "^7.12.13" - "@jest/types" "^29.6.3" - "@types/stack-utils" "^2.0.0" - chalk "^4.0.0" - graceful-fs "^4.2.9" - micromatch "^4.0.4" - pretty-format "^29.7.0" - slash "^3.0.0" - stack-utils "^2.0.3" - -jest-mock@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.7.0.tgz#4e836cf60e99c6fcfabe9f99d017f3fdd50a6347" - integrity sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw== - dependencies: - "@jest/types" "^29.6.3" - "@types/node" "*" - jest-util "^29.7.0" - -jest-pnp-resolver@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" - integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== - jest-regex-util@^29.6.3: version "29.6.3" resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.6.3.tgz#4a556d9c776af68e1c5f48194f4d0327d24e8a52" integrity sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg== -jest-resolve-dependencies@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz#1b04f2c095f37fc776ff40803dc92921b1e88428" - integrity sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA== - dependencies: - jest-regex-util "^29.6.3" - jest-snapshot "^29.7.0" - -jest-resolve@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.7.0.tgz#64d6a8992dd26f635ab0c01e5eef4399c6bcbc30" - integrity sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA== - dependencies: - chalk "^4.0.0" - graceful-fs "^4.2.9" - jest-haste-map "^29.7.0" - jest-pnp-resolver "^1.2.2" - jest-util "^29.7.0" - jest-validate "^29.7.0" - resolve "^1.20.0" - resolve.exports "^2.0.0" - slash "^3.0.0" - -jest-runner@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.7.0.tgz#809af072d408a53dcfd2e849a4c976d3132f718e" - integrity sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ== - dependencies: - "@jest/console" "^29.7.0" - "@jest/environment" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - chalk "^4.0.0" - emittery "^0.13.1" - graceful-fs "^4.2.9" - jest-docblock "^29.7.0" - jest-environment-node "^29.7.0" - jest-haste-map "^29.7.0" - jest-leak-detector "^29.7.0" - jest-message-util "^29.7.0" - jest-resolve "^29.7.0" - jest-runtime "^29.7.0" - jest-util "^29.7.0" - jest-watcher "^29.7.0" - jest-worker "^29.7.0" - p-limit "^3.1.0" - source-map-support "0.5.13" - -jest-runtime@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.7.0.tgz#efecb3141cf7d3767a3a0cc8f7c9990587d3d817" - integrity sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ== - dependencies: - "@jest/environment" "^29.7.0" - "@jest/fake-timers" "^29.7.0" - "@jest/globals" "^29.7.0" - "@jest/source-map" "^29.6.3" - "@jest/test-result" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - chalk "^4.0.0" - cjs-module-lexer "^1.0.0" - collect-v8-coverage "^1.0.0" - glob "^7.1.3" - graceful-fs "^4.2.9" - jest-haste-map "^29.7.0" - jest-message-util "^29.7.0" - jest-mock "^29.7.0" - jest-regex-util "^29.6.3" - jest-resolve "^29.7.0" - jest-snapshot "^29.7.0" - jest-util "^29.7.0" - slash "^3.0.0" - strip-bom "^4.0.0" - -jest-snapshot@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.7.0.tgz#c2c574c3f51865da1bb329036778a69bf88a6be5" - integrity sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw== - dependencies: - "@babel/core" "^7.11.6" - "@babel/generator" "^7.7.2" - "@babel/plugin-syntax-jsx" "^7.7.2" - "@babel/plugin-syntax-typescript" "^7.7.2" - "@babel/types" "^7.3.3" - "@jest/expect-utils" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" - babel-preset-current-node-syntax "^1.0.0" - chalk "^4.0.0" - expect "^29.7.0" - graceful-fs "^4.2.9" - jest-diff "^29.7.0" - jest-get-type "^29.6.3" - jest-matcher-utils "^29.7.0" - jest-message-util "^29.7.0" - jest-util "^29.7.0" - natural-compare "^1.4.0" - pretty-format "^29.7.0" - semver "^7.5.3" - jest-util@^29.7.0: version "29.7.0" resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" @@ -3922,32 +3503,6 @@ jest-util@^29.7.0: graceful-fs "^4.2.9" picomatch "^2.2.3" -jest-validate@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.7.0.tgz#7bf705511c64da591d46b15fce41400d52147d9c" - integrity sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw== - dependencies: - "@jest/types" "^29.6.3" - camelcase "^6.2.0" - chalk "^4.0.0" - jest-get-type "^29.6.3" - leven "^3.1.0" - pretty-format "^29.7.0" - -jest-watcher@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.7.0.tgz#7810d30d619c3a62093223ce6bb359ca1b28a2f2" - integrity sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g== - dependencies: - "@jest/test-result" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - emittery "^0.13.1" - jest-util "^29.7.0" - string-length "^4.0.1" - jest-worker@^29.7.0: version "29.7.0" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.7.0.tgz#acad073acbbaeb7262bd5389e1bcf43e10058d4a" @@ -3958,16 +3513,6 @@ jest-worker@^29.7.0: merge-stream "^2.0.0" supports-color "^8.0.0" -jest@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest/-/jest-29.7.0.tgz#994676fc24177f088f1c5e3737f5697204ff2613" - integrity sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw== - dependencies: - "@jest/core" "^29.7.0" - "@jest/types" "^29.6.3" - import-local "^3.0.2" - jest-cli "^29.7.0" - jpeg-exif@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/jpeg-exif/-/jpeg-exif-1.1.4.tgz#781a65b6cd74f62cb1c493511020f8d3577a1c2b" @@ -3983,6 +3528,11 @@ js-tokens@^4.0.0: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== +js-tokens@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-9.0.1.tgz#2ec43964658435296f6761b34e10671c2d9527f4" + integrity sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ== + js-yaml@^3.13.1: version "3.14.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" @@ -3998,38 +3548,6 @@ js-yaml@^4.1.0: dependencies: argparse "^2.0.1" -jsdom@^20.0.0: - version "20.0.3" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-20.0.3.tgz#886a41ba1d4726f67a8858028c99489fed6ad4db" - integrity sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ== - dependencies: - abab "^2.0.6" - acorn "^8.8.1" - acorn-globals "^7.0.0" - cssom "^0.5.0" - cssstyle "^2.3.0" - data-urls "^3.0.2" - decimal.js "^10.4.2" - domexception "^4.0.0" - escodegen "^2.0.0" - form-data "^4.0.0" - html-encoding-sniffer "^3.0.0" - http-proxy-agent "^5.0.0" - https-proxy-agent "^5.0.1" - is-potential-custom-element-name "^1.0.1" - nwsapi "^2.2.2" - parse5 "^7.1.1" - saxes "^6.0.0" - symbol-tree "^3.2.4" - tough-cookie "^4.1.2" - w3c-xmlserializer "^4.0.0" - webidl-conversions "^7.0.0" - whatwg-encoding "^2.0.0" - whatwg-mimetype "^3.0.0" - whatwg-url "^11.0.0" - ws "^8.11.0" - xml-name-validator "^4.0.0" - jsesc@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d" @@ -4045,11 +3563,6 @@ json-buffer@3.0.1: resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== -json-parse-even-better-errors@^2.3.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" - integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== - json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" @@ -4101,11 +3614,6 @@ keyv@^4.5.4: dependencies: json-buffer "3.0.1" -kleur@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" - integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== - labeled-stream-splicer@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/labeled-stream-splicer/-/labeled-stream-splicer-2.0.2.tgz#42a41a16abcd46fd046306cf4f2c3576fffb1c21" @@ -4114,11 +3622,6 @@ labeled-stream-splicer@^2.0.0: inherits "^2.0.1" stream-splicer "^2.0.0" -leven@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" - integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== - levn@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" @@ -4143,11 +3646,6 @@ linebreak@^1.1.0: base64-js "0.0.8" unicode-trie "^2.0.0" -lines-and-columns@^1.1.6: - version "1.2.4" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" - integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== - locate-path@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" @@ -4182,6 +3680,11 @@ lodash@^4.17.4: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== +loupe@^3.1.0, loupe@^3.1.4: + version "3.1.4" + resolved "https://registry.yarnpkg.com/loupe/-/loupe-3.1.4.tgz#784a0060545cb38778ffb19ccde44d7870d5fdd9" + integrity sha512-wJzkKwJrheKtknCOKNEtDK4iqg/MxmZheEMtSTYvnzRdEYaZzmgH976nenp8WdJRdx5Vc1X/9MO0Oszl6ezeXg== + lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" @@ -4196,6 +3699,13 @@ magic-string@0.25.1: dependencies: sourcemap-codec "^1.4.1" +magic-string@^0.30.17: + version "0.30.17" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.17.tgz#450a449673d2460e5bbcfba9a61916a1714c7453" + integrity sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA== + dependencies: + "@jridgewell/sourcemap-codec" "^1.5.0" + make-dir@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" @@ -4203,13 +3713,6 @@ make-dir@^3.0.2: dependencies: semver "^6.0.0" -make-dir@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" - integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== - dependencies: - semver "^7.5.3" - makeerror@1.0.12: version "1.0.12" resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" @@ -4271,23 +3774,6 @@ miller-rabin@^4.0.0: bn.js "^4.0.0" brorand "^1.0.1" -mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@^2.1.12: - version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - mimic-response@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" @@ -4346,6 +3832,11 @@ ms@^2.1.3: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== +nanoid@^3.3.11: + version "3.3.11" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.11.tgz#4f4f112cefbe303202f2199838128936266d185b" + integrity sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w== + napi-build-utils@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-2.0.0.tgz#13c22c0187fcfccce1461844136372a47ddc027e" @@ -4395,18 +3886,6 @@ normalize-path@^3.0.0: resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== -npm-run-path@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" - integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== - dependencies: - path-key "^3.0.0" - -nwsapi@^2.2.2: - version "2.2.20" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.20.tgz#22e53253c61e7b0e7e93cef42c891154bcca11ef" - integrity sha512-/ieB+mDe4MrrKMT8z+mQL8klXydZWGR5Dowt4RAGKbJ3kIGEx3X4ljUo+6V73IXtUPWgfOlU5B9MlGxFO5T+cA== - object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" @@ -4441,13 +3920,6 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0: dependencies: wrappy "1" -onetime@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - optionator@^0.8.1: version "0.8.3" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" @@ -4484,7 +3956,7 @@ p-limit@^2.2.0: dependencies: p-try "^2.0.0" -p-limit@^3.0.2, p-limit@^3.1.0: +p-limit@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== @@ -4546,23 +4018,6 @@ parse-asn1@^5.0.0, parse-asn1@^5.1.7: pbkdf2 "^3.1.2" safe-buffer "^5.2.1" -parse-json@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" - integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== - dependencies: - "@babel/code-frame" "^7.0.0" - error-ex "^1.3.1" - json-parse-even-better-errors "^2.3.0" - lines-and-columns "^1.1.6" - -parse5@^7.0.0, parse5@^7.1.1: - version "7.2.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.2.1.tgz#8928f55915e6125f430cc44309765bf17556a33a" - integrity sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ== - dependencies: - entities "^4.5.0" - path-browserify@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" @@ -4578,7 +4033,7 @@ path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== -path-key@^3.0.0, path-key@^3.1.0: +path-key@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== @@ -4598,6 +4053,16 @@ path-type@^4.0.0: resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== +pathe@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/pathe/-/pathe-2.0.3.tgz#3ecbec55421685b70a9da872b2cff3e1cbed1716" + integrity sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w== + +pathval@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pathval/-/pathval-2.0.0.tgz#7e2550b422601d4f6b8e26f1301bc8f15a741a25" + integrity sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA== + pbkdf2@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" @@ -4644,7 +4109,7 @@ pixelmatch@^5.1.0: dependencies: pngjs "^6.0.0" -pkg-dir@^4.1.0, pkg-dir@^4.2.0: +pkg-dir@^4.1.0: version "4.2.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== @@ -4671,6 +4136,15 @@ possible-typed-array-names@^1.0.0: resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz#93e3582bc0e5426586d9d07b79ee40fc841de4ae" integrity sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg== +postcss@^8.5.3: + version "8.5.6" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.6.tgz#2825006615a619b4f62a9e7426cc120b349a8f3c" + integrity sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg== + dependencies: + nanoid "^3.3.11" + picocolors "^1.1.1" + source-map-js "^1.2.1" + prebuild-install@^7.1.1: version "7.1.3" resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.3.tgz#d630abad2b147443f20a212917beae68b8092eec" @@ -4704,14 +4178,14 @@ prettier@3.4.2: resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.4.2.tgz#a5ce1fb522a588bf2b78ca44c6e6fe5aa5a2b13f" integrity sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ== -pretty-format@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" - integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== +pretty-format@30.0.1: + version "30.0.1" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-30.0.1.tgz#9324ce34f6e4f6adf0a9c7aee3f6d7e8ec869c91" + integrity sha512-2pkYD4WKYrAVyx/Jo7DmV+XAVJ9PuC0gVi9/gCPOxd+dN6WD+Pa7+ScUdh3f9m2klEPEZmfu8HoyYnuaGXzGAA== dependencies: - "@jest/schemas" "^29.6.3" - ansi-styles "^5.0.0" - react-is "^18.0.0" + "@jest/schemas" "30.0.1" + ansi-styles "^5.2.0" + react-is "^18.3.1" process-nextick-args@~2.0.0: version "2.0.1" @@ -4730,21 +4204,6 @@ promise@^7.0.1: dependencies: asap "~2.0.3" -prompts@^2.0.1: - version "2.4.2" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" - integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== - dependencies: - kleur "^3.0.3" - sisteransi "^1.0.5" - -psl@^1.1.33: - version "1.15.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.15.0.tgz#bdace31896f1d97cec6a79e8224898ce93d974c6" - integrity sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w== - dependencies: - punycode "^2.3.1" - public-encrypt@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" @@ -4873,16 +4332,11 @@ punycode@^1.3.2, punycode@^1.4.1: resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" integrity sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ== -punycode@^2.1.0, punycode@^2.1.1, punycode@^2.3.1: +punycode@^2.1.0: version "2.3.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== -pure-rand@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.1.0.tgz#d173cf23258231976ccbdb05247c9787957604f2" - integrity sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA== - qs@^6.12.3: version "6.14.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.14.0.tgz#c63fa40680d2c5c941412a0e899c89af60c0a930" @@ -4895,11 +4349,6 @@ querystring-es3@~0.2.0: resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" integrity sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA== -querystringify@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" - integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== - queue-microtask@^1.2.2: version "1.2.3" resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" @@ -4939,7 +4388,7 @@ rc@^1.2.7: minimist "^1.2.0" strip-json-comments "~2.0.1" -react-is@^18.0.0: +react-is@^18.3.1: version "18.3.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e" integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg== @@ -5021,23 +4470,6 @@ regjsparser@^0.12.0: dependencies: jsesc "~3.0.2" -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== - -requires-port@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== - -resolve-cwd@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" - integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== - dependencies: - resolve-from "^5.0.0" - resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" @@ -5048,12 +4480,7 @@ resolve-from@^5.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== -resolve.exports@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.3.tgz#41955e6f1b4013b7586f873749a635dea07ebe3f" - integrity sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A== - -resolve@^1.1.4, resolve@^1.1.5, resolve@^1.14.2, resolve@^1.15.1, resolve@^1.17.0, resolve@^1.20.0, resolve@^1.4.0: +resolve@^1.1.4, resolve@^1.1.5, resolve@^1.14.2, resolve@^1.15.1, resolve@^1.17.0, resolve@^1.4.0: version "1.22.10" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.10.tgz#b663e83ffb09bbf2386944736baae803029b8b39" integrity sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w== @@ -5105,6 +4532,35 @@ rollup@^2.79.2: optionalDependencies: fsevents "~2.3.2" +rollup@^4.34.9: + version "4.43.0" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.43.0.tgz#275c09119eb7eaf0c3dea040523b81ef43c57b8c" + integrity sha512-wdN2Kd3Twh8MAEOEJZsuxuLKCsBEo4PVNLK6tQWAn10VhsVewQLzcucMgLolRlhFybGxfclbPeEYBaP6RvUFGg== + dependencies: + "@types/estree" "1.0.7" + optionalDependencies: + "@rollup/rollup-android-arm-eabi" "4.43.0" + "@rollup/rollup-android-arm64" "4.43.0" + "@rollup/rollup-darwin-arm64" "4.43.0" + "@rollup/rollup-darwin-x64" "4.43.0" + "@rollup/rollup-freebsd-arm64" "4.43.0" + "@rollup/rollup-freebsd-x64" "4.43.0" + "@rollup/rollup-linux-arm-gnueabihf" "4.43.0" + "@rollup/rollup-linux-arm-musleabihf" "4.43.0" + "@rollup/rollup-linux-arm64-gnu" "4.43.0" + "@rollup/rollup-linux-arm64-musl" "4.43.0" + "@rollup/rollup-linux-loongarch64-gnu" "4.43.0" + "@rollup/rollup-linux-powerpc64le-gnu" "4.43.0" + "@rollup/rollup-linux-riscv64-gnu" "4.43.0" + "@rollup/rollup-linux-riscv64-musl" "4.43.0" + "@rollup/rollup-linux-s390x-gnu" "4.43.0" + "@rollup/rollup-linux-x64-gnu" "4.43.0" + "@rollup/rollup-linux-x64-musl" "4.43.0" + "@rollup/rollup-win32-arm64-msvc" "4.43.0" + "@rollup/rollup-win32-ia32-msvc" "4.43.0" + "@rollup/rollup-win32-x64-msvc" "4.43.0" + fsevents "~2.3.2" + run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" @@ -5131,18 +4587,6 @@ safe-regex-test@^1.1.0: es-errors "^1.3.0" is-regex "^1.2.1" -"safer-buffer@>= 2.1.2 < 3.0.0": - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -saxes@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/saxes/-/saxes-6.0.0.tgz#fe5b4a4768df4f14a201b1ba6a65c1f3d9988cc5" - integrity sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA== - dependencies: - xmlchars "^2.2.0" - scope-analyzer@^2.0.1: version "2.1.2" resolved "https://registry.yarnpkg.com/scope-analyzer/-/scope-analyzer-2.1.2.tgz#b958162feb59823c2835c7b0229187a97c77e9cd" @@ -5161,7 +4605,7 @@ semver@^6.0.0, semver@^6.3.0, semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.3.5, semver@^7.5.3, semver@^7.5.4: +semver@^7.3.5: version "7.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.1.tgz#abd5098d82b18c6c81f6074ff2647fd3e7220c9f" integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA== @@ -5255,7 +4699,12 @@ side-channel@^1.1.0: side-channel-map "^1.0.1" side-channel-weakmap "^1.0.2" -signal-exit@^3.0.3, signal-exit@^3.0.7: +siginfo@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/siginfo/-/siginfo-2.0.0.tgz#32e76c70b79724e3bb567cb9d543eb858ccfaf30" + integrity sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g== + +signal-exit@^3.0.7: version "3.0.7" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== @@ -5274,30 +4723,22 @@ simple-get@^4.0.0: once "^1.3.1" simple-concat "^1.0.0" -sisteransi@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" - integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== - slash@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== -source-map-support@0.5.13: - version "0.5.13" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" - integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" +source-map-js@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" + integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== source-map@^0.5.6, source-map@~0.5.3: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: +source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== @@ -5317,12 +4758,10 @@ ssim.js@^3.1.1: resolved "https://registry.yarnpkg.com/ssim.js/-/ssim.js-3.5.0.tgz#d7276b9ee99b57a5ff0db34035f02f35197e62df" integrity sha512-Aj6Jl2z6oDmgYFFbQqK7fght19bXdOxY7Tj03nF+03M9gCBAjeIiO8/PlEGMfKDwYpw4q6iBqVq2YuREorGg/g== -stack-utils@^2.0.3: - version "2.0.6" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" - integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== - dependencies: - escape-string-regexp "^2.0.0" +stackback@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/stackback/-/stackback-0.0.2.tgz#1ac8a0d9483848d1695e418b6d031a3c3ce68e3b" + integrity sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw== static-eval@^2.0.5: version "2.1.1" @@ -5351,6 +4790,11 @@ static-module@^3.0.2: static-eval "^2.0.5" through2 "~2.0.3" +std-env@^3.9.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.9.0.tgz#1a6f7243b339dca4c9fd55e1c7504c77ef23e8f1" + integrity sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw== + stream-browserify@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-3.0.0.tgz#22b0a2850cdf6503e73085da1fc7b7d0c2122f2f" @@ -5385,23 +4829,6 @@ stream-splicer@^2.0.0: inherits "^2.0.1" readable-stream "^2.0.2" -string-length@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" - integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== - dependencies: - char-regex "^1.0.2" - strip-ansi "^6.0.0" - -string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - string_decoder@^1.1.1: version "1.3.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" @@ -5416,23 +4843,6 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-bom@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" - integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== - -strip-final-newline@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" - integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== - strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" @@ -5443,6 +4853,13 @@ strip-json-comments@~2.0.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== +strip-literal@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-literal/-/strip-literal-3.0.0.tgz#ce9c452a91a0af2876ed1ae4e583539a353df3fc" + integrity sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA== + dependencies: + js-tokens "^9.0.1" + strip-outer@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/strip-outer/-/strip-outer-1.0.1.tgz#b2fd2abf6604b9d1e6013057195df836b8a9d631" @@ -5476,11 +4893,6 @@ supports-preserve-symlinks-flag@^1.0.0: resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== -symbol-tree@^3.2.4: - version "3.2.4" - resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" - integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== - syntax-error@^1.1.1: version "1.4.0" resolved "https://registry.yarnpkg.com/syntax-error/-/syntax-error-1.4.0.tgz#2d9d4ff5c064acb711594a3e3b95054ad51d907c" @@ -5543,6 +4955,39 @@ tiny-inflate@^1.0.0, tiny-inflate@^1.0.3: resolved "https://registry.yarnpkg.com/tiny-inflate/-/tiny-inflate-1.0.3.tgz#122715494913a1805166aaf7c93467933eea26c4" integrity sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw== +tinybench@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/tinybench/-/tinybench-2.9.0.tgz#103c9f8ba6d7237a47ab6dd1dcff77251863426b" + integrity sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg== + +tinyexec@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/tinyexec/-/tinyexec-0.3.2.tgz#941794e657a85e496577995c6eef66f53f42b3d2" + integrity sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA== + +tinyglobby@^0.2.13, tinyglobby@^0.2.14: + version "0.2.14" + resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.14.tgz#5280b0cf3f972b050e74ae88406c0a6a58f4079d" + integrity sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ== + dependencies: + fdir "^6.4.4" + picomatch "^4.0.2" + +tinypool@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/tinypool/-/tinypool-1.1.1.tgz#059f2d042bd37567fbc017d3d426bdd2a2612591" + integrity sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg== + +tinyrainbow@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/tinyrainbow/-/tinyrainbow-2.0.0.tgz#9509b2162436315e80e3eee0fcce4474d2444294" + integrity sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw== + +tinyspy@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/tinyspy/-/tinyspy-4.0.3.tgz#d1d0f0602f4c15f1aae083a34d6d0df3363b1b52" + integrity sha512-t2T/WLB2WRgZ9EpE4jgPJ9w+i66UZfDc8wHh0xrwiRNN+UwH98GIJkTeZqX9rg0i0ptwzqW+uYeIF0T4F8LR7A== + tmpl@1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" @@ -5560,23 +5005,6 @@ token-stream@1.0.0: resolved "https://registry.yarnpkg.com/token-stream/-/token-stream-1.0.0.tgz#cc200eab2613f4166d27ff9afc7ca56d49df6eb4" integrity sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg== -tough-cookie@^4.1.2: - version "4.1.4" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.4.tgz#945f1461b45b5a8c76821c33ea49c3ac192c1b36" - integrity sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag== - dependencies: - psl "^1.1.33" - punycode "^2.1.1" - universalify "^0.2.0" - url-parse "^1.5.3" - -tr46@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-3.0.0.tgz#555c4e297a950617e8eeddef633c87d4d9d6cbf9" - integrity sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA== - dependencies: - punycode "^2.1.1" - trim-repeated@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/trim-repeated/-/trim-repeated-1.0.0.tgz#e3646a2ea4e891312bf7eace6cfb05380bc01c21" @@ -5615,16 +5043,6 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" -type-detect@4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" - integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== - -type-fest@^0.21.3: - version "0.21.3" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" - integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== - type@^2.7.2: version "2.7.3" resolved "https://registry.yarnpkg.com/type/-/type-2.7.3.tgz#436981652129285cc3ba94f392886c2637ea0486" @@ -5700,11 +5118,6 @@ universalify@^0.1.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== -universalify@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" - integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== - universalify@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" @@ -5725,14 +5138,6 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" -url-parse@^1.5.3: - version "1.5.10" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" - integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== - dependencies: - querystringify "^2.1.1" - requires-port "^1.0.0" - url@~0.11.0: version "0.11.4" resolved "https://registry.yarnpkg.com/url/-/url-0.11.4.tgz#adca77b3562d56b72746e76b330b7f27b6721f3c" @@ -5764,14 +5169,59 @@ util@~0.12.0: is-typed-array "^1.1.3" which-typed-array "^1.1.2" -v8-to-istanbul@^9.0.1: - version "9.3.0" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz#b9572abfa62bd556c16d75fdebc1a411d5ff3175" - integrity sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA== - dependencies: - "@jridgewell/trace-mapping" "^0.3.12" - "@types/istanbul-lib-coverage" "^2.0.1" - convert-source-map "^2.0.0" +vite-node@3.2.4: + version "3.2.4" + resolved "https://registry.yarnpkg.com/vite-node/-/vite-node-3.2.4.tgz#f3676d94c4af1e76898c162c92728bca65f7bb07" + integrity sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg== + dependencies: + cac "^6.7.14" + debug "^4.4.1" + es-module-lexer "^1.7.0" + pathe "^2.0.3" + vite "^5.0.0 || ^6.0.0 || ^7.0.0-0" + +"vite@^5.0.0 || ^6.0.0 || ^7.0.0-0": + version "6.3.5" + resolved "https://registry.yarnpkg.com/vite/-/vite-6.3.5.tgz#fec73879013c9c0128c8d284504c6d19410d12a3" + integrity sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ== + dependencies: + esbuild "^0.25.0" + fdir "^6.4.4" + picomatch "^4.0.2" + postcss "^8.5.3" + rollup "^4.34.9" + tinyglobby "^0.2.13" + optionalDependencies: + fsevents "~2.3.3" + +vitest@^3.2.4: + version "3.2.4" + resolved "https://registry.yarnpkg.com/vitest/-/vitest-3.2.4.tgz#0637b903ad79d1539a25bc34c0ed54b5c67702ea" + integrity sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A== + dependencies: + "@types/chai" "^5.2.2" + "@vitest/expect" "3.2.4" + "@vitest/mocker" "3.2.4" + "@vitest/pretty-format" "^3.2.4" + "@vitest/runner" "3.2.4" + "@vitest/snapshot" "3.2.4" + "@vitest/spy" "3.2.4" + "@vitest/utils" "3.2.4" + chai "^5.2.0" + debug "^4.4.1" + expect-type "^1.2.1" + magic-string "^0.30.17" + pathe "^2.0.3" + picomatch "^4.0.2" + std-env "^3.9.0" + tinybench "^2.9.0" + tinyexec "^0.3.2" + tinyglobby "^0.2.14" + tinypool "^1.1.1" + tinyrainbow "^2.0.0" + vite "^5.0.0 || ^6.0.0 || ^7.0.0-0" + vite-node "3.2.4" + why-is-node-running "^2.3.0" vm-browserify@^1.0.0: version "1.1.2" @@ -5783,13 +5233,6 @@ void-elements@^3.1.0: resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-3.1.0.tgz#614f7fbf8d801f0bb5f0661f5b2f5785750e4f09" integrity sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w== -w3c-xmlserializer@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz#aebdc84920d806222936e3cdce408e32488a3073" - integrity sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw== - dependencies: - xml-name-validator "^4.0.0" - walker@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" @@ -5802,31 +5245,6 @@ web-streams-polyfill@^3.2.1: resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz#2073b91a2fdb1fbfbd401e7de0ac9f8214cecb4b" integrity sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw== -webidl-conversions@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" - integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== - -whatwg-encoding@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz#e7635f597fd87020858626805a2729fa7698ac53" - integrity sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg== - dependencies: - iconv-lite "0.6.3" - -whatwg-mimetype@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz#5fa1a7623867ff1af6ca3dc72ad6b8a4208beba7" - integrity sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q== - -whatwg-url@^11.0.0: - version "11.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-11.0.0.tgz#0a849eebb5faf2119b901bb76fd795c2848d4018" - integrity sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ== - dependencies: - tr46 "^3.0.0" - webidl-conversions "^7.0.0" - which-typed-array@^1.1.16, which-typed-array@^1.1.2: version "1.1.19" resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.19.tgz#df03842e870b6b88e117524a4b364b6fc689f956" @@ -5847,6 +5265,14 @@ which@^2.0.1: dependencies: isexe "^2.0.0" +why-is-node-running@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/why-is-node-running/-/why-is-node-running-2.3.0.tgz#a3f69a97107f494b3cdc3bdddd883a7d65cebf04" + integrity sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w== + dependencies: + siginfo "^2.0.0" + stackback "0.0.2" + with@^7.0.0: version "7.0.2" resolved "https://registry.yarnpkg.com/with/-/with-7.0.2.tgz#ccee3ad542d25538a7a7a80aad212b9828495bac" @@ -5862,15 +5288,6 @@ word-wrap@^1.2.5, word-wrap@~1.2.3: resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" @@ -5884,54 +5301,16 @@ write-file-atomic@^4.0.2: imurmurhash "^0.1.4" signal-exit "^3.0.7" -ws@^8.11.0: - version "8.18.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.1.tgz#ea131d3784e1dfdff91adb0a4a116b127515e3cb" - integrity sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w== - -xml-name-validator@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz#79a006e2e63149a8600f15430f0a4725d1524835" - integrity sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw== - -xmlchars@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" - integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== - xtend@^4.0.0, xtend@^4.0.1, xtend@^4.0.2, xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== -y18n@^5.0.5: - version "5.0.8" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" - integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== - yallist@^3.0.2: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== -yargs-parser@^21.1.1: - version "21.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" - integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== - -yargs@^17.3.1: - version "17.7.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" - integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== - dependencies: - cliui "^8.0.1" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.3" - y18n "^5.0.5" - yargs-parser "^21.1.1" - yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" From 0aec4eba12e70921b7e075f12783eadfe8c3b1f3 Mon Sep 17 00:00:00 2001 From: Jake Holland Date: Fri, 20 Jun 2025 16:37:28 +0100 Subject: [PATCH 03/12] Fixed text width discrepancies related to adjacent glyph interactions --- lib/text/layout.js | 166 ++++++++++++++++++++------------------ lib/text/types.js | 20 ++++- tests/visual/text.spec.js | 9 ++- 3 files changed, 113 insertions(+), 82 deletions(-) diff --git a/lib/text/layout.js b/lib/text/layout.js index 66265a34..0be3d30c 100644 --- a/lib/text/layout.js +++ b/lib/text/layout.js @@ -1,6 +1,11 @@ import { Rules } from '@cto.af/linebreak'; import { computeInscribedBounds, normalizeAlignment, normalizeRotation, normalizeSides, rotateBox } from '../utils'; +// TODO: This may need to a polyfill +// The grapheme segmentation is not respective of locale +const SEGMENTER = new Intl.Segmenter(undefined, { granularity: 'grapheme' }); +const LINE_BREAKER = new Rules({ string: true }); + const SOFT_HYPHEN = '\u00AD'; const HYPHEN = '-'; @@ -21,15 +26,7 @@ export default class LayoutEngine { constructor(doc, options) { /** @type {any} */ this.doc = doc; - this.options = this._normalizeLayoutOptions(options); - // TODO: This may need to a polyfill - this.segmenter = new Intl.Segmenter(this.options.locales, { granularity: 'grapheme' }); - this.lineBreaker = new Rules({ string: true }); - /** - * Cache computed widths of string to skip processing of equal segments - * @type {Map} - */ - this.widthCache = new Map(); + this.options = this.#normalizeLayoutOptions(options); } /** @@ -61,7 +58,7 @@ export default class LayoutEngine { * @returns {{x: number, y: number, width: number, height: number}} */ boundsOfString(text, options) { - const textOptions = this._normalizeTextOptions(options); + const textOptions = this.#normalizeTextOptions(options); // Compute max bounds const [maxWidth, maxHeight] = computeInscribedBounds( @@ -74,7 +71,7 @@ export default class LayoutEngine { let contentWidth = 0; // Use `_constrainedLines()` as we don't care about the formatting applied in `lines()` - for (const [, width, height] of this._constrainedLines(text, maxWidth, maxHeight, textOptions)) { + for (const [, width, height] of this.#constrainedLines(text, maxWidth, maxHeight, textOptions)) { contentHeight += height; contentWidth = Math.max(contentWidth, width); } @@ -175,16 +172,16 @@ export default class LayoutEngine { */ text(text, options) { text = `${text}`; - const textOpts = this._normalizeTextOptions(options); + const textOpts = this.#normalizeTextOptions(options); if (textOpts.rotation) { this.doc.save(); this.doc.rotate(-textOpts.rotation, { origin: [textOpts.x, textOpts.y] }); } - for (const { line, x, y } of this._lines(text, textOpts)) { + for (const { line, x, y } of this.#lines(text, textOpts)) { // Render each formatted line (ignore rotation as that is set per render not per line) - this._renderFragment(line, x, y, { ...textOpts, rotation: 0 }); + this.#renderFragment(line, x, y, { ...textOpts, rotation: 0 }); } if (textOpts.rotation) this.doc.restore(); } @@ -217,7 +214,7 @@ export default class LayoutEngine { */ textBox(text, options) { text = `${text}`; - const textBoxOpts = this._normalizeTextBoxOptions(options); + const textBoxOpts = this.#normalizeTextBoxOptions(options); let dx = 0, dy = 0; // We only need to know the bounds if either the text is rotated or the border is going to be rendered @@ -239,7 +236,7 @@ export default class LayoutEngine { } box(x, y, width, height, options) { - const { border, borderColor, borderOpacity, rotation } = this._normalizeBoxOptions(options); + const { border, borderColor, borderOpacity, rotation } = this.#normalizeBoxOptions(options); if (!border || !borderColor || !borderOpacity) return; @@ -325,7 +322,7 @@ export default class LayoutEngine { * * @returns {LayoutOptions} */ - _normalizeLayoutOptions(options) { + #normalizeLayoutOptions(options) { options = options ?? {}; const normalizedOptions = {}; @@ -340,7 +337,7 @@ export default class LayoutEngine { * @param {TextOptions} [options] * @returns {NormalizedTextOptions} */ - _normalizeTextOptions(options) { + #normalizeTextOptions(options) { options = options ?? {}; const normalizedOptions = {}; @@ -352,9 +349,12 @@ export default class LayoutEngine { normalizedOptions.rotation = (options.rotation ?? 0) % 360; if (normalizedOptions.rotation < 0) normalizedOptions.rotation += 360; + normalizedOptions.horizontalScaling = options.horizontalScaling ?? 100; + normalizedOptions.characterSpacing = options.characterSpacing ?? 0; + normalizedOptions.features = options.features ?? []; + normalizedOptions.ellipsis = options.ellipsis ?? false; if (typeof normalizedOptions.ellipsis === 'boolean') normalizedOptions.ellipsis = normalizedOptions.ellipsis ? '…' : ''; - normalizedOptions.ellipsisWidth = this._widthOfSegment(normalizedOptions.ellipsis); return normalizedOptions; } @@ -366,7 +366,7 @@ export default class LayoutEngine { * @param {number} [defaultBorder=1] * @returns {NormalizedBoxOptions} */ - _normalizeBoxOptions(options, defaultBorder = 1) { + #normalizeBoxOptions(options, defaultBorder = 1) { options = options ?? {}; const normalizedOptions = {}; normalizedOptions.border = normalizeSides(options.border, defaultBorder); @@ -382,10 +382,10 @@ export default class LayoutEngine { * @param {TextBoxOptions} [options] * @returns {NormalizedTextBoxOptions} */ - _normalizeTextBoxOptions(options) { + #normalizeTextBoxOptions(options) { options = options ?? {}; - const textOptions = this._normalizeTextOptions(options); - const boxOptions = this._normalizeBoxOptions(options, 0); + const textOptions = this.#normalizeTextOptions(options); + const boxOptions = this.#normalizeBoxOptions(options, 0); const normalizedOptions = {}; Object.assign(normalizedOptions, textOptions, boxOptions); @@ -400,15 +400,18 @@ export default class LayoutEngine { * This value is also then stored in the cache for reuse * * @param {string} text - The text + * @param {NormalizedTextOptions} options - The options * @returns {number} * @private */ - _widthOfSegment(text) { + #widthOfSegment(text, options) { if (!text) return 0; - if (!this.widthCache.has(text)) { - this.widthCache.set(text, this.doc._font.widthOfString(text, this.doc._fontSize, this.options.features)); - } - return this.widthCache.get(text); + + // Ideally we could extract the number of graphemes/glyphs directly in the font + const numGraphemes = Array.from(SEGMENTER.segment(text)).length; + const fontSize = this.doc._font.widthOfString(text, this.doc._fontSize, options.features); + const charSpacing = (numGraphemes - 1) * options.characterSpacing; + return (fontSize + charSpacing) * options.horizontalScaling / 100; } /** @@ -422,7 +425,7 @@ export default class LayoutEngine { * @note the returning values do not factor in rotation (as rotation is applied to the entire textbox) * @returns {Iterator<{line: string, x: number, y: number, width: number, height: number}>} */ - * _lines(text, options) { + * #lines(text, options) { // Compute max bounds const [maxWidth, maxHeight] = computeInscribedBounds( options.width, @@ -432,7 +435,7 @@ export default class LayoutEngine { // Apply any formatting to the line let currHeight = options.y; - for (const [line, width, height] of this._constrainedLines(text, maxWidth, maxHeight, options)) { + for (const [line, width, height] of this.#constrainedLines(text, maxWidth, maxHeight, options)) { yield { line, x: options.x, y: currHeight, width, height }; currHeight += height; } @@ -448,7 +451,7 @@ export default class LayoutEngine { * * @returns {Iterator<[line: string, width: number, height: number]>} */ - * _constrainedLines(text, maxWidth, maxHeight, options) { + * #constrainedLines(text, maxWidth, maxHeight, options) { // There is no way to have any lines if the maxHeight is 0 if (maxHeight === 0) return undefined; @@ -462,7 +465,7 @@ export default class LayoutEngine { const lineGap = this.doc.currentLineGap(); let currLine; - for (let newLine of this._widthConstrainedLines(text, maxWidth)) { + for (let newLine of this.#widthConstrainedLines(text, maxWidth, options)) { // The last character is a soft hyphen - replace it with visible hyphen. switch (newLine[newLine.length - 1]) { case SOFT_HYPHEN: @@ -474,34 +477,37 @@ export default class LayoutEngine { } // Compute width of newLine - const newLineWidth = this._widthOfSegment(newLine); + const newLineWidth = this.#widthOfSegment(newLine, options); // Release the current line as we know there is a new one if (currLine) { // If the new line can't fit, then we need to truncate the current one and flush if (currHeight + lineGap + lineHeight > maxHeight) { - let truncatedCurrLine = currLine.line.trimEnd(); - let truncatedCurrLineWidth = this._widthOfSegment(currLine.line); - - if (truncatedCurrLineWidth + options.ellipsisWidth > maxWidth) { - truncatedCurrLine = ''; - truncatedCurrLineWidth = 0; - for (const { segment } of this.segmenter.segment(currLine.line)) { - const segWidth = this._widthOfSegment(segment); - truncatedCurrLineWidth += segWidth; - - if (truncatedCurrLineWidth + options.ellipsisWidth > maxWidth) break; - truncatedCurrLine += segment; - } + let truncatedCurrLine = ''; + let truncatedCurrLineWidth = this.#widthOfSegment(options.ellipsis, options); + + // Quick check make sure the ellipsis can fit, if not return a blank string + if (truncatedCurrLineWidth > maxWidth) { + // No new lines can fit so terminate early + return undefined; } - if (options.ellipsis) { - truncatedCurrLine += options.ellipsis; - truncatedCurrLineWidth += options.ellipsisWidth; + + // Incrementally build the truncated line per grapheme + for (const { segment: grapheme } of SEGMENTER.segment(currLine.line.trimEnd())) { + const newTruncatedCurrLine = truncatedCurrLine + grapheme; + // Unfortunately we cant use any width caching here due to kerning pairs + const newTruncatedCurrLineWidth = this.#widthOfSegment(newTruncatedCurrLine + options.ellipsis, options); + + // The new grapheme is too big for the line + if (newTruncatedCurrLineWidth > maxWidth) break; + + truncatedCurrLine = newTruncatedCurrLine; + truncatedCurrLineWidth = newTruncatedCurrLineWidth; } - // No gap as it's the last line - yield [truncatedCurrLine, truncatedCurrLineWidth, lineHeight]; + // No gap as it's the last line, the width already includes the ellipsis + yield [truncatedCurrLine + options.ellipsis, truncatedCurrLineWidth, lineHeight]; // No new lines can fit so terminate early return undefined; @@ -526,61 +532,67 @@ export default class LayoutEngine { * * @param {string} text - The string * @param {number} maxWidth - The max width of a line + * @param {NormalizedTextOptions} options - The options * * @returns {Iterator} */ - * _widthConstrainedLines(text, maxWidth) { + * #widthConstrainedLines(text, maxWidth, options) { // There is no way to have any lines if the maxWidth is 0 if (maxWidth === 0) return undefined; let buffer = ''; - let bufferLen = 0; + let bufferWidth = 0; // Find line break opportunities - for (const brk of this.lineBreaker.breaks(text)) { + for (const brk of LINE_BREAKER.breaks(text)) { const seg = brk.string; - const segWidth = this._widthOfSegment(seg); + const newBuffer = buffer + seg; + const newBufferWidth = this.#widthOfSegment(newBuffer, options); - // Check if the current segment will fit on the current line - if (bufferLen + segWidth <= maxWidth) { - buffer += seg; - bufferLen += segWidth; - } else { - // Terminate the previous line + // If the current segment does not fit on the current line + if (newBufferWidth > maxWidth) { + // Flush the buffer if (buffer) yield buffer; + const segWidth = this.#widthOfSegment(seg, options); + // if the segment itself is too wide, then split it by graphemes - if (segWidth <= maxWidth) { - // Move string to new line - bufferLen = segWidth; - buffer = seg; - } else { + if (segWidth > maxWidth) { buffer = ''; - bufferLen = 0; + bufferWidth = 0; - for (const data of this.segmenter.segment(seg)) { - const grapheme = data.segment; - const graphemeWidth = this._widthOfSegment(grapheme); - if (bufferLen + graphemeWidth > maxWidth) { + for (const { segment: grapheme } of SEGMENTER.segment(seg)) { + const newBuffer = buffer + grapheme; + const newBufferWidth = this.#widthOfSegment(newBuffer, options); + + // If the grapheme doesn't fit on the line, then flush + if (newBufferWidth > maxWidth) { if (buffer) yield buffer; - bufferLen = graphemeWidth; buffer = grapheme; + bufferWidth = this.#widthOfSegment(grapheme, options); } else { - // Add grapheme to the buffer - buffer += grapheme; - bufferLen += graphemeWidth; + buffer = newBuffer; + bufferWidth = newBufferWidth; } } + } else { + // Segment fits on a new line so promote it + buffer = seg; + bufferWidth = segWidth; } + } else { + // The new buffer fits, so promote it + buffer = newBuffer; + bufferWidth = newBufferWidth; } // Force a break if required if (brk.required && buffer) { yield buffer; buffer = ''; - bufferLen = 0; + bufferWidth = 0; } } // Flush any remaining text @@ -597,7 +609,7 @@ export default class LayoutEngine { * @param {number} y * @param {NormalizedTextOptions} options */ - _renderFragment(frag, x, y, options) { + #renderFragment(frag, x, y, options) { //TODO: replace fragment generation with custom system this.doc._fragment(frag, x, y, options); } diff --git a/lib/text/types.js b/lib/text/types.js index d096bb83..85435394 100644 --- a/lib/text/types.js +++ b/lib/text/types.js @@ -46,6 +46,22 @@ * What character to append to indicate overflowing text * * Defaults to false (aka ''), the text will simply truncate + * @property {number} [horizontalScaling] + * Ability to scale text horizontally (in percent) + * + * Defaults to 100 + * @property {number} [characterSpacing] + * The amount of space between each character in the text + * + * Defaults to 0 + * @property {string[] | Object.} [features] + * An array of [OpenType feature tags](https://www.microsoft.com/typography/otspec/featuretags.htm) to apply. + * Can also be provided as an object with features as keys and boolean values. + * If not provided, a set of defaults is used. + * To deactivate default font features, you have to explicitly set them to false (`{ liga: false }`). + * When providing an empty array, the default font features will still be used. + * + * Defaults to [] */ /** @@ -57,7 +73,9 @@ * @property {number} height * @property {number} rotation * @property {string} ellipsis - * @property {number} ellipsisWidth + * @property {number} horizontalScaling + * @property {number} characterSpacing + * @property {Object.} features */ /** diff --git a/tests/visual/text.spec.js b/tests/visual/text.spec.js index c395718c..20326eed 100644 --- a/tests/visual/text.spec.js +++ b/tests/visual/text.spec.js @@ -18,19 +18,20 @@ describe('text', function() { // Draw normal text // Render the bounding box - const boundingBox = layout.boundsOfString('some normal text()', { y: 200, rotation: 20 }); + const normalOpts = { y: 200, rotation: 20 } + const boundingBox = layout.boundsOfString('some normal text()', normalOpts); layout.box(boundingBox.x, boundingBox.y, boundingBox.width, boundingBox.height, { borderColor: 'lightgreen' }); // Render the text bounds // This is achieved by getting the size of the text without rotation and then rendering it as a rotated box - const textBounds = layout.boundsOfString('some normal text()', { y: 200, rotation: 0 }); + const textBounds = layout.boundsOfString('some normal text()', { ...normalOpts, rotation: 0 }); layout.box(textBounds.x, textBounds.y, textBounds.width, textBounds.height, { + ...normalOpts, borderColor: 'lightgreen', - rotation: 20, }); // Display the origin doc.save().circle(doc.x, 200, 2).fill('darkgreen').restore(); // Render the text - layout.text('some normal text()', { y: 200, rotation: 20 }); + layout.text('some normal text()', normalOpts); }); }); From 4b2e61fd77445e462267746088c0a3ec100cadc5 Mon Sep 17 00:00:00 2001 From: Jake Holland Date: Fri, 20 Jun 2025 17:02:11 +0100 Subject: [PATCH 04/12] Optimize glyph rendering --- lib/font/embedded.js | 18 ++++++++++++------ lib/font/standard.js | 4 ++-- lib/mixins/text.js | 8 ++------ lib/text/layout.js | 7 ++----- 4 files changed, 18 insertions(+), 19 deletions(-) diff --git a/lib/font/embedded.js b/lib/font/embedded.js index da64efc2..5d878e40 100644 --- a/lib/font/embedded.js +++ b/lib/font/embedded.js @@ -41,6 +41,8 @@ class EmbeddedFont extends PDFFont { position.advanceWidth = run.glyphs[i].advanceWidth * this.scale; } + run.numGlyphs = run.glyphs.length; + return run; } @@ -67,22 +69,25 @@ class EmbeddedFont extends PDFFont { let glyphs = onlyWidth ? null : []; let positions = onlyWidth ? null : []; let advanceWidth = 0; + let numGlyphs = 0; // Split the string by words to increase cache efficiency. // For this purpose, spaces and tabs are a good enough delimeter. let last = 0; let index = 0; while (index <= text.length) { - var needle; + let needle; if ( (index === text.length && last < index) || - ((needle = text.charAt(index)), [' ', '\t'].includes(needle)) + ([' ', '\t'].includes(needle = text.charAt(index))) ) { const run = this.layoutCached(text.slice(last, ++index)); if (!onlyWidth) { glyphs = glyphs.concat(run.glyphs); positions = positions.concat(run.positions); } + // Keep track of the number of glyphs + numGlyphs += run.glyphs.length; advanceWidth += run.advanceWidth; last = index; @@ -91,7 +96,7 @@ class EmbeddedFont extends PDFFont { } } - return { glyphs, positions, advanceWidth }; + return { glyphs, positions, advanceWidth, numGlyphs }; } encode(text, features) { @@ -114,10 +119,11 @@ class EmbeddedFont extends PDFFont { return [res, positions]; } - widthOfString(string, size, features) { - const width = this.layout(string, features, true).advanceWidth; + widthOfString(string, size, features, glyphSpacing) { + const layout = this.layout(string, features, true); + const width = layout.advanceWidth; const scale = size / 1000; - return width * scale; + return (width * scale) + ((glyphSpacing ?? 0) * ((layout.numGlyphs || 1) - 1)); } embed() { diff --git a/lib/font/standard.js b/lib/font/standard.js index a2536c3c..b77059dd 100644 --- a/lib/font/standard.js +++ b/lib/font/standard.js @@ -98,7 +98,7 @@ class StandardFont extends PDFFont { return [encoded, positions]; } - widthOfString(string, size) { + widthOfString(string, size, _features, glyphSpacing) { const glyphs = this.font.glyphsForString(`${string}`); const advances = this.font.advancesForGlyphs(glyphs); @@ -108,7 +108,7 @@ class StandardFont extends PDFFont { } const scale = size / 1000; - return width * scale; + return (width * scale) + ((glyphSpacing ?? 0) * ((glyphs.length || 1) - 1)); } static isStandardFont(name) { diff --git a/lib/mixins/text.js b/lib/mixins/text.js index 168d390f..0d5791c1 100644 --- a/lib/mixins/text.js +++ b/lib/mixins/text.js @@ -94,12 +94,8 @@ export default { widthOfString(string, options = {}) { const horizontalScaling = options.horizontalScaling || 100; - return ( - ((this._font.widthOfString(string, this._fontSize, options.features) + - (options.characterSpacing || 0) * (string.length - 1)) * - horizontalScaling) / - 100 - ); + return this._font.widthOfString(string, this._fontSize, options.features, options.characterSpacing) + * horizontalScaling / 100; }, /** diff --git a/lib/text/layout.js b/lib/text/layout.js index 0be3d30c..ea4f819d 100644 --- a/lib/text/layout.js +++ b/lib/text/layout.js @@ -407,11 +407,8 @@ export default class LayoutEngine { #widthOfSegment(text, options) { if (!text) return 0; - // Ideally we could extract the number of graphemes/glyphs directly in the font - const numGraphemes = Array.from(SEGMENTER.segment(text)).length; - const fontSize = this.doc._font.widthOfString(text, this.doc._fontSize, options.features); - const charSpacing = (numGraphemes - 1) * options.characterSpacing; - return (fontSize + charSpacing) * options.horizontalScaling / 100; + const fontSize = this.doc._font.widthOfString(text, this.doc._fontSize, options.features, options.characterSpacing); + return fontSize * options.horizontalScaling / 100; } /** From c5bc5b6576ae83233c36bd31b269838b8ecbe45d Mon Sep 17 00:00:00 2001 From: Jake Holland Date: Fri, 20 Jun 2025 17:56:40 +0100 Subject: [PATCH 05/12] Optimize width calculator --- lib/text/layout.js | 69 +++++++++++++++++++++++++--------------------- 1 file changed, 38 insertions(+), 31 deletions(-) diff --git a/lib/text/layout.js b/lib/text/layout.js index ea4f819d..c1523ffe 100644 --- a/lib/text/layout.js +++ b/lib/text/layout.js @@ -461,21 +461,8 @@ export default class LayoutEngine { const lineGap = this.doc.currentLineGap(); - let currLine; - for (let newLine of this.#widthConstrainedLines(text, maxWidth, options)) { - // The last character is a soft hyphen - replace it with visible hyphen. - switch (newLine[newLine.length - 1]) { - case SOFT_HYPHEN: - newLine[newLine.length - 1] = HYPHEN; - break; - case '\n': - newLine = newLine.slice(0, -1); - break; - } - - // Compute width of newLine - const newLineWidth = this.#widthOfSegment(newLine, options); - + let currLine, currLineWidth = 0; + for (const [newLine, newLineWidth] of this.#widthConstrainedLines(text, maxWidth, options)) { // Release the current line as we know there is a new one if (currLine) { // If the new line can't fit, then we need to truncate the current one and flush @@ -491,7 +478,7 @@ export default class LayoutEngine { // Incrementally build the truncated line per grapheme - for (const { segment: grapheme } of SEGMENTER.segment(currLine.line.trimEnd())) { + for (const { segment: grapheme } of SEGMENTER.segment(currLine.trimEnd())) { const newTruncatedCurrLine = truncatedCurrLine + grapheme; // Unfortunately we cant use any width caching here due to kerning pairs const newTruncatedCurrLineWidth = this.#widthOfSegment(newTruncatedCurrLine + options.ellipsis, options); @@ -511,16 +498,17 @@ export default class LayoutEngine { } // Flush the current line as we know it can fit - yield [currLine.line, currLine.width, lineHeight + lineGap]; + yield [currLine, currLineWidth, lineHeight + lineGap]; } - currLine = { line: newLine, width: newLineWidth }; + currLine = newLine; + currLineWidth = newLineWidth; currHeight += lineHeight + lineGap; } if (currLine) { // No gap as it's the last line - yield [currLine.line, currLine.width, lineHeight]; + yield [currLine, currLineWidth, lineHeight]; } } @@ -531,7 +519,7 @@ export default class LayoutEngine { * @param {number} maxWidth - The max width of a line * @param {NormalizedTextOptions} options - The options * - * @returns {Iterator} + * @returns {Iterator<[line: string, width: number]>} */ * #widthConstrainedLines(text, maxWidth, options) { // There is no way to have any lines if the maxWidth is 0 @@ -540,6 +528,32 @@ export default class LayoutEngine { let buffer = ''; let bufferWidth = 0; + const widthOfSegment = this.#widthOfSegment.bind(this); + + /** + * @returns {Iterator<[line: string, width: number]>} + */ + function* flush() { + if (!buffer) return undefined; + switch (buffer[buffer.length - 1]) { + case SOFT_HYPHEN: + buffer[buffer.length - 1] = HYPHEN; + // The width of the line will have changed + bufferWidth = widthOfSegment(buffer, options); + yield [buffer, bufferWidth]; + break; + case '\n': + // We can just remove a new line char at the end of the line as we already know its a linebreak + buffer = buffer.slice(0, -1); + yield [buffer, bufferWidth]; + break; + default: + yield [buffer, bufferWidth]; + } + buffer = ''; + bufferWidth = 0; + } + // Find line break opportunities for (const brk of LINE_BREAKER.breaks(text)) { const seg = brk.string; @@ -550,22 +564,19 @@ export default class LayoutEngine { // If the current segment does not fit on the current line if (newBufferWidth > maxWidth) { // Flush the buffer - if (buffer) yield buffer; + yield* flush(); const segWidth = this.#widthOfSegment(seg, options); // if the segment itself is too wide, then split it by graphemes if (segWidth > maxWidth) { - buffer = ''; - bufferWidth = 0; - for (const { segment: grapheme } of SEGMENTER.segment(seg)) { const newBuffer = buffer + grapheme; const newBufferWidth = this.#widthOfSegment(newBuffer, options); // If the grapheme doesn't fit on the line, then flush if (newBufferWidth > maxWidth) { - if (buffer) yield buffer; + yield* flush(); buffer = grapheme; bufferWidth = this.#widthOfSegment(grapheme, options); @@ -586,14 +597,10 @@ export default class LayoutEngine { } // Force a break if required - if (brk.required && buffer) { - yield buffer; - buffer = ''; - bufferWidth = 0; - } + if (brk.required) yield* flush(); } // Flush any remaining text - if (buffer) yield buffer; + yield* flush(); } /** From 3c930590b8110c23db0a25f7022a241c20f92388 Mon Sep 17 00:00:00 2001 From: Jake Holland Date: Fri, 20 Jun 2025 20:06:28 +0100 Subject: [PATCH 06/12] Add textBox background support --- lib/mixins/color.js | 1 + lib/table/utils.js | 16 ------------ lib/text/layout.js | 51 ++++++++++++++++++--------------------- lib/text/types.js | 10 ++++++++ lib/utils/types.js | 18 +++++++++++++- tests/visual/text.spec.js | 8 +++--- 6 files changed, 56 insertions(+), 48 deletions(-) diff --git a/lib/mixins/color.js b/lib/mixins/color.js index 42ce1b4c..b4094b9b 100644 --- a/lib/mixins/color.js +++ b/lib/mixins/color.js @@ -184,6 +184,7 @@ export default { }, }; +/** @typedef {"aliceblue" |"antiquewhite" |"aqua" |"aquamarine" |"azure" |"beige" |"bisque" |"black" |"blanchedalmond" |"blue" |"blueviolet" |"brown" |"burlywood" |"cadetblue" |"chartreuse" |"chocolate" |"coral" |"cornflowerblue" |"cornsilk" |"crimson" |"cyan" |"darkblue" |"darkcyan" |"darkgoldenrod" |"darkgray" |"darkgreen" |"darkgrey" |"darkkhaki" |"darkmagenta" |"darkolivegreen" |"darkorange" |"darkorchid" |"darkred" |"darksalmon" |"darkseagreen" |"darkslateblue" |"darkslategray" |"darkslategrey" |"darkturquoise" |"darkviolet" |"deeppink" |"deepskyblue" |"dimgray" |"dimgrey" |"dodgerblue" |"firebrick" |"floralwhite" |"forestgreen" |"fuchsia" |"gainsboro" |"ghostwhite" |"gold" |"goldenrod" |"gray" |"grey" |"green" |"greenyellow" |"honeydew" |"hotpink" |"indianred" |"indigo" |"ivory" |"khaki" |"lavender" |"lavenderblush" |"lawngreen" |"lemonchiffon" |"lightblue" |"lightcoral" |"lightcyan" |"lightgoldenrodyellow" |"lightgray" |"lightgreen" |"lightgrey" |"lightpink" |"lightsalmon" |"lightseagreen" |"lightskyblue" |"lightslategray" |"lightslategrey" |"lightsteelblue" |"lightyellow" |"lime" |"limegreen" |"linen" |"magenta" |"maroon" |"mediumaquamarine" |"mediumblue" |"mediumorchid" |"mediumpurple" |"mediumseagreen" |"mediumslateblue" |"mediumspringgreen" |"mediumturquoise" |"mediumvioletred" |"midnightblue" |"mintcream" |"mistyrose" |"moccasin" |"navajowhite" |"navy" |"oldlace" |"olive" |"olivedrab" |"orange" |"orangered" |"orchid" |"palegoldenrod" |"palegreen" |"paleturquoise" |"palevioletred" |"papayawhip" |"peachpuff" |"peru" |"pink" |"plum" |"powderblue" |"purple" |"red" |"rosybrown" |"royalblue" |"saddlebrown" |"salmon" |"sandybrown" |"seagreen" |"seashell" |"sienna" |"silver" |"skyblue" |"slateblue" |"slategray" |"slategrey" |"snow" |"springgreen" |"steelblue" |"tan" |"teal" |"thistle" |"tomato" |"turquoise" |"violet" |"wheat" |"white" |"whitesmoke" |"yellow" | "yellowgreen"} NamedColor */ var namedColors = { aliceblue: [240, 248, 255], antiquewhite: [250, 235, 215], diff --git a/lib/table/utils.js b/lib/table/utils.js index 7762d6bc..556c33ca 100644 --- a/lib/table/utils.js +++ b/lib/table/utils.js @@ -3,22 +3,6 @@ * @typedef {function(number): T} Dynamic */ -/** - * @typedef {Object} Font - * @property {PDFFontSource} [src] - * The name of the font - * - * Defaults to the current document font source `doc._fontSrc` - * @property {string} [family] - * The font family of the font - * - * Defaults to the current document font family `doc._fontFamily` - * @property {Size} [size] - * The size of the font - * - * Defaults to the current document font size `doc._fontSize` - */ - /** * Measurement of how wide something is, false means 0 and true means 1 * diff --git a/lib/text/layout.js b/lib/text/layout.js index c1523ffe..e421bf62 100644 --- a/lib/text/layout.js +++ b/lib/text/layout.js @@ -21,12 +21,10 @@ const HYPHEN = '-'; export default class LayoutEngine { /** * @param {PDFDocument} doc - * @param {LayoutOptions} [options] */ - constructor(doc, options) { + constructor(doc) { /** @type {any} */ this.doc = doc; - this.options = this.#normalizeLayoutOptions(options); } /** @@ -236,21 +234,31 @@ export default class LayoutEngine { } box(x, y, width, height, options) { - const { border, borderColor, borderOpacity, rotation } = this.#normalizeBoxOptions(options); + const boxOptions = this.#normalizeBoxOptions(options); - if (!border || !borderColor || !borderOpacity) return; + if (!boxOptions.border || !boxOptions.borderColor || !boxOptions.borderOpacity) return; - if (rotation) { + if (boxOptions.rotation) { this.doc.save(); - this.doc.rotate(-rotation, { origin: [x, y] }); + this.doc.rotate(-boxOptions.rotation, { origin: [x, y] }); + } + + // Render the background first + if (boxOptions.backgroundColor !== 'transparent' && boxOptions.backgroundOpacity > 0) { + this.doc + .save() + .fillColor(boxOptions.backgroundColor, boxOptions.backgroundOpacity) + .rect(x, y, width, height) + .fill() + .restore(); } // Combine border, color and opacity const bco = { - top: [border.top, borderColor.top, borderOpacity.top], - right: [border.right, borderColor.right, borderOpacity.right], - bottom: [border.bottom, borderColor.bottom, borderOpacity.bottom], - left: [border.left, borderColor.left, borderOpacity.left], + top: [boxOptions.border.top, boxOptions.borderColor.top, boxOptions.borderOpacity.top], + right: [boxOptions.border.right, boxOptions.borderColor.right, boxOptions.borderOpacity.right], + bottom: [boxOptions.border.bottom, boxOptions.borderColor.bottom, boxOptions.borderOpacity.bottom], + left: [boxOptions.border.left, boxOptions.borderColor.left, boxOptions.borderOpacity.left], }; // Optimization: if all sides are the same, we can render as a rectangle @@ -312,23 +320,7 @@ export default class LayoutEngine { } } - if (rotation) this.doc.restore(); - } - - /** - * @private - * - * @param {LayoutOptions} [options] - * - * @returns {LayoutOptions} - */ - #normalizeLayoutOptions(options) { - options = options ?? {}; - const normalizedOptions = {}; - - normalizedOptions.locales = options.locales; - - return normalizedOptions; + if (boxOptions.rotation) this.doc.restore(); } /** @@ -373,6 +365,9 @@ export default class LayoutEngine { normalizedOptions.borderColor = normalizeSides(options.borderColor, 'black'); normalizedOptions.borderOpacity = normalizeSides(options.borderOpacity, 1); normalizedOptions.rotation = normalizeRotation(options.rotation, 0); + normalizedOptions.backgroundColor = options.backgroundColor ?? 'transparent'; + normalizedOptions.backgroundOpacity = options.backgroundOpacity ?? 1; + return normalizedOptions; } diff --git a/lib/text/types.js b/lib/text/types.js index 85435394..a6cefe7e 100644 --- a/lib/text/types.js +++ b/lib/text/types.js @@ -97,6 +97,14 @@ * The rotation of the box (in degrees) * * Defaults to 0 + * @property {PDFColor} [backgroundColor] + * The color of the box background + * + * Defaults to transparent + * @property {number} [backgroundOpacity] + * The opacity of the box background + * + * Defaults to 1 (opaque) */ /** @@ -106,6 +114,8 @@ * @property {ExpandedSideDefinition} borderColor * @property {ExpandedSideDefinition} borderOpacity * @property {number} rotation + * @property {PDFColor} backgroundColor + * @property {number} backgroundOpacity */ /** diff --git a/lib/utils/types.js b/lib/utils/types.js index 1bfe8db3..2425320f 100644 --- a/lib/utils/types.js +++ b/lib/utils/types.js @@ -5,7 +5,7 @@ */ /** - * @typedef {Array | string | Array} PDFColor + * @typedef {Array | NamedColor | [number, number, number] | [number, number, number, number]} PDFColor */ /** @typedef {string | Buffer | Uint8Array | ArrayBuffer} PDFFontSource */ @@ -26,3 +26,19 @@ * @template T * @typedef {{ top: T; right: T; bottom: T; left: T }} ExpandedSideDefinition */ + +/** + * @typedef {Object} Font + * @property {PDFFontSource} [src] + * The name of the font + * + * Defaults to the current document font source + * @property {string} [family] + * The font family of the font + * + * Defaults to the current document font family + * @property {Size} [size] + * The size of the font + * + * Defaults to the current document font size + */ diff --git a/tests/visual/text.spec.js b/tests/visual/text.spec.js index 20326eed..64eb5d27 100644 --- a/tests/visual/text.spec.js +++ b/tests/visual/text.spec.js @@ -13,20 +13,22 @@ describe('text', function() { layout.box(doc.x, doc.y, doc.page.contentWidth, doc.page.contentHeight); // Draw textBox - layout.textBox('fancy textBox()', { rotation: 20, border: 1, borderColor: 'red' }); + layout.textBox('fancy textBox()', { rotation: 20, border: 1, borderColor: 'red', backgroundColor: 'salmon' }); doc.save().circle(doc.x, doc.y, 2).fill('pink').restore(); // Display the origin // Draw normal text // Render the bounding box const normalOpts = { y: 200, rotation: 20 } const boundingBox = layout.boundsOfString('some normal text()', normalOpts); - layout.box(boundingBox.x, boundingBox.y, boundingBox.width, boundingBox.height, { borderColor: 'lightgreen' }); + layout.box(boundingBox.x, boundingBox.y, boundingBox.width, boundingBox.height, { borderColor: 'green', backgroundColor: 'lightgreen' }); // Render the text bounds // This is achieved by getting the size of the text without rotation and then rendering it as a rotated box const textBounds = layout.boundsOfString('some normal text()', { ...normalOpts, rotation: 0 }); layout.box(textBounds.x, textBounds.y, textBounds.width, textBounds.height, { ...normalOpts, - borderColor: 'lightgreen', + borderColor: 'blue', + backgroundColor: 'black', + backgroundOpacity: 0.5, }); // Display the origin doc.save().circle(doc.x, 200, 2).fill('darkgreen').restore(); From 8841f031b01029da8167a4bc7d040604b761e81f Mon Sep 17 00:00:00 2001 From: Jake Holland Date: Fri, 20 Jun 2025 20:09:58 +0100 Subject: [PATCH 07/12] Add a font context manager --- lib/text/layout.js | 98 ++++++++++++++++++++++++++++++---------------- lib/text/types.js | 1 + 2 files changed, 65 insertions(+), 34 deletions(-) diff --git a/lib/text/layout.js b/lib/text/layout.js index e421bf62..a08f4f89 100644 --- a/lib/text/layout.js +++ b/lib/text/layout.js @@ -27,6 +27,28 @@ export default class LayoutEngine { this.doc = doc; } + /** + * @template T + * Apply a font to a scope of code, rolling back to the previous font after completion + * + * @param {Font} font + * @param {function(): T} callback + * + * @returns {T} + */ + withFont(font, callback) { + if (!font || !(font.src && font.size)) return callback(); + + const rollbackFont = this.doc._fontSource; + const rollbackFontSize = this.doc._fontSize; + const rollbackFontFamily = this.doc._fontFamily; + if (font.src) this.doc.font(font.src, font.family); + if (font.size) this.doc.fontSize(font.size); + const res = callback(); + if (font.src || font.size) this.doc.font(rollbackFont, rollbackFontFamily, rollbackFontSize); + return res; + } + /** * Compute the horizon-locked circumscribed bounding box on a block of text. * @@ -57,26 +79,27 @@ export default class LayoutEngine { */ boundsOfString(text, options) { const textOptions = this.#normalizeTextOptions(options); + return this.withFont(textOptions.font, () => { + // Compute max bounds + const [maxWidth, maxHeight] = computeInscribedBounds( + textOptions.width, + textOptions.height, + textOptions.rotation, + ); + + let contentHeight = 0; + let contentWidth = 0; + + // Use `#constrainedLines()` as we don't care about the formatting applied in `lines()` + for (const [, width, height] of this.#constrainedLines(text, maxWidth, maxHeight, textOptions)) { + contentHeight += height; + contentWidth = Math.max(contentWidth, width); + } - // Compute max bounds - const [maxWidth, maxHeight] = computeInscribedBounds( - textOptions.width, - textOptions.height, - textOptions.rotation, - ); - - let contentHeight = 0; - let contentWidth = 0; - - // Use `_constrainedLines()` as we don't care about the formatting applied in `lines()` - for (const [, width, height] of this.#constrainedLines(text, maxWidth, maxHeight, textOptions)) { - contentHeight += height; - contentWidth = Math.max(contentWidth, width); - } - - // Lock the bounding box to the horizon - const [x, y, width, height] = rotateBox(textOptions.x, textOptions.y, contentWidth, contentHeight, textOptions.rotation); - return { x, y, width, height }; + // Lock the bounding box to the horizon + const [x, y, width, height] = rotateBox(textOptions.x, textOptions.y, contentWidth, contentHeight, textOptions.rotation); + return { x, y, width, height }; + }); } /** @@ -177,10 +200,12 @@ export default class LayoutEngine { this.doc.rotate(-textOpts.rotation, { origin: [textOpts.x, textOpts.y] }); } - for (const { line, x, y } of this.#lines(text, textOpts)) { - // Render each formatted line (ignore rotation as that is set per render not per line) - this.#renderFragment(line, x, y, { ...textOpts, rotation: 0 }); - } + this.withFont(textOpts.font, () => { + for (const { line, x, y } of this.#lines(text, textOpts)) { + // Render each formatted line (ignore rotation as that is set per render not per line) + this.#renderFragment(line, x, y, { ...textOpts, rotation: 0 }); + } + }); if (textOpts.rotation) this.doc.restore(); } @@ -333,20 +358,25 @@ export default class LayoutEngine { options = options ?? {}; const normalizedOptions = {}; - normalizedOptions.x = this.doc.sizeToPoint(options.x, this.doc.x); - normalizedOptions.y = this.doc.sizeToPoint(options.y, this.doc.x); - normalizedOptions.width = this.doc.sizeToPoint(options.width, this.doc.page.width - this.doc.page.margins.right - normalizedOptions.x); - normalizedOptions.height = this.doc.sizeToPoint(options.height, this.doc.page.height - this.doc.page.margins.bottom - normalizedOptions.y); - normalizedOptions.rotation = (options.rotation ?? 0) % 360; - if (normalizedOptions.rotation < 0) normalizedOptions.rotation += 360; + normalizedOptions.font = options.font ?? {}; + + this.withFont(normalizedOptions.font, () => { + normalizedOptions.x = this.doc.sizeToPoint(options.x, this.doc.x); + normalizedOptions.y = this.doc.sizeToPoint(options.y, this.doc.x); + normalizedOptions.width = this.doc.sizeToPoint(options.width, this.doc.page.width - this.doc.page.margins.right - normalizedOptions.x); + normalizedOptions.height = this.doc.sizeToPoint(options.height, this.doc.page.height - this.doc.page.margins.bottom - normalizedOptions.y); + + normalizedOptions.rotation = (options.rotation ?? 0) % 360; + if (normalizedOptions.rotation < 0) normalizedOptions.rotation += 360; - normalizedOptions.horizontalScaling = options.horizontalScaling ?? 100; - normalizedOptions.characterSpacing = options.characterSpacing ?? 0; - normalizedOptions.features = options.features ?? []; + normalizedOptions.horizontalScaling = options.horizontalScaling ?? 100; + normalizedOptions.characterSpacing = options.characterSpacing ?? 0; + normalizedOptions.features = options.features ?? []; - normalizedOptions.ellipsis = options.ellipsis ?? false; - if (typeof normalizedOptions.ellipsis === 'boolean') normalizedOptions.ellipsis = normalizedOptions.ellipsis ? '…' : ''; + normalizedOptions.ellipsis = options.ellipsis ?? false; + if (typeof normalizedOptions.ellipsis === 'boolean') normalizedOptions.ellipsis = normalizedOptions.ellipsis ? '…' : ''; + }); return normalizedOptions; } diff --git a/lib/text/types.js b/lib/text/types.js index a6cefe7e..03e0a417 100644 --- a/lib/text/types.js +++ b/lib/text/types.js @@ -71,6 +71,7 @@ * @property {number} y * @property {number} width * @property {number} height + * @property {Font} font * @property {number} rotation * @property {string} ellipsis * @property {number} horizontalScaling From d32adb8582f0d6e36852229747c82c393b67dd8d Mon Sep 17 00:00:00 2001 From: Jake Holland Date: Fri, 20 Jun 2025 20:24:00 +0100 Subject: [PATCH 08/12] Fix prettier issues --- lib/font/embedded.js | 4 +- lib/font/standard.js | 2 +- lib/mixins/text.js | 11 +- lib/text/layout.js | 215 +++++++++++++++++++++++++------------- lib/utils/bounds.js | 24 +++-- lib/utils/normalize.js | 6 +- lib/utils/rotate.js | 3 +- tests/visual/text.spec.js | 99 +++++++++++------- 8 files changed, 238 insertions(+), 126 deletions(-) diff --git a/lib/font/embedded.js b/lib/font/embedded.js index 5d878e40..cf788325 100644 --- a/lib/font/embedded.js +++ b/lib/font/embedded.js @@ -79,7 +79,7 @@ class EmbeddedFont extends PDFFont { let needle; if ( (index === text.length && last < index) || - ([' ', '\t'].includes(needle = text.charAt(index))) + [' ', '\t'].includes((needle = text.charAt(index))) ) { const run = this.layoutCached(text.slice(last, ++index)); if (!onlyWidth) { @@ -123,7 +123,7 @@ class EmbeddedFont extends PDFFont { const layout = this.layout(string, features, true); const width = layout.advanceWidth; const scale = size / 1000; - return (width * scale) + ((glyphSpacing ?? 0) * ((layout.numGlyphs || 1) - 1)); + return width * scale + (glyphSpacing ?? 0) * ((layout.numGlyphs || 1) - 1); } embed() { diff --git a/lib/font/standard.js b/lib/font/standard.js index b77059dd..9928e8aa 100644 --- a/lib/font/standard.js +++ b/lib/font/standard.js @@ -108,7 +108,7 @@ class StandardFont extends PDFFont { } const scale = size / 1000; - return (width * scale) + ((glyphSpacing ?? 0) * ((glyphs.length || 1) - 1)); + return width * scale + (glyphSpacing ?? 0) * ((glyphs.length || 1) - 1); } static isStandardFont(name) { diff --git a/lib/mixins/text.js b/lib/mixins/text.js index 0d5791c1..355a9d03 100644 --- a/lib/mixins/text.js +++ b/lib/mixins/text.js @@ -94,8 +94,15 @@ export default { widthOfString(string, options = {}) { const horizontalScaling = options.horizontalScaling || 100; - return this._font.widthOfString(string, this._fontSize, options.features, options.characterSpacing) - * horizontalScaling / 100; + return ( + this._font.widthOfString( + string, + this._fontSize, + options.features, + options.characterSpacing, + ) * + (horizontalScaling / 100) + ); }, /** diff --git a/lib/text/layout.js b/lib/text/layout.js index a08f4f89..bd48a7dc 100644 --- a/lib/text/layout.js +++ b/lib/text/layout.js @@ -1,5 +1,11 @@ import { Rules } from '@cto.af/linebreak'; -import { computeInscribedBounds, normalizeAlignment, normalizeRotation, normalizeSides, rotateBox } from '../utils'; +import { + computeInscribedBounds, + normalizeAlignment, + normalizeRotation, + normalizeSides, + rotateBox, +} from '../utils'; // TODO: This may need to a polyfill // The grapheme segmentation is not respective of locale @@ -45,7 +51,9 @@ export default class LayoutEngine { if (font.src) this.doc.font(font.src, font.family); if (font.size) this.doc.fontSize(font.size); const res = callback(); - if (font.src || font.size) this.doc.font(rollbackFont, rollbackFontFamily, rollbackFontSize); + if (font.src || font.size) { + this.doc.font(rollbackFont, rollbackFontFamily, rollbackFontSize); + } return res; } @@ -91,13 +99,24 @@ export default class LayoutEngine { let contentWidth = 0; // Use `#constrainedLines()` as we don't care about the formatting applied in `lines()` - for (const [, width, height] of this.#constrainedLines(text, maxWidth, maxHeight, textOptions)) { + for (const [, width, height] of this.#constrainedLines( + text, + maxWidth, + maxHeight, + textOptions, + )) { contentHeight += height; contentWidth = Math.max(contentWidth, width); } // Lock the bounding box to the horizon - const [x, y, width, height] = rotateBox(textOptions.x, textOptions.y, contentWidth, contentHeight, textOptions.rotation); + const [x, y, width, height] = rotateBox( + textOptions.x, + textOptions.y, + contentWidth, + contentHeight, + textOptions.rotation, + ); return { x, y, width, height }; }); } @@ -239,15 +258,24 @@ export default class LayoutEngine { text = `${text}`; const textBoxOpts = this.#normalizeTextBoxOptions(options); - let dx = 0, dy = 0; + let dx = 0, + dy = 0; // We only need to know the bounds if either the text is rotated or the border is going to be rendered - if (textBoxOpts.rotation || (textBoxOpts.border && textBoxOpts.borderColor && textBoxOpts.borderOpacity)) { + if ( + textBoxOpts.rotation || + (textBoxOpts.border && + textBoxOpts.borderColor && + textBoxOpts.borderOpacity) + ) { // We need to know how big the text will be so that we can then offset the text origin const bounds = this.boundsOfString(text, textBoxOpts); // Render the border // This ignores rotation - this.box(textBoxOpts.x, textBoxOpts.y, bounds.width, bounds.height, { ...textBoxOpts, rotation: 0 }); + this.box(textBoxOpts.x, textBoxOpts.y, bounds.width, bounds.height, { + ...textBoxOpts, + rotation: 0, + }); // We offset the text position by the relative shift that the rotation has created dx = textBoxOpts.x - bounds.x; @@ -255,24 +283,35 @@ export default class LayoutEngine { } // Render the text - this.text(text, { ...textBoxOpts, x: textBoxOpts.x + dx, y: textBoxOpts.y + dy }); + this.text(text, { + ...textBoxOpts, + x: textBoxOpts.x + dx, + y: textBoxOpts.y + dy, + }); } box(x, y, width, height, options) { - const boxOptions = this.#normalizeBoxOptions(options); - - if (!boxOptions.border || !boxOptions.borderColor || !boxOptions.borderOpacity) return; - - if (boxOptions.rotation) { + const { + border, + borderColor, + borderOpacity, + rotation, + backgroundColor, + backgroundOpacity, + } = this.#normalizeBoxOptions(options); + + if (!border || !borderColor || !borderOpacity) return; + + if (rotation) { this.doc.save(); - this.doc.rotate(-boxOptions.rotation, { origin: [x, y] }); + this.doc.rotate(-rotation, { origin: [x, y] }); } // Render the background first - if (boxOptions.backgroundColor !== 'transparent' && boxOptions.backgroundOpacity > 0) { + if (backgroundColor !== 'transparent' && backgroundOpacity > 0) { this.doc .save() - .fillColor(boxOptions.backgroundColor, boxOptions.backgroundOpacity) + .fillColor(backgroundColor, backgroundOpacity) .rect(x, y, width, height) .fill() .restore(); @@ -280,14 +319,18 @@ export default class LayoutEngine { // Combine border, color and opacity const bco = { - top: [boxOptions.border.top, boxOptions.borderColor.top, boxOptions.borderOpacity.top], - right: [boxOptions.border.right, boxOptions.borderColor.right, boxOptions.borderOpacity.right], - bottom: [boxOptions.border.bottom, boxOptions.borderColor.bottom, boxOptions.borderOpacity.bottom], - left: [boxOptions.border.left, boxOptions.borderColor.left, boxOptions.borderOpacity.left], + top: [border.top, borderColor.top, borderOpacity.top], + right: [border.right, borderColor.right, borderOpacity.right], + bottom: [border.bottom, borderColor.bottom, borderOpacity.bottom], + left: [border.left, borderColor.left, borderOpacity.left], }; // Optimization: if all sides are the same, we can render as a rectangle - if ([bco.right, bco.bottom, bco.left].every(side => side.every((s, i) => s === bco.top[i]))) { + if ( + [bco.right, bco.bottom, bco.left].every((side) => { + side.every((s, i) => s === bco.top[i]); + }) + ) { // Skip if no width or opacity if (bco.top[0] > 0 && bco.top[2] > 0) { this.doc @@ -345,7 +388,7 @@ export default class LayoutEngine { } } - if (boxOptions.rotation) this.doc.restore(); + if (rotation) this.doc.restore(); } /** @@ -357,28 +400,36 @@ export default class LayoutEngine { #normalizeTextOptions(options) { options = options ?? {}; - const normalizedOptions = {}; + const opts = {}; - normalizedOptions.font = options.font ?? {}; + opts.font = options.font ?? {}; - this.withFont(normalizedOptions.font, () => { - normalizedOptions.x = this.doc.sizeToPoint(options.x, this.doc.x); - normalizedOptions.y = this.doc.sizeToPoint(options.y, this.doc.x); - normalizedOptions.width = this.doc.sizeToPoint(options.width, this.doc.page.width - this.doc.page.margins.right - normalizedOptions.x); - normalizedOptions.height = this.doc.sizeToPoint(options.height, this.doc.page.height - this.doc.page.margins.bottom - normalizedOptions.y); + this.withFont(opts.font, () => { + opts.x = this.doc.sizeToPoint(options.x, this.doc.x); + opts.y = this.doc.sizeToPoint(options.y, this.doc.x); + opts.width = this.doc.sizeToPoint( + options.width, + this.doc.page.width - this.doc.page.margins.right - opts.x, + ); + opts.height = this.doc.sizeToPoint( + options.height, + this.doc.page.height - this.doc.page.margins.bottom - opts.y, + ); - normalizedOptions.rotation = (options.rotation ?? 0) % 360; - if (normalizedOptions.rotation < 0) normalizedOptions.rotation += 360; + opts.rotation = (options.rotation ?? 0) % 360; + if (opts.rotation < 0) opts.rotation += 360; - normalizedOptions.horizontalScaling = options.horizontalScaling ?? 100; - normalizedOptions.characterSpacing = options.characterSpacing ?? 0; - normalizedOptions.features = options.features ?? []; + opts.horizontalScaling = options.horizontalScaling ?? 100; + opts.characterSpacing = options.characterSpacing ?? 0; + opts.features = options.features ?? []; - normalizedOptions.ellipsis = options.ellipsis ?? false; - if (typeof normalizedOptions.ellipsis === 'boolean') normalizedOptions.ellipsis = normalizedOptions.ellipsis ? '…' : ''; + opts.ellipsis = options.ellipsis ?? false; + if (typeof opts.ellipsis === 'boolean') { + opts.ellipsis = opts.ellipsis ? '…' : ''; + } }); - return normalizedOptions; + return opts; } /** @@ -390,15 +441,15 @@ export default class LayoutEngine { */ #normalizeBoxOptions(options, defaultBorder = 1) { options = options ?? {}; - const normalizedOptions = {}; - normalizedOptions.border = normalizeSides(options.border, defaultBorder); - normalizedOptions.borderColor = normalizeSides(options.borderColor, 'black'); - normalizedOptions.borderOpacity = normalizeSides(options.borderOpacity, 1); - normalizedOptions.rotation = normalizeRotation(options.rotation, 0); - normalizedOptions.backgroundColor = options.backgroundColor ?? 'transparent'; - normalizedOptions.backgroundOpacity = options.backgroundOpacity ?? 1; - - return normalizedOptions; + const opts = {}; + opts.border = normalizeSides(options.border, defaultBorder); + opts.borderColor = normalizeSides(options.borderColor, 'black'); + opts.borderOpacity = normalizeSides(options.borderOpacity, 1); + opts.rotation = normalizeRotation(options.rotation, 0); + opts.backgroundColor = options.backgroundColor ?? 'transparent'; + opts.backgroundOpacity = options.backgroundOpacity ?? 1; + + return opts; } /** @@ -409,15 +460,18 @@ export default class LayoutEngine { */ #normalizeTextBoxOptions(options) { options = options ?? {}; - const textOptions = this.#normalizeTextOptions(options); - const boxOptions = this.#normalizeBoxOptions(options, 0); + const textOpts = this.#normalizeTextOptions(options); + const boxOpts = this.#normalizeBoxOptions(options, 0); - const normalizedOptions = {}; - Object.assign(normalizedOptions, textOptions, boxOptions); + const opts = {}; + Object.assign(opts, textOpts, boxOpts); - normalizedOptions.alignContent = normalizeAlignment(options.alignContent, { x: 'left', y: 'top' }); + opts.alignContent = normalizeAlignment(options.alignContent, { + x: 'left', + y: 'top', + }); - return normalizedOptions; + return opts; } /** @@ -432,8 +486,13 @@ export default class LayoutEngine { #widthOfSegment(text, options) { if (!text) return 0; - const fontSize = this.doc._font.widthOfString(text, this.doc._fontSize, options.features, options.characterSpacing); - return fontSize * options.horizontalScaling / 100; + const fontSize = this.doc._font.widthOfString( + text, + this.doc._fontSize, + options.features, + options.characterSpacing, + ); + return fontSize * (options.horizontalScaling / 100); } /** @@ -447,7 +506,7 @@ export default class LayoutEngine { * @note the returning values do not factor in rotation (as rotation is applied to the entire textbox) * @returns {Iterator<{line: string, x: number, y: number, width: number, height: number}>} */ - * #lines(text, options) { + *#lines(text, options) { // Compute max bounds const [maxWidth, maxHeight] = computeInscribedBounds( options.width, @@ -457,7 +516,12 @@ export default class LayoutEngine { // Apply any formatting to the line let currHeight = options.y; - for (const [line, width, height] of this.#constrainedLines(text, maxWidth, maxHeight, options)) { + for (const [line, width, height] of this.#constrainedLines( + text, + maxWidth, + maxHeight, + options, + )) { yield { line, x: options.x, y: currHeight, width, height }; currHeight += height; } @@ -473,7 +537,7 @@ export default class LayoutEngine { * * @returns {Iterator<[line: string, width: number, height: number]>} */ - * #constrainedLines(text, maxWidth, maxHeight, options) { + *#constrainedLines(text, maxWidth, maxHeight, options) { // There is no way to have any lines if the maxHeight is 0 if (maxHeight === 0) return undefined; @@ -486,37 +550,46 @@ export default class LayoutEngine { const lineGap = this.doc.currentLineGap(); - let currLine, currLineWidth = 0; - for (const [newLine, newLineWidth] of this.#widthConstrainedLines(text, maxWidth, options)) { + let currLine, + currLineWidth = 0; + for (const [newLine, newLineWidth] of this.#widthConstrainedLines( + text, + maxWidth, + options, + )) { // Release the current line as we know there is a new one if (currLine) { // If the new line can't fit, then we need to truncate the current one and flush if (currHeight + lineGap + lineHeight > maxHeight) { - let truncatedCurrLine = ''; - let truncatedCurrLineWidth = this.#widthOfSegment(options.ellipsis, options); + let truncLine = ''; + let truncLineWidth = this.#widthOfSegment(options.ellipsis, options); // Quick check make sure the ellipsis can fit, if not return a blank string - if (truncatedCurrLineWidth > maxWidth) { + if (truncLineWidth > maxWidth) { // No new lines can fit so terminate early return undefined; } - // Incrementally build the truncated line per grapheme - for (const { segment: grapheme } of SEGMENTER.segment(currLine.trimEnd())) { - const newTruncatedCurrLine = truncatedCurrLine + grapheme; + for (const { segment: grapheme } of SEGMENTER.segment( + currLine.trimEnd(), + )) { + const newTruncLine = truncLine + grapheme; // Unfortunately we cant use any width caching here due to kerning pairs - const newTruncatedCurrLineWidth = this.#widthOfSegment(newTruncatedCurrLine + options.ellipsis, options); + const newTruncLineWidth = this.#widthOfSegment( + newTruncLine + options.ellipsis, + options, + ); // The new grapheme is too big for the line - if (newTruncatedCurrLineWidth > maxWidth) break; + if (newTruncLineWidth > maxWidth) break; - truncatedCurrLine = newTruncatedCurrLine; - truncatedCurrLineWidth = newTruncatedCurrLineWidth; + truncLine = newTruncLine; + truncLineWidth = newTruncLineWidth; } // No gap as it's the last line, the width already includes the ellipsis - yield [truncatedCurrLine + options.ellipsis, truncatedCurrLineWidth, lineHeight]; + yield [truncLine + options.ellipsis, truncLineWidth, lineHeight]; // No new lines can fit so terminate early return undefined; @@ -546,7 +619,7 @@ export default class LayoutEngine { * * @returns {Iterator<[line: string, width: number]>} */ - * #widthConstrainedLines(text, maxWidth, options) { + *#widthConstrainedLines(text, maxWidth, options) { // There is no way to have any lines if the maxWidth is 0 if (maxWidth === 0) return undefined; diff --git a/lib/utils/bounds.js b/lib/utils/bounds.js index 3e08a580..9c5f25f3 100644 --- a/lib/utils/bounds.js +++ b/lib/utils/bounds.js @@ -42,13 +42,21 @@ import { cosine, sine } from './math'; * - width - corresponds with length EF * - height - corresponds with length FG */ -export function computeInscribedBounds(boundingWidth, boundingHeight, rotation) { +export function computeInscribedBounds( + boundingWidth, + boundingHeight, + rotation, +) { if (boundingWidth == null) boundingWidth = Infinity; if (boundingHeight == null) boundingHeight = Infinity; // Shortcut for the base cases - if (rotation === 0 || rotation === 180) return [boundingWidth, boundingHeight]; - if (rotation === 90 || rotation === 270) return [boundingHeight, boundingWidth]; + if (rotation === 0 || rotation === 180) { + return [boundingWidth, boundingHeight]; + } + if (rotation === 90 || rotation === 270) { + return [boundingHeight, boundingWidth]; + } let textMaxWidth, textMaxHeight; @@ -102,14 +110,14 @@ export function computeInscribedBounds(boundingWidth, boundingHeight, rotation) // Substitution solve // > EF = (AB*cos(Θ) - BC*sin(Θ)) / (cos^2(Θ)-sin^2(Θ)) // > FG = (BC*cos(Θ) - AB*sin(Θ)) / (cos^2(Θ)-sin^2(Θ)) - const denominator = cos * cos - sin * sin; + const den = cos * cos - sin * sin; if (rotation < 90 || (rotation > 180 && rotation < 270)) { - textMaxWidth = (boundingWidth * cos - boundingHeight * sin) / denominator; - textMaxHeight = (boundingHeight * cos - boundingWidth * sin) / denominator; + textMaxWidth = (boundingWidth * cos - boundingHeight * sin) / den; + textMaxHeight = (boundingHeight * cos - boundingWidth * sin) / den; } else { - textMaxHeight = (boundingWidth * cos - boundingHeight * sin) / denominator; - textMaxWidth = (boundingHeight * cos - boundingWidth * sin) / denominator; + textMaxHeight = (boundingWidth * cos - boundingHeight * sin) / den; + textMaxWidth = (boundingHeight * cos - boundingWidth * sin) / den; } } diff --git a/lib/utils/normalize.js b/lib/utils/normalize.js index 7394e6ab..33e05737 100644 --- a/lib/utils/normalize.js +++ b/lib/utils/normalize.js @@ -15,9 +15,9 @@ * @returns {ExpandedAlign} */ export function normalizeAlignment(align, defaults) { - align = align == null || typeof align === 'string' - ? { x: align, y: align } - : align; + if (align == null || typeof align === 'string') { + align = { x: align, y: align }; + } if (defaults) { align.x = align.x ?? defaults.x; diff --git a/lib/utils/rotate.js b/lib/utils/rotate.js index 741fe60e..19f75a4d 100644 --- a/lib/utils/rotate.js +++ b/lib/utils/rotate.js @@ -31,7 +31,8 @@ export function rotateBox(x, y, width, height, angle) { const cos = cosine(angle); const sin = sine(angle); - const x1 = x, y1 = y, + const x1 = x, + y1 = y, x2 = x + width * cos, y2 = y - width * sin, x3 = x + width * cos + height * sin, diff --git a/tests/visual/text.spec.js b/tests/visual/text.spec.js index 64eb5d27..12c719b2 100644 --- a/tests/visual/text.spec.js +++ b/tests/visual/text.spec.js @@ -1,9 +1,9 @@ import { runDocTest } from './helpers'; import LayoutEngine from '../../lib/text/layout'; -describe('text', function() { - test('rewrite', function() { - return runDocTest(function(doc) { +describe('text', function () { + test('rewrite', function () { + return runDocTest(function (doc) { doc.font('tests/fonts/Roboto-Regular.ttf'); // TODO: add these methods to the base document @@ -13,23 +13,46 @@ describe('text', function() { layout.box(doc.x, doc.y, doc.page.contentWidth, doc.page.contentHeight); // Draw textBox - layout.textBox('fancy textBox()', { rotation: 20, border: 1, borderColor: 'red', backgroundColor: 'salmon' }); + layout.textBox('fancy textBox()', { + rotation: 20, + border: 1, + borderColor: 'red', + backgroundColor: 'salmon', + }); doc.save().circle(doc.x, doc.y, 2).fill('pink').restore(); // Display the origin // Draw normal text // Render the bounding box - const normalOpts = { y: 200, rotation: 20 } - const boundingBox = layout.boundsOfString('some normal text()', normalOpts); - layout.box(boundingBox.x, boundingBox.y, boundingBox.width, boundingBox.height, { borderColor: 'green', backgroundColor: 'lightgreen' }); + const normalOpts = { y: 200, rotation: 20 }; + const boundingBox = layout.boundsOfString( + 'some normal text()', + normalOpts, + ); + layout.box( + boundingBox.x, + boundingBox.y, + boundingBox.width, + boundingBox.height, + { borderColor: 'green', backgroundColor: 'lightgreen' }, + ); // Render the text bounds // This is achieved by getting the size of the text without rotation and then rendering it as a rotated box - const textBounds = layout.boundsOfString('some normal text()', { ...normalOpts, rotation: 0 }); - layout.box(textBounds.x, textBounds.y, textBounds.width, textBounds.height, { + const textBounds = layout.boundsOfString('some normal text()', { ...normalOpts, - borderColor: 'blue', - backgroundColor: 'black', - backgroundOpacity: 0.5, + rotation: 0, }); + layout.box( + textBounds.x, + textBounds.y, + textBounds.width, + textBounds.height, + { + ...normalOpts, + borderColor: 'blue', + backgroundColor: 'black', + backgroundOpacity: 0.5, + }, + ); // Display the origin doc.save().circle(doc.x, 200, 2).fill('darkgreen').restore(); // Render the text @@ -37,15 +60,15 @@ describe('text', function() { }); }); - test('simple text', function() { - return runDocTest(function(doc) { + test('simple text', function () { + return runDocTest(function (doc) { doc.font('tests/fonts/Roboto-Regular.ttf'); doc.text('Really simple text', 100, 100); }); }); - test('alignment', function() { - return runDocTest(function(doc) { + test('alignment', function () { + return runDocTest(function (doc) { doc.font('tests/fonts/Roboto-Regular.ttf'); doc.text('Left aligned text', { align: 'left' }); doc.text('Right aligned text', { align: 'right' }); @@ -56,8 +79,8 @@ describe('text', function() { }); }); - test('soft hyphen', function() { - return runDocTest(function(doc) { + test('soft hyphen', function () { + return runDocTest(function (doc) { doc.font('tests/fonts/Roboto-Regular.ttf'); doc.text( 'Text with soft hyphen - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lo ip\u00ADsum', @@ -70,8 +93,8 @@ describe('text', function() { }); }); - test('decoration', function() { - return runDocTest(function(doc) { + test('decoration', function () { + return runDocTest(function (doc) { doc.font('tests/fonts/Roboto-Regular.ttf'); doc.fillColor('blue').text('Here is a link!', 100, 100, { link: 'http://google.com/', @@ -87,22 +110,22 @@ describe('text', function() { }); }); - test('list', function() { - return runDocTest(function(doc) { + test('list', function () { + return runDocTest(function (doc) { doc.font('tests/fonts/Roboto-Regular.ttf'); doc.fillColor('#000').list(['One', 'Two', 'Three'], 100, 150); }); }); - test('list with line breaks in items', function() { - return runDocTest(function(doc) { + test('list with line breaks in items', function () { + return runDocTest(function (doc) { doc.font('tests/fonts/Roboto-Regular.ttf'); doc.list(['Foo\nBar', 'Foo\rBar', 'Foo\r\nBar'], [100, 150]); }); }); - test('list (numbered)', function() { - return runDocTest(function(doc) { + test('list (numbered)', function () { + return runDocTest(function (doc) { doc.font('tests/fonts/Roboto-Regular.ttf'); doc .fillColor('#000') @@ -110,8 +133,8 @@ describe('text', function() { }); }); - test('list (lettered)', function() { - return runDocTest(function(doc) { + test('list (lettered)', function () { + return runDocTest(function (doc) { doc.font('tests/fonts/Roboto-Regular.ttf'); doc .fillColor('#000') @@ -119,8 +142,8 @@ describe('text', function() { }); }); - test('list with sub-list (unordered)', function() { - return runDocTest(function(doc) { + test('list with sub-list (unordered)', function () { + return runDocTest(function (doc) { doc.font('tests/fonts/Roboto-Regular.ttf'); doc .fillColor('#000') @@ -128,8 +151,8 @@ describe('text', function() { }); }); - test('list with sub-list (ordered)', function() { - return runDocTest(function(doc) { + test('list with sub-list (ordered)', function () { + return runDocTest(function (doc) { doc.font('tests/fonts/Roboto-Regular.ttf'); doc .fillColor('#000') @@ -139,8 +162,8 @@ describe('text', function() { }); }); - test('continued text with OpenType features', function() { - return runDocTest(function(doc) { + test('continued text with OpenType features', function () { + return runDocTest(function (doc) { doc.font('tests/fonts/Roboto-Regular.ttf'); doc.text('Really simple', 100, 100, { features: ['smcp'], @@ -151,7 +174,7 @@ describe('text', function() { }); }); - test('rotated text', function() { + test('rotated text', function () { let i = 0; const cols = [ '#292f56', @@ -168,7 +191,7 @@ describe('text', function() { return cols[i++ % cols.length]; } - return runDocTest(function(doc) { + return runDocTest(function (doc) { doc.font('tests/fonts/Roboto-Regular.ttf'); for (let i = -360; i < 360; i += 5) { const withLabel = i % 45 === 0; @@ -194,8 +217,8 @@ describe('text', function() { }); }); - test('rotated multi line text', function() { - return runDocTest(function(doc) { + test('rotated multi line text', function () { + return runDocTest(function (doc) { doc.font('tests/fonts/Roboto-Regular.ttf'); let text = `Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.`; From 703e9bfc1a9a26288afe809dd83a1aa4e38d9424 Mon Sep 17 00:00:00 2001 From: Jake Holland Date: Fri, 20 Jun 2025 20:24:34 +0100 Subject: [PATCH 09/12] Update github workflow - Remove support for node18 - Add support for node24 --- .github/workflows/lint-test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/lint-test.yml b/.github/workflows/lint-test.yml index 4b0c8661..d234b6f3 100644 --- a/.github/workflows/lint-test.yml +++ b/.github/workflows/lint-test.yml @@ -12,7 +12,7 @@ jobs: strategy: fail-fast: false matrix: - node-version: [18.x, 20.x, 22.x] + node-version: [20.x, 22.x, 24.x] steps: - uses: actions/checkout@v2 From f17c57e63fff0496ed9a7d5b4026849b52703f87 Mon Sep 17 00:00:00 2001 From: Jake Holland Date: Fri, 20 Jun 2025 21:18:28 +0100 Subject: [PATCH 10/12] Fix eslint issues --- lib/font/embedded.js | 3 +-- tests/unit/document.spec.js | 1 + tests/unit/font.spec.js | 1 + tests/unit/png.spec.js | 1 + 4 files changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/font/embedded.js b/lib/font/embedded.js index cf788325..f00dd952 100644 --- a/lib/font/embedded.js +++ b/lib/font/embedded.js @@ -76,10 +76,9 @@ class EmbeddedFont extends PDFFont { let last = 0; let index = 0; while (index <= text.length) { - let needle; if ( (index === text.length && last < index) || - [' ', '\t'].includes((needle = text.charAt(index))) + [' ', '\t'].includes(text.charAt(index)) ) { const run = this.layoutCached(text.slice(last, ++index)); if (!onlyWidth) { diff --git a/tests/unit/document.spec.js b/tests/unit/document.spec.js index baed7813..e995f81a 100644 --- a/tests/unit/document.spec.js +++ b/tests/unit/document.spec.js @@ -1,5 +1,6 @@ import PDFDocument from '../../lib/document'; import { logData } from './helpers'; +import { vi } from 'vitest'; describe('PDFDocument', () => { describe('font option', () => { diff --git a/tests/unit/font.spec.js b/tests/unit/font.spec.js index 4b945a6c..c1417481 100644 --- a/tests/unit/font.spec.js +++ b/tests/unit/font.spec.js @@ -1,6 +1,7 @@ import PDFDocument from '../../lib/document'; import PDFFontFactory from '../../lib/font_factory'; import { logData } from './helpers'; +import { vi } from 'vitest'; describe('EmbeddedFont', () => { afterEach(() => vi.restoreAllMocks()); diff --git a/tests/unit/png.spec.js b/tests/unit/png.spec.js index b608ea5a..03eb736e 100644 --- a/tests/unit/png.spec.js +++ b/tests/unit/png.spec.js @@ -2,6 +2,7 @@ import PDFDocument from '../../lib/document'; import PDFReference from '../../lib/reference'; import PNGImage from '../../lib/image/png'; import fs from 'fs'; +import { vi } from 'vitest'; describe('PNGImage', () => { let document; From be8ca56916296953596174033137896373ff9bc6 Mon Sep 17 00:00:00 2001 From: Jake Holland Date: Fri, 20 Jun 2025 21:23:56 +0100 Subject: [PATCH 11/12] Fix broken test --- eslint.config.mjs | 5 ++++- .../text-spec-js-text-rewrite-1-snap.png | Bin 30546 -> 29953 bytes 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/eslint.config.mjs b/eslint.config.mjs index 147f7f71..5aa25968 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -15,6 +15,9 @@ export default [ globals: { ...globals.jest, }, + }, + rules: { + "no-empty-pattern": "off" } }, -]; \ No newline at end of file +]; diff --git a/tests/visual/__image_snapshots__/text-spec-js-text-rewrite-1-snap.png b/tests/visual/__image_snapshots__/text-spec-js-text-rewrite-1-snap.png index 1666e6edfe9f7c64d354c7b9d06b1e14133b98fe..af50893a2a42cf5b9a25b56c4e4c28f9e5d46cd2 100644 GIT binary patch literal 29953 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 From 90e166ccddc2a11b928c10399195fa36e89ae405 Mon Sep 17 00:00:00 2001 From: Jake Holland Date: Mon, 23 Jun 2025 13:52:00 +0100 Subject: [PATCH 12/12] Modernize the build process - Current process fails on the external dependencies - This modernizes both the test and build process - And fixes the package defined exports --- examples/webpack/package.json | 2 +- examples/webpack/src/registerStaticFiles.js | 24 +- examples/webpack/webpack.config.js | 2 +- examples/webpack/yarn.lock | 1536 +++++++++++++++ package.json | 35 +- rollup.config.js | 118 -- tests/unit/layout.spec.js | 29 + tests/visual/vector.spec.js | 2 +- vite.config.js | 57 + vite.standalone.config.js | 48 + vite.virtual-fs.config.js | 21 + vitest.config.js | 8 - yarn.lock | 1907 +++---------------- 13 files changed, 2004 insertions(+), 1785 deletions(-) create mode 100644 examples/webpack/yarn.lock delete mode 100644 rollup.config.js create mode 100644 tests/unit/layout.spec.js create mode 100644 vite.config.js create mode 100644 vite.standalone.config.js create mode 100644 vite.virtual-fs.config.js delete mode 100644 vitest.config.js diff --git a/examples/webpack/package.json b/examples/webpack/package.json index 8025b243..9c424795 100644 --- a/examples/webpack/package.json +++ b/examples/webpack/package.json @@ -5,7 +5,7 @@ "brace": "^0.11.1", "browserify-zlib": "^0.2.0", "buffer": "^6.0.3", - "pdfkit": "^0.15.0", + "pdfkit": "file:../..", "process": "^0.11.10", "readable-stream": "^4.5.2", "util": "^0.12.5" diff --git a/examples/webpack/src/registerStaticFiles.js b/examples/webpack/src/registerStaticFiles.js index eba56f63..0af4ae62 100644 --- a/examples/webpack/src/registerStaticFiles.js +++ b/examples/webpack/src/registerStaticFiles.js @@ -1,8 +1,12 @@ // the fs here is not node fs but the provided virtual one import fs from 'fs'; // the content file is returned as is (webpack is configured to load *.afm files as asset/source) -import Courier from 'pdfkit/js/data/Courier.afm'; -import CourierBold from 'pdfkit/js/data/Courier-Bold.afm'; +import Helvetica from 'pdfkit/data/Helvetica.afm'; +import HelveticaBold from 'pdfkit/data/Helvetica-Bold.afm'; +import HelveticaBoldOblique from 'pdfkit/data/Helvetica-BoldOblique.afm'; +import HelveticaOblique from 'pdfkit/data/Helvetica-Oblique.afm'; +import Courier from 'pdfkit/data/Courier.afm'; +import CourierBold from 'pdfkit/data/Courier-Bold.afm'; function registerBinaryFiles(ctx) { ctx.keys().forEach(key => { @@ -11,23 +15,15 @@ function registerBinaryFiles(ctx) { }); } -function registerAFMFonts(ctx) { - ctx.keys().forEach(key => { - const match = key.match(/([^/]*\.afm$)/); - if (match) { - // afm files must be stored on data path - fs.writeFileSync(`data/${match[0]}`, ctx(key)); - } - }); -} - // register all files found in assets folder (relative to src) registerBinaryFiles(require.context('./static-assets', true)); // register AFM fonts distributed with pdfkit // is good practice to register only required fonts to avoid the bundle size increase too much -registerAFMFonts(require.context('pdfkit/js/data', false, /Helvetica.*\.afm$/)); - // register files imported directly +fs.writeFileSync('data/Helvetica.afm', Helvetica); +fs.writeFileSync('data/Helvetica-Bold.afm', HelveticaBold); +fs.writeFileSync('data/Helvetica-BoldOblique.afm', HelveticaBoldOblique); +fs.writeFileSync('data/Helvetica-Oblique.afm', HelveticaOblique); fs.writeFileSync('data/Courier.afm', Courier); fs.writeFileSync('data/Courier-Bold.afm', CourierBold); diff --git a/examples/webpack/webpack.config.js b/examples/webpack/webpack.config.js index f31b03ca..e886c114 100644 --- a/examples/webpack/webpack.config.js +++ b/examples/webpack/webpack.config.js @@ -16,7 +16,7 @@ module.exports = { symlinks: false, alias: { // maps fs to a virtual one allowing to register file content dynamically - fs: __dirname + '/../../js/virtual-fs.js' + fs: 'pdfkit/virtual-fs' }, fallback: { // crypto module is not necessary at browser diff --git a/examples/webpack/yarn.lock b/examples/webpack/yarn.lock new file mode 100644 index 00000000..de3ed00a --- /dev/null +++ b/examples/webpack/yarn.lock @@ -0,0 +1,1536 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@cto.af/linebreak@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@cto.af/linebreak/-/linebreak-3.0.1.tgz#0aaabacf8d3127f7899d7e21c1e86be0b52ed471" + integrity sha512-evmzZDZpv29UUGCzXOaLQ50C0fu7Kqa2Bv9hC9eMC+qhnGXtF7S0syd7DPPHj8E38EFGDC1iOgJa9NlaXg/nxQ== + dependencies: + "@cto.af/unicode-trie-runtime" "3.2.5" + +"@cto.af/unicode-trie-runtime@3.2.5": + version "3.2.5" + resolved "https://registry.yarnpkg.com/@cto.af/unicode-trie-runtime/-/unicode-trie-runtime-3.2.5.tgz#cb1449063421cc25683d79c6b8e03ab5f584cf5e" + integrity sha512-JuNdknVDfAL+axsopNct/XIVEEEqoaTqRBM6FhQGJdSY7nseYfTmIoAyxJ5Py+TJHwCcOaZ0EBuZhoOiYkJTZw== + dependencies: + fflate "^0.8.2" + +"@discoveryjs/json-ext@^0.5.0": + version "0.5.7" + resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" + integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== + +"@jridgewell/gen-mapping@^0.3.5": + version "0.3.8" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz#4f0e06362e01362f823d348f1872b08f666d8142" + integrity sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA== + dependencies: + "@jridgewell/set-array" "^1.2.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.24" + +"@jridgewell/resolve-uri@^3.1.0": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== + +"@jridgewell/set-array@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" + integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== + +"@jridgewell/source-map@^0.3.3": + version "0.3.6" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.6.tgz#9d71ca886e32502eb9362c9a74a46787c36df81a" + integrity sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ== + dependencies: + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" + +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" + integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== + +"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": + version "0.3.25" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" + integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + +"@swc/helpers@^0.5.12": + version "0.5.17" + resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.17.tgz#5a7be95ac0f0bf186e7e6e890e7a6f6cda6ce971" + integrity sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A== + dependencies: + tslib "^2.8.0" + +"@types/eslint-scope@^3.7.7": + version "3.7.7" + resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.7.tgz#3108bd5f18b0cdb277c867b3dd449c9ed7079ac5" + integrity sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg== + dependencies: + "@types/eslint" "*" + "@types/estree" "*" + +"@types/eslint@*": + version "9.6.1" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-9.6.1.tgz#d5795ad732ce81715f27f75da913004a56751584" + integrity sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag== + dependencies: + "@types/estree" "*" + "@types/json-schema" "*" + +"@types/estree@*", "@types/estree@^1.0.6": + version "1.0.8" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.8.tgz#958b91c991b1867ced318bedea0e215ee050726e" + integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w== + +"@types/html-minifier-terser@^6.0.0": + version "6.1.0" + resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#4fc33a00c1d0c16987b1a20cf92d20614c55ac35" + integrity sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg== + +"@types/json-schema@*", "@types/json-schema@^7.0.15", "@types/json-schema@^7.0.9": + version "7.0.15" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== + +"@types/node@*": + version "24.0.3" + resolved "https://registry.yarnpkg.com/@types/node/-/node-24.0.3.tgz#f935910f3eece3a3a2f8be86b96ba833dc286cab" + integrity sha512-R4I/kzCYAdRLzfiCabn9hxWfbuHS573x+r0dJMkkzThEa7pbrcDWK+9zu3e7aBOouf+rQAciqPFMnxwr0aWgKg== + dependencies: + undici-types "~7.8.0" + +"@webassemblyjs/ast@1.14.1", "@webassemblyjs/ast@^1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.14.1.tgz#a9f6a07f2b03c95c8d38c4536a1fdfb521ff55b6" + integrity sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ== + dependencies: + "@webassemblyjs/helper-numbers" "1.13.2" + "@webassemblyjs/helper-wasm-bytecode" "1.13.2" + +"@webassemblyjs/floating-point-hex-parser@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz#fcca1eeddb1cc4e7b6eed4fc7956d6813b21b9fb" + integrity sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA== + +"@webassemblyjs/helper-api-error@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz#e0a16152248bc38daee76dd7e21f15c5ef3ab1e7" + integrity sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ== + +"@webassemblyjs/helper-buffer@1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz#822a9bc603166531f7d5df84e67b5bf99b72b96b" + integrity sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA== + +"@webassemblyjs/helper-numbers@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz#dbd932548e7119f4b8a7877fd5a8d20e63490b2d" + integrity sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA== + dependencies: + "@webassemblyjs/floating-point-hex-parser" "1.13.2" + "@webassemblyjs/helper-api-error" "1.13.2" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/helper-wasm-bytecode@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz#e556108758f448aae84c850e593ce18a0eb31e0b" + integrity sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA== + +"@webassemblyjs/helper-wasm-section@1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz#9629dda9c4430eab54b591053d6dc6f3ba050348" + integrity sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw== + dependencies: + "@webassemblyjs/ast" "1.14.1" + "@webassemblyjs/helper-buffer" "1.14.1" + "@webassemblyjs/helper-wasm-bytecode" "1.13.2" + "@webassemblyjs/wasm-gen" "1.14.1" + +"@webassemblyjs/ieee754@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz#1c5eaace1d606ada2c7fd7045ea9356c59ee0dba" + integrity sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw== + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.13.2.tgz#57c5c3deb0105d02ce25fa3fd74f4ebc9fd0bbb0" + integrity sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw== + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.13.2.tgz#917a20e93f71ad5602966c2d685ae0c6c21f60f1" + integrity sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ== + +"@webassemblyjs/wasm-edit@^1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz#ac6689f502219b59198ddec42dcd496b1004d597" + integrity sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ== + dependencies: + "@webassemblyjs/ast" "1.14.1" + "@webassemblyjs/helper-buffer" "1.14.1" + "@webassemblyjs/helper-wasm-bytecode" "1.13.2" + "@webassemblyjs/helper-wasm-section" "1.14.1" + "@webassemblyjs/wasm-gen" "1.14.1" + "@webassemblyjs/wasm-opt" "1.14.1" + "@webassemblyjs/wasm-parser" "1.14.1" + "@webassemblyjs/wast-printer" "1.14.1" + +"@webassemblyjs/wasm-gen@1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz#991e7f0c090cb0bb62bbac882076e3d219da9570" + integrity sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg== + dependencies: + "@webassemblyjs/ast" "1.14.1" + "@webassemblyjs/helper-wasm-bytecode" "1.13.2" + "@webassemblyjs/ieee754" "1.13.2" + "@webassemblyjs/leb128" "1.13.2" + "@webassemblyjs/utf8" "1.13.2" + +"@webassemblyjs/wasm-opt@1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz#e6f71ed7ccae46781c206017d3c14c50efa8106b" + integrity sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw== + dependencies: + "@webassemblyjs/ast" "1.14.1" + "@webassemblyjs/helper-buffer" "1.14.1" + "@webassemblyjs/wasm-gen" "1.14.1" + "@webassemblyjs/wasm-parser" "1.14.1" + +"@webassemblyjs/wasm-parser@1.14.1", "@webassemblyjs/wasm-parser@^1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz#b3e13f1893605ca78b52c68e54cf6a865f90b9fb" + integrity sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ== + dependencies: + "@webassemblyjs/ast" "1.14.1" + "@webassemblyjs/helper-api-error" "1.13.2" + "@webassemblyjs/helper-wasm-bytecode" "1.13.2" + "@webassemblyjs/ieee754" "1.13.2" + "@webassemblyjs/leb128" "1.13.2" + "@webassemblyjs/utf8" "1.13.2" + +"@webassemblyjs/wast-printer@1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz#3bb3e9638a8ae5fdaf9610e7a06b4d9f9aa6fe07" + integrity sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw== + dependencies: + "@webassemblyjs/ast" "1.14.1" + "@xtuc/long" "4.2.2" + +"@webpack-cli/configtest@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-2.1.1.tgz#3b2f852e91dac6e3b85fb2a314fb8bef46d94646" + integrity sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw== + +"@webpack-cli/info@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-2.0.2.tgz#cc3fbf22efeb88ff62310cf885c5b09f44ae0fdd" + integrity sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A== + +"@webpack-cli/serve@^2.0.5": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-2.0.5.tgz#325db42395cd49fe6c14057f9a900e427df8810e" + integrity sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ== + +"@xtuc/ieee754@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" + integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== + +"@xtuc/long@4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" + integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== + +abort-controller@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" + integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== + dependencies: + event-target-shim "^5.0.0" + +acorn@^8.14.0: + version "8.15.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.15.0.tgz#a360898bc415edaac46c8241f6383975b930b816" + integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg== + +ajv-formats@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" + integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== + dependencies: + ajv "^8.0.0" + +ajv-keywords@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16" + integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw== + dependencies: + fast-deep-equal "^3.1.3" + +ajv@^8.0.0, ajv@^8.9.0: + version "8.17.1" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6" + integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== + dependencies: + fast-deep-equal "^3.1.3" + fast-uri "^3.0.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +assert@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/assert/-/assert-2.1.0.tgz#6d92a238d05dc02e7427c881fb8be81c8448b2dd" + integrity sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw== + dependencies: + call-bind "^1.0.2" + is-nan "^1.3.2" + object-is "^1.1.5" + object.assign "^4.1.4" + util "^0.12.5" + +available-typed-arrays@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" + integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== + dependencies: + possible-typed-array-names "^1.0.0" + +base64-js@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-0.0.8.tgz#1101e9544f4a76b1bc3b26d452ca96d7a35e7978" + integrity sha512-3XSA2cR/h/73EzlXXdU6YNycmYI7+kicTxks4eJg2g39biHR84slg2+des+p7iHYhbRg/udIS4TD53WabcOUkw== + +base64-js@^1.1.2, base64-js@^1.3.0, base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== + +boolbase@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== + +brace@^0.11.1: + version "0.11.1" + resolved "https://registry.yarnpkg.com/brace/-/brace-0.11.1.tgz#4896fcc9d544eef45f4bb7660db320d3b379fe58" + integrity sha512-Fc8Ne62jJlKHiG/ajlonC4Sd66Pq68fFwK4ihJGNZpGqboc324SQk+lRvMzpPRuJOmfrJefdG8/7JdWX4bzJ2Q== + +brotli@^1.3.2: + version "1.3.3" + resolved "https://registry.yarnpkg.com/brotli/-/brotli-1.3.3.tgz#7365d8cc00f12cf765d2b2c898716bcf4b604d48" + integrity sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg== + dependencies: + base64-js "^1.1.2" + +browserify-zlib@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" + integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== + dependencies: + pako "~1.0.5" + +browserslist@^4.24.0: + version "4.25.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.25.0.tgz#986aa9c6d87916885da2b50d8eb577ac8d133b2c" + integrity sha512-PJ8gYKeS5e/whHBh8xrwYK+dAvEj7JXtz6uTucnMRB8OiGTsKccFekoRrjajPBHV8oOY+2tI4uxeceSimKwMFA== + dependencies: + caniuse-lite "^1.0.30001718" + electron-to-chromium "^1.5.160" + node-releases "^2.0.19" + update-browserslist-db "^1.1.3" + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +buffer@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" + +call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" + integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + +call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.7, call-bind@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.8.tgz#0736a9660f537e3388826f440d5ec45f744eaa4c" + integrity sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww== + dependencies: + call-bind-apply-helpers "^1.0.0" + es-define-property "^1.0.0" + get-intrinsic "^1.2.4" + set-function-length "^1.2.2" + +call-bound@^1.0.2, call-bound@^1.0.3, call-bound@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a" + integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== + dependencies: + call-bind-apply-helpers "^1.0.2" + get-intrinsic "^1.3.0" + +camel-case@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" + integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== + dependencies: + pascal-case "^3.1.2" + tslib "^2.0.3" + +caniuse-lite@^1.0.30001718: + version "1.0.30001724" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001724.tgz#312e163553dd70d2c0fb603d74810c85d8ed94a0" + integrity sha512-WqJo7p0TbHDOythNTqYujmaJTvtYRZrjpP8TCvH6Vb9CYJerJNKamKzIWOM4BkQatWj9H2lYulpdAQNBe7QhNA== + +chrome-trace-event@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz#05bffd7ff928465093314708c93bdfa9bd1f0f5b" + integrity sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ== + +clean-css@^5.2.2: + version "5.3.3" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-5.3.3.tgz#b330653cd3bd6b75009cc25c714cae7b93351ccd" + integrity sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg== + dependencies: + source-map "~0.6.0" + +clone-deep@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== + dependencies: + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.0.0" + +clone@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" + integrity sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w== + +colorette@^2.0.14: + version "2.0.20" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" + integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== + +commander@^10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" + integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== + +commander@^2.20.0: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commander@^8.3.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" + integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== + +cross-spawn@^7.0.3: + version "7.0.6" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" + integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +crypto-js@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-4.2.0.tgz#4d931639ecdfd12ff80e8186dba6af2c2e856631" + integrity sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q== + +css-select@^4.1.3: + version "4.3.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b" + integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ== + dependencies: + boolbase "^1.0.0" + css-what "^6.0.1" + domhandler "^4.3.1" + domutils "^2.8.0" + nth-check "^2.0.1" + +css-what@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" + integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== + +define-data-property@^1.0.1, define-data-property@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + gopd "^1.0.1" + +define-properties@^1.1.3, define-properties@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" + integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== + dependencies: + define-data-property "^1.0.1" + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +dfa@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/dfa/-/dfa-1.2.0.tgz#96ac3204e2d29c49ea5b57af8d92c2ae12790657" + integrity sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q== + +dom-converter@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" + integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== + dependencies: + utila "~0.4" + +dom-serializer@^1.0.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30" + integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.2.0" + entities "^2.0.0" + +domelementtype@^2.0.1, domelementtype@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" + integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== + +domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" + integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== + dependencies: + domelementtype "^2.2.0" + +domutils@^2.5.2, domutils@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" + integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== + dependencies: + dom-serializer "^1.0.1" + domelementtype "^2.2.0" + domhandler "^4.2.0" + +dot-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" + integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + +dunder-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" + integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== + dependencies: + call-bind-apply-helpers "^1.0.1" + es-errors "^1.3.0" + gopd "^1.2.0" + +electron-to-chromium@^1.5.160: + version "1.5.171" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.171.tgz#e552b4fd73d4dd941ee4c70ae288a8a39f818726" + integrity sha512-scWpzXEJEMrGJa4Y6m/tVotb0WuvNmasv3wWVzUAeCgKU0ToFOhUW6Z+xWnRQANMYGxN4ngJXIThgBJOqzVPCQ== + +emojis-list@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== + +enhanced-resolve@^5.17.1: + version "5.18.1" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz#728ab082f8b7b6836de51f1637aab5d3b9568faf" + integrity sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg== + dependencies: + graceful-fs "^4.2.4" + tapable "^2.2.0" + +entities@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" + integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== + +envinfo@^7.7.3: + version "7.14.0" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.14.0.tgz#26dac5db54418f2a4c1159153a0b2ae980838aae" + integrity sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg== + +es-define-property@^1.0.0, es-define-property@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" + integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== + +es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + +es-module-lexer@^1.2.1: + version "1.7.0" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.7.0.tgz#9159601561880a85f2734560a9099b2c31e5372a" + integrity sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA== + +es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1" + integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== + dependencies: + es-errors "^1.3.0" + +escalade@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" + integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== + +eslint-scope@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +event-target-shim@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" + integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== + +events@^3.2.0, events@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + +fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-uri@^3.0.1: + version "3.0.6" + resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.0.6.tgz#88f130b77cfaea2378d56bf970dea21257a68748" + integrity sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw== + +fastest-levenshtein@^1.0.12: + version "1.0.16" + resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" + integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== + +fflate@^0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/fflate/-/fflate-0.8.2.tgz#fc8631f5347812ad6028bbe4a2308b2792aa1dea" + integrity sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A== + +find-up@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +flat@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" + integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== + +fontkit@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/fontkit/-/fontkit-2.0.4.tgz#4765d664c68b49b5d6feb6bd1051ee49d8ec5ab0" + integrity sha512-syetQadaUEDNdxdugga9CpEYVaQIxOwk7GlwZWWZ19//qW4zE5bknOKeMBDYAASwnpaSHKJITRLMF9m1fp3s6g== + dependencies: + "@swc/helpers" "^0.5.12" + brotli "^1.3.2" + clone "^2.1.2" + dfa "^1.2.0" + fast-deep-equal "^3.1.3" + restructure "^3.0.0" + tiny-inflate "^1.0.3" + unicode-properties "^1.4.0" + unicode-trie "^2.0.0" + +for-each@^0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.5.tgz#d650688027826920feeb0af747ee7b9421a41d47" + integrity sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg== + dependencies: + is-callable "^1.2.7" + +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +get-intrinsic@^1.2.4, get-intrinsic@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" + integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== + dependencies: + call-bind-apply-helpers "^1.0.2" + es-define-property "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.1.1" + function-bind "^1.1.2" + get-proto "^1.0.1" + gopd "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + math-intrinsics "^1.1.0" + +get-proto@^1.0.0, get-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" + integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== + dependencies: + dunder-proto "^1.0.1" + es-object-atoms "^1.0.0" + +glob-to-regexp@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" + integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== + +gopd@^1.0.1, gopd@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" + integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== + +graceful-fs@^4.1.2, graceful-fs@^4.2.11, graceful-fs@^4.2.4: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== + dependencies: + es-define-property "^1.0.0" + +has-symbols@^1.0.3, has-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" + integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== + +has-tostringtag@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== + dependencies: + has-symbols "^1.0.3" + +hasown@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== + dependencies: + function-bind "^1.1.2" + +he@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +html-minifier-terser@^6.0.2: + version "6.1.0" + resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#bfc818934cc07918f6b3669f5774ecdfd48f32ab" + integrity sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw== + dependencies: + camel-case "^4.1.2" + clean-css "^5.2.2" + commander "^8.3.0" + he "^1.2.0" + param-case "^3.0.4" + relateurl "^0.2.7" + terser "^5.10.0" + +html-webpack-plugin@^5.6.0: + version "5.6.3" + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.6.3.tgz#a31145f0fee4184d53a794f9513147df1e653685" + integrity sha512-QSf1yjtSAsmf7rYBV7XX86uua4W/vkhIt0xNXKbsi2foEeW7vjJQz4bhnpL3xH+l1ryl1680uNv968Z+X6jSYg== + dependencies: + "@types/html-minifier-terser" "^6.0.0" + html-minifier-terser "^6.0.2" + lodash "^4.17.21" + pretty-error "^4.0.0" + tapable "^2.0.0" + +htmlparser2@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" + integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.0.0" + domutils "^2.5.2" + entities "^2.0.0" + +ieee754@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +import-local@^3.0.2: + version "3.2.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.2.0.tgz#c3d5c745798c02a6f8b897726aba5100186ee260" + integrity sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + +inherits@^2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +interpret@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-3.1.1.tgz#5be0ceed67ca79c6c4bc5cf0d7ee843dcea110c4" + integrity sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ== + +is-arguments@^1.0.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.2.0.tgz#ad58c6aecf563b78ef2bf04df540da8f5d7d8e1b" + integrity sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA== + dependencies: + call-bound "^1.0.2" + has-tostringtag "^1.0.2" + +is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + +is-core-module@^2.16.0: + version "2.16.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4" + integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== + dependencies: + hasown "^2.0.2" + +is-generator-function@^1.0.7: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.1.0.tgz#bf3eeda931201394f57b5dba2800f91a238309ca" + integrity sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ== + dependencies: + call-bound "^1.0.3" + get-proto "^1.0.0" + has-tostringtag "^1.0.2" + safe-regex-test "^1.1.0" + +is-nan@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/is-nan/-/is-nan-1.3.2.tgz#043a54adea31748b55b6cd4e09aadafa69bd9e1d" + integrity sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + +is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-regex@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.2.1.tgz#76d70a3ed10ef9be48eb577887d74205bf0cad22" + integrity sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g== + dependencies: + call-bound "^1.0.2" + gopd "^1.2.0" + has-tostringtag "^1.0.2" + hasown "^2.0.2" + +is-typed-array@^1.1.3: + version "1.1.15" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.15.tgz#4bfb4a45b61cee83a5a46fba778e4e8d59c0ce0b" + integrity sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ== + dependencies: + which-typed-array "^1.1.16" + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== + +jest-worker@^27.4.5: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" + integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +jpeg-exif@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/jpeg-exif/-/jpeg-exif-1.1.4.tgz#781a65b6cd74f62cb1c493511020f8d3577a1c2b" + integrity sha512-a+bKEcCjtuW5WTdgeXFzswSrdqi0jk4XlEtZlx5A94wCoBpFjfFTbo/Tra5SpNCl/YFZPvcV1dJc+TAYeg6ROQ== + +json-parse-even-better-errors@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +json5@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" + integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== + dependencies: + minimist "^1.2.0" + +kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +linebreak@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/linebreak/-/linebreak-1.1.0.tgz#831cf378d98bced381d8ab118f852bd50d81e46b" + integrity sha512-MHp03UImeVhB7XZtjd0E4n6+3xr5Dq/9xI/5FptGk5FrbDR3zagPa2DS6U8ks/3HjbKWG9Q1M2ufOzxV2qLYSQ== + dependencies: + base64-js "0.0.8" + unicode-trie "^2.0.0" + +loader-runner@^4.2.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" + integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== + +loader-utils@^1.0.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.2.tgz#29a957f3a63973883eb684f10ffd3d151fec01a3" + integrity sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^1.0.1" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +lodash@^4.17.20, lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +lower-case@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" + integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== + dependencies: + tslib "^2.0.3" + +math-intrinsics@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" + integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.27: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +minimist@^1.2.0: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +neo-async@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +no-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" + integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== + dependencies: + lower-case "^2.0.2" + tslib "^2.0.3" + +node-releases@^2.0.19: + version "2.0.19" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.19.tgz#9e445a52950951ec4d177d843af370b411caf314" + integrity sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw== + +nth-check@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" + integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== + dependencies: + boolbase "^1.0.0" + +object-is@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.6.tgz#1a6a53aed2dd8f7e6775ff870bea58545956ab07" + integrity sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.4: + version "4.1.7" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.7.tgz#8c14ca1a424c6a561b0bb2a22f66f5049a945d3d" + integrity sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + has-symbols "^1.1.0" + object-keys "^1.1.1" + +p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +pako@^0.2.5: + version "0.2.9" + resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" + integrity sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA== + +pako@~1.0.5: + version "1.0.11" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" + integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== + +param-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" + integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== + dependencies: + dot-case "^3.0.4" + tslib "^2.0.3" + +pascal-case@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" + integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +"pdfkit@file:../..": + version "0.17.1" + dependencies: + "@cto.af/linebreak" "^3.0.1" + crypto-js "^4.2.0" + fontkit "^2.0.4" + jpeg-exif "^1.1.4" + linebreak "^1.1.0" + png-js "^1.0.0" + +picocolors@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" + integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== + +pkg-dir@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +png-js@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/png-js/-/png-js-1.0.0.tgz#e5484f1e8156996e383aceebb3789fd75df1874d" + integrity sha512-k+YsbhpA9e+EFfKjTCH3VW6aoKlyNYI6NYdTfDL4CIvFnvsuO84ttonmZE7rc+v23SLTH8XX+5w/Ak9v0xGY4g== + +possible-typed-array-names@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz#93e3582bc0e5426586d9d07b79ee40fc841de4ae" + integrity sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg== + +pretty-error@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-4.0.0.tgz#90a703f46dd7234adb46d0f84823e9d1cb8f10d6" + integrity sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw== + dependencies: + lodash "^4.17.20" + renderkid "^3.0.0" + +process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== + +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +readable-stream@^4.5.2: + version "4.7.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-4.7.0.tgz#cedbd8a1146c13dfff8dab14068028d58c15ac91" + integrity sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg== + dependencies: + abort-controller "^3.0.0" + buffer "^6.0.3" + events "^3.3.0" + process "^0.11.10" + string_decoder "^1.3.0" + +rechoir@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.8.0.tgz#49f866e0d32146142da3ad8f0eff352b3215ff22" + integrity sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ== + dependencies: + resolve "^1.20.0" + +relateurl@^0.2.7: + version "0.2.7" + resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" + integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog== + +renderkid@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-3.0.0.tgz#5fd823e4d6951d37358ecc9a58b1f06836b6268a" + integrity sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg== + dependencies: + css-select "^4.1.3" + dom-converter "^0.2.0" + htmlparser2 "^6.1.0" + lodash "^4.17.21" + strip-ansi "^6.0.1" + +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +resolve-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + dependencies: + resolve-from "^5.0.0" + +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + +resolve@^1.20.0: + version "1.22.10" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.10.tgz#b663e83ffb09bbf2386944736baae803029b8b39" + integrity sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w== + dependencies: + is-core-module "^2.16.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +restructure@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/restructure/-/restructure-3.0.2.tgz#e6b2fad214f78edee21797fa8160fef50eb9b49a" + integrity sha512-gSfoiOEA0VPE6Tukkrr7I0RBdE0s7H1eFCDBk05l1KIQT1UIKNc5JZy6jdyW6eYH3aR3g5b3PuL77rq0hvwtAw== + +safe-buffer@^5.1.0, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-regex-test@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.1.0.tgz#7f87dfb67a3150782eaaf18583ff5d1711ac10c1" + integrity sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + is-regex "^1.2.1" + +schema-utils@^4.3.0, schema-utils@^4.3.2: + version "4.3.2" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.3.2.tgz#0c10878bf4a73fd2b1dfd14b9462b26788c806ae" + integrity sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ== + dependencies: + "@types/json-schema" "^7.0.9" + ajv "^8.9.0" + ajv-formats "^2.1.1" + ajv-keywords "^5.1.0" + +serialize-javascript@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2" + integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g== + dependencies: + randombytes "^2.1.0" + +set-function-length@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" + integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== + dependencies: + kind-of "^6.0.2" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +source-map-support@~0.5.20: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0, source-map@~0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +string_decoder@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +supports-color@^8.0.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.2.tgz#ab4984340d30cb9989a490032f086dbb8b56d872" + integrity sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg== + +terser-webpack-plugin@^5.3.11: + version "5.3.14" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz#9031d48e57ab27567f02ace85c7d690db66c3e06" + integrity sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw== + dependencies: + "@jridgewell/trace-mapping" "^0.3.25" + jest-worker "^27.4.5" + schema-utils "^4.3.0" + serialize-javascript "^6.0.2" + terser "^5.31.1" + +terser@^5.10.0, terser@^5.31.1: + version "5.43.1" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.43.1.tgz#88387f4f9794ff1a29e7ad61fb2932e25b4fdb6d" + integrity sha512-+6erLbBm0+LROX2sPXlUYx/ux5PyE9K/a92Wrt6oA+WDAoFTdpHE5tCYCI5PNzq2y8df4rA+QgHLJuR4jNymsg== + dependencies: + "@jridgewell/source-map" "^0.3.3" + acorn "^8.14.0" + commander "^2.20.0" + source-map-support "~0.5.20" + +tiny-inflate@^1.0.0, tiny-inflate@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tiny-inflate/-/tiny-inflate-1.0.3.tgz#122715494913a1805166aaf7c93467933eea26c4" + integrity sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw== + +transform-loader@^0.2.4: + version "0.2.4" + resolved "https://registry.yarnpkg.com/transform-loader/-/transform-loader-0.2.4.tgz#e5c87877ba96d51d3f225368587b46e226d1cec9" + integrity sha512-zdeb90cBkXoAwGvMRMYqS8lNNdZ9dYnEKxtXCi0ZmQ8OL1XF1b4BvuqjcVcm8ZJRsXSQCrSnGgd5gfaKTlGpcw== + dependencies: + loader-utils "^1.0.2" + +tslib@^2.0.3, tslib@^2.8.0: + version "2.8.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== + +undici-types@~7.8.0: + version "7.8.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.8.0.tgz#de00b85b710c54122e44fbfd911f8d70174cd294" + integrity sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw== + +unicode-properties@^1.4.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/unicode-properties/-/unicode-properties-1.4.1.tgz#96a9cffb7e619a0dc7368c28da27e05fc8f9be5f" + integrity sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg== + dependencies: + base64-js "^1.3.0" + unicode-trie "^2.0.0" + +unicode-trie@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-trie/-/unicode-trie-2.0.0.tgz#8fd8845696e2e14a8b67d78fa9e0dd2cad62fec8" + integrity sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ== + dependencies: + pako "^0.2.5" + tiny-inflate "^1.0.0" + +update-browserslist-db@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz#348377dd245216f9e7060ff50b15a1b740b75420" + integrity sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw== + dependencies: + escalade "^3.2.0" + picocolors "^1.1.1" + +util@^0.12.5: + version "0.12.5" + resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" + integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== + dependencies: + inherits "^2.0.3" + is-arguments "^1.0.4" + is-generator-function "^1.0.7" + is-typed-array "^1.1.3" + which-typed-array "^1.1.2" + +utila@~0.4: + version "0.4.0" + resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" + integrity sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA== + +watchpack@^2.4.1: + version "2.4.4" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.4.tgz#473bda72f0850453da6425081ea46fc0d7602947" + integrity sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA== + dependencies: + glob-to-regexp "^0.4.1" + graceful-fs "^4.1.2" + +webpack-cli@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-5.1.4.tgz#c8e046ba7eaae4911d7e71e2b25b776fcc35759b" + integrity sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg== + dependencies: + "@discoveryjs/json-ext" "^0.5.0" + "@webpack-cli/configtest" "^2.1.1" + "@webpack-cli/info" "^2.0.2" + "@webpack-cli/serve" "^2.0.5" + colorette "^2.0.14" + commander "^10.0.1" + cross-spawn "^7.0.3" + envinfo "^7.7.3" + fastest-levenshtein "^1.0.12" + import-local "^3.0.2" + interpret "^3.1.1" + rechoir "^0.8.0" + webpack-merge "^5.7.3" + +webpack-merge@^5.7.3: + version "5.10.0" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.10.0.tgz#a3ad5d773241e9c682803abf628d4cd62b8a4177" + integrity sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA== + dependencies: + clone-deep "^4.0.1" + flat "^5.0.2" + wildcard "^2.0.0" + +webpack-sources@^3.2.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.3.3.tgz#d4bf7f9909675d7a070ff14d0ef2a4f3c982c723" + integrity sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg== + +webpack@^5.91.0: + version "5.99.9" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.99.9.tgz#d7de799ec17d0cce3c83b70744b4aedb537d8247" + integrity sha512-brOPwM3JnmOa+7kd3NsmOUOwbDAj8FT9xDsG3IW0MgbN9yZV7Oi/s/+MNQ/EcSMqw7qfoRyXPoeEWT8zLVdVGg== + dependencies: + "@types/eslint-scope" "^3.7.7" + "@types/estree" "^1.0.6" + "@types/json-schema" "^7.0.15" + "@webassemblyjs/ast" "^1.14.1" + "@webassemblyjs/wasm-edit" "^1.14.1" + "@webassemblyjs/wasm-parser" "^1.14.1" + acorn "^8.14.0" + browserslist "^4.24.0" + chrome-trace-event "^1.0.2" + enhanced-resolve "^5.17.1" + es-module-lexer "^1.2.1" + eslint-scope "5.1.1" + events "^3.2.0" + glob-to-regexp "^0.4.1" + graceful-fs "^4.2.11" + json-parse-even-better-errors "^2.3.1" + loader-runner "^4.2.0" + mime-types "^2.1.27" + neo-async "^2.6.2" + schema-utils "^4.3.2" + tapable "^2.1.1" + terser-webpack-plugin "^5.3.11" + watchpack "^2.4.1" + webpack-sources "^3.2.3" + +which-typed-array@^1.1.16, which-typed-array@^1.1.2: + version "1.1.19" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.19.tgz#df03842e870b6b88e117524a4b364b6fc689f956" + integrity sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.8" + call-bound "^1.0.4" + for-each "^0.3.5" + get-proto "^1.0.1" + gopd "^1.2.0" + has-tostringtag "^1.0.2" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +wildcard@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67" + integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ== diff --git a/package.json b/package.json index ee75c975..135c4bfc 100644 --- a/package.json +++ b/package.json @@ -23,12 +23,7 @@ }, "bugs": "https://github.com/foliojs/pdfkit/issues", "devDependencies": { - "@babel/core": "^7.26.0", - "@babel/plugin-external-helpers": "^7.25.9", - "@babel/preset-env": "^7.26.0", "@eslint/js": "^9.17.0", - "@rollup/plugin-babel": "^6.0.4", - "babel-jest": "^29.7.0", "blob-stream": "^0.1.3", "brace": "^0.11.1", "brfs": "~2.0.2", @@ -44,8 +39,9 @@ "pdfjs-dist": "^2.14.305", "prettier": "3.4.2", "pug": "^3.0.3", - "rollup": "^2.79.2", - "rollup-plugin-copy": "^3.5.0", + "vite": "^6.3.5", + "vite-plugin-node-polyfills": "^0.23.0", + "vite-plugin-static-copy": "^3.0.2", "vitest": "^3.2.4" }, "dependencies": { @@ -53,14 +49,16 @@ "fontkit": "^2.0.4", "jpeg-exif": "^1.1.4", "linebreak": "^1.1.0", - "@cto.af/linebreak": "^3.0.0", + "@cto.af/linebreak": "^3.0.1", "png-js": "^1.0.0" }, "scripts": { "prepublishOnly": "npm run build", - "build": "rollup -c && npm run build-standalone", - "build-standalone": "browserify --standalone PDFDocument --ignore crypto js/pdfkit.js > js/pdfkit.standalone.js", - "browserify-example": "browserify examples/browserify/browser.js > examples/browserify/bundle.js", + "build": "npm run build-base && npm run build-virtual-fs && npm run build-standalone", + "build-base": "vite build", + "build-virtual-fs": "vite build --config vite.virtual-fs.config.js", + "build-standalone": "vite build --config vite.standalone.config.js", + "browserify-example": "browserify examples/browserify/browser.js -t brfs > examples/browserify/bundle.js", "pdf-guide": "node docs/generate.js", "website": "node docs/generate_website.js", "publish-website": "node docs/publish_website.js", @@ -73,10 +71,17 @@ }, "main": "js/pdfkit.js", "module": "js/pdfkit.es.js", - "browserify": { - "transform": [ - "brfs" - ] + "unpkg": "js/pdfkit.standalone.js", + "exports": { + ".": { + "require": "./js/pdfkit.js", + "import": "./js/pdfkit.es.js" + }, + "./virtual-fs": { + "require": "./js/virtual-fs.js", + "import": "./js/virtual-fs.es.js" + }, + "./data/*": "./js/data/*" }, "engines": { "node": ">=20" diff --git a/rollup.config.js b/rollup.config.js deleted file mode 100644 index e2bceb0b..00000000 --- a/rollup.config.js +++ /dev/null @@ -1,118 +0,0 @@ -import pkg from './package.json'; -import { babel } from '@rollup/plugin-babel'; -import copy from 'rollup-plugin-copy'; - -const external = [ - 'stream', - 'fs', - 'zlib', - 'fontkit', - 'events', - 'linebreak', - '@cto.af/linebreak', - 'png-js', - 'crypto-js', - 'saslprep', - 'jpeg-exif' -]; - -const supportedBrowsers = [ - 'Firefox 102', // ESR from 2022 - 'iOS 14', // from 2020 - 'Safari 14' // from 2020 -]; - -export default [ - // CommonJS build for Node - { - input: 'lib/document.js', - external, - output: { - name: 'pdfkit', - file: pkg.main, - format: 'cjs', - sourcemap: true, - interop: false - }, - plugins: [ - babel({ - babelHelpers: 'bundled', - babelrc: false, - presets: [ - [ - '@babel/preset-env', - { - modules: false, - targets: { - node: '20' - } - } - ] - ], - comments: false - }), - copy({ - targets: [ - { src: ['lib/font/data/*.afm', 'lib/mixins/data/*.icc'], dest: 'js/data' }, - ] - }) - ] - }, - // ES for green browsers - { - input: 'lib/document.js', - external, - output: { - name: 'pdfkit.es', - file: pkg.module, - format: 'es', - sourcemap: true - }, - plugins: [ - babel({ - babelHelpers: 'bundled', - babelrc: false, - presets: [ - [ - '@babel/preset-env', - { - modules: false, - targets: { - browsers: supportedBrowsers - } - } - ] - ], - comments: false - }) - ] - }, - { - input: 'lib/virtual-fs.js', - external, - output: { - name: 'virtual-fs', - file: 'js/virtual-fs.js', - format: 'cjs', - sourcemap: false - }, - plugins: [ - babel({ - babelHelpers: 'bundled', - babelrc: false, - presets: [ - [ - '@babel/preset-env', - { - loose: true, - modules: false, - targets: { - browsers: supportedBrowsers - } - } - ] - ] - }) - ] - } -]; diff --git a/tests/unit/layout.spec.js b/tests/unit/layout.spec.js new file mode 100644 index 00000000..b218e607 --- /dev/null +++ b/tests/unit/layout.spec.js @@ -0,0 +1,29 @@ +import PDFDocument from '../../lib/document'; +import LayoutEngine from '../../lib/text/layout'; +import { logData } from './helpers'; +import { test as baseTest } from 'vitest'; + +describe('LayoutEngine', () => { + const test = baseTest.extend({ + doc: ({}, use) => use(new PDFDocument({ size: 'A4', margin: 72 })), + layout: ({ doc }, use) => use(new LayoutEngine(doc)), + docData: async ({ doc }, use) => use(logData(doc)), + }); + + describe('boundsOfString', () => { + afterEach(({ doc }) => { + doc.end(); + }); + test.concurrent.for([ + ['', undefined, { x: 72, y: 72, width: 0, height: 0 }], + ['', {}, { x: 72, y: 72, width: 0, height: 0 }], + [ + 'Hello world!', + {}, + { x: 72, y: 72, width: 62.736000000000004, height: 11.100000000000001 }, + ], + ])(`'%s', %j -> %j`, ([text, options, expected], { layout, expect }) => { + expect(layout.boundsOfString(text, options)).toEqual(expected); + }); + }); +}); diff --git a/tests/visual/vector.spec.js b/tests/visual/vector.spec.js index 7a2f4082..6fcc4a92 100644 --- a/tests/visual/vector.spec.js +++ b/tests/visual/vector.spec.js @@ -1,5 +1,5 @@ import { runDocTest } from './helpers'; -var tiger = require('../../examples/tiger'); +import tiger from '../../examples/tiger'; describe('vector', function () { test('simple shapes', function () { diff --git a/vite.config.js b/vite.config.js new file mode 100644 index 00000000..bef30c3f --- /dev/null +++ b/vite.config.js @@ -0,0 +1,57 @@ +import { defineConfig } from 'vitest/config'; +import { viteStaticCopy } from 'vite-plugin-static-copy' + +export const node_modules = [ + 'stream', + 'zlib', + 'fs', + 'events', +]; + +export const external_packages = [ + 'fontkit', + 'linebreak', + 'png-js', + 'crypto-js', + 'jpeg-exif' +] +export const external = [ + ...node_modules, + ...external_packages, +]; + +export default defineConfig({ + test: { + globals: true, + setupFiles: './tests/unit/setupTests.js', + coverage: { + provider: 'istanbul' + }, + fileParallelism: true, + dir: 'tests' + }, + esbuild: { + keepNames: true, + }, + build: { + outDir: "js", + lib: { + entry: 'lib/document.js', + fileName: 'pdfkit', + }, + rollupOptions: { + external, + output: [ + {format: 'cjs', entryFileNames: 'pdfkit.js'}, + {format: 'es', entryFileNames: 'pdfkit.es.js'}, + ] + }, + }, + plugins: [ + viteStaticCopy({ + targets: [ + { src: ['lib/font/data/*.afm', 'lib/mixins/data/*.icc'], dest: 'data' } + ] + }) + ] +}); diff --git a/vite.standalone.config.js b/vite.standalone.config.js new file mode 100644 index 00000000..a73276c4 --- /dev/null +++ b/vite.standalone.config.js @@ -0,0 +1,48 @@ +import { defineConfig } from 'vite'; +import { nodePolyfills } from 'vite-plugin-node-polyfills'; +import { external_packages, node_modules } from './vite.config.js'; +import path from 'path'; +import fs from 'fs'; + +export default defineConfig({ + plugins: [ + nodePolyfills({ include: node_modules }), + { + name: 'inline', + async transform(code, filename) { + const dirname = path.dirname(filename); + return { + // Inline any file imports + code: code.replaceAll(/fs\.readFileSync\(__dirname \+ '(.+?)', '(.+?)'\);/g, (match, filename, encoding) => { + const source = fs.readFileSync(path.join(dirname, filename), encoding); + return `"${source.replaceAll('\n', '\\n')}";`; + }) + }; + } + } + ], + esbuild: { + keepNames: true, + }, + build: { + outDir: "js", + emptyOutDir: false, + chunkSizeWarningLimit: 3000, + rollupOptions: { + input: 'lib/document.js', + external: external_packages, + output: { + format: 'umd', + name: 'pdfkit', + entryFileNames: 'pdfkit.standalone.js', + globals: { + 'crypto-js': 'CryptoJS', + 'fontkit': 'fontkit', + 'linebreak': 'LineBreaker', + 'jpeg-exif': 'exif', + 'png-js': 'PNG' + } + } + } + } +}); diff --git a/vite.virtual-fs.config.js b/vite.virtual-fs.config.js new file mode 100644 index 00000000..1fd30702 --- /dev/null +++ b/vite.virtual-fs.config.js @@ -0,0 +1,21 @@ +import { defineConfig } from 'vite'; + +export default defineConfig({ + esbuild: { + keepNames: true, + }, + build: { + outDir: "js", + emptyOutDir: false, + lib: { + entry: 'lib/virtual-fs.js', + fileName: 'virtual-fs', + }, + rollupOptions: { + output: [ + {format: 'cjs', entryFileNames: 'virtual-fs.js'}, + {format: 'es', entryFileNames: 'virtual-fs.es.js'}, + ] + }, + }, +}); diff --git a/vitest.config.js b/vitest.config.js deleted file mode 100644 index 272d7575..00000000 --- a/vitest.config.js +++ /dev/null @@ -1,8 +0,0 @@ -import { defineConfig } from 'vitest/config'; - -export default defineConfig({ - test: { - globals: true, - setupFiles: './tests/unit/setupTests.js', - }, -}); diff --git a/yarn.lock b/yarn.lock index d3baea8e..5da973d2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,174 +2,6 @@ # yarn lockfile v1 -"@ampproject/remapping@^2.2.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" - integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== - dependencies: - "@jridgewell/gen-mapping" "^0.3.5" - "@jridgewell/trace-mapping" "^0.3.24" - -"@babel/code-frame@^7.26.2": - version "7.26.2" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85" - integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ== - dependencies: - "@babel/helper-validator-identifier" "^7.25.9" - js-tokens "^4.0.0" - picocolors "^1.0.0" - -"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.26.8": - version "7.26.8" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.26.8.tgz#821c1d35641c355284d4a870b8a4a7b0c141e367" - integrity sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ== - -"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.26.0": - version "7.26.10" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.26.10.tgz#5c876f83c8c4dcb233ee4b670c0606f2ac3000f9" - integrity sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ== - dependencies: - "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.26.2" - "@babel/generator" "^7.26.10" - "@babel/helper-compilation-targets" "^7.26.5" - "@babel/helper-module-transforms" "^7.26.0" - "@babel/helpers" "^7.26.10" - "@babel/parser" "^7.26.10" - "@babel/template" "^7.26.9" - "@babel/traverse" "^7.26.10" - "@babel/types" "^7.26.10" - convert-source-map "^2.0.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.3" - semver "^6.3.1" - -"@babel/generator@^7.26.10", "@babel/generator@^7.27.0": - version "7.27.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.27.0.tgz#764382b5392e5b9aff93cadb190d0745866cbc2c" - integrity sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw== - dependencies: - "@babel/parser" "^7.27.0" - "@babel/types" "^7.27.0" - "@jridgewell/gen-mapping" "^0.3.5" - "@jridgewell/trace-mapping" "^0.3.25" - jsesc "^3.0.2" - -"@babel/helper-annotate-as-pure@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz#d8eac4d2dc0d7b6e11fa6e535332e0d3184f06b4" - integrity sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g== - dependencies: - "@babel/types" "^7.25.9" - -"@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.25.9", "@babel/helper-compilation-targets@^7.26.5": - version "7.27.0" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.0.tgz#de0c753b1cd1d9ab55d473c5a5cf7170f0a81880" - integrity sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA== - dependencies: - "@babel/compat-data" "^7.26.8" - "@babel/helper-validator-option" "^7.25.9" - browserslist "^4.24.0" - lru-cache "^5.1.1" - semver "^6.3.1" - -"@babel/helper-create-class-features-plugin@^7.25.9": - version "7.27.0" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.0.tgz#518fad6a307c6a96f44af14912b2c20abe9bfc30" - integrity sha512-vSGCvMecvFCd/BdpGlhpXYNhhC4ccxyvQWpbGL4CWbvfEoLFWUZuSuf7s9Aw70flgQF+6vptvgK2IfOnKlRmBg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.25.9" - "@babel/helper-member-expression-to-functions" "^7.25.9" - "@babel/helper-optimise-call-expression" "^7.25.9" - "@babel/helper-replace-supers" "^7.26.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" - "@babel/traverse" "^7.27.0" - semver "^6.3.1" - -"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.25.9": - version "7.27.0" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.27.0.tgz#0e41f7d38c2ebe06ebd9cf0e02fb26019c77cd95" - integrity sha512-fO8l08T76v48BhpNRW/nQ0MxfnSdoSKUJBMjubOAYffsVuGG5qOfMq7N6Es7UJvi7Y8goXXo07EfcHZXDPuELQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.25.9" - regexpu-core "^6.2.0" - semver "^6.3.1" - -"@babel/helper-define-polyfill-provider@^0.6.3", "@babel/helper-define-polyfill-provider@^0.6.4": - version "0.6.4" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.4.tgz#15e8746368bfa671785f5926ff74b3064c291fab" - integrity sha512-jljfR1rGnXXNWnmQg2K3+bvhkxB51Rl32QRaOTuwwjviGrHzIbSc8+x9CpraDtbT7mfyjXObULP4w/adunNwAw== - dependencies: - "@babel/helper-compilation-targets" "^7.22.6" - "@babel/helper-plugin-utils" "^7.22.5" - debug "^4.1.1" - lodash.debounce "^4.0.8" - resolve "^1.14.2" - -"@babel/helper-member-expression-to-functions@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz#9dfffe46f727005a5ea29051ac835fb735e4c1a3" - integrity sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ== - dependencies: - "@babel/traverse" "^7.25.9" - "@babel/types" "^7.25.9" - -"@babel/helper-module-imports@^7.18.6", "@babel/helper-module-imports@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz#e7f8d20602ebdbf9ebbea0a0751fb0f2a4141715" - integrity sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw== - dependencies: - "@babel/traverse" "^7.25.9" - "@babel/types" "^7.25.9" - -"@babel/helper-module-transforms@^7.25.9", "@babel/helper-module-transforms@^7.26.0": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz#8ce54ec9d592695e58d84cd884b7b5c6a2fdeeae" - integrity sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw== - dependencies: - "@babel/helper-module-imports" "^7.25.9" - "@babel/helper-validator-identifier" "^7.25.9" - "@babel/traverse" "^7.25.9" - -"@babel/helper-optimise-call-expression@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz#3324ae50bae7e2ab3c33f60c9a877b6a0146b54e" - integrity sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ== - dependencies: - "@babel/types" "^7.25.9" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.25.9", "@babel/helper-plugin-utils@^7.26.5", "@babel/helper-plugin-utils@^7.8.0": - version "7.26.5" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz#18580d00c9934117ad719392c4f6585c9333cc35" - integrity sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg== - -"@babel/helper-remap-async-to-generator@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz#e53956ab3d5b9fb88be04b3e2f31b523afd34b92" - integrity sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.25.9" - "@babel/helper-wrap-function" "^7.25.9" - "@babel/traverse" "^7.25.9" - -"@babel/helper-replace-supers@^7.25.9", "@babel/helper-replace-supers@^7.26.5": - version "7.26.5" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.26.5.tgz#6cb04e82ae291dae8e72335dfe438b0725f14c8d" - integrity sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg== - dependencies: - "@babel/helper-member-expression-to-functions" "^7.25.9" - "@babel/helper-optimise-call-expression" "^7.25.9" - "@babel/traverse" "^7.26.5" - -"@babel/helper-skip-transparent-expression-wrappers@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz#0b2e1b62d560d6b1954893fd2b705dc17c91f0c9" - integrity sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA== - dependencies: - "@babel/traverse" "^7.25.9" - "@babel/types" "^7.25.9" - "@babel/helper-string-parser@^7.25.9": version "7.25.9" resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz#1aabb72ee72ed35789b4bbcad3ca2862ce614e8c" @@ -180,707 +12,14 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7" integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ== -"@babel/helper-validator-option@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz#86e45bd8a49ab7e03f276577f96179653d41da72" - integrity sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw== - -"@babel/helper-wrap-function@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz#d99dfd595312e6c894bd7d237470025c85eea9d0" - integrity sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g== - dependencies: - "@babel/template" "^7.25.9" - "@babel/traverse" "^7.25.9" - "@babel/types" "^7.25.9" - -"@babel/helpers@^7.26.10": - version "7.27.0" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.27.0.tgz#53d156098defa8243eab0f32fa17589075a1b808" - integrity sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg== - dependencies: - "@babel/template" "^7.27.0" - "@babel/types" "^7.27.0" - -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.26.10", "@babel/parser@^7.27.0", "@babel/parser@^7.6.0", "@babel/parser@^7.9.6": +"@babel/parser@^7.6.0", "@babel/parser@^7.9.6": version "7.27.0" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.27.0.tgz#3d7d6ee268e41d2600091cbd4e145ffee85a44ec" integrity sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg== dependencies: "@babel/types" "^7.27.0" -"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz#cc2e53ebf0a0340777fff5ed521943e253b4d8fe" - integrity sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/traverse" "^7.25.9" - -"@babel/plugin-bugfix-safari-class-field-initializer-scope@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz#af9e4fb63ccb8abcb92375b2fcfe36b60c774d30" - integrity sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.9.tgz#e8dc26fcd616e6c5bf2bd0d5a2c151d4f92a9137" - integrity sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz#807a667f9158acac6f6164b4beb85ad9ebc9e1d1" - integrity sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" - "@babel/plugin-transform-optional-chaining" "^7.25.9" - -"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz#de7093f1e7deaf68eadd7cc6b07f2ab82543269e" - integrity sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/traverse" "^7.25.9" - -"@babel/plugin-external-helpers@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-external-helpers/-/plugin-external-helpers-7.25.9.tgz#60c43843746fe3bccd7cb52d07c0b8699c21e6d4" - integrity sha512-Ro9pBweUvdxKyKKmWsqYaloZrxc2V+bseyPI7mV5DqBNvyNeGFFX+rPqicuEyOssiFYfoGyMjOF8n3ZAGBOPtg== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": - version "7.21.0-placeholder-for-preset-env.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703" - integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== - -"@babel/plugin-syntax-async-generators@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" - integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-bigint@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" - integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-class-properties@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" - integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-syntax-class-static-block@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" - integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-import-assertions@^7.26.0": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz#620412405058efa56e4a564903b79355020f445f" - integrity sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-syntax-import-attributes@^7.24.7", "@babel/plugin-syntax-import-attributes@^7.26.0": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz#3b1412847699eea739b4f2602c74ce36f6b0b0f7" - integrity sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-syntax-import-meta@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" - integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-json-strings@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" - integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" - integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" - integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-numeric-separator@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" - integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-object-rest-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" - integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-catch-binding@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" - integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-chaining@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" - integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-private-property-in-object@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" - integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-top-level-await@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" - integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-unicode-sets-regex@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357" - integrity sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-transform-arrow-functions@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz#7821d4410bee5daaadbb4cdd9a6649704e176845" - integrity sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-async-generator-functions@^7.26.8": - version "7.26.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.26.8.tgz#5e3991135e3b9c6eaaf5eff56d1ae5a11df45ff8" - integrity sha512-He9Ej2X7tNf2zdKMAGOsmg2MrFc+hfoAhd3po4cWfo/NWjzEAKa0oQruj1ROVUdl0e6fb6/kE/G3SSxE0lRJOg== - dependencies: - "@babel/helper-plugin-utils" "^7.26.5" - "@babel/helper-remap-async-to-generator" "^7.25.9" - "@babel/traverse" "^7.26.8" - -"@babel/plugin-transform-async-to-generator@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz#c80008dacae51482793e5a9c08b39a5be7e12d71" - integrity sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ== - dependencies: - "@babel/helper-module-imports" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/helper-remap-async-to-generator" "^7.25.9" - -"@babel/plugin-transform-block-scoped-functions@^7.26.5": - version "7.26.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.26.5.tgz#3dc4405d31ad1cbe45293aa57205a6e3b009d53e" - integrity sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ== - dependencies: - "@babel/helper-plugin-utils" "^7.26.5" - -"@babel/plugin-transform-block-scoping@^7.25.9": - version "7.27.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.27.0.tgz#acc2c0d98a7439bbde4244588ddbd4904701d47f" - integrity sha512-u1jGphZ8uDI2Pj/HJj6YQ6XQLZCNjOlprjxB5SVz6rq2T6SwAR+CdrWK0CP7F+9rDVMXdB0+r6Am5G5aobOjAQ== - dependencies: - "@babel/helper-plugin-utils" "^7.26.5" - -"@babel/plugin-transform-class-properties@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz#a8ce84fedb9ad512549984101fa84080a9f5f51f" - integrity sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-class-static-block@^7.26.0": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz#6c8da219f4eb15cae9834ec4348ff8e9e09664a0" - integrity sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-classes@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz#7152457f7880b593a63ade8a861e6e26a4469f52" - integrity sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.25.9" - "@babel/helper-compilation-targets" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/helper-replace-supers" "^7.25.9" - "@babel/traverse" "^7.25.9" - globals "^11.1.0" - -"@babel/plugin-transform-computed-properties@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz#db36492c78460e534b8852b1d5befe3c923ef10b" - integrity sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/template" "^7.25.9" - -"@babel/plugin-transform-destructuring@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz#966ea2595c498224340883602d3cfd7a0c79cea1" - integrity sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-dotall-regex@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz#bad7945dd07734ca52fe3ad4e872b40ed09bb09a" - integrity sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-duplicate-keys@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz#8850ddf57dce2aebb4394bb434a7598031059e6d" - integrity sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-duplicate-named-capturing-groups-regex@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz#6f7259b4de127721a08f1e5165b852fcaa696d31" - integrity sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-dynamic-import@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz#23e917de63ed23c6600c5dd06d94669dce79f7b8" - integrity sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-exponentiation-operator@^7.26.3": - version "7.26.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.26.3.tgz#e29f01b6de302c7c2c794277a48f04a9ca7f03bc" - integrity sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-export-namespace-from@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz#90745fe55053394f554e40584cda81f2c8a402a2" - integrity sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-for-of@^7.26.9": - version "7.26.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.26.9.tgz#27231f79d5170ef33b5111f07fe5cafeb2c96a56" - integrity sha512-Hry8AusVm8LW5BVFgiyUReuoGzPUpdHQQqJY5bZnbbf+ngOHWuCuYFKw/BqaaWlvEUrF91HMhDtEaI1hZzNbLg== - dependencies: - "@babel/helper-plugin-utils" "^7.26.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" - -"@babel/plugin-transform-function-name@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz#939d956e68a606661005bfd550c4fc2ef95f7b97" - integrity sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA== - dependencies: - "@babel/helper-compilation-targets" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/traverse" "^7.25.9" - -"@babel/plugin-transform-json-strings@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz#c86db407cb827cded902a90c707d2781aaa89660" - integrity sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-literals@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz#1a1c6b4d4aa59bc4cad5b6b3a223a0abd685c9de" - integrity sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-logical-assignment-operators@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz#b19441a8c39a2fda0902900b306ea05ae1055db7" - integrity sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-member-expression-literals@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz#63dff19763ea64a31f5e6c20957e6a25e41ed5de" - integrity sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-modules-amd@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz#49ba478f2295101544abd794486cd3088dddb6c5" - integrity sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw== - dependencies: - "@babel/helper-module-transforms" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-modules-commonjs@^7.26.3": - version "7.26.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz#8f011d44b20d02c3de44d8850d971d8497f981fb" - integrity sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ== - dependencies: - "@babel/helper-module-transforms" "^7.26.0" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-modules-systemjs@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz#8bd1b43836269e3d33307151a114bcf3ba6793f8" - integrity sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA== - dependencies: - "@babel/helper-module-transforms" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/helper-validator-identifier" "^7.25.9" - "@babel/traverse" "^7.25.9" - -"@babel/plugin-transform-modules-umd@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz#6710079cdd7c694db36529a1e8411e49fcbf14c9" - integrity sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw== - dependencies: - "@babel/helper-module-transforms" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-named-capturing-groups-regex@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz#454990ae6cc22fd2a0fa60b3a2c6f63a38064e6a" - integrity sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-new-target@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz#42e61711294b105c248336dcb04b77054ea8becd" - integrity sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-nullish-coalescing-operator@^7.26.6": - version "7.26.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.26.6.tgz#fbf6b3c92cb509e7b319ee46e3da89c5bedd31fe" - integrity sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw== - dependencies: - "@babel/helper-plugin-utils" "^7.26.5" - -"@babel/plugin-transform-numeric-separator@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz#bfed75866261a8b643468b0ccfd275f2033214a1" - integrity sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-object-rest-spread@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz#0203725025074164808bcf1a2cfa90c652c99f18" - integrity sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg== - dependencies: - "@babel/helper-compilation-targets" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/plugin-transform-parameters" "^7.25.9" - -"@babel/plugin-transform-object-super@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz#385d5de135162933beb4a3d227a2b7e52bb4cf03" - integrity sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/helper-replace-supers" "^7.25.9" - -"@babel/plugin-transform-optional-catch-binding@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz#10e70d96d52bb1f10c5caaac59ac545ea2ba7ff3" - integrity sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-optional-chaining@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz#e142eb899d26ef715435f201ab6e139541eee7dd" - integrity sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" - -"@babel/plugin-transform-parameters@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz#b856842205b3e77e18b7a7a1b94958069c7ba257" - integrity sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-private-methods@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz#847f4139263577526455d7d3223cd8bda51e3b57" - integrity sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-private-property-in-object@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz#9c8b73e64e6cc3cbb2743633885a7dd2c385fe33" - integrity sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.25.9" - "@babel/helper-create-class-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-property-literals@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz#d72d588bd88b0dec8b62e36f6fda91cedfe28e3f" - integrity sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-regenerator@^7.25.9": - version "7.27.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.27.0.tgz#822feebef43d6a59a81f696b2512df5b1682db31" - integrity sha512-LX/vCajUJQDqE7Aum/ELUMZAY19+cDpghxrnyt5I1tV6X5PyC86AOoWXWFYFeIvauyeSA6/ktn4tQVn/3ZifsA== - dependencies: - "@babel/helper-plugin-utils" "^7.26.5" - regenerator-transform "^0.15.2" - -"@babel/plugin-transform-regexp-modifiers@^7.26.0": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz#2f5837a5b5cd3842a919d8147e9903cc7455b850" - integrity sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-reserved-words@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz#0398aed2f1f10ba3f78a93db219b27ef417fb9ce" - integrity sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-shorthand-properties@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz#bb785e6091f99f826a95f9894fc16fde61c163f2" - integrity sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-spread@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz#24a35153931b4ba3d13cec4a7748c21ab5514ef9" - integrity sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" - -"@babel/plugin-transform-sticky-regex@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz#c7f02b944e986a417817b20ba2c504dfc1453d32" - integrity sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-template-literals@^7.26.8": - version "7.26.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.26.8.tgz#966b15d153a991172a540a69ad5e1845ced990b5" - integrity sha512-OmGDL5/J0CJPJZTHZbi2XpO0tyT2Ia7fzpW5GURwdtp2X3fMmN8au/ej6peC/T33/+CRiIpA8Krse8hFGVmT5Q== - dependencies: - "@babel/helper-plugin-utils" "^7.26.5" - -"@babel/plugin-transform-typeof-symbol@^7.26.7": - version "7.27.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.0.tgz#044a0890f3ca694207c7826d0c7a65e5ac008aae" - integrity sha512-+LLkxA9rKJpNoGsbLnAgOCdESl73vwYn+V6b+5wHbrE7OGKVDPHIQvbFSzqE6rwqaCw2RE+zdJrlLkcf8YOA0w== - dependencies: - "@babel/helper-plugin-utils" "^7.26.5" - -"@babel/plugin-transform-unicode-escapes@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz#a75ef3947ce15363fccaa38e2dd9bc70b2788b82" - integrity sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-unicode-property-regex@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz#a901e96f2c1d071b0d1bb5dc0d3c880ce8f53dd3" - integrity sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-unicode-regex@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz#5eae747fe39eacf13a8bd006a4fb0b5d1fa5e9b1" - integrity sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-unicode-sets-regex@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz#65114c17b4ffc20fa5b163c63c70c0d25621fabe" - integrity sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/preset-env@^7.26.0": - version "7.26.9" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.26.9.tgz#2ec64e903d0efe743699f77a10bdf7955c2123c3" - integrity sha512-vX3qPGE8sEKEAZCWk05k3cpTAE3/nOYca++JA+Rd0z2NCNzabmYvEiSShKzm10zdquOIAVXsy2Ei/DTW34KlKQ== - dependencies: - "@babel/compat-data" "^7.26.8" - "@babel/helper-compilation-targets" "^7.26.5" - "@babel/helper-plugin-utils" "^7.26.5" - "@babel/helper-validator-option" "^7.25.9" - "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.25.9" - "@babel/plugin-bugfix-safari-class-field-initializer-scope" "^7.25.9" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.25.9" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.25.9" - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.25.9" - "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" - "@babel/plugin-syntax-import-assertions" "^7.26.0" - "@babel/plugin-syntax-import-attributes" "^7.26.0" - "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" - "@babel/plugin-transform-arrow-functions" "^7.25.9" - "@babel/plugin-transform-async-generator-functions" "^7.26.8" - "@babel/plugin-transform-async-to-generator" "^7.25.9" - "@babel/plugin-transform-block-scoped-functions" "^7.26.5" - "@babel/plugin-transform-block-scoping" "^7.25.9" - "@babel/plugin-transform-class-properties" "^7.25.9" - "@babel/plugin-transform-class-static-block" "^7.26.0" - "@babel/plugin-transform-classes" "^7.25.9" - "@babel/plugin-transform-computed-properties" "^7.25.9" - "@babel/plugin-transform-destructuring" "^7.25.9" - "@babel/plugin-transform-dotall-regex" "^7.25.9" - "@babel/plugin-transform-duplicate-keys" "^7.25.9" - "@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^7.25.9" - "@babel/plugin-transform-dynamic-import" "^7.25.9" - "@babel/plugin-transform-exponentiation-operator" "^7.26.3" - "@babel/plugin-transform-export-namespace-from" "^7.25.9" - "@babel/plugin-transform-for-of" "^7.26.9" - "@babel/plugin-transform-function-name" "^7.25.9" - "@babel/plugin-transform-json-strings" "^7.25.9" - "@babel/plugin-transform-literals" "^7.25.9" - "@babel/plugin-transform-logical-assignment-operators" "^7.25.9" - "@babel/plugin-transform-member-expression-literals" "^7.25.9" - "@babel/plugin-transform-modules-amd" "^7.25.9" - "@babel/plugin-transform-modules-commonjs" "^7.26.3" - "@babel/plugin-transform-modules-systemjs" "^7.25.9" - "@babel/plugin-transform-modules-umd" "^7.25.9" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.25.9" - "@babel/plugin-transform-new-target" "^7.25.9" - "@babel/plugin-transform-nullish-coalescing-operator" "^7.26.6" - "@babel/plugin-transform-numeric-separator" "^7.25.9" - "@babel/plugin-transform-object-rest-spread" "^7.25.9" - "@babel/plugin-transform-object-super" "^7.25.9" - "@babel/plugin-transform-optional-catch-binding" "^7.25.9" - "@babel/plugin-transform-optional-chaining" "^7.25.9" - "@babel/plugin-transform-parameters" "^7.25.9" - "@babel/plugin-transform-private-methods" "^7.25.9" - "@babel/plugin-transform-private-property-in-object" "^7.25.9" - "@babel/plugin-transform-property-literals" "^7.25.9" - "@babel/plugin-transform-regenerator" "^7.25.9" - "@babel/plugin-transform-regexp-modifiers" "^7.26.0" - "@babel/plugin-transform-reserved-words" "^7.25.9" - "@babel/plugin-transform-shorthand-properties" "^7.25.9" - "@babel/plugin-transform-spread" "^7.25.9" - "@babel/plugin-transform-sticky-regex" "^7.25.9" - "@babel/plugin-transform-template-literals" "^7.26.8" - "@babel/plugin-transform-typeof-symbol" "^7.26.7" - "@babel/plugin-transform-unicode-escapes" "^7.25.9" - "@babel/plugin-transform-unicode-property-regex" "^7.25.9" - "@babel/plugin-transform-unicode-regex" "^7.25.9" - "@babel/plugin-transform-unicode-sets-regex" "^7.25.9" - "@babel/preset-modules" "0.1.6-no-external-plugins" - babel-plugin-polyfill-corejs2 "^0.4.10" - babel-plugin-polyfill-corejs3 "^0.11.0" - babel-plugin-polyfill-regenerator "^0.6.1" - core-js-compat "^3.40.0" - semver "^6.3.1" - -"@babel/preset-modules@0.1.6-no-external-plugins": - version "0.1.6-no-external-plugins" - resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz#ccb88a2c49c817236861fee7826080573b8a923a" - integrity sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/types" "^7.4.4" - esutils "^2.0.2" - -"@babel/runtime@^7.8.4": - version "7.27.0" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.27.0.tgz#fbee7cf97c709518ecc1f590984481d5460d4762" - integrity sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw== - dependencies: - regenerator-runtime "^0.14.0" - -"@babel/template@^7.25.9", "@babel/template@^7.26.9", "@babel/template@^7.27.0", "@babel/template@^7.3.3": - version "7.27.0" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.27.0.tgz#b253e5406cc1df1c57dcd18f11760c2dbf40c0b4" - integrity sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA== - dependencies: - "@babel/code-frame" "^7.26.2" - "@babel/parser" "^7.27.0" - "@babel/types" "^7.27.0" - -"@babel/traverse@^7.25.9", "@babel/traverse@^7.26.10", "@babel/traverse@^7.26.5", "@babel/traverse@^7.26.8", "@babel/traverse@^7.27.0": - version "7.27.0" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.27.0.tgz#11d7e644779e166c0442f9a07274d02cd91d4a70" - integrity sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA== - dependencies: - "@babel/code-frame" "^7.26.2" - "@babel/generator" "^7.27.0" - "@babel/parser" "^7.27.0" - "@babel/template" "^7.27.0" - "@babel/types" "^7.27.0" - debug "^4.3.1" - globals "^11.1.0" - -"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.25.9", "@babel/types@^7.26.10", "@babel/types@^7.27.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.6.1", "@babel/types@^7.9.6": +"@babel/types@^7.27.0", "@babel/types@^7.6.1", "@babel/types@^7.9.6": version "7.27.0" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.27.0.tgz#ef9acb6b06c3173f6632d993ecb6d4ae470b4559" integrity sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg== @@ -888,17 +27,17 @@ "@babel/helper-string-parser" "^7.25.9" "@babel/helper-validator-identifier" "^7.25.9" -"@cto.af/linebreak@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@cto.af/linebreak/-/linebreak-3.0.0.tgz#d0938d577b2f9bf1ba51b5d8202f7d11786acc5b" - integrity sha512-JrTYCIA8bQjvpOT5WfQqCjISrbmf9K25d2jaT7En0+8/b2EQMtcxBz63DqNjIzjDfqYBRA/QzKa2t9gTgr723g== +"@cto.af/linebreak@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@cto.af/linebreak/-/linebreak-3.0.1.tgz#0aaabacf8d3127f7899d7e21c1e86be0b52ed471" + integrity sha512-evmzZDZpv29UUGCzXOaLQ50C0fu7Kqa2Bv9hC9eMC+qhnGXtF7S0syd7DPPHj8E38EFGDC1iOgJa9NlaXg/nxQ== dependencies: - "@cto.af/unicode-trie-runtime" "3.2.3" + "@cto.af/unicode-trie-runtime" "3.2.5" -"@cto.af/unicode-trie-runtime@3.2.3": - version "3.2.3" - resolved "https://registry.yarnpkg.com/@cto.af/unicode-trie-runtime/-/unicode-trie-runtime-3.2.3.tgz#5207c1b0cf62a623f8e31624ca15c9365ae1a884" - integrity sha512-lP8tpf6C4UYqyT2h3IOjzgueixbQlxTZOSnpEswIrY9I79hqt1F4xK9q0MDM2e+mck13xOGlDLig9gcxLzhfzQ== +"@cto.af/unicode-trie-runtime@3.2.5": + version "3.2.5" + resolved "https://registry.yarnpkg.com/@cto.af/unicode-trie-runtime/-/unicode-trie-runtime-3.2.5.tgz#cb1449063421cc25683d79c6b8e03ab5f584cf5e" + integrity sha512-JuNdknVDfAL+axsopNct/XIVEEEqoaTqRBM6FhQGJdSY7nseYfTmIoAyxJ5Py+TJHwCcOaZ0EBuZhoOiYkJTZw== dependencies: fflate "^0.8.2" @@ -1128,22 +267,6 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.4.2.tgz#1860473de7dfa1546767448f333db80cb0ff2161" integrity sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ== -"@istanbuljs/load-nyc-config@^1.0.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" - integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== - dependencies: - camelcase "^5.3.1" - find-up "^4.1.0" - get-package-type "^0.1.0" - js-yaml "^3.13.1" - resolve-from "^5.0.0" - -"@istanbuljs/schema@^0.1.2": - version "0.1.3" - resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" - integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== - "@jest/diff-sequences@30.0.1": version "30.0.1" resolved "https://registry.yarnpkg.com/@jest/diff-sequences/-/diff-sequences-30.0.1.tgz#0ededeae4d071f5c8ffe3678d15f3a1be09156be" @@ -1154,85 +277,18 @@ resolved "https://registry.yarnpkg.com/@jest/get-type/-/get-type-30.0.1.tgz#0d32f1bbfba511948ad247ab01b9007724fc9f52" integrity sha512-AyYdemXCptSRFirI5EPazNxyPwAL0jXt3zceFjaj8NFiKP9pOi0bfXonf6qkf82z2t3QWPeLCWWw4stPBzctLw== -"@jest/schemas@30.0.1": - version "30.0.1" - resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-30.0.1.tgz#27c00d707d480ece0c19126af97081a1af3bc46e" - integrity sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w== - dependencies: - "@sinclair/typebox" "^0.34.0" - -"@jest/schemas@^29.6.3": - version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" - integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== - dependencies: - "@sinclair/typebox" "^0.27.8" - -"@jest/transform@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.7.0.tgz#df2dd9c346c7d7768b8a06639994640c642e284c" - integrity sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw== - dependencies: - "@babel/core" "^7.11.6" - "@jest/types" "^29.6.3" - "@jridgewell/trace-mapping" "^0.3.18" - babel-plugin-istanbul "^6.1.1" - chalk "^4.0.0" - convert-source-map "^2.0.0" - fast-json-stable-stringify "^2.1.0" - graceful-fs "^4.2.9" - jest-haste-map "^29.7.0" - jest-regex-util "^29.6.3" - jest-util "^29.7.0" - micromatch "^4.0.4" - pirates "^4.0.4" - slash "^3.0.0" - write-file-atomic "^4.0.2" - -"@jest/types@^29.6.3": - version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59" - integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== - dependencies: - "@jest/schemas" "^29.6.3" - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" - "@types/node" "*" - "@types/yargs" "^17.0.8" - chalk "^4.0.0" - -"@jridgewell/gen-mapping@^0.3.5": - version "0.3.8" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz#4f0e06362e01362f823d348f1872b08f666d8142" - integrity sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA== - dependencies: - "@jridgewell/set-array" "^1.2.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.24" - -"@jridgewell/resolve-uri@^3.1.0": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" - integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== - -"@jridgewell/set-array@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" - integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== +"@jest/schemas@30.0.1": + version "30.0.1" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-30.0.1.tgz#27c00d707d480ece0c19126af97081a1af3bc46e" + integrity sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w== + dependencies: + "@sinclair/typebox" "^0.34.0" -"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.5.0": +"@jridgewell/sourcemap-codec@^1.5.0": version "1.5.0" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== -"@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": - version "0.3.25" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" - integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== - dependencies: - "@jridgewell/resolve-uri" "^3.1.0" - "@jridgewell/sourcemap-codec" "^1.4.14" - "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" @@ -1254,13 +310,14 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@rollup/plugin-babel@^6.0.4": - version "6.0.4" - resolved "https://registry.yarnpkg.com/@rollup/plugin-babel/-/plugin-babel-6.0.4.tgz#bd698e351fa9aa9619fcae780aea2a603d98e4c4" - integrity sha512-YF7Y52kFdFT/xVSuVdjkV5ZdX/3YtmX0QulG+x0taQOtJdHYzVU61aSSkAgVJ7NOv6qPkIYiJSgSWWN/DM5sGw== +"@rollup/plugin-inject@^5.0.5": + version "5.0.5" + resolved "https://registry.yarnpkg.com/@rollup/plugin-inject/-/plugin-inject-5.0.5.tgz#616f3a73fe075765f91c5bec90176608bed277a3" + integrity sha512-2+DEJbNBoPROPkgTDNe8/1YXWcqxbN5DTjASVIOx8HS+pITXushyNiBV56RB08zuptzz8gT3YfkqriTBVycepg== dependencies: - "@babel/helper-module-imports" "^7.18.6" "@rollup/pluginutils" "^5.0.1" + estree-walker "^2.0.2" + magic-string "^0.30.3" "@rollup/pluginutils@^5.0.1": version "5.1.4" @@ -1371,11 +428,6 @@ resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.43.0.tgz#42a88207659e404e8ffa655cae763cbad94906ab" integrity sha512-SnGhLiE5rlK0ofq8kzuDkM0g7FN1s5VYY+YSMTibP7CqShxCQvqtNxTARS4xX4PFJfHjG0ZQYX9iGzI3FQh5Aw== -"@sinclair/typebox@^0.27.8": - version "0.27.8" - resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" - integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== - "@sinclair/typebox@^0.34.0": version "0.34.35" resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.34.35.tgz#185c57551d5edf9a2f6e9d012822b06f942cfbfc" @@ -1388,39 +440,6 @@ dependencies: tslib "^2.8.0" -"@types/babel__core@^7.1.14": - version "7.20.5" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" - integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== - dependencies: - "@babel/parser" "^7.20.7" - "@babel/types" "^7.20.7" - "@types/babel__generator" "*" - "@types/babel__template" "*" - "@types/babel__traverse" "*" - -"@types/babel__generator@*": - version "7.27.0" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.27.0.tgz#b5819294c51179957afaec341442f9341e4108a9" - integrity sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg== - dependencies: - "@babel/types" "^7.0.0" - -"@types/babel__template@*": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f" - integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A== - dependencies: - "@babel/parser" "^7.1.0" - "@babel/types" "^7.0.0" - -"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.7.tgz#968cdc2366ec3da159f61166428ee40f370e56c2" - integrity sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng== - dependencies: - "@babel/types" "^7.20.7" - "@types/chai@^5.2.2": version "5.2.2" resolved "https://registry.yarnpkg.com/@types/chai/-/chai-5.2.2.tgz#6f14cea18180ffc4416bc0fd12be05fdd73bdd6b" @@ -1438,76 +457,11 @@ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.7.tgz#4158d3105276773d5b7695cd4834b1722e4f37a8" integrity sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ== -"@types/fs-extra@^8.0.1": - version "8.1.5" - resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-8.1.5.tgz#33aae2962d3b3ec9219b5aca2555ee00274f5927" - integrity sha512-0dzKcwO+S8s2kuF5Z9oUWatQJj5Uq/iqphEtE3GQJVRRYm/tD1LglU2UnXi2A8jLq5umkGouOXOR9y0n613ZwQ== - dependencies: - "@types/node" "*" - -"@types/glob@^7.1.1": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb" - integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA== - dependencies: - "@types/minimatch" "*" - "@types/node" "*" - -"@types/graceful-fs@^4.1.3": - version "4.1.9" - resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.9.tgz#2a06bc0f68a20ab37b3e36aa238be6abdf49e8b4" - integrity sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ== - dependencies: - "@types/node" "*" - -"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": - version "2.0.6" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" - integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== - -"@types/istanbul-lib-report@*": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz#53047614ae72e19fc0401d872de3ae2b4ce350bf" - integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA== - dependencies: - "@types/istanbul-lib-coverage" "*" - -"@types/istanbul-reports@^3.0.0": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz#0f03e3d2f670fbdac586e34b433783070cc16f54" - integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ== - dependencies: - "@types/istanbul-lib-report" "*" - "@types/json-schema@^7.0.15": version "7.0.15" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== -"@types/minimatch@*": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca" - integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA== - -"@types/node@*": - version "22.14.1" - resolved "https://registry.yarnpkg.com/@types/node/-/node-22.14.1.tgz#53b54585cec81c21eee3697521e31312d6ca1e6f" - integrity sha512-u0HuPQwe/dHrItgHHpmw3N2fYCR6x4ivMNbPHRkBVP4CvN+kiRrKHWk3i8tXiO/joPwXLMYvF9TTF0eqgHIuOw== - dependencies: - undici-types "~6.21.0" - -"@types/yargs-parser@*": - version "21.0.3" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" - integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== - -"@types/yargs@^17.0.8": - version "17.0.33" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.33.tgz#8c32303da83eec050a84b3c7ae7b9f922d13e32d" - integrity sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA== - dependencies: - "@types/yargs-parser" "*" - "@vitest/expect@3.2.4": version "3.2.4" resolved "https://registry.yarnpkg.com/@vitest/expect/-/expect-3.2.4.tgz#8362124cd811a5ee11c5768207b9df53d34f2433" @@ -1633,7 +587,7 @@ ansi-styles@^5.2.0: resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== -anymatch@^3.0.3: +anymatch@~3.1.2: version "3.1.3" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== @@ -1641,13 +595,6 @@ anymatch@^3.0.3: normalize-path "^3.0.0" picomatch "^2.0.4" -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - argparse@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" @@ -1690,6 +637,17 @@ assert@^1.4.0: object.assign "^4.1.4" util "^0.10.4" +assert@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/assert/-/assert-2.1.0.tgz#6d92a238d05dc02e7427c881fb8be81c8448b2dd" + integrity sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw== + dependencies: + call-bind "^1.0.2" + is-nan "^1.3.2" + object-is "^1.1.5" + object.assign "^4.1.4" + util "^0.12.5" + assertion-error@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-2.0.1.tgz#f641a196b335690b1070bf00b6e7593fec190bf7" @@ -1707,93 +665,6 @@ available-typed-arrays@^1.0.7: dependencies: possible-typed-array-names "^1.0.0" -babel-jest@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.7.0.tgz#f4369919225b684c56085998ac63dbd05be020d5" - integrity sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg== - dependencies: - "@jest/transform" "^29.7.0" - "@types/babel__core" "^7.1.14" - babel-plugin-istanbul "^6.1.1" - babel-preset-jest "^29.6.3" - chalk "^4.0.0" - graceful-fs "^4.2.9" - slash "^3.0.0" - -babel-plugin-istanbul@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" - integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@istanbuljs/load-nyc-config" "^1.0.0" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-instrument "^5.0.4" - test-exclude "^6.0.0" - -babel-plugin-jest-hoist@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz#aadbe943464182a8922c3c927c3067ff40d24626" - integrity sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg== - dependencies: - "@babel/template" "^7.3.3" - "@babel/types" "^7.3.3" - "@types/babel__core" "^7.1.14" - "@types/babel__traverse" "^7.0.6" - -babel-plugin-polyfill-corejs2@^0.4.10: - version "0.4.13" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.13.tgz#7d445f0e0607ebc8fb6b01d7e8fb02069b91dd8b" - integrity sha512-3sX/eOms8kd3q2KZ6DAhKPc0dgm525Gqq5NtWKZ7QYYZEv57OQ54KtblzJzH1lQF/eQxO8KjWGIK9IPUJNus5g== - dependencies: - "@babel/compat-data" "^7.22.6" - "@babel/helper-define-polyfill-provider" "^0.6.4" - semver "^6.3.1" - -babel-plugin-polyfill-corejs3@^0.11.0: - version "0.11.1" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.11.1.tgz#4e4e182f1bb37c7ba62e2af81d8dd09df31344f6" - integrity sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.6.3" - core-js-compat "^3.40.0" - -babel-plugin-polyfill-regenerator@^0.6.1: - version "0.6.4" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.4.tgz#428c615d3c177292a22b4f93ed99e358d7906a9b" - integrity sha512-7gD3pRadPrbjhjLyxebmx/WrFYcuSjZ0XbdUujQMZ/fcE9oeewk2U/7PCvez84UeuK3oSjmPZ0Ch0dlupQvGzw== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.6.4" - -babel-preset-current-node-syntax@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz#9a929eafece419612ef4ae4f60b1862ebad8ef30" - integrity sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw== - dependencies: - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-bigint" "^7.8.3" - "@babel/plugin-syntax-class-properties" "^7.12.13" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - "@babel/plugin-syntax-import-attributes" "^7.24.7" - "@babel/plugin-syntax-import-meta" "^7.10.4" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - "@babel/plugin-syntax-top-level-await" "^7.14.5" - -babel-preset-jest@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz#fa05fa510e7d493896d7b0dd2033601c840f171c" - integrity sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA== - dependencies: - babel-plugin-jest-hoist "^29.6.3" - babel-preset-current-node-syntax "^1.0.0" - babel-walk@3.0.0-canary-5: version "3.0.0-canary-5" resolved "https://registry.yarnpkg.com/babel-walk/-/babel-walk-3.0.0-canary-5.tgz#f66ecd7298357aee44955f235a6ef54219104b11" @@ -1816,6 +687,11 @@ base64-js@^1.0.2, base64-js@^1.1.2, base64-js@^1.3.0, base64-js@^1.3.1: resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== +binary-extensions@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" + integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== + bl@^4.0.3: version "4.1.0" resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" @@ -1838,14 +714,14 @@ blob@0.0.4: integrity sha512-YRc9zvVz4wNaxcXmiSgb9LAg7YYwqQ2xd0Sj6osfA7k/PKmIGVlnOYs3wOFdkRC9/JpQu8sGt/zHgJV7xzerfg== bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9: - version "4.12.1" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.1.tgz#215741fe3c9dba2d7e12c001d0cfdbae43975ba7" - integrity sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg== + version "4.12.2" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.2.tgz#3d8fed6796c24e177737f7cc5172ee04ef39ec99" + integrity sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw== bn.js@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" - integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== + version "5.2.2" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.2.tgz#82c09f9ebbb17107cd72cb7fd39bd1f9d0aaa566" + integrity sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw== brace-expansion@^1.1.7: version "1.1.11" @@ -1860,7 +736,7 @@ brace@^0.11.1: resolved "https://registry.yarnpkg.com/brace/-/brace-0.11.1.tgz#4896fcc9d544eef45f4bb7660db320d3b379fe58" integrity sha512-Fc8Ne62jJlKHiG/ajlonC4Sd66Pq68fFwK4ihJGNZpGqboc324SQk+lRvMzpPRuJOmfrJefdG8/7JdWX4bzJ2Q== -braces@^3.0.3: +braces@^3.0.3, braces@~3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== @@ -1964,7 +840,7 @@ browserify-sign@^4.2.3: readable-stream "^2.3.8" safe-buffer "^5.2.1" -browserify-zlib@~0.2.0: +browserify-zlib@^0.2.0, browserify-zlib@~0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== @@ -2025,23 +901,6 @@ browserify@^17.0.1: vm-browserify "^1.0.0" xtend "^4.0.0" -browserslist@^4.24.0, browserslist@^4.24.4: - version "4.24.4" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.4.tgz#c6b2865a3f08bcb860a0e827389003b9fe686e4b" - integrity sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A== - dependencies: - caniuse-lite "^1.0.30001688" - electron-to-chromium "^1.5.73" - node-releases "^2.0.19" - update-browserslist-db "^1.1.1" - -bser@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" - integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== - dependencies: - node-int64 "^0.4.0" - buffer-equal@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-0.0.1.tgz#91bc74b11ea405bc916bc6aa908faafa5b4aac4b" @@ -2057,7 +916,7 @@ buffer-xor@^1.0.3: resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== -buffer@^5.5.0: +buffer@^5.5.0, buffer@^5.7.1: version "5.7.1" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== @@ -2096,7 +955,7 @@ call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1, call-bind-apply- es-errors "^1.3.0" function-bind "^1.1.2" -call-bind@^1.0.8: +call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.7, call-bind@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.8.tgz#0736a9660f537e3388826f440d5ec45f744eaa4c" integrity sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww== @@ -2119,16 +978,6 @@ callsites@^3.0.0: resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== -camelcase@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - -caniuse-lite@^1.0.30001688: - version "1.0.30001714" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001714.tgz#cfd27ff07e6fa20a0f45c7a10d28a0ffeaba2122" - integrity sha512-mtgapdwDLSSBnCI3JokHM7oEQBLxiJKVRtg10AxM1AyeiKcM96f0Mkbqeq+1AbiCtvMcHRulAAEMu693JrSWqg== - canvas@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/canvas/-/canvas-3.1.0.tgz#6cdf094b859fef8e39b0e2c386728a376f1727b2" @@ -2168,16 +1017,26 @@ check-error@^2.1.1: resolved "https://registry.yarnpkg.com/check-error/-/check-error-2.1.1.tgz#87eb876ae71ee388fa0471fe423f494be1d96ccc" integrity sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw== +chokidar@^3.5.3: + version "3.6.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" + integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + chownr@^1.1.1: version "1.1.4" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== -ci-info@^3.2.0: - version "3.9.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" - integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== - cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.6" resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.6.tgz#8fe672437d01cd6c4561af5334e0cc50ff1955f7" @@ -2208,11 +1067,6 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -colorette@^1.1.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.4.0.tgz#5190fbb87276259a86ad700bff2c6d6faa3fca40" - integrity sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g== - combine-source-map@^0.8.0, combine-source-map@~0.8.0: version "0.8.0" resolved "https://registry.yarnpkg.com/combine-source-map/-/combine-source-map-0.8.0.tgz#a58d0df042c186fcf822a8e8015f5450d2d79a8b" @@ -2261,7 +1115,7 @@ constantinople@^4.0.1: "@babel/parser" "^7.6.0" "@babel/types" "^7.6.1" -constants-browserify@~1.0.0: +constants-browserify@^1.0.0, constants-browserify@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" integrity sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ== @@ -2271,23 +1125,11 @@ convert-source-map@^1.5.1: resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== -convert-source-map@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" - integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== - convert-source-map@~1.1.0: version "1.1.3" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.1.3.tgz#4829c877e9fe49b3161f3bf3673888e204699860" integrity sha512-Y8L5rp6jo+g9VEPgvqNfEopjTR4OTYct8lXlS8iVQdmnjDvbdbzYe9rjtFCB9egC86JoNCU61WRY+ScjkZpnIg== -core-js-compat@^3.40.0: - version "3.41.0" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.41.0.tgz#4cdfce95f39a8f27759b667cf693d96e5dda3d17" - integrity sha512-RFsU9LySVue9RTwdDVX/T0e2Y6jRYWXERKElIjpuEOEnxaXffI0X7RUwVzfYLfzuLXSNJDYoRYUAmRUcyln20A== - dependencies: - browserslist "^4.24.4" - core-util-is@~1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" @@ -2301,7 +1143,7 @@ create-ecdh@^4.0.4: bn.js "^4.1.0" elliptic "^6.5.3" -create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: +create-hash@^1.1.0, create-hash@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== @@ -2312,7 +1154,17 @@ create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: ripemd160 "^2.0.1" sha.js "^2.4.0" -create-hmac@^1.1.4, create-hmac@^1.1.7: +create-hash@~1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.1.3.tgz#606042ac8b9262750f483caddab0f5819172d8fd" + integrity sha512-snRpch/kwQhcdlnZKYanNF1m0RDlrCdSKQaH87w1FCFPVPNCQ/Il9QJKAX2jVBZddRdaHBMC+zXa9Gw9tmkNUA== + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + ripemd160 "^2.0.0" + sha.js "^2.4.0" + +create-hmac@^1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== @@ -2324,6 +1176,11 @@ create-hmac@^1.1.4, create-hmac@^1.1.7: safe-buffer "^5.0.1" sha.js "^2.4.8" +create-require@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + cross-spawn@^7.0.6: version "7.0.6" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" @@ -2333,7 +1190,7 @@ cross-spawn@^7.0.6: shebang-command "^2.0.0" which "^2.0.1" -crypto-browserify@^3.0.0: +crypto-browserify@^3.0.0, crypto-browserify@^3.12.1: version "3.12.1" resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.1.tgz#bb8921bec9acc81633379aa8f52d69b0b69e0dac" integrity sha512-r4ESw/IlusD17lgQi1O20Fa3qNnsckR126TdUuBgAu7GBYSIPvdNyONd3Zrxh0xCwA4+6w/TDArBPsMvhur+KQ== @@ -2374,7 +1231,7 @@ dash-ast@^2.0.1: resolved "https://registry.yarnpkg.com/dash-ast/-/dash-ast-2.0.1.tgz#8d0fd2e601c59bf874cc22877ee7dd889f54dee8" integrity sha512-5TXltWJGc+RdnabUGzhRae1TRq6m4gr+3K2wQX0is5/F2yS6MJXJvLyI3ErAnsAXuJoGqvfVD5icRgim07DrxQ== -debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2: +debug@^4.3.1, debug@^4.3.2: version "4.4.0" resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a" integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== @@ -2419,7 +1276,7 @@ define-data-property@^1.0.1, define-data-property@^1.1.4: es-errors "^1.3.0" gopd "^1.0.1" -define-properties@^1.2.1: +define-properties@^1.1.3, define-properties@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== @@ -2491,6 +1348,11 @@ doctypes@^1.1.0: resolved "https://registry.yarnpkg.com/doctypes/-/doctypes-1.1.0.tgz#ea80b106a87538774e8a3a4a5afe293de489e0a9" integrity sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ== +domain-browser@4.22.0: + version "4.22.0" + resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-4.22.0.tgz#6ddd34220ec281f9a65d3386d267ddd35c491f9f" + integrity sha512-IGBwjF7tNk3cwypFNH/7bfzBcgSCbaMOD3GsaY1AU/JRrnHnYgEM0+9kQt52iZxjNsjBtJYtao146V+f8jFZNw== + domain-browser@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" @@ -2517,11 +1379,6 @@ duplexer2@^0.1.2, duplexer2@~0.1.0, duplexer2@~0.1.2, duplexer2@~0.1.4: dependencies: readable-stream "^2.0.2" -electron-to-chromium@^1.5.73: - version "1.5.137" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.137.tgz#53a7fef3ea9f7eb5fcf704454050ff930c43ed92" - integrity sha512-/QSJaU2JyIuTbbABAo/crOs+SuAZLS+fVVS10PVrIT9hrRkmZl8Hb0xPSkKRUUWHQtYzXHpQUW3Dy5hwMzGZkA== - elliptic@^6.5.3, elliptic@^6.5.5: version "6.6.1" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.6.1.tgz#3b8ffb02670bf69e382c7f65bf524c97c5405c06" @@ -2651,11 +1508,6 @@ esbuild@^0.25.0: "@esbuild/win32-ia32" "0.25.5" "@esbuild/win32-x64" "0.25.5" -escalade@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" - integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== - escape-string-regexp@^1.0.2: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" @@ -2767,7 +1619,7 @@ espree@^10.0.1, espree@^10.3.0: acorn-jsx "^5.3.2" eslint-visitor-keys "^4.2.0" -esprima@^4.0.0, esprima@^4.0.1: +esprima@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== @@ -2861,7 +1713,7 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-glob@^3.0.3, fast-glob@^3.2.9: +fast-glob@^3.2.9: version "3.3.3" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818" integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== @@ -2872,7 +1724,7 @@ fast-glob@^3.0.3, fast-glob@^3.2.9: merge2 "^1.3.0" micromatch "^4.0.8" -fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: +fast-json-stable-stringify@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== @@ -2894,13 +1746,6 @@ fastq@^1.6.0: dependencies: reusify "^1.0.4" -fb-watchman@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" - integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== - dependencies: - bser "2.1.1" - fdir@^6.4.4: version "6.4.6" resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.4.6.tgz#2b268c0232697063111bbf3f64810a2a741ba281" @@ -2948,7 +1793,7 @@ find-cache-dir@^3.3.1: make-dir "^3.0.2" pkg-dir "^4.1.0" -find-up@^4.0.0, find-up@^4.1.0: +find-up@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== @@ -3004,7 +1849,7 @@ fs-constants@^1.0.0: resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== -fs-extra@^11.1.1: +fs-extra@^11.1.1, fs-extra@^11.3.0: version "11.3.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.3.0.tgz#0daced136bbaf65a555a326719af931adc7a314d" integrity sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew== @@ -3013,21 +1858,12 @@ fs-extra@^11.1.1: jsonfile "^6.0.1" universalify "^2.0.0" -fs-extra@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" - integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^4.0.0" - universalify "^0.1.0" - fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== -fsevents@^2.3.2, fsevents@~2.3.2, fsevents@~2.3.3: +fsevents@~2.3.2, fsevents@~2.3.3: version "2.3.3" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== @@ -3037,11 +1873,6 @@ function-bind@^1.1.2: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== -gensync@^1.0.0-beta.2: - version "1.0.0-beta.2" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" - integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== - get-assigned-identifiers@^1.1.0, get-assigned-identifiers@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz#6dbf411de648cbaf8d9169ebb0d2d576191e2ff1" @@ -3063,11 +1894,6 @@ get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.3.0: hasown "^2.0.2" math-intrinsics "^1.1.0" -get-package-type@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" - integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== - get-proto@^1.0.0, get-proto@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" @@ -3099,7 +1925,7 @@ github-from-package@0.0.0: resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== -glob-parent@^5.1.2: +glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== @@ -3113,7 +1939,7 @@ glob-parent@^6.0.2: dependencies: is-glob "^4.0.3" -glob@^7.1.0, glob@^7.1.3, glob@^7.1.4: +glob@^7.1.0, glob@^7.1.3: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -3125,11 +1951,6 @@ glob@^7.1.0, glob@^7.1.3, glob@^7.1.4: once "^1.3.0" path-is-absolute "^1.0.0" -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - globals@^14.0.0: version "14.0.0" resolved "https://registry.yarnpkg.com/globals/-/globals-14.0.0.tgz#898d7413c29babcf6bafe56fcadded858ada724e" @@ -3140,20 +1961,6 @@ globals@^15.14.0: resolved "https://registry.yarnpkg.com/globals/-/globals-15.15.0.tgz#7c4761299d41c32b075715a4ce1ede7897ff72a8" integrity sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg== -globby@10.0.1: - version "10.0.1" - resolved "https://registry.yarnpkg.com/globby/-/globby-10.0.1.tgz#4782c34cb75dd683351335c5829cc3420e606b22" - integrity sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A== - dependencies: - "@types/glob" "^7.1.1" - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.0.3" - glob "^7.1.3" - ignore "^5.1.1" - merge2 "^1.2.3" - slash "^3.0.0" - globby@^11.1.0: version "11.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" @@ -3176,7 +1983,7 @@ gopd@^1.0.1, gopd@^1.2.0: resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== -graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.9: +graceful-fs@^4.1.6, graceful-fs@^4.2.0: version "4.2.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== @@ -3210,6 +2017,13 @@ has@^1.0.1: resolved "https://registry.yarnpkg.com/has/-/has-1.0.4.tgz#2eb2860e000011dae4f1406a86fe80e530fb2ec6" integrity sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ== +hash-base@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-2.0.2.tgz#66ea1d856db4e8a5470cadf6fce23ae5244ef2e1" + integrity sha512-0TROgQ1/SxE6KmxWSvXHvRj90/Xo1JvZShofnYF+f6ZsGtR4eES7WfrQzPalmyagfKZCXpVnitiRebZulWsbiw== + dependencies: + inherits "^2.0.1" + hash-base@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" @@ -3266,7 +2080,7 @@ ieee754@^1.1.13, ieee754@^1.1.4: resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== -ignore@^5.1.1, ignore@^5.2.0: +ignore@^5.2.0: version "5.3.2" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== @@ -3338,6 +2152,13 @@ is-arguments@^1.0.4: call-bound "^1.0.2" has-tostringtag "^1.0.2" +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + is-buffer@^1.1.0: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" @@ -3378,23 +2199,26 @@ is-generator-function@^1.0.7: has-tostringtag "^1.0.2" safe-regex-test "^1.1.0" -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: version "4.0.3" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" +is-nan@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/is-nan/-/is-nan-1.3.2.tgz#043a54adea31748b55b6cd4e09aadafa69bd9e1d" + integrity sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-plain-object@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-3.0.1.tgz#662d92d24c0aa4302407b0d45d21f2251c85f85b" - integrity sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g== - is-promise@^2.0.0: version "2.2.2" resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1" @@ -3410,13 +2234,18 @@ is-regex@^1.0.3, is-regex@^1.2.1: has-tostringtag "^1.0.2" hasown "^2.0.2" -is-typed-array@^1.1.3: +is-typed-array@^1.1.14, is-typed-array@^1.1.3: version "1.1.15" resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.15.tgz#4bfb4a45b61cee83a5a46fba778e4e8d59c0ce0b" integrity sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ== dependencies: which-typed-array "^1.1.16" +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" @@ -3427,21 +2256,10 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== -istanbul-lib-coverage@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" - integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== - -istanbul-lib-instrument@^5.0.4: - version "5.2.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" - integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== - dependencies: - "@babel/core" "^7.12.3" - "@babel/parser" "^7.14.7" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-coverage "^3.2.0" - semver "^6.3.0" +isomorphic-timers-promises@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/isomorphic-timers-promises/-/isomorphic-timers-promises-1.0.1.tgz#e4137c24dbc54892de8abae3a4b5c1ffff381598" + integrity sha512-u4sej9B1LPSxTGKB/HiuzvEQnXH0ECYkSVQU39koSwmFAxhlEAFl9RdTvLv4TOTQUgBS5O3O5fwUxk6byBZ+IQ== jest-diff@^30.0.1: version "30.0.1" @@ -3453,25 +2271,6 @@ jest-diff@^30.0.1: chalk "^4.1.2" pretty-format "30.0.1" -jest-haste-map@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.7.0.tgz#3c2396524482f5a0506376e6c858c3bbcc17b104" - integrity sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA== - dependencies: - "@jest/types" "^29.6.3" - "@types/graceful-fs" "^4.1.3" - "@types/node" "*" - anymatch "^3.0.3" - fb-watchman "^2.0.0" - graceful-fs "^4.2.9" - jest-regex-util "^29.6.3" - jest-util "^29.7.0" - jest-worker "^29.7.0" - micromatch "^4.0.4" - walker "^1.0.8" - optionalDependencies: - fsevents "^2.3.2" - jest-image-snapshot@^6.4.0: version "6.4.0" resolved "https://registry.yarnpkg.com/jest-image-snapshot/-/jest-image-snapshot-6.4.0.tgz#65831d13beb1680f3bba9fb28230fa53d76939be" @@ -3486,33 +2285,6 @@ jest-image-snapshot@^6.4.0: rimraf "^2.6.2" ssim.js "^3.1.1" -jest-regex-util@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.6.3.tgz#4a556d9c776af68e1c5f48194f4d0327d24e8a52" - integrity sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg== - -jest-util@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" - integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== - dependencies: - "@jest/types" "^29.6.3" - "@types/node" "*" - chalk "^4.0.0" - ci-info "^3.2.0" - graceful-fs "^4.2.9" - picomatch "^2.2.3" - -jest-worker@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.7.0.tgz#acad073acbbaeb7262bd5389e1bcf43e10058d4a" - integrity sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw== - dependencies: - "@types/node" "*" - jest-util "^29.7.0" - merge-stream "^2.0.0" - supports-color "^8.0.0" - jpeg-exif@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/jpeg-exif/-/jpeg-exif-1.1.4.tgz#781a65b6cd74f62cb1c493511020f8d3577a1c2b" @@ -3523,24 +2295,11 @@ js-stringify@^1.0.2: resolved "https://registry.yarnpkg.com/js-stringify/-/js-stringify-1.0.2.tgz#1736fddfd9724f28a3682adc6230ae7e4e9679db" integrity sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g== -js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - js-tokens@^9.0.1: version "9.0.1" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-9.0.1.tgz#2ec43964658435296f6761b34e10671c2d9527f4" integrity sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ== -js-yaml@^3.13.1: - version "3.14.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - js-yaml@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" @@ -3548,16 +2307,6 @@ js-yaml@^4.1.0: dependencies: argparse "^2.0.1" -jsesc@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d" - integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA== - -jsesc@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.0.2.tgz#bb8b09a6597ba426425f2e4a07245c3d00b9343e" - integrity sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g== - json-buffer@3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" @@ -3573,18 +2322,6 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== -json5@^2.2.3: - version "2.2.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" - integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== - -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== - optionalDependencies: - graceful-fs "^4.1.6" - jsonfile@^6.0.1: version "6.1.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" @@ -3660,11 +2397,6 @@ locate-path@^6.0.0: dependencies: p-locate "^5.0.0" -lodash.debounce@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" - integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== - lodash.memoize@~3.0.3: version "3.0.4" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-3.0.4.tgz#2dcbd2c287cbc0a55cc42328bd0c736150d53e3f" @@ -3685,13 +2417,6 @@ loupe@^3.1.0, loupe@^3.1.4: resolved "https://registry.yarnpkg.com/loupe/-/loupe-3.1.4.tgz#784a0060545cb38778ffb19ccde44d7870d5fdd9" integrity sha512-wJzkKwJrheKtknCOKNEtDK4iqg/MxmZheEMtSTYvnzRdEYaZzmgH976nenp8WdJRdx5Vc1X/9MO0Oszl6ezeXg== -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - magic-string@0.25.1: version "0.25.1" resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.1.tgz#b1c248b399cd7485da0fe7385c2fc7011843266e" @@ -3699,7 +2424,7 @@ magic-string@0.25.1: dependencies: sourcemap-codec "^1.4.1" -magic-string@^0.30.17: +magic-string@^0.30.17, magic-string@^0.30.3: version "0.30.17" resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.17.tgz#450a449673d2460e5bbcfba9a61916a1714c7453" integrity sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA== @@ -3713,13 +2438,6 @@ make-dir@^3.0.2: dependencies: semver "^6.0.0" -makeerror@1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" - integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== - dependencies: - tmpl "1.0.5" - markdown@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/markdown/-/markdown-0.5.0.tgz#28205b565a8ae7592de207463d6637dc182722b2" @@ -3748,17 +2466,12 @@ merge-source-map@1.0.4: dependencies: source-map "^0.5.6" -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - -merge2@^1.2.3, merge2@^1.3.0, merge2@^1.4.1: +merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -micromatch@^4.0.4, micromatch@^4.0.8: +micromatch@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== @@ -3789,7 +2502,7 @@ minimalistic-crypto-utils@^1.0.1: resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== -minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: +minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== @@ -3864,15 +2577,38 @@ node-addon-api@^7.0.0: resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-7.1.1.tgz#1aba6693b0f255258a049d621329329322aad558" integrity sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ== -node-int64@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" - integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== - -node-releases@^2.0.19: - version "2.0.19" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.19.tgz#9e445a52950951ec4d177d843af370b411caf314" - integrity sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw== +node-stdlib-browser@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/node-stdlib-browser/-/node-stdlib-browser-1.3.1.tgz#f41fa554f720a3df951e40339f4d92ac512222ac" + integrity sha512-X75ZN8DCLftGM5iKwoYLA3rjnrAEs97MkzvSd4q2746Tgpg8b8XWiBGiBG4ZpgcAqBgtgPHTiAc8ZMCvZuikDw== + dependencies: + assert "^2.0.0" + browser-resolve "^2.0.0" + browserify-zlib "^0.2.0" + buffer "^5.7.1" + console-browserify "^1.1.0" + constants-browserify "^1.0.0" + create-require "^1.1.1" + crypto-browserify "^3.12.1" + domain-browser "4.22.0" + events "^3.0.0" + https-browserify "^1.0.0" + isomorphic-timers-promises "^1.0.1" + os-browserify "^0.3.0" + path-browserify "^1.0.1" + pkg-dir "^5.0.0" + process "^0.11.10" + punycode "^1.4.1" + querystring-es3 "^0.2.1" + readable-stream "^3.6.0" + stream-browserify "^3.0.0" + stream-http "^3.2.0" + string_decoder "^1.0.0" + timers-browserify "^2.0.4" + tty-browserify "0.0.1" + url "^0.11.4" + util "^0.12.4" + vm-browserify "^1.0.1" nopt@~2.1.1: version "2.1.2" @@ -3881,7 +2617,7 @@ nopt@~2.1.1: dependencies: abbrev "1" -normalize-path@^3.0.0: +normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== @@ -3896,6 +2632,14 @@ object-inspect@^1.13.3, object-inspect@^1.6.0: resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213" integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== +object-is@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.6.tgz#1a6a53aed2dd8f7e6775ff870bea58545956ab07" + integrity sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + object-keys@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" @@ -3944,7 +2688,7 @@ optionator@^0.9.3: type-check "^0.4.0" word-wrap "^1.2.5" -os-browserify@~0.3.0: +os-browserify@^0.3.0, os-browserify@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" integrity sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A== @@ -3977,6 +2721,11 @@ p-locate@^5.0.0: dependencies: p-limit "^3.0.2" +p-map@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-7.0.3.tgz#7ac210a2d36f81ec28b736134810f7ba4418cdb6" + integrity sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA== + p-try@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" @@ -4018,7 +2767,7 @@ parse-asn1@^5.0.0, parse-asn1@^5.1.7: pbkdf2 "^3.1.2" safe-buffer "^5.2.1" -path-browserify@^1.0.0: +path-browserify@^1.0.0, path-browserify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== @@ -4064,15 +2813,16 @@ pathval@^2.0.0: integrity sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA== pbkdf2@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" - integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== + version "3.1.3" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.3.tgz#8be674d591d65658113424592a95d1517318dd4b" + integrity sha512-wfRLBZ0feWRhCIkoMB6ete7czJcnNnqRpcoWQBLqatqXXmelSRqfdDK4F3u9T2s2cXas/hQJcryI/4lAL+XTlA== dependencies: - create-hash "^1.1.2" - create-hmac "^1.1.4" - ripemd160 "^2.0.1" - safe-buffer "^5.0.1" - sha.js "^2.4.8" + create-hash "~1.1.3" + create-hmac "^1.1.7" + ripemd160 "=2.0.1" + safe-buffer "^5.2.1" + sha.js "^2.4.11" + to-buffer "^1.2.0" pdfjs-dist@^2.14.305: version "2.16.105" @@ -4082,12 +2832,12 @@ pdfjs-dist@^2.14.305: dommatrix "^1.0.3" web-streams-polyfill "^3.2.1" -picocolors@^1.0.0, picocolors@^1.1.1: +picocolors@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== -picomatch@^2.0.4, picomatch@^2.2.3, picomatch@^2.3.1: +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== @@ -4097,11 +2847,6 @@ picomatch@^4.0.2: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.2.tgz#77c742931e8f3b8820946c76cd0c1f13730d1dab" integrity sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg== -pirates@^4.0.4: - version "4.0.7" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.7.tgz#643b4a18c4257c8a65104b73f3049ce9a0a15e22" - integrity sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA== - pixelmatch@^5.1.0: version "5.3.0" resolved "https://registry.yarnpkg.com/pixelmatch/-/pixelmatch-5.3.0.tgz#5e5321a7abedfb7962d60dbf345deda87cb9560a" @@ -4116,6 +2861,13 @@ pkg-dir@^4.1.0: dependencies: find-up "^4.0.0" +pkg-dir@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-5.0.0.tgz#a02d6aebe6ba133a928f74aec20bafdfe6b8e760" + integrity sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA== + dependencies: + find-up "^5.0.0" + png-js@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/png-js/-/png-js-1.0.0.tgz#e5484f1e8156996e383aceebb3789fd75df1874d" @@ -4192,7 +2944,7 @@ process-nextick-args@~2.0.0: resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== -process@~0.11.0: +process@^0.11.10, process@~0.11.0: version "0.11.10" resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== @@ -4344,7 +3096,7 @@ qs@^6.12.3: dependencies: side-channel "^1.1.0" -querystring-es3@~0.2.0: +querystring-es3@^0.2.1, querystring-es3@~0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" integrity sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA== @@ -4422,65 +3174,19 @@ readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.5.0, readable string_decoder "^1.1.1" util-deprecate "^1.0.1" -regenerate-unicode-properties@^10.2.0: - version "10.2.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz#626e39df8c372338ea9b8028d1f99dc3fd9c3db0" - integrity sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA== - dependencies: - regenerate "^1.4.2" - -regenerate@^1.4.2: - version "1.4.2" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" - integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== - -regenerator-runtime@^0.14.0: - version "0.14.1" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" - integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== - -regenerator-transform@^0.15.2: - version "0.15.2" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.2.tgz#5bbae58b522098ebdf09bca2f83838929001c7a4" - integrity sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg== - dependencies: - "@babel/runtime" "^7.8.4" - -regexpu-core@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-6.2.0.tgz#0e5190d79e542bf294955dccabae04d3c7d53826" - integrity sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA== - dependencies: - regenerate "^1.4.2" - regenerate-unicode-properties "^10.2.0" - regjsgen "^0.8.0" - regjsparser "^0.12.0" - unicode-match-property-ecmascript "^2.0.0" - unicode-match-property-value-ecmascript "^2.1.0" - -regjsgen@^0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.8.0.tgz#df23ff26e0c5b300a6470cad160a9d090c3a37ab" - integrity sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q== - -regjsparser@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.12.0.tgz#0e846df6c6530586429377de56e0475583b088dc" - integrity sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ== +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== dependencies: - jsesc "~3.0.2" + picomatch "^2.2.1" resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== -resolve-from@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" - integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== - -resolve@^1.1.4, resolve@^1.1.5, resolve@^1.14.2, resolve@^1.15.1, resolve@^1.17.0, resolve@^1.4.0: +resolve@^1.1.4, resolve@^1.1.5, resolve@^1.15.1, resolve@^1.17.0, resolve@^1.4.0: version "1.22.10" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.10.tgz#b663e83ffb09bbf2386944736baae803029b8b39" integrity sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w== @@ -4506,6 +3212,14 @@ rimraf@^2.6.2: dependencies: glob "^7.1.3" +ripemd160@=2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.1.tgz#0f4584295c53a3628af7e6d79aca21ce57d1c6e7" + integrity sha512-J7f4wutN8mdbV08MJnXibYpCOPHR+yzy+iQ/AsjMv2j8cLavQ8VGagDFUwwTAdF8FmRKVeNpbTTEwNHCW1g94w== + dependencies: + hash-base "^2.0.0" + inherits "^2.0.1" + ripemd160@^2.0.0, ripemd160@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" @@ -4514,24 +3228,6 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^3.0.0" inherits "^2.0.1" -rollup-plugin-copy@^3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-copy/-/rollup-plugin-copy-3.5.0.tgz#7ffa2a7a8303e143876fa64fb5eed9022d304eeb" - integrity sha512-wI8D5dvYovRMx/YYKtUNt3Yxaw4ORC9xo6Gt9t22kveWz1enG9QrhVlagzwrxSC455xD1dHMKhIJkbsQ7d48BA== - dependencies: - "@types/fs-extra" "^8.0.1" - colorette "^1.1.0" - fs-extra "^8.1.0" - globby "10.0.1" - is-plain-object "^3.0.0" - -rollup@^2.79.2: - version "2.79.2" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.79.2.tgz#f150e4a5db4b121a21a747d762f701e5e9f49090" - integrity sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ== - optionalDependencies: - fsevents "~2.3.2" - rollup@^4.34.9: version "4.43.0" resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.43.0.tgz#275c09119eb7eaf0c3dea040523b81ef43c57b8c" @@ -4600,7 +3296,7 @@ scope-analyzer@^2.0.1: estree-is-function "^1.0.0" get-assigned-identifiers "^1.1.0" -semver@^6.0.0, semver@^6.3.0, semver@^6.3.1: +semver@^6.0.0: version "6.3.1" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== @@ -4622,7 +3318,12 @@ set-function-length@^1.2.2: gopd "^1.0.1" has-property-descriptors "^1.0.2" -sha.js@^2.4.0, sha.js@^2.4.8: +setimmediate@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== + +sha.js@^2.4.0, sha.js@^2.4.11, sha.js@^2.4.8: version "2.4.11" resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== @@ -4655,9 +3356,9 @@ shebang-regex@^3.0.0: integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== shell-quote@^1.6.1: - version "1.8.2" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.2.tgz#d2d83e057959d53ec261311e9e9b8f51dcb2934a" - integrity sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA== + version "1.8.3" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.3.tgz#55e40ef33cf5c689902353a3d8cd1a6725f08b4b" + integrity sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw== side-channel-list@^1.0.0: version "1.0.0" @@ -4704,11 +3405,6 @@ siginfo@^2.0.0: resolved "https://registry.yarnpkg.com/siginfo/-/siginfo-2.0.0.tgz#32e76c70b79724e3bb567cb9d543eb858ccfaf30" integrity sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g== -signal-exit@^3.0.7: - version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - simple-concat@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" @@ -4748,11 +3444,6 @@ sourcemap-codec@^1.4.1: resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== - ssim.js@^3.1.1: version "3.5.0" resolved "https://registry.yarnpkg.com/ssim.js/-/ssim.js-3.5.0.tgz#d7276b9ee99b57a5ff0db34035f02f35197e62df" @@ -4811,7 +3502,7 @@ stream-combiner2@^1.1.1: duplexer2 "~0.1.0" readable-stream "^2.0.2" -stream-http@^3.0.0: +stream-http@^3.0.0, stream-http@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-3.2.0.tgz#1872dfcf24cb15752677e40e5c3f9cc1926028b5" integrity sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A== @@ -4829,7 +3520,7 @@ stream-splicer@^2.0.0: inherits "^2.0.1" readable-stream "^2.0.2" -string_decoder@^1.1.1: +string_decoder@^1.0.0, string_decoder@^1.1.1: version "1.3.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== @@ -4881,13 +3572,6 @@ supports-color@^7.1.0: dependencies: has-flag "^4.0.0" -supports-color@^8.0.0: - version "8.1.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" @@ -4921,15 +3605,6 @@ tar-stream@^2.1.4: inherits "^2.0.3" readable-stream "^3.1.1" -test-exclude@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" - integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== - dependencies: - "@istanbuljs/schema" "^0.1.2" - glob "^7.1.4" - minimatch "^3.0.4" - through2@^2.0.0, through2@~2.0.3: version "2.0.5" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" @@ -4950,6 +3625,13 @@ timers-browserify@^1.0.1: dependencies: process "~0.11.0" +timers-browserify@^2.0.4: + version "2.0.12" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.12.tgz#44a45c11fbf407f34f97bccd1577c652361b00ee" + integrity sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ== + dependencies: + setimmediate "^1.0.4" + tiny-inflate@^1.0.0, tiny-inflate@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/tiny-inflate/-/tiny-inflate-1.0.3.tgz#122715494913a1805166aaf7c93467933eea26c4" @@ -4988,10 +3670,14 @@ tinyspy@^4.0.3: resolved "https://registry.yarnpkg.com/tinyspy/-/tinyspy-4.0.3.tgz#d1d0f0602f4c15f1aae083a34d6d0df3363b1b52" integrity sha512-t2T/WLB2WRgZ9EpE4jgPJ9w+i66UZfDc8wHh0xrwiRNN+UwH98GIJkTeZqX9rg0i0ptwzqW+uYeIF0T4F8LR7A== -tmpl@1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" - integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== +to-buffer@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.2.1.tgz#2ce650cdb262e9112a18e65dc29dcb513c8155e0" + integrity sha512-tB82LpAIWjhLYbqjx3X4zEeHN6M8CiuOEy2JY8SEQVdYRe3CCHOFaqrBW1doLDrfpWhplcW7BL+bO3/6S3pcDQ== + dependencies: + isarray "^2.0.5" + safe-buffer "^5.2.1" + typed-array-buffer "^1.0.3" to-regex-range@^5.0.1: version "5.0.1" @@ -5048,6 +3734,15 @@ type@^2.7.2: resolved "https://registry.yarnpkg.com/type/-/type-2.7.3.tgz#436981652129285cc3ba94f392886c2637ea0486" integrity sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ== +typed-array-buffer@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz#a72395450a4869ec033fd549371b47af3a2ee536" + integrity sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + is-typed-array "^1.1.14" + typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" @@ -5069,29 +3764,6 @@ undeclared-identifiers@^1.1.2: simple-concat "^1.0.0" xtend "^4.0.1" -undici-types@~6.21.0: - version "6.21.0" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.21.0.tgz#691d00af3909be93a7faa13be61b3a5b50ef12cb" - integrity sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ== - -unicode-canonical-property-names-ecmascript@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz#cb3173fe47ca743e228216e4a3ddc4c84d628cc2" - integrity sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg== - -unicode-match-property-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" - integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== - dependencies: - unicode-canonical-property-names-ecmascript "^2.0.0" - unicode-property-aliases-ecmascript "^2.0.0" - -unicode-match-property-value-ecmascript@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz#a0401aee72714598f739b68b104e4fe3a0cb3c71" - integrity sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg== - unicode-properties@^1.4.0: version "1.4.1" resolved "https://registry.yarnpkg.com/unicode-properties/-/unicode-properties-1.4.1.tgz#96a9cffb7e619a0dc7368c28da27e05fc8f9be5f" @@ -5100,11 +3772,6 @@ unicode-properties@^1.4.0: base64-js "^1.3.0" unicode-trie "^2.0.0" -unicode-property-aliases-ecmascript@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" - integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== - unicode-trie@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/unicode-trie/-/unicode-trie-2.0.0.tgz#8fd8845696e2e14a8b67d78fa9e0dd2cad62fec8" @@ -5113,24 +3780,11 @@ unicode-trie@^2.0.0: pako "^0.2.5" tiny-inflate "^1.0.0" -universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== - universalify@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== -update-browserslist-db@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz#348377dd245216f9e7060ff50b15a1b740b75420" - integrity sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw== - dependencies: - escalade "^3.2.0" - picocolors "^1.1.1" - uri-js@^4.2.2: version "4.4.1" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" @@ -5138,7 +3792,7 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" -url@~0.11.0: +url@^0.11.4, url@~0.11.0: version "0.11.4" resolved "https://registry.yarnpkg.com/url/-/url-0.11.4.tgz#adca77b3562d56b72746e76b330b7f27b6721f3c" integrity sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg== @@ -5158,7 +3812,7 @@ util@^0.10.4: dependencies: inherits "2.0.3" -util@~0.12.0: +util@^0.12.4, util@^0.12.5, util@~0.12.0: version "0.12.5" resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== @@ -5180,7 +3834,26 @@ vite-node@3.2.4: pathe "^2.0.3" vite "^5.0.0 || ^6.0.0 || ^7.0.0-0" -"vite@^5.0.0 || ^6.0.0 || ^7.0.0-0": +vite-plugin-node-polyfills@^0.23.0: + version "0.23.0" + resolved "https://registry.yarnpkg.com/vite-plugin-node-polyfills/-/vite-plugin-node-polyfills-0.23.0.tgz#99d0d1524fa75ce5c7bb1fc8af30283379e9c684" + integrity sha512-4n+Ys+2bKHQohPBKigFlndwWQ5fFKwaGY6muNDMTb0fSQLyBzS+jjUNRZG9sKF0S/Go4ApG6LFnUGopjkILg3w== + dependencies: + "@rollup/plugin-inject" "^5.0.5" + node-stdlib-browser "^1.2.0" + +vite-plugin-static-copy@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/vite-plugin-static-copy/-/vite-plugin-static-copy-3.0.2.tgz#018348722e6129733e55ce5c482ad225ea1d3f67" + integrity sha512-/seLvhUg44s1oU9RhjTZZy/0NPbfNctozdysKcvPovxxXZdI5l19mGq6Ri3IaTf1Dy/qChS4BSR7ayxeu8o9aQ== + dependencies: + chokidar "^3.5.3" + fs-extra "^11.3.0" + p-map "^7.0.3" + picocolors "^1.1.1" + tinyglobby "^0.2.14" + +"vite@^5.0.0 || ^6.0.0 || ^7.0.0-0", vite@^6.3.5: version "6.3.5" resolved "https://registry.yarnpkg.com/vite/-/vite-6.3.5.tgz#fec73879013c9c0128c8d284504c6d19410d12a3" integrity sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ== @@ -5223,7 +3896,7 @@ vitest@^3.2.4: vite-node "3.2.4" why-is-node-running "^2.3.0" -vm-browserify@^1.0.0: +vm-browserify@^1.0.0, vm-browserify@^1.0.1: version "1.1.2" resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== @@ -5233,13 +3906,6 @@ void-elements@^3.1.0: resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-3.1.0.tgz#614f7fbf8d801f0bb5f0661f5b2f5785750e4f09" integrity sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w== -walker@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" - integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== - dependencies: - makeerror "1.0.12" - web-streams-polyfill@^3.2.1: version "3.3.3" resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz#2073b91a2fdb1fbfbd401e7de0ac9f8214cecb4b" @@ -5293,24 +3959,11 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== -write-file-atomic@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" - integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== - dependencies: - imurmurhash "^0.1.4" - signal-exit "^3.0.7" - xtend@^4.0.0, xtend@^4.0.1, xtend@^4.0.2, xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== -yallist@^3.0.2: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"