@generazioneai/genquery 0.1.1 → 0.3.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.
Files changed (49) hide show
  1. package/dist/adapters/prisma/adapter.d.ts +40 -0
  2. package/dist/adapters/prisma/adapter.d.ts.map +1 -0
  3. package/dist/adapters/prisma/adapter.js +92 -0
  4. package/dist/adapters/prisma/adapter.js.map +1 -0
  5. package/dist/adapters/prisma/create.d.ts +28 -0
  6. package/dist/adapters/prisma/create.d.ts.map +1 -0
  7. package/dist/adapters/prisma/create.js +28 -0
  8. package/dist/adapters/prisma/create.js.map +1 -0
  9. package/dist/adapters/prisma/index.d.ts +5 -0
  10. package/dist/adapters/prisma/index.d.ts.map +1 -0
  11. package/dist/adapters/prisma/index.js +10 -0
  12. package/dist/adapters/prisma/index.js.map +1 -0
  13. package/dist/adapters/prisma/schema-from-prisma.d.ts +43 -0
  14. package/dist/adapters/prisma/schema-from-prisma.d.ts.map +1 -0
  15. package/dist/adapters/prisma/schema-from-prisma.js +152 -0
  16. package/dist/adapters/prisma/schema-from-prisma.js.map +1 -0
  17. package/dist/adapters/prisma/select.d.ts +18 -0
  18. package/dist/adapters/prisma/select.d.ts.map +1 -0
  19. package/dist/adapters/prisma/select.js +94 -0
  20. package/dist/adapters/prisma/select.js.map +1 -0
  21. package/dist/adapters/prisma/types.d.ts +85 -0
  22. package/dist/adapters/prisma/types.d.ts.map +1 -0
  23. package/dist/adapters/prisma/types.js +10 -0
  24. package/dist/adapters/prisma/types.js.map +1 -0
  25. package/dist/adapters/prisma/where.d.ts +13 -0
  26. package/dist/adapters/prisma/where.d.ts.map +1 -0
  27. package/dist/adapters/prisma/where.js +171 -0
  28. package/dist/adapters/prisma/where.js.map +1 -0
  29. package/dist/adapters/typeorm/schema-from-typeorm.js +27 -0
  30. package/dist/adapters/typeorm/schema-from-typeorm.js.map +1 -1
  31. package/dist/adapters/typeorm/where.d.ts.map +1 -1
  32. package/dist/adapters/typeorm/where.js +15 -4
  33. package/dist/adapters/typeorm/where.js.map +1 -1
  34. package/dist/engine.d.ts +5 -2
  35. package/dist/engine.d.ts.map +1 -1
  36. package/dist/engine.js.map +1 -1
  37. package/dist/parsed.d.ts +7 -0
  38. package/dist/parsed.d.ts.map +1 -1
  39. package/dist/parser.d.ts.map +1 -1
  40. package/dist/parser.js +26 -0
  41. package/dist/parser.js.map +1 -1
  42. package/dist/schema.d.ts +2 -2
  43. package/dist/schema.d.ts.map +1 -1
  44. package/dist/schema.js.map +1 -1
  45. package/dist/tests/prisma-adapter.test.d.ts +2 -0
  46. package/dist/tests/prisma-adapter.test.d.ts.map +1 -0
  47. package/dist/tests/prisma-adapter.test.js +351 -0
  48. package/dist/tests/prisma-adapter.test.js.map +1 -0
  49. package/package.json +13 -4
