@drzl/cli 4.14.3 → 4.14.4

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/cli.cjs CHANGED
@@ -782,6 +782,30 @@ async function restoreSnapshot(before, after) {
782
782
  }
783
783
  }
784
784
 
785
+ // src/generator-loader.ts
786
+ var GeneratorNotInstalledError = class extends Error {
787
+ constructor(specifier, reason) {
788
+ super(`${specifier} is not installed`);
789
+ this.specifier = specifier;
790
+ this.reason = reason;
791
+ this.name = "GeneratorNotInstalledError";
792
+ }
793
+ };
794
+ function isPackageMissing(err, specifier) {
795
+ const code = err?.code;
796
+ if (code !== "ERR_MODULE_NOT_FOUND") return false;
797
+ const message = err?.message;
798
+ return typeof message === "string" && message.includes(`'${specifier}'`);
799
+ }
800
+ async function loadGenerator(specifier, load) {
801
+ try {
802
+ return await load();
803
+ } catch (e) {
804
+ if (isPackageMissing(e, specifier)) throw new GeneratorNotInstalledError(specifier, e);
805
+ throw e;
806
+ }
807
+ }
808
+
785
809
  // src/sponsor.ts
786
810
  var import_chalk = __toESM(require("chalk"), 1);
787
811
  var import_node_fs2 = require("fs");
