diff --git a/.changeset/rude-seals-behave.md b/.changeset/rude-seals-behave.md new file mode 100644 index 00000000..64429c07 --- /dev/null +++ b/.changeset/rude-seals-behave.md @@ -0,0 +1,5 @@ +--- +'sv': patch +--- + +feat: improved homescreen for adding or creating projects diff --git a/community-adder-template/src/config/adder.js b/community-adder-template/src/config/adder.js deleted file mode 100644 index 7439b7b8..00000000 --- a/community-adder-template/src/config/adder.js +++ /dev/null @@ -1,32 +0,0 @@ -import { options } from './options.js'; -import { defineAdder } from '@sveltejs/cli-core'; -import { imports } from '@sveltejs/cli-core/js'; -import { parseScript } from '@sveltejs/cli-core/parsers'; - -export const adder = defineAdder({ - id: 'community-adder-template', - name: 'Community Adder Template', - description: 'An adder template demo', - environments: { kit: true, svelte: true }, - options, - packages: [], - files: [ - { - name: () => 'adder-template-demo.txt', - content: ({ content, options }) => { - if (options.demo) { - return 'This is a text file made by the Community Adder Template demo!'; - } - return content; - } - }, - { - name: () => 'src/DemoComponent.svelte', - content: ({ content }) => { - const { ast, generateCode } = parseScript(content); - imports.addDefault(ast, '../adder-template-demo.txt?raw', 'Demo'); - return generateCode(); - } - } - ] -}); diff --git a/community-adder-template/src/config/options.js b/community-adder-template/src/config/options.js deleted file mode 100644 index 000c1bf0..00000000 --- a/community-adder-template/src/config/options.js +++ /dev/null @@ -1,9 +0,0 @@ -import { defineAdderOptions } from '@sveltejs/cli-core'; - -export const options = defineAdderOptions({ - demo: { - question: 'Do you want to use a demo?', - type: 'boolean', - default: false - } -}); diff --git a/community-adder-template/src/index.js b/community-adder-template/src/index.js index b976c497..9e4348aa 100644 --- a/community-adder-template/src/index.js +++ b/community-adder-template/src/index.js @@ -1,3 +1,37 @@ -import { adder } from './config/adder.js'; +import { defineAdder, defineAdderOptions } from '@sveltejs/cli-core'; +import { imports } from '@sveltejs/cli-core/js'; +import { parseScript } from '@sveltejs/cli-core/parsers'; -export default adder; +export const options = defineAdderOptions({ + demo: { + question: 'Do you want to use a demo?', + type: 'boolean', + default: false + } +}); + +export const adder = defineAdder({ + id: 'community-adder-template', + environments: { kit: true, svelte: true }, + options, + packages: [], + files: [ + { + name: () => 'adder-template-demo.txt', + content: ({ content, options }) => { + if (options.demo) { + return 'This is a text file made by the Community Adder Template demo!'; + } + return content; + } + }, + { + name: () => 'src/DemoComponent.svelte', + content: ({ content }) => { + const { ast, generateCode } = parseScript(content); + imports.addDefault(ast, '../adder-template-demo.txt?raw', 'Demo'); + return generateCode(); + } + } + ] +}); diff --git a/community-adder-template/tests/tests.js b/community-adder-template/tests/tests.js index 31451172..373c556b 100644 --- a/community-adder-template/tests/tests.js +++ b/community-adder-template/tests/tests.js @@ -1,5 +1,5 @@ import { defineAdderTests } from '@sveltejs/cli-core'; -import { options } from '../src/config/options.js'; +import { options } from '../src/index.js'; export const tests = defineAdderTests({ files: [], diff --git a/community-adders/unocss.ts b/community-adders/unocss.ts index 536a898d..b8372002 100644 --- a/community-adders/unocss.ts +++ b/community-adders/unocss.ts @@ -1,10 +1,5 @@ import type { CommunityAdder } from '../packages/adders/_config/community.ts'; export default { - name: 'UnoCSS', - description: 'The instant on-demand Atomic CSS engine', - category: 'CSS', - npm: 'unocss-svelte-integration', - repo: 'https://github.com/owner-name/repo-name', - website: 'https://unocss.dev' + id: 'unocss-svelte-integration' } satisfies CommunityAdder; diff --git a/community-adders/unplugin-icons.ts b/community-adders/unplugin-icons.ts index c12bbbd1..a0b343c9 100644 --- a/community-adders/unplugin-icons.ts +++ b/community-adders/unplugin-icons.ts @@ -1,10 +1,5 @@ import type { CommunityAdder } from '../packages/adders/_config/community.ts'; export default { - name: 'unplugin-icons', - description: 'Access thousands of icons as components on-demand universally', - category: 'Icon', - npm: 'unplugin-icons-svelte-integration', - repo: 'https://github.com/owner-name/repo-name', - website: 'https://github.com/unplugin/unplugin-icons' + id: 'unplugin-icons-svelte-integration' } satisfies CommunityAdder; diff --git a/package.json b/package.json index 63fabdfe..1c24e0c2 100644 --- a/package.json +++ b/package.json @@ -5,12 +5,12 @@ "private": true, "type": "module", "scripts": { - "check": "pnpm -r check", - "lint": "pnpm -r lint && eslint --cache --cache-location node_modules/.eslintcache", - "format": "pnpm -r format", + "check": "pnpm --parallel check", + "lint": "pnpm --parallel lint && eslint --cache --cache-location node_modules/.eslintcache", + "format": "pnpm --parallel format", "dev": "rollup --config --watch", "build": "rollup -c", - "test": "pnpm -r test", + "test": "pnpm --parallel test", "changeset:publish": "changeset publish" }, "devDependencies": { diff --git a/packages/adders/_config/categories.ts b/packages/adders/_config/categories.ts deleted file mode 100644 index 1dd8d0c4..00000000 --- a/packages/adders/_config/categories.ts +++ /dev/null @@ -1,16 +0,0 @@ -export type Category = (typeof categories)[number]; -export type CommunityCategory = (typeof communityCategories)[number]; - -export type AdderCategories = Record; - -// the order defined here is how it'll be shown in the prompt -export const categories = [ - 'Code Quality', - 'Testing', - 'CSS', - 'Database', - 'Auth', - 'Additional Functionality' -] as const; - -export const communityCategories = ['Icon'] as const; diff --git a/packages/adders/_config/community.ts b/packages/adders/_config/community.ts index 182bb31b..dc0cfd57 100644 --- a/packages/adders/_config/community.ts +++ b/packages/adders/_config/community.ts @@ -1,12 +1,5 @@ -import type { Category, CommunityCategory } from './categories.ts'; - export type CommunityAdder = { - name: string; - description: string; - category: Category | CommunityCategory; - npm: string; - repo: string; - website: string; + id: string; // the npm package name }; /** EVALUATED AT BUILD TIME */ diff --git a/packages/adders/_config/index.ts b/packages/adders/_config/index.ts index 27f4c5d6..80b647a8 100644 --- a/packages/adders/_config/index.ts +++ b/packages/adders/_config/index.ts @@ -1,8 +1,2 @@ -export { adderIds, adderCategories, getAdderDetails } from './official.ts'; -export { - categories, - communityCategories, - type Category, - type CommunityCategory -} from './categories.ts'; +export { officialAdders, getAdderDetails } from './official.ts'; export { getCommunityAdder, communityAdderIds } from './community.ts'; diff --git a/packages/adders/_config/official.ts b/packages/adders/_config/official.ts index 07cab770..9fb704b4 100644 --- a/packages/adders/_config/official.ts +++ b/packages/adders/_config/official.ts @@ -1,7 +1,5 @@ -import type { AdderCategories, Category } from './categories.ts'; -import type { AdderWithoutExplicitArgs, Adder } from '@sveltejs/cli-core'; +import type { AdderWithoutExplicitArgs } from '@sveltejs/cli-core'; -// adders import drizzle from '../drizzle/index.ts'; import eslint from '../eslint/index.ts'; import lucia from '../lucia/index.ts'; @@ -14,33 +12,26 @@ import storybook from '../storybook/index.ts'; import tailwindcss from '../tailwindcss/index.ts'; import vitest from '../vitest/index.ts'; -const categories: Record>> = { - 'Code Quality': [prettier, eslint], - Testing: [vitest, playwright], - CSS: [tailwindcss], - Database: [drizzle], - Auth: [lucia], - 'Additional Functionality': [storybook, paraglide, mdsvex, routify] -}; - -export const adderCategories: AdderCategories = getCategoriesById(); - -function getCategoriesById(): AdderCategories { - const adderCategories: any = {}; - for (const [key, adders] of Object.entries(categories)) { - adderCategories[key] = adders.map((a) => a.id); - } - return adderCategories; -} - -export const adderIds: string[] = Object.values(adderCategories).flatMap((x) => x); - -const adderDetails = Object.values(categories).flat(); - -export function getAdderDetails(name: string): AdderWithoutExplicitArgs { - const details = adderDetails.find((a) => a.id === name); +// The order of adders here determines the order they are displayed inside the CLI +// We generally try to order them by perceived popularity +export const officialAdders = [ + prettier, + eslint, + vitest, + playwright, + tailwindcss, + drizzle, + lucia, + mdsvex, + paraglide, + storybook, + routify +]; + +export function getAdderDetails(id: string): AdderWithoutExplicitArgs { + const details = officialAdders.find((a) => a.id === id); if (!details) { - throw new Error(`Invalid adder name: ${name}`); + throw new Error(`Invalid adder: ${id}`); } return details as AdderWithoutExplicitArgs; diff --git a/packages/adders/drizzle/index.ts b/packages/adders/drizzle/index.ts index 8b651969..d396b2e3 100644 --- a/packages/adders/drizzle/index.ts +++ b/packages/adders/drizzle/index.ts @@ -65,10 +65,8 @@ export const options = defineAdderOptions({ export default defineAdder({ id: 'drizzle', - name: 'Drizzle', - description: 'Headless ORM for NodeJS, TypeScript and JavaScript', environments: { svelte: false, kit: true }, - documentation: 'https://orm.drizzle.team/docs/overview', + homepage: 'https://orm.drizzle.team', options, packages: [ { name: 'drizzle-orm', version: '^0.33.0', dev: false }, diff --git a/packages/adders/eslint/index.ts b/packages/adders/eslint/index.ts index 00aede29..086b722f 100644 --- a/packages/adders/eslint/index.ts +++ b/packages/adders/eslint/index.ts @@ -16,10 +16,8 @@ import { parseJson, parseScript } from '@sveltejs/cli-core/parsers'; export default defineAdder({ id: 'eslint', - name: 'ESLint', - description: 'A configurable JavaScript linter', environments: { svelte: true, kit: true }, - documentation: 'https://eslint.org', + homepage: 'https://eslint.org', options: {}, packages: [ { name: 'eslint', version: '^9.7.0', dev: true }, diff --git a/packages/adders/lucia/index.ts b/packages/adders/lucia/index.ts index fd85e4c6..9b5fcd4e 100644 --- a/packages/adders/lucia/index.ts +++ b/packages/adders/lucia/index.ts @@ -39,10 +39,8 @@ export const options = defineAdderOptions({ export default defineAdder({ id: 'lucia', - name: 'Lucia', - description: 'An auth library that abstracts away the complexity of handling sessions', environments: { svelte: false, kit: true }, - documentation: 'https://lucia-auth.com', + homepage: 'https://lucia-next.pages.dev', options, packages: [ { name: 'lucia', version: '^3.2.0', dev: false }, diff --git a/packages/adders/mdsvex/index.ts b/packages/adders/mdsvex/index.ts index 9157aefc..33316fe3 100644 --- a/packages/adders/mdsvex/index.ts +++ b/packages/adders/mdsvex/index.ts @@ -4,10 +4,8 @@ import { parseScript } from '@sveltejs/cli-core/parsers'; export default defineAdder({ id: 'mdsvex', - name: 'mdsvex', - description: 'svelte in markdown', environments: { svelte: true, kit: true }, - documentation: 'https://mdsvex.pngwn.io/docs', + homepage: 'https://mdsvex.pngwn.io', options: {}, packages: [{ name: 'mdsvex', version: '^0.11.2', dev: true }], files: [ diff --git a/packages/adders/paraglide/index.ts b/packages/adders/paraglide/index.ts index 4ca4f1c2..7f9862f9 100644 --- a/packages/adders/paraglide/index.ts +++ b/packages/adders/paraglide/index.ts @@ -63,10 +63,8 @@ export const options = defineAdderOptions({ export default defineAdder({ id: 'paraglide', - name: 'Paraglide', - description: 'Typesafe i18n with localised routing', environments: { svelte: false, kit: true }, - documentation: 'https://inlang.com/m/dxnzrydw/paraglide-sveltekit-i18n', + homepage: 'https://inlang.com', options, packages: [ { diff --git a/packages/adders/playwright/index.ts b/packages/adders/playwright/index.ts index 69ea0c03..e05251ed 100644 --- a/packages/adders/playwright/index.ts +++ b/packages/adders/playwright/index.ts @@ -6,10 +6,8 @@ import { parseJson, parseScript } from '@sveltejs/cli-core/parsers'; export default defineAdder({ id: 'playwright', - name: 'Playwright', - description: 'A testing framework for end-to-end testing', environments: { svelte: true, kit: true }, - documentation: 'https://playwright.dev', + homepage: 'https://playwright.dev', options: {}, packages: [{ name: '@playwright/test', version: '^1.45.3', dev: true }], files: [ diff --git a/packages/adders/prettier/index.ts b/packages/adders/prettier/index.ts index 860c12bd..9be7b903 100644 --- a/packages/adders/prettier/index.ts +++ b/packages/adders/prettier/index.ts @@ -4,10 +4,8 @@ import { parseJson } from '@sveltejs/cli-core/parsers'; export default defineAdder({ id: 'prettier', - name: 'Prettier', - description: 'An opinionated code formatter', environments: { svelte: true, kit: true }, - documentation: 'https://prettier.io', + homepage: 'https://prettier.io', options: {}, packages: [ { name: 'prettier', version: '^3.3.2', dev: true }, diff --git a/packages/adders/routify/index.ts b/packages/adders/routify/index.ts index 58962f93..4a30f254 100644 --- a/packages/adders/routify/index.ts +++ b/packages/adders/routify/index.ts @@ -5,10 +5,8 @@ import { parseScript, parseSvelte } from '@sveltejs/cli-core/parsers'; export default defineAdder({ id: 'routify', - name: 'Routify', - description: 'The Router that Grows With You', environments: { svelte: true, kit: false }, - documentation: 'https://routify.dev', + homepage: 'https://routify.dev', options: {}, packages: [{ name: '@roxi/routify', version: 'next', dev: true }], files: [ diff --git a/packages/adders/storybook/index.ts b/packages/adders/storybook/index.ts index 54ec98c6..9a76cbef 100644 --- a/packages/adders/storybook/index.ts +++ b/packages/adders/storybook/index.ts @@ -2,10 +2,8 @@ import { defineAdder } from '@sveltejs/cli-core'; export default defineAdder({ id: 'storybook', - name: 'Storybook', - description: 'Build UIs without the grunt work', environments: { kit: true, svelte: true }, - documentation: 'https://storybook.js.org/docs/get-started', + homepage: 'https://storybook.js.org', options: {}, packages: [], scripts: [ diff --git a/packages/adders/tailwindcss/index.ts b/packages/adders/tailwindcss/index.ts index 614cad01..63c9a595 100644 --- a/packages/adders/tailwindcss/index.ts +++ b/packages/adders/tailwindcss/index.ts @@ -16,10 +16,8 @@ export const options = defineAdderOptions({ export default defineAdder({ id: 'tailwindcss', alias: 'tailwind', - name: 'Tailwind CSS', - description: 'Rapidly build modern websites without ever leaving your HTML', environments: { svelte: true, kit: true }, - documentation: 'https://tailwindcss.com/docs', + homepage: 'https://tailwindcss.com', options, packages: [ { name: 'tailwindcss', version: '^3.4.9', dev: true }, diff --git a/packages/adders/vitest/index.ts b/packages/adders/vitest/index.ts index 2a991560..47706ee2 100644 --- a/packages/adders/vitest/index.ts +++ b/packages/adders/vitest/index.ts @@ -4,10 +4,8 @@ import { parseJson, parseScript } from '@sveltejs/cli-core/parsers'; export default defineAdder({ id: 'vitest', - name: 'Vitest', - description: 'A testing framework powered by Vite', environments: { svelte: true, kit: true }, - documentation: 'https://vitest.dev', + homepage: 'https://vitest.dev', options: {}, packages: [{ name: 'vitest', version: '^2.0.4', dev: true }], files: [ diff --git a/packages/cli/commands/add/index.ts b/packages/cli/commands/add/index.ts index 3c0f27a4..3ceb0ec4 100644 --- a/packages/cli/commands/add/index.ts +++ b/packages/cli/commands/add/index.ts @@ -9,9 +9,7 @@ import * as pkg from 'empathic/package'; import { resolveCommand } from 'package-manager-detector'; import pc from 'picocolors'; import { - adderCategories, - categories, - adderIds, + officialAdders, getAdderDetails, communityAdderIds, getCommunityAdder @@ -39,8 +37,7 @@ const OptionsSchema = v.strictObject({ }); type Options = v.InferOutput; -const adderDetails = adderIds.map((id) => getAdderDetails(id)); -const aliases = adderDetails.map((c) => c.alias).filter((v) => v !== undefined); +const aliases = officialAdders.map((c) => c.alias).filter((v) => v !== undefined); const addersOptions = getAdderOptionFlags(); const communityDetails: AdderWithoutExplicitArgs[] = []; @@ -71,16 +68,18 @@ export const add = new Command('add') process.exit(1); } - const adders = v.parse(AddersSchema, adderArgs); + const specifiedAdders = v.parse(AddersSchema, adderArgs); const options = v.parse(OptionsSchema, opts); - - const invalidAdders = adders.filter((a) => !adderIds.includes(a) && !aliases.includes(a)); + const adderIds = officialAdders.map((adder) => adder.id); + const invalidAdders = specifiedAdders.filter( + (a) => !adderIds.includes(a) && !aliases.includes(a) + ); if (invalidAdders.length > 0) { console.error(`Invalid adders specified: ${invalidAdders.join(', ')}`); process.exit(1); } - const selectedAdders = transformAliases(adders); + const selectedAdders = transformAliases(specifiedAdders); common.runCommand(async () => { await runAddCommand(options, selectedAdders); }); @@ -92,8 +91,8 @@ for (const option of addersOptions) { } type SelectedAdder = { type: 'official' | 'community'; adder: AdderWithoutExplicitArgs }; -export async function runAddCommand(options: Options, adders: string[]): Promise { - const selectedAdders: SelectedAdder[] = adders.map((id) => ({ +export async function runAddCommand(options: Options, selectedAdderIds: string[]): Promise { + const selectedAdders: SelectedAdder[] = selectedAdderIds.map((id) => ({ type: 'official', adder: getAdderDetails(id) })); @@ -169,31 +168,21 @@ export async function runAddCommand(options: Options, adders: string[]): Promise } } - type AdderChoices = Record>; - // we'll let the user choose community adders when `--community` is specified without args if (options.community === true) { - const promptOptions: AdderChoices = {}; const communityAdders = await Promise.all( - communityAdderIds.map(async (id) => ({ id, ...(await getCommunityAdder(id)) })) + communityAdderIds.map(async (id) => await getCommunityAdder(id)) ); - const categories = new Set(communityAdders.map((adder) => adder.category)); - for (const category of categories) { - promptOptions[category] = communityAdders - .filter((adder) => adder.category === category) - .map((adder) => ({ - value: adder.id, - label: adder.name, - hint: adder.repo - })); - } + const promptOptions = communityAdders.map((adder) => ({ + value: adder.id, + label: adder.id, + hint: 'https://www.npmjs.com/package/' + adder.id + })); - const selected = await p.groupMultiselect({ + const selected = await p.multiselect({ message: 'Which community tools would you like to add to your project?', options: promptOptions, - spacedGroups: true, - selectableGroups: false, required: false }); @@ -231,14 +220,7 @@ export async function runAddCommand(options: Options, adders: string[]): Promise start('Resolving community adder packages'); const pkgs = await Promise.all( adders.map(async (id) => { - const adder = await getCommunityAdder(id).catch(() => undefined); - const packageName = adder?.npm ?? id; - const details = await getPackageJSON({ cwd: options.cwd, packageName }); - return { - ...details, - // prioritize community adder defined repo urls - repo: adder?.repo ?? details.repo - }; + return await getPackageJSON({ cwd: options.cwd, packageName: id }); }) ); stop('Resolved community adder packages'); @@ -281,36 +263,25 @@ export async function runAddCommand(options: Options, adders: string[]): Promise // prompt which adders to apply if (selectedAdders.length === 0) { - const adderOptions: AdderChoices = {}; const workspace = createWorkspace(options.cwd); const projectType = workspace.kit ? 'kit' : 'svelte'; - for (const category of categories) { - const adderIds = adderCategories[category]; - const categoryOptions = adderIds - .map((id) => { - const config = getAdderDetails(id); - // we'll only display adders within their respective project types - if (projectType === 'kit' && !config.environments.kit) return; - if (projectType === 'svelte' && !config.environments.svelte) return; - - return { - label: config.name, - value: config.id, - hint: config.documentation - }; - }) - .filter((c) => !!c); - - if (categoryOptions.length > 0) { - adderOptions[category] = categoryOptions; - } - } + const adderOptions = officialAdders + .map((adder) => { + // we'll only display adders within their respective project types + if (projectType === 'kit' && !adder.environments.kit) return; + if (projectType === 'svelte' && !adder.environments.svelte) return; + + return { + label: adder.id, + value: adder.id, + hint: adder.homepage + }; + }) + .filter((a) => !!a); - const selected = await p.groupMultiselect({ + const selected = await p.multiselect({ message: 'What would you like to add to your project?', options: adderOptions, - spacedGroups: true, - selectableGroups: false, required: false }); if (p.isCancel(selected)) { @@ -323,14 +294,13 @@ export async function runAddCommand(options: Options, adders: string[]): Promise // add inter-adder dependencies for (const { adder } of selectedAdders) { - const name = adder.name; const dependents = adder.dependsOn?.filter((dep) => !selectedAdders.some((a) => a.adder.id === dep)) ?? []; const workspace = createWorkspace(options.cwd); for (const depId of dependents) { - const dependent = adderDetails.find((a) => a.id === depId); - if (!dependent) throw new Error(`Adder '${name}' depends on an invalid '${depId}'`); + const dependent = officialAdders.find((a) => a.id === depId) as AdderWithoutExplicitArgs; + if (!dependent) throw new Error(`Adder '${adder.id}' depends on an invalid '${depId}'`); // check if the dependent adder has already been installed let installed = false; @@ -343,7 +313,7 @@ export async function runAddCommand(options: Options, adders: string[]): Promise // prompt to install the dependent const install = await p.confirm({ - message: `The ${pc.bold(pc.cyan(name))} adder requires ${pc.bold(pc.cyan(depId))} to also be installed. ${pc.green('Install it?')}` + message: `The ${pc.bold(pc.cyan(adder.id))} adder requires ${pc.bold(pc.cyan(depId))} to also be installed. ${pc.green('Install it?')}` }); if (install !== true) { p.cancel('Operation cancelled.'); @@ -388,7 +358,7 @@ export async function runAddCommand(options: Options, adders: string[]): Promise // ask remaining questions for (const { adder, type } of selectedAdders) { const adderId = adder.id; - const questionPrefix = selectedAdders.length > 1 ? `${adder.name}: ` : ''; + const questionPrefix = selectedAdders.length > 1 ? `${adder.id}: ` : ''; let values: QuestionValues = {}; if (type === 'official') { @@ -483,7 +453,7 @@ export async function runAddCommand(options: Options, adders: string[]): Promise .map(({ adder }) => { let adderMessage = ''; if (selectedAdders.length > 1) { - adderMessage = `${pc.green(adder.name)}:\n`; + adderMessage = `${pc.green(adder.id)}:\n`; } const adderNextSteps = adder.nextSteps!({ @@ -552,8 +522,7 @@ export async function installAdders({ await config.postInstall?.(workspace); if (config.scripts && config.scripts.length > 0) { - const name = config.name; - p.log.step(`Running external command ${pc.gray(`(${name})`)}`); + p.log.step(`Running external command ${pc.gray(`(${config.id})`)}`); for (const script of config.scripts) { if (script.condition?.(workspace) === false) continue; @@ -572,7 +541,7 @@ export async function installAdders({ } } - p.log.success(`Finished running ${name}`); + p.log.success(`Finished running ${config.id}`); } } @@ -586,7 +555,7 @@ function transformAliases(ids: string[]): string[] { const set = new Set(); for (const id of ids) { if (aliases.includes(id)) { - const adder = adderDetails.find((a) => a.alias === id)!; + const adder = officialAdders.find((a) => a.alias === id)!; set.add(adder.id); } else { set.add(id); @@ -597,7 +566,8 @@ function transformAliases(ids: string[]): string[] { function getAdderOptionFlags(): Option[] { const options: Option[] = []; - for (const id of adderIds) { + for (const adder of officialAdders) { + const id = adder.id; const details = getAdderDetails(id); if (Object.values(details.options).length === 0) continue; diff --git a/packages/cli/common.ts b/packages/cli/common.ts index f141abda..829030bc 100644 --- a/packages/cli/common.ts +++ b/packages/cli/common.ts @@ -169,7 +169,7 @@ export function getGlobalPreconditions( } const messages = addersForInvalidEnvironment.map( - (a) => `"${a.name}" does not support "${projectType}"` + (a) => `"${a.id}" does not support "${projectType}"` ); return { success: false, message: messages.join(' / ') }; } diff --git a/packages/core/adder/config.ts b/packages/core/adder/config.ts index 2d2b0ae4..f19cb146 100644 --- a/packages/core/adder/config.ts +++ b/packages/core/adder/config.ts @@ -28,10 +28,8 @@ export type Scripts = { export type Adder = { id: string; alias?: string; - name: string; - description: string; environments: Environments; - documentation?: string; + homepage?: string; options: Args; dependsOn?: string[]; packages: Array>;