Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .changeset/stupid-crews-crash.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
"create-cloudflare": patch
---

Graduate sveltekit + workers assets template from experimental

You no longer need to pass in the --experimental flag to access this template.
Original file line number Diff line number Diff line change
Expand Up @@ -118,37 +118,5 @@ export default function getFrameworkTestConfigExperimental() {
expectedText: "Hello world",
},
},
svelte: {
promptHandlers: [
{
matcher: /Which template would you like/,
input: [keys.enter],
},
{
matcher: /Add type checking with Typescript/,
input: [keys.down, keys.enter],
},
{
matcher: /What would you like to add to your project/,
input: [keys.enter],
},
{
matcher:
/Which package manager do you want to install dependencies with/,
input: [keys.enter],
},
],
testCommitMessage: true,
unsupportedOSs: ["win32"],
unsupportedPms: ["npm"],
verifyDeploy: {
route: "/",
expectedText: "SvelteKit app",
},
verifyPreview: {
route: "/test",
expectedText: "C3_TEST",
},
},
};
}
Original file line number Diff line number Diff line change
Expand Up @@ -423,7 +423,8 @@ export default function getFrameworkTestConfig(pm: string) {
expectedText: "Hello world",
},
},
svelte: {
"svelte:pages": {
argv: ["--platform", "pages"],
promptHandlers: [
{
matcher: /Which template would you like/,
Expand Down Expand Up @@ -461,6 +462,39 @@ export default function getFrameworkTestConfig(pm: string) {
expectedText: "C3_TEST",
},
},
"svelte:workers": {
argv: ["--platform", "workers"],
promptHandlers: [
{
matcher: /Which template would you like/,
input: [keys.enter],
},
{
matcher: /Add type checking with Typescript/,
input: [keys.down, keys.enter],
},
{
matcher: /What would you like to add to your project/,
input: [keys.enter],
},
{
matcher:
/Which package manager do you want to install dependencies with/,
input: [keys.enter],
},
],
testCommitMessage: true,
unsupportedOSs: ["win32"],
unsupportedPms: ["npm"],
verifyDeploy: {
route: "/",
expectedText: "SvelteKit app",
},
verifyPreview: {
route: "/test",
expectedText: "C3_TEST",
},
},
"vue:pages": {
argv: ["--platform", "pages"],
testCommitMessage: true,
Expand Down
2 changes: 0 additions & 2 deletions packages/create-cloudflare/src/templates.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ import nextTemplateExperimental from "templates-experimental/next/c3";
import qwikTemplateExperimental from "templates-experimental/qwik/c3";
import remixTemplateExperimental from "templates-experimental/remix/c3";
import solidTemplateExperimental from "templates-experimental/solid/c3";
import svelteTemplateExperimental from "templates-experimental/svelte/c3";
import analogTemplate from "templates/analog/c3";
import angularTemplate from "templates/angular/c3";
import astroTemplate from "templates/astro/c3";
Expand Down Expand Up @@ -180,7 +179,6 @@ export function getFrameworkMap({ experimental = false }): TemplateMap {
qwik: qwikTemplateExperimental,
remix: remixTemplateExperimental,
solid: solidTemplateExperimental,
svelte: svelteTemplateExperimental,
};
} else {
return {
Expand Down

This file was deleted.

159 changes: 5 additions & 154 deletions packages/create-cloudflare/templates/svelte/c3.ts
Original file line number Diff line number Diff line change
@@ -1,158 +1,9 @@
import { existsSync } from "node:fs";
import { platform } from "node:os";
import { logRaw, updateStatus } from "@cloudflare/cli";
import { blue, brandColor, dim } from "@cloudflare/cli/colors";
import { runFrameworkGenerator } from "frameworks/index";
import { transformFile } from "helpers/codemod";
import { usesTypescript } from "helpers/files";
import { detectPackageManager } from "helpers/packageManagers";
import { installPackages } from "helpers/packages";
import * as recast from "recast";
import type { TemplateConfig } from "../../src/templates";
import type { C3Context, PackageJson } from "types";
import pages from "./pages/c3";
import workers from "./workers/c3";
import type { MultiPlatformTemplateConfig } from "../../src/templates";

const { npm } = detectPackageManager();

const generate = async (ctx: C3Context) => {
await runFrameworkGenerator(ctx, ["create", ctx.project.name]);

logRaw("");
};

const configure = async (ctx: C3Context) => {
// Install the adapter
const pkg = `@sveltejs/adapter-cloudflare`;
await installPackages([pkg], {
dev: true,
startText: "Adding the Cloudflare Pages adapter",
doneText: `${brandColor(`installed`)} ${dim(pkg)}`,
});

updateSvelteConfig();
updatePlaywrightConfig(usesTypescript(ctx));
updateTypeDefinitions(ctx);
};

const updateSvelteConfig = () => {
// All we need to do is change the import statement in svelte.config.js
updateStatus(`Changing adapter in ${blue("svelte.config.js")}`);

transformFile("svelte.config.js", {
visitImportDeclaration: function (n) {
// importSource is the `x` in `import y from "x"`
const importSource = n.value.source;
if (importSource.value === "@sveltejs/adapter-auto") {
importSource.value = "@sveltejs/adapter-cloudflare";
}

// stop traversing this node
return false;
},
});
};

const updatePlaywrightConfig = (shouldUseTypescript: boolean) => {
const filePath = `playwright.config.${shouldUseTypescript ? "ts" : "js"}`;
if (!existsSync(filePath)) {
return;
}

updateStatus(`Changing webServer port in ${blue(filePath)}`);

transformFile(filePath, {
visitObjectExpression: function (n) {
const portProp = n.node.properties.find((prop) => {
if (!("key" in prop) || !("name" in prop.key)) {
return false;
}

return prop.key.name === "port";
});

if (!portProp || !("value" in portProp) || !("value" in portProp.value)) {
return this.traverse(n);
}

portProp.value.value = 8788;
return false;
},
});
};

const updateTypeDefinitions = (ctx: C3Context) => {
if (!usesTypescript(ctx)) {
return;
}

updateStatus(`Updating global type definitions in ${blue("app.d.ts")}`);

const b = recast.types.builders;

transformFile("src/app.d.ts", {
visitTSModuleDeclaration(n) {
if (n.value.id.name === "App" && n.node.body) {
const moduleBlock = n.node
.body as recast.types.namedTypes.TSModuleBlock;

const platformInterface = b.tsInterfaceDeclaration(
b.identifier("Platform"),
b.tsInterfaceBody([
b.tsPropertySignature(
b.identifier("env"),
b.tsTypeAnnotation(b.tsTypeReference(b.identifier("Env"))),
),
b.tsPropertySignature(
b.identifier("cf"),
b.tsTypeAnnotation(
b.tsTypeReference(b.identifier("CfProperties")),
),
),
b.tsPropertySignature(
b.identifier("ctx"),
b.tsTypeAnnotation(
b.tsTypeReference(b.identifier("ExecutionContext")),
),
),
]),
);

moduleBlock.body.unshift(platformInterface);
}

this.traverse(n);
},
});
};

const config: TemplateConfig = {
configVersion: 1,
id: "svelte",
frameworkCli: "sv",
const config: MultiPlatformTemplateConfig = {
displayName: "SvelteKit",
platform: "pages",
copyFiles: {
path: "./templates",
},
generate,
configure,
transformPackageJson: async (original: PackageJson, ctx: C3Context) => {
let scripts: Record<string, string> = {
preview: `${npm} run build && wrangler pages dev`,
deploy: `${npm} run build && wrangler pages deploy`,
};

if (usesTypescript(ctx)) {
const mv = platform() === "win32" ? "move" : "mv";
scripts = {
...scripts,
"cf-typegen": `wrangler types && ${mv} worker-configuration.d.ts src/`,
};
}

return { scripts };
},
devScript: "dev",
deployScript: "deploy",
previewScript: "preview",
platformVariants: { pages, workers },
};
export default config;
Loading
Loading