@kvihaugen/create-frontend-app 1.0.5 → 1.1.1
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.
- package/dist/index.js +78 -18
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +114 -23
package/dist/index.js
CHANGED
|
@@ -6,28 +6,88 @@ import path from "node:path";
|
|
|
6
6
|
import { execSync } from "node:child_process";
|
|
7
7
|
const cwd = process.cwd();
|
|
8
8
|
(async () => {
|
|
9
|
-
console.log("
|
|
10
|
-
const emitter = degit("LarsSK06/frontend-template");
|
|
9
|
+
console.log("🚀 Creating frontend app...\n");
|
|
11
10
|
const tempFolderPath = path.join(os.tmpdir(), `${Date.now()}-create-frontend-app`);
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
"
|
|
17
|
-
"
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
const
|
|
22
|
-
|
|
23
|
-
|
|
11
|
+
{
|
|
12
|
+
console.log("\t- 🔃 Generating Next.js app...");
|
|
13
|
+
const emitter = degit("LarsSK06/frontend-template");
|
|
14
|
+
await emitter.clone(tempFolderPath);
|
|
15
|
+
execSync("npx create-next-app . --yes --empty --skip-install");
|
|
16
|
+
console.log("\t ✅ Generated Next.js app!\n");
|
|
17
|
+
}
|
|
18
|
+
{
|
|
19
|
+
console.log("\t- 🔃 Cloning files from template...");
|
|
20
|
+
for (const objName of [
|
|
21
|
+
"src",
|
|
22
|
+
"public",
|
|
23
|
+
"postcss.config.mjs",
|
|
24
|
+
"next.config.ts"
|
|
25
|
+
]) {
|
|
26
|
+
const absoluteCwdPath = path.join(cwd, objName);
|
|
27
|
+
const absoluteTempFolderPath = path.join(tempFolderPath, objName);
|
|
28
|
+
if (fs.existsSync(absoluteCwdPath)) {
|
|
29
|
+
const stat = fs.statSync(absoluteCwdPath);
|
|
30
|
+
if (stat.isFile())
|
|
31
|
+
fs.unlinkSync(absoluteCwdPath);
|
|
32
|
+
else
|
|
33
|
+
fs.rmSync(absoluteCwdPath, { recursive: true, force: true });
|
|
34
|
+
}
|
|
35
|
+
fs.cpSync(absoluteTempFolderPath, absoluteCwdPath, { recursive: true });
|
|
36
|
+
}
|
|
37
|
+
console.log("\t ✅ Cloned files from template!\n");
|
|
38
|
+
}
|
|
39
|
+
{
|
|
40
|
+
console.log("\t- 🔃 Formatting files...");
|
|
41
|
+
for (const fileName of [
|
|
42
|
+
"package.json",
|
|
43
|
+
"package-lock.json",
|
|
44
|
+
"tsconfig.json"
|
|
45
|
+
]) {
|
|
46
|
+
const absolutePath = path.join(cwd, fileName);
|
|
47
|
+
if (!fs.existsSync(absolutePath))
|
|
48
|
+
continue;
|
|
49
|
+
const fileContent = fs.readFileSync(absolutePath).toString();
|
|
50
|
+
fs.writeFileSync(absolutePath, JSON.stringify(JSON.parse(fileContent), null, 4));
|
|
51
|
+
}
|
|
52
|
+
console.log("\t ✅ Formatted files!\n");
|
|
53
|
+
}
|
|
54
|
+
{
|
|
55
|
+
console.log("\t- 🔃 Deleting unnecessary files...");
|
|
56
|
+
for (const objName of [
|
|
57
|
+
"README.md"
|
|
58
|
+
]) {
|
|
59
|
+
const absolutePath = path.join(cwd, objName);
|
|
60
|
+
if (!fs.existsSync(absolutePath))
|
|
61
|
+
continue;
|
|
62
|
+
const stat = fs.statSync(absolutePath);
|
|
24
63
|
if (stat.isFile())
|
|
25
|
-
fs.unlinkSync(
|
|
64
|
+
fs.unlinkSync(absolutePath);
|
|
26
65
|
else
|
|
27
|
-
fs.rmSync(
|
|
66
|
+
fs.rmSync(absolutePath, { recursive: true, force: true });
|
|
28
67
|
}
|
|
29
|
-
|
|
68
|
+
console.log("\t ✅ Deleted unnecessary files!");
|
|
69
|
+
}
|
|
70
|
+
{
|
|
71
|
+
console.log("\t- 🔃 Installing dependencies...");
|
|
72
|
+
const packageNames = [
|
|
73
|
+
"@mantine/core",
|
|
74
|
+
"@mantine/hooks",
|
|
75
|
+
"@tabler/icons-react",
|
|
76
|
+
"i18next",
|
|
77
|
+
"react-i18next"
|
|
78
|
+
];
|
|
79
|
+
execSync(`npm i ${packageNames.join(" ")}`);
|
|
80
|
+
console.log("\t ✅ Installed dependencies!");
|
|
81
|
+
}
|
|
82
|
+
{
|
|
83
|
+
console.log("\t- 🔃 Installing development dependencies...");
|
|
84
|
+
const packageNames = [
|
|
85
|
+
"postcss",
|
|
86
|
+
"postcss-preset-mantine",
|
|
87
|
+
"postcss-simple-vars"
|
|
88
|
+
];
|
|
89
|
+
execSync(`npm i --save-dev ${packageNames.join(" ")}`);
|
|
90
|
+
console.log("\t ✅ Installed development dependencies!");
|
|
30
91
|
}
|
|
31
|
-
console.log("✅ Created frontend app!");
|
|
32
92
|
})();
|
|
33
93
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;AAE1B,CAAC,KAAK,IAAI,EAAE;IAER,OAAO,CAAC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -11,39 +11,130 @@ const cwd = process.cwd();
|
|
|
11
11
|
|
|
12
12
|
(async () => {
|
|
13
13
|
|
|
14
|
-
console.log("
|
|
14
|
+
console.log("🚀 Creating frontend app...\n");
|
|
15
15
|
|
|
16
|
-
const emitter = degit("LarsSK06/frontend-template");
|
|
17
16
|
|
|
18
17
|
const tempFolderPath = path.join(os.tmpdir(), `${Date.now()}-create-frontend-app`);
|
|
19
18
|
|
|
20
|
-
await emitter.clone(tempFolderPath);
|
|
21
19
|
|
|
22
|
-
|
|
20
|
+
{
|
|
21
|
+
console.log("\t- 🔃 Generating Next.js app...");
|
|
22
|
+
|
|
23
|
+
const emitter = degit("LarsSK06/frontend-template");
|
|
24
|
+
|
|
25
|
+
await emitter.clone(tempFolderPath);
|
|
26
|
+
|
|
27
|
+
execSync("npx create-next-app . --yes --empty --skip-install");
|
|
28
|
+
|
|
29
|
+
console.log("\t ✅ Generated Next.js app!\n");
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
{
|
|
34
|
+
console.log("\t- 🔃 Cloning files from template...");
|
|
35
|
+
|
|
36
|
+
for (const objName of [
|
|
37
|
+
"src",
|
|
38
|
+
"public",
|
|
39
|
+
"postcss.config.mjs",
|
|
40
|
+
"next.config.ts"
|
|
41
|
+
]) {
|
|
42
|
+
const absoluteCwdPath = path.join(cwd, objName);
|
|
43
|
+
const absoluteTempFolderPath = path.join(tempFolderPath, objName);
|
|
44
|
+
|
|
45
|
+
if (fs.existsSync(absoluteCwdPath)) {
|
|
46
|
+
const stat = fs.statSync(absoluteCwdPath);
|
|
47
|
+
|
|
48
|
+
if (stat.isFile()) fs.unlinkSync(absoluteCwdPath);
|
|
49
|
+
else fs.rmSync(absoluteCwdPath, { recursive: true, force: true });
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
fs.cpSync(
|
|
53
|
+
absoluteTempFolderPath,
|
|
54
|
+
absoluteCwdPath,
|
|
55
|
+
{ recursive: true }
|
|
56
|
+
);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
console.log("\t ✅ Cloned files from template!\n");
|
|
60
|
+
}
|
|
23
61
|
|
|
24
|
-
for (const objName of [
|
|
25
|
-
"src",
|
|
26
|
-
"public",
|
|
27
|
-
"postcss.config.mjs",
|
|
28
|
-
"next.config.ts"
|
|
29
|
-
]) {
|
|
30
|
-
const absoluteCwdPath = path.join(cwd, objName);
|
|
31
|
-
const absoluteTempFolderPath = path.join(tempFolderPath, objName);
|
|
32
|
-
|
|
33
|
-
if (fs.existsSync(absoluteCwdPath)) {
|
|
34
|
-
const stat = fs.statSync(absoluteCwdPath);
|
|
35
62
|
|
|
36
|
-
|
|
37
|
-
|
|
63
|
+
{
|
|
64
|
+
console.log("\t- 🔃 Formatting files...");
|
|
65
|
+
|
|
66
|
+
for (const fileName of [
|
|
67
|
+
"package.json",
|
|
68
|
+
"package-lock.json",
|
|
69
|
+
"tsconfig.json"
|
|
70
|
+
]) {
|
|
71
|
+
const absolutePath = path.join(cwd, fileName);
|
|
72
|
+
|
|
73
|
+
if (!fs.existsSync(absolutePath))
|
|
74
|
+
continue;
|
|
75
|
+
|
|
76
|
+
const fileContent = fs.readFileSync(absolutePath).toString();
|
|
77
|
+
|
|
78
|
+
fs.writeFileSync(
|
|
79
|
+
absolutePath,
|
|
80
|
+
JSON.stringify(JSON.parse(fileContent), null, 4)
|
|
81
|
+
);
|
|
38
82
|
}
|
|
83
|
+
|
|
84
|
+
console.log("\t ✅ Formatted files!\n");
|
|
85
|
+
}
|
|
86
|
+
|
|
39
87
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
88
|
+
{
|
|
89
|
+
console.log("\t- 🔃 Deleting unnecessary files...");
|
|
90
|
+
|
|
91
|
+
for (const objName of [
|
|
92
|
+
"README.md"
|
|
93
|
+
]) {
|
|
94
|
+
const absolutePath = path.join(cwd, objName);
|
|
95
|
+
|
|
96
|
+
if (!fs.existsSync(absolutePath))
|
|
97
|
+
continue;
|
|
98
|
+
|
|
99
|
+
const stat = fs.statSync(absolutePath);
|
|
100
|
+
|
|
101
|
+
if (stat.isFile()) fs.unlinkSync(absolutePath);
|
|
102
|
+
else fs.rmSync(absolutePath, { recursive: true, force: true });
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
console.log("\t ✅ Deleted unnecessary files!");
|
|
45
106
|
}
|
|
46
107
|
|
|
47
|
-
|
|
108
|
+
|
|
109
|
+
{
|
|
110
|
+
console.log("\t- 🔃 Installing dependencies...");
|
|
111
|
+
|
|
112
|
+
const packageNames = [
|
|
113
|
+
"@mantine/core",
|
|
114
|
+
"@mantine/hooks",
|
|
115
|
+
"@tabler/icons-react",
|
|
116
|
+
"i18next",
|
|
117
|
+
"react-i18next"
|
|
118
|
+
];
|
|
119
|
+
|
|
120
|
+
execSync(`npm i ${packageNames.join(" ")}`);
|
|
121
|
+
|
|
122
|
+
console.log("\t ✅ Installed dependencies!");
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
{
|
|
127
|
+
console.log("\t- 🔃 Installing development dependencies...");
|
|
128
|
+
|
|
129
|
+
const packageNames = [
|
|
130
|
+
"postcss",
|
|
131
|
+
"postcss-preset-mantine",
|
|
132
|
+
"postcss-simple-vars"
|
|
133
|
+
];
|
|
134
|
+
|
|
135
|
+
execSync(`npm i --save-dev ${packageNames.join(" ")}`);
|
|
136
|
+
|
|
137
|
+
console.log("\t ✅ Installed development dependencies!");
|
|
138
|
+
}
|
|
48
139
|
|
|
49
140
|
})();
|