@generazioneai/genquery 0.1.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 (76) hide show
  1. package/LICENSE +28 -0
  2. package/README.md +218 -0
  3. package/dist/adapters/base.d.ts +32 -0
  4. package/dist/adapters/base.d.ts.map +1 -0
  5. package/dist/adapters/base.js +3 -0
  6. package/dist/adapters/base.js.map +1 -0
  7. package/dist/adapters/typeorm/adapter.d.ts +35 -0
  8. package/dist/adapters/typeorm/adapter.d.ts.map +1 -0
  9. package/dist/adapters/typeorm/adapter.js +111 -0
  10. package/dist/adapters/typeorm/adapter.js.map +1 -0
  11. package/dist/adapters/typeorm/aliases.d.ts +25 -0
  12. package/dist/adapters/typeorm/aliases.d.ts.map +1 -0
  13. package/dist/adapters/typeorm/aliases.js +47 -0
  14. package/dist/adapters/typeorm/aliases.js.map +1 -0
  15. package/dist/adapters/typeorm/create.d.ts +29 -0
  16. package/dist/adapters/typeorm/create.d.ts.map +1 -0
  17. package/dist/adapters/typeorm/create.js +29 -0
  18. package/dist/adapters/typeorm/create.js.map +1 -0
  19. package/dist/adapters/typeorm/escape.d.ts +5 -0
  20. package/dist/adapters/typeorm/escape.d.ts.map +1 -0
  21. package/dist/adapters/typeorm/escape.js +13 -0
  22. package/dist/adapters/typeorm/escape.js.map +1 -0
  23. package/dist/adapters/typeorm/index.d.ts +4 -0
  24. package/dist/adapters/typeorm/index.d.ts.map +1 -0
  25. package/dist/adapters/typeorm/index.js +10 -0
  26. package/dist/adapters/typeorm/index.js.map +1 -0
  27. package/dist/adapters/typeorm/joins.d.ts +29 -0
  28. package/dist/adapters/typeorm/joins.d.ts.map +1 -0
  29. package/dist/adapters/typeorm/joins.js +91 -0
  30. package/dist/adapters/typeorm/joins.js.map +1 -0
  31. package/dist/adapters/typeorm/params.d.ts +8 -0
  32. package/dist/adapters/typeorm/params.d.ts.map +1 -0
  33. package/dist/adapters/typeorm/params.js +15 -0
  34. package/dist/adapters/typeorm/params.js.map +1 -0
  35. package/dist/adapters/typeorm/schema-from-typeorm.d.ts +50 -0
  36. package/dist/adapters/typeorm/schema-from-typeorm.d.ts.map +1 -0
  37. package/dist/adapters/typeorm/schema-from-typeorm.js +170 -0
  38. package/dist/adapters/typeorm/schema-from-typeorm.js.map +1 -0
  39. package/dist/adapters/typeorm/where.d.ts +26 -0
  40. package/dist/adapters/typeorm/where.d.ts.map +1 -0
  41. package/dist/adapters/typeorm/where.js +297 -0
  42. package/dist/adapters/typeorm/where.js.map +1 -0
  43. package/dist/datetime.d.ts +4 -0
  44. package/dist/datetime.d.ts.map +1 -0
  45. package/dist/datetime.js +86 -0
  46. package/dist/datetime.js.map +1 -0
  47. package/dist/engine.d.ts +52 -0
  48. package/dist/engine.d.ts.map +1 -0
  49. package/dist/engine.js +52 -0
  50. package/dist/engine.js.map +1 -0
  51. package/dist/errors.d.ts +10 -0
  52. package/dist/errors.d.ts.map +1 -0
  53. package/dist/errors.js +16 -0
  54. package/dist/errors.js.map +1 -0
  55. package/dist/index.d.ts +9 -0
  56. package/dist/index.d.ts.map +1 -0
  57. package/dist/index.js +28 -0
  58. package/dist/index.js.map +1 -0
  59. package/dist/parsed.d.ts +127 -0
  60. package/dist/parsed.d.ts.map +1 -0
  61. package/dist/parsed.js +8 -0
  62. package/dist/parsed.js.map +1 -0
  63. package/dist/parser.d.ts +5 -0
  64. package/dist/parser.d.ts.map +1 -0
  65. package/dist/parser.js +404 -0
  66. package/dist/parser.js.map +1 -0
  67. package/dist/schema.d.ts +57 -0
  68. package/dist/schema.d.ts.map +1 -0
  69. package/dist/schema.js +36 -0
  70. package/dist/schema.js.map +1 -0
  71. package/dist/types.d.ts +180 -0
  72. package/dist/types.d.ts.map +1 -0
  73. package/dist/types.js +15 -0
  74. package/dist/types.js.map +1 -0
  75. package/package.json +70 -0
  76. package/spec.md +221 -0
