From: Evan You Date: Thu, 14 Nov 2024 12:57:59 +0000 (+0800) Subject: build: use rolldown X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=79eddcc7f63c787ac2f4875758afee6e8b122d57;p=thirdparty%2Fvuejs%2Fcore.git build: use rolldown --- diff --git a/eslint.config.js b/eslint.config.js index b752b2e19f..614b9483b0 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -148,6 +148,7 @@ export default tseslint.config( files: [ 'eslint.config.js', 'rollup*.config.js', + 'rolldown*.config.js', 'scripts/**', './*.{js,ts}', 'packages/*/*.js', diff --git a/package.json b/package.json index 2d3af0f27d..93463fded7 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,9 @@ "scripts": { "dev": "node scripts/dev.js", "build": "node scripts/build.js", - "build-dts": "tsc -p tsconfig.build.json --noCheck && rollup -c rollup.dts.config.js", + "build-rollup": "node scripts/build-with-rollup.js", + "build-dts": "node scripts/build-types.js", + "build-dts-tsc": "tsc -p tsconfig.build.json --noCheck && rollup -c rollup.dts.config.js", "clean": "rimraf --glob packages/*/dist temp .eslintcache", "size": "run-s \"size-*\" && node scripts/usage-size.js", "size-global": "node scripts/build.js vue runtime-dom -f global -p --size", @@ -62,8 +64,8 @@ "node": ">=18.12.0" }, "devDependencies": { - "@babel/parser": "catalog:", "@babel/types": "catalog:", + "@rolldown/plugin-node-polyfills": "^1.0.0", "@rollup/plugin-alias": "^5.1.1", "@rollup/plugin-commonjs": "^28.0.1", "@rollup/plugin-json": "^6.1.0", @@ -75,6 +77,7 @@ "@types/semver": "^7.5.8", "@types/serve-handler": "^6.1.4", "@vitest/coverage-v8": "^2.1.1", + "@vitest/eslint-plugin": "^1.0.1", "@vue/consolidate": "1.0.0", "conventional-changelog-cli": "^5.0.0", "enquirer": "^2.4.1", @@ -82,8 +85,8 @@ "esbuild-plugin-polyfill-node": "^0.3.0", "eslint": "^9.14.0", "eslint-plugin-import-x": "^4.4.0", - "@vitest/eslint-plugin": "^1.0.1", "estree-walker": "catalog:", + "fast-glob": "^3.3.2", "jsdom": "^25.0.0", "lint-staged": "^15.2.10", "lodash": "^4.17.21", @@ -91,12 +94,15 @@ "markdown-table": "^3.0.4", "marked": "13.0.3", "npm-run-all2": "^7.0.1", + "oxc-parser": "^0.35.0", + "oxc-transform": "^0.35.0", "picocolors": "^1.1.1", "prettier": "^3.3.3", "pretty-bytes": "^6.1.1", "pug": "^3.0.3", "puppeteer": "~23.3.0", "rimraf": "^6.0.1", + "rolldown": "0.14.0-snapshot-d5e797b-20241114003621", "rollup": "^4.25.0", "rollup-plugin-dts": "^6.1.1", "rollup-plugin-esbuild": "^6.1.1", diff --git a/packages/compiler-sfc/__tests__/parse.spec.ts b/packages/compiler-sfc/__tests__/parse.spec.ts index 87cd05ed0e..265655e47e 100644 --- a/packages/compiler-sfc/__tests__/parse.spec.ts +++ b/packages/compiler-sfc/__tests__/parse.spec.ts @@ -81,7 +81,7 @@ font-weight: bold; const consumer = new SourceMapConsumer(script!.map!) consumer.eachMapping(mapping => { - expect(mapping.originalLine - mapping.generatedLine).toBe(padding) + expect(mapping.originalLine! - mapping.generatedLine).toBe(padding) }) }) @@ -100,8 +100,8 @@ font-weight: bold; const consumer = new SourceMapConsumer(template.map!) consumer.eachMapping(mapping => { - expect(mapping.originalLine - mapping.generatedLine).toBe(padding) - expect(mapping.originalColumn - mapping.generatedColumn).toBe(2) + expect(mapping.originalLine! - mapping.generatedLine).toBe(padding) + expect(mapping.originalColumn! - mapping.generatedColumn).toBe(2) }) }) @@ -115,7 +115,7 @@ font-weight: bold; const consumer = new SourceMapConsumer(custom!.map!) consumer.eachMapping(mapping => { - expect(mapping.originalLine - mapping.generatedLine).toBe(padding) + expect(mapping.originalLine! - mapping.generatedLine).toBe(padding) }) }) }) diff --git a/packages/compiler-sfc/src/compileTemplate.ts b/packages/compiler-sfc/src/compileTemplate.ts index 322b1570e1..b043cf813d 100644 --- a/packages/compiler-sfc/src/compileTemplate.ts +++ b/packages/compiler-sfc/src/compileTemplate.ts @@ -289,7 +289,7 @@ function mapLines(oldMap: RawSourceMap, newMap: RawSourceMap): RawSourceMap { const origPosInOldMap = oldMapConsumer.originalPositionFor({ line: m.originalLine, - column: m.originalColumn, + column: m.originalColumn!, }) if (origPosInOldMap.source == null) { @@ -305,7 +305,7 @@ function mapLines(oldMap: RawSourceMap, newMap: RawSourceMap): RawSourceMap { line: origPosInOldMap.line, // map line // use current column, since the oldMap produced by @vue/compiler-sfc // does not - column: m.originalColumn, + column: m.originalColumn!, }, source: origPosInOldMap.source, name: origPosInOldMap.name, diff --git a/packages/compiler-sfc/src/script/context.ts b/packages/compiler-sfc/src/script/context.ts index 47b6b442a4..4545a88c49 100644 --- a/packages/compiler-sfc/src/script/context.ts +++ b/packages/compiler-sfc/src/script/context.ts @@ -18,12 +18,11 @@ export class ScriptCompileContext { scriptAst: Program | null scriptSetupAst: Program | null - source: string = this.descriptor.source - filename: string = this.descriptor.filename - s: MagicString = new MagicString(this.source) - startOffset: number | undefined = - this.descriptor.scriptSetup?.loc.start.offset - endOffset: number | undefined = this.descriptor.scriptSetup?.loc.end.offset + source: string + filename: string + s: MagicString + startOffset: number | undefined + endOffset: number | undefined // import / type analysis scope?: TypeScope @@ -87,6 +86,12 @@ export class ScriptCompileContext { const scriptLang = script && script.lang const scriptSetupLang = scriptSetup && scriptSetup.lang + this.source = descriptor.source + this.filename = descriptor.filename + this.s = new MagicString(descriptor.source) + this.startOffset = descriptor.scriptSetup?.loc.start.offset + this.endOffset = descriptor.scriptSetup?.loc.end.offset + this.isJS = scriptLang === 'js' || scriptLang === 'jsx' || @@ -99,7 +104,7 @@ export class ScriptCompileContext { scriptSetupLang === 'tsx' const customElement = options.customElement - const filename = this.descriptor.filename + const filename = descriptor.filename if (customElement) { this.isCE = typeof customElement === 'boolean' diff --git a/packages/runtime-dom/src/apiCustomElement.ts b/packages/runtime-dom/src/apiCustomElement.ts index 6ddaf89713..729a322224 100644 --- a/packages/runtime-dom/src/apiCustomElement.ts +++ b/packages/runtime-dom/src/apiCustomElement.ts @@ -219,7 +219,7 @@ export class VueElement /** * @internal */ - _nonce: string | undefined = this._def.nonce + _nonce: string | undefined /** * @internal @@ -253,6 +253,7 @@ export class VueElement private _createApp: CreateAppFunction = createApp, ) { super() + this._nonce = _def.nonce if (this.shadowRoot && _createApp !== createApp) { this._root = this.shadowRoot } else { @@ -313,7 +314,7 @@ export class VueElement } } - private _setParent(parent = this._parent) { + private _setParent(parent: VueElement | undefined = this._parent): void { if (parent) { this._instance!.parent = parent._instance this._instance!.provides = parent._instance!.provides diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 74a863972b..dfaf1a9a59 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,24 +20,24 @@ catalogs: version: 2.0.2 magic-string: specifier: ^0.30.11 - version: 0.30.11 + version: 0.30.12 source-map-js: specifier: ^1.2.0 - version: 1.2.0 + version: 1.2.1 vite: specifier: ^5.4.0 - version: 5.4.0 + version: 5.4.8 importers: .: devDependencies: - '@babel/parser': - specifier: 'catalog:' - version: 7.25.3 '@babel/types': specifier: 'catalog:' version: 7.25.2 + '@rolldown/plugin-node-polyfills': + specifier: ^1.0.0 + version: 1.0.0 '@rollup/plugin-alias': specifier: ^5.1.1 version: 5.1.1(rollup@4.25.0) @@ -98,6 +98,9 @@ importers: estree-walker: specifier: 'catalog:' version: 2.0.2 + fast-glob: + specifier: ^3.3.2 + version: 3.3.2 jsdom: specifier: ^25.0.0 version: 25.0.0 @@ -119,6 +122,12 @@ importers: npm-run-all2: specifier: ^7.0.1 version: 7.0.1 + oxc-parser: + specifier: ^0.35.0 + version: 0.35.0 + oxc-transform: + specifier: ^0.35.0 + version: 0.35.0 picocolors: specifier: ^1.1.1 version: 1.1.1 @@ -137,6 +146,9 @@ importers: rimraf: specifier: ^6.0.1 version: 6.0.1 + rolldown: + specifier: 0.14.0-snapshot-d5e797b-20241114003621 + version: 0.14.0-snapshot-d5e797b-20241114003621 rollup: specifier: ^4.25.0 version: 4.25.0 @@ -175,7 +187,7 @@ importers: version: 8.12.2(eslint@9.14.0)(typescript@5.6.2) vite: specifier: 'catalog:' - version: 5.4.0(@types/node@22.8.7)(sass@1.80.6) + version: 5.4.8(@types/node@22.8.7)(sass@1.80.6) vitest: specifier: ^2.1.1 version: 2.1.1(@types/node@22.8.7)(jsdom@25.0.0)(sass@1.80.6) @@ -218,10 +230,10 @@ importers: devDependencies: '@vitejs/plugin-vue': specifier: 'catalog:' - version: 5.1.2(vite@5.4.0(@types/node@22.8.7)(sass@1.80.6))(vue@packages+vue) + version: 5.1.2(vite@5.4.8(@types/node@22.8.7)(sass@1.80.6))(vue@packages+vue) vite: specifier: 'catalog:' - version: 5.4.0(@types/node@22.8.7)(sass@1.80.6) + version: 5.4.8(@types/node@22.8.7)(sass@1.80.6) packages-private/template-explorer: dependencies: @@ -236,10 +248,10 @@ importers: devDependencies: '@vitejs/plugin-vue': specifier: 'catalog:' - version: 5.1.2(vite@5.4.0(@types/node@22.8.7)(sass@1.80.6))(vue@packages+vue) + version: 5.1.2(vite@5.4.8(@types/node@22.8.7)(sass@1.80.6))(vue@packages+vue) vite: specifier: 'catalog:' - version: 5.4.0(@types/node@22.8.7)(sass@1.80.6) + version: 5.4.8(@types/node@22.8.7)(sass@1.80.6) vue: specifier: workspace:* version: link:../../packages/vue @@ -260,7 +272,7 @@ importers: version: 2.0.2 source-map-js: specifier: 'catalog:' - version: 1.2.0 + version: 1.2.1 devDependencies: '@babel/types': specifier: 'catalog:' @@ -297,13 +309,13 @@ importers: version: 2.0.2 magic-string: specifier: 'catalog:' - version: 0.30.11 + version: 0.30.12 postcss: specifier: ^8.4.48 version: 8.4.48 source-map-js: specifier: 'catalog:' - version: 1.2.0 + version: 1.2.1 devDependencies: '@babel/types': specifier: 'catalog:' @@ -433,19 +445,23 @@ importers: version: 2.0.2 source-map-js: specifier: 'catalog:' - version: 1.2.0 + version: 1.2.1 vue: specifier: workspace:* version: link:../vue packages: + '@aashutoshrathi/word-wrap@1.2.6': + resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} + engines: {node: '>=0.10.0'} + '@ampproject/remapping@2.3.0': resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} - '@babel/code-frame@7.24.7': - resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} + '@babel/code-frame@7.24.2': + resolution: {integrity: sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==} engines: {node: '>=6.9.0'} '@babel/helper-string-parser@7.24.8': @@ -456,8 +472,8 @@ packages: resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} engines: {node: '>=6.9.0'} - '@babel/highlight@7.24.7': - resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} + '@babel/highlight@7.24.2': + resolution: {integrity: sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==} engines: {node: '>=6.9.0'} '@babel/parser@7.25.3': @@ -484,6 +500,15 @@ packages: conventional-commits-parser: optional: true + '@emnapi/core@1.3.1': + resolution: {integrity: sha512-pVGjBIt1Y6gg3EJN8jTcfpP/+uuRksIo055oE/OBkDNcjZqVbfkWCksG1Jp4yZnj3iKWyWX8fdG/j6UDYPbFog==} + + '@emnapi/runtime@1.3.1': + resolution: {integrity: sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==} + + '@emnapi/wasi-threads@1.0.1': + resolution: {integrity: sha512-iIBu7mwkq4UQGeMEM8bLwNK962nXdhodeScX4slfQnRhEMMzvYivHhutCIk8uojvmASXXPC2WNEjwxFWk72Oqw==} + '@esbuild/aix-ppc64@0.21.5': resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} engines: {node: '>=12'} @@ -857,6 +882,9 @@ packages: '@jspm/core@2.0.1': resolution: {integrity: sha512-Lg3PnLp0QXpxwLIAuuJboLeRaIhrgJjeuh797QADg3xz8wGLugQOS5DpsE8A6i6Adgzf+bacllkKZG3J0tGfDw==} + '@napi-rs/wasm-runtime@0.2.5': + resolution: {integrity: sha512-kwUxR7J9WLutBbulqg1dfOrMTwhMdXLdcGUhcbCcGwnPLt3gz19uHVdwH1syKVDbE022ZS2vZxOWflFLS0YTjw==} + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -869,6 +897,89 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} + '@oxc-parser/binding-darwin-arm64@0.35.0': + resolution: {integrity: sha512-2SSWMTMlrW8Ljcvgi0BOWr3Na6IX0Y9JYRRf4irV2OR9ZMGq1AcnK65ujMYE+w+zOfgqRKXVanz8vz6ii1bEmw==} + cpu: [arm64] + os: [darwin] + + '@oxc-parser/binding-darwin-x64@0.35.0': + resolution: {integrity: sha512-q0p/DCz74/9pCZlzGgYw5nC11p2ilImq6XFCOsBOWDdAcB5FFEFO8dyLBxiWgKzXZW+B+FoAJQAGV3UPswx8Jw==} + cpu: [x64] + os: [darwin] + + '@oxc-parser/binding-linux-arm64-gnu@0.35.0': + resolution: {integrity: sha512-MzSTS1nsYhuXHXaZvrKDFXGpUA5UOKFTb30kFVpRLmzunE3Rhp4BeT6aQib64oJBevuI+7OYE14p/CmfgOiavw==} + cpu: [arm64] + os: [linux] + + '@oxc-parser/binding-linux-arm64-musl@0.35.0': + resolution: {integrity: sha512-5WoOYIwE7/HN0IjGMToylXKclvczKM19R1ecbVFsYtKbuj7S6aXkP37x02njA+1DLtTRYv2TySxZjRrov+JFZg==} + cpu: [arm64] + os: [linux] + + '@oxc-parser/binding-linux-x64-gnu@0.35.0': + resolution: {integrity: sha512-wLtbsco7oRAjQH6LZ10jChW0R4l/UrYtr2lOTv2uvguZ/Xtab8xbKV3J+i/ct3XyuPo05W9Z3gBeJVePV/4xHw==} + cpu: [x64] + os: [linux] + + '@oxc-parser/binding-linux-x64-musl@0.35.0': + resolution: {integrity: sha512-DdqhCOm1uvHG3qCijQsdmGzVkGSQiVp5/576+01gvtIB1Xi72zJpo0d5Aoz/Ef262b+YkRJ23UncBMv2IWNLRQ==} + cpu: [x64] + os: [linux] + + '@oxc-parser/binding-win32-arm64-msvc@0.35.0': + resolution: {integrity: sha512-a+DgOdXBKvsNRHi0ohJViuGXUCKVYM5VWC77QEbScuDz5kM0VoAobCxOgaqW90xk0ASqL5U9MS/C0c0e17LZ3A==} + cpu: [arm64] + os: [win32] + + '@oxc-parser/binding-win32-x64-msvc@0.35.0': + resolution: {integrity: sha512-Rm0CRpvsGLJI8++o06Fmz09Nza6vkzluOJj3Bye4DwqKcr4kLA+L/f+TyfiOZrzy9I9J9H8zM7C2UMdU0ws8/g==} + cpu: [x64] + os: [win32] + + '@oxc-project/types@0.35.0': + resolution: {integrity: sha512-IM45j7X1wrbu5xDXtrqbQRkQSsTxKZOCaw6OujjBGItICRKvFE6VGq21czpgKUwDIH0BqTQlFabCbt+d1/7v2A==} + + '@oxc-transform/binding-darwin-arm64@0.35.0': + resolution: {integrity: sha512-oh+L/TM7/u3A1qIlFz2hEW0LIVPdhgK+dGAgnyDCOaXqP0P45MgkklbTF+lSAXkv5PgpvNmrnocu4j1mjswskA==} + cpu: [arm64] + os: [darwin] + + '@oxc-transform/binding-darwin-x64@0.35.0': + resolution: {integrity: sha512-/B8YOmxxHGKeNqCeCoe7FY3eLrru5R07kS5pObkOGZgz2jqWw2CnJ3XMq+GaNAAgvVJc4O7wU88yV8a/TX3ppQ==} + cpu: [x64] + os: [darwin] + + '@oxc-transform/binding-linux-arm64-gnu@0.35.0': + resolution: {integrity: sha512-Smbku1J3IofBVEJFvnP6IcGyavZsAskbGBs++ty/4+JQqv67fCeGFNRf8erAWpNQGhpgsL/EW7QIPuZ89SlIBw==} + cpu: [arm64] + os: [linux] + + '@oxc-transform/binding-linux-arm64-musl@0.35.0': + resolution: {integrity: sha512-H0CV1mf4TNIPm4PwkHWJUxekgOHvyyCTehHimUjBaB2XxImwo1pEa+bO79wkJYm/F1aSDRM4APivK9c3Hi4F0w==} + cpu: [arm64] + os: [linux] + + '@oxc-transform/binding-linux-x64-gnu@0.35.0': + resolution: {integrity: sha512-VSOiPOx4I/e3yTNED50Vn0VwHb3Pa0QQwqCZYRDKmqztsTQN6RSKnawWG+EPY+9mqLJs+8KfMphQMsjRE2K+hA==} + cpu: [x64] + os: [linux] + + '@oxc-transform/binding-linux-x64-musl@0.35.0': + resolution: {integrity: sha512-ItoZZ1auUQsgSE+lvL559+cLBnZb4Q2zotTB0JpH8M8rxROpW+GVwU3TzBwQHmtGE9ri+KuywpXkPREifdOx9g==} + cpu: [x64] + os: [linux] + + '@oxc-transform/binding-win32-arm64-msvc@0.35.0': + resolution: {integrity: sha512-XuvyU0mhgpF5NIAcoknQPQnl70s/kfkBASo6xCx2HQP74vGGP6Aj810U4N0D66jGazpVw+mbaEsDzGHm3KWwiw==} + cpu: [arm64] + os: [win32] + + '@oxc-transform/binding-win32-x64-msvc@0.35.0': + resolution: {integrity: sha512-+hTWKxqO519Iot9A6XdCEdvokg/2Yid4NevjhsEJnsa1MrHHxbOjzWKq22GRjv0CpMgKlMyJXWHP4YKzDZ/Sog==} + cpu: [x64] + os: [win32] + '@parcel/watcher-android-arm64@2.4.1': resolution: {integrity: sha512-LOi/WTbbh3aTn2RYddrO8pnapixAziFl6SMxHM69r3tvdSm94JtCenaKgk1GRg5FJ5wpMCpHeW+7yqPlvZv7kg==} engines: {node: '>= 10.0.0'} @@ -954,6 +1065,69 @@ packages: engines: {node: '>=18'} hasBin: true + '@rolldown/binding-darwin-arm64@0.14.0-snapshot-d5e797b-20241114003621': + resolution: {integrity: sha512-K+kETZAdSaIHG+ivKes6IGiyFK4+uriEXhUHMPWvKqz4njcaXA9Lk5wEOiIFMLNsiyygkddBvuE2JXiiqtc7pw==} + cpu: [arm64] + os: [darwin] + + '@rolldown/binding-darwin-x64@0.14.0-snapshot-d5e797b-20241114003621': + resolution: {integrity: sha512-ZrW/GM6xu0VMHBnnboAoID2mtHgg/aO0C6dVuu41FXxNTb5TenK+CL7o6TRErIYh9UggOE8ElePlw9yDCquRqw==} + cpu: [x64] + os: [darwin] + + '@rolldown/binding-freebsd-x64@0.14.0-snapshot-d5e797b-20241114003621': + resolution: {integrity: sha512-ay0xOrOCH2DA5iBpn2w02o7BMw0ftqHnfu6hq5eXMkzAioObA0eCLS+8vpbN9FpPpWRPYZoK9z519npn9GfVcw==} + cpu: [x64] + os: [freebsd] + + '@rolldown/binding-linux-arm-gnueabihf@0.14.0-snapshot-d5e797b-20241114003621': + resolution: {integrity: sha512-flQG9NDOlYTlV9Y+7Lim+NZyv554Xrea8bN84ep9AJy49NHkwhzan46Ct9/drwbK4uQvTePk1Cof7CdX4/tJ7w==} + cpu: [arm] + os: [linux] + + '@rolldown/binding-linux-arm64-gnu@0.14.0-snapshot-d5e797b-20241114003621': + resolution: {integrity: sha512-osxZlZdtOC+ck8PZiQ27ujf2jbi67rrQmWx60wwuTnFznl7Rj4pULTDmxaq7oO14yYAW7w00in8OKGXcvRQ5yw==} + cpu: [arm64] + os: [linux] + + '@rolldown/binding-linux-arm64-musl@0.14.0-snapshot-d5e797b-20241114003621': + resolution: {integrity: sha512-B1d+iRhQiKgBkbcO7ByUYoNUeWqV+XMP3Vz8Y27Nj+flgvt5GkmOEYJ2pJ4Nv5h9bzd4SwHsjzJ7XdXdbRk3Xw==} + cpu: [arm64] + os: [linux] + + '@rolldown/binding-linux-x64-gnu@0.14.0-snapshot-d5e797b-20241114003621': + resolution: {integrity: sha512-dQNu7BKid2dhJpRUJ7M+Lr+O77wyZfVDifjF3BEb5mlL/YJR029VZSEoguzyf0ir0xNFwcoFmXqvNol6RuCC7g==} + cpu: [x64] + os: [linux] + + '@rolldown/binding-linux-x64-musl@0.14.0-snapshot-d5e797b-20241114003621': + resolution: {integrity: sha512-NKB/1i7f0j1YNnTd/DvOzlAfVufCVCovELxxBvdY1GqPBIbY8IrWsggHcw/A3ETdiHv/5qo6bg0OwyY0XJcUcA==} + cpu: [x64] + os: [linux] + + '@rolldown/binding-wasm32-wasi@0.14.0-snapshot-d5e797b-20241114003621': + resolution: {integrity: sha512-3s1aV1BwnR1lGd4tq/f9of9q/9HjjYwukr6t++rK/hLG+SvhchLroHycjIdodew/cvvUNJjQoxp6o3XnoNzSVQ==} + engines: {node: '>=14.21.3'} + cpu: [wasm32] + + '@rolldown/binding-win32-arm64-msvc@0.14.0-snapshot-d5e797b-20241114003621': + resolution: {integrity: sha512-Yb0WpkFVDog5jaa9wsp9S/S4OaNR/HwGC4gOUM24Aho7aJBogjwnnX9YXf6c9AS3CPqdeWhslRtgWfRKBzQZCQ==} + cpu: [arm64] + os: [win32] + + '@rolldown/binding-win32-ia32-msvc@0.14.0-snapshot-d5e797b-20241114003621': + resolution: {integrity: sha512-9ECBsIsmjEyKofobNQfgwjc2apokoLfP8hYxu/dQKUT1Mb8KPCZp2pPqhi27HpLB+asEOnO3xMleABJdrYGmtg==} + cpu: [ia32] + os: [win32] + + '@rolldown/binding-win32-x64-msvc@0.14.0-snapshot-d5e797b-20241114003621': + resolution: {integrity: sha512-sIHCWBHaqpuF2SCfkGTb4Ml4sYAHCc4tyX8DW1/7tgA8uRsQ01UqoBZSv32KCao38AIYQSpC9HGQumcnjnximw==} + cpu: [x64] + os: [win32] + + '@rolldown/plugin-node-polyfills@1.0.0': + resolution: {integrity: sha512-JUmEhvz+B6+0AaeUGvZ7SnJec7wpwYqZ+FcAng1I3UVGYKA1uSmE1H4vKHUewU665Nb37znDd9N4o/iImmKeVg==} + '@rollup/plugin-alias@5.1.1': resolution: {integrity: sha512-PR9zDb+rOzkRb2VD+EuKB7UC41vU5DIwZ5qqCpk0KJudcWAyi8rvYOhS7+L5aZCspw1stTViLgN5v6FF1p5cgQ==} engines: {node: '>=14.0.0'} @@ -1017,41 +1191,21 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.20.0': - resolution: {integrity: sha512-TSpWzflCc4VGAUJZlPpgAJE1+V60MePDQnBd7PPkpuEmOy8i87aL6tinFGKBFKuEDikYpig72QzdT3QPYIi+oA==} - cpu: [arm] - os: [android] - '@rollup/rollup-android-arm-eabi@4.25.0': resolution: {integrity: sha512-CC/ZqFZwlAIbU1wUPisHyV/XRc5RydFrNLtgl3dGYskdwPZdt4HERtKm50a/+DtTlKeCq9IXFEWR+P6blwjqBA==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.20.0': - resolution: {integrity: sha512-u00Ro/nok7oGzVuh/FMYfNoGqxU5CPWz1mxV85S2w9LxHR8OoMQBuSk+3BKVIDYgkpeOET5yXkx90OYFc+ytpQ==} - cpu: [arm64] - os: [android] - '@rollup/rollup-android-arm64@4.25.0': resolution: {integrity: sha512-/Y76tmLGUJqVBXXCfVS8Q8FJqYGhgH4wl4qTA24E9v/IJM0XvJCGQVSW1QZ4J+VURO9h8YCa28sTFacZXwK7Rg==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.20.0': - resolution: {integrity: sha512-uFVfvzvsdGtlSLuL0ZlvPJvl6ZmrH4CBwLGEFPe7hUmf7htGAN+aXo43R/V6LATyxlKVC/m6UsLb7jbG+LG39Q==} - cpu: [arm64] - os: [darwin] - '@rollup/rollup-darwin-arm64@4.25.0': resolution: {integrity: sha512-YVT6L3UrKTlC0FpCZd0MGA7NVdp7YNaEqkENbWQ7AOVOqd/7VzyHpgIpc1mIaxRAo1ZsJRH45fq8j4N63I/vvg==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.20.0': - resolution: {integrity: sha512-xbrMDdlev53vNXexEa6l0LffojxhqDTBeL+VUxuuIXys4x6xyvbKq5XqTXBCEUA8ty8iEJblHvFaWRJTk/icAQ==} - cpu: [x64] - os: [darwin] - '@rollup/rollup-darwin-x64@4.25.0': resolution: {integrity: sha512-ZRL+gexs3+ZmmWmGKEU43Bdn67kWnMeWXLFhcVv5Un8FQcx38yulHBA7XR2+KQdYIOtD0yZDWBCudmfj6lQJoA==} cpu: [x64] @@ -1067,121 +1221,61 @@ packages: cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.20.0': - resolution: {integrity: sha512-jMYvxZwGmoHFBTbr12Xc6wOdc2xA5tF5F2q6t7Rcfab68TT0n+r7dgawD4qhPEvasDsVpQi+MgDzj2faOLsZjA==} - cpu: [arm] - os: [linux] - '@rollup/rollup-linux-arm-gnueabihf@4.25.0': resolution: {integrity: sha512-uD/dbLSs1BEPzg564TpRAQ/YvTnCds2XxyOndAO8nJhaQcqQGFgv/DAVko/ZHap3boCvxnzYMa3mTkV/B/3SWA==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.20.0': - resolution: {integrity: sha512-1asSTl4HKuIHIB1GcdFHNNZhxAYEdqML/MW4QmPS4G0ivbEcBr1JKlFLKsIRqjSwOBkdItn3/ZDlyvZ/N6KPlw==} - cpu: [arm] - os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.25.0': resolution: {integrity: sha512-ZVt/XkrDlQWegDWrwyC3l0OfAF7yeJUF4fq5RMS07YM72BlSfn2fQQ6lPyBNjt+YbczMguPiJoCfaQC2dnflpQ==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.20.0': - resolution: {integrity: sha512-COBb8Bkx56KldOYJfMf6wKeYJrtJ9vEgBRAOkfw6Ens0tnmzPqvlpjZiLgkhg6cA3DGzCmLmmd319pmHvKWWlQ==} - cpu: [arm64] - os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.25.0': resolution: {integrity: sha512-qboZ+T0gHAW2kkSDPHxu7quaFaaBlynODXpBVnPxUgvWYaE84xgCKAPEYE+fSMd3Zv5PyFZR+L0tCdYCMAtG0A==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.20.0': - resolution: {integrity: sha512-+it+mBSyMslVQa8wSPvBx53fYuZK/oLTu5RJoXogjk6x7Q7sz1GNRsXWjn6SwyJm8E/oMjNVwPhmNdIjwP135Q==} - cpu: [arm64] - os: [linux] - '@rollup/rollup-linux-arm64-musl@4.25.0': resolution: {integrity: sha512-ndWTSEmAaKr88dBuogGH2NZaxe7u2rDoArsejNslugHZ+r44NfWiwjzizVS1nUOHo+n1Z6qV3X60rqE/HlISgw==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.20.0': - resolution: {integrity: sha512-yAMvqhPfGKsAxHN8I4+jE0CpLWD8cv4z7CK7BMmhjDuz606Q2tFKkWRY8bHR9JQXYcoLfopo5TTqzxgPUjUMfw==} - cpu: [ppc64] - os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.25.0': resolution: {integrity: sha512-BVSQvVa2v5hKwJSy6X7W1fjDex6yZnNKy3Kx1JGimccHft6HV0THTwNtC2zawtNXKUu+S5CjXslilYdKBAadzA==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.20.0': - resolution: {integrity: sha512-qmuxFpfmi/2SUkAw95TtNq/w/I7Gpjurx609OOOV7U4vhvUhBcftcmXwl3rqAek+ADBwSjIC4IVNLiszoj3dPA==} - cpu: [riscv64] - os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.25.0': resolution: {integrity: sha512-G4hTREQrIdeV0PE2JruzI+vXdRnaK1pg64hemHq2v5fhv8C7WjVaeXc9P5i4Q5UC06d/L+zA0mszYIKl+wY8oA==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.20.0': - resolution: {integrity: sha512-I0BtGXddHSHjV1mqTNkgUZLnS3WtsqebAXv11D5BZE/gfw5KoyXSAXVqyJximQXNvNzUo4GKlCK/dIwXlz+jlg==} - cpu: [s390x] - os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.25.0': resolution: {integrity: sha512-9T/w0kQ+upxdkFL9zPVB6zy9vWW1deA3g8IauJxojN4bnz5FwSsUAD034KpXIVX5j5p/rn6XqumBMxfRkcHapQ==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.20.0': - resolution: {integrity: sha512-y+eoL2I3iphUg9tN9GB6ku1FA8kOfmF4oUEWhztDJ4KXJy1agk/9+pejOuZkNFhRwHAOxMsBPLbXPd6mJiCwew==} - cpu: [x64] - os: [linux] - '@rollup/rollup-linux-x64-gnu@4.25.0': resolution: {integrity: sha512-ThcnU0EcMDn+J4B9LD++OgBYxZusuA7iemIIiz5yzEcFg04VZFzdFjuwPdlURmYPZw+fgVrFzj4CA64jSTG4Ig==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.20.0': - resolution: {integrity: sha512-hM3nhW40kBNYUkZb/r9k2FKK+/MnKglX7UYd4ZUy5DJs8/sMsIbqWK2piZtVGE3kcXVNj3B2IrUYROJMMCikNg==} - cpu: [x64] - os: [linux] - '@rollup/rollup-linux-x64-musl@4.25.0': resolution: {integrity: sha512-zx71aY2oQxGxAT1JShfhNG79PnjYhMC6voAjzpu/xmMjDnKNf6Nl/xv7YaB/9SIa9jDYf8RBPWEnjcdlhlv1rQ==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.20.0': - resolution: {integrity: sha512-psegMvP+Ik/Bg7QRJbv8w8PAytPA7Uo8fpFjXyCRHWm6Nt42L+JtoqH8eDQ5hRP7/XW2UiIriy1Z46jf0Oa1kA==} - cpu: [arm64] - os: [win32] - '@rollup/rollup-win32-arm64-msvc@4.25.0': resolution: {integrity: sha512-JT8tcjNocMs4CylWY/CxVLnv8e1lE7ff1fi6kbGocWwxDq9pj30IJ28Peb+Y8yiPNSF28oad42ApJB8oUkwGww==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.20.0': - resolution: {integrity: sha512-GabekH3w4lgAJpVxkk7hUzUf2hICSQO0a/BLFA11/RMxQT92MabKAqyubzDZmMOC/hcJNlc+rrypzNzYl4Dx7A==} - cpu: [ia32] - os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.25.0': resolution: {integrity: sha512-dRLjLsO3dNOfSN6tjyVlG+Msm4IiZnGkuZ7G5NmpzwF9oOc582FZG05+UdfTbz5Jd4buK/wMb6UeHFhG18+OEg==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.20.0': - resolution: {integrity: sha512-aJ1EJSuTdGnM6qbVC4B5DSmozPTqIag9fSzXRNNo+humQLG89XpPgdt16Ia56ORD7s+H8Pmyx44uczDQ0yDzpg==} - cpu: [x64] - os: [win32] - '@rollup/rollup-win32-x64-msvc@4.25.0': resolution: {integrity: sha512-/RqrIFtLB926frMhZD0a5oDa4eFIbyNEwLLloMTEjmqfwZWXywwVVOVmwTsuyhC9HKkVEZcOOi+KV4U9wmOdlg==} cpu: [x64] @@ -1265,8 +1359,8 @@ packages: '@tootallnate/quickjs-emscripten@0.23.0': resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} - '@types/estree@1.0.5': - resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + '@tybys/wasm-util@0.9.0': + resolution: {integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==} '@types/estree@1.0.6': resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} @@ -1527,8 +1621,8 @@ packages: asap@2.0.6: resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} - assert-never@1.3.0: - resolution: {integrity: sha512-9Z3vxQ+berkL/JJo0dK+EY3Lp0s3NtSnP3VCLsh5HDcZPrh0M+KQRK5sWhUeyPPH+/RCxZqOxLMR+YC6vlviEQ==} + assert-never@1.2.1: + resolution: {integrity: sha512-TaTivMB6pYI1kXwrFlEhLeGfOqoDNdTxjCdwRfFFkEA30Eu+k48W34nlok2EYWJfFFzqaEmichdNM7th6M5HNw==} assertion-error@2.0.1: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} @@ -1551,20 +1645,17 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - bare-events@2.4.2: - resolution: {integrity: sha512-qMKFd2qG/36aA4GwvKq8MxnPgCQAmBWmSyLWsJcbn8v03wvIPQ/hG1Ms8bPzndZxMDoHpxez5VOS+gC9Yi24/Q==} - - bare-fs@2.3.1: - resolution: {integrity: sha512-W/Hfxc/6VehXlsgFtbB5B4xFcsCl+pAh30cYhoFyXErf6oGrwjh8SwiPAdHgpmWonKuYpZgGywN0SXt7dgsADA==} + bare-events@2.2.2: + resolution: {integrity: sha512-h7z00dWdG0PYOQEvChhOSWvOfkIKsdZGkWr083FgN/HyoQuebSew/cgirYqh9SCuy/hRvxc5Vy6Fw8xAmYHLkQ==} - bare-os@2.4.0: - resolution: {integrity: sha512-v8DTT08AS/G0F9xrhyLtepoo9EJBJ85FRSMbu1pQUlAf6A8T0tEEQGMVObWeqpjhSPXsE0VGlluFBJu2fdoTNg==} + bare-fs@2.2.3: + resolution: {integrity: sha512-amG72llr9pstfXOBOHve1WjiuKKAMnebcmMbPWDZ7BCevAoJLpugjuAPRsDINEyjT0a6tbaVx3DctkXIRbLuJw==} - bare-path@2.1.3: - resolution: {integrity: sha512-lh/eITfU8hrj9Ru5quUp0Io1kJWIk1bTjzo7JH1P5dWmQ2EL4hFUlfI8FonAhSlgIfhn63p84CDY/x+PisgcXA==} + bare-os@2.2.1: + resolution: {integrity: sha512-OwPyHgBBMkhC29Hl3O4/YfxW9n7mdTr2+SsO29XBWKKJsbgj3mnorDB80r5TiCQgQstgE5ga1qNYrpes6NvX2w==} - bare-stream@2.1.3: - resolution: {integrity: sha512-tiDAH9H/kP+tvNO5sczyn9ZAA7utrSMobyDchsnyyXBuUe2FSQWbxhtuHB8jwpHYYevVo2UJpcmvvjrbHboUUQ==} + bare-path@2.1.1: + resolution: {integrity: sha512-OHM+iwRDRMDBsSW7kl3dO62JyHdBKO3B25FB9vNQBPcGHMo4+eA8Yj41Lfbk3pS/seDY+siNge0LdRTulAau/A==} base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} @@ -1940,8 +2031,8 @@ packages: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} - es-module-lexer@1.5.4: - resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} + es-module-lexer@1.5.0: + resolution: {integrity: sha512-pqrTKmwEIgafsYZAGw9kszYzmagcE/n4dbgwGWLEXg7J4QFJVQRBld8j3Q3GNez79jzxZshq0bcT962QHOghjw==} esbuild-plugin-polyfill-node@0.3.0: resolution: {integrity: sha512-SHG6CKUfWfYyYXGpW143NEZtcVVn8S/WHcEOxk62LuDXnY4Zpmc+WmxJKN6GMTgTClXJXhEM5KQlxKY6YjbucQ==} @@ -2241,8 +2332,8 @@ packages: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} - hosted-git-info@7.0.2: - resolution: {integrity: sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==} + hosted-git-info@7.0.1: + resolution: {integrity: sha512-+K84LB1DYwMHoHSgaOY/Jfhw3ucPmSET5v98Ke/HdNSw4a0UktWzyW1mjhjpuxxTqOOsfWT/7iVshHmVZ4IpOA==} engines: {node: ^16.14.0 || >=18.0.0} html-encoding-sniffer@4.0.0: @@ -2256,6 +2347,10 @@ packages: resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} engines: {node: '>= 14'} + https-proxy-agent@7.0.4: + resolution: {integrity: sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==} + engines: {node: '>= 14'} + https-proxy-agent@7.0.5: resolution: {integrity: sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==} engines: {node: '>= 14'} @@ -2500,8 +2595,8 @@ packages: resolution: {integrity: sha512-opevsywziHd3zHCVQGAj8zu+Z3yHNkkoYhWIGnq54RrCVwLz0MozotJEDnKsIBLvkfLGN6BLOyAeRrYI0pKA4g==} engines: {node: '>=18.0.0'} - loader-utils@3.3.1: - resolution: {integrity: sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==} + loader-utils@3.2.1: + resolution: {integrity: sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==} engines: {node: '>= 12.13.0'} locate-path@6.0.0: @@ -2539,9 +2634,6 @@ packages: resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} engines: {node: '>=12'} - magic-string@0.30.11: - resolution: {integrity: sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==} - magic-string@0.30.12: resolution: {integrity: sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==} @@ -2669,8 +2761,8 @@ packages: node-addon-api@7.1.1: resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} - normalize-package-data@6.0.2: - resolution: {integrity: sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==} + normalize-package-data@6.0.0: + resolution: {integrity: sha512-UL7ELRVxYBHBgYEtZCXjxuD5vPxnmvMGq0jp/dGPKKrN7tfsBh2IY7TlJ15WWwdjRWD3RJbnsygUurTK3xkPkg==} engines: {node: ^16.14.0 || >=18.0.0} npm-normalize-package-bin@4.0.0: @@ -2716,10 +2808,16 @@ packages: resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} engines: {node: '>=18'} - optionator@0.9.4: - resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + optionator@0.9.3: + resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} engines: {node: '>= 0.8.0'} + oxc-parser@0.35.0: + resolution: {integrity: sha512-80Xpm5vOvEE5iP9aSN95WMLGbRpdl5oTV/rbtM+epGQpro5737R5CWcoHiStwzU/1zZKgZlSNfaeuTj1iV3kYA==} + + oxc-transform@0.35.0: + resolution: {integrity: sha512-biVB7H7ZxuAQYbMJPUZw1umT7nzDU44tEBYyqMgLle0mnAbi9AetadIqTpjAp8KmcOYpG6VmvGeFPxWihFCWFQ==} + p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} @@ -2728,8 +2826,8 @@ packages: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} - pac-proxy-agent@7.0.2: - resolution: {integrity: sha512-BFi3vZnO9X5Qt6NRz7ZOaPja3ic0PhlsmCRYLOpN11+mWBCR6XJDqW5RF3j8jm4WGGQZtBA+bTfxYzeKW73eHg==} + pac-proxy-agent@7.0.1: + resolution: {integrity: sha512-ASV8yU4LLKBAjqIPMbrgtaKIvxQri/yh2OpI+S6hVa9JRkUI3Y3NPFbfngDtY7oFtSMD3w31Xns89mDa3Feo5A==} engines: {node: '>= 14'} pac-resolver@7.0.1: @@ -2848,10 +2946,6 @@ packages: postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - postcss@8.4.41: - resolution: {integrity: sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==} - engines: {node: ^10 || ^12 || >=14} - postcss@8.4.48: resolution: {integrity: sha512-GCRK8F6+Dl7xYniR5a4FYbpBzU8XnZVeowqsQFYdcXuSbChgiks7qybSkbvnaeqv0G0B+dd9/jJgH8kkLDQeEA==} engines: {node: ^10 || ^12 || >=14} @@ -2895,6 +2989,9 @@ packages: pug-code-gen@3.0.3: resolution: {integrity: sha512-cYQg0JW0w32Ux+XTeZnBEeuWrAY7/HNE6TWnhiHGnnRYlCgyAUPoyh9KzCMa9WhcJlJ1AtQqpEYHc+vbCzA+Aw==} + pug-error@2.0.0: + resolution: {integrity: sha512-sjiUsi9M4RAGHktC1drQfCr5C5eriu24Lfbt4s+7SykztEOwVZtbFk1RRq0tzLxcMxMYTBR+zMQaG07J/btayQ==} + pug-error@2.1.0: resolution: {integrity: sha512-lv7sU9e5Jk8IeUheHata6/UThZ7RK2jnaaNztxfPYUY+VxZyk/ePVaNZ/vwmH8WqGvDz3LrNYt/+gA55NDg6Pg==} @@ -3022,6 +3119,10 @@ packages: engines: {node: 20 || >=22} hasBin: true + rolldown@0.14.0-snapshot-d5e797b-20241114003621: + resolution: {integrity: sha512-xJTXkA5ROenUW64VVgaqOglIDmrhJFkY1aFk100ROHAe59Gp2A6kaG8tpOoHDfnC4gmpXZnLr1dPDhdg960wYQ==} + hasBin: true + rollup-plugin-dts@6.1.1: resolution: {integrity: sha512-aSHRcJ6KG2IHIioYlvAOcEq6U99sVtqDDKVhnwt70rW6tsz3tv5OSjEiWcgzfsHdLyGXZ/3b/7b/+Za3Y6r1XA==} engines: {node: '>=16'} @@ -3041,11 +3142,6 @@ packages: peerDependencies: rollup: ^1.20.0 || ^2.0.0 || ^3.0.0 || ^4.0.0 - rollup@4.20.0: - resolution: {integrity: sha512-6rbWBChcnSGzIlXeIdNIZTopKYad8ZG8ajhl78lGRLsI2rX8IkaotQhVas2Ma+GPxJav19wrSzvRvuiv0YKzWw==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} - hasBin: true - rollup@4.25.0: resolution: {integrity: sha512-uVbClXmR6wvx5R1M3Od4utyLUxrmOcEm3pAtMphn73Apq19PDtHpgZoEvqH2YnnaNUuvKmg2DgRd2Sqv+odyqg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} @@ -3135,18 +3231,14 @@ packages: resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} - socks-proxy-agent@8.0.4: - resolution: {integrity: sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==} + socks-proxy-agent@8.0.3: + resolution: {integrity: sha512-VNegTZKhuGq5vSD6XNKlbqWhyt/40CgoEw8XxD6dhnm8Jq9IEa3nIa4HwnM8XOqU0CdB0BwWVXusqiFXfHB3+A==} engines: {node: '>= 14'} socks@2.8.3: resolution: {integrity: sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==} engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} - source-map-js@1.2.0: - resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} - engines: {node: '>=0.10.0'} - source-map-js@1.2.1: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} @@ -3164,8 +3256,8 @@ packages: spdx-expression-parse@3.0.1: resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} - spdx-license-ids@3.0.18: - resolution: {integrity: sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==} + spdx-license-ids@3.0.17: + resolution: {integrity: sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==} sprintf-js@1.1.3: resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} @@ -3179,8 +3271,8 @@ packages: std-env@3.7.0: resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==} - streamx@2.18.0: - resolution: {integrity: sha512-LLUC1TWdjVdn1weXGcSxyTR3T4+acB6tVGXT95y0nGbca4t4o/ng1wKAGTljm9VicuCVLvRlqFYXYy5GwgM7sQ==} + streamx@2.16.1: + resolution: {integrity: sha512-m9QYj6WygWyWa3H1YY69amr4nVgy61xfjys7xO7kviL5rfIEc2naf+ewFiOA+aEJD7y0JO3h2GoiUv4TDwEGzQ==} string-argv@0.3.2: resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} @@ -3197,8 +3289,8 @@ packages: resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} engines: {node: '>=12'} - string-width@7.2.0: - resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} + string-width@7.1.0: + resolution: {integrity: sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==} engines: {node: '>=18'} string_decoder@1.1.1: @@ -3261,9 +3353,6 @@ packages: resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==} engines: {node: '>=18'} - text-decoder@1.1.1: - resolution: {integrity: sha512-8zll7REEv4GDD3x4/0pW+ppIxSNs7H1J10IKFZsuOMscumCdM2a+toDGLPA3T+1+fLBql4zbt5z83GEQGGV5VA==} - text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} @@ -3404,37 +3493,6 @@ packages: engines: {node: ^18.0.0 || >=20.0.0} hasBin: true - vite@5.4.0: - resolution: {integrity: sha512-5xokfMX0PIiwCMCMb9ZJcMyh5wbBun0zUzKib+L65vAZ8GY9ePZMXxFrHbr/Kyll2+LSCY7xtERPpxkBDKngwg==} - engines: {node: ^18.0.0 || >=20.0.0} - hasBin: true - peerDependencies: - '@types/node': ^18.0.0 || >=20.0.0 - less: '*' - lightningcss: ^1.21.0 - sass: '*' - sass-embedded: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 - peerDependenciesMeta: - '@types/node': - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - sass-embedded: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - vite@5.4.8: resolution: {integrity: sha512-FqrItQ4DT1NC4zCUqMB4c4AZORMKIa0m8/URVCZ77OZ/QSNeJ54bU1vrFADbDsuwfIPcgknRkmqakQcgnL4GiQ==} engines: {node: ^18.0.0 || >=20.0.0} @@ -3538,10 +3596,6 @@ packages: resolution: {integrity: sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==} engines: {node: '>= 10.0.0'} - word-wrap@1.2.5: - resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} - engines: {node: '>=0.10.0'} - wordwrap@1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} @@ -3608,21 +3662,23 @@ packages: snapshots: + '@aashutoshrathi/word-wrap@1.2.6': {} + '@ampproject/remapping@2.3.0': dependencies: '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 - '@babel/code-frame@7.24.7': + '@babel/code-frame@7.24.2': dependencies: - '@babel/highlight': 7.24.7 + '@babel/highlight': 7.24.2 picocolors: 1.1.1 '@babel/helper-string-parser@7.24.8': {} '@babel/helper-validator-identifier@7.24.7': {} - '@babel/highlight@7.24.7': + '@babel/highlight@7.24.2': dependencies: '@babel/helper-validator-identifier': 7.24.7 chalk: 2.4.2 @@ -3649,6 +3705,22 @@ snapshots: conventional-commits-filter: 5.0.0 conventional-commits-parser: 6.0.0 + '@emnapi/core@1.3.1': + dependencies: + '@emnapi/wasi-threads': 1.0.1 + tslib: 2.8.1 + optional: true + + '@emnapi/runtime@1.3.1': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/wasi-threads@1.0.1': + dependencies: + tslib: 2.8.1 + optional: true + '@esbuild/aix-ppc64@0.21.5': optional: true @@ -3876,6 +3948,13 @@ snapshots: '@jspm/core@2.0.1': {} + '@napi-rs/wasm-runtime@0.2.5': + dependencies: + '@emnapi/core': 1.3.1 + '@emnapi/runtime': 1.3.1 + '@tybys/wasm-util': 0.9.0 + optional: true + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -3888,6 +3967,56 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.17.1 + '@oxc-parser/binding-darwin-arm64@0.35.0': + optional: true + + '@oxc-parser/binding-darwin-x64@0.35.0': + optional: true + + '@oxc-parser/binding-linux-arm64-gnu@0.35.0': + optional: true + + '@oxc-parser/binding-linux-arm64-musl@0.35.0': + optional: true + + '@oxc-parser/binding-linux-x64-gnu@0.35.0': + optional: true + + '@oxc-parser/binding-linux-x64-musl@0.35.0': + optional: true + + '@oxc-parser/binding-win32-arm64-msvc@0.35.0': + optional: true + + '@oxc-parser/binding-win32-x64-msvc@0.35.0': + optional: true + + '@oxc-project/types@0.35.0': {} + + '@oxc-transform/binding-darwin-arm64@0.35.0': + optional: true + + '@oxc-transform/binding-darwin-x64@0.35.0': + optional: true + + '@oxc-transform/binding-linux-arm64-gnu@0.35.0': + optional: true + + '@oxc-transform/binding-linux-arm64-musl@0.35.0': + optional: true + + '@oxc-transform/binding-linux-x64-gnu@0.35.0': + optional: true + + '@oxc-transform/binding-linux-x64-musl@0.35.0': + optional: true + + '@oxc-transform/binding-win32-arm64-msvc@0.35.0': + optional: true + + '@oxc-transform/binding-win32-x64-msvc@0.35.0': + optional: true + '@parcel/watcher-android-arm64@2.4.1': optional: true @@ -3961,6 +4090,46 @@ snapshots: transitivePeerDependencies: - supports-color + '@rolldown/binding-darwin-arm64@0.14.0-snapshot-d5e797b-20241114003621': + optional: true + + '@rolldown/binding-darwin-x64@0.14.0-snapshot-d5e797b-20241114003621': + optional: true + + '@rolldown/binding-freebsd-x64@0.14.0-snapshot-d5e797b-20241114003621': + optional: true + + '@rolldown/binding-linux-arm-gnueabihf@0.14.0-snapshot-d5e797b-20241114003621': + optional: true + + '@rolldown/binding-linux-arm64-gnu@0.14.0-snapshot-d5e797b-20241114003621': + optional: true + + '@rolldown/binding-linux-arm64-musl@0.14.0-snapshot-d5e797b-20241114003621': + optional: true + + '@rolldown/binding-linux-x64-gnu@0.14.0-snapshot-d5e797b-20241114003621': + optional: true + + '@rolldown/binding-linux-x64-musl@0.14.0-snapshot-d5e797b-20241114003621': + optional: true + + '@rolldown/binding-wasm32-wasi@0.14.0-snapshot-d5e797b-20241114003621': + dependencies: + '@napi-rs/wasm-runtime': 0.2.5 + optional: true + + '@rolldown/binding-win32-arm64-msvc@0.14.0-snapshot-d5e797b-20241114003621': + optional: true + + '@rolldown/binding-win32-ia32-msvc@0.14.0-snapshot-d5e797b-20241114003621': + optional: true + + '@rolldown/binding-win32-x64-msvc@0.14.0-snapshot-d5e797b-20241114003621': + optional: true + + '@rolldown/plugin-node-polyfills@1.0.0': {} + '@rollup/plugin-alias@5.1.1(rollup@4.25.0)': optionalDependencies: rollup: 4.25.0 @@ -4016,27 +4185,15 @@ snapshots: optionalDependencies: rollup: 4.25.0 - '@rollup/rollup-android-arm-eabi@4.20.0': - optional: true - '@rollup/rollup-android-arm-eabi@4.25.0': optional: true - '@rollup/rollup-android-arm64@4.20.0': - optional: true - '@rollup/rollup-android-arm64@4.25.0': optional: true - '@rollup/rollup-darwin-arm64@4.20.0': - optional: true - '@rollup/rollup-darwin-arm64@4.25.0': optional: true - '@rollup/rollup-darwin-x64@4.20.0': - optional: true - '@rollup/rollup-darwin-x64@4.25.0': optional: true @@ -4046,75 +4203,39 @@ snapshots: '@rollup/rollup-freebsd-x64@4.25.0': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.20.0': - optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.25.0': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.20.0': - optional: true - '@rollup/rollup-linux-arm-musleabihf@4.25.0': optional: true - '@rollup/rollup-linux-arm64-gnu@4.20.0': - optional: true - '@rollup/rollup-linux-arm64-gnu@4.25.0': optional: true - '@rollup/rollup-linux-arm64-musl@4.20.0': - optional: true - '@rollup/rollup-linux-arm64-musl@4.25.0': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.20.0': - optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.25.0': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.20.0': - optional: true - '@rollup/rollup-linux-riscv64-gnu@4.25.0': optional: true - '@rollup/rollup-linux-s390x-gnu@4.20.0': - optional: true - '@rollup/rollup-linux-s390x-gnu@4.25.0': optional: true - '@rollup/rollup-linux-x64-gnu@4.20.0': - optional: true - '@rollup/rollup-linux-x64-gnu@4.25.0': optional: true - '@rollup/rollup-linux-x64-musl@4.20.0': - optional: true - '@rollup/rollup-linux-x64-musl@4.25.0': optional: true - '@rollup/rollup-win32-arm64-msvc@4.20.0': - optional: true - '@rollup/rollup-win32-arm64-msvc@4.25.0': optional: true - '@rollup/rollup-win32-ia32-msvc@4.20.0': - optional: true - '@rollup/rollup-win32-ia32-msvc@4.25.0': optional: true - '@rollup/rollup-win32-x64-msvc@4.20.0': - optional: true - '@rollup/rollup-win32-x64-msvc@4.25.0': optional: true @@ -4172,7 +4293,10 @@ snapshots: '@tootallnate/quickjs-emscripten@0.23.0': {} - '@types/estree@1.0.5': {} + '@tybys/wasm-util@0.9.0': + dependencies: + tslib: 2.8.1 + optional: true '@types/estree@1.0.6': {} @@ -4320,9 +4444,9 @@ snapshots: '@typescript-eslint/types': 8.12.2 eslint-visitor-keys: 3.4.3 - '@vitejs/plugin-vue@5.1.2(vite@5.4.0(@types/node@22.8.7)(sass@1.80.6))(vue@packages+vue)': + '@vitejs/plugin-vue@5.1.2(vite@5.4.8(@types/node@22.8.7)(sass@1.80.6))(vue@packages+vue)': dependencies: - vite: 5.4.0(@types/node@22.8.7)(sass@1.80.6) + vite: 5.4.8(@types/node@22.8.7)(sass@1.80.6) vue: link:packages/vue '@vitest/coverage-v8@2.1.1(vitest@2.1.1(@types/node@22.8.7)(jsdom@25.0.0)(sass@1.80.6))': @@ -4466,7 +4590,7 @@ snapshots: asap@2.0.6: {} - assert-never@1.3.0: {} + assert-never@1.2.1: {} assertion-error@2.0.1: {} @@ -4484,27 +4608,22 @@ snapshots: balanced-match@1.0.2: {} - bare-events@2.4.2: + bare-events@2.2.2: optional: true - bare-fs@2.3.1: + bare-fs@2.2.3: dependencies: - bare-events: 2.4.2 - bare-path: 2.1.3 - bare-stream: 2.1.3 + bare-events: 2.2.2 + bare-path: 2.1.1 + streamx: 2.16.1 optional: true - bare-os@2.4.0: + bare-os@2.2.1: optional: true - bare-path@2.1.3: + bare-path@2.1.1: dependencies: - bare-os: 2.4.0 - optional: true - - bare-stream@2.1.3: - dependencies: - streamx: 2.18.0 + bare-os: 2.2.1 optional: true base64-js@1.5.1: {} @@ -4611,7 +4730,7 @@ snapshots: cli-truncate@4.0.0: dependencies: slice-ansi: 5.0.0 - string-width: 7.2.0 + string-width: 7.1.0 clipboardy@3.0.0: dependencies: @@ -4706,8 +4825,8 @@ snapshots: conventional-commits-parser: 6.0.0 git-raw-commits: 5.0.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.0.0) git-semver-tags: 8.0.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.0.0) - hosted-git-info: 7.0.2 - normalize-package-data: 6.0.2 + hosted-git-info: 7.0.1 + normalize-package-data: 6.0.0 read-package-up: 11.0.0 read-pkg: 9.0.1 transitivePeerDependencies: @@ -4873,7 +4992,7 @@ snapshots: es-errors@1.3.0: {} - es-module-lexer@1.5.4: {} + es-module-lexer@1.5.0: {} esbuild-plugin-polyfill-node@0.3.0(esbuild@0.24.0): dependencies: @@ -5017,7 +5136,7 @@ snapshots: lodash.merge: 4.6.2 minimatch: 3.1.2 natural-compare: 1.4.0 - optionator: 0.9.4 + optionator: 0.9.3 text-table: 0.2.0 transitivePeerDependencies: - supports-color @@ -5160,7 +5279,7 @@ snapshots: generic-names@4.0.0: dependencies: - loader-utils: 3.3.1 + loader-utils: 3.2.1 get-caller-file@2.0.5: {} @@ -5280,7 +5399,7 @@ snapshots: dependencies: function-bind: 1.1.2 - hosted-git-info@7.0.2: + hosted-git-info@7.0.1: dependencies: lru-cache: 10.1.0 @@ -5297,6 +5416,13 @@ snapshots: transitivePeerDependencies: - supports-color + https-proxy-agent@7.0.4: + dependencies: + agent-base: 7.1.1 + debug: 4.3.6 + transitivePeerDependencies: + - supports-color + https-proxy-agent@7.0.5: dependencies: agent-base: 7.1.1 @@ -5548,7 +5674,7 @@ snapshots: rfdc: 1.4.1 wrap-ansi: 9.0.0 - loader-utils@3.3.1: {} + loader-utils@3.2.1: {} locate-path@6.0.0: dependencies: @@ -5580,10 +5706,6 @@ snapshots: lru-cache@7.18.3: {} - magic-string@0.30.11: - dependencies: - '@jridgewell/sourcemap-codec': 1.5.0 - magic-string@0.30.12: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 @@ -5678,9 +5800,10 @@ snapshots: node-addon-api@7.1.1: optional: true - normalize-package-data@6.0.2: + normalize-package-data@6.0.0: dependencies: - hosted-git-info: 7.0.2 + hosted-git-info: 7.0.1 + is-core-module: 2.15.0 semver: 7.6.3 validate-npm-package-license: 3.0.4 @@ -5727,14 +5850,38 @@ snapshots: dependencies: mimic-function: 5.0.1 - optionator@0.9.4: + optionator@0.9.3: dependencies: + '@aashutoshrathi/word-wrap': 1.2.6 deep-is: 0.1.4 fast-levenshtein: 2.0.6 levn: 0.4.1 prelude-ls: 1.2.1 type-check: 0.4.0 - word-wrap: 1.2.5 + + oxc-parser@0.35.0: + dependencies: + '@oxc-project/types': 0.35.0 + optionalDependencies: + '@oxc-parser/binding-darwin-arm64': 0.35.0 + '@oxc-parser/binding-darwin-x64': 0.35.0 + '@oxc-parser/binding-linux-arm64-gnu': 0.35.0 + '@oxc-parser/binding-linux-arm64-musl': 0.35.0 + '@oxc-parser/binding-linux-x64-gnu': 0.35.0 + '@oxc-parser/binding-linux-x64-musl': 0.35.0 + '@oxc-parser/binding-win32-arm64-msvc': 0.35.0 + '@oxc-parser/binding-win32-x64-msvc': 0.35.0 + + oxc-transform@0.35.0: + optionalDependencies: + '@oxc-transform/binding-darwin-arm64': 0.35.0 + '@oxc-transform/binding-darwin-x64': 0.35.0 + '@oxc-transform/binding-linux-arm64-gnu': 0.35.0 + '@oxc-transform/binding-linux-arm64-musl': 0.35.0 + '@oxc-transform/binding-linux-x64-gnu': 0.35.0 + '@oxc-transform/binding-linux-x64-musl': 0.35.0 + '@oxc-transform/binding-win32-arm64-msvc': 0.35.0 + '@oxc-transform/binding-win32-x64-msvc': 0.35.0 p-limit@3.1.0: dependencies: @@ -5744,16 +5891,16 @@ snapshots: dependencies: p-limit: 3.1.0 - pac-proxy-agent@7.0.2: + pac-proxy-agent@7.0.1: dependencies: '@tootallnate/quickjs-emscripten': 0.23.0 agent-base: 7.1.1 debug: 4.3.6 get-uri: 6.0.3 http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.5 + https-proxy-agent: 7.0.4 pac-resolver: 7.0.1 - socks-proxy-agent: 8.0.4 + socks-proxy-agent: 8.0.3 transitivePeerDependencies: - supports-color @@ -5772,14 +5919,14 @@ snapshots: parse-json@5.2.0: dependencies: - '@babel/code-frame': 7.24.7 + '@babel/code-frame': 7.24.2 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 parse-json@8.1.0: dependencies: - '@babel/code-frame': 7.24.7 + '@babel/code-frame': 7.24.2 index-to-position: 0.1.2 type-fest: 4.24.0 @@ -5863,12 +6010,6 @@ snapshots: postcss-value-parser@4.2.0: {} - postcss@8.4.41: - dependencies: - nanoid: 3.3.7 - picocolors: 1.1.1 - source-map-js: 1.2.1 - postcss@8.4.48: dependencies: nanoid: 3.3.7 @@ -5894,11 +6035,11 @@ snapshots: agent-base: 7.1.1 debug: 4.3.6 http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.5 + https-proxy-agent: 7.0.4 lru-cache: 7.18.3 - pac-proxy-agent: 7.0.2 + pac-proxy-agent: 7.0.1 proxy-from-env: 1.1.0 - socks-proxy-agent: 8.0.4 + socks-proxy-agent: 8.0.3 transitivePeerDependencies: - supports-color @@ -5923,13 +6064,15 @@ snapshots: void-elements: 3.1.0 with: 7.0.2 + pug-error@2.0.0: {} + pug-error@2.1.0: {} pug-filters@4.0.0: dependencies: constantinople: 4.0.1 jstransformer: 1.0.0 - pug-error: 2.1.0 + pug-error: 2.0.0 pug-walk: 2.0.0 resolve: 1.22.8 @@ -5937,11 +6080,11 @@ snapshots: dependencies: character-parser: 2.2.0 is-expression: 4.0.0 - pug-error: 2.1.0 + pug-error: 2.0.0 pug-linker@4.0.0: dependencies: - pug-error: 2.1.0 + pug-error: 2.0.0 pug-walk: 2.0.0 pug-load@3.0.0: @@ -5951,14 +6094,14 @@ snapshots: pug-parser@6.0.0: dependencies: - pug-error: 2.1.0 + pug-error: 2.0.0 token-stream: 1.0.0 pug-runtime@3.0.1: {} pug-strip-comments@2.0.0: dependencies: - pug-error: 2.1.0 + pug-error: 2.0.0 pug-walk@2.0.0: {} @@ -6036,7 +6179,7 @@ snapshots: read-pkg@9.0.1: dependencies: '@types/normalize-package-data': 2.4.4 - normalize-package-data: 6.0.2 + normalize-package-data: 6.0.0 parse-json: 8.1.0 type-fest: 4.24.0 unicorn-magic: 0.1.0 @@ -6092,19 +6235,36 @@ snapshots: glob: 11.0.0 package-json-from-dist: 1.0.0 + rolldown@0.14.0-snapshot-d5e797b-20241114003621: + dependencies: + zod: 3.23.8 + optionalDependencies: + '@rolldown/binding-darwin-arm64': 0.14.0-snapshot-d5e797b-20241114003621 + '@rolldown/binding-darwin-x64': 0.14.0-snapshot-d5e797b-20241114003621 + '@rolldown/binding-freebsd-x64': 0.14.0-snapshot-d5e797b-20241114003621 + '@rolldown/binding-linux-arm-gnueabihf': 0.14.0-snapshot-d5e797b-20241114003621 + '@rolldown/binding-linux-arm64-gnu': 0.14.0-snapshot-d5e797b-20241114003621 + '@rolldown/binding-linux-arm64-musl': 0.14.0-snapshot-d5e797b-20241114003621 + '@rolldown/binding-linux-x64-gnu': 0.14.0-snapshot-d5e797b-20241114003621 + '@rolldown/binding-linux-x64-musl': 0.14.0-snapshot-d5e797b-20241114003621 + '@rolldown/binding-wasm32-wasi': 0.14.0-snapshot-d5e797b-20241114003621 + '@rolldown/binding-win32-arm64-msvc': 0.14.0-snapshot-d5e797b-20241114003621 + '@rolldown/binding-win32-ia32-msvc': 0.14.0-snapshot-d5e797b-20241114003621 + '@rolldown/binding-win32-x64-msvc': 0.14.0-snapshot-d5e797b-20241114003621 + rollup-plugin-dts@6.1.1(rollup@4.25.0)(typescript@5.6.2): dependencies: magic-string: 0.30.12 rollup: 4.25.0 typescript: 5.6.2 optionalDependencies: - '@babel/code-frame': 7.24.7 + '@babel/code-frame': 7.24.2 rollup-plugin-esbuild@6.1.1(esbuild@0.24.0)(rollup@4.25.0): dependencies: '@rollup/pluginutils': 5.1.0(rollup@4.25.0) debug: 4.3.6 - es-module-lexer: 1.5.4 + es-module-lexer: 1.5.0 esbuild: 0.24.0 get-tsconfig: 4.7.6 rollup: 4.25.0 @@ -6116,28 +6276,6 @@ snapshots: '@rollup/plugin-inject': 5.0.5(rollup@4.25.0) rollup: 4.25.0 - rollup@4.20.0: - dependencies: - '@types/estree': 1.0.5 - optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.20.0 - '@rollup/rollup-android-arm64': 4.20.0 - '@rollup/rollup-darwin-arm64': 4.20.0 - '@rollup/rollup-darwin-x64': 4.20.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.20.0 - '@rollup/rollup-linux-arm-musleabihf': 4.20.0 - '@rollup/rollup-linux-arm64-gnu': 4.20.0 - '@rollup/rollup-linux-arm64-musl': 4.20.0 - '@rollup/rollup-linux-powerpc64le-gnu': 4.20.0 - '@rollup/rollup-linux-riscv64-gnu': 4.20.0 - '@rollup/rollup-linux-s390x-gnu': 4.20.0 - '@rollup/rollup-linux-x64-gnu': 4.20.0 - '@rollup/rollup-linux-x64-musl': 4.20.0 - '@rollup/rollup-win32-arm64-msvc': 4.20.0 - '@rollup/rollup-win32-ia32-msvc': 4.20.0 - '@rollup/rollup-win32-x64-msvc': 4.20.0 - fsevents: 2.3.3 - rollup@4.25.0: dependencies: '@types/estree': 1.0.6 @@ -6255,7 +6393,7 @@ snapshots: smart-buffer@4.2.0: {} - socks-proxy-agent@8.0.4: + socks-proxy-agent@8.0.3: dependencies: agent-base: 7.1.1 debug: 4.3.6 @@ -6268,8 +6406,6 @@ snapshots: ip-address: 9.0.5 smart-buffer: 4.2.0 - source-map-js@1.2.0: {} - source-map-js@1.2.1: {} source-map@0.6.1: {} @@ -6277,16 +6413,16 @@ snapshots: spdx-correct@3.2.0: dependencies: spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.18 + spdx-license-ids: 3.0.17 spdx-exceptions@2.5.0: {} spdx-expression-parse@3.0.1: dependencies: spdx-exceptions: 2.5.0 - spdx-license-ids: 3.0.18 + spdx-license-ids: 3.0.17 - spdx-license-ids@3.0.18: {} + spdx-license-ids@3.0.17: {} sprintf-js@1.1.3: {} @@ -6296,13 +6432,12 @@ snapshots: std-env@3.7.0: {} - streamx@2.18.0: + streamx@2.16.1: dependencies: fast-fifo: 1.3.2 queue-tick: 1.0.1 - text-decoder: 1.1.1 optionalDependencies: - bare-events: 2.4.2 + bare-events: 2.2.2 string-argv@0.3.2: {} @@ -6320,7 +6455,7 @@ snapshots: emoji-regex: 9.2.2 strip-ansi: 7.1.0 - string-width@7.2.0: + string-width@7.1.0: dependencies: emoji-regex: 10.3.0 get-east-asian-width: 1.2.0 @@ -6363,14 +6498,14 @@ snapshots: pump: 3.0.0 tar-stream: 3.1.7 optionalDependencies: - bare-fs: 2.3.1 - bare-path: 2.1.3 + bare-fs: 2.2.3 + bare-path: 2.1.1 tar-stream@3.1.7: dependencies: b4a: 1.6.6 fast-fifo: 1.3.2 - streamx: 2.18.0 + streamx: 2.16.1 temp-dir@3.0.0: {} @@ -6384,10 +6519,6 @@ snapshots: glob: 10.4.5 minimatch: 9.0.5 - text-decoder@1.1.1: - dependencies: - b4a: 1.6.6 - text-table@0.2.0: {} through@2.3.8: {} @@ -6512,16 +6643,6 @@ snapshots: - supports-color - terser - vite@5.4.0(@types/node@22.8.7)(sass@1.80.6): - dependencies: - esbuild: 0.21.5 - postcss: 8.4.41 - rollup: 4.20.0 - optionalDependencies: - '@types/node': 22.8.7 - fsevents: 2.3.3 - sass: 1.80.6 - vite@5.4.8(@types/node@22.8.7)(sass@1.80.6): dependencies: esbuild: 0.21.5 @@ -6607,11 +6728,9 @@ snapshots: dependencies: '@babel/parser': 7.25.3 '@babel/types': 7.25.2 - assert-never: 1.3.0 + assert-never: 1.2.1 babel-walk: 3.0.0-canary-5 - word-wrap@1.2.5: {} - wordwrap@1.0.0: {} wrap-ansi@7.0.0: @@ -6629,7 +6748,7 @@ snapshots: wrap-ansi@9.0.0: dependencies: ansi-styles: 6.2.1 - string-width: 7.2.0 + string-width: 7.1.0 strip-ansi: 7.1.0 wrappy@1.0.2: {} diff --git a/rollup.dts.config.js b/rollup.dts.config.js index d9af98f130..6c2e26f449 100644 --- a/rollup.dts.config.js +++ b/rollup.dts.config.js @@ -1,6 +1,6 @@ // @ts-check import assert from 'node:assert/strict' -import { parse } from '@babel/parser' +import { parseSync } from 'oxc-parser' import { existsSync, readFileSync, readdirSync, writeFileSync } from 'node:fs' import MagicString from 'magic-string' import dts from 'rollup-plugin-dts' @@ -58,11 +58,15 @@ function patchTypes(pkg) { name: 'patch-types', renderChunk(code, chunk) { const s = new MagicString(code) - const ast = parse(code, { - plugins: ['typescript'], + const { program: ast, errors } = parseSync(code, { + sourceFilename: 'x.d.ts', sourceType: 'module', }) + if (errors.length) { + throw new Error(errors.join('\n')) + } + /** * @param {import('@babel/types').VariableDeclarator | import('@babel/types').TSTypeAliasDeclaration | import('@babel/types').TSInterfaceDeclaration | import('@babel/types').TSDeclareFunction | import('@babel/types').TSInterfaceDeclaration | import('@babel/types').TSEnumDeclaration | import('@babel/types').ClassDeclaration} node * @param {import('@babel/types').VariableDeclaration} [parentDecl] @@ -88,20 +92,23 @@ function patchTypes(pkg) { const shouldRemoveExport = new Set() // pass 0: check all exported types - for (const node of ast.program.body) { + for (const node of ast.body) { if (node.type === 'ExportNamedDeclaration' && !node.source) { for (let i = 0; i < node.specifiers.length; i++) { const spec = node.specifiers[i] if (spec.type === 'ExportSpecifier') { - isExported.add(spec.local.name) + isExported.add( + 'name' in spec.local ? spec.local.name : spec.local.value, + ) } } } } // pass 1: add exports - for (const node of ast.program.body) { + for (const node of ast.body) { if (node.type === 'VariableDeclaration') { + // @ts-expect-error waiting for oxc-parser to expose types processDeclaration(node.declarations[0], node) if (node.declarations.length > 1) { assert(typeof node.start === 'number') @@ -120,23 +127,26 @@ function patchTypes(pkg) { node.type === 'TSEnumDeclaration' || node.type === 'ClassDeclaration' ) { + // @ts-expect-error waiting for oxc-parser to expose types processDeclaration(node) } } // pass 2: remove exports - for (const node of ast.program.body) { + for (const node of ast.body) { if (node.type === 'ExportNamedDeclaration' && !node.source) { let removed = 0 for (let i = 0; i < node.specifiers.length; i++) { const spec = node.specifiers[i] + const localName = + 'name' in spec.local ? spec.local.name : spec.local.value if ( spec.type === 'ExportSpecifier' && - shouldRemoveExport.has(spec.local.name) + shouldRemoveExport.has(localName) ) { assert(spec.exported.type === 'Identifier') const exported = spec.exported.name - if (exported !== spec.local.name) { + if (exported !== localName) { // this only happens if we have something like // type Foo // export { Foo as Bar } diff --git a/scripts/build-types.js b/scripts/build-types.js new file mode 100644 index 0000000000..5019460216 --- /dev/null +++ b/scripts/build-types.js @@ -0,0 +1,71 @@ +import fs from 'node:fs' +import path from 'node:path' +import glob from 'fast-glob' +import { isolatedDeclaration } from 'oxc-transform' +import { rollup } from 'rollup' +import picocolors from 'picocolors' + +if (fs.existsSync('temp/packages')) { + fs.rmSync('temp/packages', { recursive: true }) +} + +let errs = '' +let start = performance.now() +let count = 0 + +for (const file of await glob('packages/*/src/**/*.ts')) { + if (file.includes('runtime-test')) continue + + const ts = fs.readFileSync(file, 'utf-8') + const dts = isolatedDeclaration(file, ts, { + sourcemap: false, + stripInternal: true, + }) + if (dts.errors.length) { + dts.errors.forEach(err => { + // temporary workaround for https://github.com/oxc-project/oxc/issues/5668 + if (!err.includes('set value(_: S)')) { + console.error(err) + } + errs += err + '\n' + }) + } + + write(path.join('temp', file.replace(/\.ts$/, '.d.ts')), dts.code) + count++ +} + +console.log( + `\n${count} isolated dts files generated in ${(performance.now() - start).toFixed(2)}ms.`, +) + +if (errs) { + write(path.join('temp', 'oxc-iso-decl-errors.txt'), errs) +} + +console.log('bundling dts with rollup-plugin-dts...') + +// bundle with rollup-plugin-dts +const rollupConfigs = (await import('../rollup.dts.config.js')).default + +start = performance.now() + +await Promise.all( + rollupConfigs.map(c => + rollup(c).then(bundle => { + return bundle.write(c.output).then(() => { + console.log(picocolors.gray('built: ') + picocolors.blue(c.output.file)) + }) + }), + ), +) + +console.log( + `bundled dts generated in ${(performance.now() - start).toFixed(2)}ms.`, +) + +function write(file, content) { + const dir = path.dirname(file) + if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true }) + fs.writeFileSync(file, content) +} diff --git a/scripts/build-with-rollup.js b/scripts/build-with-rollup.js new file mode 100644 index 0000000000..2687c266f2 --- /dev/null +++ b/scripts/build-with-rollup.js @@ -0,0 +1,259 @@ +// @ts-check + +/* +Produces production builds and stitches together d.ts files. + +To specify the package to build, simply pass its name and the desired build +formats to output (defaults to `buildOptions.formats` specified in that package, +or "esm,cjs"): + +``` +# name supports fuzzy match. will build all packages with name containing "dom": +nr build dom + +# specify the format to output +nr build core --formats cjs +``` +*/ + +import fs from 'node:fs' +import { parseArgs } from 'node:util' +import { existsSync, readFileSync } from 'node:fs' +import path from 'node:path' +import { brotliCompressSync, gzipSync } from 'node:zlib' +import pico from 'picocolors' +import { cpus } from 'node:os' +import { targets as allTargets, exec, fuzzyMatchTarget } from './utils.js' +import { scanEnums } from './inline-enums.js' +import prettyBytes from 'pretty-bytes' +import { spawnSync } from 'node:child_process' + +const commit = spawnSync('git', ['rev-parse', '--short=7', 'HEAD']) + .stdout.toString() + .trim() + +const { values, positionals: targets } = parseArgs({ + allowPositionals: true, + options: { + formats: { + type: 'string', + short: 'f', + }, + devOnly: { + type: 'boolean', + short: 'd', + }, + prodOnly: { + type: 'boolean', + short: 'p', + }, + withTypes: { + type: 'boolean', + short: 't', + }, + sourceMap: { + type: 'boolean', + short: 's', + }, + release: { + type: 'boolean', + }, + all: { + type: 'boolean', + short: 'a', + }, + size: { + type: 'boolean', + }, + }, +}) + +const { + formats, + all: buildAllMatching, + devOnly, + prodOnly, + withTypes: buildTypes, + sourceMap, + release: isRelease, + size: writeSize, +} = values + +const sizeDir = path.resolve('temp/size') + +run() + +async function run() { + if (writeSize) fs.mkdirSync(sizeDir, { recursive: true }) + const removeCache = scanEnums() + try { + const resolvedTargets = targets.length + ? fuzzyMatchTarget(targets, buildAllMatching) + : allTargets + await buildAll(resolvedTargets) + await checkAllSizes(resolvedTargets) + if (buildTypes) { + await exec( + 'pnpm', + [ + 'run', + 'build-dts', + ...(targets.length + ? ['--environment', `TARGETS:${resolvedTargets.join(',')}`] + : []), + ], + { + stdio: 'inherit', + }, + ) + } + } finally { + removeCache() + } +} + +/** + * Builds all the targets in parallel. + * @param {Array} targets - An array of targets to build. + * @returns {Promise} - A promise representing the build process. + */ +async function buildAll(targets) { + await runParallel(cpus().length, targets, build) +} + +/** + * Runs iterator function in parallel. + * @template T - The type of items in the data source + * @param {number} maxConcurrency - The maximum concurrency. + * @param {Array} source - The data source + * @param {(item: T) => Promise} iteratorFn - The iteratorFn + * @returns {Promise} - A Promise array containing all iteration results. + */ +async function runParallel(maxConcurrency, source, iteratorFn) { + /**@type {Promise[]} */ + const ret = [] + /**@type {Promise[]} */ + const executing = [] + for (const item of source) { + const p = Promise.resolve().then(() => iteratorFn(item)) + ret.push(p) + + if (maxConcurrency <= source.length) { + const e = p.then(() => { + executing.splice(executing.indexOf(e), 1) + }) + executing.push(e) + if (executing.length >= maxConcurrency) { + await Promise.race(executing) + } + } + } + return Promise.all(ret) +} + +const privatePackages = fs.readdirSync('packages-private') + +/** + * Builds the target. + * @param {string} target - The target to build. + * @returns {Promise} - A promise representing the build process. + */ +async function build(target) { + const pkgBase = privatePackages.includes(target) + ? `packages-private` + : `packages` + const pkgDir = path.resolve(`${pkgBase}/${target}`) + const pkg = JSON.parse(readFileSync(`${pkgDir}/package.json`, 'utf-8')) + + // if this is a full build (no specific targets), ignore private packages + if ((isRelease || !targets.length) && pkg.private) { + return + } + + // if building a specific format, do not remove dist. + if (!formats && existsSync(`${pkgDir}/dist`)) { + fs.rmSync(`${pkgDir}/dist`, { recursive: true }) + } + + const env = { + ...process.env, + TARGET: target, + COMMIT: commit, + NODE_ENV: + (pkg.buildOptions && pkg.buildOptions.env) || + (devOnly ? 'development' : 'production'), + ...(formats ? { FORMATS: formats } : null), + ...(prodOnly ? { PROD_ONLY: true } : null), + ...(sourceMap ? { SOURCE_MAP: true } : null), + } + + await exec('rollup', ['-c'], { + stdio: 'inherit', + env, + }) +} + +/** + * Checks the sizes of all targets. + * @param {string[]} targets - The targets to check sizes for. + * @returns {Promise} + */ +async function checkAllSizes(targets) { + if (devOnly || (formats && !formats.includes('global'))) { + return + } + console.log() + for (const target of targets) { + await checkSize(target) + } + console.log() +} + +/** + * Checks the size of a target. + * @param {string} target - The target to check the size for. + * @returns {Promise} + */ +async function checkSize(target) { + const pkgDir = path.resolve(`packages/${target}`) + await checkFileSize(`${pkgDir}/dist/${target}.global.prod.js`) + if (!formats || formats.includes('global-runtime')) { + await checkFileSize(`${pkgDir}/dist/${target}.runtime.global.prod.js`) + } +} + +/** + * Checks the file size. + * @param {string} filePath - The path of the file to check the size for. + * @returns {Promise} + */ +async function checkFileSize(filePath) { + if (!existsSync(filePath)) { + return + } + const file = fs.readFileSync(filePath) + const fileName = path.basename(filePath) + + const gzipped = gzipSync(file) + const brotli = brotliCompressSync(file) + + console.log( + `${pico.gray(pico.bold(fileName))} min:${prettyBytes( + file.length, + )} / gzip:${prettyBytes(gzipped.length)} / brotli:${prettyBytes( + brotli.length, + )}`, + ) + + if (writeSize) + fs.writeFileSync( + path.resolve(sizeDir, `${fileName}.json`), + JSON.stringify({ + file: fileName, + size: file.length, + gzip: gzipped.length, + brotli: brotli.length, + }), + 'utf-8', + ) +} diff --git a/scripts/build.js b/scripts/build.js index 4a0aef6454..a1b23ed6a9 100644 --- a/scripts/build.js +++ b/scripts/build.js @@ -22,12 +22,16 @@ import { existsSync, readFileSync } from 'node:fs' import path from 'node:path' import { brotliCompressSync, gzipSync } from 'node:zlib' import pico from 'picocolors' -import { cpus } from 'node:os' -import { targets as allTargets, exec, fuzzyMatchTarget } from './utils.js' -import { scanEnums } from './inline-enums.js' +import { targets as allTargets, fuzzyMatchTarget } from './utils.js' import prettyBytes from 'pretty-bytes' import { spawnSync } from 'node:child_process' +import { createConfigsForPackage } from './create-rolldown-config.js' +import { rolldown } from 'rolldown' +import { scanEnums } from './inline-enums.js' +import { fileURLToPath } from 'node:url' +const __dirname = fileURLToPath(new URL('.', import.meta.url)) +const privatePackages = fs.readdirSync('packages-private') const commit = spawnSync('git', ['rev-parse', '--short=7', 'HEAD']) .stdout.toString() .trim() @@ -69,43 +73,32 @@ const { values, positionals: targets } = parseArgs({ }) const { - formats, + formats: rawFormats, all: buildAllMatching, devOnly, prodOnly, withTypes: buildTypes, sourceMap, release: isRelease, - size: writeSize, + size, } = values +const formats = rawFormats?.split(',') const sizeDir = path.resolve('temp/size') run() async function run() { - if (writeSize) fs.mkdirSync(sizeDir, { recursive: true }) + if (size) fs.mkdirSync(sizeDir, { recursive: true }) const removeCache = scanEnums() try { const resolvedTargets = targets.length ? fuzzyMatchTarget(targets, buildAllMatching) : allTargets await buildAll(resolvedTargets) - await checkAllSizes(resolvedTargets) + if (size) await checkAllSizes(resolvedTargets) if (buildTypes) { - await exec( - 'pnpm', - [ - 'run', - 'build-dts', - ...(targets.length - ? ['--environment', `TARGETS:${resolvedTargets.join(',')}`] - : []), - ], - { - stdio: 'inherit', - }, - ) + await import('./build-types.js') } } finally { removeCache() @@ -118,51 +111,47 @@ async function run() { * @returns {Promise} - A promise representing the build process. */ async function buildAll(targets) { - await runParallel(cpus().length, targets, build) -} - -/** - * Runs iterator function in parallel. - * @template T - The type of items in the data source - * @param {number} maxConcurrency - The maximum concurrency. - * @param {Array} source - The data source - * @param {(item: T) => Promise} iteratorFn - The iteratorFn - * @returns {Promise} - A Promise array containing all iteration results. - */ -async function runParallel(maxConcurrency, source, iteratorFn) { - /**@type {Promise[]} */ - const ret = [] - /**@type {Promise[]} */ - const executing = [] - for (const item of source) { - const p = Promise.resolve().then(() => iteratorFn(item)) - ret.push(p) - - if (maxConcurrency <= source.length) { - const e = p.then(() => { - executing.splice(executing.indexOf(e), 1) - }) - executing.push(e) - if (executing.length >= maxConcurrency) { - await Promise.race(executing) - } + const start = performance.now() + const all = [] + let count = 0 + for (const t of targets) { + const configs = createConfigsForTarget(t) + if (configs) { + all.push( + Promise.all( + configs.map(c => + rolldown(c).then(bundle => { + return bundle.write(c.output).then(() => { + // @ts-expect-error + return path.join('packages', t, 'dist', c.output.entryFileNames) + }) + }), + ), + ).then(files => { + files.forEach(f => { + count++ + console.log(pico.gray('built: ') + pico.green(f)) + }) + }), + ) } } - return Promise.all(ret) + await Promise.all(all) + console.log( + `\n${count} files built in ${(performance.now() - start).toFixed(2)}ms.`, + ) } -const privatePackages = fs.readdirSync('packages-private') - /** * Builds the target. * @param {string} target - The target to build. - * @returns {Promise} - A promise representing the build process. + * @returns {import('rolldown').RolldownOptions[] | void} - A promise representing the build process. */ -async function build(target) { +function createConfigsForTarget(target) { const pkgBase = privatePackages.includes(target) ? `packages-private` : `packages` - const pkgDir = path.resolve(`${pkgBase}/${target}`) + const pkgDir = path.resolve(__dirname, `../${pkgBase}/${target}`) const pkg = JSON.parse(readFileSync(`${pkgDir}/package.json`, 'utf-8')) // if this is a full build (no specific targets), ignore private packages @@ -175,28 +164,16 @@ async function build(target) { fs.rmSync(`${pkgDir}/dist`, { recursive: true }) } - const env = - (pkg.buildOptions && pkg.buildOptions.env) || - (devOnly ? 'development' : 'production') - - await exec( - 'rollup', - [ - '-c', - '--environment', - [ - `COMMIT:${commit}`, - `NODE_ENV:${env}`, - `TARGET:${target}`, - formats ? `FORMATS:${formats}` : ``, - prodOnly ? `PROD_ONLY:true` : ``, - sourceMap ? `SOURCE_MAP:true` : ``, - ] - .filter(Boolean) - .join(','), - ], - { stdio: 'inherit' }, - ) + return createConfigsForPackage({ + target, + commit, + // @ts-expect-error + formats, + prodOnly, + devOnly: + (pkg.buildOptions && pkg.buildOptions.env === 'development') || devOnly, + sourceMap, + }) } /** @@ -221,7 +198,7 @@ async function checkAllSizes(targets) { * @returns {Promise} */ async function checkSize(target) { - const pkgDir = path.resolve(`packages/${target}`) + const pkgDir = path.resolve(__dirname, `../packages/${target}`) await checkFileSize(`${pkgDir}/dist/${target}.global.prod.js`) if (!formats || formats.includes('global-runtime')) { await checkFileSize(`${pkgDir}/dist/${target}.runtime.global.prod.js`) @@ -251,7 +228,7 @@ async function checkFileSize(filePath) { )}`, ) - if (writeSize) + if (size) fs.writeFileSync( path.resolve(sizeDir, `${fileName}.json`), JSON.stringify({ diff --git a/scripts/create-rolldown-config.js b/scripts/create-rolldown-config.js new file mode 100644 index 0000000000..b5a5d80872 --- /dev/null +++ b/scripts/create-rolldown-config.js @@ -0,0 +1,387 @@ +// @ts-check +import assert from 'node:assert/strict' +import { createRequire } from 'node:module' +import { fileURLToPath } from 'node:url' +import path from 'node:path' +import { replacePlugin } from 'rolldown/experimental' +import pico from 'picocolors' +import polyfillNode from '@rolldown/plugin-node-polyfills' +import { entries } from './aliases.js' +import { inlineEnums } from './inline-enums.js' +import { minify as minifySwc } from '@swc/core' + +const require = createRequire(import.meta.url) +const __dirname = fileURLToPath(new URL('.', import.meta.url)) + +const masterVersion = require('../package.json').version +const consolidatePkg = require('@vue/consolidate/package.json') + +const packagesDir = path.resolve(__dirname, '../packages') + +/** @typedef {'cjs' | 'esm-bundler' | 'global' | 'global-runtime' | 'esm-browser' | 'esm-bundler-runtime' | 'esm-browser-runtime'} PackageFormat */ + +/** + * @param {{ + * target: string + * commit: string + * formats?: PackageFormat[] + * devOnly?: boolean + * prodOnly?: boolean + * sourceMap?: boolean + * }} options + */ +export function createConfigsForPackage({ + target, + commit, + formats, + devOnly = false, + prodOnly = false, + sourceMap = false, +}) { + const [enumPlugin, enumDefines] = inlineEnums() + + const packageDir = path.resolve(packagesDir, target) + const resolve = (/** @type {string} */ p) => path.resolve(packageDir, p) + const pkg = require(resolve(`package.json`)) + const packageOptions = pkg.buildOptions || {} + const name = packageOptions.filename || path.basename(packageDir) + + /** @type {Record} */ + const outputConfigs = { + 'esm-bundler': { + entryFileNames: `${name}.esm-bundler.js`, + format: 'es', + }, + 'esm-browser': { + entryFileNames: `${name}.esm-browser.js`, + format: 'es', + }, + cjs: { + entryFileNames: `${name}.cjs.js`, + format: 'cjs', + }, + global: { + entryFileNames: `${name}.global.js`, + format: 'iife', + }, + // runtime-only builds, for main "vue" package only + 'esm-bundler-runtime': { + entryFileNames: `${name}.runtime.esm-bundler.js`, + format: 'es', + }, + 'esm-browser-runtime': { + entryFileNames: `${name}.runtime.esm-browser.js`, + format: 'es', + }, + 'global-runtime': { + entryFileNames: `${name}.runtime.global.js`, + format: 'iife', + }, + } + + const resolvedFormats = ( + formats || + packageOptions.formats || ['esm-bundler', 'cjs'] + ).filter(format => outputConfigs[format]) + + const packageConfigs = prodOnly + ? [] + : resolvedFormats.map(format => createConfig(format, outputConfigs[format])) + + if (!devOnly) { + resolvedFormats.forEach(format => { + if (packageOptions.prod === false) { + return + } + if (format === 'cjs') { + packageConfigs.push(createProductionConfig(format)) + } + if (/^(global|esm-browser)(-runtime)?/.test(format)) { + packageConfigs.push(createMinifiedConfig(format)) + } + }) + } + + /** + * + * @param {PackageFormat} format + * @param {import('rolldown').OutputOptions} output + * @param {import('rolldown').Plugin[]} plugins + * @returns {import('rolldown').RolldownOptions} + */ + function createConfig(format, output, plugins = []) { + if (!output) { + console.error(pico.yellow(`invalid format: "${format}"`)) + process.exit(1) + } + + output.dir = resolve('dist') + + const isProductionBuild = /\.prod\.js$/.test( + String(output.entryFileNames) || '', + ) + const isBundlerESMBuild = /esm-bundler/.test(format) + const isBrowserESMBuild = /esm-browser/.test(format) + const isServerRenderer = name === 'server-renderer' + const isCJSBuild = format === 'cjs' + const isGlobalBuild = /global/.test(format) + const isCompatPackage = + pkg.name === '@vue/compat' || pkg.name === '@vue/compat-canary' + const isCompatBuild = !!packageOptions.compat + const isBrowserBuild = + (isGlobalBuild || isBrowserESMBuild || isBundlerESMBuild) && + !packageOptions.enableNonBrowserBranches + + output.banner = `/** + * ${pkg.name} v${masterVersion} + * (c) 2018-present Yuxi (Evan) You and Vue contributors + * @license MIT + **/` + + output.exports = isCompatPackage ? 'auto' : 'named' + if (isCJSBuild) { + output.esModule = true + } + output.sourcemap = sourceMap + + output.externalLiveBindings = false + + // https://github.com/rollup/rollup/pull/5380 + // @ts-expect-error Not supported yet + output.reexportProtoFromExternal = false + + if (isGlobalBuild) { + output.name = packageOptions.name + } + + let entryFile = /runtime$/.test(format) ? `src/runtime.ts` : `src/index.ts` + + // the compat build needs both default AND named exports. This will cause + // Rollup to complain for non-ESM targets, so we use separate entries for + // esm vs. non-esm builds. + if (isCompatPackage && (isBrowserESMBuild || isBundlerESMBuild)) { + entryFile = /runtime$/.test(format) + ? `src/esm-runtime.ts` + : `src/esm-index.ts` + } + + function resolveDefine() { + /** @type {Record} */ + const defines = { + __COMMIT__: `"${commit}"`, + __VERSION__: `"${masterVersion}"`, + // this is only used during Vue's internal tests + __TEST__: `false`, + // If the build is expected to run directly in the browser (global / esm builds) + __BROWSER__: String(isBrowserBuild), + __GLOBAL__: String(isGlobalBuild), + __ESM_BUNDLER__: String(isBundlerESMBuild), + __ESM_BROWSER__: String(isBrowserESMBuild), + // is targeting Node (SSR)? + __CJS__: String(isCJSBuild), + // need SSR-specific branches? + __SSR__: String(isCJSBuild || isBundlerESMBuild || isServerRenderer), + + // 2.x compat build + __COMPAT__: String(isCompatBuild), + + // feature flags + __FEATURE_SUSPENSE__: `true`, + __FEATURE_OPTIONS_API__: isBundlerESMBuild + ? `__VUE_OPTIONS_API__` + : `true`, + __FEATURE_PROD_DEVTOOLS__: isBundlerESMBuild + ? `__VUE_PROD_DEVTOOLS__` + : `false`, + __FEATURE_PROD_HYDRATION_MISMATCH_DETAILS__: isBundlerESMBuild + ? `__VUE_PROD_HYDRATION_MISMATCH_DETAILS__` + : `false`, + } + + if (!isBundlerESMBuild) { + // hard coded dev/prod builds + defines.__DEV__ = String(!isProductionBuild) + } + + // allow inline overrides like + //__RUNTIME_COMPILE__=true pnpm build runtime-core + Object.keys(defines).forEach(key => { + if (key in process.env) { + const value = process.env[key] + assert(typeof value === 'string') + defines[key] = value + } + }) + + return defines + } + + // esbuild define is a bit strict and only allows literal json or identifiers + // so we still need replace plugin in some cases + function resolveReplace() { + /** @type {Record} */ + const replacements = { ...enumDefines } + + if (isBundlerESMBuild) { + Object.assign(replacements, { + // preserve to be handled by bundlers + __DEV__: `!!(process.env.NODE_ENV !== 'production')`, + }) + } + + // for compiler-sfc browser build inlined deps + if (isBrowserESMBuild && name === 'compiler-sfc') { + Object.assign(replacements, { + 'process.env': '({})', + 'process.platform': '""', + 'process.stdout': 'null', + }) + } + + if (Object.keys(replacements).length) { + return [replacePlugin(replacements)] + } else { + return [] + } + } + + function resolveExternal() { + const treeShakenDeps = [ + 'source-map-js', + '@babel/parser', + 'estree-walker', + 'entities/lib/decode.js', + ] + + // we are bundling forked consolidate.js in compiler-sfc which dynamically + // requires a ton of template engines which should be ignored. + let cjsIgnores = [] + if ( + pkg.name === '@vue/compiler-sfc' || + pkg.name === '@vue/compiler-sfc-canary' + ) { + cjsIgnores = [ + ...Object.keys(consolidatePkg.devDependencies), + 'vm', + 'crypto', + 'react-dom/server', + 'teacup/lib/express', + 'arc-templates/dist/es5', + 'then-pug', + 'then-jade', + ] + } + + if (isGlobalBuild || isBrowserESMBuild || isCompatPackage) { + if (!packageOptions.enableNonBrowserBranches) { + // normal browser builds - non-browser only imports are tree-shaken, + // they are only listed here to suppress warnings. + return treeShakenDeps + } else { + return cjsIgnores + } + } else { + // Node / esm-bundler builds. + // externalize all direct deps unless it's the compat build. + return [ + ...Object.keys(pkg.dependencies || {}), + ...Object.keys(pkg.peerDependencies || {}), + // for @vue/compiler-sfc / server-renderer + ...['path', 'url', 'stream'], + // somehow these throw warnings for runtime-* package builds + ...treeShakenDeps, + ...cjsIgnores, + ] + } + } + + function resolveNodePlugins() { + const nodePlugins = + (format === 'cjs' && Object.keys(pkg.devDependencies || {}).length) || + packageOptions.enableNonBrowserBranches + ? [...(format === 'cjs' ? [] : [polyfillNode()])] + : [] + return nodePlugins + } + + return { + input: resolve(entryFile), + // Global and Browser ESM builds inlines everything so that they can be + // used alone. + external: resolveExternal(), + define: resolveDefine(), + platform: format === 'cjs' ? 'node' : 'browser', + resolve: { + alias: entries, + }, + plugins: [ + // @ts-expect-error rollup's Plugin type incompatible w/ rolldown's vendored Plugin type + enumPlugin, + ...resolveReplace(), + ...resolveNodePlugins(), + ...plugins, + ], + output, + onwarn: (msg, warn) => { + if (msg.code !== 'CIRCULAR_DEPENDENCY') { + warn(msg) + } + }, + treeshake: { + // https://github.com/rolldown/rolldown/issues/1917 + moduleSideEffects: false, + }, + } + } + + function createProductionConfig(/** @type {PackageFormat} */ format) { + return createConfig(format, { + entryFileNames: `${name}.${format}.prod.js`, + format: outputConfigs[format].format, + }) + } + + function createMinifiedConfig(/** @type {PackageFormat} */ format) { + return createConfig( + format, + { + entryFileNames: String(outputConfigs[format].entryFileNames).replace( + /\.js$/, + '.prod.js', + ), + format: outputConfigs[format].format, + // minify: true, + }, + [ + { + name: 'swc-minify', + async renderChunk( + contents, + _, + { + format, + sourcemap, + // @ts-expect-error not supported yet + sourcemapExcludeSources, + }, + ) { + const { code, map } = await minifySwc(contents, { + module: format === 'es', + compress: { + ecma: 2016, + pure_getters: true, + }, + safari10: true, + mangle: true, + sourceMap: !!sourcemap, + inlineSourcesContent: !sourcemapExcludeSources, + }) + return { code, map: map || null } + }, + }, + ], + ) + } + + return packageConfigs +} diff --git a/scripts/inline-enums.js b/scripts/inline-enums.js index b1baaa6c5c..55583c10b4 100644 --- a/scripts/inline-enums.js +++ b/scripts/inline-enums.js @@ -20,7 +20,7 @@ import { writeFileSync, } from 'node:fs' import * as path from 'node:path' -import { parse } from '@babel/parser' +import { parseSync } from 'oxc-parser' import { spawnSync } from 'node:child_process' import MagicString from 'magic-string' @@ -61,17 +61,19 @@ export function scanEnums() { ] // 2. parse matched files to collect enum info + let i = 0 for (const relativeFile of files) { const file = path.resolve(process.cwd(), relativeFile) const content = readFileSync(file, 'utf-8') - const ast = parse(content, { - plugins: ['typescript'], + const res = parseSync(content, { + // plugins: ['typescript'], + sourceFilename: file, sourceType: 'module', }) /** @type {Set} */ const enumIds = new Set() - for (const node of ast.program.body) { + for (const node of res.program.body) { if ( node.type === 'ExportNamedDeclaration' && node.declaration && @@ -129,7 +131,11 @@ export function scanEnums() { node.type === 'StringLiteral' ) { return node.value - } else if (node.type === 'MemberExpression') { + } else if ( + node.type === 'MemberExpression' || + // @ts-expect-error oxc only type + node.type === 'StaticMemberExpression' + ) { const exp = /** @type {`${string}.${string}`} */ ( content.slice(node.start, node.end) ) diff --git a/scripts/test.js b/scripts/test.js new file mode 100644 index 0000000000..e69de29bb2