create-sprint 0.0.42 → 0.0.46
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/generators.js +5 -5
- package/dist/index.js +15 -45
- package/package.json +1 -1
- package/src/generators.ts +5 -5
- package/src/index.ts +20 -52
package/dist/generators.js
CHANGED
|
@@ -65,10 +65,11 @@ export function getJavaScriptPackageJson(name, telemetry) {
|
|
|
65
65
|
export function getTsConfig() {
|
|
66
66
|
return JSON.stringify({
|
|
67
67
|
compilerOptions: {
|
|
68
|
-
target: "
|
|
69
|
-
module: "
|
|
70
|
-
moduleResolution: "
|
|
71
|
-
lib: ["
|
|
68
|
+
target: "ES2022",
|
|
69
|
+
module: "NodeNext",
|
|
70
|
+
moduleResolution: "NodeNext",
|
|
71
|
+
lib: ["ES2022"],
|
|
72
|
+
types: ["node"],
|
|
72
73
|
outDir: "./dist",
|
|
73
74
|
rootDir: "./src",
|
|
74
75
|
strict: true,
|
|
@@ -79,7 +80,6 @@ export function getTsConfig() {
|
|
|
79
80
|
declaration: true,
|
|
80
81
|
declarationMap: true,
|
|
81
82
|
sourceMap: true,
|
|
82
|
-
tabWidth: 4,
|
|
83
83
|
baseUrl: ".",
|
|
84
84
|
paths: {
|
|
85
85
|
"@/*": ["./src/*"]
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { spawn } from "child_process";
|
|
2
2
|
import { existsSync } from "fs";
|
|
3
3
|
import { mkdir, writeFile } from "fs/promises";
|
|
4
4
|
import { join } from "path";
|
|
@@ -47,7 +47,18 @@ export async function runCLI(args) {
|
|
|
47
47
|
const s2 = p.spinner();
|
|
48
48
|
s2.start("Installing dependencies");
|
|
49
49
|
try {
|
|
50
|
-
|
|
50
|
+
await new Promise((resolve, reject) => {
|
|
51
|
+
const child = spawn("npm", ["install"], {
|
|
52
|
+
cwd: targetDir,
|
|
53
|
+
stdio: "pipe"
|
|
54
|
+
});
|
|
55
|
+
child.on("close", (code) => {
|
|
56
|
+
if (code === 0)
|
|
57
|
+
resolve();
|
|
58
|
+
else
|
|
59
|
+
reject(new Error(`npm install exited with code ${code}`));
|
|
60
|
+
});
|
|
61
|
+
});
|
|
51
62
|
s2.stop("Dependencies installed");
|
|
52
63
|
}
|
|
53
64
|
catch {
|
|
@@ -93,56 +104,15 @@ function parseArgs(args) {
|
|
|
93
104
|
return options;
|
|
94
105
|
}
|
|
95
106
|
;
|
|
96
|
-
async function
|
|
97
|
-
const name = await p.text({
|
|
98
|
-
message: "Enter project name:",
|
|
99
|
-
validate: (value) => validateProjectName(value) || undefined,
|
|
100
|
-
});
|
|
101
|
-
return name;
|
|
102
|
-
}
|
|
103
|
-
;
|
|
104
|
-
async function selectLanguage() {
|
|
105
|
-
const language = await p.select({
|
|
106
|
-
message: "Select your preferred language:",
|
|
107
|
-
options: [
|
|
108
|
-
{ value: "typescript", label: "TypeScript", hint: "recommended" },
|
|
109
|
-
{ value: "javascript", label: "JavaScript" },
|
|
110
|
-
],
|
|
111
|
-
});
|
|
112
|
-
return language;
|
|
113
|
-
}
|
|
114
|
-
;
|
|
115
|
-
async function selectTelemetry() {
|
|
116
|
-
const telemetry = await p.select({
|
|
117
|
-
message: "Select error tracking/telemetry solution:",
|
|
118
|
-
options: [
|
|
119
|
-
{ value: "none", label: "None" },
|
|
120
|
-
{ value: "sentry", label: "Sentry", hint: "free tier available" },
|
|
121
|
-
{ value: "glitchtip", label: "GlitchTip", hint: "self-hostable" },
|
|
122
|
-
{ value: "discord", label: "Discord Webhook", hint: "sends to a channel" },
|
|
123
|
-
],
|
|
124
|
-
});
|
|
125
|
-
return telemetry;
|
|
126
|
-
}
|
|
127
|
-
async function createProject(projectName, language, telemetryArg, useDockerArg) {
|
|
107
|
+
async function createProject(projectName, language, telemetry, useDocker) {
|
|
128
108
|
const isCurrentDir = projectName === ".";
|
|
129
109
|
const targetDir = isCurrentDir ? process.cwd() : join(process.cwd(), projectName);
|
|
130
110
|
if (!isCurrentDir && existsSync(targetDir)) {
|
|
131
|
-
|
|
111
|
+
p.cancel(`Directory "${projectName}" already exists.`);
|
|
132
112
|
process.exit(1);
|
|
133
113
|
}
|
|
134
114
|
if (!isCurrentDir)
|
|
135
115
|
await mkdir(targetDir, { recursive: true });
|
|
136
|
-
let telemetry = telemetryArg || "none";
|
|
137
|
-
if (!telemetryArg)
|
|
138
|
-
telemetry = await selectTelemetry();
|
|
139
|
-
let useDocker = useDockerArg || false;
|
|
140
|
-
if (!useDockerArg) {
|
|
141
|
-
useDocker = await p.confirm({
|
|
142
|
-
message: "Do you want to add Docker support?",
|
|
143
|
-
initialValue: false,
|
|
144
|
-
});
|
|
145
|
-
}
|
|
146
116
|
let pkgJson;
|
|
147
117
|
if (language === "typescript")
|
|
148
118
|
pkgJson = getTypeScriptPackageJson(projectName, telemetry);
|
package/package.json
CHANGED
package/src/generators.ts
CHANGED
|
@@ -77,10 +77,11 @@ export function getJavaScriptPackageJson(name: string, telemetry: string) {
|
|
|
77
77
|
export function getTsConfig() {
|
|
78
78
|
return JSON.stringify({
|
|
79
79
|
compilerOptions: {
|
|
80
|
-
target: "
|
|
81
|
-
module: "
|
|
82
|
-
moduleResolution: "
|
|
83
|
-
lib: ["
|
|
80
|
+
target: "ES2022",
|
|
81
|
+
module: "NodeNext",
|
|
82
|
+
moduleResolution: "NodeNext",
|
|
83
|
+
lib: ["ES2022"],
|
|
84
|
+
types: ["node"],
|
|
84
85
|
outDir: "./dist",
|
|
85
86
|
rootDir: "./src",
|
|
86
87
|
strict: true,
|
|
@@ -91,7 +92,6 @@ export function getTsConfig() {
|
|
|
91
92
|
declaration: true,
|
|
92
93
|
declarationMap: true,
|
|
93
94
|
sourceMap: true,
|
|
94
|
-
tabWidth: 4,
|
|
95
95
|
baseUrl: ".",
|
|
96
96
|
paths: {
|
|
97
97
|
"@/*": ["./src/*"]
|
package/src/index.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { spawn } from "child_process";
|
|
2
2
|
import { existsSync } from "fs";
|
|
3
3
|
import { mkdir, writeFile } from "fs/promises";
|
|
4
4
|
import { join } from "path";
|
|
@@ -64,7 +64,12 @@ export async function runCLI(args: string[]) {
|
|
|
64
64
|
|
|
65
65
|
const s = p.spinner();
|
|
66
66
|
s.start("Creating project");
|
|
67
|
-
await createProject(
|
|
67
|
+
await createProject(
|
|
68
|
+
config.projectName as string,
|
|
69
|
+
config.language as "typescript" | "javascript",
|
|
70
|
+
config.telemetry as string,
|
|
71
|
+
config.docker as boolean,
|
|
72
|
+
);
|
|
68
73
|
s.stop("Project created");
|
|
69
74
|
|
|
70
75
|
const installDeps = await p.confirm({ message: "Install dependencies now?", initialValue: true });
|
|
@@ -73,7 +78,16 @@ export async function runCLI(args: string[]) {
|
|
|
73
78
|
const s2 = p.spinner();
|
|
74
79
|
s2.start("Installing dependencies");
|
|
75
80
|
try {
|
|
76
|
-
|
|
81
|
+
await new Promise<void>((resolve, reject) => {
|
|
82
|
+
const child = spawn("npm", ["install"], {
|
|
83
|
+
cwd: targetDir,
|
|
84
|
+
stdio: "pipe"
|
|
85
|
+
});
|
|
86
|
+
child.on("close", (code) => {
|
|
87
|
+
if (code === 0) resolve();
|
|
88
|
+
else reject(new Error(`npm install exited with code ${code}`));
|
|
89
|
+
});
|
|
90
|
+
});
|
|
77
91
|
s2.stop("Dependencies installed");
|
|
78
92
|
} catch {
|
|
79
93
|
s2.stop("Install failed — run npm install manually");
|
|
@@ -122,68 +136,22 @@ function parseArgs(args: string[]): CLIOptions {
|
|
|
122
136
|
return options;
|
|
123
137
|
};
|
|
124
138
|
|
|
125
|
-
async function getProjectName(): Promise<string> {
|
|
126
|
-
const name = await p.text({
|
|
127
|
-
message: "Enter project name:",
|
|
128
|
-
validate: (value) => validateProjectName(value) || undefined,
|
|
129
|
-
});
|
|
130
|
-
|
|
131
|
-
return name as string;
|
|
132
|
-
};
|
|
133
|
-
|
|
134
|
-
async function selectLanguage(): Promise<"typescript" | "javascript"> {
|
|
135
|
-
const language = await p.select({
|
|
136
|
-
message: "Select your preferred language:",
|
|
137
|
-
options: [
|
|
138
|
-
{ value: "typescript", label: "TypeScript", hint: "recommended" },
|
|
139
|
-
{ value: "javascript", label: "JavaScript" },
|
|
140
|
-
],
|
|
141
|
-
});
|
|
142
|
-
|
|
143
|
-
return language as "typescript" | "javascript";
|
|
144
|
-
};
|
|
145
|
-
|
|
146
|
-
async function selectTelemetry(): Promise<"none" | "sentry" | "glitchtip" | "discord"> {
|
|
147
|
-
const telemetry = await p.select({
|
|
148
|
-
message: "Select error tracking/telemetry solution:",
|
|
149
|
-
options: [
|
|
150
|
-
{ value: "none", label: "None" },
|
|
151
|
-
{ value: "sentry", label: "Sentry", hint: "free tier available" },
|
|
152
|
-
{ value: "glitchtip", label: "GlitchTip", hint: "self-hostable" },
|
|
153
|
-
{ value: "discord", label: "Discord Webhook", hint: "sends to a channel" },
|
|
154
|
-
],
|
|
155
|
-
});
|
|
156
|
-
|
|
157
|
-
return telemetry as "none" | "sentry" | "glitchtip" | "discord";
|
|
158
|
-
}
|
|
159
|
-
|
|
160
139
|
async function createProject(
|
|
161
140
|
projectName: string,
|
|
162
141
|
language: "typescript" | "javascript",
|
|
163
|
-
|
|
164
|
-
|
|
142
|
+
telemetry: string,
|
|
143
|
+
useDocker: boolean
|
|
165
144
|
) {
|
|
166
145
|
const isCurrentDir = projectName === ".";
|
|
167
146
|
const targetDir = isCurrentDir ? process.cwd() : join(process.cwd(), projectName);
|
|
168
147
|
|
|
169
148
|
if (!isCurrentDir && existsSync(targetDir)) {
|
|
170
|
-
|
|
149
|
+
p.cancel(`Directory "${projectName}" already exists.`);
|
|
171
150
|
process.exit(1);
|
|
172
151
|
}
|
|
173
152
|
|
|
174
153
|
if (!isCurrentDir) await mkdir(targetDir, { recursive: true });
|
|
175
154
|
|
|
176
|
-
let telemetry = telemetryArg || "none";
|
|
177
|
-
if (!telemetryArg) telemetry = await selectTelemetry();
|
|
178
|
-
|
|
179
|
-
let useDocker = useDockerArg || false;
|
|
180
|
-
if (!useDockerArg) {
|
|
181
|
-
useDocker = await p.confirm({
|
|
182
|
-
message: "Do you want to add Docker support?",
|
|
183
|
-
initialValue: false,
|
|
184
|
-
}) as boolean;
|
|
185
|
-
}
|
|
186
|
-
|
|
187
155
|
let pkgJson;
|
|
188
156
|
if (language === "typescript") pkgJson = getTypeScriptPackageJson(projectName, telemetry);
|
|
189
157
|
else pkgJson = getJavaScriptPackageJson(projectName, telemetry);
|