prisma-effect-kysely 1.6.0 → 1.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +47 -0
- package/README.md +111 -14
- package/dist/effect/enum.d.ts.map +1 -1
- package/dist/effect/enum.js +29 -6
- package/dist/effect/enum.js.map +1 -1
- package/dist/effect/generator.d.ts.map +1 -1
- package/dist/effect/generator.js +5 -11
- package/dist/effect/generator.js.map +1 -1
- package/dist/effect/type.js +3 -4
- package/dist/effect/type.js.map +1 -1
- package/dist/utils/unsupported-config.d.ts +26 -0
- package/dist/utils/unsupported-config.d.ts.map +1 -0
- package/dist/utils/unsupported-config.js +36 -0
- package/dist/utils/unsupported-config.js.map +1 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,53 @@ 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.7.0] - 2025-10-12
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
|
|
12
|
+
- **CRITICAL: TypeScript TS7022 Compilation Error**: Fixed circular reference errors in generated enum code that prevented TypeScript compilation
|
|
13
|
+
- v1.6.0-v1.6.1 used namespace merging pattern that caused unavoidable TS7022 errors: `'Schema' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer`
|
|
14
|
+
- Reverted to proven v1.5.3 suffix pattern (`RoleSchema`, `RoleType`) which compiles without errors
|
|
15
|
+
- Tests were masking the compilation failures by only checking string patterns, never actually running TypeScript compiler on generated code
|
|
16
|
+
|
|
17
|
+
### Changed
|
|
18
|
+
|
|
19
|
+
- **BREAKING: Reverted to Suffix Pattern for Enums**
|
|
20
|
+
- Enum exports now use suffix pattern instead of namespace pattern from v1.6.x
|
|
21
|
+
- **Before (v1.6.x - broken)**: `Role.Schema`, `Role.Type`
|
|
22
|
+
- **After (v1.7.0 - working)**: `RoleSchema`, `RoleType`
|
|
23
|
+
- This ensures generated code compiles with TypeScript strict mode without errors
|
|
24
|
+
- **Migration from v1.6.x**:
|
|
25
|
+
- `Role.Schema` → `RoleSchema`
|
|
26
|
+
- `Role.Type` → `RoleType`
|
|
27
|
+
- `Status.Schema` → `StatusSchema`
|
|
28
|
+
- `Status.Type` → `StatusType`
|
|
29
|
+
|
|
30
|
+
### Added
|
|
31
|
+
|
|
32
|
+
- **JSDoc Documentation**: All generated enum exports now include comprehensive JSDoc comments
|
|
33
|
+
- Self-documenting code with `@see` references between related exports
|
|
34
|
+
- Clear `@example` tags showing how to use Effect Schema validation
|
|
35
|
+
- Generated TypeScript type unions documented inline (e.g., `'ADMIN' | 'USER' | 'GUEST'`)
|
|
36
|
+
- Improves IDE IntelliSense and developer experience
|
|
37
|
+
|
|
38
|
+
## [1.6.1] - 2025-10-12
|
|
39
|
+
|
|
40
|
+
### Fixed
|
|
41
|
+
|
|
42
|
+
- **TypeScript Namespace Collision (TS7022)**: Fixed circular reference error in generated enum code where namespace export `Schema` collided with imported `Schema` from Effect library
|
|
43
|
+
- Changed import pattern from `import { Schema } from "effect"` to `import * as Effect from "effect"`
|
|
44
|
+
- Added module-level alias `const Schema = Effect.Schema` for clean, readable code throughout generated files
|
|
45
|
+
- Only use fully-qualified `Effect.Schema` inside enum namespaces where collision occurs
|
|
46
|
+
- This maintains 95% of generated code with clean `Schema.*` patterns while avoiding namespace collision
|
|
47
|
+
|
|
48
|
+
- **Optional Field Pattern**: Updated optional field generation from `Schema.Union(type, Schema.Undefined)` to correct `Schema.UndefinedOr(type)` combinator per Effect Schema API
|
|
49
|
+
|
|
50
|
+
### Changed
|
|
51
|
+
|
|
52
|
+
- Generated code now uses `import * as Effect from "effect"` pattern (industry standard)
|
|
53
|
+
- All generated files include module-level alias `const Schema = Effect.Schema` for clean API
|
|
54
|
+
|
|
8
55
|
## [1.6.0] - 2025-10-12
|
|
9
56
|
|
|
10
57
|
### Changed
|
package/README.md
CHANGED
|
@@ -43,38 +43,135 @@ Generates three files in the configured output directory:
|
|
|
43
43
|
|
|
44
44
|
### enums.ts
|
|
45
45
|
|
|
46
|
-
|
|
46
|
+
Native TypeScript enums with Effect Schema validators and comprehensive JSDoc:
|
|
47
47
|
|
|
48
48
|
```typescript
|
|
49
|
-
|
|
50
|
-
|
|
49
|
+
/**
|
|
50
|
+
* UserRole enum from Prisma schema.
|
|
51
|
+
* @see {@link UserRoleSchema} for Effect Schema validation
|
|
52
|
+
* @see {@link UserRoleType} for TypeScript type
|
|
53
|
+
*/
|
|
54
|
+
export enum UserRole {
|
|
55
|
+
ADMIN = "ADMIN",
|
|
56
|
+
USER = "USER",
|
|
57
|
+
GUEST = "GUEST"
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Effect Schema validator for UserRole enum.
|
|
62
|
+
* Validates that a value is a valid UserRole enum member.
|
|
63
|
+
*
|
|
64
|
+
* @example
|
|
65
|
+
* const validated = Schema.decodeSync(UserRoleSchema)("ADMIN");
|
|
66
|
+
*/
|
|
67
|
+
export const UserRoleSchema = Schema.Enums(UserRole);
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* TypeScript type for UserRole enum values.
|
|
71
|
+
* Equivalent to: 'ADMIN' | 'USER' | 'GUEST'
|
|
72
|
+
*/
|
|
73
|
+
export type UserRoleType = Schema.Schema.Type<typeof UserRoleSchema>;
|
|
74
|
+
|
|
75
|
+
// Usage:
|
|
76
|
+
// - Access enum values: UserRole.ADMIN, UserRole.USER
|
|
77
|
+
// - Access Effect Schema: UserRoleSchema
|
|
78
|
+
// - Access TypeScript type: UserRoleType
|
|
51
79
|
```
|
|
52
80
|
|
|
53
81
|
### types.ts
|
|
54
82
|
|
|
55
|
-
Effect Schema structs from Prisma models:
|
|
83
|
+
Effect Schema structs from Prisma models with Kysely integration:
|
|
56
84
|
|
|
57
85
|
```typescript
|
|
58
|
-
|
|
59
|
-
|
|
86
|
+
// Base schema with underscore prefix
|
|
87
|
+
export const _User = Schema.Struct({
|
|
88
|
+
id: columnType(Schema.UUID, Schema.Never, Schema.Never), // Read-only ID
|
|
60
89
|
email: Schema.String,
|
|
61
|
-
name: Schema.
|
|
62
|
-
role:
|
|
63
|
-
createdAt: Schema.Date,
|
|
90
|
+
name: Schema.Union(Schema.String, Schema.Undefined), // Optional field
|
|
91
|
+
role: UserRoleSchema,
|
|
92
|
+
createdAt: generated(Schema.Date), // Generated field
|
|
64
93
|
});
|
|
65
|
-
|
|
94
|
+
|
|
95
|
+
// Operational schemas and types in namespace
|
|
96
|
+
export namespace User {
|
|
97
|
+
const schemas = getSchemas(_User);
|
|
98
|
+
export const Selectable = schemas.Selectable; // For SELECT queries
|
|
99
|
+
export const Insertable = schemas.Insertable; // For INSERT (generated fields optional)
|
|
100
|
+
export const Updateable = schemas.Updateable; // For UPDATE (all fields optional)
|
|
101
|
+
|
|
102
|
+
export type Select = Schema.Schema.Type<typeof User.Selectable>;
|
|
103
|
+
export type Insert = Schema.Schema.Type<typeof User.Insertable>;
|
|
104
|
+
export type Update = Schema.Schema.Type<typeof User.Updateable>;
|
|
105
|
+
export type SelectEncoded = Schema.Schema.Encoded<typeof User.Selectable>;
|
|
106
|
+
export type InsertEncoded = Schema.Schema.Encoded<typeof User.Insertable>;
|
|
107
|
+
export type UpdateEncoded = Schema.Schema.Encoded<typeof User.Updateable>;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
// Kysely DB interface for type-safe queries
|
|
111
|
+
export interface DB {
|
|
112
|
+
User: Schema.Schema.Encoded<typeof _User>;
|
|
113
|
+
// ... other models
|
|
114
|
+
}
|
|
66
115
|
```
|
|
67
116
|
|
|
68
|
-
**
|
|
69
|
-
- Model `User` → `User`, `
|
|
70
|
-
- Model `session_preference` → `
|
|
117
|
+
**Name Preservation**: All names from your Prisma schema are preserved exactly:
|
|
118
|
+
- Model `User` → `User` namespace with `User.Select`, `User.Insert`, `User.Update`
|
|
119
|
+
- Model `session_preference` → `session_preference` namespace
|
|
120
|
+
- Enum `ACTIVE_STATUS` → `ACTIVE_STATUS` enum and namespace
|
|
71
121
|
|
|
72
|
-
This
|
|
122
|
+
This creates a complete bridge from Prisma → Effect → Kysely → TypeScript with stable, predictable names.
|
|
73
123
|
|
|
74
124
|
### index.ts
|
|
75
125
|
|
|
76
126
|
Re-exports all generated types for easy importing
|
|
77
127
|
|
|
128
|
+
## Namespace Pattern
|
|
129
|
+
|
|
130
|
+
The generator uses TypeScript namespaces to organize generated code while preserving your Prisma schema names exactly.
|
|
131
|
+
|
|
132
|
+
### Benefits
|
|
133
|
+
|
|
134
|
+
- **Zero Name Transformations**: Your Prisma names flow unchanged through Effect, Kysely, and TypeScript
|
|
135
|
+
- **No Naming Conflicts**: Namespaces eliminate collisions without requiring name transformations
|
|
136
|
+
- **Grouped Exports**: Related schemas, types, and values are logically grouped
|
|
137
|
+
- **Clean API**: Access everything through a single identifier (e.g., `User.Select`, `User.Insertable`)
|
|
138
|
+
|
|
139
|
+
### Structure
|
|
140
|
+
|
|
141
|
+
**For Enums:**
|
|
142
|
+
```typescript
|
|
143
|
+
// Native TypeScript enum preserving Prisma schema naming
|
|
144
|
+
export enum ACTIVE_STATUS { ACTIVE, INACTIVE }
|
|
145
|
+
|
|
146
|
+
// Effect Schema validator with suffix pattern
|
|
147
|
+
export const ACTIVE_STATUSSchema = Schema.Enums(ACTIVE_STATUS);
|
|
148
|
+
|
|
149
|
+
// TypeScript type export
|
|
150
|
+
export type ACTIVE_STATUSType = Schema.Schema.Type<typeof ACTIVE_STATUSSchema>;
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
**For Models:**
|
|
154
|
+
```typescript
|
|
155
|
+
export const _User = Schema.Struct({ ... }); // Base schema (underscore prefix)
|
|
156
|
+
export namespace User { // Namespace for operational schemas
|
|
157
|
+
const schemas = getSchemas(_User);
|
|
158
|
+
export const Selectable = schemas.Selectable;
|
|
159
|
+
export const Insertable = schemas.Insertable;
|
|
160
|
+
export const Updateable = schemas.Updateable;
|
|
161
|
+
export type Select = ...;
|
|
162
|
+
export type Insert = ...;
|
|
163
|
+
// ... more types
|
|
164
|
+
}
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
**For Join Tables:**
|
|
168
|
+
```typescript
|
|
169
|
+
export const _CategoryToPost = Schema.Struct({ A, B });
|
|
170
|
+
export namespace CategoryToPost {
|
|
171
|
+
// Same pattern as models
|
|
172
|
+
}
|
|
173
|
+
```
|
|
174
|
+
|
|
78
175
|
## Type Mappings
|
|
79
176
|
|
|
80
177
|
| Prisma Type | Effect Schema Type | Notes |
|
|
@@ -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;AAKrD;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,
|
|
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,UA8C7D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,SAAS,IAAI,CAAC,aAAa,EAAE,UAMrE"}
|
package/dist/effect/enum.js
CHANGED
|
@@ -17,6 +17,8 @@ const codegen_1 = require("../utils/codegen");
|
|
|
17
17
|
function generateEnumSchema(enumDef) {
|
|
18
18
|
// Preserve original enum name from Prisma schema
|
|
19
19
|
const enumName = enumDef.name;
|
|
20
|
+
const schemaName = `${enumName}Schema`;
|
|
21
|
+
const typeName = `${enumName}Type`;
|
|
20
22
|
// Generate native TypeScript enum members
|
|
21
23
|
const enumMembers = enumDef.values
|
|
22
24
|
.map((v) => {
|
|
@@ -24,15 +26,36 @@ function generateEnumSchema(enumDef) {
|
|
|
24
26
|
return ` ${v.name} = "${value}"`;
|
|
25
27
|
})
|
|
26
28
|
.join(",\n");
|
|
27
|
-
//
|
|
28
|
-
|
|
29
|
+
// Get first enum value for example
|
|
30
|
+
const firstValue = enumDef.values[0]?.name || 'VALUE';
|
|
31
|
+
// Get enum values as type union for JSDoc
|
|
32
|
+
const enumValueUnion = enumDef.values
|
|
33
|
+
.map(v => `'${(0, enum_1.getEnumValueDbName)(v)}'`)
|
|
34
|
+
.join(' | ');
|
|
35
|
+
// Generate: enum + Schema.Enums() wrapper + type with JSDoc
|
|
36
|
+
return `/**
|
|
37
|
+
* ${enumName} enum from Prisma schema.
|
|
38
|
+
* @see {@link ${schemaName}} for Effect Schema validation
|
|
39
|
+
* @see {@link ${typeName}} for TypeScript type
|
|
40
|
+
*/
|
|
41
|
+
export enum ${enumName} {
|
|
29
42
|
${enumMembers}
|
|
30
43
|
}
|
|
31
44
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
45
|
+
/**
|
|
46
|
+
* Effect Schema validator for ${enumName} enum.
|
|
47
|
+
* Validates that a value is a valid ${enumName} enum member.
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
* const validated = Schema.decodeSync(${schemaName})("${firstValue}");
|
|
51
|
+
*/
|
|
52
|
+
export const ${schemaName} = Schema.Enums(${enumName});
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* TypeScript type for ${enumName} enum values.
|
|
56
|
+
* Equivalent to: ${enumValueUnion}
|
|
57
|
+
*/
|
|
58
|
+
export type ${typeName} = Schema.Schema.Type<typeof ${schemaName}>;`;
|
|
36
59
|
}
|
|
37
60
|
/**
|
|
38
61
|
* Generate all enum schemas as a single file content
|
package/dist/effect/enum.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"enum.js","sourceRoot":"","sources":["../../src/effect/enum.ts"],"names":[],"mappings":";;AAeA,
|
|
1
|
+
{"version":3,"file":"enum.js","sourceRoot":"","sources":["../../src/effect/enum.ts"],"names":[],"mappings":";;AAeA,gDA8CC;AAKD,8CAMC;AAvED,yCAAoD;AAEpD,8CAAsD;AAEtD;;;;;;;;;GASG;AACH,SAAgB,kBAAkB,CAAC,OAA2B;IAC5D,iDAAiD;IACjD,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAC9B,MAAM,UAAU,GAAG,GAAG,QAAQ,QAAQ,CAAC;IACvC,MAAM,QAAQ,GAAG,GAAG,QAAQ,MAAM,CAAC;IAEnC,0CAA0C;IAC1C,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,mCAAmC;IACnC,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,OAAO,CAAC;IAEtD,0CAA0C;IAC1C,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM;SAClC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,IAAA,yBAAkB,EAAC,CAAC,CAAC,GAAG,CAAC;SACtC,IAAI,CAAC,KAAK,CAAC,CAAC;IAEf,4DAA4D;IAC5D,OAAO;KACJ,QAAQ;iBACI,UAAU;iBACV,QAAQ;;cAEX,QAAQ;EACpB,WAAW;;;;iCAIoB,QAAQ;uCACF,QAAQ;;;yCAGN,UAAU,MAAM,UAAU;;eAEpD,UAAU,mBAAmB,QAAQ;;;yBAG3B,QAAQ;oBACb,cAAc;;cAEpB,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 +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,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;IAY5C;;OAEG;IACH,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK;IAarC;;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;IAY5C;;OAEG;IACH,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK;IAarC;;OAEG;IACH,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE;IAQ3D;;;;OAIG;IACH,mBAAmB,CAAC,QAAQ,EAAE,OAAO;IAoBrC;;OAEG;IACH,wBAAwB,CAAC,UAAU,EAAE,aAAa,EAAE;CAKrD"}
|
package/dist/effect/generator.js
CHANGED
|
@@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.EffectGenerator = void 0;
|
|
4
4
|
const enum_1 = require("./enum");
|
|
5
5
|
const type_1 = require("./type");
|
|
6
|
-
const naming_1 = require("../utils/naming");
|
|
7
6
|
const codegen_1 = require("../utils/codegen");
|
|
8
7
|
const join_table_1 = require("./join-table");
|
|
9
8
|
/**
|
|
@@ -83,16 +82,11 @@ ${fieldDefinitions}
|
|
|
83
82
|
`import { columnType, generated, getSchemas } from "prisma-effect-kysely";`,
|
|
84
83
|
];
|
|
85
84
|
if (hasEnums) {
|
|
86
|
-
//
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
const
|
|
90
|
-
|
|
91
|
-
const baseName = (0, naming_1.toPascalCase)(e.name);
|
|
92
|
-
return [baseName, `${baseName}Schema`];
|
|
93
|
-
})
|
|
94
|
-
.join(', ');
|
|
95
|
-
imports.push(`import { ${enumImports} } from "./enums";`);
|
|
85
|
+
// Import enums and their schemas with suffix pattern
|
|
86
|
+
const enumNames = this.dmmf.datamodel.enums.map((e) => e.name);
|
|
87
|
+
const enumImports = enumNames.join(', ');
|
|
88
|
+
const schemaImports = enumNames.map(name => `${name}Schema`).join(', ');
|
|
89
|
+
imports.push(`import { ${enumImports}, ${schemaImports} } from "./enums";`);
|
|
96
90
|
}
|
|
97
91
|
return `${header}\n\n${imports.join('\n')}`;
|
|
98
92
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../src/effect/generator.ts"],"names":[],"mappings":";;;AACA,iCAA2C;AAC3C,iCAAwC;
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../src/effect/generator.ts"],"names":[],"mappings":"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"}
|
package/dist/effect/type.js
CHANGED
|
@@ -4,7 +4,6 @@ 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");
|
|
8
7
|
/**
|
|
9
8
|
* Prisma scalar type mapping to Effect Schema types
|
|
10
9
|
* Uses const assertion to avoid type guards
|
|
@@ -43,9 +42,9 @@ function mapFieldToEffectType(field, dmmf) {
|
|
|
43
42
|
// TDD: Satisfies tests 11-12 in field-type-generation.test.ts
|
|
44
43
|
const enumDef = dmmf.datamodel.enums.find((e) => e.name === field.type);
|
|
45
44
|
if (enumDef) {
|
|
46
|
-
// Return Schema
|
|
47
|
-
//
|
|
48
|
-
return
|
|
45
|
+
// Return Schema with suffix pattern (v1.7.0+)
|
|
46
|
+
// Preserve original enum name with Schema suffix
|
|
47
|
+
return `${enumDef.name}Schema`;
|
|
49
48
|
}
|
|
50
49
|
// PRIORITY 5: Fallback to Unknown
|
|
51
50
|
return "Schema.Unknown";
|
package/dist/effect/type.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"type.js","sourceRoot":"","sources":["../../src/effect/type.ts"],"names":[],"mappings":";;AA8BA,oDA8BC;AAKD,wCAcC;AA9ED,yCAKwB;AACxB,sDAAiE;
|
|
1
|
+
{"version":3,"file":"type.js","sourceRoot":"","sources":["../../src/effect/type.ts"],"names":[],"mappings":";;AA8BA,oDA8BC;AAKD,wCAcC;AA9ED,yCAKwB;AACxB,sDAAiE;AAGjE;;;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,8CAA8C;QAC9C,iDAAiD;QACjD,OAAO,GAAG,OAAO,CAAC,IAAI,QAAQ,CAAC;IACjC,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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|