From d58d3bc79bf7692a87aaf2c979340cb598422e42 Mon Sep 17 00:00:00 2001 From: Manuel <30698007+manuel3108@users.noreply.github.com> Date: Fri, 15 Nov 2024 00:48:29 +0100 Subject: [PATCH] chore: rename `adders` to `addons` (#303) Co-authored-by: AdrianGonz97 <31664583+AdrianGonz97@users.noreply.github.com> --- .changeset/late-fireants-bow.md | 5 + README.md | 2 +- community-adder-template/README.md | 58 ---- community-adders/unocss.ts | 5 - community-adders/unplugin-icons.ts | 5 - .../.gitignore | 0 community-addon-template/README.md | 58 ++++ .../jsconfig.json | 0 .../package.json | 2 +- .../src/index.js | 12 +- .../tests/custom-addon.test.ts | 2 +- .../tests/fixtures/+page.svelte | 2 +- .../tests/fixtures/App.svelte | 2 +- .../tests/setup/global.ts | 0 .../tests/setup/suite.ts | 0 .../vitest.config.js | 1 - community-addons/unocss.ts | 5 + community-addons/unplugin-icons.ts | 5 + eslint.config.js | 2 +- packages/adders/_config/community.ts | 11 - packages/adders/_config/index.ts | 2 - packages/addons/_config/community.ts | 11 + packages/addons/_config/index.ts | 2 + .../{adders => addons}/_config/official.ts | 16 +- .../_tests/_setup/global.ts | 2 +- .../{adders => addons}/_tests/_setup/suite.ts | 2 +- .../_tests/all-addons/test.ts | 6 +- .../_tests/drizzle/docker-compose.yml | 0 .../_tests/drizzle/fixtures.ts | 0 .../{adders => addons}/_tests/drizzle/test.ts | 0 .../{adders => addons}/_tests/eslint/test.ts | 0 .../{adders => addons}/_tests/lucia/test.ts | 0 .../_tests/mdsvex/fixtures.ts | 0 .../{adders => addons}/_tests/mdsvex/test.ts | 0 .../_tests/paraglide/test.ts | 0 .../_tests/playwright/test.ts | 0 .../_tests/prettier/test.ts | 0 .../_tests/storybook/test.ts | 0 .../_tests/tailwindcss/fixtures.ts | 0 .../_tests/tailwindcss/test.ts | 0 .../{adders => addons}/_tests/vitest/test.ts | 0 packages/{adders => addons}/common.ts | 0 packages/{adders => addons}/drizzle/index.ts | 6 +- packages/{adders => addons}/drizzle/logo.svg | 0 packages/{adders => addons}/eslint/index.ts | 4 +- packages/{adders => addons}/eslint/logo.svg | 0 packages/{adders => addons}/index.ts | 0 packages/{adders => addons}/lucia/index.ts | 8 +- packages/{adders => addons}/lucia/logo.webp | Bin packages/{adders => addons}/mdsvex/index.ts | 4 +- packages/{adders => addons}/mdsvex/logo.svg | 0 packages/{adders => addons}/package.json | 2 +- .../{adders => addons}/paraglide/index.ts | 6 +- .../{adders => addons}/paraglide/logo.png | Bin .../{adders => addons}/playwright/index.ts | 6 +- .../{adders => addons}/playwright/logo.svg | 0 packages/{adders => addons}/prettier/index.ts | 4 +- packages/{adders => addons}/prettier/logo.svg | 0 .../{adders => addons}/storybook/index.ts | 4 +- .../{adders => addons}/storybook/logo.svg | 0 .../{adders => addons}/tailwindcss/index.ts | 6 +- .../{adders => addons}/tailwindcss/logo.svg | 0 .../{adders => addons}/vitest-addon/index.ts | 6 +- .../{adders => addons}/vitest-addon/logo.svg | 0 packages/{adders => addons}/vitest.config.ts | 2 +- packages/cli/commands/add/fetch-packages.ts | 20 +- packages/cli/commands/add/index.ts | 254 +++++++++--------- packages/cli/commands/add/preconditions.ts | 12 +- packages/cli/lib/install.ts | 41 ++- packages/cli/package.json | 2 +- packages/core/README.md | 4 +- packages/core/{adder => addon}/config.ts | 28 +- packages/core/{adder => addon}/options.ts | 0 packages/core/{adder => addon}/processors.ts | 0 packages/core/{adder => addon}/workspace.ts | 0 packages/core/index.ts | 10 +- packages/core/package.json | 3 +- pnpm-lock.yaml | 8 +- pnpm-workspace.yaml | 2 +- rollup.config.js | 18 +- vitest.workspace.ts | 2 +- 81 files changed, 334 insertions(+), 346 deletions(-) create mode 100644 .changeset/late-fireants-bow.md delete mode 100644 community-adder-template/README.md delete mode 100644 community-adders/unocss.ts delete mode 100644 community-adders/unplugin-icons.ts rename {community-adder-template => community-addon-template}/.gitignore (100%) create mode 100644 community-addon-template/README.md rename {community-adder-template => community-addon-template}/jsconfig.json (100%) rename {community-adder-template => community-addon-template}/package.json (93%) rename {community-adder-template => community-addon-template}/src/index.js (69%) rename {community-adder-template => community-addon-template}/tests/custom-addon.test.ts (96%) rename {community-adder-template => community-addon-template}/tests/fixtures/+page.svelte (51%) rename {community-adder-template => community-addon-template}/tests/fixtures/App.svelte (53%) rename {community-adder-template => community-addon-template}/tests/setup/global.ts (100%) rename {community-adder-template => community-addon-template}/tests/setup/suite.ts (100%) rename {community-adder-template => community-addon-template}/vitest.config.js (93%) create mode 100644 community-addons/unocss.ts create mode 100644 community-addons/unplugin-icons.ts delete mode 100644 packages/adders/_config/community.ts delete mode 100644 packages/adders/_config/index.ts create mode 100644 packages/addons/_config/community.ts create mode 100644 packages/addons/_config/index.ts rename packages/{adders => addons}/_config/official.ts (62%) rename packages/{adders => addons}/_tests/_setup/global.ts (96%) rename packages/{adders => addons}/_tests/_setup/suite.ts (99%) rename packages/{adders => addons}/_tests/all-addons/test.ts (83%) rename packages/{adders => addons}/_tests/drizzle/docker-compose.yml (100%) rename packages/{adders => addons}/_tests/drizzle/fixtures.ts (100%) rename packages/{adders => addons}/_tests/drizzle/test.ts (100%) rename packages/{adders => addons}/_tests/eslint/test.ts (100%) rename packages/{adders => addons}/_tests/lucia/test.ts (100%) rename packages/{adders => addons}/_tests/mdsvex/fixtures.ts (100%) rename packages/{adders => addons}/_tests/mdsvex/test.ts (100%) rename packages/{adders => addons}/_tests/paraglide/test.ts (100%) rename packages/{adders => addons}/_tests/playwright/test.ts (100%) rename packages/{adders => addons}/_tests/prettier/test.ts (100%) rename packages/{adders => addons}/_tests/storybook/test.ts (100%) rename packages/{adders => addons}/_tests/tailwindcss/fixtures.ts (100%) rename packages/{adders => addons}/_tests/tailwindcss/test.ts (100%) rename packages/{adders => addons}/_tests/vitest/test.ts (100%) rename packages/{adders => addons}/common.ts (100%) rename packages/{adders => addons}/drizzle/index.ts (99%) rename packages/{adders => addons}/drizzle/logo.svg (100%) rename packages/{adders => addons}/eslint/index.ts (98%) rename packages/{adders => addons}/eslint/logo.svg (100%) rename packages/{adders => addons}/index.ts (100%) rename packages/{adders => addons}/lucia/index.ts (99%) rename packages/{adders => addons}/lucia/logo.webp (100%) rename packages/{adders => addons}/mdsvex/index.ts (94%) rename packages/{adders => addons}/mdsvex/logo.svg (100%) rename packages/{adders => addons}/package.json (93%) rename packages/{adders => addons}/paraglide/index.ts (98%) rename packages/{adders => addons}/paraglide/logo.png (100%) rename packages/{adders => addons}/playwright/index.ts (92%) rename packages/{adders => addons}/playwright/logo.svg (100%) rename packages/{adders => addons}/prettier/index.ts (96%) rename packages/{adders => addons}/prettier/logo.svg (100%) rename packages/{adders => addons}/storybook/index.ts (71%) rename packages/{adders => addons}/storybook/logo.svg (100%) rename packages/{adders => addons}/tailwindcss/index.ts (97%) rename packages/{adders => addons}/tailwindcss/logo.svg (100%) rename packages/{adders => addons}/vitest-addon/index.ts (95%) rename packages/{adders => addons}/vitest-addon/logo.svg (100%) rename packages/{adders => addons}/vitest.config.ts (94%) rename packages/core/{adder => addon}/config.ts (72%) rename packages/core/{adder => addon}/options.ts (100%) rename packages/core/{adder => addon}/processors.ts (100%) rename packages/core/{adder => addon}/workspace.ts (100%) diff --git a/.changeset/late-fireants-bow.md b/.changeset/late-fireants-bow.md new file mode 100644 index 00000000..04f3b215 --- /dev/null +++ b/.changeset/late-fireants-bow.md @@ -0,0 +1,5 @@ +--- +'sv': patch +--- + +chore: rename `adder` to `add-on` diff --git a/README.md b/README.md index 09a32e17..da4c2d53 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ Read the [SvelteKit documentation](https://svelte.dev/docs/kit) for more details ## Contributing -Please file an issue for discussion before sending a PR for a new adder. Most new adders will likely be recommended to be implemented as community adders. This repository will only hold a very limited number of adders at the maintainers discretion that address widely held needs, are considered best-in-class, and are widely used in the Svelte community. +Please file an issue for discussion before sending a PR for a new add-on. Most new add-ons will likely be recommended to be implemented as community add-ons. This repository will only hold a very limited number of add-ons at the maintainers discretion that address widely held needs, are considered best-in-class, and are widely used in the Svelte community. ## Supporting Svelte diff --git a/community-adder-template/README.md b/community-adder-template/README.md deleted file mode 100644 index 3f8e9d9d..00000000 --- a/community-adder-template/README.md +++ /dev/null @@ -1,58 +0,0 @@ -# community-adder-template - -> [!IMPORTANT] -> Community adders are currently not supported. Please see [#184](https://github.com/sveltejs/cli/issues/184) for details. - -> [!IMPORTANT] -> This template's dependencies may not be up-to-date; be sure to update them to the latest! -> If you get stuck, check out the [implementations of official adders](https://github.com/sveltejs/cli/tree/main/packages/adders). - -The adder template for community adders for [`sv`](https://github.com/sveltejs/cli). - -## Cloning the template - -Use [`degit`](https://github.com/Rich-Harris/degit) to clone the template: - -```shell -npx degit sveltejs/cli/community-adder-template adder-name -``` - -## Using the adder - -To run the adder, we'll first need a project to apply it to. - -Create the project with the following script: - -```shell -npm run create-temp -``` - -This will create a SvelteKit project in the `temp` directory. - -To execute the adder, run: - -```shell -npm start -``` - -## Sharing your adder - -When you're ready to publish your adder to NPM, run: - -```shell -npm publish -``` - -Your published adder can now be used by anyone! - -To execute the newly published package with `sv`, run: - -```shell -npx sv add --community npm:adder-package-name -``` - -After that, feel free to open a pull request to [`sv`](https://github.com/sveltejs/cli) and add your adder to the [community list](/community-adders/). - -## Things to be aware of - -Community adders are **not permitted** to have any external dependencies outside of `@sveltejs/cli-core`. If the use of a dependency is absolutely necessary, then they can be bundled using a bundler of your choosing (e.g. Rollup, Rolldown, tsup, etc.). diff --git a/community-adders/unocss.ts b/community-adders/unocss.ts deleted file mode 100644 index 03f1d8a2..00000000 --- a/community-adders/unocss.ts +++ /dev/null @@ -1,5 +0,0 @@ -import type { CommunityAdder } from '../packages/adders/_config/community.ts'; - -export default { - id: 'unocss-svelte-add-on' -} satisfies CommunityAdder; diff --git a/community-adders/unplugin-icons.ts b/community-adders/unplugin-icons.ts deleted file mode 100644 index bdeeb6aa..00000000 --- a/community-adders/unplugin-icons.ts +++ /dev/null @@ -1,5 +0,0 @@ -import type { CommunityAdder } from '../packages/adders/_config/community.ts'; - -export default { - id: 'unplugin-icons-svelte-add-on' -} satisfies CommunityAdder; diff --git a/community-adder-template/.gitignore b/community-addon-template/.gitignore similarity index 100% rename from community-adder-template/.gitignore rename to community-addon-template/.gitignore diff --git a/community-addon-template/README.md b/community-addon-template/README.md new file mode 100644 index 00000000..ce60f4d4 --- /dev/null +++ b/community-addon-template/README.md @@ -0,0 +1,58 @@ +# community-addon-template + +> [!IMPORTANT] +> Community add-ons are currently not supported. Please see [#184](https://github.com/sveltejs/cli/issues/184) for details. + +> [!IMPORTANT] +> This template's dependencies may not be up-to-date; be sure to update them to the latest! +> If you get stuck, check out the [implementations of official add-ons](https://github.com/sveltejs/cli/tree/main/packages/add-ons). + +The add-on template for community add-ons for [`sv`](https://github.com/sveltejs/cli). + +## Cloning the template + +Use [`degit`](https://github.com/Rich-Harris/degit) to clone the template: + +```shell +npx degit sveltejs/cli/community-addon-template addon-name +``` + +## Using the add-on + +To run the add-on, we'll first need a project to apply it to. + +Create the project with the following script: + +```shell +npm run create-temp +``` + +This will create a SvelteKit project in the `temp` directory. + +To execute the add-on, run: + +```shell +npm start +``` + +## Sharing your add-on + +When you're ready to publish your add-on to NPM, run: + +```shell +npm publish +``` + +Your published add-on can now be used by anyone! + +To execute the newly published package with `sv`, run: + +```shell +npx sv add --community npm:addon-package-name +``` + +After that, feel free to open a pull request to [`sv`](https://github.com/sveltejs/cli) and add your add-on to the [community list](/community-addons/). + +## Things to be aware of + +Community add-ons are **not permitted** to have any external dependencies outside of `@sveltejs/cli-core`. If the use of a dependency is absolutely necessary, then they can be bundled using a bundler of your choosing (e.g. Rollup, Rolldown, tsup, etc.). diff --git a/community-adder-template/jsconfig.json b/community-addon-template/jsconfig.json similarity index 100% rename from community-adder-template/jsconfig.json rename to community-addon-template/jsconfig.json diff --git a/community-adder-template/package.json b/community-addon-template/package.json similarity index 93% rename from community-adder-template/package.json rename to community-addon-template/package.json index fedd5d42..1f917984 100644 --- a/community-adder-template/package.json +++ b/community-addon-template/package.json @@ -1,5 +1,5 @@ { - "name": "community-adder-template", + "name": "community-addon-template", "private": true, "version": "0.0.0", "type": "module", diff --git a/community-adder-template/src/index.js b/community-addon-template/src/index.js similarity index 69% rename from community-adder-template/src/index.js rename to community-addon-template/src/index.js index 11b34a15..5882006f 100644 --- a/community-adder-template/src/index.js +++ b/community-addon-template/src/index.js @@ -1,8 +1,8 @@ -import { defineAdder, defineAdderOptions } from '@sveltejs/cli-core'; +import { defineAddon, defineAddonOptions } from '@sveltejs/cli-core'; import { imports } from '@sveltejs/cli-core/js'; import { parseSvelte } from '@sveltejs/cli-core/parsers'; -export const options = defineAdderOptions({ +export const options = defineAddonOptions({ demo: { question: 'Do you want to use a demo?', type: 'boolean', @@ -10,16 +10,16 @@ export const options = defineAdderOptions({ } }); -export default defineAdder({ +export default defineAddon({ id: 'community-addon', options, setup: ({ kit, unsupported }) => { if (!kit) unsupported('Requires SvelteKit'); }, run: ({ sv, options, typescript }) => { - sv.file('adder-template-demo.txt', (content) => { + sv.file('addon-template-demo.txt', (content) => { if (options.demo) { - return 'This is a text file made by the Community Adder Template demo!'; + return 'This is a text file made by the Community Addon Template demo!'; } return content; }); @@ -27,7 +27,7 @@ export default defineAdder({ sv.file('src/DemoComponent.svelte', (content) => { if (!options.demo) return content; const { script, generateCode } = parseSvelte(content, { typescript }); - imports.addDefault(script.ast, '../adder-template-demo.txt?raw', 'demo'); + imports.addDefault(script.ast, '../addon-template-demo.txt?raw', 'demo'); return generateCode({ script: script.generateCode(), template: '{demo}' }); }); } diff --git a/community-adder-template/tests/custom-addon.test.ts b/community-addon-template/tests/custom-addon.test.ts similarity index 96% rename from community-adder-template/tests/custom-addon.test.ts rename to community-addon-template/tests/custom-addon.test.ts index 20a970e3..6fa77191 100644 --- a/community-adder-template/tests/custom-addon.test.ts +++ b/community-addon-template/tests/custom-addon.test.ts @@ -24,5 +24,5 @@ test.concurrent.for(variants)('demo - %s', async (variant, { page, ...ctx }) => // expectations const textContent = await page.getByTestId('demo').textContent(); - expect(textContent).toContain('This is a text file made by the Community Adder Template demo!'); + expect(textContent).toContain('This is a text file made by the Community Addon Template demo!'); }); diff --git a/community-adder-template/tests/fixtures/+page.svelte b/community-addon-template/tests/fixtures/+page.svelte similarity index 51% rename from community-adder-template/tests/fixtures/+page.svelte rename to community-addon-template/tests/fixtures/+page.svelte index bd5a70ff..59a30f61 100644 --- a/community-adder-template/tests/fixtures/+page.svelte +++ b/community-addon-template/tests/fixtures/+page.svelte @@ -1,5 +1,5 @@ {demo} diff --git a/community-adder-template/tests/fixtures/App.svelte b/community-addon-template/tests/fixtures/App.svelte similarity index 53% rename from community-adder-template/tests/fixtures/App.svelte rename to community-addon-template/tests/fixtures/App.svelte index 8694a285..13271b83 100644 --- a/community-adder-template/tests/fixtures/App.svelte +++ b/community-addon-template/tests/fixtures/App.svelte @@ -1,5 +1,5 @@ {demo} diff --git a/community-adder-template/tests/setup/global.ts b/community-addon-template/tests/setup/global.ts similarity index 100% rename from community-adder-template/tests/setup/global.ts rename to community-addon-template/tests/setup/global.ts diff --git a/community-adder-template/tests/setup/suite.ts b/community-addon-template/tests/setup/suite.ts similarity index 100% rename from community-adder-template/tests/setup/suite.ts rename to community-addon-template/tests/setup/suite.ts diff --git a/community-adder-template/vitest.config.js b/community-addon-template/vitest.config.js similarity index 93% rename from community-adder-template/vitest.config.js rename to community-addon-template/vitest.config.js index 0dee885f..38dd6d4b 100644 --- a/community-adder-template/vitest.config.js +++ b/community-addon-template/vitest.config.js @@ -8,7 +8,6 @@ export default defineConfig({ exclude: ['tests/setup/*'], testTimeout: ONE_MINUTE * 3, hookTimeout: ONE_MINUTE * 3, - maxConcurrency: 10, globalSetup: ['tests/setup/global.ts'] } }); diff --git a/community-addons/unocss.ts b/community-addons/unocss.ts new file mode 100644 index 00000000..2fcf820c --- /dev/null +++ b/community-addons/unocss.ts @@ -0,0 +1,5 @@ +import type { CommunityAddon } from '../packages/addons/_config/community.ts'; + +export default { + id: 'unocss-svelte-add-on' +} satisfies CommunityAddon; diff --git a/community-addons/unplugin-icons.ts b/community-addons/unplugin-icons.ts new file mode 100644 index 00000000..2593656f --- /dev/null +++ b/community-addons/unplugin-icons.ts @@ -0,0 +1,5 @@ +import type { CommunityAddon } from '../packages/addons/_config/community.ts'; + +export default { + id: 'unplugin-icons-svelte-add-on' +} satisfies CommunityAddon; diff --git a/eslint.config.js b/eslint.config.js index 62799efb..c4a0d0c6 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -32,7 +32,7 @@ export default [ '**/dist/*', 'packages/**/tests/**/{output,input}.ts', 'rollup.config.js', - 'community-adder-template/tests/*' + 'community-addon-template/tests/*' ] } ]; diff --git a/packages/adders/_config/community.ts b/packages/adders/_config/community.ts deleted file mode 100644 index dc0cfd57..00000000 --- a/packages/adders/_config/community.ts +++ /dev/null @@ -1,11 +0,0 @@ -export type CommunityAdder = { - id: string; // the npm package name -}; - -/** EVALUATED AT BUILD TIME */ -export const communityAdderIds: string[] = []; - -export async function getCommunityAdder(name: string): Promise { - const { default: details } = await import(`../../../community-adders/${name}.ts`); - return details; -} diff --git a/packages/adders/_config/index.ts b/packages/adders/_config/index.ts deleted file mode 100644 index 80b647a8..00000000 --- a/packages/adders/_config/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { officialAdders, getAdderDetails } from './official.ts'; -export { getCommunityAdder, communityAdderIds } from './community.ts'; diff --git a/packages/addons/_config/community.ts b/packages/addons/_config/community.ts new file mode 100644 index 00000000..6869de3f --- /dev/null +++ b/packages/addons/_config/community.ts @@ -0,0 +1,11 @@ +export type CommunityAddon = { + id: string; // the npm package name +}; + +/** EVALUATED AT BUILD TIME */ +export const communityAddonIds: string[] = []; + +export async function getCommunityAddon(name: string): Promise { + const { default: details } = await import(`../../../community-addons/${name}.ts`); + return details; +} diff --git a/packages/addons/_config/index.ts b/packages/addons/_config/index.ts new file mode 100644 index 00000000..c7994318 --- /dev/null +++ b/packages/addons/_config/index.ts @@ -0,0 +1,2 @@ +export { officialAddons, getAddonDetails } from './official.ts'; +export { getCommunityAddon, communityAddonIds } from './community.ts'; diff --git a/packages/adders/_config/official.ts b/packages/addons/_config/official.ts similarity index 62% rename from packages/adders/_config/official.ts rename to packages/addons/_config/official.ts index afc5d7bd..21ac8dc7 100644 --- a/packages/adders/_config/official.ts +++ b/packages/addons/_config/official.ts @@ -1,4 +1,4 @@ -import type { AdderWithoutExplicitArgs } from '@sveltejs/cli-core'; +import type { AddonWithoutExplicitArgs } from '@sveltejs/cli-core'; import drizzle from '../drizzle/index.ts'; import eslint from '../eslint/index.ts'; @@ -11,9 +11,9 @@ import storybook from '../storybook/index.ts'; import tailwindcss from '../tailwindcss/index.ts'; import vitest from '../vitest-addon/index.ts'; -// The order of adders here determines the order they are displayed inside the CLI +// The order of addons here determines the order they are displayed inside the CLI // We generally try to order them by perceived popularity -export const officialAdders = [ +export const officialAddons = [ prettier, eslint, vitest, @@ -24,13 +24,13 @@ export const officialAdders = [ mdsvex, paraglide, storybook -] as AdderWithoutExplicitArgs[]; +] as AddonWithoutExplicitArgs[]; -export function getAdderDetails(id: string): AdderWithoutExplicitArgs { - const details = officialAdders.find((a) => a.id === id); +export function getAddonDetails(id: string): AddonWithoutExplicitArgs { + const details = officialAddons.find((a) => a.id === id); if (!details) { - throw new Error(`Invalid adder: ${id}`); + throw new Error(`Invalid add-on: ${id}`); } - return details as AdderWithoutExplicitArgs; + return details as AddonWithoutExplicitArgs; } diff --git a/packages/adders/_tests/_setup/global.ts b/packages/addons/_tests/_setup/global.ts similarity index 96% rename from packages/adders/_tests/_setup/global.ts rename to packages/addons/_tests/_setup/global.ts index 93b6b955..5b99b41d 100644 --- a/packages/adders/_tests/_setup/global.ts +++ b/packages/addons/_tests/_setup/global.ts @@ -2,7 +2,7 @@ import { fileURLToPath } from 'node:url'; import { setup, type ProjectVariant } from 'sv/testing'; import type { GlobalSetupContext } from 'vitest/node'; -const TEST_DIR = fileURLToPath(new URL('../../../../.test-output/adders/', import.meta.url)); +const TEST_DIR = fileURLToPath(new URL('../../../../.test-output/addons/', import.meta.url)); const variants: ProjectVariant[] = ['kit-js', 'kit-ts', 'vite-js', 'vite-ts']; export default async function ({ provide }: GlobalSetupContext) { diff --git a/packages/adders/_tests/_setup/suite.ts b/packages/addons/_tests/_setup/suite.ts similarity index 99% rename from packages/adders/_tests/_setup/suite.ts rename to packages/addons/_tests/_setup/suite.ts index df151f87..9af9de81 100644 --- a/packages/adders/_tests/_setup/suite.ts +++ b/packages/addons/_tests/_setup/suite.ts @@ -53,7 +53,7 @@ export function setupTest(addons: Addons) { const metaPath = path.resolve(cwd, 'meta.json'); fs.writeFileSync(metaPath, JSON.stringify({ variant, options }, null, '\t'), 'utf8'); - // run adder + // run addon await installAddon({ cwd, addons, options, packageManager: 'pnpm' }); return cwd; diff --git a/packages/adders/_tests/all-addons/test.ts b/packages/addons/_tests/all-addons/test.ts similarity index 83% rename from packages/adders/_tests/all-addons/test.ts rename to packages/addons/_tests/all-addons/test.ts index 934b3da1..845f468f 100644 --- a/packages/adders/_tests/all-addons/test.ts +++ b/packages/addons/_tests/all-addons/test.ts @@ -1,17 +1,17 @@ import process from 'node:process'; import { expect } from '@playwright/test'; import { setupTest } from '../_setup/suite.ts'; -import { officialAdders } from '../../index.ts'; +import { officialAddons } from '../../index.ts'; import type { AddonMap, OptionMap } from 'sv'; const windowsCI = process.env.CI && process.platform === 'win32'; -const addons = officialAdders.reduce((addonMap, addon) => { +const addons = officialAddons.reduce((addonMap, addon) => { if (addon.id === 'storybook' && windowsCI) return addonMap; addonMap[addon.id] = addon; return addonMap; }, {}); -const defaultOptions = officialAdders.reduce>((options, addon) => { +const defaultOptions = officialAddons.reduce>((options, addon) => { options[addon.id] = {}; return options; }, {}); diff --git a/packages/adders/_tests/drizzle/docker-compose.yml b/packages/addons/_tests/drizzle/docker-compose.yml similarity index 100% rename from packages/adders/_tests/drizzle/docker-compose.yml rename to packages/addons/_tests/drizzle/docker-compose.yml diff --git a/packages/adders/_tests/drizzle/fixtures.ts b/packages/addons/_tests/drizzle/fixtures.ts similarity index 100% rename from packages/adders/_tests/drizzle/fixtures.ts rename to packages/addons/_tests/drizzle/fixtures.ts diff --git a/packages/adders/_tests/drizzle/test.ts b/packages/addons/_tests/drizzle/test.ts similarity index 100% rename from packages/adders/_tests/drizzle/test.ts rename to packages/addons/_tests/drizzle/test.ts diff --git a/packages/adders/_tests/eslint/test.ts b/packages/addons/_tests/eslint/test.ts similarity index 100% rename from packages/adders/_tests/eslint/test.ts rename to packages/addons/_tests/eslint/test.ts diff --git a/packages/adders/_tests/lucia/test.ts b/packages/addons/_tests/lucia/test.ts similarity index 100% rename from packages/adders/_tests/lucia/test.ts rename to packages/addons/_tests/lucia/test.ts diff --git a/packages/adders/_tests/mdsvex/fixtures.ts b/packages/addons/_tests/mdsvex/fixtures.ts similarity index 100% rename from packages/adders/_tests/mdsvex/fixtures.ts rename to packages/addons/_tests/mdsvex/fixtures.ts diff --git a/packages/adders/_tests/mdsvex/test.ts b/packages/addons/_tests/mdsvex/test.ts similarity index 100% rename from packages/adders/_tests/mdsvex/test.ts rename to packages/addons/_tests/mdsvex/test.ts diff --git a/packages/adders/_tests/paraglide/test.ts b/packages/addons/_tests/paraglide/test.ts similarity index 100% rename from packages/adders/_tests/paraglide/test.ts rename to packages/addons/_tests/paraglide/test.ts diff --git a/packages/adders/_tests/playwright/test.ts b/packages/addons/_tests/playwright/test.ts similarity index 100% rename from packages/adders/_tests/playwright/test.ts rename to packages/addons/_tests/playwright/test.ts diff --git a/packages/adders/_tests/prettier/test.ts b/packages/addons/_tests/prettier/test.ts similarity index 100% rename from packages/adders/_tests/prettier/test.ts rename to packages/addons/_tests/prettier/test.ts diff --git a/packages/adders/_tests/storybook/test.ts b/packages/addons/_tests/storybook/test.ts similarity index 100% rename from packages/adders/_tests/storybook/test.ts rename to packages/addons/_tests/storybook/test.ts diff --git a/packages/adders/_tests/tailwindcss/fixtures.ts b/packages/addons/_tests/tailwindcss/fixtures.ts similarity index 100% rename from packages/adders/_tests/tailwindcss/fixtures.ts rename to packages/addons/_tests/tailwindcss/fixtures.ts diff --git a/packages/adders/_tests/tailwindcss/test.ts b/packages/addons/_tests/tailwindcss/test.ts similarity index 100% rename from packages/adders/_tests/tailwindcss/test.ts rename to packages/addons/_tests/tailwindcss/test.ts diff --git a/packages/adders/_tests/vitest/test.ts b/packages/addons/_tests/vitest/test.ts similarity index 100% rename from packages/adders/_tests/vitest/test.ts rename to packages/addons/_tests/vitest/test.ts diff --git a/packages/adders/common.ts b/packages/addons/common.ts similarity index 100% rename from packages/adders/common.ts rename to packages/addons/common.ts diff --git a/packages/adders/drizzle/index.ts b/packages/addons/drizzle/index.ts similarity index 99% rename from packages/adders/drizzle/index.ts rename to packages/addons/drizzle/index.ts index c5821ffd..4b953805 100644 --- a/packages/adders/drizzle/index.ts +++ b/packages/addons/drizzle/index.ts @@ -1,5 +1,5 @@ import { common, exports, functions, imports, object, variables } from '@sveltejs/cli-core/js'; -import { defineAdder, defineAdderOptions, dedent, type OptionValues } from '@sveltejs/cli-core'; +import { defineAddon, defineAddonOptions, dedent, type OptionValues } from '@sveltejs/cli-core'; import { parseJson, parseScript } from '@sveltejs/cli-core/parsers'; const PORTS = { @@ -8,7 +8,7 @@ const PORTS = { sqlite: '' } as const; -const options = defineAdderOptions({ +const options = defineAddonOptions({ database: { question: 'Which database would you like to use?', type: 'select', @@ -63,7 +63,7 @@ const options = defineAdderOptions({ } }); -export default defineAdder({ +export default defineAddon({ id: 'drizzle', homepage: 'https://orm.drizzle.team', options, diff --git a/packages/adders/drizzle/logo.svg b/packages/addons/drizzle/logo.svg similarity index 100% rename from packages/adders/drizzle/logo.svg rename to packages/addons/drizzle/logo.svg diff --git a/packages/adders/eslint/index.ts b/packages/addons/eslint/index.ts similarity index 98% rename from packages/adders/eslint/index.ts rename to packages/addons/eslint/index.ts index b29b769e..c72bf820 100644 --- a/packages/adders/eslint/index.ts +++ b/packages/addons/eslint/index.ts @@ -1,5 +1,5 @@ import { addEslintConfigPrettier } from '../common.ts'; -import { defineAdder, log } from '@sveltejs/cli-core'; +import { defineAddon, log } from '@sveltejs/cli-core'; import { array, common, @@ -12,7 +12,7 @@ import { } from '@sveltejs/cli-core/js'; import { parseJson, parseScript } from '@sveltejs/cli-core/parsers'; -export default defineAdder({ +export default defineAddon({ id: 'eslint', homepage: 'https://eslint.org', options: {}, diff --git a/packages/adders/eslint/logo.svg b/packages/addons/eslint/logo.svg similarity index 100% rename from packages/adders/eslint/logo.svg rename to packages/addons/eslint/logo.svg diff --git a/packages/adders/index.ts b/packages/addons/index.ts similarity index 100% rename from packages/adders/index.ts rename to packages/addons/index.ts diff --git a/packages/adders/lucia/index.ts b/packages/addons/lucia/index.ts similarity index 99% rename from packages/adders/lucia/index.ts rename to packages/addons/lucia/index.ts index 7a6c3b8c..b5d8feb7 100644 --- a/packages/adders/lucia/index.ts +++ b/packages/addons/lucia/index.ts @@ -2,8 +2,8 @@ import MagicString from 'magic-string'; import { colors, dedent, - defineAdder, - defineAdderOptions, + defineAddon, + defineAddonOptions, log, utils, Walker @@ -24,7 +24,7 @@ type Dialect = 'mysql' | 'postgresql' | 'sqlite'; let drizzleDialect: Dialect; let schemaPath: string; -const options = defineAdderOptions({ +const options = defineAddonOptions({ demo: { type: 'boolean', default: true, @@ -32,7 +32,7 @@ const options = defineAdderOptions({ } }); -export default defineAdder({ +export default defineAddon({ id: 'lucia', homepage: 'https://lucia-auth.com', options, diff --git a/packages/adders/lucia/logo.webp b/packages/addons/lucia/logo.webp similarity index 100% rename from packages/adders/lucia/logo.webp rename to packages/addons/lucia/logo.webp diff --git a/packages/adders/mdsvex/index.ts b/packages/addons/mdsvex/index.ts similarity index 94% rename from packages/adders/mdsvex/index.ts rename to packages/addons/mdsvex/index.ts index f132dbc6..884952c6 100644 --- a/packages/adders/mdsvex/index.ts +++ b/packages/addons/mdsvex/index.ts @@ -1,8 +1,8 @@ -import { defineAdder } from '@sveltejs/cli-core'; +import { defineAddon } from '@sveltejs/cli-core'; import { array, exports, functions, imports, object } from '@sveltejs/cli-core/js'; import { parseScript } from '@sveltejs/cli-core/parsers'; -export default defineAdder({ +export default defineAddon({ id: 'mdsvex', homepage: 'https://mdsvex.pngwn.io', options: {}, diff --git a/packages/adders/mdsvex/logo.svg b/packages/addons/mdsvex/logo.svg similarity index 100% rename from packages/adders/mdsvex/logo.svg rename to packages/addons/mdsvex/logo.svg diff --git a/packages/adders/package.json b/packages/addons/package.json similarity index 93% rename from packages/adders/package.json rename to packages/addons/package.json index 05a0f370..45c1199c 100644 --- a/packages/adders/package.json +++ b/packages/addons/package.json @@ -1,5 +1,5 @@ { - "name": "@sveltejs/adders", + "name": "@sveltejs/addons", "private": true, "version": "0.0.0", "type": "module", diff --git a/packages/adders/paraglide/index.ts b/packages/addons/paraglide/index.ts similarity index 98% rename from packages/adders/paraglide/index.ts rename to packages/addons/paraglide/index.ts index 3a828834..6b9cae42 100644 --- a/packages/adders/paraglide/index.ts +++ b/packages/addons/paraglide/index.ts @@ -1,5 +1,5 @@ import MagicString from 'magic-string'; -import { colors, dedent, defineAdder, defineAdderOptions, log, utils } from '@sveltejs/cli-core'; +import { colors, dedent, defineAddon, defineAddonOptions, log, utils } from '@sveltejs/cli-core'; import { array, common, @@ -30,7 +30,7 @@ const DEFAULT_INLANG_PROJECT = { } }; -const options = defineAdderOptions({ +const options = defineAddonOptions({ availableLanguageTags: { question: `Which languages would you like to support? ${colors.gray('(e.g. en,de-ch)')}`, type: 'string', @@ -59,7 +59,7 @@ const options = defineAdderOptions({ } }); -export default defineAdder({ +export default defineAddon({ id: 'paraglide', homepage: 'https://inlang.com', options, diff --git a/packages/adders/paraglide/logo.png b/packages/addons/paraglide/logo.png similarity index 100% rename from packages/adders/paraglide/logo.png rename to packages/addons/paraglide/logo.png diff --git a/packages/adders/playwright/index.ts b/packages/addons/playwright/index.ts similarity index 92% rename from packages/adders/playwright/index.ts rename to packages/addons/playwright/index.ts index db3833f0..1b69183a 100644 --- a/packages/adders/playwright/index.ts +++ b/packages/addons/playwright/index.ts @@ -1,8 +1,8 @@ -import { dedent, defineAdder, log } from '@sveltejs/cli-core'; +import { dedent, defineAddon, log } from '@sveltejs/cli-core'; import { common, exports, imports, object } from '@sveltejs/cli-core/js'; import { parseJson, parseScript } from '@sveltejs/cli-core/parsers'; -export default defineAdder({ +export default defineAddon({ id: 'playwright', homepage: 'https://playwright.dev', options: {}, @@ -67,7 +67,7 @@ export default defineAdder({ object.properties(defaultExport.value, config); } else { // unexpected config shape - log.warn('Unexpected playwright config for playwright adder. Could not update.'); + log.warn('Unexpected playwright config for playwright add-on. Could not update.'); } return generateCode(); }); diff --git a/packages/adders/playwright/logo.svg b/packages/addons/playwright/logo.svg similarity index 100% rename from packages/adders/playwright/logo.svg rename to packages/addons/playwright/logo.svg diff --git a/packages/adders/prettier/index.ts b/packages/addons/prettier/index.ts similarity index 96% rename from packages/adders/prettier/index.ts rename to packages/addons/prettier/index.ts index 2a5c21cf..04a74602 100644 --- a/packages/adders/prettier/index.ts +++ b/packages/addons/prettier/index.ts @@ -1,8 +1,8 @@ -import { dedent, defineAdder, log, colors } from '@sveltejs/cli-core'; +import { dedent, defineAddon, log, colors } from '@sveltejs/cli-core'; import { addEslintConfigPrettier } from '../common.ts'; import { parseJson } from '@sveltejs/cli-core/parsers'; -export default defineAdder({ +export default defineAddon({ id: 'prettier', homepage: 'https://prettier.io', options: {}, diff --git a/packages/adders/prettier/logo.svg b/packages/addons/prettier/logo.svg similarity index 100% rename from packages/adders/prettier/logo.svg rename to packages/addons/prettier/logo.svg diff --git a/packages/adders/storybook/index.ts b/packages/addons/storybook/index.ts similarity index 71% rename from packages/adders/storybook/index.ts rename to packages/addons/storybook/index.ts index 0869a62b..f77a1c96 100644 --- a/packages/adders/storybook/index.ts +++ b/packages/addons/storybook/index.ts @@ -1,6 +1,6 @@ -import { defineAdder } from '@sveltejs/cli-core'; +import { defineAddon } from '@sveltejs/cli-core'; -export default defineAdder({ +export default defineAddon({ id: 'storybook', homepage: 'https://storybook.js.org', options: {}, diff --git a/packages/adders/storybook/logo.svg b/packages/addons/storybook/logo.svg similarity index 100% rename from packages/adders/storybook/logo.svg rename to packages/addons/storybook/logo.svg diff --git a/packages/adders/tailwindcss/index.ts b/packages/addons/tailwindcss/index.ts similarity index 97% rename from packages/adders/tailwindcss/index.ts rename to packages/addons/tailwindcss/index.ts index 0560fa9f..1820b469 100644 --- a/packages/adders/tailwindcss/index.ts +++ b/packages/addons/tailwindcss/index.ts @@ -1,4 +1,4 @@ -import { defineAdder, defineAdderOptions } from '@sveltejs/cli-core'; +import { defineAddon, defineAddonOptions } from '@sveltejs/cli-core'; import { addImports } from '@sveltejs/cli-core/css'; import { array, common, exports, imports, object } from '@sveltejs/cli-core/js'; import { parseCss, parseScript, parseJson, parseSvelte } from '@sveltejs/cli-core/parsers'; @@ -38,7 +38,7 @@ const plugins: Plugin[] = [ } ]; -const options = defineAdderOptions({ +const options = defineAddonOptions({ plugins: { type: 'multiselect', question: 'Which plugins would you like to add?', @@ -47,7 +47,7 @@ const options = defineAdderOptions({ } }); -export default defineAdder({ +export default defineAddon({ id: 'tailwindcss', alias: 'tailwind', homepage: 'https://tailwindcss.com', diff --git a/packages/adders/tailwindcss/logo.svg b/packages/addons/tailwindcss/logo.svg similarity index 100% rename from packages/adders/tailwindcss/logo.svg rename to packages/addons/tailwindcss/logo.svg diff --git a/packages/adders/vitest-addon/index.ts b/packages/addons/vitest-addon/index.ts similarity index 95% rename from packages/adders/vitest-addon/index.ts rename to packages/addons/vitest-addon/index.ts index ac72be43..88059301 100644 --- a/packages/adders/vitest-addon/index.ts +++ b/packages/addons/vitest-addon/index.ts @@ -1,8 +1,8 @@ -import { dedent, defineAdder, log } from '@sveltejs/cli-core'; +import { dedent, defineAddon, log } from '@sveltejs/cli-core'; import { common, exports, imports, object } from '@sveltejs/cli-core/js'; import { parseJson, parseScript } from '@sveltejs/cli-core/parsers'; -export default defineAdder({ +export default defineAddon({ id: 'vitest', homepage: 'https://vitest.dev', options: {}, @@ -91,7 +91,7 @@ export default defineAdder({ object.properties(defaultExport.value, { test }); } else { // unexpected config shape - log.warn('Unexpected vite config for vitest adder. Could not update.'); + log.warn('Unexpected vite config for vitest add-on. Could not update.'); } return generateCode(); diff --git a/packages/adders/vitest-addon/logo.svg b/packages/addons/vitest-addon/logo.svg similarity index 100% rename from packages/adders/vitest-addon/logo.svg rename to packages/addons/vitest-addon/logo.svg diff --git a/packages/adders/vitest.config.ts b/packages/addons/vitest.config.ts similarity index 94% rename from packages/adders/vitest.config.ts rename to packages/addons/vitest.config.ts index c1ac6663..e02aa2ae 100644 --- a/packages/adders/vitest.config.ts +++ b/packages/addons/vitest.config.ts @@ -5,7 +5,7 @@ const ONE_MINUTE = 1000 * 60; export default defineProject({ test: { - name: 'adders', + name: 'addons', include: ['_tests/**/test.{js,ts}'], globalSetup: ['_tests/_setup/global.ts'], testTimeout: ONE_MINUTE * 3, diff --git a/packages/cli/commands/add/fetch-packages.ts b/packages/cli/commands/add/fetch-packages.ts index d14be995..72550e0a 100644 --- a/packages/cli/commands/add/fetch-packages.ts +++ b/packages/cli/commands/add/fetch-packages.ts @@ -1,10 +1,10 @@ import fs from 'node:fs'; import path from 'node:path'; -import { pipeline } from 'node:stream/promises'; import { createGunzip } from 'node:zlib'; -import { extract } from 'tar-fs'; import { fileURLToPath } from 'node:url'; -import type { AdderWithoutExplicitArgs } from '@sveltejs/cli-core'; +import { pipeline } from 'node:stream/promises'; +import { extract } from 'tar-fs'; +import type { AddonWithoutExplicitArgs } from '@sveltejs/cli-core'; // path to the `node_modules` directory of `sv` const NODE_MODULES = fileURLToPath(new URL('../node_modules', import.meta.url)); @@ -13,18 +13,18 @@ export const Directive = { file: 'file:', npm: 'npm:' }; function verifyPackage(pkg: Record, specifier: string) { const deps = { ...pkg.dependencies, ...pkg.peerDependencies }; - // valid adders should always have a dependency on `core` + // valid addons should always have a dependency on `core` if (!deps['@sveltejs/cli-core']) { throw new Error( - `Invalid adder package specified: '${specifier}' is missing a dependency on '@sveltejs/cli-core' in its 'package.json'` + `Invalid add-on package specified: '${specifier}' is missing a dependency on '@sveltejs/cli-core' in its 'package.json'` ); } - // adders should never have any external dependencies outside of `core`. - // if the adder does have an external dependency, then we'll throw a helpful error guiding them to the solution + // addons should never have any external dependencies outside of `core`. + // if the addon does have an external dependency, then we'll throw a helpful error guiding them to the solution for (const dep of Object.keys(deps)) { if (dep === '@sveltejs/cli-core') continue; throw new Error( - `Invalid adder package detected: '${specifier}'\nCommunity adders should not have any external 'dependencies' besides '@sveltejs/cli-core'. Consider bundling your dependencies if they are necessary` + `Invalid add-on package detected: '${specifier}'\nCommunity addons should not have any external 'dependencies' besides '@sveltejs/cli-core'. Consider bundling your dependencies if they are necessary` ); } } @@ -32,9 +32,9 @@ function verifyPackage(pkg: Record, specifier: string) { type DownloadOptions = { path?: string; pkg: any }; /** * Downloads and installs the package into the `node_modules` of `sv`. - * @returns the details of the downloaded adder + * @returns the details of the downloaded addon */ -export async function downloadPackage(options: DownloadOptions): Promise { +export async function downloadPackage(options: DownloadOptions): Promise { const { pkg } = options; if (options.path) { // we'll create a symlink so that we can dynamically import the package via `import(pkg-name)` diff --git a/packages/cli/commands/add/index.ts b/packages/cli/commands/add/index.ts index 97d12501..9d37679a 100644 --- a/packages/cli/commands/add/index.ts +++ b/packages/cli/commands/add/index.ts @@ -7,13 +7,13 @@ import * as pkg from 'empathic/package'; import * as p from '@sveltejs/clack-prompts'; import { Command, Option } from 'commander'; import { - officialAdders, - getAdderDetails, - communityAdderIds, - getCommunityAdder -} from '@sveltejs/adders'; + officialAddons, + getAddonDetails, + communityAddonIds, + getCommunityAddon +} from '@sveltejs/addons'; import type { AgentName } from 'package-manager-detector'; -import type { AdderWithoutExplicitArgs, OptionValues, PackageManager } from '@sveltejs/cli-core'; +import type { AddonWithoutExplicitArgs, OptionValues, PackageManager } from '@sveltejs/cli-core'; import * as common from '../../utils/common.ts'; import { createWorkspace } from './workspace.ts'; import { formatFiles, getHighlighter } from './utils.ts'; @@ -22,8 +22,8 @@ import { installDependencies, packageManagerPrompt } from '../../utils/package-m import { getGlobalPreconditions } from './preconditions.ts'; import { type AddonMap, applyAddons, setupAddons } from '../../lib/install.ts'; -const AddersSchema = v.array(v.string()); -const AdderOptionFlagsSchema = v.object({ +const AddonsSchema = v.array(v.string()); +const AddonOptionFlagsSchema = v.object({ tailwindcss: v.optional(v.array(v.string())), drizzle: v.optional(v.array(v.string())), lucia: v.optional(v.array(v.string())), @@ -33,14 +33,14 @@ const OptionsSchema = v.strictObject({ cwd: v.string(), install: v.boolean(), preconditions: v.boolean(), - community: v.optional(v.union([AddersSchema, v.boolean()])), - ...AdderOptionFlagsSchema.entries + community: v.optional(v.union([AddonsSchema, v.boolean()])), + ...AddonOptionFlagsSchema.entries }); type Options = v.InferOutput; -const aliases = officialAdders.map((c) => c.alias).filter((v) => v !== undefined); -const addersOptions = getAdderOptionFlags(); -const communityDetails: AdderWithoutExplicitArgs[] = []; +const aliases = officialAddons.map((c) => c.alias).filter((v) => v !== undefined); +const addonsOptions = getAddonOptionFlags(); +const communityDetails: AddonWithoutExplicitArgs[] = []; // infers the workspace cwd if a `package.json` resides in a parent directory const defaultPkgPath = pkg.up(); @@ -52,9 +52,9 @@ export const add = new Command('add') .option('-C, --cwd ', 'path to working directory', defaultCwd) .option('--no-install', 'skip installing dependencies') .option('--no-preconditions', 'skip validating preconditions') - //.option('--community [adder...]', 'community adders to install') + //.option('--community [add-on...]', 'community addons to install') .configureHelp(common.helpConfig) - .action((adderArgs, opts) => { + .action((addonArgs, opts) => { // validate workspace if (opts.cwd === undefined) { console.error( @@ -69,58 +69,58 @@ export const add = new Command('add') process.exit(1); } - const specifiedAdders = v.parse(AddersSchema, adderArgs); + const specifiedAddons = v.parse(AddonsSchema, addonArgs); const options = v.parse(OptionsSchema, opts); - const adderIds = officialAdders.map((adder) => adder.id); - const invalidAdders = specifiedAdders.filter( - (a) => !adderIds.includes(a) && !aliases.includes(a) + const addonIds = officialAddons.map((addon) => addon.id); + const invalidAddons = specifiedAddons.filter( + (a) => !addonIds.includes(a) && !aliases.includes(a) ); - if (invalidAdders.length > 0) { - console.error(`Invalid adders specified: ${invalidAdders.join(', ')}`); + if (invalidAddons.length > 0) { + console.error(`Invalid add-ons specified: ${invalidAddons.join(', ')}`); process.exit(1); } - const selectedAdders = transformAliases(specifiedAdders); + const selectedAddons = transformAliases(specifiedAddons); common.runCommand(async () => { - const { nextSteps } = await runAddCommand(options, selectedAdders); + const { nextSteps } = await runAddCommand(options, selectedAddons); if (nextSteps) p.box(nextSteps, 'Next steps'); }); }); -// adds adder specific option flags to the `add` command -for (const option of addersOptions) { +// adds addon specific option flags to the `add` command +for (const option of addonsOptions) { add.addOption(option); } -type SelectedAdder = { type: 'official' | 'community'; adder: AdderWithoutExplicitArgs }; +type SelectedAddon = { type: 'official' | 'community'; addon: AddonWithoutExplicitArgs }; export async function runAddCommand( options: Options, - selectedAdderIds: string[] + selectedAddonIds: string[] ): Promise<{ nextSteps?: string; packageManager?: AgentName | null }> { - const selectedAdders: SelectedAdder[] = selectedAdderIds.map((id) => ({ + const selectedAddons: SelectedAddon[] = selectedAddonIds.map((id) => ({ type: 'official', - adder: getAdderDetails(id) + addon: getAddonDetails(id) })); - type AdderId = string; + type AddonId = string; type QuestionValues = OptionValues; - type AdderOption = Record; + type AddonOption = Record; - const official: AdderOption = {}; - const community: AdderOption = {}; + const official: AddonOption = {}; + const community: AddonOption = {}; // apply specified options from flags - for (const adderOption of addersOptions) { - const adderId = adderOption.attributeName() as keyof Options; - const specifiedOptions = options[adderId] as string[] | undefined; + for (const addonOption of addonsOptions) { + const addonId = addonOption.attributeName() as keyof Options; + const specifiedOptions = options[addonId] as string[] | undefined; if (!specifiedOptions) continue; - const details = getAdderDetails(adderId); - if (!selectedAdders.find((d) => d.adder === details)) { - selectedAdders.push({ type: 'official', adder: details }); + const details = getAddonDetails(addonId); + if (!selectedAddons.find((d) => d.addon === details)) { + selectedAddons.push({ type: 'official', addon: details }); } - official[adderId] ??= {}; + official[addonId] ??= {}; const optionEntries = Object.entries(details.options); for (const specifiedOption of specifiedOptions) { @@ -139,55 +139,55 @@ export async function runAddCommand( if (!optionEntry) { const { choices } = getOptionChoices(details); throw new Error( - `Invalid '--${adderId}' option: '${specifiedOption}'\nAvailable options: ${choices.join(', ')}` + `Invalid '--${addonId}' option: '${specifiedOption}'\nAvailable options: ${choices.join(', ')}` ); } const [questionId, question] = optionEntry; // validate that there are no conflicts - let existingOption = official[adderId][questionId]; + let existingOption = official[addonId][questionId]; if (existingOption !== undefined) { if (typeof existingOption === 'boolean') { // need to transform the boolean back to `no-{id}` or `{id}` existingOption = existingOption ? questionId : `no-${questionId}`; } throw new Error( - `Conflicting '--${adderId}' option: '${specifiedOption}' conflicts with '${existingOption}'` + `Conflicting '--${addonId}' option: '${specifiedOption}' conflicts with '${existingOption}'` ); } - official[adderId][questionId] = + official[addonId][questionId] = question.type === 'boolean' ? !specifiedOption.startsWith('no-') : specifiedOption; } // apply defaults to unspecified options for (const [id, question] of Object.entries(details.options)) { // we'll only apply defaults to options that don't explicitly fail their conditions - if (question.condition?.(official[adderId]) !== false) { - official[adderId][id] ??= question.default; + if (question.condition?.(official[addonId]) !== false) { + official[addonId][id] ??= question.default; } else { // we'll also error out if they specified an option that is incompatible with other options. // (e.g. the client isn't available for a given database `--drizzle sqlite mysql2`) - if (official[adderId][id] !== undefined) { + if (official[addonId][id] !== undefined) { throw new Error( - `Incompatible '--${adderId}' option specified: '${official[adderId][id]}'` + `Incompatible '--${addonId}' option specified: '${official[addonId][id]}'` ); } } } } - // we'll let the user choose community adders when `--community` is specified without args + // we'll let the user choose community addons when `--community` is specified without args if (options.community === true) { - const communityAdders = await Promise.all( - communityAdderIds.map(async (id) => await getCommunityAdder(id)) + const communityAddons = await Promise.all( + communityAddonIds.map(async (id) => await getCommunityAddon(id)) ); - const promptOptions = communityAdders.map((adder) => ({ - value: adder.id, - label: adder.id, - hint: 'https://www.npmjs.com/package/' + adder.id + const promptOptions = communityAddons.map((addon) => ({ + value: addon.id, + label: addon.id, + hint: 'https://www.npmjs.com/package/' + addon.id })); const selected = await p.multiselect({ @@ -200,43 +200,43 @@ export async function runAddCommand( p.cancel('Operation cancelled.'); process.exit(1); } else if (selected.length === 0) { - p.cancel('No adders selected. Exiting.'); + p.cancel('No add-ons selected. Exiting.'); process.exit(1); } options.community = selected; } - // validate and download community adders + // validate and download community addons if (Array.isArray(options.community) && options.community.length > 0) { - // validate adders - const adders = options.community.map((id) => { + // validate addons + const addons = options.community.map((id) => { // ids with directives are passed unmodified so they can be processed during downloads const hasDirective = Object.values(Directive).some((directive) => id.startsWith(directive)); if (hasDirective) return id; - const validAdder = communityAdderIds.includes(id); - if (!validAdder) { + const validAddon = communityAddonIds.includes(id); + if (!validAddon) { throw new Error( - `Invalid community adder specified: '${id}'\nAvailable options: ${communityAdderIds.join(', ')}` + `Invalid community add-on specified: '${id}'\nAvailable options: ${communityAddonIds.join(', ')}` ); } return id; }); - // get adder details from remote adders + // get addon details from remote addons const { start, stop } = p.spinner(); try { - start('Resolving community adder packages'); + start('Resolving community add-on packages'); const pkgs = await Promise.all( - adders.map(async (id) => { + addons.map(async (id) => { return await getPackageJSON({ cwd: options.cwd, packageName: id }); }) ); - stop('Resolved community adder packages'); + stop('Resolved community add-on packages'); p.log.warn( - 'The Svelte maintainers have not reviewed community adders for malicious code. Use at your discretion.' + 'The Svelte maintainers have not reviewed community add-ons for malicious code. Use at your discretion.' ); const paddingName = common.getPadding(pkgs.map(({ pkg }) => pkg.name)); @@ -256,35 +256,35 @@ export async function runAddCommand( process.exit(1); } - start('Downloading community adder packages'); + start('Downloading community add-on packages'); const details = await Promise.all(pkgs.map(async (opts) => downloadPackage(opts))); - for (const adder of details) { - const id = adder.id; + for (const addon of details) { + const id = addon.id; community[id] ??= {}; - communityDetails.push(adder); - selectedAdders.push({ type: 'community', adder }); + communityDetails.push(addon); + selectedAddons.push({ type: 'community', addon }); } - stop('Downloaded community adder packages'); + stop('Downloaded community add-on packages'); } catch (err) { - stop('Failed to resolve community adder packages', 1); + stop('Failed to resolve community add-on packages', 1); throw err; } } - // prepare official adders + // prepare official addons let workspace = createWorkspace({ cwd: options.cwd }); - const adderSetupResults = setupAddons(officialAdders, workspace); + const addonSetupResults = setupAddons(officialAddons, workspace); - // prompt which adders to apply - if (selectedAdders.length === 0) { - const adderOptions = officialAdders - // only display supported adders relative to the current environment - .filter(({ id }) => adderSetupResults[id].unsupported.length === 0) + // prompt which addons to apply + if (selectedAddons.length === 0) { + const addonOptions = officialAddons + // only display supported addons relative to the current environment + .filter(({ id }) => addonSetupResults[id].unsupported.length === 0) .map(({ id, homepage }) => ({ label: id, value: id, hint: homepage })); const selected = await p.multiselect({ message: `What would you like to add to your project? ${pc.dim('(use arrow keys / space bar)')}`, - options: adderOptions, + options: addonOptions, required: false }); if (p.isCancel(selected)) { @@ -293,42 +293,42 @@ export async function runAddCommand( } for (const id of selected) { - const adder = officialAdders.find((adder) => adder.id === id)!; - selectedAdders.push({ type: 'official', adder }); + const addon = officialAddons.find((addon) => addon.id === id)!; + selectedAddons.push({ type: 'official', addon }); } } - // add inter-adder dependencies - for (const { adder } of selectedAdders) { + // add inter-addon dependencies + for (const { addon } of selectedAddons) { workspace = createWorkspace(workspace); - const setupResult = adderSetupResults[adder.id]; + const setupResult = addonSetupResults[addon.id]; const missingDependencies = setupResult.dependsOn.filter( - (depId) => !selectedAdders.some((a) => a.adder.id === depId) + (depId) => !selectedAddons.some((a) => a.addon.id === depId) ); for (const depId of missingDependencies) { // TODO: this will have to be adjusted when we work on community add-ons - const dependency = officialAdders.find((a) => a.id === depId); - if (!dependency) throw new Error(`'${adder.id}' depends on an invalid add-on: '${depId}'`); + const dependency = officialAddons.find((a) => a.id === depId); + if (!dependency) throw new Error(`'${addon.id}' depends on an invalid add-on: '${depId}'`); // prompt to install the dependent const install = await p.confirm({ - message: `The ${pc.bold(pc.cyan(adder.id))} add-on requires ${pc.bold(pc.cyan(depId))} to also be setup. ${pc.green('Include it?')}` + message: `The ${pc.bold(pc.cyan(addon.id))} add-on requires ${pc.bold(pc.cyan(depId))} to also be setup. ${pc.green('Include it?')}` }); if (install !== true) { p.cancel('Operation cancelled.'); process.exit(1); } - selectedAdders.push({ type: 'official', adder: dependency }); + selectedAddons.push({ type: 'official', addon: dependency }); } } // run precondition checks - if (options.preconditions && selectedAdders.length > 0) { + if (options.preconditions && selectedAddons.length > 0) { // add global checks - const adders = selectedAdders.map(({ adder }) => adder); - const { preconditions } = getGlobalPreconditions(options.cwd, adders, adderSetupResults); + const addons = selectedAddons.map(({ addon }) => addon); + const { preconditions } = getGlobalPreconditions(options.cwd, addons, addonSetupResults); const fails: Array<{ name: string; message?: string }> = []; for (const condition of preconditions) { @@ -355,21 +355,21 @@ export async function runAddCommand( } // ask remaining questions - for (const { adder, type } of selectedAdders) { - const adderId = adder.id; - const questionPrefix = selectedAdders.length > 1 ? `${adder.id}: ` : ''; + for (const { addon, type } of selectedAddons) { + const addonId = addon.id; + const questionPrefix = selectedAddons.length > 1 ? `${addon.id}: ` : ''; let values: QuestionValues = {}; if (type === 'official') { - official[adderId] ??= {}; - values = official[adderId]; + official[addonId] ??= {}; + values = official[addonId]; } if (type === 'community') { - community[adderId] ??= {}; - values = community[adderId]; + community[addonId] ??= {}; + values = community[addonId]; } - for (const [questionId, question] of Object.entries(adder.options)) { + for (const [questionId, question] of Object.entries(addon.options)) { const shouldAsk = question.condition?.(values); if (shouldAsk === false || values[questionId] !== undefined) continue; @@ -413,9 +413,9 @@ export async function runAddCommand( } } - // we'll return early when no adders are selected, + // we'll return early when no addons are selected, // indicating that installing deps was skipped and no PM was selected - if (selectedAdders.length === 0) return { packageManager: null }; + if (selectedAddons.length === 0) return { packageManager: null }; // prompt for package manager let packageManager: PackageManager | undefined; @@ -424,8 +424,8 @@ export async function runAddCommand( if (packageManager) workspace.packageManager = packageManager; } - // apply adders - const officialDetails = Object.keys(official).map((id) => getAdderDetails(id)); + // apply addons + const officialDetails = Object.keys(official).map((id) => getAddonDetails(id)); const commDetails = Object.keys(community).map( (id) => communityDetails.find((a) => a.id === id)! ); @@ -434,7 +434,7 @@ export async function runAddCommand( const addonMap: AddonMap = Object.assign({}, ...details.map((a) => ({ [a.id]: a }))); const filesToFormat = await applyAddons({ workspace, - adderSetupResults, + addonSetupResults, addons: addonMap, options: official }); @@ -464,21 +464,21 @@ export async function runAddCommand( // print next steps const nextSteps = - selectedAdders - .filter(({ adder }) => adder.nextSteps) - .map(({ adder }) => { - let adderMessage = ''; - if (selectedAdders.length > 1) { - adderMessage = `${pc.green(adder.id)}:\n`; + selectedAddons + .filter(({ addon }) => addon.nextSteps) + .map(({ addon }) => { + let addonMessage = ''; + if (selectedAddons.length > 1) { + addonMessage = `${pc.green(addon.id)}:\n`; } - const adderNextSteps = adder.nextSteps!({ + const addonNextSteps = addon.nextSteps!({ ...workspace, - options: official[adder.id]!, + options: official[addon.id]!, highlighter }); - adderMessage += `- ${adderNextSteps.join('\n- ')}`; - return adderMessage; + addonMessage += `- ${addonNextSteps.join('\n- ')}`; + return addonMessage; }) // instead of returning an empty string, we'll return `undefined` .join('\n\n') || undefined; @@ -487,14 +487,14 @@ export async function runAddCommand( } /** - * Dedupes and transforms aliases into their respective adder id + * Dedupes and transforms aliases into their respective addon id */ function transformAliases(ids: string[]): string[] { const set = new Set(); for (const id of ids) { if (aliases.includes(id)) { - const adder = officialAdders.find((a) => a.alias === id)!; - set.add(adder.id); + const addon = officialAddons.find((a) => a.alias === id)!; + set.add(addon.id); } else { set.add(id); } @@ -502,11 +502,11 @@ function transformAliases(ids: string[]): string[] { return Array.from(set); } -function getAdderOptionFlags(): Option[] { +function getAddonOptionFlags(): Option[] { const options: Option[] = []; - for (const adder of officialAdders) { - const id = adder.id; - const details = getAdderDetails(id); + for (const addon of officialAddons) { + const id = addon.id; + const details = getAddonDetails(id); if (Object.values(details.options).length === 0) continue; const { defaults, groups } = getOptionChoices(details); @@ -518,7 +518,7 @@ function getAdderOptionFlags(): Option[] { `--${id} [options...]`, `${id} add-on options ${pc.dim(`(preset: ${preset})`)}\n${choices}` ) - // presets are applied when `--adder` is specified with no options + // presets are applied when `--{addonName}` is specified with no options .preset(preset) .argParser((value, prev: string[]) => { prev ??= []; @@ -531,7 +531,7 @@ function getAdderOptionFlags(): Option[] { return options; } -function getOptionChoices(details: AdderWithoutExplicitArgs) { +function getOptionChoices(details: AddonWithoutExplicitArgs) { const choices: string[] = []; const defaults: string[] = []; const groups: Record = {}; diff --git a/packages/cli/commands/add/preconditions.ts b/packages/cli/commands/add/preconditions.ts index 90694299..c8a90f93 100644 --- a/packages/cli/commands/add/preconditions.ts +++ b/packages/cli/commands/add/preconditions.ts @@ -1,12 +1,12 @@ import { exec } from 'tinyexec'; -import type { AdderSetupResult, AdderWithoutExplicitArgs, Precondition } from '@sveltejs/cli-core'; +import type { AddonSetupResult, AddonWithoutExplicitArgs, Precondition } from '@sveltejs/cli-core'; import { UnsupportedError } from '../../utils/errors.ts'; type PreconditionCheck = { name: string; preconditions: Precondition[] }; export function getGlobalPreconditions( cwd: string, - adders: AdderWithoutExplicitArgs[], - adderSetupResult: Record + addons: AddonWithoutExplicitArgs[], + addonSetupResult: Record ): PreconditionCheck { return { name: 'global checks', @@ -37,10 +37,10 @@ export function getGlobalPreconditions( } }, { - name: 'unsupported adders', + name: 'unsupported add-ons', run: () => { - const reasons = adders.flatMap((a) => - adderSetupResult[a.id].unsupported.map((reason) => ({ id: a.id, reason })) + const reasons = addons.flatMap((a) => + addonSetupResult[a.id].unsupported.map((reason) => ({ id: a.id, reason })) ); if (reasons.length === 0) { diff --git a/packages/cli/lib/install.ts b/packages/cli/lib/install.ts index 79c646d6..72d5173c 100644 --- a/packages/cli/lib/install.ts +++ b/packages/cli/lib/install.ts @@ -1,12 +1,12 @@ import type { - Adder, + Addon, Workspace, PackageManager, OptionValues, Question, SvApi, - AdderSetupResult, - AdderWithoutExplicitArgs + AddonSetupResult, + AddonWithoutExplicitArgs } from '@sveltejs/cli-core'; import pc from 'picocolors'; import * as p from '@sveltejs/clack-prompts'; @@ -16,7 +16,6 @@ import { TESTING } from '../utils/env.ts'; import { createWorkspace } from '../commands/add/workspace.ts'; import { fileExists, installPackages, readFile, writeFile } from '../commands/add/utils.ts'; -type Addon = Adder; export type InstallOptions = { cwd: string; addons: Addons; @@ -24,7 +23,7 @@ export type InstallOptions = { packageManager?: PackageManager; }; -export type AddonMap = Record; +export type AddonMap = Record>; export type OptionMap = { [K in keyof Addons]: Partial>; }; @@ -36,27 +35,27 @@ export async function installAddon({ packageManager = 'npm' }: InstallOptions): Promise { const workspace = createWorkspace({ cwd, packageManager }); - const adderSetupResults = setupAddons(Object.values(addons), workspace); + const addonSetupResults = setupAddons(Object.values(addons), workspace); - return await applyAddons({ addons, workspace, options, adderSetupResults }); + return await applyAddons({ addons, workspace, options, addonSetupResults }); } export type ApplyAddonOptions = { addons: AddonMap; options: OptionMap; workspace: Workspace; - adderSetupResults: Record; + addonSetupResults: Record; }; export async function applyAddons({ addons, workspace, - adderSetupResults, + addonSetupResults, options }: ApplyAddonOptions): Promise { const filesToFormat = new Set(); const mapped = Object.entries(addons).map(([, addon]) => addon); - const ordered = orderAddons(mapped, adderSetupResults); + const ordered = orderAddons(mapped, addonSetupResults); for (const addon of ordered) { workspace = createWorkspace({ ...workspace, options: options[addon.id] }); @@ -69,33 +68,33 @@ export async function applyAddons({ } export function setupAddons( - addons: AdderWithoutExplicitArgs[], + addons: AddonWithoutExplicitArgs[], workspace: Workspace -): Record { - const adderSetupResults: Record = {}; +): Record { + const addonSetupResults: Record = {}; for (const addon of addons) { - const setupResult: AdderSetupResult = { unsupported: [], dependsOn: [] }; + const setupResult: AddonSetupResult = { unsupported: [], dependsOn: [] }; addon.setup?.({ ...workspace, dependsOn: (name) => setupResult.dependsOn.push(name), unsupported: (reason) => setupResult.unsupported.push(reason) }); - adderSetupResults[addon.id] = setupResult; + addonSetupResults[addon.id] = setupResult; } - return adderSetupResults; + return addonSetupResults; } type RunAddon = { workspace: Workspace; - addon: Adder>; + addon: Addon>; multiple: boolean; }; async function runAddon({ addon, multiple, workspace }: RunAddon): Promise { const files = new Set(); - // apply default adder options + // apply default addon options for (const [id, question] of Object.entries(addon.options)) { // we'll only apply defaults to options that don't explicitly fail their conditions if (question.condition?.(workspace.options) !== false) { @@ -125,10 +124,10 @@ async function runAddon({ addon, multiple, workspace }: RunAddon): Promise { const { command, args } = resolveCommand(workspace.packageManager, 'execute', commandArgs)!; - const adderPrefix = multiple ? `${addon.id}: ` : ''; + const addonPrefix = multiple ? `${addon.id}: ` : ''; const executedCommand = `${command} ${args.join(' ')}`; if (!TESTING) { - p.log.step(`${adderPrefix}Running external command ${pc.gray(`(${executedCommand})`)}`); + p.log.step(`${addonPrefix}Running external command ${pc.gray(`(${executedCommand})`)}`); } // adding --yes as the first parameter helps avoiding the "Need to install the following packages:" message @@ -162,7 +161,7 @@ async function runAddon({ addon, multiple, workspace }: RunAddon): Promise) { +function orderAddons(addons: Array>, setupResults: Record) { return Array.from(addons).sort((a, b) => { const aDeps = setupResults[a.id].dependsOn; const bDeps = setupResults[b.id].dependsOn; diff --git a/packages/cli/package.json b/packages/cli/package.json index 8de03bfe..1241b70b 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -30,7 +30,7 @@ } }, "devDependencies": { - "@sveltejs/adders": "workspace:*", + "@sveltejs/addons": "workspace:*", "@sveltejs/clack-prompts": "workspace:*", "@sveltejs/cli-core": "workspace:*", "@sveltejs/create": "workspace:*", diff --git a/packages/core/README.md b/packages/core/README.md index 27719e9f..a1118dc6 100644 --- a/packages/core/README.md +++ b/packages/core/README.md @@ -2,7 +2,7 @@ This is the core of [sv](https://svelte-add.com). This package handles the following things (and a lot more) -- ability to define new adders +- ability to define new add-ons - detecting and / or creating svelte / kit project in the current working directory - installing new dependencies -- parsing and serialization of files modified by the adders +- parsing and serialization of files modified by the add-on diff --git a/packages/core/adder/config.ts b/packages/core/addon/config.ts similarity index 72% rename from packages/core/adder/config.ts rename to packages/core/addon/config.ts index ffc8abae..85c6ba0f 100644 --- a/packages/core/adder/config.ts +++ b/packages/core/addon/config.ts @@ -1,5 +1,4 @@ import type { OptionDefinition, OptionValues, Question } from './options.ts'; -import type { FileType } from './processors.ts'; import type { Workspace } from './workspace.ts'; export type ConditionDefinition = ( @@ -27,7 +26,7 @@ export type SvApi = { execute: (args: string[], stdio: 'inherit' | 'pipe') => Promise; }; -export type Adder = { +export type Addon = { id: string; alias?: string; homepage?: string; @@ -54,14 +53,14 @@ export type Highlighter = { env: (str: string) => string; // used for printing environment variable names }; -export function defineAdder(config: Adder): Adder { +export function defineAddon(config: Addon): Addon { return config; } -export type AdderSetupResult = { dependsOn: string[]; unsupported: string[] }; +export type AddonSetupResult = { dependsOn: string[]; unsupported: string[] }; -export type AdderWithoutExplicitArgs = Adder>; -export type AdderConfigWithoutExplicitArgs = Adder>; +export type AddonWithoutExplicitArgs = Addon>; +export type AddonConfigWithoutExplicitArgs = Addon>; export type Tests = { expectProperty: (selector: string, property: string, expectedValue: string) => Promise; @@ -76,22 +75,7 @@ export type TestDefinition = { condition?: (options: OptionValues) => boolean; }; -export type AdderTestConfig = { - files: Array>; - options: Args; - optionValues: Array>; - runSynchronously?: boolean; - command?: string; - tests: Array>; -}; - -export function defineAdderTests( - tests: AdderTestConfig -): AdderTestConfig { - return tests; -} - -export function defineAdderOptions(options: Args): Args { +export function defineAddonOptions(options: Args): Args { return options; } diff --git a/packages/core/adder/options.ts b/packages/core/addon/options.ts similarity index 100% rename from packages/core/adder/options.ts rename to packages/core/addon/options.ts diff --git a/packages/core/adder/processors.ts b/packages/core/addon/processors.ts similarity index 100% rename from packages/core/adder/processors.ts rename to packages/core/addon/processors.ts diff --git a/packages/core/adder/workspace.ts b/packages/core/addon/workspace.ts similarity index 100% rename from packages/core/adder/workspace.ts rename to packages/core/addon/workspace.ts diff --git a/packages/core/index.ts b/packages/core/index.ts index 05700ef1..9ba5b086 100644 --- a/packages/core/index.ts +++ b/packages/core/index.ts @@ -1,12 +1,12 @@ -export { defineAdderTests, defineAdder, defineAdderOptions } from './adder/config.ts'; +export { defineAddon, defineAddonOptions } from './addon/config.ts'; export { log } from '@sveltejs/clack-prompts'; export { default as colors } from 'picocolors'; export { default as dedent } from 'dedent'; export * as utils from './utils.ts'; -export type * from './adder/processors.ts'; -export type * from './adder/options.ts'; -export type * from './adder/config.ts'; -export type * from './adder/workspace.ts'; +export type * from './addon/processors.ts'; +export type * from './addon/options.ts'; +export type * from './addon/config.ts'; +export type * from './addon/workspace.ts'; export { Walker } from '@sveltejs/ast-tooling'; diff --git a/packages/core/package.json b/packages/core/package.json index 1aac9911..d94915fe 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -63,6 +63,7 @@ "template", "wizard", "add", - "adder" + "addon", + "add-on" ] } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d65e54ff..e476e989 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -84,7 +84,7 @@ importers: specifier: ^2.1.4 version: 2.1.4(@types/node@22.9.0)(@vitest/ui@2.1.4) - community-adder-template: + community-addon-template: dependencies: '@sveltejs/cli-core': specifier: workspace:* @@ -100,7 +100,7 @@ importers: specifier: ^2.1.4 version: 2.1.4(@types/node@22.9.0)(@vitest/ui@2.1.4) - packages/adders: + packages/addons: dependencies: '@sveltejs/cli-core': specifier: workspace:* @@ -168,9 +168,9 @@ importers: packages/cli: devDependencies: - '@sveltejs/adders': + '@sveltejs/addons': specifier: workspace:* - version: link:../adders + version: link:../addons '@sveltejs/clack-prompts': specifier: workspace:* version: link:../clack-prompts diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 0133305e..86c4b35e 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,4 +1,4 @@ packages: - 'packages/*' - - 'community-adder-template' + - 'community-addon-template' - '!.test-tmp/**' diff --git a/rollup.config.js b/rollup.config.js index 6ec4e049..255b49f8 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -80,18 +80,18 @@ function getConfig(project) { } /** @type {Plugin | undefined} */ - let communityAdderIdsPlugin; + let communityAddonIdsPlugin; if (project === 'cli') { - // Evaluates the ids of available community adders at build time - communityAdderIdsPlugin = { - name: 'evaluate-community-adder-ids', + // Evaluates the ids of available community addons at build time + communityAddonIdsPlugin = { + name: 'evaluate-community-addon-ids', transform(code, id) { if (id.endsWith(`_config${path.sep}community.ts`)) { const ms = new MagicString(code, { filename: id }); - const start = code.indexOf('export const communityAdderIds'); + const start = code.indexOf('export const communityAddonIds'); const end = code.indexOf(';', start); - const ids = fs.readdirSync('community-adders').map((p) => path.parse(p).name); - const generated = `export const communityAdderIds = ${JSON.stringify(ids)};`; + const ids = fs.readdirSync('community-addons').map((p) => path.parse(p).name); + const generated = `export const communityAddonIds = ${JSON.stringify(ids)};`; ms.overwrite(start, end, generated); return { code: ms.toString(), @@ -119,12 +119,12 @@ function getConfig(project) { commonjs(), json(), dynamicImportVars({ - // since we're relying on the usage of standard dynamic imports for community adders, we need to + // since we're relying on the usage of standard dynamic imports for community addons, we need to // prevent this plugin from transforming these cases exclude: ['packages/cli/commands/add/fetch-packages.ts'] }), buildCliTemplatesPlugin, - communityAdderIdsPlugin + communityAddonIdsPlugin ] }; } diff --git a/vitest.workspace.ts b/vitest.workspace.ts index 2a7e8f5f..75a901a7 100644 --- a/vitest.workspace.ts +++ b/vitest.workspace.ts @@ -1,3 +1,3 @@ import { defineWorkspace } from 'vitest/config'; -export default defineWorkspace(['packages/*', 'community-adder-template']); +export default defineWorkspace(['packages/*', 'community-addon-template']);