From f7f41d8c111038f71e2a0760a048f26d03d84ce2 Mon Sep 17 00:00:00 2001 From: jycouet Date: Sun, 23 Nov 2025 09:54:36 +0100 Subject: [PATCH 1/4] add dependencyVersion also to createVirtualWorkspace --- packages/cli/commands/add/workspace.ts | 42 +++++++++++++++----------- packages/cli/commands/create.ts | 18 +++++++++-- 2 files changed, 39 insertions(+), 21 deletions(-) diff --git a/packages/cli/commands/add/workspace.ts b/packages/cli/commands/add/workspace.ts index 4cb47cb5..d6c8068a 100644 --- a/packages/cli/commands/add/workspace.ts +++ b/packages/cli/commands/add/workspace.ts @@ -13,6 +13,7 @@ type CreateWorkspaceOptions = { packageManager?: PackageManager; override?: { kit?: Workspace['kit']; + dependencies: Record; }; }; export async function createWorkspace({ @@ -38,26 +39,31 @@ export async function createWorkspace({ : commonFilePaths.svelteConfig; let dependencies: Record = {}; - let directory = resolvedCwd; - const workspaceRoot = findWorkspaceRoot(directory); - const { root } = path.parse(directory); - while ( - // we have a directory - directory && - // we are still in the workspace (including the workspace root) - directory.length >= workspaceRoot.length - ) { - if (fs.existsSync(path.join(directory, commonFilePaths.packageJson))) { - const { data: packageJson } = getPackageJson(directory); - dependencies = { - ...packageJson.devDependencies, - ...packageJson.dependencies, - ...dependencies - }; + if (override?.dependencies) { + dependencies = override.dependencies; + } else { + let directory = resolvedCwd; + const workspaceRoot = findWorkspaceRoot(directory); + const { root } = path.parse(directory); + while ( + // we have a directory + directory && + // we are still in the workspace (including the workspace root) + directory.length >= workspaceRoot.length + ) { + if (fs.existsSync(path.join(directory, commonFilePaths.packageJson))) { + const { data: packageJson } = getPackageJson(directory); + dependencies = { + ...packageJson.devDependencies, + ...packageJson.dependencies, + ...dependencies + }; + } + if (root === directory) break; // we are at the root root, let's stop + directory = path.dirname(directory); } - if (root === directory) break; // we are at the root root, let's stop - directory = path.dirname(directory); } + // removes the version ranges (e.g. `^` is removed from: `^9.0.0`) for (const [key, value] of Object.entries(dependencies)) { dependencies[key] = value.replaceAll(/[^\d|.]/g, ''); diff --git a/packages/cli/commands/create.ts b/packages/cli/commands/create.ts index 1ec4c6c5..0aa94135 100644 --- a/packages/cli/commands/create.ts +++ b/packages/cli/commands/create.ts @@ -37,8 +37,9 @@ import { sanitizeAddons, type SelectedAddon } from './add/index.ts'; -import { commonFilePaths } from './add/utils.ts'; +import { commonFilePaths, getPackageJson } from './add/utils.ts'; import { createWorkspace } from './add/workspace.ts'; +import { dist } from '../../create/utils.ts'; const langs = ['ts', 'jsdoc'] as const; const langMap: Record = { @@ -363,7 +364,10 @@ export async function createVirtualWorkspace({ packageManager, type }: CreateVirtualWorkspaceOptions): Promise { - const override: { kit?: Workspace['kit'] } = {}; + const override: { + kit?: Workspace['kit']; + dependencies: Record; + } = { dependencies: {} }; // These are our default project structure so we know that it's a kit project if (template === 'minimal' || template === 'demo' || template === 'library') { @@ -373,12 +377,20 @@ export async function createVirtualWorkspace({ }; } + // Let's read the package.json of the template we will use and add the dependencies to the override + const templatePackageJsonPath = dist(`templates/${template}`); + const { data: packageJson } = getPackageJson(templatePackageJsonPath); + override.dependencies = { + ...packageJson.devDependencies, + ...packageJson.dependencies, + ...override.dependencies + }; + const tentativeWorkspace = await createWorkspace({ cwd, packageManager, override }); const virtualWorkspace: Workspace = { ...tentativeWorkspace, typescript: type === 'typescript', - dependencyVersion: () => undefined, files: { ...tentativeWorkspace.files, viteConfig: type === 'typescript' ? commonFilePaths.viteConfigTS : commonFilePaths.viteConfig, From d1b8b54360bf7dd1beb3c01a89abfb2cd357a895 Mon Sep 17 00:00:00 2001 From: jycouet Date: Sun, 23 Nov 2025 18:06:24 +0100 Subject: [PATCH 2/4] add changeset --- .changeset/swift-dingos-boil.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/swift-dingos-boil.md diff --git a/.changeset/swift-dingos-boil.md b/.changeset/swift-dingos-boil.md new file mode 100644 index 00000000..f6d3e7cc --- /dev/null +++ b/.changeset/swift-dingos-boil.md @@ -0,0 +1,5 @@ +--- +'sv': patch +--- + +fix(cli): `dependencyVersion` is now well managed in create commands From 0657c618821cafea87b79624037b06a2013e08d2 Mon Sep 17 00:00:00 2001 From: jycouet Date: Sun, 23 Nov 2025 18:07:07 +0100 Subject: [PATCH 3/4] typo --- .changeset/swift-dingos-boil.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/swift-dingos-boil.md b/.changeset/swift-dingos-boil.md index f6d3e7cc..aaece530 100644 --- a/.changeset/swift-dingos-boil.md +++ b/.changeset/swift-dingos-boil.md @@ -2,4 +2,4 @@ 'sv': patch --- -fix(cli): `dependencyVersion` is now well managed in create commands +fix(cli): `dependencyVersion` is now well managed in `sv create` From d98fe95e9164427d878fa1a3dedc3d7cb31f615c Mon Sep 17 00:00:00 2001 From: "jyc.dev" Date: Mon, 24 Nov 2025 18:33:23 +0100 Subject: [PATCH 4/4] Update .changeset/swift-dingos-boil.md Co-authored-by: Manuel <30698007+manuel3108@users.noreply.github.com> --- .changeset/swift-dingos-boil.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/swift-dingos-boil.md b/.changeset/swift-dingos-boil.md index aaece530..8a3a2616 100644 --- a/.changeset/swift-dingos-boil.md +++ b/.changeset/swift-dingos-boil.md @@ -2,4 +2,4 @@ 'sv': patch --- -fix(cli): `dependencyVersion` is now well managed in `sv create` +fix(cli): `dependencyVersion` is now properly populated during `sv create`