Skip to content

Commit b7c6bae

Browse files
jculveyJacobMGEvans
andauthoredMay 16, 2023
[C3] Pin create-cloudflare framework dependencies to specific versions (#3232)
* Pin create-cloudflare framework dependencies to specific versions * Apply suggestions from code review Co-authored-by: Jacob M-G Evans <27247160+JacobMGEvans@users.noreply.github.com> * Prettier fix on frameworks/vesionMap.json --------- Co-authored-by: Jacob M-G Evans <27247160+JacobMGEvans@users.noreply.github.com> Co-authored-by: Jacob M-G Evans <jacobmgevans@gmail.com>

File tree

15 files changed

+80
-14
lines changed

15 files changed

+80
-14
lines changed
 

‎packages/create-cloudflare/src/frameworks/angular/index.ts

+4-1
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,17 @@ import {
99
} from "helpers/command";
1010
import { readFile, readJSON, writeFile } from "helpers/files";
1111
import { spinner } from "helpers/interactive";
12+
import { getFrameworkVersion } from "../index";
1213
import type { PagesGeneratorContext, FrameworkConfig } from "types";
1314

1415
const { npx } = detectPackageManager();
1516

1617
const generate = async (ctx: PagesGeneratorContext) => {
18+
const version = getFrameworkVersion(ctx);
19+
1720
await runFrameworkGenerator(
1821
ctx,
19-
`${npx} @angular/cli@next new ${ctx.project.name} --standalone`
22+
`${npx} @angular/cli@${version} new ${ctx.project.name} --standalone`
2023
);
2124
};
2225

‎packages/create-cloudflare/src/frameworks/astro/index.ts

+4-1
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,17 @@ import {
77
runFrameworkGenerator,
88
} from "helpers/command";
99
import { compatDateFlag } from "helpers/files";
10+
import { getFrameworkVersion } from "../index";
1011
import type { PagesGeneratorContext, FrameworkConfig } from "types";
1112

1213
const { npx } = detectPackageManager();
1314

1415
const generate = async (ctx: PagesGeneratorContext) => {
16+
const version = getFrameworkVersion(ctx);
17+
1518
await runFrameworkGenerator(
1619
ctx,
17-
`${npx} create-astro@latest ${ctx.project.name} --no-install`
20+
`${npx} create-astro@${version} ${ctx.project.name} --no-install`
1821
);
1922

2023
logRaw(""); // newline

‎packages/create-cloudflare/src/frameworks/docusaurus/index.ts

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
import { detectPackageManager, runFrameworkGenerator } from "helpers/command";
22
import { compatDateFlag } from "helpers/files";
3+
import { getFrameworkVersion } from "../index";
34
import type { PagesGeneratorContext, FrameworkConfig } from "types";
45

56
const { npm } = detectPackageManager();
67

78
const generate = async (ctx: PagesGeneratorContext) => {
9+
const version = getFrameworkVersion(ctx);
10+
811
await runFrameworkGenerator(
912
ctx,
10-
`${npm} create docusaurus ${ctx.project.name} classic`
13+
`${npm} create docusaurus@${version} ${ctx.project.name} classic`
1114
);
1215
};
1316

‎packages/create-cloudflare/src/frameworks/gatsby/index.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { brandColor, dim } from "helpers/colors";
22
import { detectPackageManager, runFrameworkGenerator } from "helpers/command";
33
import { compatDateFlag } from "helpers/files";
44
import { confirmInput, textInput } from "helpers/interactive";
5+
import { getFrameworkVersion } from "../index";
56
import type { PagesGeneratorContext, FrameworkConfig } from "types";
67

78
const { npm, npx } = detectPackageManager();
@@ -29,9 +30,10 @@ const generate = async (ctx: PagesGeneratorContext) => {
2930
});
3031
}
3132

33+
const version = getFrameworkVersion(ctx);
3234
await runFrameworkGenerator(
3335
ctx,
34-
`${npx} gatsby new ${ctx.project.name} ${templateUrl}`
36+
`${npx} gatsby@${version} new ${ctx.project.name} ${templateUrl}`
3537
);
3638
};
3739

‎packages/create-cloudflare/src/frameworks/hono/index.ts

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
import { logRaw } from "helpers/cli";
22
import { detectPackageManager, runFrameworkGenerator } from "helpers/command";
3+
import { getFrameworkVersion } from "../index";
34
import type { PagesGeneratorContext, FrameworkConfig } from "types";
45

56
const { npx } = detectPackageManager();
67

