create-vike 0.0.4 → 0.0.304

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (134) hide show
  1. package/.testRun.ts +118 -0
  2. package/boilerplate-react/.eslintrc.cjs +17 -0
  3. package/boilerplate-react/.test-dev.test.ts +2 -0
  4. package/boilerplate-react/.test-prod.test.ts +2 -0
  5. package/boilerplate-react/.testCiJob.json +1 -0
  6. package/boilerplate-react/_gitignore +2 -0
  7. package/boilerplate-react/package.json +27 -0
  8. package/boilerplate-react/pages/about/code.css +6 -0
  9. package/boilerplate-react/pages/about/index.page.jsx +14 -0
  10. package/{files/js/react → boilerplate-react}/pages/index/Counter.jsx +4 -4
  11. package/{files/js/react → boilerplate-react}/pages/index/index.page.jsx +3 -4
  12. package/boilerplate-react/renderer/Link.jsx +14 -0
  13. package/boilerplate-react/renderer/PageShell.css +19 -0
  14. package/{files/js/react/renderer/PageWrapper.jsx → boilerplate-react/renderer/PageShell.jsx} +36 -21
  15. package/boilerplate-react/renderer/PropTypeValues.js +3 -0
  16. package/boilerplate-react/renderer/_default.page.client.jsx +22 -0
  17. package/boilerplate-react/renderer/_default.page.server.jsx +45 -0
  18. package/{files/js/react → boilerplate-react}/renderer/_error.page.jsx +8 -5
  19. package/boilerplate-react/renderer/logo.svg +36 -0
  20. package/boilerplate-react/renderer/usePageContext.jsx +25 -0
  21. package/boilerplate-react/server/index.js +74 -0
  22. package/boilerplate-react/server/root.js +8 -0
  23. package/boilerplate-react/vite.config.js +6 -0
  24. package/boilerplate-react-ts/.eslintrc.cjs +19 -0
  25. package/boilerplate-react-ts/.test-dev.test.ts +2 -0
  26. package/boilerplate-react-ts/.test-prod.test.ts +2 -0
  27. package/boilerplate-react-ts/.testCiJob.json +1 -0
  28. package/boilerplate-react-ts/_gitignore +2 -0
  29. package/boilerplate-react-ts/package.json +36 -0
  30. package/boilerplate-react-ts/pages/about/code.css +6 -0
  31. package/boilerplate-react-ts/pages/about/index.page.tsx +14 -0
  32. package/{files/ts/react → boilerplate-react-ts}/pages/index/Counter.tsx +4 -4
  33. package/{files/ts/react → boilerplate-react-ts}/pages/index/index.page.tsx +3 -4
  34. package/boilerplate-react-ts/renderer/Link.tsx +9 -0
  35. package/{files/ts/react/renderer/PageWrapper.tsx → boilerplate-react-ts/renderer/PageShell.tsx} +22 -28
  36. package/boilerplate-react-ts/renderer/_default.page.client.tsx +23 -0
  37. package/boilerplate-react-ts/renderer/_default.page.server.tsx +46 -0
  38. package/{files/ts/react → boilerplate-react-ts}/renderer/_error.page.tsx +4 -6
  39. package/boilerplate-react-ts/renderer/types.ts +35 -0
  40. package/boilerplate-react-ts/renderer/usePageContext.tsx +20 -0
  41. package/boilerplate-react-ts/server/index.ts +74 -0
  42. package/boilerplate-react-ts/server/root.ts +8 -0
  43. package/boilerplate-react-ts/server/tsconfig.json +9 -0
  44. package/boilerplate-react-ts/tsconfig.json +22 -0
  45. package/boilerplate-react-ts/vite.config.ts +9 -0
  46. package/boilerplate-vue/.test-dev.test.ts +2 -0
  47. package/boilerplate-vue/.test-prod.test.ts +2 -0
  48. package/boilerplate-vue/.testCiJob.json +1 -0
  49. package/boilerplate-vue/_gitignore +2 -0
  50. package/boilerplate-vue/package.json +22 -0
  51. package/boilerplate-vue/pages/about/index.page.vue +13 -0
  52. package/boilerplate-vue/pages/index/Counter.vue +8 -0
  53. package/{files/js/vue → boilerplate-vue}/pages/index/index.page.vue +1 -1
  54. package/{files/js/vue → boilerplate-vue}/renderer/Link.vue +2 -2
  55. package/{files/js/vue/renderer/PageWrapper.vue → boilerplate-vue/renderer/PageShell.vue} +1 -1
  56. package/boilerplate-vue/renderer/_default.page.client.js +15 -0
  57. package/boilerplate-vue/renderer/_default.page.server.js +54 -0
  58. package/{files/js/vue → boilerplate-vue}/renderer/_error.page.vue +2 -2
  59. package/boilerplate-vue/renderer/app.js +28 -0
  60. package/boilerplate-vue/renderer/logo.svg +36 -0
  61. package/boilerplate-vue/renderer/usePageContext.js +18 -0
  62. package/boilerplate-vue/server/index.js +74 -0
  63. package/boilerplate-vue/server/root.js +8 -0
  64. package/boilerplate-vue/vite.config.js +6 -0
  65. package/boilerplate-vue-ts/.test-dev.test.ts +2 -0
  66. package/boilerplate-vue-ts/.test-prod.test.ts +2 -0
  67. package/boilerplate-vue-ts/.testCiJob.json +1 -0
  68. package/boilerplate-vue-ts/_gitignore +2 -0
  69. package/boilerplate-vue-ts/package.json +28 -0
  70. package/boilerplate-vue-ts/pages/about/index.page.vue +13 -0
  71. package/boilerplate-vue-ts/pages/index/Counter.vue +8 -0
  72. package/{files/ts/vue → boilerplate-vue-ts}/pages/index/index.page.vue +1 -1
  73. package/{files/ts/vue → boilerplate-vue-ts}/renderer/Link.vue +2 -2
  74. package/{files/ts/vue/renderer/PageWrapper.vue → boilerplate-vue-ts/renderer/PageShell.vue} +1 -1
  75. package/boilerplate-vue-ts/renderer/_default.page.client.ts +16 -0
  76. package/boilerplate-vue-ts/renderer/_default.page.server.ts +56 -0
  77. package/{files/ts/vue → boilerplate-vue-ts}/renderer/_error.page.vue +2 -2
  78. package/boilerplate-vue-ts/renderer/app.ts +29 -0
  79. package/boilerplate-vue-ts/renderer/logo.svg +36 -0
  80. package/boilerplate-vue-ts/renderer/types.ts +38 -0
  81. package/boilerplate-vue-ts/renderer/usePageContext.ts +21 -0
  82. package/boilerplate-vue-ts/server/index.ts +74 -0
  83. package/boilerplate-vue-ts/server/root.ts +8 -0
  84. package/boilerplate-vue-ts/server/tsconfig.json +9 -0
  85. package/boilerplate-vue-ts/tsconfig.json +21 -0
  86. package/boilerplate-vue-ts/vite.config.ts +9 -0
  87. package/boilerplate-vue-ts/vue.d.ts +4 -0
  88. package/index.js +222 -0
  89. package/package.json +13 -52
  90. package/README.md +0 -30
  91. package/create-vike.js +0 -2
  92. package/dist/index.js +0 -402
  93. package/files/js/react/pages/about/index.page.jsx +0 -13
  94. package/files/js/react/renderer/Link.jsx +0 -15
  95. package/files/js/react/renderer/_default.page.client.jsx +0 -19
  96. package/files/js/react/renderer/_default.page.server.jsx +0 -47
  97. package/files/js/react/renderer/usePageContext.jsx +0 -18
  98. package/files/js/react+client-router/renderer/_default.page.client.jsx +0 -43
  99. package/files/js/react+client-router/renderer/types.js +0 -1
  100. package/files/js/vike/server/index.js +0 -40
  101. package/files/js/vue/pages/about/index.page.vue +0 -11
  102. package/files/js/vue/pages/index/Counter.vue +0 -10
  103. package/files/js/vue/renderer/_default.page.client.js +0 -12
  104. package/files/js/vue/renderer/_default.page.server.js +0 -41
  105. package/files/js/vue/renderer/app.js +0 -29
  106. package/files/js/vue/renderer/usePageContext.js +0 -18
  107. package/files/js/vue+client-router/renderer/_default.page.client.js +0 -23
  108. package/files/js/vue+client-router/renderer/app.js +0 -36
  109. package/files/js/vue+client-router/renderer/types.js +0 -1
  110. package/files/shared/.prettierrc +0 -1
  111. package/files/shared/react/pages/about/index.css +0 -4
  112. package/files/shared/vike/_gitignore +0 -121
  113. package/files/ts/react/pages/about/index.page.tsx +0 -13
  114. package/files/ts/react/renderer/Link.tsx +0 -19
  115. package/files/ts/react/renderer/_default.page.client.tsx +0 -21
  116. package/files/ts/react/renderer/_default.page.server.tsx +0 -49
  117. package/files/ts/react/renderer/types.ts +0 -11
  118. package/files/ts/react/renderer/usePageContext.tsx +0 -25
  119. package/files/ts/react+client-router/renderer/_default.page.client.tsx +0 -44
  120. package/files/ts/react+client-router/renderer/types.ts +0 -12
  121. package/files/ts/vike/server/index.ts +0 -40
  122. package/files/ts/vue/pages/about/index.page.vue +0 -11
  123. package/files/ts/vue/pages/index/Counter.vue +0 -10
  124. package/files/ts/vue/renderer/_default.page.client.ts +0 -14
  125. package/files/ts/vue/renderer/_default.page.server.ts +0 -43
  126. package/files/ts/vue/renderer/app.ts +0 -30
  127. package/files/ts/vue/renderer/types.ts +0 -10
  128. package/files/ts/vue/renderer/usePageContext.ts +0 -20
  129. package/files/ts/vue/vue.d.ts +0 -4
  130. package/files/ts/vue+client-router/renderer/_default.page.client.ts +0 -24
  131. package/files/ts/vue+client-router/renderer/app.ts +0 -37
  132. package/files/ts/vue+client-router/renderer/types.ts +0 -11
  133. /package/{files/shared/react/renderer/PageWrapper.css → boilerplate-react-ts/renderer/PageShell.css} +0 -0
  134. /package/{files/shared/vike → boilerplate-react-ts}/renderer/logo.svg +0 -0
