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']);