prisma-effect-kysely 1.4.3 → 1.5.1

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.
Files changed (52) hide show
  1. package/CHANGELOG.md +172 -0
  2. package/dist/effect/enum.d.ts +8 -1
  3. package/dist/effect/enum.d.ts.map +1 -1
  4. package/dist/effect/enum.js +28 -12
  5. package/dist/effect/enum.js.map +1 -1
  6. package/dist/effect/generator.d.ts +7 -0
  7. package/dist/effect/generator.d.ts.map +1 -1
  8. package/dist/effect/generator.js +24 -7
  9. package/dist/effect/generator.js.map +1 -1
  10. package/dist/effect/join-table.d.ts +13 -0
  11. package/dist/effect/join-table.d.ts.map +1 -0
  12. package/dist/effect/join-table.js +54 -0
  13. package/dist/effect/join-table.js.map +1 -0
  14. package/dist/effect/type.d.ts.map +1 -1
  15. package/dist/effect/type.js +5 -1
  16. package/dist/effect/type.js.map +1 -1
  17. package/dist/generator/index.js +1 -1
  18. package/dist/generator/orchestrator.d.ts.map +1 -1
  19. package/dist/generator/orchestrator.js +10 -3
  20. package/dist/generator/orchestrator.js.map +1 -1
  21. package/dist/kysely/generator.d.ts +3 -2
  22. package/dist/kysely/generator.d.ts.map +1 -1
  23. package/dist/kysely/generator.js +3 -3
  24. package/dist/kysely/generator.js.map +1 -1
  25. package/dist/kysely/type.d.ts +7 -2
  26. package/dist/kysely/type.d.ts.map +1 -1
  27. package/dist/kysely/type.js +15 -4
  28. package/dist/kysely/type.js.map +1 -1
  29. package/dist/prisma/generator.d.ts +5 -0
  30. package/dist/prisma/generator.d.ts.map +1 -1
  31. package/dist/prisma/generator.js +7 -0
  32. package/dist/prisma/generator.js.map +1 -1
  33. package/dist/prisma/relation.d.ts +33 -0
  34. package/dist/prisma/relation.d.ts.map +1 -0
  35. package/dist/prisma/relation.js +92 -0
  36. package/dist/prisma/relation.js.map +1 -0
  37. package/dist/prisma/type.d.ts.map +1 -1
  38. package/dist/prisma/type.js +4 -1
  39. package/dist/prisma/type.js.map +1 -1
  40. package/dist/utils/codegen.d.ts +10 -0
  41. package/dist/utils/codegen.d.ts.map +1 -0
  42. package/dist/utils/codegen.js +18 -0
  43. package/dist/utils/codegen.js.map +1 -0
  44. package/dist/utils/naming.d.ts +8 -5
  45. package/dist/utils/naming.d.ts.map +1 -1
  46. package/dist/utils/naming.js +22 -13
  47. package/dist/utils/naming.js.map +1 -1
  48. package/package.json +1 -1
  49. package/dist/utils/unsupported-config.d.ts +0 -26
  50. package/dist/utils/unsupported-config.d.ts.map +0 -1
  51. package/dist/utils/unsupported-config.js +0 -36
  52. package/dist/utils/unsupported-config.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -5,6 +5,178 @@ 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.1] - 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
