prisma-effect-schema-generator 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{LICENSE → LICENSE.md} +1 -1
- package/README.md +59 -6
- package/dist/config.d.ts +2 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +4 -0
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15 -12
- package/dist/index.js.map +1 -1
- package/dist/mapper.d.ts.map +1 -1
- package/dist/mapper.js +2 -0
- package/dist/mapper.js.map +1 -1
- package/dist/render.d.ts +11 -2
- package/dist/render.d.ts.map +1 -1
- package/dist/render.js +79 -12
- package/dist/render.js.map +1 -1
- package/dist/types.d.ts +22 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +8 -2
package/{LICENSE → LICENSE.md}
RENAMED
|
@@ -18,4 +18,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
|
18
18
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
19
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
20
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
SOFTWARE.
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
# prisma-effect-schema-generator
|
|
2
2
|
|
|
3
|
+
[](https://www.npmjs.com/package/prisma-effect-schema-generator)
|
|
4
|
+
|
|
3
5
|
A standalone [Prisma](https://www.prisma.io) generator that emits
|
|
4
6
|
[Effect Schema](https://effect.website/docs/schema) values for every
|
|
5
7
|
model in your `schema.prisma`. Drop-in runtime validation for your
|
|
6
|
-
database rows
|
|
8
|
+
database rows, perfect for sync engines, RPC layers, or anywhere you
|
|
7
9
|
need to assert that what you read from the DB actually matches what
|
|
8
10
|
your code expects.
|
|
9
11
|
|
|
@@ -59,6 +61,8 @@ npm install --save-dev prisma-effect-schema-generator
|
|
|
59
61
|
npm install effect # the generator emits `Schema.X` from `effect`
|
|
60
62
|
```
|
|
61
63
|
|
|
64
|
+
Published on npm as [`prisma-effect-schema-generator`](https://www.npmjs.com/package/prisma-effect-schema-generator).
|
|
65
|
+
|
|
62
66
|
## Configure
|
|
63
67
|
|
|
64
68
|
Add the generator to your `schema.prisma`:
|
|
@@ -85,6 +89,8 @@ updated) on every regeneration.
|
|
|
85
89
|
| `dateAs` | `"DateFromSelf"` | `"Date"` (ISO-string codec) or `"DateFromSelf"` (accepts native `Date`). |
|
|
86
90
|
| `exportModelNames` | `"true"` | Emit `export const ALL_MODEL_NAMES = [...] as const`. |
|
|
87
91
|
| `exportModelNameType` | `"true"` | Emit `export type ModelName = "X" | "Y"`. |
|
|
92
|
+
| `standardSchemaV1` | `"false"` | Wrap every model/relation schema in `Schema.standardSchemaV1(...)` for Standard Schema compatibility. |
|
|
93
|
+
| `relationColumns` | `"false"` | Emit a separate `Schema.Struct` for each relation that has explicit local foreign-key columns. |
|
|
88
94
|
|
|
89
95
|
```prisma
|
|
90
96
|
generator effect_client {
|
|
@@ -97,6 +103,8 @@ generator effect_client {
|
|
|
97
103
|
dateAs = "DateFromSelf"
|
|
98
104
|
exportModelNames = "true"
|
|
99
105
|
exportModelNameType = "true"
|
|
106
|
+
standardSchemaV1 = "false"
|
|
107
|
+
relationColumns = "false"
|
|
100
108
|
}
|
|
101
109
|
```
|
|
102
110
|
|
|
@@ -123,10 +131,55 @@ Wrappers:
|
|
|
123
131
|
| `field[]` | `Schema.Array(...)` |
|
|
124
132
|
| `field[]?` | `Schema.NullOr(Schema.Array(...))` |
|
|
125
133
|
|
|
126
|
-
Relations (object-typed fields) are skipped
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
134
|
+
Relations (object-typed fields) are skipped from the model's own struct by
|
|
135
|
+
default. If you need schemas for relation foreign keys, enable
|
|
136
|
+
`relationColumns`:
|
|
137
|
+
|
|
138
|
+
```prisma
|
|
139
|
+
generator effect_client {
|
|
140
|
+
provider = "prisma-effect-schema-generator"
|
|
141
|
+
relationColumns = "true"
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
model Post {
|
|
145
|
+
id String @id
|
|
146
|
+
authorId String
|
|
147
|
+
author User @relation(fields: [authorId], references: [id])
|
|
148
|
+
}
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
```ts
|
|
152
|
+
// generated/effect-schemas/index.ts
|
|
153
|
+
export const PostAuthorRelationSchema = Schema.Struct({
|
|
154
|
+
authorId: Schema.String,
|
|
155
|
+
})
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### Standard Schema v1
|
|
159
|
+
|
|
160
|
+
Enable `standardSchemaV1` to have every emitted model/relation schema
|
|
161
|
+
wrapped with `Schema.standardSchemaV1(...)`. The resulting values still
|
|
162
|
+
work as Effect schemas, but they also expose the
|
|
163
|
+
[Standard Schema](https://standardschema.dev/) `~standard` interface so
|
|
164
|
+
libraries like TanStack DB can consume them directly.
|
|
165
|
+
|
|
166
|
+
```prisma
|
|
167
|
+
generator effect_client {
|
|
168
|
+
provider = "prisma-effect-schema-generator"
|
|
169
|
+
standardSchemaV1 = "true"
|
|
170
|
+
}
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
```ts
|
|
174
|
+
export const UserSchema = Schema.standardSchemaV1(Schema.Struct({
|
|
175
|
+
id: Schema.String,
|
|
176
|
+
email: Schema.String,
|
|
177
|
+
}))
|
|
178
|
+
|
|
179
|
+
// Works with Standard Schema consumers:
|
|
180
|
+
UserSchema["~standard"].validate({ id: "u1", email: "a@b.c" })
|
|
181
|
+
// => { value: { id: "u1", email: "a@b.c" } }
|
|
182
|
+
```
|
|
130
183
|
|
|
131
184
|
## Programmatic use
|
|
132
185
|
|
|
@@ -176,4 +229,4 @@ npm run typecheck # tsc --noEmit
|
|
|
176
229
|
|
|
177
230
|
## License
|
|
178
231
|
|
|
179
|
-
MIT
|
|
232
|
+
MIT
|
package/dist/config.d.ts
CHANGED
|
@@ -13,6 +13,8 @@ export declare const DEFAULTS: {
|
|
|
13
13
|
readonly dateAs: "DateFromSelf";
|
|
14
14
|
readonly exportModelNames: true;
|
|
15
15
|
readonly exportModelNameType: true;
|
|
16
|
+
readonly standardSchemaV1: false;
|
|
17
|
+
readonly relationColumns: false;
|
|
16
18
|
};
|
|
17
19
|
type RawConfig = Record<string, string | string[] | boolean | undefined>;
|
|
18
20
|
/**
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD;;;;;GAKG;AACH,eAAO,MAAM,QAAQ
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD;;;;;GAKG;AACH,eAAO,MAAM,QAAQ;;;;;;;;;;CAUe,CAAC;AAErC,KAAK,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,OAAO,GAAG,SAAS,CAAC,CAAC;AAkBzE;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,SAAS,GAAG,SAAS,GAAG,IAAI,GAAG,eAAe,CAajF"}
|
package/dist/config.js
CHANGED
|
@@ -16,6 +16,8 @@ exports.DEFAULTS = {
|
|
|
16
16
|
dateAs: "DateFromSelf",
|
|
17
17
|
exportModelNames: true,
|
|
18
18
|
exportModelNameType: true,
|
|
19
|
+
standardSchemaV1: false,
|
|
20
|
+
relationColumns: false,
|
|
19
21
|
};
|
|
20
22
|
/**
|
|
21
23
|
* Normalise a string-or-boolean into a real boolean.
|
|
@@ -51,6 +53,8 @@ function resolveOptions(raw) {
|
|
|
51
53
|
dateAs: enumOr(cfg.dateAs, exports.DEFAULTS.dateAs, ["Date", "DateFromSelf"]),
|
|
52
54
|
exportModelNames: toBool(cfg.exportModelNames, exports.DEFAULTS.exportModelNames),
|
|
53
55
|
exportModelNameType: toBool(cfg.exportModelNameType, exports.DEFAULTS.exportModelNameType),
|
|
56
|
+
standardSchemaV1: toBool(cfg.standardSchemaV1, exports.DEFAULTS.standardSchemaV1),
|
|
57
|
+
relationColumns: toBool(cfg.relationColumns, exports.DEFAULTS.relationColumns),
|
|
54
58
|
};
|
|
55
59
|
}
|
|
56
60
|
function stringOr(v, fallback) {
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;;AA4CA,wCAaC;AAvDD;;;;;GAKG;AACU,QAAA,QAAQ,GAAG;IACtB,YAAY,EAAE,QAAQ;IACtB,gBAAgB,EAAE,QAAQ;IAC1B,QAAQ,EAAE,gBAAgB;IAC1B,SAAS,EAAE,QAAQ;IACnB,MAAM,EAAE,cAAc;IACtB,gBAAgB,EAAE,IAAI;IACtB,mBAAmB,EAAE,IAAI;IACzB,gBAAgB,EAAE,KAAK;IACvB,eAAe,EAAE,KAAK;CACY,CAAC;AAIrC;;;;;;GAMG;AACH,SAAS,MAAM,CAAC,CAAU,EAAE,QAAiB;IAC3C,IAAI,OAAO,CAAC,KAAK,SAAS;QAAE,OAAO,CAAC,CAAC;IACrC,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;QAC1B,IAAI,CAAC,KAAK,MAAM;YAAE,OAAO,IAAI,CAAC;QAC9B,IAAI,CAAC,KAAK,OAAO;YAAE,OAAO,KAAK,CAAC;IAClC,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;GAKG;AACH,SAAgB,cAAc,CAAC,GAAiC;IAC9D,MAAM,GAAG,GAAG,GAAG,IAAI,EAAE,CAAC;IACtB,OAAO;QACL,YAAY,EAAE,QAAQ,CAAC,GAAG,CAAC,YAAY,EAAE,gBAAQ,CAAC,YAAY,CAAC;QAC/D,gBAAgB,EAAE,QAAQ,CAAC,GAAG,CAAC,gBAAgB,EAAE,gBAAQ,CAAC,gBAAgB,CAAC;QAC3E,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,gBAAQ,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;QAC/E,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,gBAAQ,CAAC,SAAS,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC1E,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,gBAAQ,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QACrE,gBAAgB,EAAE,MAAM,CAAC,GAAG,CAAC,gBAAgB,EAAE,gBAAQ,CAAC,gBAAgB,CAAC;QACzE,mBAAmB,EAAE,MAAM,CAAC,GAAG,CAAC,mBAAmB,EAAE,gBAAQ,CAAC,mBAAmB,CAAC;QAClF,gBAAgB,EAAE,MAAM,CAAC,GAAG,CAAC,gBAAgB,EAAE,gBAAQ,CAAC,gBAAgB,CAAC;QACzE,eAAe,EAAE,MAAM,CAAC,GAAG,CAAC,eAAe,EAAE,gBAAQ,CAAC,eAAe,CAAC;KACvE,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,CAAU,EAAE,QAAgB;IAC5C,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC9D,CAAC;AAED,SAAS,MAAM,CACb,CAAU,EACV,QAAW,EACX,OAAqB;IAErB,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAK,OAA6B,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QACxE,OAAO,CAAM,CAAC;IAChB,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,EACL,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,iBAAiB,GAClB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EACL,uBAAuB,EACvB,yBAAyB,EACzB,YAAY,EACZ,cAAc,EACd,UAAU,GACX,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACzD,YAAY,EACV,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACb,aAAa,EACb,sBAAsB,EACtB,eAAe,GAChB,MAAM,YAAY,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
1
2
|
"use strict";
|
|
2
3
|
/**
|
|
3
4
|
* prisma-effect-schema-generator
|
|
@@ -36,17 +37,19 @@ Object.defineProperty(exports, "DEFAULTS", { enumerable: true, get: function ()
|
|
|
36
37
|
var render_js_2 = require("./render.js");
|
|
37
38
|
Object.defineProperty(exports, "shouldQuoteName", { enumerable: true, get: function () { return render_js_2.shouldQuoteName; } });
|
|
38
39
|
Object.defineProperty(exports, "renderKey", { enumerable: true, get: function () { return render_js_2.renderKey; } });
|
|
39
|
-
// Auto-register when
|
|
40
|
-
//
|
|
41
|
-
//
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
40
|
+
// Auto-register only when this file is the entry point (i.e. Prisma
|
|
41
|
+
// spawned it as the generator binary). When the package is imported as
|
|
42
|
+
// a library we must not start the generator RPC, because that would try
|
|
43
|
+
// to read stdin and write stdout and interfere with the host process.
|
|
44
|
+
//
|
|
45
|
+
// `require.main === module` is the standard CommonJS signal for "run
|
|
46
|
+
// directly". Our compiled output is CommonJS, so this works for the
|
|
47
|
+
// `bin` entry point; it also safely does nothing under ESM/Bundler loads
|
|
48
|
+
// because `require` is not defined there.
|
|
49
|
+
if (typeof process !== "undefined" &&
|
|
50
|
+
process.env.PRISMA_GENERATOR_AUTO_REGISTER !== "0" &&
|
|
51
|
+
typeof require !== "undefined" &&
|
|
52
|
+
require.main === module) {
|
|
53
|
+
(0, generator_js_1.register)();
|
|
51
54
|
}
|
|
52
55
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AACA;;;;;;;;;;;;;;GAcG;;;AAEH,iDAA0C;AAE1C,+CAKwB;AAJtB,wGAAA,QAAQ,OAAA;AACR,4GAAA,YAAY,OAAA;AACZ,0GAAA,UAAU,OAAA;AACV,iHAAA,iBAAiB,OAAA;AAEnB,yCAA2C;AAAlC,yGAAA,YAAY,OAAA;AACrB,yCAMqB;AALnB,oHAAA,uBAAuB,OAAA;AACvB,sHAAA,yBAAyB,OAAA;AACzB,yGAAA,YAAY,OAAA;AACZ,2GAAA,cAAc,OAAA;AACd,uGAAA,UAAU,OAAA;AAEZ,yCAAuD;AAA9C,2GAAA,cAAc,OAAA;AAAE,qGAAA,QAAQ,OAAA;AACjC,yCAAyD;AAAhD,4GAAA,eAAe,OAAA;AAAE,sGAAA,SAAS,OAAA;AAUnC,oEAAoE;AACpE,uEAAuE;AACvE,wEAAwE;AACxE,sEAAsE;AACtE,EAAE;AACF,qEAAqE;AACrE,oEAAoE;AACpE,yEAAyE;AACzE,0CAA0C;AAC1C,IACE,OAAO,OAAO,KAAK,WAAW;IAC9B,OAAO,CAAC,GAAG,CAAC,8BAA8B,KAAK,GAAG;IAClD,OAAO,OAAO,KAAK,WAAW;IAC9B,OAAO,CAAC,IAAI,KAAK,MAAM,EACvB,CAAC;IACD,IAAA,uBAAQ,GAAE,CAAC;AACb,CAAC"}
|
package/dist/mapper.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mapper.d.ts","sourceRoot":"","sources":["../src/mapper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,eAAe,EAChB,MAAM,YAAY,CAAC;AAEpB;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CAI7D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,aAAa,EACpB,SAAS,EAAE,iBAAiB,EAC5B,OAAO,EAAE,eAAe,GACvB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,OAAO,CAAA;CAAE,CAyCxC;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,aAAa,EACpB,SAAS,EAAE,iBAAiB,EAC5B,OAAO,EAAE,eAAe,GACvB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,OAAO,CAAA;CAAE,CAOxC;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,iBAAiB,EAC5B,OAAO,CAAC,EAAE,eAAe,GACxB,MAAM,
|
|
1
|
+
{"version":3,"file":"mapper.d.ts","sourceRoot":"","sources":["../src/mapper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,eAAe,EAChB,MAAM,YAAY,CAAC;AAEpB;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CAI7D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,aAAa,EACpB,SAAS,EAAE,iBAAiB,EAC5B,OAAO,EAAE,eAAe,GACvB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,OAAO,CAAA;CAAE,CAyCxC;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,aAAa,EACpB,SAAS,EAAE,iBAAiB,EAC5B,OAAO,EAAE,eAAe,GACvB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,OAAO,CAAA;CAAE,CAOxC;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,iBAAiB,EAC5B,OAAO,CAAC,EAAE,eAAe,GACxB,MAAM,CAmBR;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAE5D;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,SAAS,aAAa,EAAE,GAAG,aAAa,EAAE,CAE5E"}
|
package/dist/mapper.js
CHANGED
|
@@ -98,6 +98,8 @@ function enumToSchema(enumName, datamodel, options) {
|
|
|
98
98
|
dateAs: "DateFromSelf",
|
|
99
99
|
exportModelNames: true,
|
|
100
100
|
exportModelNameType: true,
|
|
101
|
+
standardSchemaV1: false,
|
|
102
|
+
relationColumns: false,
|
|
101
103
|
});
|
|
102
104
|
const en = datamodel.enums.find((e) => e.name === enumName);
|
|
103
105
|
if (!en || en.values.length === 0) {
|
package/dist/mapper.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mapper.js","sourceRoot":"","sources":["../src/mapper.ts"],"names":[],"mappings":";;AAcA,oCAIC;AAaD,0DA6CC;AAMD,8DAWC;AASD,
|
|
1
|
+
{"version":3,"file":"mapper.js","sourceRoot":"","sources":["../src/mapper.ts"],"names":[],"mappings":"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"}
|
package/dist/render.d.ts
CHANGED
|
@@ -24,10 +24,19 @@ export declare function renderKey(name: string): string;
|
|
|
24
24
|
/**
|
|
25
25
|
* Render a single model as a `Schema.Struct({ ... })` expression.
|
|
26
26
|
*
|
|
27
|
-
* Relation fields (kind === "object") are skipped
|
|
28
|
-
*
|
|
27
|
+
* Relation fields (kind === "object") are skipped from the model's own
|
|
28
|
+
* struct. When `relationColumns` is enabled, those relations are emitted
|
|
29
|
+
* separately by {@link renderRelationSchemas}.
|
|
29
30
|
*/
|
|
30
31
|
export declare function renderModel(model: DMMFModelLike, datamodel: DMMFDatamodelLike, options: ResolvedOptions): string;
|
|
32
|
+
/**
|
|
33
|
+
* Render relation schemas for a model.
|
|
34
|
+
*
|
|
35
|
+
* Only relations with explicit local foreign keys (`relationFromFields`)
|
|
36
|
+
* produce a schema. Others are skipped with a comment explaining why.
|
|
37
|
+
* Each schema is named `{ModelName}{RelationFieldName}RelationSchema`.
|
|
38
|
+
*/
|
|
39
|
+
export declare function renderRelationSchemas(model: DMMFModelLike, datamodel: DMMFDatamodelLike, options: ResolvedOptions): string[];
|
|
31
40
|
/**
|
|
32
41
|
* Render the entire generated module.
|
|
33
42
|
*
|
package/dist/render.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,iBAAiB,
|
|
1
|
+
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,iBAAiB,EAEjB,aAAa,EACb,eAAe,EAChB,MAAM,YAAY,CAAC;AAmBpB;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGrD;AAED;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE9C;AAuCD;;;;;;GAMG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,aAAa,EACpB,SAAS,EAAE,iBAAiB,EAC5B,OAAO,EAAE,eAAe,GACvB,MAAM,CA2BR;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,aAAa,EACpB,SAAS,EAAE,iBAAiB,EAC5B,OAAO,EAAE,eAAe,GACvB,MAAM,EAAE,CA0CV;AAqCD;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,SAAS,EAAE,iBAAiB,EAC5B,OAAO,EAAE,eAAe,GACvB,MAAM,CAqCR"}
|
package/dist/render.js
CHANGED
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.shouldQuoteName = shouldQuoteName;
|
|
4
4
|
exports.renderKey = renderKey;
|
|
5
5
|
exports.renderModel = renderModel;
|
|
6
|
+
exports.renderRelationSchemas = renderRelationSchemas;
|
|
6
7
|
exports.renderModule = renderModule;
|
|
7
8
|
const mapper_js_1 = require("./mapper.js");
|
|
8
9
|
const RESERVED_IDENTIFIERS = new Set([
|
|
@@ -61,28 +62,46 @@ function localBinding(options) {
|
|
|
61
62
|
? "Schema"
|
|
62
63
|
: options.effectImportName;
|
|
63
64
|
}
|
|
65
|
+
/**
|
|
66
|
+
* Wrap a schema expression in `Schema.standardSchemaV1(...)` when the
|
|
67
|
+
* option is enabled, otherwise return it unchanged.
|
|
68
|
+
*/
|
|
69
|
+
function wrapSchema(expr, options) {
|
|
70
|
+
if (!options.standardSchemaV1)
|
|
71
|
+
return expr;
|
|
72
|
+
const binding = localBinding(options);
|
|
73
|
+
return `${binding}.standardSchemaV1(${expr})`;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Render a single scalar/enum/unsupported field as a key/value pair
|
|
77
|
+
* suitable for a `Schema.Struct` literal.
|
|
78
|
+
*/
|
|
79
|
+
function renderStructField(field, datamodel, options) {
|
|
80
|
+
const { expr } = (0, mapper_js_1.prismaFieldToEffectSchema)(field, datamodel, options);
|
|
81
|
+
const key = renderKey(field.name);
|
|
82
|
+
return ` ${key}: ${expr},`;
|
|
83
|
+
}
|
|
64
84
|
/**
|
|
65
85
|
* Render a single model as a `Schema.Struct({ ... })` expression.
|
|
66
86
|
*
|
|
67
|
-
* Relation fields (kind === "object") are skipped
|
|
68
|
-
*
|
|
87
|
+
* Relation fields (kind === "object") are skipped from the model's own
|
|
88
|
+
* struct. When `relationColumns` is enabled, those relations are emitted
|
|
89
|
+
* separately by {@link renderRelationSchemas}.
|
|
69
90
|
*/
|
|
70
91
|
function renderModel(model, datamodel, options) {
|
|
71
92
|
const lines = [];
|
|
72
|
-
const binding = localBinding(options);
|
|
73
93
|
const unsupportedComments = [];
|
|
74
|
-
|
|
94
|
+
const structExpr = `${localBinding(options)}.Struct({\n${model.fields
|
|
95
|
+
.filter(mapper_js_1.isIncludeField)
|
|
96
|
+
.map((f) => renderStructField(f, datamodel, options))
|
|
97
|
+
.join("\n")}\n})`;
|
|
98
|
+
const wrapped = wrapSchema(structExpr, options);
|
|
99
|
+
lines.push(`export const ${model.name}Schema = ${wrapped}`);
|
|
75
100
|
for (const field of model.fields) {
|
|
76
|
-
if (!(0, mapper_js_1.isIncludeField)(field))
|
|
101
|
+
if (!(0, mapper_js_1.isIncludeField)(field) || field.kind !== "unsupported")
|
|
77
102
|
continue;
|
|
78
|
-
|
|
79
|
-
const key = renderKey(field.name);
|
|
80
|
-
lines.push(` ${key}: ${expr},`);
|
|
81
|
-
if (unsupported && field.kind === "unsupported") {
|
|
82
|
-
unsupportedComments.push(`// - ${field.name}: Prisma marks this field as "unsupported" -- typed as Schema.Unknown.`);
|
|
83
|
-
}
|
|
103
|
+
unsupportedComments.push(`// - ${field.name}: Prisma marks this field as "unsupported" -- typed as Schema.Unknown.`);
|
|
84
104
|
}
|
|
85
|
-
lines.push("})");
|
|
86
105
|
if (unsupportedComments.length > 0) {
|
|
87
106
|
lines.unshift(`// WARNING: ${model.name} contains unsupported fields:`);
|
|
88
107
|
for (const c of unsupportedComments)
|
|
@@ -92,6 +111,53 @@ function renderModel(model, datamodel, options) {
|
|
|
92
111
|
lines.push("");
|
|
93
112
|
return lines.join("\n");
|
|
94
113
|
}
|
|
114
|
+
/**
|
|
115
|
+
* Render relation schemas for a model.
|
|
116
|
+
*
|
|
117
|
+
* Only relations with explicit local foreign keys (`relationFromFields`)
|
|
118
|
+
* produce a schema. Others are skipped with a comment explaining why.
|
|
119
|
+
* Each schema is named `{ModelName}{RelationFieldName}RelationSchema`.
|
|
120
|
+
*/
|
|
121
|
+
function renderRelationSchemas(model, datamodel, options) {
|
|
122
|
+
if (!options.relationColumns)
|
|
123
|
+
return [];
|
|
124
|
+
const lines = [];
|
|
125
|
+
const binding = localBinding(options);
|
|
126
|
+
for (const field of model.fields) {
|
|
127
|
+
if (field.kind !== "object")
|
|
128
|
+
continue;
|
|
129
|
+
const fromFields = field.relationFromFields;
|
|
130
|
+
if (!fromFields || fromFields.length === 0) {
|
|
131
|
+
lines.push(`// ${model.name}.${field.name}: relation has no local foreign-key columns; skipping relation schema.`);
|
|
132
|
+
continue;
|
|
133
|
+
}
|
|
134
|
+
const relationName = `${model.name}${capitalize(field.name)}RelationSchema`;
|
|
135
|
+
const fieldMap = new Map(model.fields.map((f) => [f.name, f]));
|
|
136
|
+
const relationFields = fromFields
|
|
137
|
+
.map((name) => {
|
|
138
|
+
const scalar = fieldMap.get(name);
|
|
139
|
+
if (!scalar) {
|
|
140
|
+
return {
|
|
141
|
+
name,
|
|
142
|
+
line: ` ${renderKey(name)}: ${binding}.Unknown,`,
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
return {
|
|
146
|
+
name,
|
|
147
|
+
line: renderStructField(scalar, datamodel, options),
|
|
148
|
+
};
|
|
149
|
+
});
|
|
150
|
+
const structExpr = `${binding}.Struct({\n${relationFields.map((f) => f.line).join("\n")}\n})`;
|
|
151
|
+
const wrapped = wrapSchema(structExpr, options);
|
|
152
|
+
lines.push(`export const ${relationName} = ${wrapped}`, "");
|
|
153
|
+
}
|
|
154
|
+
return lines;
|
|
155
|
+
}
|
|
156
|
+
function capitalize(s) {
|
|
157
|
+
if (s.length === 0)
|
|
158
|
+
return s;
|
|
159
|
+
return s[0].toUpperCase() + s.slice(1);
|
|
160
|
+
}
|
|
95
161
|
/**
|
|
96
162
|
* Render the helper exports at the bottom of the file:
|
|
97
163
|
*
|
|
@@ -138,6 +204,7 @@ function renderModule(datamodel, options) {
|
|
|
138
204
|
const models = (0, mapper_js_1.sortModels)(datamodel.models);
|
|
139
205
|
for (const m of models) {
|
|
140
206
|
lines.push(renderModel(m, datamodel, options));
|
|
207
|
+
lines.push(...renderRelationSchemas(m, datamodel, options));
|
|
141
208
|
}
|
|
142
209
|
lines.push(...renderModelHelpers(models, options));
|
|
143
210
|
return lines.join("\n");
|
package/dist/render.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.js","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -29,6 +29,16 @@ export interface GeneratorOptionsConfig {
|
|
|
29
29
|
* Set to `"false"` to disable.
|
|
30
30
|
*/
|
|
31
31
|
readonly exportModelNameType?: boolean | string;
|
|
32
|
+
/**
|
|
33
|
+
* Wrap every emitted model/relation schema in `Schema.standardSchemaV1(...)`.
|
|
34
|
+
* Default `false`.
|
|
35
|
+
*/
|
|
36
|
+
readonly standardSchemaV1?: boolean | string;
|
|
37
|
+
/**
|
|
38
|
+
* Emit a separate `Schema.Struct` for each relation field that has local
|
|
39
|
+
* foreign-key columns (`relationFromFields`). Default `false`.
|
|
40
|
+
*/
|
|
41
|
+
readonly relationColumns?: boolean | string;
|
|
32
42
|
}
|
|
33
43
|
/**
|
|
34
44
|
* Fully-resolved options (defaults applied) used internally by the renderer.
|
|
@@ -41,6 +51,8 @@ export interface ResolvedOptions {
|
|
|
41
51
|
readonly dateAs: "Date" | "DateFromSelf";
|
|
42
52
|
readonly exportModelNames: boolean;
|
|
43
53
|
readonly exportModelNameType: boolean;
|
|
54
|
+
readonly standardSchemaV1: boolean;
|
|
55
|
+
readonly relationColumns: boolean;
|
|
44
56
|
}
|
|
45
57
|
/**
|
|
46
58
|
* The shape of an `@prisma/dmmf` field that we care about.
|
|
@@ -58,6 +70,16 @@ export interface DMMFFieldLike {
|
|
|
58
70
|
readonly isId?: boolean;
|
|
59
71
|
readonly hasDefaultValue?: boolean;
|
|
60
72
|
readonly dbName?: string | null;
|
|
73
|
+
/**
|
|
74
|
+
* For relation fields: the local scalar fields that form the foreign key.
|
|
75
|
+
* E.g. `author User @relation(fields: [authorId], references: [id])`
|
|
76
|
+
* gives `relationFromFields: ["authorId"]`.
|
|
77
|
+
*/
|
|
78
|
+
readonly relationFromFields?: readonly string[];
|
|
79
|
+
/**
|
|
80
|
+
* For relation fields: the target fields on the related model.
|
|
81
|
+
*/
|
|
82
|
+
readonly relationToFields?: readonly string[];
|
|
61
83
|
}
|
|
62
84
|
export interface DMMFModelLike {
|
|
63
85
|
readonly name: string;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,WAAW,sBAAsB;IACrC,+CAA+C;IAC/C,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,6DAA6D;IAC7D,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,mEAAmE;IACnE,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,4EAA4E;IAC5E,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,GAAG,gBAAgB,CAAC;IAChD,qEAAqE;IACrE,QAAQ,CAAC,SAAS,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IACzC,oEAAoE;IACpE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,cAAc,CAAC;IAC1C;;;OAGG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC7C;;;OAGG;IACH,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "prisma-effect-schema-generator",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "Prisma generator that emits Effect Schema values for every model — drop-in validation for your database rows.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"prisma",
|
|
@@ -34,6 +34,9 @@
|
|
|
34
34
|
},
|
|
35
35
|
"./package.json": "./package.json"
|
|
36
36
|
},
|
|
37
|
+
"bin": {
|
|
38
|
+
"prisma-effect-schema-generator": "dist/index.js"
|
|
39
|
+
},
|
|
37
40
|
"files": [
|
|
38
41
|
"dist",
|
|
39
42
|
"README.md",
|
|
@@ -41,9 +44,12 @@
|
|
|
41
44
|
],
|
|
42
45
|
"scripts": {
|
|
43
46
|
"build": "tsc -p tsconfig.build.json",
|
|
47
|
+
"postbuild": "chmod +x dist/index.js",
|
|
44
48
|
"clean": "rm -rf dist",
|
|
45
|
-
"prepublishOnly": "npm run clean && npm run build && npm test",
|
|
49
|
+
"prepublishOnly": "npm run clean && npm run build && npm run test:unit",
|
|
46
50
|
"test": "vitest run",
|
|
51
|
+
"test:unit": "vitest run --exclude tests/e2e.test.ts",
|
|
52
|
+
"test:e2e": "vitest run tests/e2e.test.ts",
|
|
47
53
|
"test:watch": "vitest",
|
|
48
54
|
"typecheck": "tsc --noEmit",
|
|
49
55
|
"lint": "echo 'no linter configured'"
|