78
const generate = async (ctx: PagesGeneratorContext) => {
9+
const version = getFrameworkVersion(ctx);
10+
811
await runFrameworkGenerator(
912
ctx,
10-
`${npx} create-hono@latest ${ctx.project.name} --template cloudflare-pages`
13+
`${npx} create-hono@${version} ${ctx.project.name} --template cloudflare-pages`
1114
);
1215

1316
logRaw(""); // newline

‎packages/create-cloudflare/src/frameworks/index.ts

+12-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { crash } from "helpers/cli";
12
import angular from "./angular";
23
import astro from "./astro";
34
import docusaurus from "./docusaurus";
@@ -10,8 +11,9 @@ import react from "./react";
1011
import remix from "./remix";
1112
import solid from "./solid";
1213
import svelte from "./svelte";
14+
import versionMap from "./versionMap.json";
1315
import vue from "./vue";
14-
import type { FrameworkConfig } from "types";
16+
import type { FrameworkConfig, PagesGeneratorContext } from "types";
1517

1618
export const FrameworkMap: Record<string, FrameworkConfig> = {
1719
angular,
@@ -29,6 +31,15 @@ export const FrameworkMap: Record<string, FrameworkConfig> = {
2931
vue,
3032
};
3133

34+
export const getFrameworkVersion = (ctx: PagesGeneratorContext) => {
35+
if (!ctx.framework) {
36+
return crash("Framework not specified.");
37+
}
38+
39+
const framework = ctx.framework.name as keyof typeof versionMap;
40+
return versionMap[framework];
41+
};
42+
3243
export const supportedFramework = (framework: string) => {
3344
return Object.keys(FrameworkMap).includes(framework);
3445
};

‎packages/create-cloudflare/src/frameworks/next/index.ts

+6-1
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,20 @@ import {
66
runFrameworkGenerator,
77
} from "helpers/command";
88
import { probePaths, usesTypescript, writeFile } from "helpers/files";
9+
import { getFrameworkVersion } from "../index";
910
import { apiHelloJs, apiHelloTs, nextConfigJs } from "./templates";
1011
import type { PagesGeneratorContext, FrameworkConfig } from "types";
1112

1213
const { npm, npx } = detectPackageManager();
1314

1415
const generate = async (ctx: PagesGeneratorContext) => {
1516
const projectName = ctx.project.name;
17+
const version = getFrameworkVersion(ctx);
1618

17-
await runFrameworkGenerator(ctx, `${npx} create-next-app ${projectName}`);
19+
await runFrameworkGenerator(
20+
ctx,
21+
`${npx} create-next-app@${version} ${projectName}`
22+
);
1823
};
1924

2025
const configure = async (ctx: PagesGeneratorContext) => {

‎packages/create-cloudflare/src/frameworks/nuxt/index.ts

+7-1
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,18 @@ import {
55
runFrameworkGenerator,
66
} from "helpers/command";
77
import { compatDateFlag } from "helpers/files";
8+
import { getFrameworkVersion } from "..";
89
import type { PagesGeneratorContext, FrameworkConfig } from "types";
910

1011
const { npx } = detectPackageManager();
1112

1213
const generate = async (ctx: PagesGeneratorContext) => {
13-
await runFrameworkGenerator(ctx, `${npx} nuxi init ${ctx.project.name}`);
14+
const version = getFrameworkVersion(ctx);
15+
16+
await runFrameworkGenerator(
17+
ctx,
18+
`${npx} nuxi@${version} init ${ctx.project.name}`
19+
);
1420

1521
logRaw(""); // newline
1622
};

‎packages/create-cloudflare/src/frameworks/qwik/index.ts

+4-1
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,19 @@ import {
66
runFrameworkGenerator,
77
} from "helpers/command";
88
import { compatDateFlag } from "helpers/files";
9+
import { getFrameworkVersion } from "../index";
910
import type { PagesGeneratorContext, FrameworkConfig } from "types";
1011

1112
const { npm, npx } = detectPackageManager();
1213

1314
const generate = async (ctx: PagesGeneratorContext) => {
15+
const version = getFrameworkVersion(ctx);
16+
1417
// TODO: make this interactive when its possible to specify the project name
1518
// to create-qwik in interactive mode
1619
await runFrameworkGenerator(
1720
ctx,
18-
`${npm} create qwik@latest basic ${ctx.project.name}`
21+
`${npm} create qwik@${version} basic ${ctx.project.name}`
1922
);
2023
};
2124

‎packages/create-cloudflare/src/frameworks/react/index.ts

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
11
import { logRaw } from "helpers/cli";
22
import { detectPackageManager, runFrameworkGenerator } from "helpers/command";
33
import { compatDateFlag } from "helpers/files";
4+
import { getFrameworkVersion } from "../index";
45
import type { PagesGeneratorContext, FrameworkConfig } from "types";
56

67
const { npm, npx } = detectPackageManager();
78

89
const generate = async (ctx: PagesGeneratorContext) => {
10+
const version = getFrameworkVersion(ctx);
11+
912
await runFrameworkGenerator(
1013
ctx,
11-
`${npx} create-react-app ${ctx.project.name}`
14+
`${npx} create-react-app@${version} ${ctx.project.name}`
1215
);
1316

1417
logRaw("");

‎packages/create-cloudflare/src/frameworks/remix/index.ts

+4-1
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,17 @@ import {
33
detectPackageManager,
44
runFrameworkGenerator,
55
} from "helpers/command.js";
6+
import { getFrameworkVersion } from "../index";
67
import type { PagesGeneratorContext, FrameworkConfig } from "types";
78

89
const { npm, npx } = detectPackageManager();
910

1011
const generate = async (ctx: PagesGeneratorContext) => {
12+
const version = getFrameworkVersion(ctx);
13+
1114
await runFrameworkGenerator(
1215
ctx,
13-
`${npx} create-remix@latest ${ctx.project.name} --template cloudflare-pages`
16+
`${npx} create-remix@${version} ${ctx.project.name} --template cloudflare-pages`
1417
);
1518

1619
logRaw(""); // newline

‎packages/create-cloudflare/src/frameworks/solid/index.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {
77
runFrameworkGenerator,
88
} from "helpers/command";
99
import { compatDateFlag, usesTypescript, writeFile } from "helpers/files";
10+
import { getFrameworkVersion } from "../index";
1011
import { viteConfig } from "./templates";
1112
import type { PagesGeneratorContext, FrameworkConfig } from "types";
1213

@@ -18,7 +19,8 @@ const generate = async (ctx: PagesGeneratorContext) => {
1819
process.chdir(ctx.project.path);
1920

2021
// Run the create-solid command
21-
await runFrameworkGenerator(ctx, `${npm} create solid@latest`);
22+
const version = getFrameworkVersion(ctx);
23+
await runFrameworkGenerator(ctx, `${npm} create solid@${version}`);
2224

2325
logRaw("");
2426
};

‎packages/create-cloudflare/src/frameworks/svelte/index.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,18 @@ import {
88
runFrameworkGenerator,
99
} from "helpers/command";
1010
import { compatDateFlag, usesTypescript } from "helpers/files";
11+
import { getFrameworkVersion } from "../index";
1112
import { platformInterface } from "./templates";
1213
import type * as recast from "recast";
1314
import type { PagesGeneratorContext, FrameworkConfig } from "types";
1415

1516
const { npm } = detectPackageManager();
1617

1718
const generate = async (ctx: PagesGeneratorContext) => {
19+
const version = getFrameworkVersion(ctx);
1820
await runFrameworkGenerator(
1921
ctx,
20-
`${npm} create svelte@latest ${ctx.project.name}`
22+
`${npm} create svelte@${version} ${ctx.project.name}`
2123
);
2224

2325
logRaw("");
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{
2+
"angular": "next",
3+
"astro": "3.1.5",
4+
"docusaurus": "2.4.1",
5+
"gatsby": "5.10.0",
6+
"hono": "0.2.0",
7+
"next": "13.3.4",
8+
"nuxt": "3.4.2",
9+
"qwik": "1.1.2",
10+
"react": "5.0.1",
11+
"remix": "1.16.0",
12+
"solid": "0.2.26",
13+
"svelte": "4.2.0",
14+
"vue": "3.6.4"
15+
}

‎packages/create-cloudflare/src/frameworks/vue/index.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
import { detectPackageManager, runFrameworkGenerator } from "helpers/command";
22
import { compatDateFlag } from "helpers/files";
3+
import { getFrameworkVersion } from "../index";
34
import type { PagesGeneratorContext, FrameworkConfig } from "types";
45

56
const { npm, npx } = detectPackageManager();
67

78
const generate = async (ctx: PagesGeneratorContext) => {
9+
const version = getFrameworkVersion(ctx);
810
await runFrameworkGenerator(
911
ctx,
10-
`${npx} create-vue@latest ${ctx.project.name}`
12+
`${npx} create-vue@${version} ${ctx.project.name}`
1113
);
1214
};
1315

0 commit comments

Comments
 (0)
Please sign in to comment.