+
72
+ ## [1.5.0] - 2025-10-11
73
+
74
+ ### Changed - BREAKING
75
+
76
+ - **Enum Generation Pattern** - Switched from `Schema.Literal` to `Schema.Enums` with native TypeScript enums
77
+ - ✅ **Old Pattern (deprecated)**: `export const PRODUCT_STATUS = Schema.Literal("ACTIVE", "DRAFT", "ARCHIVED")`
78
+ - ✅ **New Pattern**: Native TypeScript enum + Effect Schema wrapper
79
+ ```typescript
80
+ export enum ProductStatus {
81
+ ACTIVE = "ACTIVE",
82
+ DRAFT = "DRAFT",
83
+ ARCHIVED = "ARCHIVED"
84
+ }
85
+ export const ProductStatusSchema = Schema.Enums(ProductStatus);
86
+ export type ProductStatusType = Schema.Schema.Type<typeof ProductStatusSchema>;
87
+ ```
88
+ - **Benefits**:
89
+ - ✨ Property accessor support: `ProductStatus.ACTIVE` (IntelliSense-friendly)
90
+ - ✨ Canonical Effect v3.18+ pattern (validated by Effect Architecture Specialist)
91
+ - ✨ Full Kysely type compatibility for queries
92
+ - ✨ Better developer experience with autocomplete
93
+ - **Migration Required**: Users must regenerate schemas with `prisma generate`
94
+ - **Breaking Change**: Existing code using `.literals` property will break
95
+
96
+ ### Added
97
+
98
+ - **PascalCase Naming Convention** - Enums now use PascalCase instead of SCREAMING_SNAKE_CASE
99
+ - `PRODUCT_STATUS` → `ProductStatus`
100
+ - `USER_ROLE` → `UserRole`
101
+ - Improves TypeScript idiomaticity and consistency
102
+
103
+ - **Type Aliases** - Generated type aliases for ergonomic usage
104
+ - `ProductStatusType` for enum types
105
+ - Simplifies type annotations: `ProductStatusType` vs `Schema.Schema.Type<typeof ProductStatusSchema>`
106
+
107
+ ### Performance
108
+
109
+ - **58% reduction in function calls** - Optimized PascalCase conversions
110
+ - Cache `toPascalCase()` results within function scope (1 call instead of 3)
111
+ - Optimized flatMap iterator to cache base names (50% reduction per enum)
112
+ - Pure functional optimization approved by Effect Architecture Specialist
113
+
114
+ - **100% elimination of intermediate arrays** - Removed unnecessary `Array.from()` calls
115
+ - Readonly arrays already support `.map()` and iteration methods
116
+ - Reduces memory allocations during code generation
117
+
118
+ ### Improved
119
+
120
+ - **Code Quality** - Extracted file header generation utility
121
+ - DRY principle: Single source of truth for generated file headers
122
+ - New `generateFileHeader()` utility in `src/utils/codegen.ts`
123
+ - Consistent formatting across enums.ts and types.ts
124
+
125
+ ### Technical Details
126
+
127
+ **TDD Implementation**: All changes developed using Test-Driven Development (Red-Green-Refactor)
128
+ - 18+ new tests covering enum generation, property access, field mapping, and imports
129
+ - All 134 tests passing with strict TypeScript configuration
130
+ - Zero type coercions - maintains full type safety
131
+
132
+ **Expert Validation**:
133
+ - ✅ Effect Architecture Specialist: Confirmed Schema.Enums is canonical pattern for Effect v3.18+
134
+ - ✅ TypeScript Pro: Validated all optimizations are type-safe with zero runtime overhead
135
+
136
+ **Changed Files**:
137
+ - `src/effect/enum.ts`: Complete rewrite of enum generation logic
138
+ - `src/effect/type.ts`: Updated to return Schema wrappers for enum fields
139
+ - `src/effect/generator.ts`: Optimized import generation, removed Array.from()
140
+ - `src/utils/naming.ts`: Enhanced with optional suffix parameter
141
+ - `src/utils/codegen.ts`: New file for shared code generation utilities
142
+ - `src/__tests__/helpers/dmmf-mocks.ts`: New test helpers without type coercions
143
+
144
+ **Test Coverage**:
145
+ - `src/__tests__/enum-generation.test.ts`: Tests 1-6 (Schema.Enums pattern)
146
+ - `src/__tests__/enum-property-access.test.ts`: Tests 7-10 (property access validation)
147
+ - `src/__tests__/field-type-generation.test.ts`: Tests 11-12 (field type mapping)
148
+ - `src/__tests__/import-generation.test.ts`: Tests 13-15 (import generation)
149
+ - `src/__tests__/e2e-enum-generation.test.ts`: Tests 16-18 (end-to-end integration)
150
+
151
+ **Migration Guide**:
152
+
153
+ Before (v1.4.x):
154
+ ```typescript
155
+ // Generated code
156
+ export const PRODUCT_STATUS = Schema.Literal("ACTIVE", "DRAFT", "ARCHIVED");
157
+
158
+ // Usage
159
+ const status = PRODUCT_STATUS.literals[0]; // "ACTIVE"
160
+ ```
161
+
162
+ After (v1.5.0):
163
+ ```typescript
164
+ // Generated code
165
+ export enum ProductStatus {
166
+ ACTIVE = "ACTIVE",
167
+ DRAFT = "DRAFT",
168
+ ARCHIVED = "ARCHIVED"
169
+ }
170
+ export const ProductStatusSchema = Schema.Enums(ProductStatus);
171
+
172
+ // Usage (property access!)
173
+ const status = ProductStatus.ACTIVE; // "ACTIVE"
174
+ ```
175
+
176
+ **Action Required**: Run `prisma generate` to regenerate schemas after upgrading.
177
+
178
+ [1.5.0]: https://github.com/samuelho-dev/prisma-effect-kysely/compare/v1.4.3...v1.5.0
179
+
8
180
  ## [1.4.3] - 2025-10-10
9
181
 
10
182
  ### Fixed
@@ -1,6 +1,13 @@
1
1
  import type { DMMF } from "@prisma/generator-helper";
2
2
  /**
3
- * Generate Effect Schema Literal enum code
3
+ * Generate TypeScript enum + Effect Schema.Enums wrapper
4
+ *
5
+ * TDD: Satisfies tests 1-6 in enum-generation.test.ts
6
+ *
7
+ * Output pattern:
8
+ * - Native TS enum with property accessors
9
+ * - Effect Schema.Enums() wrapper for validation
10
+ * - Type alias for convenience
4
11
  */
5
12
  export declare function generateEnumSchema(enumDef: DMMF.DatamodelEnum): string;
