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
@@ -0,0 +1,8 @@
1
+ export { root }
2
+
3
+ // https://stackoverflow.com/questions/46745014/alternative-for-dirname-in-node-when-using-the-experimental-modules-flag/50052194#50052194
4
+
5
+ import { dirname } from 'path'
6
+ import { fileURLToPath } from 'url'
7
+ const __dirname = dirname(fileURLToPath(import.meta.url))
8
+ const root = `${__dirname}/..`
@@ -0,0 +1,9 @@
1
+ {
2
+ "extends": "../tsconfig.json",
3
+ // Make IDEs complain about missing file extension .js in import paths.
4
+ // Alternatively, we could always set "module" to "Node16" and add the file extension .js to import paths everywhere.
5
+ "compilerOptions": {
6
+ "module": "Node16",
7
+ "moduleResolution": "Node16"
8
+ }
9
+ }
@@ -0,0 +1,21 @@
1
+ {
2
+ "compilerOptions": {
3
+ "strict": true,
4
+ "module": "ES2020",
5
+ "target": "ES2020",
6
+ // Doesn't apply to server/, see ts-node config down below and server/tsconfig.json
7
+ "moduleResolution": "Bundler",
8
+ "lib": ["DOM", "DOM.Iterable", "ESNext"],
9
+ "types": ["vite/client"],
10
+ "skipLibCheck": true,
11
+ "esModuleInterop": true
12
+ },
13
+ "ts-node": {
14
+ "transpileOnly": true,
15
+ "esm": true,
16
+ "compilerOptions": {
17
+ "module": "Node16",
18
+ "moduleResolution": "Node16"
19
+ }
20
+ }
21
+ }
@@ -0,0 +1,9 @@
1
+ import vue from '@vitejs/plugin-vue'
2
+ import ssr from 'vike/plugin'
3
+ import { UserConfig } from 'vite'
4
+
5
+ const config: UserConfig = {
6
+ plugins: [vue(), ssr()]
7
+ }
8
+
9
+ export default config
@@ -0,0 +1,4 @@
1
+ declare module '*.vue' {
2
+ const Component: any
3
+ export default Component
4
+ }
package/index.js ADDED
@@ -0,0 +1,222 @@
1
+ #!/usr/bin/env node
2
+
3
+ // @ts-check
4
+ const fs = require('fs')
5
+ const path = require('path')
6
+ const argv = require('minimist')(process.argv.slice(2))
7
+ const { prompt } = require('enquirer')
8
+ const { green, cyan, bold } = require('picocolors')
9
+ const { execSync } = require('child_process')
10
+
11
+ const BOILERPLATES = [
12
+ {
13
+ name: 'vue',
14
+ color: green
15
+ },
16
+ {
17
+ name: 'vue-ts',
18
+ color: green
19
+ },
20
+ {
21
+ name: 'react',
22
+ color: cyan
23
+ },
24
+ {
25
+ name: 'react-ts',
26
+ color: cyan
27
+ }
28
+ ]
29
+ const IGNORE_FILES = ['.prettierrc', '.test-dev.test.ts', '.test-prod.test.ts', '.testCiJob.json']
30
+ //const IGNORE_PACKAGE_JSON = ['name', 'version', '// Needed for Yarn workspaces']
31
+ const IGNORE_PACKAGE_JSON = []
32
+ const RENAME_FILES = {
33
+ _gitignore: '.gitignore'
34
+ }
35
+
36
+ const cwd = process.cwd()
37
+
38
+ async function init() {
39
+ let targetDir = argv._[0]
40
+ if (!targetDir) {
41
+ /**
42
+ * @type {{ name: string }}
43
+ */
44
+ const { name } = await prompt({
45
+ type: 'input',
46
+ name: 'name',
47
+ message: `Project name:`,
48
+ initial: 'vite-ssr-project'
49
+ })
50
+ targetDir = name
51
+ }
52
+
53
+ const root = path.join(cwd, targetDir)
54
+ console.log(`\nScaffolding project in ${root}...`)
55
+
56
+ if (!fs.existsSync(root)) {
57
+ fs.mkdirSync(root, { recursive: true })
58
+ } else {
59
+ const existing = fs.readdirSync(root)
60
+ if (existing.length) {
61
+ /**
62
+ * @type {{ yes: boolean }}
63
+ */
64
+ const { yes } = await prompt({
65
+ type: 'confirm',
66
+ name: 'yes',
67
+ initial: 'Y',
68
+ message: `Target directory ${targetDir} is not empty.\n` + `Remove existing files and continue?`
69
+ })
70
+ if (yes) {
71
+ emptyDir(root)
72
+ } else {
73
+ return
74
+ }
75
+ }
76
+ }
77
+
78
+ // determine boilerplate
79
+ let boilerplate = argv.t || argv.boilerplate
80
+ let message = 'Select a boilerplate:'
81
+ let isValidBoilerplate = false
82
+
83
+ // --boilerplate expects a value
84
+ if (typeof boilerplate === 'string') {
85
+ const availableBoilerplates = BOILERPLATES.map((b) => b.name)
86
+ isValidBoilerplate = availableBoilerplates.includes(boilerplate)
87
+ message = `${boilerplate} isn't a valid boilerplate. Please choose from below:`
88
+ }
89
+
90
+ if (!boilerplate || !isValidBoilerplate) {
91
+ /**
92
+ * @type {{ t: string }}
93
+ */
94
+ const { t } = await prompt({
95
+ type: 'select',
96
+ name: 't',
97
+ message,
98
+ choices: BOILERPLATES.map((b) => ({
99
+ message: b.color(b.name),
100
+ name: b.name
101
+ }))
102
+ })
103
+ boilerplate = t
104
+ }
105
+
106
+ const boilerplateDir = path.join(__dirname, `boilerplate-${boilerplate}`)
107
+
108
+ const write = (file) => {
109
+ const targetPath = RENAME_FILES[file] ? path.join(root, RENAME_FILES[file]) : path.join(root, file)
110
+ if (file === 'package.json') {
111
+ let content = JSON.parse(fs.readFileSync(path.join(boilerplateDir, file)).toString())
112
+ IGNORE_PACKAGE_JSON.forEach((key) => {
113
+ delete content[key]
114
+ })
115
+ content = JSON.stringify(content, null, 2)
116
+ fs.writeFileSync(targetPath, content + '\n')
117
+ } else {
118
+ copy(path.join(boilerplateDir, file), targetPath)
119
+ }
120
+ }
121
+
122
+ const files = fs.readdirSync(boilerplateDir)
123
+ for (const file of files.filter((f) => !IGNORE_FILES.includes(f))) {
124
+ write(file)
125
+ }
126
+
127
+ if (!argv['skip-git']) {
128
+ initGitRepo(root)
129
+ }
130
+
131
+ console.log(`\nDone. Now run:\n`)
132
+ if (root !== cwd) {
133
+ console.log(cmd(` cd ${path.relative(cwd, root)}/`))
134
+ }
135
+ console.log(` ${cmd('npm install')} (or ${cmd('pnpm install')} / ${cmd('yarn install')})`)
136
+ console.log(` ${cmd('npm run dev')} (or ${cmd('pnpm run dev')} / ${cmd('yarn dev')})`)
137
+ console.log()
138
+ }
139
+
140
+ function cmd(str) {
141
+ return bold(str)
142
+ }
143
+
144
+ function copy(src, dest) {
145
+ const stat = fs.statSync(src)
146
+ if (stat.isDirectory()) {
147
+ copyDir(src, dest)
148
+ } else {
149
+ fs.copyFileSync(src, dest)
150
+ }
151
+ }
152
+
153
+ function copyDir(srcDir, destDir) {
154
+ fs.mkdirSync(destDir, { recursive: true })
155
+ for (const file of fs.readdirSync(srcDir)) {
156
+ const srcFile = path.resolve(srcDir, file)
157
+ const destFile = path.resolve(destDir, file)
158
+ copy(srcFile, destFile)
159
+ }
160
+ }
161
+
162
+ function emptyDir(dir) {
163
+ if (!fs.existsSync(dir)) {
164
+ return
165
+ }
166
+ for (const file of fs.readdirSync(dir)) {
167
+ const abs = path.resolve(dir, file)
168
+ // baseline is Node 12 so can't use rmSync :(
169
+ if (fs.lstatSync(abs).isDirectory()) {
170
+ emptyDir(abs)
171
+ fs.rmdirSync(abs)
172
+ } else {
173
+ fs.unlinkSync(abs)
174
+ }
175
+ }
176
+ }
177
+
178
+ function initGitRepo(cwd) {
179
+ if (!isGitInstalled()) {
180
+ return
181
+ }
182
+
183
+ try {
184
+ execSync('git init', {
185
+ cwd,
186
+ // See https://github.com/vikejs/vike/issues/478
187
+ stdio: 'ignore'
188
+ })
189
+
190
+ execSync('git add .', { cwd, stdio: 'ignore' })
191
+ execSync(
192
+ [
193
+ 'git',
194
+ '-c user.name="Romuald Brillout"',
195
+ '-c user.email="vike@brillout.com"',
196
+ 'commit',
197
+ '--no-gpg-sign',
198
+ '--message="Scaffold Vike app"'
199
+ ].join(' '),
200
+ { cwd, stdio: 'ignore' }
201
+ )
202
+ } catch {
203
+ try {
204
+ fs.rmSync(path.join(cwd, '.git'), { recursive: true, force: true })
205
+ } catch {}
206
+ console.warn('Could not initialize a git repository.')
207
+ }
208
+ }
209
+
210
+ function isGitInstalled() {
211
+ let stdout
212
+ try {
213
+ stdout = execSync('git --version')
214
+ } catch (err) {
215
+ return false
216
+ }
217
+ return !!stdout
218
+ }
219
+
220
+ init().catch((e) => {
221
+ console.error(e)
222
+ })
package/package.json CHANGED
@@ -1,57 +1,18 @@
1
1
  {
2
2
  "name": "create-vike",
3
- "version": "0.0.4",
4
- "description": "Generates Vike application boilerplate",
5
- "main": "dist/index.js",
6
- "bin": "create-vike.js",
7
- "files": [
8
- "dist/**/*",
9
- "files/**/*"
10
- ],
11
- "dependencies": {
12
- "commander": "^9.3.0",
13
- "prettier": "^2.6.2",
14
- "walk": "^2.3.15"
15
- },
16
- "devDependencies": {
17
- "@types/jest": "^27.5.1",
18
- "@types/node": "^17.0.36",
19
- "@types/rimraf": "^3.0.2",
20
- "@types/walk": "^2.3.1",
21
- "@typescript-eslint/eslint-plugin": "^5.27.0",
22
- "@typescript-eslint/parser": "^5.27.0",
23
- "chalk": "^5.0.1",
24
- "detype": "^0.5.0",
25
- "esbuild": "^0.14.42",
26
- "esbuild-jest": "^0.5.0",
27
- "esbuild-node-externals": "^1.4.1",
28
- "eslint": "^8.16.0",
29
- "eslint-config-prettier": "^8.5.0",
30
- "eslint-import-resolver-typescript": "^2.7.1",
31
- "eslint-plugin-import": "^2.26.0",
32
- "eslint-plugin-no-only-tests": "^2.6.0",
33
- "eslint-plugin-only-warn": "^1.0.3",
34
- "eslint-plugin-ssr-friendly": "^1.0.6",
35
- "fast-glob": "^3.2.11",
36
- "jest": "^28.1.0",
37
- "npm-run-all": "^4.1.5",
38
- "rimraf": "^3.0.2",
39
- "semver": "^7.3.7",
40
- "typescript": "^4.7.2"
3
+ "version": "0.0.304",
4
+ "license": "MIT",
5
+ "bin": {
6
+ "create-vike": "index.js"
41
7
  },
42
- "repository": {
43
- "type": "git",
44
- "url": "git+https://github.com/cyco130/create-.git"
8
+ "main": "index.js",
9
+ "engines": {
10
+ "node": ">=12.0.0"
45
11
  },
46
- "author": "Fatih Aygün <cyco130@gmail.com>",
47
- "license": "MIT",
48
- "scripts": {
49
- "build": "node build.mjs",
50
- "generate-files": "./generate-files",
51
- "test": "run-p 'test:*'",
52
- "test:unit": "jest --passWithNoTests",
53
- "test:typecheck": "tsc -p tsconfig.json --noEmit",
54
- "test:lint": "eslint src --max-warnings 0",
55
- "format": "prettier . --write"
12
+ "repository": "https://github.com/vikejs/vike",
13
+ "dependencies": {
14
+ "enquirer": "^2.3.6",
15
+ "minimist": "^1.2.6",
16
+ "picocolors": "^1.0.0"
56
17
  }
57
- }
18
+ }
package/README.md DELETED
@@ -1,30 +0,0 @@
1
- # Vike Project Generator
2
-
3
- Generates Vike application boilerplate
4
-
5
- ## Usage
6
- ```
7
- create-vike [options] <output-dir>
8
-
9
- Arguments:
10
- output-dir Output directory
11
-
12
- Options:
13
- -V, --version output the version number
14
- -f, --framework <framework> Frontend framework (choices: "react", "vue")
15
- -l, --language <language> Programming language (choices: "js", "ts")
16
- -h, --help display help for command
17
- ```
18
-
19
- ## How it works
20
- - Generates TypeScript and JavaScript files from the templates in `input-files` via `detype`.
21
- - Copies files from `files/<language>/<feature>` where:
22
- - `<language>` is `shared`, `ts`, or `js`
23
- - `<feature>` is any combination of `vike` (default), `react`, `vue`, and `client-router` combined with a plus sign
24
- - Configuration files (`package.json`, `tsconfig.json`, and `vite.config.{js,ts}`) are generated programmatically.
25
- - Boilerplate package versions are kept in `src/config-generators/package-versions.json`, `check-deps.mjs` can be used to review package updates.
26
-
27
- ## TODO
28
- - Add integration tests
29
- - Create an interactive frontend
30
- - Resolve user's default prettier config if any and use it instead of the default
package/create-vike.js DELETED
@@ -1,2 +0,0 @@
1
- #!/usr/bin/env node
2
- require("./dist");