@@ -0,0 +1,297 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.applySearchByInside = applySearchByInside;
4
+ const typeorm_1 = require("typeorm");
5
+ const errors_1 = require("../../errors");
6
+ const escape_1 = require("./escape");
7
+ function qualify(alias, field) {
8
+ return `"${alias}"."${field}"`;
9
+ }
10
+ function buildString(alias, field, search, params) {
11
+ const col = qualify(alias, field);
12
+ const like = search.caseSensitive ? "LIKE" : "ILIKE";
13
+ switch (search.mode) {
14
+ case "exact": {
15
+ const p = params.next();
16
+ if (search.contained) {
17
+ return {
18
+ sql: `${col} ${like} :${p}`,
19
+ params: { [p]: `%${(0, escape_1.escapeLike)(search.value)}%` },
20
+ };
21
+ }
22
+ if (search.caseSensitive) {
23
+ return {
24
+ sql: `${col} = :${p}`,
25
+ params: { [p]: search.value },
26
+ };
27
+ }
28
+ // Case-insensitive equality via ILIKE on the escaped literal (no wildcards).
29
+ return {
30
+ sql: `${col} ILIKE :${p}`,
31
+ params: { [p]: (0, escape_1.escapeLike)(search.value) },
32
+ };
33
+ }
34
+ case "nativeregex": {
35
+ const p = params.next();
36
+ const op = search.caseSensitive ? "~" : "~*";
37
+ return {
38
+ sql: `${col} ${op} :${p}`,
39
+ params: { [p]: search.value },
40
+ };
41
+ }
42
+ case "splitword": {
43
+ const words = (0, escape_1.splitWords)(search.value);
44
+ if (words.length === 0) {
45
+ return { sql: "1=1", params: {} };
46
+ }
47
+ const parts = [];
48
+ const out = {};
49
+ for (const w of words) {
50
+ const p = params.next();
51
+ const pattern = search.contained
52
+ ? `%${(0, escape_1.escapeLike)(w)}%`
53
+ : (0, escape_1.escapeLike)(w);
54
+ parts.push(`${col} ${like} :${p}`);
55
+ out[p] = pattern;
56
+ }
57
+ return { sql: `(${parts.join(" OR ")})`, params: out };
58
+ }
59
+ }
60
+ }
61
+ function buildNumber(alias, field, search, params) {
62
+ const col = qualify(alias, field);
63
+ const p = params.next();
64
+ const op = search.op === "==" ? "=" : search.op;
65
+ return { sql: `${col} ${op} :${p}`, params: { [p]: search.value } };
66
+ }
67
+ function buildDate(alias, field, search, params) {
68
+ const col = qualify(alias, field);
69
+ if (search.kind === "exact") {
70
+ const p = params.next();
71
+ return { sql: `${col} = :${p}`, params: { [p]: search.value } };
72
+ }
73
+ // range
74
+ const clauses = [];
75
+ const out = {};
76
+ if (search.after) {
77
+ const p = params.next();
78
+ clauses.push(`${col} > :${p}`);
79
+ out[p] = search.after;
80
+ }
81
+ if (search.before) {
82
+ const p = params.next();
83
+ clauses.push(`${col} < :${p}`);
84
+ out[p] = search.before;
85
+ }
86
+ return { sql: clauses.join(" AND "), params: out };
87
+ }
88
+ function buildLeaf(cond, ctx) {
89
+ switch (cond.kind) {
90
+ case "string":
91
+ return buildString(ctx.currentAlias, cond.field, cond.search, ctx.params);
92
+ case "number":
93
+ return buildNumber(ctx.currentAlias, cond.field, cond.search, ctx.params);
94
+ case "bool": {
95
+ const p = ctx.params.next();
96
+ return {
97
+ sql: `${qualify(ctx.currentAlias, cond.field)} = :${p}`,
98
+ params: { [p]: cond.search.value },
99
+ };
100
+ }
101
+ case "date":
102
+ return buildDate(ctx.currentAlias, cond.field, cond.search, ctx.params);
103
+ case "enum": {
104
+ const p = ctx.params.next();
105
+ return {
106
+ sql: `${qualify(ctx.currentAlias, cond.field)} = :${p}`,
107
+ params: { [p]: cond.search.value },
108
+ };
109
+ }
110
+ case "null": {
111
+ const col = qualify(ctx.currentAlias, cond.field);
112
+ return {
113
+ sql: `${col} IS ${cond.check.isNull ? "" : "NOT "}NULL`,
114
+ params: {},
115
+ };
116
+ }
117
+ case "empty": {
118
+ const col = qualify(ctx.currentAlias, cond.field);
119
+ const sql = cond.check.isEmpty
120
+ ? `(${col} IS NULL OR ${col} = '')`
121
+ : `(${col} IS NOT NULL AND ${col} <> '')`;
122
+ return { sql, params: {} };
123
+ }
124
+ }
125
+ }
126
+ function joinPath(parent, child) {
127
+ return parent ? `${parent}.${child}` : child;
128
+ }
129
+ function applyCondition(qb, cond, ctx, isFirst) {
130
+ if (cond.kind === "relation") {
131
+ if (cond.op === "some") {
132
+ const path = joinPath(ctx.currentPath, cond.field);
133
+ const relAlias = ctx.aliases.get(path);
134
+ if (!relAlias) {
135
+ throw new Error(`genquery/typeorm: missing join for relation path '${path}'`);
136
+ }
137
+ const subCtx = {
138
+ ...ctx,
139
+ currentAlias: relAlias,
140
+ currentPath: path,
141
+ currentEntity: cond.targetEntity,
142
+ };
143
+ const brackets = new typeorm_1.Brackets((sub) => applySearchByInside(sub, cond.nested, subCtx));
144
+ if (isFirst)
145
+ qb.where(brackets);
146
+ else
147
+ qb.andWhere(brackets);
148
+ return;
149
+ }
150
+ // every / none → EXISTS / NOT EXISTS subquery
151
+ const fragment = buildExistsSubquery(cond, ctx);
152
+ Object.assign(ctx.paramBag, fragment.params);
153
+ if (isFirst)
154
+ qb.where(fragment.sql, fragment.params);
155
+ else
156
+ qb.andWhere(fragment.sql, fragment.params);
157
+ return;
158
+ }
159
+ const fragment = buildLeaf(cond, ctx);
160
+ Object.assign(ctx.paramBag, fragment.params);
161
+ if (isFirst)
162
+ qb.where(fragment.sql, fragment.params);
163
+ else
164
+ qb.andWhere(fragment.sql, fragment.params);
165
+ }
166
+ /**
167
+ * Build a `[NOT] EXISTS (SELECT 1 FROM target WHERE ...)` fragment for
168
+ * `every` / `none` relation conditions. Resolves FK columns through TypeORM's
169
+ * own EntityMetadata so we don't reinvent relation introspection.
170
+ *
171
+ * Restrictions (Phase 1):
172
+ * - One-to-many and many-to-one (and one-to-one) relations are supported.
173
+ * - Many-to-many goes through a junction table and isn't supported here yet.
174
+ * - The nested `searchBy` must contain only leaf conditions and OR — nested
175
+ * relation filters inside `every`/`none` are not yet supported.
176
+ */
177
+ function buildExistsSubquery(cond, ctx) {
178
+ const parentMeta = ctx.connection.getMetadata(ctx.currentEntity);
179
+ const relMeta = parentMeta.relations.find((r) => r.propertyName === cond.field);
180
+ if (!relMeta) {
181
+ throw new Error(`genquery/typeorm: no TypeORM relation metadata for '${ctx.currentEntity}.${cond.field}'`);
182
+ }
183
+ if (relMeta.isManyToMany) {
184
+ throw new errors_1.QueryValidationError(`Relation '${cond.field}' is many-to-many; '${cond.op}' filtering isn't supported yet for M2M relations`, cond.field);
185
+ }
186
+ const targetMeta = relMeta.inverseEntityMetadata;
187
+ const targetTable = targetMeta.tableName;
188
+ const subAlias = `${ctx.currentAlias}__${cond.field}__sub`;
189
+ // Determine the join condition between parent alias and the subquery alias.
190
+ let joinSql;
191
+ if (relMeta.joinColumns.length > 0) {
192
+ // Owning side (many-to-one / owning one-to-one): FK column lives on the
193
+ // parent table, references target's referenced column.
194
+ const fk = relMeta.joinColumns[0];
195
+ const parentCol = fk.databaseName;
196
+ const targetCol = fk.referencedColumn?.databaseName
197
+ ?? targetMeta.primaryColumns[0].databaseName;
198
+ joinSql = `"${subAlias}"."${targetCol}" = "${ctx.currentAlias}"."${parentCol}"`;
199
+ }
200
+ else if (relMeta.inverseRelation) {
201
+ // Inverse side (one-to-many / inverse one-to-one): FK lives on the target.
202
+ const fk = relMeta.inverseRelation.joinColumns[0];
203
+ if (!fk) {
204
+ throw new Error(`genquery/typeorm: cannot resolve foreign key for relation '${cond.field}'`);
205
+ }
206
+ const targetFk = fk.databaseName;
207
+ const parentPk = fk.referencedColumn?.databaseName
208
+ ?? parentMeta.primaryColumns[0].databaseName;
209
+ joinSql = `"${subAlias}"."${targetFk}" = "${ctx.currentAlias}"."${parentPk}"`;
210
+ }
211
+ else {
212
+ throw new Error(`genquery/typeorm: cannot resolve join columns for relation '${cond.field}'`);
213
+ }
214
+ const subCtx = {
215
+ ...ctx,
216
+ currentAlias: subAlias,
217
+ currentPath: joinPath(ctx.currentPath, cond.field),
218
+ currentEntity: cond.targetEntity,
219
+ };
220
+ const nestedFrag = buildSearchByFragment(cond.nested, subCtx);
221
+ let whereContent = joinSql;
222
+ if (nestedFrag.sql) {
223
+ const inner = cond.op === "every" ? `NOT (${nestedFrag.sql})` : nestedFrag.sql;
224
+ whereContent = `${joinSql} AND ${inner}`;
225
+ }
226
+ else if (cond.op === "every") {
227
+ // every(no conditions) ≡ "no related rows that violate nothing", i.e. true.
228
+ // Special-case: no WHERE on the nested side means `every` is trivially
229
+ // satisfied (no row can violate an empty predicate).
230
+ return { sql: "1=1", params: {} };
231
+ }
232
+ const exists = cond.op === "some" ? "EXISTS" : "NOT EXISTS";
233
+ const sql = `${exists} (SELECT 1 FROM "${targetTable}" "${subAlias}" WHERE ${whereContent})`;
234
+ return { sql, params: nestedFrag.params };
235
+ }
236
+ /**
237
+ * Build a SQL fragment representing an entire ParsedSearchBy (conditions
238
+ * AND-ed together, with the OR group AND-ed in). Used inside EXISTS
239
+ * subqueries where we need raw SQL rather than a builder mutation.
240
+ *
241
+ * Throws if a nested relation appears — those need their own EXISTS subquery
242
+ * with metadata resolution, which Phase 1 doesn't support inside every/none.
243
+ */
244
+ function buildSearchByFragment(searchBy, ctx) {
245
+ const andParts = [];
246
+ const params = {};
247
+ for (const cond of searchBy.conditions) {
248
+ if (cond.kind === "relation") {
249
+ throw new errors_1.QueryValidationError(`Nested relation filter '${cond.field}' inside 'every'/'none' is not supported in this version`, joinPath(ctx.currentPath, cond.field));
250
+ }
251
+ const frag = buildLeaf(cond, ctx);
252
+ andParts.push(frag.sql);
253
+ Object.assign(params, frag.params);
254
+ }
255
+ if (searchBy.or.length > 0) {
256
+ const orParts = [];
257
+ for (const sub of searchBy.or) {
258
+ const subFrag = buildSearchByFragment(sub, ctx);
259
+ if (subFrag.sql)
260
+ orParts.push(`(${subFrag.sql})`);
261
+ Object.assign(params, subFrag.params);
262
+ }
263
+ if (orParts.length > 0)
264
+ andParts.push(`(${orParts.join(" OR ")})`);
265
+ }
266
+ return { sql: andParts.join(" AND "), params };
267
+ }
268
+ /**
269
+ * Apply a `ParsedSearchBy` inside a TypeORM `Brackets` callback. Caller is
270
+ * responsible for wrapping with `qb.andWhere(new Brackets(b => applySearchByInside(b, ..., ctx)))`.
271
+ */
272
+ function applySearchByInside(qb, searchBy, ctx) {
273
+ let first = true;
274
+ for (const cond of searchBy.conditions) {
275
+ applyCondition(qb, cond, ctx, first);
276
+ first = false;
277
+ }
278
+ if (searchBy.or.length > 0) {
279
+ const orBrackets = new typeorm_1.Brackets((orQb) => {
280
+ let orFirst = true;
281
+ for (const sub of searchBy.or) {
282
+ const sub_brackets = new typeorm_1.Brackets((b) => applySearchByInside(b, sub, ctx));
283
+ if (orFirst)
284
+ orQb.where(sub_brackets);
285
+ else
286
+ orQb.orWhere(sub_brackets);
287
+ orFirst = false;
288
+ }
289
+ });
290
+ if (first)
291
+ qb.where(orBrackets);
292
+ else
293
+ qb.andWhere(orBrackets);
294
+ first = false;
295
+ }
296
+ }
297
+ //# sourceMappingURL=where.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"where.js","sourceRoot":"","sources":["../../../src/adapters/typeorm/where.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { DateTimeInput } from "./types";
2
+ export declare function parseDateTime(input: DateTimeInput, path: string): Date;
3
+ export declare function looksLikeDateTime(v: unknown): boolean;
4
+ //# sourceMappingURL=datetime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"datetime.d.ts","sourceRoot":"","sources":["../src/datetime.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAuB,MAAM,SAAS,CAAC;AA4BlE,wBAAgB,aAAa,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAuDtE;AAkBD,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAErD"}
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseDateTime = parseDateTime;
4
+ exports.looksLikeDateTime = looksLikeDateTime;
5
+ const errors_1 = require("./errors");
6
+ const ISO_OFFSET_RE = /^(Z|[+-]\d{2}(:?\d{2})?(:?:\d{2})?)$/;
7
+ function normalizeOffset(offset, path) {
8
+ if (offset === "Z")
9
+ return "Z";
10
+ if (!ISO_OFFSET_RE.test(offset)) {
11
+ throw new errors_1.QueryValidationError(`Invalid offset '${offset}' (expected 'Z' or '±HH:MM' / '±HHMM' / '±HH')`, path);
12
+ }
13
+ // Ensure leading sign
14
+ if (!offset.startsWith("+") && !offset.startsWith("-")) {
15
+ offset = "+" + offset;
16
+ }
17
+ // Expand "+HH" -> "+HH:00" and "+HHMM" -> "+HH:MM"
18
+ const sign = offset[0];
19
+ const rest = offset.slice(1).replace(":", "");
20
+ if (rest.length === 2)
21
+ return `${sign}${rest}:00`;
22
+ if (rest.length === 4)
23
+ return `${sign}${rest.slice(0, 2)}:${rest.slice(2)}`;
24
+ return offset;
25
+ }
26
+ function pad(n, len = 2) {
27
+ return String(n).padStart(len, "0");
28
+ }
29
+ function parseDateTime(input, path) {
30
+ if (typeof input === "string") {
31
+ const d = new Date(input);
32
+ if (Number.isNaN(d.getTime())) {
33
+ throw new errors_1.QueryValidationError(`Invalid ISO 8601 datetime '${input}'`, path);
34
+ }
35
+ return d;
36
+ }
37
+ if (input === null || typeof input !== "object" || Array.isArray(input)) {
38
+ throw new errors_1.QueryValidationError(`Expected ISO string or datetime object`, path);
39
+ }
40
+ const obj = input;
41
+ const year = obj.year ?? 1970;
42
+ const month = obj.month ?? 1;
43
+ const day = obj.day ?? 1;
44
+ const hours = obj.hours ?? 0;
45
+ const minutes = obj.minutes ?? 0;
46
+ const seconds = obj.seconds ?? 0;
47
+ const offset = normalizeOffset(obj.offset ?? "Z", `${path}.offset`);
48
+ for (const [k, v] of Object.entries({
49
+ year,
50
+ month,
51
+ day,
52
+ hours,
53
+ minutes,
54
+ seconds,
55
+ })) {
56
+ if (typeof v !== "number" || !Number.isFinite(v) || !Number.isInteger(v)) {
57
+ throw new errors_1.QueryValidationError(`'${k}' must be an integer (got ${JSON.stringify(v)})`, path);
58
+ }
59
+ }
60
+ const iso = `${pad(year, 4)}-${pad(month)}-${pad(day)}T${pad(hours)}:${pad(minutes)}:${pad(seconds)}${offset}`;
61
+ const d = new Date(iso);
62
+ if (Number.isNaN(d.getTime())) {
63
+ throw new errors_1.QueryValidationError(`Invalid datetime components (built '${iso}')`, path);
64
+ }
65
+ return d;
66
+ }
67
+ function isDateTimeObject(v) {
68
+ if (v === null || typeof v !== "object" || Array.isArray(v))
69
+ return false;
70
+ const keys = new Set([
71
+ "year",
72
+ "month",
73
+ "day",
74
+ "hours",
75
+ "minutes",
76
+ "seconds",
77
+ "offset",
78
+ ]);
79
+ // Treat as datetime object only if every key belongs to the set.
80
+ // (Otherwise it might be a `{before, after}` range.)
81
+ return Object.keys(v).every((k) => keys.has(k));
82
+ }
83
+ function looksLikeDateTime(v) {
84
+ return typeof v === "string" || isDateTimeObject(v);
85
+ }
86
+ //# sourceMappingURL=datetime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"datetime.js","sourceRoot":"","sources":["../src/datetime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ import type { Adapter } from "./adapters/base";
2
+ import type { ParsedQuery } from "./parsed";
3
+ import type { Schema } from "./schema";
4
+ import type { GenQueryInput } from "./types";
5
+ export interface GenQueryEngineOptions<TTarget, TResult> {
6
+ adapter: Adapter<TTarget, TResult>;
7
+ }
8
+ type IsAny<T> = 0 extends 1 & T ? true : false;
9
+ /** True for TypeORM's wide ObjectLiteral default — treat as "unspecified". */
10
+ type IsLooseRecord<T> = IsAny<T> extends true ? true : [T] extends [Record<string, any>] ? [Record<string, any>] extends [T] ? true : false : false;
11
+ /**
12
+ * Inspect the target's structural shape. If it looks like a TypeORM
13
+ * `SelectQueryBuilder<T>` (has `getMany(): Promise<T[]>`), pull out T.
14
+ * Falls back to `unknown` (loose mode) for any other adapter target.
15
+ */
16
+ type InferEntityFromTarget<X> = X extends {
17
+ getMany(): Promise<infer A>;
18
+ } ? A extends (infer T)[] ? IsLooseRecord<T> extends true ? unknown : T : unknown : unknown;
19
+ /**
20
+ * Combines parsing + an adapter into a single entry point. The engine is
21
+ * generic over the adapter so the signature of `run` matches the chosen
22
+ * backend (e.g. `SelectQueryBuilder<T>` in/out for TypeORM).
23
+ *
24
+ * The schema is read from the adapter — there is one source of truth.
25
+ */
26
+ export declare class GenQueryEngine<TTarget, TResult> {
27
+ readonly schema: Schema;
28
+ readonly adapter: Adapter<TTarget, TResult>;
29
+ constructor(options: GenQueryEngineOptions<TTarget, TResult>);
30
+ /**
31
+ * Parse only — useful when you want to inspect / cache the parsed form.
32
+ *
33
+ * Pass an entity class as the generic parameter to get autocomplete on
34
+ * fields / relations (e.g. `engine.parse<User>(input, "User")`).
35
+ */
36
+ parse<T = unknown>(input: GenQueryInput<T>, rootEntity: string): ParsedQuery;
37
+ /**
38
+ * Parse and apply.
39
+ *
40
+ * The entity type is inferred from the `target` argument when it has a
41
+ * recognizable shape (e.g. a TypeORM `SelectQueryBuilder<User>`). When the
42
+ * adapter implements `getRootEntity`, the `rootEntity` string is optional —
43
+ * the engine asks the adapter to derive it from the target. Pass an explicit
44
+ * `rootEntity` to override (or when the adapter can't introspect).
45
+ */
46
+ run<X extends TTarget>(input: GenQueryInput<InferEntityFromTarget<X>>, target: X): TResult;
47
+ run<X extends TTarget>(input: GenQueryInput<InferEntityFromTarget<X>>, rootEntity: string, target: X): TResult;
48
+ /** Apply a previously parsed query. */
49
+ runParsed(parsed: ParsedQuery, target: TTarget): TResult;
50
+ }
51
+ export {};
52
+ //# sourceMappingURL=engine.d.ts.map
@@ -0,0 +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;AAC5C,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;;;;GAIG;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,OAAO,CAAC;AAEZ;;;;;;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;;;;;;;;OAQG;IACH,GAAG,CAAC,CAAC,SAAS,OAAO,EACnB,KAAK,EAAE,aAAa,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,EAC9C,MAAM,EAAE,CAAC,GACR,OAAO;IACV,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;IA2BV,uCAAuC;IACvC,SAAS,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO;CAGzD"}
package/dist/engine.js ADDED
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GenQueryEngine = void 0;
4
+ const parser_1 = require("./parser");
5
+ /**
6
+ * Combines parsing + an adapter into a single entry point. The engine is
7
+ * generic over the adapter so the signature of `run` matches the chosen
8
+ * backend (e.g. `SelectQueryBuilder<T>` in/out for TypeORM).
9
+ *
10
+ * The schema is read from the adapter — there is one source of truth.
11
+ */
12
+ class GenQueryEngine {
13
+ constructor(options) {
14
+ this.adapter = options.adapter;
15
+ this.schema = options.adapter.schema;
16
+ }
17
+ /**
18
+ * Parse only — useful when you want to inspect / cache the parsed form.
19
+ *
20
+ * Pass an entity class as the generic parameter to get autocomplete on
21
+ * fields / relations (e.g. `engine.parse<User>(input, "User")`).
22
+ */
23
+ parse(input, rootEntity) {
24
+ return (0, parser_1.parseQuery)(input, this.schema, rootEntity);
25
+ }
26
+ run(input, arg2, arg3) {
27
+ let rootEntity;
28
+ let target;
29
+ if (typeof arg2 === "string") {
30
+ rootEntity = arg2;
31
+ target = arg3;
32
+ }
33
+ else {
34
+ target = arg2;
35
+ const derived = this.adapter.getRootEntity?.(target);
36
+ if (!derived) {
37
+ throw new Error("GenQueryEngine.run: rootEntity not provided and the adapter " +
38
+ `('${this.adapter.name}') could not derive it from the target. ` +
39
+ "Pass rootEntity explicitly: engine.run(input, rootEntity, target).");
40
+ }
41
+ rootEntity = derived;
42
+ }
43
+ const parsed = (0, parser_1.parseQuery)(input, this.schema, rootEntity);
44
+ return this.adapter.apply(target, parsed);
45
+ }
46
+ /** Apply a previously parsed query. */
47
+ runParsed(parsed, target) {
48
+ return this.adapter.apply(target, parsed);
49
+ }
50
+ }
51
+ exports.GenQueryEngine = GenQueryEngine;
52
+ //# sourceMappingURL=engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":";;;AACA,qCAAsC;AAqCtC;;;;;;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;IAoBD,GAAG,CACD,KAAoB,EACpB,IAAsB,EACtB,IAAc;QAEd,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,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5C,CAAC;IAED,uCAAuC;IACvC,SAAS,CAAC,MAAmB,EAAE,MAAe;QAC5C,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5C,CAAC;CACF;AAnED,wCAmEC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Thrown when the input query is structurally invalid or refers to unknown
3
+ * fields/relations.
4
+ */
5
+ export declare class QueryValidationError extends Error {
6
+ /** Dot-path to the offending location inside the input query. */
7
+ readonly path: string;
8
+ constructor(message: string, path: string);
9
+ }
10
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,iEAAiE;IACjE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBAEV,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;CAK1C"}
package/dist/errors.js ADDED
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.QueryValidationError = void 0;
4
+ /**
5
+ * Thrown when the input query is structurally invalid or refers to unknown
6
+ * fields/relations.
7
+ */
8
+ class QueryValidationError extends Error {
9
+ constructor(message, path) {
10
+ super(`${message} (at ${path || "<root>"})`);
11
+ this.name = "QueryValidationError";
12
+ this.path = path;
13
+ }
14
+ }
15
+ exports.QueryValidationError = QueryValidationError;
16
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACH,MAAa,oBAAqB,SAAQ,KAAK;IAI7C,YAAY,OAAe,EAAE,IAAY;QACvC,KAAK,CAAC,GAAG,OAAO,QAAQ,IAAI,IAAI,QAAQ,GAAG,CAAC,CAAC;QAC7C,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;QACnC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AATD,oDASC"}
@@ -0,0 +1,9 @@
1
+ export * from "./types";
2
+ export * from "./parsed";
3
+ export * from "./schema";
4
+ export * from "./errors";
5
+ export { parseQuery } from "./parser";
6
+ export { GenQueryEngine, type GenQueryEngineOptions } from "./engine";
7
+ export type { Adapter } from "./adapters/base";
8
+ export { parseDateTime } from "./datetime";
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,KAAK,qBAAqB,EAAE,MAAM,UAAU,CAAC;AACtE,YAAY,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.parseDateTime = exports.GenQueryEngine = exports.parseQuery = void 0;
18
+ __exportStar(require("./types"), exports);
19
+ __exportStar(require("./parsed"), exports);
20
+ __exportStar(require("./schema"), exports);
21
+ __exportStar(require("./errors"), exports);
22
+ var parser_1 = require("./parser");
23
+ Object.defineProperty(exports, "parseQuery", { enumerable: true, get: function () { return parser_1.parseQuery; } });
24
+ var engine_1 = require("./engine");
25
+ Object.defineProperty(exports, "GenQueryEngine", { enumerable: true, get: function () { return engine_1.GenQueryEngine; } });
26
+ var datetime_1 = require("./datetime");
27
+ Object.defineProperty(exports, "parseDateTime", { enumerable: true, get: function () { return datetime_1.parseDateTime; } });
28
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,0CAAwB;AACxB,2CAAyB;AACzB,2CAAyB;AACzB,2CAAyB;AACzB,mCAAsC;AAA7B,oGAAA,UAAU,OAAA;AACnB,mCAAsE;AAA7D,wGAAA,cAAc,OAAA;AAEvB,uCAA2C;AAAlC,yGAAA,aAAa,OAAA"}