package/dist/index.js DELETED
@@ -1,402 +0,0 @@
1
- var __create = Object.create;
2
- var __defProp = Object.defineProperty;
3
- var __defProps = Object.defineProperties;
4
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
- var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
6
- var __getOwnPropNames = Object.getOwnPropertyNames;
7
- var __getOwnPropSymbols = Object.getOwnPropertySymbols;
8
- var __getProtoOf = Object.getPrototypeOf;
9
- var __hasOwnProp = Object.prototype.hasOwnProperty;
10
- var __propIsEnum = Object.prototype.propertyIsEnumerable;
11
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
12
- var __spreadValues = (a, b) => {
13
- for (var prop in b || (b = {}))
14
- if (__hasOwnProp.call(b, prop))
15
- __defNormalProp(a, prop, b[prop]);
16
- if (__getOwnPropSymbols)
17
- for (var prop of __getOwnPropSymbols(b)) {
18
- if (__propIsEnum.call(b, prop))
19
- __defNormalProp(a, prop, b[prop]);
20
- }
21
- return a;
22
- };
23
- var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
24
- var __copyProps = (to, from, except, desc) => {
25
- if (from && typeof from === "object" || typeof from === "function") {
26
- for (let key of __getOwnPropNames(from))
27
- if (!__hasOwnProp.call(to, key) && key !== except)
28
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
29
- }
30
- return to;
31
- };
32
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod));
33
-
34
- // src/index.ts
35
- var import_commander = require("commander");
36
-
37
- // src/generate.ts
38
- var import_path = __toESM(require("path"));
39
- var import_promises = __toESM(require("fs/promises"));
40
- var import_prettier = require("prettier");
41
-
42
- // src/config-generators/package-versions.json
43
- var _types_express = "4.17.13";
44
- var _types_node = "17.0.36";
45
- var _types_react_dom = "18.0.5";
46
- var _types_react = "18.0.9";
47
- var _vitejs_plugin_react_refresh = "1.3.6";
48
- var _vitejs_plugin_vue = "2.3.3";
49
- var _vue_compiler_sfc = "3.2.36";
50
- var _vue_server_renderer = "3.2.36";
51
- var cross_env = "7.0.3";
52
- var express = "4.18.1";
53
- var react_dom = "18.1.0";
54
- var react = "18.1.0";
55
- var ts_node = "10.8.0";
56
- var typescript = "4.7.2";
57
- var vite_plugin_ssr = "0.3.64";
58
- var vite = "2.9.9";
59
- var vue = "3.2.36";
60
- var package_versions_default = {
61
- "@types/express": _types_express,
62
- "@types/node": _types_node,
63
- "@types/react-dom": _types_react_dom,
64
- "@types/react": _types_react,
65
- "@vitejs/plugin-react-refresh": _vitejs_plugin_react_refresh,
66
- "@vitejs/plugin-vue": _vitejs_plugin_vue,
67
- "@vue/compiler-sfc": _vue_compiler_sfc,
68
- "@vue/server-renderer": _vue_server_renderer,
69
- "cross-env": cross_env,
70
- express,
71
- "react-dom": react_dom,
72
- react,
73
- "ts-node": ts_node,
74
- typescript,
75
- "vite-plugin-ssr": vite_plugin_ssr,
76
- vite,
77
- vue
78
- };
79
-
80
- // src/config-generators/common.ts
81
- var ConfigGenerator = class {
82
- constructor(language) {
83
- this.language = language;
84
- }
85
- generateTsConfig() {
86
- const config = deepClone(TS_CONFIG);
87
- this.modifyTsConfig(config);
88
- return JSON.stringify(config, void 0, 2);
89
- }
90
- generatePackageJson() {
91
- const pkg = deepClone(PACKAGE_JSON);
92
- if (this.language === "ts") {
93
- pkg.scripts = __spreadValues(__spreadValues({}, pkg.scripts), TS_PACKAGE_JSON_OVERRIDES.scripts);
94
- pkg.dependencies = [
95
- ...pkg.dependencies,
96
- ...TS_PACKAGE_JSON_OVERRIDES.dependencies
97
- ];
98
- }
99
- this.modifyPackageJson(pkg);
100
- pkg.dependencies = pkg.dependencies.sort();
101
- const output = __spreadProps(__spreadValues({}, pkg), {
102
- dependencies: Object.fromEntries(pkg.dependencies.map((dep) => {
103
- if (!(dep in package_versions_default)) {
104
- throw new Error("Unknown package " + dep);
105
- }
106
- return [dep, package_versions_default[dep]];
107
- }))
108
- });
109
- return output;
110
- }
111
- generateViteConfig() {
112
- const config = this.getViteConfig();
113
- let out = `import ${config.frameworkImportName} from ${JSON.stringify(config.frameworkImportPackage)};
114
- `;
115
- out += `import ssr from "vite-plugin-ssr/plugin";
116
- `;
117
- if (this.language === "ts") {
118
- out += `import { UserConfig } from "vite";
119
- `;
120
- }
121
- out += "\n";
122
- if (this.language === "ts") {
123
- out += `const config: UserConfig = `;
124
- } else {
125
- out += `export default `;
126
- }
127
- out += `{
128
- plugins: [${config.frameworkImportName}(), ssr()],
129
- };
130
- `;
131
- if (this.language === "ts") {
132
- out += `
133
- export default config;
134
- `;
135
- }
136
- return out;
137
- }
138
- };
139
- function deepClone(original) {
140
- return JSON.parse(JSON.stringify(original));
141
- }
142
- var TS_CONFIG = {
143
- compilerOptions: {
144
- strict: true,
145
- module: "ES2020",
146
- moduleResolution: "Node",
147
- target: "ES2017",
148
- lib: ["DOM", "DOM.Iterable", "ESNext"],
149
- types: ["vite/client"],
150
- jsx: "react",
151
- skipLibCheck: true,
152
- esModuleInterop: true
153
- },
154
- "ts-node": { transpileOnly: true, compilerOptions: { module: "CommonJS" } }
155
- };
156
- var PACKAGE_JSON = {
157
- scripts: {
158
- dev: "npm run server",
159
- prod: "npm run build && npm run server:prod",
160
- build: "vite build && vite build --ssr",
161
- server: "node ./server",
162
- "server:prod": "cross-env NODE_ENV=production node ./server"
163
- },
164
- dependencies: ["cross-env", "express", "vite", "vite-plugin-ssr"]
165
- };
166
- var TS_PACKAGE_JSON_OVERRIDES = {
167
- scripts: {
168
- server: "ts-node ./server",
169
- "server:prod": "cross-env NODE_ENV=production ts-node ./server"
170
- },
171
- dependencies: ["@types/express", "@types/node", "ts-node", "typescript"]
172
- };
173
-
174
- // src/config-generators/react.ts
175
- var ReactConfigGenerator = class extends ConfigGenerator {
176
- modifyTsConfig() {
177
- }
178
- modifyPackageJson(pkg) {
179
- pkg.dependencies.push(...REACT_DEPENDENCIES);
180
- if (this.language === "ts") {
181
- pkg.dependencies.push(...REACT_TS_DEPENDENCIES);
182
- }
183
- }
184
- getViteConfig() {
185
- return {
186
- frameworkImportName: "reactRefresh",
187
- frameworkImportPackage: "@vitejs/plugin-react-refresh"
188
- };
189
- }
190
- };
191
- var REACT_DEPENDENCIES = [
192
- "@vitejs/plugin-react-refresh",
193
- "react",
194
- "react-dom"
195
- ];
196
- var REACT_TS_DEPENDENCIES = ["@types/react", "@types/react-dom"];
197
-
198
- // src/config-generators/vue.ts
199
- var VueConfigGenerator = class extends ConfigGenerator {
200
- modifyTsConfig(config) {
201
- delete config.compilerOptions.jsx;
202
- }
203
- modifyPackageJson(pkg) {
204
- pkg.dependencies.push(...VUE_DEPENDENCIES);
205
- }
206
- getViteConfig() {
207
- return {
208
- frameworkImportName: "vue",
209
- frameworkImportPackage: "@vitejs/plugin-vue"
210
- };
211
- }
212
- };
213
- var VUE_DEPENDENCIES = [
214
- "@vitejs/plugin-vue",
215
- "@vue/compiler-sfc",
216
- "@vue/server-renderer",
217
- "vue"
218
- ];
219
-
220
- // src/detect-package-manager.ts
221
- function detectPackageManager() {
222
- const agent = process.env.npm_config_user_agent;
223
- if (agent) {
224
- const [program2] = agent.split("/");
225
- if (program2 === "yarn")
226
- return "yarn";
227
- if (program2 === "pnpm")
228
- return "pnpm";
229
- if (program2 === "npm")
230
- return "npm";
231
- }
232
- if (process.platform !== "win32") {
233
- const parent = process.env._;
234
- if (parent) {
235
- if (parent.endsWith("pnpx") || parent.endsWith("pnpm"))
236
- return "pnpm";
237
- if (parent.endsWith("yarn"))
238
- return "yarn";
239
- if (parent.endsWith("npx") || parent.endsWith("npm"))
240
- return "npm";
241
- }
242
- }
243
- return null;
244
- }
245
-
246
- // src/run-command.ts
247
- var import_child_process = require("child_process");
248
- async function runCommand(command, ...args) {
249
- return new Promise((resolve, reject) => {
250
- const child = (0, import_child_process.spawn)(command, args, { stdio: "inherit" });
251
- child.on("close", (code) => {
252
- if (code === 0) {
253
- resolve();
254
- } else {
255
- reject();
256
- }
257
- });
258
- });
259
- }
260
-
261
- // src/generate.ts
262
- var import_walk = require("walk");
263
- var FILES_DIR = import_path.default.resolve(__dirname, "../files");
264
- async function generate({
265
- outputDir,
266
- typescript: typescript2,
267
- react: react2,
268
- vue: vue2,
269
- clientRouter,
270
- skipDependencies,
271
- npm,
272
- yarn,
273
- pnpm,
274
- initGitRepo,
275
- createInitialCommit
276
- }) {
277
- let error = false;
278
- if (Number(npm) + Number(pnpm) + Number(yarn) > 1) {
279
- process.stderr.write("Only one of npm, pnpm, or yarn can be specified\n");
280
- error = true;
281
- }
282
- let packageManager = npm ? "npm" : pnpm ? "pnpm" : yarn ? "yarn" : void 0;
283
- if (!packageManager) {
284
- const detected = detectPackageManager();
285
- packageManager = detected || "npm";
286
- }
287
- if (vue2 && react2) {
288
- process.stderr.write("Cannot use both react and vue\n");
289
- error = true;
290
- } else if (!vue2 && !react2) {
291
- process.stderr.write("Please specify either --react or --vue\n");
292
- error = true;
293
- }
294
- if (error) {
295
- process.exit(1);
296
- }
297
- const framework = vue2 ? "vue" : "react";
298
- const features = ["vike", framework];
299
- if (clientRouter)
300
- features.push("client-router");
301
- const language = typescript2 ? "ts" : "js";
302
- async function findDirs(dir) {
303
- return (await import_promises.default.readdir(import_path.default.join(FILES_DIR, dir), {
304
- withFileTypes: true
305
- })).filter((x) => x.isDirectory()).map((x) => ({
306
- name: import_path.default.join(dir, x.name),
307
- features: x.name.split("+")
308
- })).sort((a, b) => a.features.length - b.features.length);
309
- }
310
- const dirs = [...await findDirs("shared"), ...await findDirs(language)].filter((x) => x.features.every((f) => features.includes(f))).map((x) => x.name);
311
- console.log("Copying files");
312
- const toBeCopied = {};
313
- for (const dir of dirs) {
314
- const files = await getFiles(dir);
315
- files.forEach((x) => {
316
- let targetName = x.slice(dir.length + 1);
317
- if (targetName === "_gitignore")
318
- targetName = ".gitignore";
319
- toBeCopied[targetName] = x;
320
- });
321
- }
322
- for (const [targetName, sourcePath] of Object.entries(toBeCopied)) {
323
- const targetPath = import_path.default.join(outputDir, targetName);
324
- const dirName = import_path.default.dirname(targetPath);
325
- await import_promises.default.mkdir(dirName, { recursive: true });
326
- await import_promises.default.copyFile(import_path.default.join(FILES_DIR, sourcePath), targetPath);
327
- }
328
- const generators = {
329
- react: ReactConfigGenerator,
330
- vue: VueConfigGenerator
331
- };
332
- console.log("Generating configutation files");
333
- const generator = new generators[framework](language);
334
- const prettierConfig = {};
335
- const packageJson = generator.generatePackageJson();
336
- if (yarn) {
337
- packageJson.scripts.dev = "yarn server";
338
- packageJson.scripts.prod = "yarn build && yarn server:prod";
339
- } else if (pnpm) {
340
- packageJson.scripts.dev = "pnpm run server";
341
- packageJson.scripts.prod = "pnpm build && pnpm server:prod";
342
- }
343
- const packageJsonfileName = import_path.default.join(outputDir, "package.json");
344
- await import_promises.default.writeFile(packageJsonfileName, (0, import_prettier.format)(JSON.stringify(packageJson), __spreadProps(__spreadValues({}, prettierConfig), {
345
- filepath: packageJsonfileName
346
- })));
347
- if (language === "ts") {
348
- const fn = import_path.default.join(outputDir, "tsconfig.json");
349
- await import_promises.default.writeFile(fn, (0, import_prettier.format)(generator.generateTsConfig(), __spreadProps(__spreadValues({}, prettierConfig), { filepath: fn })));
350
- }
351
- const viteConfigFileName = import_path.default.join(outputDir, "vite.config." + language);
352
- await import_promises.default.writeFile(viteConfigFileName, (0, import_prettier.format)(generator.generateViteConfig(), __spreadProps(__spreadValues({}, prettierConfig), {
353
- filepath: viteConfigFileName
354
- })));
355
- process.chdir(outputDir);
356
- if (!skipDependencies) {
357
- console.log("Installing dependencies with", packageManager);
358
- await runCommand(packageManager, "install");
359
- }
360
- if (initGitRepo) {
361
- console.log("Initializing git repository");
362
- await runCommand("git", "init");
363
- if (initGitRepo === true)
364
- initGitRepo = "main";
365
- if (initGitRepo !== "master") {
366
- await runCommand("git", "checkout", "-b", initGitRepo);
367
- }
368
- if (createInitialCommit) {
369
- console.log("Creating initial commit");
370
- if (createInitialCommit === true)
371
- createInitialCommit = `Initialized Vike ${typescript2 ? "TypeScript" : "vanilla JavaScript"} boilerplate for ${react2 ? "React" : "Vue"}`;
372
- await runCommand("git", "add", ".");
373
- await runCommand("git", "commit", "-m", createInitialCommit);
374
- }
375
- } else if (createInitialCommit) {
376
- console.warn("Ignoring initial commit because no git repo was initialized");
377
- }
378
- }
379
- async function getFiles(dir) {
380
- const files = [];
381
- const walker = (0, import_walk.walk)(import_path.default.join(FILES_DIR, dir));
382
- walker.on("file", (root, fileStats, next) => {
383
- files.push(import_path.default.relative(FILES_DIR, import_path.default.join(root, fileStats.name)));
384
- next();
385
- });
386
- await new Promise((resolve, reject) => {
387
- walker.on("end", resolve);
388
- walker.on("errors", (_, statsArr) => {
389
- const errors = statsArr.map((stat) => stat.error);
390
- reject(new Error(`Failed to walk ${dir}: ${errors.join(", ")}`));
391
- });
392
- });
393
- return files;
394
- }
395
-
396
- // package.json
397
- var version = "0.0.4";
398
-
399
- // src/index.ts
400
- import_commander.program.description("Generates Vike application boilerplate").version(version).argument("<output-dir>", "Output directory").option("-t, --typescript", "use TypeScript", false).option("-n, --npm", "use npm package manager", false).option("-y, --yarn", "use yarn package manager", false).option("-p, --pnpm", "use pnpm package manager", false).option("-v, --vue", "use Vue", false).option("-r, --react", "use React", false).option("-c, --client-router", "use client router", false).option("-s, --skip-dependencies", "skip installing dependencies", false).option("-i, --init-git-repo [branch]", "initialize git repo", false).option("-m, --create-initial-commit [message]", "create initial commit", false).action((outputDir, options) => {
401
- generate(__spreadValues({ outputDir }, options));
402
- }).parse();
@@ -1,13 +0,0 @@
1
- import React from "react";
2
- import "./index.css";
3
-
4
- export { Page };
5
-
6
- function Page() {
7
- return (
8
- <>
9
- <h1>About</h1>
10
- <p>A colored page.</p>
11
- </>
12
- );
13
- }
@@ -1,15 +0,0 @@
1
- import React from "react";
2
- import { usePageContext } from "./usePageContext";
3
-
4
- export { Link };
5
-
6
- function Link(props) {
7
- const pageContext = usePageContext();
8
- const className = [
9
- props.className,
10
- pageContext.urlPathname === props.href && "is-active",
11
- ]
12
- .filter(Boolean)
13
- .join(" ");
14
- return <a {...props} className={className} />;
15
- }
@@ -1,19 +0,0 @@
1
- import ReactDOM from "react-dom";
2
- import React from "react";
3
- import { getPage } from "vite-plugin-ssr/client";
4
- import { PageWrapper } from "./PageWrapper";
5
-
6
- hydrate();
7
-
8
- async function hydrate() {
9
- // We do Server Routing, but we can also do Client Routing by using `useClientRouter()`
10
- // instead of `getPage()`, see https://vite-plugin-ssr.com/useClientRouter
11
- const pageContext = await getPage();
12
- const { Page, pageProps } = pageContext;
13
- ReactDOM.hydrate(
14
- <PageWrapper pageContext={pageContext}>
15
- <Page {...pageProps} />
16
- </PageWrapper>,
17
- document.getElementById("page-view")
18
- );
19
- }
@@ -1,47 +0,0 @@
1
- import ReactDOMServer from "react-dom/server";
2
- import React from "react";
3
- import { PageWrapper } from "./PageWrapper";
4
- import { escapeInject, dangerouslySkipEscape } from "vite-plugin-ssr";
5
- import logoUrl from "./logo.svg";
6
-
7
- export { render };
8
-
9
- // See https://vite-plugin-ssr.com/data-fetching
10
- export const passToClient = ["pageProps", "urlPathname"];
11
-
12
- async function render(pageContext) {
13
- const { Page, pageProps } = pageContext;
14
- const pageHtml = ReactDOMServer.renderToString(
15
- <PageWrapper pageContext={pageContext}>
16
- <Page {...pageProps} />
17
- </PageWrapper>
18
- );
19
-
20
- // See https://vite-plugin-ssr.com/html-head
21
- const { documentProps } = pageContext;
22
- const title = (documentProps && documentProps.title) || "Vite SSR app";
23
- const desc =
24
- (documentProps && documentProps.description) ||
25
- "App using Vite + vite-plugin-ssr";
26
-
27
- const documentHtml = escapeInject`<!DOCTYPE html>
28
- <html lang="en">
29
- <head>
30
- <meta charset="UTF-8" />
31
- <link rel="icon" href="${logoUrl}" />
32
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
33
- <meta name="description" content="${desc}" />
34
- <title>${title}</title>
35
- </head>
36
- <body>
37
- <div id="page-view">${dangerouslySkipEscape(pageHtml)}</div>
38
- </body>
39
- </html>`;
40
-
41
- return {
42
- documentHtml,
43
- pageContext: {
44
- // We can add some `pageContext` here, which is useful if we want to do page redirection https://vite-plugin-ssr.com/page-redirection
45
- },
46
- };
47
- }
@@ -1,18 +0,0 @@
1
- // `usePageContext` allows us to access `pageContext` in any React component.
2
- // More infos: https://vite-plugin-ssr.com/pageContext-anywhere
3
-
4
- import React, { useContext } from "react";
5
-
6
- export { PageContextProvider };
7
- export { usePageContext };
8
-
9
- const Context = React.createContext(undefined);
10
-
11
- function PageContextProvider({ pageContext, children }) {
12
- return <Context.Provider value={pageContext}>{children}</Context.Provider>;
13
- }
14
-
15
- function usePageContext() {
16
- const pageContext = useContext(Context);
17
- return pageContext;
18
- }
@@ -1,43 +0,0 @@
1
- import ReactDOM from "react-dom";
2
- import React from "react";
3
- import { useClientRouter } from "vite-plugin-ssr/client/router";
4
- import { PageWrapper } from "./PageWrapper";
5
-
6
- useClientRouter({
7
- async render(pageContext) {
8
- if (pageContext.isHydration) {
9
- // When we render the first page. (Since we do SSR, the first page is already
10
- // rendered to HTML and we merely have to hydrate it.)
11
- const { Page, pageProps } = pageContext;
12
- ReactDOM.hydrate(
13
- <PageWrapper pageContext={pageContext}>
14
- <Page {...pageProps} />
15
- </PageWrapper>,
16
- document.getElementById("page-view")
17
- );
18
- } else {
19
- // When the user navigates to a new page.
20
- const { Page, pageProps } = pageContext;
21
- ReactDOM.render(
22
- <PageWrapper pageContext={pageContext}>
23
- <Page {...pageProps} />
24
- </PageWrapper>,
25
- document.getElementById("page-view")
26
- );
27
- }
28
- },
29
-
30
- ensureHydration: true,
31
-
32
- prefetchLinks: true,
33
-
34
- onTransitionStart() {
35
- // Page transition started
36
- },
37
-
38
- onTransitionEnd() {
39
- // Page transition ended
40
- },
41
- }).hydrationPromise.then(() => {
42
- // Hydration finished; page is now interactive
43
- });
@@ -1 +0,0 @@
1
- export {};
@@ -1,40 +0,0 @@
1
- const express = require("express");
2
- const { createPageRenderer } = require("vite-plugin-ssr");
3
-
4
- const isProduction = process.env.NODE_ENV === "production";
5
- const root = `${__dirname}/..`;
6
-
7
- startServer();
8
-
9
- async function startServer() {
10
- const app = express();
11
-
12
- let viteDevServer;
13
- if (isProduction) {
14
- app.use(express.static(`${root}/dist/client`));
15
- } else {
16
- const vite = require("vite");
17
- viteDevServer = await vite.createServer({
18
- root,
19
- server: { middlewareMode: true },
20
- });
21
- app.use(viteDevServer.middlewares);
22
- }
23
-
24
- const renderPage = createPageRenderer({ viteDevServer, isProduction, root });
25
- app.get("*", async (req, res, next) => {
26
- const url = req.originalUrl;
27
- const pageContextInit = {
28
- url,
29
- };
30
- const pageContext = await renderPage(pageContextInit);
31
- const { httpResponse } = pageContext;
32
- if (!httpResponse) return next();
33
- const { statusCode, body } = httpResponse;
34
- res.status(statusCode).send(body);
35
- });
36
-
37
- const port = process.env.PORT || 3000;
38
- app.listen(port);
39
- console.log(`Server running at http://localhost:${port}`);
40
- }
@@ -1,11 +0,0 @@
1
- <template>
2
- <h1>About</h1>
3
- <p>A colored page.</p>
4
- </template>
5
-
6
- <style>
7
- h1,
8
- p {
9
- color: green;
10
- }
11
- </style>
@@ -1,10 +0,0 @@
1
- <template>
2
- <button type="button" @click="state.count++">
3
- Counter {{ state.count }}
4
- </button>
5
- </template>
6
-
7
- <script setup>
8
- import { reactive } from "vue";
9
- const state = reactive({ count: 0 });
10
- </script>
@@ -1,12 +0,0 @@
1
- import { getPage } from "vite-plugin-ssr/client";
2
- import { createApp } from "./app";
3
-
4
- hydrate();
5
-
6
- async function hydrate() {
7
- // We do Server Routing, but we can also do Client Routing by using `useClientRouter()`
8
- // instead of `getPage()`, see https://vite-plugin-ssr.com/useClientRouter
9
- const pageContext = await getPage();
10
- const app = createApp(pageContext);
11
- app.mount("#app");
12
- }
@@ -1,41 +0,0 @@
1
- import { renderToString } from "@vue/server-renderer";
2
- import { escapeInject, dangerouslySkipEscape } from "vite-plugin-ssr";
3
- import { createApp } from "./app";
4
- import logoUrl from "./logo.svg";
5
-
6
- export { render };
7
- // See https://vite-plugin-ssr.com/data-fetching
8
- export const passToClient = ["pageProps", "urlPathname"];
9
-
10
- async function render(pageContext) {
11
- const app = createApp(pageContext);
12
- const appHtml = await renderToString(app);
13
-
14
- // See https://vite-plugin-ssr.com/html-head
15
- const { documentProps } = pageContext;
16
- const title = (documentProps && documentProps.title) || "Vite SSR app";
17
- const desc =
18
- (documentProps && documentProps.description) ||
19
- "App using Vite + vite-plugin-ssr";
20
-
21
- const documentHtml = escapeInject`<!DOCTYPE html>
22
- <html lang="en">
23
- <head>
24
- <meta charset="UTF-8" />
25
- <link rel="icon" href="${logoUrl}" />
26
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
27
- <meta name="description" content="${desc}" />
28
- <title>${title}</title>
29
- </head>
30
- <body>
31
- <div id="app">${dangerouslySkipEscape(appHtml)}</div>
32
- </body>
33
- </html>`;
34
-
35
- return {
36
- documentHtml,
37
- pageContext: {
38
- // We can add some `pageContext` here, which is useful if we want to do page redirection https://vite-plugin-ssr.com/page-redirection
39
- },
40
- };
41
- }