@jackie_qian/create-vue-app 1.0.0

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.
@@ -0,0 +1,118 @@
1
+ import { renderViteConfigJs } from "./renderViteConfigJs.js";
2
+ export function renderViteConfig(language, featureSet) {
3
+ if (language === "js") return renderViteConfigJs(featureSet);
4
+ const formatStringArray = (items) =>
5
+ `[${items.map((i) => `'${i}'`).join(", ")}]`;
6
+ const indent = (input, spaces) => {
7
+ const pad = " ".repeat(spaces);
8
+ return input
9
+ .split("\n")
10
+ .map((line) => `${pad}${line}`)
11
+ .join("\n");
12
+ };
13
+ const isTs = true;
14
+ const usePages = featureSet.has("pages");
15
+ const useAutoImport = featureSet.has("autoImport");
16
+ const useComponents = featureSet.has("components");
17
+ const useVant = featureSet.has("vant");
18
+ const useElementPlus = featureSet.has("elementPlus");
19
+ const useUno = featureSet.has("unocss");
20
+ const useEslint = featureSet.has("eslintAntfu");
21
+ const externalImports = [];
22
+ externalImports.push({
23
+ source: "@vitejs/plugin-vue",
24
+ line: `import vue from '@vitejs/plugin-vue'`,
25
+ });
26
+ externalImports.push({
27
+ source: "vite",
28
+ line: `import { defineConfig } from 'vite'`,
29
+ });
30
+ if (useVant)
31
+ externalImports.push({
32
+ source: "@vant/auto-import-resolver",
33
+ line: `import { VantResolver } from '@vant/auto-import-resolver'`,
34
+ });
35
+ if (useUno)
36
+ externalImports.push({
37
+ source: "unocss/vite",
38
+ line: `import UnoCSS from 'unocss/vite'`,
39
+ });
40
+ if (useAutoImport)
41
+ externalImports.push({
42
+ source: "unplugin-auto-import/vite",
43
+ line: `import AutoImport from 'unplugin-auto-import/vite'`,
44
+ });
45
+ if (useElementPlus)
46
+ externalImports.push({
47
+ source: "unplugin-vue-components/resolvers",
48
+ line: `import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'`,
49
+ });
50
+ if (useComponents)
51
+ externalImports.push({
52
+ source: "unplugin-vue-components/vite",
53
+ line: `import Components from 'unplugin-vue-components/vite'`,
54
+ });
55
+ if (usePages)
56
+ externalImports.push({
57
+ source: "vite-plugin-pages",
58
+ line: `import Pages from 'vite-plugin-pages'`,
59
+ });
60
+ externalImports.sort((a, b) => a.source.localeCompare(b.source));
61
+ const importLines = [
62
+ `import { fileURLToPath, URL } from 'node:url'`,
63
+ ...externalImports.map((i) => i.line),
64
+ ];
65
+ const plugins = [];
66
+ if (usePages) {
67
+ const dirs = isTs ? "src/pages" : "src/views";
68
+ const extensions = isTs ? `['vue', 'ts']` : `['vue', 'js']`;
69
+ plugins.push(`Pages({
70
+ dirs: '${dirs}',
71
+ extensions: ${extensions},
72
+ importMode: 'async'
73
+ })`);
74
+ }
75
+ const resolverItems = [];
76
+ if (useVant) resolverItems.push("VantResolver()");
77
+ if (useElementPlus) resolverItems.push("ElementPlusResolver()");
78
+ const resolvers = resolverItems.length
79
+ ? `[${resolverItems.join(", ")}]`
80
+ : `[]`;
81
+ if (useAutoImport) {
82
+ const imports = ["vue"];
83
+ if (featureSet.has("router")) imports.push("vue-router");
84
+ if (featureSet.has("pinia")) imports.push("pinia");
85
+ const eslintrc = useEslint
86
+ ? `,
87
+ eslintrc: { enabled: true }`
88
+ : "";
89
+ plugins.push(`AutoImport({
90
+ resolvers: ${resolvers},
91
+ imports: ${formatStringArray(imports)},
92
+ dts: 'src/types/auto-import.d.ts',
93
+ vueTemplate: true${eslintrc}
94
+ })`);
95
+ }
96
+ if (useComponents) {
97
+ plugins.push(`Components({
98
+ resolvers: ${resolvers},
99
+ dts: 'src/types/components.d.ts'
100
+ })`);
101
+ }
102
+ if (useUno) plugins.push(`UnoCSS()`);
103
+ plugins.push("vue()");
104
+ const pluginsBlock = plugins.map((p) => indent(p, 4)).join(",\n");
105
+ return `${importLines.join("\n")}
106
+
107
+ export default defineConfig({
108
+ plugins: [
109
+ ${pluginsBlock}
110
+ ],
111
+ resolve: {
112
+ alias: {
113
+ '@': fileURLToPath(new URL('./src', import.meta.url))
114
+ }
115
+ }
116
+ })
117
+ `;
118
+ }
@@ -0,0 +1,104 @@
1
+ export function renderViteConfigJs(featureSet) {
2
+ const usePages = featureSet.has("pages");
3
+ const useAutoImport = featureSet.has("autoImport");
4
+ const useComponents = featureSet.has("components");
5
+ const useUno = featureSet.has("unocss");
6
+ const useVant = featureSet.has("vant");
7
+ const useElementPlus = featureSet.has("elementPlus");
8
+ const externalImports = [];
9
+ externalImports.push({
10
+ source: "@vitejs/plugin-vue",
11
+ line: `import vue from '@vitejs/plugin-vue'`,
12
+ });
13
+ externalImports.push({
14
+ source: "vite",
15
+ line: `import { defineConfig } from 'vite'`,
16
+ });
17
+ externalImports.push({
18
+ source: "vite-plugin-vue-devtools",
19
+ line: `import vueDevTools from 'vite-plugin-vue-devtools'`,
20
+ });
21
+ if (useVant)
22
+ externalImports.push({
23
+ source: "@vant/auto-import-resolver",
24
+ line: `import { VantResolver } from '@vant/auto-import-resolver'`,
25
+ });
26
+ if (useUno)
27
+ externalImports.push({
28
+ source: "unocss/vite",
29
+ line: `import UnoCSS from 'unocss/vite'`,
30
+ });
31
+ if (useAutoImport)
32
+ externalImports.push({
33
+ source: "unplugin-auto-import/vite",
34
+ line: `import AutoImport from 'unplugin-auto-import/vite'`,
35
+ });
36
+ if (useElementPlus)
37
+ externalImports.push({
38
+ source: "unplugin-vue-components/resolvers",
39
+ line: `import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'`,
40
+ });
41
+ if (useComponents)
42
+ externalImports.push({
43
+ source: "unplugin-vue-components/vite",
44
+ line: `import Components from 'unplugin-vue-components/vite'`,
45
+ });
46
+ if (usePages)
47
+ externalImports.push({
48
+ source: "vite-plugin-pages",
49
+ line: `import Pages from 'vite-plugin-pages'`,
50
+ });
51
+ externalImports.sort((a, b) => a.source.localeCompare(b.source));
52
+ const importLines = [
53
+ `import { fileURLToPath, URL } from 'node:url'`,
54
+ ...externalImports.map((i) => i.line),
55
+ ];
56
+ const plugins = [];
57
+ const resolverItems = [];
58
+ if (useVant) resolverItems.push("VantResolver()");
59
+ if (useElementPlus) resolverItems.push("ElementPlusResolver()");
60
+ const resolvers = resolverItems.length
61
+ ? `[${resolverItems.join(", ")}]`
62
+ : "[]";
63
+ if (usePages) {
64
+ plugins.push(`Pages({
65
+ dirs: 'src/views',
66
+ extensions: ['vue', 'ts'],
67
+ importMode: 'async'
68
+ })`);
69
+ }
70
+ if (useComponents) {
71
+ plugins.push(`Components({
72
+ resolvers: ${resolvers},
73
+ dts: 'src/types/components.d.ts',
74
+ dirs: ['src/components']
75
+ })`);
76
+ }
77
+ if (useAutoImport) {
78
+ const imports = featureSet.has("pinia") ? `['vue', 'pinia']` : `['vue']`;
79
+ plugins.push(`AutoImport({
80
+ resolvers: ${resolvers},
81
+ imports: ${imports},
82
+ dts: 'src/types/auto-import.d.ts',
83
+ dirs: ['src/hooks'],
84
+ vueTemplate: true
85
+ })`);
86
+ }
87
+ if (useUno) plugins.push(`UnoCSS()`);
88
+ plugins.push(`vue()`);
89
+ plugins.push(`vueDevTools()`);
90
+ return `${importLines.join("\n")}
91
+
92
+ // https://vite.dev/config/
93
+ export default defineConfig({
94
+ plugins: [
95
+ ${plugins.join(",\n ")}
96
+ ],
97
+ resolve: {
98
+ alias: {
99
+ '@': fileURLToPath(new URL('./src', import.meta.url))
100
+ }
101
+ }
102
+ })
103
+ `;
104
+ }
@@ -0,0 +1,55 @@
1
+ export function renderVsCodeSettings() {
2
+ return `{
3
+ "eslint.useFlatConfig": true,
4
+ "prettier.enable": false,
5
+ "editor.formatOnSave": false,
6
+ "editor.codeActionsOnSave": {
7
+ "source.fixAll.eslint": "explicit",
8
+ "source.fixAll.stylelint": "explicit",
9
+ "source.organizeImports": "never"
10
+ },
11
+ "stylelint.validate": [
12
+ "css",
13
+ "postcss",
14
+ "scss",
15
+ "vue"
16
+ ],
17
+ "eslint.validate": [
18
+ "javascript",
19
+ "typescript",
20
+ "vue",
21
+ "html",
22
+ "markdown",
23
+ "json",
24
+ "jsonc",
25
+ "yaml"
26
+ ],
27
+ "css.lint.unknownAtRules": "ignore",
28
+ "scss.lint.unknownAtRules": "ignore",
29
+ "scss.lint.unknownProperties": "ignore",
30
+ "cSpell.enabled": false
31
+ }
32
+ `;
33
+ }
34
+ export function renderVsCodeExtensions(language, features) {
35
+ const recommendations = new Set();
36
+ recommendations.add("Vue.volar");
37
+ recommendations.add("EditorConfig.EditorConfig");
38
+ if (features.has("eslintAntfu"))
39
+ recommendations.add("dbaeumer.vscode-eslint");
40
+ if (features.has("stylelint"))
41
+ recommendations.add("stylelint.vscode-stylelint");
42
+ if (features.has("unocss")) recommendations.add("antfu.unocss");
43
+ const sorted = Array.from(recommendations).sort((a, b) => a.localeCompare(b));
44
+ const lines = [
45
+ "{",
46
+ ' "recommendations": [',
47
+ ...sorted.map(
48
+ (id, idx) => ` "${id}"${idx === sorted.length - 1 ? "" : ","}`,
49
+ ),
50
+ " ]",
51
+ "}",
52
+ "",
53
+ ];
54
+ return lines.join("\n");
55
+ }