pecunia-cli 0.2.0 → 0.2.2
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/api.mjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { a as generateKyselySchema, n as generateSchema, o as generateDrizzleSchema, r as generatePrismaSchema, t as adapters } from "./generators-
|
|
1
|
+
import { a as generateKyselySchema, n as generateSchema, o as generateDrizzleSchema, r as generatePrismaSchema, t as adapters } from "./generators-DMu0BKgN.mjs";
|
|
2
2
|
|
|
3
3
|
export { adapters, generateDrizzleSchema, generateKyselySchema, generatePrismaSchema, generateSchema };
|
|
@@ -421,6 +421,7 @@ const generateDrizzleSchema = async ({ options, file, adapter }) => {
|
|
|
421
421
|
});
|
|
422
422
|
if (attr.references) {
|
|
423
423
|
const referencedModelName = tableNameMap.get(attr.references.model) || getModelName(attr.references.model);
|
|
424
|
+
const onDelete = attr.references.onDelete || "no action";
|
|
424
425
|
references.push({
|
|
425
426
|
fieldName,
|
|
426
427
|
referencedTable: referencedModelName,
|
|
@@ -428,8 +429,8 @@ const generateDrizzleSchema = async ({ options, file, adapter }) => {
|
|
|
428
429
|
model: attr.references.model,
|
|
429
430
|
field: attr.references.field
|
|
430
431
|
}),
|
|
431
|
-
onDelete
|
|
432
|
-
required: attr.required
|
|
432
|
+
onDelete,
|
|
433
|
+
required: attr.required ?? false,
|
|
433
434
|
originalModel: attr.references.model
|
|
434
435
|
});
|
|
435
436
|
}
|
|
@@ -469,7 +470,14 @@ const generateDrizzleSchema = async ({ options, file, adapter }) => {
|
|
|
469
470
|
const reverseKey = `${referencedTableKey}->${tableDef.tableKey}`;
|
|
470
471
|
const reverseRef = referenceGraph.get(reverseKey);
|
|
471
472
|
if (reverseRef) {
|
|
472
|
-
|
|
473
|
+
const thisIsNullableWithSetNull = !ref.required && ref.onDelete === "set null";
|
|
474
|
+
const reverseIsNullableWithSetNull = !reverseRef.required && reverseRef.onDelete === "set null";
|
|
475
|
+
if (thisIsNullableWithSetNull) continue;
|
|
476
|
+
if (reverseIsNullableWithSetNull && ref.required) {
|
|
477
|
+
skipReferences.add(`${tableDef.tableKey}.${ref.fieldName}`);
|
|
478
|
+
continue;
|
|
479
|
+
}
|
|
480
|
+
if (!ref.required && (reverseRef.required || ref.onDelete !== "cascade" && reverseRef.onDelete === "cascade")) skipReferences.add(`${tableDef.tableKey}.${ref.fieldName}`);
|
|
473
481
|
}
|
|
474
482
|
}
|
|
475
483
|
for (const tableDef of tableDefinitions) {
|
|
@@ -483,6 +491,12 @@ const generateDrizzleSchema = async ({ options, file, adapter }) => {
|
|
|
483
491
|
};
|
|
484
492
|
const referenceMap = /* @__PURE__ */ new Map();
|
|
485
493
|
for (const ref of references) referenceMap.set(ref.fieldName, ref);
|
|
494
|
+
const hasCircularRef = references.some((ref) => {
|
|
495
|
+
const referencedTableKey = modelKeyToTableKey.get(ref.originalModel);
|
|
496
|
+
if (!referencedTableKey) return false;
|
|
497
|
+
const reverseKey = `${referencedTableKey}->${tableDef.tableKey}`;
|
|
498
|
+
return referenceGraph.has(reverseKey);
|
|
499
|
+
});
|
|
486
500
|
const fieldDefinitions = Object.keys(fields).filter((field) => field !== "id").map((field) => {
|
|
487
501
|
const attr = fields[field];
|
|
488
502
|
const fieldName = attr.fieldName || field;
|
|
@@ -506,13 +520,15 @@ const generateDrizzleSchema = async ({ options, file, adapter }) => {
|
|
|
506
520
|
if (reverseRef) comment = `\n // FK constraint removed to break circular dependency with ${ref.referencedTable}\n // Primary FK: ${reverseRef.sourceModelName}.${reverseRef.fieldName} -> ${modelName}.${fieldName}\n // This field still maintains referential integrity via application logic and Drizzle relations`;
|
|
507
521
|
else comment = `\n // FK constraint removed to break circular dependency with ${ref.referencedTable}\n // This field still maintains referential integrity via application logic and Drizzle relations`;
|
|
508
522
|
}
|
|
509
|
-
const
|
|
523
|
+
const isRequired = attr.required === true;
|
|
524
|
+
const fieldDef = `${fieldName}: ${type}${isRequired ? ".notNull()" : ""}${attr.unique ? ".unique()" : ""}${referenceChain}`;
|
|
510
525
|
return comment ? `${comment}\n ${fieldDef}` : fieldDef;
|
|
511
526
|
});
|
|
527
|
+
const typeAssertion = hasCircularRef ? " as any" : "";
|
|
512
528
|
const schema = `export const ${modelName} = ${databaseType}Table("${convertToSnakeCase(modelName, adapter.options?.camelCase)}", {
|
|
513
529
|
id: ${id},
|
|
514
530
|
${fieldDefinitions.join(",\n ")}
|
|
515
|
-
}${assignIndexes(indexes)});`;
|
|
531
|
+
}${assignIndexes(indexes)})${typeAssertion};`;
|
|
516
532
|
code += `\n${schema}\n`;
|
|
517
533
|
}
|
|
518
534
|
let relationsString = "";
|
|
@@ -897,8 +913,9 @@ const generatePrismaSchema = async ({ adapter, options, file }) => {
|
|
|
897
913
|
if (attr.references) {
|
|
898
914
|
const referencedOriginalModelName = getModelName(attr.references.model);
|
|
899
915
|
const referencedCustomModelName = tables[referencedOriginalModelName]?.modelName || referencedOriginalModelName;
|
|
900
|
-
let action = "
|
|
901
|
-
if (attr.references.onDelete === "
|
|
916
|
+
let action = "NoAction";
|
|
917
|
+
if (attr.references.onDelete === "cascade") action = "Cascade";
|
|
918
|
+
else if (attr.references.onDelete === "no action") action = "NoAction";
|
|
902
919
|
else if (attr.references.onDelete === "set null") action = "SetNull";
|
|
903
920
|
else if (attr.references.onDelete === "set default") action = "SetDefault";
|
|
904
921
|
else if (attr.references.onDelete === "restrict") action = "Restrict";
|
package/dist/index.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { i as getPackageInfo, n as generateSchema } from "./generators-
|
|
2
|
+
import { i as getPackageInfo, n as generateSchema } from "./generators-DMu0BKgN.mjs";
|
|
3
3
|
import { Command } from "commander";
|
|
4
4
|
import fs, { existsSync, readFileSync } from "node:fs";
|
|
5
5
|
import fs$1 from "node:fs/promises";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pecunia-cli",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"module": "dist/index.mjs",
|
|
6
6
|
"main": "./dist/index.mjs",
|
|
@@ -64,8 +64,8 @@
|
|
|
64
64
|
"dotenv": "^17.2.2",
|
|
65
65
|
"drizzle-orm": "^0.33.0",
|
|
66
66
|
"open": "^10.2.0",
|
|
67
|
-
"pecunia-core": "^0.1.
|
|
68
|
-
"pecunia-root": "^0.2.
|
|
67
|
+
"pecunia-core": "^0.1.3",
|
|
68
|
+
"pecunia-root": "^0.2.2",
|
|
69
69
|
"pg": "^8.16.3",
|
|
70
70
|
"prettier": "^3.6.2",
|
|
71
71
|
"prompts": "^2.4.2",
|