From b2b518ee341bdf782e1acfe858129b0e7c990545 Mon Sep 17 00:00:00 2001 From: AdrianGonz97 <31664583+AdrianGonz97@users.noreply.github.com> Date: Thu, 22 Aug 2024 13:20:10 -0400 Subject: [PATCH 1/8] remove file extensions (rolldown doesn't like them) --- packages/adders/drizzle/index.ts | 8 +++----- packages/adders/eslint/config/adder.ts | 4 ++-- packages/adders/eslint/index.ts | 8 +++----- packages/adders/mdsvex/index.ts | 8 +++----- packages/adders/playwright/config/adder.ts | 2 +- packages/adders/playwright/config/checks.ts | 2 +- packages/adders/playwright/config/tests.ts | 2 +- packages/adders/playwright/index.ts | 8 +++----- packages/adders/prettier/config/adder.ts | 4 ++-- packages/adders/prettier/index.ts | 8 +++----- packages/adders/routify/index.ts | 8 +++----- packages/adders/storybook/config/adder.ts | 2 +- packages/adders/storybook/config/tests.ts | 2 +- packages/adders/storybook/index.ts | 8 +++----- packages/adders/tailwindcss/index.ts | 8 +++----- packages/adders/vitest/config/adder.ts | 2 +- packages/adders/vitest/config/checks.ts | 2 +- packages/adders/vitest/config/tests.ts | 2 +- packages/adders/vitest/index.ts | 8 +++----- 19 files changed, 39 insertions(+), 57 deletions(-) diff --git a/packages/adders/drizzle/index.ts b/packages/adders/drizzle/index.ts index 4549a9e82..3001c79ff 100644 --- a/packages/adders/drizzle/index.ts +++ b/packages/adders/drizzle/index.ts @@ -1,8 +1,6 @@ -#!/usr/bin/env node - import { defineAdder } from '@svelte-cli/core'; -import { adder } from './config/adder.js'; -import { checks } from './config/checks.js'; -import { tests } from './config/tests.js'; +import { adder } from './config/adder'; +import { checks } from './config/checks'; +import { tests } from './config/tests'; export default defineAdder(adder, checks, tests); diff --git a/packages/adders/eslint/config/adder.ts b/packages/adders/eslint/config/adder.ts index c0b82dba2..12bde4c67 100644 --- a/packages/adders/eslint/config/adder.ts +++ b/packages/adders/eslint/config/adder.ts @@ -1,8 +1,8 @@ import fs from 'node:fs'; import path from 'node:path'; import { defineAdderConfig, log } from '@svelte-cli/core'; -import { options } from './options.js'; -import { addEslintConfigPrettier } from '../../common.js'; +import { options } from './options'; +import { addEslintConfigPrettier } from '../../common'; export const adder = defineAdderConfig({ metadata: { diff --git a/packages/adders/eslint/index.ts b/packages/adders/eslint/index.ts index 4549a9e82..3001c79ff 100644 --- a/packages/adders/eslint/index.ts +++ b/packages/adders/eslint/index.ts @@ -1,8 +1,6 @@ -#!/usr/bin/env node - import { defineAdder } from '@svelte-cli/core'; -import { adder } from './config/adder.js'; -import { checks } from './config/checks.js'; -import { tests } from './config/tests.js'; +import { adder } from './config/adder'; +import { checks } from './config/checks'; +import { tests } from './config/tests'; export default defineAdder(adder, checks, tests); diff --git a/packages/adders/mdsvex/index.ts b/packages/adders/mdsvex/index.ts index 24861cbd4..9bb8a4235 100644 --- a/packages/adders/mdsvex/index.ts +++ b/packages/adders/mdsvex/index.ts @@ -1,8 +1,6 @@ -#!/usr/bin/env node - import { defineAdder } from '@svelte-cli/core'; -import { adder } from './config/adder.js'; -import { tests } from './config/tests.js'; -import { checks } from './config/checks.js'; +import { adder } from './config/adder'; +import { tests } from './config/tests'; +import { checks } from './config/checks'; export default defineAdder(adder, checks, tests); diff --git a/packages/adders/playwright/config/adder.ts b/packages/adders/playwright/config/adder.ts index 3fd455fdb..e56e8a944 100644 --- a/packages/adders/playwright/config/adder.ts +++ b/packages/adders/playwright/config/adder.ts @@ -1,7 +1,7 @@ import fs from 'node:fs'; import { join } from 'node:path'; import { dedent, defineAdderConfig, log } from '@svelte-cli/core'; -import { options } from './options.js'; +import { options } from './options'; export const adder = defineAdderConfig({ metadata: { diff --git a/packages/adders/playwright/config/checks.ts b/packages/adders/playwright/config/checks.ts index 958dbb4e2..88a4f60e2 100644 --- a/packages/adders/playwright/config/checks.ts +++ b/packages/adders/playwright/config/checks.ts @@ -1,5 +1,5 @@ import { defineAdderChecks } from '@svelte-cli/core'; -import { options } from './options.js'; +import { options } from './options'; export const checks = defineAdderChecks({ options diff --git a/packages/adders/playwright/config/tests.ts b/packages/adders/playwright/config/tests.ts index 80ec6e0ea..2773d0407 100644 --- a/packages/adders/playwright/config/tests.ts +++ b/packages/adders/playwright/config/tests.ts @@ -1,5 +1,5 @@ import { defineAdderTests } from '@svelte-cli/core'; -import { options } from './options.js'; +import { options } from './options'; export const tests = defineAdderTests({ files: [], diff --git a/packages/adders/playwright/index.ts b/packages/adders/playwright/index.ts index 4549a9e82..3001c79ff 100644 --- a/packages/adders/playwright/index.ts +++ b/packages/adders/playwright/index.ts @@ -1,8 +1,6 @@ -#!/usr/bin/env node - import { defineAdder } from '@svelte-cli/core'; -import { adder } from './config/adder.js'; -import { checks } from './config/checks.js'; -import { tests } from './config/tests.js'; +import { adder } from './config/adder'; +import { checks } from './config/checks'; +import { tests } from './config/tests'; export default defineAdder(adder, checks, tests); diff --git a/packages/adders/prettier/config/adder.ts b/packages/adders/prettier/config/adder.ts index ec75afb4b..556d9c9d6 100644 --- a/packages/adders/prettier/config/adder.ts +++ b/packages/adders/prettier/config/adder.ts @@ -1,6 +1,6 @@ import { dedent, defineAdderConfig, log, colors } from '@svelte-cli/core'; -import { options } from './options.js'; -import { addEslintConfigPrettier } from '../../common.js'; +import { options } from './options'; +import { addEslintConfigPrettier } from '../../common'; export const adder = defineAdderConfig({ metadata: { diff --git a/packages/adders/prettier/index.ts b/packages/adders/prettier/index.ts index 4549a9e82..3001c79ff 100644 --- a/packages/adders/prettier/index.ts +++ b/packages/adders/prettier/index.ts @@ -1,8 +1,6 @@ -#!/usr/bin/env node - import { defineAdder } from '@svelte-cli/core'; -import { adder } from './config/adder.js'; -import { checks } from './config/checks.js'; -import { tests } from './config/tests.js'; +import { adder } from './config/adder'; +import { checks } from './config/checks'; +import { tests } from './config/tests'; export default defineAdder(adder, checks, tests); diff --git a/packages/adders/routify/index.ts b/packages/adders/routify/index.ts index 24861cbd4..9bb8a4235 100644 --- a/packages/adders/routify/index.ts +++ b/packages/adders/routify/index.ts @@ -1,8 +1,6 @@ -#!/usr/bin/env node - import { defineAdder } from '@svelte-cli/core'; -import { adder } from './config/adder.js'; -import { tests } from './config/tests.js'; -import { checks } from './config/checks.js'; +import { adder } from './config/adder'; +import { tests } from './config/tests'; +import { checks } from './config/checks'; export default defineAdder(adder, checks, tests); diff --git a/packages/adders/storybook/config/adder.ts b/packages/adders/storybook/config/adder.ts index 3627147a2..7479afbdc 100644 --- a/packages/adders/storybook/config/adder.ts +++ b/packages/adders/storybook/config/adder.ts @@ -1,5 +1,5 @@ import { defineAdderConfig } from '@svelte-cli/core'; -import { options } from './options.js'; +import { options } from './options'; export const adder = defineAdderConfig({ metadata: { diff --git a/packages/adders/storybook/config/tests.ts b/packages/adders/storybook/config/tests.ts index 4c12736cc..fc80cf7ae 100644 --- a/packages/adders/storybook/config/tests.ts +++ b/packages/adders/storybook/config/tests.ts @@ -1,5 +1,5 @@ import { defineAdderTests } from '@svelte-cli/core'; -import { options } from './options.js'; +import { options } from './options'; let port = 6006; diff --git a/packages/adders/storybook/index.ts b/packages/adders/storybook/index.ts index 24861cbd4..9bb8a4235 100644 --- a/packages/adders/storybook/index.ts +++ b/packages/adders/storybook/index.ts @@ -1,8 +1,6 @@ -#!/usr/bin/env node - import { defineAdder } from '@svelte-cli/core'; -import { adder } from './config/adder.js'; -import { tests } from './config/tests.js'; -import { checks } from './config/checks.js'; +import { adder } from './config/adder'; +import { tests } from './config/tests'; +import { checks } from './config/checks'; export default defineAdder(adder, checks, tests); diff --git a/packages/adders/tailwindcss/index.ts b/packages/adders/tailwindcss/index.ts index 4549a9e82..3001c79ff 100644 --- a/packages/adders/tailwindcss/index.ts +++ b/packages/adders/tailwindcss/index.ts @@ -1,8 +1,6 @@ -#!/usr/bin/env node - import { defineAdder } from '@svelte-cli/core'; -import { adder } from './config/adder.js'; -import { checks } from './config/checks.js'; -import { tests } from './config/tests.js'; +import { adder } from './config/adder'; +import { checks } from './config/checks'; +import { tests } from './config/tests'; export default defineAdder(adder, checks, tests); diff --git a/packages/adders/vitest/config/adder.ts b/packages/adders/vitest/config/adder.ts index c9d9bdf79..c6ad96ff0 100644 --- a/packages/adders/vitest/config/adder.ts +++ b/packages/adders/vitest/config/adder.ts @@ -1,5 +1,5 @@ import { dedent, defineAdderConfig, log } from '@svelte-cli/core'; -import { options } from './options.js'; +import { options } from './options'; export const adder = defineAdderConfig({ metadata: { diff --git a/packages/adders/vitest/config/checks.ts b/packages/adders/vitest/config/checks.ts index 958dbb4e2..88a4f60e2 100644 --- a/packages/adders/vitest/config/checks.ts +++ b/packages/adders/vitest/config/checks.ts @@ -1,5 +1,5 @@ import { defineAdderChecks } from '@svelte-cli/core'; -import { options } from './options.js'; +import { options } from './options'; export const checks = defineAdderChecks({ options diff --git a/packages/adders/vitest/config/tests.ts b/packages/adders/vitest/config/tests.ts index 80ec6e0ea..2773d0407 100644 --- a/packages/adders/vitest/config/tests.ts +++ b/packages/adders/vitest/config/tests.ts @@ -1,5 +1,5 @@ import { defineAdderTests } from '@svelte-cli/core'; -import { options } from './options.js'; +import { options } from './options'; export const tests = defineAdderTests({ files: [], diff --git a/packages/adders/vitest/index.ts b/packages/adders/vitest/index.ts index 4549a9e82..3001c79ff 100644 --- a/packages/adders/vitest/index.ts +++ b/packages/adders/vitest/index.ts @@ -1,8 +1,6 @@ -#!/usr/bin/env node - import { defineAdder } from '@svelte-cli/core'; -import { adder } from './config/adder.js'; -import { checks } from './config/checks.js'; -import { tests } from './config/tests.js'; +import { adder } from './config/adder'; +import { checks } from './config/checks'; +import { tests } from './config/tests'; export default defineAdder(adder, checks, tests); From 5808200da8f7c7afdb29df3172ea8e9804cb9c72 Mon Sep 17 00:00:00 2001 From: AdrianGonz97 <31664583+AdrianGonz97@users.noreply.github.com> Date: Thu, 22 Aug 2024 13:21:43 -0400 Subject: [PATCH 2/8] temp fix for dynamic import vars --- packages/adders/index.ts | 50 ++++++++++++++++++++++++++-------------- 1 file changed, 33 insertions(+), 17 deletions(-) diff --git a/packages/adders/index.ts b/packages/adders/index.ts index 6559ce82e..2ff44d9a4 100644 --- a/packages/adders/index.ts +++ b/packages/adders/index.ts @@ -1,21 +1,37 @@ -import type { AdderConfig, AdderWithoutExplicitArgs, Question } from '@svelte-cli/core'; - +// Rolldown doesn't support dynamic import vars yet. export async function getAdderDetails(name: string) { - const adder: { default: AdderWithoutExplicitArgs } = await import(`./${name}/index.ts`); + let adder; + switch (name) { + case 'drizzle': + adder = await import('./drizzle/index'); + break; + case 'eslint': + adder = await import('./eslint/index'); + break; + case 'mdsvex': + adder = await import('./mdsvex/index'); + break; + case 'playwright': + adder = await import('./playwright/index'); + break; + case 'prettier': + adder = await import('./prettier/index'); + break; + case 'routify': + adder = await import('./routify/index'); + break; + case 'storybook': + adder = await import('./storybook/index'); + break; + case 'tailwindcss': + adder = await import('./tailwindcss/index'); + break; + case 'vitest': + adder = await import('./vitest/index'); + break; + default: + throw new Error(`invalid adder name: ${name}`); + } return adder.default; } - -export async function getAdderConfig(name: string) { - // Mainly used by the website - // Either vite / rollup or esbuild are not able to process the shebangs - // present on the `index.js` file. That's why we directly import the configuration - // for the website here, as this is the only important part. - - const adder: Promise<{ adder: AdderConfig> }> = await import( - `./${name}/config/adder.ts` - ); - const { adder: adderConfig } = await adder; - - return adderConfig; -} From d4c011c0666cfe6eea03489214007a02b7b5c7ab Mon Sep 17 00:00:00 2001 From: AdrianGonz97 <31664583+AdrianGonz97@users.noreply.github.com> Date: Thu, 22 Aug 2024 13:28:06 -0400 Subject: [PATCH 3/8] add rolldown --- package.json | 10 +- pnpm-lock.yaml | 377 +++++++++++-------------- rollup.config.js => rolldown.config.js | 73 +++-- 3 files changed, 202 insertions(+), 258 deletions(-) rename rollup.config.js => rolldown.config.js (53%) diff --git a/package.json b/package.json index baede1a4a..df5cd18af 100644 --- a/package.json +++ b/package.json @@ -11,24 +11,18 @@ "changeset:version": "changeset version && pnpm -r generate:version && git add --all", "changeset:release": "changeset publish", "dev": "rollup --config --watch", - "build": "pnpm -r build && rollup -c", + "build": "rolldown -c", "test": "pnpm -r test" }, "devDependencies": { "@changesets/cli": "^2.27.6", - "@rollup/plugin-commonjs": "^26.0.1", - "@rollup/plugin-dynamic-import-vars": "^2.1.2", - "@rollup/plugin-json": "^6.1.0", - "@rollup/plugin-node-resolve": "^15.2.3", "@sveltejs/eslint-config": "^8.0.1", "@svitejs/changesets-changelog-github-compact": "^1.1.0", "@types/node": "^22.3.0", "eslint": "^9.6.0", "prettier": "^3.1.1", "prettier-plugin-svelte": "^3.2.6", - "rollup": "^4.20.0", - "rollup-plugin-esbuild": "^6.1.1", - "rollup-plugin-preserve-shebangs": "^0.2.0", + "rolldown": "0.12.2", "typescript": "^5.3.3", "typescript-eslint": "^8.0.0", "unplugin-isolated-decl": "^0.4.5" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 94045a0a1..23329be2a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -11,18 +11,6 @@ importers: '@changesets/cli': specifier: ^2.27.6 version: 2.27.7 - '@rollup/plugin-commonjs': - specifier: ^26.0.1 - version: 26.0.1(rollup@4.21.0) - '@rollup/plugin-dynamic-import-vars': - specifier: ^2.1.2 - version: 2.1.2(rollup@4.21.0) - '@rollup/plugin-json': - specifier: ^6.1.0 - version: 6.1.0(rollup@4.21.0) - '@rollup/plugin-node-resolve': - specifier: ^15.2.3 - version: 15.2.3(rollup@4.21.0) '@sveltejs/eslint-config': specifier: ^8.0.1 version: 8.0.1(@stylistic/eslint-plugin-js@2.6.4(eslint@9.9.0))(eslint-config-prettier@9.1.0(eslint@9.9.0))(eslint-plugin-n@17.10.2(eslint@9.9.0))(eslint-plugin-svelte@2.43.0(eslint@9.9.0)(svelte@4.2.18))(eslint@9.9.0)(typescript-eslint@8.2.0(eslint@9.9.0)(typescript@5.5.4))(typescript@5.5.4) @@ -41,15 +29,9 @@ importers: prettier-plugin-svelte: specifier: ^3.2.6 version: 3.2.6(prettier@3.3.3)(svelte@4.2.18) - rollup: - specifier: ^4.20.0 - version: 4.21.0 - rollup-plugin-esbuild: - specifier: ^6.1.1 - version: 6.1.1(esbuild@0.21.5)(rollup@4.21.0) - rollup-plugin-preserve-shebangs: - specifier: ^0.2.0 - version: 0.2.0(rollup@4.21.0) + rolldown: + specifier: 0.12.2 + version: 0.12.2 typescript: specifier: ^5.3.3 version: 5.5.4 @@ -285,6 +267,15 @@ packages: '@changesets/write@0.3.1': resolution: {integrity: sha512-SyGtMXzH3qFqlHKcvFY2eX+6b0NGiFcNav8AFsYwy5l8hejOeoeTDemu5Yjmke2V5jpzY+pBvM0vCCQ3gdZpfw==} + '@emnapi/core@1.2.0': + resolution: {integrity: sha512-E7Vgw78I93we4ZWdYCb4DGAwRROGkMIXk7/y87UmANR+J6qsWusmC3gLt0H+O0KOt5e6O38U8oJamgbudrES/w==} + + '@emnapi/runtime@1.2.0': + resolution: {integrity: sha512-bV21/9LQmcQeCPEg3BDFtvwL6cwiTMksYNWQQ4KOxCZikEGalWtenoZ0wCiukJINlGCIi2KXx01g4FoH/LxpzQ==} + + '@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'} @@ -485,6 +476,9 @@ packages: '@manypkg/get-packages@1.1.3': resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} + '@napi-rs/wasm-runtime@0.2.4': + resolution: {integrity: sha512-9zESzOO5aDByvhIAsOy9TbpZ0Ur2AJbUI7UT73kcUTS2mxAMHOBaa1st/jAymNoCtvrit99kkzT1FZuXVcgfIQ==} + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -541,41 +535,65 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} - '@rollup/plugin-commonjs@26.0.1': - resolution: {integrity: sha512-UnsKoZK6/aGIH6AdkptXhNvhaqftcjq3zZdT+LY5Ftms6JR06nADcDsYp5hTU9E2lbJUEOhdlY5J4DNTneM+jQ==} - engines: {node: '>=16.0.0 || 14 >= 14.17'} - peerDependencies: - rollup: ^2.68.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true + '@rolldown/binding-darwin-arm64@0.12.2': + resolution: {integrity: sha512-Y3Ajye63Z5KymGUwTLaK7Q6YMvycXqNiXtosecgVzjAwMITCmXdzgnWgzzx5UlWHMrDYL4m5zIeXGB5slLwoMA==} + cpu: [arm64] + os: [darwin] - '@rollup/plugin-dynamic-import-vars@2.1.2': - resolution: {integrity: sha512-4lr2oXxs9hcxtGGaK8s0i9evfjzDrAs7ngw28TqruWKTEm0+U4Eljb+F6HXGYdFv8xRojQlrQwV7M/yxeh3yzQ==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true + '@rolldown/binding-darwin-x64@0.12.2': + resolution: {integrity: sha512-ZcVuVFEFBXhp00TUNn+EDYs7SGGLQCznvCeuW1XkM8EC2/LfewU/o4WuJK7CBC4iCSktuFGpw7+zLe8D6iinzg==} + cpu: [x64] + os: [darwin] - '@rollup/plugin-json@6.1.0': - resolution: {integrity: sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true + '@rolldown/binding-freebsd-x64@0.12.2': + resolution: {integrity: sha512-4fjuQHpm3q/Ly4fcqb8Qn49OQc2EQR2scUbQaOzXr7mIn9Zy8NfdRrsVG4/wpYvihIlTEtVx+ku0IZwcUzzZGg==} + cpu: [x64] + os: [freebsd] - '@rollup/plugin-node-resolve@15.2.3': - resolution: {integrity: sha512-j/lym8nf5E21LwBT4Df1VD6hRO2L2iwUeUmP7litikRsVp1H6NWx20NEp0Y7su+7XGc476GnXXc4kFeZNGmaSQ==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^2.78.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true + '@rolldown/binding-linux-arm-gnueabihf@0.12.2': + resolution: {integrity: sha512-MGEDaYLzTQ1kpvt13PzOwnd6O668S1mPM/vgi4O9vCfqJNTXZX8SeAg8Z2dQZbMSUyFDBVKGkz23GRTHqkGIsQ==} + cpu: [arm] + os: [linux] + + '@rolldown/binding-linux-arm64-gnu@0.12.2': + resolution: {integrity: sha512-8uiaMe39twyIAw0do1Gc3O2SpQmyL1A/BucFncEB8eU5jtb3BWIM/X+F+eKDU6c+XZ+S1T025dhR1cGg8y20Xw==} + cpu: [arm64] + os: [linux] + + '@rolldown/binding-linux-arm64-musl@0.12.2': + resolution: {integrity: sha512-GOFSKaMJueaSSODcqI+0Hu79buHYtGV7h2tydIDkSDD20mQuvwOF7jIVd27yNdlXWS9wLObwEu3BNgHmIj1M6A==} + cpu: [arm64] + os: [linux] + + '@rolldown/binding-linux-x64-gnu@0.12.2': + resolution: {integrity: sha512-+hlRURUSiVP0+PFtjoTxUsiy/2NQpbf3DyUyMyl8Nv5+1BxjB6452VY1iFI+RzG4iLNJslcVcI6d6lJQ5zZYfw==} + cpu: [x64] + os: [linux] + + '@rolldown/binding-linux-x64-musl@0.12.2': + resolution: {integrity: sha512-9WKIaQSZZ0i9F5msW4I5kEj6ov+TZLteuTqCzI7nYWDBDm7m/hYkOkdIBf41GC8iKFsgVIQO0kRVAT966U8RxQ==} + cpu: [x64] + os: [linux] + + '@rolldown/binding-wasm32-wasi@0.12.2': + resolution: {integrity: sha512-KY7bNrR3Jk6O0ne8LAaAnq9yI6xuKwhr/L2d1lBwrraCCyLHk0UEv4g6PfJkyUx6GfN0gVYuSxFgo9OggycldA==} + engines: {node: '>=14.21.3'} + cpu: [wasm32] + + '@rolldown/binding-win32-arm64-msvc@0.12.2': + resolution: {integrity: sha512-XYBXifPk5iNcPUTyV/yB4tlj5nI+fYoe/8CLHjyUG8GS0l8rCD+jKaAv3Jvz2T2erlkjEPqJXmzhUfBscOUo6g==} + cpu: [arm64] + os: [win32] + + '@rolldown/binding-win32-ia32-msvc@0.12.2': + resolution: {integrity: sha512-SV9LqvEc0d4gCLbkezH+UJ2uj2pTw3mwSKhFJEm6ir1lb05W6y9++m67NRs17fhudkFAz8iKlyPxKtZBKzAKOw==} + cpu: [ia32] + os: [win32] + + '@rolldown/binding-win32-x64-msvc@0.12.2': + resolution: {integrity: sha512-XnRqHx182tyk1M12OMXqLajIj9DZrOUEKSPYrQUSaMCmHHAhULYP6ki240CV16PBWZW4Q1pwQ7YVKYFevRtvKg==} + cpu: [x64] + os: [win32] '@rollup/pluginutils@5.1.0': resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} @@ -687,6 +705,9 @@ packages: resolution: {integrity: sha512-qhUGGDHcpbY2zpjW3SwqchuW8J/5EzlPFud7xNntHKA7f3a/mx5+g+ruJKFHSAiVZYo30PALt+AyhmPUNKH/Og==} engines: {node: ^14.13.1 || ^16.0.0 || >=18} + '@tybys/wasm-util@0.9.0': + resolution: {integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==} + '@types/eslint@9.6.0': resolution: {integrity: sha512-gi6WQJ7cHRgZxtkQEoyHMppPjq9Kxo5Tjn2prSKDSmZrCz8TZ3jSRCeTJm+WoM+oB0WG37bRqLzaaU3q7JypGg==} @@ -705,9 +726,6 @@ packages: '@types/node@22.4.1': resolution: {integrity: sha512-1tbpb9325+gPnKK0dMm+/LMriX0vKxf6RnB0SZUqfyVkQ4fMgUSySqhxE/y8Jvs4NyF1yHzTfG9KlnkIODxPKg==} - '@types/resolve@1.20.2': - resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} - '@types/semver@7.5.8': resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} @@ -855,10 +873,6 @@ packages: resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==} engines: {node: '>=4'} - astring@1.8.6: - resolution: {integrity: sha512-ISvCdHdlTDlH5IpxQJIex7BWBywFWgjJSVdwst+/iQCoEYnyOaQ95+X1JGshuBjGp6nxKUy1jMgE3zPqN7fQdg==} - hasBin: true - axobject-query@4.1.0: resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} engines: {node: '>= 0.4'} @@ -884,10 +898,6 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - builtin-modules@3.3.0: - resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} - engines: {node: '>=6'} - cac@6.7.14: resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} engines: {node: '>=8'} @@ -947,9 +957,6 @@ packages: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} engines: {node: '>= 6'} - commondir@1.0.1: - resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} - concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} @@ -1000,10 +1007,6 @@ packages: deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - deepmerge@4.3.1: - resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} - engines: {node: '>=0.10.0'} - dequal@2.0.3: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} @@ -1054,9 +1057,6 @@ packages: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} - es-module-lexer@1.5.4: - resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} - esbuild@0.21.5: resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} engines: {node: '>=12'} @@ -1235,9 +1235,6 @@ packages: engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] - function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - get-func-name@2.0.2: resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} @@ -1296,10 +1293,6 @@ packages: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} - engines: {node: '>= 0.4'} - htmlparser2@9.1.0: resolution: {integrity: sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==} @@ -1330,14 +1323,6 @@ packages: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} - is-builtin-module@3.2.1: - resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} - engines: {node: '>=6'} - - is-core-module@2.15.0: - resolution: {integrity: sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==} - engines: {node: '>= 0.4'} - is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} @@ -1350,9 +1335,6 @@ packages: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} - is-module@1.0.0: - resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} - is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} @@ -1361,9 +1343,6 @@ packages: resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} engines: {node: '>=8'} - is-reference@1.2.1: - resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} - is-reference@3.0.2: resolution: {integrity: sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==} @@ -1456,9 +1435,6 @@ packages: lru-cache@4.1.5: resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} - magic-string@0.25.9: - resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} - magic-string@0.30.11: resolution: {integrity: sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==} @@ -1598,9 +1574,6 @@ packages: resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} engines: {node: '>=12'} - path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - path-scurry@1.11.1: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} @@ -1730,25 +1703,13 @@ packages: resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - resolve@1.22.8: - resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} - hasBin: true - reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - rollup-plugin-esbuild@6.1.1: - resolution: {integrity: sha512-CehMY9FAqJD5OUaE/Mi1r5z0kNeYxItmRO2zG4Qnv2qWKF09J2lTy5GUzjJR354ZPrLkCj4fiBN41lo8PzBUhw==} - engines: {node: '>=14.18.0'} - peerDependencies: - esbuild: '>=0.18.0' - rollup: ^1.20.0 || ^2.0.0 || ^3.0.0 || ^4.0.0 - - rollup-plugin-preserve-shebangs@0.2.0: - resolution: {integrity: sha512-OEyTIfZwUJ7yUAVAbegac/bNvp1WJzgZcQNCFprWX42wwwOqlJwrev9lUmzZdYVgCWct+03xUPvZg4RfgkM9oQ==} - peerDependencies: - rollup: '*' + rolldown@0.12.2: + resolution: {integrity: sha512-YJYKiYt2O9XytiQ3Na4Kk29avfIXhvK7udB3wAaVaF4kiSsFKE1167tElO/0eD6tjfJXCvwNxwsyYkBJRtsLmQ==} + hasBin: true rollup@4.21.0: resolution: {integrity: sha512-vo+S/lfA2lMS7rZ2Qoubi6I5hwZwzXeUIctILZLbHI+laNtvhhOIon2S1JksA5UEDQ7l3vberd0fxK44lTYjbQ==} @@ -1810,10 +1771,6 @@ packages: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} - sourcemap-codec@1.4.8: - resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} - deprecated: Please use @jridgewell/sourcemap-codec instead - spawndamnit@2.0.0: resolution: {integrity: sha512-j4JKEcncSjFlqIwU5L/rp2N5SIPsdxaRsIv678+TZxZ0SRDJTm8JrxJMjE/XuiEZNEir3S8l0Fa3Ke339WI4qA==} @@ -1867,10 +1824,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'} - svelte-eslint-parser@0.41.0: resolution: {integrity: sha512-L6f4hOL+AbgfBIB52Z310pg1d2QjRqm7wy3kI1W6hhdhX5bvu7+f0R6w4ykp5HoDdzq+vGhIJmsisaiJDGmVfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -2115,6 +2068,9 @@ packages: zimmerframe@1.1.2: resolution: {integrity: sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==} + zod@3.23.8: + resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} + snapshots: '@ampproject/remapping@2.3.0': @@ -2303,6 +2259,22 @@ snapshots: human-id: 1.0.2 prettier: 2.8.8 + '@emnapi/core@1.2.0': + dependencies: + '@emnapi/wasi-threads': 1.0.1 + tslib: 2.6.3 + optional: true + + '@emnapi/runtime@1.2.0': + dependencies: + tslib: 2.6.3 + optional: true + + '@emnapi/wasi-threads@1.0.1': + dependencies: + tslib: 2.6.3 + optional: true + '@esbuild/aix-ppc64@0.21.5': optional: true @@ -2451,6 +2423,13 @@ snapshots: globby: 11.1.0 read-yaml-file: 1.1.0 + '@napi-rs/wasm-runtime@0.2.4': + dependencies: + '@emnapi/core': 1.2.0 + '@emnapi/runtime': 1.2.0 + '@tybys/wasm-util': 0.9.0 + optional: true + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -2490,43 +2469,43 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true - '@rollup/plugin-commonjs@26.0.1(rollup@4.21.0)': - dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.21.0) - commondir: 1.0.1 - estree-walker: 2.0.2 - glob: 10.4.5 - is-reference: 1.2.1 - magic-string: 0.30.11 - optionalDependencies: - rollup: 4.21.0 + '@rolldown/binding-darwin-arm64@0.12.2': + optional: true - '@rollup/plugin-dynamic-import-vars@2.1.2(rollup@4.21.0)': - dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.21.0) - astring: 1.8.6 - estree-walker: 2.0.2 - fast-glob: 3.3.2 - magic-string: 0.30.11 - optionalDependencies: - rollup: 4.21.0 + '@rolldown/binding-darwin-x64@0.12.2': + optional: true - '@rollup/plugin-json@6.1.0(rollup@4.21.0)': - dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.21.0) - optionalDependencies: - rollup: 4.21.0 + '@rolldown/binding-freebsd-x64@0.12.2': + optional: true + + '@rolldown/binding-linux-arm-gnueabihf@0.12.2': + optional: true + + '@rolldown/binding-linux-arm64-gnu@0.12.2': + optional: true - '@rollup/plugin-node-resolve@15.2.3(rollup@4.21.0)': + '@rolldown/binding-linux-arm64-musl@0.12.2': + optional: true + + '@rolldown/binding-linux-x64-gnu@0.12.2': + optional: true + + '@rolldown/binding-linux-x64-musl@0.12.2': + optional: true + + '@rolldown/binding-wasm32-wasi@0.12.2': dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.21.0) - '@types/resolve': 1.20.2 - deepmerge: 4.3.1 - is-builtin-module: 3.2.1 - is-module: 1.0.0 - resolve: 1.22.8 - optionalDependencies: - rollup: 4.21.0 + '@napi-rs/wasm-runtime': 0.2.4 + optional: true + + '@rolldown/binding-win32-arm64-msvc@0.12.2': + optional: true + + '@rolldown/binding-win32-ia32-msvc@0.12.2': + optional: true + + '@rolldown/binding-win32-x64-msvc@0.12.2': + optional: true '@rollup/pluginutils@5.1.0(rollup@4.21.0)': dependencies: @@ -2610,6 +2589,11 @@ snapshots: transitivePeerDependencies: - encoding + '@tybys/wasm-util@0.9.0': + dependencies: + tslib: 2.6.3 + optional: true + '@types/eslint@9.6.0': dependencies: '@types/estree': 1.0.5 @@ -2627,8 +2611,6 @@ snapshots: dependencies: undici-types: 6.19.8 - '@types/resolve@1.20.2': {} - '@types/semver@7.5.8': {} '@typescript-eslint/eslint-plugin@8.2.0(@typescript-eslint/parser@8.2.0(eslint@9.9.0)(typescript@5.5.4))(eslint@9.9.0)(typescript@5.5.4)': @@ -2803,8 +2785,6 @@ snapshots: dependencies: tslib: 2.6.3 - astring@1.8.6: {} - axobject-query@4.1.0: {} balanced-match@1.0.2: {} @@ -2828,8 +2808,6 @@ snapshots: dependencies: fill-range: 7.1.1 - builtin-modules@3.3.0: {} - cac@6.7.14: {} callsites@3.1.0: {} @@ -2895,8 +2873,6 @@ snapshots: commander@4.1.1: {} - commondir@1.0.1: {} - concat-map@0.0.1: {} cross-spawn@5.1.0: @@ -2932,8 +2908,6 @@ snapshots: deep-is@0.1.4: {} - deepmerge@4.3.1: {} - dequal@2.0.3: {} detect-indent@6.1.0: {} @@ -2980,8 +2954,6 @@ snapshots: entities@4.5.0: {} - es-module-lexer@1.5.4: {} - esbuild@0.21.5: optionalDependencies: '@esbuild/aix-ppc64': 0.21.5 @@ -3232,8 +3204,6 @@ snapshots: fsevents@2.3.3: optional: true - function-bind@1.1.2: {} - get-func-name@2.0.2: {} get-stream@8.0.1: {} @@ -3286,10 +3256,6 @@ snapshots: has-flag@4.0.0: {} - hasown@2.0.2: - dependencies: - function-bind: 1.1.2 - htmlparser2@9.1.0: dependencies: domelementtype: 2.3.0 @@ -3318,14 +3284,6 @@ snapshots: dependencies: binary-extensions: 2.3.0 - is-builtin-module@3.2.1: - dependencies: - builtin-modules: 3.3.0 - - is-core-module@2.15.0: - dependencies: - hasown: 2.0.2 - is-extglob@2.1.1: {} is-fullwidth-code-point@3.0.0: {} @@ -3334,16 +3292,10 @@ snapshots: dependencies: is-extglob: 2.1.1 - is-module@1.0.0: {} - is-number@7.0.0: {} is-path-inside@3.0.3: {} - is-reference@1.2.1: - dependencies: - '@types/estree': 1.0.5 - is-reference@3.0.2: dependencies: '@types/estree': 1.0.5 @@ -3432,10 +3384,6 @@ snapshots: pseudomap: 1.0.2 yallist: 2.1.2 - magic-string@0.25.9: - dependencies: - sourcemap-codec: 1.4.8 - magic-string@0.30.11: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 @@ -3555,8 +3503,6 @@ snapshots: path-key@4.0.0: {} - path-parse@1.0.7: {} - path-scurry@1.11.1: dependencies: lru-cache: 10.4.3 @@ -3663,29 +3609,24 @@ snapshots: resolve-pkg-maps@1.0.0: {} - resolve@1.22.8: - dependencies: - is-core-module: 2.15.0 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - reusify@1.0.4: {} - rollup-plugin-esbuild@6.1.1(esbuild@0.21.5)(rollup@4.21.0): - dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.21.0) - debug: 4.3.6 - es-module-lexer: 1.5.4 - esbuild: 0.21.5 - get-tsconfig: 4.7.6 - rollup: 4.21.0 - transitivePeerDependencies: - - supports-color - - rollup-plugin-preserve-shebangs@0.2.0(rollup@4.21.0): + rolldown@0.12.2: dependencies: - magic-string: 0.25.9 - rollup: 4.21.0 + zod: 3.23.8 + optionalDependencies: + '@rolldown/binding-darwin-arm64': 0.12.2 + '@rolldown/binding-darwin-x64': 0.12.2 + '@rolldown/binding-freebsd-x64': 0.12.2 + '@rolldown/binding-linux-arm-gnueabihf': 0.12.2 + '@rolldown/binding-linux-arm64-gnu': 0.12.2 + '@rolldown/binding-linux-arm64-musl': 0.12.2 + '@rolldown/binding-linux-x64-gnu': 0.12.2 + '@rolldown/binding-linux-x64-musl': 0.12.2 + '@rolldown/binding-wasm32-wasi': 0.12.2 + '@rolldown/binding-win32-arm64-msvc': 0.12.2 + '@rolldown/binding-win32-ia32-msvc': 0.12.2 + '@rolldown/binding-win32-x64-msvc': 0.12.2 rollup@4.21.0: dependencies: @@ -3745,8 +3686,6 @@ snapshots: source-map@0.6.1: {} - sourcemap-codec@1.4.8: {} - spawndamnit@2.0.0: dependencies: cross-spawn: 5.1.0 @@ -3802,8 +3741,6 @@ snapshots: dependencies: has-flag: 4.0.0 - supports-preserve-symlinks-flag@1.0.0: {} - svelte-eslint-parser@0.41.0(svelte@4.2.18): dependencies: eslint-scope: 7.2.2 @@ -4034,3 +3971,5 @@ snapshots: yocto-queue@0.1.0: {} zimmerframe@1.1.2: {} + + zod@3.23.8: {} diff --git a/rollup.config.js b/rolldown.config.js similarity index 53% rename from rollup.config.js rename to rolldown.config.js index bc3ac1cef..5c43d88c4 100644 --- a/rollup.config.js +++ b/rolldown.config.js @@ -1,21 +1,16 @@ import fs from 'node:fs'; import path from 'node:path'; -import { nodeResolve } from '@rollup/plugin-node-resolve'; -import commonjs from '@rollup/plugin-commonjs'; -import json from '@rollup/plugin-json'; -import dynamicImportVars from '@rollup/plugin-dynamic-import-vars'; -import { preserveShebangs } from 'rollup-plugin-preserve-shebangs'; -import dts from 'unplugin-isolated-decl/rollup'; -import esbuild from 'rollup-plugin-esbuild'; +import dts from 'unplugin-isolated-decl/rolldown'; import { execSync } from 'node:child_process'; +import { isBuiltin } from 'node:module'; /** @import { Package } from "./packages/core/utils/common.js" */ -/** @import { Plugin, RollupOptions } from "rollup" */ +/** @import { Plugin, RolldownOptions } from "rolldown" */ /** @typedef {Package & { peerDependencies: Record }} PackageJson */ /** * @param {string} project - * @returns {RollupOptions} + * @returns {RolldownOptions} */ function getConfig(project) { const inputs = [`./packages/${project}/index.ts`]; @@ -24,50 +19,66 @@ function getConfig(project) { if (project === 'core') inputs.push(`./packages/${project}/internal.ts`); const projectRoot = path.resolve(path.join(outDir, '..')); - fs.rmSync(outDir, { force: true, recursive: true }); + // fs.rmSync(outDir, { force: true, recursive: true }); /** @type {PackageJson} */ const pkg = JSON.parse(fs.readFileSync(path.join(projectRoot, 'package.json'), 'utf8')); const externalDeps = getExternalDeps(pkg); - // always externalizes `@svelte-cli/core` and any deps that are `dependencies` or `peerDependencies` - const external = [/@svelte-cli\/core\w*/g, ...externalDeps]; + const external = [ + // As of now, Rolldown doesn't transform cjs `require` calls into esm imports, so we need to + // manually externalize packages that use cjs. + /^commander\w*/g, + /^picocolors\w*/g, + /^postcss\w*/g, + /^recast\w*/g, + // TODO: investigate why Rolldown is transforming dedent into malformed code + /^dedent\w*/g, + /^@svelte-cli\/core\w*/g + ]; + + /** @type {Plugin[]} */ + const plugins = [ + { + name: 'resolve-node-modules', + resolveId(id) { + const shouldExternal = externalDeps.has(id) || isBuiltin(id); + if (shouldExternal) { + return { id, external: true }; + } + } + } + ]; + + if ('exports' in pkg) plugins.push(dts()); - /** @type {Plugin | undefined} */ - let buildCliTemplatesPlugin; if (project === 'create') { - // This custom rollup plugin is used to build the templates - // and place them inside the dist folder after every rollup build. - // This is necessary because rollup clears the output directory and + // This custom rolldown plugin is used to build the templates + // and place them inside the dist folder after every rolldown build. + // This is necessary because rolldown clears the output directory and // thus also removes the template files - buildCliTemplatesPlugin = { + plugins.push({ name: 'build-cli-templates', - writeBundle() { + buildEnd() { console.log('building templates'); execSync('node scripts/build-templates.js', { cwd: path.resolve('packages', 'create') }); console.log('finished building templates'); } - }; + }); } return { input: inputs, + platform: 'node', output: { dir: outDir, + sourcemap: true, format: 'esm', - sourcemap: true + // adds the shebang to the top of the bundle + banner: project === 'cli' ? '#!/usr/bin/env node' : undefined }, external, - plugins: [ - preserveShebangs(), - 'exports' in pkg && dts(), - esbuild({ tsconfig: 'tsconfig.json', sourceRoot: projectRoot }), - nodeResolve({ preferBuiltins: true, rootDir: projectRoot }), - commonjs(), - json(), - dynamicImportVars(), - buildCliTemplatesPlugin - ] + plugins }; } From 3ef43a8ddbe4629e93a369fdd51843b83656a1e1 Mon Sep 17 00:00:00 2001 From: AdrianGonz97 <31664583+AdrianGonz97@users.noreply.github.com> Date: Thu, 22 Aug 2024 13:29:19 -0400 Subject: [PATCH 4/8] use default import instead of namespace for picocolors --- packages/clack-core/src/prompts/password.ts | 6 +- packages/clack-core/src/prompts/text.ts | 6 +- packages/clack-prompts/index.ts | 260 +++++++++----------- packages/core/adder/execute.ts | 2 +- packages/core/adder/postconditions.ts | 2 +- packages/core/adder/preconditions.ts | 2 +- packages/core/index.ts | 2 +- 7 files changed, 133 insertions(+), 147 deletions(-) diff --git a/packages/clack-core/src/prompts/password.ts b/packages/clack-core/src/prompts/password.ts index f515ae4e5..3e071dad3 100644 --- a/packages/clack-core/src/prompts/password.ts +++ b/packages/clack-core/src/prompts/password.ts @@ -1,4 +1,4 @@ -import color from 'picocolors'; +import pc from 'picocolors'; import Prompt, { type PromptOptions } from './prompt'; interface PasswordOptions extends PromptOptions { @@ -22,11 +22,11 @@ export default class PasswordPrompt extends Prompt { }); this.on('value', () => { if (this.cursor >= this.value.length) { - this.valueWithCursor = `${this.masked}${color.inverse(color.hidden('_'))}`; + this.valueWithCursor = `${this.masked}${pc.inverse(pc.hidden('_'))}`; } else { const s1 = this.masked.slice(0, this.cursor); const s2 = this.masked.slice(this.cursor); - this.valueWithCursor = `${s1}${color.inverse(s2[0])}${s2.slice(1)}`; + this.valueWithCursor = `${s1}${pc.inverse(s2[0])}${s2.slice(1)}`; } }); } diff --git a/packages/clack-core/src/prompts/text.ts b/packages/clack-core/src/prompts/text.ts index 912e8adb0..1691b19b2 100644 --- a/packages/clack-core/src/prompts/text.ts +++ b/packages/clack-core/src/prompts/text.ts @@ -1,4 +1,4 @@ -import color from 'picocolors'; +import pc from 'picocolors'; import Prompt, { type PromptOptions } from './prompt'; export interface TextOptions extends PromptOptions { @@ -22,11 +22,11 @@ export default class TextPrompt extends Prompt { }); this.on('value', () => { if (this.cursor >= this.value.length) { - this.valueWithCursor = `${this.value}${color.inverse(color.hidden('_'))}`; + this.valueWithCursor = `${this.value}${pc.inverse(pc.hidden('_'))}`; } else { const s1 = this.value.slice(0, this.cursor); const s2 = this.value.slice(this.cursor); - this.valueWithCursor = `${s1}${color.inverse(s2[0])}${s2.slice(1)}`; + this.valueWithCursor = `${s1}${pc.inverse(s2[0])}${s2.slice(1)}`; } }); } diff --git a/packages/clack-prompts/index.ts b/packages/clack-prompts/index.ts index aff93a048..56e5bf390 100644 --- a/packages/clack-prompts/index.ts +++ b/packages/clack-prompts/index.ts @@ -11,7 +11,7 @@ import { TextPrompt } from '@svelte-cli/clack-core'; import isUnicodeSupported from 'is-unicode-supported'; -import * as color from 'picocolors'; +import pc from 'picocolors'; import { cursor, erase } from 'sisteransi'; export { isCancel } from '@svelte-cli/clack-core'; @@ -48,13 +48,13 @@ const symbol = (state: State) => { switch (state) { case 'initial': case 'active': - return color.cyan(S_STEP_ACTIVE); + return pc.cyan(S_STEP_ACTIVE); case 'cancel': - return color.red(S_STEP_CANCEL); + return pc.red(S_STEP_CANCEL); case 'error': - return color.yellow(S_STEP_ERROR); + return pc.yellow(S_STEP_ERROR); case 'submit': - return color.green(S_STEP_SUBMIT); + return pc.green(S_STEP_SUBMIT); } }; @@ -90,7 +90,7 @@ const limitOptions = (params: LimitOptionsParams): string[] => const isTopLimit = i === 0 && shouldRenderTopEllipsis; const isBottomLimit = i === arr.length - 1 && shouldRenderBottomEllipsis; return isTopLimit || isBottomLimit - ? color.dim('...') + ? pc.dim('...') : style(option, i + slidingWindowLocation === cursor); }); }; @@ -109,25 +109,25 @@ export const text = (opts: TextOptions): Promise => { defaultValue: opts.defaultValue, initialValue: opts.initialValue, render() { - const title = `${color.gray(S_BAR)}\n${symbol(this.state)} ${opts.message}\n`; + const title = `${pc.gray(S_BAR)}\n${symbol(this.state)} ${opts.message}\n`; const placeholder = opts.placeholder - ? color.inverse(opts.placeholder[0]) + color.dim(opts.placeholder.slice(1)) - : color.inverse(color.hidden('_')); + ? pc.inverse(opts.placeholder[0]) + pc.dim(opts.placeholder.slice(1)) + : pc.inverse(pc.hidden('_')); const value = !this.value ? placeholder : this.valueWithCursor; switch (this.state) { case 'error': - return `${title.trim()}\n${color.yellow(S_BAR)} ${value}\n${color.yellow( + return `${title.trim()}\n${pc.yellow(S_BAR)} ${value}\n${pc.yellow( S_BAR_END - )} ${color.yellow(this.error)}\n`; + )} ${pc.yellow(this.error)}\n`; case 'submit': - return `${title}${color.gray(S_BAR)} ${color.dim(this.value || opts.placeholder)}`; + return `${title}${pc.gray(S_BAR)} ${pc.dim(this.value || opts.placeholder)}`; case 'cancel': - return `${title}${color.gray(S_BAR)} ${color.strikethrough( - color.dim(this.value ?? '') - )}${this.value?.trim() ? '\n' + color.gray(S_BAR) : ''}`; + return `${title}${pc.gray(S_BAR)} ${pc.strikethrough( + pc.dim(this.value ?? '') + )}${this.value?.trim() ? '\n' + pc.gray(S_BAR) : ''}`; default: - return `${title}${color.cyan(S_BAR)} ${value}\n${color.cyan(S_BAR_END)}\n`; + return `${title}${pc.cyan(S_BAR)} ${value}\n${pc.cyan(S_BAR_END)}\n`; } } }).prompt(); @@ -143,23 +143,23 @@ export const password = (opts: PasswordOptions): Promise => { validate: opts.validate, mask: opts.mask ?? S_PASSWORD_MASK, render() { - const title = `${color.gray(S_BAR)}\n${symbol(this.state)} ${opts.message}\n`; + const title = `${pc.gray(S_BAR)}\n${symbol(this.state)} ${opts.message}\n`; const value = this.valueWithCursor; const masked = this.masked; switch (this.state) { case 'error': - return `${title.trim()}\n${color.yellow(S_BAR)} ${masked}\n${color.yellow( + return `${title.trim()}\n${pc.yellow(S_BAR)} ${masked}\n${pc.yellow( S_BAR_END - )} ${color.yellow(this.error)}\n`; + )} ${pc.yellow(this.error)}\n`; case 'submit': - return `${title}${color.gray(S_BAR)} ${color.dim(masked)}`; + return `${title}${pc.gray(S_BAR)} ${pc.dim(masked)}`; case 'cancel': - return `${title}${color.gray(S_BAR)} ${color.strikethrough(color.dim(masked ?? ''))}${ - masked ? '\n' + color.gray(S_BAR) : '' + return `${title}${pc.gray(S_BAR)} ${pc.strikethrough(pc.dim(masked ?? ''))}${ + masked ? '\n' + pc.gray(S_BAR) : '' }`; default: - return `${title}${color.cyan(S_BAR)} ${value}\n${color.cyan(S_BAR_END)}\n`; + return `${title}${pc.cyan(S_BAR)} ${value}\n${pc.cyan(S_BAR_END)}\n`; } } }).prompt(); @@ -179,26 +179,24 @@ export const confirm = (opts: ConfirmOptions) => { inactive, initialValue: opts.initialValue ?? true, render() { - const title = `${color.gray(S_BAR)}\n${symbol(this.state)} ${opts.message}\n`; + const title = `${pc.gray(S_BAR)}\n${symbol(this.state)} ${opts.message}\n`; const value = this.value ? active : inactive; switch (this.state) { case 'submit': - return `${title}${color.gray(S_BAR)} ${color.dim(value)}`; + return `${title}${pc.gray(S_BAR)} ${pc.dim(value)}`; case 'cancel': - return `${title}${color.gray(S_BAR)} ${color.strikethrough( - color.dim(value) - )}\n${color.gray(S_BAR)}`; + return `${title}${pc.gray(S_BAR)} ${pc.strikethrough(pc.dim(value))}\n${pc.gray(S_BAR)}`; default: { - return `${title}${color.cyan(S_BAR)} ${ + return `${title}${pc.cyan(S_BAR)} ${ this.value - ? `${color.green(S_RADIO_ACTIVE)} ${active}` - : `${color.dim(S_RADIO_INACTIVE)} ${color.dim(active)}` - } ${color.dim('/')} ${ + ? `${pc.green(S_RADIO_ACTIVE)} ${active}` + : `${pc.dim(S_RADIO_INACTIVE)} ${pc.dim(active)}` + } ${pc.dim('/')} ${ !this.value - ? `${color.green(S_RADIO_ACTIVE)} ${inactive}` - : `${color.dim(S_RADIO_INACTIVE)} ${color.dim(inactive)}` - }\n${color.cyan(S_BAR_END)}\n`; + ? `${pc.green(S_RADIO_ACTIVE)} ${inactive}` + : `${pc.dim(S_RADIO_INACTIVE)} ${pc.dim(inactive)}` + }\n${pc.cyan(S_BAR_END)}\n`; } } } @@ -223,15 +221,15 @@ export const select = (opts: SelectOptions) => { const label = option.label ?? String(option.value); switch (state) { case 'selected': - return color.dim(label); + return pc.dim(label); case 'active': - return `${color.green(S_RADIO_ACTIVE)} ${label} ${ - option.hint ? color.dim(`(${option.hint})`) : '' + return `${pc.green(S_RADIO_ACTIVE)} ${label} ${ + option.hint ? pc.dim(`(${option.hint})`) : '' }`; case 'cancelled': - return color.strikethrough(color.dim(label)); + return pc.strikethrough(pc.dim(label)); default: - return `${color.dim(S_RADIO_INACTIVE)} ${color.dim(label)}`; + return `${pc.dim(S_RADIO_INACTIVE)} ${pc.dim(label)}`; } }; @@ -239,23 +237,23 @@ export const select = (opts: SelectOptions) => { options: opts.options, initialValue: opts.initialValue, render() { - const title = `${color.gray(S_BAR)}\n${symbol(this.state)} ${opts.message}\n`; + const title = `${pc.gray(S_BAR)}\n${symbol(this.state)} ${opts.message}\n`; switch (this.state) { case 'submit': - return `${title}${color.gray(S_BAR)} ${opt(this.options[this.cursor], 'selected')}`; + return `${title}${pc.gray(S_BAR)} ${opt(this.options[this.cursor], 'selected')}`; case 'cancel': - return `${title}${color.gray(S_BAR)} ${opt( + return `${title}${pc.gray(S_BAR)} ${opt( this.options[this.cursor], 'cancelled' - )}\n${color.gray(S_BAR)}`; + )}\n${pc.gray(S_BAR)}`; default: { - return `${title}${color.cyan(S_BAR)} ${limitOptions({ + return `${title}${pc.cyan(S_BAR)} ${limitOptions({ cursor: this.cursor, options: this.options, maxItems: opts.maxItems, style: (item, active) => opt(item, active ? 'active' : 'inactive') - }).join(`\n${color.cyan(S_BAR)} `)}\n${color.cyan(S_BAR_END)}\n`; + }).join(`\n${pc.cyan(S_BAR)} `)}\n${pc.cyan(S_BAR_END)}\n`; } } } @@ -269,16 +267,16 @@ export const selectKey = (opts: SelectOptions) => { ) => { const label = option.label ?? String(option.value); if (state === 'selected') { - return color.dim(label); + return pc.dim(label); } else if (state === 'cancelled') { - return color.strikethrough(color.dim(label)); + return pc.strikethrough(pc.dim(label)); } else if (state === 'active') { - return `${color.bgCyan(color.gray(` ${option.value} `))} ${label} ${ - option.hint ? color.dim(`(${option.hint})`) : '' + return `${pc.bgCyan(pc.gray(` ${option.value} `))} ${label} ${ + option.hint ? pc.dim(`(${option.hint})`) : '' }`; } - return `${color.gray(color.bgWhite(color.inverse(` ${option.value} `)))} ${label} ${ - option.hint ? color.dim(`(${option.hint})`) : '' + return `${pc.gray(pc.bgWhite(pc.inverse(` ${option.value} `)))} ${label} ${ + option.hint ? pc.dim(`(${option.hint})`) : '' }`; }; @@ -286,22 +284,22 @@ export const selectKey = (opts: SelectOptions) => { options: opts.options, initialValue: opts.initialValue, render() { - const title = `${color.gray(S_BAR)}\n${symbol(this.state)} ${opts.message}\n`; + const title = `${pc.gray(S_BAR)}\n${symbol(this.state)} ${opts.message}\n`; switch (this.state) { case 'submit': - return `${title}${color.gray(S_BAR)} ${opt( + return `${title}${pc.gray(S_BAR)} ${opt( this.options.find((opt) => opt.value === this.value)!, 'selected' )}`; case 'cancel': - return `${title}${color.gray(S_BAR)} ${opt(this.options[0], 'cancelled')}\n${color.gray( + return `${title}${pc.gray(S_BAR)} ${opt(this.options[0], 'cancelled')}\n${pc.gray( S_BAR )}`; default: { - return `${title}${color.cyan(S_BAR)} ${this.options + return `${title}${pc.cyan(S_BAR)} ${this.options .map((option, i) => opt(option, i === this.cursor ? 'active' : 'inactive')) - .join(`\n${color.cyan(S_BAR)} `)}\n${color.cyan(S_BAR_END)}\n`; + .join(`\n${pc.cyan(S_BAR)} `)}\n${pc.cyan(S_BAR_END)}\n`; } } } @@ -323,21 +321,21 @@ export const multiselect = (opts: MultiSelectOptions) => { ) => { const label = option.label ?? String(option.value); if (state === 'active') { - return `${color.cyan(S_CHECKBOX_ACTIVE)} ${label} ${ - option.hint ? color.dim(`(${option.hint})`) : '' + return `${pc.cyan(S_CHECKBOX_ACTIVE)} ${label} ${ + option.hint ? pc.dim(`(${option.hint})`) : '' }`; } else if (state === 'selected') { - return `${color.green(S_CHECKBOX_SELECTED)} ${color.dim(label)}`; + return `${pc.green(S_CHECKBOX_SELECTED)} ${pc.dim(label)}`; } else if (state === 'cancelled') { - return color.strikethrough(color.dim(label)); + return pc.strikethrough(pc.dim(label)); } else if (state === 'active-selected') { - return `${color.green(S_CHECKBOX_SELECTED)} ${label} ${ - option.hint ? color.dim(`(${option.hint})`) : '' + return `${pc.green(S_CHECKBOX_SELECTED)} ${label} ${ + option.hint ? pc.dim(`(${option.hint})`) : '' }`; } else if (state === 'submitted') { - return color.dim(label); + return pc.dim(label); } - return `${color.dim(S_CHECKBOX_INACTIVE)} ${color.dim(label)}`; + return `${pc.dim(S_CHECKBOX_INACTIVE)} ${pc.dim(label)}`; }; return new MultiSelectPrompt({ @@ -347,16 +345,16 @@ export const multiselect = (opts: MultiSelectOptions) => { cursorAt: opts.cursorAt, validate(selected: Value[]) { if (this.required && selected.length === 0) - return `Please select at least one option.\n${color.reset( - color.dim( - `Press ${color.gray(color.bgWhite(color.inverse(' space ')))} to select, ${color.gray( - color.bgWhite(color.inverse(' enter ')) + return `Please select at least one option.\n${pc.reset( + pc.dim( + `Press ${pc.gray(pc.bgWhite(pc.inverse(' space ')))} to select, ${pc.gray( + pc.bgWhite(pc.inverse(' enter ')) )} to submit` ) )}`; }, render() { - const title = `${color.gray(S_BAR)}\n${symbol(this.state)} ${opts.message}\n`; + const title = `${pc.gray(S_BAR)}\n${symbol(this.state)} ${opts.message}\n`; const styleOption = (option: Option, active: boolean) => { const selected = this.value.includes(option.value); @@ -371,51 +369,47 @@ export const multiselect = (opts: MultiSelectOptions) => { switch (this.state) { case 'submit': { - return `${title}${color.gray(S_BAR)} ${ + return `${title}${pc.gray(S_BAR)} ${ this.options .filter(({ value }) => this.value.includes(value)) .map((option) => opt(option, 'submitted')) - .join(color.dim(', ')) || color.dim('none') + .join(pc.dim(', ')) || pc.dim('none') }`; } case 'cancel': { const label = this.options .filter(({ value }) => this.value.includes(value)) .map((option) => opt(option, 'cancelled')) - .join(color.dim(', ')); - return `${title}${color.gray(S_BAR)} ${ - label.trim() ? `${label}\n${color.gray(S_BAR)}` : '' - }`; + .join(pc.dim(', ')); + return `${title}${pc.gray(S_BAR)} ${label.trim() ? `${label}\n${pc.gray(S_BAR)}` : ''}`; } case 'error': { const footer = this.error .split('\n') - .map((ln, i) => - i === 0 ? `${color.yellow(S_BAR_END)} ${color.yellow(ln)}` : ` ${ln}` - ) + .map((ln, i) => (i === 0 ? `${pc.yellow(S_BAR_END)} ${pc.yellow(ln)}` : ` ${ln}`)) .join('\n'); return ( title + - color.yellow(S_BAR) + + pc.yellow(S_BAR) + ' ' + limitOptions({ options: this.options, cursor: this.cursor, maxItems: opts.maxItems, style: styleOption - }).join(`\n${color.yellow(S_BAR)} `) + + }).join(`\n${pc.yellow(S_BAR)} `) + '\n' + footer + '\n' ); } default: { - return `${title}${color.cyan(S_BAR)} ${limitOptions({ + return `${title}${pc.cyan(S_BAR)} ${limitOptions({ options: this.options, cursor: this.cursor, maxItems: opts.maxItems, style: styleOption - }).join(`\n${color.cyan(S_BAR)} `)}\n${color.cyan(S_BAR_END)}\n`; + }).join(`\n${pc.cyan(S_BAR)} `)}\n${pc.cyan(S_BAR_END)}\n`; } } } @@ -453,32 +447,30 @@ export const groupMultiselect = (opts: GroupMultiSelectOptions) => // @ts-ignore const isLast = isItem && next.group === true; const prefix = isItem ? (selectableGroups ? `${isLast ? S_BAR_END : S_BAR} ` : ' ') : ''; - const spacingPrefix = spacedGroups && !isItem ? `\n${color.cyan(S_BAR)} ` : ''; + const spacingPrefix = spacedGroups && !isItem ? `\n${pc.cyan(S_BAR)} ` : ''; if (state === 'active') { - return `${spacingPrefix}${color.dim(prefix)}${color.cyan(S_CHECKBOX_ACTIVE)} ${label} ${ - option.hint ? color.dim(`(${option.hint})`) : '' + return `${spacingPrefix}${pc.dim(prefix)}${pc.cyan(S_CHECKBOX_ACTIVE)} ${label} ${ + option.hint ? pc.dim(`(${option.hint})`) : '' }`; } else if (state === 'group-active') { - return `${spacingPrefix}${prefix}${color.cyan(S_CHECKBOX_ACTIVE)} ${color.dim(label)}`; + return `${spacingPrefix}${prefix}${pc.cyan(S_CHECKBOX_ACTIVE)} ${pc.dim(label)}`; } else if (state === 'group-active-selected') { - return `${spacingPrefix}${prefix}${color.green(S_CHECKBOX_SELECTED)} ${color.dim(label)}`; + return `${spacingPrefix}${prefix}${pc.green(S_CHECKBOX_SELECTED)} ${pc.dim(label)}`; } else if (state === 'selected') { - return `${spacingPrefix}${color.dim(prefix)}${color.green(S_CHECKBOX_SELECTED)} ${color.dim( - label - )}`; + return `${spacingPrefix}${pc.dim(prefix)}${pc.green(S_CHECKBOX_SELECTED)} ${pc.dim(label)}`; } else if (state === 'cancelled') { - return color.strikethrough(color.dim(label)); + return pc.strikethrough(pc.dim(label)); } else if (state === 'active-selected') { - return `${spacingPrefix}${color.dim(prefix)}${color.green(S_CHECKBOX_SELECTED)} ${label} ${ - option.hint ? color.dim(`(${option.hint})`) : '' + return `${spacingPrefix}${pc.dim(prefix)}${pc.green(S_CHECKBOX_SELECTED)} ${label} ${ + option.hint ? pc.dim(`(${option.hint})`) : '' }`; } else if (state === 'submitted') { - return color.dim(label); + return pc.dim(label); } - return `${spacingPrefix}${color.dim(prefix)}${ - isItem || selectableGroups ? `${color.dim(S_CHECKBOX_INACTIVE)} ` : '' - }${color.dim(label)}`; + return `${spacingPrefix}${pc.dim(prefix)}${ + isItem || selectableGroups ? `${pc.dim(S_CHECKBOX_INACTIVE)} ` : '' + }${pc.dim(label)}`; }; return new GroupMultiSelectPrompt({ @@ -489,41 +481,37 @@ export const groupMultiselect = (opts: GroupMultiSelectOptions) => selectableGroups, validate(selected: Value[]) { if (this.required && selected.length === 0) - return `Please select at least one option.\n${color.reset( - color.dim( - `Press ${color.gray(color.bgWhite(color.inverse(' space ')))} to select, ${color.gray( - color.bgWhite(color.inverse(' enter ')) + return `Please select at least one option.\n${pc.reset( + pc.dim( + `Press ${pc.gray(pc.bgWhite(pc.inverse(' space ')))} to select, ${pc.gray( + pc.bgWhite(pc.inverse(' enter ')) )} to submit` ) )}`; }, render() { - const title = `${color.gray(S_BAR)}\n${symbol(this.state)} ${opts.message}\n`; + const title = `${pc.gray(S_BAR)}\n${symbol(this.state)} ${opts.message}\n`; switch (this.state) { case 'submit': { - return `${title}${color.gray(S_BAR)} ${this.options + return `${title}${pc.gray(S_BAR)} ${this.options .filter(({ value }) => this.value.includes(value)) .map((option) => opt(option, 'submitted')) - .join(color.dim(', '))}`; + .join(pc.dim(', '))}`; } case 'cancel': { const label = this.options .filter(({ value }) => this.value.includes(value)) .map((option) => opt(option, 'cancelled')) - .join(color.dim(', ')); - return `${title}${color.gray(S_BAR)} ${ - label.trim() ? `${label}\n${color.gray(S_BAR)}` : '' - }`; + .join(pc.dim(', ')); + return `${title}${pc.gray(S_BAR)} ${label.trim() ? `${label}\n${pc.gray(S_BAR)}` : ''}`; } case 'error': { const footer = this.error .split('\n') - .map((ln, i) => - i === 0 ? `${color.yellow(S_BAR_END)} ${color.yellow(ln)}` : ` ${ln}` - ) + .map((ln, i) => (i === 0 ? `${pc.yellow(S_BAR_END)} ${pc.yellow(ln)}` : ` ${ln}`)) .join('\n'); - return `${title}${color.yellow(S_BAR)} ${this.options + return `${title}${pc.yellow(S_BAR)} ${this.options .map((option, i, options) => { const selected = this.value.includes(option.value) || @@ -544,10 +532,10 @@ export const groupMultiselect = (opts: GroupMultiSelectOptions) => } return opt(option, active ? 'active' : 'inactive', options); }) - .join(`\n${color.yellow(S_BAR)} `)}\n${footer}\n`; + .join(`\n${pc.yellow(S_BAR)} `)}\n${footer}\n`; } default: { - return `${title}${color.cyan(S_BAR)} ${this.options + return `${title}${pc.cyan(S_BAR)} ${this.options .map((option, i, options) => { const selected = this.value.includes(option.value) || @@ -568,7 +556,7 @@ export const groupMultiselect = (opts: GroupMultiSelectOptions) => } return opt(option, active ? 'active' : 'inactive', options); }) - .join(`\n${color.cyan(S_BAR)} `)}\n${color.cyan(S_BAR_END)}\n`; + .join(`\n${pc.cyan(S_BAR)} `)}\n${pc.cyan(S_BAR_END)}\n`; } } } @@ -590,60 +578,58 @@ export const note = (message = '', title = ''): void => { const msg = lines .map( (ln) => - `${color.gray(S_BAR)} ${color.dim(ln)}${' '.repeat(len - strip(ln).length)}${color.gray( - S_BAR - )}` + `${pc.gray(S_BAR)} ${pc.dim(ln)}${' '.repeat(len - strip(ln).length)}${pc.gray(S_BAR)}` ) .join('\n'); process.stdout.write( - `${color.gray(S_BAR)}\n${color.green(S_STEP_SUBMIT)} ${color.reset(title)} ${color.gray( + `${pc.gray(S_BAR)}\n${pc.green(S_STEP_SUBMIT)} ${pc.reset(title)} ${pc.gray( S_BAR_H.repeat(Math.max(len - titleLen - 1, 1)) + S_CORNER_TOP_RIGHT - )}\n${msg}\n${color.gray(S_CONNECT_LEFT + S_BAR_H.repeat(len + 2) + S_CORNER_BOTTOM_RIGHT)}\n` + )}\n${msg}\n${pc.gray(S_CONNECT_LEFT + S_BAR_H.repeat(len + 2) + S_CORNER_BOTTOM_RIGHT)}\n` ); }; export const cancel = (message = ''): void => { - process.stdout.write(`${color.gray(S_BAR_END)} ${color.red(message)}\n\n`); + process.stdout.write(`${pc.gray(S_BAR_END)} ${pc.red(message)}\n\n`); }; export const intro = (title = ''): void => { - process.stdout.write(`${color.gray(S_BAR_START)} ${title}\n`); + process.stdout.write(`${pc.gray(S_BAR_START)} ${title}\n`); }; export const outro = (message = ''): void => { - process.stdout.write(`${color.gray(S_BAR)}\n${color.gray(S_BAR_END)} ${message}\n\n`); + process.stdout.write(`${pc.gray(S_BAR)}\n${pc.gray(S_BAR_END)} ${message}\n\n`); }; export type LogMessageOptions = { symbol?: string; }; export const log = { - message: (message = '', { symbol = color.gray(S_BAR) }: LogMessageOptions = {}): void => { - const parts = [color.gray(S_BAR)]; + message: (message = '', { symbol = pc.gray(S_BAR) }: LogMessageOptions = {}): void => { + const parts = [pc.gray(S_BAR)]; if (message) { const [firstLine, ...lines] = message.split('\n'); - parts.push(`${symbol} ${firstLine}`, ...lines.map((ln) => `${color.gray(S_BAR)} ${ln}`)); + parts.push(`${symbol} ${firstLine}`, ...lines.map((ln) => `${pc.gray(S_BAR)} ${ln}`)); } process.stdout.write(`${parts.join('\n')}\n`); }, info: (message: string): void => { - log.message(message, { symbol: color.blue(S_INFO) }); + log.message(message, { symbol: pc.blue(S_INFO) }); }, success: (message: string): void => { - log.message(message, { symbol: color.green(S_SUCCESS) }); + log.message(message, { symbol: pc.green(S_SUCCESS) }); }, step: (message: string): void => { - log.message(message, { symbol: color.green(S_STEP_SUBMIT) }); + log.message(message, { symbol: pc.green(S_STEP_SUBMIT) }); }, warn: (message: string): void => { - log.message(message, { symbol: color.yellow(S_WARN) }); + log.message(message, { symbol: pc.yellow(S_WARN) }); }, /** alias for `log.warn()`. */ warning: (message: string): void => { log.warn(message); }, error: (message: string): void => { - log.message(message, { symbol: color.red(S_ERROR) }); + log.message(message, { symbol: pc.red(S_ERROR) }); } }; @@ -695,12 +681,12 @@ export const spinner = (): { isSpinnerActive = true; unblock = block(); _message = msg.replace(/\.+$/, ''); - process.stdout.write(`${color.gray(S_BAR)}\n`); + process.stdout.write(`${pc.gray(S_BAR)}\n`); let frameIndex = 0; let dotsTimer = 0; registerHooks(); loop = setInterval(() => { - const frame = color.magenta(frames[frameIndex]); + const frame = pc.magenta(frames[frameIndex]); const loadingDots = '.'.repeat(Math.floor(dotsTimer)).slice(0, 3); process.stdout.write(cursor.move(-999, 0)); process.stdout.write(erase.down(1)); @@ -716,10 +702,10 @@ export const spinner = (): { clearInterval(loop); const step = code === 0 - ? color.green(S_STEP_SUBMIT) + ? pc.green(S_STEP_SUBMIT) : code === 1 - ? color.red(S_STEP_CANCEL) - : color.red(S_STEP_ERROR); + ? pc.red(S_STEP_CANCEL) + : pc.red(S_STEP_ERROR); process.stdout.write(cursor.move(-999, 0)); process.stdout.write(erase.down(1)); process.stdout.write(`${step} ${_message}\n`); diff --git a/packages/core/adder/execute.ts b/packages/core/adder/execute.ts index 66eabae61..88d37e4e6 100644 --- a/packages/core/adder/execute.ts +++ b/packages/core/adder/execute.ts @@ -1,5 +1,5 @@ import path from 'node:path'; -import * as pc from 'picocolors'; +import pc from 'picocolors'; import { serializeJson } from '@svelte-cli/ast-tooling'; import { commonFilePaths, format, writeFile } from '../files/utils'; import { type ProjectType, createProject, detectSvelteDirectory } from '../utils/create-project'; diff --git a/packages/core/adder/postconditions.ts b/packages/core/adder/postconditions.ts index a0da65115..f00e69e6f 100644 --- a/packages/core/adder/postconditions.ts +++ b/packages/core/adder/postconditions.ts @@ -1,4 +1,4 @@ -import * as pc from 'picocolors'; +import pc from 'picocolors'; import { messagePrompt } from '../utils/prompts'; import { fileExistsWorkspace, readFile } from '../files/utils'; import type { Workspace } from '../utils/workspace'; diff --git a/packages/core/adder/preconditions.ts b/packages/core/adder/preconditions.ts index 050720870..ba0f6dcd8 100644 --- a/packages/core/adder/preconditions.ts +++ b/packages/core/adder/preconditions.ts @@ -1,4 +1,4 @@ -import * as pc from 'picocolors'; +import pc from 'picocolors'; import { booleanPrompt, endPrompts, messagePrompt } from '../utils/prompts'; import { executeCli } from '../utils/cli'; import type { AdderDetails } from './execute'; diff --git a/packages/core/index.ts b/packages/core/index.ts index 0021a8ff1..5a69e8dd5 100644 --- a/packages/core/index.ts +++ b/packages/core/index.ts @@ -7,7 +7,7 @@ import { } from './adder/config'; import { executeCli } from './utils/cli'; import { log } from '@svelte-cli/clack-prompts'; -import * as colors from 'picocolors'; +import colors from 'picocolors'; import dedent from 'dedent'; export { From 47594e3702343b181ca304aaa7f1914992771e4f Mon Sep 17 00:00:00 2001 From: AdrianGonz97 <31664583+AdrianGonz97@users.noreply.github.com> Date: Thu, 22 Aug 2024 13:30:01 -0400 Subject: [PATCH 5/8] remove shebang from src as rolldown will append it for us --- packages/cli/index.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/cli/index.ts b/packages/cli/index.ts index 9b99d74c3..6ec59be4b 100644 --- a/packages/cli/index.ts +++ b/packages/cli/index.ts @@ -1,5 +1,3 @@ -#!/usr/bin/env node - import { remoteControl, executeAdders, prompts } from '@svelte-cli/core/internal'; import pkg from './package.json'; import type { From 69a8b111aa343952fe378f003bea5bfa000f3158 Mon Sep 17 00:00:00 2001 From: AdrianGonz97 <31664583+AdrianGonz97@users.noreply.github.com> Date: Thu, 22 Aug 2024 16:16:39 -0400 Subject: [PATCH 6/8] fix type --- packages/adders/index.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/adders/index.ts b/packages/adders/index.ts index 2ff44d9a4..82849e809 100644 --- a/packages/adders/index.ts +++ b/packages/adders/index.ts @@ -1,5 +1,7 @@ +import type { AdderWithoutExplicitArgs } from '@svelte-cli/core'; + // Rolldown doesn't support dynamic import vars yet. -export async function getAdderDetails(name: string) { +export async function getAdderDetails(name: string): Promise { let adder; switch (name) { case 'drizzle': @@ -33,5 +35,5 @@ export async function getAdderDetails(name: string) { throw new Error(`invalid adder name: ${name}`); } - return adder.default; + return adder.default as AdderWithoutExplicitArgs; } From c452bff217e4104b12c01ea461569f416770839e Mon Sep 17 00:00:00 2001 From: AdrianGonz97 <31664583+AdrianGonz97@users.noreply.github.com> Date: Thu, 22 Aug 2024 16:18:52 -0400 Subject: [PATCH 7/8] tweak --- rolldown.config.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/rolldown.config.js b/rolldown.config.js index 5c43d88c4..7b0549991 100644 --- a/rolldown.config.js +++ b/rolldown.config.js @@ -28,13 +28,13 @@ function getConfig(project) { const external = [ // As of now, Rolldown doesn't transform cjs `require` calls into esm imports, so we need to // manually externalize packages that use cjs. - /^commander\w*/g, - /^picocolors\w*/g, - /^postcss\w*/g, - /^recast\w*/g, + /commander/, + /picocolors/, + /postcss/, + /recast/, // TODO: investigate why Rolldown is transforming dedent into malformed code - /^dedent\w*/g, - /^@svelte-cli\/core\w*/g + /dedent/, + /@svelte-cli\/core/ ]; /** @type {Plugin[]} */ From 94f27b506fc5d638555f34d0a7d9b91542e54d2e Mon Sep 17 00:00:00 2001 From: AdrianGonz97 <31664583+AdrianGonz97@users.noreply.github.com> Date: Fri, 23 Aug 2024 13:17:18 -0400 Subject: [PATCH 8/8] add `require` workaround --- rolldown.config.js | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/rolldown.config.js b/rolldown.config.js index 7b0549991..f86e842cd 100644 --- a/rolldown.config.js +++ b/rolldown.config.js @@ -19,19 +19,13 @@ function getConfig(project) { if (project === 'core') inputs.push(`./packages/${project}/internal.ts`); const projectRoot = path.resolve(path.join(outDir, '..')); - // fs.rmSync(outDir, { force: true, recursive: true }); + fs.rmSync(outDir, { force: true, recursive: true }); /** @type {PackageJson} */ const pkg = JSON.parse(fs.readFileSync(path.join(projectRoot, 'package.json'), 'utf8')); const externalDeps = getExternalDeps(pkg); const external = [ - // As of now, Rolldown doesn't transform cjs `require` calls into esm imports, so we need to - // manually externalize packages that use cjs. - /commander/, - /picocolors/, - /postcss/, - /recast/, // TODO: investigate why Rolldown is transforming dedent into malformed code /dedent/, /@svelte-cli\/core/ @@ -67,6 +61,7 @@ function getConfig(project) { }); } + const shim = ['core', 'ast-tooling']; return { input: inputs, platform: 'node', @@ -75,8 +70,15 @@ function getConfig(project) { sourcemap: true, format: 'esm', // adds the shebang to the top of the bundle - banner: project === 'cli' ? '#!/usr/bin/env node' : undefined + banner: [ + project === 'cli' && '#!/usr/bin/env node', + shim.includes(project) && `import __node_module__ from 'node:module';`, + shim.includes(project) && 'const require = __node_module__.createRequire(import.meta.url);' + ] + .filter(Boolean) + .join('\n') }, + external, plugins };