@generazioneai/genquery 0.12.1 → 0.13.1
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 +41 -48
- package/dist/adapters/base.d.ts +9 -10
- package/dist/adapters/base.d.ts.map +1 -1
- package/dist/adapters/prisma/create.d.ts +2 -2
- package/dist/adapters/prisma/create.js +2 -2
- package/dist/engine.d.ts +9 -11
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +1 -1
- package/dist/engine.js.map +1 -1
- package/dist/parsed.d.ts +1 -1
- package/dist/schema.d.ts +2 -3
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js.map +1 -1
- package/package.json +5 -25
- package/spec.md +2 -2
- package/dist/adapters/typeorm/adapter.d.ts +0 -42
- package/dist/adapters/typeorm/adapter.d.ts.map +0 -1
- package/dist/adapters/typeorm/adapter.js +0 -135
- package/dist/adapters/typeorm/adapter.js.map +0 -1
- package/dist/adapters/typeorm/aliases.d.ts +0 -25
- package/dist/adapters/typeorm/aliases.d.ts.map +0 -1
- package/dist/adapters/typeorm/aliases.js +0 -47
- package/dist/adapters/typeorm/aliases.js.map +0 -1
- package/dist/adapters/typeorm/create.d.ts +0 -29
- package/dist/adapters/typeorm/create.d.ts.map +0 -1
- package/dist/adapters/typeorm/create.js +0 -29
- package/dist/adapters/typeorm/create.js.map +0 -1
- package/dist/adapters/typeorm/escape.d.ts +0 -5
- package/dist/adapters/typeorm/escape.d.ts.map +0 -1
- package/dist/adapters/typeorm/escape.js +0 -13
- package/dist/adapters/typeorm/escape.js.map +0 -1
- package/dist/adapters/typeorm/index.d.ts +0 -4
- package/dist/adapters/typeorm/index.d.ts.map +0 -1
- package/dist/adapters/typeorm/index.js +0 -10
- package/dist/adapters/typeorm/index.js.map +0 -1
- package/dist/adapters/typeorm/joins.d.ts +0 -29
- package/dist/adapters/typeorm/joins.d.ts.map +0 -1
- package/dist/adapters/typeorm/joins.js +0 -91
- package/dist/adapters/typeorm/joins.js.map +0 -1
- package/dist/adapters/typeorm/params.d.ts +0 -8
- package/dist/adapters/typeorm/params.d.ts.map +0 -1
- package/dist/adapters/typeorm/params.js +0 -15
- package/dist/adapters/typeorm/params.js.map +0 -1
- package/dist/adapters/typeorm/schema-from-typeorm.d.ts +0 -50
- package/dist/adapters/typeorm/schema-from-typeorm.d.ts.map +0 -1
- package/dist/adapters/typeorm/schema-from-typeorm.js +0 -197
- package/dist/adapters/typeorm/schema-from-typeorm.js.map +0 -1
- package/dist/adapters/typeorm/where.d.ts +0 -26
- package/dist/adapters/typeorm/where.d.ts.map +0 -1
- package/dist/adapters/typeorm/where.js +0 -315
- package/dist/adapters/typeorm/where.js.map +0 -1
- package/dist/paginate/cursor.d.ts +0 -18
- package/dist/paginate/cursor.d.ts.map +0 -1
- package/dist/paginate/cursor.js +0 -53
- package/dist/paginate/cursor.js.map +0 -1
- package/dist/paginate/in-memory.d.ts +0 -13
- package/dist/paginate/in-memory.d.ts.map +0 -1
- package/dist/paginate/in-memory.js +0 -21
- package/dist/paginate/in-memory.js.map +0 -1
- package/dist/paginate/index.d.ts +0 -27
- package/dist/paginate/index.d.ts.map +0 -1
- package/dist/paginate/index.js +0 -33
- package/dist/paginate/index.js.map +0 -1
- package/dist/paginate/model.d.ts +0 -16
- package/dist/paginate/model.d.ts.map +0 -1
- package/dist/paginate/model.js +0 -3
- package/dist/paginate/model.js.map +0 -1
- package/dist/paginate/offset.d.ts +0 -25
- package/dist/paginate/offset.d.ts.map +0 -1
- package/dist/paginate/offset.js +0 -74
- package/dist/paginate/offset.js.map +0 -1
- package/dist/paginate/pagination.d.ts +0 -18
- package/dist/paginate/pagination.d.ts.map +0 -1
- package/dist/paginate/pagination.js +0 -47
- package/dist/paginate/pagination.js.map +0 -1
- package/dist/paginate/transform.d.ts +0 -15
- package/dist/paginate/transform.d.ts.map +0 -1
- package/dist/paginate/transform.js +0 -43
- package/dist/paginate/transform.js.map +0 -1
- package/dist/paginate/types.d.ts +0 -93
- package/dist/paginate/types.d.ts.map +0 -1
- package/dist/paginate/types.js +0 -10
- package/dist/paginate/types.js.map +0 -1
|
@@ -1,135 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.TypeORMAdapter = void 0;
|
|
4
|
-
const typeorm_1 = require("typeorm");
|
|
5
|
-
const schema_1 = require("../../schema");
|
|
6
|
-
const aliases_1 = require("./aliases");
|
|
7
|
-
const joins_1 = require("./joins");
|
|
8
|
-
const params_1 = require("./params");
|
|
9
|
-
const where_1 = require("./where");
|
|
10
|
-
/**
|
|
11
|
-
* Applies a parsed GenQuery to a TypeORM `SelectQueryBuilder`. The builder is
|
|
12
|
-
* mutated in place and returned for convenience.
|
|
13
|
-
*
|
|
14
|
-
* Typical use:
|
|
15
|
-
*
|
|
16
|
-
* const qb = userRepo.createQueryBuilder("user");
|
|
17
|
-
* adapter.apply(qb, parsed);
|
|
18
|
-
* const rows = await qb.getMany();
|
|
19
|
-
*/
|
|
20
|
-
class TypeORMAdapter {
|
|
21
|
-
constructor(schema, options = {}) {
|
|
22
|
-
this.schema = schema;
|
|
23
|
-
this.options = options;
|
|
24
|
-
this.name = "typeorm";
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* Derive the root entity name from a TypeORM `SelectQueryBuilder`. Returns
|
|
28
|
-
* the entity class name as TypeORM knows it (e.g. `"User"`), so the engine
|
|
29
|
-
* can look it up in the schema without the caller having to repeat it.
|
|
30
|
-
*/
|
|
31
|
-
getRootEntity(qb) {
|
|
32
|
-
return qb.expressionMap?.mainAlias?.metadata?.name;
|
|
33
|
-
}
|
|
34
|
-
apply(qb, query) {
|
|
35
|
-
const rootEntity = (0, schema_1.getEntity)(this.schema, query.rootEntity);
|
|
36
|
-
const aliases = new aliases_1.AliasRegistry(qb.alias);
|
|
37
|
-
const params = new params_1.ParamCounter(this.options.paramPrefix);
|
|
38
|
-
// 1. Root selection (must happen before leftJoinAndSelect calls, since
|
|
39
|
-
// `.select()` replaces the entire selection list).
|
|
40
|
-
this.applyRootSelect(qb, rootEntity, query.select, aliases.root());
|
|
41
|
-
// 2. Plan + apply all joins (includes + searchBy relations).
|
|
42
|
-
const plans = (0, joins_1.planJoins)(query, this.schema, aliases);
|
|
43
|
-
for (const plan of plans) {
|
|
44
|
-
this.applyJoin(qb, plan);
|
|
45
|
-
}
|
|
46
|
-
// 3. WHERE.
|
|
47
|
-
if (query.searchBy) {
|
|
48
|
-
const ctx = {
|
|
49
|
-
schema: this.schema,
|
|
50
|
-
aliases,
|
|
51
|
-
params,
|
|
52
|
-
paramBag: {},
|
|
53
|
-
currentAlias: aliases.root(),
|
|
54
|
-
currentPath: "",
|
|
55
|
-
currentEntity: query.rootEntity,
|
|
56
|
-
connection: qb.connection,
|
|
57
|
-
};
|
|
58
|
-
qb.andWhere(new typeorm_1.Brackets((sub) => (0, where_1.applySearchByInside)(sub, query.searchBy, ctx)));
|
|
59
|
-
}
|
|
60
|
-
// 4. ORDER BY.
|
|
61
|
-
if (query.orderBy) {
|
|
62
|
-
qb.addOrderBy(`${aliases.root()}.${query.orderBy.field}`, query.orderBy.order.toUpperCase());
|
|
63
|
-
}
|
|
64
|
-
// 5. Pagination.
|
|
65
|
-
this.applyPagination(qb, query.pagination);
|
|
66
|
-
return qb;
|
|
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
|
-
}
|
|
92
|
-
applyRootSelect(qb, entity, select, rootAlias) {
|
|
93
|
-
if (select.kind === "all")
|
|
94
|
-
return; // default behaviour
|
|
95
|
-
const pk = (0, schema_1.primaryKeyOf)(entity);
|
|
96
|
-
if (select.kind === "none") {
|
|
97
|
-
qb.select([`${rootAlias}.${pk}`]);
|
|
98
|
-
return;
|
|
99
|
-
}
|
|
100
|
-
// fields
|
|
101
|
-
const set = new Set(select.fields);
|
|
102
|
-
set.add(pk); // keep primary key so hydration + relations still work
|
|
103
|
-
qb.select([...set].map((f) => `${rootAlias}.${f}`));
|
|
104
|
-
}
|
|
105
|
-
applyJoin(qb, plan) {
|
|
106
|
-
const targetEntity = (0, schema_1.getEntity)(this.schema, plan.targetEntity);
|
|
107
|
-
switch (plan.selection.kind) {
|
|
108
|
-
case "none":
|
|
109
|
-
qb.leftJoin(plan.propertyPath, plan.alias);
|
|
110
|
-
return;
|
|
111
|
-
case "all":
|
|
112
|
-
qb.leftJoinAndSelect(plan.propertyPath, plan.alias);
|
|
113
|
-
return;
|
|
114
|
-
case "fields": {
|
|
115
|
-
qb.leftJoin(plan.propertyPath, plan.alias);
|
|
116
|
-
const pk = (0, schema_1.primaryKeyOf)(targetEntity);
|
|
117
|
-
const set = new Set(plan.selection.fields);
|
|
118
|
-
set.add(pk);
|
|
119
|
-
qb.addSelect([...set].map((f) => `${plan.alias}.${f}`));
|
|
120
|
-
return;
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
applyPagination(qb, pagination) {
|
|
125
|
-
if (pagination.kind === "all")
|
|
126
|
-
return;
|
|
127
|
-
if (pagination.kind === "first") {
|
|
128
|
-
qb.skip(0).take(1);
|
|
129
|
-
return;
|
|
130
|
-
}
|
|
131
|
-
qb.skip(pagination.page * pagination.perPage).take(pagination.perPage);
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
exports.TypeORMAdapter = TypeORMAdapter;
|
|
135
|
-
//# sourceMappingURL=adapter.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/adapters/typeorm/adapter.ts"],"names":[],"mappings":";;;AAAA,qCAAgF;AAEhF,yCAKsB;AAEtB,uCAA0C;AAC1C,mCAAmD;AACnD,qCAAwC;AACxC,mCAA6D;AAO7D;;;;;;;;;GASG;AACH,MAAa,cAAc;IAMzB,YACkB,MAAc,EACb,UAAiC,EAAE;QADpC,WAAM,GAAN,MAAM,CAAQ;QACb,YAAO,GAAP,OAAO,CAA4B;QAJ7C,SAAI,GAAG,SAAS,CAAC;IAKvB,CAAC;IAEJ;;;;OAIG;IACH,aAAa,CAAC,EAAqC;QACjD,OAAO,EAAE,CAAC,aAAa,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC;IACrD,CAAC;IAED,KAAK,CACH,EAAyB,EACzB,KAAkB;QAElB,MAAM,UAAU,GAAG,IAAA,kBAAS,EAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;QAC5D,MAAM,OAAO,GAAG,IAAI,uBAAa,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,IAAI,qBAAY,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAE1D,uEAAuE;QACvE,sDAAsD;QACtD,IAAI,CAAC,eAAe,CAAC,EAAE,EAAE,UAAU,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAEnE,6DAA6D;QAC7D,MAAM,KAAK,GAAG,IAAA,iBAAS,EAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACrD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAC3B,CAAC;QAED,YAAY;QACZ,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACnB,MAAM,GAAG,GAAa;gBACpB,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,OAAO;gBACP,MAAM;gBACN,QAAQ,EAAE,EAAE;gBACZ,YAAY,EAAE,OAAO,CAAC,IAAI,EAAE;gBAC5B,WAAW,EAAE,EAAE;gBACf,aAAa,EAAE,KAAK,CAAC,UAAU;gBAC/B,UAAU,EAAE,EAAE,CAAC,UAAU;aAC1B,CAAC;YACF,EAAE,CAAC,QAAQ,CACT,IAAI,kBAAQ,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAA,2BAAmB,EAAC,GAAG,EAAE,KAAK,CAAC,QAAS,EAAE,GAAG,CAAC,CAAC,CACtE,CAAC;QACJ,CAAC;QAED,eAAe;QACf,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAClB,EAAE,CAAC,UAAU,CACX,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAC1C,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,EAAoB,CACpD,CAAC;QACJ,CAAC;QAED,iBAAiB;QACjB,IAAI,CAAC,eAAe,CAAC,EAAE,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;QAE3C,OAAO,EAAE,CAAC;IACZ,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,OAAO,CACX,EAAyB,EACzB,KAAkB;QAElB,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QACtB,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC,UAAU,CAAC;QAEnD,IAAI,IAAS,CAAC;QACd,IAAI,KAAyB,CAAC;QAC9B,IAAI,SAAS,EAAE,CAAC;YACd,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,CAAC,eAAe,EAAE,CAAC;QAC7C,CAAC;aAAM,CAAC;YACN,IAAI,GAAG,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC;QAC5B,CAAC;QAED,MAAM,MAAM,GAAuB,EAAE,IAAI,EAAE,CAAC;QAC5C,IAAI,UAAU;YAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC;QAC7C,IAAI,SAAS;YAAE,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;QACpC,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,eAAe,CACrB,EAAyB,EACzB,MAAwB,EACxB,MAAoB,EACpB,SAAiB;QAEjB,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK;YAAE,OAAO,CAAC,oBAAoB;QACvD,MAAM,EAAE,GAAG,IAAA,qBAAY,EAAC,MAAM,CAAC,CAAC;QAChC,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC3B,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,SAAS,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;YAClC,OAAO;QACT,CAAC;QACD,SAAS;QACT,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACnC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,uDAAuD;QACpE,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,SAAS,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IACtD,CAAC;IAEO,SAAS,CACf,EAAyB,EACzB,IAAc;QAEd,MAAM,YAAY,GAAG,IAAA,kBAAS,EAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAC/D,QAAQ,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;YAC5B,KAAK,MAAM;gBACT,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC3C,OAAO;YACT,KAAK,KAAK;gBACR,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;gBACpD,OAAO;YACT,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC3C,MAAM,EAAE,GAAG,IAAA,qBAAY,EAAC,YAAY,CAAC,CAAC;gBACtC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;gBAC3C,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACZ,EAAE,CAAC,SAAS,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBACxD,OAAO;YACT,CAAC;QACH,CAAC;IACH,CAAC;IAEO,eAAe,CACrB,EAAyB,EACzB,UAAqC;QAErC,IAAI,UAAU,CAAC,IAAI,KAAK,KAAK;YAAE,OAAO;QACtC,IAAI,UAAU,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAChC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACnB,OAAO;QACT,CAAC;QACD,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IACzE,CAAC;CACF;AApJD,wCAoJC"}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Manages join aliases for a single query. Each (path, alias) pair is unique
|
|
3
|
-
* within a query builder; aliases are derived from the relation path and a
|
|
4
|
-
* monotonic counter to avoid collisions and to stay under Postgres' identifier
|
|
5
|
-
* limit (63 chars).
|
|
6
|
-
*/
|
|
7
|
-
export declare class AliasRegistry {
|
|
8
|
-
private rootAlias;
|
|
9
|
-
private byPath;
|
|
10
|
-
private counter;
|
|
11
|
-
constructor(rootAlias: string);
|
|
12
|
-
/** Returns the alias for `path` if a join was previously registered. */
|
|
13
|
-
get(path: string): string | undefined;
|
|
14
|
-
/** Returns the alias for the root entity. */
|
|
15
|
-
root(): string;
|
|
16
|
-
/**
|
|
17
|
-
* Register an alias for `path`. `path` is expected to be a dot-joined chain
|
|
18
|
-
* of relation names (e.g. "posts.comments"). The alias incorporates the path
|
|
19
|
-
* but is truncated and suffixed with a counter for uniqueness.
|
|
20
|
-
*/
|
|
21
|
-
register(path: string): string;
|
|
22
|
-
/** Iterate registered (path, alias) pairs in insertion order. */
|
|
23
|
-
entries(): IterableIterator<[string, string]>;
|
|
24
|
-
}
|
|
25
|
-
//# sourceMappingURL=aliases.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"aliases.d.ts","sourceRoot":"","sources":["../../../src/adapters/typeorm/aliases.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,qBAAa,aAAa;IAIZ,OAAO,CAAC,SAAS;IAH7B,OAAO,CAAC,MAAM,CAA6B;IAC3C,OAAO,CAAC,OAAO,CAAK;gBAEA,SAAS,EAAE,MAAM;IAErC,wEAAwE;IACxE,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAIrC,6CAA6C;IAC7C,IAAI,IAAI,MAAM;IAId;;;;OAIG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAY9B,iEAAiE;IACjE,OAAO,IAAI,gBAAgB,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAG9C"}
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.AliasRegistry = void 0;
|
|
4
|
-
/**
|
|
5
|
-
* Manages join aliases for a single query. Each (path, alias) pair is unique
|
|
6
|
-
* within a query builder; aliases are derived from the relation path and a
|
|
7
|
-
* monotonic counter to avoid collisions and to stay under Postgres' identifier
|
|
8
|
-
* limit (63 chars).
|
|
9
|
-
*/
|
|
10
|
-
class AliasRegistry {
|
|
11
|
-
constructor(rootAlias) {
|
|
12
|
-
this.rootAlias = rootAlias;
|
|
13
|
-
this.byPath = new Map();
|
|
14
|
-
this.counter = 0;
|
|
15
|
-
}
|
|
16
|
-
/** Returns the alias for `path` if a join was previously registered. */
|
|
17
|
-
get(path) {
|
|
18
|
-
return this.byPath.get(path);
|
|
19
|
-
}
|
|
20
|
-
/** Returns the alias for the root entity. */
|
|
21
|
-
root() {
|
|
22
|
-
return this.rootAlias;
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* Register an alias for `path`. `path` is expected to be a dot-joined chain
|
|
26
|
-
* of relation names (e.g. "posts.comments"). The alias incorporates the path
|
|
27
|
-
* but is truncated and suffixed with a counter for uniqueness.
|
|
28
|
-
*/
|
|
29
|
-
register(path) {
|
|
30
|
-
const existing = this.byPath.get(path);
|
|
31
|
-
if (existing)
|
|
32
|
-
return existing;
|
|
33
|
-
const suffix = String(this.counter++);
|
|
34
|
-
const base = `${this.rootAlias}_${path.replace(/\./g, "_")}`;
|
|
35
|
-
// Stay well under Postgres' 63-char identifier limit.
|
|
36
|
-
const trimmed = base.length > 50 ? base.slice(0, 50) : base;
|
|
37
|
-
const alias = `${trimmed}_${suffix}`;
|
|
38
|
-
this.byPath.set(path, alias);
|
|
39
|
-
return alias;
|
|
40
|
-
}
|
|
41
|
-
/** Iterate registered (path, alias) pairs in insertion order. */
|
|
42
|
-
entries() {
|
|
43
|
-
return this.byPath.entries();
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
exports.AliasRegistry = AliasRegistry;
|
|
47
|
-
//# sourceMappingURL=aliases.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"aliases.js","sourceRoot":"","sources":["../../../src/adapters/typeorm/aliases.ts"],"names":[],"mappings":";;;AAAA;;;;;GAKG;AACH,MAAa,aAAa;IAIxB,YAAoB,SAAiB;QAAjB,cAAS,GAAT,SAAS,CAAQ;QAH7B,WAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;QACnC,YAAO,GAAG,CAAC,CAAC;IAEoB,CAAC;IAEzC,wEAAwE;IACxE,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED,6CAA6C;IAC7C,IAAI;QACF,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED;;;;OAIG;IACH,QAAQ,CAAC,IAAY;QACnB,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAC;QAC9B,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QACtC,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC;QAC7D,sDAAsD;QACtD,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC5D,MAAM,KAAK,GAAG,GAAG,OAAO,IAAI,MAAM,EAAE,CAAC;QACrC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC7B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,iEAAiE;IACjE,OAAO;QACL,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;IAC/B,CAAC;CACF;AArCD,sCAqCC"}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import type { DataSource, ObjectLiteral, SelectQueryBuilder } from "typeorm";
|
|
2
|
-
import { GenQueryEngine } from "../../engine";
|
|
3
|
-
import { type TypeORMAdapterOptions } from "./adapter";
|
|
4
|
-
import { type SchemaFromTypeORMOptions } from "./schema-from-typeorm";
|
|
5
|
-
export interface CreateTypeORMEngineOptions {
|
|
6
|
-
/** Options forwarded to `schemaFromTypeORM` (entity filter, overrides, ...). */
|
|
7
|
-
schema?: SchemaFromTypeORMOptions;
|
|
8
|
-
/** Options forwarded to the `TypeORMAdapter` constructor (paramPrefix, ...). */
|
|
9
|
-
adapter?: TypeORMAdapterOptions;
|
|
10
|
-
}
|
|
11
|
-
/**
|
|
12
|
-
* One-line setup for the common case: read the schema from TypeORM, build the
|
|
13
|
-
* adapter and the engine.
|
|
14
|
-
*
|
|
15
|
-
* await dataSource.initialize();
|
|
16
|
-
* const engine = createTypeORMEngine(dataSource);
|
|
17
|
-
*
|
|
18
|
-
* For per-entity type overrides or custom adapter parameters:
|
|
19
|
-
*
|
|
20
|
-
* const engine = createTypeORMEngine(dataSource, {
|
|
21
|
-
* schema: { entities: [User, Post], overrides: { User: { meta: "string" } } },
|
|
22
|
-
* adapter: { paramPrefix: "q" },
|
|
23
|
-
* });
|
|
24
|
-
*
|
|
25
|
-
* The DataSource must be initialized before calling this — `entityMetadatas`
|
|
26
|
-
* is empty otherwise.
|
|
27
|
-
*/
|
|
28
|
-
export declare function createTypeORMEngine(dataSource: DataSource, options?: CreateTypeORMEngineOptions): GenQueryEngine<SelectQueryBuilder<ObjectLiteral>, SelectQueryBuilder<ObjectLiteral>>;
|
|
29
|
-
//# sourceMappingURL=create.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/adapters/typeorm/create.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAkB,KAAK,qBAAqB,EAAE,MAAM,WAAW,CAAC;AACvE,OAAO,EAEL,KAAK,wBAAwB,EAC9B,MAAM,uBAAuB,CAAC;AAE/B,MAAM,WAAW,0BAA0B;IACzC,gFAAgF;IAChF,MAAM,CAAC,EAAE,wBAAwB,CAAC;IAClC,gFAAgF;IAChF,OAAO,CAAC,EAAE,qBAAqB,CAAC;CACjC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,UAAU,EACtB,OAAO,GAAE,0BAA+B,GACvC,cAAc,CACf,kBAAkB,CAAC,aAAa,CAAC,EACjC,kBAAkB,CAAC,aAAa,CAAC,CAClC,CAIA"}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createTypeORMEngine = createTypeORMEngine;
|
|
4
|
-
const engine_1 = require("../../engine");
|
|
5
|
-
const adapter_1 = require("./adapter");
|
|
6
|
-
const schema_from_typeorm_1 = require("./schema-from-typeorm");
|
|
7
|
-
/**
|
|
8
|
-
* One-line setup for the common case: read the schema from TypeORM, build the
|
|
9
|
-
* adapter and the engine.
|
|
10
|
-
*
|
|
11
|
-
* await dataSource.initialize();
|
|
12
|
-
* const engine = createTypeORMEngine(dataSource);
|
|
13
|
-
*
|
|
14
|
-
* For per-entity type overrides or custom adapter parameters:
|
|
15
|
-
*
|
|
16
|
-
* const engine = createTypeORMEngine(dataSource, {
|
|
17
|
-
* schema: { entities: [User, Post], overrides: { User: { meta: "string" } } },
|
|
18
|
-
* adapter: { paramPrefix: "q" },
|
|
19
|
-
* });
|
|
20
|
-
*
|
|
21
|
-
* The DataSource must be initialized before calling this — `entityMetadatas`
|
|
22
|
-
* is empty otherwise.
|
|
23
|
-
*/
|
|
24
|
-
function createTypeORMEngine(dataSource, options = {}) {
|
|
25
|
-
const schema = (0, schema_from_typeorm_1.schemaFromTypeORM)(dataSource, options.schema);
|
|
26
|
-
const adapter = new adapter_1.TypeORMAdapter(schema, options.adapter);
|
|
27
|
-
return new engine_1.GenQueryEngine({ adapter });
|
|
28
|
-
}
|
|
29
|
-
//# sourceMappingURL=create.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/adapters/typeorm/create.ts"],"names":[],"mappings":";;AAgCA,kDAUC;AAzCD,yCAA8C;AAC9C,uCAAuE;AACvE,+DAG+B;AAS/B;;;;;;;;;;;;;;;;GAgBG;AACH,SAAgB,mBAAmB,CACjC,UAAsB,EACtB,UAAsC,EAAE;IAKxC,MAAM,MAAM,GAAG,IAAA,uCAAiB,EAAC,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7D,MAAM,OAAO,GAAG,IAAI,wBAAc,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5D,OAAO,IAAI,uBAAc,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;AACzC,CAAC"}
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
/** Escape user input that will be embedded in a LIKE/ILIKE pattern. */
|
|
2
|
-
export declare function escapeLike(value: string): string;
|
|
3
|
-
/** Split a search string by whitespace, dropping empty parts. */
|
|
4
|
-
export declare function splitWords(value: string): string[];
|
|
5
|
-
//# sourceMappingURL=escape.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"escape.d.ts","sourceRoot":"","sources":["../../../src/adapters/typeorm/escape.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED,iEAAiE;AACjE,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAElD"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.escapeLike = escapeLike;
|
|
4
|
-
exports.splitWords = splitWords;
|
|
5
|
-
/** Escape user input that will be embedded in a LIKE/ILIKE pattern. */
|
|
6
|
-
function escapeLike(value) {
|
|
7
|
-
return value.replace(/\\/g, "\\\\").replace(/%/g, "\\%").replace(/_/g, "\\_");
|
|
8
|
-
}
|
|
9
|
-
/** Split a search string by whitespace, dropping empty parts. */
|
|
10
|
-
function splitWords(value) {
|
|
11
|
-
return value.split(/\s+/).filter((s) => s.length > 0);
|
|
12
|
-
}
|
|
13
|
-
//# sourceMappingURL=escape.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"escape.js","sourceRoot":"","sources":["../../../src/adapters/typeorm/escape.ts"],"names":[],"mappings":";;AACA,gCAEC;AAGD,gCAEC;AARD,uEAAuE;AACvE,SAAgB,UAAU,CAAC,KAAa;IACtC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAChF,CAAC;AAED,iEAAiE;AACjE,SAAgB,UAAU,CAAC,KAAa;IACtC,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACxD,CAAC"}
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
export { TypeORMAdapter, type TypeORMAdapterOptions } from "./adapter";
|
|
2
|
-
export { schemaFromTypeORM, type SchemaFromTypeORMOptions, } from "./schema-from-typeorm";
|
|
3
|
-
export { createTypeORMEngine, type CreateTypeORMEngineOptions, } from "./create";
|
|
4
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/typeorm/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,KAAK,qBAAqB,EAAE,MAAM,WAAW,CAAC;AACvE,OAAO,EACL,iBAAiB,EACjB,KAAK,wBAAwB,GAC9B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,mBAAmB,EACnB,KAAK,0BAA0B,GAChC,MAAM,UAAU,CAAC"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createTypeORMEngine = exports.schemaFromTypeORM = exports.TypeORMAdapter = void 0;
|
|
4
|
-
var adapter_1 = require("./adapter");
|
|
5
|
-
Object.defineProperty(exports, "TypeORMAdapter", { enumerable: true, get: function () { return adapter_1.TypeORMAdapter; } });
|
|
6
|
-
var schema_from_typeorm_1 = require("./schema-from-typeorm");
|
|
7
|
-
Object.defineProperty(exports, "schemaFromTypeORM", { enumerable: true, get: function () { return schema_from_typeorm_1.schemaFromTypeORM; } });
|
|
8
|
-
var create_1 = require("./create");
|
|
9
|
-
Object.defineProperty(exports, "createTypeORMEngine", { enumerable: true, get: function () { return create_1.createTypeORMEngine; } });
|
|
10
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/typeorm/index.ts"],"names":[],"mappings":";;;AAAA,qCAAuE;AAA9D,yGAAA,cAAc,OAAA;AACvB,6DAG+B;AAF7B,wHAAA,iBAAiB,OAAA;AAGnB,mCAGkB;AAFhB,6GAAA,mBAAmB,OAAA"}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import type { ParsedQuery } from "../../parsed";
|
|
2
|
-
import { type Schema } from "../../schema";
|
|
3
|
-
import type { AliasRegistry } from "./aliases";
|
|
4
|
-
export type JoinPlan = {
|
|
5
|
-
/** Dot-joined relation chain from the root entity, e.g. "posts.comments". */
|
|
6
|
-
path: string;
|
|
7
|
-
/** Property path on the parent alias, e.g. "rootAlias.posts". */
|
|
8
|
-
propertyPath: string;
|
|
9
|
-
/** Generated alias used by the query builder for this relation. */
|
|
10
|
-
alias: string;
|
|
11
|
-
/** Entity name of the joined target. */
|
|
12
|
-
targetEntity: string;
|
|
13
|
-
/** Selection strategy. */
|
|
14
|
-
selection: {
|
|
15
|
-
kind: "none";
|
|
16
|
-
} | {
|
|
17
|
-
kind: "all";
|
|
18
|
-
} | {
|
|
19
|
-
kind: "fields";
|
|
20
|
-
fields: string[];
|
|
21
|
-
};
|
|
22
|
-
};
|
|
23
|
-
/**
|
|
24
|
-
* Walks the parsed query and produces an ordered list of joins. Parent joins
|
|
25
|
-
* always come before their descendants so the QueryBuilder can resolve the
|
|
26
|
-
* source alias.
|
|
27
|
-
*/
|
|
28
|
-
export declare function planJoins(query: ParsedQuery, schema: Schema, aliases: AliasRegistry): JoinPlan[];
|
|
29
|
-
//# sourceMappingURL=joins.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"joins.d.ts","sourceRoot":"","sources":["../../../src/adapters/typeorm/joins.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,WAAW,EAAkB,MAAM,cAAc,CAAC;AAC/E,OAAO,EACL,KAAK,MAAM,EAGZ,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE/C,MAAM,MAAM,QAAQ,GAAG;IACrB,6EAA6E;IAC7E,IAAI,EAAE,MAAM,CAAC;IACb,iEAAiE;IACjE,YAAY,EAAE,MAAM,CAAC;IACrB,mEAAmE;IACnE,KAAK,EAAE,MAAM,CAAC;IACd,wCAAwC;IACxC,YAAY,EAAE,MAAM,CAAC;IACrB,0BAA0B;IAC1B,SAAS,EACL;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAChB;QAAE,IAAI,EAAE,KAAK,CAAA;KAAE,GACf;QAAE,IAAI,EAAE,QAAQ,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;CAC1C,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,SAAS,CACvB,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,aAAa,GACrB,QAAQ,EAAE,CA6DZ"}
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.planJoins = planJoins;
|
|
4
|
-
const schema_1 = require("../../schema");
|
|
5
|
-
/**
|
|
6
|
-
* Walks the parsed query and produces an ordered list of joins. Parent joins
|
|
7
|
-
* always come before their descendants so the QueryBuilder can resolve the
|
|
8
|
-
* source alias.
|
|
9
|
-
*/
|
|
10
|
-
function planJoins(query, schema, aliases) {
|
|
11
|
-
const plans = [];
|
|
12
|
-
const byPath = new Map();
|
|
13
|
-
const upsert = (path, propertyPath, targetEntity, selection) => {
|
|
14
|
-
const existing = byPath.get(path);
|
|
15
|
-
if (existing) {
|
|
16
|
-
// Selection upgrade rules: explicit selections win over "none".
|
|
17
|
-
if (existing.selection.kind === "none" && selection.kind !== "none") {
|
|
18
|
-
existing.selection = selection;
|
|
19
|
-
}
|
|
20
|
-
else if (existing.selection.kind === "fields" &&
|
|
21
|
-
selection.kind === "all") {
|
|
22
|
-
existing.selection = selection;
|
|
23
|
-
}
|
|
24
|
-
else if (existing.selection.kind === "fields" &&
|
|
25
|
-
selection.kind === "fields") {
|
|
26
|
-
const set = new Set([
|
|
27
|
-
...existing.selection.fields,
|
|
28
|
-
...selection.fields,
|
|
29
|
-
]);
|
|
30
|
-
existing.selection = { kind: "fields", fields: [...set] };
|
|
31
|
-
}
|
|
32
|
-
return existing;
|
|
33
|
-
}
|
|
34
|
-
const alias = aliases.register(path);
|
|
35
|
-
const plan = {
|
|
36
|
-
path,
|
|
37
|
-
propertyPath,
|
|
38
|
-
alias,
|
|
39
|
-
targetEntity,
|
|
40
|
-
selection,
|
|
41
|
-
};
|
|
42
|
-
byPath.set(path, plan);
|
|
43
|
-
plans.push(plan);
|
|
44
|
-
return plan;
|
|
45
|
-
};
|
|
46
|
-
// 1. Includes (single level per spec).
|
|
47
|
-
applyIncludeJoins(query.include, query.rootEntity, schema, aliases, upsert);
|
|
48
|
-
// 2. SearchBy relation joins (recursive).
|
|
49
|
-
if (query.searchBy) {
|
|
50
|
-
walkSearchBy(query.searchBy, query.rootEntity, schema, aliases.root(), "", upsert);
|
|
51
|
-
}
|
|
52
|
-
return plans;
|
|
53
|
-
}
|
|
54
|
-
function applyIncludeJoins(include, rootEntity, schema, aliases, upsert) {
|
|
55
|
-
const entity = (0, schema_1.getEntity)(schema, rootEntity);
|
|
56
|
-
const rootAlias = aliases.root();
|
|
57
|
-
if (include.kind === "none")
|
|
58
|
-
return;
|
|
59
|
-
if (include.kind === "all") {
|
|
60
|
-
for (const [relName, relDef] of Object.entries(entity.relations ?? {})) {
|
|
61
|
-
upsert(relName, `${rootAlias}.${relName}`, relDef.target, { kind: "all" });
|
|
62
|
-
}
|
|
63
|
-
return;
|
|
64
|
-
}
|
|
65
|
-
for (const [relName, spec] of Object.entries(include.relations)) {
|
|
66
|
-
const relDef = (0, schema_1.getRelation)(schema, rootEntity, relName);
|
|
67
|
-
if (!relDef)
|
|
68
|
-
continue;
|
|
69
|
-
const selection = spec.kind === "all"
|
|
70
|
-
? { kind: "all" }
|
|
71
|
-
: { kind: "fields", fields: spec.fields };
|
|
72
|
-
upsert(relName, `${rootAlias}.${relName}`, relDef.target, selection);
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
function walkSearchBy(searchBy, currentEntity, schema, parentAlias, parentPath, upsert) {
|
|
76
|
-
for (const cond of searchBy.conditions) {
|
|
77
|
-
if (cond.kind !== "relation")
|
|
78
|
-
continue;
|
|
79
|
-
// `every` / `none` are translated to EXISTS subqueries by the WHERE
|
|
80
|
-
// builder — no top-level join needed (and the join would be wrong).
|
|
81
|
-
if (cond.op !== "some")
|
|
82
|
-
continue;
|
|
83
|
-
const path = parentPath ? `${parentPath}.${cond.field}` : cond.field;
|
|
84
|
-
const plan = upsert(path, `${parentAlias}.${cond.field}`, cond.targetEntity, { kind: "none" });
|
|
85
|
-
walkSearchBy(cond.nested, cond.targetEntity, schema, plan.alias, path, upsert);
|
|
86
|
-
}
|
|
87
|
-
for (const sub of searchBy.or) {
|
|
88
|
-
walkSearchBy(sub, currentEntity, schema, parentAlias, parentPath, upsert);
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
//# sourceMappingURL=joins.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"joins.js","sourceRoot":"","sources":["../../../src/adapters/typeorm/joins.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"params.d.ts","sourceRoot":"","sources":["../../../src/adapters/typeorm/params.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,qBAAa,YAAY;IAEX,OAAO,CAAC,MAAM;IAD1B,OAAO,CAAC,CAAC,CAAK;gBACM,MAAM,SAAO;IAEjC,IAAI,IAAI,MAAM;CAGf"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ParamCounter = void 0;
|
|
4
|
-
/** Generates unique parameter names for a TypeORM query builder. */
|
|
5
|
-
class ParamCounter {
|
|
6
|
-
constructor(prefix = "gq") {
|
|
7
|
-
this.prefix = prefix;
|
|
8
|
-
this.n = 0;
|
|
9
|
-
}
|
|
10
|
-
next() {
|
|
11
|
-
return `${this.prefix}_${this.n++}`;
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
exports.ParamCounter = ParamCounter;
|
|
15
|
-
//# sourceMappingURL=params.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"params.js","sourceRoot":"","sources":["../../../src/adapters/typeorm/params.ts"],"names":[],"mappings":";;;AAAA,oEAAoE;AACpE,MAAa,YAAY;IAEvB,YAAoB,SAAS,IAAI;QAAb,WAAM,GAAN,MAAM,CAAO;QADzB,MAAC,GAAG,CAAC,CAAC;IACsB,CAAC;IAErC,IAAI;QACF,OAAO,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC;IACtC,CAAC;CACF;AAPD,oCAOC"}
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import type { DataSource } from "typeorm";
|
|
2
|
-
import type { FieldType, Schema } from "../../schema";
|
|
3
|
-
/** FieldTypes that don't require additional metadata (excludes `"enum"`). */
|
|
4
|
-
type ScalarFieldType = Exclude<FieldType, "enum">;
|
|
5
|
-
export interface SchemaFromTypeORMOptions {
|
|
6
|
-
/**
|
|
7
|
-
* Restrict to specific entities. Accepts entity classes or entity names.
|
|
8
|
-
* Defaults to all entities registered on the DataSource.
|
|
9
|
-
*/
|
|
10
|
-
entities?: Array<Function | string>;
|
|
11
|
-
/**
|
|
12
|
-
* Per-entity, per-field type overrides. Use this to map custom column types
|
|
13
|
-
* (e.g. `jsonb`, custom transformers) to a genquery FieldType, or to add
|
|
14
|
-
* fields that don't correspond to a TypeORM column.
|
|
15
|
-
*
|
|
16
|
-
* overrides: { User: { metadata: "string", legacyAge: "number" } }
|
|
17
|
-
*/
|
|
18
|
-
overrides?: Record<string, Record<string, ScalarFieldType>>;
|
|
19
|
-
/**
|
|
20
|
-
* Called when a column type is not recognized by the default mapping.
|
|
21
|
-
* Return a FieldType to include the column, or `undefined` to skip it.
|
|
22
|
-
* Defaults to skipping unknown types.
|
|
23
|
-
*/
|
|
24
|
-
fallback?: (entityName: string, propertyName: string, columnType: unknown) => ScalarFieldType | undefined;
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* Build a genquery `Schema` from an initialized TypeORM `DataSource`.
|
|
28
|
-
*
|
|
29
|
-
* The DataSource must be initialized (`await dataSource.initialize()`) before
|
|
30
|
-
* calling this function; otherwise `entityMetadatas` will be empty.
|
|
31
|
-
*
|
|
32
|
-
* const dataSource = new DataSource({ ... });
|
|
33
|
-
* await dataSource.initialize();
|
|
34
|
-
* const schema = schemaFromTypeORM(dataSource);
|
|
35
|
-
* const adapter = new TypeORMAdapter(schema);
|
|
36
|
-
* const engine = new GenQueryEngine({ schema, adapter });
|
|
37
|
-
*
|
|
38
|
-
* Restrict to specific entities:
|
|
39
|
-
*
|
|
40
|
-
* const schema = schemaFromTypeORM(dataSource, { entities: [User, Post] });
|
|
41
|
-
*
|
|
42
|
-
* Override a column type that isn't auto-detected:
|
|
43
|
-
*
|
|
44
|
-
* const schema = schemaFromTypeORM(dataSource, {
|
|
45
|
-
* overrides: { User: { preferences: "string" } },
|
|
46
|
-
* });
|
|
47
|
-
*/
|
|
48
|
-
export declare function schemaFromTypeORM(dataSource: DataSource, options?: SchemaFromTypeORMOptions): Schema;
|
|
49
|
-
export {};
|
|
50
|
-
//# sourceMappingURL=schema-from-typeorm.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"schema-from-typeorm.d.ts","sourceRoot":"","sources":["../../../src/adapters/typeorm/schema-from-typeorm.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAG1C,OAAO,KAAK,EAGV,SAAS,EAET,MAAM,EACP,MAAM,cAAc,CAAC;AAEtB,6EAA6E;AAC7E,KAAK,eAAe,GAAG,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;AAElD,MAAM,WAAW,wBAAwB;IACvC;;;OAGG;IACH,QAAQ,CAAC,EAAE,KAAK,CAAC,QAAQ,GAAG,MAAM,CAAC,CAAC;IACpC;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC;IAC5D;;;;OAIG;IACH,QAAQ,CAAC,EAAE,CACT,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,OAAO,KAChB,eAAe,GAAG,SAAS,CAAC;CAClC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,UAAU,EACtB,OAAO,GAAE,wBAA6B,GACrC,MAAM,CAgBR"}
|