@generazioneai/genquery 0.1.0 → 0.2.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/README.md +21 -10
- package/dist/adapters/base.d.ts +10 -1
- package/dist/adapters/base.d.ts.map +1 -1
- package/dist/adapters/prisma/adapter.d.ts +40 -0
- package/dist/adapters/prisma/adapter.d.ts.map +1 -0
- package/dist/adapters/prisma/adapter.js +92 -0
- package/dist/adapters/prisma/adapter.js.map +1 -0
- package/dist/adapters/prisma/create.d.ts +28 -0
- package/dist/adapters/prisma/create.d.ts.map +1 -0
- package/dist/adapters/prisma/create.js +28 -0
- package/dist/adapters/prisma/create.js.map +1 -0
- package/dist/adapters/prisma/index.d.ts +5 -0
- package/dist/adapters/prisma/index.d.ts.map +1 -0
- package/dist/adapters/prisma/index.js +10 -0
- package/dist/adapters/prisma/index.js.map +1 -0
- package/dist/adapters/prisma/schema-from-prisma.d.ts +43 -0
- package/dist/adapters/prisma/schema-from-prisma.d.ts.map +1 -0
- package/dist/adapters/prisma/schema-from-prisma.js +128 -0
- package/dist/adapters/prisma/schema-from-prisma.js.map +1 -0
- package/dist/adapters/prisma/select.d.ts +18 -0
- package/dist/adapters/prisma/select.d.ts.map +1 -0
- package/dist/adapters/prisma/select.js +94 -0
- package/dist/adapters/prisma/select.js.map +1 -0
- package/dist/adapters/prisma/types.d.ts +79 -0
- package/dist/adapters/prisma/types.d.ts.map +1 -0
- package/dist/adapters/prisma/types.js +10 -0
- package/dist/adapters/prisma/types.js.map +1 -0
- package/dist/adapters/prisma/where.d.ts +13 -0
- package/dist/adapters/prisma/where.d.ts.map +1 -0
- package/dist/adapters/prisma/where.js +169 -0
- package/dist/adapters/prisma/where.js.map +1 -0
- package/dist/adapters/typeorm/adapter.d.ts +8 -1
- package/dist/adapters/typeorm/adapter.d.ts.map +1 -1
- package/dist/adapters/typeorm/adapter.js +24 -0
- package/dist/adapters/typeorm/adapter.js.map +1 -1
- package/dist/engine.d.ts +21 -7
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +11 -3
- package/dist/engine.js.map +1 -1
- package/dist/parsed.d.ts +21 -0
- package/dist/parsed.d.ts.map +1 -1
- package/dist/parser.d.ts.map +1 -1
- package/dist/parser.js +21 -8
- package/dist/parser.js.map +1 -1
- package/dist/tests/prisma-adapter.test.d.ts +2 -0
- package/dist/tests/prisma-adapter.test.d.ts.map +1 -0
- package/dist/tests/prisma-adapter.test.js +351 -0
- package/dist/tests/prisma-adapter.test.js.map +1 -0
- package/dist/types.d.ts +4 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +14 -5
- package/spec.md +11 -0
|
@@ -0,0 +1,79 @@
|
|
|
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
|
+
export interface PrismaEnumDef {
|
|
74
|
+
name: string;
|
|
75
|
+
values: readonly {
|
|
76
|
+
name: string;
|
|
77
|
+
}[];
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/adapters/prisma/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IACxD,SAAS,CAAC,IAAI,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAC9D,KAAK,CAAC,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACxD;AAED,uCAAuC;AACvC,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,EAAE,WAAW,EAAE,CAAC;IACpB,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC;IACnB,GAAG,CAAC,EAAE,WAAW,GAAG,WAAW,EAAE,CAAC;IAClC,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1B;AAED,sDAAsD;AACtD,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,GAAG,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC;IACjF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,OAAO,CAAC,EAAE,aAAa,CAAC;CACzB;AAED,MAAM,WAAW,YAAY;IAC3B,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG;QAAE,MAAM,CAAC,EAAE,YAAY,CAAC;QAAC,OAAO,CAAC,EAAE,aAAa,CAAA;KAAE,CAAC;CAC/E;AAED,MAAM,WAAW,aAAa;IAC5B,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG;QAAE,MAAM,CAAC,EAAE,YAAY,CAAC;QAAC,OAAO,CAAC,EAAE,aAAa,CAAA;KAAE,CAAC;CAClF;AAOD,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,SAAS,cAAc,EAAE,CAAC;IAClC,KAAK,EAAE,SAAS,aAAa,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,cAAc,EAAE,CAAC;IAClC,UAAU,CAAC,EAAE;QAAE,MAAM,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,GAAG,IAAI,CAAC;CACnD;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,aAAa,CAAC;IACnD;;;;OAIG;IACH,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACrC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Structural types for the Prisma adapter. Defined here so the package can
|
|
4
|
+
* compile without `@prisma/client` installed (it's an optional peerDep).
|
|
5
|
+
*
|
|
6
|
+
* The runtime shapes match Prisma's actual API surface — the adapter feeds
|
|
7
|
+
* delegate methods directly with the produced args.
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/adapters/prisma/types.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ParsedSearchBy } from "../../parsed";
|
|
2
|
+
import { type Schema } from "../../schema";
|
|
3
|
+
import type { PrismaWhere } from "./types";
|
|
4
|
+
/**
|
|
5
|
+
* Build a Prisma `where` filter from a parsed searchBy. Conditions AND
|
|
6
|
+
* together; the `or` array becomes a Prisma `OR` clause AND-ed with the
|
|
7
|
+
* conditions.
|
|
8
|
+
*
|
|
9
|
+
* `nativeregex` is rejected — Prisma has no portable regex operator in `where`
|
|
10
|
+
* (postgres supports it via `$queryRaw` only). Use `exact` or `splitword`.
|
|
11
|
+
*/
|
|
12
|
+
export declare function buildWhere(searchBy: ParsedSearchBy, schema: Schema, rootEntity: string): PrismaWhere;
|
|
13
|
+
//# sourceMappingURL=where.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"where.d.ts","sourceRoot":"","sources":["../../../src/adapters/prisma/where.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAIV,cAAc,EAEf,MAAM,cAAc,CAAC;AACtB,OAAO,EAA0B,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAU3C;;;;;;;GAOG;AACH,wBAAgB,UAAU,CACxB,QAAQ,EAAE,cAAc,EACxB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,GACjB,WAAW,CAMb"}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.buildWhere = buildWhere;
|
|
4
|
+
const errors_1 = require("../../errors");
|
|
5
|
+
const schema_1 = require("../../schema");
|
|
6
|
+
/**
|
|
7
|
+
* Build a Prisma `where` filter from a parsed searchBy. Conditions AND
|
|
8
|
+
* together; the `or` array becomes a Prisma `OR` clause AND-ed with the
|
|
9
|
+
* conditions.
|
|
10
|
+
*
|
|
11
|
+
* `nativeregex` is rejected — Prisma has no portable regex operator in `where`
|
|
12
|
+
* (postgres supports it via `$queryRaw` only). Use `exact` or `splitword`.
|
|
13
|
+
*/
|
|
14
|
+
function buildWhere(searchBy, schema, rootEntity) {
|
|
15
|
+
return buildSearchBy(searchBy, {
|
|
16
|
+
schema,
|
|
17
|
+
currentEntity: rootEntity,
|
|
18
|
+
path: "searchBy",
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
function buildSearchBy(searchBy, ctx) {
|
|
22
|
+
const ands = [];
|
|
23
|
+
for (const cond of searchBy.conditions) {
|
|
24
|
+
const w = buildCondition(cond, ctx);
|
|
25
|
+
if (w !== undefined)
|
|
26
|
+
ands.push(w);
|
|
27
|
+
}
|
|
28
|
+
const ors = searchBy.or
|
|
29
|
+
.map((sub) => buildSearchBy(sub, ctx))
|
|
30
|
+
.filter((w) => Object.keys(w).length > 0);
|
|
31
|
+
if (ands.length === 1 && ors.length === 0)
|
|
32
|
+
return ands[0];
|
|
33
|
+
if (ands.length === 0 && ors.length === 0)
|
|
34
|
+
return {};
|
|
35
|
+
const out = {};
|
|
36
|
+
if (ands.length > 0)
|
|
37
|
+
out.AND = ands;
|
|
38
|
+
if (ors.length > 0)
|
|
39
|
+
out.OR = ors;
|
|
40
|
+
return out;
|
|
41
|
+
}
|
|
42
|
+
function buildCondition(cond, ctx) {
|
|
43
|
+
switch (cond.kind) {
|
|
44
|
+
case "string": {
|
|
45
|
+
const filter = buildStringFilter(cond.search, `${ctx.path}.${cond.field}`);
|
|
46
|
+
if (filter === undefined)
|
|
47
|
+
return undefined;
|
|
48
|
+
if (isMultiWordOr(filter)) {
|
|
49
|
+
// Multi-word splitword: distribute the field onto each branch.
|
|
50
|
+
return {
|
|
51
|
+
OR: filter.OR.map((leaf) => ({
|
|
52
|
+
[cond.field]: leaf,
|
|
53
|
+
})),
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
return { [cond.field]: filter };
|
|
57
|
+
}
|
|
58
|
+
case "number":
|
|
59
|
+
return { [cond.field]: buildNumberFilter(cond.search) };
|
|
60
|
+
case "bool":
|
|
61
|
+
return { [cond.field]: cond.search.value };
|
|
62
|
+
case "date":
|
|
63
|
+
return { [cond.field]: buildDateFilter(cond.search) };
|
|
64
|
+
case "enum":
|
|
65
|
+
return { [cond.field]: cond.search.value };
|
|
66
|
+
case "null":
|
|
67
|
+
return {
|
|
68
|
+
[cond.field]: cond.check.isNull ? null : { not: null },
|
|
69
|
+
};
|
|
70
|
+
case "empty":
|
|
71
|
+
return cond.check.isEmpty
|
|
72
|
+
? { OR: [{ [cond.field]: null }, { [cond.field]: "" }] }
|
|
73
|
+
: {
|
|
74
|
+
AND: [
|
|
75
|
+
{ [cond.field]: { not: null } },
|
|
76
|
+
{ [cond.field]: { not: "" } },
|
|
77
|
+
],
|
|
78
|
+
};
|
|
79
|
+
case "relation":
|
|
80
|
+
return buildRelation(cond, ctx);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
function isMultiWordOr(f) {
|
|
84
|
+
return typeof f === "object" && Array.isArray(f.OR);
|
|
85
|
+
}
|
|
86
|
+
function buildStringFilter(search, path) {
|
|
87
|
+
if (search.mode === "nativeregex") {
|
|
88
|
+
throw new errors_1.QueryValidationError("String search mode 'nativeregex' is not supported by the Prisma adapter. " +
|
|
89
|
+
"Use 'exact' or 'splitword'.", path);
|
|
90
|
+
}
|
|
91
|
+
if (search.mode === "splitword") {
|
|
92
|
+
const words = splitWords(search.value);
|
|
93
|
+
if (words.length === 0)
|
|
94
|
+
return undefined;
|
|
95
|
+
if (words.length === 1) {
|
|
96
|
+
return singleWordFilter(words[0], search.contained, search.caseSensitive);
|
|
97
|
+
}
|
|
98
|
+
const branches = words.map((w) => {
|
|
99
|
+
const leaf = singleWordFilter(w, search.contained, search.caseSensitive);
|
|
100
|
+
return typeof leaf === "string" ? { equals: leaf } : leaf;
|
|
101
|
+
});
|
|
102
|
+
return { OR: branches };
|
|
103
|
+
}
|
|
104
|
+
// exact
|
|
105
|
+
return singleWordFilter(search.value, search.contained, search.caseSensitive);
|
|
106
|
+
}
|
|
107
|
+
function singleWordFilter(value, contained, caseSensitive) {
|
|
108
|
+
const mode = caseSensitive ? {} : { mode: "insensitive" };
|
|
109
|
+
if (contained)
|
|
110
|
+
return { contains: value, ...mode };
|
|
111
|
+
if (caseSensitive)
|
|
112
|
+
return value; // shorthand: `{ field: "x" }` ≡ `{ equals: "x" }`
|
|
113
|
+
return { equals: value, ...mode };
|
|
114
|
+
}
|
|
115
|
+
function splitWords(s) {
|
|
116
|
+
return s.split(/\s+/).filter((w) => w.length > 0);
|
|
117
|
+
}
|
|
118
|
+
function buildNumberFilter(search) {
|
|
119
|
+
switch (search.op) {
|
|
120
|
+
case "==":
|
|
121
|
+
return { equals: search.value };
|
|
122
|
+
case ">":
|
|
123
|
+
return { gt: search.value };
|
|
124
|
+
case "<":
|
|
125
|
+
return { lt: search.value };
|
|
126
|
+
case ">=":
|
|
127
|
+
return { gte: search.value };
|
|
128
|
+
case "<=":
|
|
129
|
+
return { lte: search.value };
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
function buildDateFilter(search) {
|
|
133
|
+
if (search.kind === "exact")
|
|
134
|
+
return { equals: search.value };
|
|
135
|
+
const out = {};
|
|
136
|
+
if (search.after)
|
|
137
|
+
out.gt = search.after;
|
|
138
|
+
if (search.before)
|
|
139
|
+
out.lt = search.before;
|
|
140
|
+
return out;
|
|
141
|
+
}
|
|
142
|
+
function buildRelation(cond, ctx) {
|
|
143
|
+
const relDef = (0, schema_1.getRelation)(ctx.schema, ctx.currentEntity, cond.field);
|
|
144
|
+
// `relDef` must exist — the parser only emits relation conditions for known
|
|
145
|
+
// relations. If it doesn't, the schema diverged from what was parsed.
|
|
146
|
+
if (!relDef) {
|
|
147
|
+
throw new Error(`genquery/prisma: missing relation '${cond.field}' on '${ctx.currentEntity}'`);
|
|
148
|
+
}
|
|
149
|
+
const targetEntity = (0, schema_1.getEntity)(ctx.schema, cond.targetEntity);
|
|
150
|
+
const isMany = (relDef.kind ?? "many") === "many";
|
|
151
|
+
const nestedCtx = {
|
|
152
|
+
schema: ctx.schema,
|
|
153
|
+
currentEntity: targetEntity.name,
|
|
154
|
+
path: `${ctx.path}.${cond.field}.${cond.op}`,
|
|
155
|
+
};
|
|
156
|
+
const nested = buildSearchBy(cond.nested, nestedCtx);
|
|
157
|
+
if (isMany) {
|
|
158
|
+
return { [cond.field]: { [cond.op]: nested } };
|
|
159
|
+
}
|
|
160
|
+
// To-one relation: Prisma uses `is` / `isNot`. Map:
|
|
161
|
+
// some/every → is (existence + match; vacuous-truth differs from many's
|
|
162
|
+
// `every`, documented as a known approximation)
|
|
163
|
+
// none → isNot
|
|
164
|
+
if (cond.op === "none") {
|
|
165
|
+
return { [cond.field]: { isNot: nested } };
|
|
166
|
+
}
|
|
167
|
+
return { [cond.field]: { is: nested } };
|
|
168
|
+
}
|
|
169
|
+
//# sourceMappingURL=where.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"where.js","sourceRoot":"","sources":["../../../src/adapters/prisma/where.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type ObjectLiteral, type SelectQueryBuilder } from "typeorm";
|
|
2
|
-
import type { ParsedQuery } from "../../parsed";
|
|
2
|
+
import type { PaginatedResult, ParsedQuery } from "../../parsed";
|
|
3
3
|
import { type Schema } from "../../schema";
|
|
4
4
|
import type { Adapter } from "../base";
|
|
5
5
|
export interface TypeORMAdapterOptions {
|
|
@@ -28,6 +28,13 @@ export declare class TypeORMAdapter implements Adapter<SelectQueryBuilder<Object
|
|
|
28
28
|
*/
|
|
29
29
|
getRootEntity(qb: SelectQueryBuilder<ObjectLiteral>): string | undefined;
|
|
30
30
|
apply<T extends ObjectLiteral>(qb: SelectQueryBuilder<T>, query: ParsedQuery): SelectQueryBuilder<T>;
|
|
31
|
+
/**
|
|
32
|
+
* Apply the parsed query to `qb`, run it, and return `{ data, current?,
|
|
33
|
+
* total? }` shaped by `pagination.showNumber` / `pagination.showTotal`
|
|
34
|
+
* (both default to true). Uses `getManyAndCount` when a total is needed,
|
|
35
|
+
* `getMany` otherwise. This is what `engine.run` invokes for TypeORM.
|
|
36
|
+
*/
|
|
37
|
+
execute<T extends ObjectLiteral>(qb: SelectQueryBuilder<T>, query: ParsedQuery): Promise<PaginatedResult<T>>;
|
|
31
38
|
private applyRootSelect;
|
|
32
39
|
private applyJoin;
|
|
33
40
|
private applyPagination;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/typeorm/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAChF,OAAO,KAAK,EAAE,WAAW,EAAgB,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/typeorm/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAChF,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAgB,MAAM,cAAc,CAAC;AAC/E,OAAO,EAEL,KAAK,MAAM,EAGZ,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAMvC,MAAM,WAAW,qBAAqB;IACpC,gEAAgE;IAChE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;GASG;AACH,qBAAa,cACX,YACE,OAAO,CAAC,kBAAkB,CAAC,aAAa,CAAC,EAAE,kBAAkB,CAAC,aAAa,CAAC,CAAC;aAK7D,MAAM,EAAE,MAAM;IAC9B,OAAO,CAAC,QAAQ,CAAC,OAAO;IAJ1B,QAAQ,CAAC,IAAI,aAAa;gBAGR,MAAM,EAAE,MAAM,EACb,OAAO,GAAE,qBAA0B;IAGtD;;;;OAIG;IACH,aAAa,CAAC,EAAE,EAAE,kBAAkB,CAAC,aAAa,CAAC,GAAG,MAAM,GAAG,SAAS;IAIxE,KAAK,CAAC,CAAC,SAAS,aAAa,EAC3B,EAAE,EAAE,kBAAkB,CAAC,CAAC,CAAC,EACzB,KAAK,EAAE,WAAW,GACjB,kBAAkB,CAAC,CAAC,CAAC;IA8CxB;;;;;OAKG;IACG,OAAO,CAAC,CAAC,SAAS,aAAa,EACnC,EAAE,EAAE,kBAAkB,CAAC,CAAC,CAAC,EACzB,KAAK,EAAE,WAAW,GACjB,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IAkB9B,OAAO,CAAC,eAAe;IAkBvB,OAAO,CAAC,SAAS;IAuBjB,OAAO,CAAC,eAAe;CAWxB"}
|
|
@@ -65,6 +65,30 @@ class TypeORMAdapter {
|
|
|
65
65
|
this.applyPagination(qb, query.pagination);
|
|
66
66
|
return qb;
|
|
67
67
|
}
|
|
68
|
+
/**
|
|
69
|
+
* Apply the parsed query to `qb`, run it, and return `{ data, current?,
|
|
70
|
+
* total? }` shaped by `pagination.showNumber` / `pagination.showTotal`
|
|
71
|
+
* (both default to true). Uses `getManyAndCount` when a total is needed,
|
|
72
|
+
* `getMany` otherwise. This is what `engine.run` invokes for TypeORM.
|
|
73
|
+
*/
|
|
74
|
+
async execute(qb, query) {
|
|
75
|
+
this.apply(qb, query);
|
|
76
|
+
const { showNumber, showTotal } = query.pagination;
|
|
77
|
+
let data;
|
|
78
|
+
let total;
|
|
79
|
+
if (showTotal) {
|
|
80
|
+
[data, total] = await qb.getManyAndCount();
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
data = await qb.getMany();
|
|
84
|
+
}
|
|
85
|
+
const result = { data };
|
|
86
|
+
if (showNumber)
|
|
87
|
+
result.current = data.length;
|
|
88
|
+
if (showTotal)
|
|
89
|
+
result.total = total;
|
|
90
|
+
return result;
|
|
91
|
+
}
|
|
68
92
|
applyRootSelect(qb, entity, select, rootAlias) {
|
|
69
93
|
if (select.kind === "all")
|
|
70
94
|
return; // default behaviour
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/adapters/typeorm/adapter.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/adapters/typeorm/adapter.ts"],"names":[],"mappings":"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"}
|
package/dist/engine.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Adapter } from "./adapters/base";
|
|
2
|
-
import type { ParsedQuery } from "./parsed";
|
|
2
|
+
import type { PaginatedResult, ParsedQuery } from "./parsed";
|
|
3
3
|
import type { Schema } from "./schema";
|
|
4
4
|
import type { GenQueryInput } from "./types";
|
|
5
5
|
export interface GenQueryEngineOptions<TTarget, TResult> {
|
|
@@ -9,12 +9,15 @@ type IsAny<T> = 0 extends 1 & T ? true : false;
|
|
|
9
9
|
/** True for TypeORM's wide ObjectLiteral default — treat as "unspecified". */
|
|
10
10
|
type IsLooseRecord<T> = IsAny<T> extends true ? true : [T] extends [Record<string, any>] ? [Record<string, any>] extends [T] ? true : false : false;
|
|
11
11
|
/**
|
|
12
|
-
* Inspect the target's structural shape
|
|
13
|
-
* `SelectQueryBuilder<T>`
|
|
12
|
+
* Inspect the target's structural shape and pull out the entity type:
|
|
13
|
+
* - TypeORM `SelectQueryBuilder<T>` exposes `getMany(): Promise<T[]>`.
|
|
14
|
+
* - Prisma model delegate exposes `findMany(args?): Promise<T[]>`.
|
|
14
15
|
* Falls back to `unknown` (loose mode) for any other adapter target.
|
|
15
16
|
*/
|
|
16
17
|
type InferEntityFromTarget<X> = X extends {
|
|
17
18
|
getMany(): Promise<infer A>;
|
|
19
|
+
} ? A extends (infer T)[] ? IsLooseRecord<T> extends true ? unknown : T : unknown : X extends {
|
|
20
|
+
findMany(args?: any): Promise<infer A>;
|
|
18
21
|
} ? A extends (infer T)[] ? IsLooseRecord<T> extends true ? unknown : T : unknown : unknown;
|
|
19
22
|
/**
|
|
20
23
|
* Combines parsing + an adapter into a single entry point. The engine is
|
|
@@ -35,7 +38,14 @@ export declare class GenQueryEngine<TTarget, TResult> {
|
|
|
35
38
|
*/
|
|
36
39
|
parse<T = unknown>(input: GenQueryInput<T>, rootEntity: string): ParsedQuery;
|
|
37
40
|
/**
|
|
38
|
-
* Parse and
|
|
41
|
+
* Parse, apply, and execute the query against `target`. Returns
|
|
42
|
+
* `{ data, current?, total? }` shaped by `pagination.showNumber` /
|
|
43
|
+
* `pagination.showTotal` (both default to `true`).
|
|
44
|
+
*
|
|
45
|
+
* Requires the adapter to implement `execute` (the TypeORM adapter does).
|
|
46
|
+
* Pure args-builder adapters (Prisma, etc.) should use `parse` +
|
|
47
|
+
* `runParsed` instead — `runParsed` is sync and returns the adapter's raw
|
|
48
|
+
* `TResult` (the args object or query builder) without executing.
|
|
39
49
|
*
|
|
40
50
|
* The entity type is inferred from the `target` argument when it has a
|
|
41
51
|
* recognizable shape (e.g. a TypeORM `SelectQueryBuilder<User>`). When the
|
|
@@ -43,9 +53,13 @@ export declare class GenQueryEngine<TTarget, TResult> {
|
|
|
43
53
|
* the engine asks the adapter to derive it from the target. Pass an explicit
|
|
44
54
|
* `rootEntity` to override (or when the adapter can't introspect).
|
|
45
55
|
*/
|
|
46
|
-
run<X extends TTarget>(input: GenQueryInput<InferEntityFromTarget<X>>, target: X):
|
|
47
|
-
run<X extends TTarget>(input: GenQueryInput<InferEntityFromTarget<X>>, rootEntity: string, target: X):
|
|
48
|
-
/**
|
|
56
|
+
run<X extends TTarget>(input: GenQueryInput<InferEntityFromTarget<X>>, target: X): Promise<PaginatedResult<InferEntityFromTarget<X>>>;
|
|
57
|
+
run<X extends TTarget>(input: GenQueryInput<InferEntityFromTarget<X>>, rootEntity: string, target: X): Promise<PaginatedResult<InferEntityFromTarget<X>>>;
|
|
58
|
+
/**
|
|
59
|
+
* Apply a previously parsed query and return the adapter's raw target
|
|
60
|
+
* (mutated query builder, args object, …) without executing. Use this when
|
|
61
|
+
* you want full control over how the query is run.
|
|
62
|
+
*/
|
|
49
63
|
runParsed(parsed: ParsedQuery, target: TTarget): TResult;
|
|
50
64
|
}
|
|
51
65
|
export {};
|
package/dist/engine.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE/C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE/C,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC7D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C,MAAM,WAAW,qBAAqB,CAAC,OAAO,EAAE,OAAO;IACrD,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;CACpC;AAID,KAAK,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,KAAK,CAAC;AAE/C,8EAA8E;AAC9E,KAAK,aAAa,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,SAAS,IAAI,GACzC,IAAI,GACJ,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAC/B,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAC/B,IAAI,GACJ,KAAK,GACP,KAAK,CAAC;AAEZ;;;;;GAKG;AACH,KAAK,qBAAqB,CAAC,CAAC,IAAI,CAAC,SAAS;IACxC,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;CAC7B,GACG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,GACnB,aAAa,CAAC,CAAC,CAAC,SAAS,IAAI,GAC3B,OAAO,GACP,CAAC,GACH,OAAO,GACT,CAAC,SAAS;IACN,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;CACxC,GACD,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,GACnB,aAAa,CAAC,CAAC,CAAC,SAAS,IAAI,GAC3B,OAAO,GACP,CAAC,GACH,OAAO,GACT,OAAO,CAAC;AAEd;;;;;;GAMG;AACH,qBAAa,cAAc,CAAC,OAAO,EAAE,OAAO;IAC1C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBAEhC,OAAO,EAAE,qBAAqB,CAAC,OAAO,EAAE,OAAO,CAAC;IAK5D;;;;;OAKG;IACH,KAAK,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,GAAG,WAAW;IAI5E;;;;;;;;;;;;;;;OAeG;IACH,GAAG,CAAC,CAAC,SAAS,OAAO,EACnB,KAAK,EAAE,aAAa,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,EAC9C,MAAM,EAAE,CAAC,GACR,OAAO,CAAC,eAAe,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;IACrD,GAAG,CAAC,CAAC,SAAS,OAAO,EACnB,KAAK,EAAE,aAAa,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,EAC9C,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,CAAC,GACR,OAAO,CAAC,eAAe,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;IAiCrD;;;;OAIG;IACH,SAAS,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO;CAGzD"}
|
package/dist/engine.js
CHANGED
|
@@ -23,7 +23,11 @@ class GenQueryEngine {
|
|
|
23
23
|
parse(input, rootEntity) {
|
|
24
24
|
return (0, parser_1.parseQuery)(input, this.schema, rootEntity);
|
|
25
25
|
}
|
|
26
|
-
run(input, arg2, arg3) {
|
|
26
|
+
async run(input, arg2, arg3) {
|
|
27
|
+
if (!this.adapter.execute) {
|
|
28
|
+
throw new Error(`GenQueryEngine.run: adapter '${this.adapter.name}' does not implement execute(). ` +
|
|
29
|
+
"Use engine.parse + engine.runParsed instead.");
|
|
30
|
+
}
|
|
27
31
|
let rootEntity;
|
|
28
32
|
let target;
|
|
29
33
|
if (typeof arg2 === "string") {
|
|
@@ -41,9 +45,13 @@ class GenQueryEngine {
|
|
|
41
45
|
rootEntity = derived;
|
|
42
46
|
}
|
|
43
47
|
const parsed = (0, parser_1.parseQuery)(input, this.schema, rootEntity);
|
|
44
|
-
return this.adapter.
|
|
48
|
+
return this.adapter.execute(target, parsed);
|
|
45
49
|
}
|
|
46
|
-
/**
|
|
50
|
+
/**
|
|
51
|
+
* Apply a previously parsed query and return the adapter's raw target
|
|
52
|
+
* (mutated query builder, args object, …) without executing. Use this when
|
|
53
|
+
* you want full control over how the query is run.
|
|
54
|
+
*/
|
|
47
55
|
runParsed(parsed, target) {
|
|
48
56
|
return this.adapter.apply(target, parsed);
|
|
49
57
|
}
|
package/dist/engine.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":";;;AACA,qCAAsC;
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":";;;AACA,qCAAsC;AA8CtC;;;;;;GAMG;AACH,MAAa,cAAc;IAIzB,YAAY,OAAgD;QAC1D,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;IACvC,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAc,KAAuB,EAAE,UAAkB;QAC5D,OAAO,IAAA,mBAAU,EAAC,KAAsB,EAAE,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACrE,CAAC;IA2BD,KAAK,CAAC,GAAG,CACP,KAAoB,EACpB,IAAsB,EACtB,IAAc;QAEd,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CACb,gCAAgC,IAAI,CAAC,OAAO,CAAC,IAAI,kCAAkC;gBACjF,8CAA8C,CACjD,CAAC;QACJ,CAAC;QACD,IAAI,UAAkB,CAAC;QACvB,IAAI,MAAe,CAAC;QACpB,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,UAAU,GAAG,IAAI,CAAC;YAClB,MAAM,GAAG,IAAe,CAAC;QAC3B,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,IAAI,CAAC;YACd,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,MAAM,CAAC,CAAC;YACrD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CACb,8DAA8D;oBAC5D,KAAK,IAAI,CAAC,OAAO,CAAC,IAAI,0CAA0C;oBAChE,oEAAoE,CACvE,CAAC;YACJ,CAAC;YACD,UAAU,GAAG,OAAO,CAAC;QACvB,CAAC;QACD,MAAM,MAAM,GAAG,IAAA,mBAAU,EAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAC1D,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9C,CAAC;IAED;;;;OAIG;IACH,SAAS,CAAC,MAAmB,EAAE,MAAe;QAC5C,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5C,CAAC;CACF;AApFD,wCAoFC"}
|
package/dist/parsed.d.ts
CHANGED
|
@@ -109,13 +109,34 @@ export type ParsedInclude = {
|
|
|
109
109
|
};
|
|
110
110
|
export type ParsedPagination = {
|
|
111
111
|
kind: "all";
|
|
112
|
+
showNumber: boolean;
|
|
113
|
+
showTotal: boolean;
|
|
112
114
|
} | {
|
|
113
115
|
kind: "first";
|
|
116
|
+
showNumber: boolean;
|
|
117
|
+
showTotal: boolean;
|
|
114
118
|
} | {
|
|
115
119
|
kind: "page";
|
|
116
120
|
page: number;
|
|
117
121
|
perPage: number;
|
|
122
|
+
showNumber: boolean;
|
|
123
|
+
showTotal: boolean;
|
|
118
124
|
};
|
|
125
|
+
/**
|
|
126
|
+
* Shape returned by `engine.run` on executable adapters (e.g. TypeORM).
|
|
127
|
+
* `current` / `total` are populated according to `pagination.showNumber` /
|
|
128
|
+
* `pagination.showTotal` on the parsed query (both default to `true`).
|
|
129
|
+
*/
|
|
130
|
+
export interface PaginatedResult<T> {
|
|
131
|
+
data: T[];
|
|
132
|
+
/** Rows in this page. Present when `pagination.showNumber` is true. */
|
|
133
|
+
current?: number;
|
|
134
|
+
/**
|
|
135
|
+
* Rows matching the query without pagination. Present when
|
|
136
|
+
* `pagination.showTotal` is true. Sourced from `getManyAndCount`.
|
|
137
|
+
*/
|
|
138
|
+
total?: number;
|
|
139
|
+
}
|
|
119
140
|
export interface ParsedQuery {
|
|
120
141
|
rootEntity: string;
|
|
121
142
|
orderBy?: ParsedOrderBy;
|
package/dist/parsed.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parsed.d.ts","sourceRoot":"","sources":["../src/parsed.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"parsed.d.ts","sourceRoot":"","sources":["../src/parsed.ts"],"names":[],"mappings":"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"}
|
package/dist/parser.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,MAAM,EAEZ,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EAEV,aAAa,EAMd,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAUV,WAAW,EAIZ,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,MAAM,EAEZ,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EAEV,aAAa,EAMd,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAUV,WAAW,EAIZ,MAAM,UAAU,CAAC;AAqjBlB,wBAAgB,UAAU,CACxB,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,GACjB,WAAW,CAwCb"}
|
package/dist/parser.js
CHANGED
|
@@ -347,16 +347,27 @@ function parseInclude(raw, entity, schema, path) {
|
|
|
347
347
|
}
|
|
348
348
|
return { kind: "map", relations };
|
|
349
349
|
}
|
|
350
|
+
function parseShowFlag(raw, key, path) {
|
|
351
|
+
if (raw === undefined)
|
|
352
|
+
return true;
|
|
353
|
+
if (typeof raw !== "boolean") {
|
|
354
|
+
throw new errors_1.QueryValidationError(`pagination.${key} must be a boolean`, `${path}.${key}`);
|
|
355
|
+
}
|
|
356
|
+
return raw;
|
|
357
|
+
}
|
|
350
358
|
function parsePagination(raw, path) {
|
|
351
|
-
if (raw === "all")
|
|
352
|
-
return { kind: "all" };
|
|
353
|
-
|
|
354
|
-
|
|
359
|
+
if (raw === "all") {
|
|
360
|
+
return { kind: "all", showNumber: true, showTotal: true };
|
|
361
|
+
}
|
|
362
|
+
if (raw === "first") {
|
|
363
|
+
return { kind: "first", showNumber: true, showTotal: true };
|
|
364
|
+
}
|
|
355
365
|
if (!isPlainObject(raw)) {
|
|
356
366
|
throw new errors_1.QueryValidationError("pagination must be 'all', 'first', or an object", path);
|
|
357
367
|
}
|
|
358
|
-
const
|
|
359
|
-
const
|
|
368
|
+
const obj = raw;
|
|
369
|
+
const pageRaw = obj.page;
|
|
370
|
+
const perPageRaw = obj.perPage;
|
|
360
371
|
const page = pageRaw === undefined ? 0 : Number(pageRaw);
|
|
361
372
|
const perPage = perPageRaw === undefined ? 20 : Number(perPageRaw);
|
|
362
373
|
if (!Number.isInteger(page) || page < 0) {
|
|
@@ -365,7 +376,9 @@ function parsePagination(raw, path) {
|
|
|
365
376
|
if (!Number.isInteger(perPage) || perPage <= 0) {
|
|
366
377
|
throw new errors_1.QueryValidationError("pagination.perPage must be a positive integer", `${path}.perPage`);
|
|
367
378
|
}
|
|
368
|
-
|
|
379
|
+
const showNumber = parseShowFlag(obj.showNumber, "showNumber", path);
|
|
380
|
+
const showTotal = parseShowFlag(obj.showTotal, "showTotal", path);
|
|
381
|
+
return { kind: "page", page, perPage, showNumber, showTotal };
|
|
369
382
|
}
|
|
370
383
|
// Avoid leaning on a circular type import in parseLeafCondition's signature.
|
|
371
384
|
// (The helper above is intentionally typed loosely; this re-export is the
|
|
@@ -382,7 +395,7 @@ function parseQuery(input, schema, rootEntity) {
|
|
|
382
395
|
rootEntity,
|
|
383
396
|
include: { kind: "none" },
|
|
384
397
|
select: { kind: "all" },
|
|
385
|
-
pagination: { kind: "all" },
|
|
398
|
+
pagination: { kind: "all", showNumber: true, showTotal: true },
|
|
386
399
|
};
|
|
387
400
|
if (input.orderBy !== undefined) {
|
|
388
401
|
parsed.orderBy = parseOrderBy(input.orderBy, entity, "orderBy");
|