prisma-safe-delete 0.1.0
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/CHANGELOG.md +24 -0
- package/LICENSE +21 -0
- package/README.md +436 -0
- package/dist/bin.d.ts +9 -0
- package/dist/bin.d.ts.map +1 -0
- package/dist/bin.js +9 -0
- package/dist/bin.js.map +1 -0
- package/dist/cascade-graph.d.ts +54 -0
- package/dist/cascade-graph.d.ts.map +1 -0
- package/dist/cascade-graph.js +123 -0
- package/dist/cascade-graph.js.map +1 -0
- package/dist/codegen/emit-cascade-graph.d.ts +6 -0
- package/dist/codegen/emit-cascade-graph.d.ts.map +1 -0
- package/dist/codegen/emit-cascade-graph.js +56 -0
- package/dist/codegen/emit-cascade-graph.js.map +1 -0
- package/dist/codegen/emit-index.d.ts +6 -0
- package/dist/codegen/emit-index.d.ts.map +1 -0
- package/dist/codegen/emit-index.js +26 -0
- package/dist/codegen/emit-index.js.map +1 -0
- package/dist/codegen/emit-runtime.d.ts +8 -0
- package/dist/codegen/emit-runtime.d.ts.map +1 -0
- package/dist/codegen/emit-runtime.js +873 -0
- package/dist/codegen/emit-runtime.js.map +1 -0
- package/dist/codegen/emit-types.d.ts +8 -0
- package/dist/codegen/emit-types.d.ts.map +1 -0
- package/dist/codegen/emit-types.js +109 -0
- package/dist/codegen/emit-types.js.map +1 -0
- package/dist/codegen/index.d.ts +5 -0
- package/dist/codegen/index.d.ts.map +1 -0
- package/dist/codegen/index.js +5 -0
- package/dist/codegen/index.js.map +1 -0
- package/dist/dmmf-parser.d.ts +62 -0
- package/dist/dmmf-parser.d.ts.map +1 -0
- package/dist/dmmf-parser.js +171 -0
- package/dist/dmmf-parser.js.map +1 -0
- package/dist/generator.d.ts +2 -0
- package/dist/generator.d.ts.map +1 -0
- package/dist/generator.js +71 -0
- package/dist/generator.js.map +1 -0
- package/package.json +80 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emit-runtime.js","sourceRoot":"","sources":["../../src/codegen/emit-runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ParsedSchema } from '../dmmf-parser.js';
|
|
2
|
+
/**
|
|
3
|
+
* Generates the SafePrismaClient type definitions
|
|
4
|
+
* @param schema - The parsed Prisma schema
|
|
5
|
+
* @param clientImportPath - The relative import path to the generated Prisma client (e.g., '../client')
|
|
6
|
+
*/
|
|
7
|
+
export declare function emitTypes(schema: ParsedSchema, clientImportPath: string): string;
|
|
8
|
+
//# sourceMappingURL=emit-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emit-types.d.ts","sourceRoot":"","sources":["../../src/codegen/emit-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAe,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEnE;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,GAAG,MAAM,CAqBhF"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generates the SafePrismaClient type definitions
|
|
3
|
+
* @param schema - The parsed Prisma schema
|
|
4
|
+
* @param clientImportPath - The relative import path to the generated Prisma client (e.g., '../client')
|
|
5
|
+
*/
|
|
6
|
+
export function emitTypes(schema, clientImportPath) {
|
|
7
|
+
const lines = [];
|
|
8
|
+
lines.push('/* eslint-disable */');
|
|
9
|
+
lines.push('// @ts-nocheck');
|
|
10
|
+
lines.push('// Auto-generated by prisma-safe-delete');
|
|
11
|
+
lines.push('// Do not edit this file manually');
|
|
12
|
+
lines.push('');
|
|
13
|
+
lines.push(`import type { PrismaClient, Prisma } from '${clientImportPath}';`);
|
|
14
|
+
lines.push('');
|
|
15
|
+
// Generate model-specific types
|
|
16
|
+
for (const model of schema.models) {
|
|
17
|
+
lines.push(...emitModelTypes(model));
|
|
18
|
+
lines.push('');
|
|
19
|
+
}
|
|
20
|
+
// Generate the main SafePrismaClient type
|
|
21
|
+
lines.push(...emitSafePrismaClientType(schema));
|
|
22
|
+
return lines.join('\n');
|
|
23
|
+
}
|
|
24
|
+
function emitModelTypes(model) {
|
|
25
|
+
const lines = [];
|
|
26
|
+
const name = model.name;
|
|
27
|
+
const lowerName = toLowerFirst(name);
|
|
28
|
+
if (model.isSoftDeletable) {
|
|
29
|
+
// Soft-deletable model gets modified delegate type
|
|
30
|
+
lines.push(`/** Soft-delete enabled delegate for ${name} */`);
|
|
31
|
+
lines.push(`export type Safe${name}Delegate = Omit<`);
|
|
32
|
+
lines.push(` PrismaClient['${lowerName}'],`);
|
|
33
|
+
lines.push(` 'delete' | 'deleteMany'`);
|
|
34
|
+
lines.push(`> & {`);
|
|
35
|
+
lines.push(` /** Soft delete a single ${name} record */`);
|
|
36
|
+
lines.push(` softDelete: (args: Prisma.${name}DeleteArgs) => Promise<Prisma.${name}GetPayload<{}>>;`);
|
|
37
|
+
lines.push(` /** Soft delete multiple ${name} records */`);
|
|
38
|
+
lines.push(` softDeleteMany: (args: Prisma.${name}DeleteManyArgs) => Promise<Prisma.BatchPayload>;`);
|
|
39
|
+
lines.push(` /** Hard delete a single ${name} record (permanent) */`);
|
|
40
|
+
lines.push(` hardDelete: (args: Prisma.${name}DeleteArgs) => Promise<Prisma.${name}GetPayload<{}>>;`);
|
|
41
|
+
lines.push(` /** Hard delete multiple ${name} records (permanent) */`);
|
|
42
|
+
lines.push(` hardDeleteMany: (args: Prisma.${name}DeleteManyArgs) => Promise<Prisma.BatchPayload>;`);
|
|
43
|
+
lines.push(`};`);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
// Non-soft-deletable model keeps original type
|
|
47
|
+
lines.push(`/** Standard delegate for ${name} (no soft-delete) */`);
|
|
48
|
+
lines.push(`export type Safe${name}Delegate = PrismaClient['${lowerName}'];`);
|
|
49
|
+
}
|
|
50
|
+
return lines;
|
|
51
|
+
}
|
|
52
|
+
function emitSafePrismaClientType(schema) {
|
|
53
|
+
const lines = [];
|
|
54
|
+
lines.push('/** Type-safe Prisma client with soft-delete support */');
|
|
55
|
+
lines.push('export interface SafePrismaClient {');
|
|
56
|
+
// Add model delegates
|
|
57
|
+
for (const model of schema.models) {
|
|
58
|
+
const lowerName = toLowerFirst(model.name);
|
|
59
|
+
lines.push(` ${lowerName}: Safe${model.name}Delegate;`);
|
|
60
|
+
}
|
|
61
|
+
lines.push('');
|
|
62
|
+
lines.push(' // Prisma client methods');
|
|
63
|
+
lines.push(" $connect: PrismaClient['$connect'];");
|
|
64
|
+
lines.push(" $disconnect: PrismaClient['$disconnect'];");
|
|
65
|
+
lines.push(" $on: PrismaClient['$on'];");
|
|
66
|
+
lines.push(" $transaction: PrismaClient['$transaction'];");
|
|
67
|
+
lines.push(" $use: PrismaClient['$use'];");
|
|
68
|
+
lines.push(" $extends: PrismaClient['$extends'];");
|
|
69
|
+
lines.push(" $queryRaw: PrismaClient['$queryRaw'];");
|
|
70
|
+
lines.push(" $executeRaw: PrismaClient['$executeRaw'];");
|
|
71
|
+
lines.push(" $queryRawUnsafe: PrismaClient['$queryRawUnsafe'];");
|
|
72
|
+
lines.push(" $executeRawUnsafe: PrismaClient['$executeRawUnsafe'];");
|
|
73
|
+
lines.push('');
|
|
74
|
+
lines.push(' /** Access to underlying Prisma client for escape hatches */');
|
|
75
|
+
lines.push(' $prisma: PrismaClient;');
|
|
76
|
+
lines.push('');
|
|
77
|
+
lines.push(' /** Query including soft-deleted records */');
|
|
78
|
+
lines.push(' $includingDeleted: IncludingDeletedClient;');
|
|
79
|
+
lines.push('');
|
|
80
|
+
lines.push(' /** Query only soft-deleted records */');
|
|
81
|
+
lines.push(' $onlyDeleted: OnlyDeletedClient;');
|
|
82
|
+
lines.push('}');
|
|
83
|
+
lines.push('');
|
|
84
|
+
// Generate IncludingDeletedClient type
|
|
85
|
+
lines.push('/** Client that includes soft-deleted records in queries */');
|
|
86
|
+
lines.push('export interface IncludingDeletedClient {');
|
|
87
|
+
for (const model of schema.models) {
|
|
88
|
+
const lowerName = toLowerFirst(model.name);
|
|
89
|
+
lines.push(` ${lowerName}: PrismaClient['${lowerName}'];`);
|
|
90
|
+
}
|
|
91
|
+
lines.push('}');
|
|
92
|
+
lines.push('');
|
|
93
|
+
// Generate OnlyDeletedClient type
|
|
94
|
+
lines.push('/** Client that queries only soft-deleted records */');
|
|
95
|
+
lines.push('export interface OnlyDeletedClient {');
|
|
96
|
+
for (const model of schema.models) {
|
|
97
|
+
if (model.isSoftDeletable) {
|
|
98
|
+
const lowerName = toLowerFirst(model.name);
|
|
99
|
+
lines.push(` ${lowerName}: Pick<PrismaClient['${lowerName}'], 'findMany' | 'findFirst' | 'findUnique' | 'count'>;`);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
lines.push('}');
|
|
103
|
+
return lines;
|
|
104
|
+
}
|
|
105
|
+
function toLowerFirst(str) {
|
|
106
|
+
const first = str.charAt(0);
|
|
107
|
+
return first.toLowerCase() + str.slice(1);
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=emit-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emit-types.js","sourceRoot":"","sources":["../../src/codegen/emit-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/codegen/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/codegen/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { DMMF } from '@prisma/generator-helper';
|
|
2
|
+
/**
|
|
3
|
+
* Represents a parsed field from a Prisma model
|
|
4
|
+
*/
|
|
5
|
+
export interface ParsedField {
|
|
6
|
+
name: string;
|
|
7
|
+
type: string;
|
|
8
|
+
isRequired: boolean;
|
|
9
|
+
isList: boolean;
|
|
10
|
+
isId: boolean;
|
|
11
|
+
isUnique: boolean;
|
|
12
|
+
hasDefaultValue: boolean;
|
|
13
|
+
isRelation: boolean;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Represents a parsed relation between models
|
|
17
|
+
*/
|
|
18
|
+
export interface ParsedRelation {
|
|
19
|
+
name: string;
|
|
20
|
+
type: string;
|
|
21
|
+
foreignKey: string[];
|
|
22
|
+
references: string[];
|
|
23
|
+
onDelete: string | null;
|
|
24
|
+
isList: boolean;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Represents a fully parsed Prisma model
|
|
28
|
+
*/
|
|
29
|
+
export interface ParsedModel {
|
|
30
|
+
name: string;
|
|
31
|
+
primaryKey: string | string[];
|
|
32
|
+
isSoftDeletable: boolean;
|
|
33
|
+
deletedAtField: string | null;
|
|
34
|
+
deletedByField: string | null;
|
|
35
|
+
fields: ParsedField[];
|
|
36
|
+
relations: ParsedRelation[];
|
|
37
|
+
/** String fields with @unique or part of @@unique that need mangling on soft delete */
|
|
38
|
+
uniqueStringFields: string[];
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Result of parsing the entire DMMF
|
|
42
|
+
*/
|
|
43
|
+
export interface ParsedSchema {
|
|
44
|
+
models: ParsedModel[];
|
|
45
|
+
modelMap: Map<string, ParsedModel>;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Parses the complete DMMF datamodel into our structured format
|
|
49
|
+
*
|
|
50
|
+
* @param dmmf - The DMMF document from Prisma generator
|
|
51
|
+
* @returns ParsedSchema with models array and lookup map
|
|
52
|
+
*/
|
|
53
|
+
export declare function parseDMMF(dmmf: DMMF.Document): ParsedSchema;
|
|
54
|
+
/**
|
|
55
|
+
* Gets all soft-deletable models from a parsed schema
|
|
56
|
+
*/
|
|
57
|
+
export declare function getSoftDeletableModels(schema: ParsedSchema): ParsedModel[];
|
|
58
|
+
/**
|
|
59
|
+
* Gets all non-soft-deletable models from a parsed schema
|
|
60
|
+
*/
|
|
61
|
+
export declare function getHardDeleteOnlyModels(schema: ParsedSchema): ParsedModel[];
|
|
62
|
+
//# sourceMappingURL=dmmf-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dmmf-parser.d.ts","sourceRoot":"","sources":["../src/dmmf-parser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAErD;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,eAAe,EAAE,OAAO,CAAC;IACzB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC9B,eAAe,EAAE,OAAO,CAAC;IACzB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,SAAS,EAAE,cAAc,EAAE,CAAC;IAC5B,uFAAuF;IACvF,kBAAkB,EAAE,MAAM,EAAE,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;CACpC;AA0LD;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,GAAG,YAAY,CAa3D;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,YAAY,GAAG,WAAW,EAAE,CAE1E;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,YAAY,GAAG,WAAW,EAAE,CAE3E"}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
const DELETED_AT_FIELD_NAMES = ['deleted_at', 'deletedAt'];
|
|
2
|
+
const DELETED_BY_FIELD_NAMES = ['deleted_by', 'deletedBy'];
|
|
3
|
+
/**
|
|
4
|
+
* Finds a field matching one of the given candidate names
|
|
5
|
+
*/
|
|
6
|
+
function findFieldByNames(fields, candidates) {
|
|
7
|
+
return fields.find((field) => candidates.includes(field.name));
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Determines if a field is suitable as a deleted_at marker
|
|
11
|
+
* Must be DateTime and nullable
|
|
12
|
+
*/
|
|
13
|
+
function isValidDeletedAtField(field) {
|
|
14
|
+
return field.type === 'DateTime' && !field.isRequired;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Determines if a field is suitable as a deleted_by marker
|
|
18
|
+
* Must be String and nullable
|
|
19
|
+
*/
|
|
20
|
+
function isValidDeletedByField(field) {
|
|
21
|
+
return field.type === 'String' && !field.isRequired;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Extracts the primary key configuration from a DMMF model
|
|
25
|
+
*/
|
|
26
|
+
function extractPrimaryKey(model) {
|
|
27
|
+
// Check for compound primary key first
|
|
28
|
+
if (model.primaryKey !== null) {
|
|
29
|
+
const pkFields = model.primaryKey.fields;
|
|
30
|
+
if (pkFields.length > 1) {
|
|
31
|
+
return [...pkFields];
|
|
32
|
+
}
|
|
33
|
+
if (pkFields.length === 1 && pkFields[0] !== undefined) {
|
|
34
|
+
return pkFields[0];
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
// Fall back to @id field
|
|
38
|
+
const idField = model.fields.find((field) => field.isId);
|
|
39
|
+
if (idField !== undefined) {
|
|
40
|
+
return idField.name;
|
|
41
|
+
}
|
|
42
|
+
// Fall back to @@unique if no @id exists (Prisma allows this)
|
|
43
|
+
if (model.uniqueFields.length > 0) {
|
|
44
|
+
const firstUnique = model.uniqueFields[0];
|
|
45
|
+
if (firstUnique !== undefined && firstUnique.length > 0) {
|
|
46
|
+
return firstUnique.length === 1 ? (firstUnique[0] ?? 'id') : [...firstUnique];
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return 'id';
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Parses a single DMMF field into our ParsedField format
|
|
53
|
+
*/
|
|
54
|
+
function parseField(field) {
|
|
55
|
+
return {
|
|
56
|
+
name: field.name,
|
|
57
|
+
type: field.type,
|
|
58
|
+
isRequired: field.isRequired,
|
|
59
|
+
isList: field.isList,
|
|
60
|
+
isId: field.isId,
|
|
61
|
+
isUnique: field.isUnique,
|
|
62
|
+
hasDefaultValue: field.hasDefaultValue,
|
|
63
|
+
isRelation: field.relationName !== undefined,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Parses a relation field into our ParsedRelation format
|
|
68
|
+
*/
|
|
69
|
+
function parseRelation(field) {
|
|
70
|
+
if (field.relationName === undefined) {
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
const fromFields = field.relationFromFields;
|
|
74
|
+
const toFields = field.relationToFields;
|
|
75
|
+
return {
|
|
76
|
+
name: field.name,
|
|
77
|
+
type: field.type,
|
|
78
|
+
foreignKey: fromFields !== undefined ? [...fromFields] : [],
|
|
79
|
+
references: toFields !== undefined ? [...toFields] : [],
|
|
80
|
+
onDelete: field.relationOnDelete ?? null,
|
|
81
|
+
isList: field.isList,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Extracts unique string fields from a model.
|
|
86
|
+
* Includes both @unique fields and string fields from @@unique compound constraints.
|
|
87
|
+
*/
|
|
88
|
+
function extractUniqueStringFields(model) {
|
|
89
|
+
const uniqueStringFields = new Set();
|
|
90
|
+
// Find fields with @unique that are strings
|
|
91
|
+
for (const field of model.fields) {
|
|
92
|
+
if (field.isUnique && field.type === 'String') {
|
|
93
|
+
uniqueStringFields.add(field.name);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
// Find string fields in @@unique compound constraints
|
|
97
|
+
for (const uniqueConstraint of model.uniqueFields) {
|
|
98
|
+
for (const fieldName of uniqueConstraint) {
|
|
99
|
+
const field = model.fields.find((f) => f.name === fieldName);
|
|
100
|
+
if (field?.type === 'String') {
|
|
101
|
+
uniqueStringFields.add(fieldName);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
// Return sorted for deterministic output
|
|
106
|
+
return [...uniqueStringFields].sort();
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Parses a single DMMF model into our ParsedModel format
|
|
110
|
+
*/
|
|
111
|
+
function parseModel(model) {
|
|
112
|
+
const deletedAtCandidate = findFieldByNames(model.fields, DELETED_AT_FIELD_NAMES);
|
|
113
|
+
const deletedByCandidate = findFieldByNames(model.fields, DELETED_BY_FIELD_NAMES);
|
|
114
|
+
const deletedAtField = deletedAtCandidate !== undefined && isValidDeletedAtField(deletedAtCandidate)
|
|
115
|
+
? deletedAtCandidate.name
|
|
116
|
+
: null;
|
|
117
|
+
const deletedByField = deletedByCandidate !== undefined && isValidDeletedByField(deletedByCandidate)
|
|
118
|
+
? deletedByCandidate.name
|
|
119
|
+
: null;
|
|
120
|
+
const fields = [];
|
|
121
|
+
for (const field of model.fields) {
|
|
122
|
+
fields.push(parseField(field));
|
|
123
|
+
}
|
|
124
|
+
const relations = [];
|
|
125
|
+
for (const field of model.fields) {
|
|
126
|
+
const relation = parseRelation(field);
|
|
127
|
+
if (relation !== null) {
|
|
128
|
+
relations.push(relation);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
return {
|
|
132
|
+
name: model.name,
|
|
133
|
+
primaryKey: extractPrimaryKey(model),
|
|
134
|
+
isSoftDeletable: deletedAtField !== null,
|
|
135
|
+
deletedAtField,
|
|
136
|
+
deletedByField,
|
|
137
|
+
fields,
|
|
138
|
+
relations,
|
|
139
|
+
uniqueStringFields: extractUniqueStringFields(model),
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Parses the complete DMMF datamodel into our structured format
|
|
144
|
+
*
|
|
145
|
+
* @param dmmf - The DMMF document from Prisma generator
|
|
146
|
+
* @returns ParsedSchema with models array and lookup map
|
|
147
|
+
*/
|
|
148
|
+
export function parseDMMF(dmmf) {
|
|
149
|
+
const models = [];
|
|
150
|
+
for (const model of dmmf.datamodel.models) {
|
|
151
|
+
models.push(parseModel(model));
|
|
152
|
+
}
|
|
153
|
+
const modelMap = new Map();
|
|
154
|
+
for (const model of models) {
|
|
155
|
+
modelMap.set(model.name, model);
|
|
156
|
+
}
|
|
157
|
+
return { models, modelMap };
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Gets all soft-deletable models from a parsed schema
|
|
161
|
+
*/
|
|
162
|
+
export function getSoftDeletableModels(schema) {
|
|
163
|
+
return schema.models.filter((model) => model.isSoftDeletable);
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Gets all non-soft-deletable models from a parsed schema
|
|
167
|
+
*/
|
|
168
|
+
export function getHardDeleteOnlyModels(schema) {
|
|
169
|
+
return schema.models.filter((model) => !model.isSoftDeletable);
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=dmmf-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dmmf-parser.js","sourceRoot":"","sources":["../src/dmmf-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import generatorHelper from '@prisma/generator-helper';
|
|
2
|
+
const { generatorHandler } = generatorHelper;
|
|
3
|
+
import * as fs from 'node:fs/promises';
|
|
4
|
+
import * as path from 'node:path';
|
|
5
|
+
import { parseDMMF } from './dmmf-parser.js';
|
|
6
|
+
import { buildCascadeGraph } from './cascade-graph.js';
|
|
7
|
+
import { emitTypes, emitRuntime, emitCascadeGraph, emitIndex, } from './codegen/index.js';
|
|
8
|
+
/**
|
|
9
|
+
* Computes the relative import path from our output directory to the Prisma client.
|
|
10
|
+
*/
|
|
11
|
+
function computeClientImportPath(ourOutputDir, clientOutputDir) {
|
|
12
|
+
// Calculate relative path from our output to client output
|
|
13
|
+
let relativePath = path.relative(ourOutputDir, clientOutputDir);
|
|
14
|
+
// Normalize to forward slashes for imports
|
|
15
|
+
relativePath = relativePath.split(path.sep).join('/');
|
|
16
|
+
// Ensure it starts with ./ or ../
|
|
17
|
+
if (!relativePath.startsWith('.')) {
|
|
18
|
+
relativePath = './' + relativePath;
|
|
19
|
+
}
|
|
20
|
+
return relativePath;
|
|
21
|
+
}
|
|
22
|
+
generatorHandler({
|
|
23
|
+
onManifest() {
|
|
24
|
+
return {
|
|
25
|
+
defaultOutput: './generated/soft-cascade',
|
|
26
|
+
prettyName: 'Prisma Soft Cascade',
|
|
27
|
+
// Prisma 7+ uses prisma-client
|
|
28
|
+
requiresGenerators: ['prisma-client'],
|
|
29
|
+
};
|
|
30
|
+
},
|
|
31
|
+
async onGenerate(options) {
|
|
32
|
+
const outputDir = options.generator.output?.value;
|
|
33
|
+
if (outputDir === undefined || outputDir === null) {
|
|
34
|
+
throw new Error('No output directory specified for prisma-safe-delete');
|
|
35
|
+
}
|
|
36
|
+
// Find the Prisma client generator to get its output path
|
|
37
|
+
const clientGenerator = options.otherGenerators.find((g) => g.provider.value === 'prisma-client');
|
|
38
|
+
// Compute client import path - Prisma 7 requires explicit output
|
|
39
|
+
const clientOutputPath = clientGenerator?.output?.value;
|
|
40
|
+
if (clientOutputPath === undefined ||
|
|
41
|
+
clientOutputPath === null ||
|
|
42
|
+
clientOutputPath === '') {
|
|
43
|
+
throw new Error('prisma-safe-delete requires the prisma-client generator with an explicit output path. ' +
|
|
44
|
+
'Please ensure your schema.prisma has:\n\n' +
|
|
45
|
+
'generator client {\n' +
|
|
46
|
+
' provider = "prisma-client"\n' +
|
|
47
|
+
' output = "./generated/client"\n' +
|
|
48
|
+
'}');
|
|
49
|
+
}
|
|
50
|
+
const clientImportPath = computeClientImportPath(outputDir, clientOutputPath);
|
|
51
|
+
// Parse the DMMF
|
|
52
|
+
const schema = parseDMMF(options.dmmf);
|
|
53
|
+
// Build the cascade graph
|
|
54
|
+
const cascadeGraph = buildCascadeGraph(schema);
|
|
55
|
+
// Generate all output files
|
|
56
|
+
const typesContent = emitTypes(schema, clientImportPath);
|
|
57
|
+
const cascadeGraphContent = emitCascadeGraph(cascadeGraph);
|
|
58
|
+
const runtimeContent = emitRuntime(schema, clientImportPath);
|
|
59
|
+
const indexContent = emitIndex(schema);
|
|
60
|
+
// Ensure output directory exists
|
|
61
|
+
await fs.mkdir(outputDir, { recursive: true });
|
|
62
|
+
// Write all files
|
|
63
|
+
await Promise.all([
|
|
64
|
+
fs.writeFile(path.join(outputDir, 'types.ts'), typesContent, 'utf-8'),
|
|
65
|
+
fs.writeFile(path.join(outputDir, 'cascade-graph.ts'), cascadeGraphContent, 'utf-8'),
|
|
66
|
+
fs.writeFile(path.join(outputDir, 'runtime.ts'), runtimeContent, 'utf-8'),
|
|
67
|
+
fs.writeFile(path.join(outputDir, 'index.ts'), indexContent, 'utf-8'),
|
|
68
|
+
]);
|
|
69
|
+
},
|
|
70
|
+
});
|
|
71
|
+
//# sourceMappingURL=generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "prisma-safe-delete",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "A Prisma generator that creates a type-safe wrapper for soft deletion with automatic cascade support",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/generator.js",
|
|
7
|
+
"types": "dist/generator.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/generator.d.ts",
|
|
11
|
+
"default": "./dist/generator.js"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"bin": {
|
|
15
|
+
"prisma-safe-delete": "./dist/bin.js"
|
|
16
|
+
},
|
|
17
|
+
"files": [
|
|
18
|
+
"dist",
|
|
19
|
+
"LICENSE",
|
|
20
|
+
"README.md",
|
|
21
|
+
"CHANGELOG.md"
|
|
22
|
+
],
|
|
23
|
+
"keywords": [
|
|
24
|
+
"prisma",
|
|
25
|
+
"soft-delete",
|
|
26
|
+
"soft-deletion",
|
|
27
|
+
"cascade",
|
|
28
|
+
"generator",
|
|
29
|
+
"typescript",
|
|
30
|
+
"orm",
|
|
31
|
+
"database",
|
|
32
|
+
"delete",
|
|
33
|
+
"restore"
|
|
34
|
+
],
|
|
35
|
+
"author": "EddieRydell",
|
|
36
|
+
"license": "MIT",
|
|
37
|
+
"repository": {
|
|
38
|
+
"type": "git",
|
|
39
|
+
"url": "git+https://github.com/EddieRydell/prisma-safe-delete.git"
|
|
40
|
+
},
|
|
41
|
+
"homepage": "https://github.com/EddieRydell/prisma-safe-delete#readme",
|
|
42
|
+
"bugs": {
|
|
43
|
+
"url": "https://github.com/EddieRydell/prisma-safe-delete/issues"
|
|
44
|
+
},
|
|
45
|
+
"peerDependencies": {
|
|
46
|
+
"prisma": ">=7.0.0"
|
|
47
|
+
},
|
|
48
|
+
"devDependencies": {
|
|
49
|
+
"@eslint/js": "^9.0.0",
|
|
50
|
+
"@prisma/adapter-pg": "^7.0.0",
|
|
51
|
+
"@prisma/client": "^7.3.0",
|
|
52
|
+
"@prisma/generator-helper": "^7.0.0",
|
|
53
|
+
"@types/node": "^25.2.1",
|
|
54
|
+
"@types/pg": "^8.16.0",
|
|
55
|
+
"@vitest/coverage-v8": "^4.0.18",
|
|
56
|
+
"dotenv": "^16.5.0",
|
|
57
|
+
"eslint": "^9.0.0",
|
|
58
|
+
"knip": "^5.0.0",
|
|
59
|
+
"pg": "^8.16.0",
|
|
60
|
+
"prisma": "^7.0.0",
|
|
61
|
+
"typescript": "^5.7.0",
|
|
62
|
+
"typescript-eslint": "^8.0.0",
|
|
63
|
+
"vitest": "^4.0.18"
|
|
64
|
+
},
|
|
65
|
+
"engines": {
|
|
66
|
+
"node": ">=18"
|
|
67
|
+
},
|
|
68
|
+
"scripts": {
|
|
69
|
+
"build": "tsc",
|
|
70
|
+
"typecheck": "tsc -p tsconfig.test.json",
|
|
71
|
+
"lint": "eslint src tests",
|
|
72
|
+
"lint:fix": "eslint src tests --fix",
|
|
73
|
+
"knip": "knip",
|
|
74
|
+
"test": "vitest run",
|
|
75
|
+
"test:watch": "vitest",
|
|
76
|
+
"test:coverage": "vitest run --coverage",
|
|
77
|
+
"ci": "pnpm audit --prod && pnpm run typecheck && pnpm run lint && pnpm run knip && pnpm run test",
|
|
78
|
+
"version": "pnpm run build"
|
|
79
|
+
}
|
|
80
|
+
}
|