@tyravel/database 0.1.0 → 0.2.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/dist/eager-loader.d.ts +6 -0
- package/dist/eager-loader.d.ts.map +1 -0
- package/dist/eager-loader.js +23 -0
- package/dist/eager-loader.js.map +1 -0
- package/dist/eager-loading.test.d.ts +2 -0
- package/dist/eager-loading.test.d.ts.map +1 -0
- package/dist/eager-loading.test.js +150 -0
- package/dist/eager-loading.test.js.map +1 -0
- package/dist/factory-helpers.d.ts +7 -0
- package/dist/factory-helpers.d.ts.map +1 -0
- package/dist/factory-helpers.js +23 -0
- package/dist/factory-helpers.js.map +1 -0
- package/dist/factory.d.ts +12 -0
- package/dist/factory.d.ts.map +1 -0
- package/dist/factory.js +25 -0
- package/dist/factory.js.map +1 -0
- package/dist/factory.test.d.ts +2 -0
- package/dist/factory.test.d.ts.map +1 -0
- package/dist/factory.test.js +53 -0
- package/dist/factory.test.js.map +1 -0
- package/dist/index.d.ts +5 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/migrator.d.ts.map +1 -1
- package/dist/migrator.js +11 -12
- package/dist/migrator.js.map +1 -1
- package/dist/model-query-builder.d.ts +3 -0
- package/dist/model-query-builder.d.ts.map +1 -1
- package/dist/model-query-builder.js +17 -1
- package/dist/model-query-builder.js.map +1 -1
- package/dist/model.d.ts +5 -0
- package/dist/model.d.ts.map +1 -1
- package/dist/model.js +14 -0
- package/dist/model.js.map +1 -1
- package/dist/relations/belongs-to-many.d.ts +8 -0
- package/dist/relations/belongs-to-many.d.ts.map +1 -1
- package/dist/relations/belongs-to-many.js +49 -0
- package/dist/relations/belongs-to-many.js.map +1 -1
- package/dist/relations/belongs-to.d.ts +7 -0
- package/dist/relations/belongs-to.d.ts.map +1 -1
- package/dist/relations/belongs-to.js +33 -2
- package/dist/relations/belongs-to.js.map +1 -1
- package/dist/relations/has-many.d.ts +5 -0
- package/dist/relations/has-many.d.ts.map +1 -1
- package/dist/relations/has-many.js +32 -0
- package/dist/relations/has-many.js.map +1 -1
- package/dist/relations/has-one.d.ts +5 -0
- package/dist/relations/has-one.d.ts.map +1 -1
- package/dist/relations/has-one.js +28 -0
- package/dist/relations/has-one.js.map +1 -1
- package/dist/relations/relation.d.ts +6 -0
- package/dist/relations/relation.d.ts.map +1 -1
- package/dist/relations/relation.js +15 -0
- package/dist/relations/relation.js.map +1 -1
- package/dist/schema/blueprint.d.ts +6 -1
- package/dist/schema/blueprint.d.ts.map +1 -1
- package/dist/schema/blueprint.js +88 -13
- package/dist/schema/blueprint.js.map +1 -1
- package/dist/schema/blueprint.test.d.ts +2 -0
- package/dist/schema/blueprint.test.d.ts.map +1 -0
- package/dist/schema/blueprint.test.js +36 -0
- package/dist/schema/blueprint.test.js.map +1 -0
- package/dist/schema/schema-builder.d.ts +2 -0
- package/dist/schema/schema-builder.d.ts.map +1 -1
- package/dist/schema/schema-builder.js +53 -3
- package/dist/schema/schema-builder.js.map +1 -1
- package/dist/seeder-runner.d.ts +10 -0
- package/dist/seeder-runner.d.ts.map +1 -0
- package/dist/seeder-runner.js +52 -0
- package/dist/seeder-runner.js.map +1 -0
- package/dist/seeder-runner.test.d.ts +2 -0
- package/dist/seeder-runner.test.d.ts.map +1 -0
- package/dist/seeder-runner.test.js +58 -0
- package/dist/seeder-runner.test.js.map +1 -0
- package/dist/seeder.d.ts +5 -0
- package/dist/seeder.d.ts.map +1 -0
- package/dist/seeder.js +6 -0
- package/dist/seeder.js.map +1 -0
- package/package.json +1 -1
package/dist/model.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAChF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAO,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGhD,KAAK,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE/C,qBAAa,KAAK,CAAC,CAAC,SAAS,eAAe,GAAG,eAAe;IAC5D,MAAM,CAAC,KAAK,SAAM;IAClB,MAAM,CAAC,UAAU,SAAQ;IACzB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAyC;IAChE,OAAO,CAAC,MAAM,CAAC,YAAY,CAAqB;IAEhD,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"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"}
|
package/dist/model.js
CHANGED
|
@@ -10,6 +10,7 @@ export class Model {
|
|
|
10
10
|
static resolver;
|
|
11
11
|
static globalScopes = [];
|
|
12
12
|
attributes;
|
|
13
|
+
relations = {};
|
|
13
14
|
constructor(attributes = {}) {
|
|
14
15
|
this.attributes = { ...attributes };
|
|
15
16
|
}
|
|
@@ -55,6 +56,10 @@ export class Model {
|
|
|
55
56
|
}
|
|
56
57
|
return new this(attributes);
|
|
57
58
|
}
|
|
59
|
+
static with(...relations) {
|
|
60
|
+
const model = this;
|
|
61
|
+
return model.query().with(...relations);
|
|
62
|
+
}
|
|
58
63
|
static where(column, operatorOrValue, value) {
|
|
59
64
|
const model = this;
|
|
60
65
|
const builder = model.query();
|
|
@@ -80,6 +85,15 @@ export class Model {
|
|
|
80
85
|
const relatedSnake = singularSnakeCase(RelatedModel.name);
|
|
81
86
|
return new BelongsToManyRelation(this, RelatedModel, pivotTable ?? `${parentSnake}_${relatedSnake}`, foreignPivotKey ?? `${parentSnake}_id`, relatedPivotKey ?? `${relatedSnake}_id`, parentKey ?? parentModel.primaryKey, relatedKey ?? RelatedModel.primaryKey);
|
|
82
87
|
}
|
|
88
|
+
setRelation(name, value) {
|
|
89
|
+
this.relations[name] = value;
|
|
90
|
+
}
|
|
91
|
+
getRelation(name) {
|
|
92
|
+
return this.relations[name];
|
|
93
|
+
}
|
|
94
|
+
relationLoaded(name) {
|
|
95
|
+
return Object.prototype.hasOwnProperty.call(this.relations, name);
|
|
96
|
+
}
|
|
83
97
|
getAttribute(key) {
|
|
84
98
|
return this.attributes[key];
|
|
85
99
|
}
|
package/dist/model.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.js","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAEhF,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAIxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAI/C,MAAM,OAAO,KAAK;IAChB,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC;IAClB,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC;IACjB,MAAM,CAAC,QAAQ,CAAyC;IACxD,MAAM,CAAC,YAAY,GAAkB,EAAE,CAAC;IAEtC,UAAU,CAAa;
|
|
1
|
+
{"version":3,"file":"model.js","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { Model } from '../model.js';
|
|
2
2
|
import type { ModelStatic } from '../model-types.js';
|
|
3
|
+
import type { RowValue } from '../types.js';
|
|
3
4
|
import { Relation } from './relation.js';
|
|
4
5
|
export declare class BelongsToManyRelation<Related extends Model = Model> extends Relation<Related> {
|
|
5
6
|
private readonly pivotTable;
|
|
@@ -9,5 +10,12 @@ export declare class BelongsToManyRelation<Related extends Model = Model> extend
|
|
|
9
10
|
private readonly relatedKey;
|
|
10
11
|
constructor(parent: Model, relatedModel: ModelStatic, pivotTable: string, foreignPivotKey: string, relatedPivotKey: string, parentKey: string, relatedKey: string);
|
|
11
12
|
get(): Promise<Related[]>;
|
|
13
|
+
eagerLoadKeys(parents: Model[]): RowValue[];
|
|
14
|
+
defaultEagerValue(): Related[];
|
|
15
|
+
eagerLoad(keys: RowValue[]): Promise<Array<{
|
|
16
|
+
parentKey: RowValue;
|
|
17
|
+
model: Related;
|
|
18
|
+
}>>;
|
|
19
|
+
matchEager(parents: Model[], results: unknown, relationName: string): void;
|
|
12
20
|
}
|
|
13
21
|
//# sourceMappingURL=belongs-to-many.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"belongs-to-many.d.ts","sourceRoot":"","sources":["../../src/relations/belongs-to-many.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"belongs-to-many.d.ts","sourceRoot":"","sources":["../../src/relations/belongs-to-many.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,qBAAa,qBAAqB,CAAC,OAAO,SAAS,KAAK,GAAG,KAAK,CAAE,SAAQ,QAAQ,CAAC,OAAO,CAAC;IAIvF,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,UAAU;gBAN3B,MAAM,EAAE,KAAK,EACb,YAAY,EAAE,WAAW,EACR,UAAU,EAAE,MAAM,EAClB,eAAe,EAAE,MAAM,EACvB,eAAe,EAAE,MAAM,EACvB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM;IAK/B,GAAG,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IA4BtB,aAAa,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,QAAQ,EAAE;IAM3C,iBAAiB,IAAI,OAAO,EAAE;IAIxB,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC;QAAE,SAAS,EAAE,QAAQ,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IA8B1F,UAAU,CACjB,OAAO,EAAE,KAAK,EAAE,EAChB,OAAO,EAAE,OAAO,EAChB,YAAY,EAAE,MAAM,GACnB,IAAI;CAkBR"}
|
|
@@ -34,5 +34,54 @@ export class BelongsToManyRelation extends Relation {
|
|
|
34
34
|
const ModelClass = this.relatedModel;
|
|
35
35
|
return result.rows.map((row) => new ModelClass(row));
|
|
36
36
|
}
|
|
37
|
+
eagerLoadKeys(parents) {
|
|
38
|
+
return parents
|
|
39
|
+
.map((parent) => parent.getAttribute(this.parentKey))
|
|
40
|
+
.filter((key) => key !== undefined && key !== null);
|
|
41
|
+
}
|
|
42
|
+
defaultEagerValue() {
|
|
43
|
+
return [];
|
|
44
|
+
}
|
|
45
|
+
async eagerLoad(keys) {
|
|
46
|
+
const grammar = this.relatedModel.getConnection().grammar;
|
|
47
|
+
const relatedTable = this.relatedModel.table;
|
|
48
|
+
const pivot = grammar.wrapIdentifier(this.pivotTable);
|
|
49
|
+
const related = grammar.wrapIdentifier(relatedTable);
|
|
50
|
+
const parentPivotColumn = grammar.wrapIdentifier(this.foreignPivotKey);
|
|
51
|
+
const placeholders = keys.map((_, index) => grammar.parameter(index + 1)).join(', ');
|
|
52
|
+
const sql = `
|
|
53
|
+
SELECT ${related}.*, ${pivot}.${parentPivotColumn} AS "__eager_parent_key"
|
|
54
|
+
FROM ${related}
|
|
55
|
+
INNER JOIN ${pivot}
|
|
56
|
+
ON ${related}.${grammar.wrapIdentifier(this.relatedKey)}
|
|
57
|
+
= ${pivot}.${grammar.wrapIdentifier(this.relatedPivotKey)}
|
|
58
|
+
WHERE ${pivot}.${parentPivotColumn} IN (${placeholders})
|
|
59
|
+
`;
|
|
60
|
+
const result = await this.relatedModel.getConnection().query(sql, keys);
|
|
61
|
+
const ModelClass = this.relatedModel;
|
|
62
|
+
return result.rows.map((row) => {
|
|
63
|
+
const parentKey = row.__eager_parent_key;
|
|
64
|
+
const attributes = { ...row };
|
|
65
|
+
delete attributes.__eager_parent_key;
|
|
66
|
+
return { parentKey, model: new ModelClass(attributes) };
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
matchEager(parents, results, relationName) {
|
|
70
|
+
const entries = results;
|
|
71
|
+
const dictionary = new Map();
|
|
72
|
+
for (const { parentKey, model } of entries) {
|
|
73
|
+
const bucket = dictionary.get(parentKey);
|
|
74
|
+
if (bucket) {
|
|
75
|
+
bucket.push(model);
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
dictionary.set(parentKey, [model]);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
for (const parent of parents) {
|
|
82
|
+
const key = parent.getAttribute(this.parentKey);
|
|
83
|
+
parent.setRelation(relationName, dictionary.get(key) ?? []);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
37
86
|
}
|
|
38
87
|
//# sourceMappingURL=belongs-to-many.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"belongs-to-many.js","sourceRoot":"","sources":["../../src/relations/belongs-to-many.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,MAAM,OAAO,qBAAqD,SAAQ,QAAiB;IAItE;IACA;IACA;IACA;IACA;IAPnB,YACE,MAAa,EACb,YAAyB,EACR,UAAkB,EAClB,eAAuB,EACvB,eAAuB,EACvB,SAAiB,EACjB,UAAkB;QAEnC,KAAK,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QANX,eAAU,GAAV,UAAU,CAAQ;QAClB,oBAAe,GAAf,eAAe,CAAQ;QACvB,oBAAe,GAAf,eAAe,CAAQ;QACvB,cAAS,GAAT,SAAS,CAAQ;QACjB,eAAU,GAAV,UAAU,CAAQ;IAGrC,CAAC;IAED,KAAK,CAAC,GAAG;QACP,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,SAAkB,CAAa,CAAC;QAC/E,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;YAChD,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,CAAC,OAAO,CAAC;QAC1D,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;QAC7C,MAAM,KAAK,GAAG,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACtD,MAAM,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QAErD,MAAM,GAAG,GAAG;eACD,OAAO;aACT,OAAO;mBACD,KAAK;aACX,OAAO,IAAI,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC;aAClD,KAAK,IAAI,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,eAAe,CAAC;cACpD,KAAK,IAAI,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;KACxF,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC9E,MAAM,UAAU,GAAG,IAAI,CAAC,YAEZ,CAAC;QAEb,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;IACvD,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"belongs-to-many.js","sourceRoot":"","sources":["../../src/relations/belongs-to-many.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,17 @@
|
|
|
1
1
|
import type { Model } from '../model.js';
|
|
2
2
|
import type { ModelStatic } from '../model-types.js';
|
|
3
|
+
import type { ModelQueryBuilder } from '../model-query-builder.js';
|
|
4
|
+
import type { RowValue } from '../types.js';
|
|
3
5
|
import { Relation } from './relation.js';
|
|
4
6
|
export declare class BelongsToRelation<Related extends Model = Model> extends Relation<Related> {
|
|
5
7
|
private readonly foreignKey;
|
|
6
8
|
private readonly ownerKey;
|
|
7
9
|
constructor(parent: Model, relatedModel: ModelStatic, foreignKey: string, ownerKey: string);
|
|
10
|
+
query(): ModelQueryBuilder;
|
|
8
11
|
get(): Promise<Related | null>;
|
|
12
|
+
eagerLoadKeys(parents: Model[]): RowValue[];
|
|
13
|
+
defaultEagerValue(): null;
|
|
14
|
+
eagerLoad(keys: RowValue[]): Promise<Related[]>;
|
|
15
|
+
matchEager(parents: Model[], results: unknown, relationName: string): void;
|
|
9
16
|
}
|
|
10
17
|
//# sourceMappingURL=belongs-to.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"belongs-to.d.ts","sourceRoot":"","sources":["../../src/relations/belongs-to.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"belongs-to.d.ts","sourceRoot":"","sources":["../../src/relations/belongs-to.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,qBAAa,iBAAiB,CAAC,OAAO,SAAS,KAAK,GAAG,KAAK,CAAE,SAAQ,QAAQ,CAAC,OAAO,CAAC;IAInF,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAHzB,MAAM,EAAE,KAAK,EACb,YAAY,EAAE,WAAW,EACR,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM;IAKnC,KAAK,IAAI,iBAAiB;IAKpB,GAAG,IAAI,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAS3B,aAAa,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,QAAQ,EAAE;IAW3C,iBAAiB,IAAI,IAAI;IAInB,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAOrD,UAAU,CACjB,OAAO,EAAE,KAAK,EAAE,EAChB,OAAO,EAAE,OAAO,EAChB,YAAY,EAAE,MAAM,GACnB,IAAI;CAaR"}
|
|
@@ -7,15 +7,46 @@ export class BelongsToRelation extends Relation {
|
|
|
7
7
|
this.foreignKey = foreignKey;
|
|
8
8
|
this.ownerKey = ownerKey;
|
|
9
9
|
}
|
|
10
|
+
query() {
|
|
11
|
+
const foreignValue = this.parent.getAttribute(this.foreignKey);
|
|
12
|
+
return this.relatedModel.query().where(this.ownerKey, foreignValue);
|
|
13
|
+
}
|
|
10
14
|
async get() {
|
|
11
15
|
const foreignValue = this.parent.getAttribute(this.foreignKey);
|
|
12
16
|
if (foreignValue === undefined || foreignValue === null) {
|
|
13
17
|
return null;
|
|
14
18
|
}
|
|
19
|
+
return this.query().firstModel();
|
|
20
|
+
}
|
|
21
|
+
eagerLoadKeys(parents) {
|
|
22
|
+
const keys = new Set();
|
|
23
|
+
for (const parent of parents) {
|
|
24
|
+
const key = parent.getAttribute(this.foreignKey);
|
|
25
|
+
if (key !== undefined && key !== null) {
|
|
26
|
+
keys.add(key);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return [...keys];
|
|
30
|
+
}
|
|
31
|
+
defaultEagerValue() {
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
async eagerLoad(keys) {
|
|
15
35
|
return this.relatedModel
|
|
16
36
|
.query()
|
|
17
|
-
.
|
|
18
|
-
.
|
|
37
|
+
.whereIn(this.ownerKey, keys)
|
|
38
|
+
.getModels();
|
|
39
|
+
}
|
|
40
|
+
matchEager(parents, results, relationName) {
|
|
41
|
+
const related = results;
|
|
42
|
+
const dictionary = new Map();
|
|
43
|
+
for (const model of related) {
|
|
44
|
+
dictionary.set(model.getAttribute(this.ownerKey), model);
|
|
45
|
+
}
|
|
46
|
+
for (const parent of parents) {
|
|
47
|
+
const key = parent.getAttribute(this.foreignKey);
|
|
48
|
+
parent.setRelation(relationName, dictionary.get(key) ?? null);
|
|
49
|
+
}
|
|
19
50
|
}
|
|
20
51
|
}
|
|
21
52
|
//# sourceMappingURL=belongs-to.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"belongs-to.js","sourceRoot":"","sources":["../../src/relations/belongs-to.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"belongs-to.js","sourceRoot":"","sources":["../../src/relations/belongs-to.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,MAAM,OAAO,iBAAiD,SAAQ,QAAiB;IAIlE;IACA;IAJnB,YACE,MAAa,EACb,YAAyB,EACR,UAAkB,EAClB,QAAgB;QAEjC,KAAK,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QAHX,eAAU,GAAV,UAAU,CAAQ;QAClB,aAAQ,GAAR,QAAQ,CAAQ;IAGnC,CAAC;IAED,KAAK;QACH,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,UAAmB,CAAa,CAAC;QACpF,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IACtE,CAAC;IAED,KAAK,CAAC,GAAG;QACP,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,UAAmB,CAAa,CAAC;QACpF,IAAI,YAAY,KAAK,SAAS,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;YACxD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,UAAU,EAAW,CAAC;IAC5C,CAAC;IAEQ,aAAa,CAAC,OAAgB;QACrC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAY,CAAC;QACjC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,UAAmB,CAAa,CAAC;YACtE,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;gBACtC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAChB,CAAC;QACH,CAAC;QACD,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;IACnB,CAAC;IAEQ,iBAAiB;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAEQ,KAAK,CAAC,SAAS,CAAC,IAAgB;QACvC,OAAO,IAAI,CAAC,YAAY;aACrB,KAAK,EAAE;aACP,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC;aAC5B,SAAS,EAAW,CAAC;IAC1B,CAAC;IAEQ,UAAU,CACjB,OAAgB,EAChB,OAAgB,EAChB,YAAoB;QAEpB,MAAM,OAAO,GAAG,OAAoB,CAAC;QACrC,MAAM,UAAU,GAAG,IAAI,GAAG,EAAqB,CAAC;QAEhD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,QAAiB,CAAa,EAAE,KAAK,CAAC,CAAC;QAChF,CAAC;QAED,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,UAAmB,CAAa,CAAC;YACtE,MAAM,CAAC,WAAW,CAAC,YAAY,EAAE,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;CACF"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { Model } from '../model.js';
|
|
2
2
|
import type { ModelStatic } from '../model-types.js';
|
|
3
3
|
import type { ModelQueryBuilder } from '../model-query-builder.js';
|
|
4
|
+
import type { RowValue } from '../types.js';
|
|
4
5
|
import { Relation } from './relation.js';
|
|
5
6
|
export declare class HasManyRelation<Related extends Model = Model> extends Relation<Related> {
|
|
6
7
|
private readonly foreignKey;
|
|
@@ -8,5 +9,9 @@ export declare class HasManyRelation<Related extends Model = Model> extends Rela
|
|
|
8
9
|
constructor(parent: Model, relatedModel: ModelStatic, foreignKey: string, localKey: string);
|
|
9
10
|
query(): ModelQueryBuilder;
|
|
10
11
|
get(): Promise<Related[]>;
|
|
12
|
+
eagerLoadKeys(parents: Model[]): RowValue[];
|
|
13
|
+
defaultEagerValue(): Related[];
|
|
14
|
+
eagerLoad(keys: RowValue[]): Promise<Related[]>;
|
|
15
|
+
matchEager(parents: Model[], results: unknown, relationName: string): void;
|
|
11
16
|
}
|
|
12
17
|
//# sourceMappingURL=has-many.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"has-many.d.ts","sourceRoot":"","sources":["../../src/relations/has-many.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"has-many.d.ts","sourceRoot":"","sources":["../../src/relations/has-many.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,qBAAa,eAAe,CAAC,OAAO,SAAS,KAAK,GAAG,KAAK,CAAE,SAAQ,QAAQ,CAAC,OAAO,CAAC;IAIjF,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAHzB,MAAM,EAAE,KAAK,EACb,YAAY,EAAE,WAAW,EACR,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM;IAKnC,KAAK,IAAI,iBAAiB;IAKpB,GAAG,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAItB,aAAa,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,QAAQ,EAAE;IAM3C,iBAAiB,IAAI,OAAO,EAAE;IAIxB,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAOrD,UAAU,CACjB,OAAO,EAAE,KAAK,EAAE,EAChB,OAAO,EAAE,OAAO,EAChB,YAAY,EAAE,MAAM,GACnB,IAAI;CAmBR"}
|
|
@@ -14,5 +14,37 @@ export class HasManyRelation extends Relation {
|
|
|
14
14
|
async get() {
|
|
15
15
|
return this.query().getModels();
|
|
16
16
|
}
|
|
17
|
+
eagerLoadKeys(parents) {
|
|
18
|
+
return parents
|
|
19
|
+
.map((parent) => parent.getAttribute(this.localKey))
|
|
20
|
+
.filter((key) => key !== undefined && key !== null);
|
|
21
|
+
}
|
|
22
|
+
defaultEagerValue() {
|
|
23
|
+
return [];
|
|
24
|
+
}
|
|
25
|
+
async eagerLoad(keys) {
|
|
26
|
+
return this.relatedModel
|
|
27
|
+
.query()
|
|
28
|
+
.whereIn(this.foreignKey, keys)
|
|
29
|
+
.getModels();
|
|
30
|
+
}
|
|
31
|
+
matchEager(parents, results, relationName) {
|
|
32
|
+
const related = results;
|
|
33
|
+
const dictionary = new Map();
|
|
34
|
+
for (const model of related) {
|
|
35
|
+
const key = model.getAttribute(this.foreignKey);
|
|
36
|
+
const bucket = dictionary.get(key);
|
|
37
|
+
if (bucket) {
|
|
38
|
+
bucket.push(model);
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
dictionary.set(key, [model]);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
for (const parent of parents) {
|
|
45
|
+
const key = parent.getAttribute(this.localKey);
|
|
46
|
+
parent.setRelation(relationName, dictionary.get(key) ?? []);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
17
49
|
}
|
|
18
50
|
//# sourceMappingURL=has-many.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"has-many.js","sourceRoot":"","sources":["../../src/relations/has-many.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,MAAM,OAAO,eAA+C,SAAQ,QAAiB;IAIhE;IACA;IAJnB,YACE,MAAa,EACb,YAAyB,EACR,UAAkB,EAClB,QAAgB;QAEjC,KAAK,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QAHX,eAAU,GAAV,UAAU,CAAQ;QAClB,aAAQ,GAAR,QAAQ,CAAQ;IAGnC,CAAC;IAED,KAAK;QACH,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,QAAiB,CAAa,CAAC;QAChF,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IACtE,CAAC;IAED,KAAK,CAAC,GAAG;QACP,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,SAAS,EAAW,CAAC;IAC3C,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"has-many.js","sourceRoot":"","sources":["../../src/relations/has-many.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,MAAM,OAAO,eAA+C,SAAQ,QAAiB;IAIhE;IACA;IAJnB,YACE,MAAa,EACb,YAAyB,EACR,UAAkB,EAClB,QAAgB;QAEjC,KAAK,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QAHX,eAAU,GAAV,UAAU,CAAQ;QAClB,aAAQ,GAAR,QAAQ,CAAQ;IAGnC,CAAC;IAED,KAAK;QACH,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,QAAiB,CAAa,CAAC;QAChF,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IACtE,CAAC;IAED,KAAK,CAAC,GAAG;QACP,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,SAAS,EAAW,CAAC;IAC3C,CAAC;IAEQ,aAAa,CAAC,OAAgB;QACrC,OAAO,OAAO;aACX,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,QAAiB,CAAa,CAAC;aACxE,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,CAAC,CAAC;IACxD,CAAC;IAEQ,iBAAiB;QACxB,OAAO,EAAE,CAAC;IACZ,CAAC;IAEQ,KAAK,CAAC,SAAS,CAAC,IAAgB;QACvC,OAAO,IAAI,CAAC,YAAY;aACrB,KAAK,EAAE;aACP,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC;aAC9B,SAAS,EAAW,CAAC;IAC1B,CAAC;IAEQ,UAAU,CACjB,OAAgB,EAChB,OAAgB,EAChB,YAAoB;QAEpB,MAAM,OAAO,GAAG,OAAoB,CAAC;QACrC,MAAM,UAAU,GAAG,IAAI,GAAG,EAAuB,CAAC;QAElD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,GAAG,GAAG,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,UAAmB,CAAa,CAAC;YACrE,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACnC,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrB,CAAC;iBAAM,CAAC;gBACN,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;QAED,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,QAAiB,CAAa,CAAC;YACpE,MAAM,CAAC,WAAW,CAAC,YAAY,EAAE,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;CACF"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { Model } from '../model.js';
|
|
2
2
|
import type { ModelStatic } from '../model-types.js';
|
|
3
3
|
import type { ModelQueryBuilder } from '../model-query-builder.js';
|
|
4
|
+
import type { RowValue } from '../types.js';
|
|
4
5
|
import { Relation } from './relation.js';
|
|
5
6
|
export declare class HasOneRelation<Related extends Model = Model> extends Relation<Related> {
|
|
6
7
|
private readonly foreignKey;
|
|
@@ -8,5 +9,9 @@ export declare class HasOneRelation<Related extends Model = Model> extends Relat
|
|
|
8
9
|
constructor(parent: Model, relatedModel: ModelStatic, foreignKey: string, localKey: string);
|
|
9
10
|
query(): ModelQueryBuilder;
|
|
10
11
|
get(): Promise<Related | null>;
|
|
12
|
+
eagerLoadKeys(parents: Model[]): RowValue[];
|
|
13
|
+
defaultEagerValue(): null;
|
|
14
|
+
eagerLoad(keys: RowValue[]): Promise<Related[]>;
|
|
15
|
+
matchEager(parents: Model[], results: unknown, relationName: string): void;
|
|
11
16
|
}
|
|
12
17
|
//# sourceMappingURL=has-one.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"has-one.d.ts","sourceRoot":"","sources":["../../src/relations/has-one.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"has-one.d.ts","sourceRoot":"","sources":["../../src/relations/has-one.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,qBAAa,cAAc,CAAC,OAAO,SAAS,KAAK,GAAG,KAAK,CAAE,SAAQ,QAAQ,CAAC,OAAO,CAAC;IAIhF,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAHzB,MAAM,EAAE,KAAK,EACb,YAAY,EAAE,WAAW,EACR,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM;IAKnC,KAAK,IAAI,iBAAiB;IAKpB,GAAG,IAAI,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAI3B,aAAa,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,QAAQ,EAAE;IAM3C,iBAAiB,IAAI,IAAI;IAInB,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAOrD,UAAU,CACjB,OAAO,EAAE,KAAK,EAAE,EAChB,OAAO,EAAE,OAAO,EAChB,YAAY,EAAE,MAAM,GACnB,IAAI;CAgBR"}
|
|
@@ -14,5 +14,33 @@ export class HasOneRelation extends Relation {
|
|
|
14
14
|
async get() {
|
|
15
15
|
return this.query().firstModel();
|
|
16
16
|
}
|
|
17
|
+
eagerLoadKeys(parents) {
|
|
18
|
+
return parents
|
|
19
|
+
.map((parent) => parent.getAttribute(this.localKey))
|
|
20
|
+
.filter((key) => key !== undefined && key !== null);
|
|
21
|
+
}
|
|
22
|
+
defaultEagerValue() {
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
async eagerLoad(keys) {
|
|
26
|
+
return this.relatedModel
|
|
27
|
+
.query()
|
|
28
|
+
.whereIn(this.foreignKey, keys)
|
|
29
|
+
.getModels();
|
|
30
|
+
}
|
|
31
|
+
matchEager(parents, results, relationName) {
|
|
32
|
+
const related = results;
|
|
33
|
+
const dictionary = new Map();
|
|
34
|
+
for (const model of related) {
|
|
35
|
+
const key = model.getAttribute(this.foreignKey);
|
|
36
|
+
if (!dictionary.has(key)) {
|
|
37
|
+
dictionary.set(key, model);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
for (const parent of parents) {
|
|
41
|
+
const key = parent.getAttribute(this.localKey);
|
|
42
|
+
parent.setRelation(relationName, dictionary.get(key) ?? null);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
17
45
|
}
|
|
18
46
|
//# sourceMappingURL=has-one.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"has-one.js","sourceRoot":"","sources":["../../src/relations/has-one.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,MAAM,OAAO,cAA8C,SAAQ,QAAiB;IAI/D;IACA;IAJnB,YACE,MAAa,EACb,YAAyB,EACR,UAAkB,EAClB,QAAgB;QAEjC,KAAK,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QAHX,eAAU,GAAV,UAAU,CAAQ;QAClB,aAAQ,GAAR,QAAQ,CAAQ;IAGnC,CAAC;IAED,KAAK;QACH,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,QAAiB,CAAa,CAAC;QAChF,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IACtE,CAAC;IAED,KAAK,CAAC,GAAG;QACP,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,UAAU,EAAW,CAAC;IAC5C,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"has-one.js","sourceRoot":"","sources":["../../src/relations/has-one.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,MAAM,OAAO,cAA8C,SAAQ,QAAiB;IAI/D;IACA;IAJnB,YACE,MAAa,EACb,YAAyB,EACR,UAAkB,EAClB,QAAgB;QAEjC,KAAK,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QAHX,eAAU,GAAV,UAAU,CAAQ;QAClB,aAAQ,GAAR,QAAQ,CAAQ;IAGnC,CAAC;IAED,KAAK;QACH,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,QAAiB,CAAa,CAAC;QAChF,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IACtE,CAAC;IAED,KAAK,CAAC,GAAG;QACP,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,UAAU,EAAW,CAAC;IAC5C,CAAC;IAEQ,aAAa,CAAC,OAAgB;QACrC,OAAO,OAAO;aACX,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,QAAiB,CAAa,CAAC;aACxE,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,CAAC,CAAC;IACxD,CAAC;IAEQ,iBAAiB;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAEQ,KAAK,CAAC,SAAS,CAAC,IAAgB;QACvC,OAAO,IAAI,CAAC,YAAY;aACrB,KAAK,EAAE;aACP,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC;aAC9B,SAAS,EAAW,CAAC;IAC1B,CAAC;IAEQ,UAAU,CACjB,OAAgB,EAChB,OAAgB,EAChB,YAAoB;QAEpB,MAAM,OAAO,GAAG,OAAoB,CAAC;QACrC,MAAM,UAAU,GAAG,IAAI,GAAG,EAAqB,CAAC;QAEhD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,GAAG,GAAG,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,UAAmB,CAAa,CAAC;YACrE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACzB,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;QAED,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,QAAiB,CAAa,CAAC;YACpE,MAAM,CAAC,WAAW,CAAC,YAAY,EAAE,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;CACF"}
|
|
@@ -1,9 +1,15 @@
|
|
|
1
1
|
import type { Model } from '../model.js';
|
|
2
2
|
import type { ModelStatic } from '../model-types.js';
|
|
3
|
+
import type { RowValue } from '../types.js';
|
|
3
4
|
export declare abstract class Relation<Related extends Model = Model> {
|
|
4
5
|
protected readonly parent: Model;
|
|
5
6
|
protected readonly relatedModel: ModelStatic;
|
|
6
7
|
constructor(parent: Model, relatedModel: ModelStatic);
|
|
7
8
|
abstract get(): Promise<Related | Related[] | null>;
|
|
9
|
+
eagerLoadKeys(_parents: Model[]): RowValue[];
|
|
10
|
+
initRelation(parents: Model[], relationName: string): void;
|
|
11
|
+
defaultEagerValue(): Related | Related[] | null;
|
|
12
|
+
eagerLoad(_keys: RowValue[]): Promise<unknown>;
|
|
13
|
+
matchEager(_parents: Model[], _results: unknown, _relationName: string): void;
|
|
8
14
|
}
|
|
9
15
|
//# sourceMappingURL=relation.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relation.d.ts","sourceRoot":"","sources":["../../src/relations/relation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"relation.d.ts","sourceRoot":"","sources":["../../src/relations/relation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,8BAAsB,QAAQ,CAAC,OAAO,SAAS,KAAK,GAAG,KAAK;IAExD,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK;IAChC,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,WAAW;gBADzB,MAAM,EAAE,KAAK,EACb,YAAY,EAAE,WAAW;IAG9C,QAAQ,CAAC,GAAG,IAAI,OAAO,CAAC,OAAO,GAAG,OAAO,EAAE,GAAG,IAAI,CAAC;IAEnD,aAAa,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,QAAQ,EAAE;IAI5C,YAAY,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI;IAM1D,iBAAiB,IAAI,OAAO,GAAG,OAAO,EAAE,GAAG,IAAI;IAIzC,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAIpD,UAAU,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI;CAC9E"}
|
|
@@ -5,5 +5,20 @@ export class Relation {
|
|
|
5
5
|
this.parent = parent;
|
|
6
6
|
this.relatedModel = relatedModel;
|
|
7
7
|
}
|
|
8
|
+
eagerLoadKeys(_parents) {
|
|
9
|
+
return [];
|
|
10
|
+
}
|
|
11
|
+
initRelation(parents, relationName) {
|
|
12
|
+
for (const parent of parents) {
|
|
13
|
+
parent.setRelation(relationName, this.defaultEagerValue());
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
defaultEagerValue() {
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
async eagerLoad(_keys) {
|
|
20
|
+
return [];
|
|
21
|
+
}
|
|
22
|
+
matchEager(_parents, _results, _relationName) { }
|
|
8
23
|
}
|
|
9
24
|
//# sourceMappingURL=relation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relation.js","sourceRoot":"","sources":["../../src/relations/relation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"relation.js","sourceRoot":"","sources":["../../src/relations/relation.ts"],"names":[],"mappings":"AAIA,MAAM,OAAgB,QAAQ;IAEP;IACA;IAFrB,YACqB,MAAa,EACb,YAAyB;QADzB,WAAM,GAAN,MAAM,CAAO;QACb,iBAAY,GAAZ,YAAY,CAAa;IAC3C,CAAC;IAIJ,aAAa,CAAC,QAAiB;QAC7B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,YAAY,CAAC,OAAgB,EAAE,YAAoB;QACjD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,CAAC,WAAW,CAAC,YAAY,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAED,iBAAiB;QACf,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,KAAiB;QAC/B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,UAAU,CAAC,QAAiB,EAAE,QAAiB,EAAE,aAAqB,IAAS,CAAC;CACjF"}
|
|
@@ -1,16 +1,21 @@
|
|
|
1
|
+
import type { SqlGrammar } from '../grammar.js';
|
|
1
2
|
export declare class Blueprint {
|
|
2
3
|
private readonly tableName;
|
|
4
|
+
private readonly grammar;
|
|
3
5
|
private readonly statements;
|
|
4
|
-
constructor(tableName: string);
|
|
6
|
+
constructor(tableName: string, grammar: SqlGrammar);
|
|
5
7
|
id(name?: string): this;
|
|
6
8
|
string(name: string, length?: number): this;
|
|
7
9
|
text(name: string): this;
|
|
8
10
|
integer(name: string): this;
|
|
9
11
|
boolean(name: string): this;
|
|
12
|
+
timestamp(name: string): this;
|
|
10
13
|
timestamps(): this;
|
|
11
14
|
nullable(): this;
|
|
12
15
|
unique(columns?: string | string[]): this;
|
|
13
16
|
toCreateSql(): string;
|
|
14
17
|
toDropSql(): string;
|
|
18
|
+
private table;
|
|
19
|
+
private column;
|
|
15
20
|
}
|
|
16
21
|
//# sourceMappingURL=blueprint.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blueprint.d.ts","sourceRoot":"","sources":["../../src/schema/blueprint.ts"],"names":[],"mappings":"AAAA,qBAAa,SAAS;
|
|
1
|
+
{"version":3,"file":"blueprint.d.ts","sourceRoot":"","sources":["../../src/schema/blueprint.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD,qBAAa,SAAS;IAIlB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO;IAJ1B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAgB;gBAGxB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,UAAU;IAGtC,EAAE,CAAC,IAAI,SAAO,GAAG,IAAI;IAkBrB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,SAAM,GAAG,IAAI;IAUxC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKxB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAU3B,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAgB3B,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAgB7B,UAAU,IAAI,IAAI;IAYlB,QAAQ,IAAI,IAAI;IAsBhB,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;IAgBzC,WAAW,IAAI,MAAM;IAIrB,SAAS,IAAI,MAAM;IAInB,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,MAAM;CAGf"}
|
package/dist/schema/blueprint.js
CHANGED
|
@@ -1,32 +1,88 @@
|
|
|
1
1
|
export class Blueprint {
|
|
2
2
|
tableName;
|
|
3
|
+
grammar;
|
|
3
4
|
statements = [];
|
|
4
|
-
constructor(tableName) {
|
|
5
|
+
constructor(tableName, grammar) {
|
|
5
6
|
this.tableName = tableName;
|
|
7
|
+
this.grammar = grammar;
|
|
6
8
|
}
|
|
7
9
|
id(name = 'id') {
|
|
8
|
-
this.
|
|
10
|
+
const column = this.column(name);
|
|
11
|
+
switch (this.grammar.driver) {
|
|
12
|
+
case 'postgres':
|
|
13
|
+
this.statements.push(`${column} BIGSERIAL PRIMARY KEY`);
|
|
14
|
+
break;
|
|
15
|
+
case 'mysql':
|
|
16
|
+
this.statements.push(`${column} BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY`);
|
|
17
|
+
break;
|
|
18
|
+
default:
|
|
19
|
+
this.statements.push(`${column} INTEGER PRIMARY KEY AUTOINCREMENT`);
|
|
20
|
+
break;
|
|
21
|
+
}
|
|
9
22
|
return this;
|
|
10
23
|
}
|
|
11
24
|
string(name, length = 255) {
|
|
12
|
-
this.
|
|
25
|
+
const column = this.column(name);
|
|
26
|
+
if (this.grammar.driver === 'sqlite') {
|
|
27
|
+
this.statements.push(`${column} TEXT NOT NULL`);
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
this.statements.push(`${column} VARCHAR(${length}) NOT NULL`);
|
|
31
|
+
}
|
|
13
32
|
return this;
|
|
14
33
|
}
|
|
15
34
|
text(name) {
|
|
16
|
-
this.statements.push(
|
|
35
|
+
this.statements.push(`${this.column(name)} TEXT NOT NULL`);
|
|
17
36
|
return this;
|
|
18
37
|
}
|
|
19
38
|
integer(name) {
|
|
20
|
-
this.
|
|
39
|
+
const column = this.column(name);
|
|
40
|
+
if (this.grammar.driver === 'mysql') {
|
|
41
|
+
this.statements.push(`${column} INT NOT NULL`);
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
this.statements.push(`${column} INTEGER NOT NULL`);
|
|
45
|
+
}
|
|
21
46
|
return this;
|
|
22
47
|
}
|
|
23
48
|
boolean(name) {
|
|
24
|
-
this.
|
|
49
|
+
const column = this.column(name);
|
|
50
|
+
switch (this.grammar.driver) {
|
|
51
|
+
case 'postgres':
|
|
52
|
+
this.statements.push(`${column} BOOLEAN NOT NULL DEFAULT FALSE`);
|
|
53
|
+
break;
|
|
54
|
+
case 'mysql':
|
|
55
|
+
this.statements.push(`${column} TINYINT(1) NOT NULL DEFAULT 0`);
|
|
56
|
+
break;
|
|
57
|
+
default:
|
|
58
|
+
this.statements.push(`${column} INTEGER NOT NULL DEFAULT 0`);
|
|
59
|
+
break;
|
|
60
|
+
}
|
|
61
|
+
return this;
|
|
62
|
+
}
|
|
63
|
+
timestamp(name) {
|
|
64
|
+
const column = this.column(name);
|
|
65
|
+
switch (this.grammar.driver) {
|
|
66
|
+
case 'postgres':
|
|
67
|
+
this.statements.push(`${column} TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL`);
|
|
68
|
+
break;
|
|
69
|
+
case 'mysql':
|
|
70
|
+
this.statements.push(`${column} TIMESTAMP NOT NULL`);
|
|
71
|
+
break;
|
|
72
|
+
default:
|
|
73
|
+
this.statements.push(`${column} TEXT NOT NULL`);
|
|
74
|
+
break;
|
|
75
|
+
}
|
|
25
76
|
return this;
|
|
26
77
|
}
|
|
27
78
|
timestamps() {
|
|
28
|
-
this.
|
|
29
|
-
|
|
79
|
+
if (this.grammar.driver === 'sqlite') {
|
|
80
|
+
this.string('created_at', 64);
|
|
81
|
+
this.string('updated_at', 64);
|
|
82
|
+
return this;
|
|
83
|
+
}
|
|
84
|
+
this.timestamp('created_at');
|
|
85
|
+
this.timestamp('updated_at');
|
|
30
86
|
return this;
|
|
31
87
|
}
|
|
32
88
|
nullable() {
|
|
@@ -34,7 +90,20 @@ export class Blueprint {
|
|
|
34
90
|
if (!last) {
|
|
35
91
|
return this;
|
|
36
92
|
}
|
|
37
|
-
|
|
93
|
+
let updated = last.replace(' NOT NULL', '');
|
|
94
|
+
if (this.grammar.driver === 'postgres') {
|
|
95
|
+
updated = updated.replace(' DEFAULT FALSE', '');
|
|
96
|
+
}
|
|
97
|
+
else if (this.grammar.driver === 'mysql') {
|
|
98
|
+
updated = updated.replace(' DEFAULT 0', '');
|
|
99
|
+
if (!/\bNULL\b/.test(updated)) {
|
|
100
|
+
updated += ' NULL';
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
updated = updated.replace(' DEFAULT 0', '');
|
|
105
|
+
}
|
|
106
|
+
this.statements[this.statements.length - 1] = updated;
|
|
38
107
|
return this;
|
|
39
108
|
}
|
|
40
109
|
unique(columns) {
|
|
@@ -45,15 +114,21 @@ export class Blueprint {
|
|
|
45
114
|
}
|
|
46
115
|
return this;
|
|
47
116
|
}
|
|
48
|
-
const names = Array.isArray(columns) ? columns : [columns];
|
|
49
|
-
this.statements.push(`UNIQUE (${names.
|
|
117
|
+
const names = (Array.isArray(columns) ? columns : [columns]).map((name) => this.column(name));
|
|
118
|
+
this.statements.push(`UNIQUE (${names.join(', ')})`);
|
|
50
119
|
return this;
|
|
51
120
|
}
|
|
52
121
|
toCreateSql() {
|
|
53
|
-
return `CREATE TABLE
|
|
122
|
+
return `CREATE TABLE ${this.table()} (${this.statements.join(', ')})`;
|
|
54
123
|
}
|
|
55
124
|
toDropSql() {
|
|
56
|
-
return `DROP TABLE IF EXISTS
|
|
125
|
+
return `DROP TABLE IF EXISTS ${this.table()}`;
|
|
126
|
+
}
|
|
127
|
+
table() {
|
|
128
|
+
return this.grammar.wrapIdentifier(this.tableName);
|
|
129
|
+
}
|
|
130
|
+
column(name) {
|
|
131
|
+
return this.grammar.wrapIdentifier(name);
|
|
57
132
|
}
|
|
58
133
|
}
|
|
59
134
|
//# sourceMappingURL=blueprint.js.map
|