@@ -885,6 +909,17 @@ function readCliVersion() {
885
909
  var CLI_VERSION = readCliVersion();
886
910
 
887
911
  // src/cli.ts
912
+ function reportGeneratorFailure(kind, e) {
913
+ if (e instanceof GeneratorNotInstalledError) {
914
+ console.error(
915
+ import_chalk2.default.red(`The ${kind} generator is not installed.`),
916
+ import_chalk2.default.yellow(`
917
+ Install with: npm install ${e.specifier}`)
918
+ );
919
+ return;
920
+ }
921
+ console.error(import_chalk2.default.red(`The ${kind} generator failed:`), e?.message ?? e);
922
+ }
888
923
  var program = new import_commander.Command();
889
924
  program.name("drzl").description("DRZL - Drizzle Developer Toolkit").version(CLI_VERSION);
890
925
  program.addHelpText(
@@ -983,7 +1018,10 @@ program.command("generate").description("Run configured generators (drzl.config.
983
1018
  files.forEach((f) => console.log(" -", import_chalk2.default.cyan(f)));
984
1019
  } else if (g.kind === "service") {
985
1020
  try {
986
- const { ServiceGenerator } = await import("@drzl/generator-service");
1021
+ const { ServiceGenerator } = await loadGenerator(
1022
+ "@drzl/generator-service",
1023
+ () => import("@drzl/generator-service")
1024
+ );
987
1025
  const gen = new ServiceGenerator(analysis);
988
1026
  const target = g.path ?? "src/services";
989
1027
  const files = await gen.generate({
@@ -1000,16 +1038,15 @@ program.command("generate").description("Run configured generators (drzl.config.
1000
1038
  files.forEach((f) => console.log(" -", import_chalk2.default.cyan(f)));
1001
1039
  } catch (e) {
1002
1040
  progress.stop();
1003
- console.error(
1004
- import_chalk2.default.red("Service generator missing."),
1005
- import_chalk2.default.yellow("\nInstall with: npm install @drzl/generator-service")
1006
- );
1007
- console.error(import_chalk2.default.gray("Error details:"), e?.message ?? e);
1041
+ reportGeneratorFailure(g.kind, e);
1008
1042
  process.exit(1);
1009
1043
  }
1010
1044
  } else if (g.kind === "zod") {
1011
1045
  try {
1012
- const { ZodGenerator } = await import("@drzl/generator-zod");
1046
+ const { ZodGenerator } = await loadGenerator(
1047
+ "@drzl/generator-zod",
1048
+ () => import("@drzl/generator-zod")
1049
+ );
1013
1050
  const gen = new ZodGenerator(analysis);
1014
1051
  const target = g.path ?? "src/validators/zod";
1015
1052
  const files = await gen.generate(
@@ -1020,16 +1057,15 @@ program.command("generate").description("Run configured generators (drzl.config.
1020
1057
  files.forEach((f) => console.log(" -", import_chalk2.default.cyan(f)));
1021
1058
  } catch (e) {
1022
1059
  progress.stop();
1023
- console.error(
1024
- import_chalk2.default.red("Zod generator missing."),
1025
- import_chalk2.default.yellow("\nInstall with: npm install @drzl/generator-zod")
1026
- );
1027
- console.error(import_chalk2.default.gray("Error details:"), e?.message ?? e);
1060
+ reportGeneratorFailure(g.kind, e);
1028
1061
  process.exit(1);
1029
1062
  }
1030
1063
  } else if (g.kind === "valibot") {
1031
1064
  try {
1032
- const { ValibotGenerator } = await import("@drzl/generator-valibot");
1065
+ const { ValibotGenerator } = await loadGenerator(
1066
+ "@drzl/generator-valibot",
1067
+ () => import("@drzl/generator-valibot")
1068
+ );
1033
1069
  const gen = new ValibotGenerator(analysis);
1034
1070
  const target = g.path ?? "src/validators/valibot";
1035
1071
  const files = await gen.generate(
@@ -1040,16 +1076,15 @@ program.command("generate").description("Run configured generators (drzl.config.
1040
1076
  files.forEach((f) => console.log(" -", import_chalk2.default.cyan(f)));
1041
1077
  } catch (e) {
1042
1078
  progress.stop();
1043
- console.error(
1044
- import_chalk2.default.red("Valibot generator missing."),
1045
- import_chalk2.default.yellow("\nInstall with: npm install @drzl/generator-valibot")
1046
- );
1047
- console.error(import_chalk2.default.gray("Error details:"), e?.message ?? e);
1079
+ reportGeneratorFailure(g.kind, e);
1048
1080
  process.exit(1);
1049
1081
  }
1050
1082
  } else if (g.kind === "arktype") {
1051
1083
  try {
1052
- const { ArkTypeGenerator } = await import("@drzl/generator-arktype");
1084
+ const { ArkTypeGenerator } = await loadGenerator(
1085
+ "@drzl/generator-arktype",
1086
+ () => import("@drzl/generator-arktype")
1087
+ );
1053
1088
  const gen = new ArkTypeGenerator(analysis);
1054
1089
  const target = g.path ?? "src/validators/arktype";
1055
1090
  const files = await gen.generate(
@@ -1060,16 +1095,15 @@ program.command("generate").description("Run configured generators (drzl.config.
1060
1095
  files.forEach((f) => console.log(" -", import_chalk2.default.cyan(f)));
1061
1096
  } catch (e) {
1062
1097
  progress.stop();
1063
- console.error(
1064
- import_chalk2.default.red("ArkType generator missing."),
1065
- import_chalk2.default.yellow("\nInstall with: npm install @drzl/generator-arktype")
1066
- );
1067
- console.error(import_chalk2.default.gray("Error details:"), e?.message ?? e);
1098
+ reportGeneratorFailure(g.kind, e);
1068
1099
  process.exit(1);
1069
1100
  }
1070
1101
  } else if (g.kind === "json-schema") {
1071
1102
  try {
1072
- const { JsonSchemaGenerator: JsonSchemaGenerator2 } = await Promise.resolve().then(() => (init_dist(), dist_exports));
1103
+ const { JsonSchemaGenerator: JsonSchemaGenerator2 } = await loadGenerator(
1104
+ "@drzl/generator-json-schema",
1105
+ () => Promise.resolve().then(() => (init_dist(), dist_exports))
1106
+ );
1073
1107
  const gen = new JsonSchemaGenerator2(analysis);
1074
1108
  const target = g.path ?? "src/validators/json-schema";
1075
1109
  const files = await gen.generate({
@@ -1083,20 +1117,15 @@ program.command("generate").description("Run configured generators (drzl.config.
1083
1117
  files.forEach((f) => console.log(" -", import_chalk2.default.cyan(f)));
1084
1118
  } catch (e) {
1085
1119
  progress.stop();
1086
- console.error(
1087
- import_chalk2.default.red("JSON Schema generator missing."),
1088
- import_chalk2.default.yellow("\nInstall with: npm install @drzl/generator-json-schema"),
1089
- // An optional dependency, unlike the other generators, until its npm trusted
1090
- // publisher exists. A missing optional dependency is skipped rather than failing
1091
- // the install, which is what keeps `npm i @drzl/cli` working meanwhile.
1092
- ""
1093
- );
1094
- console.error(import_chalk2.default.gray("Error details:"), e?.message ?? e);
1120
+ reportGeneratorFailure(g.kind, e);
1095
1121
  process.exit(1);
1096
1122
  }
1097
1123
  } else if (g.kind === "typebox") {
1098
1124
  try {
1099
- const { TypeBoxGenerator } = await import("@drzl/generator-typebox");
1125
+ const { TypeBoxGenerator } = await loadGenerator(
1126
+ "@drzl/generator-typebox",
1127
+ () => import("@drzl/generator-typebox")
1128
+ );
1100
1129
  const gen = new TypeBoxGenerator(analysis);
1101
1130
  const target = g.path ?? "src/validators/typebox";
1102
1131
  const files = await gen.generate(
@@ -1107,11 +1136,7 @@ program.command("generate").description("Run configured generators (drzl.config.
1107
1136
  files.forEach((f) => console.log(" -", import_chalk2.default.cyan(f)));
1108
1137
  } catch (e) {
1109
1138
  progress.stop();
1110
- console.error(
1111
- import_chalk2.default.red("TypeBox generator missing."),
1112
- import_chalk2.default.yellow("\nInstall with: npm install @drzl/generator-typebox")
1113
- );
1114
- console.error(import_chalk2.default.gray("Error details:"), e?.message ?? e);
1139
+ reportGeneratorFailure(g.kind, e);
1115
1140
  process.exit(1);
1116
1141
  }
1117
1142
  }
@@ -1295,7 +1320,10 @@ program.command("watch").description("Watch schema and regenerate on changes").o
1295
1320
  newFiles.push(...files);
1296
1321
  } else if (g.kind === "service") {
1297
1322
  try {
1298
- const { ServiceGenerator } = await import("@drzl/generator-service");
1323
+ const { ServiceGenerator } = await loadGenerator(
1324
+ "@drzl/generator-service",
1325
+ () => import("@drzl/generator-service")
1326
+ );
1299
1327
  const gen = new ServiceGenerator(analysis);
1300
1328
  const target = g.path ?? "src/services";
1301
1329
  const files = await gen.generate({
@@ -1313,16 +1341,15 @@ program.command("watch").description("Watch schema and regenerate on changes").o
1313
1341
  );
1314
1342
  newFiles.push(...files);
1315
1343
  } catch (e) {
1316
- console.error(
1317
- import_chalk2.default.red("Service generator missing."),
1318
- import_chalk2.default.yellow("\nInstall with: npm install @drzl/generator-service")
1319
- );
1320
- console.error(import_chalk2.default.gray("Error details:"), e?.message ?? e);
1344
+ reportGeneratorFailure(g.kind, e);
1321
1345
  return;
1322
1346
  }
1323
1347
  } else if (g.kind === "zod") {
1324
1348
  try {
1325
- const { ZodGenerator } = await import("@drzl/generator-zod");
1349
+ const { ZodGenerator } = await loadGenerator(
1350
+ "@drzl/generator-zod",
1351
+ () => import("@drzl/generator-zod")
1352
+ );
1326
1353
  const gen = new ZodGenerator(analysis);
1327
1354
  const target = g.path ?? "src/validators/zod";
1328
1355
  const files = await gen.generate({
@@ -1340,16 +1367,15 @@ program.command("watch").description("Watch schema and regenerate on changes").o
1340
1367
  );
1341
1368
  newFiles.push(...files);
1342
1369
  } catch (e) {
1343
- console.error(
1344
- import_chalk2.default.red("Zod generator missing."),
1345
- import_chalk2.default.yellow("\nInstall with: npm install @drzl/generator-zod")
1346
- );
1347
- console.error(import_chalk2.default.gray("Error details:"), e?.message ?? e);
1370
+ reportGeneratorFailure(g.kind, e);
1348
1371
  return;
1349
1372
  }
1350
1373
  } else if (g.kind === "valibot") {
1351
1374
  try {
1352
- const { ValibotGenerator } = await import("@drzl/generator-valibot");
1375
+ const { ValibotGenerator } = await loadGenerator(
1376
+ "@drzl/generator-valibot",
1377
+ () => import("@drzl/generator-valibot")
1378
+ );
1353
1379
  const gen = new ValibotGenerator(analysis);
1354
1380
  const target = g.path ?? "src/validators/valibot";
1355
1381
  const files = await gen.generate({
@@ -1367,16 +1393,15 @@ program.command("watch").description("Watch schema and regenerate on changes").o
1367
1393
  );
1368
1394
  newFiles.push(...files);
1369
1395
  } catch (e) {
1370
- console.error(
1371
- import_chalk2.default.red("Valibot generator missing."),
1372
- import_chalk2.default.yellow("\nInstall with: npm install @drzl/generator-valibot")
1373
- );
1374
- console.error(import_chalk2.default.gray("Error details:"), e?.message ?? e);
1396
+ reportGeneratorFailure(g.kind, e);
1375
1397
  return;
1376
1398
  }
1377
1399
  } else if (g.kind === "arktype") {
1378
1400
  try {
1379
- const { ArkTypeGenerator } = await import("@drzl/generator-arktype");
1401
+ const { ArkTypeGenerator } = await loadGenerator(
1402
+ "@drzl/generator-arktype",
1403
+ () => import("@drzl/generator-arktype")
1404
+ );
1380
1405
  const gen = new ArkTypeGenerator(analysis);
1381
1406
  const target = g.path ?? "src/validators/arktype";
1382
1407
  const files = await gen.generate({
@@ -1394,11 +1419,7 @@ program.command("watch").description("Watch schema and regenerate on changes").o
1394
1419
  );
1395
1420
  newFiles.push(...files);
1396
1421
  } catch (e) {
1397
- console.error(
1398
- import_chalk2.default.red("ArkType generator missing."),
1399
- import_chalk2.default.yellow("\nInstall with: npm install @drzl/generator-arktype")
1400
- );
1401
- console.error(import_chalk2.default.gray("Error details:"), e?.message ?? e);
1422
+ reportGeneratorFailure(g.kind, e);
1402
1423
  return;
1403
1424
  }
1404
1425
  }