prisma-effect-kysely 1.5.0 → 1.5.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/CHANGELOG.md +64 -0
- package/dist/effect/generator.d.ts +5 -0
- package/dist/effect/generator.d.ts.map +1 -1
- package/dist/effect/generator.js +9 -0
- package/dist/effect/generator.js.map +1 -1
- package/dist/effect/join-table.d.ts +13 -0
- package/dist/effect/join-table.d.ts.map +1 -0
- package/dist/effect/join-table.js +54 -0
- package/dist/effect/join-table.js.map +1 -0
- package/dist/generator/index.js +1 -1
- package/dist/generator/orchestrator.d.ts.map +1 -1
- package/dist/generator/orchestrator.js +10 -3
- package/dist/generator/orchestrator.js.map +1 -1
- package/dist/kysely/generator.d.ts +3 -2
- package/dist/kysely/generator.d.ts.map +1 -1
- package/dist/kysely/generator.js +3 -3
- package/dist/kysely/generator.js.map +1 -1
- package/dist/kysely/type.d.ts +7 -2
- package/dist/kysely/type.d.ts.map +1 -1
- package/dist/kysely/type.js +15 -4
- package/dist/kysely/type.js.map +1 -1
- package/dist/prisma/generator.d.ts +5 -0
- package/dist/prisma/generator.d.ts.map +1 -1
- package/dist/prisma/generator.js +7 -0
- package/dist/prisma/generator.js.map +1 -1
- package/dist/prisma/relation.d.ts +33 -0
- package/dist/prisma/relation.d.ts.map +1 -0
- package/dist/prisma/relation.js +92 -0
- package/dist/prisma/relation.js.map +1 -0
- package/dist/prisma/type.d.ts.map +1 -1
- package/dist/prisma/type.js +4 -1
- package/dist/prisma/type.js.map +1 -1
- package/package.json +1 -1
- package/dist/utils/unsupported-config.d.ts +0 -26
- package/dist/utils/unsupported-config.d.ts.map +0 -1
- package/dist/utils/unsupported-config.js +0 -36
- package/dist/utils/unsupported-config.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,70 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [1.5.2] - 2025-10-12
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- **Implicit Many-to-Many Join Table Generation** - Full support for Prisma's implicit many-to-many relations
|
|
13
|
+
- Automatically generates Effect Schema types for join tables (e.g., `_CategoryToPost`)
|
|
14
|
+
- Includes join tables in Kysely `DB` interface for type-safe queries
|
|
15
|
+
- Generates operational schemas (`Selectable`, `Insertable`, `Updateable`) for join tables
|
|
16
|
+
- Both `Type` and `Encoded` exports for complete type coverage
|
|
17
|
+
- Example:
|
|
18
|
+
```typescript
|
|
19
|
+
// Generated join table schema
|
|
20
|
+
export const _CategoryToPost = Schema.Struct({
|
|
21
|
+
A: columnType(Schema.UUID, Schema.Never, Schema.Never),
|
|
22
|
+
B: columnType(Schema.UUID, Schema.Never, Schema.Never),
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
export const CategoryToPost = getSchemas(_CategoryToPost);
|
|
26
|
+
|
|
27
|
+
// DB interface includes join table
|
|
28
|
+
export interface DB {
|
|
29
|
+
Category: Schema.Schema.Encoded<typeof _Category>;
|
|
30
|
+
Post: Schema.Schema.Encoded<typeof _Post>;
|
|
31
|
+
_CategoryToPost: Schema.Schema.Encoded<typeof _CategoryToPost>;
|
|
32
|
+
}
|
|
33
|
+
```
|
|
34
|
+
- **Benefits**:
|
|
35
|
+
- ✨ Type-safe Kysely queries through intermediate tables
|
|
36
|
+
- ✨ Complete database schema representation
|
|
37
|
+
- ✨ Enables complex many-to-many queries with full type inference
|
|
38
|
+
- ✨ Maintains consistency with Prisma's database structure
|
|
39
|
+
|
|
40
|
+
### Fixed
|
|
41
|
+
|
|
42
|
+
- **UUID Detection Accuracy** - Enhanced UUID field detection to prevent false positives
|
|
43
|
+
- Now checks field type is `String` before applying name pattern matching
|
|
44
|
+
- Prevents incorrect UUID detection on `Int` fields named `id`
|
|
45
|
+
- Maintains 3-tier detection strategy: native type → documentation → field patterns
|
|
46
|
+
|
|
47
|
+
- **Memory Leaks in Test Suite** - Added proper cleanup hooks
|
|
48
|
+
- Added `afterAll()` hooks to clear DMMF references in test files
|
|
49
|
+
- Eliminates memory leak warnings with Jest's `--detectLeaks` flag
|
|
50
|
+
- All 154 tests pass cleanly without memory warnings
|
|
51
|
+
|
|
52
|
+
### Implementation Details
|
|
53
|
+
|
|
54
|
+
- **New modules**:
|
|
55
|
+
- `src/prisma/relation.ts`: Relation detection logic with join table metadata extraction
|
|
56
|
+
- `src/effect/join-table.ts`: Schema generation for join tables
|
|
57
|
+
- 20 new tests (12 relation detection + 8 schema generation)
|
|
58
|
+
|
|
59
|
+
- **Edge cases handled**:
|
|
60
|
+
- Circular many-to-many relations (A↔B, A↔C, B↔C)
|
|
61
|
+
- Mixed ID types (UUID in one model, Int in another)
|
|
62
|
+
- Self-relations (properly filtered out)
|
|
63
|
+
- Explicit many-to-many relations (detected and excluded)
|
|
64
|
+
|
|
65
|
+
### Testing
|
|
66
|
+
|
|
67
|
+
- All 154 tests passing
|
|
68
|
+
- No memory leaks with `--detectLeaks` flag
|
|
69
|
+
- TypeScript compilation passes without errors
|
|
70
|
+
- Comprehensive edge case coverage
|
|
71
|
+
|
|
8
72
|
## [1.5.0] - 2025-10-11
|
|
9
73
|
|
|
10
74
|
### Changed - BREAKING
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { DMMF } from '@prisma/generator-helper';
|
|
2
|
+
import type { JoinTableInfo } from '../prisma/relation';
|
|
2
3
|
/**
|
|
3
4
|
* Effect domain generator - orchestrates Effect Schema generation
|
|
4
5
|
*/
|
|
@@ -31,5 +32,9 @@ export declare class EffectGenerator {
|
|
|
31
32
|
* TDD: Satisfies tests 13-15 in import-generation.test.ts
|
|
32
33
|
*/
|
|
33
34
|
generateTypesHeader(hasEnums: boolean): string;
|
|
35
|
+
/**
|
|
36
|
+
* Generate schemas for all join tables
|
|
37
|
+
*/
|
|
38
|
+
generateJoinTableSchemas(joinTables: JoinTableInfo[]): string;
|
|
34
39
|
}
|
|
35
40
|
//# sourceMappingURL=generator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../src/effect/generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAOrD;;GAEG;AACH,qBAAa,eAAe;IACd,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,IAAI,CAAC,QAAQ;IAEhD;;OAEG;IACH,aAAa,CAAC,KAAK,EAAE,SAAS,IAAI,CAAC,aAAa,EAAE;IAIlD;;OAEG;IACH,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,IAAI,CAAC,KAAK,EAAE;IAgBnE;;OAEG;IACH,0BAA0B,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK;IAO5C;;OAEG;IACH,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK;IAiBrC;;OAEG;IACH,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE;IAQ3D;;;;OAIG;IACH,mBAAmB,CAAC,QAAQ,EAAE,OAAO;
|
|
1
|
+
{"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../src/effect/generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAOrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD;;GAEG;AACH,qBAAa,eAAe;IACd,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,IAAI,CAAC,QAAQ;IAEhD;;OAEG;IACH,aAAa,CAAC,KAAK,EAAE,SAAS,IAAI,CAAC,aAAa,EAAE;IAIlD;;OAEG;IACH,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,IAAI,CAAC,KAAK,EAAE;IAgBnE;;OAEG;IACH,0BAA0B,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK;IAO5C;;OAEG;IACH,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK;IAiBrC;;OAEG;IACH,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE;IAQ3D;;;;OAIG;IACH,mBAAmB,CAAC,QAAQ,EAAE,OAAO;IAyBrC;;OAEG;IACH,wBAAwB,CAAC,UAAU,EAAE,aAAa,EAAE;CAKrD"}
|
package/dist/effect/generator.js
CHANGED
|
@@ -5,6 +5,7 @@ const enum_1 = require("./enum");
|
|
|
5
5
|
const type_1 = require("./type");
|
|
6
6
|
const naming_1 = require("../utils/naming");
|
|
7
7
|
const codegen_1 = require("../utils/codegen");
|
|
8
|
+
const join_table_1 = require("./join-table");
|
|
8
9
|
/**
|
|
9
10
|
* Effect domain generator - orchestrates Effect Schema generation
|
|
10
11
|
*/
|
|
@@ -92,6 +93,14 @@ export type ${name}UpdateEncoded = Schema.Schema.Encoded<typeof ${name}.Updateab
|
|
|
92
93
|
}
|
|
93
94
|
return `${header}\n\n${imports.join('\n')}`;
|
|
94
95
|
}
|
|
96
|
+
/**
|
|
97
|
+
* Generate schemas for all join tables
|
|
98
|
+
*/
|
|
99
|
+
generateJoinTableSchemas(joinTables) {
|
|
100
|
+
return joinTables
|
|
101
|
+
.map((jt) => (0, join_table_1.generateJoinTableSchema)(jt, this.dmmf))
|
|
102
|
+
.join('\n\n');
|
|
103
|
+
}
|
|
95
104
|
}
|
|
96
105
|
exports.EffectGenerator = EffectGenerator;
|
|
97
106
|
//# sourceMappingURL=generator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../src/effect/generator.ts"],"names":[],"mappings":";;;AACA,iCAA2C;AAC3C,iCAAwC;AAExC,4CAA+C;AAC/C,8CAAsD;
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../src/effect/generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { DMMF } from "@prisma/generator-helper";
|
|
2
|
+
import type { JoinTableInfo } from "../prisma/relation";
|
|
3
|
+
/**
|
|
4
|
+
* Generate Effect Schema for an implicit many-to-many join table
|
|
5
|
+
*
|
|
6
|
+
* Structure:
|
|
7
|
+
* - Base schema with A and B columns (both read-only FKs via columnType)
|
|
8
|
+
* - Operational schemas via getSchemas()
|
|
9
|
+
* - Type exports (Select, Insert, Update)
|
|
10
|
+
* - Encoded type exports
|
|
11
|
+
*/
|
|
12
|
+
export declare function generateJoinTableSchema(joinTable: JoinTableInfo, dmmf: DMMF.Document): string;
|
|
13
|
+
//# sourceMappingURL=join-table.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"join-table.d.ts","sourceRoot":"","sources":["../../src/effect/join-table.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAuBxD;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,aAAa,EACxB,IAAI,EAAE,IAAI,CAAC,QAAQ,GAClB,MAAM,CAgCR"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateJoinTableSchema = generateJoinTableSchema;
|
|
4
|
+
/**
|
|
5
|
+
* Map join table column type to Effect Schema type
|
|
6
|
+
* Uses same mapping as regular fields
|
|
7
|
+
*/
|
|
8
|
+
function mapColumnType(columnType, isUuid) {
|
|
9
|
+
if (columnType === "String" && isUuid) {
|
|
10
|
+
return "Schema.UUID";
|
|
11
|
+
}
|
|
12
|
+
const scalarMap = {
|
|
13
|
+
String: "Schema.String",
|
|
14
|
+
Int: "Schema.Number",
|
|
15
|
+
BigInt: "Schema.BigInt",
|
|
16
|
+
};
|
|
17
|
+
return scalarMap[columnType] || "Schema.Unknown";
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Generate Effect Schema for an implicit many-to-many join table
|
|
21
|
+
*
|
|
22
|
+
* Structure:
|
|
23
|
+
* - Base schema with A and B columns (both read-only FKs via columnType)
|
|
24
|
+
* - Operational schemas via getSchemas()
|
|
25
|
+
* - Type exports (Select, Insert, Update)
|
|
26
|
+
* - Encoded type exports
|
|
27
|
+
*/
|
|
28
|
+
function generateJoinTableSchema(joinTable, dmmf) {
|
|
29
|
+
const { tableName, relationName, columnAType, columnBType, columnAIsUuid, columnBIsUuid } = joinTable;
|
|
30
|
+
// Map column types to Effect Schema types
|
|
31
|
+
const columnASchema = mapColumnType(columnAType, columnAIsUuid);
|
|
32
|
+
const columnBSchema = mapColumnType(columnBType, columnBIsUuid);
|
|
33
|
+
// Both columns are foreign keys, so use columnType for read-only behavior
|
|
34
|
+
const columnAField = ` A: columnType(${columnASchema}, Schema.Never, Schema.Never)`;
|
|
35
|
+
const columnBField = ` B: columnType(${columnBSchema}, Schema.Never, Schema.Never)`;
|
|
36
|
+
// Generate base schema
|
|
37
|
+
const baseSchema = `// ${tableName} Join Table Schema
|
|
38
|
+
export const _${relationName} = Schema.Struct({
|
|
39
|
+
${columnAField},
|
|
40
|
+
${columnBField},
|
|
41
|
+
});`;
|
|
42
|
+
// Generate operational schemas
|
|
43
|
+
const operationalSchema = `export const ${relationName} = getSchemas(_${relationName});`;
|
|
44
|
+
// Generate Type exports
|
|
45
|
+
const typeExports = `export type ${relationName}Select = Schema.Schema.Type<typeof ${relationName}.Selectable>;
|
|
46
|
+
export type ${relationName}Insert = Schema.Schema.Type<typeof ${relationName}.Insertable>;
|
|
47
|
+
export type ${relationName}Update = Schema.Schema.Type<typeof ${relationName}.Updateable>;`;
|
|
48
|
+
// Generate Encoded type exports
|
|
49
|
+
const encodedExports = `export type ${relationName}SelectEncoded = Schema.Schema.Encoded<typeof ${relationName}.Selectable>;
|
|
50
|
+
export type ${relationName}InsertEncoded = Schema.Schema.Encoded<typeof ${relationName}.Insertable>;
|
|
51
|
+
export type ${relationName}UpdateEncoded = Schema.Schema.Encoded<typeof ${relationName}.Updateable>;`;
|
|
52
|
+
return `${baseSchema}\n\n${operationalSchema}\n\n${typeExports}\n${encodedExports}`;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=join-table.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"join-table.js","sourceRoot":"","sources":["../../src/effect/join-table.ts"],"names":[],"mappings":";;AAiCA,0DAmCC;AAjED;;;GAGG;AACH,SAAS,aAAa,CACpB,UAAkB,EAClB,MAAe;IAEf,IAAI,UAAU,KAAK,QAAQ,IAAI,MAAM,EAAE,CAAC;QACtC,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,MAAM,SAAS,GAA2B;QACxC,MAAM,EAAE,eAAe;QACvB,GAAG,EAAE,eAAe;QACpB,MAAM,EAAE,eAAe;KACxB,CAAC;IAEF,OAAO,SAAS,CAAC,UAAU,CAAC,IAAI,gBAAgB,CAAC;AACnD,CAAC;AAED;;;;;;;;GAQG;AACH,SAAgB,uBAAuB,CACrC,SAAwB,EACxB,IAAmB;IAEnB,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,GAAG,SAAS,CAAC;IAEtG,0CAA0C;IAC1C,MAAM,aAAa,GAAG,aAAa,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IAChE,MAAM,aAAa,GAAG,aAAa,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IAEhE,0EAA0E;IAC1E,MAAM,YAAY,GAAG,mBAAmB,aAAa,+BAA+B,CAAC;IACrF,MAAM,YAAY,GAAG,mBAAmB,aAAa,+BAA+B,CAAC;IAErF,uBAAuB;IACvB,MAAM,UAAU,GAAG,MAAM,SAAS;gBACpB,YAAY;EAC1B,YAAY;EACZ,YAAY;IACV,CAAC;IAEH,+BAA+B;IAC/B,MAAM,iBAAiB,GAAG,gBAAgB,YAAY,kBAAkB,YAAY,IAAI,CAAC;IAEzF,wBAAwB;IACxB,MAAM,WAAW,GAAG,eAAe,YAAY,sCAAsC,YAAY;cACrF,YAAY,sCAAsC,YAAY;cAC9D,YAAY,sCAAsC,YAAY,eAAe,CAAC;IAE1F,gCAAgC;IAChC,MAAM,cAAc,GAAG,eAAe,YAAY,gDAAgD,YAAY;cAClG,YAAY,gDAAgD,YAAY;cACxE,YAAY,gDAAgD,YAAY,eAAe,CAAC;IAEpG,OAAO,GAAG,UAAU,OAAO,iBAAiB,OAAO,WAAW,KAAK,cAAc,EAAE,CAAC;AACtF,CAAC"}
|
package/dist/generator/index.js
CHANGED
|
@@ -22,7 +22,7 @@ const orchestrator_1 = require("./orchestrator");
|
|
|
22
22
|
__exportStar(require("../kysely/helpers"), exports);
|
|
23
23
|
exports.generator = (0, generator_helper_1.generatorHandler)({
|
|
24
24
|
onManifest: () => ({
|
|
25
|
-
version: '1.
|
|
25
|
+
version: '1.5.2',
|
|
26
26
|
defaultOutput: './generated',
|
|
27
27
|
prettyName: 'Prisma Effect Kysely Generator',
|
|
28
28
|
}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/generator/orchestrator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAMjE;;;GAGG;AACH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAC1C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAkB;IAC5C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAkB;IAC5C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAkB;gBAEhC,OAAO,EAAE,gBAAgB;IASrC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAa1B;;;OAGG;IACG,QAAQ,CAAC,OAAO,EAAE,gBAAgB;IAgBxC;;OAEG;YACW,aAAa;IAM3B;;OAEG;YACW,aAAa;
|
|
1
|
+
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/generator/orchestrator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAMjE;;;GAGG;AACH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAC1C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAkB;IAC5C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAkB;IAC5C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAkB;gBAEhC,OAAO,EAAE,gBAAgB;IASrC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAa1B;;;OAGG;IACG,QAAQ,CAAC,OAAO,EAAE,gBAAgB;IAgBxC;;OAEG;YACW,aAAa;IAM3B;;OAEG;YACW,aAAa;IA4C3B;;OAEG;YACW,aAAa;IAK3B;;OAEG;IACH,OAAO,CAAC,QAAQ;IAYhB;;OAEG;IACH,OAAO,CAAC,WAAW;CAKpB"}
|
|
@@ -57,6 +57,7 @@ class GeneratorOrchestrator {
|
|
|
57
57
|
*/
|
|
58
58
|
async generateTypes() {
|
|
59
59
|
const models = this.prismaGen.getModels();
|
|
60
|
+
const joinTables = this.prismaGen.getManyToManyJoinTables();
|
|
60
61
|
const hasEnums = this.prismaGen.getEnums().length > 0;
|
|
61
62
|
// Generate header with imports
|
|
62
63
|
const header = this.effectGen.generateTypesHeader(hasEnums);
|
|
@@ -77,9 +78,15 @@ ${kyselyFields}
|
|
|
77
78
|
return `${baseSchema}\n\n${operationalSchema}\n\n${typeExports}`;
|
|
78
79
|
})
|
|
79
80
|
.join("\n\n");
|
|
80
|
-
// Generate
|
|
81
|
-
const
|
|
82
|
-
|
|
81
|
+
// Generate join table schemas
|
|
82
|
+
const joinTableSchemas = joinTables.length > 0
|
|
83
|
+
? this.effectGen.generateJoinTableSchemas(joinTables)
|
|
84
|
+
: "";
|
|
85
|
+
// Generate DB interface with join tables
|
|
86
|
+
const dbInterface = this.kyselyGen.generateDBInterface(models, joinTables);
|
|
87
|
+
const content = joinTableSchemas
|
|
88
|
+
? `${header}\n\n${modelSchemas}\n\n${joinTableSchemas}\n\n${dbInterface}`
|
|
89
|
+
: `${header}\n\n${modelSchemas}\n\n${dbInterface}`;
|
|
83
90
|
await this.fileManager.writeFile("types.ts", content);
|
|
84
91
|
}
|
|
85
92
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../src/generator/orchestrator.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../src/generator/orchestrator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { DMMF } from "@prisma/generator-helper";
|
|
2
|
+
import type { JoinTableInfo } from "../prisma/relation";
|
|
2
3
|
/**
|
|
3
4
|
* Kysely domain generator - orchestrates Kysely integration
|
|
4
5
|
* Applies Kysely helpers to Effect schemas
|
|
@@ -15,9 +16,9 @@ export declare class KyselyGenerator {
|
|
|
15
16
|
*/
|
|
16
17
|
generateModelFields(fields: readonly DMMF.Field[]): string;
|
|
17
18
|
/**
|
|
18
|
-
* Generate DB interface for all models
|
|
19
|
+
* Generate DB interface for all models and join tables
|
|
19
20
|
*/
|
|
20
|
-
generateDBInterface(models: readonly DMMF.Model[]): string;
|
|
21
|
+
generateDBInterface(models: readonly DMMF.Model[], joinTables?: JoinTableInfo[]): string;
|
|
21
22
|
/**
|
|
22
23
|
* Generate index.ts re-export file
|
|
23
24
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../src/kysely/generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../src/kysely/generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAIrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD;;;GAGG;AACH,qBAAa,eAAe;IACd,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,IAAI,CAAC,QAAQ;IAEhD;;OAEG;IACH,uBAAuB,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK;IAUzC;;OAEG;IACH,mBAAmB,CAAC,MAAM,EAAE,SAAS,IAAI,CAAC,KAAK,EAAE;IAMjD;;OAEG;IACH,mBAAmB,CAAC,MAAM,EAAE,SAAS,IAAI,CAAC,KAAK,EAAE,EAAE,UAAU,GAAE,aAAa,EAAO;IAInF;;OAEG;IACH,iBAAiB;CAGlB"}
|
package/dist/kysely/generator.js
CHANGED
|
@@ -30,10 +30,10 @@ class KyselyGenerator {
|
|
|
30
30
|
.join(",\n");
|
|
31
31
|
}
|
|
32
32
|
/**
|
|
33
|
-
* Generate DB interface for all models
|
|
33
|
+
* Generate DB interface for all models and join tables
|
|
34
34
|
*/
|
|
35
|
-
generateDBInterface(models) {
|
|
36
|
-
return (0, type_1.generateDBInterface)(models);
|
|
35
|
+
generateDBInterface(models, joinTables = []) {
|
|
36
|
+
return (0, type_1.generateDBInterface)(models, joinTables);
|
|
37
37
|
}
|
|
38
38
|
/**
|
|
39
39
|
* Generate index.ts re-export file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../src/kysely/generator.ts"],"names":[],"mappings":";;;AACA,iCAAmE;AACnE,yCAAgD;
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../src/kysely/generator.ts"],"names":[],"mappings":";;;AACA,iCAAmE;AACnE,yCAAgD;AAIhD;;;GAGG;AACH,MAAa,eAAe;IAC1B,YAA6B,IAAmB;QAAnB,SAAI,GAAJ,IAAI,CAAe;IAAG,CAAC;IAEpD;;OAEG;IACH,uBAAuB,CAAC,KAAiB;QACvC,uBAAuB;QACvB,MAAM,aAAa,GAAG,IAAA,qBAAc,EAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAEvD,gCAAgC;QAChC,MAAM,eAAe,GAAG,IAAA,2BAAoB,EAAC,aAAa,EAAE,KAAK,CAAC,CAAC;QAEnE,OAAO,KAAK,KAAK,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;IAC/C,CAAC;IAED;;OAEG;IACH,mBAAmB,CAAC,MAA6B;QAC/C,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;aACtB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC;aACnD,IAAI,CAAC,KAAK,CAAC,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,mBAAmB,CAAC,MAA6B,EAAE,aAA8B,EAAE;QACjF,OAAO,IAAA,0BAAmB,EAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACjD,CAAC;IAED;;OAEG;IACH,iBAAiB;QACf,OAAO,oDAAoD,CAAC;IAC9D,CAAC;CACF;AAtCD,0CAsCC"}
|
package/dist/kysely/type.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { DMMF } from "@prisma/generator-helper";
|
|
2
|
+
import type { JoinTableInfo } from "../prisma/relation";
|
|
2
3
|
/**
|
|
3
4
|
* Determine if field needs Kysely columnType wrapper
|
|
4
5
|
* ID fields with @default are read-only (can't insert/update)
|
|
@@ -27,7 +28,11 @@ export declare function buildKyselyFieldType(baseFieldType: string, field: DMMF.
|
|
|
27
28
|
*/
|
|
28
29
|
export declare function generateDBInterfaceEntry(model: DMMF.Model): string;
|
|
29
30
|
/**
|
|
30
|
-
* Generate
|
|
31
|
+
* Generate DB interface entry for a join table
|
|
31
32
|
*/
|
|
32
|
-
export declare function
|
|
33
|
+
export declare function generateJoinTableDBInterfaceEntry(joinTable: JoinTableInfo): string;
|
|
34
|
+
/**
|
|
35
|
+
* Generate complete DB interface including join tables
|
|
36
|
+
*/
|
|
37
|
+
export declare function generateDBInterface(models: readonly DMMF.Model[], joinTables?: JoinTableInfo[]): string;
|
|
33
38
|
//# sourceMappingURL=type.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../../src/kysely/type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../../src/kysely/type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAErD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,WAEhD;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,WAE/C;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,UAOtE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,UAMrE;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,UAQ5E;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,UAIzD;AAED;;GAEG;AACH,wBAAgB,iCAAiC,CAAC,SAAS,EAAE,aAAa,UAGzE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,SAAS,IAAI,CAAC,KAAK,EAAE,EAC7B,UAAU,GAAE,aAAa,EAAO,UAcjC"}
|
package/dist/kysely/type.js
CHANGED
|
@@ -6,6 +6,7 @@ exports.applyKyselyHelpers = applyKyselyHelpers;
|
|
|
6
6
|
exports.applyMapDirective = applyMapDirective;
|
|
7
7
|
exports.buildKyselyFieldType = buildKyselyFieldType;
|
|
8
8
|
exports.generateDBInterfaceEntry = generateDBInterfaceEntry;
|
|
9
|
+
exports.generateJoinTableDBInterfaceEntry = generateJoinTableDBInterfaceEntry;
|
|
9
10
|
exports.generateDBInterface = generateDBInterface;
|
|
10
11
|
const type_1 = require("../prisma/type");
|
|
11
12
|
/**
|
|
@@ -64,15 +65,25 @@ function generateDBInterfaceEntry(model) {
|
|
|
64
65
|
return ` ${tableName}: Schema.Schema.Encoded<typeof ${baseSchemaName}>;`;
|
|
65
66
|
}
|
|
66
67
|
/**
|
|
67
|
-
* Generate
|
|
68
|
+
* Generate DB interface entry for a join table
|
|
68
69
|
*/
|
|
69
|
-
function
|
|
70
|
-
const
|
|
70
|
+
function generateJoinTableDBInterfaceEntry(joinTable) {
|
|
71
|
+
const { tableName, relationName } = joinTable;
|
|
72
|
+
return ` ${tableName}: Schema.Schema.Encoded<typeof _${relationName}>;`;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Generate complete DB interface including join tables
|
|
76
|
+
*/
|
|
77
|
+
function generateDBInterface(models, joinTables = []) {
|
|
78
|
+
const modelEntries = Array.from(models)
|
|
71
79
|
.map(generateDBInterfaceEntry)
|
|
72
80
|
.join("\n");
|
|
81
|
+
const joinTableEntries = joinTables.length > 0
|
|
82
|
+
? "\n" + joinTables.map(generateJoinTableDBInterfaceEntry).join("\n")
|
|
83
|
+
: "";
|
|
73
84
|
return `// Kysely Database Interface
|
|
74
85
|
export interface DB {
|
|
75
|
-
${
|
|
86
|
+
${modelEntries}${joinTableEntries}
|
|
76
87
|
}`;
|
|
77
88
|
}
|
|
78
89
|
//# sourceMappingURL=type.js.map
|
package/dist/kysely/type.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"type.js","sourceRoot":"","sources":["../../src/kysely/type.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"type.js","sourceRoot":"","sources":["../../src/kysely/type.ts"],"names":[],"mappings":";;AAQA,0CAEC;AAMD,wCAEC;AAKD,gDAOC;AAKD,8CAMC;AAMD,oDAQC;AAKD,4DAIC;AAKD,8EAGC;AAKD,kDAgBC;AA5FD,yCAA4E;AAG5E;;;GAGG;AACH,SAAgB,eAAe,CAAC,KAAiB;IAC/C,OAAO,IAAA,sBAAe,EAAC,KAAK,CAAC,IAAI,IAAA,gBAAS,EAAC,KAAK,CAAC,CAAC;AACpD,CAAC;AAED;;;GAGG;AACH,SAAgB,cAAc,CAAC,KAAiB;IAC9C,OAAO,IAAA,sBAAe,EAAC,KAAK,CAAC,IAAI,CAAC,IAAA,gBAAS,EAAC,KAAK,CAAC,CAAC;AACrD,CAAC;AAED;;GAEG;AACH,SAAgB,kBAAkB,CAAC,SAAiB,EAAE,KAAiB;IACrE,IAAI,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,cAAc,SAAS,+BAA+B,CAAC;IAChE,CAAC;SAAM,IAAI,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;QACjC,OAAO,aAAa,SAAS,GAAG,CAAC;IACnC,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,SAAgB,iBAAiB,CAAC,SAAiB,EAAE,KAAiB;IACpE,MAAM,MAAM,GAAG,IAAA,qBAAc,EAAC,KAAK,CAAC,CAAC;IACrC,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC;QAChD,OAAO,4BAA4B,SAAS,0BAA0B,MAAM,KAAK,CAAC;IACpF,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;GAGG;AACH,SAAgB,oBAAoB,CAAC,aAAqB,EAAE,KAAiB;IAC3E,uDAAuD;IACvD,IAAI,SAAS,GAAG,kBAAkB,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;IAEzD,yDAAyD;IACzD,SAAS,GAAG,iBAAiB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAEhD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,SAAgB,wBAAwB,CAAC,KAAiB;IACxD,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC;IAC7C,MAAM,cAAc,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;IACxC,OAAO,KAAK,SAAS,kCAAkC,cAAc,IAAI,CAAC;AAC5E,CAAC;AAED;;GAEG;AACH,SAAgB,iCAAiC,CAAC,SAAwB;IACxE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,SAAS,CAAC;IAC9C,OAAO,KAAK,SAAS,mCAAmC,YAAY,IAAI,CAAC;AAC3E,CAAC;AAED;;GAEG;AACH,SAAgB,mBAAmB,CACjC,MAA6B,EAC7B,aAA8B,EAAE;IAEhC,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;SACpC,GAAG,CAAC,wBAAwB,CAAC;SAC7B,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,MAAM,gBAAgB,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC;QAC5C,CAAC,CAAC,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QACrE,CAAC,CAAC,EAAE,CAAC;IAEP,OAAO;;EAEP,YAAY,GAAG,gBAAgB;EAC/B,CAAC;AACH,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { DMMF } from "@prisma/generator-helper";
|
|
2
|
+
import { type JoinTableInfo } from "./relation";
|
|
2
3
|
/**
|
|
3
4
|
* Prisma domain generator - orchestrates DMMF parsing and extraction
|
|
4
5
|
* No schema generation here, just native Prisma data extraction
|
|
@@ -18,5 +19,9 @@ export declare class PrismaGenerator {
|
|
|
18
19
|
* Get schema fields for a model (filtered and sorted)
|
|
19
20
|
*/
|
|
20
21
|
getModelFields(model: DMMF.Model): readonly DMMF.Field[];
|
|
22
|
+
/**
|
|
23
|
+
* Get implicit many-to-many join tables
|
|
24
|
+
*/
|
|
25
|
+
getManyToManyJoinTables(): JoinTableInfo[];
|
|
21
26
|
}
|
|
22
27
|
//# sourceMappingURL=generator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../src/prisma/generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../src/prisma/generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAGrD,OAAO,EAA4B,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAE1E;;;GAGG;AACH,qBAAa,eAAe;IACd,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,IAAI,CAAC,QAAQ;IAEhD;;OAEG;IACH,QAAQ,IAAI,SAAS,IAAI,CAAC,aAAa,EAAE;IAIzC;;OAEG;IACH,SAAS,IAAI,SAAS,IAAI,CAAC,KAAK,EAAE;IAOlC;;OAEG;IACH,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,GAAG,SAAS,IAAI,CAAC,KAAK,EAAE;IAKxD;;OAEG;IACH,uBAAuB,IAAI,aAAa,EAAE;CAG3C"}
|
package/dist/prisma/generator.js
CHANGED
|
@@ -36,6 +36,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
36
36
|
exports.PrismaGenerator = void 0;
|
|
37
37
|
const PrismaEnum = __importStar(require("./enum"));
|
|
38
38
|
const PrismaType = __importStar(require("./type"));
|
|
39
|
+
const relation_1 = require("./relation");
|
|
39
40
|
/**
|
|
40
41
|
* Prisma domain generator - orchestrates DMMF parsing and extraction
|
|
41
42
|
* No schema generation here, just native Prisma data extraction
|
|
@@ -64,6 +65,12 @@ class PrismaGenerator {
|
|
|
64
65
|
const filtered = PrismaType.filterSchemaFields(model.fields);
|
|
65
66
|
return PrismaType.sortFields(filtered);
|
|
66
67
|
}
|
|
68
|
+
/**
|
|
69
|
+
* Get implicit many-to-many join tables
|
|
70
|
+
*/
|
|
71
|
+
getManyToManyJoinTables() {
|
|
72
|
+
return (0, relation_1.detectImplicitManyToMany)(this.dmmf.datamodel.models);
|
|
73
|
+
}
|
|
67
74
|
}
|
|
68
75
|
exports.PrismaGenerator = PrismaGenerator;
|
|
69
76
|
//# sourceMappingURL=generator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../src/prisma/generator.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,mDAAqC;AACrC,mDAAqC;
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../src/prisma/generator.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,mDAAqC;AACrC,mDAAqC;AACrC,yCAA0E;AAE1E;;;GAGG;AACH,MAAa,eAAe;IAC1B,YAA6B,IAAmB;QAAnB,SAAI,GAAJ,IAAI,CAAe;IAAG,CAAC;IAEpD;;OAEG;IACH,QAAQ;QACN,OAAO,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACH,SAAS;QACP,MAAM,QAAQ,GAAG,UAAU,CAAC,oBAAoB,CAC9C,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAC3B,CAAC;QACF,OAAO,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,KAAiB;QAC9B,MAAM,QAAQ,GAAG,UAAU,CAAC,kBAAkB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC7D,OAAO,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,uBAAuB;QACrB,OAAO,IAAA,mCAAwB,EAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAC9D,CAAC;CACF;AAlCD,0CAkCC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { DMMF } from "@prisma/generator-helper";
|
|
2
|
+
/**
|
|
3
|
+
* Metadata for implicit many-to-many join tables
|
|
4
|
+
*/
|
|
5
|
+
export interface JoinTableInfo {
|
|
6
|
+
/** Table name in database (e.g., "_CategoryToPost") */
|
|
7
|
+
tableName: string;
|
|
8
|
+
/** Relation name without underscore (e.g., "CategoryToPost") */
|
|
9
|
+
relationName: string;
|
|
10
|
+
/** First model name (alphabetically) */
|
|
11
|
+
modelA: string;
|
|
12
|
+
/** Second model name (alphabetically) */
|
|
13
|
+
modelB: string;
|
|
14
|
+
/** Type of column A (from modelA's ID field) */
|
|
15
|
+
columnAType: string;
|
|
16
|
+
/** Type of column B (from modelB's ID field) */
|
|
17
|
+
columnBType: string;
|
|
18
|
+
/** Whether column A is a UUID */
|
|
19
|
+
columnAIsUuid: boolean;
|
|
20
|
+
/** Whether column B is a UUID */
|
|
21
|
+
columnBIsUuid: boolean;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Get the ID field from a model
|
|
25
|
+
* Handles both single @id and composite @@id
|
|
26
|
+
*/
|
|
27
|
+
export declare function getModelIdField(model: DMMF.Model): DMMF.Field;
|
|
28
|
+
/**
|
|
29
|
+
* Detect all implicit many-to-many relations from DMMF models
|
|
30
|
+
* Returns metadata for generating join table schemas
|
|
31
|
+
*/
|
|
32
|
+
export declare function detectImplicitManyToMany(models: readonly DMMF.Model[]): JoinTableInfo[];
|
|
33
|
+
//# sourceMappingURL=relation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relation.d.ts","sourceRoot":"","sources":["../../src/prisma/relation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAGrD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,uDAAuD;IACvD,SAAS,EAAE,MAAM,CAAC;IAClB,gEAAgE;IAChE,YAAY,EAAE,MAAM,CAAC;IACrB,wCAAwC;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,yCAAyC;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,gDAAgD;IAChD,WAAW,EAAE,MAAM,CAAC;IACpB,gDAAgD;IAChD,WAAW,EAAE,MAAM,CAAC;IACpB,iCAAiC;IACjC,aAAa,EAAE,OAAO,CAAC;IACvB,iCAAiC;IACjC,aAAa,EAAE,OAAO,CAAC;CACxB;AAqBD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAmB7D;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,SAAS,IAAI,CAAC,KAAK,EAAE,GAC5B,aAAa,EAAE,CA6DjB"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getModelIdField = getModelIdField;
|
|
4
|
+
exports.detectImplicitManyToMany = detectImplicitManyToMany;
|
|
5
|
+
const type_1 = require("./type");
|
|
6
|
+
/**
|
|
7
|
+
* Detect if a relation field is part of an implicit many-to-many relation
|
|
8
|
+
* Criteria:
|
|
9
|
+
* - kind === "object" (relation field)
|
|
10
|
+
* - isList === true (many side)
|
|
11
|
+
* - relationFromFields is empty (no foreign key on this side)
|
|
12
|
+
* - relationToFields is empty (no explicit relation table)
|
|
13
|
+
*/
|
|
14
|
+
function isImplicitManyToManyField(field) {
|
|
15
|
+
return (field.kind === "object" &&
|
|
16
|
+
field.isList === true &&
|
|
17
|
+
field.relationFromFields !== undefined &&
|
|
18
|
+
field.relationFromFields.length === 0 &&
|
|
19
|
+
field.relationToFields !== undefined &&
|
|
20
|
+
field.relationToFields.length === 0);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Get the ID field from a model
|
|
24
|
+
* Handles both single @id and composite @@id
|
|
25
|
+
*/
|
|
26
|
+
function getModelIdField(model) {
|
|
27
|
+
// Try to find single @id field
|
|
28
|
+
const idField = model.fields.find((f) => f.isId === true);
|
|
29
|
+
if (idField) {
|
|
30
|
+
return idField;
|
|
31
|
+
}
|
|
32
|
+
// For composite @@id, get the first field from primaryKey
|
|
33
|
+
if (model.primaryKey && model.primaryKey.fields.length > 0) {
|
|
34
|
+
const firstIdFieldName = model.primaryKey.fields[0];
|
|
35
|
+
const field = model.fields.find((f) => f.name === firstIdFieldName);
|
|
36
|
+
if (field) {
|
|
37
|
+
return field;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
throw new Error(`Model ${model.name} has no ID field (@id or @@id required)`);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Detect all implicit many-to-many relations from DMMF models
|
|
44
|
+
* Returns metadata for generating join table schemas
|
|
45
|
+
*/
|
|
46
|
+
function detectImplicitManyToMany(models) {
|
|
47
|
+
const joinTables = new Map();
|
|
48
|
+
for (const model of models) {
|
|
49
|
+
for (const field of model.fields) {
|
|
50
|
+
if (!isImplicitManyToManyField(field)) {
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
// Get the related model
|
|
54
|
+
const relatedModel = models.find((m) => m.name === field.type);
|
|
55
|
+
if (!relatedModel) {
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
// Check if the relation is reciprocal (both sides are lists)
|
|
59
|
+
const relatedField = relatedModel.fields.find((f) => f.relationName === field.relationName && f.isList === true);
|
|
60
|
+
if (!relatedField || !isImplicitManyToManyField(relatedField)) {
|
|
61
|
+
// Not a true implicit m-n relation
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
// Skip self-relations (both sides point to same model)
|
|
65
|
+
if (model.name === relatedModel.name) {
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
// Generate table name (alphabetically sorted model names)
|
|
69
|
+
const modelNames = [model.name, relatedModel.name].sort();
|
|
70
|
+
const tableName = `_${modelNames[0]}To${modelNames[1]}`;
|
|
71
|
+
// Skip if we've already processed this relation
|
|
72
|
+
if (joinTables.has(tableName)) {
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
// Extract ID field types
|
|
76
|
+
const modelAIdField = getModelIdField(models.find((m) => m.name === modelNames[0]));
|
|
77
|
+
const modelBIdField = getModelIdField(models.find((m) => m.name === modelNames[1]));
|
|
78
|
+
joinTables.set(tableName, {
|
|
79
|
+
tableName,
|
|
80
|
+
relationName: `${modelNames[0]}To${modelNames[1]}`,
|
|
81
|
+
modelA: modelNames[0],
|
|
82
|
+
modelB: modelNames[1],
|
|
83
|
+
columnAType: modelAIdField.type,
|
|
84
|
+
columnBType: modelBIdField.type,
|
|
85
|
+
columnAIsUuid: (0, type_1.isUuidField)(modelAIdField),
|
|
86
|
+
columnBIsUuid: (0, type_1.isUuidField)(modelBIdField),
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return Array.from(joinTables.values());
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=relation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relation.js","sourceRoot":"","sources":["../../src/prisma/relation.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../../src/prisma/type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAErD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,
|
|
1
|
+
{"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../../src/prisma/type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAErD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,WAwB5C;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,UAE/C;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,WAEhD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,WAE1C;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,WAEhD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,WAE5C;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,SAAS,IAAI,CAAC,KAAK,EAAE,GAC5B,SAAS,IAAI,CAAC,KAAK,EAAE,CAEvB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,SAAS,IAAI,CAAC,KAAK,EAAE,GAC5B,SAAS,IAAI,CAAC,KAAK,EAAE,CAIvB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,UAE/C;AAED;;GAEG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE,SAAS,IAAI,CAAC,KAAK,EAAE,GAC5B,SAAS,IAAI,CAAC,KAAK,EAAE,CAEvB;AAED;;GAEG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE,SAAS,IAAI,CAAC,KAAK,EAAE,GAC5B,SAAS,IAAI,CAAC,KAAK,EAAE,CAEvB"}
|
package/dist/prisma/type.js
CHANGED
|
@@ -24,7 +24,10 @@ function isUuidField(field) {
|
|
|
24
24
|
if (field.documentation?.includes("@db.Uuid")) {
|
|
25
25
|
return true;
|
|
26
26
|
}
|
|
27
|
-
// 3. Fallback: Field name patterns
|
|
27
|
+
// 3. Fallback: Field name patterns (only for String type)
|
|
28
|
+
if (field.type !== "String") {
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
28
31
|
const uuidFieldPatterns = [
|
|
29
32
|
/^id$/, // Primary ID fields
|
|
30
33
|
/_id$/, // Foreign key ID fields
|
package/dist/prisma/type.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"type.js","sourceRoot":"","sources":["../../src/prisma/type.ts"],"names":[],"mappings":";;AAMA,
|
|
1
|
+
{"version":3,"file":"type.js","sourceRoot":"","sources":["../../src/prisma/type.ts"],"names":[],"mappings":";;AAMA,kCAwBC;AAKD,wCAEC;AAKD,0CAEC;AAKD,8BAEC;AAKD,0CAEC;AAKD,kCAEC;AAKD,oDAIC;AAKD,gDAMC;AAKD,wCAEC;AAKD,gCAIC;AAKD,gCAIC;AA5GD;;;GAGG;AACH,SAAgB,WAAW,CAAC,KAAiB;IAC3C,uCAAuC;IACvC,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC;QACrC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,sCAAsC;IACtC,IAAI,KAAK,CAAC,aAAa,EAAE,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,0DAA0D;IAC1D,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,iBAAiB,GAAG;QACxB,MAAM,EAAE,oBAAoB;QAC5B,MAAM,EAAE,wBAAwB;QAChC,WAAW,EAAE,cAAc;QAC3B,QAAQ,EAAE,qBAAqB;KACvB,CAAC;IAEX,OAAO,iBAAiB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;AACvE,CAAC;AAED;;GAEG;AACH,SAAgB,cAAc,CAAC,KAAiB;IAC9C,OAAO,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,SAAgB,eAAe,CAAC,KAAiB;IAC/C,OAAO,KAAK,CAAC,eAAe,KAAK,IAAI,CAAC;AACxC,CAAC;AAED;;GAEG;AACH,SAAgB,SAAS,CAAC,KAAiB;IACzC,OAAO,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,SAAgB,eAAe,CAAC,KAAiB;IAC/C,OAAO,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;AACnC,CAAC;AAED;;GAEG;AACH,SAAgB,WAAW,CAAC,KAAiB;IAC3C,OAAO,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,SAAgB,oBAAoB,CAClC,MAA6B;IAE7B,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/D,CAAC;AAED;;GAEG;AACH,SAAgB,kBAAkB,CAChC,MAA6B;IAE7B,OAAO,MAAM,CAAC,MAAM,CAClB,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,CAC5D,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,cAAc,CAAC,KAAiB;IAC9C,OAAO,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,SAAgB,UAAU,CACxB,MAA6B;IAE7B,OAAO,MAAM,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACrE,CAAC;AAED;;GAEG;AACH,SAAgB,UAAU,CACxB,MAA6B;IAE7B,OAAO,MAAM,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACrE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Configuration for a single Unsupported field
|
|
3
|
-
*/
|
|
4
|
-
export interface UnsupportedFieldConfig {
|
|
5
|
-
effectType: string;
|
|
6
|
-
dbType: string;
|
|
7
|
-
dbName: string;
|
|
8
|
-
required: boolean;
|
|
9
|
-
comment?: string;
|
|
10
|
-
}
|
|
11
|
-
/**
|
|
12
|
-
* Full configuration structure
|
|
13
|
-
*/
|
|
14
|
-
export interface UnsupportedConfig {
|
|
15
|
-
models: Record<string, Record<string, UnsupportedFieldConfig>>;
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* Load unsupported fields configuration from JSON file
|
|
19
|
-
* Looks for prisma/unsupported-fields.json relative to schema location
|
|
20
|
-
*/
|
|
21
|
-
export declare function loadUnsupportedConfig(schemaPath: string): UnsupportedConfig | null;
|
|
22
|
-
/**
|
|
23
|
-
* Get unsupported fields for a specific model
|
|
24
|
-
*/
|
|
25
|
-
export declare function getUnsupportedFields(config: UnsupportedConfig | null, modelName: string): Record<string, UnsupportedFieldConfig>;
|
|
26
|
-
//# sourceMappingURL=unsupported-config.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"unsupported-config.d.ts","sourceRoot":"","sources":["../../src/utils/unsupported-config.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC,CAAC;CAChE;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CAiBlF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,iBAAiB,GAAG,IAAI,EAChC,SAAS,EAAE,MAAM,GAChB,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAGxC"}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.loadUnsupportedConfig = loadUnsupportedConfig;
|
|
4
|
-
exports.getUnsupportedFields = getUnsupportedFields;
|
|
5
|
-
const fs_1 = require("fs");
|
|
6
|
-
const path_1 = require("path");
|
|
7
|
-
/**
|
|
8
|
-
* Load unsupported fields configuration from JSON file
|
|
9
|
-
* Looks for prisma/unsupported-fields.json relative to schema location
|
|
10
|
-
*/
|
|
11
|
-
function loadUnsupportedConfig(schemaPath) {
|
|
12
|
-
try {
|
|
13
|
-
// Assume schema is in prisma/schema/ directory
|
|
14
|
-
// Config should be in prisma/unsupported-fields.json
|
|
15
|
-
const schemaDir = (0, path_1.dirname)((0, path_1.dirname)(schemaPath)); // Go up to prisma/
|
|
16
|
-
const configPath = (0, path_1.join)(schemaDir, 'unsupported-fields.json');
|
|
17
|
-
if (!(0, fs_1.existsSync)(configPath)) {
|
|
18
|
-
return null;
|
|
19
|
-
}
|
|
20
|
-
const content = (0, fs_1.readFileSync)(configPath, 'utf-8');
|
|
21
|
-
return JSON.parse(content);
|
|
22
|
-
}
|
|
23
|
-
catch (error) {
|
|
24
|
-
console.warn(`⚠️ Failed to load unsupported-fields.json: ${error}`);
|
|
25
|
-
return null;
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Get unsupported fields for a specific model
|
|
30
|
-
*/
|
|
31
|
-
function getUnsupportedFields(config, modelName) {
|
|
32
|
-
if (!config)
|
|
33
|
-
return {};
|
|
34
|
-
return config.models[modelName] || {};
|
|
35
|
-
}
|
|
36
|
-
//# sourceMappingURL=unsupported-config.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"unsupported-config.js","sourceRoot":"","sources":["../../src/utils/unsupported-config.ts"],"names":[],"mappings":";;AAyBA,sDAiBC;AAKD,oDAMC;AArDD,2BAA8C;AAC9C,+BAAqC;AAoBrC;;;GAGG;AACH,SAAgB,qBAAqB,CAAC,UAAkB;IACtD,IAAI,CAAC;QACH,+CAA+C;QAC/C,qDAAqD;QACrD,MAAM,SAAS,GAAG,IAAA,cAAO,EAAC,IAAA,cAAO,EAAC,UAAU,CAAC,CAAC,CAAC,CAAC,mBAAmB;QACnE,MAAM,UAAU,GAAG,IAAA,WAAI,EAAC,SAAS,EAAE,yBAAyB,CAAC,CAAC;QAE9D,IAAI,CAAC,IAAA,eAAU,EAAC,UAAU,CAAC,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,OAAO,GAAG,IAAA,iBAAY,EAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAsB,CAAC;IAClD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,+CAA+C,KAAK,EAAE,CAAC,CAAC;QACrE,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,oBAAoB,CAClC,MAAgC,EAChC,SAAiB;IAEjB,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IACvB,OAAO,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;AACxC,CAAC"}
|