create-warlock 4.0.42 → 4.0.47
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/cjs/index.js +5 -414
- package/cjs/index.js.map +1 -1
- package/esm/index.js +3 -359
- package/esm/index.js.map +1 -1
- package/package.json +1 -1
package/cjs/index.js
CHANGED
|
@@ -1,426 +1,17 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var fs = require('@mongez/fs');
|
|
4
|
-
var
|
|
5
|
-
var
|
|
6
|
-
var path = require('path');
|
|
7
|
-
var spawn = require('cross-spawn');
|
|
8
|
-
var url = require('url');
|
|
9
|
-
var detectPackageManager = require('which-pm-runs');
|
|
10
|
-
var rimraf = require('rimraf');
|
|
4
|
+
var createNewApp = require('./commands/create-new-app');
|
|
5
|
+
var paths = require('./helpers/paths');
|
|
11
6
|
|
|
12
7
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
13
8
|
|
|
14
|
-
|
|
15
|
-
if (e && e.__esModule) return e;
|
|
16
|
-
var n = Object.create(null);
|
|
17
|
-
if (e) {
|
|
18
|
-
Object.keys(e).forEach(function (k) {
|
|
19
|
-
if (k !== 'default') {
|
|
20
|
-
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
21
|
-
Object.defineProperty(n, k, d.get ? d : {
|
|
22
|
-
enumerable: true,
|
|
23
|
-
get: function () { return e[k]; }
|
|
24
|
-
});
|
|
25
|
-
}
|
|
26
|
-
});
|
|
27
|
-
}
|
|
28
|
-
n.default = e;
|
|
29
|
-
return Object.freeze(n);
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
var path__namespace = /*#__PURE__*/_interopNamespace(path);
|
|
33
|
-
var spawn__default = /*#__PURE__*/_interopDefault(spawn);
|
|
34
|
-
var detectPackageManager__default = /*#__PURE__*/_interopDefault(detectPackageManager);
|
|
35
|
-
|
|
36
|
-
var __async = (__this, __arguments, generator) => {
|
|
37
|
-
return new Promise((resolve2, reject) => {
|
|
38
|
-
var fulfilled = (value) => {
|
|
39
|
-
try {
|
|
40
|
-
step(generator.next(value));
|
|
41
|
-
} catch (e) {
|
|
42
|
-
reject(e);
|
|
43
|
-
}
|
|
44
|
-
};
|
|
45
|
-
var rejected = (value) => {
|
|
46
|
-
try {
|
|
47
|
-
step(generator.throw(value));
|
|
48
|
-
} catch (e) {
|
|
49
|
-
reject(e);
|
|
50
|
-
}
|
|
51
|
-
};
|
|
52
|
-
var step = (x) => x.done ? resolve2(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
53
|
-
step((generator = generator.apply(__this, __arguments)).next());
|
|
54
|
-
});
|
|
55
|
-
};
|
|
56
|
-
function executeCommand(cmd, args, cwd) {
|
|
57
|
-
return __async(this, null, function* () {
|
|
58
|
-
return new Promise((resolve2) => {
|
|
59
|
-
const child = spawn__default.default(cmd, args, {
|
|
60
|
-
cwd,
|
|
61
|
-
stdio: "ignore"
|
|
62
|
-
});
|
|
63
|
-
child.on("error", (e) => {
|
|
64
|
-
if (e) {
|
|
65
|
-
if (e.message) {
|
|
66
|
-
prompts.log.error(copper.colors.red(String(e.message)) + `
|
|
67
|
-
|
|
68
|
-
`);
|
|
69
|
-
} else {
|
|
70
|
-
prompts.log.error(copper.colors.red(String(e)) + `
|
|
71
|
-
|
|
72
|
-
`);
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
resolve2(false);
|
|
76
|
-
});
|
|
77
|
-
child.on("close", (code) => {
|
|
78
|
-
if (code === 0) {
|
|
79
|
-
resolve2(true);
|
|
80
|
-
} else {
|
|
81
|
-
resolve2(false);
|
|
82
|
-
}
|
|
83
|
-
});
|
|
84
|
-
});
|
|
85
|
-
});
|
|
86
|
-
}
|
|
87
|
-
function runCommand(cmd, args, cwd) {
|
|
88
|
-
let child;
|
|
89
|
-
const install = new Promise((resolve2) => {
|
|
90
|
-
try {
|
|
91
|
-
child = spawn__default.default(cmd, args, {
|
|
92
|
-
cwd,
|
|
93
|
-
stdio: "ignore"
|
|
94
|
-
});
|
|
95
|
-
child.on("error", (e) => {
|
|
96
|
-
if (e) {
|
|
97
|
-
if (e.message) {
|
|
98
|
-
prompts.log.error(copper.colors.red(String(e.message)) + `
|
|
99
|
-
|
|
100
|
-
`);
|
|
101
|
-
} else {
|
|
102
|
-
prompts.log.error(copper.colors.red(String(e)) + `
|
|
103
|
-
|
|
104
|
-
`);
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
resolve2(false);
|
|
108
|
-
});
|
|
109
|
-
child.on("close", (code) => {
|
|
110
|
-
if (code === 0) {
|
|
111
|
-
resolve2(true);
|
|
112
|
-
} else {
|
|
113
|
-
resolve2(false);
|
|
114
|
-
}
|
|
115
|
-
});
|
|
116
|
-
} catch (e) {
|
|
117
|
-
resolve2(false);
|
|
118
|
-
}
|
|
119
|
-
});
|
|
120
|
-
const abort = () => __async(null, null, function* () {
|
|
121
|
-
if (child) {
|
|
122
|
-
child.kill("SIGINT");
|
|
123
|
-
}
|
|
124
|
-
});
|
|
125
|
-
return { abort, install };
|
|
126
|
-
}
|
|
127
|
-
var import_meta = {};
|
|
128
|
-
var __filename$1 = url.fileURLToPath(import_meta.url);
|
|
129
|
-
var __dirname$1 = path__namespace.default.dirname(__filename$1);
|
|
130
|
-
console.log("Executing from", __dirname$1);
|
|
131
|
-
function template(templateName) {
|
|
132
|
-
return path__namespace.default.resolve(__dirname$1, "../", "../", "templates", templateName);
|
|
133
|
-
}
|
|
134
|
-
function packageRoot(...paths) {
|
|
135
|
-
return path__namespace.default.resolve(__dirname$1, "../", "../", ...paths);
|
|
136
|
-
}
|
|
137
|
-
var detectedPackageManager;
|
|
138
|
-
function getPackageManager() {
|
|
139
|
-
if (detectedPackageManager) {
|
|
140
|
-
return detectedPackageManager;
|
|
141
|
-
}
|
|
142
|
-
const packageManager = detectPackageManager__default.default();
|
|
143
|
-
return packageManager.name || "npm";
|
|
144
|
-
}
|
|
145
|
-
function setPackageManager(packageManager) {
|
|
146
|
-
detectedPackageManager = packageManager;
|
|
147
|
-
}
|
|
148
|
-
function startCommand() {
|
|
149
|
-
if (getPackageManager() === "npm") return "npm run dev";
|
|
150
|
-
return `${getPackageManager()} dev`;
|
|
151
|
-
}
|
|
152
|
-
function runPackageManagerCommand(command) {
|
|
153
|
-
const packageManager = getPackageManager();
|
|
154
|
-
if (packageManager === "npm") return `npm run ${command}`;
|
|
155
|
-
return `${packageManager} ${command}`;
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
// ../../warlock.js/create-warlock/src/helpers/project-builder-helpers.ts
|
|
159
|
-
function initializeGitRepository(appPath) {
|
|
160
|
-
return __async(this, null, function* () {
|
|
161
|
-
yield executeCommand(`git`, ["init"], appPath);
|
|
162
|
-
yield executeCommand(`git`, ["checkout", "-b", "main"], appPath);
|
|
163
|
-
yield executeCommand(`git`, ["add", "."], appPath);
|
|
164
|
-
yield executeCommand(`git`, ["commit", "-m", "Initial commit \u26A1\uFE0F"], appPath);
|
|
165
|
-
return true;
|
|
166
|
-
});
|
|
167
|
-
}
|
|
168
|
-
function allDone(appName) {
|
|
169
|
-
return __async(this, null, function* () {
|
|
170
|
-
prompts.outro(
|
|
171
|
-
"\u{1F31F} Awesome! Your project is ready to rock! Run the following command to start development:"
|
|
172
|
-
);
|
|
173
|
-
console.log(copper.colors.cyan(`cd ${appName} && ${startCommand()}`));
|
|
174
|
-
console.log();
|
|
175
|
-
console.log(
|
|
176
|
-
`\u{1F4A1} Pro tip: Install the ${copper.colors.yellow(
|
|
177
|
-
"Generator Z"
|
|
178
|
-
)} extension in VSCode for helpful code snippets and productivity boosters! \u{1F680}`
|
|
179
|
-
);
|
|
180
|
-
});
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
// ../../warlock.js/create-warlock/src/helpers/app.ts
|
|
184
|
-
var App = class {
|
|
185
|
-
constructor(app) {
|
|
186
|
-
this.app = app;
|
|
187
|
-
/**
|
|
188
|
-
* Resolved files
|
|
189
|
-
*/
|
|
190
|
-
this.files = {};
|
|
191
|
-
this.isInstalled = false;
|
|
192
|
-
}
|
|
193
|
-
use(templateName) {
|
|
194
|
-
fs.copyDirectory(template(templateName), this.path);
|
|
195
|
-
if (fs.fileExists(this.path + "/.env.example")) {
|
|
196
|
-
fs.copyFile(this.path + "/.env.example", this.path + "/.env");
|
|
197
|
-
}
|
|
198
|
-
fs.renameFile(this.path + "/_.gitignore", this.path + "/.gitignore");
|
|
199
|
-
return this;
|
|
200
|
-
}
|
|
201
|
-
init() {
|
|
202
|
-
return this;
|
|
203
|
-
}
|
|
204
|
-
terminate() {
|
|
205
|
-
allDone(this.name);
|
|
206
|
-
}
|
|
207
|
-
install() {
|
|
208
|
-
return runCommand(getPackageManager(), ["install"], this.path);
|
|
209
|
-
}
|
|
210
|
-
exec(command) {
|
|
211
|
-
return __async(this, null, function* () {
|
|
212
|
-
const [commandName, ...optionsList] = command.split(" ");
|
|
213
|
-
return yield executeCommand(commandName, optionsList, this.path);
|
|
214
|
-
});
|
|
215
|
-
}
|
|
216
|
-
git() {
|
|
217
|
-
return __async(this, null, function* () {
|
|
218
|
-
return yield initializeGitRepository(this.path);
|
|
219
|
-
});
|
|
220
|
-
}
|
|
221
|
-
updatePackageJson() {
|
|
222
|
-
this.package.replace("name", this.name.replaceAll("/", "-")).replaceAll("yarn", getPackageManager()).save();
|
|
223
|
-
return this;
|
|
224
|
-
}
|
|
225
|
-
/**
|
|
226
|
-
* Get package json file
|
|
227
|
-
*/
|
|
228
|
-
get package() {
|
|
229
|
-
return this.json("package.json");
|
|
230
|
-
}
|
|
231
|
-
updateDotEnv() {
|
|
232
|
-
this.file(".env").replaceAll("appName", this.name).save();
|
|
233
|
-
return this;
|
|
234
|
-
}
|
|
235
|
-
/**
|
|
236
|
-
* Get env file to update
|
|
237
|
-
*/
|
|
238
|
-
get env() {
|
|
239
|
-
return this.file(".env");
|
|
240
|
-
}
|
|
241
|
-
get name() {
|
|
242
|
-
return this.app.appName;
|
|
243
|
-
}
|
|
244
|
-
get path() {
|
|
245
|
-
return this.app.appPath;
|
|
246
|
-
}
|
|
247
|
-
file(relativePath) {
|
|
248
|
-
const fullPath = path__namespace.default.resolve(this.path, relativePath);
|
|
249
|
-
if (!this.files[fullPath]) {
|
|
250
|
-
this.files[fullPath] = file(fullPath);
|
|
251
|
-
}
|
|
252
|
-
return this.files[fullPath];
|
|
253
|
-
}
|
|
254
|
-
json(relativePath) {
|
|
255
|
-
const fullPath = path__namespace.default.resolve(this.path, relativePath);
|
|
256
|
-
if (!this.files[fullPath]) {
|
|
257
|
-
this.files[fullPath] = jsonFile(fullPath);
|
|
258
|
-
}
|
|
259
|
-
return this.files[fullPath];
|
|
260
|
-
}
|
|
261
|
-
};
|
|
262
|
-
var FileManager = class {
|
|
263
|
-
constructor(filePath) {
|
|
264
|
-
this.filePath = filePath;
|
|
265
|
-
this.parseContent();
|
|
266
|
-
}
|
|
267
|
-
parseContent() {
|
|
268
|
-
this.content = fs.getFile(this.filePath);
|
|
269
|
-
}
|
|
270
|
-
replace(search, replace) {
|
|
271
|
-
this.content = this.content.replace(search, replace);
|
|
272
|
-
return this;
|
|
273
|
-
}
|
|
274
|
-
replaceAll(search, replace) {
|
|
275
|
-
this.content = this.content.replaceAll(search, replace);
|
|
276
|
-
return this;
|
|
277
|
-
}
|
|
278
|
-
save() {
|
|
279
|
-
fs.putFile(this.filePath, this.content);
|
|
280
|
-
}
|
|
281
|
-
};
|
|
282
|
-
var JsonFileManager = class extends FileManager {
|
|
283
|
-
parseContent() {
|
|
284
|
-
this.content = fs.getJsonFile(this.filePath);
|
|
285
|
-
}
|
|
286
|
-
save() {
|
|
287
|
-
fs.putJsonFile(this.filePath, this.content);
|
|
288
|
-
}
|
|
289
|
-
has(key) {
|
|
290
|
-
return this.content[key] !== void 0;
|
|
291
|
-
}
|
|
292
|
-
replace(key, value) {
|
|
293
|
-
this.content[key] = value;
|
|
294
|
-
return this;
|
|
295
|
-
}
|
|
296
|
-
replaceAll(key, value) {
|
|
297
|
-
const contentAsString = JSON.stringify(this.content);
|
|
298
|
-
this.content = JSON.parse(contentAsString.replaceAll(key, value));
|
|
299
|
-
return this;
|
|
300
|
-
}
|
|
301
|
-
};
|
|
302
|
-
function file(path5) {
|
|
303
|
-
return new FileManager(path5);
|
|
304
|
-
}
|
|
305
|
-
function jsonFile(path5) {
|
|
306
|
-
return new JsonFileManager(path5);
|
|
307
|
-
}
|
|
308
|
-
function createWarlockApp(application) {
|
|
309
|
-
return __async(this, null, function* () {
|
|
310
|
-
application.init().use("warlock").updatePackageJson().updateDotEnv();
|
|
311
|
-
const installProcess = application.install();
|
|
312
|
-
const installDeps = (yield prompts.confirm({
|
|
313
|
-
message: "Do you want to install dependencies?"
|
|
314
|
-
})) === true;
|
|
315
|
-
if (!installDeps) {
|
|
316
|
-
installProcess.abort();
|
|
317
|
-
const nodeModulesPath = path__namespace.default.join(application.path, "node_modules");
|
|
318
|
-
rimraf.rimraf(nodeModulesPath);
|
|
319
|
-
}
|
|
320
|
-
const useGit = (yield prompts.confirm({
|
|
321
|
-
message: "Do you want to initialize Git repository?"
|
|
322
|
-
})) === true;
|
|
323
|
-
let useJWT = false;
|
|
324
|
-
if (installDeps) {
|
|
325
|
-
useJWT = (yield prompts.confirm({
|
|
326
|
-
message: "Do you want to generate JWT Secret key?"
|
|
327
|
-
})) === true;
|
|
328
|
-
}
|
|
329
|
-
if (useGit) {
|
|
330
|
-
const loading = prompts.spinner();
|
|
331
|
-
loading.start("\u{1F4C2} Initializing Git repository...");
|
|
332
|
-
yield application.git();
|
|
333
|
-
loading.stop("\u{1F4C2} Git repository initialized \u2705");
|
|
334
|
-
}
|
|
335
|
-
if (installDeps) {
|
|
336
|
-
const loading = prompts.spinner();
|
|
337
|
-
loading.start("\u{1F4E6} Installing dependencies...");
|
|
338
|
-
yield installProcess.install;
|
|
339
|
-
loading.stop("\u{1F4E6} Dependencies installed successfully!");
|
|
340
|
-
if (useJWT) {
|
|
341
|
-
const jwtLoading = prompts.spinner();
|
|
342
|
-
jwtLoading.start("\u{1F511} Generating JWT Secret...");
|
|
343
|
-
yield application.exec(runPackageManagerCommand("jwt"));
|
|
344
|
-
jwtLoading.stop("\u{1F511} JWT Secret generated \u{1F512}");
|
|
345
|
-
}
|
|
346
|
-
}
|
|
347
|
-
application.terminate();
|
|
348
|
-
});
|
|
349
|
-
}
|
|
350
|
-
function getAppPath(appName) {
|
|
351
|
-
const appPath = path__namespace.resolve(process.cwd(), appName);
|
|
352
|
-
if (fs.isDirectory(appPath)) {
|
|
353
|
-
console.log(
|
|
354
|
-
copper.colors.redBright(
|
|
355
|
-
`${process.cwd()} has an existing directory \`${copper.colors.cyan(
|
|
356
|
-
appName
|
|
357
|
-
)}\`, please choose another app name or another directory to run the command from.`
|
|
358
|
-
)
|
|
359
|
-
);
|
|
360
|
-
process.exit(1);
|
|
361
|
-
}
|
|
362
|
-
return appPath;
|
|
363
|
-
}
|
|
364
|
-
|
|
365
|
-
// ../../warlock.js/create-warlock/src/commands/create-new-app/index.ts
|
|
366
|
-
var appDetails = {
|
|
367
|
-
appName: "",
|
|
368
|
-
appType: "",
|
|
369
|
-
appPath: "",
|
|
370
|
-
pkgManager: "",
|
|
371
|
-
options: {}
|
|
372
|
-
};
|
|
373
|
-
function createNewApp(createWarlockVersion) {
|
|
374
|
-
return __async(this, null, function* () {
|
|
375
|
-
prompts.intro(
|
|
376
|
-
`\u2728 Let's create a new ${copper.colors.yellowBright("Warlock Js App")} \u2728 ${copper.colors.greenBright(`v` + createWarlockVersion)}`
|
|
377
|
-
);
|
|
378
|
-
const appName = yield prompts.text({
|
|
379
|
-
message: "Enter the app name",
|
|
380
|
-
placeholder: "warlock-app"
|
|
381
|
-
});
|
|
382
|
-
if (prompts.isCancel(appName) || !appName.trim()) {
|
|
383
|
-
prompts.cancel("Application name is required to create a new app");
|
|
384
|
-
process.exit(0);
|
|
385
|
-
}
|
|
386
|
-
const [major] = process.versions.node.split(".").map(Number);
|
|
387
|
-
if (major < 20) {
|
|
388
|
-
prompts.cancel("Node.js version must be at least 20.0.0");
|
|
389
|
-
process.exit(0);
|
|
390
|
-
}
|
|
391
|
-
const packageManager = yield prompts.select({
|
|
392
|
-
message: "Select package manager to use \u{1F4E6} ",
|
|
393
|
-
initialValue: getPackageManager(),
|
|
394
|
-
options: [
|
|
395
|
-
{
|
|
396
|
-
label: "Npm",
|
|
397
|
-
value: "npm"
|
|
398
|
-
},
|
|
399
|
-
{
|
|
400
|
-
label: "Yarn",
|
|
401
|
-
value: "yarn"
|
|
402
|
-
},
|
|
403
|
-
{
|
|
404
|
-
label: "Pnpm",
|
|
405
|
-
value: "pnpm"
|
|
406
|
-
}
|
|
407
|
-
]
|
|
408
|
-
});
|
|
409
|
-
setPackageManager(packageManager);
|
|
410
|
-
appDetails.appName = appName;
|
|
411
|
-
appDetails.appPath = getAppPath(appName);
|
|
412
|
-
appDetails.pkgManager = packageManager;
|
|
413
|
-
if (!appDetails.appPath) return;
|
|
414
|
-
appDetails.appType = "warlock";
|
|
415
|
-
createWarlockApp(new App(appDetails));
|
|
416
|
-
});
|
|
417
|
-
}
|
|
9
|
+
var createNewApp__default = /*#__PURE__*/_interopDefault(createNewApp);
|
|
418
10
|
|
|
419
|
-
// ../../warlock.js/create-warlock/src/index.ts
|
|
420
11
|
function createApp() {
|
|
421
|
-
const packageJson = fs.getJsonFile(packageRoot("package.json"));
|
|
12
|
+
const packageJson = fs.getJsonFile(paths.packageRoot("package.json"));
|
|
422
13
|
const createWarlockVersion = packageJson.version;
|
|
423
|
-
|
|
14
|
+
createNewApp__default.default(createWarlockVersion);
|
|
424
15
|
}
|
|
425
16
|
|
|
426
17
|
module.exports = createApp;
|
package/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../warlock.js/create-warlock/src/helpers/exec.ts","../../../../../../warlock.js/create-warlock/src/helpers/paths.ts","../../../../../../warlock.js/create-warlock/src/helpers/package-manager.ts","../../../../../../warlock.js/create-warlock/src/helpers/project-builder-helpers.ts","../../../../../../warlock.js/create-warlock/src/helpers/app.ts","../../../../../../warlock.js/create-warlock/src/commands/create-warlock-app/index.ts","../../../../../../warlock.js/create-warlock/src/commands/create-new-app/get-app-path.ts","../../../../../../warlock.js/create-warlock/src/commands/create-new-app/index.ts","../../../../../../warlock.js/create-warlock/src/index.ts"],"names":["resolve","spawn","log","colors","__filename","fileURLToPath","__dirname","path","detectPackageManager","outro","copyDirectory","fileExists","copyFile","renameFile","getFile","putFile","getJsonFile","putJsonFile","confirm","rimraf","spinner","path4","isDirectory","intro","text","isCancel","cancel","select"],"mappings":"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","file":"index.js","sourcesContent":["import { log } from \"@clack/prompts\";\r\nimport { colors } from \"@mongez/copper\";\r\nimport { ChildProcess } from \"child_process\";\r\nimport { default as childProcess, default as spawn } from \"cross-spawn\";\r\n\r\nexport default async function exec(command: string, options: any = {}) {\r\n const [commandName, ...optionsList] = command.split(\" \");\r\n\r\n const commandOutput = childProcess.sync(commandName, optionsList, options);\r\n\r\n // it means command didn't end as expected, then stop the rest of the program\r\n if (commandOutput.error !== null) {\r\n process.exit(1);\r\n }\r\n\r\n return commandOutput;\r\n}\r\n\r\n/**\r\n * This function directly executes a command\r\n */\r\nexport async function executeCommand(cmd: string, args: string[], cwd: string) {\r\n return new Promise<boolean>(resolve => {\r\n const child = spawn(cmd, args, {\r\n cwd,\r\n stdio: \"ignore\",\r\n });\r\n\r\n child.on(\"error\", e => {\r\n if (e) {\r\n if (e.message) {\r\n log.error(colors.red(String(e.message)) + `\\n\\n`);\r\n } else {\r\n log.error(colors.red(String(e)) + `\\n\\n`);\r\n }\r\n }\r\n resolve(false);\r\n });\r\n\r\n child.on(\"close\", code => {\r\n if (code === 0) {\r\n resolve(true);\r\n } else {\r\n resolve(false);\r\n }\r\n });\r\n });\r\n}\r\n\r\nexport function runCommand(cmd: string, args: string[], cwd: string) {\r\n let child: ChildProcess;\r\n\r\n const install = new Promise<boolean>(resolve => {\r\n try {\r\n child = spawn(cmd, args, {\r\n cwd,\r\n stdio: \"ignore\",\r\n });\r\n\r\n child.on(\"error\", e => {\r\n if (e) {\r\n if (e.message) {\r\n log.error(colors.red(String(e.message)) + `\\n\\n`);\r\n } else {\r\n log.error(colors.red(String(e)) + `\\n\\n`);\r\n }\r\n }\r\n resolve(false);\r\n });\r\n\r\n child.on(\"close\", code => {\r\n if (code === 0) {\r\n resolve(true);\r\n } else {\r\n resolve(false);\r\n }\r\n });\r\n } catch (e) {\r\n resolve(false);\r\n }\r\n });\r\n\r\n const abort = async () => {\r\n if (child) {\r\n child.kill(\"SIGINT\");\r\n }\r\n };\r\n\r\n return { abort, install };\r\n}\r\n","import path from \"path\";\r\nimport { fileURLToPath } from \"url\";\r\n\r\nconst __filename = fileURLToPath(import.meta.url);\r\n\r\nconst __dirname = path.dirname(__filename);\r\n\r\nconsole.log(\"Executing from\", __dirname);\r\n\r\nexport type Template = \"warlock\";\r\n\r\nexport function template(templateName: Template): string {\r\n return path.resolve(__dirname, \"../\", \"../\", \"templates\", templateName);\r\n}\r\n\r\nexport function packageRoot(...paths: string[]): string {\r\n return path.resolve(__dirname, \"../\", \"../\", ...paths);\r\n}\r\n","import detectPackageManager from \"which-pm-runs\";\r\n\r\nlet detectedPackageManager: string | undefined;\r\n\r\nexport function getPackageManager() {\r\n if (detectedPackageManager) {\r\n return detectedPackageManager;\r\n }\r\n\r\n const packageManager = detectPackageManager();\r\n\r\n return packageManager.name || \"npm\";\r\n}\r\n\r\nexport function setPackageManager(packageManager: string) {\r\n detectedPackageManager = packageManager;\r\n}\r\n\r\nexport function installCommand() {\r\n return `${getPackageManager()} install`;\r\n}\r\n\r\nexport function startCommand() {\r\n if (getPackageManager() === \"npm\") return \"npm run dev\";\r\n\r\n return `${getPackageManager()} dev`;\r\n}\r\n\r\nexport function runPackageManagerCommand(command: string) {\r\n const packageManager = getPackageManager();\r\n\r\n if (packageManager === \"npm\") return `npm run ${command}`;\r\n\r\n return `${packageManager} ${command}`;\r\n}\r\n","import { outro } from \"@clack/prompts\";\r\nimport { colors } from \"@mongez/copper\";\r\nimport {\r\n copyDirectory,\r\n getFile,\r\n getJsonFile,\r\n putFile,\r\n putJsonFile,\r\n renameFile,\r\n} from \"@mongez/fs\";\r\nimport path from \"path\";\r\nimport { executeCommand } from \"./exec\";\r\nimport { startCommand } from \"./package-manager\";\r\nimport { Template, template } from \"./paths\";\r\n\r\nexport async function initializeGitRepository(appPath: string) {\r\n // initialize git repository\r\n await executeCommand(`git`, [\"init\"], appPath);\r\n // switching to `main` branch\r\n await executeCommand(`git`, [\"checkout\", \"-b\", \"main\"], appPath);\r\n\r\n // add files\r\n await executeCommand(`git`, [\"add\", \".\"], appPath);\r\n\r\n // commit files\r\n await executeCommand(`git`, [\"commit\", \"-m\", \"Initial commit ⚡️\"], appPath);\r\n\r\n return true;\r\n}\r\n\r\nexport async function updateEnvFile(appPath: string, appName: string) {\r\n // update package.json file\r\n const packageJson: any = getJsonFile(path.resolve(appPath, \"package.json\"));\r\n\r\n packageJson.name = appName;\r\n\r\n putJsonFile(path.resolve(appPath, \"package.json\"), packageJson);\r\n\r\n // update env file\r\n const dotEnv = getFile(path.resolve(appPath, \".env\"))\r\n .replace(\"AppName\", appName)\r\n .replace(\r\n \"AppCodeName\",\r\n appName\r\n .split(/-|_/g)\r\n .map(word => word[0])\r\n .join(\"\"),\r\n );\r\n\r\n putFile(path.resolve(appPath, \".env\"), dotEnv);\r\n\r\n // update .env.production file\r\n let dotEnvProduction = getFile(path.resolve(appPath, \".env.shared\"));\r\n\r\n dotEnvProduction = dotEnvProduction.replace(\"AppName\", appName).replace(\r\n \"AppCodeName\",\r\n appName\r\n .split(/-|_/g)\r\n .map(word => word[0])\r\n .join(\"\"),\r\n );\r\n\r\n putFile(path.resolve(appPath, \".env.shared\"), dotEnvProduction);\r\n}\r\n\r\nexport async function copyTemplateFiles(\r\n templateName: Template,\r\n appPath: string,\r\n _appName: string,\r\n) {\r\n // copy project files\r\n copyDirectory(template(templateName), appPath);\r\n\r\n // replace _.gitignore to\r\n renameFile(\r\n path.resolve(appPath, \"_.gitignore\"),\r\n path.resolve(appPath, \".gitignore\"),\r\n );\r\n}\r\n\r\nexport async function allDone(appName: string) {\r\n outro(\r\n \"🌟 Awesome! Your project is ready to rock! \" +\r\n \"Run the following command to start development:\",\r\n );\r\n\r\n console.log(colors.cyan(`cd ${appName} && ${startCommand()}`));\r\n\r\n console.log();\r\n\r\n console.log(\r\n `💡 Pro tip: Install the ${colors.yellow(\r\n \"Generator Z\",\r\n )} extension in VSCode for helpful code snippets and productivity boosters! 🚀`,\r\n );\r\n}\r\n","import {\r\n copyDirectory,\r\n copyFile,\r\n fileExists,\r\n getFile,\r\n getJsonFile,\r\n putFile,\r\n putJsonFile,\r\n renameFile,\r\n} from \"@mongez/fs\";\r\nimport path from \"path\";\r\nimport { Application } from \"src/commands/create-new-app/types\";\r\nimport { executeCommand, runCommand } from \"src/helpers/exec\";\r\nimport { Template, template } from \"src/helpers/paths\";\r\nimport {\r\n allDone,\r\n initializeGitRepository,\r\n} from \"src/helpers/project-builder-helpers\";\r\nimport { getPackageManager } from \"./package-manager\";\r\n\r\nexport class App {\r\n /**\r\n * Resolved files\r\n */\r\n protected files: Record<string, FileManager> = {};\r\n\r\n public isInstalled = false;\r\n\r\n public constructor(protected app: Application) {}\r\n\r\n public use(templateName: Template) {\r\n copyDirectory(template(templateName), this.path);\r\n\r\n if (fileExists(this.path + \"/.env.example\")) {\r\n copyFile(this.path + \"/.env.example\", this.path + \"/.env\");\r\n }\r\n\r\n renameFile(this.path + \"/_.gitignore\", this.path + \"/.gitignore\");\r\n\r\n return this;\r\n }\r\n\r\n public init() {\r\n return this;\r\n }\r\n\r\n public terminate() {\r\n allDone(this.name);\r\n }\r\n\r\n public install() {\r\n return runCommand(getPackageManager(), [\"install\"], this.path);\r\n }\r\n\r\n public async exec(command: string) {\r\n const [commandName, ...optionsList] = command.split(\" \");\r\n return await executeCommand(commandName, optionsList, this.path);\r\n }\r\n\r\n public async git() {\r\n return await initializeGitRepository(this.path);\r\n }\r\n\r\n public updatePackageJson() {\r\n this.package\r\n .replace(\"name\", this.name.replaceAll(\"/\", \"-\"))\r\n .replaceAll(\"yarn\", getPackageManager())\r\n .save();\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Get package json file\r\n */\r\n public get package() {\r\n return this.json(\"package.json\");\r\n }\r\n\r\n public updateDotEnv() {\r\n this.file(\".env\").replaceAll(\"appName\", this.name).save();\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Get env file to update\r\n */\r\n public get env() {\r\n return this.file(\".env\");\r\n }\r\n\r\n public get name() {\r\n return this.app.appName;\r\n }\r\n\r\n public get path() {\r\n return this.app.appPath;\r\n }\r\n\r\n public file(relativePath: string) {\r\n const fullPath = path.resolve(this.path, relativePath);\r\n\r\n if (!this.files[fullPath]) {\r\n this.files[fullPath] = file(fullPath);\r\n }\r\n\r\n return this.files[fullPath];\r\n }\r\n\r\n public json(relativePath: string) {\r\n const fullPath = path.resolve(this.path, relativePath);\r\n\r\n if (!this.files[fullPath]) {\r\n this.files[fullPath] = jsonFile(fullPath);\r\n }\r\n\r\n return this.files[fullPath];\r\n }\r\n}\r\n\r\nexport function app(app: Application) {\r\n return new App(app);\r\n}\r\n\r\nexport class FileManager {\r\n public content!: string;\r\n public constructor(protected filePath) {\r\n this.parseContent();\r\n }\r\n\r\n protected parseContent() {\r\n this.content = getFile(this.filePath) as string;\r\n }\r\n\r\n public replace(search: string, replace: string) {\r\n this.content = this.content.replace(search, replace);\r\n\r\n return this;\r\n }\r\n\r\n public replaceAll(search: string, replace: string) {\r\n this.content = this.content.replaceAll(search, replace);\r\n\r\n return this;\r\n }\r\n\r\n public save() {\r\n putFile(this.filePath, this.content);\r\n }\r\n}\r\n\r\nexport class JsonFileManager extends FileManager {\r\n protected parseContent() {\r\n this.content = getJsonFile(this.filePath);\r\n }\r\n\r\n public save() {\r\n putJsonFile(this.filePath, this.content);\r\n }\r\n\r\n public has(key: string) {\r\n return this.content[key] !== undefined;\r\n }\r\n\r\n public replace(key: string, value: any) {\r\n this.content[key] = value;\r\n\r\n return this;\r\n }\r\n\r\n public replaceAll(key: string, value: any) {\r\n const contentAsString = JSON.stringify(this.content);\r\n\r\n this.content = JSON.parse(contentAsString.replaceAll(key, value));\r\n\r\n return this;\r\n }\r\n}\r\n\r\nexport function file(path: string) {\r\n return new FileManager(path);\r\n}\r\n\r\nexport function jsonFile(path: string) {\r\n return new JsonFileManager(path);\r\n}\r\n","import { confirm, spinner } from \"@clack/prompts\";\r\nimport path from \"path\";\r\nimport { rimraf } from \"rimraf\";\r\nimport { App } from \"src/helpers/app\";\r\nimport { runPackageManagerCommand } from \"../../helpers/package-manager\";\r\n\r\nexport async function createWarlockApp(application: App) {\r\n // Initialize the basic app structure\r\n application.init().use(\"warlock\").updatePackageJson().updateDotEnv();\r\n\r\n // Start the installation process in background immediately\r\n const installProcess = application.install();\r\n\r\n // Collect all answers first\r\n const installDeps =\r\n (await confirm({\r\n message: \"Do you want to install dependencies?\",\r\n })) === true;\r\n\r\n // If user doesn't want to install dependencies, abort the background process\r\n if (!installDeps) {\r\n installProcess.abort();\r\n\r\n // Remove node_modules Asynchronously\r\n const nodeModulesPath = path.join(application.path, \"node_modules\");\r\n\r\n rimraf(nodeModulesPath);\r\n }\r\n\r\n const useGit =\r\n (await confirm({\r\n message: \"Do you want to initialize Git repository?\",\r\n })) === true;\r\n\r\n // Only ask about JWT if dependencies will be installed\r\n let useJWT = false;\r\n if (installDeps) {\r\n useJWT =\r\n (await confirm({\r\n message: \"Do you want to generate JWT Secret key?\",\r\n })) === true;\r\n }\r\n\r\n // Now execute all confirmed tasks\r\n\r\n // Handle Git initialization first if requested\r\n if (useGit) {\r\n const loading = spinner();\r\n loading.start(\"📂 Initializing Git repository...\");\r\n await application.git();\r\n loading.stop(\"📂 Git repository initialized ✅\");\r\n }\r\n\r\n // Wait for dependencies installation if it was requested\r\n if (installDeps) {\r\n const loading = spinner();\r\n loading.start(\"📦 Installing dependencies...\");\r\n await installProcess.install;\r\n loading.stop(\"📦 Dependencies installed successfully!\");\r\n\r\n // Generate JWT if requested\r\n if (useJWT) {\r\n const jwtLoading = spinner();\r\n jwtLoading.start(\"🔑 Generating JWT Secret...\");\r\n await application.exec(runPackageManagerCommand(\"jwt\"));\r\n jwtLoading.stop(\"🔑 JWT Secret generated 🔒\");\r\n }\r\n }\r\n\r\n application.terminate();\r\n}\r\n","import { colors } from \"@mongez/copper\";\r\nimport { isDirectory } from \"@mongez/fs\";\r\nimport * as path from \"path\";\r\n\r\nexport default function getAppPath(appName: string) {\r\n const appPath: string = path.resolve(process.cwd(), appName);\r\n\r\n if (isDirectory(appPath)) {\r\n console.log(\r\n colors.redBright(\r\n `${process.cwd()} has an existing directory \\`${colors.cyan(\r\n appName,\r\n )}\\`, please choose another app name or another directory to run the command from.`,\r\n ),\r\n );\r\n\r\n process.exit(1);\r\n }\r\n\r\n return appPath;\r\n}\r\n","import { cancel, intro, isCancel, select, text } from \"@clack/prompts\";\r\nimport { colors } from \"@mongez/copper\";\r\nimport { App } from \"../../helpers/app\";\r\nimport {\r\n getPackageManager,\r\n setPackageManager,\r\n} from \"../../helpers/package-manager\";\r\nimport { createWarlockApp } from \"../create-warlock-app\";\r\nimport getAppPath from \"./get-app-path\";\r\nimport { App as AppType } from \"./types\";\r\n\r\nconst appDetails: Required<AppType> = {\r\n appName: \"\",\r\n appType: \"\",\r\n appPath: \"\",\r\n pkgManager: \"\",\r\n options: {},\r\n};\r\n\r\nexport default async function createNewApp(createWarlockVersion: string) {\r\n intro(\r\n `✨ Let's create a new ${colors.yellowBright(\"Warlock Js App\")} ✨ ${colors.greenBright(`v` + createWarlockVersion)}`,\r\n );\r\n\r\n const appName = await text({\r\n message: \"Enter the app name\",\r\n placeholder: \"warlock-app\",\r\n });\r\n\r\n if (isCancel(appName) || !appName.trim()) {\r\n cancel(\"Application name is required to create a new app\");\r\n process.exit(0);\r\n }\r\n\r\n // Validate the nodejs version to be not less than 20\r\n const [major] = process.versions.node.split(\".\").map(Number);\r\n\r\n if (major < 20) {\r\n cancel(\"Node.js version must be at least 20.0.0\");\r\n process.exit(0);\r\n }\r\n\r\n const packageManager = await select({\r\n message: \"Select package manager to use 📦 \",\r\n initialValue: getPackageManager(),\r\n options: [\r\n {\r\n label: \"Npm\",\r\n value: \"npm\",\r\n },\r\n {\r\n label: \"Yarn\",\r\n value: \"yarn\",\r\n },\r\n {\r\n label: \"Pnpm\",\r\n value: \"pnpm\",\r\n },\r\n ],\r\n });\r\n\r\n setPackageManager(packageManager);\r\n\r\n appDetails.appName = appName;\r\n appDetails.appPath = getAppPath(appName);\r\n appDetails.pkgManager = packageManager;\r\n\r\n if (!appDetails.appPath) return;\r\n\r\n appDetails.appType = \"warlock\";\r\n\r\n createWarlockApp(new App(appDetails));\r\n}\r\n","import { getJsonFile } from \"@mongez/fs\";\r\nimport createNewApp from \"./commands/create-new-app\";\r\nimport { packageRoot } from \"./helpers/paths\";\r\n\r\nexport default function createApp() {\r\n const packageJson: any = getJsonFile(packageRoot(\"package.json\"));\r\n const createWarlockVersion = packageJson.version;\r\n createNewApp(createWarlockVersion);\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../../../../warlock.js/create-warlock/src/index.ts"],"names":["getJsonFile","packageRoot","createNewApp"],"mappings":";;;;;;;;;;AAIe,SAAR,SAAA,GAA6B;AAClC,EAAA,MAAM,WAAA,GAAmBA,cAAA,CAAYC,iBAAA,CAAY,cAAc,CAAC,CAAA;AAChE,EAAA,MAAM,uBAAuB,WAAA,CAAY,OAAA;AACzC,EAAAC,6BAAA,CAAa,oBAAoB,CAAA;AACnC","file":"index.js","sourcesContent":["import { getJsonFile } from \"@mongez/fs\";\r\nimport createNewApp from \"./commands/create-new-app\";\r\nimport { packageRoot } from \"./helpers/paths\";\r\n\r\nexport default function createApp() {\r\n const packageJson: any = getJsonFile(packageRoot(\"package.json\"));\r\n const createWarlockVersion = packageJson.version;\r\n createNewApp(createWarlockVersion);\r\n}\r\n"]}
|
package/esm/index.js
CHANGED
|
@@ -1,363 +1,7 @@
|
|
|
1
|
-
import { getJsonFile
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
4
|
-
import * as path from 'path';
|
|
5
|
-
import path__default from 'path';
|
|
6
|
-
import spawn from 'cross-spawn';
|
|
7
|
-
import { fileURLToPath } from 'url';
|
|
8
|
-
import detectPackageManager from 'which-pm-runs';
|
|
9
|
-
import { rimraf } from 'rimraf';
|
|
1
|
+
import { getJsonFile } from '@mongez/fs';
|
|
2
|
+
import createNewApp from './commands/create-new-app';
|
|
3
|
+
import { packageRoot } from './helpers/paths';
|
|
10
4
|
|
|
11
|
-
// ../../warlock.js/create-warlock/src/index.ts
|
|
12
|
-
async function executeCommand(cmd, args, cwd) {
|
|
13
|
-
return new Promise((resolve2) => {
|
|
14
|
-
const child = spawn(cmd, args, {
|
|
15
|
-
cwd,
|
|
16
|
-
stdio: "ignore"
|
|
17
|
-
});
|
|
18
|
-
child.on("error", (e) => {
|
|
19
|
-
if (e) {
|
|
20
|
-
if (e.message) {
|
|
21
|
-
log.error(colors.red(String(e.message)) + `
|
|
22
|
-
|
|
23
|
-
`);
|
|
24
|
-
} else {
|
|
25
|
-
log.error(colors.red(String(e)) + `
|
|
26
|
-
|
|
27
|
-
`);
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
resolve2(false);
|
|
31
|
-
});
|
|
32
|
-
child.on("close", (code) => {
|
|
33
|
-
if (code === 0) {
|
|
34
|
-
resolve2(true);
|
|
35
|
-
} else {
|
|
36
|
-
resolve2(false);
|
|
37
|
-
}
|
|
38
|
-
});
|
|
39
|
-
});
|
|
40
|
-
}
|
|
41
|
-
function runCommand(cmd, args, cwd) {
|
|
42
|
-
let child;
|
|
43
|
-
const install = new Promise((resolve2) => {
|
|
44
|
-
try {
|
|
45
|
-
child = spawn(cmd, args, {
|
|
46
|
-
cwd,
|
|
47
|
-
stdio: "ignore"
|
|
48
|
-
});
|
|
49
|
-
child.on("error", (e) => {
|
|
50
|
-
if (e) {
|
|
51
|
-
if (e.message) {
|
|
52
|
-
log.error(colors.red(String(e.message)) + `
|
|
53
|
-
|
|
54
|
-
`);
|
|
55
|
-
} else {
|
|
56
|
-
log.error(colors.red(String(e)) + `
|
|
57
|
-
|
|
58
|
-
`);
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
resolve2(false);
|
|
62
|
-
});
|
|
63
|
-
child.on("close", (code) => {
|
|
64
|
-
if (code === 0) {
|
|
65
|
-
resolve2(true);
|
|
66
|
-
} else {
|
|
67
|
-
resolve2(false);
|
|
68
|
-
}
|
|
69
|
-
});
|
|
70
|
-
} catch (e) {
|
|
71
|
-
resolve2(false);
|
|
72
|
-
}
|
|
73
|
-
});
|
|
74
|
-
const abort = async () => {
|
|
75
|
-
if (child) {
|
|
76
|
-
child.kill("SIGINT");
|
|
77
|
-
}
|
|
78
|
-
};
|
|
79
|
-
return { abort, install };
|
|
80
|
-
}
|
|
81
|
-
var __filename$1 = fileURLToPath(import.meta.url);
|
|
82
|
-
var __dirname$1 = path__default.dirname(__filename$1);
|
|
83
|
-
console.log("Executing from", __dirname$1);
|
|
84
|
-
function template(templateName) {
|
|
85
|
-
return path__default.resolve(__dirname$1, "../", "../", "templates", templateName);
|
|
86
|
-
}
|
|
87
|
-
function packageRoot(...paths) {
|
|
88
|
-
return path__default.resolve(__dirname$1, "../", "../", ...paths);
|
|
89
|
-
}
|
|
90
|
-
var detectedPackageManager;
|
|
91
|
-
function getPackageManager() {
|
|
92
|
-
if (detectedPackageManager) {
|
|
93
|
-
return detectedPackageManager;
|
|
94
|
-
}
|
|
95
|
-
const packageManager = detectPackageManager();
|
|
96
|
-
return packageManager.name || "npm";
|
|
97
|
-
}
|
|
98
|
-
function setPackageManager(packageManager) {
|
|
99
|
-
detectedPackageManager = packageManager;
|
|
100
|
-
}
|
|
101
|
-
function startCommand() {
|
|
102
|
-
if (getPackageManager() === "npm") return "npm run dev";
|
|
103
|
-
return `${getPackageManager()} dev`;
|
|
104
|
-
}
|
|
105
|
-
function runPackageManagerCommand(command) {
|
|
106
|
-
const packageManager = getPackageManager();
|
|
107
|
-
if (packageManager === "npm") return `npm run ${command}`;
|
|
108
|
-
return `${packageManager} ${command}`;
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
// ../../warlock.js/create-warlock/src/helpers/project-builder-helpers.ts
|
|
112
|
-
async function initializeGitRepository(appPath) {
|
|
113
|
-
await executeCommand(`git`, ["init"], appPath);
|
|
114
|
-
await executeCommand(`git`, ["checkout", "-b", "main"], appPath);
|
|
115
|
-
await executeCommand(`git`, ["add", "."], appPath);
|
|
116
|
-
await executeCommand(`git`, ["commit", "-m", "Initial commit \u26A1\uFE0F"], appPath);
|
|
117
|
-
return true;
|
|
118
|
-
}
|
|
119
|
-
async function allDone(appName) {
|
|
120
|
-
outro(
|
|
121
|
-
"\u{1F31F} Awesome! Your project is ready to rock! Run the following command to start development:"
|
|
122
|
-
);
|
|
123
|
-
console.log(colors.cyan(`cd ${appName} && ${startCommand()}`));
|
|
124
|
-
console.log();
|
|
125
|
-
console.log(
|
|
126
|
-
`\u{1F4A1} Pro tip: Install the ${colors.yellow(
|
|
127
|
-
"Generator Z"
|
|
128
|
-
)} extension in VSCode for helpful code snippets and productivity boosters! \u{1F680}`
|
|
129
|
-
);
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
// ../../warlock.js/create-warlock/src/helpers/app.ts
|
|
133
|
-
var App = class {
|
|
134
|
-
constructor(app) {
|
|
135
|
-
this.app = app;
|
|
136
|
-
/**
|
|
137
|
-
* Resolved files
|
|
138
|
-
*/
|
|
139
|
-
this.files = {};
|
|
140
|
-
this.isInstalled = false;
|
|
141
|
-
}
|
|
142
|
-
use(templateName) {
|
|
143
|
-
copyDirectory(template(templateName), this.path);
|
|
144
|
-
if (fileExists(this.path + "/.env.example")) {
|
|
145
|
-
copyFile(this.path + "/.env.example", this.path + "/.env");
|
|
146
|
-
}
|
|
147
|
-
renameFile(this.path + "/_.gitignore", this.path + "/.gitignore");
|
|
148
|
-
return this;
|
|
149
|
-
}
|
|
150
|
-
init() {
|
|
151
|
-
return this;
|
|
152
|
-
}
|
|
153
|
-
terminate() {
|
|
154
|
-
allDone(this.name);
|
|
155
|
-
}
|
|
156
|
-
install() {
|
|
157
|
-
return runCommand(getPackageManager(), ["install"], this.path);
|
|
158
|
-
}
|
|
159
|
-
async exec(command) {
|
|
160
|
-
const [commandName, ...optionsList] = command.split(" ");
|
|
161
|
-
return await executeCommand(commandName, optionsList, this.path);
|
|
162
|
-
}
|
|
163
|
-
async git() {
|
|
164
|
-
return await initializeGitRepository(this.path);
|
|
165
|
-
}
|
|
166
|
-
updatePackageJson() {
|
|
167
|
-
this.package.replace("name", this.name.replaceAll("/", "-")).replaceAll("yarn", getPackageManager()).save();
|
|
168
|
-
return this;
|
|
169
|
-
}
|
|
170
|
-
/**
|
|
171
|
-
* Get package json file
|
|
172
|
-
*/
|
|
173
|
-
get package() {
|
|
174
|
-
return this.json("package.json");
|
|
175
|
-
}
|
|
176
|
-
updateDotEnv() {
|
|
177
|
-
this.file(".env").replaceAll("appName", this.name).save();
|
|
178
|
-
return this;
|
|
179
|
-
}
|
|
180
|
-
/**
|
|
181
|
-
* Get env file to update
|
|
182
|
-
*/
|
|
183
|
-
get env() {
|
|
184
|
-
return this.file(".env");
|
|
185
|
-
}
|
|
186
|
-
get name() {
|
|
187
|
-
return this.app.appName;
|
|
188
|
-
}
|
|
189
|
-
get path() {
|
|
190
|
-
return this.app.appPath;
|
|
191
|
-
}
|
|
192
|
-
file(relativePath) {
|
|
193
|
-
const fullPath = path__default.resolve(this.path, relativePath);
|
|
194
|
-
if (!this.files[fullPath]) {
|
|
195
|
-
this.files[fullPath] = file(fullPath);
|
|
196
|
-
}
|
|
197
|
-
return this.files[fullPath];
|
|
198
|
-
}
|
|
199
|
-
json(relativePath) {
|
|
200
|
-
const fullPath = path__default.resolve(this.path, relativePath);
|
|
201
|
-
if (!this.files[fullPath]) {
|
|
202
|
-
this.files[fullPath] = jsonFile(fullPath);
|
|
203
|
-
}
|
|
204
|
-
return this.files[fullPath];
|
|
205
|
-
}
|
|
206
|
-
};
|
|
207
|
-
var FileManager = class {
|
|
208
|
-
constructor(filePath) {
|
|
209
|
-
this.filePath = filePath;
|
|
210
|
-
this.parseContent();
|
|
211
|
-
}
|
|
212
|
-
parseContent() {
|
|
213
|
-
this.content = getFile(this.filePath);
|
|
214
|
-
}
|
|
215
|
-
replace(search, replace) {
|
|
216
|
-
this.content = this.content.replace(search, replace);
|
|
217
|
-
return this;
|
|
218
|
-
}
|
|
219
|
-
replaceAll(search, replace) {
|
|
220
|
-
this.content = this.content.replaceAll(search, replace);
|
|
221
|
-
return this;
|
|
222
|
-
}
|
|
223
|
-
save() {
|
|
224
|
-
putFile(this.filePath, this.content);
|
|
225
|
-
}
|
|
226
|
-
};
|
|
227
|
-
var JsonFileManager = class extends FileManager {
|
|
228
|
-
parseContent() {
|
|
229
|
-
this.content = getJsonFile(this.filePath);
|
|
230
|
-
}
|
|
231
|
-
save() {
|
|
232
|
-
putJsonFile(this.filePath, this.content);
|
|
233
|
-
}
|
|
234
|
-
has(key) {
|
|
235
|
-
return this.content[key] !== void 0;
|
|
236
|
-
}
|
|
237
|
-
replace(key, value) {
|
|
238
|
-
this.content[key] = value;
|
|
239
|
-
return this;
|
|
240
|
-
}
|
|
241
|
-
replaceAll(key, value) {
|
|
242
|
-
const contentAsString = JSON.stringify(this.content);
|
|
243
|
-
this.content = JSON.parse(contentAsString.replaceAll(key, value));
|
|
244
|
-
return this;
|
|
245
|
-
}
|
|
246
|
-
};
|
|
247
|
-
function file(path5) {
|
|
248
|
-
return new FileManager(path5);
|
|
249
|
-
}
|
|
250
|
-
function jsonFile(path5) {
|
|
251
|
-
return new JsonFileManager(path5);
|
|
252
|
-
}
|
|
253
|
-
async function createWarlockApp(application) {
|
|
254
|
-
application.init().use("warlock").updatePackageJson().updateDotEnv();
|
|
255
|
-
const installProcess = application.install();
|
|
256
|
-
const installDeps = await confirm({
|
|
257
|
-
message: "Do you want to install dependencies?"
|
|
258
|
-
}) === true;
|
|
259
|
-
if (!installDeps) {
|
|
260
|
-
installProcess.abort();
|
|
261
|
-
const nodeModulesPath = path__default.join(application.path, "node_modules");
|
|
262
|
-
rimraf(nodeModulesPath);
|
|
263
|
-
}
|
|
264
|
-
const useGit = await confirm({
|
|
265
|
-
message: "Do you want to initialize Git repository?"
|
|
266
|
-
}) === true;
|
|
267
|
-
let useJWT = false;
|
|
268
|
-
if (installDeps) {
|
|
269
|
-
useJWT = await confirm({
|
|
270
|
-
message: "Do you want to generate JWT Secret key?"
|
|
271
|
-
}) === true;
|
|
272
|
-
}
|
|
273
|
-
if (useGit) {
|
|
274
|
-
const loading = spinner();
|
|
275
|
-
loading.start("\u{1F4C2} Initializing Git repository...");
|
|
276
|
-
await application.git();
|
|
277
|
-
loading.stop("\u{1F4C2} Git repository initialized \u2705");
|
|
278
|
-
}
|
|
279
|
-
if (installDeps) {
|
|
280
|
-
const loading = spinner();
|
|
281
|
-
loading.start("\u{1F4E6} Installing dependencies...");
|
|
282
|
-
await installProcess.install;
|
|
283
|
-
loading.stop("\u{1F4E6} Dependencies installed successfully!");
|
|
284
|
-
if (useJWT) {
|
|
285
|
-
const jwtLoading = spinner();
|
|
286
|
-
jwtLoading.start("\u{1F511} Generating JWT Secret...");
|
|
287
|
-
await application.exec(runPackageManagerCommand("jwt"));
|
|
288
|
-
jwtLoading.stop("\u{1F511} JWT Secret generated \u{1F512}");
|
|
289
|
-
}
|
|
290
|
-
}
|
|
291
|
-
application.terminate();
|
|
292
|
-
}
|
|
293
|
-
function getAppPath(appName) {
|
|
294
|
-
const appPath = path.resolve(process.cwd(), appName);
|
|
295
|
-
if (isDirectory(appPath)) {
|
|
296
|
-
console.log(
|
|
297
|
-
colors.redBright(
|
|
298
|
-
`${process.cwd()} has an existing directory \`${colors.cyan(
|
|
299
|
-
appName
|
|
300
|
-
)}\`, please choose another app name or another directory to run the command from.`
|
|
301
|
-
)
|
|
302
|
-
);
|
|
303
|
-
process.exit(1);
|
|
304
|
-
}
|
|
305
|
-
return appPath;
|
|
306
|
-
}
|
|
307
|
-
|
|
308
|
-
// ../../warlock.js/create-warlock/src/commands/create-new-app/index.ts
|
|
309
|
-
var appDetails = {
|
|
310
|
-
appName: "",
|
|
311
|
-
appType: "",
|
|
312
|
-
appPath: "",
|
|
313
|
-
pkgManager: "",
|
|
314
|
-
options: {}
|
|
315
|
-
};
|
|
316
|
-
async function createNewApp(createWarlockVersion) {
|
|
317
|
-
intro(
|
|
318
|
-
`\u2728 Let's create a new ${colors.yellowBright("Warlock Js App")} \u2728 ${colors.greenBright(`v` + createWarlockVersion)}`
|
|
319
|
-
);
|
|
320
|
-
const appName = await text({
|
|
321
|
-
message: "Enter the app name",
|
|
322
|
-
placeholder: "warlock-app"
|
|
323
|
-
});
|
|
324
|
-
if (isCancel(appName) || !appName.trim()) {
|
|
325
|
-
cancel("Application name is required to create a new app");
|
|
326
|
-
process.exit(0);
|
|
327
|
-
}
|
|
328
|
-
const [major] = process.versions.node.split(".").map(Number);
|
|
329
|
-
if (major < 20) {
|
|
330
|
-
cancel("Node.js version must be at least 20.0.0");
|
|
331
|
-
process.exit(0);
|
|
332
|
-
}
|
|
333
|
-
const packageManager = await select({
|
|
334
|
-
message: "Select package manager to use \u{1F4E6} ",
|
|
335
|
-
initialValue: getPackageManager(),
|
|
336
|
-
options: [
|
|
337
|
-
{
|
|
338
|
-
label: "Npm",
|
|
339
|
-
value: "npm"
|
|
340
|
-
},
|
|
341
|
-
{
|
|
342
|
-
label: "Yarn",
|
|
343
|
-
value: "yarn"
|
|
344
|
-
},
|
|
345
|
-
{
|
|
346
|
-
label: "Pnpm",
|
|
347
|
-
value: "pnpm"
|
|
348
|
-
}
|
|
349
|
-
]
|
|
350
|
-
});
|
|
351
|
-
setPackageManager(packageManager);
|
|
352
|
-
appDetails.appName = appName;
|
|
353
|
-
appDetails.appPath = getAppPath(appName);
|
|
354
|
-
appDetails.pkgManager = packageManager;
|
|
355
|
-
if (!appDetails.appPath) return;
|
|
356
|
-
appDetails.appType = "warlock";
|
|
357
|
-
createWarlockApp(new App(appDetails));
|
|
358
|
-
}
|
|
359
|
-
|
|
360
|
-
// ../../warlock.js/create-warlock/src/index.ts
|
|
361
5
|
function createApp() {
|
|
362
6
|
const packageJson = getJsonFile(packageRoot("package.json"));
|
|
363
7
|
const createWarlockVersion = packageJson.version;
|
package/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../warlock.js/create-warlock/src/helpers/exec.ts","../../../../../../warlock.js/create-warlock/src/helpers/paths.ts","../../../../../../warlock.js/create-warlock/src/helpers/package-manager.ts","../../../../../../warlock.js/create-warlock/src/helpers/project-builder-helpers.ts","../../../../../../warlock.js/create-warlock/src/helpers/app.ts","../../../../../../warlock.js/create-warlock/src/commands/create-warlock-app/index.ts","../../../../../../warlock.js/create-warlock/src/commands/create-new-app/get-app-path.ts","../../../../../../warlock.js/create-warlock/src/commands/create-new-app/index.ts","../../../../../../warlock.js/create-warlock/src/index.ts"],"names":["resolve","__filename","__dirname","path","colors","copyDirectory","renameFile","getFile","putFile","getJsonFile","putJsonFile","path4"],"mappings":"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","file":"index.js","sourcesContent":["import { log } from \"@clack/prompts\";\r\nimport { colors } from \"@mongez/copper\";\r\nimport { ChildProcess } from \"child_process\";\r\nimport { default as childProcess, default as spawn } from \"cross-spawn\";\r\n\r\nexport default async function exec(command: string, options: any = {}) {\r\n const [commandName, ...optionsList] = command.split(\" \");\r\n\r\n const commandOutput = childProcess.sync(commandName, optionsList, options);\r\n\r\n // it means command didn't end as expected, then stop the rest of the program\r\n if (commandOutput.error !== null) {\r\n process.exit(1);\r\n }\r\n\r\n return commandOutput;\r\n}\r\n\r\n/**\r\n * This function directly executes a command\r\n */\r\nexport async function executeCommand(cmd: string, args: string[], cwd: string) {\r\n return new Promise<boolean>(resolve => {\r\n const child = spawn(cmd, args, {\r\n cwd,\r\n stdio: \"ignore\",\r\n });\r\n\r\n child.on(\"error\", e => {\r\n if (e) {\r\n if (e.message) {\r\n log.error(colors.red(String(e.message)) + `\\n\\n`);\r\n } else {\r\n log.error(colors.red(String(e)) + `\\n\\n`);\r\n }\r\n }\r\n resolve(false);\r\n });\r\n\r\n child.on(\"close\", code => {\r\n if (code === 0) {\r\n resolve(true);\r\n } else {\r\n resolve(false);\r\n }\r\n });\r\n });\r\n}\r\n\r\nexport function runCommand(cmd: string, args: string[], cwd: string) {\r\n let child: ChildProcess;\r\n\r\n const install = new Promise<boolean>(resolve => {\r\n try {\r\n child = spawn(cmd, args, {\r\n cwd,\r\n stdio: \"ignore\",\r\n });\r\n\r\n child.on(\"error\", e => {\r\n if (e) {\r\n if (e.message) {\r\n log.error(colors.red(String(e.message)) + `\\n\\n`);\r\n } else {\r\n log.error(colors.red(String(e)) + `\\n\\n`);\r\n }\r\n }\r\n resolve(false);\r\n });\r\n\r\n child.on(\"close\", code => {\r\n if (code === 0) {\r\n resolve(true);\r\n } else {\r\n resolve(false);\r\n }\r\n });\r\n } catch (e) {\r\n resolve(false);\r\n }\r\n });\r\n\r\n const abort = async () => {\r\n if (child) {\r\n child.kill(\"SIGINT\");\r\n }\r\n };\r\n\r\n return { abort, install };\r\n}\r\n","import path from \"path\";\r\nimport { fileURLToPath } from \"url\";\r\n\r\nconst __filename = fileURLToPath(import.meta.url);\r\n\r\nconst __dirname = path.dirname(__filename);\r\n\r\nconsole.log(\"Executing from\", __dirname);\r\n\r\nexport type Template = \"warlock\";\r\n\r\nexport function template(templateName: Template): string {\r\n return path.resolve(__dirname, \"../\", \"../\", \"templates\", templateName);\r\n}\r\n\r\nexport function packageRoot(...paths: string[]): string {\r\n return path.resolve(__dirname, \"../\", \"../\", ...paths);\r\n}\r\n","import detectPackageManager from \"which-pm-runs\";\r\n\r\nlet detectedPackageManager: string | undefined;\r\n\r\nexport function getPackageManager() {\r\n if (detectedPackageManager) {\r\n return detectedPackageManager;\r\n }\r\n\r\n const packageManager = detectPackageManager();\r\n\r\n return packageManager.name || \"npm\";\r\n}\r\n\r\nexport function setPackageManager(packageManager: string) {\r\n detectedPackageManager = packageManager;\r\n}\r\n\r\nexport function installCommand() {\r\n return `${getPackageManager()} install`;\r\n}\r\n\r\nexport function startCommand() {\r\n if (getPackageManager() === \"npm\") return \"npm run dev\";\r\n\r\n return `${getPackageManager()} dev`;\r\n}\r\n\r\nexport function runPackageManagerCommand(command: string) {\r\n const packageManager = getPackageManager();\r\n\r\n if (packageManager === \"npm\") return `npm run ${command}`;\r\n\r\n return `${packageManager} ${command}`;\r\n}\r\n","import { outro } from \"@clack/prompts\";\r\nimport { colors } from \"@mongez/copper\";\r\nimport {\r\n copyDirectory,\r\n getFile,\r\n getJsonFile,\r\n putFile,\r\n putJsonFile,\r\n renameFile,\r\n} from \"@mongez/fs\";\r\nimport path from \"path\";\r\nimport { executeCommand } from \"./exec\";\r\nimport { startCommand } from \"./package-manager\";\r\nimport { Template, template } from \"./paths\";\r\n\r\nexport async function initializeGitRepository(appPath: string) {\r\n // initialize git repository\r\n await executeCommand(`git`, [\"init\"], appPath);\r\n // switching to `main` branch\r\n await executeCommand(`git`, [\"checkout\", \"-b\", \"main\"], appPath);\r\n\r\n // add files\r\n await executeCommand(`git`, [\"add\", \".\"], appPath);\r\n\r\n // commit files\r\n await executeCommand(`git`, [\"commit\", \"-m\", \"Initial commit ⚡️\"], appPath);\r\n\r\n return true;\r\n}\r\n\r\nexport async function updateEnvFile(appPath: string, appName: string) {\r\n // update package.json file\r\n const packageJson: any = getJsonFile(path.resolve(appPath, \"package.json\"));\r\n\r\n packageJson.name = appName;\r\n\r\n putJsonFile(path.resolve(appPath, \"package.json\"), packageJson);\r\n\r\n // update env file\r\n const dotEnv = getFile(path.resolve(appPath, \".env\"))\r\n .replace(\"AppName\", appName)\r\n .replace(\r\n \"AppCodeName\",\r\n appName\r\n .split(/-|_/g)\r\n .map(word => word[0])\r\n .join(\"\"),\r\n );\r\n\r\n putFile(path.resolve(appPath, \".env\"), dotEnv);\r\n\r\n // update .env.production file\r\n let dotEnvProduction = getFile(path.resolve(appPath, \".env.shared\"));\r\n\r\n dotEnvProduction = dotEnvProduction.replace(\"AppName\", appName).replace(\r\n \"AppCodeName\",\r\n appName\r\n .split(/-|_/g)\r\n .map(word => word[0])\r\n .join(\"\"),\r\n );\r\n\r\n putFile(path.resolve(appPath, \".env.shared\"), dotEnvProduction);\r\n}\r\n\r\nexport async function copyTemplateFiles(\r\n templateName: Template,\r\n appPath: string,\r\n _appName: string,\r\n) {\r\n // copy project files\r\n copyDirectory(template(templateName), appPath);\r\n\r\n // replace _.gitignore to\r\n renameFile(\r\n path.resolve(appPath, \"_.gitignore\"),\r\n path.resolve(appPath, \".gitignore\"),\r\n );\r\n}\r\n\r\nexport async function allDone(appName: string) {\r\n outro(\r\n \"🌟 Awesome! Your project is ready to rock! \" +\r\n \"Run the following command to start development:\",\r\n );\r\n\r\n console.log(colors.cyan(`cd ${appName} && ${startCommand()}`));\r\n\r\n console.log();\r\n\r\n console.log(\r\n `💡 Pro tip: Install the ${colors.yellow(\r\n \"Generator Z\",\r\n )} extension in VSCode for helpful code snippets and productivity boosters! 🚀`,\r\n );\r\n}\r\n","import {\r\n copyDirectory,\r\n copyFile,\r\n fileExists,\r\n getFile,\r\n getJsonFile,\r\n putFile,\r\n putJsonFile,\r\n renameFile,\r\n} from \"@mongez/fs\";\r\nimport path from \"path\";\r\nimport { Application } from \"src/commands/create-new-app/types\";\r\nimport { executeCommand, runCommand } from \"src/helpers/exec\";\r\nimport { Template, template } from \"src/helpers/paths\";\r\nimport {\r\n allDone,\r\n initializeGitRepository,\r\n} from \"src/helpers/project-builder-helpers\";\r\nimport { getPackageManager } from \"./package-manager\";\r\n\r\nexport class App {\r\n /**\r\n * Resolved files\r\n */\r\n protected files: Record<string, FileManager> = {};\r\n\r\n public isInstalled = false;\r\n\r\n public constructor(protected app: Application) {}\r\n\r\n public use(templateName: Template) {\r\n copyDirectory(template(templateName), this.path);\r\n\r\n if (fileExists(this.path + \"/.env.example\")) {\r\n copyFile(this.path + \"/.env.example\", this.path + \"/.env\");\r\n }\r\n\r\n renameFile(this.path + \"/_.gitignore\", this.path + \"/.gitignore\");\r\n\r\n return this;\r\n }\r\n\r\n public init() {\r\n return this;\r\n }\r\n\r\n public terminate() {\r\n allDone(this.name);\r\n }\r\n\r\n public install() {\r\n return runCommand(getPackageManager(), [\"install\"], this.path);\r\n }\r\n\r\n public async exec(command: string) {\r\n const [commandName, ...optionsList] = command.split(\" \");\r\n return await executeCommand(commandName, optionsList, this.path);\r\n }\r\n\r\n public async git() {\r\n return await initializeGitRepository(this.path);\r\n }\r\n\r\n public updatePackageJson() {\r\n this.package\r\n .replace(\"name\", this.name.replaceAll(\"/\", \"-\"))\r\n .replaceAll(\"yarn\", getPackageManager())\r\n .save();\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Get package json file\r\n */\r\n public get package() {\r\n return this.json(\"package.json\");\r\n }\r\n\r\n public updateDotEnv() {\r\n this.file(\".env\").replaceAll(\"appName\", this.name).save();\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Get env file to update\r\n */\r\n public get env() {\r\n return this.file(\".env\");\r\n }\r\n\r\n public get name() {\r\n return this.app.appName;\r\n }\r\n\r\n public get path() {\r\n return this.app.appPath;\r\n }\r\n\r\n public file(relativePath: string) {\r\n const fullPath = path.resolve(this.path, relativePath);\r\n\r\n if (!this.files[fullPath]) {\r\n this.files[fullPath] = file(fullPath);\r\n }\r\n\r\n return this.files[fullPath];\r\n }\r\n\r\n public json(relativePath: string) {\r\n const fullPath = path.resolve(this.path, relativePath);\r\n\r\n if (!this.files[fullPath]) {\r\n this.files[fullPath] = jsonFile(fullPath);\r\n }\r\n\r\n return this.files[fullPath];\r\n }\r\n}\r\n\r\nexport function app(app: Application) {\r\n return new App(app);\r\n}\r\n\r\nexport class FileManager {\r\n public content!: string;\r\n public constructor(protected filePath) {\r\n this.parseContent();\r\n }\r\n\r\n protected parseContent() {\r\n this.content = getFile(this.filePath) as string;\r\n }\r\n\r\n public replace(search: string, replace: string) {\r\n this.content = this.content.replace(search, replace);\r\n\r\n return this;\r\n }\r\n\r\n public replaceAll(search: string, replace: string) {\r\n this.content = this.content.replaceAll(search, replace);\r\n\r\n return this;\r\n }\r\n\r\n public save() {\r\n putFile(this.filePath, this.content);\r\n }\r\n}\r\n\r\nexport class JsonFileManager extends FileManager {\r\n protected parseContent() {\r\n this.content = getJsonFile(this.filePath);\r\n }\r\n\r\n public save() {\r\n putJsonFile(this.filePath, this.content);\r\n }\r\n\r\n public has(key: string) {\r\n return this.content[key] !== undefined;\r\n }\r\n\r\n public replace(key: string, value: any) {\r\n this.content[key] = value;\r\n\r\n return this;\r\n }\r\n\r\n public replaceAll(key: string, value: any) {\r\n const contentAsString = JSON.stringify(this.content);\r\n\r\n this.content = JSON.parse(contentAsString.replaceAll(key, value));\r\n\r\n return this;\r\n }\r\n}\r\n\r\nexport function file(path: string) {\r\n return new FileManager(path);\r\n}\r\n\r\nexport function jsonFile(path: string) {\r\n return new JsonFileManager(path);\r\n}\r\n","import { confirm, spinner } from \"@clack/prompts\";\r\nimport path from \"path\";\r\nimport { rimraf } from \"rimraf\";\r\nimport { App } from \"src/helpers/app\";\r\nimport { runPackageManagerCommand } from \"../../helpers/package-manager\";\r\n\r\nexport async function createWarlockApp(application: App) {\r\n // Initialize the basic app structure\r\n application.init().use(\"warlock\").updatePackageJson().updateDotEnv();\r\n\r\n // Start the installation process in background immediately\r\n const installProcess = application.install();\r\n\r\n // Collect all answers first\r\n const installDeps =\r\n (await confirm({\r\n message: \"Do you want to install dependencies?\",\r\n })) === true;\r\n\r\n // If user doesn't want to install dependencies, abort the background process\r\n if (!installDeps) {\r\n installProcess.abort();\r\n\r\n // Remove node_modules Asynchronously\r\n const nodeModulesPath = path.join(application.path, \"node_modules\");\r\n\r\n rimraf(nodeModulesPath);\r\n }\r\n\r\n const useGit =\r\n (await confirm({\r\n message: \"Do you want to initialize Git repository?\",\r\n })) === true;\r\n\r\n // Only ask about JWT if dependencies will be installed\r\n let useJWT = false;\r\n if (installDeps) {\r\n useJWT =\r\n (await confirm({\r\n message: \"Do you want to generate JWT Secret key?\",\r\n })) === true;\r\n }\r\n\r\n // Now execute all confirmed tasks\r\n\r\n // Handle Git initialization first if requested\r\n if (useGit) {\r\n const loading = spinner();\r\n loading.start(\"📂 Initializing Git repository...\");\r\n await application.git();\r\n loading.stop(\"📂 Git repository initialized ✅\");\r\n }\r\n\r\n // Wait for dependencies installation if it was requested\r\n if (installDeps) {\r\n const loading = spinner();\r\n loading.start(\"📦 Installing dependencies...\");\r\n await installProcess.install;\r\n loading.stop(\"📦 Dependencies installed successfully!\");\r\n\r\n // Generate JWT if requested\r\n if (useJWT) {\r\n const jwtLoading = spinner();\r\n jwtLoading.start(\"🔑 Generating JWT Secret...\");\r\n await application.exec(runPackageManagerCommand(\"jwt\"));\r\n jwtLoading.stop(\"🔑 JWT Secret generated 🔒\");\r\n }\r\n }\r\n\r\n application.terminate();\r\n}\r\n","import { colors } from \"@mongez/copper\";\r\nimport { isDirectory } from \"@mongez/fs\";\r\nimport * as path from \"path\";\r\n\r\nexport default function getAppPath(appName: string) {\r\n const appPath: string = path.resolve(process.cwd(), appName);\r\n\r\n if (isDirectory(appPath)) {\r\n console.log(\r\n colors.redBright(\r\n `${process.cwd()} has an existing directory \\`${colors.cyan(\r\n appName,\r\n )}\\`, please choose another app name or another directory to run the command from.`,\r\n ),\r\n );\r\n\r\n process.exit(1);\r\n }\r\n\r\n return appPath;\r\n}\r\n","import { cancel, intro, isCancel, select, text } from \"@clack/prompts\";\r\nimport { colors } from \"@mongez/copper\";\r\nimport { App } from \"../../helpers/app\";\r\nimport {\r\n getPackageManager,\r\n setPackageManager,\r\n} from \"../../helpers/package-manager\";\r\nimport { createWarlockApp } from \"../create-warlock-app\";\r\nimport getAppPath from \"./get-app-path\";\r\nimport { App as AppType } from \"./types\";\r\n\r\nconst appDetails: Required<AppType> = {\r\n appName: \"\",\r\n appType: \"\",\r\n appPath: \"\",\r\n pkgManager: \"\",\r\n options: {},\r\n};\r\n\r\nexport default async function createNewApp(createWarlockVersion: string) {\r\n intro(\r\n `✨ Let's create a new ${colors.yellowBright(\"Warlock Js App\")} ✨ ${colors.greenBright(`v` + createWarlockVersion)}`,\r\n );\r\n\r\n const appName = await text({\r\n message: \"Enter the app name\",\r\n placeholder: \"warlock-app\",\r\n });\r\n\r\n if (isCancel(appName) || !appName.trim()) {\r\n cancel(\"Application name is required to create a new app\");\r\n process.exit(0);\r\n }\r\n\r\n // Validate the nodejs version to be not less than 20\r\n const [major] = process.versions.node.split(\".\").map(Number);\r\n\r\n if (major < 20) {\r\n cancel(\"Node.js version must be at least 20.0.0\");\r\n process.exit(0);\r\n }\r\n\r\n const packageManager = await select({\r\n message: \"Select package manager to use 📦 \",\r\n initialValue: getPackageManager(),\r\n options: [\r\n {\r\n label: \"Npm\",\r\n value: \"npm\",\r\n },\r\n {\r\n label: \"Yarn\",\r\n value: \"yarn\",\r\n },\r\n {\r\n label: \"Pnpm\",\r\n value: \"pnpm\",\r\n },\r\n ],\r\n });\r\n\r\n setPackageManager(packageManager);\r\n\r\n appDetails.appName = appName;\r\n appDetails.appPath = getAppPath(appName);\r\n appDetails.pkgManager = packageManager;\r\n\r\n if (!appDetails.appPath) return;\r\n\r\n appDetails.appType = \"warlock\";\r\n\r\n createWarlockApp(new App(appDetails));\r\n}\r\n","import { getJsonFile } from \"@mongez/fs\";\r\nimport createNewApp from \"./commands/create-new-app\";\r\nimport { packageRoot } from \"./helpers/paths\";\r\n\r\nexport default function createApp() {\r\n const packageJson: any = getJsonFile(packageRoot(\"package.json\"));\r\n const createWarlockVersion = packageJson.version;\r\n createNewApp(createWarlockVersion);\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../../../../warlock.js/create-warlock/src/index.ts"],"names":[],"mappings":";;;;AAIe,SAAR,SAAA,GAA6B;AAClC,EAAA,MAAM,WAAA,GAAmB,WAAA,CAAY,WAAA,CAAY,cAAc,CAAC,CAAA;AAChE,EAAA,MAAM,uBAAuB,WAAA,CAAY,OAAA;AACzC,EAAA,YAAA,CAAa,oBAAoB,CAAA;AACnC","file":"index.js","sourcesContent":["import { getJsonFile } from \"@mongez/fs\";\r\nimport createNewApp from \"./commands/create-new-app\";\r\nimport { packageRoot } from \"./helpers/paths\";\r\n\r\nexport default function createApp() {\r\n const packageJson: any = getJsonFile(packageRoot(\"package.json\"));\r\n const createWarlockVersion = packageJson.version;\r\n createNewApp(createWarlockVersion);\r\n}\r\n"]}
|