From 8ec62b157b6520498f22dae0c9b0b079f81052ba Mon Sep 17 00:00:00 2001 From: Alan Zabihi Date: Thu, 16 Apr 2026 14:46:59 +0200 Subject: [PATCH 01/89] Bypass MapGenerator for no-source-map stringify in LazyResult When opts.map is undefined and the root has no previous source map, skip MapGenerator construction entirely and stringify directly. This avoids 3 Map allocations, a clearAnnotation AST walk, and a previous() AST walk per file. --- lib/lazy-result.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/lib/lazy-result.js b/lib/lazy-result.js index 1ea52b87a..2ad67da97 100644 --- a/lib/lazy-result.js +++ b/lib/lazy-result.js @@ -378,6 +378,16 @@ class LazyResult { if (opts.stringifier) str = opts.stringifier if (str.stringify) str = str.stringify + let rootSource = this.result.root.source + if (opts.map === undefined && !(rootSource && rootSource.input && rootSource.input.map)) { + let result = '' + str(this.result.root, i => { + result += i + }) + this.result.css = result + return this.result + } + let map = new MapGenerator(str, this.result.root, this.result.opts) let data = map.generate() this.result.css = data[0] From 7e36e153d075ef56ebc352f298b65f646c700a06 Mon Sep 17 00:00:00 2001 From: Alan Zabihi Date: Thu, 16 Apr 2026 14:47:31 +0200 Subject: [PATCH 02/89] Cache node.raws locally in Stringifier hot methods Cache node.raws references locally in hot methods (atrule, block, body, comment, decl) to avoid repeated property chain resolution. In decl(), inline the common rawValue() path when node.raws.value exists. In raw(), cache root.rawCache in a local variable. In body(), short-circuit raw(child, 'before') when child.raws.before is already defined. In block() and comment(), inline the raws check to skip raw() call overhead when the value is already present. --- lib/stringifier.js | 64 +++++++++++++++++++++++++++++++--------------- 1 file changed, 44 insertions(+), 20 deletions(-) diff --git a/lib/stringifier.js b/lib/stringifier.js index 012fa622d..4b83e1f49 100644 --- a/lib/stringifier.js +++ b/lib/stringifier.js @@ -37,11 +37,12 @@ class Stringifier { } atrule(node, semicolon) { + let raws = node.raws let name = '@' + node.name let params = node.params ? this.rawValue(node, 'params') : '' - if (typeof node.raws.afterName !== 'undefined') { - name += node.raws.afterName + if (typeof raws.afterName !== 'undefined') { + name += raws.afterName } else if (params) { name += ' ' } @@ -49,7 +50,7 @@ class Stringifier { if (node.nodes) { this.block(node, name + params) } else { - let end = (node.raws.between || '') + (semicolon ? ';' : '') + let end = (raws.between || '') + (semicolon ? ';' : '') this.builder(escapeHTMLInCSS(name + params + end), node) } } @@ -84,15 +85,22 @@ class Stringifier { } block(node, start) { - let between = this.raw(node, 'between', 'beforeOpen') + let raws = node.raws + let between = typeof raws.between !== 'undefined' + ? raws.between + : this.raw(node, 'between', 'beforeOpen') this.builder(escapeHTMLInCSS(start + between) + '{', node, 'start') let after if (node.nodes && node.nodes.length) { this.body(node) - after = this.raw(node, 'after') + after = typeof raws.after !== 'undefined' + ? raws.after + : this.raw(node, 'after') } else { - after = this.raw(node, 'after', 'emptyBody') + after = typeof raws.after !== 'undefined' + ? raws.after + : this.raw(node, 'after', 'emptyBody') } if (after) this.builder(escapeHTMLInCSS(after)) @@ -100,34 +108,50 @@ class Stringifier { } body(node) { - let last = node.nodes.length - 1 + let nodes = node.nodes + let last = nodes.length - 1 while (last > 0) { - if (node.nodes[last].type !== 'comment') break + if (nodes[last].type !== 'comment') break last -= 1 } let semicolon = this.raw(node, 'semicolon') let isDocument = node.type === 'document' - for (let i = 0; i < node.nodes.length; i++) { - let child = node.nodes[i] - let before = this.raw(child, 'before') + for (let i = 0; i < nodes.length; i++) { + let child = nodes[i] + let before = child.raws.before + if (typeof before === 'undefined') { + before = this.raw(child, 'before') + } if (before) this.builder(isDocument ? before : escapeHTMLInCSS(before)) this.stringify(child, last !== i || semicolon) } } comment(node) { - let left = this.raw(node, 'left', 'commentLeft') - let right = this.raw(node, 'right', 'commentRight') + let raws = node.raws + let left = typeof raws.left !== 'undefined' + ? raws.left + : this.raw(node, 'left', 'commentLeft') + let right = typeof raws.right !== 'undefined' + ? raws.right + : this.raw(node, 'right', 'commentRight') this.builder(escapeHTMLInCSS('/*' + left + node.text + right + '*/'), node) } decl(node, semicolon) { - let between = this.raw(node, 'between', 'colon') - let string = node.prop + between + this.rawValue(node, 'value') + let raws = node.raws + let between = typeof raws.between !== 'undefined' + ? raws.between + : this.raw(node, 'between', 'colon') + + let rawVal = raws.value + let value = rawVal && rawVal.value === node.value ? rawVal.raw : node.value + + let string = node.prop + between + value if (node.important) { - string += node.raws.important || ' !important' + string += raws.important || ' !important' } if (semicolon) string += ';' @@ -167,9 +191,9 @@ class Stringifier { // Detect style by other nodes let root = node.root() - if (!root.rawCache) root.rawCache = {} - if (typeof root.rawCache[detect] !== 'undefined') { - return root.rawCache[detect] + let cache = root.rawCache || (root.rawCache = {}) + if (typeof cache[detect] !== 'undefined') { + return cache[detect] } if (detect === 'before' || detect === 'after') { @@ -188,7 +212,7 @@ class Stringifier { if (typeof value === 'undefined') value = DEFAULT_RAW[detect] - root.rawCache[detect] = value + cache[detect] = value return value } From 42b5337dd7e2fa9a03566495cfad2737eb19e712 Mon Sep 17 00:00:00 2001 From: Andrey Sitnik Date: Sun, 26 Apr 2026 11:03:52 +0000 Subject: [PATCH 03/89] Update dependencies --- .github/workflows/test.yml | 8 +- package.json | 10 +- pnpm-lock.yaml | 515 +++++++++++++++++++------------------ test/container.test.ts | 10 +- 4 files changed, 276 insertions(+), 267 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 489acdd31..809400d18 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -18,7 +18,7 @@ jobs: with: version: 10 - name: Install Node.js - uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 + uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 with: node-version: 25 cache: pnpm @@ -44,7 +44,7 @@ jobs: with: version: 10 - name: Install Node.js ${{ matrix.node-version }} - uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 + uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 with: node-version: ${{ matrix.node-version }} cache: pnpm @@ -72,7 +72,7 @@ jobs: env: ACTIONS_ALLOW_UNSECURE_COMMANDS: true - name: Install Node.js ${{ matrix.node-version }} - uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 + uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 with: node-version: ${{ matrix.node-version }} - name: Install dependencies @@ -92,7 +92,7 @@ jobs: with: version: 10 - name: Install Node.js LTS - uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 + uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 with: node-version: 24 cache: pnpm diff --git a/package.json b/package.json index 4495fbd93..6ab900d00 100644 --- a/package.json +++ b/package.json @@ -95,19 +95,19 @@ }, "devDependencies": { "@logux/eslint-config": "^57.1.0", - "@logux/oxc-configs": "^0.3.3", + "@logux/oxc-configs": "^0.4.0", "@size-limit/preset-small-lib": "^12.1.0", "@types/node": "^25.6.0", - "actions-up": "^1.13.0", + "actions-up": "^1.14.1", "c8": "^11.0.0", "check-dts": "^0.9.0", "clean-publish": "^6.0.5", "concat-with-sourcemaps": "^1.1.0", - "eslint": "^10.2.0", - "multiocular": "^0.8.2", + "eslint": "^10.2.1", + "multiocular": "^0.8.3", "nanodelay": "^1.0.8", "nanospy": "^1.0.0", - "oxfmt": "^0.45.0", + "oxfmt": "^0.46.0", "postcss-parser-tests": "^8.9.0", "simple-git-hooks": "^2.13.1", "size-limit": "^12.1.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4df501630..93331361e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -25,10 +25,10 @@ importers: devDependencies: '@logux/eslint-config': specifier: ^57.1.0 - version: 57.1.0(@typescript-eslint/utils@8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3) + version: 57.1.0(@typescript-eslint/utils@8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3) '@logux/oxc-configs': - specifier: ^0.3.3 - version: 0.3.3(oxlint-tsgolint@0.18.1)(oxlint@1.58.0(oxlint-tsgolint@0.18.1))(typescript@5.9.3) + specifier: ^0.4.0 + version: 0.4.0(oxlint-tsgolint@0.18.1)(oxlint@1.58.0(oxlint-tsgolint@0.18.1))(typescript@5.9.3) '@size-limit/preset-small-lib': specifier: ^12.1.0 version: 12.1.0(size-limit@12.1.0(jiti@2.6.1)) @@ -36,8 +36,8 @@ importers: specifier: ^25.6.0 version: 25.6.0 actions-up: - specifier: ^1.13.0 - version: 1.13.0 + specifier: ^1.14.1 + version: 1.14.1 c8: specifier: ^11.0.0 version: 11.0.0 @@ -51,11 +51,11 @@ importers: specifier: ^1.1.0 version: 1.1.0 eslint: - specifier: ^10.2.0 - version: 10.2.0(jiti@2.6.1) + specifier: ^10.2.1 + version: 10.2.1(jiti@2.6.1) multiocular: - specifier: ^0.8.2 - version: 0.8.2 + specifier: ^0.8.3 + version: 0.8.3 nanodelay: specifier: ^1.0.8 version: 1.0.8 @@ -63,8 +63,8 @@ importers: specifier: ^1.0.0 version: 1.0.0 oxfmt: - specifier: ^0.45.0 - version: 0.45.0 + specifier: ^0.46.0 + version: 0.46.0 postcss-parser-tests: specifier: ^8.9.0 version: 8.9.0 @@ -97,11 +97,11 @@ packages: resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} - '@emnapi/core@1.9.2': - resolution: {integrity: sha512-UC+ZhH3XtczQYfOlu3lNEkdW/p4dsJ1r/bP7H8+rhao3TTTMO1ATq/4DdIi23XuGoFY+Cz0JmCbdVl0hz9jZcA==} + '@emnapi/core@1.10.0': + resolution: {integrity: sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==} - '@emnapi/runtime@1.9.2': - resolution: {integrity: sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw==} + '@emnapi/runtime@1.10.0': + resolution: {integrity: sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==} '@emnapi/wasi-threads@1.2.1': resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==} @@ -296,12 +296,16 @@ packages: resolution: {integrity: sha512-rZAP3aVgB9ds9KOeUSL+zZ21hPmo8dh6fnIFwRQj5EAZl9gzR7wxYbYXYysAM8CTqGmUGyp2S4kUdV17MnGuWQ==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@humanfs/core@0.19.1': - resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} + '@humanfs/core@0.19.2': + resolution: {integrity: sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==} engines: {node: '>=18.18.0'} - '@humanfs/node@0.16.7': - resolution: {integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==} + '@humanfs/node@0.16.8': + resolution: {integrity: sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==} + engines: {node: '>=18.18.0'} + + '@humanfs/types@0.15.0': + resolution: {integrity: sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==} engines: {node: '>=18.18.0'} '@humanwhocodes/module-importer@1.0.1': @@ -355,8 +359,8 @@ packages: svelte-eslint-parser: optional: true - '@logux/oxc-configs@0.3.3': - resolution: {integrity: sha512-kgo1ZwY3yJpaoZwooOULwWgVn/4WJ1blYOnRXzLe5Oe9oOfcB70nj1ALSN2qUrYOdY0FQQVbCQRkDGoqeevwig==} + '@logux/oxc-configs@0.4.0': + resolution: {integrity: sha512-iFwtOJ6b4//hpALzizQckrBwrhhuJ0RIckYvFGJjYodjA1+zJTjmaWKILUmDD6LlqGYGBPQxDfn8pTMx1EM7AA==} engines: {node: '>=22.0.0'} peerDependencies: oxlint: ^1.57.0 @@ -382,124 +386,124 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@oxfmt/binding-android-arm-eabi@0.45.0': - resolution: {integrity: sha512-A/UMxFob1fefCuMeGxQBulGfFE38g2Gm23ynr3u6b+b7fY7/ajGbNsa3ikMIkGMLJW/TRoQaMoP1kME7S+815w==} + '@oxfmt/binding-android-arm-eabi@0.46.0': + resolution: {integrity: sha512-b1doV4WRcJU+BESSlCvCjV+5CEr/T6h0frArAdV26Nir+gGNFNaylvDiiMPfF1pxeV0txZEs38ojzJaxBYg+ng==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [android] - '@oxfmt/binding-android-arm64@0.45.0': - resolution: {integrity: sha512-L63z4uZmHjgvvqvMJD7mwff8aSBkM0+X4uFr6l6U5t6+Qc9DCLVZWIunJ7Gm4fn4zHPdSq6FFQnhu9yqqobxIg==} + '@oxfmt/binding-android-arm64@0.46.0': + resolution: {integrity: sha512-v6+HhjsoV3GO0u2u9jLSAZrvWfTraDxKofUIQ7/ktS7tzS+epVsxdHmeM+XxuNcAY/nWxxU1Sg4JcGTNRXraBA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@oxfmt/binding-darwin-arm64@0.45.0': - resolution: {integrity: sha512-UV34dd623FzqT+outIGndsCA/RBB+qgB3XVQhgmmJ9PJwa37NzPC9qzgKeOhPKxVk2HW+JKldQrVL54zs4Noww==} + '@oxfmt/binding-darwin-arm64@0.46.0': + resolution: {integrity: sha512-3eeooJGrqGIlI5MyryDZsAcKXSmKIgAD4yYtfRrRJzXZ0UTFZtiSveIur56YPrGMYZwT4XyVhHsMqrNwr1XeFA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@oxfmt/binding-darwin-x64@0.45.0': - resolution: {integrity: sha512-pMNJv0CMa1pDefVPeNbuQxibh8ITpWDFEhMC/IBB9Zlu76EbgzYwrzI4Cb11mqX2+rIYN70UTrh3z06TM59ptQ==} + '@oxfmt/binding-darwin-x64@0.46.0': + resolution: {integrity: sha512-QG8BDM0CXWbu84k2SKmCqfEddPQPFiBicwtYnLqHRWZZl57HbtOLRMac/KTq2NO4AEc4ICCBpFxJIV9zcqYfkQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@oxfmt/binding-freebsd-x64@0.45.0': - resolution: {integrity: sha512-xTcRoxbbo61sW2+ZRPeH+vp/o9G8gkdhiVumFU+TpneiPm14c79l6GFlxPXlCE9bNWikigbsrvJw46zCVAQFfg==} + '@oxfmt/binding-freebsd-x64@0.46.0': + resolution: {integrity: sha512-9DdCqS/n2ncu/Chazvt3cpgAjAmIGQDz7hFKSrNItMApyV/Ja9mz3hD4JakIE3nS8PW9smEbPWnb389QLBY4nw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@oxfmt/binding-linux-arm-gnueabihf@0.45.0': - resolution: {integrity: sha512-hWL8Hdni+3U1mPFx1UtWeGp3tNb6EhBAUHRMbKUxVkOp3WwoJbpVO2bfUVbS4PfpledviXXNHSTl1veTa6FhkQ==} + '@oxfmt/binding-linux-arm-gnueabihf@0.46.0': + resolution: {integrity: sha512-Dgs7VeE2jT0LHMhw6tPEt0xQYe54kBqHEovmWsv4FVQlegCOvlIJNx0S8n4vj8WUtpT+Z6BD2HhKJPLglLxvZg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxfmt/binding-linux-arm-musleabihf@0.45.0': - resolution: {integrity: sha512-6Blt/0OBT7vvfQpqYuYbpbFLPqSiaYpEJzUUWhinPEuADypDbtV1+LdjM0vYBNGPvnj85ex7lTerEX6JGcPt9w==} + '@oxfmt/binding-linux-arm-musleabihf@0.46.0': + resolution: {integrity: sha512-Zxn3adhTH13JKnU4xXJj8FeEfF680XjXh3gSShKl57HCMBRde2tUJTgogV/1MSHA80PJEVrDa7r66TLVq3Ia7Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxfmt/binding-linux-arm64-gnu@0.45.0': - resolution: {integrity: sha512-jLjoLfe+hGfjhA8hNBSdw85yCA8ePKq7ME4T+g6P9caQXvmt6IhE2X7iVjnVdkmYUWEzZrxlh4p6RkDmAMJY/A==} + '@oxfmt/binding-linux-arm64-gnu@0.46.0': + resolution: {integrity: sha512-+TWipjrgVM8D7aIdDD0tlr3teLTTvQTn7QTE5BpT10H1Fj82gfdn9X6nn2sDgx/MepuSCfSnzFNJq2paLL0OiA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-arm64-musl@0.45.0': - resolution: {integrity: sha512-XQKXZIKYJC3GQJ8FnD3iMntpw69Wd9kDDK/Xt79p6xnFYlGGxSNv2vIBvRTDg5CKByWFWWZLCRDOXoP/m6YN4g==} + '@oxfmt/binding-linux-arm64-musl@0.46.0': + resolution: {integrity: sha512-aAUPBWJ1lGwwnxZUEDLJ94+Iy6MuwJwPxUgO4sCA5mEEyDk7b+cDQ+JpX1VR150Zoyd+D49gsrUzpUK5h587Eg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@oxfmt/binding-linux-ppc64-gnu@0.45.0': - resolution: {integrity: sha512-+g5RiG+xOkdrCWkKodv407nTvMq4vYM18Uox2MhZBm/YoqFxxJpWKsloskFFG5NU13HGPw1wzYjjOVcyd9moCA==} + '@oxfmt/binding-linux-ppc64-gnu@0.46.0': + resolution: {integrity: sha512-ufBCJukyFX/UDrokP/r6BGDoTInnsDs7bxyzKAgMiZlt2Qu8GPJSJ6Zm6whIiJzKk0naxA8ilwmbO1LMw6Htxw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-riscv64-gnu@0.45.0': - resolution: {integrity: sha512-V7dXKoSyEbWAkkSF4JJNtF+NJZDmJoSarSoP30WCsB3X636Rehd3CvxBj49FIJxEBFWhvcUjGSHVeU8Erck1bQ==} + '@oxfmt/binding-linux-riscv64-gnu@0.46.0': + resolution: {integrity: sha512-eqtlC2YmPqjun76R1gVfGLuKWx7NuEnLEAudZ7n6ipSKbCZTqIKSs1b5Y8K/JHZsRpLkeSmAAjig5HOIg8fQzQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-riscv64-musl@0.45.0': - resolution: {integrity: sha512-Vdelft1sAEYojVGgcODEFXSWYQYlIvoyIGWebKCuUibd1tvS1TjTx413xG2ZLuHpYj45CkN/ztMLMX6jrgqpgg==} + '@oxfmt/binding-linux-riscv64-musl@0.46.0': + resolution: {integrity: sha512-yccVOO2nMXkQLGgy0He3EQEwKD7NF0zEk+/OWmroznkqXyJdN6bfK0LtNnr6/14Bh3FjpYq7bP33l/VloCnxpA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [musl] - '@oxfmt/binding-linux-s390x-gnu@0.45.0': - resolution: {integrity: sha512-RR7xKgNpqwENnK0aYCGYg0JycY2n93J0reNjHyes+I9Gq52dH95x+CBlnlAQHCPfz6FGnKA9HirgUl14WO6o7w==} + '@oxfmt/binding-linux-s390x-gnu@0.46.0': + resolution: {integrity: sha512-aAf7fG23OQCey6VRPj9IeCraoYtpgtx0ZyJ1CXkPyT1wjzBE7c3xtuxHe/AdHaJfVVb/SXpSk8Gl1LzyQupSqw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-x64-gnu@0.45.0': - resolution: {integrity: sha512-U/QQ0+BQNSHxjuXR/utvXnQ50Vu5kUuqEomZvQ1/3mhgbBiMc2WU9q5kZ5WwLp3gnFIx9ibkveoRSe2EZubkqg==} + '@oxfmt/binding-linux-x64-gnu@0.46.0': + resolution: {integrity: sha512-q0JPsTMyJNjYrBvYFDz4WbVsafNZaPCZv4RnFypRotLqpKROtBZcEaXQW4eb9YmvLU3NckVemLJnzkSZSdmOxw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-x64-musl@0.45.0': - resolution: {integrity: sha512-o5TLOUCF0RWQjsIS06yVC+kFgp092/yLe6qBGSUvtnmTVw9gxjpdQSXc3VN5Cnive4K11HNstEZF8ROKHfDFSw==} + '@oxfmt/binding-linux-x64-musl@0.46.0': + resolution: {integrity: sha512-7LsLY9Cw57GPkhSR+duI3mt9baRczK/DtHYSldQ4BEU92da9igBQNl4z7Vq5U9NNPsh1FmpKvv1q9WDtiUQR1A==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@oxfmt/binding-openharmony-arm64@0.45.0': - resolution: {integrity: sha512-RnGcV3HgPuOjsGx/k9oyRNKmOp+NBLGzZTdPDYbc19r7NGeYPplnUU/BfU35bX2Y/O4ejvHxcfkvW2WoYL/gsg==} + '@oxfmt/binding-openharmony-arm64@0.46.0': + resolution: {integrity: sha512-lHiBOz8Duaku7JtRNLlps3j++eOaICPZSd8FCVmTDM4DFOPT71Bjn7g6iar1z7StXlKRweUKxWUs4sA+zWGDXg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@oxfmt/binding-win32-arm64-msvc@0.45.0': - resolution: {integrity: sha512-v3Vj7iKKsUFwt9w5hsqIIoErKVoENC6LoqfDlteOQ5QMDCXihlqLoxpmviUhXnNncg4zV6U9BPwlBbwa+qm4wg==} + '@oxfmt/binding-win32-arm64-msvc@0.46.0': + resolution: {integrity: sha512-/5ktYUliP89RhgC37DBH1x20U5zPSZMy3cMEcO0j3793rbHP9MWsknBwQB6eozRzWmYrh0IFM/p20EbPvDlYlg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@oxfmt/binding-win32-ia32-msvc@0.45.0': - resolution: {integrity: sha512-N8yotPBX6ph0H3toF4AEpdCeVPrdcSetj+8eGiZGsrLsng3bs/Q5HPu4bbSxip5GBPx5hGbGHrZwH4+rcrjhHA==} + '@oxfmt/binding-win32-ia32-msvc@0.46.0': + resolution: {integrity: sha512-3WTnoiuIr8XvV0DIY7SN+1uJSwKf4sPpcbHfobcRT9JutGcLaef/miyBB87jxd3aqH+mS0+G5lsgHuXLUwjjpQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ia32] os: [win32] - '@oxfmt/binding-win32-x64-msvc@0.45.0': - resolution: {integrity: sha512-w5MMTRCK1dpQeRA+HHqXQXyN33DlG/N2LOYxJmaT4fJjcmZrbNnqw7SmIk7I2/a2493PPLZ+2E/Ar6t2iKVMug==} + '@oxfmt/binding-win32-x64-msvc@0.46.0': + resolution: {integrity: sha512-IXxiQpkYnOwNfP23vzwSfhdpxJzyiPTY7eTn6dn3DsriKddESzM8i6kfq9R7CD/PUJwCvQT22NgtygBeug3KoA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] @@ -716,63 +720,63 @@ packages: '@types/unist@3.0.3': resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} - '@typescript-eslint/eslint-plugin@8.58.2': - resolution: {integrity: sha512-aC2qc5thQahutKjP+cl8cgN9DWe3ZUqVko30CMSZHnFEHyhOYoZSzkGtAI2mcwZ38xeImDucI4dnqsHiOYuuCw==} + '@typescript-eslint/eslint-plugin@8.59.0': + resolution: {integrity: sha512-HyAZtpdkgZwpq8Sz3FSUvCR4c+ScbuWa9AksK2Jweub7w4M3yTz4O11AqVJzLYjy/B9ZWPyc81I+mOdJU/bDQw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.58.2 + '@typescript-eslint/parser': ^8.59.0 eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/parser@8.58.2': - resolution: {integrity: sha512-/Zb/xaIDfxeJnvishjGdcR4jmr7S+bda8PKNhRGdljDM+elXhlvN0FyPSsMnLmJUrVG9aPO6dof80wjMawsASg==} + '@typescript-eslint/parser@8.59.0': + resolution: {integrity: sha512-TI1XGwKbDpo9tRW8UDIXCOeLk55qe9ZFGs8MTKU6/M08HWTw52DD/IYhfQtOEhEdPhLMT26Ka/x7p70nd3dzDg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/project-service@8.58.2': - resolution: {integrity: sha512-Cq6UfpZZk15+r87BkIh5rDpi38W4b+Sjnb8wQCPPDDweS/LRCFjCyViEbzHk5Ck3f2QDfgmlxqSa7S7clDtlfg==} + '@typescript-eslint/project-service@8.59.0': + resolution: {integrity: sha512-Lw5ITrR5s5TbC19YSvlr63ZfLaJoU6vtKTHyB0GQOpX0W7d5/Ir6vUahWi/8Sps/nOukZQ0IB3SmlxZnjaKVnw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/scope-manager@8.58.2': - resolution: {integrity: sha512-SgmyvDPexWETQek+qzZnrG6844IaO02UVyOLhI4wpo82dpZJY9+6YZCKAMFzXb7qhx37mFK1QcPQ18tud+vo6Q==} + '@typescript-eslint/scope-manager@8.59.0': + resolution: {integrity: sha512-UzR16Ut8IpA3Mc4DbgAShlPPkVm8xXMWafXxB0BocaVRHs8ZGakAxGRskF7FId3sdk9lgGD73GSFaWmWFDE4dg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.58.2': - resolution: {integrity: sha512-3SR+RukipDvkkKp/d0jP0dyzuls3DbGmwDpVEc5wqk5f38KFThakqAAO0XMirWAE+kT00oTauTbzMFGPoAzB0A==} + '@typescript-eslint/tsconfig-utils@8.59.0': + resolution: {integrity: sha512-91Sbl3s4Kb3SybliIY6muFBmHVv+pYXfybC4Oolp3dvk8BvIE3wOPc+403CWIT7mJNkfQRGtdqghzs2+Z91Tqg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/type-utils@8.58.2': - resolution: {integrity: sha512-Z7EloNR/B389FvabdGeTo2XMs4W9TjtPiO9DAsmT0yom0bwlPyRjkJ1uCdW1DvrrrYP50AJZ9Xc3sByZA9+dcg==} + '@typescript-eslint/type-utils@8.59.0': + resolution: {integrity: sha512-3TRiZaQSltGqGeNrJzzr1+8YcEobKH9rHnqIp/1psfKFmhRQDNMGP5hBufanYTGznwShzVLs3Mz+gDN7HkWfXg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/types@8.58.2': - resolution: {integrity: sha512-9TukXyATBQf/Jq9AMQXfvurk+G5R2MwfqQGDR2GzGz28HvY/lXNKGhkY+6IOubwcquikWk5cjlgPvD2uAA7htQ==} + '@typescript-eslint/types@8.59.0': + resolution: {integrity: sha512-nLzdsT1gdOgFxxxwrlNVUBzSNBEEHJ86bblmk4QAS6stfig7rcJzWKqCyxFy3YRRHXDWEkb2NralA1nOYkkm/A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.58.2': - resolution: {integrity: sha512-ELGuoofuhhoCvNbQjFFiobFcGgcDCEm0ThWdmO4Z0UzLqPXS3KFvnEZ+SHewwOYHjM09tkzOWXNTv9u6Gqtyuw==} + '@typescript-eslint/typescript-estree@8.59.0': + resolution: {integrity: sha512-O9Re9P1BmBLFJyikRbQpLku/QA3/AueZNO9WePLBwQrvkixTmDe8u76B6CYUAITRl/rHawggEqUGn5QIkVRLMw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/utils@8.58.2': - resolution: {integrity: sha512-QZfjHNEzPY8+l0+fIXMvuQ2sJlplB4zgDZvA+NmvZsZv3EQwOcc1DuIU1VJUTWZ/RKouBMhDyNaBMx4sWvrzRA==} + '@typescript-eslint/utils@8.59.0': + resolution: {integrity: sha512-I1R/K7V07XsMJ12Oaxg/O9GfrysGTmCRhvZJBv0RE0NcULMzjqVpR5kRRQjHsz3J/bElU7HwCO7zkqL+MSUz+g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/visitor-keys@8.58.2': - resolution: {integrity: sha512-f1WO2Lx8a9t8DARmcWAUPJbu0G20bJlj8L4z72K00TMeJAoyLr/tHhI/pzYBLrR4dXWkcxO1cWYZEOX8DKHTqA==} + '@typescript-eslint/visitor-keys@8.59.0': + resolution: {integrity: sha512-/uejZt4dSere1bx12WLlPfv8GktzcaDtuJ7s42/HEZ5zGj9oxRaD4bj7qwSunXkf+pbAhFt2zjpHYUiT5lHf0Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@unrs/resolver-binding-android-arm-eabi@1.11.1': @@ -895,13 +899,13 @@ packages: engines: {node: '>=0.4.0'} hasBin: true - actions-up@1.13.0: - resolution: {integrity: sha512-tXrv8AWWtjtbLXslcdPsFRnvedyBAYHfIyqHyUm3yxNvcuRPMJHMoLR8t9keCrfaTyTFh0CzMBuK1ODrsa4Kzw==} + actions-up@1.14.1: + resolution: {integrity: sha512-x/AfoJqpumNNEfFLLnzOZ/OxOuiiaEI8xDmNSEwCLJUZFkRZGHkS8OU91WztUh3jp50gvIN74PJDMEJZI4i4xQ==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true - ajv@6.14.0: - resolution: {integrity: sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==} + ajv@6.15.0: + resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==} ansi-colors@4.1.3: resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} @@ -1048,14 +1052,14 @@ packages: resolution: {integrity: sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw==} engines: {node: '>=0.3.1'} - dompurify@3.4.0: - resolution: {integrity: sha512-nolgK9JcaUXMSmW+j1yaSvaEaoXYHwWyGJlkoCTghc97KgGDDSnpoU/PlEnw63Ah+TGKFOyY+X5LnxaWbCSfXg==} + dompurify@3.4.1: + resolution: {integrity: sha512-JahakDAIg1gyOm7dlgWSDjV4n7Ip2PKR55NIT6jrMfIgLFgWo81vdr1/QGqWtFNRqXP9UV71oVePtjqS2ebnPw==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - enhanced-resolve@5.20.1: - resolution: {integrity: sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA==} + enhanced-resolve@5.21.0: + resolution: {integrity: sha512-otxSQPw4lkOZWkHpB3zaEQs6gWYEsmX4xQF68ElXC/TWvGxGMSGOvoNbaLXm6/cS/fSfHtsEdw90y20PCd+sCA==} engines: {node: '>=10.13.0'} enquirer@2.4.1: @@ -1122,8 +1126,8 @@ packages: peerDependencies: eslint: '>=8.23.0' - eslint-plugin-perfectionist@5.8.0: - resolution: {integrity: sha512-k8uIptWIxkUclonCFGyDzgYs9NI+Qh0a7cUXS3L7IYZDEsjXuimFBVbxXPQQngWqMiaxJRwbtYB4smMGMqF+cw==} + eslint-plugin-perfectionist@5.9.0: + resolution: {integrity: sha512-8TWzg02zmnBdZwCkWLi8jhzqXI+fE7Z/RwV8SL6xD45tJ8Bp3wGuYL2XtQgfe/Wd0eBqOUX+s6ey73IyszvKTA==} engines: {node: ^20.0.0 || >=22.0.0} peerDependencies: eslint: ^8.45.0 || ^9.0.0 || ^10.0.0 @@ -1148,8 +1152,8 @@ packages: resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - eslint@10.2.0: - resolution: {integrity: sha512-+L0vBFYGIpSNIt/KWTpFonPrqYvgKw1eUI5Vn7mEogrQcWtWYtNQ7dNqC+px/J0idT3BAkiWrhfS7k+Tum8TUA==} + eslint@10.2.1: + resolution: {integrity: sha512-wiyGaKsDgqXvF40P8mDwiUp/KQjE1FdrIEJsM8PZ3XCiniTMXS3OHWWUe5FI5agoCnr8x4xPrTDZuxsBlNHl+Q==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} hasBin: true peerDependencies: @@ -1237,8 +1241,8 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - get-tsconfig@4.13.7: - resolution: {integrity: sha512-7tN6rFgBlMgpBML5j8typ92BKFi2sFQvIdpAqLA2beia5avZDrMs0FLZiM5etShWq5irVyGcGMEA1jcDaK7A/Q==} + get-tsconfig@4.14.0: + resolution: {integrity: sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==} glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} @@ -1274,8 +1278,8 @@ packages: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + hasown@2.0.3: + resolution: {integrity: sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==} engines: {node: '>= 0.4'} highlight.js@11.11.1: @@ -1383,8 +1387,8 @@ packages: make-error@1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - marked@17.0.6: - resolution: {integrity: sha512-gB0gkNafnonOw0obSTEGZTT86IuhILt2Wfx0mWH/1Au83kybTayroZ/V6nS25mN7u8ASy+5fMhgB3XPNrOZdmA==} + marked@18.0.2: + resolution: {integrity: sha512-NsmlUYBS/Zg57rgDWMYdnre6OTj4e+qq/JS2ot3KrYLSoHLw+sDu0Nm1ZGpRgYAq6c+b1ekaY5NzVchMCQnzcg==} engines: {node: '>= 20'} hasBin: true @@ -1414,8 +1418,8 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - multiocular@0.8.2: - resolution: {integrity: sha512-OZICP9j79FGWZ8/ugQ57Do7ljnWUtcLv13/ic4tP0OKw7XauWjYsA9Cv5q7Qc9lG6kWy8A4hMHw8J0ln1v359g==} + multiocular@0.8.3: + resolution: {integrity: sha512-kOhHYiuAIhWLdCdUmPtpXMU2HR8M8Xg+ISOt6P2A/XhC5LuRd7KH61r3lGXS8pfQLqkf3BQ1ZndvlvrU3thGTg==} engines: {node: ^22.16.0 || >=24.0.0} hasBin: true @@ -1431,8 +1435,8 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - nanoid@5.1.7: - resolution: {integrity: sha512-ua3NDgISf6jdwezAheMOk4mbE1LXjm1DfMUDMuJf4AqxLFK3ccGpgWizwa5YV7Yz9EpXwEaWoRXSb/BnV0t5dQ==} + nanoid@5.1.9: + resolution: {integrity: sha512-ZUvP7KeBLe3OZ1ypw6dI/TzYJuvHP77IM4Ry73waSQTLn8/g8rpdjfyVAh7t1/+FjBtG4lCP42MEbDxOsRpBMw==} engines: {node: ^18 || >=20} hasBin: true @@ -1443,8 +1447,8 @@ packages: resolution: {integrity: sha512-wvmmALNstRRhLhy7RV11NCRY2k1zxstImiju4VyyKNNRIKDVjyBtmEd/Q4G82/3dN4VSTe+0PRR3DUAASSbEEQ==} engines: {node: ^8.0.0 || ^10.0.0 || ^12.0.0 || ^14.0.0 || ^16.0.0 || ^18.0.0 || >=20.0.0} - nanostores@1.2.0: - resolution: {integrity: sha512-F0wCzbsH80G7XXo0Jd9/AVQC7ouWY6idUCTnMwW5t/Rv9W8qmO6endavDwg7TNp5GbugwSukFMVZqzPSrSMndg==} + nanostores@1.3.0: + resolution: {integrity: sha512-XPUa/jz+P1oJvN9VBxw4L9MtdFfaH3DAryqPssqhb2kXjmb9npz0dly6rCsgFWOPr4Yg9mTfM3MDZgZZ+7A3lA==} engines: {node: ^20.0.0 || >=22.0.0} napi-postinstall@0.3.4: @@ -1467,8 +1471,8 @@ packages: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} - oxfmt@0.45.0: - resolution: {integrity: sha512-0o/COoN9fY50bjVeM7PQsNgbhndKurBIeTIcspW033OumksjJJmIVDKjAk5HMwU/GHTxSOdGDdhJ6BRzGPmsHg==} + oxfmt@0.46.0: + resolution: {integrity: sha512-CopwJOwPAjZ9p76fCvz+mSOJTw9/NY3cSksZK3VO/bUQ8UoEcketNgUuYS0UB3p+R9XnXe7wGGXUmyFxc7QxJA==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true @@ -1632,8 +1636,8 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - tapable@2.3.2: - resolution: {integrity: sha512-1MOpMXuhGzGL5TTCZFItxCc0AARf1EZFQkGqMm7ERKj8+Hgr5oLvJOVFcC+lRmR8hCe2S3jC4T5D7Vg/d7/fhA==} + tapable@2.3.3: + resolution: {integrity: sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==} engines: {node: '>=6'} test-exclude@8.0.0: @@ -1688,8 +1692,8 @@ packages: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} - typescript-eslint@8.58.2: - resolution: {integrity: sha512-V8iSng9mRbdZjl54VJ9NKr6ZB+dW0J3TzRXRGcSbLIej9jV86ZRtlYeTKDR/QLxXykocJ5icNzbsl2+5TzIvcQ==} + typescript-eslint@8.59.0: + resolution: {integrity: sha512-BU3ONW9X+v90EcCH9ZS6LMackcVtxRLlI3XrYyqZIwVSHIk7Qf7bFw1z0M9Q0IUxhTMZCf8piY9hTYaNEIASrw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 @@ -1795,13 +1799,13 @@ snapshots: dependencies: '@jridgewell/trace-mapping': 0.3.9 - '@emnapi/core@1.9.2': + '@emnapi/core@1.10.0': dependencies: '@emnapi/wasi-threads': 1.2.1 tslib: 2.8.1 optional: true - '@emnapi/runtime@1.9.2': + '@emnapi/runtime@1.10.0': dependencies: tslib: 2.8.1 optional: true @@ -1889,9 +1893,9 @@ snapshots: '@esbuild/win32-x64@0.28.0': optional: true - '@eslint-community/eslint-utils@4.9.1(eslint@10.2.0(jiti@2.6.1))': + '@eslint-community/eslint-utils@4.9.1(eslint@10.2.1(jiti@2.6.1))': dependencies: - eslint: 10.2.0(jiti@2.6.1) + eslint: 10.2.1(jiti@2.6.1) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.2': {} @@ -1914,7 +1918,7 @@ snapshots: '@eslint/eslintrc@3.3.5': dependencies: - ajv: 6.14.0 + ajv: 6.15.0 debug: 4.4.3 espree: 10.4.0 globals: 14.0.0 @@ -1933,13 +1937,18 @@ snapshots: '@eslint/core': 1.2.1 levn: 0.4.1 - '@humanfs/core@0.19.1': {} + '@humanfs/core@0.19.2': + dependencies: + '@humanfs/types': 0.15.0 - '@humanfs/node@0.16.7': + '@humanfs/node@0.16.8': dependencies: - '@humanfs/core': 0.19.1 + '@humanfs/core': 0.19.2 + '@humanfs/types': 0.15.0 '@humanwhocodes/retry': 0.4.3 + '@humanfs/types@0.15.0': {} + '@humanwhocodes/module-importer@1.0.1': {} '@humanwhocodes/retry@0.4.3': {} @@ -1968,23 +1977,23 @@ snapshots: dependencies: nanoevents: 9.1.0 - '@logux/eslint-config@57.1.0(@typescript-eslint/utils@8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3)': + '@logux/eslint-config@57.1.0(@typescript-eslint/utils@8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@eslint/eslintrc': 3.3.5 - eslint: 10.2.0(jiti@2.6.1) - eslint-plugin-import-x: 4.16.2(@typescript-eslint/utils@8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@10.2.0(jiti@2.6.1)) - eslint-plugin-n: 17.24.0(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3) - eslint-plugin-perfectionist: 5.8.0(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3) + eslint: 10.2.1(jiti@2.6.1) + eslint-plugin-import-x: 4.16.2(@typescript-eslint/utils@8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@10.2.1(jiti@2.6.1)) + eslint-plugin-n: 17.24.0(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3) + eslint-plugin-perfectionist: 5.9.0(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3) eslint-plugin-prefer-let: 4.2.2 globals: 17.5.0 - typescript-eslint: 8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3) + typescript-eslint: 8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3) transitivePeerDependencies: - '@typescript-eslint/utils' - eslint-import-resolver-node - supports-color - typescript - '@logux/oxc-configs@0.3.3(oxlint-tsgolint@0.18.1)(oxlint@1.58.0(oxlint-tsgolint@0.18.1))(typescript@5.9.3)': + '@logux/oxc-configs@0.4.0(oxlint-tsgolint@0.18.1)(oxlint@1.58.0(oxlint-tsgolint@0.18.1))(typescript@5.9.3)': dependencies: eslint-plugin-prefer-let: 4.2.2 oxlint: 1.58.0(oxlint-tsgolint@0.18.1) @@ -1998,7 +2007,7 @@ snapshots: cookie: 1.1.1 fastq: 1.20.1 nanoevents: 9.1.0 - nanoid: 5.1.7 + nanoid: 5.1.9 tinyglobby: 0.2.16 url-pattern: 1.0.3 ws: 8.20.0 @@ -2008,8 +2017,8 @@ snapshots: '@napi-rs/wasm-runtime@0.2.12': dependencies: - '@emnapi/core': 1.9.2 - '@emnapi/runtime': 1.9.2 + '@emnapi/core': 1.10.0 + '@emnapi/runtime': 1.10.0 '@tybys/wasm-util': 0.10.1 optional: true @@ -2025,61 +2034,61 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.20.1 - '@oxfmt/binding-android-arm-eabi@0.45.0': + '@oxfmt/binding-android-arm-eabi@0.46.0': optional: true - '@oxfmt/binding-android-arm64@0.45.0': + '@oxfmt/binding-android-arm64@0.46.0': optional: true - '@oxfmt/binding-darwin-arm64@0.45.0': + '@oxfmt/binding-darwin-arm64@0.46.0': optional: true - '@oxfmt/binding-darwin-x64@0.45.0': + '@oxfmt/binding-darwin-x64@0.46.0': optional: true - '@oxfmt/binding-freebsd-x64@0.45.0': + '@oxfmt/binding-freebsd-x64@0.46.0': optional: true - '@oxfmt/binding-linux-arm-gnueabihf@0.45.0': + '@oxfmt/binding-linux-arm-gnueabihf@0.46.0': optional: true - '@oxfmt/binding-linux-arm-musleabihf@0.45.0': + '@oxfmt/binding-linux-arm-musleabihf@0.46.0': optional: true - '@oxfmt/binding-linux-arm64-gnu@0.45.0': + '@oxfmt/binding-linux-arm64-gnu@0.46.0': optional: true - '@oxfmt/binding-linux-arm64-musl@0.45.0': + '@oxfmt/binding-linux-arm64-musl@0.46.0': optional: true - '@oxfmt/binding-linux-ppc64-gnu@0.45.0': + '@oxfmt/binding-linux-ppc64-gnu@0.46.0': optional: true - '@oxfmt/binding-linux-riscv64-gnu@0.45.0': + '@oxfmt/binding-linux-riscv64-gnu@0.46.0': optional: true - '@oxfmt/binding-linux-riscv64-musl@0.45.0': + '@oxfmt/binding-linux-riscv64-musl@0.46.0': optional: true - '@oxfmt/binding-linux-s390x-gnu@0.45.0': + '@oxfmt/binding-linux-s390x-gnu@0.46.0': optional: true - '@oxfmt/binding-linux-x64-gnu@0.45.0': + '@oxfmt/binding-linux-x64-gnu@0.46.0': optional: true - '@oxfmt/binding-linux-x64-musl@0.45.0': + '@oxfmt/binding-linux-x64-musl@0.46.0': optional: true - '@oxfmt/binding-openharmony-arm64@0.45.0': + '@oxfmt/binding-openharmony-arm64@0.46.0': optional: true - '@oxfmt/binding-win32-arm64-msvc@0.45.0': + '@oxfmt/binding-win32-arm64-msvc@0.46.0': optional: true - '@oxfmt/binding-win32-ia32-msvc@0.45.0': + '@oxfmt/binding-win32-ia32-msvc@0.46.0': optional: true - '@oxfmt/binding-win32-x64-msvc@0.45.0': + '@oxfmt/binding-win32-x64-msvc@0.46.0': optional: true '@oxlint-tsgolint/darwin-arm64@0.18.1': @@ -2166,7 +2175,7 @@ snapshots: '@size-limit/esbuild@12.1.0(size-limit@12.1.0(jiti@2.6.1))': dependencies: esbuild: 0.28.0 - nanoid: 5.1.7 + nanoid: 5.1.9 size-limit: 12.1.0(jiti@2.6.1) '@size-limit/file@12.1.0(size-limit@12.1.0(jiti@2.6.1))': @@ -2209,15 +2218,15 @@ snapshots: '@types/unist@3.0.3': {} - '@typescript-eslint/eslint-plugin@8.58.2(@typescript-eslint/parser@8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3))(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.59.0(@typescript-eslint/parser@8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3))(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.58.2 - '@typescript-eslint/type-utils': 8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/utils': 8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.58.2 - eslint: 10.2.0(jiti@2.6.1) + '@typescript-eslint/parser': 8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.59.0 + '@typescript-eslint/type-utils': 8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.59.0 + eslint: 10.2.1(jiti@2.6.1) ignore: 7.0.5 natural-compare: 1.4.0 ts-api-utils: 2.5.0(typescript@5.9.3) @@ -2225,56 +2234,56 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/parser@8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@typescript-eslint/scope-manager': 8.58.2 - '@typescript-eslint/types': 8.58.2 - '@typescript-eslint/typescript-estree': 8.58.2(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.58.2 + '@typescript-eslint/scope-manager': 8.59.0 + '@typescript-eslint/types': 8.59.0 + '@typescript-eslint/typescript-estree': 8.59.0(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.59.0 debug: 4.4.3 - eslint: 10.2.0(jiti@2.6.1) + eslint: 10.2.1(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.58.2(typescript@5.9.3)': + '@typescript-eslint/project-service@8.59.0(typescript@5.9.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.58.2(typescript@5.9.3) - '@typescript-eslint/types': 8.58.2 + '@typescript-eslint/tsconfig-utils': 8.59.0(typescript@5.9.3) + '@typescript-eslint/types': 8.59.0 debug: 4.4.3 typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.58.2': + '@typescript-eslint/scope-manager@8.59.0': dependencies: - '@typescript-eslint/types': 8.58.2 - '@typescript-eslint/visitor-keys': 8.58.2 + '@typescript-eslint/types': 8.59.0 + '@typescript-eslint/visitor-keys': 8.59.0 - '@typescript-eslint/tsconfig-utils@8.58.2(typescript@5.9.3)': + '@typescript-eslint/tsconfig-utils@8.59.0(typescript@5.9.3)': dependencies: typescript: 5.9.3 - '@typescript-eslint/type-utils@8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/type-utils@8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@typescript-eslint/types': 8.58.2 - '@typescript-eslint/typescript-estree': 8.58.2(typescript@5.9.3) - '@typescript-eslint/utils': 8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/types': 8.59.0 + '@typescript-eslint/typescript-estree': 8.59.0(typescript@5.9.3) + '@typescript-eslint/utils': 8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3) debug: 4.4.3 - eslint: 10.2.0(jiti@2.6.1) + eslint: 10.2.1(jiti@2.6.1) ts-api-utils: 2.5.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.58.2': {} + '@typescript-eslint/types@8.59.0': {} - '@typescript-eslint/typescript-estree@8.58.2(typescript@5.9.3)': + '@typescript-eslint/typescript-estree@8.59.0(typescript@5.9.3)': dependencies: - '@typescript-eslint/project-service': 8.58.2(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.58.2(typescript@5.9.3) - '@typescript-eslint/types': 8.58.2 - '@typescript-eslint/visitor-keys': 8.58.2 + '@typescript-eslint/project-service': 8.59.0(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.59.0(typescript@5.9.3) + '@typescript-eslint/types': 8.59.0 + '@typescript-eslint/visitor-keys': 8.59.0 debug: 4.4.3 minimatch: 10.2.5 semver: 7.7.4 @@ -2284,20 +2293,20 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/utils@8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.0(jiti@2.6.1)) - '@typescript-eslint/scope-manager': 8.58.2 - '@typescript-eslint/types': 8.58.2 - '@typescript-eslint/typescript-estree': 8.58.2(typescript@5.9.3) - eslint: 10.2.0(jiti@2.6.1) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.1(jiti@2.6.1)) + '@typescript-eslint/scope-manager': 8.59.0 + '@typescript-eslint/types': 8.59.0 + '@typescript-eslint/typescript-estree': 8.59.0(typescript@5.9.3) + eslint: 10.2.1(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.58.2': + '@typescript-eslint/visitor-keys@8.59.0': dependencies: - '@typescript-eslint/types': 8.58.2 + '@typescript-eslint/types': 8.59.0 eslint-visitor-keys: 5.0.1 '@unrs/resolver-binding-android-arm-eabi@1.11.1': @@ -2371,7 +2380,7 @@ snapshots: acorn@8.16.0: {} - actions-up@1.13.0: + actions-up@1.14.1: dependencies: cac: 7.0.0 enquirer: 2.4.1 @@ -2380,7 +2389,7 @@ snapshots: semver: 7.7.4 yaml: 2.8.3 - ajv@6.14.0: + ajv@6.15.0: dependencies: fast-deep-equal: 3.1.3 fast-json-stable-stringify: 2.1.0 @@ -2509,16 +2518,16 @@ snapshots: diff@8.0.4: {} - dompurify@3.4.0: + dompurify@3.4.1: optionalDependencies: '@types/trusted-types': 2.0.7 emoji-regex@8.0.0: {} - enhanced-resolve@5.20.1: + enhanced-resolve@5.21.0: dependencies: graceful-fs: 4.2.11 - tapable: 2.3.2 + tapable: 2.3.3 enquirer@2.4.1: dependencies: @@ -2561,14 +2570,14 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-compat-utils@0.5.1(eslint@10.2.0(jiti@2.6.1)): + eslint-compat-utils@0.5.1(eslint@10.2.1(jiti@2.6.1)): dependencies: - eslint: 10.2.0(jiti@2.6.1) + eslint: 10.2.1(jiti@2.6.1) semver: 7.7.4 eslint-import-context@0.1.9(unrs-resolver@1.11.1): dependencies: - get-tsconfig: 4.13.7 + get-tsconfig: 4.14.0 stable-hash-x: 0.2.0 optionalDependencies: unrs-resolver: 1.11.1 @@ -2582,20 +2591,20 @@ snapshots: - supports-color optional: true - eslint-plugin-es-x@7.8.0(eslint@10.2.0(jiti@2.6.1)): + eslint-plugin-es-x@7.8.0(eslint@10.2.1(jiti@2.6.1)): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.0(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.1(jiti@2.6.1)) '@eslint-community/regexpp': 4.12.2 - eslint: 10.2.0(jiti@2.6.1) - eslint-compat-utils: 0.5.1(eslint@10.2.0(jiti@2.6.1)) + eslint: 10.2.1(jiti@2.6.1) + eslint-compat-utils: 0.5.1(eslint@10.2.1(jiti@2.6.1)) - eslint-plugin-import-x@4.16.2(@typescript-eslint/utils@8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@10.2.0(jiti@2.6.1)): + eslint-plugin-import-x@4.16.2(@typescript-eslint/utils@8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@10.2.1(jiti@2.6.1)): dependencies: '@package-json/types': 0.0.12 - '@typescript-eslint/types': 8.58.2 + '@typescript-eslint/types': 8.59.0 comment-parser: 1.4.6 debug: 4.4.3 - eslint: 10.2.0(jiti@2.6.1) + eslint: 10.2.1(jiti@2.6.1) eslint-import-context: 0.1.9(unrs-resolver@1.11.1) is-glob: 4.0.3 minimatch: 10.2.5 @@ -2603,18 +2612,18 @@ snapshots: stable-hash-x: 0.2.0 unrs-resolver: 1.11.1 optionalDependencies: - '@typescript-eslint/utils': 8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3) eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color - eslint-plugin-n@17.24.0(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3): + eslint-plugin-n@17.24.0(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.0(jiti@2.6.1)) - enhanced-resolve: 5.20.1 - eslint: 10.2.0(jiti@2.6.1) - eslint-plugin-es-x: 7.8.0(eslint@10.2.0(jiti@2.6.1)) - get-tsconfig: 4.13.7 + '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.1(jiti@2.6.1)) + enhanced-resolve: 5.21.0 + eslint: 10.2.1(jiti@2.6.1) + eslint-plugin-es-x: 7.8.0(eslint@10.2.1(jiti@2.6.1)) + get-tsconfig: 4.14.0 globals: 15.15.0 globrex: 0.1.2 ignore: 5.3.2 @@ -2623,10 +2632,10 @@ snapshots: transitivePeerDependencies: - typescript - eslint-plugin-perfectionist@5.8.0(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3): + eslint-plugin-perfectionist@5.9.0(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@typescript-eslint/utils': 8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3) - eslint: 10.2.0(jiti@2.6.1) + '@typescript-eslint/utils': 8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3) + eslint: 10.2.1(jiti@2.6.1) natural-orderby: 5.0.0 transitivePeerDependencies: - supports-color @@ -2649,19 +2658,19 @@ snapshots: eslint-visitor-keys@5.0.1: {} - eslint@10.2.0(jiti@2.6.1): + eslint@10.2.1(jiti@2.6.1): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.0(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.1(jiti@2.6.1)) '@eslint-community/regexpp': 4.12.2 '@eslint/config-array': 0.23.5 '@eslint/config-helpers': 0.5.5 '@eslint/core': 1.2.1 '@eslint/plugin-kit': 0.7.1 - '@humanfs/node': 0.16.7 + '@humanfs/node': 0.16.8 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.3 '@types/estree': 1.0.8 - ajv: 6.14.0 + ajv: 6.15.0 cross-spawn: 7.0.6 debug: 4.4.3 escape-string-regexp: 4.0.0 @@ -2762,7 +2771,7 @@ snapshots: get-caller-file@2.0.5: {} - get-tsconfig@4.13.7: + get-tsconfig@4.14.0: dependencies: resolve-pkg-maps: 1.0.0 @@ -2792,7 +2801,7 @@ snapshots: has-flag@4.0.0: {} - hasown@2.0.2: + hasown@2.0.3: dependencies: function-bind: 1.1.2 optional: true @@ -2814,7 +2823,7 @@ snapshots: is-core-module@2.16.1: dependencies: - hasown: 2.0.2 + hasown: 2.0.3 optional: true is-extglob@2.1.1: {} @@ -2880,7 +2889,7 @@ snapshots: make-error@1.3.6: {} - marked@17.0.6: {} + marked@18.0.2: {} merge2@1.4.1: {} @@ -2903,14 +2912,14 @@ snapshots: ms@2.1.3: {} - multiocular@0.8.2: + multiocular@0.8.3: dependencies: '@logux/server': 0.14.0 diff2html: 3.4.56 - dompurify: 3.4.0 + dompurify: 3.4.1 highlight.js: 11.11.1 - marked: 17.0.6 - nanostores: 1.2.0 + marked: 18.0.2 + nanostores: 1.3.0 yaml: 2.8.3 transitivePeerDependencies: - bufferutil @@ -2922,7 +2931,7 @@ snapshots: nanoid@3.3.11: {} - nanoid@5.1.7: {} + nanoid@5.1.9: {} nanospinner@1.2.2: dependencies: @@ -2930,7 +2939,7 @@ snapshots: nanospy@1.0.0: {} - nanostores@1.2.0: {} + nanostores@1.3.0: {} napi-postinstall@0.3.4: {} @@ -2951,29 +2960,29 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.5 - oxfmt@0.45.0: + oxfmt@0.46.0: dependencies: tinypool: 2.1.0 optionalDependencies: - '@oxfmt/binding-android-arm-eabi': 0.45.0 - '@oxfmt/binding-android-arm64': 0.45.0 - '@oxfmt/binding-darwin-arm64': 0.45.0 - '@oxfmt/binding-darwin-x64': 0.45.0 - '@oxfmt/binding-freebsd-x64': 0.45.0 - '@oxfmt/binding-linux-arm-gnueabihf': 0.45.0 - '@oxfmt/binding-linux-arm-musleabihf': 0.45.0 - '@oxfmt/binding-linux-arm64-gnu': 0.45.0 - '@oxfmt/binding-linux-arm64-musl': 0.45.0 - '@oxfmt/binding-linux-ppc64-gnu': 0.45.0 - '@oxfmt/binding-linux-riscv64-gnu': 0.45.0 - '@oxfmt/binding-linux-riscv64-musl': 0.45.0 - '@oxfmt/binding-linux-s390x-gnu': 0.45.0 - '@oxfmt/binding-linux-x64-gnu': 0.45.0 - '@oxfmt/binding-linux-x64-musl': 0.45.0 - '@oxfmt/binding-openharmony-arm64': 0.45.0 - '@oxfmt/binding-win32-arm64-msvc': 0.45.0 - '@oxfmt/binding-win32-ia32-msvc': 0.45.0 - '@oxfmt/binding-win32-x64-msvc': 0.45.0 + '@oxfmt/binding-android-arm-eabi': 0.46.0 + '@oxfmt/binding-android-arm64': 0.46.0 + '@oxfmt/binding-darwin-arm64': 0.46.0 + '@oxfmt/binding-darwin-x64': 0.46.0 + '@oxfmt/binding-freebsd-x64': 0.46.0 + '@oxfmt/binding-linux-arm-gnueabihf': 0.46.0 + '@oxfmt/binding-linux-arm-musleabihf': 0.46.0 + '@oxfmt/binding-linux-arm64-gnu': 0.46.0 + '@oxfmt/binding-linux-arm64-musl': 0.46.0 + '@oxfmt/binding-linux-ppc64-gnu': 0.46.0 + '@oxfmt/binding-linux-riscv64-gnu': 0.46.0 + '@oxfmt/binding-linux-riscv64-musl': 0.46.0 + '@oxfmt/binding-linux-s390x-gnu': 0.46.0 + '@oxfmt/binding-linux-x64-gnu': 0.46.0 + '@oxfmt/binding-linux-x64-musl': 0.46.0 + '@oxfmt/binding-openharmony-arm64': 0.46.0 + '@oxfmt/binding-win32-arm64-msvc': 0.46.0 + '@oxfmt/binding-win32-ia32-msvc': 0.46.0 + '@oxfmt/binding-win32-x64-msvc': 0.46.0 oxlint-tsgolint@0.18.1: optionalDependencies: @@ -3120,7 +3129,7 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: optional: true - tapable@2.3.2: {} + tapable@2.3.3: {} test-exclude@8.0.0: dependencies: @@ -3175,13 +3184,13 @@ snapshots: dependencies: prelude-ls: 1.2.1 - typescript-eslint@8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3): + typescript-eslint@8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.58.2(@typescript-eslint/parser@8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3))(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/parser': 8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/typescript-estree': 8.58.2(typescript@5.9.3) - '@typescript-eslint/utils': 8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@5.9.3) - eslint: 10.2.0(jiti@2.6.1) + '@typescript-eslint/eslint-plugin': 8.59.0(@typescript-eslint/parser@8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3))(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.59.0(typescript@5.9.3) + '@typescript-eslint/utils': 8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3) + eslint: 10.2.1(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color diff --git a/test/container.test.ts b/test/container.test.ts index 9e8f22402..0035aa1cf 100755 --- a/test/container.test.ts +++ b/test/container.test.ts @@ -551,7 +551,7 @@ test('append() move node on insert', () => { let a = parse('a{}') let b = parse('b{}') - b.append(a.first as Rule) + b.append(a.first) let bLast = b.last as Rule bLast.selector = 'b a' @@ -666,13 +666,13 @@ test('insertBefore() has defined way of adding newlines', () => { is(root.toString(), 'c {}b {}other {}a {}') root = parse('other {}\na {}') - root.insertBefore(root.nodes[1] as Rule, 'b {}') - root.insertBefore(root.nodes[1] as Rule, 'c {}') + root.insertBefore(root.nodes[1], 'b {}') + root.insertBefore(root.nodes[1], 'c {}') is(root.toString(), 'other {}\nc {}\nb {}\na {}') root = parse('other {}a {}') - root.insertBefore(root.nodes[1] as Rule, 'b {}') - root.insertBefore(root.nodes[1] as Rule, 'c {}') + root.insertBefore(root.nodes[1], 'b {}') + root.insertBefore(root.nodes[1], 'c {}') is(root.toString(), 'other {}c {}b {}a {}') }) From 5ca19019495b3fa08205f5fd2eeed57892f9fa3d Mon Sep 17 00:00:00 2001 From: Andrey Sitnik Date: Sun, 26 Apr 2026 12:53:38 +0000 Subject: [PATCH 04/89] Speed up parsing many nested brackets --- lib/tokenize.js | 4 ++++ test/tokenize.test.js | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/tokenize.js b/lib/tokenize.js index 1d412845c..229095dcb 100644 --- a/lib/tokenize.js +++ b/lib/tokenize.js @@ -36,6 +36,7 @@ module.exports = function tokenizer(input, options = {}) { let pos = 0 let buffer = [] let returned = [] + let lastBadParen = -1 function position() { return pos @@ -127,11 +128,14 @@ module.exports = function tokenizer(input, options = {}) { currentToken = ['brackets', css.slice(pos, next + 1), pos, next] pos = next + } else if (pos <= lastBadParen) { + currentToken = ['(', '(', pos] } else { next = css.indexOf(')', pos + 1) content = css.slice(pos, next + 1) if (next === -1 || RE_BAD_BRACKET.test(content)) { + lastBadParen = next === -1 ? length : next currentToken = ['(', '(', pos] } else { currentToken = ['brackets', content, pos, next] diff --git a/test/tokenize.test.js b/test/tokenize.test.js index e285c7ceb..82c45be75 100755 --- a/test/tokenize.test.js +++ b/test/tokenize.test.js @@ -87,7 +87,8 @@ test('tokenizes square brackets', () => { test('tokenizes complicated brackets', () => { run('(())("")(/**/)(\\\\)(\n)(', [ ['(', '(', 0], - ['brackets', '()', 1, 2], + ['(', '(', 1], + [')', ')', 2], [')', ')', 3], ['(', '(', 4], ['string', '""', 5, 6], From 2502f750307acde733a39f9dfd4ef3cf6c6b734d Mon Sep 17 00:00:00 2001 From: Andrey Sitnik Date: Sun, 26 Apr 2026 12:55:32 +0000 Subject: [PATCH 05/89] Release 8.5.11 version --- CHANGELOG.md | 4 ++++ lib/processor.js | 2 +- package.json | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index aee09ae08..73e39863c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ This project adheres to [Semantic Versioning](https://semver.org/). +## 8.5.11 + +- Fixed nested brackets parsing performance. + ## 8.5.10 - Fixed XSS via unescaped `` in non-bundler cases (by @TharVid). diff --git a/lib/processor.js b/lib/processor.js index 5eda6c410..869def3ec 100644 --- a/lib/processor.js +++ b/lib/processor.js @@ -7,7 +7,7 @@ let Root = require('./root') class Processor { constructor(plugins = []) { - this.version = '8.5.10' + this.version = '8.5.11' this.plugins = this.normalize(plugins) } diff --git a/package.json b/package.json index 6ab900d00..60c9dc849 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "postcss", - "version": "8.5.10", + "version": "8.5.11", "description": "Tool for transforming styles with JS plugins", "keywords": [ "css", From 233fb264ea4c37f9e2d7b64b2726e6d23fd02327 Mon Sep 17 00:00:00 2001 From: Andrey Sitnik Date: Sun, 26 Apr 2026 12:56:49 +0000 Subject: [PATCH 06/89] Mention original author of the solution --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 73e39863c..a13411f3f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,7 @@ This project adheres to [Semantic Versioning](https://semver.org/). ## 8.5.11 -- Fixed nested brackets parsing performance. +- Fixed nested brackets parsing performance (by @offset). ## 8.5.10 From aaec7b78b3ce2792585b4b300ef1bd5dd5b3e8ad Mon Sep 17 00:00:00 2001 From: Andrey Sitnik Date: Sun, 26 Apr 2026 13:09:20 +0000 Subject: [PATCH 07/89] Avoid throwing JSON parsing errors for non-JSON source maps --- lib/previous-map.js | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/lib/previous-map.js b/lib/previous-map.js index c6827ffc4..23181f7a5 100644 --- a/lib/previous-map.js +++ b/lib/previous-map.js @@ -30,7 +30,7 @@ class PreviousMap { consumer() { if (!this.consumerCache) { - this.consumerCache = new SourceMapConsumer(this.text) + this.consumerCache = new SourceMapConsumer(this.json ?? this.text) } return this.consumerCache } @@ -124,7 +124,15 @@ class PreviousMap { } else if (this.annotation) { let map = this.annotation if (file) map = join(dirname(file), map) - return this.loadFile(map) + let unknown = this.loadFile(map) + if (unknown) { + try { + this.json = JSON.parse(unknown.replace(/^\)]}'[^\n]*\n/, '')) + } catch (e) { + return undefined + } + } + return unknown } } From c64b7488d2731dfa16213739b42c34faf5a9eba3 Mon Sep 17 00:00:00 2001 From: Andrey Sitnik Date: Sun, 26 Apr 2026 13:44:05 +0000 Subject: [PATCH 08/89] Load only .map source maps --- lib/postcss.d.ts | 5 +++++ lib/previous-map.js | 16 +++++++++++----- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/lib/postcss.d.ts b/lib/postcss.d.ts index 72e3b51b1..667d82092 100644 --- a/lib/postcss.d.ts +++ b/lib/postcss.d.ts @@ -351,6 +351,11 @@ declare namespace postcss { * to generate correct source maps. */ to?: string + + /** + * Disable source map file protections. + */ + unsafeMap?: boolean } export type Postcss = typeof postcss diff --git a/lib/previous-map.js b/lib/previous-map.js index 23181f7a5..50c43f1e8 100644 --- a/lib/previous-map.js +++ b/lib/previous-map.js @@ -16,6 +16,7 @@ function fromBase64(str) { class PreviousMap { constructor(css, opts) { if (opts.map === false) return + if (opts.unsafeMap) this.unsafeMap = true this.loadAnnotation(css) this.inline = this.startWith(this.annotation, 'data:') @@ -30,7 +31,7 @@ class PreviousMap { consumer() { if (!this.consumerCache) { - this.consumerCache = new SourceMapConsumer(this.json ?? this.text) + this.consumerCache = new SourceMapConsumer(this.json || this.text) } return this.consumerCache } @@ -83,7 +84,12 @@ class PreviousMap { } } - loadFile(path) { + loadFile(path, cssFile, trusted) { + if (!trusted && !this.unsafeMap) { + if (!/\.map$/i.test(path)) { + return undefined + } + } this.root = dirname(path) if (existsSync(path)) { this.mapFile = path @@ -100,7 +106,7 @@ class PreviousMap { } else if (typeof prev === 'function') { let prevPath = prev(file) if (prevPath) { - let map = this.loadFile(prevPath) + let map = this.loadFile(prevPath, file, true) if (!map) { throw new Error( 'Unable to load previous source map: ' + prevPath.toString() @@ -124,11 +130,11 @@ class PreviousMap { } else if (this.annotation) { let map = this.annotation if (file) map = join(dirname(file), map) - let unknown = this.loadFile(map) + let unknown = this.loadFile(map, file, false) if (unknown) { try { this.json = JSON.parse(unknown.replace(/^\)]}'[^\n]*\n/, '')) - } catch (e) { + } catch { return undefined } } From 94484cae6d4308167939f2ac888d166bd80dff01 Mon Sep 17 00:00:00 2001 From: Andrey Sitnik Date: Sun, 26 Apr 2026 14:15:20 +0000 Subject: [PATCH 09/89] Try to fix coverage --- lib/previous-map.js | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/previous-map.js b/lib/previous-map.js index 50c43f1e8..3e6053352 100644 --- a/lib/previous-map.js +++ b/lib/previous-map.js @@ -85,6 +85,7 @@ class PreviousMap { } loadFile(path, cssFile, trusted) { + /* c8 ignore next 5 */ if (!trusted && !this.unsafeMap) { if (!/\.map$/i.test(path)) { return undefined From 85c4d7dab830be366f8a96047f9e5b7944e101d8 Mon Sep 17 00:00:00 2001 From: Andrey Sitnik Date: Sun, 26 Apr 2026 14:17:46 +0000 Subject: [PATCH 10/89] Another try to fix coverage --- lib/previous-map.js | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/previous-map.js b/lib/previous-map.js index 3e6053352..3c9d8b971 100644 --- a/lib/previous-map.js +++ b/lib/previous-map.js @@ -134,6 +134,7 @@ class PreviousMap { let unknown = this.loadFile(map, file, false) if (unknown) { try { + /* c8 ignore next 4 */ this.json = JSON.parse(unknown.replace(/^\)]}'[^\n]*\n/, '')) } catch { return undefined From 9bc81c48f054a630c9a2e3868263b7ad4fc15013 Mon Sep 17 00:00:00 2001 From: Andrey Sitnik Date: Sun, 26 Apr 2026 14:22:40 +0000 Subject: [PATCH 11/89] Release 8.5.12 version --- CHANGELOG.md | 5 +++++ lib/processor.js | 2 +- package.json | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a13411f3f..7ef96abfd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,11 @@ This project adheres to [Semantic Versioning](https://semver.org/). +## 8.5.12 + +- Fixed reading any file via user-generated CSS. +- Added `opts.unsafeMap` to disable checks. + ## 8.5.11 - Fixed nested brackets parsing performance (by @offset). diff --git a/lib/processor.js b/lib/processor.js index 869def3ec..a6d1c5da6 100644 --- a/lib/processor.js +++ b/lib/processor.js @@ -7,7 +7,7 @@ let Root = require('./root') class Processor { constructor(plugins = []) { - this.version = '8.5.11' + this.version = '8.5.12' this.plugins = this.normalize(plugins) } diff --git a/package.json b/package.json index 60c9dc849..9f7ce9868 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "postcss", - "version": "8.5.11", + "version": "8.5.12", "description": "Tool for transforming styles with JS plugins", "keywords": [ "css", From e0093e49bcf00347383a13e40bb1f67bc823ca15 Mon Sep 17 00:00:00 2001 From: Andrey Sitnik Date: Thu, 30 Apr 2026 20:10:01 +0000 Subject: [PATCH 12/89] Move to pnpm 11 --- .github/workflows/test.yml | 12 +- package.json | 12 -- patches/yargs@17.7.2.patch | 25 ----- pnpm-lock.yaml | 217 ++++++++++--------------------------- pnpm-workspace.yaml | 4 + 5 files changed, 69 insertions(+), 201 deletions(-) delete mode 100644 patches/yargs@17.7.2.patch create mode 100644 pnpm-workspace.yaml diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 809400d18..9b3cdf8bd 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -16,14 +16,14 @@ jobs: - name: Install pnpm uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v5.0.0 with: - version: 10 + version: 11 - name: Install Node.js uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 with: node-version: 25 cache: pnpm - name: Install dependencies - run: pnpm install --ignore-scripts + run: pnpm ci - name: Run tests run: pnpm test short: @@ -33,8 +33,6 @@ jobs: node-version: - 24 - 22 - - 20 - - 18 name: Node.js ${{ matrix.node-version }} Quick steps: - name: Checkout the repository @@ -42,14 +40,14 @@ jobs: - name: Install pnpm uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v5.0.0 with: - version: 10 + version: 11 - name: Install Node.js ${{ matrix.node-version }} uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 with: node-version: ${{ matrix.node-version }} cache: pnpm - name: Install dependencies - run: pnpm install --ignore-scripts + run: pnpm ci - name: Run unit tests run: pnpm run unit old: @@ -57,6 +55,8 @@ jobs: strategy: matrix: node-version: + - 20 + - 18 - 16 - 14 - 12 diff --git a/package.json b/package.json index 9f7ce9868..03e90f4ab 100644 --- a/package.json +++ b/package.json @@ -145,18 +145,6 @@ "engines": { "node": "^10 || ^12 || >=14" }, - "pnpm": { - "patchedDependencies": { - "yargs@17.7.2": "patches/yargs@17.7.2.patch" - }, - "ignoredBuiltDependencies": [ - "esbuild", - "unrs-resolver" - ], - "onlyBuiltDependencies": [ - "simple-git-hooks" - ] - }, "clean-publish": { "cleanDocs": true } diff --git a/patches/yargs@17.7.2.patch b/patches/yargs@17.7.2.patch deleted file mode 100644 index a26866587..000000000 --- a/patches/yargs@17.7.2.patch +++ /dev/null @@ -1,25 +0,0 @@ -diff --git a/browser.d.ts b/browser.d.ts -deleted file mode 100644 -index 21f3fc69190b574ab8456514d3da1972afa53973..0000000000000000000000000000000000000000 -diff --git a/package.json b/package.json -index 389cc6b064b5f888e7f9d718f5440feabdce57ad..c1ae265542ad386fa2214914b0186ade81dd6ee2 100644 ---- a/package.json -+++ b/package.json -@@ -20,13 +20,10 @@ - "import": "./browser.mjs", - "types": "./browser.d.ts" - }, -- "./yargs": [ -- { -- "import": "./yargs.mjs", -- "require": "./yargs" -- }, -- "./yargs" -- ] -+ "./yargs": { -+ "require": "./index.cjs", -+ "import": "./yargs.mjs" -+ } - }, - "type": "module", - "module": "./index.mjs", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 93331361e..cfe666b6f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,11 +4,6 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false -patchedDependencies: - yargs@17.7.2: - hash: 34652056801bf0e586b0f2ab1a4f464b352d4d3ce0f5b2d51040d171c31843c3 - path: patches/yargs@17.7.2.patch - importers: .: @@ -25,13 +20,13 @@ importers: devDependencies: '@logux/eslint-config': specifier: ^57.1.0 - version: 57.1.0(@typescript-eslint/utils@8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3) + version: 57.1.0(@typescript-eslint/utils@8.59.0(eslint@10.2.1)(typescript@5.9.3))(eslint@10.2.1)(typescript@5.9.3) '@logux/oxc-configs': specifier: ^0.4.0 version: 0.4.0(oxlint-tsgolint@0.18.1)(oxlint@1.58.0(oxlint-tsgolint@0.18.1))(typescript@5.9.3) '@size-limit/preset-small-lib': specifier: ^12.1.0 - version: 12.1.0(size-limit@12.1.0(jiti@2.6.1)) + version: 12.1.0(size-limit@12.1.0) '@types/node': specifier: ^25.6.0 version: 25.6.0 @@ -52,7 +47,7 @@ importers: version: 1.1.0 eslint: specifier: ^10.2.1 - version: 10.2.1(jiti@2.6.1) + version: 10.2.1 multiocular: specifier: ^0.8.3 version: 0.8.3 @@ -73,7 +68,7 @@ importers: version: 2.13.1 size-limit: specifier: ^12.1.0 - version: 12.1.0(jiti@2.6.1) + version: 12.1.0 strip-ansi: specifier: ^6.0.1 version: 6.0.1 @@ -1012,14 +1007,6 @@ packages: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} - debug@3.2.7: - resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - debug@4.4.3: resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} engines: {node: '>=6.0'} @@ -1066,10 +1053,6 @@ packages: resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} engines: {node: '>=8.6'} - es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} - esbuild@0.28.0: resolution: {integrity: sha512-sNR9MHpXSUV/XB4zmsFKN+QgVG82Cc7+/aaxJ8Adi8hyOac+EXptIp45QBPaVyX3N70664wRbTcLTOemCAnyqw==} engines: {node: '>=18'} @@ -1098,9 +1081,6 @@ packages: unrs-resolver: optional: true - eslint-import-resolver-node@0.3.9: - resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} - eslint-plugin-es-x@7.8.0: resolution: {integrity: sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ==} engines: {node: ^14.18.0 || >=16.0.0} @@ -1234,9 +1214,6 @@ packages: resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} engines: {node: '>=14'} - function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} @@ -1278,10 +1255,6 @@ packages: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - hasown@2.0.3: - resolution: {integrity: sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==} - engines: {node: '>= 0.4'} - highlight.js@11.11.1: resolution: {integrity: sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==} engines: {node: '>=12.0.0'} @@ -1305,10 +1278,6 @@ packages: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} - is-core-module@2.16.1: - resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} - engines: {node: '>= 0.4'} - is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} @@ -1340,10 +1309,6 @@ packages: resolution: {integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==} engines: {node: '>=8'} - jiti@2.6.1: - resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} - hasBin: true - js-yaml@4.1.1: resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} hasBin: true @@ -1510,9 +1475,6 @@ packages: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} - path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - path-scurry@2.0.2: resolution: {integrity: sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==} engines: {node: 18 || 20 || >=22} @@ -1557,11 +1519,6 @@ packages: resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - resolve@1.22.12: - resolution: {integrity: sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==} - engines: {node: '>= 0.4'} - hasBin: true - reusify@1.1.0: resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} @@ -1632,10 +1589,6 @@ packages: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} - supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - tapable@2.3.3: resolution: {integrity: sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==} engines: {node: '>=6'} @@ -1893,9 +1846,9 @@ snapshots: '@esbuild/win32-x64@0.28.0': optional: true - '@eslint-community/eslint-utils@4.9.1(eslint@10.2.1(jiti@2.6.1))': + '@eslint-community/eslint-utils@4.9.1(eslint@10.2.1)': dependencies: - eslint: 10.2.1(jiti@2.6.1) + eslint: 10.2.1 eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.2': {} @@ -1977,16 +1930,16 @@ snapshots: dependencies: nanoevents: 9.1.0 - '@logux/eslint-config@57.1.0(@typescript-eslint/utils@8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3)': + '@logux/eslint-config@57.1.0(@typescript-eslint/utils@8.59.0(eslint@10.2.1)(typescript@5.9.3))(eslint@10.2.1)(typescript@5.9.3)': dependencies: '@eslint/eslintrc': 3.3.5 - eslint: 10.2.1(jiti@2.6.1) - eslint-plugin-import-x: 4.16.2(@typescript-eslint/utils@8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@10.2.1(jiti@2.6.1)) - eslint-plugin-n: 17.24.0(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3) - eslint-plugin-perfectionist: 5.9.0(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3) + eslint: 10.2.1 + eslint-plugin-import-x: 4.16.2(@typescript-eslint/utils@8.59.0(eslint@10.2.1)(typescript@5.9.3))(eslint@10.2.1) + eslint-plugin-n: 17.24.0(eslint@10.2.1)(typescript@5.9.3) + eslint-plugin-perfectionist: 5.9.0(eslint@10.2.1)(typescript@5.9.3) eslint-plugin-prefer-let: 4.2.2 globals: 17.5.0 - typescript-eslint: 8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3) + typescript-eslint: 8.59.0(eslint@10.2.1)(typescript@5.9.3) transitivePeerDependencies: - '@typescript-eslint/utils' - eslint-import-resolver-node @@ -2172,21 +2125,21 @@ snapshots: dependencies: nopt: 1.0.10 - '@size-limit/esbuild@12.1.0(size-limit@12.1.0(jiti@2.6.1))': + '@size-limit/esbuild@12.1.0(size-limit@12.1.0)': dependencies: esbuild: 0.28.0 nanoid: 5.1.9 - size-limit: 12.1.0(jiti@2.6.1) + size-limit: 12.1.0 - '@size-limit/file@12.1.0(size-limit@12.1.0(jiti@2.6.1))': + '@size-limit/file@12.1.0(size-limit@12.1.0)': dependencies: - size-limit: 12.1.0(jiti@2.6.1) + size-limit: 12.1.0 - '@size-limit/preset-small-lib@12.1.0(size-limit@12.1.0(jiti@2.6.1))': + '@size-limit/preset-small-lib@12.1.0(size-limit@12.1.0)': dependencies: - '@size-limit/esbuild': 12.1.0(size-limit@12.1.0(jiti@2.6.1)) - '@size-limit/file': 12.1.0(size-limit@12.1.0(jiti@2.6.1)) - size-limit: 12.1.0(jiti@2.6.1) + '@size-limit/esbuild': 12.1.0(size-limit@12.1.0) + '@size-limit/file': 12.1.0(size-limit@12.1.0) + size-limit: 12.1.0 '@tsconfig/node10@1.0.12': {} @@ -2218,15 +2171,15 @@ snapshots: '@types/unist@3.0.3': {} - '@typescript-eslint/eslint-plugin@8.59.0(@typescript-eslint/parser@8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3))(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.59.0(@typescript-eslint/parser@8.59.0(eslint@10.2.1)(typescript@5.9.3))(eslint@10.2.1)(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.59.0(eslint@10.2.1)(typescript@5.9.3) '@typescript-eslint/scope-manager': 8.59.0 - '@typescript-eslint/type-utils': 8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/utils': 8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/type-utils': 8.59.0(eslint@10.2.1)(typescript@5.9.3) + '@typescript-eslint/utils': 8.59.0(eslint@10.2.1)(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.59.0 - eslint: 10.2.1(jiti@2.6.1) + eslint: 10.2.1 ignore: 7.0.5 natural-compare: 1.4.0 ts-api-utils: 2.5.0(typescript@5.9.3) @@ -2234,14 +2187,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/parser@8.59.0(eslint@10.2.1)(typescript@5.9.3)': dependencies: '@typescript-eslint/scope-manager': 8.59.0 '@typescript-eslint/types': 8.59.0 '@typescript-eslint/typescript-estree': 8.59.0(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.59.0 debug: 4.4.3 - eslint: 10.2.1(jiti@2.6.1) + eslint: 10.2.1 typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -2264,13 +2217,13 @@ snapshots: dependencies: typescript: 5.9.3 - '@typescript-eslint/type-utils@8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/type-utils@8.59.0(eslint@10.2.1)(typescript@5.9.3)': dependencies: '@typescript-eslint/types': 8.59.0 '@typescript-eslint/typescript-estree': 8.59.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.59.0(eslint@10.2.1)(typescript@5.9.3) debug: 4.4.3 - eslint: 10.2.1(jiti@2.6.1) + eslint: 10.2.1 ts-api-utils: 2.5.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: @@ -2293,13 +2246,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/utils@8.59.0(eslint@10.2.1)(typescript@5.9.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.1(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.1) '@typescript-eslint/scope-manager': 8.59.0 '@typescript-eslint/types': 8.59.0 '@typescript-eslint/typescript-estree': 8.59.0(typescript@5.9.3) - eslint: 10.2.1(jiti@2.6.1) + eslint: 10.2.1 typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -2438,7 +2391,7 @@ snapshots: istanbul-reports: 3.2.0 test-exclude: 8.0.0 v8-to-istanbul: 9.3.0 - yargs: 17.7.2(patch_hash=34652056801bf0e586b0f2ab1a4f464b352d4d3ce0f5b2d51040d171c31843c3) + yargs: 17.7.2 yargs-parser: 21.1.1 cac@7.0.0: {} @@ -2492,11 +2445,6 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 - debug@3.2.7: - dependencies: - ms: 2.1.3 - optional: true - debug@4.4.3: dependencies: ms: 2.1.3 @@ -2534,9 +2482,6 @@ snapshots: ansi-colors: 4.1.3 strip-ansi: 6.0.1 - es-errors@1.3.0: - optional: true - esbuild@0.28.0: optionalDependencies: '@esbuild/aix-ppc64': 0.28.0 @@ -2570,9 +2515,9 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-compat-utils@0.5.1(eslint@10.2.1(jiti@2.6.1)): + eslint-compat-utils@0.5.1(eslint@10.2.1): dependencies: - eslint: 10.2.1(jiti@2.6.1) + eslint: 10.2.1 semver: 7.7.4 eslint-import-context@0.1.9(unrs-resolver@1.11.1): @@ -2582,29 +2527,20 @@ snapshots: optionalDependencies: unrs-resolver: 1.11.1 - eslint-import-resolver-node@0.3.9: + eslint-plugin-es-x@7.8.0(eslint@10.2.1): dependencies: - debug: 3.2.7 - is-core-module: 2.16.1 - resolve: 1.22.12 - transitivePeerDependencies: - - supports-color - optional: true - - eslint-plugin-es-x@7.8.0(eslint@10.2.1(jiti@2.6.1)): - dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.1(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.1) '@eslint-community/regexpp': 4.12.2 - eslint: 10.2.1(jiti@2.6.1) - eslint-compat-utils: 0.5.1(eslint@10.2.1(jiti@2.6.1)) + eslint: 10.2.1 + eslint-compat-utils: 0.5.1(eslint@10.2.1) - eslint-plugin-import-x@4.16.2(@typescript-eslint/utils@8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@10.2.1(jiti@2.6.1)): + eslint-plugin-import-x@4.16.2(@typescript-eslint/utils@8.59.0(eslint@10.2.1)(typescript@5.9.3))(eslint@10.2.1): dependencies: '@package-json/types': 0.0.12 '@typescript-eslint/types': 8.59.0 comment-parser: 1.4.6 debug: 4.4.3 - eslint: 10.2.1(jiti@2.6.1) + eslint: 10.2.1 eslint-import-context: 0.1.9(unrs-resolver@1.11.1) is-glob: 4.0.3 minimatch: 10.2.5 @@ -2612,17 +2548,16 @@ snapshots: stable-hash-x: 0.2.0 unrs-resolver: 1.11.1 optionalDependencies: - '@typescript-eslint/utils': 8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3) - eslint-import-resolver-node: 0.3.9 + '@typescript-eslint/utils': 8.59.0(eslint@10.2.1)(typescript@5.9.3) transitivePeerDependencies: - supports-color - eslint-plugin-n@17.24.0(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3): + eslint-plugin-n@17.24.0(eslint@10.2.1)(typescript@5.9.3): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.1(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.1) enhanced-resolve: 5.21.0 - eslint: 10.2.1(jiti@2.6.1) - eslint-plugin-es-x: 7.8.0(eslint@10.2.1(jiti@2.6.1)) + eslint: 10.2.1 + eslint-plugin-es-x: 7.8.0(eslint@10.2.1) get-tsconfig: 4.14.0 globals: 15.15.0 globrex: 0.1.2 @@ -2632,10 +2567,10 @@ snapshots: transitivePeerDependencies: - typescript - eslint-plugin-perfectionist@5.9.0(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3): + eslint-plugin-perfectionist@5.9.0(eslint@10.2.1)(typescript@5.9.3): dependencies: - '@typescript-eslint/utils': 8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3) - eslint: 10.2.1(jiti@2.6.1) + '@typescript-eslint/utils': 8.59.0(eslint@10.2.1)(typescript@5.9.3) + eslint: 10.2.1 natural-orderby: 5.0.0 transitivePeerDependencies: - supports-color @@ -2658,9 +2593,9 @@ snapshots: eslint-visitor-keys@5.0.1: {} - eslint@10.2.1(jiti@2.6.1): + eslint@10.2.1: dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.1(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.1) '@eslint-community/regexpp': 4.12.2 '@eslint/config-array': 0.23.5 '@eslint/config-helpers': 0.5.5 @@ -2690,8 +2625,6 @@ snapshots: minimatch: 10.2.5 natural-compare: 1.4.0 optionator: 0.9.4 - optionalDependencies: - jiti: 2.6.1 transitivePeerDependencies: - supports-color @@ -2766,9 +2699,6 @@ snapshots: cross-spawn: 7.0.6 signal-exit: 4.1.0 - function-bind@1.1.2: - optional: true - get-caller-file@2.0.5: {} get-tsconfig@4.14.0: @@ -2801,11 +2731,6 @@ snapshots: has-flag@4.0.0: {} - hasown@2.0.3: - dependencies: - function-bind: 1.1.2 - optional: true - highlight.js@11.11.1: {} html-escaper@2.0.2: {} @@ -2821,11 +2746,6 @@ snapshots: imurmurhash@0.1.4: {} - is-core-module@2.16.1: - dependencies: - hasown: 2.0.3 - optional: true - is-extglob@2.1.1: {} is-fullwidth-code-point@3.0.0: {} @@ -2851,9 +2771,6 @@ snapshots: html-escaper: 2.0.2 istanbul-lib-report: 3.0.1 - jiti@2.6.1: - optional: true - js-yaml@4.1.1: dependencies: argparse: 2.0.1 @@ -3032,9 +2949,6 @@ snapshots: path-key@3.1.1: {} - path-parse@1.0.7: - optional: true - path-scurry@2.0.2: dependencies: lru-cache: 11.3.5 @@ -3064,14 +2978,6 @@ snapshots: resolve-pkg-maps@1.0.0: {} - resolve@1.22.12: - dependencies: - es-errors: 1.3.0 - is-core-module: 2.16.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - optional: true - reusify@1.1.0: {} run-parallel@1.2.0: @@ -3094,15 +3000,13 @@ snapshots: simple-git-hooks@2.13.1: {} - size-limit@12.1.0(jiti@2.6.1): + size-limit@12.1.0: dependencies: bytes-iec: 3.1.1 lilconfig: 3.1.3 nanospinner: 1.2.2 picocolors: 1.1.1 tinyglobby: 0.2.16 - optionalDependencies: - jiti: 2.6.1 source-map-js@1.2.1: {} @@ -3126,9 +3030,6 @@ snapshots: dependencies: has-flag: 4.0.0 - supports-preserve-symlinks-flag@1.0.0: - optional: true - tapable@2.3.3: {} test-exclude@8.0.0: @@ -3184,13 +3085,13 @@ snapshots: dependencies: prelude-ls: 1.2.1 - typescript-eslint@8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3): + typescript-eslint@8.59.0(eslint@10.2.1)(typescript@5.9.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.59.0(@typescript-eslint/parser@8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3))(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/parser': 8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/eslint-plugin': 8.59.0(@typescript-eslint/parser@8.59.0(eslint@10.2.1)(typescript@5.9.3))(eslint@10.2.1)(typescript@5.9.3) + '@typescript-eslint/parser': 8.59.0(eslint@10.2.1)(typescript@5.9.3) '@typescript-eslint/typescript-estree': 8.59.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@5.9.3) - eslint: 10.2.1(jiti@2.6.1) + '@typescript-eslint/utils': 8.59.0(eslint@10.2.1)(typescript@5.9.3) + eslint: 10.2.1 typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -3283,7 +3184,7 @@ snapshots: yargs-parser@21.1.1: {} - yargs@17.7.2(patch_hash=34652056801bf0e586b0f2ab1a4f464b352d4d3ce0f5b2d51040d171c31843c3): + yargs@17.7.2: dependencies: cliui: 8.0.1 escalade: 3.2.0 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml new file mode 100644 index 000000000..f306e6140 --- /dev/null +++ b/pnpm-workspace.yaml @@ -0,0 +1,4 @@ +allowBuilds: + esbuild: false + simple-git-hooks: true + unrs-resolver: false From ae889c815fb88d785401a88f1a7dfc8cb11915fb Mon Sep 17 00:00:00 2001 From: Andrey Sitnik Date: Thu, 30 Apr 2026 20:13:01 +0000 Subject: [PATCH 13/89] Try to fix CI --- .github/workflows/test.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 9b3cdf8bd..a15760b5a 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -23,7 +23,7 @@ jobs: node-version: 25 cache: pnpm - name: Install dependencies - run: pnpm ci + run: pnpm ci --ignore-scripts - name: Run tests run: pnpm test short: @@ -47,7 +47,7 @@ jobs: node-version: ${{ matrix.node-version }} cache: pnpm - name: Install dependencies - run: pnpm ci + run: pnpm ci --ignore-scripts - name: Run unit tests run: pnpm run unit old: @@ -78,7 +78,7 @@ jobs: - name: Install dependencies run: pnpm install --ignore-scripts - name: Downgrade TypeScript - run: pnpm install typescript@4 + run: pnpm install typescript@4 --ignore-scripts - name: Run unit tests run: pnpm run old windows: From dd06c3e11362087bc18f9c20cee30fd82bda3de9 Mon Sep 17 00:00:00 2001 From: Andrey Sitnik Date: Thu, 30 Apr 2026 20:14:57 +0000 Subject: [PATCH 14/89] Revert stringifier changes because of the conflict with postcss-scss --- lib/stringifier.js | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/lib/stringifier.js b/lib/stringifier.js index 4b83e1f49..3938156fa 100644 --- a/lib/stringifier.js +++ b/lib/stringifier.js @@ -145,10 +145,7 @@ class Stringifier { ? raws.between : this.raw(node, 'between', 'colon') - let rawVal = raws.value - let value = rawVal && rawVal.value === node.value ? rawVal.raw : node.value - - let string = node.prop + between + value + let string = node.prop + between + this.rawValue(node, 'value') if (node.important) { string += raws.important || ' !important' From d3abd40d723cf3559e5ddb5fc738b7cb64e92bb0 Mon Sep 17 00:00:00 2001 From: Andrey Sitnik Date: Thu, 30 Apr 2026 20:16:14 +0000 Subject: [PATCH 15/89] Update dependencies --- lib/lazy-result.js | 5 +- lib/stringifier.js | 40 +++--- package.json | 2 +- pnpm-lock.yaml | 310 ++++++++++++++++++++++----------------------- 4 files changed, 182 insertions(+), 175 deletions(-) diff --git a/lib/lazy-result.js b/lib/lazy-result.js index 2ad67da97..9026a7c86 100644 --- a/lib/lazy-result.js +++ b/lib/lazy-result.js @@ -379,7 +379,10 @@ class LazyResult { if (str.stringify) str = str.stringify let rootSource = this.result.root.source - if (opts.map === undefined && !(rootSource && rootSource.input && rootSource.input.map)) { + if ( + opts.map === undefined && + !(rootSource && rootSource.input && rootSource.input.map) + ) { let result = '' str(this.result.root, i => { result += i diff --git a/lib/stringifier.js b/lib/stringifier.js index 3938156fa..72a3f9319 100644 --- a/lib/stringifier.js +++ b/lib/stringifier.js @@ -86,21 +86,22 @@ class Stringifier { block(node, start) { let raws = node.raws - let between = typeof raws.between !== 'undefined' - ? raws.between - : this.raw(node, 'between', 'beforeOpen') + let between = + typeof raws.between !== 'undefined' + ? raws.between + : this.raw(node, 'between', 'beforeOpen') this.builder(escapeHTMLInCSS(start + between) + '{', node, 'start') let after if (node.nodes && node.nodes.length) { this.body(node) - after = typeof raws.after !== 'undefined' - ? raws.after - : this.raw(node, 'after') + after = + typeof raws.after !== 'undefined' ? raws.after : this.raw(node, 'after') } else { - after = typeof raws.after !== 'undefined' - ? raws.after - : this.raw(node, 'after', 'emptyBody') + after = + typeof raws.after !== 'undefined' + ? raws.after + : this.raw(node, 'after', 'emptyBody') } if (after) this.builder(escapeHTMLInCSS(after)) @@ -130,20 +131,23 @@ class Stringifier { comment(node) { let raws = node.raws - let left = typeof raws.left !== 'undefined' - ? raws.left - : this.raw(node, 'left', 'commentLeft') - let right = typeof raws.right !== 'undefined' - ? raws.right - : this.raw(node, 'right', 'commentRight') + let left = + typeof raws.left !== 'undefined' + ? raws.left + : this.raw(node, 'left', 'commentLeft') + let right = + typeof raws.right !== 'undefined' + ? raws.right + : this.raw(node, 'right', 'commentRight') this.builder(escapeHTMLInCSS('/*' + left + node.text + right + '*/'), node) } decl(node, semicolon) { let raws = node.raws - let between = typeof raws.between !== 'undefined' - ? raws.between - : this.raw(node, 'between', 'colon') + let between = + typeof raws.between !== 'undefined' + ? raws.between + : this.raw(node, 'between', 'colon') let string = node.prop + between + this.rawValue(node, 'value') diff --git a/package.json b/package.json index 03e90f4ab..8c24bfce0 100644 --- a/package.json +++ b/package.json @@ -107,7 +107,7 @@ "multiocular": "^0.8.3", "nanodelay": "^1.0.8", "nanospy": "^1.0.0", - "oxfmt": "^0.46.0", + "oxfmt": "^0.47.0", "postcss-parser-tests": "^8.9.0", "simple-git-hooks": "^2.13.1", "size-limit": "^12.1.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cfe666b6f..ba1cb0694 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,7 +20,7 @@ importers: devDependencies: '@logux/eslint-config': specifier: ^57.1.0 - version: 57.1.0(@typescript-eslint/utils@8.59.0(eslint@10.2.1)(typescript@5.9.3))(eslint@10.2.1)(typescript@5.9.3) + version: 57.1.0(@typescript-eslint/utils@8.59.1(eslint@10.2.1)(typescript@5.9.3))(eslint@10.2.1)(typescript@5.9.3) '@logux/oxc-configs': specifier: ^0.4.0 version: 0.4.0(oxlint-tsgolint@0.18.1)(oxlint@1.58.0(oxlint-tsgolint@0.18.1))(typescript@5.9.3) @@ -58,8 +58,8 @@ importers: specifier: ^1.0.0 version: 1.0.0 oxfmt: - specifier: ^0.46.0 - version: 0.46.0 + specifier: ^0.47.0 + version: 0.47.0 postcss-parser-tests: specifier: ^8.9.0 version: 8.9.0 @@ -381,124 +381,124 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@oxfmt/binding-android-arm-eabi@0.46.0': - resolution: {integrity: sha512-b1doV4WRcJU+BESSlCvCjV+5CEr/T6h0frArAdV26Nir+gGNFNaylvDiiMPfF1pxeV0txZEs38ojzJaxBYg+ng==} + '@oxfmt/binding-android-arm-eabi@0.47.0': + resolution: {integrity: sha512-KrMQRdMi/upr81qT4ijK6X6BNp6jqpMY7FwILQnwIy9QLc3qpnhUx5rsCLGzn4ewsCQ0CNAspN2ogmP1GXLyLw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [android] - '@oxfmt/binding-android-arm64@0.46.0': - resolution: {integrity: sha512-v6+HhjsoV3GO0u2u9jLSAZrvWfTraDxKofUIQ7/ktS7tzS+epVsxdHmeM+XxuNcAY/nWxxU1Sg4JcGTNRXraBA==} + '@oxfmt/binding-android-arm64@0.47.0': + resolution: {integrity: sha512-r4ixS/PeUpAFKgrpDoZ5pSkthjZzVzKd95525Aazj+aOv9H4ulK5zYHGb7wFY5n5kZxHK8TbOJUZgoEb1ohddQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@oxfmt/binding-darwin-arm64@0.46.0': - resolution: {integrity: sha512-3eeooJGrqGIlI5MyryDZsAcKXSmKIgAD4yYtfRrRJzXZ0UTFZtiSveIur56YPrGMYZwT4XyVhHsMqrNwr1XeFA==} + '@oxfmt/binding-darwin-arm64@0.47.0': + resolution: {integrity: sha512-CLWxiKpMl+195cm09CuaWEhJK0CirRkoMa07aR9+9AFPat2LfIKtwx1JqxZM0MTvcMe6+adlJNdVL6jdInvq3g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@oxfmt/binding-darwin-x64@0.46.0': - resolution: {integrity: sha512-QG8BDM0CXWbu84k2SKmCqfEddPQPFiBicwtYnLqHRWZZl57HbtOLRMac/KTq2NO4AEc4ICCBpFxJIV9zcqYfkQ==} + '@oxfmt/binding-darwin-x64@0.47.0': + resolution: {integrity: sha512-Xq5fjTYDC50faUeLSm0rZdBqoTgleXEdD7NpJdARtQIczkCJn3xNjMUSQQkUmh4CtxkKTNL68lytcOK3e/osgg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@oxfmt/binding-freebsd-x64@0.46.0': - resolution: {integrity: sha512-9DdCqS/n2ncu/Chazvt3cpgAjAmIGQDz7hFKSrNItMApyV/Ja9mz3hD4JakIE3nS8PW9smEbPWnb389QLBY4nw==} + '@oxfmt/binding-freebsd-x64@0.47.0': + resolution: {integrity: sha512-QOU9ZIJ52p5askcEC0QJvvr8trHAWoonul8bgISo6gYUL3s50zkqafBYcNAr9LJZQbsZtPfIWHk9+5+nUp1qJQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@oxfmt/binding-linux-arm-gnueabihf@0.46.0': - resolution: {integrity: sha512-Dgs7VeE2jT0LHMhw6tPEt0xQYe54kBqHEovmWsv4FVQlegCOvlIJNx0S8n4vj8WUtpT+Z6BD2HhKJPLglLxvZg==} + '@oxfmt/binding-linux-arm-gnueabihf@0.47.0': + resolution: {integrity: sha512-oJxDM1aBhPvz9gmElBv8UpxyiqhwfjcbrSxT5F0xtuUzY6dQI27/AQPIt3eu3Z5Yvn0kQl5R7MA3Z+MbnRvCBw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxfmt/binding-linux-arm-musleabihf@0.46.0': - resolution: {integrity: sha512-Zxn3adhTH13JKnU4xXJj8FeEfF680XjXh3gSShKl57HCMBRde2tUJTgogV/1MSHA80PJEVrDa7r66TLVq3Ia7Q==} + '@oxfmt/binding-linux-arm-musleabihf@0.47.0': + resolution: {integrity: sha512-g8Lh50VS4ibGz2q6v7r9UZY4D0dM16SdrFYOMzhqIoCwGcai8VMIRUAcqn1/jlCsOOzUXJ741+kCeJt0cofakQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxfmt/binding-linux-arm64-gnu@0.46.0': - resolution: {integrity: sha512-+TWipjrgVM8D7aIdDD0tlr3teLTTvQTn7QTE5BpT10H1Fj82gfdn9X6nn2sDgx/MepuSCfSnzFNJq2paLL0OiA==} + '@oxfmt/binding-linux-arm64-gnu@0.47.0': + resolution: {integrity: sha512-YrNT1vQ0asaXoRbrvYENPqmBfOQ9Xr8enPNOULeYfg44VjCcrUowFy5QZr+WawE0zyP8cH9e9Gxxg0fDEFzhcg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-arm64-musl@0.46.0': - resolution: {integrity: sha512-aAUPBWJ1lGwwnxZUEDLJ94+Iy6MuwJwPxUgO4sCA5mEEyDk7b+cDQ+JpX1VR150Zoyd+D49gsrUzpUK5h587Eg==} + '@oxfmt/binding-linux-arm64-musl@0.47.0': + resolution: {integrity: sha512-IxtQC/sbBi4ubbY+MdwdanRWrG9InQJVZqyMsBa5IUaQcnSg86gQme574HxXMC1p4bo4YhV99zQ+wNnGCvEgzw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@oxfmt/binding-linux-ppc64-gnu@0.46.0': - resolution: {integrity: sha512-ufBCJukyFX/UDrokP/r6BGDoTInnsDs7bxyzKAgMiZlt2Qu8GPJSJ6Zm6whIiJzKk0naxA8ilwmbO1LMw6Htxw==} + '@oxfmt/binding-linux-ppc64-gnu@0.47.0': + resolution: {integrity: sha512-EWXEhOMbWO0q6eJSbu0QLkU8cKi0ljlYLngeDs2Ocu/pm1rrLwyQiYzlFbdnMRURI4w9ndr1sI9rSbhlJ5o23Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-riscv64-gnu@0.46.0': - resolution: {integrity: sha512-eqtlC2YmPqjun76R1gVfGLuKWx7NuEnLEAudZ7n6ipSKbCZTqIKSs1b5Y8K/JHZsRpLkeSmAAjig5HOIg8fQzQ==} + '@oxfmt/binding-linux-riscv64-gnu@0.47.0': + resolution: {integrity: sha512-tZrjS11TUiDuEpRaqdk8K9F9xETRyKXfuZKmdeW+Gj7coBnm7+8sBEfyt033EAFEQSlkniAXvBLh+Qja2ioGBQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-riscv64-musl@0.46.0': - resolution: {integrity: sha512-yccVOO2nMXkQLGgy0He3EQEwKD7NF0zEk+/OWmroznkqXyJdN6bfK0LtNnr6/14Bh3FjpYq7bP33l/VloCnxpA==} + '@oxfmt/binding-linux-riscv64-musl@0.47.0': + resolution: {integrity: sha512-KBFy+2CFKUCZzYwX2ZOPQKck1vjQbz+hextuc19G4r0WRJwadfAeuQMQRQvB+Ivc8brlbOVg7et8K7E467440g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [musl] - '@oxfmt/binding-linux-s390x-gnu@0.46.0': - resolution: {integrity: sha512-aAf7fG23OQCey6VRPj9IeCraoYtpgtx0ZyJ1CXkPyT1wjzBE7c3xtuxHe/AdHaJfVVb/SXpSk8Gl1LzyQupSqw==} + '@oxfmt/binding-linux-s390x-gnu@0.47.0': + resolution: {integrity: sha512-REUPFKVGSiK99B+9eaPhluEVglzaoj/SMykNC5SUiV2RSsBfV5lWN7Y0iCIc251Wz3GaeAGZsJ/zj3gjarxdFg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-x64-gnu@0.46.0': - resolution: {integrity: sha512-q0JPsTMyJNjYrBvYFDz4WbVsafNZaPCZv4RnFypRotLqpKROtBZcEaXQW4eb9YmvLU3NckVemLJnzkSZSdmOxw==} + '@oxfmt/binding-linux-x64-gnu@0.47.0': + resolution: {integrity: sha512-KVftVSVEDeIfRW3TIeLe3aNI/iY4m1fu5mDwHcisKMZSCMKLkrhFsjowC7o9RoqNPxbbglm2+/6KAKBIts2t0Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-x64-musl@0.46.0': - resolution: {integrity: sha512-7LsLY9Cw57GPkhSR+duI3mt9baRczK/DtHYSldQ4BEU92da9igBQNl4z7Vq5U9NNPsh1FmpKvv1q9WDtiUQR1A==} + '@oxfmt/binding-linux-x64-musl@0.47.0': + resolution: {integrity: sha512-DTsmGEaA2860Aq5VUyDO8/MT9NFxwVL93RnRYmpMwK6DsSkThmvEpqoUDDljziEpAedMRG19SCogrNbINSbLUQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@oxfmt/binding-openharmony-arm64@0.46.0': - resolution: {integrity: sha512-lHiBOz8Duaku7JtRNLlps3j++eOaICPZSd8FCVmTDM4DFOPT71Bjn7g6iar1z7StXlKRweUKxWUs4sA+zWGDXg==} + '@oxfmt/binding-openharmony-arm64@0.47.0': + resolution: {integrity: sha512-8r5BDro7fLOBoq1JXHLVSs55OlrxQhEso4HVo0TcY7OXJUPYfjPoOaYL5us+yIwqyP9rQwN+rxuiNFSmaxSuOQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@oxfmt/binding-win32-arm64-msvc@0.46.0': - resolution: {integrity: sha512-/5ktYUliP89RhgC37DBH1x20U5zPSZMy3cMEcO0j3793rbHP9MWsknBwQB6eozRzWmYrh0IFM/p20EbPvDlYlg==} + '@oxfmt/binding-win32-arm64-msvc@0.47.0': + resolution: {integrity: sha512-qtz/gzm8IjSPUlseZ0ofW8zyHLoZsuP5HTfcGGkWkUblB89JT8GNYH3ICqjbDsqsGqXum0/ZndXTFplSdXFIcg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@oxfmt/binding-win32-ia32-msvc@0.46.0': - resolution: {integrity: sha512-3WTnoiuIr8XvV0DIY7SN+1uJSwKf4sPpcbHfobcRT9JutGcLaef/miyBB87jxd3aqH+mS0+G5lsgHuXLUwjjpQ==} + '@oxfmt/binding-win32-ia32-msvc@0.47.0': + resolution: {integrity: sha512-5vIcdcIDE7nCx+MXN6sm8kbC4zajDB31E86rez4i45iHNH/2NjdKlJ720xcHTr3eeiMcttCGPHPhE1TjtBDGZw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ia32] os: [win32] - '@oxfmt/binding-win32-x64-msvc@0.46.0': - resolution: {integrity: sha512-IXxiQpkYnOwNfP23vzwSfhdpxJzyiPTY7eTn6dn3DsriKddESzM8i6kfq9R7CD/PUJwCvQT22NgtygBeug3KoA==} + '@oxfmt/binding-win32-x64-msvc@0.47.0': + resolution: {integrity: sha512-Sr59Y5ms54ONBjxFeWhVlGyQcHXxcl9DxC23f6yXlRkcos7LXBLoO+KDfxexjHIOZh7cWqrWduzvUjJ+pHp8cQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] @@ -715,63 +715,63 @@ packages: '@types/unist@3.0.3': resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} - '@typescript-eslint/eslint-plugin@8.59.0': - resolution: {integrity: sha512-HyAZtpdkgZwpq8Sz3FSUvCR4c+ScbuWa9AksK2Jweub7w4M3yTz4O11AqVJzLYjy/B9ZWPyc81I+mOdJU/bDQw==} + '@typescript-eslint/eslint-plugin@8.59.1': + resolution: {integrity: sha512-BOziFIfE+6osHO9FoJG4zjoHUcvI7fTNBSpdAwrNH0/TLvzjsk2oo8XSSOT2HhqUyhZPfHv4UOffoJ9oEEQ7Ag==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.59.0 + '@typescript-eslint/parser': ^8.59.1 eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/parser@8.59.0': - resolution: {integrity: sha512-TI1XGwKbDpo9tRW8UDIXCOeLk55qe9ZFGs8MTKU6/M08HWTw52DD/IYhfQtOEhEdPhLMT26Ka/x7p70nd3dzDg==} + '@typescript-eslint/parser@8.59.1': + resolution: {integrity: sha512-HDQH9O/47Dxi1ceDhBXdaldtf/WV9yRYMjbjCuNk3qnaTD564qwv61Y7+gTxwxRKzSrgO5uhtw584igXVuuZkA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/project-service@8.59.0': - resolution: {integrity: sha512-Lw5ITrR5s5TbC19YSvlr63ZfLaJoU6vtKTHyB0GQOpX0W7d5/Ir6vUahWi/8Sps/nOukZQ0IB3SmlxZnjaKVnw==} + '@typescript-eslint/project-service@8.59.1': + resolution: {integrity: sha512-+MuHQlHiEr00Of/IQbE/MmEoi44znZHbR/Pz7Opq4HryUOlRi+/44dro9Ycy8Fyo+/024IWtw8m4JUMCGTYxDg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/scope-manager@8.59.0': - resolution: {integrity: sha512-UzR16Ut8IpA3Mc4DbgAShlPPkVm8xXMWafXxB0BocaVRHs8ZGakAxGRskF7FId3sdk9lgGD73GSFaWmWFDE4dg==} + '@typescript-eslint/scope-manager@8.59.1': + resolution: {integrity: sha512-LwuHQI4pDOYVKvmH2dkaJo6YZCSgouVgnS/z7yBPKBMvgtBvyLqiLy9Z6b7+m/TRcX1NFYUqZetI5Y+aT4GEfg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.59.0': - resolution: {integrity: sha512-91Sbl3s4Kb3SybliIY6muFBmHVv+pYXfybC4Oolp3dvk8BvIE3wOPc+403CWIT7mJNkfQRGtdqghzs2+Z91Tqg==} + '@typescript-eslint/tsconfig-utils@8.59.1': + resolution: {integrity: sha512-/0nEyPbX7gRsk0Uwfe4ALwwgxuA66d/l2mhRDNlAvaj4U3juhUtJNq0DsY8M2AYwwb9rEq2hrC3IcIcEt++iJA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/type-utils@8.59.0': - resolution: {integrity: sha512-3TRiZaQSltGqGeNrJzzr1+8YcEobKH9rHnqIp/1psfKFmhRQDNMGP5hBufanYTGznwShzVLs3Mz+gDN7HkWfXg==} + '@typescript-eslint/type-utils@8.59.1': + resolution: {integrity: sha512-klWPBR2ciQHS3f++ug/mVnWKPjBUo7icEL3FAO1lhAR1Z1i5NQYZ1EannMSRYcq5qCv5wNALlXr6fksRHyYl7w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/types@8.59.0': - resolution: {integrity: sha512-nLzdsT1gdOgFxxxwrlNVUBzSNBEEHJ86bblmk4QAS6stfig7rcJzWKqCyxFy3YRRHXDWEkb2NralA1nOYkkm/A==} + '@typescript-eslint/types@8.59.1': + resolution: {integrity: sha512-ZDCjgccSdYPw5Bxh+my4Z0lJU96ZDN7jbBzvmEn0FZx3RtU1C7VWl6NbDx94bwY3V5YsgwRzJPOgeY2Q/nLG8A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.59.0': - resolution: {integrity: sha512-O9Re9P1BmBLFJyikRbQpLku/QA3/AueZNO9WePLBwQrvkixTmDe8u76B6CYUAITRl/rHawggEqUGn5QIkVRLMw==} + '@typescript-eslint/typescript-estree@8.59.1': + resolution: {integrity: sha512-OUd+vJS05sSkOip+BkZ/2NS8RMxrAAJemsC6vU3kmfLyeaJT0TftHkV9mcx2107MmsBVXXexhVu4F0TZXyMl4g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/utils@8.59.0': - resolution: {integrity: sha512-I1R/K7V07XsMJ12Oaxg/O9GfrysGTmCRhvZJBv0RE0NcULMzjqVpR5kRRQjHsz3J/bElU7HwCO7zkqL+MSUz+g==} + '@typescript-eslint/utils@8.59.1': + resolution: {integrity: sha512-3pIeoXhCeYH9FSCBI8P3iNwJlGuzPlYKkTlen2O9T1DSeeg8UG8jstq6BLk+Mda0qup7mgk4z4XL4OzRaxZ8LA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/visitor-keys@8.59.0': - resolution: {integrity: sha512-/uejZt4dSere1bx12WLlPfv8GktzcaDtuJ7s42/HEZ5zGj9oxRaD4bj7qwSunXkf+pbAhFt2zjpHYUiT5lHf0Q==} + '@typescript-eslint/visitor-keys@8.59.1': + resolution: {integrity: sha512-LdDNl6C5iJExcM0Yh0PwAIBb9PrSiCsWamF/JyEZawm3kFDnRoaq3LGE4bpyRao/fWeGKKyw7icx0YxrLFC5Cg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@unrs/resolver-binding-android-arm-eabi@1.11.1': @@ -1436,8 +1436,8 @@ packages: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} - oxfmt@0.46.0: - resolution: {integrity: sha512-CopwJOwPAjZ9p76fCvz+mSOJTw9/NY3cSksZK3VO/bUQ8UoEcketNgUuYS0UB3p+R9XnXe7wGGXUmyFxc7QxJA==} + oxfmt@0.47.0: + resolution: {integrity: sha512-OFbkbzxKCpooQEnRmpTDnuwTX8KHXzZTQ4Df/hz85fpS67Pl+lxPEFvUtin56HIIS0B1k4X8oIzTXRZPufA2CA==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true @@ -1597,8 +1597,8 @@ packages: resolution: {integrity: sha512-ZOffsNrXYggvU1mDGHk54I96r26P8SyMjO5slMKSc7+IWmtB/MQKnEC2fP51imB3/pT6YK5cT5E8f+Dd9KdyOQ==} engines: {node: 20 || >=22} - tinyexec@1.1.1: - resolution: {integrity: sha512-VKS/ZaQhhkKFMANmAOhhXVoIfBXblQxGX1myCQ2faQrfmobMftXeJPcZGp0gS07ocvGJWDLZGyOZDadDBqYIJg==} + tinyexec@1.1.2: + resolution: {integrity: sha512-dAqSqE/RabpBKI8+h26GfLq6Vb3JVXs30XYQjdMjaj/c2tS8IYYMbIzP599KtRj7c57/wYApb3QjgRgXmrCukA==} engines: {node: '>=18'} tinyglobby@0.2.16: @@ -1645,8 +1645,8 @@ packages: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} - typescript-eslint@8.59.0: - resolution: {integrity: sha512-BU3ONW9X+v90EcCH9ZS6LMackcVtxRLlI3XrYyqZIwVSHIk7Qf7bFw1z0M9Q0IUxhTMZCf8piY9hTYaNEIASrw==} + typescript-eslint@8.59.1: + resolution: {integrity: sha512-xqDcFVBmlrltH64lklOVp1wYxgJr6LVdg3NamBgH2OOQDLFdTKfIZXF5PfghrnXQKXZGTQs8tr1vL7fJvq8CTQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 @@ -1930,16 +1930,16 @@ snapshots: dependencies: nanoevents: 9.1.0 - '@logux/eslint-config@57.1.0(@typescript-eslint/utils@8.59.0(eslint@10.2.1)(typescript@5.9.3))(eslint@10.2.1)(typescript@5.9.3)': + '@logux/eslint-config@57.1.0(@typescript-eslint/utils@8.59.1(eslint@10.2.1)(typescript@5.9.3))(eslint@10.2.1)(typescript@5.9.3)': dependencies: '@eslint/eslintrc': 3.3.5 eslint: 10.2.1 - eslint-plugin-import-x: 4.16.2(@typescript-eslint/utils@8.59.0(eslint@10.2.1)(typescript@5.9.3))(eslint@10.2.1) + eslint-plugin-import-x: 4.16.2(@typescript-eslint/utils@8.59.1(eslint@10.2.1)(typescript@5.9.3))(eslint@10.2.1) eslint-plugin-n: 17.24.0(eslint@10.2.1)(typescript@5.9.3) eslint-plugin-perfectionist: 5.9.0(eslint@10.2.1)(typescript@5.9.3) eslint-plugin-prefer-let: 4.2.2 globals: 17.5.0 - typescript-eslint: 8.59.0(eslint@10.2.1)(typescript@5.9.3) + typescript-eslint: 8.59.1(eslint@10.2.1)(typescript@5.9.3) transitivePeerDependencies: - '@typescript-eslint/utils' - eslint-import-resolver-node @@ -1987,61 +1987,61 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.20.1 - '@oxfmt/binding-android-arm-eabi@0.46.0': + '@oxfmt/binding-android-arm-eabi@0.47.0': optional: true - '@oxfmt/binding-android-arm64@0.46.0': + '@oxfmt/binding-android-arm64@0.47.0': optional: true - '@oxfmt/binding-darwin-arm64@0.46.0': + '@oxfmt/binding-darwin-arm64@0.47.0': optional: true - '@oxfmt/binding-darwin-x64@0.46.0': + '@oxfmt/binding-darwin-x64@0.47.0': optional: true - '@oxfmt/binding-freebsd-x64@0.46.0': + '@oxfmt/binding-freebsd-x64@0.47.0': optional: true - '@oxfmt/binding-linux-arm-gnueabihf@0.46.0': + '@oxfmt/binding-linux-arm-gnueabihf@0.47.0': optional: true - '@oxfmt/binding-linux-arm-musleabihf@0.46.0': + '@oxfmt/binding-linux-arm-musleabihf@0.47.0': optional: true - '@oxfmt/binding-linux-arm64-gnu@0.46.0': + '@oxfmt/binding-linux-arm64-gnu@0.47.0': optional: true - '@oxfmt/binding-linux-arm64-musl@0.46.0': + '@oxfmt/binding-linux-arm64-musl@0.47.0': optional: true - '@oxfmt/binding-linux-ppc64-gnu@0.46.0': + '@oxfmt/binding-linux-ppc64-gnu@0.47.0': optional: true - '@oxfmt/binding-linux-riscv64-gnu@0.46.0': + '@oxfmt/binding-linux-riscv64-gnu@0.47.0': optional: true - '@oxfmt/binding-linux-riscv64-musl@0.46.0': + '@oxfmt/binding-linux-riscv64-musl@0.47.0': optional: true - '@oxfmt/binding-linux-s390x-gnu@0.46.0': + '@oxfmt/binding-linux-s390x-gnu@0.47.0': optional: true - '@oxfmt/binding-linux-x64-gnu@0.46.0': + '@oxfmt/binding-linux-x64-gnu@0.47.0': optional: true - '@oxfmt/binding-linux-x64-musl@0.46.0': + '@oxfmt/binding-linux-x64-musl@0.47.0': optional: true - '@oxfmt/binding-openharmony-arm64@0.46.0': + '@oxfmt/binding-openharmony-arm64@0.47.0': optional: true - '@oxfmt/binding-win32-arm64-msvc@0.46.0': + '@oxfmt/binding-win32-arm64-msvc@0.47.0': optional: true - '@oxfmt/binding-win32-ia32-msvc@0.46.0': + '@oxfmt/binding-win32-ia32-msvc@0.47.0': optional: true - '@oxfmt/binding-win32-x64-msvc@0.46.0': + '@oxfmt/binding-win32-x64-msvc@0.47.0': optional: true '@oxlint-tsgolint/darwin-arm64@0.18.1': @@ -2171,14 +2171,14 @@ snapshots: '@types/unist@3.0.3': {} - '@typescript-eslint/eslint-plugin@8.59.0(@typescript-eslint/parser@8.59.0(eslint@10.2.1)(typescript@5.9.3))(eslint@10.2.1)(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.59.1(@typescript-eslint/parser@8.59.1(eslint@10.2.1)(typescript@5.9.3))(eslint@10.2.1)(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.59.0(eslint@10.2.1)(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.59.0 - '@typescript-eslint/type-utils': 8.59.0(eslint@10.2.1)(typescript@5.9.3) - '@typescript-eslint/utils': 8.59.0(eslint@10.2.1)(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.59.0 + '@typescript-eslint/parser': 8.59.1(eslint@10.2.1)(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.59.1 + '@typescript-eslint/type-utils': 8.59.1(eslint@10.2.1)(typescript@5.9.3) + '@typescript-eslint/utils': 8.59.1(eslint@10.2.1)(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.59.1 eslint: 10.2.1 ignore: 7.0.5 natural-compare: 1.4.0 @@ -2187,41 +2187,41 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.59.0(eslint@10.2.1)(typescript@5.9.3)': + '@typescript-eslint/parser@8.59.1(eslint@10.2.1)(typescript@5.9.3)': dependencies: - '@typescript-eslint/scope-manager': 8.59.0 - '@typescript-eslint/types': 8.59.0 - '@typescript-eslint/typescript-estree': 8.59.0(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.59.0 + '@typescript-eslint/scope-manager': 8.59.1 + '@typescript-eslint/types': 8.59.1 + '@typescript-eslint/typescript-estree': 8.59.1(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.59.1 debug: 4.4.3 eslint: 10.2.1 typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.59.0(typescript@5.9.3)': + '@typescript-eslint/project-service@8.59.1(typescript@5.9.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.59.0(typescript@5.9.3) - '@typescript-eslint/types': 8.59.0 + '@typescript-eslint/tsconfig-utils': 8.59.1(typescript@5.9.3) + '@typescript-eslint/types': 8.59.1 debug: 4.4.3 typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.59.0': + '@typescript-eslint/scope-manager@8.59.1': dependencies: - '@typescript-eslint/types': 8.59.0 - '@typescript-eslint/visitor-keys': 8.59.0 + '@typescript-eslint/types': 8.59.1 + '@typescript-eslint/visitor-keys': 8.59.1 - '@typescript-eslint/tsconfig-utils@8.59.0(typescript@5.9.3)': + '@typescript-eslint/tsconfig-utils@8.59.1(typescript@5.9.3)': dependencies: typescript: 5.9.3 - '@typescript-eslint/type-utils@8.59.0(eslint@10.2.1)(typescript@5.9.3)': + '@typescript-eslint/type-utils@8.59.1(eslint@10.2.1)(typescript@5.9.3)': dependencies: - '@typescript-eslint/types': 8.59.0 - '@typescript-eslint/typescript-estree': 8.59.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.59.0(eslint@10.2.1)(typescript@5.9.3) + '@typescript-eslint/types': 8.59.1 + '@typescript-eslint/typescript-estree': 8.59.1(typescript@5.9.3) + '@typescript-eslint/utils': 8.59.1(eslint@10.2.1)(typescript@5.9.3) debug: 4.4.3 eslint: 10.2.1 ts-api-utils: 2.5.0(typescript@5.9.3) @@ -2229,14 +2229,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.59.0': {} + '@typescript-eslint/types@8.59.1': {} - '@typescript-eslint/typescript-estree@8.59.0(typescript@5.9.3)': + '@typescript-eslint/typescript-estree@8.59.1(typescript@5.9.3)': dependencies: - '@typescript-eslint/project-service': 8.59.0(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.59.0(typescript@5.9.3) - '@typescript-eslint/types': 8.59.0 - '@typescript-eslint/visitor-keys': 8.59.0 + '@typescript-eslint/project-service': 8.59.1(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.59.1(typescript@5.9.3) + '@typescript-eslint/types': 8.59.1 + '@typescript-eslint/visitor-keys': 8.59.1 debug: 4.4.3 minimatch: 10.2.5 semver: 7.7.4 @@ -2246,20 +2246,20 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.59.0(eslint@10.2.1)(typescript@5.9.3)': + '@typescript-eslint/utils@8.59.1(eslint@10.2.1)(typescript@5.9.3)': dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.1) - '@typescript-eslint/scope-manager': 8.59.0 - '@typescript-eslint/types': 8.59.0 - '@typescript-eslint/typescript-estree': 8.59.0(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.59.1 + '@typescript-eslint/types': 8.59.1 + '@typescript-eslint/typescript-estree': 8.59.1(typescript@5.9.3) eslint: 10.2.1 typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.59.0': + '@typescript-eslint/visitor-keys@8.59.1': dependencies: - '@typescript-eslint/types': 8.59.0 + '@typescript-eslint/types': 8.59.1 eslint-visitor-keys: 5.0.1 '@unrs/resolver-binding-android-arm-eabi@1.11.1': @@ -2410,7 +2410,7 @@ snapshots: dependencies: lilconfig: 3.1.3 picomatch: 4.0.4 - tinyexec: 1.1.1 + tinyexec: 1.1.2 tinyglobby: 0.2.16 cliui@8.0.1: @@ -2534,10 +2534,10 @@ snapshots: eslint: 10.2.1 eslint-compat-utils: 0.5.1(eslint@10.2.1) - eslint-plugin-import-x@4.16.2(@typescript-eslint/utils@8.59.0(eslint@10.2.1)(typescript@5.9.3))(eslint@10.2.1): + eslint-plugin-import-x@4.16.2(@typescript-eslint/utils@8.59.1(eslint@10.2.1)(typescript@5.9.3))(eslint@10.2.1): dependencies: '@package-json/types': 0.0.12 - '@typescript-eslint/types': 8.59.0 + '@typescript-eslint/types': 8.59.1 comment-parser: 1.4.6 debug: 4.4.3 eslint: 10.2.1 @@ -2548,7 +2548,7 @@ snapshots: stable-hash-x: 0.2.0 unrs-resolver: 1.11.1 optionalDependencies: - '@typescript-eslint/utils': 8.59.0(eslint@10.2.1)(typescript@5.9.3) + '@typescript-eslint/utils': 8.59.1(eslint@10.2.1)(typescript@5.9.3) transitivePeerDependencies: - supports-color @@ -2569,7 +2569,7 @@ snapshots: eslint-plugin-perfectionist@5.9.0(eslint@10.2.1)(typescript@5.9.3): dependencies: - '@typescript-eslint/utils': 8.59.0(eslint@10.2.1)(typescript@5.9.3) + '@typescript-eslint/utils': 8.59.1(eslint@10.2.1)(typescript@5.9.3) eslint: 10.2.1 natural-orderby: 5.0.0 transitivePeerDependencies: @@ -2877,29 +2877,29 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.5 - oxfmt@0.46.0: + oxfmt@0.47.0: dependencies: tinypool: 2.1.0 optionalDependencies: - '@oxfmt/binding-android-arm-eabi': 0.46.0 - '@oxfmt/binding-android-arm64': 0.46.0 - '@oxfmt/binding-darwin-arm64': 0.46.0 - '@oxfmt/binding-darwin-x64': 0.46.0 - '@oxfmt/binding-freebsd-x64': 0.46.0 - '@oxfmt/binding-linux-arm-gnueabihf': 0.46.0 - '@oxfmt/binding-linux-arm-musleabihf': 0.46.0 - '@oxfmt/binding-linux-arm64-gnu': 0.46.0 - '@oxfmt/binding-linux-arm64-musl': 0.46.0 - '@oxfmt/binding-linux-ppc64-gnu': 0.46.0 - '@oxfmt/binding-linux-riscv64-gnu': 0.46.0 - '@oxfmt/binding-linux-riscv64-musl': 0.46.0 - '@oxfmt/binding-linux-s390x-gnu': 0.46.0 - '@oxfmt/binding-linux-x64-gnu': 0.46.0 - '@oxfmt/binding-linux-x64-musl': 0.46.0 - '@oxfmt/binding-openharmony-arm64': 0.46.0 - '@oxfmt/binding-win32-arm64-msvc': 0.46.0 - '@oxfmt/binding-win32-ia32-msvc': 0.46.0 - '@oxfmt/binding-win32-x64-msvc': 0.46.0 + '@oxfmt/binding-android-arm-eabi': 0.47.0 + '@oxfmt/binding-android-arm64': 0.47.0 + '@oxfmt/binding-darwin-arm64': 0.47.0 + '@oxfmt/binding-darwin-x64': 0.47.0 + '@oxfmt/binding-freebsd-x64': 0.47.0 + '@oxfmt/binding-linux-arm-gnueabihf': 0.47.0 + '@oxfmt/binding-linux-arm-musleabihf': 0.47.0 + '@oxfmt/binding-linux-arm64-gnu': 0.47.0 + '@oxfmt/binding-linux-arm64-musl': 0.47.0 + '@oxfmt/binding-linux-ppc64-gnu': 0.47.0 + '@oxfmt/binding-linux-riscv64-gnu': 0.47.0 + '@oxfmt/binding-linux-riscv64-musl': 0.47.0 + '@oxfmt/binding-linux-s390x-gnu': 0.47.0 + '@oxfmt/binding-linux-x64-gnu': 0.47.0 + '@oxfmt/binding-linux-x64-musl': 0.47.0 + '@oxfmt/binding-openharmony-arm64': 0.47.0 + '@oxfmt/binding-win32-arm64-msvc': 0.47.0 + '@oxfmt/binding-win32-ia32-msvc': 0.47.0 + '@oxfmt/binding-win32-x64-msvc': 0.47.0 oxlint-tsgolint@0.18.1: optionalDependencies: @@ -3038,7 +3038,7 @@ snapshots: glob: 13.0.6 minimatch: 10.2.5 - tinyexec@1.1.1: {} + tinyexec@1.1.2: {} tinyglobby@0.2.16: dependencies: @@ -3085,12 +3085,12 @@ snapshots: dependencies: prelude-ls: 1.2.1 - typescript-eslint@8.59.0(eslint@10.2.1)(typescript@5.9.3): + typescript-eslint@8.59.1(eslint@10.2.1)(typescript@5.9.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.59.0(@typescript-eslint/parser@8.59.0(eslint@10.2.1)(typescript@5.9.3))(eslint@10.2.1)(typescript@5.9.3) - '@typescript-eslint/parser': 8.59.0(eslint@10.2.1)(typescript@5.9.3) - '@typescript-eslint/typescript-estree': 8.59.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.59.0(eslint@10.2.1)(typescript@5.9.3) + '@typescript-eslint/eslint-plugin': 8.59.1(@typescript-eslint/parser@8.59.1(eslint@10.2.1)(typescript@5.9.3))(eslint@10.2.1)(typescript@5.9.3) + '@typescript-eslint/parser': 8.59.1(eslint@10.2.1)(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.59.1(typescript@5.9.3) + '@typescript-eslint/utils': 8.59.1(eslint@10.2.1)(typescript@5.9.3) eslint: 10.2.1 typescript: 5.9.3 transitivePeerDependencies: From f227dbd0e9443e5f33e18e633b8b4d2b55aac5ee Mon Sep 17 00:00:00 2001 From: Andrey Sitnik Date: Thu, 30 Apr 2026 20:17:16 +0000 Subject: [PATCH 16/89] Temporary ignore pnpm 11 config --- .npmignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.npmignore b/.npmignore index 96b41ad96..9439f8b9d 100644 --- a/.npmignore +++ b/.npmignore @@ -4,4 +4,4 @@ test/ docs/ tsconfig.json eslint.config.mjs -patches +pnpm-workspace.yaml From af58cf1b7af02e9b9fcb138a4a2d7ef3450158b1 Mon Sep 17 00:00:00 2001 From: Andrey Sitnik Date: Thu, 30 Apr 2026 20:18:02 +0000 Subject: [PATCH 17/89] Release 8.5.13 version --- CHANGELOG.md | 4 ++++ lib/processor.js | 2 +- package.json | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7ef96abfd..d502ec656 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ This project adheres to [Semantic Versioning](https://semver.org/). +## 8.5.13 + +- Fixed `postcss-scss` commend regression. + ## 8.5.12 - Fixed reading any file via user-generated CSS. diff --git a/lib/processor.js b/lib/processor.js index a6d1c5da6..bb07d537d 100644 --- a/lib/processor.js +++ b/lib/processor.js @@ -7,7 +7,7 @@ let Root = require('./root') class Processor { constructor(plugins = []) { - this.version = '8.5.12' + this.version = '8.5.13' this.plugins = this.normalize(plugins) } diff --git a/package.json b/package.json index 8c24bfce0..564aa23fa 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "postcss", - "version": "8.5.12", + "version": "8.5.13", "description": "Tool for transforming styles with JS plugins", "keywords": [ "css", From 68bd2139b5dcaf5a682bc2e8826d8557be2d1480 Mon Sep 17 00:00:00 2001 From: James Garbutt <43081j@users.noreply.github.com> Date: Mon, 4 May 2026 12:33:28 +0100 Subject: [PATCH 18/89] fix: always call `raw` to retrieve raw values Without this, it becomes impossible to override the stringifier with your own raw computation, etc. --- lib/stringifier.js | 35 +++++++---------------------------- test/stringifier.test.js | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 28 deletions(-) diff --git a/lib/stringifier.js b/lib/stringifier.js index 72a3f9319..b1aa835d8 100644 --- a/lib/stringifier.js +++ b/lib/stringifier.js @@ -85,23 +85,15 @@ class Stringifier { } block(node, start) { - let raws = node.raws - let between = - typeof raws.between !== 'undefined' - ? raws.between - : this.raw(node, 'between', 'beforeOpen') + let between = this.raw(node, 'between', 'beforeOpen') this.builder(escapeHTMLInCSS(start + between) + '{', node, 'start') let after if (node.nodes && node.nodes.length) { this.body(node) - after = - typeof raws.after !== 'undefined' ? raws.after : this.raw(node, 'after') + after = this.raw(node, 'after') } else { - after = - typeof raws.after !== 'undefined' - ? raws.after - : this.raw(node, 'after', 'emptyBody') + after = this.raw(node, 'after', 'emptyBody') } if (after) this.builder(escapeHTMLInCSS(after)) @@ -120,34 +112,21 @@ class Stringifier { let isDocument = node.type === 'document' for (let i = 0; i < nodes.length; i++) { let child = nodes[i] - let before = child.raws.before - if (typeof before === 'undefined') { - before = this.raw(child, 'before') - } + let before = this.raw(child, 'before') if (before) this.builder(isDocument ? before : escapeHTMLInCSS(before)) this.stringify(child, last !== i || semicolon) } } comment(node) { - let raws = node.raws - let left = - typeof raws.left !== 'undefined' - ? raws.left - : this.raw(node, 'left', 'commentLeft') - let right = - typeof raws.right !== 'undefined' - ? raws.right - : this.raw(node, 'right', 'commentRight') + let left = this.raw(node, 'left', 'commentLeft') + let right = this.raw(node, 'right', 'commentRight') this.builder(escapeHTMLInCSS('/*' + left + node.text + right + '*/'), node) } decl(node, semicolon) { let raws = node.raws - let between = - typeof raws.between !== 'undefined' - ? raws.between - : this.raw(node, 'between', 'colon') + let between = this.raw(node, 'between', 'colon') let string = node.prop + between + this.rawValue(node, 'value') diff --git a/test/stringifier.test.js b/test/stringifier.test.js index c0afd658a..4414cd46e 100755 --- a/test/stringifier.test.js +++ b/test/stringifier.test.js @@ -320,4 +320,39 @@ test('does not escape Document raws', () => { is(document.toString(), 'a {}b {}') }) +test('always calls raw to retrieve raws', () => { + class CustomStringifier extends Stringifier { + raw(node, own, detect) { + return `\nRAW(${node.type}, ${own}, ${detect})\n` + } + } + let root = new Root() + let rootRule = new Rule({ selector: 'a' }) + let decl = new Declaration({ prop: 'color', value: 'black' }) + decl.raws.before = 'BEFORE' + decl.raws.between = 'BETWEEN' + decl.raws.after = 'AFTER' + root.append(rootRule) + rootRule.append(decl) + + let stringify = (node, builder) => { + let customStringifier = new CustomStringifier(builder) + customStringifier.stringify(node) + } + let result = root.toString(stringify) + is(result, [ + '', + 'RAW(rule, before, undefined)', + 'a', + 'RAW(rule, between, beforeOpen)', + '{', + 'RAW(decl, before, undefined)', + 'color', + 'RAW(decl, between, colon)', + 'black;', + 'RAW(rule, after, undefined)', + '}' + ].join('\n')) +}) + test.run() From f2bb827b20b591080977412555aa3e5baf588620 Mon Sep 17 00:00:00 2001 From: Andrey Sitnik Date: Mon, 4 May 2026 16:40:15 +0000 Subject: [PATCH 19/89] Update dependencies --- .github/workflows/test.yml | 8 +-- package.json | 4 +- pnpm-lock.yaml | 110 ++++++++++++++++++------------------- 3 files changed, 61 insertions(+), 61 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index a15760b5a..2771ece37 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -14,7 +14,7 @@ jobs: - name: Checkout the repository uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Install pnpm - uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v5.0.0 + uses: pnpm/action-setup@8912a9102ac27614460f54aedde9e1e7f9aec20d # v6.0.5 with: version: 11 - name: Install Node.js @@ -38,7 +38,7 @@ jobs: - name: Checkout the repository uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Install pnpm - uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v5.0.0 + uses: pnpm/action-setup@8912a9102ac27614460f54aedde9e1e7f9aec20d # v6.0.5 with: version: 11 - name: Install Node.js ${{ matrix.node-version }} @@ -66,7 +66,7 @@ jobs: - name: Checkout the repository uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Install pnpm - uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v5.0.0 + uses: pnpm/action-setup@8912a9102ac27614460f54aedde9e1e7f9aec20d # v6.0.5 with: version: 3 env: @@ -88,7 +88,7 @@ jobs: - name: Checkout the repository uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Install pnpm - uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v5.0.0 + uses: pnpm/action-setup@8912a9102ac27614460f54aedde9e1e7f9aec20d # v6.0.5 with: version: 10 - name: Install Node.js LTS diff --git a/package.json b/package.json index 564aa23fa..e4641a830 100644 --- a/package.json +++ b/package.json @@ -101,9 +101,9 @@ "actions-up": "^1.14.1", "c8": "^11.0.0", "check-dts": "^0.9.0", - "clean-publish": "^6.0.5", + "clean-publish": "^7.0.1", "concat-with-sourcemaps": "^1.1.0", - "eslint": "^10.2.1", + "eslint": "^10.3.0", "multiocular": "^0.8.3", "nanodelay": "^1.0.8", "nanospy": "^1.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ba1cb0694..4bd549f65 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,7 +20,7 @@ importers: devDependencies: '@logux/eslint-config': specifier: ^57.1.0 - version: 57.1.0(@typescript-eslint/utils@8.59.1(eslint@10.2.1)(typescript@5.9.3))(eslint@10.2.1)(typescript@5.9.3) + version: 57.1.0(@typescript-eslint/utils@8.59.1(eslint@10.3.0)(typescript@5.9.3))(eslint@10.3.0)(typescript@5.9.3) '@logux/oxc-configs': specifier: ^0.4.0 version: 0.4.0(oxlint-tsgolint@0.18.1)(oxlint@1.58.0(oxlint-tsgolint@0.18.1))(typescript@5.9.3) @@ -40,14 +40,14 @@ importers: specifier: ^0.9.0 version: 0.9.0(typescript@5.9.3) clean-publish: - specifier: ^6.0.5 - version: 6.0.5 + specifier: ^7.0.1 + version: 7.0.1 concat-with-sourcemaps: specifier: ^1.1.0 version: 1.1.0 eslint: - specifier: ^10.2.1 - version: 10.2.1 + specifier: ^10.3.0 + version: 10.3.0 multiocular: specifier: ^0.8.3 version: 0.8.3 @@ -967,9 +967,9 @@ packages: peerDependencies: typescript: '>=4.0.0' - clean-publish@6.0.5: - resolution: {integrity: sha512-Iqm/EDPQFLY0I8kktg61Nt8V/5fiXYNkNR5UsHcLKmj4vp7a0a7EGZmNEbN2Hg77frQlHNljT/MruK5Wr/Rtog==} - engines: {node: '>= 20.0.0'} + clean-publish@7.0.1: + resolution: {integrity: sha512-Fr4c1dg6kEG4juBo2IMbft0w8inX0QTsbkRWIy5R0jZGWswQIpgOW0yfqV7bmyxn1F1eQtm9VBy5VDyB3go8WQ==} + engines: {node: '>= 22.0.0'} hasBin: true cliui@8.0.1: @@ -1132,8 +1132,8 @@ packages: resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - eslint@10.2.1: - resolution: {integrity: sha512-wiyGaKsDgqXvF40P8mDwiUp/KQjE1FdrIEJsM8PZ3XCiniTMXS3OHWWUe5FI5agoCnr8x4xPrTDZuxsBlNHl+Q==} + eslint@10.3.0: + resolution: {integrity: sha512-XbEXaRva5cF0ZQB8w6MluHA0kZZfV2DuCMJ3ozyEOHLwDpZX2Lmm/7Pp0xdJmI0GL1W05VH5VwIFHEm1Vcw2gw==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} hasBin: true peerDependencies: @@ -1846,9 +1846,9 @@ snapshots: '@esbuild/win32-x64@0.28.0': optional: true - '@eslint-community/eslint-utils@4.9.1(eslint@10.2.1)': + '@eslint-community/eslint-utils@4.9.1(eslint@10.3.0)': dependencies: - eslint: 10.2.1 + eslint: 10.3.0 eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.2': {} @@ -1930,16 +1930,16 @@ snapshots: dependencies: nanoevents: 9.1.0 - '@logux/eslint-config@57.1.0(@typescript-eslint/utils@8.59.1(eslint@10.2.1)(typescript@5.9.3))(eslint@10.2.1)(typescript@5.9.3)': + '@logux/eslint-config@57.1.0(@typescript-eslint/utils@8.59.1(eslint@10.3.0)(typescript@5.9.3))(eslint@10.3.0)(typescript@5.9.3)': dependencies: '@eslint/eslintrc': 3.3.5 - eslint: 10.2.1 - eslint-plugin-import-x: 4.16.2(@typescript-eslint/utils@8.59.1(eslint@10.2.1)(typescript@5.9.3))(eslint@10.2.1) - eslint-plugin-n: 17.24.0(eslint@10.2.1)(typescript@5.9.3) - eslint-plugin-perfectionist: 5.9.0(eslint@10.2.1)(typescript@5.9.3) + eslint: 10.3.0 + eslint-plugin-import-x: 4.16.2(@typescript-eslint/utils@8.59.1(eslint@10.3.0)(typescript@5.9.3))(eslint@10.3.0) + eslint-plugin-n: 17.24.0(eslint@10.3.0)(typescript@5.9.3) + eslint-plugin-perfectionist: 5.9.0(eslint@10.3.0)(typescript@5.9.3) eslint-plugin-prefer-let: 4.2.2 globals: 17.5.0 - typescript-eslint: 8.59.1(eslint@10.2.1)(typescript@5.9.3) + typescript-eslint: 8.59.1(eslint@10.3.0)(typescript@5.9.3) transitivePeerDependencies: - '@typescript-eslint/utils' - eslint-import-resolver-node @@ -2171,15 +2171,15 @@ snapshots: '@types/unist@3.0.3': {} - '@typescript-eslint/eslint-plugin@8.59.1(@typescript-eslint/parser@8.59.1(eslint@10.2.1)(typescript@5.9.3))(eslint@10.2.1)(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.59.1(@typescript-eslint/parser@8.59.1(eslint@10.3.0)(typescript@5.9.3))(eslint@10.3.0)(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.59.1(eslint@10.2.1)(typescript@5.9.3) + '@typescript-eslint/parser': 8.59.1(eslint@10.3.0)(typescript@5.9.3) '@typescript-eslint/scope-manager': 8.59.1 - '@typescript-eslint/type-utils': 8.59.1(eslint@10.2.1)(typescript@5.9.3) - '@typescript-eslint/utils': 8.59.1(eslint@10.2.1)(typescript@5.9.3) + '@typescript-eslint/type-utils': 8.59.1(eslint@10.3.0)(typescript@5.9.3) + '@typescript-eslint/utils': 8.59.1(eslint@10.3.0)(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.59.1 - eslint: 10.2.1 + eslint: 10.3.0 ignore: 7.0.5 natural-compare: 1.4.0 ts-api-utils: 2.5.0(typescript@5.9.3) @@ -2187,14 +2187,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.59.1(eslint@10.2.1)(typescript@5.9.3)': + '@typescript-eslint/parser@8.59.1(eslint@10.3.0)(typescript@5.9.3)': dependencies: '@typescript-eslint/scope-manager': 8.59.1 '@typescript-eslint/types': 8.59.1 '@typescript-eslint/typescript-estree': 8.59.1(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.59.1 debug: 4.4.3 - eslint: 10.2.1 + eslint: 10.3.0 typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -2217,13 +2217,13 @@ snapshots: dependencies: typescript: 5.9.3 - '@typescript-eslint/type-utils@8.59.1(eslint@10.2.1)(typescript@5.9.3)': + '@typescript-eslint/type-utils@8.59.1(eslint@10.3.0)(typescript@5.9.3)': dependencies: '@typescript-eslint/types': 8.59.1 '@typescript-eslint/typescript-estree': 8.59.1(typescript@5.9.3) - '@typescript-eslint/utils': 8.59.1(eslint@10.2.1)(typescript@5.9.3) + '@typescript-eslint/utils': 8.59.1(eslint@10.3.0)(typescript@5.9.3) debug: 4.4.3 - eslint: 10.2.1 + eslint: 10.3.0 ts-api-utils: 2.5.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: @@ -2246,13 +2246,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.59.1(eslint@10.2.1)(typescript@5.9.3)': + '@typescript-eslint/utils@8.59.1(eslint@10.3.0)(typescript@5.9.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.1) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.3.0) '@typescript-eslint/scope-manager': 8.59.1 '@typescript-eslint/types': 8.59.1 '@typescript-eslint/typescript-estree': 8.59.1(typescript@5.9.3) - eslint: 10.2.1 + eslint: 10.3.0 typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -2406,7 +2406,7 @@ snapshots: typescript: 5.9.3 vfile-location: 5.0.3 - clean-publish@6.0.5: + clean-publish@7.0.1: dependencies: lilconfig: 3.1.3 picomatch: 4.0.4 @@ -2515,9 +2515,9 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-compat-utils@0.5.1(eslint@10.2.1): + eslint-compat-utils@0.5.1(eslint@10.3.0): dependencies: - eslint: 10.2.1 + eslint: 10.3.0 semver: 7.7.4 eslint-import-context@0.1.9(unrs-resolver@1.11.1): @@ -2527,20 +2527,20 @@ snapshots: optionalDependencies: unrs-resolver: 1.11.1 - eslint-plugin-es-x@7.8.0(eslint@10.2.1): + eslint-plugin-es-x@7.8.0(eslint@10.3.0): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.1) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.3.0) '@eslint-community/regexpp': 4.12.2 - eslint: 10.2.1 - eslint-compat-utils: 0.5.1(eslint@10.2.1) + eslint: 10.3.0 + eslint-compat-utils: 0.5.1(eslint@10.3.0) - eslint-plugin-import-x@4.16.2(@typescript-eslint/utils@8.59.1(eslint@10.2.1)(typescript@5.9.3))(eslint@10.2.1): + eslint-plugin-import-x@4.16.2(@typescript-eslint/utils@8.59.1(eslint@10.3.0)(typescript@5.9.3))(eslint@10.3.0): dependencies: '@package-json/types': 0.0.12 '@typescript-eslint/types': 8.59.1 comment-parser: 1.4.6 debug: 4.4.3 - eslint: 10.2.1 + eslint: 10.3.0 eslint-import-context: 0.1.9(unrs-resolver@1.11.1) is-glob: 4.0.3 minimatch: 10.2.5 @@ -2548,16 +2548,16 @@ snapshots: stable-hash-x: 0.2.0 unrs-resolver: 1.11.1 optionalDependencies: - '@typescript-eslint/utils': 8.59.1(eslint@10.2.1)(typescript@5.9.3) + '@typescript-eslint/utils': 8.59.1(eslint@10.3.0)(typescript@5.9.3) transitivePeerDependencies: - supports-color - eslint-plugin-n@17.24.0(eslint@10.2.1)(typescript@5.9.3): + eslint-plugin-n@17.24.0(eslint@10.3.0)(typescript@5.9.3): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.1) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.3.0) enhanced-resolve: 5.21.0 - eslint: 10.2.1 - eslint-plugin-es-x: 7.8.0(eslint@10.2.1) + eslint: 10.3.0 + eslint-plugin-es-x: 7.8.0(eslint@10.3.0) get-tsconfig: 4.14.0 globals: 15.15.0 globrex: 0.1.2 @@ -2567,10 +2567,10 @@ snapshots: transitivePeerDependencies: - typescript - eslint-plugin-perfectionist@5.9.0(eslint@10.2.1)(typescript@5.9.3): + eslint-plugin-perfectionist@5.9.0(eslint@10.3.0)(typescript@5.9.3): dependencies: - '@typescript-eslint/utils': 8.59.1(eslint@10.2.1)(typescript@5.9.3) - eslint: 10.2.1 + '@typescript-eslint/utils': 8.59.1(eslint@10.3.0)(typescript@5.9.3) + eslint: 10.3.0 natural-orderby: 5.0.0 transitivePeerDependencies: - supports-color @@ -2593,9 +2593,9 @@ snapshots: eslint-visitor-keys@5.0.1: {} - eslint@10.2.1: + eslint@10.3.0: dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.1) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.3.0) '@eslint-community/regexpp': 4.12.2 '@eslint/config-array': 0.23.5 '@eslint/config-helpers': 0.5.5 @@ -3085,13 +3085,13 @@ snapshots: dependencies: prelude-ls: 1.2.1 - typescript-eslint@8.59.1(eslint@10.2.1)(typescript@5.9.3): + typescript-eslint@8.59.1(eslint@10.3.0)(typescript@5.9.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.59.1(@typescript-eslint/parser@8.59.1(eslint@10.2.1)(typescript@5.9.3))(eslint@10.2.1)(typescript@5.9.3) - '@typescript-eslint/parser': 8.59.1(eslint@10.2.1)(typescript@5.9.3) + '@typescript-eslint/eslint-plugin': 8.59.1(@typescript-eslint/parser@8.59.1(eslint@10.3.0)(typescript@5.9.3))(eslint@10.3.0)(typescript@5.9.3) + '@typescript-eslint/parser': 8.59.1(eslint@10.3.0)(typescript@5.9.3) '@typescript-eslint/typescript-estree': 8.59.1(typescript@5.9.3) - '@typescript-eslint/utils': 8.59.1(eslint@10.2.1)(typescript@5.9.3) - eslint: 10.2.1 + '@typescript-eslint/utils': 8.59.1(eslint@10.3.0)(typescript@5.9.3) + eslint: 10.3.0 typescript: 5.9.3 transitivePeerDependencies: - supports-color From 3ec13948ae0006e1bde2dfb545346341ac8b2dcf Mon Sep 17 00:00:00 2001 From: Andrey Sitnik Date: Mon, 4 May 2026 16:41:38 +0000 Subject: [PATCH 20/89] Release 8.5.14 version --- CHANGELOG.md | 4 ++++ lib/processor.js | 2 +- package.json | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d502ec656..aa7eb91a4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ This project adheres to [Semantic Versioning](https://semver.org/). +## 8.5.14 + +- Fixed custom syntax regression (by @43081j). + ## 8.5.13 - Fixed `postcss-scss` commend regression. diff --git a/lib/processor.js b/lib/processor.js index bb07d537d..eabcd9f12 100644 --- a/lib/processor.js +++ b/lib/processor.js @@ -7,7 +7,7 @@ let Root = require('./root') class Processor { constructor(plugins = []) { - this.version = '8.5.13' + this.version = '8.5.14' this.plugins = this.normalize(plugins) } diff --git a/package.json b/package.json index e4641a830..f4203f432 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "postcss", - "version": "8.5.13", + "version": "8.5.14", "description": "Tool for transforming styles with JS plugins", "keywords": [ "css", From 4be4c1caa9fa80ce88035b3f4697d0d8735e9e3c Mon Sep 17 00:00:00 2001 From: Andrey Sitnik Date: Mon, 4 May 2026 16:44:28 +0000 Subject: [PATCH 21/89] Fix CI --- .github/workflows/test.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 2771ece37..6311f55dc 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -66,7 +66,7 @@ jobs: - name: Checkout the repository uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Install pnpm - uses: pnpm/action-setup@8912a9102ac27614460f54aedde9e1e7f9aec20d # v6.0.5 + uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v5.0.0 with: version: 3 env: @@ -90,7 +90,7 @@ jobs: - name: Install pnpm uses: pnpm/action-setup@8912a9102ac27614460f54aedde9e1e7f9aec20d # v6.0.5 with: - version: 10 + version: 11 - name: Install Node.js LTS uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 with: From eedc796c7626f3b73ddd2aa45f5d964151361043 Mon Sep 17 00:00:00 2001 From: Andrey Sitnik Date: Mon, 11 May 2026 08:41:04 +0000 Subject: [PATCH 22/89] Fix image URL --- docs/architecture.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/architecture.md b/docs/architecture.md index 906dcd11b..e5ee0c523 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -35,7 +35,7 @@ Before diving deeper into the development of PostCSS let's briefly describe what This is a high-level overview of the whole PostCSS workflow -workflow +workflow As you can see from the diagram above, PostCSS architecture is pretty straightforward but some parts of it could be misunderstood. From 837db04c1738a957a6552ec490e81af139454c4b Mon Sep 17 00:00:00 2001 From: Andrey Sitnik Date: Mon, 11 May 2026 08:42:00 +0000 Subject: [PATCH 23/89] Fix to another link --- docs/architecture.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/architecture.md b/docs/architecture.md index e5ee0c523..8a9c39b27 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -35,7 +35,7 @@ Before diving deeper into the development of PostCSS let's briefly describe what This is a high-level overview of the whole PostCSS workflow -workflow +workflow As you can see from the diagram above, PostCSS architecture is pretty straightforward but some parts of it could be misunderstood. From 9a0d24d1ace1ae1d5dd90728187b19ba6a45e41c Mon Sep 17 00:00:00 2001 From: Andrey Sitnik Date: Mon, 11 May 2026 08:42:51 +0000 Subject: [PATCH 24/89] Remove image since WIkipedia stopped to serve it to third parties --- docs/architecture.md | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/docs/architecture.md b/docs/architecture.md index 8a9c39b27..2537a11b8 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -33,11 +33,7 @@ Before diving deeper into the development of PostCSS let's briefly describe what ### Workflow -This is a high-level overview of the whole PostCSS workflow - -workflow - -As you can see from the diagram above, PostCSS architecture is pretty straightforward but some parts of it could be misunderstood. +This is a [high-level overview](https://commons.wikimedia.org/wiki/File:PostCSS_scheme.svg) of the whole PostCSS workflow. You can see a part called _Parser_, this construct will be described in details later on, just for now think about it as a structure that can understand your CSS like syntax and create an object representation of it. From dcf05a0a2905b634da5801b766b095ef0649a9d2 Mon Sep 17 00:00:00 2001 From: rootvector2 Date: Mon, 11 May 2026 20:18:26 +0530 Subject: [PATCH 25/89] Add OSS-Fuzz fuzzing harness under test/fuzzing/ --- test/fuzzing/fuzz_parse.dict | 101 ++++++++++++++++++++++++++++ test/fuzzing/fuzz_parse.js | 123 +++++++++++++++++++++++++++++++++++ 2 files changed, 224 insertions(+) create mode 100644 test/fuzzing/fuzz_parse.dict create mode 100644 test/fuzzing/fuzz_parse.js diff --git a/test/fuzzing/fuzz_parse.dict b/test/fuzzing/fuzz_parse.dict new file mode 100644 index 000000000..210fd1b09 --- /dev/null +++ b/test/fuzzing/fuzz_parse.dict @@ -0,0 +1,101 @@ +# Dictionary of common CSS tokens for libFuzzer. +# Reference: https://www.w3.org/TR/css-syntax-3/ + +# At-rules +"@charset " +"@import " +"@media " +"@supports " +"@font-face " +"@keyframes " +"@page " +"@namespace " +"@document " +"@layer " +"@container " +"@property " +"@scope " +"@counter-style " +"@font-feature-values " + +# Structural punctuation +"{" +"}" +";" +":" +"," +"(" +")" +"[" +"]" +"/*" +"*/" +"!important" +"--" + +# Selectors +"*" +">" +"+" +"~" +"::" +"&" + +# Common pseudo-classes / pseudo-elements +":hover" +":focus" +":active" +":root" +":not(" +":is(" +":where(" +":has(" +"::before" +"::after" + +# Common properties +"color:" +"background:" +"background-color:" +"width:" +"height:" +"margin:" +"padding:" +"border:" +"display:" +"position:" +"font-size:" +"font-family:" +"transform:" +"transition:" +"animation:" +"grid-template-columns:" +"flex:" + +# Values / units +"px" +"em" +"rem" +"%" +"vh" +"vw" +"deg" +"rgb(" +"rgba(" +"hsl(" +"hsla(" +"calc(" +"var(" +"url(" +"linear-gradient(" +"none" +"auto" +"inherit" +"initial" +"unset" +"revert" + +# Strings / escapes +"\"" +"'" +"\\" diff --git a/test/fuzzing/fuzz_parse.js b/test/fuzzing/fuzz_parse.js new file mode 100644 index 000000000..6e793fef2 --- /dev/null +++ b/test/fuzzing/fuzz_parse.js @@ -0,0 +1,123 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//////////////////////////////////////////////////////////////////////////////// + +const { FuzzedDataProvider } = require('@jazzer.js/core'); +const postcss = require('../../lib/postcss'); + +module.exports.fuzz = function (data) { + const provider = new FuzzedDataProvider(data); + + // The CSS input itself is randomized: every byte the fuzzer produces (or + // mutates from the seed corpus) flows directly into `cssString` via + // consumeRemainingAsString(). The option flags below are read from the + // *back* of the buffer (jazzer.js consumes integrals/booleans from the + // tail), so seed CSS files from postcss-parser-tests are fed into the + // parser nearly verbatim, with only their last few bytes nibbled off as + // option control. + const useMap = provider.consumeBoolean(); + const useFrom = provider.consumeBoolean(); + const useProcessor = provider.consumeBoolean(); + const splitMode = provider.consumeIntegralInRange(0, 2); + const cssString = provider.consumeRemainingAsString(); + + const parseOptions = {}; + if (useFrom) parseOptions.from = 'fuzz.css'; + if (useMap) parseOptions.map = { inline: false, annotation: false }; + + let root; + try { + root = postcss.parse(cssString, parseOptions); + } catch (e) { + if (e instanceof postcss.CssSyntaxError) return; + throw e; + } + + // Walk the AST and exercise common node accessors. This also stresses + // raws/source bookkeeping for any node returned by the parser. + try { + root.walk(node => { + void node.type; + void node.toString(); + if (typeof node.error === 'function') { + // Generating an error message touches input/source-map machinery. + node.error('fuzz').message; + } + }); + } catch (e) { + if (!isExpected(e, postcss)) throw e; + } + + // Round-trip via stringify and re-parse. Output should itself be parseable. + let serialized; + try { + serialized = root.toString(); + } catch (e) { + if (!isExpected(e, postcss)) throw e; + return; + } + + try { + postcss.parse(serialized); + } catch (e) { + if (!(e instanceof postcss.CssSyntaxError)) throw e; + } + + // Exercise the JSON serialization round-trip. + try { + const json = root.toJSON(); + postcss.fromJSON(json); + } catch (e) { + if (!isExpected(e, postcss)) throw e; + } + + // Exercise the main public entry point: postcss().process(). This drives + // the LazyResult / NoWorkResult pipeline that real plugin chains use. + if (useProcessor) { + try { + const result = postcss().process(cssString, parseOptions); + void result.css; + void result.warnings(); + } catch (e) { + if (!isExpected(e, postcss)) throw e; + } + } + + // Exercise the list helpers, which have their own quoting/escape logic. + try { + if (splitMode === 0) { + postcss.list.comma(cssString); + } else if (splitMode === 1) { + postcss.list.space(cssString); + } else { + postcss.list.split(cssString, [',', ' '], false); + } + } catch (e) { + if (!isExpected(e, postcss)) throw e; + } +}; + +function isExpected(error, postcss) { + if (error instanceof postcss.CssSyntaxError) return true; + if (!error || typeof error.message !== 'string') return false; + // Some legitimate inputs reach known-shaped TypeErrors during stringify or + // walk because the CSS allows constructs whose textual form is ambiguous. + // Suppress only those well-defined cases so real bugs still surface. + const benign = [ + 'Unknown node type', + 'Unknown word', + ]; + return benign.some(msg => error.message.indexOf(msg) !== -1); +} From b6a609472b3323ac044d30b75331031902a6ab17 Mon Sep 17 00:00:00 2001 From: rootvector2 Date: Mon, 11 May 2026 21:41:17 +0530 Subject: [PATCH 26/89] Address review: source-map dict tokens and oxfmt formatting --- test/fuzzing/fuzz_parse.dict | 8 ++++ test/fuzzing/fuzz_parse.js | 87 +++++++++++++++++------------------- 2 files changed, 50 insertions(+), 45 deletions(-) diff --git a/test/fuzzing/fuzz_parse.dict b/test/fuzzing/fuzz_parse.dict index 210fd1b09..0f6f9ea32 100644 --- a/test/fuzzing/fuzz_parse.dict +++ b/test/fuzzing/fuzz_parse.dict @@ -99,3 +99,11 @@ "\"" "'" "\\" + +# Source map annotations +# Reaching the source-map parsing branch quickly has historically uncovered +# bugs; postcss matches /\*\s*# sourceMappingURL=/ and decodes inline base64 +# payloads via the `data:application/json;base64,` prefix. +"/*# sourceMappingURL=" +"# sourceMappingURL=" +"data:application/json;base64," diff --git a/test/fuzzing/fuzz_parse.js b/test/fuzzing/fuzz_parse.js index 6e793fef2..f5b71bbe7 100644 --- a/test/fuzzing/fuzz_parse.js +++ b/test/fuzzing/fuzz_parse.js @@ -14,11 +14,11 @@ // //////////////////////////////////////////////////////////////////////////////// -const { FuzzedDataProvider } = require('@jazzer.js/core'); -const postcss = require('../../lib/postcss'); +const { FuzzedDataProvider } = require('@jazzer.js/core') +const postcss = require('../../lib/postcss') module.exports.fuzz = function (data) { - const provider = new FuzzedDataProvider(data); + const provider = new FuzzedDataProvider(data) // The CSS input itself is randomized: every byte the fuzzer produces (or // mutates from the seed corpus) flows directly into `cssString` via @@ -27,97 +27,94 @@ module.exports.fuzz = function (data) { // tail), so seed CSS files from postcss-parser-tests are fed into the // parser nearly verbatim, with only their last few bytes nibbled off as // option control. - const useMap = provider.consumeBoolean(); - const useFrom = provider.consumeBoolean(); - const useProcessor = provider.consumeBoolean(); - const splitMode = provider.consumeIntegralInRange(0, 2); - const cssString = provider.consumeRemainingAsString(); + const useMap = provider.consumeBoolean() + const useFrom = provider.consumeBoolean() + const useProcessor = provider.consumeBoolean() + const splitMode = provider.consumeIntegralInRange(0, 2) + const cssString = provider.consumeRemainingAsString() - const parseOptions = {}; - if (useFrom) parseOptions.from = 'fuzz.css'; - if (useMap) parseOptions.map = { inline: false, annotation: false }; + const parseOptions = {} + if (useFrom) parseOptions.from = 'fuzz.css' + if (useMap) parseOptions.map = { inline: false, annotation: false } - let root; + let root try { - root = postcss.parse(cssString, parseOptions); + root = postcss.parse(cssString, parseOptions) } catch (e) { - if (e instanceof postcss.CssSyntaxError) return; - throw e; + if (e instanceof postcss.CssSyntaxError) return + throw e } // Walk the AST and exercise common node accessors. This also stresses // raws/source bookkeeping for any node returned by the parser. try { root.walk(node => { - void node.type; - void node.toString(); + void node.type + void node.toString() if (typeof node.error === 'function') { // Generating an error message touches input/source-map machinery. - node.error('fuzz').message; + node.error('fuzz').message } - }); + }) } catch (e) { - if (!isExpected(e, postcss)) throw e; + if (!isExpected(e, postcss)) throw e } // Round-trip via stringify and re-parse. Output should itself be parseable. - let serialized; + let serialized try { - serialized = root.toString(); + serialized = root.toString() } catch (e) { - if (!isExpected(e, postcss)) throw e; - return; + if (!isExpected(e, postcss)) throw e + return } try { - postcss.parse(serialized); + postcss.parse(serialized) } catch (e) { - if (!(e instanceof postcss.CssSyntaxError)) throw e; + if (!(e instanceof postcss.CssSyntaxError)) throw e } // Exercise the JSON serialization round-trip. try { - const json = root.toJSON(); - postcss.fromJSON(json); + const json = root.toJSON() + postcss.fromJSON(json) } catch (e) { - if (!isExpected(e, postcss)) throw e; + if (!isExpected(e, postcss)) throw e } // Exercise the main public entry point: postcss().process(). This drives // the LazyResult / NoWorkResult pipeline that real plugin chains use. if (useProcessor) { try { - const result = postcss().process(cssString, parseOptions); - void result.css; - void result.warnings(); + const result = postcss().process(cssString, parseOptions) + void result.css + void result.warnings() } catch (e) { - if (!isExpected(e, postcss)) throw e; + if (!isExpected(e, postcss)) throw e } } // Exercise the list helpers, which have their own quoting/escape logic. try { if (splitMode === 0) { - postcss.list.comma(cssString); + postcss.list.comma(cssString) } else if (splitMode === 1) { - postcss.list.space(cssString); + postcss.list.space(cssString) } else { - postcss.list.split(cssString, [',', ' '], false); + postcss.list.split(cssString, [',', ' '], false) } } catch (e) { - if (!isExpected(e, postcss)) throw e; + if (!isExpected(e, postcss)) throw e } -}; +} function isExpected(error, postcss) { - if (error instanceof postcss.CssSyntaxError) return true; - if (!error || typeof error.message !== 'string') return false; + if (error instanceof postcss.CssSyntaxError) return true + if (!error || typeof error.message !== 'string') return false // Some legitimate inputs reach known-shaped TypeErrors during stringify or // walk because the CSS allows constructs whose textual form is ambiguous. // Suppress only those well-defined cases so real bugs still surface. - const benign = [ - 'Unknown node type', - 'Unknown word', - ]; - return benign.some(msg => error.message.indexOf(msg) !== -1); + const benign = ['Unknown node type', 'Unknown word'] + return benign.some(msg => error.message.indexOf(msg) !== -1) } From b2d1a335cea818f8b27e5cfb90147648afe3e582 Mon Sep 17 00:00:00 2001 From: Andrey Sitnik Date: Mon, 11 May 2026 17:27:55 +0000 Subject: [PATCH 27/89] Fix linter warnings --- eslint.config.mjs | 8 ++++++++ test/fuzzing/fuzz_parse.js | 35 ++++++++++++++++++----------------- 2 files changed, 26 insertions(+), 17 deletions(-) diff --git a/eslint.config.mjs b/eslint.config.mjs index cd623151d..2c00ccce7 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -55,5 +55,13 @@ export default [ 'no-console': 'off', 'no-unused-expressions': 'off' } + }, + { + files: ['test/fuzzing/*'], + rules: { + 'n/no-missing-require': 'off', + 'no-unused-expressions': 'off', + 'no-void': 'off' + } } ] diff --git a/test/fuzzing/fuzz_parse.js b/test/fuzzing/fuzz_parse.js index f5b71bbe7..8343f363c 100644 --- a/test/fuzzing/fuzz_parse.js +++ b/test/fuzzing/fuzz_parse.js @@ -14,11 +14,12 @@ // //////////////////////////////////////////////////////////////////////////////// -const { FuzzedDataProvider } = require('@jazzer.js/core') -const postcss = require('../../lib/postcss') +let { FuzzedDataProvider } = require('@jazzer.js/core') + +let postcss = require('../../lib/postcss') module.exports.fuzz = function (data) { - const provider = new FuzzedDataProvider(data) + let provider = new FuzzedDataProvider(data) // The CSS input itself is randomized: every byte the fuzzer produces (or // mutates from the seed corpus) flows directly into `cssString` via @@ -27,15 +28,15 @@ module.exports.fuzz = function (data) { // tail), so seed CSS files from postcss-parser-tests are fed into the // parser nearly verbatim, with only their last few bytes nibbled off as // option control. - const useMap = provider.consumeBoolean() - const useFrom = provider.consumeBoolean() - const useProcessor = provider.consumeBoolean() - const splitMode = provider.consumeIntegralInRange(0, 2) - const cssString = provider.consumeRemainingAsString() + let useMap = provider.consumeBoolean() + let useFrom = provider.consumeBoolean() + let useProcessor = provider.consumeBoolean() + let splitMode = provider.consumeIntegralInRange(0, 2) + let cssString = provider.consumeRemainingAsString() - const parseOptions = {} + let parseOptions = {} if (useFrom) parseOptions.from = 'fuzz.css' - if (useMap) parseOptions.map = { inline: false, annotation: false } + if (useMap) parseOptions.map = { annotation: false, inline: false } let root try { @@ -77,21 +78,21 @@ module.exports.fuzz = function (data) { // Exercise the JSON serialization round-trip. try { - const json = root.toJSON() + let json = root.toJSON() postcss.fromJSON(json) } catch (e) { - if (!isExpected(e, postcss)) throw e + if (!isExpected(e)) throw e } // Exercise the main public entry point: postcss().process(). This drives // the LazyResult / NoWorkResult pipeline that real plugin chains use. if (useProcessor) { try { - const result = postcss().process(cssString, parseOptions) + let result = postcss().process(cssString, parseOptions) void result.css void result.warnings() } catch (e) { - if (!isExpected(e, postcss)) throw e + if (!isExpected(e)) throw e } } @@ -105,16 +106,16 @@ module.exports.fuzz = function (data) { postcss.list.split(cssString, [',', ' '], false) } } catch (e) { - if (!isExpected(e, postcss)) throw e + if (!isExpected(e)) throw e } } -function isExpected(error, postcss) { +function isExpected(error) { if (error instanceof postcss.CssSyntaxError) return true if (!error || typeof error.message !== 'string') return false // Some legitimate inputs reach known-shaped TypeErrors during stringify or // walk because the CSS allows constructs whose textual form is ambiguous. // Suppress only those well-defined cases so real bugs still surface. - const benign = ['Unknown node type', 'Unknown word'] + let benign = ['Unknown node type', 'Unknown word'] return benign.some(msg => error.message.indexOf(msg) !== -1) } From 08771986d47359545f502e009763e223b66bfcf6 Mon Sep 17 00:00:00 2001 From: Andrey Sitnik Date: Mon, 11 May 2026 17:28:57 +0000 Subject: [PATCH 28/89] Update CI actions --- .github/workflows/test.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 6311f55dc..fb8b04dfb 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -14,7 +14,7 @@ jobs: - name: Checkout the repository uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Install pnpm - uses: pnpm/action-setup@8912a9102ac27614460f54aedde9e1e7f9aec20d # v6.0.5 + uses: pnpm/action-setup@739bfe42ca9233c5e6aca07c1a25a9d34aca49b0 # v6.0.7 with: version: 11 - name: Install Node.js @@ -38,7 +38,7 @@ jobs: - name: Checkout the repository uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Install pnpm - uses: pnpm/action-setup@8912a9102ac27614460f54aedde9e1e7f9aec20d # v6.0.5 + uses: pnpm/action-setup@739bfe42ca9233c5e6aca07c1a25a9d34aca49b0 # v6.0.7 with: version: 11 - name: Install Node.js ${{ matrix.node-version }} @@ -66,7 +66,7 @@ jobs: - name: Checkout the repository uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Install pnpm - uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v5.0.0 + uses: pnpm/action-setup@739bfe42ca9233c5e6aca07c1a25a9d34aca49b0 # v6.0.7 with: version: 3 env: @@ -88,7 +88,7 @@ jobs: - name: Checkout the repository uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Install pnpm - uses: pnpm/action-setup@8912a9102ac27614460f54aedde9e1e7f9aec20d # v6.0.5 + uses: pnpm/action-setup@739bfe42ca9233c5e6aca07c1a25a9d34aca49b0 # v6.0.7 with: version: 11 - name: Install Node.js LTS From 9f860bd78ec1dbc4f0ae72d693f03f956baa38cb Mon Sep 17 00:00:00 2001 From: Andrey Sitnik Date: Mon, 11 May 2026 17:31:50 +0000 Subject: [PATCH 29/89] Revert pnpm action for old Node.js --- .github/workflows/test.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index fb8b04dfb..50a8c7dc9 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -66,7 +66,7 @@ jobs: - name: Checkout the repository uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Install pnpm - uses: pnpm/action-setup@739bfe42ca9233c5e6aca07c1a25a9d34aca49b0 # v6.0.7 + uses: pnpm/action-setup@8912a9102ac27614460f54aedde9e1e7f9aec20d # v6.0.5 with: version: 3 env: @@ -94,7 +94,7 @@ jobs: - name: Install Node.js LTS uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 with: - node-version: 24 + node-version: 26 cache: pnpm - name: Install dependencies run: pnpm install --ignore-scripts From 84fbbe9009cb3cc3bbb4cc3a9b65d468f4844d95 Mon Sep 17 00:00:00 2001 From: Andrey Sitnik Date: Mon, 11 May 2026 17:33:14 +0000 Subject: [PATCH 30/89] Install older pnpm action for old Node.js --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 50a8c7dc9..d12286585 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -66,7 +66,7 @@ jobs: - name: Checkout the repository uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Install pnpm - uses: pnpm/action-setup@8912a9102ac27614460f54aedde9e1e7f9aec20d # v6.0.5 + uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v5.0.0 with: version: 3 env: From 55789c865281e2be194fa5b4e41dd046be3a2307 Mon Sep 17 00:00:00 2001 From: Andrey Sitnik Date: Tue, 19 May 2026 11:04:32 +0200 Subject: [PATCH 31/89] Update dependencies --- package.json | 8 +- pnpm-lock.yaml | 521 +++++++++++++++++++++++++------------------------ 2 files changed, 267 insertions(+), 262 deletions(-) diff --git a/package.json b/package.json index f4203f432..a6f9e5498 100644 --- a/package.json +++ b/package.json @@ -89,7 +89,7 @@ "old": "node --require ./test/old-node.js ./node_modules/uvu/bin.js -r module test \"\\.test\\.(ts|js)$\"" }, "dependencies": { - "nanoid": "^3.3.11", + "nanoid": "^3.3.12", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" }, @@ -97,17 +97,17 @@ "@logux/eslint-config": "^57.1.0", "@logux/oxc-configs": "^0.4.0", "@size-limit/preset-small-lib": "^12.1.0", - "@types/node": "^25.6.0", + "@types/node": "^25.8.0", "actions-up": "^1.14.1", "c8": "^11.0.0", "check-dts": "^0.9.0", "clean-publish": "^7.0.1", "concat-with-sourcemaps": "^1.1.0", - "eslint": "^10.3.0", + "eslint": "^10.4.0", "multiocular": "^0.8.3", "nanodelay": "^1.0.8", "nanospy": "^1.0.0", - "oxfmt": "^0.47.0", + "oxfmt": "^0.50.0", "postcss-parser-tests": "^8.9.0", "simple-git-hooks": "^2.13.1", "size-limit": "^12.1.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4bd549f65..114b8ce5a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,8 +9,8 @@ importers: .: dependencies: nanoid: - specifier: ^3.3.11 - version: 3.3.11 + specifier: ^3.3.12 + version: 3.3.12 picocolors: specifier: ^1.1.1 version: 1.1.1 @@ -20,7 +20,7 @@ importers: devDependencies: '@logux/eslint-config': specifier: ^57.1.0 - version: 57.1.0(@typescript-eslint/utils@8.59.1(eslint@10.3.0)(typescript@5.9.3))(eslint@10.3.0)(typescript@5.9.3) + version: 57.1.0(@typescript-eslint/utils@8.59.3(eslint@10.4.0)(typescript@5.9.3))(eslint@10.4.0)(typescript@5.9.3) '@logux/oxc-configs': specifier: ^0.4.0 version: 0.4.0(oxlint-tsgolint@0.18.1)(oxlint@1.58.0(oxlint-tsgolint@0.18.1))(typescript@5.9.3) @@ -28,8 +28,8 @@ importers: specifier: ^12.1.0 version: 12.1.0(size-limit@12.1.0) '@types/node': - specifier: ^25.6.0 - version: 25.6.0 + specifier: ^25.8.0 + version: 25.8.0 actions-up: specifier: ^1.14.1 version: 1.14.1 @@ -46,8 +46,8 @@ importers: specifier: ^1.1.0 version: 1.1.0 eslint: - specifier: ^10.3.0 - version: 10.3.0 + specifier: ^10.4.0 + version: 10.4.0 multiocular: specifier: ^0.8.3 version: 0.8.3 @@ -58,8 +58,8 @@ importers: specifier: ^1.0.0 version: 1.0.0 oxfmt: - specifier: ^0.47.0 - version: 0.47.0 + specifier: ^0.50.0 + version: 0.50.0 postcss-parser-tests: specifier: ^8.9.0 version: 8.9.0 @@ -74,7 +74,7 @@ importers: version: 6.0.1 ts-node: specifier: ^10.9.2 - version: 10.9.2(@types/node@25.6.0)(typescript@5.9.3) + version: 10.9.2(@types/node@25.8.0)(typescript@5.9.3) typescript: specifier: ^5.9.3 version: 5.9.3 @@ -271,8 +271,8 @@ packages: resolution: {integrity: sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@eslint/config-helpers@0.5.5': - resolution: {integrity: sha512-eIJYKTCECbP/nsKaaruF6LW967mtbQbsw4JTtSVkUQc9MneSkbrgPJAbKl9nWr0ZeowV8BfsarBmPpBzGelA2w==} + '@eslint/config-helpers@0.6.0': + resolution: {integrity: sha512-ii6Bw9jJ2zi2cWA2Z+9/QZ/+3DX6kwaV5Q986D/CdP3Lap3w/pgQZ373FV7byY/i7L4IRH/G43I5dz1ClsCbpA==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} '@eslint/core@1.2.1': @@ -381,124 +381,124 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@oxfmt/binding-android-arm-eabi@0.47.0': - resolution: {integrity: sha512-KrMQRdMi/upr81qT4ijK6X6BNp6jqpMY7FwILQnwIy9QLc3qpnhUx5rsCLGzn4ewsCQ0CNAspN2ogmP1GXLyLw==} + '@oxfmt/binding-android-arm-eabi@0.50.0': + resolution: {integrity: sha512-ICXQVKrDvsWUtfx6EiVJxfWrajKTwTfRV8vz2XiMkxZeuCKJLgD4YAj6dE3BWvpqDlkVkie4VSTAtMUWO9LDXg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [android] - '@oxfmt/binding-android-arm64@0.47.0': - resolution: {integrity: sha512-r4ixS/PeUpAFKgrpDoZ5pSkthjZzVzKd95525Aazj+aOv9H4ulK5zYHGb7wFY5n5kZxHK8TbOJUZgoEb1ohddQ==} + '@oxfmt/binding-android-arm64@0.50.0': + resolution: {integrity: sha512-quwjLQFkuW6OwLHeDeIXsTzOmipQFQbqsYN9HLk2B5I01IlAQZHP1UiLIg0O7pP+dUgPD2AD7SCYA3gs6NH5/g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@oxfmt/binding-darwin-arm64@0.47.0': - resolution: {integrity: sha512-CLWxiKpMl+195cm09CuaWEhJK0CirRkoMa07aR9+9AFPat2LfIKtwx1JqxZM0MTvcMe6+adlJNdVL6jdInvq3g==} + '@oxfmt/binding-darwin-arm64@0.50.0': + resolution: {integrity: sha512-ikU5umElcMi78/TNI334wtjr5WZ5F4nWa1aIDseAKKGL0W3ygxeYKkrIJ0fggWa8MOon66BmG3xCqmX1m9YAOw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@oxfmt/binding-darwin-x64@0.47.0': - resolution: {integrity: sha512-Xq5fjTYDC50faUeLSm0rZdBqoTgleXEdD7NpJdARtQIczkCJn3xNjMUSQQkUmh4CtxkKTNL68lytcOK3e/osgg==} + '@oxfmt/binding-darwin-x64@0.50.0': + resolution: {integrity: sha512-WT4MOYG4mv9IXrH0m60vHsJh+rRMPSOKTQmwDpwmgQ+DuW/i5dU4pqc0HDO5uclO5vjz5IFX5z/taW86LSVe/g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@oxfmt/binding-freebsd-x64@0.47.0': - resolution: {integrity: sha512-QOU9ZIJ52p5askcEC0QJvvr8trHAWoonul8bgISo6gYUL3s50zkqafBYcNAr9LJZQbsZtPfIWHk9+5+nUp1qJQ==} + '@oxfmt/binding-freebsd-x64@0.50.0': + resolution: {integrity: sha512-gH0rycVXqV4juWkvLs2uPMtTyppDc7qEUVzXAxnQ7FpcSZNXqKowUgtjH8q67ngj416r8+4NnAlyR/D35zwwhQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@oxfmt/binding-linux-arm-gnueabihf@0.47.0': - resolution: {integrity: sha512-oJxDM1aBhPvz9gmElBv8UpxyiqhwfjcbrSxT5F0xtuUzY6dQI27/AQPIt3eu3Z5Yvn0kQl5R7MA3Z+MbnRvCBw==} + '@oxfmt/binding-linux-arm-gnueabihf@0.50.0': + resolution: {integrity: sha512-wL/k+o0hiTeRvi/gPzeC1L/yTHTXIeHDKWU09s2zTBmv7ma59wTm+fADNSGYxhJQDxyavQbwTf1QpW3Zj924tQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxfmt/binding-linux-arm-musleabihf@0.47.0': - resolution: {integrity: sha512-g8Lh50VS4ibGz2q6v7r9UZY4D0dM16SdrFYOMzhqIoCwGcai8VMIRUAcqn1/jlCsOOzUXJ741+kCeJt0cofakQ==} + '@oxfmt/binding-linux-arm-musleabihf@0.50.0': + resolution: {integrity: sha512-Y59FKqoUM3Gf00E395b4ixfWyJGwO2GzaZawF5MZoVWcb3f6CkWUXyao0jyOvoIxDMzMybcVRuXyG7ih/Nxweg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxfmt/binding-linux-arm64-gnu@0.47.0': - resolution: {integrity: sha512-YrNT1vQ0asaXoRbrvYENPqmBfOQ9Xr8enPNOULeYfg44VjCcrUowFy5QZr+WawE0zyP8cH9e9Gxxg0fDEFzhcg==} + '@oxfmt/binding-linux-arm64-gnu@0.50.0': + resolution: {integrity: sha512-OvXbfTjMignXWyJXg/NOFsiy996vFe8wb9tkxJaUq8ylq0XrzJg3ttavC5Tcmm6F8/GUs2r3XFJWWu9q/27uYw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-arm64-musl@0.47.0': - resolution: {integrity: sha512-IxtQC/sbBi4ubbY+MdwdanRWrG9InQJVZqyMsBa5IUaQcnSg86gQme574HxXMC1p4bo4YhV99zQ+wNnGCvEgzw==} + '@oxfmt/binding-linux-arm64-musl@0.50.0': + resolution: {integrity: sha512-rqmvHZm7vMa3NLYa0khwkhReCmp9tqKnF23TFZ7S5cYJLvIE4b0k8famWE7kO897/DXznJe675n5SohFBggbxA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@oxfmt/binding-linux-ppc64-gnu@0.47.0': - resolution: {integrity: sha512-EWXEhOMbWO0q6eJSbu0QLkU8cKi0ljlYLngeDs2Ocu/pm1rrLwyQiYzlFbdnMRURI4w9ndr1sI9rSbhlJ5o23Q==} + '@oxfmt/binding-linux-ppc64-gnu@0.50.0': + resolution: {integrity: sha512-49bAdYbMSde42tzPDtuHnBWzOgmoS0PT9THCjvMnDVYMQYiHzPc2Mv5rkpBHVQOXM+PHfafJlxgK0anXSWBVvw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-riscv64-gnu@0.47.0': - resolution: {integrity: sha512-tZrjS11TUiDuEpRaqdk8K9F9xETRyKXfuZKmdeW+Gj7coBnm7+8sBEfyt033EAFEQSlkniAXvBLh+Qja2ioGBQ==} + '@oxfmt/binding-linux-riscv64-gnu@0.50.0': + resolution: {integrity: sha512-VFT25/6kckkIM62KeWB2bi+xCEmC/zC+DcMaIpEfaio8ulkGDLSiTz11TyK0eqgTl3x5OklYEGDWohvAgOr8Bw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-riscv64-musl@0.47.0': - resolution: {integrity: sha512-KBFy+2CFKUCZzYwX2ZOPQKck1vjQbz+hextuc19G4r0WRJwadfAeuQMQRQvB+Ivc8brlbOVg7et8K7E467440g==} + '@oxfmt/binding-linux-riscv64-musl@0.50.0': + resolution: {integrity: sha512-BBJMuNy6jjkXjUUINF5UTQqb/nvjmtJad43Gp7bab0AAURAdthhJvduR7rHpWInpWYiaMzYsdrmURNcrmpxdZA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [musl] - '@oxfmt/binding-linux-s390x-gnu@0.47.0': - resolution: {integrity: sha512-REUPFKVGSiK99B+9eaPhluEVglzaoj/SMykNC5SUiV2RSsBfV5lWN7Y0iCIc251Wz3GaeAGZsJ/zj3gjarxdFg==} + '@oxfmt/binding-linux-s390x-gnu@0.50.0': + resolution: {integrity: sha512-Xd4y+yjAYHKmryXhyUUwbyRD01iKfcvI74iE01L6p4F8SwjhZQXDshK+T8PcrPZLiFqH263P5xqJk94amjkjzQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-x64-gnu@0.47.0': - resolution: {integrity: sha512-KVftVSVEDeIfRW3TIeLe3aNI/iY4m1fu5mDwHcisKMZSCMKLkrhFsjowC7o9RoqNPxbbglm2+/6KAKBIts2t0Q==} + '@oxfmt/binding-linux-x64-gnu@0.50.0': + resolution: {integrity: sha512-Qp96rYJru7l++7mk4R+eh8qq9GFfFAMdmoN6VGoRHI8AA1XMnUIzH4u+zOcKZZwY+irHdsaBldDearwB4nOH7A==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-x64-musl@0.47.0': - resolution: {integrity: sha512-DTsmGEaA2860Aq5VUyDO8/MT9NFxwVL93RnRYmpMwK6DsSkThmvEpqoUDDljziEpAedMRG19SCogrNbINSbLUQ==} + '@oxfmt/binding-linux-x64-musl@0.50.0': + resolution: {integrity: sha512-5XLGp+yd5w2Key5LMqJO+X3XVsJKgeeUKljy32+MBF/J/JZ5m8WHl6dI5eOQOr3ixopxPiXIyDAxn3slI3UXiQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@oxfmt/binding-openharmony-arm64@0.47.0': - resolution: {integrity: sha512-8r5BDro7fLOBoq1JXHLVSs55OlrxQhEso4HVo0TcY7OXJUPYfjPoOaYL5us+yIwqyP9rQwN+rxuiNFSmaxSuOQ==} + '@oxfmt/binding-openharmony-arm64@0.50.0': + resolution: {integrity: sha512-QAxwzh7+GHugCD7WuERolVs8TKQwXNIAZXAHHTecbKVc9oWBkWzOiLauQuezXS57tVcof5zhi1IjZ8tOV0htTg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@oxfmt/binding-win32-arm64-msvc@0.47.0': - resolution: {integrity: sha512-qtz/gzm8IjSPUlseZ0ofW8zyHLoZsuP5HTfcGGkWkUblB89JT8GNYH3ICqjbDsqsGqXum0/ZndXTFplSdXFIcg==} + '@oxfmt/binding-win32-arm64-msvc@0.50.0': + resolution: {integrity: sha512-3nKN/kqClm9iCFWTwtJ9UpR5SGyExp5l3nw6uIiBt+3XitQtszin+vjHrL7JHfDksZ7Svigdaow2zqz/IKCfqw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@oxfmt/binding-win32-ia32-msvc@0.47.0': - resolution: {integrity: sha512-5vIcdcIDE7nCx+MXN6sm8kbC4zajDB31E86rez4i45iHNH/2NjdKlJ720xcHTr3eeiMcttCGPHPhE1TjtBDGZw==} + '@oxfmt/binding-win32-ia32-msvc@0.50.0': + resolution: {integrity: sha512-3r6XZ8+X6qlLbXaPW2NygfiAWSpKbkE36pAVzS83mY+cYY+pSMalJ+qnCgkr92tr+Iqv988XKQ1CpARTg9ITbQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ia32] os: [win32] - '@oxfmt/binding-win32-x64-msvc@0.47.0': - resolution: {integrity: sha512-Sr59Y5ms54ONBjxFeWhVlGyQcHXxcl9DxC23f6yXlRkcos7LXBLoO+KDfxexjHIOZh7cWqrWduzvUjJ+pHp8cQ==} + '@oxfmt/binding-win32-x64-msvc@0.50.0': + resolution: {integrity: sha512-BSE8D8KsvquMG9vU+Qt4qGuoOcZ36rxU5S6ZkHNguj+MlWkXWCBETnno3yJ9CfWvfCrbmieaN9LK6hdcdHNZ/w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] @@ -691,14 +691,14 @@ packages: '@tsconfig/node16@1.0.4': resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} - '@tybys/wasm-util@0.10.1': - resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} + '@tybys/wasm-util@0.10.2': + resolution: {integrity: sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==} '@types/esrecurse@4.3.1': resolution: {integrity: sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==} - '@types/estree@1.0.8': - resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + '@types/estree@1.0.9': + resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} '@types/istanbul-lib-coverage@2.0.6': resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} @@ -706,8 +706,8 @@ packages: '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - '@types/node@25.6.0': - resolution: {integrity: sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ==} + '@types/node@25.8.0': + resolution: {integrity: sha512-TCFSk8IZh+iLX1xtksoBVtdmgL+1IX0fC9BeU4QqFSuNdN/K+HUlhqOzEmSYYpZUVsLYcPqc9KX+60iDuninSQ==} '@types/trusted-types@2.0.7': resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} @@ -715,63 +715,63 @@ packages: '@types/unist@3.0.3': resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} - '@typescript-eslint/eslint-plugin@8.59.1': - resolution: {integrity: sha512-BOziFIfE+6osHO9FoJG4zjoHUcvI7fTNBSpdAwrNH0/TLvzjsk2oo8XSSOT2HhqUyhZPfHv4UOffoJ9oEEQ7Ag==} + '@typescript-eslint/eslint-plugin@8.59.3': + resolution: {integrity: sha512-PwFvSKsXGShKGW6n5bZOhGHEcCZXM8HofLK9fNsEwZXzFRjoY+XT1Vsf1zgyXdwTr0ZYz1/2tkZ0DBTT9jZjhw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.59.1 + '@typescript-eslint/parser': ^8.59.3 eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/parser@8.59.1': - resolution: {integrity: sha512-HDQH9O/47Dxi1ceDhBXdaldtf/WV9yRYMjbjCuNk3qnaTD564qwv61Y7+gTxwxRKzSrgO5uhtw584igXVuuZkA==} + '@typescript-eslint/parser@8.59.3': + resolution: {integrity: sha512-HPwA+hVkfcriajbNvTmZv4VRauibay+cWArYUYq7u7W7PmGShMxbPxLvrwDme55a6d5alG3nrYfhyJ/G28XlLg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/project-service@8.59.1': - resolution: {integrity: sha512-+MuHQlHiEr00Of/IQbE/MmEoi44znZHbR/Pz7Opq4HryUOlRi+/44dro9Ycy8Fyo+/024IWtw8m4JUMCGTYxDg==} + '@typescript-eslint/project-service@8.59.3': + resolution: {integrity: sha512-ECiUWa/KYRGDFUqTNehaRgzDshnJfkTABJxVemHk4ko22gcr0ukloKjWvyQ64g8YCV/UI47kN1dbmjf/GaQYng==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/scope-manager@8.59.1': - resolution: {integrity: sha512-LwuHQI4pDOYVKvmH2dkaJo6YZCSgouVgnS/z7yBPKBMvgtBvyLqiLy9Z6b7+m/TRcX1NFYUqZetI5Y+aT4GEfg==} + '@typescript-eslint/scope-manager@8.59.3': + resolution: {integrity: sha512-t2LvZnoEfzKtnPjgeEu41xw5gxq9mQVfYy4OoZ4Vlt0sk3JwxmhCca/AR7DwOiHrjWgjAj6as4AhRLKSDfvZIA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.59.1': - resolution: {integrity: sha512-/0nEyPbX7gRsk0Uwfe4ALwwgxuA66d/l2mhRDNlAvaj4U3juhUtJNq0DsY8M2AYwwb9rEq2hrC3IcIcEt++iJA==} + '@typescript-eslint/tsconfig-utils@8.59.3': + resolution: {integrity: sha512-PcIJHjmaREXLgIAIzLnSY9VucEzz8FKXsRgFa1DmdGCK/5tJpW03TKJF01Q6VZd1lLdz2sIKPWaDUZN9dp//dw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/type-utils@8.59.1': - resolution: {integrity: sha512-klWPBR2ciQHS3f++ug/mVnWKPjBUo7icEL3FAO1lhAR1Z1i5NQYZ1EannMSRYcq5qCv5wNALlXr6fksRHyYl7w==} + '@typescript-eslint/type-utils@8.59.3': + resolution: {integrity: sha512-g71d8QD8UaiHGvrJwyIS1hCX5r63w6Jll+4VEYhEAHXTDIqX1JgxhTAbEHtKntL9kuc4jRo7/GWw5xfCepSccQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/types@8.59.1': - resolution: {integrity: sha512-ZDCjgccSdYPw5Bxh+my4Z0lJU96ZDN7jbBzvmEn0FZx3RtU1C7VWl6NbDx94bwY3V5YsgwRzJPOgeY2Q/nLG8A==} + '@typescript-eslint/types@8.59.3': + resolution: {integrity: sha512-ePFoH0g4ludssdRFqqDxQePCxU4WQyRa9+XVwjm7yLn0FKhMeoetC+qBEEI1Eyb1pGSDveTIT09Bvw2WhlGayg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.59.1': - resolution: {integrity: sha512-OUd+vJS05sSkOip+BkZ/2NS8RMxrAAJemsC6vU3kmfLyeaJT0TftHkV9mcx2107MmsBVXXexhVu4F0TZXyMl4g==} + '@typescript-eslint/typescript-estree@8.59.3': + resolution: {integrity: sha512-CbRjVRAf7Lr9Kr8RopKcbY45p2VfmmHrm0ygOCYFi7oU8q19m0Fs/6iHS7kNOmwpp+ob07ZVcAqlxUod9lYdmg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/utils@8.59.1': - resolution: {integrity: sha512-3pIeoXhCeYH9FSCBI8P3iNwJlGuzPlYKkTlen2O9T1DSeeg8UG8jstq6BLk+Mda0qup7mgk4z4XL4OzRaxZ8LA==} + '@typescript-eslint/utils@8.59.3': + resolution: {integrity: sha512-JAvT14goBzRzzzZyqq3P9BLArIxTtQURUtFgQ/V7FO+eU+Gg6ES+5ymOPP1wRxXcxAYeivCk4uS3jCKWI1K8Zg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/visitor-keys@8.59.1': - resolution: {integrity: sha512-LdDNl6C5iJExcM0Yh0PwAIBb9PrSiCsWamF/JyEZawm3kFDnRoaq3LGE4bpyRao/fWeGKKyw7icx0YxrLFC5Cg==} + '@typescript-eslint/visitor-keys@8.59.3': + resolution: {integrity: sha512-f1UQF7ggd42YiwI5wGrRaPsa+P0CINBlrkLPmGfpq/u/I/oVtecoEIfFR9ag/oa1sLOsRNZ6xehf6qMZhQGBDg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@unrs/resolver-binding-android-arm-eabi@1.11.1': @@ -930,8 +930,8 @@ packages: brace-expansion@1.1.14: resolution: {integrity: sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==} - brace-expansion@5.0.5: - resolution: {integrity: sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==} + brace-expansion@5.0.6: + resolution: {integrity: sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==} engines: {node: 18 || 20 || >=22} braces@3.0.3: @@ -1039,14 +1039,14 @@ packages: resolution: {integrity: sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw==} engines: {node: '>=0.3.1'} - dompurify@3.4.1: - resolution: {integrity: sha512-JahakDAIg1gyOm7dlgWSDjV4n7Ip2PKR55NIT6jrMfIgLFgWo81vdr1/QGqWtFNRqXP9UV71oVePtjqS2ebnPw==} + dompurify@3.4.5: + resolution: {integrity: sha512-OrwIBKsdNSVEeubdJ1HBv/wNENRM9ytAVCv7YXt//A3vPdVMNuACRqK9mXCGCBW2ln7BT/A4X0jXHo2Gu89miA==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - enhanced-resolve@5.21.0: - resolution: {integrity: sha512-otxSQPw4lkOZWkHpB3zaEQs6gWYEsmX4xQF68ElXC/TWvGxGMSGOvoNbaLXm6/cS/fSfHtsEdw90y20PCd+sCA==} + enhanced-resolve@5.21.3: + resolution: {integrity: sha512-QyL119InA+XXEkNLNTPCXPugSvOfhwv0JOlGNzvxs0hZaiHLNvXSpudUWsOlsXGWJh8G6ckCScEkVHfX3kw/2Q==} engines: {node: '>=10.13.0'} enquirer@2.4.1: @@ -1132,8 +1132,8 @@ packages: resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - eslint@10.3.0: - resolution: {integrity: sha512-XbEXaRva5cF0ZQB8w6MluHA0kZZfV2DuCMJ3ozyEOHLwDpZX2Lmm/7Pp0xdJmI0GL1W05VH5VwIFHEm1Vcw2gw==} + eslint@10.4.0: + resolution: {integrity: sha512-loXy6bWOoP3EP6JA7jo6p5jMpBJmHmsNZM5SFRHLdh1MGOPurMnNBj4ZlAbaqUAaQWbCr7jHV4P7gzAyryZWkQ==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} hasBin: true peerDependencies: @@ -1241,8 +1241,8 @@ packages: resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==} engines: {node: '>=18'} - globals@17.5.0: - resolution: {integrity: sha512-qoV+HK2yFl/366t2/Cb3+xxPUo5BuMynomoDmiaZBIdbs+0pYbjfZU+twLhGKp4uCZ/+NbtpVepH5bGCxRyy2g==} + globals@17.6.0: + resolution: {integrity: sha512-sepffkT8stwnIYbsMBpoCHJuJM5l98FUF2AnE07hfvE0m/qp3R586hw4jF4uadbhvg1ooIdzuu7CsfD2jzCaNA==} engines: {node: '>=18'} globrex@0.1.2: @@ -1341,8 +1341,8 @@ packages: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} - lru-cache@11.3.5: - resolution: {integrity: sha512-NxVFwLAnrd9i7KUBxC4DrUhmgjzOs+1Qm50D3oF1/oL+r1NpZ4gA7xvG0/zJ8evR7zIKn4vLf7qTNduWFtCrRw==} + lru-cache@11.4.0: + resolution: {integrity: sha512-W+R+kFL4HgVxONq2bhXPi3bGpzGe/yEhVOp233qw9wCRtgncJ15P3bC+e4zZMu4Cq7d+WAJjXGW0uUkifhcatA==} engines: {node: 20 || >=22} make-dir@4.0.0: @@ -1352,8 +1352,8 @@ packages: make-error@1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - marked@18.0.2: - resolution: {integrity: sha512-NsmlUYBS/Zg57rgDWMYdnre6OTj4e+qq/JS2ot3KrYLSoHLw+sDu0Nm1ZGpRgYAq6c+b1ekaY5NzVchMCQnzcg==} + marked@18.0.3: + resolution: {integrity: sha512-7VT90JOkDeaRWpfjOReRGPEKn0ecdARBkDGL+tT1wZY0efPPqkUxLUSmzy/C7TIylQYJC9STISEsCHrqb/7VIA==} engines: {node: '>= 20'} hasBin: true @@ -1395,13 +1395,13 @@ packages: resolution: {integrity: sha512-Jd0fILWG44a9luj8v5kED4WI+zfkkgwKyRQKItTtlPfEsh7Lznfi1kr8/iZ+XAIss4Qq5GqRB0qtWbaz9ceO/A==} engines: {node: ^18.0.0 || >=20.0.0} - nanoid@3.3.11: - resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + nanoid@3.3.12: + resolution: {integrity: sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - nanoid@5.1.9: - resolution: {integrity: sha512-ZUvP7KeBLe3OZ1ypw6dI/TzYJuvHP77IM4Ry73waSQTLn8/g8rpdjfyVAh7t1/+FjBtG4lCP42MEbDxOsRpBMw==} + nanoid@5.1.11: + resolution: {integrity: sha512-v+KEsUv2ps74PaSKv0gHTxTCgMXOIfBEbaqa6w6ISIGC7ZsvHN4N9oJ8d4cmf0n5oTzQz2SLmThbQWhjd/8eKg==} engines: {node: ^18 || >=20} hasBin: true @@ -1436,10 +1436,15 @@ packages: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} - oxfmt@0.47.0: - resolution: {integrity: sha512-OFbkbzxKCpooQEnRmpTDnuwTX8KHXzZTQ4Df/hz85fpS67Pl+lxPEFvUtin56HIIS0B1k4X8oIzTXRZPufA2CA==} + oxfmt@0.50.0: + resolution: {integrity: sha512-owwjTnhfM5aCOJhYeqDvk7iM504OeYFZpdRU7cxx7xtZMo4uVpjlryTUon+Cf76CugsvnqA32e6rC73pr1hXaw==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true + peerDependencies: + svelte: ^5.0.0 + peerDependenciesMeta: + svelte: + optional: true oxlint-tsgolint@0.18.1: resolution: {integrity: sha512-Hgb0wMfuXBYL0ddY+1hAG8IIfC40ADwPnBuUaC6ENAuCtTF4dHwsy7mCYtQ2e7LoGvfoSJRY0+kqQRiembJ/jQ==} @@ -1530,8 +1535,8 @@ packages: resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} engines: {node: '>=6'} - semver@7.7.4: - resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==} + semver@7.8.0: + resolution: {integrity: sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA==} engines: {node: '>=10'} hasBin: true @@ -1645,8 +1650,8 @@ packages: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} - typescript-eslint@8.59.1: - resolution: {integrity: sha512-xqDcFVBmlrltH64lklOVp1wYxgJr6LVdg3NamBgH2OOQDLFdTKfIZXF5PfghrnXQKXZGTQs8tr1vL7fJvq8CTQ==} + typescript-eslint@8.59.3: + resolution: {integrity: sha512-KgusgyDgG4LI8Ih/sWaCtZ06tckLAS5CvT5A4D1Q7bYVoAAyzwiZvE4BmwDHkhRVkvhRBepKeASoFzQetha7Fg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 @@ -1657,8 +1662,8 @@ packages: engines: {node: '>=14.17'} hasBin: true - undici-types@7.19.2: - resolution: {integrity: sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg==} + undici-types@7.24.6: + resolution: {integrity: sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==} unist-util-stringify-position@4.0.0: resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} @@ -1707,8 +1712,8 @@ packages: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} - ws@8.20.0: - resolution: {integrity: sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==} + ws@8.20.1: + resolution: {integrity: sha512-It4dO0K5v//JtTXuPkfEOaI3uUN87iYPnqo/ZzqCoG3g8uhA66QUMs/SrM0YK7/NAu+r4LMh/9dq2A7k+rHs+w==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -1723,8 +1728,8 @@ packages: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} - yaml@2.8.3: - resolution: {integrity: sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==} + yaml@2.9.0: + resolution: {integrity: sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==} engines: {node: '>= 14.6'} hasBin: true @@ -1846,9 +1851,9 @@ snapshots: '@esbuild/win32-x64@0.28.0': optional: true - '@eslint-community/eslint-utils@4.9.1(eslint@10.3.0)': + '@eslint-community/eslint-utils@4.9.1(eslint@10.4.0)': dependencies: - eslint: 10.3.0 + eslint: 10.4.0 eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.2': {} @@ -1861,7 +1866,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/config-helpers@0.5.5': + '@eslint/config-helpers@0.6.0': dependencies: '@eslint/core': 1.2.1 @@ -1930,16 +1935,16 @@ snapshots: dependencies: nanoevents: 9.1.0 - '@logux/eslint-config@57.1.0(@typescript-eslint/utils@8.59.1(eslint@10.3.0)(typescript@5.9.3))(eslint@10.3.0)(typescript@5.9.3)': + '@logux/eslint-config@57.1.0(@typescript-eslint/utils@8.59.3(eslint@10.4.0)(typescript@5.9.3))(eslint@10.4.0)(typescript@5.9.3)': dependencies: '@eslint/eslintrc': 3.3.5 - eslint: 10.3.0 - eslint-plugin-import-x: 4.16.2(@typescript-eslint/utils@8.59.1(eslint@10.3.0)(typescript@5.9.3))(eslint@10.3.0) - eslint-plugin-n: 17.24.0(eslint@10.3.0)(typescript@5.9.3) - eslint-plugin-perfectionist: 5.9.0(eslint@10.3.0)(typescript@5.9.3) + eslint: 10.4.0 + eslint-plugin-import-x: 4.16.2(@typescript-eslint/utils@8.59.3(eslint@10.4.0)(typescript@5.9.3))(eslint@10.4.0) + eslint-plugin-n: 17.24.0(eslint@10.4.0)(typescript@5.9.3) + eslint-plugin-perfectionist: 5.9.0(eslint@10.4.0)(typescript@5.9.3) eslint-plugin-prefer-let: 4.2.2 - globals: 17.5.0 - typescript-eslint: 8.59.1(eslint@10.3.0)(typescript@5.9.3) + globals: 17.6.0 + typescript-eslint: 8.59.3(eslint@10.4.0)(typescript@5.9.3) transitivePeerDependencies: - '@typescript-eslint/utils' - eslint-import-resolver-node @@ -1960,10 +1965,10 @@ snapshots: cookie: 1.1.1 fastq: 1.20.1 nanoevents: 9.1.0 - nanoid: 5.1.9 + nanoid: 5.1.11 tinyglobby: 0.2.16 url-pattern: 1.0.3 - ws: 8.20.0 + ws: 8.20.1 transitivePeerDependencies: - bufferutil - utf-8-validate @@ -1972,7 +1977,7 @@ snapshots: dependencies: '@emnapi/core': 1.10.0 '@emnapi/runtime': 1.10.0 - '@tybys/wasm-util': 0.10.1 + '@tybys/wasm-util': 0.10.2 optional: true '@nodelib/fs.scandir@2.1.5': @@ -1987,61 +1992,61 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.20.1 - '@oxfmt/binding-android-arm-eabi@0.47.0': + '@oxfmt/binding-android-arm-eabi@0.50.0': optional: true - '@oxfmt/binding-android-arm64@0.47.0': + '@oxfmt/binding-android-arm64@0.50.0': optional: true - '@oxfmt/binding-darwin-arm64@0.47.0': + '@oxfmt/binding-darwin-arm64@0.50.0': optional: true - '@oxfmt/binding-darwin-x64@0.47.0': + '@oxfmt/binding-darwin-x64@0.50.0': optional: true - '@oxfmt/binding-freebsd-x64@0.47.0': + '@oxfmt/binding-freebsd-x64@0.50.0': optional: true - '@oxfmt/binding-linux-arm-gnueabihf@0.47.0': + '@oxfmt/binding-linux-arm-gnueabihf@0.50.0': optional: true - '@oxfmt/binding-linux-arm-musleabihf@0.47.0': + '@oxfmt/binding-linux-arm-musleabihf@0.50.0': optional: true - '@oxfmt/binding-linux-arm64-gnu@0.47.0': + '@oxfmt/binding-linux-arm64-gnu@0.50.0': optional: true - '@oxfmt/binding-linux-arm64-musl@0.47.0': + '@oxfmt/binding-linux-arm64-musl@0.50.0': optional: true - '@oxfmt/binding-linux-ppc64-gnu@0.47.0': + '@oxfmt/binding-linux-ppc64-gnu@0.50.0': optional: true - '@oxfmt/binding-linux-riscv64-gnu@0.47.0': + '@oxfmt/binding-linux-riscv64-gnu@0.50.0': optional: true - '@oxfmt/binding-linux-riscv64-musl@0.47.0': + '@oxfmt/binding-linux-riscv64-musl@0.50.0': optional: true - '@oxfmt/binding-linux-s390x-gnu@0.47.0': + '@oxfmt/binding-linux-s390x-gnu@0.50.0': optional: true - '@oxfmt/binding-linux-x64-gnu@0.47.0': + '@oxfmt/binding-linux-x64-gnu@0.50.0': optional: true - '@oxfmt/binding-linux-x64-musl@0.47.0': + '@oxfmt/binding-linux-x64-musl@0.50.0': optional: true - '@oxfmt/binding-openharmony-arm64@0.47.0': + '@oxfmt/binding-openharmony-arm64@0.50.0': optional: true - '@oxfmt/binding-win32-arm64-msvc@0.47.0': + '@oxfmt/binding-win32-arm64-msvc@0.50.0': optional: true - '@oxfmt/binding-win32-ia32-msvc@0.47.0': + '@oxfmt/binding-win32-ia32-msvc@0.50.0': optional: true - '@oxfmt/binding-win32-x64-msvc@0.47.0': + '@oxfmt/binding-win32-x64-msvc@0.50.0': optional: true '@oxlint-tsgolint/darwin-arm64@0.18.1': @@ -2128,7 +2133,7 @@ snapshots: '@size-limit/esbuild@12.1.0(size-limit@12.1.0)': dependencies: esbuild: 0.28.0 - nanoid: 5.1.9 + nanoid: 5.1.11 size-limit: 12.1.0 '@size-limit/file@12.1.0(size-limit@12.1.0)': @@ -2149,37 +2154,37 @@ snapshots: '@tsconfig/node16@1.0.4': {} - '@tybys/wasm-util@0.10.1': + '@tybys/wasm-util@0.10.2': dependencies: tslib: 2.8.1 optional: true '@types/esrecurse@4.3.1': {} - '@types/estree@1.0.8': {} + '@types/estree@1.0.9': {} '@types/istanbul-lib-coverage@2.0.6': {} '@types/json-schema@7.0.15': {} - '@types/node@25.6.0': + '@types/node@25.8.0': dependencies: - undici-types: 7.19.2 + undici-types: 7.24.6 '@types/trusted-types@2.0.7': optional: true '@types/unist@3.0.3': {} - '@typescript-eslint/eslint-plugin@8.59.1(@typescript-eslint/parser@8.59.1(eslint@10.3.0)(typescript@5.9.3))(eslint@10.3.0)(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.59.3(@typescript-eslint/parser@8.59.3(eslint@10.4.0)(typescript@5.9.3))(eslint@10.4.0)(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.59.1(eslint@10.3.0)(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.59.1 - '@typescript-eslint/type-utils': 8.59.1(eslint@10.3.0)(typescript@5.9.3) - '@typescript-eslint/utils': 8.59.1(eslint@10.3.0)(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.59.1 - eslint: 10.3.0 + '@typescript-eslint/parser': 8.59.3(eslint@10.4.0)(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.59.3 + '@typescript-eslint/type-utils': 8.59.3(eslint@10.4.0)(typescript@5.9.3) + '@typescript-eslint/utils': 8.59.3(eslint@10.4.0)(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.59.3 + eslint: 10.4.0 ignore: 7.0.5 natural-compare: 1.4.0 ts-api-utils: 2.5.0(typescript@5.9.3) @@ -2187,79 +2192,79 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.59.1(eslint@10.3.0)(typescript@5.9.3)': + '@typescript-eslint/parser@8.59.3(eslint@10.4.0)(typescript@5.9.3)': dependencies: - '@typescript-eslint/scope-manager': 8.59.1 - '@typescript-eslint/types': 8.59.1 - '@typescript-eslint/typescript-estree': 8.59.1(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.59.1 + '@typescript-eslint/scope-manager': 8.59.3 + '@typescript-eslint/types': 8.59.3 + '@typescript-eslint/typescript-estree': 8.59.3(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.59.3 debug: 4.4.3 - eslint: 10.3.0 + eslint: 10.4.0 typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.59.1(typescript@5.9.3)': + '@typescript-eslint/project-service@8.59.3(typescript@5.9.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.59.1(typescript@5.9.3) - '@typescript-eslint/types': 8.59.1 + '@typescript-eslint/tsconfig-utils': 8.59.3(typescript@5.9.3) + '@typescript-eslint/types': 8.59.3 debug: 4.4.3 typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.59.1': + '@typescript-eslint/scope-manager@8.59.3': dependencies: - '@typescript-eslint/types': 8.59.1 - '@typescript-eslint/visitor-keys': 8.59.1 + '@typescript-eslint/types': 8.59.3 + '@typescript-eslint/visitor-keys': 8.59.3 - '@typescript-eslint/tsconfig-utils@8.59.1(typescript@5.9.3)': + '@typescript-eslint/tsconfig-utils@8.59.3(typescript@5.9.3)': dependencies: typescript: 5.9.3 - '@typescript-eslint/type-utils@8.59.1(eslint@10.3.0)(typescript@5.9.3)': + '@typescript-eslint/type-utils@8.59.3(eslint@10.4.0)(typescript@5.9.3)': dependencies: - '@typescript-eslint/types': 8.59.1 - '@typescript-eslint/typescript-estree': 8.59.1(typescript@5.9.3) - '@typescript-eslint/utils': 8.59.1(eslint@10.3.0)(typescript@5.9.3) + '@typescript-eslint/types': 8.59.3 + '@typescript-eslint/typescript-estree': 8.59.3(typescript@5.9.3) + '@typescript-eslint/utils': 8.59.3(eslint@10.4.0)(typescript@5.9.3) debug: 4.4.3 - eslint: 10.3.0 + eslint: 10.4.0 ts-api-utils: 2.5.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.59.1': {} + '@typescript-eslint/types@8.59.3': {} - '@typescript-eslint/typescript-estree@8.59.1(typescript@5.9.3)': + '@typescript-eslint/typescript-estree@8.59.3(typescript@5.9.3)': dependencies: - '@typescript-eslint/project-service': 8.59.1(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.59.1(typescript@5.9.3) - '@typescript-eslint/types': 8.59.1 - '@typescript-eslint/visitor-keys': 8.59.1 + '@typescript-eslint/project-service': 8.59.3(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.59.3(typescript@5.9.3) + '@typescript-eslint/types': 8.59.3 + '@typescript-eslint/visitor-keys': 8.59.3 debug: 4.4.3 minimatch: 10.2.5 - semver: 7.7.4 + semver: 7.8.0 tinyglobby: 0.2.16 ts-api-utils: 2.5.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.59.1(eslint@10.3.0)(typescript@5.9.3)': + '@typescript-eslint/utils@8.59.3(eslint@10.4.0)(typescript@5.9.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.3.0) - '@typescript-eslint/scope-manager': 8.59.1 - '@typescript-eslint/types': 8.59.1 - '@typescript-eslint/typescript-estree': 8.59.1(typescript@5.9.3) - eslint: 10.3.0 + '@eslint-community/eslint-utils': 4.9.1(eslint@10.4.0) + '@typescript-eslint/scope-manager': 8.59.3 + '@typescript-eslint/types': 8.59.3 + '@typescript-eslint/typescript-estree': 8.59.3(typescript@5.9.3) + eslint: 10.4.0 typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.59.1': + '@typescript-eslint/visitor-keys@8.59.3': dependencies: - '@typescript-eslint/types': 8.59.1 + '@typescript-eslint/types': 8.59.3 eslint-visitor-keys: 5.0.1 '@unrs/resolver-binding-android-arm-eabi@1.11.1': @@ -2339,8 +2344,8 @@ snapshots: enquirer: 2.4.1 nanospinner: 1.2.2 picocolors: 1.1.1 - semver: 7.7.4 - yaml: 2.8.3 + semver: 7.8.0 + yaml: 2.9.0 ajv@6.15.0: dependencies: @@ -2370,7 +2375,7 @@ snapshots: balanced-match: 1.0.2 concat-map: 0.0.1 - brace-expansion@5.0.5: + brace-expansion@5.0.6: dependencies: balanced-match: 4.0.4 @@ -2466,13 +2471,13 @@ snapshots: diff@8.0.4: {} - dompurify@3.4.1: + dompurify@3.4.5: optionalDependencies: '@types/trusted-types': 2.0.7 emoji-regex@8.0.0: {} - enhanced-resolve@5.21.0: + enhanced-resolve@5.21.3: dependencies: graceful-fs: 4.2.11 tapable: 2.3.3 @@ -2515,10 +2520,10 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-compat-utils@0.5.1(eslint@10.3.0): + eslint-compat-utils@0.5.1(eslint@10.4.0): dependencies: - eslint: 10.3.0 - semver: 7.7.4 + eslint: 10.4.0 + semver: 7.8.0 eslint-import-context@0.1.9(unrs-resolver@1.11.1): dependencies: @@ -2527,50 +2532,50 @@ snapshots: optionalDependencies: unrs-resolver: 1.11.1 - eslint-plugin-es-x@7.8.0(eslint@10.3.0): + eslint-plugin-es-x@7.8.0(eslint@10.4.0): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.3.0) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.4.0) '@eslint-community/regexpp': 4.12.2 - eslint: 10.3.0 - eslint-compat-utils: 0.5.1(eslint@10.3.0) + eslint: 10.4.0 + eslint-compat-utils: 0.5.1(eslint@10.4.0) - eslint-plugin-import-x@4.16.2(@typescript-eslint/utils@8.59.1(eslint@10.3.0)(typescript@5.9.3))(eslint@10.3.0): + eslint-plugin-import-x@4.16.2(@typescript-eslint/utils@8.59.3(eslint@10.4.0)(typescript@5.9.3))(eslint@10.4.0): dependencies: '@package-json/types': 0.0.12 - '@typescript-eslint/types': 8.59.1 + '@typescript-eslint/types': 8.59.3 comment-parser: 1.4.6 debug: 4.4.3 - eslint: 10.3.0 + eslint: 10.4.0 eslint-import-context: 0.1.9(unrs-resolver@1.11.1) is-glob: 4.0.3 minimatch: 10.2.5 - semver: 7.7.4 + semver: 7.8.0 stable-hash-x: 0.2.0 unrs-resolver: 1.11.1 optionalDependencies: - '@typescript-eslint/utils': 8.59.1(eslint@10.3.0)(typescript@5.9.3) + '@typescript-eslint/utils': 8.59.3(eslint@10.4.0)(typescript@5.9.3) transitivePeerDependencies: - supports-color - eslint-plugin-n@17.24.0(eslint@10.3.0)(typescript@5.9.3): + eslint-plugin-n@17.24.0(eslint@10.4.0)(typescript@5.9.3): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.3.0) - enhanced-resolve: 5.21.0 - eslint: 10.3.0 - eslint-plugin-es-x: 7.8.0(eslint@10.3.0) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.4.0) + enhanced-resolve: 5.21.3 + eslint: 10.4.0 + eslint-plugin-es-x: 7.8.0(eslint@10.4.0) get-tsconfig: 4.14.0 globals: 15.15.0 globrex: 0.1.2 ignore: 5.3.2 - semver: 7.7.4 + semver: 7.8.0 ts-declaration-location: 1.0.7(typescript@5.9.3) transitivePeerDependencies: - typescript - eslint-plugin-perfectionist@5.9.0(eslint@10.3.0)(typescript@5.9.3): + eslint-plugin-perfectionist@5.9.0(eslint@10.4.0)(typescript@5.9.3): dependencies: - '@typescript-eslint/utils': 8.59.1(eslint@10.3.0)(typescript@5.9.3) - eslint: 10.3.0 + '@typescript-eslint/utils': 8.59.3(eslint@10.4.0)(typescript@5.9.3) + eslint: 10.4.0 natural-orderby: 5.0.0 transitivePeerDependencies: - supports-color @@ -2583,7 +2588,7 @@ snapshots: eslint-scope@9.1.2: dependencies: '@types/esrecurse': 4.3.1 - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 esrecurse: 4.3.0 estraverse: 5.3.0 @@ -2593,18 +2598,18 @@ snapshots: eslint-visitor-keys@5.0.1: {} - eslint@10.3.0: + eslint@10.4.0: dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.3.0) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.4.0) '@eslint-community/regexpp': 4.12.2 '@eslint/config-array': 0.23.5 - '@eslint/config-helpers': 0.5.5 + '@eslint/config-helpers': 0.6.0 '@eslint/core': 1.2.1 '@eslint/plugin-kit': 0.7.1 '@humanfs/node': 0.16.8 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.3 - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 ajv: 6.15.0 cross-spawn: 7.0.6 debug: 4.4.3 @@ -2723,7 +2728,7 @@ snapshots: globals@15.15.0: {} - globals@17.5.0: {} + globals@17.6.0: {} globrex@0.1.2: {} @@ -2798,15 +2803,15 @@ snapshots: dependencies: p-locate: 5.0.0 - lru-cache@11.3.5: {} + lru-cache@11.4.0: {} make-dir@4.0.0: dependencies: - semver: 7.7.4 + semver: 7.8.0 make-error@1.3.6: {} - marked@18.0.2: {} + marked@18.0.3: {} merge2@1.4.1: {} @@ -2817,7 +2822,7 @@ snapshots: minimatch@10.2.5: dependencies: - brace-expansion: 5.0.5 + brace-expansion: 5.0.6 minimatch@3.1.5: dependencies: @@ -2833,11 +2838,11 @@ snapshots: dependencies: '@logux/server': 0.14.0 diff2html: 3.4.56 - dompurify: 3.4.1 + dompurify: 3.4.5 highlight.js: 11.11.1 - marked: 18.0.2 + marked: 18.0.3 nanostores: 1.3.0 - yaml: 2.8.3 + yaml: 2.9.0 transitivePeerDependencies: - bufferutil - utf-8-validate @@ -2846,9 +2851,9 @@ snapshots: nanoevents@9.1.0: {} - nanoid@3.3.11: {} + nanoid@3.3.12: {} - nanoid@5.1.9: {} + nanoid@5.1.11: {} nanospinner@1.2.2: dependencies: @@ -2877,29 +2882,29 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.5 - oxfmt@0.47.0: + oxfmt@0.50.0: dependencies: tinypool: 2.1.0 optionalDependencies: - '@oxfmt/binding-android-arm-eabi': 0.47.0 - '@oxfmt/binding-android-arm64': 0.47.0 - '@oxfmt/binding-darwin-arm64': 0.47.0 - '@oxfmt/binding-darwin-x64': 0.47.0 - '@oxfmt/binding-freebsd-x64': 0.47.0 - '@oxfmt/binding-linux-arm-gnueabihf': 0.47.0 - '@oxfmt/binding-linux-arm-musleabihf': 0.47.0 - '@oxfmt/binding-linux-arm64-gnu': 0.47.0 - '@oxfmt/binding-linux-arm64-musl': 0.47.0 - '@oxfmt/binding-linux-ppc64-gnu': 0.47.0 - '@oxfmt/binding-linux-riscv64-gnu': 0.47.0 - '@oxfmt/binding-linux-riscv64-musl': 0.47.0 - '@oxfmt/binding-linux-s390x-gnu': 0.47.0 - '@oxfmt/binding-linux-x64-gnu': 0.47.0 - '@oxfmt/binding-linux-x64-musl': 0.47.0 - '@oxfmt/binding-openharmony-arm64': 0.47.0 - '@oxfmt/binding-win32-arm64-msvc': 0.47.0 - '@oxfmt/binding-win32-ia32-msvc': 0.47.0 - '@oxfmt/binding-win32-x64-msvc': 0.47.0 + '@oxfmt/binding-android-arm-eabi': 0.50.0 + '@oxfmt/binding-android-arm64': 0.50.0 + '@oxfmt/binding-darwin-arm64': 0.50.0 + '@oxfmt/binding-darwin-x64': 0.50.0 + '@oxfmt/binding-freebsd-x64': 0.50.0 + '@oxfmt/binding-linux-arm-gnueabihf': 0.50.0 + '@oxfmt/binding-linux-arm-musleabihf': 0.50.0 + '@oxfmt/binding-linux-arm64-gnu': 0.50.0 + '@oxfmt/binding-linux-arm64-musl': 0.50.0 + '@oxfmt/binding-linux-ppc64-gnu': 0.50.0 + '@oxfmt/binding-linux-riscv64-gnu': 0.50.0 + '@oxfmt/binding-linux-riscv64-musl': 0.50.0 + '@oxfmt/binding-linux-s390x-gnu': 0.50.0 + '@oxfmt/binding-linux-x64-gnu': 0.50.0 + '@oxfmt/binding-linux-x64-musl': 0.50.0 + '@oxfmt/binding-openharmony-arm64': 0.50.0 + '@oxfmt/binding-win32-arm64-msvc': 0.50.0 + '@oxfmt/binding-win32-ia32-msvc': 0.50.0 + '@oxfmt/binding-win32-x64-msvc': 0.50.0 oxlint-tsgolint@0.18.1: optionalDependencies: @@ -2951,7 +2956,7 @@ snapshots: path-scurry@2.0.2: dependencies: - lru-cache: 11.3.5 + lru-cache: 11.4.0 minipass: 7.1.3 picocolors@1.1.1: {} @@ -2988,7 +2993,7 @@ snapshots: dependencies: mri: 1.2.0 - semver@7.7.4: {} + semver@7.8.0: {} shebang-command@2.0.0: dependencies: @@ -3060,14 +3065,14 @@ snapshots: picomatch: 4.0.4 typescript: 5.9.3 - ts-node@10.9.2(@types/node@25.6.0)(typescript@5.9.3): + ts-node@10.9.2(@types/node@25.8.0)(typescript@5.9.3): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.12 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 25.6.0 + '@types/node': 25.8.0 acorn: 8.16.0 acorn-walk: 8.3.5 arg: 4.1.3 @@ -3085,20 +3090,20 @@ snapshots: dependencies: prelude-ls: 1.2.1 - typescript-eslint@8.59.1(eslint@10.3.0)(typescript@5.9.3): + typescript-eslint@8.59.3(eslint@10.4.0)(typescript@5.9.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.59.1(@typescript-eslint/parser@8.59.1(eslint@10.3.0)(typescript@5.9.3))(eslint@10.3.0)(typescript@5.9.3) - '@typescript-eslint/parser': 8.59.1(eslint@10.3.0)(typescript@5.9.3) - '@typescript-eslint/typescript-estree': 8.59.1(typescript@5.9.3) - '@typescript-eslint/utils': 8.59.1(eslint@10.3.0)(typescript@5.9.3) - eslint: 10.3.0 + '@typescript-eslint/eslint-plugin': 8.59.3(@typescript-eslint/parser@8.59.3(eslint@10.4.0)(typescript@5.9.3))(eslint@10.4.0)(typescript@5.9.3) + '@typescript-eslint/parser': 8.59.3(eslint@10.4.0)(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.59.3(typescript@5.9.3) + '@typescript-eslint/utils': 8.59.3(eslint@10.4.0)(typescript@5.9.3) + eslint: 10.4.0 typescript: 5.9.3 transitivePeerDependencies: - supports-color typescript@5.9.3: {} - undici-types@7.19.2: {} + undici-types@7.24.6: {} unist-util-stringify-position@4.0.0: dependencies: @@ -3176,11 +3181,11 @@ snapshots: string-width: 4.2.3 strip-ansi: 6.0.1 - ws@8.20.0: {} + ws@8.20.1: {} y18n@5.0.8: {} - yaml@2.8.3: {} + yaml@2.9.0: {} yargs-parser@21.1.1: {} From 9825dca02c33cf610e2a842be767468b67fbecf9 Mon Sep 17 00:00:00 2001 From: Andrey Sitnik Date: Tue, 19 May 2026 09:05:25 +0000 Subject: [PATCH 32/89] Fix code format --- lib/parser.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/parser.js b/lib/parser.js index b29ff5b2d..4622703e9 100644 --- a/lib/parser.js +++ b/lib/parser.js @@ -132,9 +132,10 @@ class Parser { if (founded === 2) break } } - // If the token is a word, e.g. `!important`, `red` or any other valid property's value. - // Then we need to return the colon after that word token. [3] is the "end" colon of that word. - // And because we need it after that one we do +1 to get the next one. + // If the token is a word, e.g. `!important`, `red` or any other valid + // property's value. Then we need to return the colon after that word + // token. [3] is the "end" colon of that word. And because we need it + // after that one we do +1 to get the next one. throw this.input.error( 'Missed semicolon', token[0] === 'word' ? token[3] + 1 : token[2] From b128e2131288a411c6e28071d0929542c49e74eb Mon Sep 17 00:00:00 2001 From: Andrey Sitnik Date: Tue, 19 May 2026 09:36:14 +0000 Subject: [PATCH 33/89] Speed up declaration parsing by avoiding creating new array on each token --- lib/parser.js | 58 ++++++++++++++++++++++++++++----------------------- 1 file changed, 32 insertions(+), 26 deletions(-) diff --git a/lib/parser.js b/lib/parser.js index 4622703e9..2a16584c7 100644 --- a/lib/parser.js +++ b/lib/parser.js @@ -20,6 +20,12 @@ function findLastWithPosition(tokens) { } } +function tokensToString(tokens, from, to) { + let result = '' + for (let i = from; i < to; i++) result += tokens[i][1] + return result +} + class Parser { constructor(input) { this.input = input @@ -208,50 +214,50 @@ class Parser { ) node.source.end.offset++ - while (tokens[0][0] !== 'word') { - if (tokens.length === 1) this.unknownWord(tokens) - node.raws.before += tokens.shift()[1] + let start = 0 + while (tokens[start][0] !== 'word') { + if (start === tokens.length - 1) this.unknownWord([tokens[start]]) + start++ } - node.source.start = this.getPosition(tokens[0][2]) + node.raws.before += tokensToString(tokens, 0, start) + node.source.start = this.getPosition(tokens[start][2]) - node.prop = '' - while (tokens.length) { - let type = tokens[0][0] + let propStart = start + while (start < tokens.length) { + let type = tokens[start][0] if (type === ':' || type === 'space' || type === 'comment') { break } - node.prop += tokens.shift()[1] + start++ } + node.prop = tokensToString(tokens, propStart, start) - node.raws.between = '' - + let betweenStart = start let token - while (tokens.length) { - token = tokens.shift() - - if (token[0] === ':') { - node.raws.between += token[1] - break - } else { - if (token[0] === 'word' && /\w/.test(token[1])) { - this.unknownWord([token]) - } - node.raws.between += token[1] + while (start < tokens.length) { + token = tokens[start] + start++ + if (token[0] === ':') break + if (token[0] === 'word' && /\w/.test(token[1])) { + this.unknownWord([token]) } } + node.raws.between = tokensToString(tokens, betweenStart, start) if (node.prop[0] === '_' || node.prop[0] === '*') { node.raws.before += node.prop[0] node.prop = node.prop.slice(1) } - let firstSpaces = [] - let next - while (tokens.length) { - next = tokens[0][0] + let firstSpacesStart = start + while (start < tokens.length) { + let next = tokens[start][0] if (next !== 'space' && next !== 'comment') break - firstSpaces.push(tokens.shift()) + start++ } + let firstSpaces = tokens.slice(firstSpacesStart, start) + + tokens = tokens.slice(start) this.precheckMissedSemicolon(tokens) From 79508ffa59e42c02056aca61b88bc393c8b516c4 Mon Sep 17 00:00:00 2001 From: Andrey Sitnik Date: Tue, 19 May 2026 09:49:24 +0000 Subject: [PATCH 34/89] Update CI actions --- .github/workflows/test.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index d12286585..8efb517ad 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -14,7 +14,7 @@ jobs: - name: Checkout the repository uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Install pnpm - uses: pnpm/action-setup@739bfe42ca9233c5e6aca07c1a25a9d34aca49b0 # v6.0.7 + uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 # v6.0.8 with: version: 11 - name: Install Node.js @@ -38,7 +38,7 @@ jobs: - name: Checkout the repository uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Install pnpm - uses: pnpm/action-setup@739bfe42ca9233c5e6aca07c1a25a9d34aca49b0 # v6.0.7 + uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 # v6.0.8 with: version: 11 - name: Install Node.js ${{ matrix.node-version }} @@ -88,7 +88,7 @@ jobs: - name: Checkout the repository uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Install pnpm - uses: pnpm/action-setup@739bfe42ca9233c5e6aca07c1a25a9d34aca49b0 # v6.0.7 + uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 # v6.0.8 with: version: 11 - name: Install Node.js LTS From eae46db765d752cf8f40c4fa2b0b85030079c43d Mon Sep 17 00:00:00 2001 From: Andrey Sitnik Date: Tue, 19 May 2026 09:50:43 +0000 Subject: [PATCH 35/89] Release 8.5.15 version --- CHANGELOG.md | 4 ++++ lib/processor.js | 2 +- package.json | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index aa7eb91a4..a75a80d61 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ This project adheres to [Semantic Versioning](https://semver.org/). +## 8.5.15 + +- Fixed declaration parsing performance (by @homanp). + ## 8.5.14 - Fixed custom syntax regression (by @43081j). diff --git a/lib/processor.js b/lib/processor.js index eabcd9f12..60d17644b 100644 --- a/lib/processor.js +++ b/lib/processor.js @@ -7,7 +7,7 @@ let Root = require('./root') class Processor { constructor(plugins = []) { - this.version = '8.5.14' + this.version = '8.5.15' this.plugins = this.normalize(plugins) } diff --git a/package.json b/package.json index a6f9e5498..a6a475e71 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "postcss", - "version": "8.5.14", + "version": "8.5.15", "description": "Tool for transforming styles with JS plugins", "keywords": [ "css", From 51d5317213da0c58c2063ac28787146d9ac41bc8 Mon Sep 17 00:00:00 2001 From: Andrey Sitnik Date: Tue, 16 Jun 2026 22:13:34 +0200 Subject: [PATCH 36/89] Add a version of Atlas Cloud banner (#2093) --- README.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/README.md b/README.md index 08a75c1bc..772769eeb 100644 --- a/README.md +++ b/README.md @@ -29,12 +29,28 @@ and JetBrains. The [Autoprefixer] and [Stylelint] PostCSS plugins are some o PostCSS needs your support. We are accepting donations [at Open Collective](https://opencollective.com/postcss/). +
+
+ + + + Sponsored by Atlas Cloud + + + +Atlas Cloud is a full-modal AI inference platform that gives developers a single AI API to access video generation, image generation, and LLM APIs. Instead of managing multiple vendor integrations, you connect once and get unified access to 300+ curated models across all modalities. + +Check out Atlas Cloud's new coding plan promotion for more budget-friendly API access. +


+ Sponsored by Tailwind CSS       Sponsored by ThemeIsle +
## Plugins From e961264ad24e0fcaa0b43cfbe00d3b3fdf43cf17 Mon Sep 17 00:00:00 2001 From: George Adamson Date: Thu, 25 Jun 2026 23:01:13 +0100 Subject: [PATCH 37/89] Add postcss-nth-nested to plugins list (#2098) --- docs/plugins.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/plugins.md b/docs/plugins.md index c66428282..32eeae1f2 100644 --- a/docs/plugins.md +++ b/docs/plugins.md @@ -219,6 +219,8 @@ See also [`oldie`] plugins pack. - [`postcss-nested`] unwraps nested rules. - [`postcss-nested-props`] unwraps nested properties. - [`postcss-nested-vars`] supports nested Sass-style variables. +- [`postcss-nth-nested`] adds a `:nth-nested()` pseudo-class for selecting + elements by nesting depth. - [`postcss-pseudo-class-any-button`] adds `:any-button` pseudo-class for targeting all button elements. - [`postcss-pseudo-class-enter`] transforms `:enter` into `:hover` and `:focus`. @@ -744,6 +746,7 @@ See also plugins in modular minifier [`cssnano`]. [`postcss-merge-rules`]: https://github.com/ben-eb/postcss-merge-rules [`postcss-mq-optimize`]: https://github.com/panec/postcss-mq-optimize [`postcss-nested-vars`]: https://github.com/jedmao/postcss-nested-vars +[`postcss-nth-nested`]: https://github.com/georgeadamson/postcss-nth-nested [`postcss-remove-root`]: https://github.com/cbracco/postcss-remove-root [`postcss-simple-grid`]: https://github.com/admdh/postcss-simple-grid [`postcss-simple-trig`]: https://github.com/Rplus/postcss-simple-trig From 698425a1cc20dcb8c6e2e5625e6064e0bc1efb5c Mon Sep 17 00:00:00 2001 From: greymoth Date: Sat, 27 Jun 2026 22:31:28 +0900 Subject: [PATCH 38/89] fix(node): always include offset in positionBy() like rangeBy() (#2099) positionBy()'s default branch returned this.source.start verbatim, so for custom syntaxes whose source.start lacks an offset (e.g. postcss-html) it returned a position without offset, violating the Position type which declares offset as required. rangeBy()/positionInside() were normalized to always compute offset via sourceOffset() (#2033, issue #2029) but positionBy() was left behind. Mirror the rangeBy() pattern. Co-authored-by: oss69U-prep Co-authored-by: Claude Opus 4.8 (1M context) --- lib/node.js | 14 +++++++++----- test/node.test.ts | 11 +++++++++++ 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/lib/node.js b/lib/node.js index b403b7136..07780d35e 100644 --- a/lib/node.js +++ b/lib/node.js @@ -206,14 +206,18 @@ class Node { } positionBy(opts = {}) { - let pos = this.source.start + let inputString = + 'document' in this.source.input + ? this.source.input.document + : this.source.input.css + let pos = { + column: this.source.start.column, + line: this.source.start.line, + offset: sourceOffset(inputString, this.source.start) + } if (opts.index) { pos = this.positionInside(opts.index) } else if (opts.word) { - let inputString = - 'document' in this.source.input - ? this.source.input.document - : this.source.input.css let stringRepresentation = inputString.slice( sourceOffset(inputString, this.source.start), sourceOffset(inputString, this.source.end) diff --git a/test/node.test.ts b/test/node.test.ts index 41b0ac7b7..0e11fe024 100755 --- a/test/node.test.ts +++ b/test/node.test.ts @@ -523,6 +523,17 @@ test('positionBy() returns position for word after AST mutations', () => { equal(two.positionBy({ word: 'two' }), { column: 2, line: 3, offset: 14 }) }) +test('positionBy() returns position when offset is missing', () => { + let css = parse('a { one: X }') + let a = css.first as Rule + let one = a.first as Declaration + + // @ts-expect-error Testing non-standard AST + if (one.source?.start) delete one.source.start.offset + + equal(one.positionBy(), { column: 6, line: 1, offset: 5 }) +}) + test('positionBy() returns position for index', () => { let css = parse('a { one: X }') let a = css.first as Rule From d2b487256d60b4a761ad7b74be022e3486e41307 Mon Sep 17 00:00:00 2001 From: Andrey Sitnik Date: Sat, 27 Jun 2026 13:32:22 +0000 Subject: [PATCH 39/89] Move to public Dev Container --- .devcontainer.json | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .devcontainer.json diff --git a/.devcontainer.json b/.devcontainer.json new file mode 100644 index 000000000..55d59b674 --- /dev/null +++ b/.devcontainer.json @@ -0,0 +1,3 @@ +{ + "image": "ghcr.io/ai/devcontainer:latest" +} From db3ecbf34c39ae9d1842036e1ec3bb6a8f79757b Mon Sep 17 00:00:00 2001 From: Andrey Sitnik Date: Sat, 27 Jun 2026 13:32:44 +0000 Subject: [PATCH 40/89] Move to Node.js 26 on CI --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 8efb517ad..1e31e37f1 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -20,7 +20,7 @@ jobs: - name: Install Node.js uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 with: - node-version: 25 + node-version: 26 cache: pnpm - name: Install dependencies run: pnpm ci --ignore-scripts From 609185894ae224d04c2ac41a8313fe04fde4303f Mon Sep 17 00:00:00 2001 From: Andrey Sitnik Date: Sat, 27 Jun 2026 13:33:37 +0000 Subject: [PATCH 41/89] Update CI --- .github/workflows/test.yml | 36 +++++++++++++++--------------------- 1 file changed, 15 insertions(+), 21 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 1e31e37f1..94d36adef 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -13,39 +13,33 @@ jobs: steps: - name: Checkout the repository uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - name: Install pnpm - uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 # v6.0.8 + - name: Install Node.js & pnpm + uses: pnpm/setup@5d160c5bc68a09337ad0d5654e237e03253b5879 # v1.0.0 with: version: 11 - - name: Install Node.js - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 - with: - node-version: 26 - cache: pnpm + runtime: node@26 - name: Install dependencies - run: pnpm ci --ignore-scripts + run: pnpm ci - name: Run tests run: pnpm test short: runs-on: ubuntu-latest strategy: matrix: - node-version: + node: - 24 - 22 - name: Node.js ${{ matrix.node-version }} Quick + name: Node.js ${{ matrix.node }} Quick steps: - name: Checkout the repository uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - name: Install pnpm - uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 # v6.0.8 + - name: Install Node.js & pnpm + uses: pnpm/setup@5d160c5bc68a09337ad0d5654e237e03253b5879 # v1.0.0 with: version: 11 - - name: Install Node.js ${{ matrix.node-version }} - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 - with: - node-version: ${{ matrix.node-version }} - cache: pnpm + runtime: node@${{ matrix.node }} + - name: Install dependencies + run: pnpm ci - name: Install dependencies run: pnpm ci --ignore-scripts - name: Run unit tests @@ -54,14 +48,14 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - node-version: + node: - 20 - 18 - 16 - 14 - 12 - 10 - name: Node.js ${{ matrix.node-version }} Quick + name: Node.js ${{ matrix.node }} Quick steps: - name: Checkout the repository uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 @@ -71,10 +65,10 @@ jobs: version: 3 env: ACTIONS_ALLOW_UNSECURE_COMMANDS: true - - name: Install Node.js ${{ matrix.node-version }} + - name: Install Node.js ${{ matrix.node }} uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 with: - node-version: ${{ matrix.node-version }} + node-version: ${{ matrix.node }} - name: Install dependencies run: pnpm install --ignore-scripts - name: Downgrade TypeScript From 616e571d78c5fcff3cc35c74467e4369e124fb9b Mon Sep 17 00:00:00 2001 From: Andrey Sitnik Date: Sat, 27 Jun 2026 13:33:59 +0000 Subject: [PATCH 42/89] Move to new publish process --- .github/workflows/release.yml | 60 +++++++++++++++-------------------- package.json | 1 - pnpm-lock.yaml | 21 ------------ 3 files changed, 26 insertions(+), 56 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 04fb6b3a8..d9911f53f 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -3,42 +3,34 @@ on: push: tags: - '*' -permissions: - contents: write jobs: - release: - name: Release On Tag - if: startsWith(github.ref, 'refs/tags/') + publish: runs-on: ubuntu-latest + permissions: + contents: read + id-token: write steps: - name: Checkout the repository - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - name: Extract the changelog - id: changelog - run: | - TAG_NAME=${GITHUB_REF/refs\/tags\//} - READ_SECTION=false - CHANGELOG="" - while IFS= read -r line; do - if [[ "$line" =~ ^#+\ +(.*) ]]; then - if [[ "${BASH_REMATCH[1]}" == "$TAG_NAME" ]]; then - READ_SECTION=true - elif [[ "$READ_SECTION" == true ]]; then - break - fi - elif [[ "$READ_SECTION" == true ]]; then - CHANGELOG+="$line"$'\n' - fi - done < "CHANGELOG.md" - CHANGELOG=$(echo "$CHANGELOG" | awk '/./ {$1=$1;print}') - echo "changelog_content<> $GITHUB_OUTPUT - echo "$CHANGELOG" >> $GITHUB_OUTPUT - echo "EOF" >> $GITHUB_OUTPUT - - name: Create the release - if: steps.changelog.outputs.changelog_content != '' - uses: softprops/action-gh-release@b4309332981a82ec1c5618f44dd2e27cc8bfbfda # v3.0.0 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + - name: Clean npm package + uses: ai/clean-npm-project@29219e611c2da08a07cb0a6a1b965c162e5940a9 # v0.3.0 + with: + clean-docs: true + - name: Install Node.js + uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 with: - name: ${{ github.ref_name }} - body: '${{ steps.changelog.outputs.changelog_content }}' - draft: false - prerelease: false + node-version: 26 + - name: Publish npm package + run: npm stage publish + working-directory: cleaned-project/ + release: + runs-on: ubuntu-latest + permissions: + contents: write + steps: + - name: Checkout the repository + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + - name: Clean npm package + uses: ai/copy-changelog-to-release@a6dc825c34575add2da2060796794f7b84894628 # v0.2.0 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/package.json b/package.json index a6a475e71..db68f7a51 100644 --- a/package.json +++ b/package.json @@ -101,7 +101,6 @@ "actions-up": "^1.14.1", "c8": "^11.0.0", "check-dts": "^0.9.0", - "clean-publish": "^7.0.1", "concat-with-sourcemaps": "^1.1.0", "eslint": "^10.4.0", "multiocular": "^0.8.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 114b8ce5a..60b827b01 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -39,9 +39,6 @@ importers: check-dts: specifier: ^0.9.0 version: 0.9.0(typescript@5.9.3) - clean-publish: - specifier: ^7.0.1 - version: 7.0.1 concat-with-sourcemaps: specifier: ^1.1.0 version: 1.1.0 @@ -967,11 +964,6 @@ packages: peerDependencies: typescript: '>=4.0.0' - clean-publish@7.0.1: - resolution: {integrity: sha512-Fr4c1dg6kEG4juBo2IMbft0w8inX0QTsbkRWIy5R0jZGWswQIpgOW0yfqV7bmyxn1F1eQtm9VBy5VDyB3go8WQ==} - engines: {node: '>= 22.0.0'} - hasBin: true - cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} @@ -1602,10 +1594,6 @@ packages: resolution: {integrity: sha512-ZOffsNrXYggvU1mDGHk54I96r26P8SyMjO5slMKSc7+IWmtB/MQKnEC2fP51imB3/pT6YK5cT5E8f+Dd9KdyOQ==} engines: {node: 20 || >=22} - tinyexec@1.1.2: - resolution: {integrity: sha512-dAqSqE/RabpBKI8+h26GfLq6Vb3JVXs30XYQjdMjaj/c2tS8IYYMbIzP599KtRj7c57/wYApb3QjgRgXmrCukA==} - engines: {node: '>=18'} - tinyglobby@0.2.16: resolution: {integrity: sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==} engines: {node: '>=12.0.0'} @@ -2411,13 +2399,6 @@ snapshots: typescript: 5.9.3 vfile-location: 5.0.3 - clean-publish@7.0.1: - dependencies: - lilconfig: 3.1.3 - picomatch: 4.0.4 - tinyexec: 1.1.2 - tinyglobby: 0.2.16 - cliui@8.0.1: dependencies: string-width: 4.2.3 @@ -3043,8 +3024,6 @@ snapshots: glob: 13.0.6 minimatch: 10.2.5 - tinyexec@1.1.2: {} - tinyglobby@0.2.16: dependencies: fdir: 6.5.0(picomatch@4.0.4) From b91e4a63907325d98b75d11fda546bdd91acc608 Mon Sep 17 00:00:00 2001 From: Andrey Sitnik Date: Sat, 27 Jun 2026 13:36:30 +0000 Subject: [PATCH 43/89] Fix Node.js 26 tests --- .npmignore | 1 + patches/yargs@17.7.2.patch | 25 +++++++++++++++++++++++++ pnpm-lock.yaml | 7 +++++-- pnpm-workspace.yaml | 3 +++ 4 files changed, 34 insertions(+), 2 deletions(-) create mode 100644 patches/yargs@17.7.2.patch diff --git a/.npmignore b/.npmignore index 9439f8b9d..4329744d3 100644 --- a/.npmignore +++ b/.npmignore @@ -2,6 +2,7 @@ coverage/ test/ docs/ +patches/ tsconfig.json eslint.config.mjs pnpm-workspace.yaml diff --git a/patches/yargs@17.7.2.patch b/patches/yargs@17.7.2.patch new file mode 100644 index 000000000..a26866587 --- /dev/null +++ b/patches/yargs@17.7.2.patch @@ -0,0 +1,25 @@ +diff --git a/browser.d.ts b/browser.d.ts +deleted file mode 100644 +index 21f3fc69190b574ab8456514d3da1972afa53973..0000000000000000000000000000000000000000 +diff --git a/package.json b/package.json +index 389cc6b064b5f888e7f9d718f5440feabdce57ad..c1ae265542ad386fa2214914b0186ade81dd6ee2 100644 +--- a/package.json ++++ b/package.json +@@ -20,13 +20,10 @@ + "import": "./browser.mjs", + "types": "./browser.d.ts" + }, +- "./yargs": [ +- { +- "import": "./yargs.mjs", +- "require": "./yargs" +- }, +- "./yargs" +- ] ++ "./yargs": { ++ "require": "./index.cjs", ++ "import": "./yargs.mjs" ++ } + }, + "type": "module", + "module": "./index.mjs", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 60b827b01..5b08a4264 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,6 +4,9 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false +patchedDependencies: + yargs@17.7.2: 34652056801bf0e586b0f2ab1a4f464b352d4d3ce0f5b2d51040d171c31843c3 + importers: .: @@ -2384,7 +2387,7 @@ snapshots: istanbul-reports: 3.2.0 test-exclude: 8.0.0 v8-to-istanbul: 9.3.0 - yargs: 17.7.2 + yargs: 17.7.2(patch_hash=34652056801bf0e586b0f2ab1a4f464b352d4d3ce0f5b2d51040d171c31843c3) yargs-parser: 21.1.1 cac@7.0.0: {} @@ -3168,7 +3171,7 @@ snapshots: yargs-parser@21.1.1: {} - yargs@17.7.2: + yargs@17.7.2(patch_hash=34652056801bf0e586b0f2ab1a4f464b352d4d3ce0f5b2d51040d171c31843c3): dependencies: cliui: 8.0.1 escalade: 3.2.0 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index f306e6140..7b949ad9d 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -2,3 +2,6 @@ allowBuilds: esbuild: false simple-git-hooks: true unrs-resolver: false + +patchedDependencies: + 'yargs@17.7.2': 'patches/yargs@17.7.2.patch' From d1e80b830386b08dcd5b962fd466d1c51f28e82d Mon Sep 17 00:00:00 2001 From: Sarath Francis Date: Sat, 27 Jun 2026 09:48:04 -0400 Subject: [PATCH 44/89] Fix Node#rangeBy() ignoring index 0 (#2091) When calling Node#rangeBy() (and therefore Node#error() and Node#warn()) with index 0, the resulting range covered the whole node instead of a single character at offset 0. The end-of-range branch used a truthy check on opts.index, so an index of 0 fell through and left the end position at the node's end. This is the same off-by-zero issue that was previously fixed for endIndex; the index branches were missed. Switch both index checks to a numeric type check, matching the existing endIndex handling. index 0 now produces a single-character range, consistent with every other index value. --- lib/node.js | 4 ++-- test/node.test.ts | 10 ++++++++++ test/warning.test.ts | 9 +++++++++ 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/lib/node.js b/lib/node.js index 07780d35e..37f500fba 100644 --- a/lib/node.js +++ b/lib/node.js @@ -302,7 +302,7 @@ class Node { line: opts.start.line, offset: sourceOffset(inputString, opts.start) } - } else if (opts.index) { + } else if (typeof opts.index === 'number') { start = this.positionInside(opts.index) } @@ -314,7 +314,7 @@ class Node { } } else if (typeof opts.endIndex === 'number') { end = this.positionInside(opts.endIndex) - } else if (opts.index) { + } else if (typeof opts.index === 'number') { end = this.positionInside(opts.index + 1) } } diff --git a/test/node.test.ts b/test/node.test.ts index 0e11fe024..f86fbe799 100755 --- a/test/node.test.ts +++ b/test/node.test.ts @@ -860,6 +860,16 @@ test('rangeBy() returns range for index and endIndex', () => { }) }) +test('rangeBy() returns range for index 0', () => { + let css = parse('a { one: X }') + let a = css.first as Rule + let one = a.first as Declaration + equal(one.rangeBy({ index: 0 }), { + end: { column: 7, line: 1, offset: 6 }, + start: { column: 6, line: 1, offset: 5 } + }) +}) + test('rangeBy() returns range for index and endIndex when offsets are missing', () => { let css = parse('a { one: X }') let a = css.first as Rule diff --git a/test/warning.test.ts b/test/warning.test.ts index 609b056aa..4075f8a7a 100644 --- a/test/warning.test.ts +++ b/test/warning.test.ts @@ -121,6 +121,15 @@ test('gets range from index', () => { is(warning.endColumn, 4) }) +test('gets range from index 0', () => { + let root = parse('a b{}') + let warning = new Warning('text', { index: 0, node: root.first }) + is(warning.line, 1) + is(warning.column, 1) + is(warning.endLine, 1) + is(warning.endColumn, 2) +}) + test('gets range from index and endIndex', () => { let root = parse('a b{}') let warning = new Warning('text', { endIndex: 3, index: 2, node: root.first }) From 3828982213fec6bc13d0791b1adf40393be0935e Mon Sep 17 00:00:00 2001 From: Sarath Francis Date: Sun, 28 Jun 2026 06:56:11 -0400 Subject: [PATCH 45/89] Preserve node raws when rehydrating a JSON AST (#2100) fromJSON() attached child nodes through the container constructor, which runs them back through append()/normalize(). For root-level children that re-applies insertion spacing normalization and overwrites each node's own raws.before with the previous sibling's, so toJSON() -> fromJSON() was not lossless: stylesheets with non-uniform blank lines between top-level rules came back with their spacing flattened. Rehydrate children separately and attach them directly, keeping the raws exactly as serialized. --- lib/fromJSON.js | 26 ++++++++++++++++++++------ test/fromJSON.test.ts | 13 +++++++++++++ 2 files changed, 33 insertions(+), 6 deletions(-) diff --git a/lib/fromJSON.js b/lib/fromJSON.js index c9ac1a86c..a43686d50 100644 --- a/lib/fromJSON.js +++ b/lib/fromJSON.js @@ -25,8 +25,13 @@ function fromJSON(json, inputs) { inputs.push(inputHydrated) } } + // Rehydrate children separately and attach them after construction. + // Passing them through the container constructor would re-run insertion + // spacing normalization and overwrite each child's own `raws.before`. + let nodes if (defaults.nodes) { - defaults.nodes = json.nodes.map(n => fromJSON(n, inputs)) + nodes = json.nodes.map(n => fromJSON(n, inputs)) + delete defaults.nodes } if (defaults.source) { let { inputId, ...source } = defaults.source @@ -35,19 +40,28 @@ function fromJSON(json, inputs) { defaults.source.input = inputs[inputId] } } + + let node if (defaults.type === 'root') { - return new Root(defaults) + node = new Root(defaults) } else if (defaults.type === 'decl') { - return new Declaration(defaults) + node = new Declaration(defaults) } else if (defaults.type === 'rule') { - return new Rule(defaults) + node = new Rule(defaults) } else if (defaults.type === 'comment') { - return new Comment(defaults) + node = new Comment(defaults) } else if (defaults.type === 'atrule') { - return new AtRule(defaults) + node = new AtRule(defaults) } else { throw new Error('Unknown node type: ' + json.type) } + + if (nodes) { + node.nodes = nodes + for (let child of nodes) child.parent = node + } + + return node } module.exports = fromJSON diff --git a/test/fromJSON.test.ts b/test/fromJSON.test.ts index 132cc06a1..b9e0b092a 100755 --- a/test/fromJSON.test.ts +++ b/test/fromJSON.test.ts @@ -40,6 +40,19 @@ test('rehydrates a JSON AST', () => { ) }) +test('preserves node raws when rehydrating a JSON AST', () => { + let css = 'a {}\nb {}\n\nc {}\n' + let root = postcss.parse(css) + + let rehydrated = postcss.fromJSON( + JSON.parse(JSON.stringify(root.toJSON())) + ) as Root + + is(rehydrated.toString(), css) + is(rehydrated.nodes[1].raws.before, '\n') + is(rehydrated.nodes[2].raws.before, '\n\n') +}) + test('rehydrates an array of Nodes via JSON.stringify', () => { let root = postcss.parse('.cls { color: orange; }') From 886336919497516df8f140d0fb327bd125e35053 Mon Sep 17 00:00:00 2001 From: Andrey Sitnik Date: Sun, 28 Jun 2026 14:38:59 +0000 Subject: [PATCH 46/89] Update dependencies --- .github/workflows/test.yml | 10 +- package.json | 12 +- pnpm-lock.yaml | 381 +++++++++++++++++++------------------ 3 files changed, 210 insertions(+), 193 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 94d36adef..dea34fb5b 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -12,7 +12,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout the repository - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Install Node.js & pnpm uses: pnpm/setup@5d160c5bc68a09337ad0d5654e237e03253b5879 # v1.0.0 with: @@ -32,7 +32,7 @@ jobs: name: Node.js ${{ matrix.node }} Quick steps: - name: Checkout the repository - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Install Node.js & pnpm uses: pnpm/setup@5d160c5bc68a09337ad0d5654e237e03253b5879 # v1.0.0 with: @@ -58,7 +58,7 @@ jobs: name: Node.js ${{ matrix.node }} Quick steps: - name: Checkout the repository - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Install pnpm uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v5.0.0 with: @@ -80,9 +80,9 @@ jobs: name: Windows Quick steps: - name: Checkout the repository - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Install pnpm - uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 # v6.0.8 + uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9 with: version: 11 - name: Install Node.js LTS diff --git a/package.json b/package.json index db68f7a51..a0f25b959 100644 --- a/package.json +++ b/package.json @@ -97,16 +97,16 @@ "@logux/eslint-config": "^57.1.0", "@logux/oxc-configs": "^0.4.0", "@size-limit/preset-small-lib": "^12.1.0", - "@types/node": "^25.8.0", - "actions-up": "^1.14.1", + "@types/node": "^26.0.1", + "actions-up": "^1.14.3", "c8": "^11.0.0", "check-dts": "^0.9.0", "concat-with-sourcemaps": "^1.1.0", - "eslint": "^10.4.0", + "eslint": "^10.6.0", "multiocular": "^0.8.3", - "nanodelay": "^1.0.8", - "nanospy": "^1.0.0", - "oxfmt": "^0.50.0", + "nanodelay": "^2.0.2", + "nanospy": "^2.0.2", + "oxfmt": "^0.56.0", "postcss-parser-tests": "^8.9.0", "simple-git-hooks": "^2.13.1", "size-limit": "^12.1.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5b08a4264..b5b7e1258 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -23,7 +23,7 @@ importers: devDependencies: '@logux/eslint-config': specifier: ^57.1.0 - version: 57.1.0(@typescript-eslint/utils@8.59.3(eslint@10.4.0)(typescript@5.9.3))(eslint@10.4.0)(typescript@5.9.3) + version: 57.1.0(@typescript-eslint/utils@8.59.3(eslint@10.6.0)(typescript@5.9.3))(eslint@10.6.0)(typescript@5.9.3) '@logux/oxc-configs': specifier: ^0.4.0 version: 0.4.0(oxlint-tsgolint@0.18.1)(oxlint@1.58.0(oxlint-tsgolint@0.18.1))(typescript@5.9.3) @@ -31,11 +31,11 @@ importers: specifier: ^12.1.0 version: 12.1.0(size-limit@12.1.0) '@types/node': - specifier: ^25.8.0 - version: 25.8.0 + specifier: ^26.0.1 + version: 26.0.1 actions-up: - specifier: ^1.14.1 - version: 1.14.1 + specifier: ^1.14.3 + version: 1.14.3 c8: specifier: ^11.0.0 version: 11.0.0 @@ -46,20 +46,20 @@ importers: specifier: ^1.1.0 version: 1.1.0 eslint: - specifier: ^10.4.0 - version: 10.4.0 + specifier: ^10.6.0 + version: 10.6.0 multiocular: specifier: ^0.8.3 version: 0.8.3 nanodelay: - specifier: ^1.0.8 - version: 1.0.8 + specifier: ^2.0.2 + version: 2.0.2 nanospy: - specifier: ^1.0.0 - version: 1.0.0 + specifier: ^2.0.2 + version: 2.0.2 oxfmt: - specifier: ^0.50.0 - version: 0.50.0 + specifier: ^0.56.0 + version: 0.56.0 postcss-parser-tests: specifier: ^8.9.0 version: 8.9.0 @@ -74,7 +74,7 @@ importers: version: 6.0.1 ts-node: specifier: ^10.9.2 - version: 10.9.2(@types/node@25.8.0)(typescript@5.9.3) + version: 10.9.2(@types/node@26.0.1)(typescript@5.9.3) typescript: specifier: ^5.9.3 version: 5.9.3 @@ -287,8 +287,8 @@ packages: resolution: {integrity: sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@eslint/plugin-kit@0.7.1': - resolution: {integrity: sha512-rZAP3aVgB9ds9KOeUSL+zZ21hPmo8dh6fnIFwRQj5EAZl9gzR7wxYbYXYysAM8CTqGmUGyp2S4kUdV17MnGuWQ==} + '@eslint/plugin-kit@0.7.2': + resolution: {integrity: sha512-+CNAzxglkrpNf/kKywqQfk74QjtceuOE7Qm+AF8miRvPF/wmmK5+OJOgVh3AVTT3RP2mH3+FOaxlE5v72owk0A==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} '@humanfs/core@0.19.2': @@ -381,124 +381,124 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@oxfmt/binding-android-arm-eabi@0.50.0': - resolution: {integrity: sha512-ICXQVKrDvsWUtfx6EiVJxfWrajKTwTfRV8vz2XiMkxZeuCKJLgD4YAj6dE3BWvpqDlkVkie4VSTAtMUWO9LDXg==} + '@oxfmt/binding-android-arm-eabi@0.56.0': + resolution: {integrity: sha512-CSCxi7ovYojgfdPOdUb9T508HKeAdDIKeRGg7x8IZwVJrWz9gVgX7MbUnFqtQAE4QvoNo07mj2JlwnOzJw4qqA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [android] - '@oxfmt/binding-android-arm64@0.50.0': - resolution: {integrity: sha512-quwjLQFkuW6OwLHeDeIXsTzOmipQFQbqsYN9HLk2B5I01IlAQZHP1UiLIg0O7pP+dUgPD2AD7SCYA3gs6NH5/g==} + '@oxfmt/binding-android-arm64@0.56.0': + resolution: {integrity: sha512-HYJFnd+PkDwf6S9ZPGzXXtjNqvRWFnnhdbWaouh4mi/SxU8wmDuzlMn3xo/wDTGnr4Q1VA7ZzOaE/D4biW0W6A==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@oxfmt/binding-darwin-arm64@0.50.0': - resolution: {integrity: sha512-ikU5umElcMi78/TNI334wtjr5WZ5F4nWa1aIDseAKKGL0W3ygxeYKkrIJ0fggWa8MOon66BmG3xCqmX1m9YAOw==} + '@oxfmt/binding-darwin-arm64@0.56.0': + resolution: {integrity: sha512-sftR/bEOr+t1gs+evwsHi/Xbq2FAPA2uU3VMr8n6ZU9PoK/IMSfnfu7+OEe/uy1+knhrFl4Wvy7Vkm3uo9mJ7g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@oxfmt/binding-darwin-x64@0.50.0': - resolution: {integrity: sha512-WT4MOYG4mv9IXrH0m60vHsJh+rRMPSOKTQmwDpwmgQ+DuW/i5dU4pqc0HDO5uclO5vjz5IFX5z/taW86LSVe/g==} + '@oxfmt/binding-darwin-x64@0.56.0': + resolution: {integrity: sha512-z66SdjLqa3MUPKvTp3Mbb5nSjKSbnYxJGeB+Wx987s8T5hPcIRiBMfnJ6zcPgYtQn3x5xjvdzNVkXrSeYH6ZFg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@oxfmt/binding-freebsd-x64@0.50.0': - resolution: {integrity: sha512-gH0rycVXqV4juWkvLs2uPMtTyppDc7qEUVzXAxnQ7FpcSZNXqKowUgtjH8q67ngj416r8+4NnAlyR/D35zwwhQ==} + '@oxfmt/binding-freebsd-x64@0.56.0': + resolution: {integrity: sha512-t2tkrV1vtZyaItSQ71dTi2ZVKZEI39b/LqLT12V5KMfIeXK6N32TUC1jhOXKVQmhECq9j2ZXMQV3JeT1kh9Vmg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@oxfmt/binding-linux-arm-gnueabihf@0.50.0': - resolution: {integrity: sha512-wL/k+o0hiTeRvi/gPzeC1L/yTHTXIeHDKWU09s2zTBmv7ma59wTm+fADNSGYxhJQDxyavQbwTf1QpW3Zj924tQ==} + '@oxfmt/binding-linux-arm-gnueabihf@0.56.0': + resolution: {integrity: sha512-+gCy+Tp3RHeXQ9y/QrS76lXIpZkbziTyp6hIgjB2MssCwfMph3vG/GEfkhO34Rai1vhYIaUkvv8UT1BcDorJPw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxfmt/binding-linux-arm-musleabihf@0.50.0': - resolution: {integrity: sha512-Y59FKqoUM3Gf00E395b4ixfWyJGwO2GzaZawF5MZoVWcb3f6CkWUXyao0jyOvoIxDMzMybcVRuXyG7ih/Nxweg==} + '@oxfmt/binding-linux-arm-musleabihf@0.56.0': + resolution: {integrity: sha512-0kKkVvQ2I+FJ2sxQyUu1zJ0yWP5kcWse/yVFnGQSFCXMwSSkfEaUGu0dW774O7nyy3jrcBGap7OSc8dZmU/CdA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxfmt/binding-linux-arm64-gnu@0.50.0': - resolution: {integrity: sha512-OvXbfTjMignXWyJXg/NOFsiy996vFe8wb9tkxJaUq8ylq0XrzJg3ttavC5Tcmm6F8/GUs2r3XFJWWu9q/27uYw==} + '@oxfmt/binding-linux-arm64-gnu@0.56.0': + resolution: {integrity: sha512-npkA2siMbyWRh+wEhi1aTAx4RirukGcGNt8V4Ch86pG+xU9aurqS1MZOnKYMu03ISwat3rB6zkQx51SsB9obNw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-arm64-musl@0.50.0': - resolution: {integrity: sha512-rqmvHZm7vMa3NLYa0khwkhReCmp9tqKnF23TFZ7S5cYJLvIE4b0k8famWE7kO897/DXznJe675n5SohFBggbxA==} + '@oxfmt/binding-linux-arm64-musl@0.56.0': + resolution: {integrity: sha512-UekqOjGkV4/MkqreCV9SPIB2jlR3/HbXrmhV1rVXJZ9wfDXMyCMriLtq3tHqLY4PkbVWNtfcm1kMojJ26KLSJw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@oxfmt/binding-linux-ppc64-gnu@0.50.0': - resolution: {integrity: sha512-49bAdYbMSde42tzPDtuHnBWzOgmoS0PT9THCjvMnDVYMQYiHzPc2Mv5rkpBHVQOXM+PHfafJlxgK0anXSWBVvw==} + '@oxfmt/binding-linux-ppc64-gnu@0.56.0': + resolution: {integrity: sha512-XSzveSpeZMD5XJpew5lRFVtNnT04xd3rJxENXmk7wkZzN9oWzv2aFJyoNDhOtoz69BYaS/fg4SYl+CfEZRpB0Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-riscv64-gnu@0.50.0': - resolution: {integrity: sha512-VFT25/6kckkIM62KeWB2bi+xCEmC/zC+DcMaIpEfaio8ulkGDLSiTz11TyK0eqgTl3x5OklYEGDWohvAgOr8Bw==} + '@oxfmt/binding-linux-riscv64-gnu@0.56.0': + resolution: {integrity: sha512-EkQ0nJa7k7HDDIVuPF7WY+k4k+bzdclLYtyIXNt7/OqVghfNiMym6YGppFBgx1XRIHW6QylxBz5OogumPjPJbQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-riscv64-musl@0.50.0': - resolution: {integrity: sha512-BBJMuNy6jjkXjUUINF5UTQqb/nvjmtJad43Gp7bab0AAURAdthhJvduR7rHpWInpWYiaMzYsdrmURNcrmpxdZA==} + '@oxfmt/binding-linux-riscv64-musl@0.56.0': + resolution: {integrity: sha512-dyjAGW8jKRge0ik6U/dgvQG0nVpA3iBlRskQTz5qJLvQWIrySxX5jpqzPetLBNIIZ231KA82fDdi1nLTk8ENCw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [musl] - '@oxfmt/binding-linux-s390x-gnu@0.50.0': - resolution: {integrity: sha512-Xd4y+yjAYHKmryXhyUUwbyRD01iKfcvI74iE01L6p4F8SwjhZQXDshK+T8PcrPZLiFqH263P5xqJk94amjkjzQ==} + '@oxfmt/binding-linux-s390x-gnu@0.56.0': + resolution: {integrity: sha512-60ZGH3LtfqlW8X6vcLdSFY4lvCQYINurttYBKaALnHCDVAUCYJ1LsUgS6p1XOzVlzEDx3yNUZvDF1Lvt59zoZw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-x64-gnu@0.50.0': - resolution: {integrity: sha512-Qp96rYJru7l++7mk4R+eh8qq9GFfFAMdmoN6VGoRHI8AA1XMnUIzH4u+zOcKZZwY+irHdsaBldDearwB4nOH7A==} + '@oxfmt/binding-linux-x64-gnu@0.56.0': + resolution: {integrity: sha512-u1suj1tgJHK4ZqB7buCtdbNef2n8+d0lXTPJwLHNmtyK6p+DTpsaoDvmqhQrA56fgKYv4LuRxNtL8YooebKOew==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-x64-musl@0.50.0': - resolution: {integrity: sha512-5XLGp+yd5w2Key5LMqJO+X3XVsJKgeeUKljy32+MBF/J/JZ5m8WHl6dI5eOQOr3ixopxPiXIyDAxn3slI3UXiQ==} + '@oxfmt/binding-linux-x64-musl@0.56.0': + resolution: {integrity: sha512-aYGLvlQHt80y+qKEtfJY/Nm27G0125Lv+qyh9SJ4Cjc6lXnXjD+ndfhqQnbV24POpMi7rNRi0jvx/0d70FRpCQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@oxfmt/binding-openharmony-arm64@0.50.0': - resolution: {integrity: sha512-QAxwzh7+GHugCD7WuERolVs8TKQwXNIAZXAHHTecbKVc9oWBkWzOiLauQuezXS57tVcof5zhi1IjZ8tOV0htTg==} + '@oxfmt/binding-openharmony-arm64@0.56.0': + resolution: {integrity: sha512-H/re/gO+7ysVc+kywHNuzY3C33EN9sQcZhg0kp1ZwOZl7y998ZE5mhnBiuGR/nYI0pqLL5xQfrHVUOJ/cIJsCA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@oxfmt/binding-win32-arm64-msvc@0.50.0': - resolution: {integrity: sha512-3nKN/kqClm9iCFWTwtJ9UpR5SGyExp5l3nw6uIiBt+3XitQtszin+vjHrL7JHfDksZ7Svigdaow2zqz/IKCfqw==} + '@oxfmt/binding-win32-arm64-msvc@0.56.0': + resolution: {integrity: sha512-6qLNXfXmtAs8jXDvYMkxk6Wec5SUJoew+ZX1uOZmqaR7ks0EJFbAohuOCELDyJMWyVlxotVG8Xf8m74Bfq0O2w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@oxfmt/binding-win32-ia32-msvc@0.50.0': - resolution: {integrity: sha512-3r6XZ8+X6qlLbXaPW2NygfiAWSpKbkE36pAVzS83mY+cYY+pSMalJ+qnCgkr92tr+Iqv988XKQ1CpARTg9ITbQ==} + '@oxfmt/binding-win32-ia32-msvc@0.56.0': + resolution: {integrity: sha512-UXEXuKphAe15bsob4AswNMArCw38XSmUIs3wk1s6e6MX9OWGW/IRWU95s1hZDiVg09STy1jHgyN2qkqbu1FT0w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ia32] os: [win32] - '@oxfmt/binding-win32-x64-msvc@0.50.0': - resolution: {integrity: sha512-BSE8D8KsvquMG9vU+Qt4qGuoOcZ36rxU5S6ZkHNguj+MlWkXWCBETnno3yJ9CfWvfCrbmieaN9LK6hdcdHNZ/w==} + '@oxfmt/binding-win32-x64-msvc@0.56.0': + resolution: {integrity: sha512-HPyNDjky+NIOuaMvHZflR+kst3YWdUOH2JUQYkf99grqZ5mEBTQM6h9iGy501Z8Xt5xMScrwHOuVCOlqDrktRw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] @@ -706,8 +706,8 @@ packages: '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - '@types/node@25.8.0': - resolution: {integrity: sha512-TCFSk8IZh+iLX1xtksoBVtdmgL+1IX0fC9BeU4QqFSuNdN/K+HUlhqOzEmSYYpZUVsLYcPqc9KX+60iDuninSQ==} + '@types/node@26.0.1': + resolution: {integrity: sha512-fc3KiUoBt6kie0N9bIW3E47vZsuaMf0PM2AaUpLCLT0s/LvX1nxAim6Fc049cNxODPpGm6qRAuUOB86SkRuPQw==} '@types/trusted-types@2.0.7': resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} @@ -894,9 +894,14 @@ packages: engines: {node: '>=0.4.0'} hasBin: true - actions-up@1.14.1: - resolution: {integrity: sha512-x/AfoJqpumNNEfFLLnzOZ/OxOuiiaEI8xDmNSEwCLJUZFkRZGHkS8OU91WztUh3jp50gvIN74PJDMEJZI4i4xQ==} - engines: {node: ^18.0.0 || >=20.0.0} + acorn@8.17.0: + resolution: {integrity: sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==} + engines: {node: '>=0.4.0'} + hasBin: true + + actions-up@1.14.3: + resolution: {integrity: sha512-N8jvV3BCwlezGe03MkwujHww/5n5yd1BMDWUOka/MLH1kcNwGgdFfUjhTKprN6TvbgziKvTeUDpfevzEKFDDLA==} + engines: {node: ^18.3.0 || >=20.0.0} hasBin: true ajv@6.15.0: @@ -952,10 +957,6 @@ packages: monocart-coverage-reports: optional: true - cac@7.0.0: - resolution: {integrity: sha512-tixWYgm5ZoOD+3g6UTea91eow5z6AAHaho3g0V9CNSNb45gM8SmflpAc+GRd1InC4AqN/07Unrgp56Y94N9hJQ==} - engines: {node: '>=20.19.0'} - callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} @@ -1127,8 +1128,8 @@ packages: resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - eslint@10.4.0: - resolution: {integrity: sha512-loXy6bWOoP3EP6JA7jo6p5jMpBJmHmsNZM5SFRHLdh1MGOPurMnNBj4ZlAbaqUAaQWbCr7jHV4P7gzAyryZWkQ==} + eslint@10.6.0: + resolution: {integrity: sha512-6lVbcqSodALYo+4ELD0heG6lFiFxnLMuLkiMi2qV8LMp54N8tE8FT1GMH+ev4Ti00nFjNze2+Su6DsV5OQW3Dg==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} hasBin: true peerDependencies: @@ -1383,8 +1384,9 @@ packages: engines: {node: ^22.16.0 || >=24.0.0} hasBin: true - nanodelay@1.0.8: - resolution: {integrity: sha512-mfVn7t26m4mVoUuWdUevZccq0saIh5T4Lu3cAzbZ6j03yc4sIDwM3Dof0LS70YwflPZtGJ92BGhNYV862wXRvg==} + nanodelay@2.0.2: + resolution: {integrity: sha512-6AS5aCSXsjoxq2Jr9CdaAeT60yoYDOTp6po9ziqeOeY6vf6uTEHYSqWql6EFILrM3fEfXgkZ4KqE9L0rTm/wlA==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} nanoevents@9.1.0: resolution: {integrity: sha512-Jd0fILWG44a9luj8v5kED4WI+zfkkgwKyRQKItTtlPfEsh7Lznfi1kr8/iZ+XAIss4Qq5GqRB0qtWbaz9ceO/A==} @@ -1403,9 +1405,9 @@ packages: nanospinner@1.2.2: resolution: {integrity: sha512-Zt/AmG6qRU3e+WnzGGLuMCEAO/dAu45stNbHY223tUxldaDAeE+FxSPsd9Q+j+paejmm0ZbrNVs5Sraqy3dRxA==} - nanospy@1.0.0: - resolution: {integrity: sha512-wvmmALNstRRhLhy7RV11NCRY2k1zxstImiju4VyyKNNRIKDVjyBtmEd/Q4G82/3dN4VSTe+0PRR3DUAASSbEEQ==} - engines: {node: ^8.0.0 || ^10.0.0 || ^12.0.0 || ^14.0.0 || ^16.0.0 || ^18.0.0 || >=20.0.0} + nanospy@2.0.2: + resolution: {integrity: sha512-AvkslkHQavd4abp7clE0xsv4afGpBpnWUqWY23V3o4ljdyi/YIOpLiiWtrlLh1oR7kWC4GT7iBN5M2SjL5I5yw==} + engines: {node: ^8.0.0 || ^10.0.0 || ^12.0.0 || ^14.0.0 || ^16.0.0 || ^18.0.0 || ^20.0.0 || ^22.0.0 || ^24.0.0 || >=26.0.0} nanostores@1.3.0: resolution: {integrity: sha512-XPUa/jz+P1oJvN9VBxw4L9MtdFfaH3DAryqPssqhb2kXjmb9npz0dly6rCsgFWOPr4Yg9mTfM3MDZgZZ+7A3lA==} @@ -1431,15 +1433,18 @@ packages: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} - oxfmt@0.50.0: - resolution: {integrity: sha512-owwjTnhfM5aCOJhYeqDvk7iM504OeYFZpdRU7cxx7xtZMo4uVpjlryTUon+Cf76CugsvnqA32e6rC73pr1hXaw==} + oxfmt@0.56.0: + resolution: {integrity: sha512-9Dv0wV3zKiyvhjD7bRKaInKmHQ1sPx3RGOjQkGFJbbdQ16576yf8qhMSO9Q9cvHcs+1NpBsRTkuDDYFFPTJ6gw==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: svelte: ^5.0.0 + vite-plus: '*' peerDependenciesMeta: svelte: optional: true + vite-plus: + optional: true oxlint-tsgolint@0.18.1: resolution: {integrity: sha512-Hgb0wMfuXBYL0ddY+1hAG8IIfC40ADwPnBuUaC6ENAuCtTF4dHwsy7mCYtQ2e7LoGvfoSJRY0+kqQRiembJ/jQ==} @@ -1530,8 +1535,8 @@ packages: resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} engines: {node: '>=6'} - semver@7.8.0: - resolution: {integrity: sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA==} + semver@7.8.5: + resolution: {integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==} engines: {node: '>=10'} hasBin: true @@ -1601,6 +1606,10 @@ packages: resolution: {integrity: sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==} engines: {node: '>=12.0.0'} + tinyglobby@0.2.17: + resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} + engines: {node: '>=12.0.0'} + tinypool@2.1.0: resolution: {integrity: sha512-Pugqs6M0m7Lv1I7FtxN4aoyToKg1C4tu+/381vH35y8oENM/Ai7f7C4StcoK4/+BSw9ebcS8jRiVrORFKCALLw==} engines: {node: ^20.0.0 || >=22.0.0} @@ -1653,8 +1662,8 @@ packages: engines: {node: '>=14.17'} hasBin: true - undici-types@7.24.6: - resolution: {integrity: sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==} + undici-types@8.3.0: + resolution: {integrity: sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ==} unist-util-stringify-position@4.0.0: resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} @@ -1842,9 +1851,9 @@ snapshots: '@esbuild/win32-x64@0.28.0': optional: true - '@eslint-community/eslint-utils@4.9.1(eslint@10.4.0)': + '@eslint-community/eslint-utils@4.9.1(eslint@10.6.0)': dependencies: - eslint: 10.4.0 + eslint: 10.6.0 eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.2': {} @@ -1881,7 +1890,7 @@ snapshots: '@eslint/object-schema@3.0.5': {} - '@eslint/plugin-kit@0.7.1': + '@eslint/plugin-kit@0.7.2': dependencies: '@eslint/core': 1.2.1 levn: 0.4.1 @@ -1926,16 +1935,16 @@ snapshots: dependencies: nanoevents: 9.1.0 - '@logux/eslint-config@57.1.0(@typescript-eslint/utils@8.59.3(eslint@10.4.0)(typescript@5.9.3))(eslint@10.4.0)(typescript@5.9.3)': + '@logux/eslint-config@57.1.0(@typescript-eslint/utils@8.59.3(eslint@10.6.0)(typescript@5.9.3))(eslint@10.6.0)(typescript@5.9.3)': dependencies: '@eslint/eslintrc': 3.3.5 - eslint: 10.4.0 - eslint-plugin-import-x: 4.16.2(@typescript-eslint/utils@8.59.3(eslint@10.4.0)(typescript@5.9.3))(eslint@10.4.0) - eslint-plugin-n: 17.24.0(eslint@10.4.0)(typescript@5.9.3) - eslint-plugin-perfectionist: 5.9.0(eslint@10.4.0)(typescript@5.9.3) + eslint: 10.6.0 + eslint-plugin-import-x: 4.16.2(@typescript-eslint/utils@8.59.3(eslint@10.6.0)(typescript@5.9.3))(eslint@10.6.0) + eslint-plugin-n: 17.24.0(eslint@10.6.0)(typescript@5.9.3) + eslint-plugin-perfectionist: 5.9.0(eslint@10.6.0)(typescript@5.9.3) eslint-plugin-prefer-let: 4.2.2 globals: 17.6.0 - typescript-eslint: 8.59.3(eslint@10.4.0)(typescript@5.9.3) + typescript-eslint: 8.59.3(eslint@10.6.0)(typescript@5.9.3) transitivePeerDependencies: - '@typescript-eslint/utils' - eslint-import-resolver-node @@ -1983,61 +1992,61 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.20.1 - '@oxfmt/binding-android-arm-eabi@0.50.0': + '@oxfmt/binding-android-arm-eabi@0.56.0': optional: true - '@oxfmt/binding-android-arm64@0.50.0': + '@oxfmt/binding-android-arm64@0.56.0': optional: true - '@oxfmt/binding-darwin-arm64@0.50.0': + '@oxfmt/binding-darwin-arm64@0.56.0': optional: true - '@oxfmt/binding-darwin-x64@0.50.0': + '@oxfmt/binding-darwin-x64@0.56.0': optional: true - '@oxfmt/binding-freebsd-x64@0.50.0': + '@oxfmt/binding-freebsd-x64@0.56.0': optional: true - '@oxfmt/binding-linux-arm-gnueabihf@0.50.0': + '@oxfmt/binding-linux-arm-gnueabihf@0.56.0': optional: true - '@oxfmt/binding-linux-arm-musleabihf@0.50.0': + '@oxfmt/binding-linux-arm-musleabihf@0.56.0': optional: true - '@oxfmt/binding-linux-arm64-gnu@0.50.0': + '@oxfmt/binding-linux-arm64-gnu@0.56.0': optional: true - '@oxfmt/binding-linux-arm64-musl@0.50.0': + '@oxfmt/binding-linux-arm64-musl@0.56.0': optional: true - '@oxfmt/binding-linux-ppc64-gnu@0.50.0': + '@oxfmt/binding-linux-ppc64-gnu@0.56.0': optional: true - '@oxfmt/binding-linux-riscv64-gnu@0.50.0': + '@oxfmt/binding-linux-riscv64-gnu@0.56.0': optional: true - '@oxfmt/binding-linux-riscv64-musl@0.50.0': + '@oxfmt/binding-linux-riscv64-musl@0.56.0': optional: true - '@oxfmt/binding-linux-s390x-gnu@0.50.0': + '@oxfmt/binding-linux-s390x-gnu@0.56.0': optional: true - '@oxfmt/binding-linux-x64-gnu@0.50.0': + '@oxfmt/binding-linux-x64-gnu@0.56.0': optional: true - '@oxfmt/binding-linux-x64-musl@0.50.0': + '@oxfmt/binding-linux-x64-musl@0.56.0': optional: true - '@oxfmt/binding-openharmony-arm64@0.50.0': + '@oxfmt/binding-openharmony-arm64@0.56.0': optional: true - '@oxfmt/binding-win32-arm64-msvc@0.50.0': + '@oxfmt/binding-win32-arm64-msvc@0.56.0': optional: true - '@oxfmt/binding-win32-ia32-msvc@0.50.0': + '@oxfmt/binding-win32-ia32-msvc@0.56.0': optional: true - '@oxfmt/binding-win32-x64-msvc@0.50.0': + '@oxfmt/binding-win32-x64-msvc@0.56.0': optional: true '@oxlint-tsgolint/darwin-arm64@0.18.1': @@ -2158,24 +2167,24 @@ snapshots: '@types/json-schema@7.0.15': {} - '@types/node@25.8.0': + '@types/node@26.0.1': dependencies: - undici-types: 7.24.6 + undici-types: 8.3.0 '@types/trusted-types@2.0.7': optional: true '@types/unist@3.0.3': {} - '@typescript-eslint/eslint-plugin@8.59.3(@typescript-eslint/parser@8.59.3(eslint@10.4.0)(typescript@5.9.3))(eslint@10.4.0)(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.59.3(@typescript-eslint/parser@8.59.3(eslint@10.6.0)(typescript@5.9.3))(eslint@10.6.0)(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.59.3(eslint@10.4.0)(typescript@5.9.3) + '@typescript-eslint/parser': 8.59.3(eslint@10.6.0)(typescript@5.9.3) '@typescript-eslint/scope-manager': 8.59.3 - '@typescript-eslint/type-utils': 8.59.3(eslint@10.4.0)(typescript@5.9.3) - '@typescript-eslint/utils': 8.59.3(eslint@10.4.0)(typescript@5.9.3) + '@typescript-eslint/type-utils': 8.59.3(eslint@10.6.0)(typescript@5.9.3) + '@typescript-eslint/utils': 8.59.3(eslint@10.6.0)(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.59.3 - eslint: 10.4.0 + eslint: 10.6.0 ignore: 7.0.5 natural-compare: 1.4.0 ts-api-utils: 2.5.0(typescript@5.9.3) @@ -2183,14 +2192,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.59.3(eslint@10.4.0)(typescript@5.9.3)': + '@typescript-eslint/parser@8.59.3(eslint@10.6.0)(typescript@5.9.3)': dependencies: '@typescript-eslint/scope-manager': 8.59.3 '@typescript-eslint/types': 8.59.3 '@typescript-eslint/typescript-estree': 8.59.3(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.59.3 debug: 4.4.3 - eslint: 10.4.0 + eslint: 10.6.0 typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -2213,13 +2222,13 @@ snapshots: dependencies: typescript: 5.9.3 - '@typescript-eslint/type-utils@8.59.3(eslint@10.4.0)(typescript@5.9.3)': + '@typescript-eslint/type-utils@8.59.3(eslint@10.6.0)(typescript@5.9.3)': dependencies: '@typescript-eslint/types': 8.59.3 '@typescript-eslint/typescript-estree': 8.59.3(typescript@5.9.3) - '@typescript-eslint/utils': 8.59.3(eslint@10.4.0)(typescript@5.9.3) + '@typescript-eslint/utils': 8.59.3(eslint@10.6.0)(typescript@5.9.3) debug: 4.4.3 - eslint: 10.4.0 + eslint: 10.6.0 ts-api-utils: 2.5.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: @@ -2235,20 +2244,20 @@ snapshots: '@typescript-eslint/visitor-keys': 8.59.3 debug: 4.4.3 minimatch: 10.2.5 - semver: 7.8.0 - tinyglobby: 0.2.16 + semver: 7.8.5 + tinyglobby: 0.2.17 ts-api-utils: 2.5.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.59.3(eslint@10.4.0)(typescript@5.9.3)': + '@typescript-eslint/utils@8.59.3(eslint@10.6.0)(typescript@5.9.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.4.0) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.6.0) '@typescript-eslint/scope-manager': 8.59.3 '@typescript-eslint/types': 8.59.3 '@typescript-eslint/typescript-estree': 8.59.3(typescript@5.9.3) - eslint: 10.4.0 + eslint: 10.6.0 typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -2323,19 +2332,24 @@ snapshots: dependencies: acorn: 8.16.0 + acorn-jsx@5.3.2(acorn@8.17.0): + dependencies: + acorn: 8.17.0 + acorn-walk@8.3.5: dependencies: acorn: 8.16.0 acorn@8.16.0: {} - actions-up@1.14.1: + acorn@8.17.0: {} + + actions-up@1.14.3: dependencies: - cac: 7.0.0 enquirer: 2.4.1 nanospinner: 1.2.2 picocolors: 1.1.1 - semver: 7.8.0 + semver: 7.8.5 yaml: 2.9.0 ajv@6.15.0: @@ -2390,8 +2404,6 @@ snapshots: yargs: 17.7.2(patch_hash=34652056801bf0e586b0f2ab1a4f464b352d4d3ce0f5b2d51040d171c31843c3) yargs-parser: 21.1.1 - cac@7.0.0: {} - callsites@3.1.0: {} check-dts@0.9.0(typescript@5.9.3): @@ -2504,10 +2516,10 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-compat-utils@0.5.1(eslint@10.4.0): + eslint-compat-utils@0.5.1(eslint@10.6.0): dependencies: - eslint: 10.4.0 - semver: 7.8.0 + eslint: 10.6.0 + semver: 7.8.5 eslint-import-context@0.1.9(unrs-resolver@1.11.1): dependencies: @@ -2516,50 +2528,50 @@ snapshots: optionalDependencies: unrs-resolver: 1.11.1 - eslint-plugin-es-x@7.8.0(eslint@10.4.0): + eslint-plugin-es-x@7.8.0(eslint@10.6.0): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.4.0) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.6.0) '@eslint-community/regexpp': 4.12.2 - eslint: 10.4.0 - eslint-compat-utils: 0.5.1(eslint@10.4.0) + eslint: 10.6.0 + eslint-compat-utils: 0.5.1(eslint@10.6.0) - eslint-plugin-import-x@4.16.2(@typescript-eslint/utils@8.59.3(eslint@10.4.0)(typescript@5.9.3))(eslint@10.4.0): + eslint-plugin-import-x@4.16.2(@typescript-eslint/utils@8.59.3(eslint@10.6.0)(typescript@5.9.3))(eslint@10.6.0): dependencies: '@package-json/types': 0.0.12 '@typescript-eslint/types': 8.59.3 comment-parser: 1.4.6 debug: 4.4.3 - eslint: 10.4.0 + eslint: 10.6.0 eslint-import-context: 0.1.9(unrs-resolver@1.11.1) is-glob: 4.0.3 minimatch: 10.2.5 - semver: 7.8.0 + semver: 7.8.5 stable-hash-x: 0.2.0 unrs-resolver: 1.11.1 optionalDependencies: - '@typescript-eslint/utils': 8.59.3(eslint@10.4.0)(typescript@5.9.3) + '@typescript-eslint/utils': 8.59.3(eslint@10.6.0)(typescript@5.9.3) transitivePeerDependencies: - supports-color - eslint-plugin-n@17.24.0(eslint@10.4.0)(typescript@5.9.3): + eslint-plugin-n@17.24.0(eslint@10.6.0)(typescript@5.9.3): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.4.0) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.6.0) enhanced-resolve: 5.21.3 - eslint: 10.4.0 - eslint-plugin-es-x: 7.8.0(eslint@10.4.0) + eslint: 10.6.0 + eslint-plugin-es-x: 7.8.0(eslint@10.6.0) get-tsconfig: 4.14.0 globals: 15.15.0 globrex: 0.1.2 ignore: 5.3.2 - semver: 7.8.0 + semver: 7.8.5 ts-declaration-location: 1.0.7(typescript@5.9.3) transitivePeerDependencies: - typescript - eslint-plugin-perfectionist@5.9.0(eslint@10.4.0)(typescript@5.9.3): + eslint-plugin-perfectionist@5.9.0(eslint@10.6.0)(typescript@5.9.3): dependencies: - '@typescript-eslint/utils': 8.59.3(eslint@10.4.0)(typescript@5.9.3) - eslint: 10.4.0 + '@typescript-eslint/utils': 8.59.3(eslint@10.6.0)(typescript@5.9.3) + eslint: 10.6.0 natural-orderby: 5.0.0 transitivePeerDependencies: - supports-color @@ -2582,14 +2594,14 @@ snapshots: eslint-visitor-keys@5.0.1: {} - eslint@10.4.0: + eslint@10.6.0: dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.4.0) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.6.0) '@eslint-community/regexpp': 4.12.2 '@eslint/config-array': 0.23.5 '@eslint/config-helpers': 0.6.0 '@eslint/core': 1.2.1 - '@eslint/plugin-kit': 0.7.1 + '@eslint/plugin-kit': 0.7.2 '@humanfs/node': 0.16.8 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.3 @@ -2625,8 +2637,8 @@ snapshots: espree@11.2.0: dependencies: - acorn: 8.16.0 - acorn-jsx: 5.3.2(acorn@8.16.0) + acorn: 8.17.0 + acorn-jsx: 5.3.2(acorn@8.17.0) eslint-visitor-keys: 5.0.1 esquery@1.7.0: @@ -2791,7 +2803,7 @@ snapshots: make-dir@4.0.0: dependencies: - semver: 7.8.0 + semver: 7.8.5 make-error@1.3.6: {} @@ -2831,7 +2843,7 @@ snapshots: - bufferutil - utf-8-validate - nanodelay@1.0.8: {} + nanodelay@2.0.2: {} nanoevents@9.1.0: {} @@ -2843,7 +2855,7 @@ snapshots: dependencies: picocolors: 1.1.1 - nanospy@1.0.0: {} + nanospy@2.0.2: {} nanostores@1.3.0: {} @@ -2866,29 +2878,29 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.5 - oxfmt@0.50.0: + oxfmt@0.56.0: dependencies: tinypool: 2.1.0 optionalDependencies: - '@oxfmt/binding-android-arm-eabi': 0.50.0 - '@oxfmt/binding-android-arm64': 0.50.0 - '@oxfmt/binding-darwin-arm64': 0.50.0 - '@oxfmt/binding-darwin-x64': 0.50.0 - '@oxfmt/binding-freebsd-x64': 0.50.0 - '@oxfmt/binding-linux-arm-gnueabihf': 0.50.0 - '@oxfmt/binding-linux-arm-musleabihf': 0.50.0 - '@oxfmt/binding-linux-arm64-gnu': 0.50.0 - '@oxfmt/binding-linux-arm64-musl': 0.50.0 - '@oxfmt/binding-linux-ppc64-gnu': 0.50.0 - '@oxfmt/binding-linux-riscv64-gnu': 0.50.0 - '@oxfmt/binding-linux-riscv64-musl': 0.50.0 - '@oxfmt/binding-linux-s390x-gnu': 0.50.0 - '@oxfmt/binding-linux-x64-gnu': 0.50.0 - '@oxfmt/binding-linux-x64-musl': 0.50.0 - '@oxfmt/binding-openharmony-arm64': 0.50.0 - '@oxfmt/binding-win32-arm64-msvc': 0.50.0 - '@oxfmt/binding-win32-ia32-msvc': 0.50.0 - '@oxfmt/binding-win32-x64-msvc': 0.50.0 + '@oxfmt/binding-android-arm-eabi': 0.56.0 + '@oxfmt/binding-android-arm64': 0.56.0 + '@oxfmt/binding-darwin-arm64': 0.56.0 + '@oxfmt/binding-darwin-x64': 0.56.0 + '@oxfmt/binding-freebsd-x64': 0.56.0 + '@oxfmt/binding-linux-arm-gnueabihf': 0.56.0 + '@oxfmt/binding-linux-arm-musleabihf': 0.56.0 + '@oxfmt/binding-linux-arm64-gnu': 0.56.0 + '@oxfmt/binding-linux-arm64-musl': 0.56.0 + '@oxfmt/binding-linux-ppc64-gnu': 0.56.0 + '@oxfmt/binding-linux-riscv64-gnu': 0.56.0 + '@oxfmt/binding-linux-riscv64-musl': 0.56.0 + '@oxfmt/binding-linux-s390x-gnu': 0.56.0 + '@oxfmt/binding-linux-x64-gnu': 0.56.0 + '@oxfmt/binding-linux-x64-musl': 0.56.0 + '@oxfmt/binding-openharmony-arm64': 0.56.0 + '@oxfmt/binding-win32-arm64-msvc': 0.56.0 + '@oxfmt/binding-win32-ia32-msvc': 0.56.0 + '@oxfmt/binding-win32-x64-msvc': 0.56.0 oxlint-tsgolint@0.18.1: optionalDependencies: @@ -2977,7 +2989,7 @@ snapshots: dependencies: mri: 1.2.0 - semver@7.8.0: {} + semver@7.8.5: {} shebang-command@2.0.0: dependencies: @@ -3032,6 +3044,11 @@ snapshots: fdir: 6.5.0(picomatch@4.0.4) picomatch: 4.0.4 + tinyglobby@0.2.17: + dependencies: + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 + tinypool@2.1.0: {} to-regex-range@5.0.1: @@ -3047,14 +3064,14 @@ snapshots: picomatch: 4.0.4 typescript: 5.9.3 - ts-node@10.9.2(@types/node@25.8.0)(typescript@5.9.3): + ts-node@10.9.2(@types/node@26.0.1)(typescript@5.9.3): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.12 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 25.8.0 + '@types/node': 26.0.1 acorn: 8.16.0 acorn-walk: 8.3.5 arg: 4.1.3 @@ -3072,20 +3089,20 @@ snapshots: dependencies: prelude-ls: 1.2.1 - typescript-eslint@8.59.3(eslint@10.4.0)(typescript@5.9.3): + typescript-eslint@8.59.3(eslint@10.6.0)(typescript@5.9.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.59.3(@typescript-eslint/parser@8.59.3(eslint@10.4.0)(typescript@5.9.3))(eslint@10.4.0)(typescript@5.9.3) - '@typescript-eslint/parser': 8.59.3(eslint@10.4.0)(typescript@5.9.3) + '@typescript-eslint/eslint-plugin': 8.59.3(@typescript-eslint/parser@8.59.3(eslint@10.6.0)(typescript@5.9.3))(eslint@10.6.0)(typescript@5.9.3) + '@typescript-eslint/parser': 8.59.3(eslint@10.6.0)(typescript@5.9.3) '@typescript-eslint/typescript-estree': 8.59.3(typescript@5.9.3) - '@typescript-eslint/utils': 8.59.3(eslint@10.4.0)(typescript@5.9.3) - eslint: 10.4.0 + '@typescript-eslint/utils': 8.59.3(eslint@10.6.0)(typescript@5.9.3) + eslint: 10.6.0 typescript: 5.9.3 transitivePeerDependencies: - supports-color typescript@5.9.3: {} - undici-types@7.24.6: {} + undici-types@8.3.0: {} unist-util-stringify-position@4.0.0: dependencies: From da323fc8d327a38199a21987dcbf7e27e3bc34f3 Mon Sep 17 00:00:00 2001 From: Andrey Sitnik Date: Sun, 28 Jun 2026 14:44:07 +0000 Subject: [PATCH 47/89] Revert version update to fix old Node.js on CI --- package.json | 2 +- pnpm-lock.yaml | 11 +++++------ 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index a0f25b959..c9a1ccff4 100644 --- a/package.json +++ b/package.json @@ -104,7 +104,7 @@ "concat-with-sourcemaps": "^1.1.0", "eslint": "^10.6.0", "multiocular": "^0.8.3", - "nanodelay": "^2.0.2", + "nanodelay": "^1.0.8", "nanospy": "^2.0.2", "oxfmt": "^0.56.0", "postcss-parser-tests": "^8.9.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b5b7e1258..409abddb2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -52,8 +52,8 @@ importers: specifier: ^0.8.3 version: 0.8.3 nanodelay: - specifier: ^2.0.2 - version: 2.0.2 + specifier: ^1.0.8 + version: 1.0.8 nanospy: specifier: ^2.0.2 version: 2.0.2 @@ -1384,9 +1384,8 @@ packages: engines: {node: ^22.16.0 || >=24.0.0} hasBin: true - nanodelay@2.0.2: - resolution: {integrity: sha512-6AS5aCSXsjoxq2Jr9CdaAeT60yoYDOTp6po9ziqeOeY6vf6uTEHYSqWql6EFILrM3fEfXgkZ4KqE9L0rTm/wlA==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + nanodelay@1.0.8: + resolution: {integrity: sha512-mfVn7t26m4mVoUuWdUevZccq0saIh5T4Lu3cAzbZ6j03yc4sIDwM3Dof0LS70YwflPZtGJ92BGhNYV862wXRvg==} nanoevents@9.1.0: resolution: {integrity: sha512-Jd0fILWG44a9luj8v5kED4WI+zfkkgwKyRQKItTtlPfEsh7Lznfi1kr8/iZ+XAIss4Qq5GqRB0qtWbaz9ceO/A==} @@ -2843,7 +2842,7 @@ snapshots: - bufferutil - utf-8-validate - nanodelay@2.0.2: {} + nanodelay@1.0.8: {} nanoevents@9.1.0: {} From d4feed645314ee421edf80ee9ebe453cc75c997f Mon Sep 17 00:00:00 2001 From: Mahin Anowar <86069420+MahinAnowar@users.noreply.github.com> Date: Sun, 28 Jun 2026 20:50:07 +0600 Subject: [PATCH 48/89] Don't clone root-less child nodes in container constructor (#2097) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The container constructor cloned every real Node passed in `nodes`, so a freshly created (parent-less) node was adopted as a copy and the caller's original reference never had its `parent` set — later operating on it threw `Cannot read properties of undefined`. The clone was added only to keep the source tree intact when moving nodes between roots, so it's skipped when the node has no parent. Nodes that already belong to another tree are still cloned, preserving the existing behavior. Closes #1987. --- lib/node.js | 5 ++++- test/container.test.ts | 14 ++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/lib/node.js b/lib/node.js index 37f500fba..f249c35ac 100644 --- a/lib/node.js +++ b/lib/node.js @@ -73,7 +73,10 @@ class Node { if (name === 'nodes') { this.nodes = [] for (let node of defaults[name]) { - if (typeof node.clone === 'function') { + // Clone only nodes that already belong to another tree, so passing a + // freshly created (parent-less) node adopts that instance instead of + // a copy and keeps the caller's reference usable. See #1987. + if (typeof node.clone === 'function' && node.parent) { this.append(node.clone()) } else { this.append(node) diff --git a/test/container.test.ts b/test/container.test.ts index 0035aa1cf..27aac7238 100755 --- a/test/container.test.ts +++ b/test/container.test.ts @@ -872,6 +872,20 @@ test('allows to clone nodes', () => { is(root2.toString(), 'a { color: black; z-index: 1 } b {}') }) +test('adopts root-less nodes in constructor instead of cloning them', () => { + let decl = new Declaration({ prop: 'foo', value: 'bar' }) + let atRule = new AtRule({ name: 'foo', nodes: [decl] }) + + // The passed-in instance itself is adopted (its parent is updated), so the + // caller's reference stays usable rather than being silently cloned (#1987). + equal(decl.parent, atRule) + is(atRule.first, decl) + + decl.before(new Declaration({ prop: 'baz', value: 'qux' })) + equal(atRule.nodes.length, 2) + is(atRule.last, decl) +}) + test('container.nodes can be sorted', () => { let root = parse('@b; @c; @a;') let b = root.nodes[0] From 34942ce76c0b0c9ee65b1421017ac71855e722c4 Mon Sep 17 00:00:00 2001 From: Andrey Sitnik Date: Sun, 28 Jun 2026 14:50:44 +0000 Subject: [PATCH 49/89] Fix tests --- test/container.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/container.test.ts b/test/container.test.ts index 27aac7238..1a1e46f1c 100755 --- a/test/container.test.ts +++ b/test/container.test.ts @@ -882,7 +882,7 @@ test('adopts root-less nodes in constructor instead of cloning them', () => { is(atRule.first, decl) decl.before(new Declaration({ prop: 'baz', value: 'qux' })) - equal(atRule.nodes.length, 2) + equal(atRule.nodes!.length, 2) is(atRule.last, decl) }) From 46e451068ee6160b837865b715cf6972f28fabd5 Mon Sep 17 00:00:00 2001 From: mizdra Date: Sun, 28 Jun 2026 23:53:40 +0900 Subject: [PATCH 50/89] Fix `Input#origin()` returning incorrect position (#2036) * Add missing `test.run()` * Fix `Input#origin()` returning incorrect position * Refactor test with source-map-js --- lib/input.js | 8 ++-- test/css-syntax-error.test.ts | 4 +- test/input.test.ts | 88 +++++++++++++++++++++++++++++++++++ test/map.test.ts | 2 +- test/previous-map.test.ts | 8 ++-- 5 files changed, 99 insertions(+), 11 deletions(-) diff --git a/lib/input.js b/lib/input.js index 1dab92836..f4614490d 100644 --- a/lib/input.js +++ b/lib/input.js @@ -206,12 +206,12 @@ class Input { if (!this.map) return false let consumer = this.map.consumer() - let from = consumer.originalPositionFor({ column, line }) + let from = consumer.originalPositionFor({ column: column - 1, line }) if (!from.source) return false let to if (typeof endLine === 'number') { - to = consumer.originalPositionFor({ column: endColumn, line: endLine }) + to = consumer.originalPositionFor({ column: endColumn - 1, line: endLine }) } let fromUrl @@ -226,8 +226,8 @@ class Input { } let result = { - column: from.column, - endColumn: to && to.column, + column: from.column + 1, + endColumn: to && to.column + 1, endLine: to && to.line, line: from.line, url: fromUrl.toString() diff --git a/test/css-syntax-error.test.ts b/test/css-syntax-error.test.ts index 47040beb2..b997ded93 100755 --- a/test/css-syntax-error.test.ts +++ b/test/css-syntax-error.test.ts @@ -294,7 +294,7 @@ test('uses source map', () => { is(error.file, join(__dirname, 'b.css')) is(error.line, 2) - is(error.column, 0) // Is this correct? + is(error.column, 1) is(error.endLine, undefined) is(error.endColumn, undefined) type(error.source, 'undefined') @@ -328,7 +328,7 @@ test('works with path in sources', () => { is(error.file, join(__dirname, 'b.css')) is(error.line, 2) - is(error.column, 0) // Is this correct? + is(error.column, 1) is(error.endLine, undefined) is(error.endColumn, undefined) type(error.source, 'undefined') diff --git a/test/input.test.ts b/test/input.test.ts index 85a5ecb79..f053e965f 100644 --- a/test/input.test.ts +++ b/test/input.test.ts @@ -1,8 +1,15 @@ +import { join } from 'node:path' +import { pathToFileURL } from 'node:url' +import { SourceNode } from 'source-map-js' import { test } from 'uvu' import { equal, is } from 'uvu/assert' import { Input } from '../lib/postcss.js' +function urlOf(file: string): string { + return pathToFileURL(join(__dirname, file)).toString() +} + test('fromLineAndColumn() returns offset', () => { let input = new Input('a {\n}') is(input.fromLineAndColumn(1, 1), 0) @@ -18,3 +25,84 @@ test('fromOffset() returns line and column', () => { equal(input.fromOffset(4), { col: 1, line: 2 }) equal(input.fromOffset(5), { col: 2, line: 2 }) }) + +test('origin() returns false without source map', () => { + let input = new Input('a {\n}') + is(input.origin(1, 1), false) +}) + +test('origin() returns source position with source map', () => { + // @ts-expect-error source-map-js accepts null, but it's not in the types (ref: https://github.com/7rulnik/source-map-js/blob/428d49f6b1e1614f082b7706fa879a3d9c64f728/test/test-source-node.js#L20) + let node = new SourceNode(null, null, null, [ + new SourceNode(1, 0, "a.css", "a"), + new SourceNode(1, 1, "a.css", " "), + new SourceNode(1, 2, "a.css", "{"), + new SourceNode(1, 3, "a.css", "}"), + '\n', + new SourceNode(1, 0, "b.css", "b"), + new SourceNode(1, 1, "b.css", " "), + new SourceNode(1, 2, "b.css", "{"), + new SourceNode(1, 3, "b.css", "}"), + new SourceNode(1, 4, "b.css", "\n"), + new SourceNode(2, 0, "b.css", "c"), + new SourceNode(2, 1, "b.css", " "), + new SourceNode(2, 2, "b.css", "{"), + new SourceNode(2, 3, "b.css", "}"), + ]); + let from = join(__dirname, 'all.css') + let codeWithSourceMap = node.toStringWithSourceMap({ file: from }) + let input = new Input( + codeWithSourceMap.code, + { from, map: { prev: codeWithSourceMap.map } } + ) + equal(input.origin(1, 1), { + column: 1, + endColumn: undefined, + endLine: undefined, + file: join(__dirname, 'a.css'), + line: 1, + url: urlOf('a.css') + }) + equal(input.origin(1, 4), { + column: 4, + endColumn: undefined, + endLine: undefined, + file: join(__dirname, 'a.css'), + line: 1, + url: urlOf('a.css') + }) + equal(input.origin(2, 1), { + column: 1, + endColumn: undefined, + endLine: undefined, + file: join(__dirname, 'b.css'), + line: 1, + url: urlOf('b.css') + }) + equal(input.origin(2, 4), { + column: 4, + endColumn: undefined, + endLine: undefined, + file: join(__dirname, 'b.css'), + line: 1, + url: urlOf('b.css') + }) + equal(input.origin(3, 1), { + column: 1, + endColumn: undefined, + endLine: undefined, + file: join(__dirname, 'b.css'), + line: 2, + url: urlOf('b.css') + }) + equal(input.origin(2, 1, 2, 4), { + column: 1, + endColumn: 4, + endLine: 1, + file: join(__dirname, 'b.css'), + line: 1, + url: urlOf('b.css') + }) +}) + +test.run() diff --git a/test/map.test.ts b/test/map.test.ts index b2125e071..ef55b5008 100644 --- a/test/map.test.ts +++ b/test/map.test.ts @@ -760,7 +760,7 @@ test('supports previous inline map with empty processor', () => { to: '/c.css' }) let root3 = postcss.parse(result2.css, { from: '/c.css' }) - match((root3.source?.input.origin(1, 0) as any).file, 'a.css') + match((root3.source?.input.origin(1, 1) as any).file, 'a.css') }) test('absolute sourcemaps have source contents', () => { diff --git a/test/previous-map.test.ts b/test/previous-map.test.ts index efda7ff92..c50f80e34 100755 --- a/test/previous-map.test.ts +++ b/test/previous-map.test.ts @@ -284,9 +284,9 @@ test('uses source map path as a root', () => { '* div {\n color: red;\n }\n/*# sourceMappingURL=maps/a.map */', { from } ) - equal(root.source?.input.origin(1, 3, 1, 5), { - column: 4, - endColumn: 7, + equal(root.source?.input.origin(1, 4, 1, 6), { + column: 5, + endColumn: 8, endLine: 3, file: join(dir, '..', 'test.scss'), line: 3, @@ -359,7 +359,7 @@ test('works with index map', () => { } } }) - is((root as any).source.input.origin(1, 1).file, join(__dirname, 'b.css')) + is((root as any).source.input.origin(1, 2).file, join(__dirname, 'b.css')) }) test.run() From 818bdd6043359af773ccc3ca8663053d61a707c8 Mon Sep 17 00:00:00 2001 From: Andrey Sitnik Date: Sun, 28 Jun 2026 14:54:32 +0000 Subject: [PATCH 51/89] Update formatting --- lib/input.js | 5 ++++- test/input.test.ts | 38 +++++++++++++++++++------------------- test/stringifier.test.js | 29 ++++++++++++++++------------- 3 files changed, 39 insertions(+), 33 deletions(-) diff --git a/lib/input.js b/lib/input.js index f4614490d..88a9c80c6 100644 --- a/lib/input.js +++ b/lib/input.js @@ -211,7 +211,10 @@ class Input { let to if (typeof endLine === 'number') { - to = consumer.originalPositionFor({ column: endColumn - 1, line: endLine }) + to = consumer.originalPositionFor({ + column: endColumn - 1, + line: endLine + }) } let fromUrl diff --git a/test/input.test.ts b/test/input.test.ts index f053e965f..2a892063f 100644 --- a/test/input.test.ts +++ b/test/input.test.ts @@ -32,29 +32,29 @@ test('origin() returns false without source map', () => { }) test('origin() returns source position with source map', () => { - // @ts-expect-error source-map-js accepts null, but it's not in the types (ref: https://github.com/7rulnik/source-map-js/blob/428d49f6b1e1614f082b7706fa879a3d9c64f728/test/test-source-node.js#L20) + // @ts-expect-error source-map-js accepts null, but it's not in the types let node = new SourceNode(null, null, null, [ - new SourceNode(1, 0, "a.css", "a"), - new SourceNode(1, 1, "a.css", " "), - new SourceNode(1, 2, "a.css", "{"), - new SourceNode(1, 3, "a.css", "}"), + new SourceNode(1, 0, 'a.css', 'a'), + new SourceNode(1, 1, 'a.css', ' '), + new SourceNode(1, 2, 'a.css', '{'), + new SourceNode(1, 3, 'a.css', '}'), '\n', - new SourceNode(1, 0, "b.css", "b"), - new SourceNode(1, 1, "b.css", " "), - new SourceNode(1, 2, "b.css", "{"), - new SourceNode(1, 3, "b.css", "}"), - new SourceNode(1, 4, "b.css", "\n"), - new SourceNode(2, 0, "b.css", "c"), - new SourceNode(2, 1, "b.css", " "), - new SourceNode(2, 2, "b.css", "{"), - new SourceNode(2, 3, "b.css", "}"), - ]); + new SourceNode(1, 0, 'b.css', 'b'), + new SourceNode(1, 1, 'b.css', ' '), + new SourceNode(1, 2, 'b.css', '{'), + new SourceNode(1, 3, 'b.css', '}'), + new SourceNode(1, 4, 'b.css', '\n'), + new SourceNode(2, 0, 'b.css', 'c'), + new SourceNode(2, 1, 'b.css', ' '), + new SourceNode(2, 2, 'b.css', '{'), + new SourceNode(2, 3, 'b.css', '}') + ]) let from = join(__dirname, 'all.css') let codeWithSourceMap = node.toStringWithSourceMap({ file: from }) - let input = new Input( - codeWithSourceMap.code, - { from, map: { prev: codeWithSourceMap.map } } - ) + let input = new Input(codeWithSourceMap.code, { + from, + map: { prev: codeWithSourceMap.map } + }) equal(input.origin(1, 1), { column: 1, endColumn: undefined, diff --git a/test/stringifier.test.js b/test/stringifier.test.js index 4414cd46e..411effb20 100755 --- a/test/stringifier.test.js +++ b/test/stringifier.test.js @@ -340,19 +340,22 @@ test('always calls raw to retrieve raws', () => { customStringifier.stringify(node) } let result = root.toString(stringify) - is(result, [ - '', - 'RAW(rule, before, undefined)', - 'a', - 'RAW(rule, between, beforeOpen)', - '{', - 'RAW(decl, before, undefined)', - 'color', - 'RAW(decl, between, colon)', - 'black;', - 'RAW(rule, after, undefined)', - '}' - ].join('\n')) + is( + result, + [ + '', + 'RAW(rule, before, undefined)', + 'a', + 'RAW(rule, between, beforeOpen)', + '{', + 'RAW(decl, before, undefined)', + 'color', + 'RAW(decl, between, colon)', + 'black;', + 'RAW(rule, after, undefined)', + '}' + ].join('\n') + ) }) test.run() From 92ccc93ff15bd193491d67fad9763e62d489dfad Mon Sep 17 00:00:00 2001 From: Andrey Sitnik Date: Sun, 28 Jun 2026 14:56:11 +0000 Subject: [PATCH 52/89] Release 8.5.16 version --- CHANGELOG.md | 8 ++++++++ lib/processor.js | 2 +- package.json | 2 +- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a75a80d61..314b65ac2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,14 @@ This project adheres to [Semantic Versioning](https://semver.org/). +## 8.5.16 + +- Fixed `Input#origin()` position (by @mizdra). +- Fixed `raws` after rehydrating a JSON AST (by @sarathfrancis90). +- Fixed putting parent-less node in `nodes` of new node (by @MahinAnowar). +- Fixed computing `offset` in `positionBy()` (by @greymoth-jp). +- Fixed `rangeBy()` on `index: 0` (by @sarathfrancis90). + ## 8.5.15 - Fixed declaration parsing performance (by @homanp). diff --git a/lib/processor.js b/lib/processor.js index 60d17644b..7d0837872 100644 --- a/lib/processor.js +++ b/lib/processor.js @@ -7,7 +7,7 @@ let Root = require('./root') class Processor { constructor(plugins = []) { - this.version = '8.5.15' + this.version = '8.5.16' this.plugins = this.normalize(plugins) } diff --git a/package.json b/package.json index c9a1ccff4..885a5975b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "postcss", - "version": "8.5.15", + "version": "8.5.16", "description": "Tool for transforming styles with JS plugins", "keywords": [ "css", From 3298727755a676beced3cbe67015d42e70396e4f Mon Sep 17 00:00:00 2001 From: Alexander Kireyev Date: Wed, 1 Jul 2026 04:14:26 +0700 Subject: [PATCH 53/89] Fix `Input#origin()` mixing null and undefined for unmapped end position (#2106) When the requested end position has no mapping in the source map, originalPositionFor() returns an object with line/column set to null rather than omitting them. endLine picked that null up correctly, but endColumn was computed as `to && to.column + 1`, which due to operator precedence is `to && (to.column + 1)`, turning null into 1. So callers could get back { endColumn: 1, endLine: null }, which doesn't match how every other unmapped case in this function behaves (undefined for both). Looks like the +1 fix in #2036 covered the mapped case but not this one. Guard `to` the same way `from` already is, so an unmapped end position just stays undefined. --- lib/input.js | 8 +++++++- test/input.test.ts | 28 ++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/lib/input.js b/lib/input.js index 88a9c80c6..defe395fc 100644 --- a/lib/input.js +++ b/lib/input.js @@ -211,10 +211,16 @@ class Input { let to if (typeof endLine === 'number') { - to = consumer.originalPositionFor({ + let toPosition = consumer.originalPositionFor({ column: endColumn - 1, line: endLine }) + // The source map may not have a mapping that covers the end position + // (`originalPositionFor()` then returns `null` for `line`/`column` + // instead of omitting them). Treat that the same as not requesting + // an end position at all, so `endLine`/`endColumn` stay a consistent + // `undefined` pair instead of a mix of `null` and a bogus number. + if (toPosition.source) to = toPosition } let fromUrl diff --git a/test/input.test.ts b/test/input.test.ts index 2a892063f..43d920f4e 100644 --- a/test/input.test.ts +++ b/test/input.test.ts @@ -105,4 +105,32 @@ test('origin() returns source position with source map', () => { }) }) +test('origin() does not mix undefined and null when end position is unmapped', () => { + // @ts-expect-error source-map-js accepts null, but it's not in the types + let node = new SourceNode(null, null, null, [ + new SourceNode(1, 0, 'a.css', 'a'), + new SourceNode(1, 1, 'a.css', ' '), + new SourceNode(1, 2, 'a.css', '{'), + new SourceNode(1, 3, 'a.css', '}') + ]) + let from = join(__dirname, 'all.css') + let codeWithSourceMap = node.toStringWithSourceMap({ file: from }) + let input = new Input(codeWithSourceMap.code, { + from, + map: { prev: codeWithSourceMap.map } + }) + + // The start position (1, 1) is mapped, but the requested end position + // (99, 1) is far beyond anything the source map covers, so + // `originalPositionFor()` cannot resolve it. + equal(input.origin(1, 1, 99, 1), { + column: 1, + endColumn: undefined, + endLine: undefined, + file: join(__dirname, 'a.css'), + line: 1, + url: urlOf('a.css') + }) +}) + test.run() From 2d44be0923873ea6af2c3a1a191148e2ce9d733f Mon Sep 17 00:00:00 2001 From: lenoxfernando <176452290+lenoxfernando@users.noreply.github.com> Date: Fri, 3 Jul 2026 03:00:46 -0300 Subject: [PATCH 54/89] docs: fix invalid JS in writing-a-plugin examples (#2107) Co-authored-by: Lenox Fernando --- docs/writing-a-plugin.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/writing-a-plugin.md b/docs/writing-a-plugin.md index 589dddb95..f500f73f5 100644 --- a/docs/writing-a-plugin.md +++ b/docs/writing-a-plugin.md @@ -157,7 +157,7 @@ you can use quick search: Declaration: { color: decl => { // All `color` declarations - } + }, '*': decl => { // All declarations } @@ -316,7 +316,7 @@ Second argument also have `result` object to add warnings: ```js Declaration: { - bad: (decl, { result }) { + bad: (decl, { result }) => { decl.warn(result, 'Deprecated property bad') } } @@ -328,7 +328,7 @@ when this file changes: ```js AtRule: { - import: (atRule, { result }) { + import: (atRule, { result }) => { const importedFile = parseImport(atRule) result.messages.push({ type: 'dependency', From 1bf9076867e70f5a01776aebebee5aacbf9771ce Mon Sep 17 00:00:00 2001 From: Andrey Sitnik Date: Tue, 7 Jul 2026 22:10:05 +0000 Subject: [PATCH 55/89] Remove old sponsors --- README.md | 9 --------- 1 file changed, 9 deletions(-) diff --git a/README.md b/README.md index 772769eeb..55c1de520 100644 --- a/README.md +++ b/README.md @@ -42,15 +42,6 @@ PostCSS needs your support. We are accepting donations Atlas Cloud is a full-modal AI inference platform that gives developers a single AI API to access video generation, image generation, and LLM APIs. Instead of managing multiple vendor integrations, you connect once and get unified access to 300+ curated models across all modalities. Check out Atlas Cloud's new coding plan promotion for more budget-friendly API access. -


- - - Sponsored by Tailwind CSS       - - Sponsored by ThemeIsle - ## Plugins From 93440abcca92793b31c5d1fdf5f2da7b58b27599 Mon Sep 17 00:00:00 2001 From: Masafumi Koba <473530+ybiquitous@users.noreply.github.com> Date: Thu, 9 Jul 2026 00:00:59 +0900 Subject: [PATCH 56/89] Fix non-closed `
` in README (#2110) Fixes the problem that all elements after `
` are centered in `README.md`. --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 55c1de520..9cb6aba07 100644 --- a/README.md +++ b/README.md @@ -38,6 +38,7 @@ PostCSS needs your support. We are accepting donations alt="Sponsored by Atlas Cloud" width="300" height="48"> +
Atlas Cloud is a full-modal AI inference platform that gives developers a single AI API to access video generation, image generation, and LLM APIs. Instead of managing multiple vendor integrations, you connect once and get unified access to 300+ curated models across all modalities. From 2131909351161cd2c5fc2be58b14919a873ea824 Mon Sep 17 00:00:00 2001 From: Andrey Sitnik Date: Sat, 11 Jul 2026 16:42:10 +0000 Subject: [PATCH 57/89] Update dependencies --- package.json | 6 +- pnpm-lock.yaml | 188 ++++++++++++++++++++++++------------------------- 2 files changed, 97 insertions(+), 97 deletions(-) diff --git a/package.json b/package.json index 885a5975b..5014fb846 100644 --- a/package.json +++ b/package.json @@ -97,8 +97,8 @@ "@logux/eslint-config": "^57.1.0", "@logux/oxc-configs": "^0.4.0", "@size-limit/preset-small-lib": "^12.1.0", - "@types/node": "^26.0.1", - "actions-up": "^1.14.3", + "@types/node": "^26.1.1", + "actions-up": "^1.16.0", "c8": "^11.0.0", "check-dts": "^0.9.0", "concat-with-sourcemaps": "^1.1.0", @@ -106,7 +106,7 @@ "multiocular": "^0.8.3", "nanodelay": "^1.0.8", "nanospy": "^2.0.2", - "oxfmt": "^0.56.0", + "oxfmt": "^0.58.0", "postcss-parser-tests": "^8.9.0", "simple-git-hooks": "^2.13.1", "size-limit": "^12.1.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 409abddb2..5d8bf9f07 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -31,11 +31,11 @@ importers: specifier: ^12.1.0 version: 12.1.0(size-limit@12.1.0) '@types/node': - specifier: ^26.0.1 - version: 26.0.1 + specifier: ^26.1.1 + version: 26.1.1 actions-up: - specifier: ^1.14.3 - version: 1.14.3 + specifier: ^1.16.0 + version: 1.16.0 c8: specifier: ^11.0.0 version: 11.0.0 @@ -58,8 +58,8 @@ importers: specifier: ^2.0.2 version: 2.0.2 oxfmt: - specifier: ^0.56.0 - version: 0.56.0 + specifier: ^0.58.0 + version: 0.58.0 postcss-parser-tests: specifier: ^8.9.0 version: 8.9.0 @@ -74,7 +74,7 @@ importers: version: 6.0.1 ts-node: specifier: ^10.9.2 - version: 10.9.2(@types/node@26.0.1)(typescript@5.9.3) + version: 10.9.2(@types/node@26.1.1)(typescript@5.9.3) typescript: specifier: ^5.9.3 version: 5.9.3 @@ -381,124 +381,124 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@oxfmt/binding-android-arm-eabi@0.56.0': - resolution: {integrity: sha512-CSCxi7ovYojgfdPOdUb9T508HKeAdDIKeRGg7x8IZwVJrWz9gVgX7MbUnFqtQAE4QvoNo07mj2JlwnOzJw4qqA==} + '@oxfmt/binding-android-arm-eabi@0.58.0': + resolution: {integrity: sha512-Uz62sHduGGPftXtILGyxdSW4PX82rUg+rfdNqhsgxe881g4rIoXlIqmZQ6HVKcF4f+F8qMhdD03Bx5u7gmeTdg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [android] - '@oxfmt/binding-android-arm64@0.56.0': - resolution: {integrity: sha512-HYJFnd+PkDwf6S9ZPGzXXtjNqvRWFnnhdbWaouh4mi/SxU8wmDuzlMn3xo/wDTGnr4Q1VA7ZzOaE/D4biW0W6A==} + '@oxfmt/binding-android-arm64@0.58.0': + resolution: {integrity: sha512-rD0lRaJp1b+9vw6X4A2dJWKukd6X8yxiicN4JxXcXayolmUypRZxk+lKR+fVOu5q/iYc0fh5fR4bgmfOfVlbaA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@oxfmt/binding-darwin-arm64@0.56.0': - resolution: {integrity: sha512-sftR/bEOr+t1gs+evwsHi/Xbq2FAPA2uU3VMr8n6ZU9PoK/IMSfnfu7+OEe/uy1+knhrFl4Wvy7Vkm3uo9mJ7g==} + '@oxfmt/binding-darwin-arm64@0.58.0': + resolution: {integrity: sha512-uzbPPk7O6M+w2K65vcQ1woga3wgP8zghjL1KOG5b6qJ8dvYHZJ1VShaslg2KOK6yQIwCQtcMCXqLBM6sqXUNTg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@oxfmt/binding-darwin-x64@0.56.0': - resolution: {integrity: sha512-z66SdjLqa3MUPKvTp3Mbb5nSjKSbnYxJGeB+Wx987s8T5hPcIRiBMfnJ6zcPgYtQn3x5xjvdzNVkXrSeYH6ZFg==} + '@oxfmt/binding-darwin-x64@0.58.0': + resolution: {integrity: sha512-L0nKYDxU32oxeQqJj21W9SlIMnf81VZEhyah6iDvFhf5q0oynq498Fopth7blErUJVBpVtxQ98RMCfMPqpJX6w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@oxfmt/binding-freebsd-x64@0.56.0': - resolution: {integrity: sha512-t2tkrV1vtZyaItSQ71dTi2ZVKZEI39b/LqLT12V5KMfIeXK6N32TUC1jhOXKVQmhECq9j2ZXMQV3JeT1kh9Vmg==} + '@oxfmt/binding-freebsd-x64@0.58.0': + resolution: {integrity: sha512-woNwfD58dC5PGS9LSLSD5JYfo/EFK5iG9vhDWkcCg3q78ag7KC8bpDqgvPHrMoXpx83OLXxoSOhu6z8FsVTHlg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@oxfmt/binding-linux-arm-gnueabihf@0.56.0': - resolution: {integrity: sha512-+gCy+Tp3RHeXQ9y/QrS76lXIpZkbziTyp6hIgjB2MssCwfMph3vG/GEfkhO34Rai1vhYIaUkvv8UT1BcDorJPw==} + '@oxfmt/binding-linux-arm-gnueabihf@0.58.0': + resolution: {integrity: sha512-Sqs8nMLxuQpY21NKJ1u4stPDmO5hskBCNNh2E3AdCfI1QqWtf4m+Qn4mGEIUO4KGmuq3SWc/SZ80uy5IiwTCDw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxfmt/binding-linux-arm-musleabihf@0.56.0': - resolution: {integrity: sha512-0kKkVvQ2I+FJ2sxQyUu1zJ0yWP5kcWse/yVFnGQSFCXMwSSkfEaUGu0dW774O7nyy3jrcBGap7OSc8dZmU/CdA==} + '@oxfmt/binding-linux-arm-musleabihf@0.58.0': + resolution: {integrity: sha512-Vd4exzBI5B5hB9m22JiTQzIL23WvHo/Pe+sNXPNeBLXSP9swCBPKCEBRwKpmpQzYhlgYaCgfPcGXPKAJBRIiZQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxfmt/binding-linux-arm64-gnu@0.56.0': - resolution: {integrity: sha512-npkA2siMbyWRh+wEhi1aTAx4RirukGcGNt8V4Ch86pG+xU9aurqS1MZOnKYMu03ISwat3rB6zkQx51SsB9obNw==} + '@oxfmt/binding-linux-arm64-gnu@0.58.0': + resolution: {integrity: sha512-bUWi5mHV+4Vi56RLHE1h6q/HHfwAIT3XoB9vJAVeRzfu5NriXM8y6eeJu0vlKa0C9kq2rq1sOWRClhdLHPocrg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-arm64-musl@0.56.0': - resolution: {integrity: sha512-UekqOjGkV4/MkqreCV9SPIB2jlR3/HbXrmhV1rVXJZ9wfDXMyCMriLtq3tHqLY4PkbVWNtfcm1kMojJ26KLSJw==} + '@oxfmt/binding-linux-arm64-musl@0.58.0': + resolution: {integrity: sha512-2ZHxemzgHcjtktAuVUwSoyXmGo/t+aF5tS1ciPpPei4rhSyrz3JOqDosXXrmhN/yLUSzJjtuW7ToTWqfQpCj2w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@oxfmt/binding-linux-ppc64-gnu@0.56.0': - resolution: {integrity: sha512-XSzveSpeZMD5XJpew5lRFVtNnT04xd3rJxENXmk7wkZzN9oWzv2aFJyoNDhOtoz69BYaS/fg4SYl+CfEZRpB0Q==} + '@oxfmt/binding-linux-ppc64-gnu@0.58.0': + resolution: {integrity: sha512-AwKkVwjVmFQ3bcO7j0McGYAqCKH2a326fswfofng/E8VewCT/raeeGQr4huVhY704deK8AWASSTlxzMj0eZc6Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-riscv64-gnu@0.56.0': - resolution: {integrity: sha512-EkQ0nJa7k7HDDIVuPF7WY+k4k+bzdclLYtyIXNt7/OqVghfNiMym6YGppFBgx1XRIHW6QylxBz5OogumPjPJbQ==} + '@oxfmt/binding-linux-riscv64-gnu@0.58.0': + resolution: {integrity: sha512-xsRpTxfUnJF8D3AUKko/qyWdjw4GZVHlCVFuGlzSCTeewLmykKINW8em1+wx+axsDVtJJcMtvsiaXggXxrlHgw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-riscv64-musl@0.56.0': - resolution: {integrity: sha512-dyjAGW8jKRge0ik6U/dgvQG0nVpA3iBlRskQTz5qJLvQWIrySxX5jpqzPetLBNIIZ231KA82fDdi1nLTk8ENCw==} + '@oxfmt/binding-linux-riscv64-musl@0.58.0': + resolution: {integrity: sha512-Z4AYOTcy7nYEIiXwD62PlerimyYRcfJOgUbQAEBjXz098kxKuERBlRntofGy69HHhe9E0TLVNMl1yspVNu+efw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [musl] - '@oxfmt/binding-linux-s390x-gnu@0.56.0': - resolution: {integrity: sha512-60ZGH3LtfqlW8X6vcLdSFY4lvCQYINurttYBKaALnHCDVAUCYJ1LsUgS6p1XOzVlzEDx3yNUZvDF1Lvt59zoZw==} + '@oxfmt/binding-linux-s390x-gnu@0.58.0': + resolution: {integrity: sha512-A3nhhtZPC/TKVWOPj9q/H3p2znJDCcHWYlJBhWL8hGq/bFmBaNBHC8Np6E581yVq1w9Mi3rMDNzDalWvtUfJtQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-x64-gnu@0.56.0': - resolution: {integrity: sha512-u1suj1tgJHK4ZqB7buCtdbNef2n8+d0lXTPJwLHNmtyK6p+DTpsaoDvmqhQrA56fgKYv4LuRxNtL8YooebKOew==} + '@oxfmt/binding-linux-x64-gnu@0.58.0': + resolution: {integrity: sha512-2g+tVkgwqphw8R4hgo+kF4oz8+P5RwVOtr9+irsC7uwEp0e9j7Crw8kDGKL20uYlLPD7g02DqA61mC/UNYx98A==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-x64-musl@0.56.0': - resolution: {integrity: sha512-aYGLvlQHt80y+qKEtfJY/Nm27G0125Lv+qyh9SJ4Cjc6lXnXjD+ndfhqQnbV24POpMi7rNRi0jvx/0d70FRpCQ==} + '@oxfmt/binding-linux-x64-musl@0.58.0': + resolution: {integrity: sha512-rc15P6AbyyB7426aN8AakLd02Trb3a6ML/mmfAQeVHJEfVofWLcWIrBdy6zDEY+DIaL/s8E4GGPboVw+oP3+EA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@oxfmt/binding-openharmony-arm64@0.56.0': - resolution: {integrity: sha512-H/re/gO+7ysVc+kywHNuzY3C33EN9sQcZhg0kp1ZwOZl7y998ZE5mhnBiuGR/nYI0pqLL5xQfrHVUOJ/cIJsCA==} + '@oxfmt/binding-openharmony-arm64@0.58.0': + resolution: {integrity: sha512-ZWoTM27/HYPOh9iq86DAbhPu9nXb8qKvvGU/h8OfliyVUFAMMNTLDkGsWDKKnDqIkqvZ9+dXlgUOsH1LYO3O7g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@oxfmt/binding-win32-arm64-msvc@0.56.0': - resolution: {integrity: sha512-6qLNXfXmtAs8jXDvYMkxk6Wec5SUJoew+ZX1uOZmqaR7ks0EJFbAohuOCELDyJMWyVlxotVG8Xf8m74Bfq0O2w==} + '@oxfmt/binding-win32-arm64-msvc@0.58.0': + resolution: {integrity: sha512-LHZnqFXe2dEfkRI4XdZS/57nEOT/I4UCRX5IyM9v4GYW9XwQCjGe1IUK59SuKw3POwvcgWQ4pme2cYXmNqTNPg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@oxfmt/binding-win32-ia32-msvc@0.56.0': - resolution: {integrity: sha512-UXEXuKphAe15bsob4AswNMArCw38XSmUIs3wk1s6e6MX9OWGW/IRWU95s1hZDiVg09STy1jHgyN2qkqbu1FT0w==} + '@oxfmt/binding-win32-ia32-msvc@0.58.0': + resolution: {integrity: sha512-mZKpg20TpheCJym1rarcZCUJeW1sSruw8zAAaCYWvuVfwIUDN1CXdrPU/JgCWReXTCTrEfCB8Wyo3hh9jSZ2EA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ia32] os: [win32] - '@oxfmt/binding-win32-x64-msvc@0.56.0': - resolution: {integrity: sha512-HPyNDjky+NIOuaMvHZflR+kst3YWdUOH2JUQYkf99grqZ5mEBTQM6h9iGy501Z8Xt5xMScrwHOuVCOlqDrktRw==} + '@oxfmt/binding-win32-x64-msvc@0.58.0': + resolution: {integrity: sha512-N/wUU4N5PZ2orBtI+Ko7MnMfYLfE7K91UrGMY/c/pYyHR3lA9kwst1XugkZx+92YcRh/Eo+iv2eTESSWXfiZPA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] @@ -706,8 +706,8 @@ packages: '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - '@types/node@26.0.1': - resolution: {integrity: sha512-fc3KiUoBt6kie0N9bIW3E47vZsuaMf0PM2AaUpLCLT0s/LvX1nxAim6Fc049cNxODPpGm6qRAuUOB86SkRuPQw==} + '@types/node@26.1.1': + resolution: {integrity: sha512-nxAkRSVkN1Y0JC1W8ky/fTfkGsMmcrRsbx+3XoZE+rMOX71kLYTV7fLXpqud1GpbpP5TuffXFqfX7fH2GgZREw==} '@types/trusted-types@2.0.7': resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} @@ -899,8 +899,8 @@ packages: engines: {node: '>=0.4.0'} hasBin: true - actions-up@1.14.3: - resolution: {integrity: sha512-N8jvV3BCwlezGe03MkwujHww/5n5yd1BMDWUOka/MLH1kcNwGgdFfUjhTKprN6TvbgziKvTeUDpfevzEKFDDLA==} + actions-up@1.16.0: + resolution: {integrity: sha512-i/2cDk8Z5YUatx1atmxmZx5jCe0z6nwpDvBiqf4FB7cTuKXnEvpwLbwDGlvKkwA7n+SOHxlosGgOhBJXtHW3IA==} engines: {node: ^18.3.0 || >=20.0.0} hasBin: true @@ -1432,8 +1432,8 @@ packages: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} - oxfmt@0.56.0: - resolution: {integrity: sha512-9Dv0wV3zKiyvhjD7bRKaInKmHQ1sPx3RGOjQkGFJbbdQ16576yf8qhMSO9Q9cvHcs+1NpBsRTkuDDYFFPTJ6gw==} + oxfmt@0.58.0: + resolution: {integrity: sha512-8feG/7NVEHDVwc1OUpP6Pks+TnaDFUw2jLLFIMi5bcmmwxAX2wBQvjSzj62RRTYBf2Op1Wt8xbkmagmPTR5ETg==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -1991,61 +1991,61 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.20.1 - '@oxfmt/binding-android-arm-eabi@0.56.0': + '@oxfmt/binding-android-arm-eabi@0.58.0': optional: true - '@oxfmt/binding-android-arm64@0.56.0': + '@oxfmt/binding-android-arm64@0.58.0': optional: true - '@oxfmt/binding-darwin-arm64@0.56.0': + '@oxfmt/binding-darwin-arm64@0.58.0': optional: true - '@oxfmt/binding-darwin-x64@0.56.0': + '@oxfmt/binding-darwin-x64@0.58.0': optional: true - '@oxfmt/binding-freebsd-x64@0.56.0': + '@oxfmt/binding-freebsd-x64@0.58.0': optional: true - '@oxfmt/binding-linux-arm-gnueabihf@0.56.0': + '@oxfmt/binding-linux-arm-gnueabihf@0.58.0': optional: true - '@oxfmt/binding-linux-arm-musleabihf@0.56.0': + '@oxfmt/binding-linux-arm-musleabihf@0.58.0': optional: true - '@oxfmt/binding-linux-arm64-gnu@0.56.0': + '@oxfmt/binding-linux-arm64-gnu@0.58.0': optional: true - '@oxfmt/binding-linux-arm64-musl@0.56.0': + '@oxfmt/binding-linux-arm64-musl@0.58.0': optional: true - '@oxfmt/binding-linux-ppc64-gnu@0.56.0': + '@oxfmt/binding-linux-ppc64-gnu@0.58.0': optional: true - '@oxfmt/binding-linux-riscv64-gnu@0.56.0': + '@oxfmt/binding-linux-riscv64-gnu@0.58.0': optional: true - '@oxfmt/binding-linux-riscv64-musl@0.56.0': + '@oxfmt/binding-linux-riscv64-musl@0.58.0': optional: true - '@oxfmt/binding-linux-s390x-gnu@0.56.0': + '@oxfmt/binding-linux-s390x-gnu@0.58.0': optional: true - '@oxfmt/binding-linux-x64-gnu@0.56.0': + '@oxfmt/binding-linux-x64-gnu@0.58.0': optional: true - '@oxfmt/binding-linux-x64-musl@0.56.0': + '@oxfmt/binding-linux-x64-musl@0.58.0': optional: true - '@oxfmt/binding-openharmony-arm64@0.56.0': + '@oxfmt/binding-openharmony-arm64@0.58.0': optional: true - '@oxfmt/binding-win32-arm64-msvc@0.56.0': + '@oxfmt/binding-win32-arm64-msvc@0.58.0': optional: true - '@oxfmt/binding-win32-ia32-msvc@0.56.0': + '@oxfmt/binding-win32-ia32-msvc@0.58.0': optional: true - '@oxfmt/binding-win32-x64-msvc@0.56.0': + '@oxfmt/binding-win32-x64-msvc@0.58.0': optional: true '@oxlint-tsgolint/darwin-arm64@0.18.1': @@ -2166,7 +2166,7 @@ snapshots: '@types/json-schema@7.0.15': {} - '@types/node@26.0.1': + '@types/node@26.1.1': dependencies: undici-types: 8.3.0 @@ -2343,7 +2343,7 @@ snapshots: acorn@8.17.0: {} - actions-up@1.14.3: + actions-up@1.16.0: dependencies: enquirer: 2.4.1 nanospinner: 1.2.2 @@ -2877,29 +2877,29 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.5 - oxfmt@0.56.0: + oxfmt@0.58.0: dependencies: tinypool: 2.1.0 optionalDependencies: - '@oxfmt/binding-android-arm-eabi': 0.56.0 - '@oxfmt/binding-android-arm64': 0.56.0 - '@oxfmt/binding-darwin-arm64': 0.56.0 - '@oxfmt/binding-darwin-x64': 0.56.0 - '@oxfmt/binding-freebsd-x64': 0.56.0 - '@oxfmt/binding-linux-arm-gnueabihf': 0.56.0 - '@oxfmt/binding-linux-arm-musleabihf': 0.56.0 - '@oxfmt/binding-linux-arm64-gnu': 0.56.0 - '@oxfmt/binding-linux-arm64-musl': 0.56.0 - '@oxfmt/binding-linux-ppc64-gnu': 0.56.0 - '@oxfmt/binding-linux-riscv64-gnu': 0.56.0 - '@oxfmt/binding-linux-riscv64-musl': 0.56.0 - '@oxfmt/binding-linux-s390x-gnu': 0.56.0 - '@oxfmt/binding-linux-x64-gnu': 0.56.0 - '@oxfmt/binding-linux-x64-musl': 0.56.0 - '@oxfmt/binding-openharmony-arm64': 0.56.0 - '@oxfmt/binding-win32-arm64-msvc': 0.56.0 - '@oxfmt/binding-win32-ia32-msvc': 0.56.0 - '@oxfmt/binding-win32-x64-msvc': 0.56.0 + '@oxfmt/binding-android-arm-eabi': 0.58.0 + '@oxfmt/binding-android-arm64': 0.58.0 + '@oxfmt/binding-darwin-arm64': 0.58.0 + '@oxfmt/binding-darwin-x64': 0.58.0 + '@oxfmt/binding-freebsd-x64': 0.58.0 + '@oxfmt/binding-linux-arm-gnueabihf': 0.58.0 + '@oxfmt/binding-linux-arm-musleabihf': 0.58.0 + '@oxfmt/binding-linux-arm64-gnu': 0.58.0 + '@oxfmt/binding-linux-arm64-musl': 0.58.0 + '@oxfmt/binding-linux-ppc64-gnu': 0.58.0 + '@oxfmt/binding-linux-riscv64-gnu': 0.58.0 + '@oxfmt/binding-linux-riscv64-musl': 0.58.0 + '@oxfmt/binding-linux-s390x-gnu': 0.58.0 + '@oxfmt/binding-linux-x64-gnu': 0.58.0 + '@oxfmt/binding-linux-x64-musl': 0.58.0 + '@oxfmt/binding-openharmony-arm64': 0.58.0 + '@oxfmt/binding-win32-arm64-msvc': 0.58.0 + '@oxfmt/binding-win32-ia32-msvc': 0.58.0 + '@oxfmt/binding-win32-x64-msvc': 0.58.0 oxlint-tsgolint@0.18.1: optionalDependencies: @@ -3063,14 +3063,14 @@ snapshots: picomatch: 4.0.4 typescript: 5.9.3 - ts-node@10.9.2(@types/node@26.0.1)(typescript@5.9.3): + ts-node@10.9.2(@types/node@26.1.1)(typescript@5.9.3): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.12 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 26.0.1 + '@types/node': 26.1.1 acorn: 8.16.0 acorn-walk: 8.3.5 arg: 4.1.3 From 33948f0969bb858acdd52c9692e3a785a3ed0a73 Mon Sep 17 00:00:00 2001 From: Andrey Sitnik Date: Sat, 11 Jul 2026 16:44:46 +0000 Subject: [PATCH 58/89] Prevent prototype hijacking in fromJSON --- lib/node.js | 3 ++- test/fromJSON.test.ts | 11 ++++++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/lib/node.js b/lib/node.js index f249c35ac..6bcfa44d4 100644 --- a/lib/node.js +++ b/lib/node.js @@ -69,7 +69,8 @@ class Node { this[isClean] = false this[my] = true - for (let name in defaults) { + for (let name of Object.keys(defaults)) { + if (name === '__proto__') continue if (name === 'nodes') { this.nodes = [] for (let node of defaults[name]) { diff --git a/test/fromJSON.test.ts b/test/fromJSON.test.ts index b9e0b092a..b7238cba2 100755 --- a/test/fromJSON.test.ts +++ b/test/fromJSON.test.ts @@ -1,5 +1,5 @@ import { test } from 'uvu' -import { instance, is, throws } from 'uvu/assert' +import { instance, is, throws, equal } from 'uvu/assert' import * as v8 from 'v8' import postcss, { Declaration, Input, Root, Rule } from '../lib/postcss.js' @@ -69,4 +69,13 @@ test('throws when rehydrating an invalid JSON AST', () => { }, 'Unknown node type: not-a-node-type') }) +test('does not allow to change prototype', () => { + const node = postcss.fromJSON( + JSON.parse( + '{"type":"decl","prop":"color","value":"red","__proto__":{"hijacked":true}}' + ) + ) + equal(typeof node.hijacked, 'undefined') +}) + test.run() From a50352c583df991710f92ccac25b36304695161a Mon Sep 17 00:00:00 2001 From: Andrey Sitnik Date: Sat, 11 Jul 2026 16:46:55 +0000 Subject: [PATCH 59/89] Fix CI --- test/fromJSON.test.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/test/fromJSON.test.ts b/test/fromJSON.test.ts index b7238cba2..e0ea9fc59 100755 --- a/test/fromJSON.test.ts +++ b/test/fromJSON.test.ts @@ -75,6 +75,7 @@ test('does not allow to change prototype', () => { '{"type":"decl","prop":"color","value":"red","__proto__":{"hijacked":true}}' ) ) + // @ts-expect-error equal(typeof node.hijacked, 'undefined') }) From 2421312ffea96ba77b35ce24a1b2d9c2e22b5e83 Mon Sep 17 00:00:00 2001 From: Andrey Sitnik Date: Sat, 11 Jul 2026 17:47:41 +0000 Subject: [PATCH 60/89] Fix linter --- test/fromJSON.test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/fromJSON.test.ts b/test/fromJSON.test.ts index e0ea9fc59..b4fad5c79 100755 --- a/test/fromJSON.test.ts +++ b/test/fromJSON.test.ts @@ -1,5 +1,5 @@ import { test } from 'uvu' -import { instance, is, throws, equal } from 'uvu/assert' +import { equal, instance, is, throws } from 'uvu/assert' import * as v8 from 'v8' import postcss, { Declaration, Input, Root, Rule } from '../lib/postcss.js' @@ -70,7 +70,7 @@ test('throws when rehydrating an invalid JSON AST', () => { }) test('does not allow to change prototype', () => { - const node = postcss.fromJSON( + let node = postcss.fromJSON( JSON.parse( '{"type":"decl","prop":"color","value":"red","__proto__":{"hijacked":true}}' ) From d1518afd5a88f42728b30b87f8917210f363f9f1 Mon Sep 17 00:00:00 2001 From: Andrey Sitnik Date: Sat, 11 Jul 2026 19:06:38 +0000 Subject: [PATCH 61/89] Fix Maximum call stack size exceeded error --- lib/container.js | 115 ++++++++++++++++++++++---------- lib/fromJSON.js | 91 +++++++++++++++++-------- lib/lazy-result.js | 68 +++++++++++++++---- lib/node.js | 139 +++++++++++++++++++++++++-------------- lib/stringifier.js | 115 +++++++++++++++++++++++++------- package.json | 2 +- test/node.test.ts | 20 ++++++ test/parse.test.ts | 29 +++++++- test/stringifier.test.js | 16 +++++ test/visitor.test.ts | 23 +++++++ 10 files changed, 467 insertions(+), 151 deletions(-) diff --git a/lib/container.js b/lib/container.js index edb07cc2f..cd3b65b6f 100644 --- a/lib/container.js +++ b/lib/container.js @@ -8,18 +8,25 @@ let { isClean, my } = require('./symbols') let AtRule, parse, Root, Rule function cleanSource(nodes) { - return nodes.map(i => { - if (i.nodes) i.nodes = cleanSource(i.nodes) - delete i.source - return i - }) + let stack = nodes.slice() + while (stack.length > 0) { + let node = stack.pop() + delete node.source + if (node.nodes) { + node.nodes = node.nodes.slice() + for (let i of node.nodes) stack.push(i) + } + } + return nodes.slice() } function markTreeDirty(node) { - node[isClean] = false - if (node.proxyOf.nodes) { - for (let i of node.proxyOf.nodes) { - markTreeDirty(i) + let stack = [node] + while (stack.length > 0) { + let next = stack.pop() + next[isClean] = false + if (next.proxyOf.nodes) { + for (let i of next.proxyOf.nodes) stack.push(i) } } } @@ -47,9 +54,18 @@ class Container extends Node { } cleanRaws(keepBetween) { - super.cleanRaws(keepBetween) - if (this.nodes) { - for (let node of this.nodes) node.cleanRaws(keepBetween) + let stack = [this] + while (stack.length > 0) { + let node = stack.pop() + if (node !== this && node.cleanRaws !== Container.prototype.cleanRaws) { + // Subclass with own logic; let it handle its subtree + node.cleanRaws(keepBetween) + continue + } + Node.prototype.cleanRaws.call(node, keepBetween) + if (node.nodes) { + for (let child of node.nodes) stack.push(child) + } } } @@ -309,19 +325,48 @@ class Container extends Node { } walk(callback) { - return this.each((child, i) => { + if (!this.proxyOf.nodes) return undefined + + // An explicit stack instead of recursive `each()` calls to survive + // deeply nested trees. Each frame keeps a live `indexes` slot, so + // insertion and removal during the walk behave like `each()`: the + // slot stays at the current child until its subtree is finished. + let stack = [{ iterator: this.getIterator(), node: this.proxyOf }] + + while (stack.length > 0) { + let { iterator, node } = stack[stack.length - 1] + let index = node.indexes[iterator] + + if (index >= node.proxyOf.nodes.length) { + delete node.indexes[iterator] + stack.pop() + let parent = stack[stack.length - 1] + // Finish the parent’s step for the child subtree we just left + if (parent) parent.node.indexes[parent.iterator] += 1 + continue + } + + let child = node.proxyOf.nodes[index] let result try { - result = callback(child, i) + result = callback(child, index) } catch (e) { throw child.addToError(e) } - if (result !== false && child.walk) { - result = child.walk(callback) + if (result === false) { + for (let opened of stack) { + delete opened.node.indexes[opened.iterator] + } + return false + } + if (child.walk && child.proxyOf.nodes) { + stack.push({ iterator: child.getIterator(), node: child }) + } else { + node.indexes[iterator] += 1 } + } - return result - }) + return undefined } walkAtRules(name, callback) { @@ -424,24 +469,26 @@ Container.default = Container /* c8 ignore start */ Container.rebuild = node => { - if (node.type === 'atrule') { - Object.setPrototypeOf(node, AtRule.prototype) - } else if (node.type === 'rule') { - Object.setPrototypeOf(node, Rule.prototype) - } else if (node.type === 'decl') { - Object.setPrototypeOf(node, Declaration.prototype) - } else if (node.type === 'comment') { - Object.setPrototypeOf(node, Comment.prototype) - } else if (node.type === 'root') { - Object.setPrototypeOf(node, Root.prototype) - } + let stack = [node] + while (stack.length > 0) { + let next = stack.pop() + if (next.type === 'atrule') { + Object.setPrototypeOf(next, AtRule.prototype) + } else if (next.type === 'rule') { + Object.setPrototypeOf(next, Rule.prototype) + } else if (next.type === 'decl') { + Object.setPrototypeOf(next, Declaration.prototype) + } else if (next.type === 'comment') { + Object.setPrototypeOf(next, Comment.prototype) + } else if (next.type === 'root') { + Object.setPrototypeOf(next, Root.prototype) + } - node[my] = true + next[my] = true - if (node.nodes) { - node.nodes.forEach(child => { - Container.rebuild(child) - }) + if (next.nodes) { + for (let child of next.nodes) stack.push(child) + } } } /* c8 ignore stop */ diff --git a/lib/fromJSON.js b/lib/fromJSON.js index a43686d50..c1a9509b4 100644 --- a/lib/fromJSON.js +++ b/lib/fromJSON.js @@ -8,31 +8,24 @@ let PreviousMap = require('./previous-map') let Root = require('./root') let Rule = require('./rule') -function fromJSON(json, inputs) { - if (Array.isArray(json)) return json.map(n => fromJSON(n)) - - let { inputs: ownInputs, ...defaults } = json - if (ownInputs) { - inputs = [] - for (let input of ownInputs) { - let inputHydrated = { ...input, __proto__: Input.prototype } - if (inputHydrated.map) { - inputHydrated.map = { - ...inputHydrated.map, - __proto__: PreviousMap.prototype - } +function hydrateInputs(json, inputs) { + if (!json.inputs) return inputs + return json.inputs.map(input => { + let inputHydrated = { ...input, __proto__: Input.prototype } + if (inputHydrated.map) { + inputHydrated.map = { + ...inputHydrated.map, + __proto__: PreviousMap.prototype } - inputs.push(inputHydrated) } - } - // Rehydrate children separately and attach them after construction. - // Passing them through the container constructor would re-run insertion - // spacing normalization and overwrite each child's own `raws.before`. - let nodes - if (defaults.nodes) { - nodes = json.nodes.map(n => fromJSON(n, inputs)) - delete defaults.nodes - } + return inputHydrated + }) +} + +function constructNode(json, inputs, children) { + let defaults = { ...json } + delete defaults.inputs + delete defaults.nodes if (defaults.source) { let { inputId, ...source } = defaults.source defaults.source = source @@ -56,13 +49,59 @@ function fromJSON(json, inputs) { throw new Error('Unknown node type: ' + json.type) } - if (nodes) { - node.nodes = nodes - for (let child of nodes) child.parent = node + // Rehydrated children are attached after construction. Passing them + // through the container constructor would re-run insertion spacing + // normalization and overwrite each child's own `raws.before`. + if (children) { + node.nodes = children + for (let child of children) child.parent = node } return node } +function fromJSON(json, inputs) { + if (Array.isArray(json)) return json.map(n => fromJSON(n)) + + // An explicit stack instead of recursive calls to survive deeply + // nested trees. Children are rehydrated before their parent node + // is constructed. + let result + let stack = [ + { childIndex: 0, children: [], inputs: hydrateInputs(json, inputs), json } + ] + + while (stack.length > 0) { + let frame = stack[stack.length - 1] + let jsonNodes = frame.json.nodes + + if (jsonNodes && frame.childIndex < jsonNodes.length) { + let childJson = jsonNodes[frame.childIndex] + frame.childIndex += 1 + stack.push({ + childIndex: 0, + children: [], + inputs: hydrateInputs(childJson, frame.inputs), + json: childJson + }) + continue + } + + stack.pop() + let node = constructNode( + frame.json, + frame.inputs, + jsonNodes ? frame.children : undefined + ) + if (stack.length > 0) { + stack[stack.length - 1].children.push(node) + } else { + result = node + } + } + + return result +} + module.exports = fromJSON fromJSON.default = fromJSON diff --git a/lib/lazy-result.js b/lib/lazy-result.js index 9026a7c86..01b40736a 100644 --- a/lib/lazy-result.js +++ b/lib/lazy-result.js @@ -97,8 +97,14 @@ function toStack(node) { } function cleanMarks(node) { - node[isClean] = false - if (node.nodes) node.nodes.forEach(i => cleanMarks(i)) + let stack = [node] + while (stack.length > 0) { + let next = stack.pop() + next[isClean] = false + if (next.nodes) { + for (let i of next.nodes) stack.push(i) + } + } return node } @@ -529,21 +535,57 @@ class LazyResult { } walkSync(node) { + // An explicit stack like in async `visitTick()` to survive deeply + // nested trees. Unlike `visitTick()`, nodes are marked clean only + // on entering, so a node dirtied by its own visitors is revisited + // on the next pass. node[isClean] = true - let events = getEvents(node) - for (let event of events) { - if (event === CHILDREN) { - if (node.nodes) { - node.each(child => { - if (!child[isClean]) this.walkSync(child) - }) + let stack = [{ eventIndex: 0, events: getEvents(node), iterator: 0, node }] + + while (stack.length > 0) { + let visit = stack[stack.length - 1] + let visitNode = visit.node + + if (visit.iterator !== 0) { + let iterator = visit.iterator + let child + let descended = false + while ((child = visitNode.nodes[visitNode.indexes[iterator]])) { + visitNode.indexes[iterator] += 1 + if (!child[isClean]) { + child[isClean] = true + stack.push({ + eventIndex: 0, + events: getEvents(child), + iterator: 0, + node: child + }) + descended = true + break + } } - } else { - let visitors = this.listeners[event] - if (visitors) { - if (this.visitSync(visitors, node.toProxy())) return + if (descended) continue + visit.iterator = 0 + delete visitNode.indexes[iterator] + } + + if (visit.eventIndex < visit.events.length) { + let event = visit.events[visit.eventIndex] + visit.eventIndex += 1 + if (event === CHILDREN) { + if (visitNode.nodes && visitNode.nodes.length) { + visit.iterator = visitNode.getIterator() + } + } else { + let visitors = this.listeners[event] + if (visitors) { + if (this.visitSync(visitors, visitNode.toProxy())) stack.pop() + } } + continue } + + stack.pop() } } diff --git a/lib/node.js b/lib/node.js index 6bcfa44d4..a298d3656 100644 --- a/lib/node.js +++ b/lib/node.js @@ -7,25 +7,41 @@ let { isClean, my } = require('./symbols') function cloneNode(obj, parent) { let cloned = new obj.constructor() - - for (let i in obj) { - if (!Object.prototype.hasOwnProperty.call(obj, i)) { - /* c8 ignore next 2 */ - continue - } - if (i === 'proxyCache') continue - let value = obj[i] - let type = typeof value - - if (i === 'parent' && type === 'object') { - if (parent) cloned[i] = parent - } else if (i === 'source') { - cloned[i] = value - } else if (Array.isArray(value)) { - cloned[i] = value.map(j => cloneNode(j, cloned)) - } else { - if (type === 'object' && value !== null) value = cloneNode(value) - cloned[i] = value + // An explicit stack instead of recursive calls to survive deeply + // nested trees. Each entry is [source, its clone, clone's parent]. + let stack = [[obj, cloned, parent]] + + while (stack.length > 0) { + let [source, target, targetParent] = stack.pop() + for (let i in source) { + if (!Object.prototype.hasOwnProperty.call(source, i)) { + /* c8 ignore next 2 */ + continue + } + if (i === 'proxyCache') continue + let value = source[i] + let type = typeof value + + if (i === 'parent' && type === 'object') { + if (targetParent) target[i] = targetParent + } else if (i === 'source') { + target[i] = value + } else if (Array.isArray(value)) { + let children = [] + target[i] = children + for (let j of value) { + let childClone = new j.constructor() + children.push(childClone) + stack.push([j, childClone, target]) + } + } else { + if (type === 'object' && value !== null) { + let valueClone = new value.constructor() + stack.push([value, valueClone, undefined]) + value = valueClone + } + target[i] = value + } } } @@ -382,47 +398,68 @@ class Node { } toJSON(_, inputs) { - let fixed = {} let emitInputs = inputs == null inputs = inputs || new Map() - let inputsNextIndex = 0 - for (let name in this) { - if (!Object.prototype.hasOwnProperty.call(this, name)) { - /* c8 ignore next 2 */ - continue - } - if (name === 'parent' || name === 'proxyCache') continue - let value = this[name] - - if (Array.isArray(value)) { - fixed[name] = value.map(i => { - if (typeof i === 'object' && i.toJSON) { - return i.toJSON(null, inputs) + // A worklist instead of recursive `toJSON()` calls to survive deeply + // nested trees. Each entry converts one node and writes the result + // into the already converted parent by [holder, key]. + let holderOfRoot = [] + let queue = [[this, holderOfRoot, 0]] + + for (let step = 0; step < queue.length; step++) { + let [node, holder, key] = queue[step] + let fixed = {} + holder[key] = fixed + + for (let name in node) { + if (!Object.prototype.hasOwnProperty.call(node, name)) { + /* c8 ignore next 2 */ + continue + } + if (name === 'parent' || name === 'proxyCache') continue + let value = node[name] + + if (Array.isArray(value)) { + let fixedArray = [] + fixed[name] = fixedArray + for (let i = 0; i < value.length; i++) { + let item = value[i] + if (typeof item === 'object' && item.toJSON) { + if (item.toJSON === Node.prototype.toJSON) { + queue.push([item, fixedArray, i]) + } else { + fixedArray[i] = item.toJSON(null, inputs) + } + } else { + fixedArray[i] = item + } + } + } else if (typeof value === 'object' && value.toJSON) { + if (value.toJSON === Node.prototype.toJSON) { + queue.push([value, fixed, name]) } else { - return i + fixed[name] = value.toJSON(null, inputs) } - }) - } else if (typeof value === 'object' && value.toJSON) { - fixed[name] = value.toJSON(null, inputs) - } else if (name === 'source') { - if (value == null) continue - let inputId = inputs.get(value.input) - if (inputId == null) { - inputId = inputsNextIndex - inputs.set(value.input, inputsNextIndex) - inputsNextIndex++ - } - fixed[name] = { - end: value.end, - inputId, - start: value.start + } else if (name === 'source') { + if (value == null) continue + let inputId = inputs.get(value.input) + if (inputId == null) { + inputId = inputs.size + inputs.set(value.input, inputId) + } + fixed[name] = { + end: value.end, + inputId, + start: value.start + } + } else { + fixed[name] = value } - } else { - fixed[name] = value } } + let fixed = holderOfRoot[0] if (emitInputs) { fixed.inputs = [...inputs.keys()].map(input => input.toJSON()) } diff --git a/lib/stringifier.js b/lib/stringifier.js index b1aa835d8..bffb913ae 100644 --- a/lib/stringifier.js +++ b/lib/stringifier.js @@ -31,27 +31,74 @@ function capitalize(str) { return str[0].toUpperCase() + str.slice(1) } +function atruleStart(str, node) { + let name = '@' + node.name + let params = node.params ? str.rawValue(node, 'params') : '' + + if (typeof node.raws.afterName !== 'undefined') { + name += node.raws.afterName + } else if (params) { + name += ' ' + } + + return name + params +} + +function pushBody(str, stack, node) { + let nodes = node.nodes + let last = nodes.length - 1 + while (last > 0) { + if (nodes[last].type !== 'comment') break + last -= 1 + } + + let semicolon = str.raw(node, 'semicolon') + let isDocument = node.type === 'document' + for (let i = nodes.length - 1; i >= 0; i--) { + stack.push({ + document: isDocument, + node: nodes[i], + semicolon: last !== i || semicolon + }) + } +} + +function pushBlock(str, stack, node, start) { + let between = str.raw(node, 'between', 'beforeOpen') + str.builder(escapeHTMLInCSS(start + between) + '{', node, 'start') + + let hasNodes = node.nodes && node.nodes.length + let close = () => { + let after = hasNodes + ? str.raw(node, 'after') + : str.raw(node, 'after', 'emptyBody') + if (after) str.builder(escapeHTMLInCSS(after)) + str.builder('}', node, 'end') + if (node.type === 'rule' && node.raws.ownSemicolon) { + str.builder(escapeHTMLInCSS(node.raws.ownSemicolon), node, 'end') + } + } + + if (hasNodes) { + stack.push(close) + pushBody(str, stack, node) + } else { + close() + } +} + class Stringifier { constructor(builder) { this.builder = builder } atrule(node, semicolon) { - let raws = node.raws - let name = '@' + node.name - let params = node.params ? this.rawValue(node, 'params') : '' - - if (typeof raws.afterName !== 'undefined') { - name += raws.afterName - } else if (params) { - name += ' ' - } - + let start = atruleStart(this, node) if (node.nodes) { - this.block(node, name + params) + this.block(node, start) } else { - let end = (raws.between || '') + (semicolon ? ';' : '') - this.builder(escapeHTMLInCSS(name + params + end), node) + let end = (node.raws.between || '') + (semicolon ? ';' : '') + this.builder(escapeHTMLInCSS(start + end), node) } } @@ -101,20 +148,38 @@ class Stringifier { } body(node) { - let nodes = node.nodes - let last = nodes.length - 1 - while (last > 0) { - if (nodes[last].type !== 'comment') break - last -= 1 - } + // Rules and at-rules are expanded into an explicit stack instead of + // recursive `stringify()` calls to survive deeply nested trees. + // If a subclass changes the traversal methods, its children go + // through `stringify()` to keep the override in charge. + let proto = Stringifier.prototype + let expandable = ['atrule', 'block', 'body', 'rule', 'stringify'].every( + method => this[method] === proto[method] + ) + + let stack = [] + pushBody(this, stack, node) + + while (stack.length > 0) { + let entry = stack.pop() + if (typeof entry === 'function') { + entry() + continue + } - let semicolon = this.raw(node, 'semicolon') - let isDocument = node.type === 'document' - for (let i = 0; i < nodes.length; i++) { - let child = nodes[i] + let child = entry.node let before = this.raw(child, 'before') - if (before) this.builder(isDocument ? before : escapeHTMLInCSS(before)) - this.stringify(child, last !== i || semicolon) + if (before) { + this.builder(entry.document ? before : escapeHTMLInCSS(before)) + } + + if (expandable && child.type === 'rule') { + pushBlock(this, stack, child, this.rawValue(child, 'selector')) + } else if (expandable && child.type === 'atrule' && child.nodes) { + pushBlock(this, stack, child, atruleStart(this, child)) + } else { + this.stringify(child, entry.semicolon) + } } } diff --git a/package.json b/package.json index 5014fb846..c46fe699c 100644 --- a/package.json +++ b/package.json @@ -129,7 +129,7 @@ "size-limit": [ { "path": "lib/postcss.js", - "limit": "16 KB" + "limit": "16.5 KB" } ], "c8": { diff --git a/test/node.test.ts b/test/node.test.ts index f86fbe799..2155f0d5f 100755 --- a/test/node.test.ts +++ b/test/node.test.ts @@ -314,6 +314,26 @@ test('toJSON() converts custom properties', () => { }) }) +test('toJSON() converts nodes in custom properties', () => { + let root = new Root() as any + root._cache = [1, { toJSON: () => 'hack' }] + root._node = new Rule({ selector: 'a' }) + + equal(root.toJSON(), { + _cache: [1, 'hack'], + _node: { + nodes: [], + raws: {}, + selector: 'a', + type: 'rule' + }, + inputs: [], + nodes: [], + raws: {}, + type: 'root' + }) +}) + test('raw() has shortcut to stringifier', () => { let rule = new Rule({ selector: 'a' }) is(rule.raw('before'), '') diff --git a/test/parse.test.ts b/test/parse.test.ts index 13de89851..06bde8385 100755 --- a/test/parse.test.ts +++ b/test/parse.test.ts @@ -4,7 +4,14 @@ import { eachTest, jsonify, testPath } from 'postcss-parser-tests' import { test } from 'uvu' import { equal, is, match, not, throws } from 'uvu/assert' -import { AtRule, Declaration, parse, Root, Rule } from '../lib/postcss.js' +import { + AtRule, + Declaration, + fromJSON, + parse, + Root, + Rule +} from '../lib/postcss.js' test('works with file reads', () => { let stream = readFileSync(testPath('atrule-empty.css')) @@ -251,4 +258,24 @@ test('should give the correct column of missed semicolon without !important', () match(error.message, /2:15: Missed semicolon/) }) +test('does not overflow the stack on deeply nested nodes', () => { + let depth = 6000 + let css = 'a{'.repeat(depth) + 'color:red' + '}'.repeat(depth) + + let root = parse(css) + is(root.toString(), css) + + let clone = root.clone() + is(clone.toString(), css) + + let json = root.toJSON() + is(fromJSON(json).toString(), css) + + let count = 0 + root.walk(() => { + count += 1 + }) + is(count, depth + 1) +}) + test.run() diff --git a/test/stringifier.test.js b/test/stringifier.test.js index 411effb20..f5aab013c 100755 --- a/test/stringifier.test.js +++ b/test/stringifier.test.js @@ -358,4 +358,20 @@ test('always calls raw to retrieve raws', () => { ) }) +test('supports subclasses with overridden traversal methods', () => { + class CustomStringifier extends Stringifier { + rule(node) { + super.rule(node) + } + } + + let css = 'a{color:black};@media screen{b{}}' + let result = '' + let custom = new CustomStringifier(i => { + result += i + }) + custom.stringify(parse(css)) + is(result, css) +}) + test.run() diff --git a/test/visitor.test.ts b/test/visitor.test.ts index 6bfa82eff..0c381fb14 100755 --- a/test/visitor.test.ts +++ b/test/visitor.test.ts @@ -1602,4 +1602,27 @@ test('append works after reassigning nodes through .parent', async () => { ) }) +test('does not overflow the stack on deeply nested nodes', () => { + // The recursive sync walking crashed at ~3000 levels of nesting + let depth = 6000 + let css = 'a{'.repeat(depth) + 'color:black' + '}'.repeat(depth) + + let visited = 0 + let plugin: Plugin = { + Declaration(decl) { + decl.value = 'red' + visited += 1 + }, + postcssPlugin: 'deep-changer' + } + + let result = postcss([plugin]).process(postcss.parse(css), { + from: undefined + }).css + + // The changed declaration is revisited on the second pass + is(visited, 2) + is(result, 'a{'.repeat(depth) + 'color:red' + '}'.repeat(depth)) +}) + test.run() From 74e25ae9f4efaa56a41a449064a655d7da78072c Mon Sep 17 00:00:00 2001 From: Andrey Sitnik Date: Sat, 11 Jul 2026 19:17:11 +0000 Subject: [PATCH 62/89] Release 8.5.17 version --- CHANGELOG.md | 6 ++++++ lib/processor.js | 2 +- package.json | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 314b65ac2..3b6a8422f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,12 @@ This project adheres to [Semantic Versioning](https://semver.org/). +## 8.5.17 + +- Fixed `Maximum call stack size exceeded` error. +- Fixed Prototype hijacking for `postcss.fromJSON()`. +- Fixed `Input#origin()` for unmapped end position (by @chatman-media). + ## 8.5.16 - Fixed `Input#origin()` position (by @mizdra). diff --git a/lib/processor.js b/lib/processor.js index 7d0837872..5b7700ab1 100644 --- a/lib/processor.js +++ b/lib/processor.js @@ -7,7 +7,7 @@ let Root = require('./root') class Processor { constructor(plugins = []) { - this.version = '8.5.16' + this.version = '8.5.17' this.plugins = this.normalize(plugins) } diff --git a/package.json b/package.json index c46fe699c..b8eb9db14 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "postcss", - "version": "8.5.16", + "version": "8.5.17", "description": "Tool for transforming styles with JS plugins", "keywords": [ "css", From 95663d3eb7ba26f4854dd19d3b4f4425760cf56c Mon Sep 17 00:00:00 2001 From: Andrey Sitnik Date: Sun, 12 Jul 2026 20:31:03 +0000 Subject: [PATCH 63/89] Limit where source map can be loaded for security reasons --- lib/postcss.d.ts | 5 ++++- lib/previous-map.js | 13 +++++++++++-- test/previous-map.test.ts | 31 +++++++++++++++++++++++++++++++ 3 files changed, 46 insertions(+), 3 deletions(-) diff --git a/lib/postcss.d.ts b/lib/postcss.d.ts index 667d82092..41bf40f9b 100644 --- a/lib/postcss.d.ts +++ b/lib/postcss.d.ts @@ -229,7 +229,7 @@ declare namespace postcss { export interface Parser { ( css: { toString(): string } | string, - opts?: Pick + opts?: Pick ): RootNode } @@ -354,6 +354,9 @@ declare namespace postcss { /** * Disable source map file protections. + * + * By default source map is limited only for `.map` files + * in the `from` folder. */ unsafeMap?: boolean } diff --git a/lib/previous-map.js b/lib/previous-map.js index 3c9d8b971..8312ec097 100644 --- a/lib/previous-map.js +++ b/lib/previous-map.js @@ -1,7 +1,7 @@ 'use strict' let { existsSync, readFileSync } = require('fs') -let { dirname, join } = require('path') +let { dirname, isAbsolute, join, relative, sep } = require('path') let { SourceMapConsumer, SourceMapGenerator } = require('source-map-js') function fromBase64(str) { @@ -85,11 +85,20 @@ class PreviousMap { } loadFile(path, cssFile, trusted) { - /* c8 ignore next 5 */ if (!trusted && !this.unsafeMap) { if (!/\.map$/i.test(path)) { return undefined } + if (cssFile) { + let relativePath = relative(dirname(cssFile), path) + if ( + relativePath === '..' || + relativePath.startsWith('..' + sep) || + isAbsolute(relativePath) + ) { + return undefined + } + } } this.root = dirname(path) if (existsSync(path)) { diff --git a/test/previous-map.test.ts b/test/previous-map.test.ts index c50f80e34..9cc733410 100755 --- a/test/previous-map.test.ts +++ b/test/previous-map.test.ts @@ -294,6 +294,37 @@ test('uses source map path as a root', () => { }) }) +test('does not load map from non-.map file', () => { + let from = join(dir, 'a.css') + mkdirSync(dir) + writeFileSync(join(dir, 'a.txt'), map) + let input = parse('a{}\n/*# sourceMappingURL=a.txt */', { from }).source + ?.input + type(input?.map, 'undefined') +}) + +test('does not load map from outside the from folder', () => { + let from = join(dir, 'subdir', 'a.css') + mkdirSync(dir) + mkdirSync(join(dir, 'subdir')) + writeFileSync(join(dir, 'outside.map'), map) + let input = parse('a{}\n/*# sourceMappingURL=../outside.map */', { from }) + .source?.input + type(input?.map, 'undefined') +}) + +test('loads map from outside the from folder with unsafeMap', () => { + let from = join(dir, 'subdir', 'a.css') + mkdirSync(dir) + mkdirSync(join(dir, 'subdir')) + writeFileSync(join(dir, 'outside.map'), map) + let input = parse('a{}\n/*# sourceMappingURL=../outside.map */', { + from, + unsafeMap: true + }).source?.input + is(input?.map.text, map) +}) + test('uses current file path for source map', () => { let root = parse('a{b:1}', { from: join(__dirname, 'dir', 'subdir', 'a.css'), From 92b4e7891ec7b811821d01acc8aa0f010caf41e2 Mon Sep 17 00:00:00 2001 From: Andrey Sitnik Date: Sun, 12 Jul 2026 20:31:53 +0000 Subject: [PATCH 64/89] Update dependencies --- package.json | 4 +- pnpm-lock.yaml | 118 ++++++++++++++++++++++++------------------------- 2 files changed, 61 insertions(+), 61 deletions(-) diff --git a/package.json b/package.json index b8eb9db14..88513744d 100644 --- a/package.json +++ b/package.json @@ -95,14 +95,14 @@ }, "devDependencies": { "@logux/eslint-config": "^57.1.0", - "@logux/oxc-configs": "^0.4.0", + "@logux/oxc-configs": "^0.4.1", "@size-limit/preset-small-lib": "^12.1.0", "@types/node": "^26.1.1", "actions-up": "^1.16.0", "c8": "^11.0.0", "check-dts": "^0.9.0", "concat-with-sourcemaps": "^1.1.0", - "eslint": "^10.6.0", + "eslint": "^10.7.0", "multiocular": "^0.8.3", "nanodelay": "^1.0.8", "nanospy": "^2.0.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5d8bf9f07..9680b1615 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -23,10 +23,10 @@ importers: devDependencies: '@logux/eslint-config': specifier: ^57.1.0 - version: 57.1.0(@typescript-eslint/utils@8.59.3(eslint@10.6.0)(typescript@5.9.3))(eslint@10.6.0)(typescript@5.9.3) + version: 57.1.0(@typescript-eslint/utils@8.59.3(eslint@10.7.0)(typescript@5.9.3))(eslint@10.7.0)(typescript@5.9.3) '@logux/oxc-configs': - specifier: ^0.4.0 - version: 0.4.0(oxlint-tsgolint@0.18.1)(oxlint@1.58.0(oxlint-tsgolint@0.18.1))(typescript@5.9.3) + specifier: ^0.4.1 + version: 0.4.1(oxlint-tsgolint@0.18.1)(oxlint@1.58.0(oxlint-tsgolint@0.18.1))(typescript@5.9.3) '@size-limit/preset-small-lib': specifier: ^12.1.0 version: 12.1.0(size-limit@12.1.0) @@ -46,8 +46,8 @@ importers: specifier: ^1.1.0 version: 1.1.0 eslint: - specifier: ^10.6.0 - version: 10.6.0 + specifier: ^10.7.0 + version: 10.7.0 multiocular: specifier: ^0.8.3 version: 0.8.3 @@ -354,13 +354,13 @@ packages: svelte-eslint-parser: optional: true - '@logux/oxc-configs@0.4.0': - resolution: {integrity: sha512-iFwtOJ6b4//hpALzizQckrBwrhhuJ0RIckYvFGJjYodjA1+zJTjmaWKILUmDD6LlqGYGBPQxDfn8pTMx1EM7AA==} + '@logux/oxc-configs@0.4.1': + resolution: {integrity: sha512-r17Vrl/UKbMveIBZTc0mMBRQthc/Da6WchEDVe5c+wob+wg5XRHn6m6/ap8svkZ6y/u42Y/ayg2KIunMgtz75Q==} engines: {node: '>=22.0.0'} peerDependencies: oxlint: ^1.57.0 oxlint-tsgolint: '>=0.18.1' - typescript: ^6.0.2 + typescript: ^6.0.2 || ^7.0.0 '@logux/server@0.14.0': resolution: {integrity: sha512-a7KRD30U252cfIekBGktEIRuwFRT7vOPZXkEsD05DwApsPi70iRnFaHEgMde8tZu+jJUuTDN/xMgabtjzHzXaQ==} @@ -935,8 +935,8 @@ packages: brace-expansion@1.1.14: resolution: {integrity: sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==} - brace-expansion@5.0.6: - resolution: {integrity: sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==} + brace-expansion@5.0.7: + resolution: {integrity: sha512-7oFy703dxfY3/NLxC1fh2SUCQ0H9rmAY+5EpDVfXjUTTs+HEwR2nYaqLv+GWcTsumwxPfiz6CzCNkwXwBUwqCA==} engines: {node: 18 || 20 || >=22} braces@3.0.3: @@ -1128,8 +1128,8 @@ packages: resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - eslint@10.6.0: - resolution: {integrity: sha512-6lVbcqSodALYo+4ELD0heG6lFiFxnLMuLkiMi2qV8LMp54N8tE8FT1GMH+ev4Ti00nFjNze2+Su6DsV5OQW3Dg==} + eslint@10.7.0: + resolution: {integrity: sha512-GVTD7s1vdIl6UYvAfriOPeY1Df8LIZjfofLvHwde+erDHGGuHyuM6xoxRxmHiebhYuD2p1vN4wWh0XzPARSGDQ==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} hasBin: true peerDependencies: @@ -1850,9 +1850,9 @@ snapshots: '@esbuild/win32-x64@0.28.0': optional: true - '@eslint-community/eslint-utils@4.9.1(eslint@10.6.0)': + '@eslint-community/eslint-utils@4.9.1(eslint@10.7.0)': dependencies: - eslint: 10.6.0 + eslint: 10.7.0 eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.2': {} @@ -1934,23 +1934,23 @@ snapshots: dependencies: nanoevents: 9.1.0 - '@logux/eslint-config@57.1.0(@typescript-eslint/utils@8.59.3(eslint@10.6.0)(typescript@5.9.3))(eslint@10.6.0)(typescript@5.9.3)': + '@logux/eslint-config@57.1.0(@typescript-eslint/utils@8.59.3(eslint@10.7.0)(typescript@5.9.3))(eslint@10.7.0)(typescript@5.9.3)': dependencies: '@eslint/eslintrc': 3.3.5 - eslint: 10.6.0 - eslint-plugin-import-x: 4.16.2(@typescript-eslint/utils@8.59.3(eslint@10.6.0)(typescript@5.9.3))(eslint@10.6.0) - eslint-plugin-n: 17.24.0(eslint@10.6.0)(typescript@5.9.3) - eslint-plugin-perfectionist: 5.9.0(eslint@10.6.0)(typescript@5.9.3) + eslint: 10.7.0 + eslint-plugin-import-x: 4.16.2(@typescript-eslint/utils@8.59.3(eslint@10.7.0)(typescript@5.9.3))(eslint@10.7.0) + eslint-plugin-n: 17.24.0(eslint@10.7.0)(typescript@5.9.3) + eslint-plugin-perfectionist: 5.9.0(eslint@10.7.0)(typescript@5.9.3) eslint-plugin-prefer-let: 4.2.2 globals: 17.6.0 - typescript-eslint: 8.59.3(eslint@10.6.0)(typescript@5.9.3) + typescript-eslint: 8.59.3(eslint@10.7.0)(typescript@5.9.3) transitivePeerDependencies: - '@typescript-eslint/utils' - eslint-import-resolver-node - supports-color - typescript - '@logux/oxc-configs@0.4.0(oxlint-tsgolint@0.18.1)(oxlint@1.58.0(oxlint-tsgolint@0.18.1))(typescript@5.9.3)': + '@logux/oxc-configs@0.4.1(oxlint-tsgolint@0.18.1)(oxlint@1.58.0(oxlint-tsgolint@0.18.1))(typescript@5.9.3)': dependencies: eslint-plugin-prefer-let: 4.2.2 oxlint: 1.58.0(oxlint-tsgolint@0.18.1) @@ -2175,15 +2175,15 @@ snapshots: '@types/unist@3.0.3': {} - '@typescript-eslint/eslint-plugin@8.59.3(@typescript-eslint/parser@8.59.3(eslint@10.6.0)(typescript@5.9.3))(eslint@10.6.0)(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.59.3(@typescript-eslint/parser@8.59.3(eslint@10.7.0)(typescript@5.9.3))(eslint@10.7.0)(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.59.3(eslint@10.6.0)(typescript@5.9.3) + '@typescript-eslint/parser': 8.59.3(eslint@10.7.0)(typescript@5.9.3) '@typescript-eslint/scope-manager': 8.59.3 - '@typescript-eslint/type-utils': 8.59.3(eslint@10.6.0)(typescript@5.9.3) - '@typescript-eslint/utils': 8.59.3(eslint@10.6.0)(typescript@5.9.3) + '@typescript-eslint/type-utils': 8.59.3(eslint@10.7.0)(typescript@5.9.3) + '@typescript-eslint/utils': 8.59.3(eslint@10.7.0)(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.59.3 - eslint: 10.6.0 + eslint: 10.7.0 ignore: 7.0.5 natural-compare: 1.4.0 ts-api-utils: 2.5.0(typescript@5.9.3) @@ -2191,14 +2191,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.59.3(eslint@10.6.0)(typescript@5.9.3)': + '@typescript-eslint/parser@8.59.3(eslint@10.7.0)(typescript@5.9.3)': dependencies: '@typescript-eslint/scope-manager': 8.59.3 '@typescript-eslint/types': 8.59.3 '@typescript-eslint/typescript-estree': 8.59.3(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.59.3 debug: 4.4.3 - eslint: 10.6.0 + eslint: 10.7.0 typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -2221,13 +2221,13 @@ snapshots: dependencies: typescript: 5.9.3 - '@typescript-eslint/type-utils@8.59.3(eslint@10.6.0)(typescript@5.9.3)': + '@typescript-eslint/type-utils@8.59.3(eslint@10.7.0)(typescript@5.9.3)': dependencies: '@typescript-eslint/types': 8.59.3 '@typescript-eslint/typescript-estree': 8.59.3(typescript@5.9.3) - '@typescript-eslint/utils': 8.59.3(eslint@10.6.0)(typescript@5.9.3) + '@typescript-eslint/utils': 8.59.3(eslint@10.7.0)(typescript@5.9.3) debug: 4.4.3 - eslint: 10.6.0 + eslint: 10.7.0 ts-api-utils: 2.5.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: @@ -2250,13 +2250,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.59.3(eslint@10.6.0)(typescript@5.9.3)': + '@typescript-eslint/utils@8.59.3(eslint@10.7.0)(typescript@5.9.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.6.0) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.7.0) '@typescript-eslint/scope-manager': 8.59.3 '@typescript-eslint/types': 8.59.3 '@typescript-eslint/typescript-estree': 8.59.3(typescript@5.9.3) - eslint: 10.6.0 + eslint: 10.7.0 typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -2379,7 +2379,7 @@ snapshots: balanced-match: 1.0.2 concat-map: 0.0.1 - brace-expansion@5.0.6: + brace-expansion@5.0.7: dependencies: balanced-match: 4.0.4 @@ -2515,9 +2515,9 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-compat-utils@0.5.1(eslint@10.6.0): + eslint-compat-utils@0.5.1(eslint@10.7.0): dependencies: - eslint: 10.6.0 + eslint: 10.7.0 semver: 7.8.5 eslint-import-context@0.1.9(unrs-resolver@1.11.1): @@ -2527,20 +2527,20 @@ snapshots: optionalDependencies: unrs-resolver: 1.11.1 - eslint-plugin-es-x@7.8.0(eslint@10.6.0): + eslint-plugin-es-x@7.8.0(eslint@10.7.0): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.6.0) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.7.0) '@eslint-community/regexpp': 4.12.2 - eslint: 10.6.0 - eslint-compat-utils: 0.5.1(eslint@10.6.0) + eslint: 10.7.0 + eslint-compat-utils: 0.5.1(eslint@10.7.0) - eslint-plugin-import-x@4.16.2(@typescript-eslint/utils@8.59.3(eslint@10.6.0)(typescript@5.9.3))(eslint@10.6.0): + eslint-plugin-import-x@4.16.2(@typescript-eslint/utils@8.59.3(eslint@10.7.0)(typescript@5.9.3))(eslint@10.7.0): dependencies: '@package-json/types': 0.0.12 '@typescript-eslint/types': 8.59.3 comment-parser: 1.4.6 debug: 4.4.3 - eslint: 10.6.0 + eslint: 10.7.0 eslint-import-context: 0.1.9(unrs-resolver@1.11.1) is-glob: 4.0.3 minimatch: 10.2.5 @@ -2548,16 +2548,16 @@ snapshots: stable-hash-x: 0.2.0 unrs-resolver: 1.11.1 optionalDependencies: - '@typescript-eslint/utils': 8.59.3(eslint@10.6.0)(typescript@5.9.3) + '@typescript-eslint/utils': 8.59.3(eslint@10.7.0)(typescript@5.9.3) transitivePeerDependencies: - supports-color - eslint-plugin-n@17.24.0(eslint@10.6.0)(typescript@5.9.3): + eslint-plugin-n@17.24.0(eslint@10.7.0)(typescript@5.9.3): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.6.0) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.7.0) enhanced-resolve: 5.21.3 - eslint: 10.6.0 - eslint-plugin-es-x: 7.8.0(eslint@10.6.0) + eslint: 10.7.0 + eslint-plugin-es-x: 7.8.0(eslint@10.7.0) get-tsconfig: 4.14.0 globals: 15.15.0 globrex: 0.1.2 @@ -2567,10 +2567,10 @@ snapshots: transitivePeerDependencies: - typescript - eslint-plugin-perfectionist@5.9.0(eslint@10.6.0)(typescript@5.9.3): + eslint-plugin-perfectionist@5.9.0(eslint@10.7.0)(typescript@5.9.3): dependencies: - '@typescript-eslint/utils': 8.59.3(eslint@10.6.0)(typescript@5.9.3) - eslint: 10.6.0 + '@typescript-eslint/utils': 8.59.3(eslint@10.7.0)(typescript@5.9.3) + eslint: 10.7.0 natural-orderby: 5.0.0 transitivePeerDependencies: - supports-color @@ -2593,9 +2593,9 @@ snapshots: eslint-visitor-keys@5.0.1: {} - eslint@10.6.0: + eslint@10.7.0: dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.6.0) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.7.0) '@eslint-community/regexpp': 4.12.2 '@eslint/config-array': 0.23.5 '@eslint/config-helpers': 0.6.0 @@ -2817,7 +2817,7 @@ snapshots: minimatch@10.2.5: dependencies: - brace-expansion: 5.0.6 + brace-expansion: 5.0.7 minimatch@3.1.5: dependencies: @@ -3088,13 +3088,13 @@ snapshots: dependencies: prelude-ls: 1.2.1 - typescript-eslint@8.59.3(eslint@10.6.0)(typescript@5.9.3): + typescript-eslint@8.59.3(eslint@10.7.0)(typescript@5.9.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.59.3(@typescript-eslint/parser@8.59.3(eslint@10.6.0)(typescript@5.9.3))(eslint@10.6.0)(typescript@5.9.3) - '@typescript-eslint/parser': 8.59.3(eslint@10.6.0)(typescript@5.9.3) + '@typescript-eslint/eslint-plugin': 8.59.3(@typescript-eslint/parser@8.59.3(eslint@10.7.0)(typescript@5.9.3))(eslint@10.7.0)(typescript@5.9.3) + '@typescript-eslint/parser': 8.59.3(eslint@10.7.0)(typescript@5.9.3) '@typescript-eslint/typescript-estree': 8.59.3(typescript@5.9.3) - '@typescript-eslint/utils': 8.59.3(eslint@10.6.0)(typescript@5.9.3) - eslint: 10.6.0 + '@typescript-eslint/utils': 8.59.3(eslint@10.7.0)(typescript@5.9.3) + eslint: 10.7.0 typescript: 5.9.3 transitivePeerDependencies: - supports-color From 4c0d194c136fd374495d0993c890d794cab65b81 Mon Sep 17 00:00:00 2001 From: Andrey Sitnik Date: Sun, 12 Jul 2026 20:34:36 +0000 Subject: [PATCH 65/89] Release 8.5.18 version --- CHANGELOG.md | 4 ++++ lib/processor.js | 2 +- package.json | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3b6a8422f..7b66a7e8b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ This project adheres to [Semantic Versioning](https://semver.org/). +## 8.5.18 + +- Restricted loading previous source maps file to the `opts.from` folder for security reasons (use `unsafeMap: true` to disable the check). + ## 8.5.17 - Fixed `Maximum call stack size exceeded` error. diff --git a/lib/processor.js b/lib/processor.js index 5b7700ab1..cfa5f0978 100644 --- a/lib/processor.js +++ b/lib/processor.js @@ -7,7 +7,7 @@ let Root = require('./root') class Processor { constructor(plugins = []) { - this.version = '8.5.17' + this.version = '8.5.18' this.plugins = this.normalize(plugins) } diff --git a/package.json b/package.json index 88513744d..75c033447 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "postcss", - "version": "8.5.17", + "version": "8.5.18", "description": "Tool for transforming styles with JS plugins", "keywords": [ "css", From 7a05b33e7a15d6f80d90098784170ad3dca39180 Mon Sep 17 00:00:00 2001 From: Andrey Sitnik Date: Mon, 13 Jul 2026 10:36:59 +0000 Subject: [PATCH 66/89] Temporary fix CI --- .github/workflows/test.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index dea34fb5b..b58e5a641 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -16,7 +16,7 @@ jobs: - name: Install Node.js & pnpm uses: pnpm/setup@5d160c5bc68a09337ad0d5654e237e03253b5879 # v1.0.0 with: - version: 11 + version: 11.10.0 runtime: node@26 - name: Install dependencies run: pnpm ci @@ -36,7 +36,7 @@ jobs: - name: Install Node.js & pnpm uses: pnpm/setup@5d160c5bc68a09337ad0d5654e237e03253b5879 # v1.0.0 with: - version: 11 + version: 11.10.0 runtime: node@${{ matrix.node }} - name: Install dependencies run: pnpm ci From 00d0dd2322162f6083d507ea6954685e1c92f165 Mon Sep 17 00:00:00 2001 From: Mahin Anowar <86069420+MahinAnowar@users.noreply.github.com> Date: Mon, 13 Jul 2026 16:37:33 +0600 Subject: [PATCH 67/89] Keep explicitly set raws.before when inserting nodes into root (#2111) --- lib/root.js | 17 ++++++++++++++++- test/root.test.ts | 19 ++++++++++++++++++- test/stringifier.test.js | 2 +- 3 files changed, 35 insertions(+), 3 deletions(-) diff --git a/lib/root.js b/lib/root.js index ea574edca..bc8547f39 100644 --- a/lib/root.js +++ b/lib/root.js @@ -12,6 +12,19 @@ class Root extends Container { } normalize(child, sample, type) { + let keepBefore = new Set() + for (let node of Array.isArray(child) ? child : [child]) { + if ( + node && + typeof node === 'object' && + !node.parent && + node.raws && + typeof node.raws.before !== 'undefined' + ) { + keepBefore.add(node.raws) + } + } + let nodes = super.normalize(child) if (sample) { @@ -23,7 +36,9 @@ class Root extends Container { } } else if (this.first !== sample) { for (let node of nodes) { - node.raws.before = sample.raws.before + if (!keepBefore.has(node.raws)) { + node.raws.before = sample.raws.before + } } } } diff --git a/test/root.test.ts b/test/root.test.ts index fdf312329..16eabcb7a 100755 --- a/test/root.test.ts +++ b/test/root.test.ts @@ -1,7 +1,7 @@ import { test } from 'uvu' import { is, match, type } from 'uvu/assert' -import { parse, Result } from '../lib/postcss.js' +import postcss, { parse, Result } from '../lib/postcss.js' test('prepend() fixes spaces on insert before first', () => { let css = parse('a {} b {}') @@ -44,6 +44,23 @@ test('fixes spaces on removing first rule', () => { is(css.toString(), 'b{}\n') }) +test('keeps explicitly set raws.before on inserted node', () => { + let css = parse('/*a*/\n\n/*b*/') + let node = postcss.comment({ raws: { before: '' }, text: 'new' }) + if (!css.nodes[1]) throw new Error('No nodes were parsed') + css.nodes[1].before(node) + is(node.raws.before, '') + is(css.toString(), '/*a*//*new*/\n\n/*b*/') +}) + +test('updates raws.before on node moved from another root', () => { + let css1 = parse('a{}\nb{}') + let css2 = parse('em{}\n\n\nstrong{}') + if (!css1.nodes[1] || !css2.nodes[1]) throw new Error('No nodes were parsed') + css2.nodes[1].before(css1.nodes[1]) + is(css2.toString(), 'em{}\n\n\nb{}\n\n\nstrong{}') +}) + test('keeps spaces on moving root', () => { let css1 = parse('a{}\nb{}\n') diff --git a/test/stringifier.test.js b/test/stringifier.test.js index f5aab013c..87690c4fc 100755 --- a/test/stringifier.test.js +++ b/test/stringifier.test.js @@ -301,7 +301,7 @@ test('escapes { '\\3c /style> {}\n' + '@media \\3c style>;\n' + '/* \\3c /style>\\3c !--\\3c style> */\n' + - 'a {\n' + + '\\3c /style>a {\n' + ' color: \\3c /style>' + '\\3c /style>}' ) From 3d13bf9360652922de0535f6257e1648187363f0 Mon Sep 17 00:00:00 2001 From: Andrey Sitnik Date: Mon, 13 Jul 2026 10:39:22 +0000 Subject: [PATCH 68/89] Fix CI on Windows too --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index b58e5a641..8b2be8122 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -84,7 +84,7 @@ jobs: - name: Install pnpm uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9 with: - version: 11 + version: 11.10.0 - name: Install Node.js LTS uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 with: From 9543b22769bef5bcd47600fbca752204c106cda8 Mon Sep 17 00:00:00 2001 From: Andrey Sitnik Date: Mon, 13 Jul 2026 10:41:10 +0000 Subject: [PATCH 69/89] Release 8.5.19 version --- CHANGELOG.md | 4 ++++ lib/processor.js | 2 +- package.json | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7b66a7e8b..59add73ae 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ This project adheres to [Semantic Versioning](https://semver.org/). +## 8.5.19 + +- Fixed cleaning `before` for new nodes inserted to `Root` (by @MahinAnowar). + ## 8.5.18 - Restricted loading previous source maps file to the `opts.from` folder for security reasons (use `unsafeMap: true` to disable the check). diff --git a/lib/processor.js b/lib/processor.js index cfa5f0978..7579b1328 100644 --- a/lib/processor.js +++ b/lib/processor.js @@ -7,7 +7,7 @@ let Root = require('./root') class Processor { constructor(plugins = []) { - this.version = '8.5.18' + this.version = '8.5.19' this.plugins = this.normalize(plugins) } diff --git a/package.json b/package.json index 75c033447..8d192f91e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "postcss", - "version": "8.5.18", + "version": "8.5.19", "description": "Tool for transforming styles with JS plugins", "keywords": [ "css", From 7a8ca2d0e5044fbde3df33e2b9730c14528270e3 Mon Sep 17 00:00:00 2001 From: Andrey Sitnik Date: Tue, 14 Jul 2026 15:48:10 +0000 Subject: [PATCH 70/89] Remove patch after updating dependency --- .npmignore | 1 - package.json | 2 +- patches/yargs@17.7.2.patch | 25 -- pnpm-lock.yaml | 765 +++++++++++++++++++------------------ pnpm-workspace.yaml | 3 - 5 files changed, 386 insertions(+), 410 deletions(-) delete mode 100644 patches/yargs@17.7.2.patch diff --git a/.npmignore b/.npmignore index 4329744d3..9439f8b9d 100644 --- a/.npmignore +++ b/.npmignore @@ -2,7 +2,6 @@ coverage/ test/ docs/ -patches/ tsconfig.json eslint.config.mjs pnpm-workspace.yaml diff --git a/package.json b/package.json index 8d192f91e..290886fd3 100644 --- a/package.json +++ b/package.json @@ -89,7 +89,7 @@ "old": "node --require ./test/old-node.js ./node_modules/uvu/bin.js -r module test \"\\.test\\.(ts|js)$\"" }, "dependencies": { - "nanoid": "^3.3.12", + "nanoid": "^3.3.16", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" }, diff --git a/patches/yargs@17.7.2.patch b/patches/yargs@17.7.2.patch deleted file mode 100644 index a26866587..000000000 --- a/patches/yargs@17.7.2.patch +++ /dev/null @@ -1,25 +0,0 @@ -diff --git a/browser.d.ts b/browser.d.ts -deleted file mode 100644 -index 21f3fc69190b574ab8456514d3da1972afa53973..0000000000000000000000000000000000000000 -diff --git a/package.json b/package.json -index 389cc6b064b5f888e7f9d718f5440feabdce57ad..c1ae265542ad386fa2214914b0186ade81dd6ee2 100644 ---- a/package.json -+++ b/package.json -@@ -20,13 +20,10 @@ - "import": "./browser.mjs", - "types": "./browser.d.ts" - }, -- "./yargs": [ -- { -- "import": "./yargs.mjs", -- "require": "./yargs" -- }, -- "./yargs" -- ] -+ "./yargs": { -+ "require": "./index.cjs", -+ "import": "./yargs.mjs" -+ } - }, - "type": "module", - "module": "./index.mjs", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9680b1615..743293894 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,16 +4,13 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false -patchedDependencies: - yargs@17.7.2: 34652056801bf0e586b0f2ab1a4f464b352d4d3ce0f5b2d51040d171c31843c3 - importers: .: dependencies: nanoid: - specifier: ^3.3.12 - version: 3.3.12 + specifier: ^3.3.16 + version: 3.3.16 picocolors: specifier: ^1.1.1 version: 1.1.1 @@ -23,7 +20,7 @@ importers: devDependencies: '@logux/eslint-config': specifier: ^57.1.0 - version: 57.1.0(@typescript-eslint/utils@8.59.3(eslint@10.7.0)(typescript@5.9.3))(eslint@10.7.0)(typescript@5.9.3) + version: 57.1.0(@typescript-eslint/utils@8.63.0(eslint@10.7.0)(typescript@5.9.3))(eslint@10.7.0)(typescript@5.9.3) '@logux/oxc-configs': specifier: ^0.4.1 version: 0.4.1(oxlint-tsgolint@0.18.1)(oxlint@1.58.0(oxlint-tsgolint@0.18.1))(typescript@5.9.3) @@ -101,158 +98,158 @@ packages: '@emnapi/wasi-threads@1.2.1': resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==} - '@esbuild/aix-ppc64@0.28.0': - resolution: {integrity: sha512-lhRUCeuOyJQURhTxl4WkpFTjIsbDayJHih5kZC1giwE+MhIzAb7mEsQMqMf18rHLsrb5qI1tafG20mLxEWcWlA==} + '@esbuild/aix-ppc64@0.28.1': + resolution: {integrity: sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.28.0': - resolution: {integrity: sha512-+WzIXQOSaGs33tLEgYPYe/yQHf0WTU0X42Jca3y8NWMbUVhp7rUnw+vAsRC/QiDrdD31IszMrZy+qwPOPjd+rw==} + '@esbuild/android-arm64@0.28.1': + resolution: {integrity: sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg==} engines: {node: '>=18'} cpu: [arm64] os: [android] - '@esbuild/android-arm@0.28.0': - resolution: {integrity: sha512-wqh0ByljabXLKHeWXYLqoJ5jKC4XBaw6Hk08OfMrCRd2nP2ZQ5eleDZC41XHyCNgktBGYMbqnrJKq/K/lzPMSQ==} + '@esbuild/android-arm@0.28.1': + resolution: {integrity: sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ==} engines: {node: '>=18'} cpu: [arm] os: [android] - '@esbuild/android-x64@0.28.0': - resolution: {integrity: sha512-+VJggoaKhk2VNNqVL7f6S189UzShHC/mR9EE8rDdSkdpN0KflSwWY/gWjDrNxxisg8Fp1ZCD9jLMo4m0OUfeUA==} + '@esbuild/android-x64@0.28.1': + resolution: {integrity: sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng==} engines: {node: '>=18'} cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.28.0': - resolution: {integrity: sha512-0T+A9WZm+bZ84nZBtk1ckYsOvyA3x7e2Acj1KdVfV4/2tdG4fzUp91YHx+GArWLtwqp77pBXVCPn2We7Letr0Q==} + '@esbuild/darwin-arm64@0.28.1': + resolution: {integrity: sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.28.0': - resolution: {integrity: sha512-fyzLm/DLDl/84OCfp2f/XQ4flmORsjU7VKt8HLjvIXChJoFFOIL6pLJPH4Yhd1n1gGFF9mPwtlN5Wf82DZs+LQ==} + '@esbuild/darwin-x64@0.28.1': + resolution: {integrity: sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ==} engines: {node: '>=18'} cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.28.0': - resolution: {integrity: sha512-l9GeW5UZBT9k9brBYI+0WDffcRxgHQD8ShN2Ur4xWq/NFzUKm3k5lsH4PdaRgb2w7mI9u61nr2gI2mLI27Nh3Q==} + '@esbuild/freebsd-arm64@0.28.1': + resolution: {integrity: sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.28.0': - resolution: {integrity: sha512-BXoQai/A0wPO6Es3yFJ7APCiKGc1tdAEOgeTNy3SsB491S3aHn4S4r3e976eUnPdU+NbdtmBuLncYir2tMU9Nw==} + '@esbuild/freebsd-x64@0.28.1': + resolution: {integrity: sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.28.0': - resolution: {integrity: sha512-RVyzfb3FWsGA55n6WY0MEIEPURL1FcbhFE6BffZEMEekfCzCIMtB5yyDcFnVbTnwk+CLAgTujmV/Lgvih56W+A==} + '@esbuild/linux-arm64@0.28.1': + resolution: {integrity: sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g==} engines: {node: '>=18'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.28.0': - resolution: {integrity: sha512-CjaaREJagqJp7iTaNQjjidaNbCKYcd4IDkzbwwxtSvjI7NZm79qiHc8HqciMddQ6CKvJT6aBd8lO9kN/ZudLlw==} + '@esbuild/linux-arm@0.28.1': + resolution: {integrity: sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ==} engines: {node: '>=18'} cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.28.0': - resolution: {integrity: sha512-KBnSTt1kxl9x70q+ydterVdl+Cn0H18ngRMRCEQfrbqdUuntQQ0LoMZv47uB97NljZFzY6HcfqEZ2SAyIUTQBQ==} + '@esbuild/linux-ia32@0.28.1': + resolution: {integrity: sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w==} engines: {node: '>=18'} cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.28.0': - resolution: {integrity: sha512-zpSlUce1mnxzgBADvxKXX5sl8aYQHo2ezvMNI8I0lbblJtp8V4odlm3Yzlj7gPyt3T8ReksE6bK+pT3WD+aJRg==} + '@esbuild/linux-loong64@0.28.1': + resolution: {integrity: sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg==} engines: {node: '>=18'} cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.28.0': - resolution: {integrity: sha512-2jIfP6mmjkdmeTlsX/9vmdmhBmKADrWqN7zcdtHIeNSCH1SqIoNI63cYsjQR8J+wGa4Y5izRcSHSm8K3QWmk3w==} + '@esbuild/linux-mips64el@0.28.1': + resolution: {integrity: sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.28.0': - resolution: {integrity: sha512-bc0FE9wWeC0WBm49IQMPSPILRocGTQt3j5KPCA8os6VprfuJ7KD+5PzESSrJ6GmPIPJK965ZJHTUlSA6GNYEhg==} + '@esbuild/linux-ppc64@0.28.1': + resolution: {integrity: sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.28.0': - resolution: {integrity: sha512-SQPZOwoTTT/HXFXQJG/vBX8sOFagGqvZyXcgLA3NhIqcBv1BJU1d46c0rGcrij2B56Z2rNiSLaZOYW5cUk7yLQ==} + '@esbuild/linux-riscv64@0.28.1': + resolution: {integrity: sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.28.0': - resolution: {integrity: sha512-SCfR0HN8CEEjnYnySJTd2cw0k9OHB/YFzt5zgJEwa+wL/T/raGWYMBqwDNAC6dqFKmJYZoQBRfHjgwLHGSrn3Q==} + '@esbuild/linux-s390x@0.28.1': + resolution: {integrity: sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag==} engines: {node: '>=18'} cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.28.0': - resolution: {integrity: sha512-us0dSb9iFxIi8srnpl931Nvs65it/Jd2a2K3qs7fz2WfGPHqzfzZTfec7oxZJRNPXPnNYZtanmRc4AL/JwVzHQ==} + '@esbuild/linux-x64@0.28.1': + resolution: {integrity: sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA==} engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/netbsd-arm64@0.28.0': - resolution: {integrity: sha512-CR/RYotgtCKwtftMwJlUU7xCVNg3lMYZ0RzTmAHSfLCXw3NtZtNpswLEj/Kkf6kEL3Gw+BpOekRX0BYCtklhUw==} + '@esbuild/netbsd-arm64@0.28.1': + resolution: {integrity: sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-x64@0.28.0': - resolution: {integrity: sha512-nU1yhmYutL+fQ71Kxnhg8uEOdC0pwEW9entHykTgEbna2pw2dkbFSMeqjjyHZoCmt8SBkOSvV+yNmm94aUrrqw==} + '@esbuild/netbsd-x64@0.28.1': + resolution: {integrity: sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@esbuild/openbsd-arm64@0.28.0': - resolution: {integrity: sha512-cXb5vApOsRsxsEl4mcZ1XY3D4DzcoMxR/nnc4IyqYs0rTI8ZKmW6kyyg+11Z8yvgMfAEldKzP7AdP64HnSC/6g==} + '@esbuild/openbsd-arm64@0.28.1': + resolution: {integrity: sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.28.0': - resolution: {integrity: sha512-8wZM2qqtv9UP3mzy7HiGYNH/zjTA355mpeuA+859TyR+e+Tc08IHYpLJuMsfpDJwoLo1ikIJI8jC3GFjnRClzA==} + '@esbuild/openbsd-x64@0.28.1': + resolution: {integrity: sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] - '@esbuild/openharmony-arm64@0.28.0': - resolution: {integrity: sha512-FLGfyizszcef5C3YtoyQDACyg95+dndv79i2EekILBofh5wpCa1KuBqOWKrEHZg3zrL3t5ouE5jgr94vA+Wb2w==} + '@esbuild/openharmony-arm64@0.28.1': + resolution: {integrity: sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg==} engines: {node: '>=18'} cpu: [arm64] os: [openharmony] - '@esbuild/sunos-x64@0.28.0': - resolution: {integrity: sha512-1ZgjUoEdHZZl/YlV76TSCz9Hqj9h9YmMGAgAPYd+q4SicWNX3G5GCyx9uhQWSLcbvPW8Ni7lj4gDa1T40akdlw==} + '@esbuild/sunos-x64@0.28.1': + resolution: {integrity: sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ==} engines: {node: '>=18'} cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.28.0': - resolution: {integrity: sha512-Q9StnDmQ/enxnpxCCLSg0oo4+34B9TdXpuyPeTedN/6+iXBJ4J+zwfQI28u/Jl40nOYAxGoNi7mFP40RUtkmUA==} + '@esbuild/win32-arm64@0.28.1': + resolution: {integrity: sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA==} engines: {node: '>=18'} cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.28.0': - resolution: {integrity: sha512-zF3ag/gfiCe6U2iczcRzSYJKH1DCI+ByzSENHlM2FcDbEeo5Zd2C86Aq0tKUYAJJ1obRP84ymxIAksZUcdztHA==} + '@esbuild/win32-ia32@0.28.1': + resolution: {integrity: sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg==} engines: {node: '>=18'} cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.28.0': - resolution: {integrity: sha512-pEl1bO9mfAmIC+tW5btTmrKaujg3zGtUmWNdCw/xs70FBjwAL3o9OEKNHvNmnyylD6ubxUERiEhdsL0xBQ9efw==} + '@esbuild/win32-x64@0.28.1': + resolution: {integrity: sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A==} engines: {node: '>=18'} cpu: [x64] os: [win32] @@ -279,8 +276,8 @@ packages: resolution: {integrity: sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@eslint/eslintrc@3.3.5': - resolution: {integrity: sha512-4IlJx0X0qftVsN5E+/vGujTRIFtwuLbNsVUe7TO6zYPDR1O6nFwvwhIKEKSrl6dZchmYBITazxKoUYOjdtjlRg==} + '@eslint/eslintrc@3.3.6': + resolution: {integrity: sha512-l2Ul9PrHsPCKcEY/ac7VgFj9D80C7S68sOKc618SyHDPK36s1XcFebXY0iTzUVn4Yq+YbwvSnDmCz9yxjX+QrA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/object-schema@3.0.5': @@ -366,8 +363,11 @@ packages: resolution: {integrity: sha512-a7KRD30U252cfIekBGktEIRuwFRT7vOPZXkEsD05DwApsPi70iRnFaHEgMde8tZu+jJUuTDN/xMgabtjzHzXaQ==} engines: {node: ^20.0.0 || >=22.0.0} - '@napi-rs/wasm-runtime@0.2.12': - resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} + '@napi-rs/wasm-runtime@1.1.6': + resolution: {integrity: sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg==} + peerDependencies: + '@emnapi/core': ^1.7.1 + '@emnapi/runtime': ^1.7.1 '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} @@ -655,9 +655,6 @@ packages: cpu: [x64] os: [win32] - '@package-json/types@0.0.12': - resolution: {integrity: sha512-uu43FGU34B5VM9mCNjXCwLaGHYjXdNincqKLaraaCW+7S2+SmiBg1Nv8bPnmschrIfZmfKNY9f3fC376MRrObw==} - '@profoundlogic/hogan@3.0.4': resolution: {integrity: sha512-pmNVGuooS30Mm7YbZd5T7E5zYVO6D5Ct91sn4T39mUvMUc3sCGridcnhAufL1/Bz2QzAtzEn0agNrdk3+5yWzw==} hasBin: true @@ -691,8 +688,8 @@ packages: '@tsconfig/node16@1.0.4': resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} - '@tybys/wasm-util@0.10.2': - resolution: {integrity: sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==} + '@tybys/wasm-util@0.10.3': + resolution: {integrity: sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==} '@types/esrecurse@4.3.1': resolution: {integrity: sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==} @@ -715,165 +712,182 @@ packages: '@types/unist@3.0.3': resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} - '@typescript-eslint/eslint-plugin@8.59.3': - resolution: {integrity: sha512-PwFvSKsXGShKGW6n5bZOhGHEcCZXM8HofLK9fNsEwZXzFRjoY+XT1Vsf1zgyXdwTr0ZYz1/2tkZ0DBTT9jZjhw==} + '@typescript-eslint/eslint-plugin@8.63.0': + resolution: {integrity: sha512-rvwSgqT+DHpWdzfSzPatRLm02a0GlESt++9iy3hLCDY4BgkaLcl8LBi9Yh7XGFBpwcBE/K3024QuXWTpbz4FfQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.59.3 + '@typescript-eslint/parser': ^8.63.0 eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/parser@8.59.3': - resolution: {integrity: sha512-HPwA+hVkfcriajbNvTmZv4VRauibay+cWArYUYq7u7W7PmGShMxbPxLvrwDme55a6d5alG3nrYfhyJ/G28XlLg==} + '@typescript-eslint/parser@8.63.0': + resolution: {integrity: sha512-gwh4gvvlaVDKKxyfxMG+Gnu1u9X0OQBwyGLkbwB65dIzBKnxeRiJlNFqlI3zwVhNXJIs6qV7mlFCn/BIajlVig==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/project-service@8.59.3': - resolution: {integrity: sha512-ECiUWa/KYRGDFUqTNehaRgzDshnJfkTABJxVemHk4ko22gcr0ukloKjWvyQ64g8YCV/UI47kN1dbmjf/GaQYng==} + '@typescript-eslint/project-service@8.63.0': + resolution: {integrity: sha512-e5dh0/UI0ok53AlZ5wRkXCB32z/f2jUZqPR/ygAw5WYaSw8j9EoJWlS7wQjr/dmOaqWjnPIn2m+HhVPCMWGZVQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/scope-manager@8.59.3': - resolution: {integrity: sha512-t2LvZnoEfzKtnPjgeEu41xw5gxq9mQVfYy4OoZ4Vlt0sk3JwxmhCca/AR7DwOiHrjWgjAj6as4AhRLKSDfvZIA==} + '@typescript-eslint/scope-manager@8.63.0': + resolution: {integrity: sha512-uUyfMWCnDSN8bCpcrY8nGP2BLkQ9Xn0GsipcONcpIDWhwhO4ZSyHvyS14U3X75mzxWxL3I2UZIrenTzdzcJO8A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.59.3': - resolution: {integrity: sha512-PcIJHjmaREXLgIAIzLnSY9VucEzz8FKXsRgFa1DmdGCK/5tJpW03TKJF01Q6VZd1lLdz2sIKPWaDUZN9dp//dw==} + '@typescript-eslint/tsconfig-utils@8.63.0': + resolution: {integrity: sha512-sUAbkulqBAsncKnbRP3+7CtQFRKicexnj7ZwNC6ddCR7EmrXvjvdCYMJbUIqMd6lwoEriZjwLo08aS5tSjVMHg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/type-utils@8.59.3': - resolution: {integrity: sha512-g71d8QD8UaiHGvrJwyIS1hCX5r63w6Jll+4VEYhEAHXTDIqX1JgxhTAbEHtKntL9kuc4jRo7/GWw5xfCepSccQ==} + '@typescript-eslint/type-utils@8.63.0': + resolution: {integrity: sha512-Nzzh/OGxVCOjObjaj1CQF2RUasyYy2Jfuh+zZ3PjLzG2fYRriAiZLib9UKtO+CpQAS3YHiAS+ckZDclwqI1TPA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/types@8.59.3': - resolution: {integrity: sha512-ePFoH0g4ludssdRFqqDxQePCxU4WQyRa9+XVwjm7yLn0FKhMeoetC+qBEEI1Eyb1pGSDveTIT09Bvw2WhlGayg==} + '@typescript-eslint/types@8.63.0': + resolution: {integrity: sha512-xyLtl9DUBBFrcJS4x2pIqGLH68/tC2uOa4Z7pUteW09D3bXnnXUom4dyPikzWgB7llmIc1zoeI3aoUdC4rPK/Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.59.3': - resolution: {integrity: sha512-CbRjVRAf7Lr9Kr8RopKcbY45p2VfmmHrm0ygOCYFi7oU8q19m0Fs/6iHS7kNOmwpp+ob07ZVcAqlxUod9lYdmg==} + '@typescript-eslint/typescript-estree@8.63.0': + resolution: {integrity: sha512-ygBkU+B7ex5UI/gKhaqexWev79uISfIv7XQCRNYO/jmD8rGLPyWLAb3KMRT6nd8Gt9bmUBi9+iX6tBdYfOY81Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/utils@8.59.3': - resolution: {integrity: sha512-JAvT14goBzRzzzZyqq3P9BLArIxTtQURUtFgQ/V7FO+eU+Gg6ES+5ymOPP1wRxXcxAYeivCk4uS3jCKWI1K8Zg==} + '@typescript-eslint/utils@8.63.0': + resolution: {integrity: sha512-fUKaeAvrTuQg/Tgt3nliAUSZHJM6DlCcfyEmxCvlX8kieWSStBX+5O5Fnidtc3i2JrH+9c/GL4RY2iasd/GPTA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/visitor-keys@8.59.3': - resolution: {integrity: sha512-f1UQF7ggd42YiwI5wGrRaPsa+P0CINBlrkLPmGfpq/u/I/oVtecoEIfFR9ag/oa1sLOsRNZ6xehf6qMZhQGBDg==} + '@typescript-eslint/visitor-keys@8.63.0': + resolution: {integrity: sha512-UexrHGnGTpbuQHct2ExOc2ZcFbGUS9FOesCxxqdBGcpI1BxYu/LZ6U8Aq6/72XtF/qRBk9nhuGHFJIXXMhPMdw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@unrs/resolver-binding-android-arm-eabi@1.11.1': - resolution: {integrity: sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==} + '@unrs/resolver-binding-android-arm-eabi@1.12.2': + resolution: {integrity: sha512-g5T90pqg1bo/7mytQx6F4iBNC0Wsh9cu+z9veDbFjc7HjpesJFWD7QMS0NGStXM075+7dJPPVvBbpZlnrdpi/w==} cpu: [arm] os: [android] - '@unrs/resolver-binding-android-arm64@1.11.1': - resolution: {integrity: sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==} + '@unrs/resolver-binding-android-arm64@1.12.2': + resolution: {integrity: sha512-YGCRZv/9GLhwmz6mYDeTsm/92BAyR28l6c2ReweVW5pWgfsitWLY8upvfRlGdoyD8HjeTHSYJWyZGD4KJA/nFQ==} cpu: [arm64] os: [android] - '@unrs/resolver-binding-darwin-arm64@1.11.1': - resolution: {integrity: sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==} + '@unrs/resolver-binding-darwin-arm64@1.12.2': + resolution: {integrity: sha512-u9DiNT1auQMO20A9SyTuG3wUgQWB9Z7KjAg0uFuCDR1FsAY8A0CG2S6JpHS1xwm/w1G08bjXZDcyOCjv1WAm2w==} cpu: [arm64] os: [darwin] - '@unrs/resolver-binding-darwin-x64@1.11.1': - resolution: {integrity: sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==} + '@unrs/resolver-binding-darwin-x64@1.12.2': + resolution: {integrity: sha512-f7rPLi/T1HVKZu/u6t87lroib16n8vrSzcyxI7lg4BGO9UF26KhQL44sd9eOUgrTYhvRXtWOIZT5PejdPyJfUA==} cpu: [x64] os: [darwin] - '@unrs/resolver-binding-freebsd-x64@1.11.1': - resolution: {integrity: sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==} + '@unrs/resolver-binding-freebsd-x64@1.12.2': + resolution: {integrity: sha512-BpcOjWCJub6nRZUS2zA20pmLvjtqAtGejETaIyRLiZiQf++cbrjltLA5NN/xaXfqeOBOSlMFbemIl5/S5tljmg==} cpu: [x64] os: [freebsd] - '@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1': - resolution: {integrity: sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==} + '@unrs/resolver-binding-linux-arm-gnueabihf@1.12.2': + resolution: {integrity: sha512-vZTDvdSISZjJx66OzJqtsOhzifbqRjbmI1Mnu49fQDwog5GtDI4QidRiEAYbZCRj9C8YZEW+3ZjqsyS9GR4k2A==} cpu: [arm] os: [linux] - '@unrs/resolver-binding-linux-arm-musleabihf@1.11.1': - resolution: {integrity: sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==} + '@unrs/resolver-binding-linux-arm-musleabihf@1.12.2': + resolution: {integrity: sha512-BiPI+IrIlwcW4nLLMM21+B1dFPzd55yAVgVGrdgDjNef+ch03GdxrcyaIz8X9SsQirh/kCQ7mviyWlMxdh2D7g==} cpu: [arm] os: [linux] - '@unrs/resolver-binding-linux-arm64-gnu@1.11.1': - resolution: {integrity: sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==} + '@unrs/resolver-binding-linux-arm64-gnu@1.12.2': + resolution: {integrity: sha512-zJc0H99FEPoFfSrNpa91HYfxzfAJCr502oxNK1cfdC9hlaFI43RT+JFCann9JUgZmLzzntChHyn13Sgn9ljHNg==} cpu: [arm64] os: [linux] libc: [glibc] - '@unrs/resolver-binding-linux-arm64-musl@1.11.1': - resolution: {integrity: sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==} + '@unrs/resolver-binding-linux-arm64-musl@1.12.2': + resolution: {integrity: sha512-KQ3Lki6l+Pz1k/eBipN41ES+YUK30beLGb9YqcB1O542cyLCNE6GaxrfcY3T6EezmGGk84wb5XyO9loTM9tkcA==} cpu: [arm64] os: [linux] libc: [musl] - '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1': - resolution: {integrity: sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==} + '@unrs/resolver-binding-linux-loong64-gnu@1.12.2': + resolution: {integrity: sha512-3SJGEh1DborhG6pyxvhPzCT4bbSIVihsvgJc13P1bHG7KLdNDaF9T3gsTwFc7Jw/5Y5/iWOjkEx7Zy0NvCGX3Q==} + cpu: [loong64] + os: [linux] + libc: [glibc] + + '@unrs/resolver-binding-linux-loong64-musl@1.12.2': + resolution: {integrity: sha512-jiuG/Obbel7uw1PwHNFfrkiKhLAF6mnyZ6aWlOAVN9WqKm8v0OFGnciJIHu8+CMvXLQ8AD51LPzAoUfT21D5Ew==} + cpu: [loong64] + os: [linux] + libc: [musl] + + '@unrs/resolver-binding-linux-ppc64-gnu@1.12.2': + resolution: {integrity: sha512-q7xRvVpmcfeL+LlZg8Pbbo6QaTZwDU5BaGZbwfhkEsXJn3Was8xYfE0RBH266xZt0rM6B7i8xAYIvjthuUIWHg==} cpu: [ppc64] os: [linux] libc: [glibc] - '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1': - resolution: {integrity: sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==} + '@unrs/resolver-binding-linux-riscv64-gnu@1.12.2': + resolution: {integrity: sha512-0CVdx6lcnT3Q9inOH8tsMIOJ6ImndllMjqJHg8RLVdB7Vq4SfkEXl9mCSsVNuNA4MCYycRicCUxPCabVHJRr6A==} cpu: [riscv64] os: [linux] libc: [glibc] - '@unrs/resolver-binding-linux-riscv64-musl@1.11.1': - resolution: {integrity: sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==} + '@unrs/resolver-binding-linux-riscv64-musl@1.12.2': + resolution: {integrity: sha512-iOwlRo9vnp6R6ohHQS11n0NnfdXx/omhkocmIfaPRpQhKZ+3BDMkkdRVh53qjkFkpPddf+FETA28NwGN7l5l+w==} cpu: [riscv64] os: [linux] libc: [musl] - '@unrs/resolver-binding-linux-s390x-gnu@1.11.1': - resolution: {integrity: sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==} + '@unrs/resolver-binding-linux-s390x-gnu@1.12.2': + resolution: {integrity: sha512-HYJtLfXq94q8iZNFT1lknx258wlkkWhZeUXJRqzKBBUJ00CvZ+N33zgbCqimLjsyw5Va6uUxhVa12mI+kaveEw==} cpu: [s390x] os: [linux] libc: [glibc] - '@unrs/resolver-binding-linux-x64-gnu@1.11.1': - resolution: {integrity: sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==} + '@unrs/resolver-binding-linux-x64-gnu@1.12.2': + resolution: {integrity: sha512-mPsUhunKKDih5O96Y6enDQyHc1SqBPlY1E/SfMWDM3EdJ95Z9CArPeCVwCCqbP45ljvivdEk8Fxn+SIb1rDAJQ==} cpu: [x64] os: [linux] libc: [glibc] - '@unrs/resolver-binding-linux-x64-musl@1.11.1': - resolution: {integrity: sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==} + '@unrs/resolver-binding-linux-x64-musl@1.12.2': + resolution: {integrity: sha512-azrt6+5ydLd8Vt210AAFis/lZevSfPw93EJRIJG+xPu4WCJ8K0kppCTpMyLPcKT7H15M4Jnt2tMp5bOvCkRC6A==} cpu: [x64] os: [linux] libc: [musl] - '@unrs/resolver-binding-wasm32-wasi@1.11.1': - resolution: {integrity: sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==} + '@unrs/resolver-binding-openharmony-arm64@1.12.2': + resolution: {integrity: sha512-YZ9hP4O0X9PQb8eO980qmLNGH4zT3I9+SZTdt0Pr0YyuGQhYKoOZkV02VzrzyOZJ5xIJ3UFIenKkUkGg8GjgWQ==} + cpu: [arm64] + os: [openharmony] + + '@unrs/resolver-binding-wasm32-wasi@1.12.2': + resolution: {integrity: sha512-tYFDIkMxSflfEc/h92ZWNsZlHSwgimbNHSO3PL2JWQHfCuC2q316jMyYU9TIWZsFK2bQwyK5VAdYgn8ygPj69A==} engines: {node: '>=14.0.0'} cpu: [wasm32] - '@unrs/resolver-binding-win32-arm64-msvc@1.11.1': - resolution: {integrity: sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==} + '@unrs/resolver-binding-win32-arm64-msvc@1.12.2': + resolution: {integrity: sha512-qzNyg3xL0VPQmCaUh+N5jSitce6k+uCBfMDesWRnlULOZaqUkaJ0ybdT+UqlAWJoQjuqfIU/0Ptx9bteN4D82g==} cpu: [arm64] os: [win32] - '@unrs/resolver-binding-win32-ia32-msvc@1.11.1': - resolution: {integrity: sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==} + '@unrs/resolver-binding-win32-ia32-msvc@1.12.2': + resolution: {integrity: sha512-WD9sY00OfpHVGfsnHZoA8jVT+esS/Bg8z8jzxp5BnDCjjwsuKsPQrzswwpFy4J1AUJbXPRfkpcX0mXrzeXW79g==} cpu: [ia32] os: [win32] - '@unrs/resolver-binding-win32-x64-msvc@1.11.1': - resolution: {integrity: sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==} + '@unrs/resolver-binding-win32-x64-msvc@1.12.2': + resolution: {integrity: sha512-nAB74NfSNKknqQ1RrYj6uz8FcXEomu/MATJZxh/x+BArzN2U3JbOYC0APYzUIGhVY3m5hRxA8VPNdPBoG8txlA==} cpu: [x64] os: [win32] @@ -889,11 +903,6 @@ packages: resolution: {integrity: sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw==} engines: {node: '>=0.4.0'} - acorn@8.16.0: - resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==} - engines: {node: '>=0.4.0'} - hasBin: true - acorn@8.17.0: resolution: {integrity: sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==} engines: {node: '>=0.4.0'} @@ -932,8 +941,8 @@ packages: resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} engines: {node: 18 || 20 || >=22} - brace-expansion@1.1.14: - resolution: {integrity: sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==} + brace-expansion@1.1.16: + resolution: {integrity: sha512-IDw48K2/2kRkg9LdJxurvq3lV3aBgq0REY89duEqFRthjlPdXHKMj7EnQOXVckxzgisinf3nHfrcE2FufFLXMw==} brace-expansion@5.0.7: resolution: {integrity: sha512-7oFy703dxfY3/NLxC1fh2SUCQ0H9rmAY+5EpDVfXjUTTs+HEwR2nYaqLv+GWcTsumwxPfiz6CzCNkwXwBUwqCA==} @@ -979,8 +988,8 @@ packages: color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - comment-parser@1.4.6: - resolution: {integrity: sha512-ObxuY6vnbWTN6Od72xfwN9DbzC7Y2vv8u1Soi9ahRKL37gb6y1qk6/dgjs+3JWuXJHWvsg3BXIwzd/rkmAwavg==} + comment-parser@1.4.7: + resolution: {integrity: sha512-0h+uSNtQGW3D98eQt3jJ8L06Fves8hncB4V/PKdw/Qb8Hnk19VaKuTr55UNRYiSoVa7WwrFls+rh3ux9agmkeQ==} engines: {node: '>= 12.0.0'} concat-map@0.0.1: @@ -1035,22 +1044,22 @@ packages: resolution: {integrity: sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw==} engines: {node: '>=0.3.1'} - dompurify@3.4.5: - resolution: {integrity: sha512-OrwIBKsdNSVEeubdJ1HBv/wNENRM9ytAVCv7YXt//A3vPdVMNuACRqK9mXCGCBW2ln7BT/A4X0jXHo2Gu89miA==} + dompurify@3.4.12: + resolution: {integrity: sha512-zQvGet8Z2sWbQhCmfFz/T5QWH2oBmjnqK3qvOjaqaNLrLEF912WamU+ohnTp0TCep/MFVHpdJuCZEdFOdTnEFg==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - enhanced-resolve@5.21.3: - resolution: {integrity: sha512-QyL119InA+XXEkNLNTPCXPugSvOfhwv0JOlGNzvxs0hZaiHLNvXSpudUWsOlsXGWJh8G6ckCScEkVHfX3kw/2Q==} + enhanced-resolve@5.24.2: + resolution: {integrity: sha512-rpsZEGT1jFuve6QlpyRp9ckQ+kN61hvF9BzCPyMdaKTm8UJce96KBn3sorXOFXlzjPrs3Vc4T1NsSroZ3PxlFw==} engines: {node: '>=10.13.0'} enquirer@2.4.1: resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} engines: {node: '>=8.6'} - esbuild@0.28.0: - resolution: {integrity: sha512-sNR9MHpXSUV/XB4zmsFKN+QgVG82Cc7+/aaxJ8Adi8hyOac+EXptIp45QBPaVyX3N70664wRbTcLTOemCAnyqw==} + esbuild@0.28.1: + resolution: {integrity: sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==} engines: {node: '>=18'} hasBin: true @@ -1083,8 +1092,8 @@ packages: peerDependencies: eslint: '>=8' - eslint-plugin-import-x@4.16.2: - resolution: {integrity: sha512-rM9K8UBHcWKpzQzStn1YRN2T5NvdeIfSVoKu/lKF41znQXHAUcBbYXe5wd6GNjZjTrP7viQ49n1D83x/2gYgIw==} + eslint-plugin-import-x@4.17.1: + resolution: {integrity: sha512-4cdstYkKCyjumM2Q9NSI03K8D2a9F4Ssz33K2lv2hQa4KmR9jPLwk3uWGtNvclfqBrPGfGuMBwsGMbe6dMRbfg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: '@typescript-eslint/utils': ^8.56.0 @@ -1102,8 +1111,8 @@ packages: peerDependencies: eslint: '>=8.23.0' - eslint-plugin-perfectionist@5.9.0: - resolution: {integrity: sha512-8TWzg02zmnBdZwCkWLi8jhzqXI+fE7Z/RwV8SL6xD45tJ8Bp3wGuYL2XtQgfe/Wd0eBqOUX+s6ey73IyszvKTA==} + eslint-plugin-perfectionist@5.10.0: + resolution: {integrity: sha512-HiqpDrUDbGrMC6iHQbemgDyHJ0366Vyz/qRWmxQcSAkmG25cXr8BdRgx8yAhOKhEfBXn8Rnf/mTCsV4EqUJSxg==} engines: {node: ^20.0.0 || >=22.0.0} peerDependencies: eslint: ^8.45.0 || ^9.0.0 || ^10.0.0 @@ -1237,8 +1246,8 @@ packages: resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==} engines: {node: '>=18'} - globals@17.6.0: - resolution: {integrity: sha512-sepffkT8stwnIYbsMBpoCHJuJM5l98FUF2AnE07hfvE0m/qp3R586hw4jF4uadbhvg1ooIdzuu7CsfD2jzCaNA==} + globals@17.7.0: + resolution: {integrity: sha512-Czmyns5dUsq4seFBR/Kdydhmo8y9kC79hiSkPn0YcGtNnYWnrgt0vjrSjx9tspoDGWm2CMarffRuLjM4xUz8xg==} engines: {node: '>=18'} globrex@0.1.2: @@ -1262,8 +1271,8 @@ packages: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} - ignore@7.0.5: - resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} + ignore@7.0.6: + resolution: {integrity: sha512-BAg6QkE8W+TuQLrrw0Ugr7HegXduRuuj8/ti2kSOc+jz1dmx8/WNcjr6XGnq5YpDWxFwwaavqD0+jIUOKelTsw==} engines: {node: '>= 4'} import-fresh@3.3.1: @@ -1305,8 +1314,8 @@ packages: resolution: {integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==} engines: {node: '>=8'} - js-yaml@4.1.1: - resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} + js-yaml@4.3.0: + resolution: {integrity: sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q==} hasBin: true json-buffer@3.0.1: @@ -1337,8 +1346,8 @@ packages: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} - lru-cache@11.4.0: - resolution: {integrity: sha512-W+R+kFL4HgVxONq2bhXPi3bGpzGe/yEhVOp233qw9wCRtgncJ15P3bC+e4zZMu4Cq7d+WAJjXGW0uUkifhcatA==} + lru-cache@11.5.2: + resolution: {integrity: sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g==} engines: {node: 20 || >=22} make-dir@4.0.0: @@ -1348,8 +1357,8 @@ packages: make-error@1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - marked@18.0.3: - resolution: {integrity: sha512-7VT90JOkDeaRWpfjOReRGPEKn0ecdARBkDGL+tT1wZY0efPPqkUxLUSmzy/C7TIylQYJC9STISEsCHrqb/7VIA==} + marked@18.0.6: + resolution: {integrity: sha512-MrV5puXBfuiy6wl6DLaq3BtIJQAJToAd5zt/ZKhRfGRAuFPALE7/4Y7jnxRQoEgK/pBgurGqLyAuRgZ2xOjr6w==} engines: {node: '>= 20'} hasBin: true @@ -1391,13 +1400,13 @@ packages: resolution: {integrity: sha512-Jd0fILWG44a9luj8v5kED4WI+zfkkgwKyRQKItTtlPfEsh7Lznfi1kr8/iZ+XAIss4Qq5GqRB0qtWbaz9ceO/A==} engines: {node: ^18.0.0 || >=20.0.0} - nanoid@3.3.12: - resolution: {integrity: sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==} + nanoid@3.3.16: + resolution: {integrity: sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - nanoid@5.1.11: - resolution: {integrity: sha512-v+KEsUv2ps74PaSKv0gHTxTCgMXOIfBEbaqa6w6ISIGC7ZsvHN4N9oJ8d4cmf0n5oTzQz2SLmThbQWhjd/8eKg==} + nanoid@5.1.16: + resolution: {integrity: sha512-kVrnsrJqMR8+oLJnGEmSWw9BivK5mt7H3FZatVRjrc5wGqFYuBxX1yG7+A7Gi5AefkX6t/oCkizcQgpu0cY1dQ==} engines: {node: ^18 || >=20} hasBin: true @@ -1408,8 +1417,8 @@ packages: resolution: {integrity: sha512-AvkslkHQavd4abp7clE0xsv4afGpBpnWUqWY23V3o4ljdyi/YIOpLiiWtrlLh1oR7kWC4GT7iBN5M2SjL5I5yw==} engines: {node: ^8.0.0 || ^10.0.0 || ^12.0.0 || ^14.0.0 || ^16.0.0 || ^18.0.0 || ^20.0.0 || ^22.0.0 || ^24.0.0 || >=26.0.0} - nanostores@1.3.0: - resolution: {integrity: sha512-XPUa/jz+P1oJvN9VBxw4L9MtdFfaH3DAryqPssqhb2kXjmb9npz0dly6rCsgFWOPr4Yg9mTfM3MDZgZZ+7A3lA==} + nanostores@1.4.0: + resolution: {integrity: sha512-i0tloweeudshAEuddpDxcg9Ik6pkPfVsHIgKyf143JrgG7/MOh0+q7BypdLXZPoOP7fOYt1eTcwGkyiVmhJFkA==} engines: {node: ^20.0.0 || >=22.0.0} napi-postinstall@0.3.4: @@ -1490,8 +1499,8 @@ packages: resolution: {integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==} engines: {node: '>=8.6'} - picomatch@4.0.4: - resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} + picomatch@4.0.5: + resolution: {integrity: sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==} engines: {node: '>=12'} postcss-parser-tests@8.9.0: @@ -1601,10 +1610,6 @@ packages: resolution: {integrity: sha512-ZOffsNrXYggvU1mDGHk54I96r26P8SyMjO5slMKSc7+IWmtB/MQKnEC2fP51imB3/pT6YK5cT5E8f+Dd9KdyOQ==} engines: {node: 20 || >=22} - tinyglobby@0.2.16: - resolution: {integrity: sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==} - engines: {node: '>=12.0.0'} - tinyglobby@0.2.17: resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} engines: {node: '>=12.0.0'} @@ -1649,8 +1654,8 @@ packages: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} - typescript-eslint@8.59.3: - resolution: {integrity: sha512-KgusgyDgG4LI8Ih/sWaCtZ06tckLAS5CvT5A4D1Q7bYVoAAyzwiZvE4BmwDHkhRVkvhRBepKeASoFzQetha7Fg==} + typescript-eslint@8.63.0: + resolution: {integrity: sha512-xgwXyzG4sK9ALkBxbyGkTMMOS+imnW65iPhxCQMK83KhxyoDNW7l+IDqEf9vMdoUidHpOoS967RCq4eMiTexwQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 @@ -1667,8 +1672,8 @@ packages: unist-util-stringify-position@4.0.0: resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} - unrs-resolver@1.11.1: - resolution: {integrity: sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==} + unrs-resolver@1.12.2: + resolution: {integrity: sha512-dmlRxBJJayXjqTwC+JtF1HhJmgf3ftQ3YejFcZrf4+KKtJv0qDsK1pjqaaVjG7wJ5NJ6UVP1OqRMQ71Z4C3rxQ==} uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} @@ -1711,8 +1716,8 @@ packages: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} - ws@8.20.1: - resolution: {integrity: sha512-It4dO0K5v//JtTXuPkfEOaI3uUN87iYPnqo/ZzqCoG3g8uhA66QUMs/SrM0YK7/NAu+r4LMh/9dq2A7k+rHs+w==} + ws@8.21.0: + resolution: {integrity: sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -1736,8 +1741,8 @@ packages: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} - yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + yargs@17.7.3: + resolution: {integrity: sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g==} engines: {node: '>=12'} yn@3.1.1: @@ -1772,82 +1777,82 @@ snapshots: tslib: 2.8.1 optional: true - '@esbuild/aix-ppc64@0.28.0': + '@esbuild/aix-ppc64@0.28.1': optional: true - '@esbuild/android-arm64@0.28.0': + '@esbuild/android-arm64@0.28.1': optional: true - '@esbuild/android-arm@0.28.0': + '@esbuild/android-arm@0.28.1': optional: true - '@esbuild/android-x64@0.28.0': + '@esbuild/android-x64@0.28.1': optional: true - '@esbuild/darwin-arm64@0.28.0': + '@esbuild/darwin-arm64@0.28.1': optional: true - '@esbuild/darwin-x64@0.28.0': + '@esbuild/darwin-x64@0.28.1': optional: true - '@esbuild/freebsd-arm64@0.28.0': + '@esbuild/freebsd-arm64@0.28.1': optional: true - '@esbuild/freebsd-x64@0.28.0': + '@esbuild/freebsd-x64@0.28.1': optional: true - '@esbuild/linux-arm64@0.28.0': + '@esbuild/linux-arm64@0.28.1': optional: true - '@esbuild/linux-arm@0.28.0': + '@esbuild/linux-arm@0.28.1': optional: true - '@esbuild/linux-ia32@0.28.0': + '@esbuild/linux-ia32@0.28.1': optional: true - '@esbuild/linux-loong64@0.28.0': + '@esbuild/linux-loong64@0.28.1': optional: true - '@esbuild/linux-mips64el@0.28.0': + '@esbuild/linux-mips64el@0.28.1': optional: true - '@esbuild/linux-ppc64@0.28.0': + '@esbuild/linux-ppc64@0.28.1': optional: true - '@esbuild/linux-riscv64@0.28.0': + '@esbuild/linux-riscv64@0.28.1': optional: true - '@esbuild/linux-s390x@0.28.0': + '@esbuild/linux-s390x@0.28.1': optional: true - '@esbuild/linux-x64@0.28.0': + '@esbuild/linux-x64@0.28.1': optional: true - '@esbuild/netbsd-arm64@0.28.0': + '@esbuild/netbsd-arm64@0.28.1': optional: true - '@esbuild/netbsd-x64@0.28.0': + '@esbuild/netbsd-x64@0.28.1': optional: true - '@esbuild/openbsd-arm64@0.28.0': + '@esbuild/openbsd-arm64@0.28.1': optional: true - '@esbuild/openbsd-x64@0.28.0': + '@esbuild/openbsd-x64@0.28.1': optional: true - '@esbuild/openharmony-arm64@0.28.0': + '@esbuild/openharmony-arm64@0.28.1': optional: true - '@esbuild/sunos-x64@0.28.0': + '@esbuild/sunos-x64@0.28.1': optional: true - '@esbuild/win32-arm64@0.28.0': + '@esbuild/win32-arm64@0.28.1': optional: true - '@esbuild/win32-ia32@0.28.0': + '@esbuild/win32-ia32@0.28.1': optional: true - '@esbuild/win32-x64@0.28.0': + '@esbuild/win32-x64@0.28.1': optional: true '@eslint-community/eslint-utils@4.9.1(eslint@10.7.0)': @@ -1873,7 +1878,7 @@ snapshots: dependencies: '@types/json-schema': 7.0.15 - '@eslint/eslintrc@3.3.5': + '@eslint/eslintrc@3.3.6': dependencies: ajv: 6.15.0 debug: 4.4.3 @@ -1881,7 +1886,7 @@ snapshots: globals: 14.0.0 ignore: 5.3.2 import-fresh: 3.3.1 - js-yaml: 4.1.1 + js-yaml: 4.3.0 minimatch: 3.1.5 strip-json-comments: 3.1.1 transitivePeerDependencies: @@ -1934,16 +1939,16 @@ snapshots: dependencies: nanoevents: 9.1.0 - '@logux/eslint-config@57.1.0(@typescript-eslint/utils@8.59.3(eslint@10.7.0)(typescript@5.9.3))(eslint@10.7.0)(typescript@5.9.3)': + '@logux/eslint-config@57.1.0(@typescript-eslint/utils@8.63.0(eslint@10.7.0)(typescript@5.9.3))(eslint@10.7.0)(typescript@5.9.3)': dependencies: - '@eslint/eslintrc': 3.3.5 + '@eslint/eslintrc': 3.3.6 eslint: 10.7.0 - eslint-plugin-import-x: 4.16.2(@typescript-eslint/utils@8.59.3(eslint@10.7.0)(typescript@5.9.3))(eslint@10.7.0) + eslint-plugin-import-x: 4.17.1(@typescript-eslint/utils@8.63.0(eslint@10.7.0)(typescript@5.9.3))(eslint@10.7.0) eslint-plugin-n: 17.24.0(eslint@10.7.0)(typescript@5.9.3) - eslint-plugin-perfectionist: 5.9.0(eslint@10.7.0)(typescript@5.9.3) + eslint-plugin-perfectionist: 5.10.0(eslint@10.7.0)(typescript@5.9.3) eslint-plugin-prefer-let: 4.2.2 - globals: 17.6.0 - typescript-eslint: 8.59.3(eslint@10.7.0)(typescript@5.9.3) + globals: 17.7.0 + typescript-eslint: 8.63.0(eslint@10.7.0)(typescript@5.9.3) transitivePeerDependencies: - '@typescript-eslint/utils' - eslint-import-resolver-node @@ -1964,19 +1969,19 @@ snapshots: cookie: 1.1.1 fastq: 1.20.1 nanoevents: 9.1.0 - nanoid: 5.1.11 - tinyglobby: 0.2.16 + nanoid: 5.1.16 + tinyglobby: 0.2.17 url-pattern: 1.0.3 - ws: 8.20.1 + ws: 8.21.0 transitivePeerDependencies: - bufferutil - utf-8-validate - '@napi-rs/wasm-runtime@0.2.12': + '@napi-rs/wasm-runtime@1.1.6(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': dependencies: '@emnapi/core': 1.10.0 '@emnapi/runtime': 1.10.0 - '@tybys/wasm-util': 0.10.2 + '@tybys/wasm-util': 0.10.3 optional: true '@nodelib/fs.scandir@2.1.5': @@ -2123,16 +2128,14 @@ snapshots: '@oxlint/binding-win32-x64-msvc@1.58.0': optional: true - '@package-json/types@0.0.12': {} - '@profoundlogic/hogan@3.0.4': dependencies: nopt: 1.0.10 '@size-limit/esbuild@12.1.0(size-limit@12.1.0)': dependencies: - esbuild: 0.28.0 - nanoid: 5.1.11 + esbuild: 0.28.1 + nanoid: 5.1.16 size-limit: 12.1.0 '@size-limit/file@12.1.0(size-limit@12.1.0)': @@ -2153,7 +2156,7 @@ snapshots: '@tsconfig/node16@1.0.4': {} - '@tybys/wasm-util@0.10.2': + '@tybys/wasm-util@0.10.3': dependencies: tslib: 2.8.1 optional: true @@ -2175,57 +2178,57 @@ snapshots: '@types/unist@3.0.3': {} - '@typescript-eslint/eslint-plugin@8.59.3(@typescript-eslint/parser@8.59.3(eslint@10.7.0)(typescript@5.9.3))(eslint@10.7.0)(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.63.0(@typescript-eslint/parser@8.63.0(eslint@10.7.0)(typescript@5.9.3))(eslint@10.7.0)(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.59.3(eslint@10.7.0)(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.59.3 - '@typescript-eslint/type-utils': 8.59.3(eslint@10.7.0)(typescript@5.9.3) - '@typescript-eslint/utils': 8.59.3(eslint@10.7.0)(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.59.3 + '@typescript-eslint/parser': 8.63.0(eslint@10.7.0)(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.63.0 + '@typescript-eslint/type-utils': 8.63.0(eslint@10.7.0)(typescript@5.9.3) + '@typescript-eslint/utils': 8.63.0(eslint@10.7.0)(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.63.0 eslint: 10.7.0 - ignore: 7.0.5 + ignore: 7.0.6 natural-compare: 1.4.0 ts-api-utils: 2.5.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.59.3(eslint@10.7.0)(typescript@5.9.3)': + '@typescript-eslint/parser@8.63.0(eslint@10.7.0)(typescript@5.9.3)': dependencies: - '@typescript-eslint/scope-manager': 8.59.3 - '@typescript-eslint/types': 8.59.3 - '@typescript-eslint/typescript-estree': 8.59.3(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.59.3 + '@typescript-eslint/scope-manager': 8.63.0 + '@typescript-eslint/types': 8.63.0 + '@typescript-eslint/typescript-estree': 8.63.0(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.63.0 debug: 4.4.3 eslint: 10.7.0 typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.59.3(typescript@5.9.3)': + '@typescript-eslint/project-service@8.63.0(typescript@5.9.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.59.3(typescript@5.9.3) - '@typescript-eslint/types': 8.59.3 + '@typescript-eslint/tsconfig-utils': 8.63.0(typescript@5.9.3) + '@typescript-eslint/types': 8.63.0 debug: 4.4.3 typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.59.3': + '@typescript-eslint/scope-manager@8.63.0': dependencies: - '@typescript-eslint/types': 8.59.3 - '@typescript-eslint/visitor-keys': 8.59.3 + '@typescript-eslint/types': 8.63.0 + '@typescript-eslint/visitor-keys': 8.63.0 - '@typescript-eslint/tsconfig-utils@8.59.3(typescript@5.9.3)': + '@typescript-eslint/tsconfig-utils@8.63.0(typescript@5.9.3)': dependencies: typescript: 5.9.3 - '@typescript-eslint/type-utils@8.59.3(eslint@10.7.0)(typescript@5.9.3)': + '@typescript-eslint/type-utils@8.63.0(eslint@10.7.0)(typescript@5.9.3)': dependencies: - '@typescript-eslint/types': 8.59.3 - '@typescript-eslint/typescript-estree': 8.59.3(typescript@5.9.3) - '@typescript-eslint/utils': 8.59.3(eslint@10.7.0)(typescript@5.9.3) + '@typescript-eslint/types': 8.63.0 + '@typescript-eslint/typescript-estree': 8.63.0(typescript@5.9.3) + '@typescript-eslint/utils': 8.63.0(eslint@10.7.0)(typescript@5.9.3) debug: 4.4.3 eslint: 10.7.0 ts-api-utils: 2.5.0(typescript@5.9.3) @@ -2233,14 +2236,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.59.3': {} + '@typescript-eslint/types@8.63.0': {} - '@typescript-eslint/typescript-estree@8.59.3(typescript@5.9.3)': + '@typescript-eslint/typescript-estree@8.63.0(typescript@5.9.3)': dependencies: - '@typescript-eslint/project-service': 8.59.3(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.59.3(typescript@5.9.3) - '@typescript-eslint/types': 8.59.3 - '@typescript-eslint/visitor-keys': 8.59.3 + '@typescript-eslint/project-service': 8.63.0(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.63.0(typescript@5.9.3) + '@typescript-eslint/types': 8.63.0 + '@typescript-eslint/visitor-keys': 8.63.0 debug: 4.4.3 minimatch: 10.2.5 semver: 7.8.5 @@ -2250,96 +2253,101 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.59.3(eslint@10.7.0)(typescript@5.9.3)': + '@typescript-eslint/utils@8.63.0(eslint@10.7.0)(typescript@5.9.3)': dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@10.7.0) - '@typescript-eslint/scope-manager': 8.59.3 - '@typescript-eslint/types': 8.59.3 - '@typescript-eslint/typescript-estree': 8.59.3(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.63.0 + '@typescript-eslint/types': 8.63.0 + '@typescript-eslint/typescript-estree': 8.63.0(typescript@5.9.3) eslint: 10.7.0 typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.59.3': + '@typescript-eslint/visitor-keys@8.63.0': dependencies: - '@typescript-eslint/types': 8.59.3 + '@typescript-eslint/types': 8.63.0 eslint-visitor-keys: 5.0.1 - '@unrs/resolver-binding-android-arm-eabi@1.11.1': + '@unrs/resolver-binding-android-arm-eabi@1.12.2': + optional: true + + '@unrs/resolver-binding-android-arm64@1.12.2': + optional: true + + '@unrs/resolver-binding-darwin-arm64@1.12.2': optional: true - '@unrs/resolver-binding-android-arm64@1.11.1': + '@unrs/resolver-binding-darwin-x64@1.12.2': optional: true - '@unrs/resolver-binding-darwin-arm64@1.11.1': + '@unrs/resolver-binding-freebsd-x64@1.12.2': optional: true - '@unrs/resolver-binding-darwin-x64@1.11.1': + '@unrs/resolver-binding-linux-arm-gnueabihf@1.12.2': optional: true - '@unrs/resolver-binding-freebsd-x64@1.11.1': + '@unrs/resolver-binding-linux-arm-musleabihf@1.12.2': optional: true - '@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1': + '@unrs/resolver-binding-linux-arm64-gnu@1.12.2': optional: true - '@unrs/resolver-binding-linux-arm-musleabihf@1.11.1': + '@unrs/resolver-binding-linux-arm64-musl@1.12.2': optional: true - '@unrs/resolver-binding-linux-arm64-gnu@1.11.1': + '@unrs/resolver-binding-linux-loong64-gnu@1.12.2': optional: true - '@unrs/resolver-binding-linux-arm64-musl@1.11.1': + '@unrs/resolver-binding-linux-loong64-musl@1.12.2': optional: true - '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1': + '@unrs/resolver-binding-linux-ppc64-gnu@1.12.2': optional: true - '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1': + '@unrs/resolver-binding-linux-riscv64-gnu@1.12.2': optional: true - '@unrs/resolver-binding-linux-riscv64-musl@1.11.1': + '@unrs/resolver-binding-linux-riscv64-musl@1.12.2': optional: true - '@unrs/resolver-binding-linux-s390x-gnu@1.11.1': + '@unrs/resolver-binding-linux-s390x-gnu@1.12.2': optional: true - '@unrs/resolver-binding-linux-x64-gnu@1.11.1': + '@unrs/resolver-binding-linux-x64-gnu@1.12.2': optional: true - '@unrs/resolver-binding-linux-x64-musl@1.11.1': + '@unrs/resolver-binding-linux-x64-musl@1.12.2': optional: true - '@unrs/resolver-binding-wasm32-wasi@1.11.1': + '@unrs/resolver-binding-openharmony-arm64@1.12.2': + optional: true + + '@unrs/resolver-binding-wasm32-wasi@1.12.2': dependencies: - '@napi-rs/wasm-runtime': 0.2.12 + '@emnapi/core': 1.10.0 + '@emnapi/runtime': 1.10.0 + '@napi-rs/wasm-runtime': 1.1.6(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) optional: true - '@unrs/resolver-binding-win32-arm64-msvc@1.11.1': + '@unrs/resolver-binding-win32-arm64-msvc@1.12.2': optional: true - '@unrs/resolver-binding-win32-ia32-msvc@1.11.1': + '@unrs/resolver-binding-win32-ia32-msvc@1.12.2': optional: true - '@unrs/resolver-binding-win32-x64-msvc@1.11.1': + '@unrs/resolver-binding-win32-x64-msvc@1.12.2': optional: true abbrev@1.1.1: {} - acorn-jsx@5.3.2(acorn@8.16.0): - dependencies: - acorn: 8.16.0 - acorn-jsx@5.3.2(acorn@8.17.0): dependencies: acorn: 8.17.0 acorn-walk@8.3.5: dependencies: - acorn: 8.16.0 - - acorn@8.16.0: {} + acorn: 8.17.0 acorn@8.17.0: {} @@ -2374,7 +2382,7 @@ snapshots: balanced-match@4.0.4: {} - brace-expansion@1.1.14: + brace-expansion@1.1.16: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 @@ -2400,7 +2408,7 @@ snapshots: istanbul-reports: 3.2.0 test-exclude: 8.0.0 v8-to-istanbul: 9.3.0 - yargs: 17.7.2(patch_hash=34652056801bf0e586b0f2ab1a4f464b352d4d3ce0f5b2d51040d171c31843c3) + yargs: 17.7.3 yargs-parser: 21.1.1 callsites@3.1.0: {} @@ -2425,7 +2433,7 @@ snapshots: color-name@1.1.4: {} - comment-parser@1.4.6: {} + comment-parser@1.4.7: {} concat-map@0.0.1: {} @@ -2466,13 +2474,13 @@ snapshots: diff@8.0.4: {} - dompurify@3.4.5: + dompurify@3.4.12: optionalDependencies: '@types/trusted-types': 2.0.7 emoji-regex@8.0.0: {} - enhanced-resolve@5.21.3: + enhanced-resolve@5.24.2: dependencies: graceful-fs: 4.2.11 tapable: 2.3.3 @@ -2482,34 +2490,34 @@ snapshots: ansi-colors: 4.1.3 strip-ansi: 6.0.1 - esbuild@0.28.0: + esbuild@0.28.1: optionalDependencies: - '@esbuild/aix-ppc64': 0.28.0 - '@esbuild/android-arm': 0.28.0 - '@esbuild/android-arm64': 0.28.0 - '@esbuild/android-x64': 0.28.0 - '@esbuild/darwin-arm64': 0.28.0 - '@esbuild/darwin-x64': 0.28.0 - '@esbuild/freebsd-arm64': 0.28.0 - '@esbuild/freebsd-x64': 0.28.0 - '@esbuild/linux-arm': 0.28.0 - '@esbuild/linux-arm64': 0.28.0 - '@esbuild/linux-ia32': 0.28.0 - '@esbuild/linux-loong64': 0.28.0 - '@esbuild/linux-mips64el': 0.28.0 - '@esbuild/linux-ppc64': 0.28.0 - '@esbuild/linux-riscv64': 0.28.0 - '@esbuild/linux-s390x': 0.28.0 - '@esbuild/linux-x64': 0.28.0 - '@esbuild/netbsd-arm64': 0.28.0 - '@esbuild/netbsd-x64': 0.28.0 - '@esbuild/openbsd-arm64': 0.28.0 - '@esbuild/openbsd-x64': 0.28.0 - '@esbuild/openharmony-arm64': 0.28.0 - '@esbuild/sunos-x64': 0.28.0 - '@esbuild/win32-arm64': 0.28.0 - '@esbuild/win32-ia32': 0.28.0 - '@esbuild/win32-x64': 0.28.0 + '@esbuild/aix-ppc64': 0.28.1 + '@esbuild/android-arm': 0.28.1 + '@esbuild/android-arm64': 0.28.1 + '@esbuild/android-x64': 0.28.1 + '@esbuild/darwin-arm64': 0.28.1 + '@esbuild/darwin-x64': 0.28.1 + '@esbuild/freebsd-arm64': 0.28.1 + '@esbuild/freebsd-x64': 0.28.1 + '@esbuild/linux-arm': 0.28.1 + '@esbuild/linux-arm64': 0.28.1 + '@esbuild/linux-ia32': 0.28.1 + '@esbuild/linux-loong64': 0.28.1 + '@esbuild/linux-mips64el': 0.28.1 + '@esbuild/linux-ppc64': 0.28.1 + '@esbuild/linux-riscv64': 0.28.1 + '@esbuild/linux-s390x': 0.28.1 + '@esbuild/linux-x64': 0.28.1 + '@esbuild/netbsd-arm64': 0.28.1 + '@esbuild/netbsd-x64': 0.28.1 + '@esbuild/openbsd-arm64': 0.28.1 + '@esbuild/openbsd-x64': 0.28.1 + '@esbuild/openharmony-arm64': 0.28.1 + '@esbuild/sunos-x64': 0.28.1 + '@esbuild/win32-arm64': 0.28.1 + '@esbuild/win32-ia32': 0.28.1 + '@esbuild/win32-x64': 0.28.1 escalade@3.2.0: {} @@ -2520,12 +2528,12 @@ snapshots: eslint: 10.7.0 semver: 7.8.5 - eslint-import-context@0.1.9(unrs-resolver@1.11.1): + eslint-import-context@0.1.9(unrs-resolver@1.12.2): dependencies: get-tsconfig: 4.14.0 stable-hash-x: 0.2.0 optionalDependencies: - unrs-resolver: 1.11.1 + unrs-resolver: 1.12.2 eslint-plugin-es-x@7.8.0(eslint@10.7.0): dependencies: @@ -2534,28 +2542,27 @@ snapshots: eslint: 10.7.0 eslint-compat-utils: 0.5.1(eslint@10.7.0) - eslint-plugin-import-x@4.16.2(@typescript-eslint/utils@8.59.3(eslint@10.7.0)(typescript@5.9.3))(eslint@10.7.0): + eslint-plugin-import-x@4.17.1(@typescript-eslint/utils@8.63.0(eslint@10.7.0)(typescript@5.9.3))(eslint@10.7.0): dependencies: - '@package-json/types': 0.0.12 - '@typescript-eslint/types': 8.59.3 - comment-parser: 1.4.6 + '@typescript-eslint/types': 8.63.0 + comment-parser: 1.4.7 debug: 4.4.3 eslint: 10.7.0 - eslint-import-context: 0.1.9(unrs-resolver@1.11.1) + eslint-import-context: 0.1.9(unrs-resolver@1.12.2) is-glob: 4.0.3 minimatch: 10.2.5 semver: 7.8.5 stable-hash-x: 0.2.0 - unrs-resolver: 1.11.1 + unrs-resolver: 1.12.2 optionalDependencies: - '@typescript-eslint/utils': 8.59.3(eslint@10.7.0)(typescript@5.9.3) + '@typescript-eslint/utils': 8.63.0(eslint@10.7.0)(typescript@5.9.3) transitivePeerDependencies: - supports-color eslint-plugin-n@17.24.0(eslint@10.7.0)(typescript@5.9.3): dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@10.7.0) - enhanced-resolve: 5.21.3 + enhanced-resolve: 5.24.2 eslint: 10.7.0 eslint-plugin-es-x: 7.8.0(eslint@10.7.0) get-tsconfig: 4.14.0 @@ -2567,9 +2574,9 @@ snapshots: transitivePeerDependencies: - typescript - eslint-plugin-perfectionist@5.9.0(eslint@10.7.0)(typescript@5.9.3): + eslint-plugin-perfectionist@5.10.0(eslint@10.7.0)(typescript@5.9.3): dependencies: - '@typescript-eslint/utils': 8.59.3(eslint@10.7.0)(typescript@5.9.3) + '@typescript-eslint/utils': 8.63.0(eslint@10.7.0)(typescript@5.9.3) eslint: 10.7.0 natural-orderby: 5.0.0 transitivePeerDependencies: @@ -2630,8 +2637,8 @@ snapshots: espree@10.4.0: dependencies: - acorn: 8.16.0 - acorn-jsx: 5.3.2(acorn@8.16.0) + acorn: 8.17.0 + acorn-jsx: 5.3.2(acorn@8.17.0) eslint-visitor-keys: 4.2.1 espree@11.2.0: @@ -2670,9 +2677,9 @@ snapshots: dependencies: reusify: 1.1.0 - fdir@6.5.0(picomatch@4.0.4): + fdir@6.5.0(picomatch@4.0.5): optionalDependencies: - picomatch: 4.0.4 + picomatch: 4.0.5 file-entry-cache@8.0.0: dependencies: @@ -2723,7 +2730,7 @@ snapshots: globals@15.15.0: {} - globals@17.6.0: {} + globals@17.7.0: {} globrex@0.1.2: {} @@ -2737,7 +2744,7 @@ snapshots: ignore@5.3.2: {} - ignore@7.0.5: {} + ignore@7.0.6: {} import-fresh@3.3.1: dependencies: @@ -2771,7 +2778,7 @@ snapshots: html-escaper: 2.0.2 istanbul-lib-report: 3.0.1 - js-yaml@4.1.1: + js-yaml@4.3.0: dependencies: argparse: 2.0.1 @@ -2798,7 +2805,7 @@ snapshots: dependencies: p-locate: 5.0.0 - lru-cache@11.4.0: {} + lru-cache@11.5.2: {} make-dir@4.0.0: dependencies: @@ -2806,7 +2813,7 @@ snapshots: make-error@1.3.6: {} - marked@18.0.3: {} + marked@18.0.6: {} merge2@1.4.1: {} @@ -2821,7 +2828,7 @@ snapshots: minimatch@3.1.5: dependencies: - brace-expansion: 1.1.14 + brace-expansion: 1.1.16 minipass@7.1.3: {} @@ -2833,10 +2840,10 @@ snapshots: dependencies: '@logux/server': 0.14.0 diff2html: 3.4.56 - dompurify: 3.4.5 + dompurify: 3.4.12 highlight.js: 11.11.1 - marked: 18.0.3 - nanostores: 1.3.0 + marked: 18.0.6 + nanostores: 1.4.0 yaml: 2.9.0 transitivePeerDependencies: - bufferutil @@ -2846,9 +2853,9 @@ snapshots: nanoevents@9.1.0: {} - nanoid@3.3.12: {} + nanoid@3.3.16: {} - nanoid@5.1.11: {} + nanoid@5.1.16: {} nanospinner@1.2.2: dependencies: @@ -2856,7 +2863,7 @@ snapshots: nanospy@2.0.2: {} - nanostores@1.3.0: {} + nanostores@1.4.0: {} napi-postinstall@0.3.4: {} @@ -2951,14 +2958,14 @@ snapshots: path-scurry@2.0.2: dependencies: - lru-cache: 11.4.0 + lru-cache: 11.5.2 minipass: 7.1.3 picocolors@1.1.1: {} picomatch@2.3.2: {} - picomatch@4.0.4: {} + picomatch@4.0.5: {} postcss-parser-tests@8.9.0: dependencies: @@ -3006,7 +3013,7 @@ snapshots: lilconfig: 3.1.3 nanospinner: 1.2.2 picocolors: 1.1.1 - tinyglobby: 0.2.16 + tinyglobby: 0.2.17 source-map-js@1.2.1: {} @@ -3038,15 +3045,10 @@ snapshots: glob: 13.0.6 minimatch: 10.2.5 - tinyglobby@0.2.16: - dependencies: - fdir: 6.5.0(picomatch@4.0.4) - picomatch: 4.0.4 - tinyglobby@0.2.17: dependencies: - fdir: 6.5.0(picomatch@4.0.4) - picomatch: 4.0.4 + fdir: 6.5.0(picomatch@4.0.5) + picomatch: 4.0.5 tinypool@2.1.0: {} @@ -3060,7 +3062,7 @@ snapshots: ts-declaration-location@1.0.7(typescript@5.9.3): dependencies: - picomatch: 4.0.4 + picomatch: 4.0.5 typescript: 5.9.3 ts-node@10.9.2(@types/node@26.1.1)(typescript@5.9.3): @@ -3071,7 +3073,7 @@ snapshots: '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 '@types/node': 26.1.1 - acorn: 8.16.0 + acorn: 8.17.0 acorn-walk: 8.3.5 arg: 4.1.3 create-require: 1.1.1 @@ -3088,12 +3090,12 @@ snapshots: dependencies: prelude-ls: 1.2.1 - typescript-eslint@8.59.3(eslint@10.7.0)(typescript@5.9.3): + typescript-eslint@8.63.0(eslint@10.7.0)(typescript@5.9.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.59.3(@typescript-eslint/parser@8.59.3(eslint@10.7.0)(typescript@5.9.3))(eslint@10.7.0)(typescript@5.9.3) - '@typescript-eslint/parser': 8.59.3(eslint@10.7.0)(typescript@5.9.3) - '@typescript-eslint/typescript-estree': 8.59.3(typescript@5.9.3) - '@typescript-eslint/utils': 8.59.3(eslint@10.7.0)(typescript@5.9.3) + '@typescript-eslint/eslint-plugin': 8.63.0(@typescript-eslint/parser@8.63.0(eslint@10.7.0)(typescript@5.9.3))(eslint@10.7.0)(typescript@5.9.3) + '@typescript-eslint/parser': 8.63.0(eslint@10.7.0)(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.63.0(typescript@5.9.3) + '@typescript-eslint/utils': 8.63.0(eslint@10.7.0)(typescript@5.9.3) eslint: 10.7.0 typescript: 5.9.3 transitivePeerDependencies: @@ -3107,29 +3109,32 @@ snapshots: dependencies: '@types/unist': 3.0.3 - unrs-resolver@1.11.1: + unrs-resolver@1.12.2: dependencies: napi-postinstall: 0.3.4 optionalDependencies: - '@unrs/resolver-binding-android-arm-eabi': 1.11.1 - '@unrs/resolver-binding-android-arm64': 1.11.1 - '@unrs/resolver-binding-darwin-arm64': 1.11.1 - '@unrs/resolver-binding-darwin-x64': 1.11.1 - '@unrs/resolver-binding-freebsd-x64': 1.11.1 - '@unrs/resolver-binding-linux-arm-gnueabihf': 1.11.1 - '@unrs/resolver-binding-linux-arm-musleabihf': 1.11.1 - '@unrs/resolver-binding-linux-arm64-gnu': 1.11.1 - '@unrs/resolver-binding-linux-arm64-musl': 1.11.1 - '@unrs/resolver-binding-linux-ppc64-gnu': 1.11.1 - '@unrs/resolver-binding-linux-riscv64-gnu': 1.11.1 - '@unrs/resolver-binding-linux-riscv64-musl': 1.11.1 - '@unrs/resolver-binding-linux-s390x-gnu': 1.11.1 - '@unrs/resolver-binding-linux-x64-gnu': 1.11.1 - '@unrs/resolver-binding-linux-x64-musl': 1.11.1 - '@unrs/resolver-binding-wasm32-wasi': 1.11.1 - '@unrs/resolver-binding-win32-arm64-msvc': 1.11.1 - '@unrs/resolver-binding-win32-ia32-msvc': 1.11.1 - '@unrs/resolver-binding-win32-x64-msvc': 1.11.1 + '@unrs/resolver-binding-android-arm-eabi': 1.12.2 + '@unrs/resolver-binding-android-arm64': 1.12.2 + '@unrs/resolver-binding-darwin-arm64': 1.12.2 + '@unrs/resolver-binding-darwin-x64': 1.12.2 + '@unrs/resolver-binding-freebsd-x64': 1.12.2 + '@unrs/resolver-binding-linux-arm-gnueabihf': 1.12.2 + '@unrs/resolver-binding-linux-arm-musleabihf': 1.12.2 + '@unrs/resolver-binding-linux-arm64-gnu': 1.12.2 + '@unrs/resolver-binding-linux-arm64-musl': 1.12.2 + '@unrs/resolver-binding-linux-loong64-gnu': 1.12.2 + '@unrs/resolver-binding-linux-loong64-musl': 1.12.2 + '@unrs/resolver-binding-linux-ppc64-gnu': 1.12.2 + '@unrs/resolver-binding-linux-riscv64-gnu': 1.12.2 + '@unrs/resolver-binding-linux-riscv64-musl': 1.12.2 + '@unrs/resolver-binding-linux-s390x-gnu': 1.12.2 + '@unrs/resolver-binding-linux-x64-gnu': 1.12.2 + '@unrs/resolver-binding-linux-x64-musl': 1.12.2 + '@unrs/resolver-binding-openharmony-arm64': 1.12.2 + '@unrs/resolver-binding-wasm32-wasi': 1.12.2 + '@unrs/resolver-binding-win32-arm64-msvc': 1.12.2 + '@unrs/resolver-binding-win32-ia32-msvc': 1.12.2 + '@unrs/resolver-binding-win32-x64-msvc': 1.12.2 uri-js@4.4.1: dependencies: @@ -3179,7 +3184,7 @@ snapshots: string-width: 4.2.3 strip-ansi: 6.0.1 - ws@8.20.1: {} + ws@8.21.0: {} y18n@5.0.8: {} @@ -3187,7 +3192,7 @@ snapshots: yargs-parser@21.1.1: {} - yargs@17.7.2(patch_hash=34652056801bf0e586b0f2ab1a4f464b352d4d3ce0f5b2d51040d171c31843c3): + yargs@17.7.3: dependencies: cliui: 8.0.1 escalade: 3.2.0 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 7b949ad9d..f306e6140 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -2,6 +2,3 @@ allowBuilds: esbuild: false simple-git-hooks: true unrs-resolver: false - -patchedDependencies: - 'yargs@17.7.2': 'patches/yargs@17.7.2.patch' From 337cb7ef092da6066ec845973af243ed8e378550 Mon Sep 17 00:00:00 2001 From: Andrey Sitnik Date: Wed, 15 Jul 2026 16:35:41 +0000 Subject: [PATCH 71/89] Improve CI security --- .github/workflows/release.yml | 9 +++++++-- .github/workflows/test.yml | 8 ++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index d9911f53f..476fbb1f9 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -12,14 +12,17 @@ jobs: steps: - name: Checkout the repository uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + with: + persist-credentials: false - name: Clean npm package uses: ai/clean-npm-project@29219e611c2da08a07cb0a6a1b965c162e5940a9 # v0.3.0 with: clean-docs: true - name: Install Node.js - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: node-version: 26 + package-manager-cache: false - name: Publish npm package run: npm stage publish working-directory: cleaned-project/ @@ -30,7 +33,9 @@ jobs: steps: - name: Checkout the repository uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - - name: Clean npm package + with: + persist-credentials: false + - name: Copy CHANGELOG.md to Releases uses: ai/copy-changelog-to-release@a6dc825c34575add2da2060796794f7b84894628 # v0.2.0 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 8b2be8122..4714c0a43 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -13,6 +13,8 @@ jobs: steps: - name: Checkout the repository uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + with: + persist-credentials: false - name: Install Node.js & pnpm uses: pnpm/setup@5d160c5bc68a09337ad0d5654e237e03253b5879 # v1.0.0 with: @@ -33,6 +35,8 @@ jobs: steps: - name: Checkout the repository uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + with: + persist-credentials: false - name: Install Node.js & pnpm uses: pnpm/setup@5d160c5bc68a09337ad0d5654e237e03253b5879 # v1.0.0 with: @@ -59,6 +63,8 @@ jobs: steps: - name: Checkout the repository uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + with: + persist-credentials: false - name: Install pnpm uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v5.0.0 with: @@ -81,6 +87,8 @@ jobs: steps: - name: Checkout the repository uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + with: + persist-credentials: false - name: Install pnpm uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9 with: From 806fe21198e210cc85fd87d4afd0c949b04e0c1f Mon Sep 17 00:00:00 2001 From: Mahin Anowar <86069420+MahinAnowar@users.noreply.github.com> Date: Wed, 15 Jul 2026 23:24:51 +0600 Subject: [PATCH 72/89] Rebuild nodes from another PostCSS copy in Warning (#2112) --- lib/warning.js | 10 ++++++++++ test/warning.test.ts | 23 ++++++++++++++++++++++- 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/lib/warning.js b/lib/warning.js index 3a3d79c93..a4edbd31c 100644 --- a/lib/warning.js +++ b/lib/warning.js @@ -1,11 +1,21 @@ 'use strict' +let Container = require('./container') +let { my } = require('./symbols') + class Warning { constructor(text, opts = {}) { this.type = 'warning' this.text = text if (opts.node && opts.node.source) { + if (!opts.node[my]) { + // The node comes from another PostCSS copy in node_modules, so it does + // not have this copy’s methods. Container#normalize() rebuilds such + // nodes on insert, but a node passed straight to Result#warn() never + // goes through it. + Container.rebuild(opts.node) + } let range = opts.node.rangeBy(opts) this.line = range.start.line this.column = range.start.column diff --git a/test/warning.test.ts b/test/warning.test.ts index 4075f8a7a..c96d14c44 100644 --- a/test/warning.test.ts +++ b/test/warning.test.ts @@ -2,7 +2,7 @@ import { resolve } from 'path' import { test } from 'uvu' import { is, type } from 'uvu/assert' -import { decl, parse, Warning } from '../lib/postcss.js' +import { decl, Declaration, parse, Rule, Warning } from '../lib/postcss.js' test('outputs simple warning', () => { let warning = new Warning('text') @@ -194,4 +194,25 @@ test('always returns valid ranges', () => { is(warning.endColumn, 4) }) +test('takes position from node of another PostCSS copy', () => { + let root = parse('a { color: black }') + let rule = root.first as Rule + let parsed = rule.first as Declaration + // A node from another PostCSS version in node_modules has no methods + // of this copy, so it is a plain object here. + let foreign = { + prop: parsed.prop, + raws: { ...parsed.raws }, + source: parsed.source, + type: 'decl', + value: parsed.value + } as unknown as Declaration + + let warning = new Warning('text', { node: foreign }) + is(warning.line, 1) + is(warning.column, 5) + is(warning.endLine, 1) + is(warning.endColumn, 17) +}) + test.run() From 728127c427e076ae15f4b4107cae29f9e60d2db4 Mon Sep 17 00:00:00 2001 From: Andrey Sitnik Date: Thu, 16 Jul 2026 08:59:22 +0000 Subject: [PATCH 73/89] Update pnpm to check that CI is fixed --- .github/workflows/test.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 4714c0a43..1f4662584 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -18,7 +18,7 @@ jobs: - name: Install Node.js & pnpm uses: pnpm/setup@5d160c5bc68a09337ad0d5654e237e03253b5879 # v1.0.0 with: - version: 11.10.0 + version: 11.13.1 runtime: node@26 - name: Install dependencies run: pnpm ci @@ -40,7 +40,7 @@ jobs: - name: Install Node.js & pnpm uses: pnpm/setup@5d160c5bc68a09337ad0d5654e237e03253b5879 # v1.0.0 with: - version: 11.10.0 + version: 11.13.1 runtime: node@${{ matrix.node }} - name: Install dependencies run: pnpm ci @@ -92,7 +92,7 @@ jobs: - name: Install pnpm uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9 with: - version: 11.10.0 + version: 11.13.1 - name: Install Node.js LTS uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 with: From 24733fdbfe9abe4a949eb0a10e53db8c87fc9277 Mon Sep 17 00:00:00 2001 From: Andrey Sitnik Date: Thu, 16 Jul 2026 09:00:42 +0000 Subject: [PATCH 74/89] Move back to latest 11 pnpm --- .github/workflows/test.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 1f4662584..9760a602a 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -18,7 +18,7 @@ jobs: - name: Install Node.js & pnpm uses: pnpm/setup@5d160c5bc68a09337ad0d5654e237e03253b5879 # v1.0.0 with: - version: 11.13.1 + version: 11 runtime: node@26 - name: Install dependencies run: pnpm ci @@ -40,7 +40,7 @@ jobs: - name: Install Node.js & pnpm uses: pnpm/setup@5d160c5bc68a09337ad0d5654e237e03253b5879 # v1.0.0 with: - version: 11.13.1 + version: 11 runtime: node@${{ matrix.node }} - name: Install dependencies run: pnpm ci @@ -92,7 +92,7 @@ jobs: - name: Install pnpm uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9 with: - version: 11.13.1 + version: 11 - name: Install Node.js LTS uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 with: From 5bfc3b9e7463936fdd4898f92dd43c358bfdef62 Mon Sep 17 00:00:00 2001 From: Andrey Sitnik Date: Thu, 16 Jul 2026 09:01:57 +0000 Subject: [PATCH 75/89] Update dependencies --- package.json | 2 +- pnpm-lock.yaml | 162 ++++++++++++++++++++++++------------------------- 2 files changed, 82 insertions(+), 82 deletions(-) diff --git a/package.json b/package.json index 290886fd3..d67d5d05c 100644 --- a/package.json +++ b/package.json @@ -106,7 +106,7 @@ "multiocular": "^0.8.3", "nanodelay": "^1.0.8", "nanospy": "^2.0.2", - "oxfmt": "^0.58.0", + "oxfmt": "^0.59.0", "postcss-parser-tests": "^8.9.0", "simple-git-hooks": "^2.13.1", "size-limit": "^12.1.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 743293894..30728af41 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -55,8 +55,8 @@ importers: specifier: ^2.0.2 version: 2.0.2 oxfmt: - specifier: ^0.58.0 - version: 0.58.0 + specifier: ^0.59.0 + version: 0.59.0 postcss-parser-tests: specifier: ^8.9.0 version: 8.9.0 @@ -381,124 +381,124 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@oxfmt/binding-android-arm-eabi@0.58.0': - resolution: {integrity: sha512-Uz62sHduGGPftXtILGyxdSW4PX82rUg+rfdNqhsgxe881g4rIoXlIqmZQ6HVKcF4f+F8qMhdD03Bx5u7gmeTdg==} + '@oxfmt/binding-android-arm-eabi@0.59.0': + resolution: {integrity: sha512-bNTnfbuG7sAwb2PakMNaDukx5kXeW9duXOBeWtTOiLz3fXz3q2DlWguufPZ+c2IHEVrRXHD+M4aUgEWm841LDA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [android] - '@oxfmt/binding-android-arm64@0.58.0': - resolution: {integrity: sha512-rD0lRaJp1b+9vw6X4A2dJWKukd6X8yxiicN4JxXcXayolmUypRZxk+lKR+fVOu5q/iYc0fh5fR4bgmfOfVlbaA==} + '@oxfmt/binding-android-arm64@0.59.0': + resolution: {integrity: sha512-R/Sn7z52QtdAKNqQLLY0EK7hVMjXiz3XUlvoCFCm/60jgIzAnQtiqLKBCFaBkimCQL5rs2ezPMcicpjCsrl54Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@oxfmt/binding-darwin-arm64@0.58.0': - resolution: {integrity: sha512-uzbPPk7O6M+w2K65vcQ1woga3wgP8zghjL1KOG5b6qJ8dvYHZJ1VShaslg2KOK6yQIwCQtcMCXqLBM6sqXUNTg==} + '@oxfmt/binding-darwin-arm64@0.59.0': + resolution: {integrity: sha512-vm/ynUqE4HjC0ZIEjmXv1UJu1/GngccQ+T+TJudTMxUxm6r+GQTg1TO3E5jJfI71pBaXxSzs1+vWHIwuilGHhw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@oxfmt/binding-darwin-x64@0.58.0': - resolution: {integrity: sha512-L0nKYDxU32oxeQqJj21W9SlIMnf81VZEhyah6iDvFhf5q0oynq498Fopth7blErUJVBpVtxQ98RMCfMPqpJX6w==} + '@oxfmt/binding-darwin-x64@0.59.0': + resolution: {integrity: sha512-uTtYDpLN/obfKVWGpgEc8BqYlLZBQTPz2uYEvLRy3HPZxjZ34wiFzukUBU2bf64JuCYZI//GTV1EOMmWlPjf/w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@oxfmt/binding-freebsd-x64@0.58.0': - resolution: {integrity: sha512-woNwfD58dC5PGS9LSLSD5JYfo/EFK5iG9vhDWkcCg3q78ag7KC8bpDqgvPHrMoXpx83OLXxoSOhu6z8FsVTHlg==} + '@oxfmt/binding-freebsd-x64@0.59.0': + resolution: {integrity: sha512-e2UnxL/ifStSPy8ffBCDbdy595SYsGy+U1pur4G65TuMmWxAMBzYGG7atZo/3mp515p8rZdsflxVD/E1FAdPLQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@oxfmt/binding-linux-arm-gnueabihf@0.58.0': - resolution: {integrity: sha512-Sqs8nMLxuQpY21NKJ1u4stPDmO5hskBCNNh2E3AdCfI1QqWtf4m+Qn4mGEIUO4KGmuq3SWc/SZ80uy5IiwTCDw==} + '@oxfmt/binding-linux-arm-gnueabihf@0.59.0': + resolution: {integrity: sha512-LtdeZ1l0urxte3VNi3g8cocZwv1xGM1NKHSgF/fJEEVhyQmlgGh7WFWKFd/pNuO7djfvPNtNO1+MS+FEWkgVSA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxfmt/binding-linux-arm-musleabihf@0.58.0': - resolution: {integrity: sha512-Vd4exzBI5B5hB9m22JiTQzIL23WvHo/Pe+sNXPNeBLXSP9swCBPKCEBRwKpmpQzYhlgYaCgfPcGXPKAJBRIiZQ==} + '@oxfmt/binding-linux-arm-musleabihf@0.59.0': + resolution: {integrity: sha512-dBTciSsj9GTMl7p+h2gMSI0hoPn2ijfc/dUsbnWsP0RbwgPl2r0C/5zkMb3Pb+gGj17LH7f1o4qLo9aes/pAvA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxfmt/binding-linux-arm64-gnu@0.58.0': - resolution: {integrity: sha512-bUWi5mHV+4Vi56RLHE1h6q/HHfwAIT3XoB9vJAVeRzfu5NriXM8y6eeJu0vlKa0C9kq2rq1sOWRClhdLHPocrg==} + '@oxfmt/binding-linux-arm64-gnu@0.59.0': + resolution: {integrity: sha512-tXVdJ/JINsNWdponPHN0OuKHtC+HdpyoS9sd6IDPNiiEYsRki8b7tefRZ1iMnRkdbyT4SEbguWsr6o+5awvbPQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-arm64-musl@0.58.0': - resolution: {integrity: sha512-2ZHxemzgHcjtktAuVUwSoyXmGo/t+aF5tS1ciPpPei4rhSyrz3JOqDosXXrmhN/yLUSzJjtuW7ToTWqfQpCj2w==} + '@oxfmt/binding-linux-arm64-musl@0.59.0': + resolution: {integrity: sha512-RRTq38i2zT5fnw6XGHjvT6w2mh6x/G3m6AZcAZ56OTDTT/lsOeYnG3SVjwmH40z5kPqF+lf+o35e6m6PpKy9Dw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@oxfmt/binding-linux-ppc64-gnu@0.58.0': - resolution: {integrity: sha512-AwKkVwjVmFQ3bcO7j0McGYAqCKH2a326fswfofng/E8VewCT/raeeGQr4huVhY704deK8AWASSTlxzMj0eZc6Q==} + '@oxfmt/binding-linux-ppc64-gnu@0.59.0': + resolution: {integrity: sha512-lD3k7glAJSaXW0D6xzu8VOZbYbosvy+0ktOVkfLEoQF5HJlMSxTQ2KNW0JO+08ccP/1ElOKktVEMI0fqRbVB4w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-riscv64-gnu@0.58.0': - resolution: {integrity: sha512-xsRpTxfUnJF8D3AUKko/qyWdjw4GZVHlCVFuGlzSCTeewLmykKINW8em1+wx+axsDVtJJcMtvsiaXggXxrlHgw==} + '@oxfmt/binding-linux-riscv64-gnu@0.59.0': + resolution: {integrity: sha512-WH5ZP1RbuHKBO/yfPRQKpNO/ijHcEDNbnmC4VPf/Bcd3+mbMAZpRiJWRa1PL5bREdIZZHo343mk3sqlc9x7Usw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-riscv64-musl@0.58.0': - resolution: {integrity: sha512-Z4AYOTcy7nYEIiXwD62PlerimyYRcfJOgUbQAEBjXz098kxKuERBlRntofGy69HHhe9E0TLVNMl1yspVNu+efw==} + '@oxfmt/binding-linux-riscv64-musl@0.59.0': + resolution: {integrity: sha512-743wOiaI9RZY4QVGkWkfGRavD5ZJUJ6gscFjVrVu1dP8AZh9jM+a6v3NhlR+OIzHdS6DhLM96w+gcVskskz7rw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [musl] - '@oxfmt/binding-linux-s390x-gnu@0.58.0': - resolution: {integrity: sha512-A3nhhtZPC/TKVWOPj9q/H3p2znJDCcHWYlJBhWL8hGq/bFmBaNBHC8Np6E581yVq1w9Mi3rMDNzDalWvtUfJtQ==} + '@oxfmt/binding-linux-s390x-gnu@0.59.0': + resolution: {integrity: sha512-xjRXQsRnrRZCcCkIEnbd2lmsQNobtwwkJxdy2bWXhZ1lIN0ouZwsBXRsoovW3yATuziAYwr9HMiQuR/Cc75NIw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-x64-gnu@0.58.0': - resolution: {integrity: sha512-2g+tVkgwqphw8R4hgo+kF4oz8+P5RwVOtr9+irsC7uwEp0e9j7Crw8kDGKL20uYlLPD7g02DqA61mC/UNYx98A==} + '@oxfmt/binding-linux-x64-gnu@0.59.0': + resolution: {integrity: sha512-4hNjqq/Rbr9B+StY9zMMAfm72+mtM4v80xYL5Qkb59Qd72g2vJMI0iFlPj3kf6miMsie/yJ7rt4urJT292HBgA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-x64-musl@0.58.0': - resolution: {integrity: sha512-rc15P6AbyyB7426aN8AakLd02Trb3a6ML/mmfAQeVHJEfVofWLcWIrBdy6zDEY+DIaL/s8E4GGPboVw+oP3+EA==} + '@oxfmt/binding-linux-x64-musl@0.59.0': + resolution: {integrity: sha512-NH579iN8EVQYsWowUB8B5vFchcylJtwPVJ7NmUAqEQHNLfhPbDT3K56KrECNAkUN4QpF4qiMgN2vsfZwVvjm7g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@oxfmt/binding-openharmony-arm64@0.58.0': - resolution: {integrity: sha512-ZWoTM27/HYPOh9iq86DAbhPu9nXb8qKvvGU/h8OfliyVUFAMMNTLDkGsWDKKnDqIkqvZ9+dXlgUOsH1LYO3O7g==} + '@oxfmt/binding-openharmony-arm64@0.59.0': + resolution: {integrity: sha512-mzZy3Z5Aj1D75Aq9FVlmoRQH5ei8Ga4o/NZmlXkKyeZ5EmPrUXRR7c6BMBteV1ZuZ/356UYDuLRLjAMxTDTiBA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@oxfmt/binding-win32-arm64-msvc@0.58.0': - resolution: {integrity: sha512-LHZnqFXe2dEfkRI4XdZS/57nEOT/I4UCRX5IyM9v4GYW9XwQCjGe1IUK59SuKw3POwvcgWQ4pme2cYXmNqTNPg==} + '@oxfmt/binding-win32-arm64-msvc@0.59.0': + resolution: {integrity: sha512-0CpDJ1gE3jN1Gk6xms1Ie6LPfPcOtY4FAtoOmVLHQoAf8DvO2wd0DW2dIX2f7YTp5dxrr0ND8JeUEjm3DP3k5g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@oxfmt/binding-win32-ia32-msvc@0.58.0': - resolution: {integrity: sha512-mZKpg20TpheCJym1rarcZCUJeW1sSruw8zAAaCYWvuVfwIUDN1CXdrPU/JgCWReXTCTrEfCB8Wyo3hh9jSZ2EA==} + '@oxfmt/binding-win32-ia32-msvc@0.59.0': + resolution: {integrity: sha512-zwdKBu3pt87uW0bRcywZb0oGMS7C6n87qogwRYFUgmk44T90ZzYlPjtlFYXs/DnBFrgNCvlHwCuWKfVWLeE7kw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ia32] os: [win32] - '@oxfmt/binding-win32-x64-msvc@0.58.0': - resolution: {integrity: sha512-N/wUU4N5PZ2orBtI+Ko7MnMfYLfE7K91UrGMY/c/pYyHR3lA9kwst1XugkZx+92YcRh/Eo+iv2eTESSWXfiZPA==} + '@oxfmt/binding-win32-x64-msvc@0.59.0': + resolution: {integrity: sha512-dUUbZkKgWrmAeI/puzv4bxN8lzcYaFnQVwFTFtwO2Gp8M7lZGSE2qJjC58g518+1bltJ8mizjYwD0BGHym0l/w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] @@ -1441,8 +1441,8 @@ packages: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} - oxfmt@0.58.0: - resolution: {integrity: sha512-8feG/7NVEHDVwc1OUpP6Pks+TnaDFUw2jLLFIMi5bcmmwxAX2wBQvjSzj62RRTYBf2Op1Wt8xbkmagmPTR5ETg==} + oxfmt@0.59.0: + resolution: {integrity: sha512-Xqk6cPZS1yMvVa7OAuenaDZUsgMDutvvbZ9/L5gSvAfW64+WN4HVhgipLj5rVERbYQt8fLs9TopyZ1rU1XEG/w==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -1996,61 +1996,61 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.20.1 - '@oxfmt/binding-android-arm-eabi@0.58.0': + '@oxfmt/binding-android-arm-eabi@0.59.0': optional: true - '@oxfmt/binding-android-arm64@0.58.0': + '@oxfmt/binding-android-arm64@0.59.0': optional: true - '@oxfmt/binding-darwin-arm64@0.58.0': + '@oxfmt/binding-darwin-arm64@0.59.0': optional: true - '@oxfmt/binding-darwin-x64@0.58.0': + '@oxfmt/binding-darwin-x64@0.59.0': optional: true - '@oxfmt/binding-freebsd-x64@0.58.0': + '@oxfmt/binding-freebsd-x64@0.59.0': optional: true - '@oxfmt/binding-linux-arm-gnueabihf@0.58.0': + '@oxfmt/binding-linux-arm-gnueabihf@0.59.0': optional: true - '@oxfmt/binding-linux-arm-musleabihf@0.58.0': + '@oxfmt/binding-linux-arm-musleabihf@0.59.0': optional: true - '@oxfmt/binding-linux-arm64-gnu@0.58.0': + '@oxfmt/binding-linux-arm64-gnu@0.59.0': optional: true - '@oxfmt/binding-linux-arm64-musl@0.58.0': + '@oxfmt/binding-linux-arm64-musl@0.59.0': optional: true - '@oxfmt/binding-linux-ppc64-gnu@0.58.0': + '@oxfmt/binding-linux-ppc64-gnu@0.59.0': optional: true - '@oxfmt/binding-linux-riscv64-gnu@0.58.0': + '@oxfmt/binding-linux-riscv64-gnu@0.59.0': optional: true - '@oxfmt/binding-linux-riscv64-musl@0.58.0': + '@oxfmt/binding-linux-riscv64-musl@0.59.0': optional: true - '@oxfmt/binding-linux-s390x-gnu@0.58.0': + '@oxfmt/binding-linux-s390x-gnu@0.59.0': optional: true - '@oxfmt/binding-linux-x64-gnu@0.58.0': + '@oxfmt/binding-linux-x64-gnu@0.59.0': optional: true - '@oxfmt/binding-linux-x64-musl@0.58.0': + '@oxfmt/binding-linux-x64-musl@0.59.0': optional: true - '@oxfmt/binding-openharmony-arm64@0.58.0': + '@oxfmt/binding-openharmony-arm64@0.59.0': optional: true - '@oxfmt/binding-win32-arm64-msvc@0.58.0': + '@oxfmt/binding-win32-arm64-msvc@0.59.0': optional: true - '@oxfmt/binding-win32-ia32-msvc@0.58.0': + '@oxfmt/binding-win32-ia32-msvc@0.59.0': optional: true - '@oxfmt/binding-win32-x64-msvc@0.58.0': + '@oxfmt/binding-win32-x64-msvc@0.59.0': optional: true '@oxlint-tsgolint/darwin-arm64@0.18.1': @@ -2884,29 +2884,29 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.5 - oxfmt@0.58.0: + oxfmt@0.59.0: dependencies: tinypool: 2.1.0 optionalDependencies: - '@oxfmt/binding-android-arm-eabi': 0.58.0 - '@oxfmt/binding-android-arm64': 0.58.0 - '@oxfmt/binding-darwin-arm64': 0.58.0 - '@oxfmt/binding-darwin-x64': 0.58.0 - '@oxfmt/binding-freebsd-x64': 0.58.0 - '@oxfmt/binding-linux-arm-gnueabihf': 0.58.0 - '@oxfmt/binding-linux-arm-musleabihf': 0.58.0 - '@oxfmt/binding-linux-arm64-gnu': 0.58.0 - '@oxfmt/binding-linux-arm64-musl': 0.58.0 - '@oxfmt/binding-linux-ppc64-gnu': 0.58.0 - '@oxfmt/binding-linux-riscv64-gnu': 0.58.0 - '@oxfmt/binding-linux-riscv64-musl': 0.58.0 - '@oxfmt/binding-linux-s390x-gnu': 0.58.0 - '@oxfmt/binding-linux-x64-gnu': 0.58.0 - '@oxfmt/binding-linux-x64-musl': 0.58.0 - '@oxfmt/binding-openharmony-arm64': 0.58.0 - '@oxfmt/binding-win32-arm64-msvc': 0.58.0 - '@oxfmt/binding-win32-ia32-msvc': 0.58.0 - '@oxfmt/binding-win32-x64-msvc': 0.58.0 + '@oxfmt/binding-android-arm-eabi': 0.59.0 + '@oxfmt/binding-android-arm64': 0.59.0 + '@oxfmt/binding-darwin-arm64': 0.59.0 + '@oxfmt/binding-darwin-x64': 0.59.0 + '@oxfmt/binding-freebsd-x64': 0.59.0 + '@oxfmt/binding-linux-arm-gnueabihf': 0.59.0 + '@oxfmt/binding-linux-arm-musleabihf': 0.59.0 + '@oxfmt/binding-linux-arm64-gnu': 0.59.0 + '@oxfmt/binding-linux-arm64-musl': 0.59.0 + '@oxfmt/binding-linux-ppc64-gnu': 0.59.0 + '@oxfmt/binding-linux-riscv64-gnu': 0.59.0 + '@oxfmt/binding-linux-riscv64-musl': 0.59.0 + '@oxfmt/binding-linux-s390x-gnu': 0.59.0 + '@oxfmt/binding-linux-x64-gnu': 0.59.0 + '@oxfmt/binding-linux-x64-musl': 0.59.0 + '@oxfmt/binding-openharmony-arm64': 0.59.0 + '@oxfmt/binding-win32-arm64-msvc': 0.59.0 + '@oxfmt/binding-win32-ia32-msvc': 0.59.0 + '@oxfmt/binding-win32-x64-msvc': 0.59.0 oxlint-tsgolint@0.18.1: optionalDependencies: From c30586d7863d0563e2f2707bd89461636e37f6f6 Mon Sep 17 00:00:00 2001 From: Sarath Francis Date: Sun, 19 Jul 2026 03:23:15 -0500 Subject: [PATCH 76/89] Fix missing space when AtRule#params is set after parsing (#2113) --- lib/stringifier.js | 15 ++++++++++----- test/stringifier.test.js | 20 ++++++++++++++++++++ 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/lib/stringifier.js b/lib/stringifier.js index bffb913ae..dfab9f193 100644 --- a/lib/stringifier.js +++ b/lib/stringifier.js @@ -6,6 +6,10 @@ const STYLE_TAG = /(<)(\/?style\b)/gi const COMMENT_OPEN = /(<)(!--)/g +// Characters that end an at-rule name, mirroring RE_AT_END in the tokenizer. +// Params starting with anything else need a space to stay separate tokens. +const AT_NAME_END = /[\t\n\f\r "#'()/;[\\\]{}]/ + function escapeHTMLInCSS(str) { if (typeof str !== 'string') return str if (!str.includes('<')) return str @@ -34,14 +38,15 @@ function capitalize(str) { function atruleStart(str, node) { let name = '@' + node.name let params = node.params ? str.rawValue(node, 'params') : '' + let afterName = node.raws.afterName - if (typeof node.raws.afterName !== 'undefined') { - name += node.raws.afterName - } else if (params) { - name += ' ' + if (typeof afterName === 'undefined') { + afterName = params ? ' ' : '' + } else if (afterName === '' && params && !AT_NAME_END.test(params[0])) { + afterName = ' ' } - return name + params + return name + afterName + params } function pushBody(str, stack, node) { diff --git a/test/stringifier.test.js b/test/stringifier.test.js index 87690c4fc..e478817ad 100755 --- a/test/stringifier.test.js +++ b/test/stringifier.test.js @@ -358,6 +358,26 @@ test('always calls raw to retrieve raws', () => { ) }) +test('adds space before params set on an at-rule parsed without them', () => { + let root = parse('@layer{a{color:black}}') + root.first.params = 'utilities' + is(root.toString(), '@layer utilities{a{color:black}}') + + let media = parse('@media;').first + media.params = 'print' + is(media.toString(), '@media print') +}) + +test('keeps params glued to at-rule name when CSS allows it', () => { + let root = parse('@media(min-width:0){}') + root.first.params = '(min-width:1px)' + is(root.toString(), '@media(min-width:1px){}') + + let imported = parse('@import"a.css"').first + imported.params = '"b.css"' + is(imported.toString(), '@import"b.css"') +}) + test('supports subclasses with overridden traversal methods', () => { class CustomStringifier extends Stringifier { rule(node) { From c4ac725d5920916d35be44002b49b7f66f8b1dc8 Mon Sep 17 00:00:00 2001 From: Andrey Sitnik Date: Sun, 19 Jul 2026 08:44:02 +0000 Subject: [PATCH 77/89] Release 8.5.20 version --- CHANGELOG.md | 5 +++++ lib/processor.js | 2 +- package.json | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 59add73ae..705c98a19 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,11 @@ This project adheres to [Semantic Versioning](https://semver.org/). +## 8.5.20 + +- Fixed missing space if `AtRule#params` is set after (by @sarathfrancis90). +- Fixed mixing AST error on warnings (by @MahinAnowar). + ## 8.5.19 - Fixed cleaning `before` for new nodes inserted to `Root` (by @MahinAnowar). diff --git a/lib/processor.js b/lib/processor.js index 7579b1328..83b7055ef 100644 --- a/lib/processor.js +++ b/lib/processor.js @@ -7,7 +7,7 @@ let Root = require('./root') class Processor { constructor(plugins = []) { - this.version = '8.5.19' + this.version = '8.5.20' this.plugins = this.normalize(plugins) } diff --git a/package.json b/package.json index d67d5d05c..7a6330d98 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "postcss", - "version": "8.5.19", + "version": "8.5.20", "description": "Tool for transforming styles with JS plugins", "keywords": [ "css", From 0e360b749aa17a5a89baccf9c8e5db3c2978c21e Mon Sep 17 00:00:00 2001 From: Ian Kerins Date: Tue, 21 Jul 2026 04:52:01 -0400 Subject: [PATCH 78/89] Fix mismatched JSDoc comments on Position (#2114) Also, clarify that `column` is 1-based, like `line`. --- lib/node.d.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/node.d.ts b/lib/node.d.ts index ecd86e231..e93ce5bae 100644 --- a/lib/node.d.ts +++ b/lib/node.d.ts @@ -31,12 +31,12 @@ declare namespace Node { export interface Position { /** - * Source line in file. In contrast to `offset` it starts from 1. + * Source column in file. It starts from 1. */ column: number /** - * Source column in file. + * Source line in file. It starts from 1. */ line: number From d197327e82e1a7d6dd9272effa3e4bfa91fdd20e Mon Sep 17 00:00:00 2001 From: Sarath Francis Date: Tue, 21 Jul 2026 04:53:42 -0400 Subject: [PATCH 79/89] Fix childless at-rule losing its semicolon before a comment (#2115) A childless (statement) at-rule that is the last non-comment child but is followed by comment siblings was stringified without its terminating semicolon. On re-parse the trailing comments were folded into the at-rule prelude and dropped, so building such a tree with append() or insertBefore() silently lost the comment nodes. Emit the semicolon when a childless at-rule still has following siblings so the output round-trips. --- lib/stringifier.js | 17 +++++++++++++++-- test/stringifier.test.js | 31 +++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 2 deletions(-) diff --git a/lib/stringifier.js b/lib/stringifier.js index dfab9f193..4af2ebc08 100644 --- a/lib/stringifier.js +++ b/lib/stringifier.js @@ -60,10 +60,23 @@ function pushBody(str, stack, node) { let semicolon = str.raw(node, 'semicolon') let isDocument = node.type === 'document' for (let i = nodes.length - 1; i >= 0; i--) { + let child = nodes[i] + let childSemicolon = last !== i || semicolon + // A childless at-rule that still has following siblings must be + // terminated. Without the semicolon those trailing comments are folded + // into the at-rule's prelude and disappear when the output is re-parsed. + if ( + !childSemicolon && + i < nodes.length - 1 && + child.type === 'atrule' && + !child.nodes + ) { + childSemicolon = true + } stack.push({ document: isDocument, - node: nodes[i], - semicolon: last !== i || semicolon + node: child, + semicolon: childSemicolon }) } } diff --git a/test/stringifier.test.js b/test/stringifier.test.js index e478817ad..d015016ed 100755 --- a/test/stringifier.test.js +++ b/test/stringifier.test.js @@ -3,6 +3,7 @@ let { is } = require('uvu/assert') let { AtRule, + Comment, Declaration, Document, Node, @@ -157,6 +158,36 @@ test('clones semicolon only from rules with children', () => { is(str.raw(css.first, 'semicolon'), true) }) +test('terminates childless at-rule followed by a comment', () => { + let css = parse('a {}\n/* comment */') + css.insertBefore(css.last, new AtRule({ name: 'import', params: '"x.css"' })) + + is(css.toString(), 'a {}\n@import "x.css";\n/* comment */') + is( + parse(css.toString()) + .nodes.map(i => i.type) + .join(','), + 'rule,atrule,comment' + ) +}) + +test('terminates nested childless at-rule followed by a comment', () => { + let css = parse('@media screen {\n a {}\n}') + css.first.append(new AtRule({ name: 'import', params: '"y.css"' })) + css.first.append(new Comment({ text: 'note' })) + + is( + css.toString(), + '@media screen {\n a {}\n @import "y.css";\n /* note */\n}' + ) + is( + parse(css.toString()) + .first.nodes.map(i => i.type) + .join(','), + 'rule,atrule,comment' + ) +}) + test('clones only spaces in before', () => { let css = parse('a{*one:1}') css.first.append({ prop: 'two', value: '2' }) From 3d2b4e43e38274f233b5609d09687cadad8215d9 Mon Sep 17 00:00:00 2001 From: Andrey Sitnik Date: Tue, 21 Jul 2026 08:55:33 +0000 Subject: [PATCH 80/89] Update dependencies --- .github/workflows/test.yml | 4 +- package.json | 4 +- pnpm-lock.yaml | 388 +++++++++++++++++++------------------ 3 files changed, 199 insertions(+), 197 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 9760a602a..e9a172f29 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -72,7 +72,7 @@ jobs: env: ACTIONS_ALLOW_UNSECURE_COMMANDS: true - name: Install Node.js ${{ matrix.node }} - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: node-version: ${{ matrix.node }} - name: Install dependencies @@ -94,7 +94,7 @@ jobs: with: version: 11 - name: Install Node.js LTS - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: node-version: 26 cache: pnpm diff --git a/package.json b/package.json index 7a6330d98..0395ae14c 100644 --- a/package.json +++ b/package.json @@ -99,11 +99,11 @@ "@size-limit/preset-small-lib": "^12.1.0", "@types/node": "^26.1.1", "actions-up": "^1.16.0", - "c8": "^11.0.0", + "c8": "^12.0.0", "check-dts": "^0.9.0", "concat-with-sourcemaps": "^1.1.0", "eslint": "^10.7.0", - "multiocular": "^0.8.3", + "multiocular": "^0.8.4", "nanodelay": "^1.0.8", "nanospy": "^2.0.2", "oxfmt": "^0.59.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 30728af41..7f33aced8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,7 +20,7 @@ importers: devDependencies: '@logux/eslint-config': specifier: ^57.1.0 - version: 57.1.0(@typescript-eslint/utils@8.63.0(eslint@10.7.0)(typescript@5.9.3))(eslint@10.7.0)(typescript@5.9.3) + version: 57.1.0(@typescript-eslint/utils@8.64.0(eslint@10.7.0(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3))(eslint@10.7.0(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3) '@logux/oxc-configs': specifier: ^0.4.1 version: 0.4.1(oxlint-tsgolint@0.18.1)(oxlint@1.58.0(oxlint-tsgolint@0.18.1))(typescript@5.9.3) @@ -34,8 +34,8 @@ importers: specifier: ^1.16.0 version: 1.16.0 c8: - specifier: ^11.0.0 - version: 11.0.0 + specifier: ^12.0.0 + version: 12.0.0 check-dts: specifier: ^0.9.0 version: 0.9.0(typescript@5.9.3) @@ -44,10 +44,10 @@ importers: version: 1.1.0 eslint: specifier: ^10.7.0 - version: 10.7.0 + version: 10.7.0(supports-color@7.2.0) multiocular: - specifier: ^0.8.3 - version: 0.8.3 + specifier: ^0.8.4 + version: 0.8.4(@logux/core@0.10.0) nanodelay: specifier: ^1.0.8 version: 1.0.8 @@ -712,63 +712,63 @@ packages: '@types/unist@3.0.3': resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} - '@typescript-eslint/eslint-plugin@8.63.0': - resolution: {integrity: sha512-rvwSgqT+DHpWdzfSzPatRLm02a0GlESt++9iy3hLCDY4BgkaLcl8LBi9Yh7XGFBpwcBE/K3024QuXWTpbz4FfQ==} + '@typescript-eslint/eslint-plugin@8.64.0': + resolution: {integrity: sha512-CGvQPBxN3wZLu6Rz2kFUpZeoCm78xUic92ck39KPePkO1NPOwjCqdQnm5Q87tpWw9vcBvW8XLrDXjH9PWYtJ3Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.63.0 + '@typescript-eslint/parser': ^8.64.0 eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/parser@8.63.0': - resolution: {integrity: sha512-gwh4gvvlaVDKKxyfxMG+Gnu1u9X0OQBwyGLkbwB65dIzBKnxeRiJlNFqlI3zwVhNXJIs6qV7mlFCn/BIajlVig==} + '@typescript-eslint/parser@8.64.0': + resolution: {integrity: sha512-KA0OshtlcCCXmbfqyZkM5pV3/WNraJf7DkJRLpyrmwPtud57H5BDX7C3k0LPSPxpprfRL+cJDGabF10mvNCoCw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/project-service@8.63.0': - resolution: {integrity: sha512-e5dh0/UI0ok53AlZ5wRkXCB32z/f2jUZqPR/ygAw5WYaSw8j9EoJWlS7wQjr/dmOaqWjnPIn2m+HhVPCMWGZVQ==} + '@typescript-eslint/project-service@8.64.0': + resolution: {integrity: sha512-tk4WpOJ6IEbGrVHaNmM0YRrwAD3exZlIK3iadQNAxh4YKk6jvUQ4ecq18n+v7+meh+cJ3j+D8nbk8sRKhlwLQg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/scope-manager@8.63.0': - resolution: {integrity: sha512-uUyfMWCnDSN8bCpcrY8nGP2BLkQ9Xn0GsipcONcpIDWhwhO4ZSyHvyS14U3X75mzxWxL3I2UZIrenTzdzcJO8A==} + '@typescript-eslint/scope-manager@8.64.0': + resolution: {integrity: sha512-CXEaFdYXjSTgKhisNkwCcJwTP8Pl+fmRrEQrri4nm3vU743bALrxzLmq7fHG/7e6a5xO0lDYeURpZmBuhHk54w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.63.0': - resolution: {integrity: sha512-sUAbkulqBAsncKnbRP3+7CtQFRKicexnj7ZwNC6ddCR7EmrXvjvdCYMJbUIqMd6lwoEriZjwLo08aS5tSjVMHg==} + '@typescript-eslint/tsconfig-utils@8.64.0': + resolution: {integrity: sha512-2yo8rRNKuzbVWQp5kslhANqZ2uDAeROQHBRZNPu8JDsHmeFNj/XJJhX/FhNUWmkHHvoNsKa6+tHJiig87EzsQw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/type-utils@8.63.0': - resolution: {integrity: sha512-Nzzh/OGxVCOjObjaj1CQF2RUasyYy2Jfuh+zZ3PjLzG2fYRriAiZLib9UKtO+CpQAS3YHiAS+ckZDclwqI1TPA==} + '@typescript-eslint/type-utils@8.64.0': + resolution: {integrity: sha512-XWG4Fmmv/6SvyS9nH8jWrKs6terwJvE8cyRt1CzYYqzp9OrPhCT4cMc/f7C6RZCwG+qMmiffJS1/qJP8G1URtg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/types@8.63.0': - resolution: {integrity: sha512-xyLtl9DUBBFrcJS4x2pIqGLH68/tC2uOa4Z7pUteW09D3bXnnXUom4dyPikzWgB7llmIc1zoeI3aoUdC4rPK/Q==} + '@typescript-eslint/types@8.64.0': + resolution: {integrity: sha512-qjhfuTfLXjA4IOzXvz0rTjT01BqEiIgPoUeMwiEjnaHKJMTNo8rH5pYW1a2L/0Dnux2fPC85AeyJoWaGa8WxTA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.63.0': - resolution: {integrity: sha512-ygBkU+B7ex5UI/gKhaqexWev79uISfIv7XQCRNYO/jmD8rGLPyWLAb3KMRT6nd8Gt9bmUBi9+iX6tBdYfOY81Q==} + '@typescript-eslint/typescript-estree@8.64.0': + resolution: {integrity: sha512-Pztpsn1aCE1oWDvDEfUk31nngvvF7vUB5SwHFEaZIFpvw7WJtqUHHL4plBZDA9HfWJJjL13BdG0YrJInTUvoVA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/utils@8.63.0': - resolution: {integrity: sha512-fUKaeAvrTuQg/Tgt3nliAUSZHJM6DlCcfyEmxCvlX8kieWSStBX+5O5Fnidtc3i2JrH+9c/GL4RY2iasd/GPTA==} + '@typescript-eslint/utils@8.64.0': + resolution: {integrity: sha512-aJUGVB3+U0htrrCjoA8qukw8cm8fNCGAxK/tVoS70k8aeb7DETKeFozRiVFIwEeN9WJLsjaP3ph8I60tY2XZoQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/visitor-keys@8.63.0': - resolution: {integrity: sha512-UexrHGnGTpbuQHct2ExOc2ZcFbGUS9FOesCxxqdBGcpI1BxYu/LZ6U8Aq6/72XtF/qRBk9nhuGHFJIXXMhPMdw==} + '@typescript-eslint/visitor-keys@8.64.0': + resolution: {integrity: sha512-mrtuL8Nsn6gi2H4mo5KMTp823M+3Q19Ew/i+Zlikq20tIMm99C3Ez0dCmkWWnxut20esQvTg8aUSEhMcAOXhEw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@unrs/resolver-binding-android-arm-eabi@1.12.2': @@ -924,9 +924,13 @@ packages: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} + ansi-regex@6.2.2: + resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} + engines: {node: '>=12'} + + ansi-styles@6.2.3: + resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} + engines: {node: '>=12'} arg@4.1.3: resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} @@ -956,9 +960,9 @@ packages: resolution: {integrity: sha512-fey6+4jDK7TFtFg/klGSvNKJctyU7n2aQdnM+CO0ruLPbqqMOM8Tio0Pc+deqUeVKX1tL5DQep1zQ7+37aTAsA==} engines: {node: '>= 0.8'} - c8@11.0.0: - resolution: {integrity: sha512-e/uRViGHSVIJv7zsaDKM7VRn2390TgHXqUSvYwPHBQaU6L7E9L0n9JbdkwdYPvshDT0KymBmmlwSpms3yBaMNg==} - engines: {node: 20 || >=22} + c8@12.0.0: + resolution: {integrity: sha512-4zpJvrd1nKWutnnKC2pXkFmb6iM1l+ffN//o1CzlTNwW7GSOs9a1xrLqkC48nU8oEkjmPZLPiwMsIaOvoF4Pqg==} + engines: {node: ^20.19.0 || ^22.12.0 || >=23} hasBin: true peerDependencies: monocart-coverage-reports: ^2 @@ -977,16 +981,9 @@ packages: peerDependencies: typescript: '>=4.0.0' - cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} - - color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - - color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + cliui@9.0.1: + resolution: {integrity: sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==} + engines: {node: '>=20'} comment-parser@1.4.7: resolution: {integrity: sha512-0h+uSNtQGW3D98eQt3jJ8L06Fves8hncB4V/PKdw/Qb8Hnk19VaKuTr55UNRYiSoVa7WwrFls+rh3ux9agmkeQ==} @@ -1047,11 +1044,11 @@ packages: dompurify@3.4.12: resolution: {integrity: sha512-zQvGet8Z2sWbQhCmfFz/T5QWH2oBmjnqK3qvOjaqaNLrLEF912WamU+ohnTp0TCep/MFVHpdJuCZEdFOdTnEFg==} - emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + emoji-regex@10.6.0: + resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} - enhanced-resolve@5.24.2: - resolution: {integrity: sha512-rpsZEGT1jFuve6QlpyRp9ckQ+kN61hvF9BzCPyMdaKTm8UJce96KBn3sorXOFXlzjPrs3Vc4T1NsSroZ3PxlFw==} + enhanced-resolve@5.24.3: + resolution: {integrity: sha512-PwKooW9JUzh5chmYfHM3IQl5OkK2u2Nm011MgeZrss3JmFraUx/fqrf78kk8GUMYoibx/14MdwTl/1WKkG7TpQ==} engines: {node: '>=10.13.0'} enquirer@2.4.1: @@ -1223,6 +1220,10 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} + get-east-asian-width@1.6.0: + resolution: {integrity: sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==} + engines: {node: '>=18'} + get-tsconfig@4.14.0: resolution: {integrity: sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==} @@ -1287,10 +1288,6 @@ packages: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} - is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} @@ -1388,8 +1385,8 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - multiocular@0.8.3: - resolution: {integrity: sha512-kOhHYiuAIhWLdCdUmPtpXMU2HR8M8Xg+ISOt6P2A/XhC5LuRd7KH61r3lGXS8pfQLqkf3BQ1ZndvlvrU3thGTg==} + multiocular@0.8.4: + resolution: {integrity: sha512-8uxpaHVnNghK+jE7KHa8+o4WHM4m/VLsmDkeYQ3kNDAy9g8SytOInvONlu/fk6WXo/m0PzEmaqiUvdWeERbD+w==} engines: {node: ^22.16.0 || >=24.0.0} hasBin: true @@ -1517,10 +1514,6 @@ packages: queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - requireindex@1.2.0: resolution: {integrity: sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==} engines: {node: '>=0.10.5'} @@ -1586,14 +1579,18 @@ packages: resolution: {integrity: sha512-o3yWv49B/o4QZk5ZcsALc6t0+eCelPc44zZsLtCQnZPDwFpDYSWcDnrv2TtMmMbQ7uKo3J0HTURCqckw23czNQ==} engines: {node: '>=12.0.0'} - string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} + string-width@7.2.0: + resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} + engines: {node: '>=18'} strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} + strip-ansi@7.2.0: + resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==} + engines: {node: '>=12'} + strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} @@ -1654,8 +1651,8 @@ packages: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} - typescript-eslint@8.63.0: - resolution: {integrity: sha512-xgwXyzG4sK9ALkBxbyGkTMMOS+imnW65iPhxCQMK83KhxyoDNW7l+IDqEf9vMdoUidHpOoS967RCq4eMiTexwQ==} + typescript-eslint@8.64.0: + resolution: {integrity: sha512-0qg+pDNMnqYzqH9AnNK+39tejHvsShUOUUoRUgtnTGE7QuMZhiFDnozq8nHJVq+Wae6NMLKNWLg5WmkcC/ndyQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 @@ -1712,12 +1709,12 @@ packages: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} - wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} + wrap-ansi@9.0.2: + resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==} + engines: {node: '>=18'} - ws@8.21.0: - resolution: {integrity: sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==} + ws@8.21.1: + resolution: {integrity: sha512-+0NTnW77fFN/DjQi6k/Sq/Yvk4Sgajw7urW8V+asjXnRgDs9gyGkdb7EzgfhA4goXsRIZKE28fzIXBHEzhuiWw==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -1741,9 +1738,13 @@ packages: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} - yargs@17.7.3: - resolution: {integrity: sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g==} - engines: {node: '>=12'} + yargs-parser@22.0.0: + resolution: {integrity: sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==} + engines: {node: ^20.19.0 || ^22.12.0 || >=23} + + yargs@18.0.0: + resolution: {integrity: sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==} + engines: {node: ^20.19.0 || ^22.12.0 || >=23} yn@3.1.1: resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} @@ -1855,17 +1856,17 @@ snapshots: '@esbuild/win32-x64@0.28.1': optional: true - '@eslint-community/eslint-utils@4.9.1(eslint@10.7.0)': + '@eslint-community/eslint-utils@4.9.1(eslint@10.7.0(supports-color@7.2.0))': dependencies: - eslint: 10.7.0 + eslint: 10.7.0(supports-color@7.2.0) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.2': {} - '@eslint/config-array@0.23.5': + '@eslint/config-array@0.23.5(supports-color@7.2.0)': dependencies: '@eslint/object-schema': 3.0.5 - debug: 4.4.3 + debug: 4.4.3(supports-color@7.2.0) minimatch: 10.2.5 transitivePeerDependencies: - supports-color @@ -1878,10 +1879,10 @@ snapshots: dependencies: '@types/json-schema': 7.0.15 - '@eslint/eslintrc@3.3.6': + '@eslint/eslintrc@3.3.6(supports-color@7.2.0)': dependencies: ajv: 6.15.0 - debug: 4.4.3 + debug: 4.4.3(supports-color@7.2.0) espree: 10.4.0 globals: 14.0.0 ignore: 5.3.2 @@ -1939,16 +1940,16 @@ snapshots: dependencies: nanoevents: 9.1.0 - '@logux/eslint-config@57.1.0(@typescript-eslint/utils@8.63.0(eslint@10.7.0)(typescript@5.9.3))(eslint@10.7.0)(typescript@5.9.3)': + '@logux/eslint-config@57.1.0(@typescript-eslint/utils@8.64.0(eslint@10.7.0(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3))(eslint@10.7.0(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3)': dependencies: - '@eslint/eslintrc': 3.3.6 - eslint: 10.7.0 - eslint-plugin-import-x: 4.17.1(@typescript-eslint/utils@8.63.0(eslint@10.7.0)(typescript@5.9.3))(eslint@10.7.0) - eslint-plugin-n: 17.24.0(eslint@10.7.0)(typescript@5.9.3) - eslint-plugin-perfectionist: 5.10.0(eslint@10.7.0)(typescript@5.9.3) + '@eslint/eslintrc': 3.3.6(supports-color@7.2.0) + eslint: 10.7.0(supports-color@7.2.0) + eslint-plugin-import-x: 4.17.1(@typescript-eslint/utils@8.64.0(eslint@10.7.0(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3))(eslint@10.7.0(supports-color@7.2.0))(supports-color@7.2.0) + eslint-plugin-n: 17.24.0(eslint@10.7.0(supports-color@7.2.0))(typescript@5.9.3) + eslint-plugin-perfectionist: 5.10.0(eslint@10.7.0(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3) eslint-plugin-prefer-let: 4.2.2 globals: 17.7.0 - typescript-eslint: 8.63.0(eslint@10.7.0)(typescript@5.9.3) + typescript-eslint: 8.64.0(eslint@10.7.0(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3) transitivePeerDependencies: - '@typescript-eslint/utils' - eslint-import-resolver-node @@ -1972,7 +1973,7 @@ snapshots: nanoid: 5.1.16 tinyglobby: 0.2.17 url-pattern: 1.0.3 - ws: 8.21.0 + ws: 8.21.1 transitivePeerDependencies: - bufferutil - utf-8-validate @@ -2178,15 +2179,15 @@ snapshots: '@types/unist@3.0.3': {} - '@typescript-eslint/eslint-plugin@8.63.0(@typescript-eslint/parser@8.63.0(eslint@10.7.0)(typescript@5.9.3))(eslint@10.7.0)(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.64.0(@typescript-eslint/parser@8.64.0(eslint@10.7.0(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3))(eslint@10.7.0(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.63.0(eslint@10.7.0)(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.63.0 - '@typescript-eslint/type-utils': 8.63.0(eslint@10.7.0)(typescript@5.9.3) - '@typescript-eslint/utils': 8.63.0(eslint@10.7.0)(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.63.0 - eslint: 10.7.0 + '@typescript-eslint/parser': 8.64.0(eslint@10.7.0(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.64.0 + '@typescript-eslint/type-utils': 8.64.0(eslint@10.7.0(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3) + '@typescript-eslint/utils': 8.64.0(eslint@10.7.0(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.64.0 + eslint: 10.7.0(supports-color@7.2.0) ignore: 7.0.6 natural-compare: 1.4.0 ts-api-utils: 2.5.0(typescript@5.9.3) @@ -2194,57 +2195,57 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.63.0(eslint@10.7.0)(typescript@5.9.3)': + '@typescript-eslint/parser@8.64.0(eslint@10.7.0(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3)': dependencies: - '@typescript-eslint/scope-manager': 8.63.0 - '@typescript-eslint/types': 8.63.0 - '@typescript-eslint/typescript-estree': 8.63.0(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.63.0 - debug: 4.4.3 - eslint: 10.7.0 + '@typescript-eslint/scope-manager': 8.64.0 + '@typescript-eslint/types': 8.64.0 + '@typescript-eslint/typescript-estree': 8.64.0(supports-color@7.2.0)(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.64.0 + debug: 4.4.3(supports-color@7.2.0) + eslint: 10.7.0(supports-color@7.2.0) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.63.0(typescript@5.9.3)': + '@typescript-eslint/project-service@8.64.0(supports-color@7.2.0)(typescript@5.9.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.63.0(typescript@5.9.3) - '@typescript-eslint/types': 8.63.0 - debug: 4.4.3 + '@typescript-eslint/tsconfig-utils': 8.64.0(typescript@5.9.3) + '@typescript-eslint/types': 8.64.0 + debug: 4.4.3(supports-color@7.2.0) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.63.0': + '@typescript-eslint/scope-manager@8.64.0': dependencies: - '@typescript-eslint/types': 8.63.0 - '@typescript-eslint/visitor-keys': 8.63.0 + '@typescript-eslint/types': 8.64.0 + '@typescript-eslint/visitor-keys': 8.64.0 - '@typescript-eslint/tsconfig-utils@8.63.0(typescript@5.9.3)': + '@typescript-eslint/tsconfig-utils@8.64.0(typescript@5.9.3)': dependencies: typescript: 5.9.3 - '@typescript-eslint/type-utils@8.63.0(eslint@10.7.0)(typescript@5.9.3)': + '@typescript-eslint/type-utils@8.64.0(eslint@10.7.0(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3)': dependencies: - '@typescript-eslint/types': 8.63.0 - '@typescript-eslint/typescript-estree': 8.63.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.63.0(eslint@10.7.0)(typescript@5.9.3) - debug: 4.4.3 - eslint: 10.7.0 + '@typescript-eslint/types': 8.64.0 + '@typescript-eslint/typescript-estree': 8.64.0(supports-color@7.2.0)(typescript@5.9.3) + '@typescript-eslint/utils': 8.64.0(eslint@10.7.0(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3) + debug: 4.4.3(supports-color@7.2.0) + eslint: 10.7.0(supports-color@7.2.0) ts-api-utils: 2.5.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.63.0': {} + '@typescript-eslint/types@8.64.0': {} - '@typescript-eslint/typescript-estree@8.63.0(typescript@5.9.3)': + '@typescript-eslint/typescript-estree@8.64.0(supports-color@7.2.0)(typescript@5.9.3)': dependencies: - '@typescript-eslint/project-service': 8.63.0(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.63.0(typescript@5.9.3) - '@typescript-eslint/types': 8.63.0 - '@typescript-eslint/visitor-keys': 8.63.0 - debug: 4.4.3 + '@typescript-eslint/project-service': 8.64.0(supports-color@7.2.0)(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.64.0(typescript@5.9.3) + '@typescript-eslint/types': 8.64.0 + '@typescript-eslint/visitor-keys': 8.64.0 + debug: 4.4.3(supports-color@7.2.0) minimatch: 10.2.5 semver: 7.8.5 tinyglobby: 0.2.17 @@ -2253,20 +2254,20 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.63.0(eslint@10.7.0)(typescript@5.9.3)': + '@typescript-eslint/utils@8.64.0(eslint@10.7.0(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.7.0) - '@typescript-eslint/scope-manager': 8.63.0 - '@typescript-eslint/types': 8.63.0 - '@typescript-eslint/typescript-estree': 8.63.0(typescript@5.9.3) - eslint: 10.7.0 + '@eslint-community/eslint-utils': 4.9.1(eslint@10.7.0(supports-color@7.2.0)) + '@typescript-eslint/scope-manager': 8.64.0 + '@typescript-eslint/types': 8.64.0 + '@typescript-eslint/typescript-estree': 8.64.0(supports-color@7.2.0)(typescript@5.9.3) + eslint: 10.7.0(supports-color@7.2.0) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.63.0': + '@typescript-eslint/visitor-keys@8.64.0': dependencies: - '@typescript-eslint/types': 8.63.0 + '@typescript-eslint/types': 8.64.0 eslint-visitor-keys: 5.0.1 '@unrs/resolver-binding-android-arm-eabi@1.12.2': @@ -2370,9 +2371,9 @@ snapshots: ansi-regex@5.0.1: {} - ansi-styles@4.3.0: - dependencies: - color-convert: 2.0.1 + ansi-regex@6.2.2: {} + + ansi-styles@6.2.3: {} arg@4.1.3: {} @@ -2397,7 +2398,7 @@ snapshots: bytes-iec@3.1.1: {} - c8@11.0.0: + c8@12.0.0: dependencies: '@bcoe/v8-coverage': 1.0.2 '@istanbuljs/schema': 0.1.6 @@ -2408,7 +2409,7 @@ snapshots: istanbul-reports: 3.2.0 test-exclude: 8.0.0 v8-to-istanbul: 9.3.0 - yargs: 17.7.3 + yargs: 18.0.0 yargs-parser: 21.1.1 callsites@3.1.0: {} @@ -2421,17 +2422,11 @@ snapshots: typescript: 5.9.3 vfile-location: 5.0.3 - cliui@8.0.1: + cliui@9.0.1: dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 7.0.0 - - color-convert@2.0.1: - dependencies: - color-name: 1.1.4 - - color-name@1.1.4: {} + string-width: 7.2.0 + strip-ansi: 7.2.0 + wrap-ansi: 9.0.2 comment-parser@1.4.7: {} @@ -2453,9 +2448,11 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 - debug@4.4.3: + debug@4.4.3(supports-color@7.2.0): dependencies: ms: 2.1.3 + optionalDependencies: + supports-color: 7.2.0 deep-is@0.1.4: {} @@ -2478,9 +2475,9 @@ snapshots: optionalDependencies: '@types/trusted-types': 2.0.7 - emoji-regex@8.0.0: {} + emoji-regex@10.6.0: {} - enhanced-resolve@5.24.2: + enhanced-resolve@5.24.3: dependencies: graceful-fs: 4.2.11 tapable: 2.3.3 @@ -2523,9 +2520,9 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-compat-utils@0.5.1(eslint@10.7.0): + eslint-compat-utils@0.5.1(eslint@10.7.0(supports-color@7.2.0)): dependencies: - eslint: 10.7.0 + eslint: 10.7.0(supports-color@7.2.0) semver: 7.8.5 eslint-import-context@0.1.9(unrs-resolver@1.12.2): @@ -2535,19 +2532,19 @@ snapshots: optionalDependencies: unrs-resolver: 1.12.2 - eslint-plugin-es-x@7.8.0(eslint@10.7.0): + eslint-plugin-es-x@7.8.0(eslint@10.7.0(supports-color@7.2.0)): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.7.0) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.7.0(supports-color@7.2.0)) '@eslint-community/regexpp': 4.12.2 - eslint: 10.7.0 - eslint-compat-utils: 0.5.1(eslint@10.7.0) + eslint: 10.7.0(supports-color@7.2.0) + eslint-compat-utils: 0.5.1(eslint@10.7.0(supports-color@7.2.0)) - eslint-plugin-import-x@4.17.1(@typescript-eslint/utils@8.63.0(eslint@10.7.0)(typescript@5.9.3))(eslint@10.7.0): + eslint-plugin-import-x@4.17.1(@typescript-eslint/utils@8.64.0(eslint@10.7.0(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3))(eslint@10.7.0(supports-color@7.2.0))(supports-color@7.2.0): dependencies: - '@typescript-eslint/types': 8.63.0 + '@typescript-eslint/types': 8.64.0 comment-parser: 1.4.7 - debug: 4.4.3 - eslint: 10.7.0 + debug: 4.4.3(supports-color@7.2.0) + eslint: 10.7.0(supports-color@7.2.0) eslint-import-context: 0.1.9(unrs-resolver@1.12.2) is-glob: 4.0.3 minimatch: 10.2.5 @@ -2555,16 +2552,16 @@ snapshots: stable-hash-x: 0.2.0 unrs-resolver: 1.12.2 optionalDependencies: - '@typescript-eslint/utils': 8.63.0(eslint@10.7.0)(typescript@5.9.3) + '@typescript-eslint/utils': 8.64.0(eslint@10.7.0(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3) transitivePeerDependencies: - supports-color - eslint-plugin-n@17.24.0(eslint@10.7.0)(typescript@5.9.3): + eslint-plugin-n@17.24.0(eslint@10.7.0(supports-color@7.2.0))(typescript@5.9.3): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.7.0) - enhanced-resolve: 5.24.2 - eslint: 10.7.0 - eslint-plugin-es-x: 7.8.0(eslint@10.7.0) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.7.0(supports-color@7.2.0)) + enhanced-resolve: 5.24.3 + eslint: 10.7.0(supports-color@7.2.0) + eslint-plugin-es-x: 7.8.0(eslint@10.7.0(supports-color@7.2.0)) get-tsconfig: 4.14.0 globals: 15.15.0 globrex: 0.1.2 @@ -2574,10 +2571,10 @@ snapshots: transitivePeerDependencies: - typescript - eslint-plugin-perfectionist@5.10.0(eslint@10.7.0)(typescript@5.9.3): + eslint-plugin-perfectionist@5.10.0(eslint@10.7.0(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3): dependencies: - '@typescript-eslint/utils': 8.63.0(eslint@10.7.0)(typescript@5.9.3) - eslint: 10.7.0 + '@typescript-eslint/utils': 8.64.0(eslint@10.7.0(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3) + eslint: 10.7.0(supports-color@7.2.0) natural-orderby: 5.0.0 transitivePeerDependencies: - supports-color @@ -2600,11 +2597,11 @@ snapshots: eslint-visitor-keys@5.0.1: {} - eslint@10.7.0: + eslint@10.7.0(supports-color@7.2.0): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.7.0) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.7.0(supports-color@7.2.0)) '@eslint-community/regexpp': 4.12.2 - '@eslint/config-array': 0.23.5 + '@eslint/config-array': 0.23.5(supports-color@7.2.0) '@eslint/config-helpers': 0.6.0 '@eslint/core': 1.2.1 '@eslint/plugin-kit': 0.7.2 @@ -2614,7 +2611,7 @@ snapshots: '@types/estree': 1.0.9 ajv: 6.15.0 cross-spawn: 7.0.6 - debug: 4.4.3 + debug: 4.4.3(supports-color@7.2.0) escape-string-regexp: 4.0.0 eslint-scope: 9.1.2 eslint-visitor-keys: 5.0.1 @@ -2708,6 +2705,8 @@ snapshots: get-caller-file@2.0.5: {} + get-east-asian-width@1.6.0: {} + get-tsconfig@4.14.0: dependencies: resolve-pkg-maps: 1.0.0 @@ -2755,8 +2754,6 @@ snapshots: is-extglob@2.1.1: {} - is-fullwidth-code-point@3.0.0: {} - is-glob@4.0.3: dependencies: is-extglob: 2.1.1 @@ -2836,8 +2833,9 @@ snapshots: ms@2.1.3: {} - multiocular@0.8.3: + multiocular@0.8.4(@logux/core@0.10.0): dependencies: + '@logux/actions': 0.5.0(@logux/core@0.10.0) '@logux/server': 0.14.0 diff2html: 3.4.56 dompurify: 3.4.12 @@ -2846,6 +2844,7 @@ snapshots: nanostores: 1.4.0 yaml: 2.9.0 transitivePeerDependencies: + - '@logux/core' - bufferutil - utf-8-validate @@ -2977,8 +2976,6 @@ snapshots: queue-microtask@1.2.3: {} - require-directory@2.1.1: {} - requireindex@1.2.0: {} resolve-from@4.0.0: {} @@ -3021,16 +3018,20 @@ snapshots: stable-hash-x@0.2.0: {} - string-width@4.2.3: + string-width@7.2.0: dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.1 + emoji-regex: 10.6.0 + get-east-asian-width: 1.6.0 + strip-ansi: 7.2.0 strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 + strip-ansi@7.2.0: + dependencies: + ansi-regex: 6.2.2 + strip-json-comments@3.1.1: {} supports-color@7.2.0: @@ -3090,13 +3091,13 @@ snapshots: dependencies: prelude-ls: 1.2.1 - typescript-eslint@8.63.0(eslint@10.7.0)(typescript@5.9.3): + typescript-eslint@8.64.0(eslint@10.7.0(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.63.0(@typescript-eslint/parser@8.63.0(eslint@10.7.0)(typescript@5.9.3))(eslint@10.7.0)(typescript@5.9.3) - '@typescript-eslint/parser': 8.63.0(eslint@10.7.0)(typescript@5.9.3) - '@typescript-eslint/typescript-estree': 8.63.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.63.0(eslint@10.7.0)(typescript@5.9.3) - eslint: 10.7.0 + '@typescript-eslint/eslint-plugin': 8.64.0(@typescript-eslint/parser@8.64.0(eslint@10.7.0(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3))(eslint@10.7.0(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3) + '@typescript-eslint/parser': 8.64.0(eslint@10.7.0(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.64.0(supports-color@7.2.0)(typescript@5.9.3) + '@typescript-eslint/utils': 8.64.0(eslint@10.7.0(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3) + eslint: 10.7.0(supports-color@7.2.0) typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -3178,13 +3179,13 @@ snapshots: word-wrap@1.2.5: {} - wrap-ansi@7.0.0: + wrap-ansi@9.0.2: dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 + ansi-styles: 6.2.3 + string-width: 7.2.0 + strip-ansi: 7.2.0 - ws@8.21.0: {} + ws@8.21.1: {} y18n@5.0.8: {} @@ -3192,15 +3193,16 @@ snapshots: yargs-parser@21.1.1: {} - yargs@17.7.3: + yargs-parser@22.0.0: {} + + yargs@18.0.0: dependencies: - cliui: 8.0.1 + cliui: 9.0.1 escalade: 3.2.0 get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 + string-width: 7.2.0 y18n: 5.0.8 - yargs-parser: 21.1.1 + yargs-parser: 22.0.0 yn@3.1.1: {} From 28e0daf8f2fe5ba9e19ea3f8c27c8fe176f9419e Mon Sep 17 00:00:00 2001 From: Andrey Sitnik Date: Tue, 21 Jul 2026 08:56:53 +0000 Subject: [PATCH 81/89] Release 8.5.21 version --- CHANGELOG.md | 5 +++++ lib/processor.js | 2 +- package.json | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 705c98a19..df9a55ae3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,11 @@ This project adheres to [Semantic Versioning](https://semver.org/). +## 8.5.21 + +- Fixed childless at-rule losing semicolon before comment (by @sarathfrancis90). +- Fixed docs (by @isker). + ## 8.5.20 - Fixed missing space if `AtRule#params` is set after (by @sarathfrancis90). diff --git a/lib/processor.js b/lib/processor.js index 83b7055ef..20114932e 100644 --- a/lib/processor.js +++ b/lib/processor.js @@ -7,7 +7,7 @@ let Root = require('./root') class Processor { constructor(plugins = []) { - this.version = '8.5.20' + this.version = '8.5.21' this.plugins = this.normalize(plugins) } diff --git a/package.json b/package.json index 0395ae14c..21fe1afbc 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "postcss", - "version": "8.5.20", + "version": "8.5.21", "description": "Tool for transforming styles with JS plugins", "keywords": [ "css", From f49d6911795f53b2cfe023bb686bf1144ec30618 Mon Sep 17 00:00:00 2001 From: Sarath Francis Date: Wed, 22 Jul 2026 03:41:08 -0400 Subject: [PATCH 82/89] Fix custom property losing its semicolon before a comment (#2117) A custom property declaration that is the last non-comment child but is followed by comment siblings was stringified without its terminating semicolon. Unlike a normal declaration, a custom property keeps everything up to the next `;` or `}` as its value, so on re-parse the trailing comments were folded into the value and the comment nodes disappeared. Building such a tree with append()/insertAfter()/after() therefore silently dropped the comments. Emit the semicolon when a custom property still has following siblings so the output round-trips, mirroring the existing handling for childless at-rules. --- lib/stringifier.js | 11 ++++++----- test/stringifier.test.js | 26 ++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 5 deletions(-) diff --git a/lib/stringifier.js b/lib/stringifier.js index 4af2ebc08..2c74ce763 100644 --- a/lib/stringifier.js +++ b/lib/stringifier.js @@ -62,14 +62,15 @@ function pushBody(str, stack, node) { for (let i = nodes.length - 1; i >= 0; i--) { let child = nodes[i] let childSemicolon = last !== i || semicolon - // A childless at-rule that still has following siblings must be - // terminated. Without the semicolon those trailing comments are folded - // into the at-rule's prelude and disappear when the output is re-parsed. + // A childless at-rule or a custom property declaration that still has + // following siblings must be terminated. Without the semicolon those + // trailing comments are folded into the at-rule's prelude or the custom + // property's value and disappear when the output is re-parsed. if ( !childSemicolon && i < nodes.length - 1 && - child.type === 'atrule' && - !child.nodes + ((child.type === 'atrule' && !child.nodes) || + (child.type === 'decl' && child.prop.startsWith('--'))) ) { childSemicolon = true } diff --git a/test/stringifier.test.js b/test/stringifier.test.js index d015016ed..4c33cde7b 100755 --- a/test/stringifier.test.js +++ b/test/stringifier.test.js @@ -188,6 +188,32 @@ test('terminates nested childless at-rule followed by a comment', () => { ) }) +test('terminates custom property followed by a comment', () => { + let css = parse('a{--x:red}') + css.first.append(new Comment({ text: 'note' })) + + is(css.toString(), 'a{--x:red;/* note */}') + is( + parse(css.toString()) + .first.nodes.map(i => i.type) + .join(','), + 'decl,comment' + ) +}) + +test('terminates custom property with !important before a comment', () => { + let css = parse('a{--x:red !important}') + css.first.first.after(new Comment({ text: 'note' })) + + is(css.toString(), 'a{--x:red !important;/* note */}') + is( + parse(css.toString()) + .first.nodes.map(i => i.type) + .join(','), + 'decl,comment' + ) +}) + test('clones only spaces in before', () => { let css = parse('a{*one:1}') css.first.append({ prop: 'two', value: '2' }) From a3e48c492ddec0e4879d513b8b995fee887af352 Mon Sep 17 00:00:00 2001 From: Andrey Sitnik Date: Wed, 22 Jul 2026 08:47:41 +0000 Subject: [PATCH 83/89] Release 8.5.22 version --- CHANGELOG.md | 4 ++++ lib/processor.js | 2 +- package.json | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index df9a55ae3..d39f180cb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ This project adheres to [Semantic Versioning](https://semver.org/). +## 8.5.22 + +- Fixed custom property losing semicolon before a comment (by @sarathfrancis90). + ## 8.5.21 - Fixed childless at-rule losing semicolon before comment (by @sarathfrancis90). diff --git a/lib/processor.js b/lib/processor.js index 20114932e..3b83b912e 100644 --- a/lib/processor.js +++ b/lib/processor.js @@ -7,7 +7,7 @@ let Root = require('./root') class Processor { constructor(plugins = []) { - this.version = '8.5.21' + this.version = '8.5.22' this.plugins = this.normalize(plugins) } diff --git a/package.json b/package.json index 21fe1afbc..8977b6dfc 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "postcss", - "version": "8.5.21", + "version": "8.5.22", "description": "Tool for transforming styles with JS plugins", "keywords": [ "css", From 98a39ad73d163a90be924d5126c771262110f1fc Mon Sep 17 00:00:00 2001 From: Andrey Sitnik Date: Wed, 22 Jul 2026 19:12:27 +0000 Subject: [PATCH 84/89] Update EM banner --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index 9cb6aba07..f16157f85 100644 --- a/README.md +++ b/README.md @@ -13,8 +13,7 @@ and JetBrains. The [Autoprefixer] and [Stylelint] PostCSS plugins are some o --- -  Built by -Evil Martians, go-to agency for developer tools. +  NAME is built by Evil Martians, an American design and engineering consultancy for developer tools, AI, and cybersecurity startups. --- From c18e30d126395d42a0726aa00e03a8f1088985ae Mon Sep 17 00:00:00 2001 From: Andrey Sitnik Date: Wed, 22 Jul 2026 19:13:05 +0000 Subject: [PATCH 85/89] Update EM banner --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f16157f85..043f38d02 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ and JetBrains. The [Autoprefixer] and [Stylelint] PostCSS plugins are some o --- -  NAME is built by Evil Martians, an American design and engineering consultancy for developer tools, AI, and cybersecurity startups. +  NAME is built by   NAME is built by   PostCSS is built by =22.0.0'} peerDependencies: oxlint: ^1.57.0 @@ -381,128 +378,6 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@oxfmt/binding-android-arm-eabi@0.59.0': - resolution: {integrity: sha512-bNTnfbuG7sAwb2PakMNaDukx5kXeW9duXOBeWtTOiLz3fXz3q2DlWguufPZ+c2IHEVrRXHD+M4aUgEWm841LDA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm] - os: [android] - - '@oxfmt/binding-android-arm64@0.59.0': - resolution: {integrity: sha512-R/Sn7z52QtdAKNqQLLY0EK7hVMjXiz3XUlvoCFCm/60jgIzAnQtiqLKBCFaBkimCQL5rs2ezPMcicpjCsrl54Q==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [android] - - '@oxfmt/binding-darwin-arm64@0.59.0': - resolution: {integrity: sha512-vm/ynUqE4HjC0ZIEjmXv1UJu1/GngccQ+T+TJudTMxUxm6r+GQTg1TO3E5jJfI71pBaXxSzs1+vWHIwuilGHhw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [darwin] - - '@oxfmt/binding-darwin-x64@0.59.0': - resolution: {integrity: sha512-uTtYDpLN/obfKVWGpgEc8BqYlLZBQTPz2uYEvLRy3HPZxjZ34wiFzukUBU2bf64JuCYZI//GTV1EOMmWlPjf/w==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [darwin] - - '@oxfmt/binding-freebsd-x64@0.59.0': - resolution: {integrity: sha512-e2UnxL/ifStSPy8ffBCDbdy595SYsGy+U1pur4G65TuMmWxAMBzYGG7atZo/3mp515p8rZdsflxVD/E1FAdPLQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [freebsd] - - '@oxfmt/binding-linux-arm-gnueabihf@0.59.0': - resolution: {integrity: sha512-LtdeZ1l0urxte3VNi3g8cocZwv1xGM1NKHSgF/fJEEVhyQmlgGh7WFWKFd/pNuO7djfvPNtNO1+MS+FEWkgVSA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm] - os: [linux] - - '@oxfmt/binding-linux-arm-musleabihf@0.59.0': - resolution: {integrity: sha512-dBTciSsj9GTMl7p+h2gMSI0hoPn2ijfc/dUsbnWsP0RbwgPl2r0C/5zkMb3Pb+gGj17LH7f1o4qLo9aes/pAvA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm] - os: [linux] - - '@oxfmt/binding-linux-arm64-gnu@0.59.0': - resolution: {integrity: sha512-tXVdJ/JINsNWdponPHN0OuKHtC+HdpyoS9sd6IDPNiiEYsRki8b7tefRZ1iMnRkdbyT4SEbguWsr6o+5awvbPQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [linux] - libc: [glibc] - - '@oxfmt/binding-linux-arm64-musl@0.59.0': - resolution: {integrity: sha512-RRTq38i2zT5fnw6XGHjvT6w2mh6x/G3m6AZcAZ56OTDTT/lsOeYnG3SVjwmH40z5kPqF+lf+o35e6m6PpKy9Dw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [linux] - libc: [musl] - - '@oxfmt/binding-linux-ppc64-gnu@0.59.0': - resolution: {integrity: sha512-lD3k7glAJSaXW0D6xzu8VOZbYbosvy+0ktOVkfLEoQF5HJlMSxTQ2KNW0JO+08ccP/1ElOKktVEMI0fqRbVB4w==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [ppc64] - os: [linux] - libc: [glibc] - - '@oxfmt/binding-linux-riscv64-gnu@0.59.0': - resolution: {integrity: sha512-WH5ZP1RbuHKBO/yfPRQKpNO/ijHcEDNbnmC4VPf/Bcd3+mbMAZpRiJWRa1PL5bREdIZZHo343mk3sqlc9x7Usw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [riscv64] - os: [linux] - libc: [glibc] - - '@oxfmt/binding-linux-riscv64-musl@0.59.0': - resolution: {integrity: sha512-743wOiaI9RZY4QVGkWkfGRavD5ZJUJ6gscFjVrVu1dP8AZh9jM+a6v3NhlR+OIzHdS6DhLM96w+gcVskskz7rw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [riscv64] - os: [linux] - libc: [musl] - - '@oxfmt/binding-linux-s390x-gnu@0.59.0': - resolution: {integrity: sha512-xjRXQsRnrRZCcCkIEnbd2lmsQNobtwwkJxdy2bWXhZ1lIN0ouZwsBXRsoovW3yATuziAYwr9HMiQuR/Cc75NIw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [s390x] - os: [linux] - libc: [glibc] - - '@oxfmt/binding-linux-x64-gnu@0.59.0': - resolution: {integrity: sha512-4hNjqq/Rbr9B+StY9zMMAfm72+mtM4v80xYL5Qkb59Qd72g2vJMI0iFlPj3kf6miMsie/yJ7rt4urJT292HBgA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [linux] - libc: [glibc] - - '@oxfmt/binding-linux-x64-musl@0.59.0': - resolution: {integrity: sha512-NH579iN8EVQYsWowUB8B5vFchcylJtwPVJ7NmUAqEQHNLfhPbDT3K56KrECNAkUN4QpF4qiMgN2vsfZwVvjm7g==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [linux] - libc: [musl] - - '@oxfmt/binding-openharmony-arm64@0.59.0': - resolution: {integrity: sha512-mzZy3Z5Aj1D75Aq9FVlmoRQH5ei8Ga4o/NZmlXkKyeZ5EmPrUXRR7c6BMBteV1ZuZ/356UYDuLRLjAMxTDTiBA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [openharmony] - - '@oxfmt/binding-win32-arm64-msvc@0.59.0': - resolution: {integrity: sha512-0CpDJ1gE3jN1Gk6xms1Ie6LPfPcOtY4FAtoOmVLHQoAf8DvO2wd0DW2dIX2f7YTp5dxrr0ND8JeUEjm3DP3k5g==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [win32] - - '@oxfmt/binding-win32-ia32-msvc@0.59.0': - resolution: {integrity: sha512-zwdKBu3pt87uW0bRcywZb0oGMS7C6n87qogwRYFUgmk44T90ZzYlPjtlFYXs/DnBFrgNCvlHwCuWKfVWLeE7kw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [ia32] - os: [win32] - - '@oxfmt/binding-win32-x64-msvc@0.59.0': - resolution: {integrity: sha512-dUUbZkKgWrmAeI/puzv4bxN8lzcYaFnQVwFTFtwO2Gp8M7lZGSE2qJjC58g518+1bltJ8mizjYwD0BGHym0l/w==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [win32] - '@oxlint-tsgolint/darwin-arm64@0.18.1': resolution: {integrity: sha512-CxSd15ZwHn70UJFTXVvy76bZ9zwI097cVyjvUFmYRJwvkQF3VnrTf2oe1gomUacErksvtqLgn9OKvZhLMYwvog==} cpu: [arm64] @@ -1438,19 +1313,6 @@ packages: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} - oxfmt@0.59.0: - resolution: {integrity: sha512-Xqk6cPZS1yMvVa7OAuenaDZUsgMDutvvbZ9/L5gSvAfW64+WN4HVhgipLj5rVERbYQt8fLs9TopyZ1rU1XEG/w==} - engines: {node: ^20.19.0 || >=22.12.0} - hasBin: true - peerDependencies: - svelte: ^5.0.0 - vite-plus: '*' - peerDependenciesMeta: - svelte: - optional: true - vite-plus: - optional: true - oxlint-tsgolint@0.18.1: resolution: {integrity: sha512-Hgb0wMfuXBYL0ddY+1hAG8IIfC40ADwPnBuUaC6ENAuCtTF4dHwsy7mCYtQ2e7LoGvfoSJRY0+kqQRiembJ/jQ==} hasBin: true @@ -1611,10 +1473,6 @@ packages: resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} engines: {node: '>=12.0.0'} - tinypool@2.1.0: - resolution: {integrity: sha512-Pugqs6M0m7Lv1I7FtxN4aoyToKg1C4tu+/381vH35y8oENM/Ai7f7C4StcoK4/+BSw9ebcS8jRiVrORFKCALLw==} - engines: {node: ^20.0.0 || >=22.0.0} - to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -1956,7 +1814,7 @@ snapshots: - supports-color - typescript - '@logux/oxc-configs@0.4.1(oxlint-tsgolint@0.18.1)(oxlint@1.58.0(oxlint-tsgolint@0.18.1))(typescript@5.9.3)': + '@logux/oxc-configs@1.0.0(oxlint-tsgolint@0.18.1)(oxlint@1.58.0(oxlint-tsgolint@0.18.1))(typescript@5.9.3)': dependencies: eslint-plugin-prefer-let: 4.2.2 oxlint: 1.58.0(oxlint-tsgolint@0.18.1) @@ -1997,63 +1855,6 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.20.1 - '@oxfmt/binding-android-arm-eabi@0.59.0': - optional: true - - '@oxfmt/binding-android-arm64@0.59.0': - optional: true - - '@oxfmt/binding-darwin-arm64@0.59.0': - optional: true - - '@oxfmt/binding-darwin-x64@0.59.0': - optional: true - - '@oxfmt/binding-freebsd-x64@0.59.0': - optional: true - - '@oxfmt/binding-linux-arm-gnueabihf@0.59.0': - optional: true - - '@oxfmt/binding-linux-arm-musleabihf@0.59.0': - optional: true - - '@oxfmt/binding-linux-arm64-gnu@0.59.0': - optional: true - - '@oxfmt/binding-linux-arm64-musl@0.59.0': - optional: true - - '@oxfmt/binding-linux-ppc64-gnu@0.59.0': - optional: true - - '@oxfmt/binding-linux-riscv64-gnu@0.59.0': - optional: true - - '@oxfmt/binding-linux-riscv64-musl@0.59.0': - optional: true - - '@oxfmt/binding-linux-s390x-gnu@0.59.0': - optional: true - - '@oxfmt/binding-linux-x64-gnu@0.59.0': - optional: true - - '@oxfmt/binding-linux-x64-musl@0.59.0': - optional: true - - '@oxfmt/binding-openharmony-arm64@0.59.0': - optional: true - - '@oxfmt/binding-win32-arm64-msvc@0.59.0': - optional: true - - '@oxfmt/binding-win32-ia32-msvc@0.59.0': - optional: true - - '@oxfmt/binding-win32-x64-msvc@0.59.0': - optional: true - '@oxlint-tsgolint/darwin-arm64@0.18.1': optional: true @@ -2883,30 +2684,6 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.5 - oxfmt@0.59.0: - dependencies: - tinypool: 2.1.0 - optionalDependencies: - '@oxfmt/binding-android-arm-eabi': 0.59.0 - '@oxfmt/binding-android-arm64': 0.59.0 - '@oxfmt/binding-darwin-arm64': 0.59.0 - '@oxfmt/binding-darwin-x64': 0.59.0 - '@oxfmt/binding-freebsd-x64': 0.59.0 - '@oxfmt/binding-linux-arm-gnueabihf': 0.59.0 - '@oxfmt/binding-linux-arm-musleabihf': 0.59.0 - '@oxfmt/binding-linux-arm64-gnu': 0.59.0 - '@oxfmt/binding-linux-arm64-musl': 0.59.0 - '@oxfmt/binding-linux-ppc64-gnu': 0.59.0 - '@oxfmt/binding-linux-riscv64-gnu': 0.59.0 - '@oxfmt/binding-linux-riscv64-musl': 0.59.0 - '@oxfmt/binding-linux-s390x-gnu': 0.59.0 - '@oxfmt/binding-linux-x64-gnu': 0.59.0 - '@oxfmt/binding-linux-x64-musl': 0.59.0 - '@oxfmt/binding-openharmony-arm64': 0.59.0 - '@oxfmt/binding-win32-arm64-msvc': 0.59.0 - '@oxfmt/binding-win32-ia32-msvc': 0.59.0 - '@oxfmt/binding-win32-x64-msvc': 0.59.0 - oxlint-tsgolint@0.18.1: optionalDependencies: '@oxlint-tsgolint/darwin-arm64': 0.18.1 @@ -3051,8 +2828,6 @@ snapshots: fdir: 6.5.0(picomatch@4.0.5) picomatch: 4.0.5 - tinypool@2.1.0: {} - to-regex-range@5.0.1: dependencies: is-number: 7.0.0 From eb9e1fe793740bb3280bdf5bf98147f857f011bd Mon Sep 17 00:00:00 2001 From: Andrey Sitnik Date: Fri, 24 Jul 2026 17:03:51 +0000 Subject: [PATCH 89/89] Release 8.5.23 version --- CHANGELOG.md | 4 ++++ lib/processor.js | 2 +- package.json | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d39f180cb..5bb679560 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ This project adheres to [Semantic Versioning](https://semver.org/). +## 8.5.23 + +- Do not load source map without `opts.from` for security reasons. + ## 8.5.22 - Fixed custom property losing semicolon before a comment (by @sarathfrancis90). diff --git a/lib/processor.js b/lib/processor.js index 3b83b912e..f6ae71f9f 100644 --- a/lib/processor.js +++ b/lib/processor.js @@ -7,7 +7,7 @@ let Root = require('./root') class Processor { constructor(plugins = []) { - this.version = '8.5.22' + this.version = '8.5.23' this.plugins = this.normalize(plugins) } diff --git a/package.json b/package.json index 96d6f50f2..e1ecd14f2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "postcss", - "version": "8.5.22", + "version": "8.5.23", "description": "Tool for transforming styles with JS plugins", "keywords": [ "css",