6
13
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"enum.d.ts","sourceRoot":"","sources":["../../src/effect/enum.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAGrD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,UAa7D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,SAAS,IAAI,CAAC,aAAa,EAAE,UAWrE"}
1
+ {"version":3,"file":"enum.d.ts","sourceRoot":"","sources":["../../src/effect/enum.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAKrD;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,UAuB7D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,SAAS,IAAI,CAAC,aAAa,EAAE,UAMrE"}
@@ -3,31 +3,47 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.generateEnumSchema = generateEnumSchema;
4
4
  exports.generateEnumsFile = generateEnumsFile;
5
5
  const enum_1 = require("../prisma/enum");
6
+ const naming_1 = require("../utils/naming");
7
+ const codegen_1 = require("../utils/codegen");
6
8
  /**
7
- * Generate Effect Schema Literal enum code
9
+ * Generate TypeScript enum + Effect Schema.Enums wrapper
10
+ *
11
+ * TDD: Satisfies tests 1-6 in enum-generation.test.ts
12
+ *
13
+ * Output pattern:
14
+ * - Native TS enum with property accessors
15
+ * - Effect Schema.Enums() wrapper for validation
16
+ * - Type alias for convenience
8
17
  */
9
18
  function generateEnumSchema(enumDef) {
10
- const enumValues = enumDef.values
19
+ // Convert SCREAMING_SNAKE_CASE to PascalCase (Test 5)
20
+ const enumName = (0, naming_1.toPascalCase)(enumDef.name);
21
+ const schemaName = `${enumName}Schema`;
22
+ const typeName = `${enumName}Type`;
23
+ // Generate native TypeScript enum members (Tests 1-2)
24
+ const enumMembers = enumDef.values
11
25
  .map((v) => {
12
26
  const value = (0, enum_1.getEnumValueDbName)(v);
13
- return `"${value}"`;
27
+ return ` ${v.name} = "${value}"`;
14
28
  })
15
- .join(", ");
16
- const enumName = enumDef.name;
17
- return `export const ${enumName} = Schema.Literal(${enumValues});
29
+ .join(",\n");
30
+ // Generate: enum + Schema.Enums() wrapper + type (Tests 3-4)
31
+ // Explicitly NOT using Schema.Literal (Test 6)
32
+ return `export enum ${enumName} {
33
+ ${enumMembers}
34
+ }
35
+
36
+ export const ${schemaName} = Schema.Enums(${enumName});
18
37
 
19
- export type ${enumName} = Schema.Schema.Type<typeof ${enumName}>;`;
38
+ export type ${typeName} = Schema.Schema.Type<typeof ${schemaName}>;`;
20
39
  }
21
40
  /**
22
41
  * Generate all enum schemas as a single file content
23
42
  */
24
43
  function generateEnumsFile(enums) {
25
- const header = `/**
26
- * Generated: ${new Date().toISOString()}
27
- * DO NOT EDIT MANUALLY
28
- */`;
44
+ const header = (0, codegen_1.generateFileHeader)();
29
45
  const imports = `import { Schema } from "effect";`;
30
- const enumSchemas = Array.from(enums).map(generateEnumSchema).join("\n\n");
46
+ const enumSchemas = enums.map(generateEnumSchema).join("\n\n");
31
47
  return `${header}\n\n${imports}\n\n${enumSchemas}`;
32
48
  }
33
49
  //# sourceMappingURL=enum.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"enum.js","sourceRoot":"","sources":["../../src/effect/enum.ts"],"names":[],"mappings":";;AAMA,gDAaC;AAKD,8CAWC;AAlCD,yCAAoD;AAEpD;;GAEG;AACH,SAAgB,kBAAkB,CAAC,OAA2B;IAC5D,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM;SAC9B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACT,MAAM,KAAK,GAAG,IAAA,yBAAkB,EAAC,CAAC,CAAC,CAAC;QACpC,OAAO,IAAI,KAAK,GAAG,CAAC;IACtB,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAE9B,OAAO,gBAAgB,QAAQ,qBAAqB,UAAU;;cAElD,QAAQ,gCAAgC,QAAQ,IAAI,CAAC;AACnE,CAAC;AAED;;GAEG;AACH,SAAgB,iBAAiB,CAAC,KAAoC;IACpE,MAAM,MAAM,GAAG;gBACD,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;;IAEpC,CAAC;IAEH,MAAM,OAAO,GAAG,kCAAkC,CAAC;IAEnD,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAE3E,OAAO,GAAG,MAAM,OAAO,OAAO,OAAO,WAAW,EAAE,CAAC;AACrD,CAAC"}
1
+ {"version":3,"file":"enum.js","sourceRoot":"","sources":["../../src/effect/enum.ts"],"names":[],"mappings":";;AAeA,gDAuBC;AAKD,8CAMC;AAhDD,yCAAoD;AACpD,4CAA+C;AAC/C,8CAAsD;AAEtD;;;;;;;;;GASG;AACH,SAAgB,kBAAkB,CAAC,OAA2B;IAC5D,sDAAsD;IACtD,MAAM,QAAQ,GAAG,IAAA,qBAAY,EAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,MAAM,UAAU,GAAG,GAAG,QAAQ,QAAQ,CAAC;IACvC,MAAM,QAAQ,GAAG,GAAG,QAAQ,MAAM,CAAC;IAEnC,sDAAsD;IACtD,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM;SAC/B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACT,MAAM,KAAK,GAAG,IAAA,yBAAkB,EAAC,CAAC,CAAC,CAAC;QACpC,OAAO,KAAK,CAAC,CAAC,IAAI,OAAO,KAAK,GAAG,CAAC;IACpC,CAAC,CAAC;SACD,IAAI,CAAC,KAAK,CAAC,CAAC;IAEf,6DAA6D;IAC7D,+CAA+C;IAC/C,OAAO,eAAe,QAAQ;EAC9B,WAAW;;;eAGE,UAAU,mBAAmB,QAAQ;;cAEtC,QAAQ,gCAAgC,UAAU,IAAI,CAAC;AACrE,CAAC;AAED;;GAEG;AACH,SAAgB,iBAAiB,CAAC,KAAoC;IACpE,MAAM,MAAM,GAAG,IAAA,4BAAkB,GAAE,CAAC;IACpC,MAAM,OAAO,GAAG,kCAAkC,CAAC;IACnD,MAAM,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAE/D,OAAO,GAAG,MAAM,OAAO,OAAO,OAAO,WAAW,EAAE,CAAC;AACrD,CAAC"}
@@ -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
  */
@@ -27,7 +28,13 @@ export declare class EffectGenerator {
27
28
  generateModelSchema(model: DMMF.Model, fields: DMMF.Field[]): string;
28
29
  /**
29
30
  * Generate types.ts file header
31
+ *
32
+ * TDD: Satisfies tests 13-15 in import-generation.test.ts
30
33
  */
31
34
  generateTypesHeader(hasEnums: boolean): string;
35
+ /**
36
+ * Generate schemas for all join tables
37
+ */
38
+ generateJoinTableSchemas(joinTables: JoinTableInfo[]): string;
32
39
  }
33
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;AAMrD;;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;;OAEG;IACH,mBAAmB,CAAC,QAAQ,EAAE,OAAO;CAkBtC"}
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"}
@@ -4,6 +4,8 @@ exports.EffectGenerator = void 0;
4
4
  const enum_1 = require("./enum");
5
5
  const type_1 = require("./type");
6
6
  const naming_1 = require("../utils/naming");
7
+ const codegen_1 = require("../utils/codegen");
8
+ const join_table_1 = require("./join-table");
7
9
  /**
8
10
  * Effect domain generator - orchestrates Effect Schema generation
9
11
  */
@@ -21,7 +23,7 @@ class EffectGenerator {
21
23
  * Generate base schema for a model (_ModelName)
22
24
  */
23
25
  generateBaseSchema(model, fields) {
24
- const fieldDefinitions = Array.from(fields)
26
+ const fieldDefinitions = fields
25
27
  .map((field) => {
26
28
  const fieldType = (0, type_1.buildFieldType)(field, this.dmmf);
27
29
  return ` ${field.name}: ${fieldType}`;
@@ -68,22 +70,37 @@ export type ${name}UpdateEncoded = Schema.Schema.Encoded<typeof ${name}.Updateab
68
70
  }
69
71
  /**
70
72
  * Generate types.ts file header
73
+ *
74
+ * TDD: Satisfies tests 13-15 in import-generation.test.ts
71
75
  */
72
76
  generateTypesHeader(hasEnums) {
73
- const header = `/**
74
- * Generated: ${new Date().toISOString()}
75
- * DO NOT EDIT MANUALLY
76
- */`;
77
+ const header = (0, codegen_1.generateFileHeader)();
77
78
  const imports = [
78
79
  `import { Schema } from "effect";`,
79
80
  `import { columnType, generated, getSchemas } from "prisma-effect-kysely";`,
80
81
  ];
81
82
  if (hasEnums) {
82
- const enumNames = this.dmmf.datamodel.enums.map((e) => e.name).join(', ');
83
- imports.push(`import { ${enumNames} } from "./enums";`);
83
+ // Test 13: Import both enum and Schema wrapper
84
+ // Test 14: Use PascalCase naming
85
+ // Test 15: No SCREAMING_SNAKE_CASE
86
+ const enumImports = this.dmmf.datamodel.enums
87
+ .flatMap((e) => {
88
+ const baseName = (0, naming_1.toPascalCase)(e.name);
89
+ return [baseName, `${baseName}Schema`];
90
+ })
91
+ .join(', ');
92
+ imports.push(`import { ${enumImports} } from "./enums";`);
84
93
  }
85
94
  return `${header}\n\n${imports.join('\n')}`;
86
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
+ }
87
104
  }
88
105
  exports.EffectGenerator = EffectGenerator;
89
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;AAE/C;;GAEG;AACH,MAAa,eAAe;IAC1B,YAA6B,IAAmB;QAAnB,SAAI,GAAJ,IAAI,CAAe;IAAG,CAAC;IAEpD;;OAEG;IACH,aAAa,CAAC,KAAoC;QAChD,OAAO,IAAA,wBAAiB,EAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,kBAAkB,CAAC,KAAiB,EAAE,MAA6B;QACjE,MAAM,gBAAgB,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;aACxC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACb,MAAM,SAAS,GAAG,IAAA,qBAAc,EAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YACnD,OAAO,KAAK,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QACzC,CAAC,CAAC;aACD,IAAI,CAAC,KAAK,CAAC,CAAC;QAEf,MAAM,cAAc,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QAExC,OAAO,MAAM,KAAK,CAAC,IAAI;eACZ,cAAc;EAC3B,gBAAgB;IACd,CAAC;IACH,CAAC;IAED;;OAEG;IACH,0BAA0B,CAAC,KAAiB;QAC1C,MAAM,cAAc,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QACxC,MAAM,qBAAqB,GAAG,IAAA,qBAAY,EAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAEvD,OAAO,gBAAgB,qBAAqB,iBAAiB,cAAc,IAAI,CAAC;IAClF,CAAC;IAED;;OAEG;IACH,mBAAmB,CAAC,KAAiB;QACnC,MAAM,IAAI,GAAG,IAAA,qBAAY,EAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAEtC,0DAA0D;QAC1D,MAAM,gBAAgB,GAAG,eAAe,IAAI,sCAAsC,IAAI;cAC5E,IAAI,sCAAsC,IAAI;cAC9C,IAAI,sCAAsC,IAAI,eAAe,CAAC;QAExE,kDAAkD;QAClD,MAAM,YAAY,GAAG;cACX,IAAI,gDAAgD,IAAI;cACxD,IAAI,gDAAgD,IAAI;cACxD,IAAI,gDAAgD,IAAI,eAAe,CAAC;QAElF,OAAO,gBAAgB,GAAG,YAAY,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,mBAAmB,CAAC,KAAiB,EAAE,MAAoB;QACzD,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC1D,MAAM,iBAAiB,GAAG,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC,CAAC;QACjE,MAAM,WAAW,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAEpD,OAAO,GAAG,UAAU,OAAO,iBAAiB,OAAO,WAAW,EAAE,CAAC;IACnE,CAAC;IAED;;OAEG;IACH,mBAAmB,CAAC,QAAiB;QACnC,MAAM,MAAM,GAAG;gBACH,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;;IAEpC,CAAC;QAED,MAAM,OAAO,GAAG;YACd,kCAAkC;YAClC,2EAA2E;SAC5E,CAAC;QAEF,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1E,OAAO,CAAC,IAAI,CAAC,YAAY,SAAS,oBAAoB,CAAC,CAAC;QAC1D,CAAC;QAED,OAAO,GAAG,MAAM,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IAC9C,CAAC;CACF;AA3FD,0CA2FC"}
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../src/effect/generator.ts"],"names":[],"mappings":";;;AACA,iCAA2C;AAC3C,iCAAwC;AAExC,4CAA+C;AAC/C,8CAAsD;AACtD,6CAAuD;AAGvD;;GAEG;AACH,MAAa,eAAe;IAC1B,YAA6B,IAAmB;QAAnB,SAAI,GAAJ,IAAI,CAAe;IAAG,CAAC;IAEpD;;OAEG;IACH,aAAa,CAAC,KAAoC;QAChD,OAAO,IAAA,wBAAiB,EAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,kBAAkB,CAAC,KAAiB,EAAE,MAA6B;QACjE,MAAM,gBAAgB,GAAG,MAAM;aAC5B,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACb,MAAM,SAAS,GAAG,IAAA,qBAAc,EAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YACnD,OAAO,KAAK,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QACzC,CAAC,CAAC;aACD,IAAI,CAAC,KAAK,CAAC,CAAC;QAEf,MAAM,cAAc,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QAExC,OAAO,MAAM,KAAK,CAAC,IAAI;eACZ,cAAc;EAC3B,gBAAgB;IACd,CAAC;IACH,CAAC;IAED;;OAEG;IACH,0BAA0B,CAAC,KAAiB;QAC1C,MAAM,cAAc,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QACxC,MAAM,qBAAqB,GAAG,IAAA,qBAAY,EAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAEvD,OAAO,gBAAgB,qBAAqB,iBAAiB,cAAc,IAAI,CAAC;IAClF,CAAC;IAED;;OAEG;IACH,mBAAmB,CAAC,KAAiB;QACnC,MAAM,IAAI,GAAG,IAAA,qBAAY,EAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAEtC,0DAA0D;QAC1D,MAAM,gBAAgB,GAAG,eAAe,IAAI,sCAAsC,IAAI;cAC5E,IAAI,sCAAsC,IAAI;cAC9C,IAAI,sCAAsC,IAAI,eAAe,CAAC;QAExE,kDAAkD;QAClD,MAAM,YAAY,GAAG;cACX,IAAI,gDAAgD,IAAI;cACxD,IAAI,gDAAgD,IAAI;cACxD,IAAI,gDAAgD,IAAI,eAAe,CAAC;QAElF,OAAO,gBAAgB,GAAG,YAAY,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,mBAAmB,CAAC,KAAiB,EAAE,MAAoB;QACzD,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC1D,MAAM,iBAAiB,GAAG,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC,CAAC;QACjE,MAAM,WAAW,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAEpD,OAAO,GAAG,UAAU,OAAO,iBAAiB,OAAO,WAAW,EAAE,CAAC;IACnE,CAAC;IAED;;;;OAIG;IACH,mBAAmB,CAAC,QAAiB;QACnC,MAAM,MAAM,GAAG,IAAA,4BAAkB,GAAE,CAAC;QAEpC,MAAM,OAAO,GAAG;YACd,kCAAkC;YAClC,2EAA2E;SAC5E,CAAC;QAEF,IAAI,QAAQ,EAAE,CAAC;YACb,+CAA+C;YAC/C,iCAAiC;YACjC,mCAAmC;YACnC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK;iBAC1C,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;gBACb,MAAM,QAAQ,GAAG,IAAA,qBAAY,EAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBACtC,OAAO,CAAC,QAAQ,EAAE,GAAG,QAAQ,QAAQ,CAAC,CAAC;YACzC,CAAC,CAAC;iBACD,IAAI,CAAC,IAAI,CAAC,CAAC;YAEd,OAAO,CAAC,IAAI,CAAC,YAAY,WAAW,oBAAoB,CAAC,CAAC;QAC5D,CAAC;QAED,OAAO,GAAG,MAAM,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IAC9C,CAAC;IAED;;OAEG;IACH,wBAAwB,CAAC,UAA2B;QAClD,OAAO,UAAU;aACd,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAA,oCAAuB,EAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;aACnD,IAAI,CAAC,MAAM,CAAC,CAAC;IAClB,CAAC;CACF;AA5GD,0CA4GC"}
@@ -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"}
@@ -1 +1 @@
1
- {"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../../src/effect/type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAyBrD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,UA2B1E;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,UAcpE"}
1
+ {"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../../src/effect/type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AA0BrD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,UA8B1E;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,UAcpE"}
@@ -4,6 +4,7 @@ exports.mapFieldToEffectType = mapFieldToEffectType;
4
4
  exports.buildFieldType = buildFieldType;
5
5
  const type_1 = require("../prisma/type");
6
6
  const annotations_1 = require("../utils/annotations");
7
+ const naming_1 = require("../utils/naming");
7
8
  /**
8
9
  * Prisma scalar type mapping to Effect Schema types
9
10
  * Uses const assertion to avoid type guards
@@ -39,9 +40,12 @@ function mapFieldToEffectType(field, dmmf) {
39
40
  return scalarType;
40
41
  }
41
42
  // PRIORITY 4: Check if it's an enum
43
+ // TDD: Satisfies tests 11-12 in field-type-generation.test.ts
42
44
  const enumDef = dmmf.datamodel.enums.find((e) => e.name === field.type);
43
45
  if (enumDef) {
44
- return field.type; // Use enum name directly
46
+ // Return Schema wrapper, not raw enum (Test 11)
47
+ // Use PascalCase + Schema suffix (Test 12)
48
+ return (0, naming_1.toPascalCase)(field.type, 'Schema');
45
49
  }
46
50
  // PRIORITY 5: Fallback to Unknown
47
51
  return "Schema.Unknown";
@@ -1 +1 @@
1
- {"version":3,"file":"type.js","sourceRoot":"","sources":["../../src/effect/type.ts"],"names":[],"mappings":";;AA6BA,oDA2BC;AAKD,wCAcC;AA1ED,yCAKwB;AACxB,sDAAiE;AAEjE;;;GAGG;AACH,MAAM,iBAAiB,GAAG;IACxB,MAAM,EAAE,eAAe;IACvB,GAAG,EAAE,eAAe;IACpB,KAAK,EAAE,eAAe;IACtB,MAAM,EAAE,eAAe;IACvB,OAAO,EAAE,eAAe,EAAE,gBAAgB;IAC1C,OAAO,EAAE,gBAAgB;IACzB,QAAQ,EAAE,aAAa;IACvB,IAAI,EAAE,gBAAgB,EAAE,oBAAoB;IAC5C,KAAK,EAAE,mBAAmB;CAClB,CAAC;AAEX;;;GAGG;AACH,SAAgB,oBAAoB,CAAC,KAAiB,EAAE,IAAmB;IACzE,+CAA+C;IAC/C,MAAM,YAAY,GAAG,IAAA,uCAAyB,EAAC,KAAK,CAAC,CAAC;IACtD,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,qDAAqD;IACrD,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAA,kBAAW,EAAC,KAAK,CAAC,EAAE,CAAC;QAClD,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,8DAA8D;IAC9D,MAAM,UAAU,GACd,iBAAiB,CAAC,KAAK,CAAC,IAAsC,CAAC,CAAC;IAClE,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,oCAAoC;IACpC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC;IACxE,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,yBAAyB;IAC9C,CAAC;IAED,kCAAkC;IAClC,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,SAAgB,cAAc,CAAC,KAAiB,EAAE,IAAmB;IACnE,IAAI,QAAQ,GAAG,oBAAoB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAEjD,gBAAgB;IAChB,IAAI,IAAA,kBAAW,EAAC,KAAK,CAAC,EAAE,CAAC;QACvB,QAAQ,GAAG,gBAAgB,QAAQ,GAAG,CAAC;IACzC,CAAC;IAED,4DAA4D;IAC5D,IAAI,CAAC,IAAA,sBAAe,EAAC,KAAK,CAAC,IAAI,CAAC,IAAA,sBAAe,EAAC,KAAK,CAAC,EAAE,CAAC;QACvD,QAAQ,GAAG,sBAAsB,QAAQ,GAAG,CAAC;IAC/C,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"type.js","sourceRoot":"","sources":["../../src/effect/type.ts"],"names":[],"mappings":";;AA8BA,oDA8BC;AAKD,wCAcC;AA9ED,yCAKwB;AACxB,sDAAiE;AACjE,4CAA+C;AAE/C;;;GAGG;AACH,MAAM,iBAAiB,GAAG;IACxB,MAAM,EAAE,eAAe;IACvB,GAAG,EAAE,eAAe;IACpB,KAAK,EAAE,eAAe;IACtB,MAAM,EAAE,eAAe;IACvB,OAAO,EAAE,eAAe,EAAE,gBAAgB;IAC1C,OAAO,EAAE,gBAAgB;IACzB,QAAQ,EAAE,aAAa;IACvB,IAAI,EAAE,gBAAgB,EAAE,oBAAoB;IAC5C,KAAK,EAAE,mBAAmB;CAClB,CAAC;AAEX;;;GAGG;AACH,SAAgB,oBAAoB,CAAC,KAAiB,EAAE,IAAmB;IACzE,+CAA+C;IAC/C,MAAM,YAAY,GAAG,IAAA,uCAAyB,EAAC,KAAK,CAAC,CAAC;IACtD,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,qDAAqD;IACrD,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAA,kBAAW,EAAC,KAAK,CAAC,EAAE,CAAC;QAClD,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,8DAA8D;IAC9D,MAAM,UAAU,GACd,iBAAiB,CAAC,KAAK,CAAC,IAAsC,CAAC,CAAC;IAClE,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,oCAAoC;IACpC,8DAA8D;IAC9D,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC;IACxE,IAAI,OAAO,EAAE,CAAC;QACZ,gDAAgD;QAChD,2CAA2C;QAC3C,OAAO,IAAA,qBAAY,EAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC5C,CAAC;IAED,kCAAkC;IAClC,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,SAAgB,cAAc,CAAC,KAAiB,EAAE,IAAmB;IACnE,IAAI,QAAQ,GAAG,oBAAoB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAEjD,gBAAgB;IAChB,IAAI,IAAA,kBAAW,EAAC,KAAK,CAAC,EAAE,CAAC;QACvB,QAAQ,GAAG,gBAAgB,QAAQ,GAAG,CAAC;IACzC,CAAC;IAED,4DAA4D;IAC5D,IAAI,CAAC,IAAA,sBAAe,EAAC,KAAK,CAAC,IAAI,CAAC,IAAA,sBAAe,EAAC,KAAK,CAAC,EAAE,CAAC;QACvD,QAAQ,GAAG,sBAAsB,QAAQ,GAAG,CAAC;IAC/C,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -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.4.0',
25
+ version: '1.5.1',
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;IAoC3B;;OAEG;YACW,aAAa;IAK3B;;OAEG;IACH,OAAO,CAAC,QAAQ;IAYhB;;OAEG;IACH,OAAO,CAAC,WAAW;CAKpB"}
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 DB interface
81
- const dbInterface = this.kyselyGen.generateDBInterface(models);
82
- const content = `${header}\n\n${modelSchemas}\n\n${dbInterface}`;
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;AAKrD;;;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;IAIjD;;OAEG;IACH,iBAAiB;CAGlB"}
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"}
@@ -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;AAGhD;;;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;QAC/C,OAAO,IAAA,0BAAmB,EAAC,MAAM,CAAC,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,iBAAiB;QACf,OAAO,oDAAoD,CAAC;IAC9D,CAAC;CACF;AAtCD,0CAsCC"}
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"}
@@ -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 complete DB interface
31
+ * Generate DB interface entry for a join table
31
32
  */
32
- export declare function generateDBInterface(models: readonly DMMF.Model[]): string;
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;AAGrD;;;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,mBAAmB,CAAC,MAAM,EAAE,SAAS,IAAI,CAAC,KAAK,EAAE,UAShE"}
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"}
@@ -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 complete DB interface
68
+ * Generate DB interface entry for a join table
68
69
  */
69
- function generateDBInterface(models) {
70
- const tableEntries = Array.from(models)
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
- ${tableEntries}
86
+ ${modelEntries}${joinTableEntries}
76
87
  }`;
77
88
  }
78
89
  //# sourceMappingURL=type.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"type.js","sourceRoot":"","sources":["../../src/kysely/type.ts"],"names":[],"mappings":";;AAOA,0CAEC;AAMD,wCAEC;AAKD,gDAOC;AAKD,8CAMC;AAMD,oDAQC;AAKD,4DAIC;AAKD,kDASC;AA5ED,yCAA4E;AAE5E;;;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,mBAAmB,CAAC,MAA6B;IAC/D,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;SACpC,GAAG,CAAC,wBAAwB,CAAC;SAC7B,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,OAAO;;EAEP,YAAY;EACZ,CAAC;AACH,CAAC"}
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;AAIrD;;;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;CAIzD"}
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"}
@@ -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;AAErC;;;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;CACF;AA3BD,0CA2BC"}
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,WAoB5C;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"}
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"}
@@ -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
@@ -1 +1 @@
1
- {"version":3,"file":"type.js","sourceRoot":"","sources":["../../src/prisma/type.ts"],"names":[],"mappings":";;AAMA,kCAoBC;AAKD,wCAEC;AAKD,0CAEC;AAKD,8BAEC;AAKD,0CAEC;AAKD,kCAEC;AAKD,oDAIC;AAKD,gDAMC;AAKD,wCAEC;AAKD,gCAIC;AAKD,gCAIC;AAxGD;;;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,mCAAmC;IACnC,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"}
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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Code generation utilities
3
+ */
4
+ /**
5
+ * Generate standard file header for generated files
6
+ *
7
+ * @param timestamp - Optional timestamp (defaults to current time)
8
+ */
9
+ export declare function generateFileHeader(timestamp?: Date): string;
10
+ //# sourceMappingURL=codegen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codegen.d.ts","sourceRoot":"","sources":["../../src/utils/codegen.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,GAAE,IAAiB,GAAG,MAAM,CAKvE"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ /**
3
+ * Code generation utilities
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.generateFileHeader = generateFileHeader;
7
+ /**
8
+ * Generate standard file header for generated files
9
+ *
10
+ * @param timestamp - Optional timestamp (defaults to current time)
11
+ */
12
+ function generateFileHeader(timestamp = new Date()) {
13
+ return `/**
14
+ * Generated: ${timestamp.toISOString()}
15
+ * DO NOT EDIT MANUALLY
16
+ */`;
17
+ }
18
+ //# sourceMappingURL=codegen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codegen.js","sourceRoot":"","sources":["../../src/utils/codegen.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAOH,gDAKC;AAVD;;;;GAIG;AACH,SAAgB,kBAAkB,CAAC,YAAkB,IAAI,IAAI,EAAE;IAC7D,OAAO;gBACO,SAAS,CAAC,WAAW,EAAE;;IAEnC,CAAC;AACL,CAAC"}
@@ -2,14 +2,17 @@
2
2
  * Naming utilities for consistent TypeScript identifier generation
3
3
  */
4
4
  /**
5
- * Convert any string to PascalCase for TypeScript type names
5
+ * Convert any string to PascalCase with optional suffix
6
6
  * Handles: snake_case, camelCase, kebab-case, or mixed formats
7
7
  *
8
+ * @param str - The string to convert
9
+ * @param suffix - Optional suffix to append (e.g., "Schema", "Type")
10
+ *
8
11
  * @example
9
12
  * toPascalCase('user') // 'User'
10
- * toPascalCase('session_model_preference') // 'SessionModelPreference'
11
- * toPascalCase('user-profile') // 'UserProfile'
12
- * toPascalCase('userProfile') // 'UserProfile'
13
+ * toPascalCase('PRODUCT_STATUS') // 'ProductStatus'
14
+ * toPascalCase('PRODUCT_STATUS', 'Schema') // 'ProductStatusSchema'
15
+ * toPascalCase('USER_ROLE', 'Type') // 'UserRoleType'
13
16
  */
14
- export declare function toPascalCase(str: string): string;
17
+ export declare function toPascalCase(str: string, suffix?: string): string;
15
18
  //# sourceMappingURL=naming.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"naming.d.ts","sourceRoot":"","sources":["../../src/utils/naming.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAyBhD"}
1
+ {"version":3,"file":"naming.d.ts","sourceRoot":"","sources":["../../src/utils/naming.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CA8BjE"}
@@ -5,37 +5,46 @@
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.toPascalCase = toPascalCase;
7
7
  /**
8
- * Convert any string to PascalCase for TypeScript type names
8
+ * Convert any string to PascalCase with optional suffix
9
9
  * Handles: snake_case, camelCase, kebab-case, or mixed formats
10
10
  *
11
+ * @param str - The string to convert
12
+ * @param suffix - Optional suffix to append (e.g., "Schema", "Type")
13
+ *
11
14
  * @example
12
15
  * toPascalCase('user') // 'User'
13
- * toPascalCase('session_model_preference') // 'SessionModelPreference'
14
- * toPascalCase('user-profile') // 'UserProfile'
15
- * toPascalCase('userProfile') // 'UserProfile'
16
+ * toPascalCase('PRODUCT_STATUS') // 'ProductStatus'
17
+ * toPascalCase('PRODUCT_STATUS', 'Schema') // 'ProductStatusSchema'
18
+ * toPascalCase('USER_ROLE', 'Type') // 'UserRoleType'
16
19
  */
17
- function toPascalCase(str) {
20
+ function toPascalCase(str, suffix) {
18
21
  // Handle empty string
19
22
  if (!str)
20
23
  return str;
21
24
  // Split on underscores, dashes, or spaces
22
25
  const words = str.split(/[_-\s]+/);
26
+ let pascalCase;
23
27
  // If no delimiters found, check if already camelCase/PascalCase
24
28
  if (words.length === 1) {
25
29
  // Split camelCase/PascalCase by capital letters
26
30
  const camelWords = str.split(/(?=[A-Z])/);
27
31
  if (camelWords.length > 1) {
28
- return camelWords
32
+ pascalCase = camelWords
29
33
  .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())
30
34
  .join('');
31
35
  }
32
- // Single word - just capitalize first letter
33
- return str.charAt(0).toUpperCase() + str.slice(1);
36
+ else {
37
+ // Single word - just capitalize first letter
38
+ pascalCase = str.charAt(0).toUpperCase() + str.slice(1);
39
+ }
40
+ }
41
+ else {
42
+ // Convert each word to PascalCase
43
+ pascalCase = words
44
+ .filter((word) => word.length > 0) // Remove empty strings
45
+ .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())
46
+ .join('');
34
47
  }
35
- // Convert each word to PascalCase
36
- return words
37
- .filter((word) => word.length > 0) // Remove empty strings
38
- .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())
39
- .join('');
48
+ return suffix ? `${pascalCase}${suffix}` : pascalCase;
40
49
  }
41
50
  //# sourceMappingURL=naming.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"naming.js","sourceRoot":"","sources":["../../src/utils/naming.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAYH,oCAyBC;AAnCD;;;;;;;;;GASG;AACH,SAAgB,YAAY,CAAC,GAAW;IACtC,sBAAsB;IACtB,IAAI,CAAC,GAAG;QAAE,OAAO,GAAG,CAAC;IAErB,0CAA0C;IAC1C,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAEnC,gEAAgE;IAChE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,gDAAgD;QAChD,MAAM,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC1C,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,OAAO,UAAU;iBACd,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;iBACzE,IAAI,CAAC,EAAE,CAAC,CAAC;QACd,CAAC;QACD,6CAA6C;QAC7C,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC;IAED,kCAAkC;IAClC,OAAO,KAAK;SACT,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,uBAAuB;SACzD,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;SACzE,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"naming.js","sourceRoot":"","sources":["../../src/utils/naming.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAeH,oCA8BC;AA3CD;;;;;;;;;;;;GAYG;AACH,SAAgB,YAAY,CAAC,GAAW,EAAE,MAAe;IACvD,sBAAsB;IACtB,IAAI,CAAC,GAAG;QAAE,OAAO,GAAG,CAAC;IAErB,0CAA0C;IAC1C,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAEnC,IAAI,UAAkB,CAAC;IAEvB,gEAAgE;IAChE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,gDAAgD;QAChD,MAAM,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC1C,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,UAAU,GAAG,UAAU;iBACpB,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;iBACzE,IAAI,CAAC,EAAE,CAAC,CAAC;QACd,CAAC;aAAM,CAAC;YACN,6CAA6C;YAC7C,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;SAAM,CAAC;QACN,kCAAkC;QAClC,UAAU,GAAG,KAAK;aACf,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,uBAAuB;aACzD,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;aACzE,IAAI,CAAC,EAAE,CAAC,CAAC;IACd,CAAC;IAED,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,UAAU,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC;AACxD,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "prisma-effect-kysely",
3
- "version": "1.4.3",
3
+ "version": "1.5.1",
4
4
  "description": "Prisma generator that creates Effect Schema types from Prisma schema compatible with Kysely",
5
5
  "license": "MIT",
6
6
  "author": "Samuel Ho",
@@ -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"}