@@ -0,0 +1,40 @@
1
+ import type { PaginatedResult, ParsedQuery } from "../../parsed";
2
+ import type { Schema } from "../../schema";
3
+ import type { Adapter } from "../base";
4
+ import type { PrismaFindManyArgs, PrismaModelDelegate } from "./types";
5
+ export interface PrismaAdapterOptions {
6
+ /**
7
+ * When `pagination.showTotal` is true, `execute` issues a parallel `count`
8
+ * query. Set to `false` to run them sequentially (useful when the underlying
9
+ * Prisma client doesn't pool well under concurrent reads). Defaults to true.
10
+ */
11
+ parallelCount?: boolean;
12
+ }
13
+ /**
14
+ * Applies a parsed GenQuery to a Prisma model delegate (e.g. `prisma.user`).
15
+ * Produces a Prisma `findMany` / `findFirst` args object and, on `execute`,
16
+ * runs the query and an optional parallel `count`.
17
+ *
18
+ * Typical use through the engine:
19
+ *
20
+ * const result = await engine.run(input, "User", prisma.user);
21
+ *
22
+ * The root entity name must be passed explicitly — Prisma delegates don't
23
+ * expose their model name on a stable public API, so `getRootEntity` is not
24
+ * implemented.
25
+ */
26
+ export declare class PrismaAdapter implements Adapter<PrismaModelDelegate, PrismaFindManyArgs> {
27
+ readonly name = "prisma";
28
+ readonly schema: Schema;
29
+ private readonly options;
30
+ constructor(schema: Schema, options?: PrismaAdapterOptions);
31
+ apply(_delegate: PrismaModelDelegate, query: ParsedQuery): PrismaFindManyArgs;
32
+ /**
33
+ * Build a Prisma args object from a parsed query without needing a delegate.
34
+ * Useful for tests / callers who already hold the args path.
35
+ */
36
+ buildArgs(query: ParsedQuery): PrismaFindManyArgs;
37
+ execute(delegate: PrismaModelDelegate, query: ParsedQuery): Promise<PaginatedResult<unknown>>;
38
+ private build;
39
+ }
40
+ //# sourceMappingURL=adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/prisma/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAEvC,OAAO,KAAK,EACV,kBAAkB,EAClB,mBAAmB,EAEpB,MAAM,SAAS,CAAC;AAGjB,MAAM,WAAW,oBAAoB;IACnC;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;;;;;;;;;;;GAYG;AACH,qBAAa,aACX,YAAW,OAAO,CAAC,mBAAmB,EAAE,kBAAkB,CAAC;IAE3D,QAAQ,CAAC,IAAI,YAAY;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuB;gBAEnC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,oBAAyB;IAK9D,KAAK,CACH,SAAS,EAAE,mBAAmB,EAC9B,KAAK,EAAE,WAAW,GACjB,kBAAkB;IAIrB;;;OAGG;IACH,SAAS,CAAC,KAAK,EAAE,WAAW,GAAG,kBAAkB;IAI3C,OAAO,CACX,QAAQ,EAAE,mBAAmB,EAC7B,KAAK,EAAE,WAAW,GACjB,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IAyBpC,OAAO,CAAC,KAAK;CAsBd"}
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PrismaAdapter = void 0;
4
+ const select_1 = require("./select");
5
+ const where_1 = require("./where");
6
+ /**
7
+ * Applies a parsed GenQuery to a Prisma model delegate (e.g. `prisma.user`).
8
+ * Produces a Prisma `findMany` / `findFirst` args object and, on `execute`,
9
+ * runs the query and an optional parallel `count`.
10
+ *
11
+ * Typical use through the engine:
12
+ *
13
+ * const result = await engine.run(input, "User", prisma.user);
14
+ *
15
+ * The root entity name must be passed explicitly — Prisma delegates don't
16
+ * expose their model name on a stable public API, so `getRootEntity` is not
17
+ * implemented.
18
+ */
19
+ class PrismaAdapter {
20
+ constructor(schema, options = {}) {
21
+ this.name = "prisma";
22
+ this.schema = schema;
23
+ this.options = options;
24
+ }
25
+ apply(_delegate, query) {
26
+ return this.build(query);
27
+ }
28
+ /**
29
+ * Build a Prisma args object from a parsed query without needing a delegate.
30
+ * Useful for tests / callers who already hold the args path.
31
+ */
32
+ buildArgs(query) {
33
+ return this.build(query);
34
+ }
35
+ async execute(delegate, query) {
36
+ const args = this.build(query);
37
+ const { kind, showNumber, showTotal } = query.pagination;
38
+ const parallel = this.options.parallelCount ?? true;
39
+ const dataPromise = kind === "first"
40
+ ? delegate.findFirst(args).then((row) => (row ? [row] : []))
41
+ : delegate.findMany(args);
42
+ let total;
43
+ if (showTotal && parallel) {
44
+ const [data, count] = await Promise.all([
45
+ dataPromise,
46
+ delegate.count({ where: args.where }),
47
+ ]);
48
+ total = count;
49
+ return assemble(data, showNumber, showTotal, total);
50
+ }
51
+ const data = await dataPromise;
52
+ if (showTotal)
53
+ total = await delegate.count({ where: args.where });
54
+ return assemble(data, showNumber, showTotal, total);
55
+ }
56
+ build(query) {
57
+ const args = {};
58
+ if (query.searchBy) {
59
+ const where = (0, where_1.buildWhere)(query.searchBy, this.schema, query.rootEntity);
60
+ if (Object.keys(where).length > 0)
61
+ args.where = where;
62
+ }
63
+ if (query.orderBy) {
64
+ args.orderBy = {
65
+ [query.orderBy.field]: query.orderBy.order,
66
+ };
67
+ }
68
+ applyPagination(args, query.pagination);
69
+ (0, select_1.applySelectAndInclude)(args, query, this.schema);
70
+ return args;
71
+ }
72
+ }
73
+ exports.PrismaAdapter = PrismaAdapter;
74
+ function applyPagination(args, pagination) {
75
+ if (pagination.kind === "all")
76
+ return;
77
+ if (pagination.kind === "first") {
78
+ args.take = 1;
79
+ return;
80
+ }
81
+ args.skip = pagination.page * pagination.perPage;
82
+ args.take = pagination.perPage;
83
+ }
84
+ function assemble(data, showNumber, showTotal, total) {
85
+ const result = { data };
86
+ if (showNumber)
87
+ result.current = data.length;
88
+ if (showTotal)
89
+ result.total = total;
90
+ return result;
91
+ }
92
+ //# sourceMappingURL=adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/adapters/prisma/adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import { GenQueryEngine } from "../../engine";
2
+ import { type PrismaAdapterOptions } from "./adapter";
3
+ import { type SchemaFromPrismaOptions } from "./schema-from-prisma";
4
+ import type { PrismaDatamodel, PrismaFindManyArgs, PrismaModelDelegate } from "./types";
5
+ export interface CreatePrismaEngineOptions {
6
+ /** Options forwarded to `schemaFromPrisma` (model filter, overrides, ...). */
7
+ schema?: SchemaFromPrismaOptions;
8
+ /** Options forwarded to the `PrismaAdapter` constructor (parallelCount, ...). */
9
+ adapter?: PrismaAdapterOptions;
10
+ }
11
+ /**
12
+ * One-line setup mirroring `createTypeORMEngine`: read the schema from a
13
+ * Prisma DMMF datamodel, build the adapter and the engine.
14
+ *
15
+ * import { Prisma, PrismaClient } from "@prisma/client";
16
+ * const prisma = new PrismaClient();
17
+ * const engine = createPrismaEngine(Prisma.dmmf.datamodel);
18
+ * await engine.run(input, "User", prisma.user);
19
+ *
20
+ * Restrict to specific models or override scalar types:
21
+ *
22
+ * const engine = createPrismaEngine(Prisma.dmmf.datamodel, {
23
+ * schema: { models: ["User", "Post"] },
24
+ * adapter: { parallelCount: false },
25
+ * });
26
+ */
27
+ export declare function createPrismaEngine(datamodel: PrismaDatamodel, options?: CreatePrismaEngineOptions): GenQueryEngine<PrismaModelDelegate, PrismaFindManyArgs>;
28
+ //# sourceMappingURL=create.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/adapters/prisma/create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAiB,KAAK,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACrE,OAAO,EAEL,KAAK,uBAAuB,EAC7B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EACV,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,SAAS,CAAC;AAEjB,MAAM,WAAW,yBAAyB;IACxC,8EAA8E;IAC9E,MAAM,CAAC,EAAE,uBAAuB,CAAC;IACjC,iFAAiF;IACjF,OAAO,CAAC,EAAE,oBAAoB,CAAC;CAChC;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,eAAe,EAC1B,OAAO,GAAE,yBAA8B,GACtC,cAAc,CAAC,mBAAmB,EAAE,kBAAkB,CAAC,CAIzD"}
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createPrismaEngine = createPrismaEngine;
4
+ const engine_1 = require("../../engine");
5
+ const adapter_1 = require("./adapter");
6
+ const schema_from_prisma_1 = require("./schema-from-prisma");
7
+ /**
8
+ * One-line setup mirroring `createTypeORMEngine`: read the schema from a
9
+ * Prisma DMMF datamodel, build the adapter and the engine.
10
+ *
11
+ * import { Prisma, PrismaClient } from "@prisma/client";
12
+ * const prisma = new PrismaClient();
13
+ * const engine = createPrismaEngine(Prisma.dmmf.datamodel);
14
+ * await engine.run(input, "User", prisma.user);
15
+ *
16
+ * Restrict to specific models or override scalar types:
17
+ *
18
+ * const engine = createPrismaEngine(Prisma.dmmf.datamodel, {
19
+ * schema: { models: ["User", "Post"] },
20
+ * adapter: { parallelCount: false },
21
+ * });
22
+ */
23
+ function createPrismaEngine(datamodel, options = {}) {
24
+ const schema = (0, schema_from_prisma_1.schemaFromPrisma)(datamodel, options.schema);
25
+ const adapter = new adapter_1.PrismaAdapter(schema, options.adapter);
26
+ return new engine_1.GenQueryEngine({ adapter });
27
+ }
28
+ //# sourceMappingURL=create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/adapters/prisma/create.ts"],"names":[],"mappings":";;AAmCA,gDAOC;AA1CD,yCAA8C;AAC9C,uCAAqE;AACrE,6DAG8B;AAc9B;;;;;;;;;;;;;;;GAeG;AACH,SAAgB,kBAAkB,CAChC,SAA0B,EAC1B,UAAqC,EAAE;IAEvC,MAAM,MAAM,GAAG,IAAA,qCAAgB,EAAC,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAC3D,MAAM,OAAO,GAAG,IAAI,uBAAa,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3D,OAAO,IAAI,uBAAc,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;AACzC,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { PrismaAdapter, type PrismaAdapterOptions } from "./adapter";
2
+ export { schemaFromPrisma, type SchemaFromPrismaOptions, } from "./schema-from-prisma";
3
+ export { createPrismaEngine, type CreatePrismaEngineOptions, } from "./create";
4
+ export type { PrismaDatamodel, PrismaEnumDef, PrismaFieldDef, PrismaFindManyArgs, PrismaInclude, PrismaModelDef, PrismaModelDelegate, PrismaSelect, PrismaWhere, } from "./types";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/prisma/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,KAAK,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACrE,OAAO,EACL,gBAAgB,EAChB,KAAK,uBAAuB,GAC7B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,kBAAkB,EAClB,KAAK,yBAAyB,GAC/B,MAAM,UAAU,CAAC;AAClB,YAAY,EACV,eAAe,EACf,aAAa,EACb,cAAc,EACd,kBAAkB,EAClB,aAAa,EACb,cAAc,EACd,mBAAmB,EACnB,YAAY,EACZ,WAAW,GACZ,MAAM,SAAS,CAAC"}
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createPrismaEngine = exports.schemaFromPrisma = exports.PrismaAdapter = void 0;
4
+ var adapter_1 = require("./adapter");
5
+ Object.defineProperty(exports, "PrismaAdapter", { enumerable: true, get: function () { return adapter_1.PrismaAdapter; } });
6
+ var schema_from_prisma_1 = require("./schema-from-prisma");
7
+ Object.defineProperty(exports, "schemaFromPrisma", { enumerable: true, get: function () { return schema_from_prisma_1.schemaFromPrisma; } });
8
+ var create_1 = require("./create");
9
+ Object.defineProperty(exports, "createPrismaEngine", { enumerable: true, get: function () { return create_1.createPrismaEngine; } });
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/prisma/index.ts"],"names":[],"mappings":";;;AAAA,qCAAqE;AAA5D,wGAAA,aAAa,OAAA;AACtB,2DAG8B;AAF5B,sHAAA,gBAAgB,OAAA;AAGlB,mCAGkB;AAFhB,4GAAA,kBAAkB,OAAA"}
@@ -0,0 +1,43 @@
1
+ import type { FieldType, Schema } from "../../schema";
2
+ import type { PrismaDatamodel } from "./types";
3
+ /** FieldTypes that don't require additional metadata (excludes `"enum"`). */
4
+ type ScalarFieldType = Exclude<FieldType, "enum">;
5
+ export interface SchemaFromPrismaOptions {
6
+ /**
7
+ * Restrict to specific models. Accepts model names. Defaults to all models
8
+ * in the datamodel.
9
+ */
10
+ models?: readonly string[];
11
+ /**
12
+ * Per-model, per-field type overrides. Use this to map Prisma scalars that
13
+ * the default mapper skips (e.g. `Json`, `Bytes`) to a genquery FieldType.
14
+ *
15
+ * overrides: { User: { metadata: "string" } }
16
+ */
17
+ overrides?: Record<string, Record<string, ScalarFieldType>>;
18
+ /**
19
+ * Called when a scalar type is not recognized by the default mapping.
20
+ * Return a FieldType to include the field, or `undefined` to skip it.
21
+ * Defaults to skipping unknown types.
22
+ */
23
+ fallback?: (modelName: string, fieldName: string, scalarType: string) => ScalarFieldType | undefined;
24
+ }
25
+ /**
26
+ * Build a genquery `Schema` from a Prisma DMMF datamodel. Accepts the
27
+ * datamodel structurally so the lib doesn't depend on a specific Prisma
28
+ * version — pass `Prisma.dmmf.datamodel` (or whatever your version exposes)
29
+ * directly.
30
+ *
31
+ * import { Prisma } from "@prisma/client";
32
+ * const schema = schemaFromPrisma(Prisma.dmmf.datamodel);
33
+ * const adapter = new PrismaAdapter(schema);
34
+ *
35
+ * Restrict to specific models:
36
+ *
37
+ * const schema = schemaFromPrisma(Prisma.dmmf.datamodel, {
38
+ * models: ["User", "Post"],
39
+ * });
40
+ */
41
+ export declare function schemaFromPrisma(datamodel: PrismaDatamodel, options?: SchemaFromPrismaOptions): Schema;
42
+ export {};
43
+ //# sourceMappingURL=schema-from-prisma.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-from-prisma.d.ts","sourceRoot":"","sources":["../../../src/adapters/prisma/schema-from-prisma.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,SAAS,EAET,MAAM,EACP,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EACV,eAAe,EAIhB,MAAM,SAAS,CAAC;AAEjB,6EAA6E;AAC7E,KAAK,eAAe,GAAG,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;AAElD,MAAM,WAAW,uBAAuB;IACtC;;;OAGG;IACH,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC;IAC5D;;;;OAIG;IACH,QAAQ,CAAC,EAAE,CACT,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,KACf,eAAe,GAAG,SAAS,CAAC;CAClC;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,eAAe,EAC1B,OAAO,GAAE,uBAA4B,GACpC,MAAM,CAaR"}
@@ -0,0 +1,152 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.schemaFromPrisma = schemaFromPrisma;
4
+ /**
5
+ * Build a genquery `Schema` from a Prisma DMMF datamodel. Accepts the
6
+ * datamodel structurally so the lib doesn't depend on a specific Prisma
7
+ * version — pass `Prisma.dmmf.datamodel` (or whatever your version exposes)
8
+ * directly.
9
+ *
10
+ * import { Prisma } from "@prisma/client";
11
+ * const schema = schemaFromPrisma(Prisma.dmmf.datamodel);
12
+ * const adapter = new PrismaAdapter(schema);
13
+ *
14
+ * Restrict to specific models:
15
+ *
16
+ * const schema = schemaFromPrisma(Prisma.dmmf.datamodel, {
17
+ * models: ["User", "Post"],
18
+ * });
19
+ */
20
+ function schemaFromPrisma(datamodel, options = {}) {
21
+ const enumValues = indexEnums(datamodel.enums);
22
+ const filter = options.models;
23
+ const selected = filter
24
+ ? datamodel.models.filter((m) => filter.includes(m.name))
25
+ : datamodel.models;
26
+ const entities = {};
27
+ for (const model of selected) {
28
+ entities[model.name] = buildEntity(model, enumValues, options);
29
+ }
30
+ return { entities };
31
+ }
32
+ function indexEnums(enums) {
33
+ const out = new Map();
34
+ for (const e of enums) {
35
+ out.set(e.name, e.values.map((v) => v.name));
36
+ }
37
+ return out;
38
+ }
39
+ function buildEntity(model, enumValues, options) {
40
+ const fields = {};
41
+ const relations = {};
42
+ const overrides = options.overrides?.[model.name] ?? {};
43
+ const keyFields = collectKeyFieldNames(model);
44
+ for (const f of model.fields) {
45
+ if (f.kind === "object") {
46
+ relations[f.name] = {
47
+ target: f.type,
48
+ kind: f.isList ? "many" : "one",
49
+ };
50
+ continue;
51
+ }
52
+ if (f.kind === "unsupported")
53
+ continue;
54
+ const explicit = overrides[f.name];
55
+ if (explicit) {
56
+ fields[f.name] = {
57
+ type: explicit,
58
+ nullable: !f.isRequired,
59
+ };
60
+ continue;
61
+ }
62
+ if (f.kind === "enum") {
63
+ const values = enumValues.get(f.type);
64
+ if (!values)
65
+ continue;
66
+ fields[f.name] = {
67
+ type: "enum",
68
+ values: values.slice(),
69
+ nullable: !f.isRequired,
70
+ };
71
+ continue;
72
+ }
73
+ // Primary keys and relation foreign keys are matched by exact equality
74
+ // regardless of the underlying scalar type.
75
+ if (keyFields.has(f.name)) {
76
+ fields[f.name] = { type: "id", nullable: !f.isRequired };
77
+ continue;
78
+ }
79
+ // scalar
80
+ const fieldType = mapScalar(f, model.name, options);
81
+ if (!fieldType)
82
+ continue;
83
+ fields[f.name] = {
84
+ type: fieldType,
85
+ nullable: !f.isRequired,
86
+ };
87
+ }
88
+ // Add virtual override fields not present in the model.
89
+ for (const [name, type] of Object.entries(overrides)) {
90
+ if (!fields[name])
91
+ fields[name] = { type };
92
+ }
93
+ const definition = {
94
+ name: model.name,
95
+ fields,
96
+ };
97
+ if (Object.keys(relations).length > 0)
98
+ definition.relations = relations;
99
+ const pk = derivePrimaryKey(model);
100
+ if (pk)
101
+ definition.primaryKey = pk;
102
+ return definition;
103
+ }
104
+ function collectKeyFieldNames(model) {
105
+ const names = new Set();
106
+ for (const f of model.fields) {
107
+ if (f.isId)
108
+ names.add(f.name);
109
+ if (f.kind === "object" && f.relationFromFields) {
110
+ for (const fk of f.relationFromFields)
111
+ names.add(fk);
112
+ }
113
+ }
114
+ const composite = model.primaryKey?.fields;
115
+ if (composite) {
116
+ for (const name of composite)
117
+ names.add(name);
118
+ }
119
+ return names;
120
+ }
121
+ function derivePrimaryKey(model) {
122
+ const idField = model.fields.find((f) => f.isId === true);
123
+ if (idField)
124
+ return idField.name;
125
+ const pk = model.primaryKey?.fields?.[0];
126
+ if (pk)
127
+ return pk;
128
+ // Fallback for minimal DMMF shapes (Prisma 7+) that strip `isId`. The
129
+ // convention in `schema.prisma` is to name the PK field `id`.
130
+ const conventionalId = model.fields.find((f) => f.name === "id");
131
+ return conventionalId?.name;
132
+ }
133
+ function mapScalar(field, modelName, options) {
134
+ if (field.isList)
135
+ return undefined; // genquery doesn't model scalar arrays
136
+ switch (field.type) {
137
+ case "String":
138
+ return "string";
139
+ case "Int":
140
+ case "Float":
141
+ case "Decimal":
142
+ case "BigInt":
143
+ return "number";
144
+ case "Boolean":
145
+ return "boolean";
146
+ case "DateTime":
147
+ return "date";
148
+ default:
149
+ return options.fallback?.(modelName, field.name, field.type);
150
+ }
151
+ }
152
+ //# sourceMappingURL=schema-from-prisma.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-from-prisma.js","sourceRoot":"","sources":["../../../src/adapters/prisma/schema-from-prisma.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { ParsedQuery } from "../../parsed";
2
+ import { type Schema } from "../../schema";
3
+ import type { PrismaFindManyArgs } from "./types";
4
+ /**
5
+ * Translate ParsedSelect + ParsedInclude into Prisma's `select` / `include`
6
+ * args, mutating `args` in place.
7
+ *
8
+ * Rules:
9
+ * - select=all + include=none/all/map → use `include` (or omit when no
10
+ * relations). Prisma defaults to all scalar fields when neither is set.
11
+ * - select≠all → must use `select`; relations from include are nested into
12
+ * `select` (Prisma forbids using both `select` and `include` at the same
13
+ * level).
14
+ * - Selected fields always include the primary key, so hydration works and
15
+ * later relation joins line up.
16
+ */
17
+ export declare function applySelectAndInclude(args: PrismaFindManyArgs, query: ParsedQuery, schema: Schema): void;
18
+ //# sourceMappingURL=select.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"select.d.ts","sourceRoot":"","sources":["../../../src/adapters/prisma/select.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,WAAW,EAEZ,MAAM,cAAc,CAAC;AACtB,OAAO,EAEL,KAAK,MAAM,EAGZ,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,kBAAkB,EAA+B,MAAM,SAAS,CAAC;AAE/E;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,kBAAkB,EACxB,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,MAAM,GACb,IAAI,CAYN"}
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.applySelectAndInclude = applySelectAndInclude;
4
+ const schema_1 = require("../../schema");
5
+ /**
6
+ * Translate ParsedSelect + ParsedInclude into Prisma's `select` / `include`
7
+ * args, mutating `args` in place.
8
+ *
9
+ * Rules:
10
+ * - select=all + include=none/all/map → use `include` (or omit when no
11
+ * relations). Prisma defaults to all scalar fields when neither is set.
12
+ * - select≠all → must use `select`; relations from include are nested into
13
+ * `select` (Prisma forbids using both `select` and `include` at the same
14
+ * level).
15
+ * - Selected fields always include the primary key, so hydration works and
16
+ * later relation joins line up.
17
+ */
18
+ function applySelectAndInclude(args, query, schema) {
19
+ const rootEntity = (0, schema_1.getEntity)(schema, query.rootEntity);
20
+ const select = query.select;
21
+ const include = query.include;
22
+ if (select.kind === "all") {
23
+ const inc = buildIncludeOnly(include, rootEntity, schema);
24
+ if (inc)
25
+ args.include = inc;
26
+ return;
27
+ }
28
+ args.select = buildSelectFromBoth(select, include, rootEntity, schema);
29
+ }
30
+ function buildIncludeOnly(include, rootEntity, schema) {
31
+ if (include.kind === "none")
32
+ return undefined;
33
+ if (include.kind === "all") {
34
+ const rels = rootEntity.relations ?? {};
35
+ const keys = Object.keys(rels);
36
+ if (keys.length === 0)
37
+ return undefined;
38
+ const out = {};
39
+ for (const k of keys)
40
+ out[k] = true;
41
+ return out;
42
+ }
43
+ // map
44
+ const out = {};
45
+ for (const [relName, spec] of Object.entries(include.relations)) {
46
+ const relDef = rootEntity.relations?.[relName];
47
+ if (!relDef)
48
+ continue;
49
+ out[relName] = relationToSpec(spec, relDef.target, schema);
50
+ }
51
+ return Object.keys(out).length > 0 ? out : undefined;
52
+ }
53
+ function buildSelectFromBoth(select, include, rootEntity, schema) {
54
+ const pk = (0, schema_1.primaryKeyOf)(rootEntity);
55
+ const out = {};
56
+ if (select.kind === "none") {
57
+ out[pk] = true;
58
+ }
59
+ else {
60
+ const set = new Set(select.fields);
61
+ set.add(pk);
62
+ for (const f of set)
63
+ out[f] = true;
64
+ }
65
+ // Nest relations into `select`.
66
+ if (include.kind === "all") {
67
+ for (const [relName, relDef] of Object.entries(rootEntity.relations ?? {})) {
68
+ void relDef;
69
+ out[relName] = true;
70
+ }
71
+ }
72
+ else if (include.kind === "map") {
73
+ for (const [relName, spec] of Object.entries(include.relations)) {
74
+ const relDef = rootEntity.relations?.[relName];
75
+ if (!relDef)
76
+ continue;
77
+ out[relName] = relationToSpec(spec, relDef.target, schema);
78
+ }
79
+ }
80
+ return out;
81
+ }
82
+ function relationToSpec(spec, targetEntityName, schema) {
83
+ if (spec.kind === "all")
84
+ return true;
85
+ const target = (0, schema_1.getEntity)(schema, targetEntityName);
86
+ const pk = (0, schema_1.primaryKeyOf)(target);
87
+ const set = new Set(spec.fields);
88
+ set.add(pk);
89
+ const sel = {};
90
+ for (const f of set)
91
+ sel[f] = true;
92
+ return { select: sel };
93
+ }
94
+ //# sourceMappingURL=select.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"select.js","sourceRoot":"","sources":["../../../src/adapters/prisma/select.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Structural types for the Prisma adapter. Defined here so the package can
3
+ * compile without `@prisma/client` installed (it's an optional peerDep).
4
+ *
5
+ * The runtime shapes match Prisma's actual API surface — the adapter feeds
6
+ * delegate methods directly with the produced args.
7
+ */
8
+ /**
9
+ * Subset of a Prisma model delegate (e.g. `prisma.user`). Only the methods
10
+ * the adapter calls are typed; the real delegate has many more.
11
+ */
12
+ export interface PrismaModelDelegate {
13
+ findMany(args?: PrismaFindManyArgs): Promise<unknown[]>;
14
+ findFirst(args?: PrismaFindManyArgs): Promise<unknown | null>;
15
+ count(args?: {
16
+ where?: PrismaWhere;
17
+ }): Promise<number>;
18
+ }
19
+ /** Recursive Prisma `where` filter. */
20
+ export interface PrismaWhere {
21
+ AND?: PrismaWhere[];
22
+ OR?: PrismaWhere[];
23
+ NOT?: PrismaWhere | PrismaWhere[];
24
+ [field: string]: unknown;
25
+ }
26
+ /** Args object passed to `findMany` / `findFirst`. */
27
+ export interface PrismaFindManyArgs {
28
+ where?: PrismaWhere;
29
+ orderBy?: Record<string, "asc" | "desc"> | Array<Record<string, "asc" | "desc">>;
30
+ skip?: number;
31
+ take?: number;
32
+ select?: PrismaSelect;
33
+ include?: PrismaInclude;
34
+ }
35
+ export interface PrismaSelect {
36
+ [field: string]: boolean | {
37
+ select?: PrismaSelect;
38
+ include?: PrismaInclude;
39
+ };
40
+ }
41
+ export interface PrismaInclude {
42
+ [relation: string]: boolean | {
43
+ select?: PrismaSelect;
44
+ include?: PrismaInclude;
45
+ };
46
+ }
47
+ export interface PrismaDatamodel {
48
+ models: readonly PrismaModelDef[];
49
+ enums: readonly PrismaEnumDef[];
50
+ }
51
+ export interface PrismaModelDef {
52
+ name: string;
53
+ fields: readonly PrismaFieldDef[];
54
+ primaryKey?: {
55
+ fields: readonly string[];
56
+ } | null;
57
+ }
58
+ export interface PrismaFieldDef {
59
+ name: string;
60
+ kind: "scalar" | "object" | "enum" | "unsupported";
61
+ /**
62
+ * For `scalar`: the scalar type name (`String`, `Int`, `Boolean`, `DateTime`,
63
+ * `Float`, `Decimal`, `BigInt`, ...). For `object`: the related model name.
64
+ * For `enum`: the enum name.
65
+ */
66
+ type: string;
67
+ isList: boolean;
68
+ isRequired: boolean;
69
+ isId?: boolean;
70
+ isUnique?: boolean;
71
+ relationName?: string;
72
+ /**
73
+ * For `object` (relation) fields: the scalar fields on this model that hold
74
+ * the foreign key. Used to flag those scalar fields as `id` type so they're
75
+ * always matched by exact equality.
76
+ */
77
+ relationFromFields?: readonly string[];
78
+ }
79
+ export interface PrismaEnumDef {
80
+ name: string;
81
+ values: readonly {
82
+ name: string;
83
+ }[];
84
+ }
85
+ //# sourceMappingURL=types.d.ts.map