create-prisma-php-app 3.3.1 → 3.3.3
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 +143 -61
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -7,7 +7,11 @@ import{execSync,spawnSync}from"child_process";import fs from"fs";import{fileURLT
|
|
|
7
7
|
* @param {boolean} [isDev=false] - Whether to install the dependencies as devDependencies.
|
|
8
8
|
*/
|
|
9
9
|
async function installNpmDependencies(baseDir, dependencies, isDev = false) {
|
|
10
|
-
|
|
10
|
+
if (!fs.existsSync(path.join(baseDir, "package.json"))) {
|
|
11
|
+
console.log("Initializing new Node.js project...");
|
|
12
|
+
} else {
|
|
13
|
+
console.log("Updating existing Node.js project...");
|
|
14
|
+
}
|
|
11
15
|
// Initialize a package.json if it doesn't exist
|
|
12
16
|
if (!fs.existsSync(path.join(baseDir, "package.json"))) {
|
|
13
17
|
execSync("npm init -y", {
|
|
@@ -173,29 +177,11 @@ async function main() {
|
|
|
173
177
|
let projectName = args[0];
|
|
174
178
|
let answer = null;
|
|
175
179
|
if (projectName) {
|
|
176
|
-
|
|
177
|
-
let useSwaggerDocs = args.includes("--swagger-docs");
|
|
178
|
-
let useTailwind = args.includes("--tailwindcss");
|
|
179
|
-
let useWebsocket = args.includes("--websocket");
|
|
180
|
-
let usePrisma = args.includes("--prisma");
|
|
181
|
-
let useDocker = args.includes("--docker");
|
|
182
|
-
const predefinedAnswers = {
|
|
183
|
-
projectName,
|
|
184
|
-
backendOnly: useBackendOnly,
|
|
185
|
-
swaggerDocs: useSwaggerDocs,
|
|
186
|
-
tailwindcss: useTailwind,
|
|
187
|
-
websocket: useWebsocket,
|
|
188
|
-
prisma: usePrisma,
|
|
189
|
-
docker: useDocker,
|
|
190
|
-
};
|
|
191
|
-
answer = await getAnswer(predefinedAnswers);
|
|
192
|
-
if (answer === null) {
|
|
193
|
-
console.log(chalk.red("Installation cancelled."));
|
|
194
|
-
return;
|
|
195
|
-
}
|
|
180
|
+
// Check if it's an update FIRST
|
|
196
181
|
const currentDir = process.cwd();
|
|
197
182
|
const configPath = path.join(currentDir, "prisma-php.json");
|
|
198
183
|
if (fs.existsSync(configPath)) {
|
|
184
|
+
// It's an update - read existing settings
|
|
199
185
|
const localSettings = readJsonFile(configPath);
|
|
200
186
|
let excludeFiles = [];
|
|
201
187
|
localSettings.excludeFiles?.map((file) => {
|
|
@@ -205,19 +191,56 @@ async function main() {
|
|
|
205
191
|
});
|
|
206
192
|
updateAnswer = {
|
|
207
193
|
projectName,
|
|
208
|
-
backendOnly:
|
|
209
|
-
swaggerDocs:
|
|
210
|
-
tailwindcss:
|
|
211
|
-
websocket:
|
|
212
|
-
prisma:
|
|
213
|
-
docker:
|
|
194
|
+
backendOnly: localSettings.backendOnly,
|
|
195
|
+
swaggerDocs: localSettings.swaggerDocs,
|
|
196
|
+
tailwindcss: localSettings.tailwindcss,
|
|
197
|
+
websocket: localSettings.websocket,
|
|
198
|
+
prisma: localSettings.prisma,
|
|
199
|
+
docker: localSettings.docker,
|
|
214
200
|
isUpdate: true,
|
|
215
201
|
excludeFiles: localSettings.excludeFiles ?? [],
|
|
216
202
|
excludeFilePath: excludeFiles ?? [],
|
|
217
203
|
filePath: currentDir,
|
|
218
204
|
};
|
|
205
|
+
// For updates, use existing settings but allow CLI overrides
|
|
206
|
+
const predefinedAnswers = {
|
|
207
|
+
projectName,
|
|
208
|
+
backendOnly:
|
|
209
|
+
args.includes("--backend-only") || localSettings.backendOnly,
|
|
210
|
+
swaggerDocs:
|
|
211
|
+
args.includes("--swagger-docs") || localSettings.swaggerDocs,
|
|
212
|
+
tailwindcss:
|
|
213
|
+
args.includes("--tailwindcss") || localSettings.tailwindcss,
|
|
214
|
+
websocket: args.includes("--websocket") || localSettings.websocket,
|
|
215
|
+
prisma: args.includes("--prisma") || localSettings.prisma,
|
|
216
|
+
docker: args.includes("--docker") || localSettings.docker,
|
|
217
|
+
};
|
|
218
|
+
answer = await getAnswer(predefinedAnswers);
|
|
219
|
+
} else {
|
|
220
|
+
// It's a new project - use CLI arguments
|
|
221
|
+
let useBackendOnly = args.includes("--backend-only");
|
|
222
|
+
let useSwaggerDocs = args.includes("--swagger-docs");
|
|
223
|
+
let useTailwind = args.includes("--tailwindcss");
|
|
224
|
+
let useWebsocket = args.includes("--websocket");
|
|
225
|
+
let usePrisma = args.includes("--prisma");
|
|
226
|
+
let useDocker = args.includes("--docker");
|
|
227
|
+
const predefinedAnswers = {
|
|
228
|
+
projectName,
|
|
229
|
+
backendOnly: useBackendOnly,
|
|
230
|
+
swaggerDocs: useSwaggerDocs,
|
|
231
|
+
tailwindcss: useTailwind,
|
|
232
|
+
websocket: useWebsocket,
|
|
233
|
+
prisma: usePrisma,
|
|
234
|
+
docker: useDocker,
|
|
235
|
+
};
|
|
236
|
+
answer = await getAnswer(predefinedAnswers);
|
|
237
|
+
}
|
|
238
|
+
if (answer === null) {
|
|
239
|
+
console.log(chalk.red("Installation cancelled."));
|
|
240
|
+
return;
|
|
219
241
|
}
|
|
220
242
|
} else {
|
|
243
|
+
// No project name provided - interactive mode
|
|
221
244
|
answer = await getAnswer();
|
|
222
245
|
}
|
|
223
246
|
if (answer === null) {
|
|
@@ -338,24 +361,57 @@ async function main() {
|
|
|
338
361
|
if (updateAnswer?.isUpdate) {
|
|
339
362
|
const updateUninstallNpmDependencies = [];
|
|
340
363
|
const updateUninstallComposerDependencies = [];
|
|
364
|
+
// Helper function to check if a composer package is installed
|
|
365
|
+
const isComposerPackageInstalled = (packageName) => {
|
|
366
|
+
try {
|
|
367
|
+
const composerJsonPath = path.join(projectPath, "composer.json");
|
|
368
|
+
if (fs.existsSync(composerJsonPath)) {
|
|
369
|
+
const composerJson = JSON.parse(
|
|
370
|
+
fs.readFileSync(composerJsonPath, "utf8")
|
|
371
|
+
);
|
|
372
|
+
return !!(
|
|
373
|
+
composerJson.require && composerJson.require[packageName]
|
|
374
|
+
);
|
|
375
|
+
}
|
|
376
|
+
return false;
|
|
377
|
+
} catch {
|
|
378
|
+
return false;
|
|
379
|
+
}
|
|
380
|
+
};
|
|
381
|
+
// Helper function to check if an npm package is installed
|
|
382
|
+
const isNpmPackageInstalled = (packageName) => {
|
|
383
|
+
try {
|
|
384
|
+
const packageJsonPath = path.join(projectPath, "package.json");
|
|
385
|
+
if (fs.existsSync(packageJsonPath)) {
|
|
386
|
+
const packageJson = JSON.parse(
|
|
387
|
+
fs.readFileSync(packageJsonPath, "utf8")
|
|
388
|
+
);
|
|
389
|
+
return !!(
|
|
390
|
+
(packageJson.dependencies &&
|
|
391
|
+
packageJson.dependencies[packageName]) ||
|
|
392
|
+
(packageJson.devDependencies &&
|
|
393
|
+
packageJson.devDependencies[packageName])
|
|
394
|
+
);
|
|
395
|
+
}
|
|
396
|
+
return false;
|
|
397
|
+
} catch {
|
|
398
|
+
return false;
|
|
399
|
+
}
|
|
400
|
+
};
|
|
341
401
|
if (updateAnswer.backendOnly) {
|
|
342
402
|
nonBackendFiles.forEach((file) => {
|
|
343
403
|
const filePath = path.join(projectPath, "src", "app", file);
|
|
344
404
|
if (fs.existsSync(filePath)) {
|
|
345
|
-
fs.unlinkSync(filePath);
|
|
405
|
+
fs.unlinkSync(filePath);
|
|
346
406
|
console.log(`${file} was deleted successfully.`);
|
|
347
|
-
} else {
|
|
348
|
-
console.log(`${file} does not exist.`);
|
|
349
407
|
}
|
|
350
408
|
});
|
|
351
409
|
const backendOnlyFolders = ["js", "css"];
|
|
352
410
|
backendOnlyFolders.forEach((folder) => {
|
|
353
411
|
const folderPath = path.join(projectPath, "src", "app", folder);
|
|
354
412
|
if (fs.existsSync(folderPath)) {
|
|
355
|
-
fs.rmSync(folderPath, { recursive: true, force: true });
|
|
413
|
+
fs.rmSync(folderPath, { recursive: true, force: true });
|
|
356
414
|
console.log(`${folder} was deleted successfully.`);
|
|
357
|
-
} else {
|
|
358
|
-
console.log(`${folder} does not exist.`);
|
|
359
415
|
}
|
|
360
416
|
});
|
|
361
417
|
}
|
|
@@ -367,44 +423,53 @@ async function main() {
|
|
|
367
423
|
"swagger-docs"
|
|
368
424
|
);
|
|
369
425
|
if (fs.existsSync(swaggerDocsFolder)) {
|
|
370
|
-
fs.rmSync(swaggerDocsFolder, { recursive: true, force: true });
|
|
426
|
+
fs.rmSync(swaggerDocsFolder, { recursive: true, force: true });
|
|
371
427
|
console.log(`swagger-docs was deleted successfully.`);
|
|
372
428
|
}
|
|
373
429
|
const swaggerFiles = ["swagger-config.ts"];
|
|
374
430
|
swaggerFiles.forEach((file) => {
|
|
375
431
|
const filePath = path.join(projectPath, "settings", file);
|
|
376
432
|
if (fs.existsSync(filePath)) {
|
|
377
|
-
fs.unlinkSync(filePath);
|
|
433
|
+
fs.unlinkSync(filePath);
|
|
378
434
|
console.log(`${file} was deleted successfully.`);
|
|
379
|
-
} else {
|
|
380
|
-
console.log(`${file} does not exist.`);
|
|
381
435
|
}
|
|
382
436
|
});
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
"
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
437
|
+
// Only add to uninstall list if packages are actually installed
|
|
438
|
+
if (isNpmPackageInstalled("swagger-jsdoc")) {
|
|
439
|
+
updateUninstallNpmDependencies.push("swagger-jsdoc");
|
|
440
|
+
}
|
|
441
|
+
if (isNpmPackageInstalled("@types/swagger-jsdoc")) {
|
|
442
|
+
updateUninstallNpmDependencies.push("@types/swagger-jsdoc");
|
|
443
|
+
}
|
|
444
|
+
if (isNpmPackageInstalled("prompts")) {
|
|
445
|
+
updateUninstallNpmDependencies.push("prompts");
|
|
446
|
+
}
|
|
447
|
+
if (isNpmPackageInstalled("@types/prompts")) {
|
|
448
|
+
updateUninstallNpmDependencies.push("@types/prompts");
|
|
449
|
+
}
|
|
389
450
|
}
|
|
390
451
|
if (!updateAnswer.tailwindcss) {
|
|
391
452
|
const tailwindFiles = ["postcss.config.js"];
|
|
392
453
|
tailwindFiles.forEach((file) => {
|
|
393
454
|
const filePath = path.join(projectPath, file);
|
|
394
455
|
if (fs.existsSync(filePath)) {
|
|
395
|
-
fs.unlinkSync(filePath);
|
|
456
|
+
fs.unlinkSync(filePath);
|
|
396
457
|
console.log(`${file} was deleted successfully.`);
|
|
397
|
-
} else {
|
|
398
|
-
console.log(`${file} does not exist.`);
|
|
399
458
|
}
|
|
400
459
|
});
|
|
401
|
-
|
|
460
|
+
// Only add to uninstall list if packages are actually installed
|
|
461
|
+
const tailwindPackages = [
|
|
402
462
|
"tailwindcss",
|
|
403
463
|
"postcss",
|
|
404
464
|
"postcss-cli",
|
|
405
465
|
"@tailwindcss/postcss",
|
|
406
|
-
"cssnano"
|
|
407
|
-
|
|
466
|
+
"cssnano",
|
|
467
|
+
];
|
|
468
|
+
tailwindPackages.forEach((pkg) => {
|
|
469
|
+
if (isNpmPackageInstalled(pkg)) {
|
|
470
|
+
updateUninstallNpmDependencies.push(pkg);
|
|
471
|
+
}
|
|
472
|
+
});
|
|
408
473
|
}
|
|
409
474
|
if (!updateAnswer.websocket) {
|
|
410
475
|
const websocketFiles = [
|
|
@@ -414,10 +479,8 @@ async function main() {
|
|
|
414
479
|
websocketFiles.forEach((file) => {
|
|
415
480
|
const filePath = path.join(projectPath, "settings", file);
|
|
416
481
|
if (fs.existsSync(filePath)) {
|
|
417
|
-
fs.unlinkSync(filePath);
|
|
482
|
+
fs.unlinkSync(filePath);
|
|
418
483
|
console.log(`${file} was deleted successfully.`);
|
|
419
|
-
} else {
|
|
420
|
-
console.log(`${file} does not exist.`);
|
|
421
484
|
}
|
|
422
485
|
});
|
|
423
486
|
const websocketFolder = path.join(
|
|
@@ -427,18 +490,28 @@ async function main() {
|
|
|
427
490
|
"Websocket"
|
|
428
491
|
);
|
|
429
492
|
if (fs.existsSync(websocketFolder)) {
|
|
430
|
-
fs.rmSync(websocketFolder, { recursive: true, force: true });
|
|
493
|
+
fs.rmSync(websocketFolder, { recursive: true, force: true });
|
|
431
494
|
console.log(`Websocket folder was deleted successfully.`);
|
|
432
495
|
}
|
|
433
|
-
|
|
434
|
-
|
|
496
|
+
// Only add to uninstall list if packages are actually installed
|
|
497
|
+
if (isNpmPackageInstalled("chokidar-cli")) {
|
|
498
|
+
updateUninstallNpmDependencies.push("chokidar-cli");
|
|
499
|
+
}
|
|
500
|
+
if (isComposerPackageInstalled("cboden/ratchet")) {
|
|
501
|
+
updateUninstallComposerDependencies.push("cboden/ratchet");
|
|
502
|
+
}
|
|
435
503
|
}
|
|
436
504
|
if (!updateAnswer.prisma) {
|
|
437
|
-
|
|
505
|
+
const prismaPackages = [
|
|
438
506
|
"prisma",
|
|
439
507
|
"@prisma/client",
|
|
440
|
-
"@prisma/internals"
|
|
441
|
-
|
|
508
|
+
"@prisma/internals",
|
|
509
|
+
];
|
|
510
|
+
prismaPackages.forEach((pkg) => {
|
|
511
|
+
if (isNpmPackageInstalled(pkg)) {
|
|
512
|
+
updateUninstallNpmDependencies.push(pkg);
|
|
513
|
+
}
|
|
514
|
+
});
|
|
442
515
|
}
|
|
443
516
|
if (!updateAnswer.docker) {
|
|
444
517
|
const dockerFiles = [
|
|
@@ -450,14 +523,18 @@ async function main() {
|
|
|
450
523
|
dockerFiles.forEach((file) => {
|
|
451
524
|
const filePath = path.join(projectPath, file);
|
|
452
525
|
if (fs.existsSync(filePath)) {
|
|
453
|
-
fs.unlinkSync(filePath);
|
|
526
|
+
fs.unlinkSync(filePath);
|
|
454
527
|
console.log(`${file} was deleted successfully.`);
|
|
455
|
-
} else {
|
|
456
|
-
console.log(`${file} does not exist.`);
|
|
457
528
|
}
|
|
458
529
|
});
|
|
459
530
|
}
|
|
531
|
+
// Only uninstall if there are packages to uninstall
|
|
460
532
|
if (updateUninstallNpmDependencies.length > 0) {
|
|
533
|
+
console.log(
|
|
534
|
+
`Uninstalling npm packages: ${updateUninstallNpmDependencies.join(
|
|
535
|
+
", "
|
|
536
|
+
)}`
|
|
537
|
+
);
|
|
461
538
|
await uninstallNpmDependencies(
|
|
462
539
|
projectPath,
|
|
463
540
|
updateUninstallNpmDependencies,
|
|
@@ -465,6 +542,11 @@ async function main() {
|
|
|
465
542
|
);
|
|
466
543
|
}
|
|
467
544
|
if (updateUninstallComposerDependencies.length > 0) {
|
|
545
|
+
console.log(
|
|
546
|
+
`Uninstalling composer packages: ${updateUninstallComposerDependencies.join(
|
|
547
|
+
", "
|
|
548
|
+
)}`
|
|
549
|
+
);
|
|
468
550
|
await uninstallComposerDependencies(
|
|
469
551
|
projectPath,
|
|
470
552
|
updateUninstallComposerDependencies
|