@decaf-ts/core 0.5.47 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/core.cjs +1 -1
- package/dist/core.cjs.map +1 -1
- package/dist/core.js +1 -1
- package/dist/core.js.map +1 -1
- package/lib/esm/identity/decorators.js +6 -5
- package/lib/esm/identity/decorators.js.map +1 -1
- package/lib/esm/identity/utils.d.ts +3 -2
- package/lib/esm/identity/utils.js +7 -7
- package/lib/esm/identity/utils.js.map +1 -1
- package/lib/esm/index.d.ts +2 -1
- package/lib/esm/index.js +2 -1
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/model/construction.d.ts +2 -11
- package/lib/esm/model/construction.js +21 -33
- package/lib/esm/model/construction.js.map +1 -1
- package/lib/esm/model/decorators.d.ts +11 -2
- package/lib/esm/model/decorators.js +91 -69
- package/lib/esm/model/decorators.js.map +1 -1
- package/lib/esm/model/types.d.ts +6 -2
- package/lib/esm/overrides/Metadata.d.ts +16 -2
- package/lib/esm/overrides/overrides.js +40 -1
- package/lib/esm/overrides/overrides.js.map +1 -1
- package/lib/esm/persistence/Adapter.d.ts +6 -10
- package/lib/esm/persistence/Adapter.js +43 -46
- package/lib/esm/persistence/Adapter.js.map +1 -1
- package/lib/esm/persistence/Sequence.d.ts +2 -1
- package/lib/esm/persistence/Sequence.js.map +1 -1
- package/lib/esm/persistence/constants.d.ts +3 -1
- package/lib/esm/persistence/constants.js +2 -0
- package/lib/esm/persistence/constants.js.map +1 -1
- package/lib/esm/persistence/errors.d.ts +6 -0
- package/lib/esm/persistence/errors.js +10 -0
- package/lib/esm/persistence/errors.js.map +1 -1
- package/lib/esm/persistence/index.d.ts +1 -1
- package/lib/esm/persistence/index.js +1 -1
- package/lib/esm/persistence/index.js.map +1 -1
- package/lib/esm/persistence/migrations.d.ts +21 -0
- package/lib/esm/persistence/migrations.js +103 -0
- package/lib/esm/persistence/migrations.js.map +1 -0
- package/lib/esm/persistence/types.d.ts +7 -1
- package/lib/esm/query/Paginator.d.ts +4 -2
- package/lib/esm/query/Paginator.js +3 -1
- package/lib/esm/query/Paginator.js.map +1 -1
- package/lib/esm/query/Statement.d.ts +2 -1
- package/lib/esm/query/Statement.js +2 -2
- package/lib/esm/query/Statement.js.map +1 -1
- package/lib/esm/query/options.d.ts +2 -1
- package/lib/esm/query/selectors.d.ts +2 -1
- package/lib/esm/ram/RamAdapter.d.ts +2 -1
- package/lib/esm/ram/RamAdapter.js +7 -5
- package/lib/esm/ram/RamAdapter.js.map +1 -1
- package/lib/esm/ram/RamPaginator.d.ts +2 -1
- package/lib/esm/ram/RamPaginator.js +1 -1
- package/lib/esm/ram/RamPaginator.js.map +1 -1
- package/lib/esm/ram/RamStatement.js +3 -3
- package/lib/esm/ram/RamStatement.js.map +1 -1
- package/lib/esm/ram/types.d.ts +2 -1
- package/lib/esm/repository/Repository.d.ts +2 -1
- package/lib/esm/repository/Repository.js +30 -40
- package/lib/esm/repository/Repository.js.map +1 -1
- package/lib/esm/repository/decorators.d.ts +2 -1
- package/lib/esm/repository/decorators.js +7 -8
- package/lib/esm/repository/decorators.js.map +1 -1
- package/lib/esm/repository/injectables.d.ts +1 -2
- package/lib/esm/repository/injectables.js +6 -6
- package/lib/esm/repository/injectables.js.map +1 -1
- package/lib/esm/repository/utils.d.ts +2 -2
- package/lib/esm/repository/utils.js +4 -5
- package/lib/esm/repository/utils.js.map +1 -1
- package/lib/identity/decorators.cjs +6 -5
- package/lib/identity/decorators.js.map +1 -1
- package/lib/identity/utils.cjs +5 -5
- package/lib/identity/utils.d.ts +3 -2
- package/lib/identity/utils.js.map +1 -1
- package/lib/index.cjs +2 -1
- package/lib/index.d.ts +2 -1
- package/lib/index.js.map +1 -1
- package/lib/model/construction.cjs +19 -31
- package/lib/model/construction.d.ts +2 -11
- package/lib/model/construction.js.map +1 -1
- package/lib/model/decorators.cjs +99 -76
- package/lib/model/decorators.d.ts +11 -2
- package/lib/model/decorators.js.map +1 -1
- package/lib/model/types.d.ts +6 -2
- package/lib/overrides/Metadata.d.ts +16 -2
- package/lib/overrides/overrides.cjs +39 -0
- package/lib/overrides/overrides.js.map +1 -1
- package/lib/persistence/Adapter.cjs +41 -44
- package/lib/persistence/Adapter.d.ts +6 -10
- package/lib/persistence/Adapter.js.map +1 -1
- package/lib/persistence/Sequence.d.ts +2 -1
- package/lib/persistence/Sequence.js.map +1 -1
- package/lib/persistence/constants.cjs +2 -0
- package/lib/persistence/constants.d.ts +3 -1
- package/lib/persistence/constants.js.map +1 -1
- package/lib/persistence/errors.cjs +13 -1
- package/lib/persistence/errors.d.ts +6 -0
- package/lib/persistence/errors.js.map +1 -1
- package/lib/persistence/index.cjs +1 -1
- package/lib/persistence/index.d.ts +1 -1
- package/lib/persistence/index.js.map +1 -1
- package/lib/persistence/migrations.cjs +109 -0
- package/lib/persistence/migrations.d.ts +21 -0
- package/lib/persistence/migrations.js.map +1 -0
- package/lib/persistence/types.d.ts +7 -1
- package/lib/query/Paginator.cjs +3 -1
- package/lib/query/Paginator.d.ts +4 -2
- package/lib/query/Paginator.js.map +1 -1
- package/lib/query/Statement.cjs +1 -1
- package/lib/query/Statement.d.ts +2 -1
- package/lib/query/Statement.js.map +1 -1
- package/lib/query/options.d.ts +2 -1
- package/lib/query/selectors.d.ts +2 -1
- package/lib/ram/RamAdapter.cjs +9 -7
- package/lib/ram/RamAdapter.d.ts +2 -1
- package/lib/ram/RamAdapter.js.map +1 -1
- package/lib/ram/RamPaginator.cjs +1 -1
- package/lib/ram/RamPaginator.d.ts +2 -1
- package/lib/ram/RamPaginator.js.map +1 -1
- package/lib/ram/RamStatement.cjs +3 -3
- package/lib/ram/RamStatement.js.map +1 -1
- package/lib/ram/types.d.ts +2 -1
- package/lib/repository/Repository.cjs +29 -39
- package/lib/repository/Repository.d.ts +2 -1
- package/lib/repository/Repository.js.map +1 -1
- package/lib/repository/decorators.cjs +5 -6
- package/lib/repository/decorators.d.ts +2 -1
- package/lib/repository/decorators.js.map +1 -1
- package/lib/repository/injectables.cjs +5 -5
- package/lib/repository/injectables.d.ts +1 -2
- package/lib/repository/injectables.js.map +1 -1
- package/lib/repository/utils.cjs +4 -5
- package/lib/repository/utils.d.ts +2 -2
- package/lib/repository/utils.js.map +1 -1
- package/package.json +2 -4
- package/lib/esm/persistence/decorators.d.ts +0 -11
- package/lib/esm/persistence/decorators.js +0 -19
- package/lib/esm/persistence/decorators.js.map +0 -1
- package/lib/persistence/decorators.cjs +0 -22
- package/lib/persistence/decorators.d.ts +0 -11
- package/lib/persistence/decorators.js.map +0 -1
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { Adapter } from "./Adapter.js";
|
|
2
|
+
import { InternalError, } from "@decaf-ts/db-decorators";
|
|
3
|
+
import { LoggedClass } from "@decaf-ts/logging";
|
|
4
|
+
import { PersistenceKeys } from "./constants.js";
|
|
5
|
+
import { Decoration, Metadata, metadata } from "@decaf-ts/decoration";
|
|
6
|
+
import { MigrationRuleError } from "./errors.js";
|
|
7
|
+
export function prefixMethod(obj, after, prefix, afterName) {
|
|
8
|
+
async function wrapper(...args) {
|
|
9
|
+
let results;
|
|
10
|
+
try {
|
|
11
|
+
results = await Promise.resolve(prefix.call(this, ...args));
|
|
12
|
+
}
|
|
13
|
+
catch (e) {
|
|
14
|
+
if (e instanceof MigrationRuleError)
|
|
15
|
+
return;
|
|
16
|
+
throw e;
|
|
17
|
+
}
|
|
18
|
+
return Promise.resolve(after.apply(this, results));
|
|
19
|
+
}
|
|
20
|
+
const wrapped = wrapper.bind(obj);
|
|
21
|
+
const name = afterName ? afterName : after.name;
|
|
22
|
+
Object.defineProperty(wrapped, "name", {
|
|
23
|
+
enumerable: true,
|
|
24
|
+
configurable: true,
|
|
25
|
+
writable: false,
|
|
26
|
+
value: name,
|
|
27
|
+
});
|
|
28
|
+
obj[name] = wrapped;
|
|
29
|
+
}
|
|
30
|
+
export class AbsMigration extends LoggedClass {
|
|
31
|
+
constructor() {
|
|
32
|
+
super();
|
|
33
|
+
this.transaction = true;
|
|
34
|
+
[this.up, this.down].forEach((m) => {
|
|
35
|
+
const name = m.name;
|
|
36
|
+
prefixMethod(this, m, this.prefix(name));
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
get adapter() {
|
|
40
|
+
const meta = Metadata.get(this.constructor, PersistenceKeys.MIGRATION);
|
|
41
|
+
if (!meta)
|
|
42
|
+
throw new InternalError(`No migration metadata for ${this.constructor.name}`);
|
|
43
|
+
const flavour = meta.flavour;
|
|
44
|
+
return Adapter.get(flavour);
|
|
45
|
+
}
|
|
46
|
+
async enforceRules(qr, adapter, l) {
|
|
47
|
+
const rules = Metadata.get(this.constructor, PersistenceKeys.MIGRATION)?.rules;
|
|
48
|
+
if (!rules || !rules.length)
|
|
49
|
+
return true;
|
|
50
|
+
let log;
|
|
51
|
+
for (const rule of rules) {
|
|
52
|
+
log = l.for(rule);
|
|
53
|
+
const result = await rule(qr, adapter, log);
|
|
54
|
+
if (!result)
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
return true;
|
|
58
|
+
}
|
|
59
|
+
prefix(name) {
|
|
60
|
+
return async function preffix(qrOrAdapter) {
|
|
61
|
+
let qr;
|
|
62
|
+
if (qrOrAdapter instanceof Adapter) {
|
|
63
|
+
qr = this.getQueryRunner(qrOrAdapter.client);
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
qr = qrOrAdapter;
|
|
67
|
+
qrOrAdapter = this.adapter;
|
|
68
|
+
}
|
|
69
|
+
const log = this.log.for(name);
|
|
70
|
+
const allowed = await this.enforceRules(qr, qrOrAdapter, log);
|
|
71
|
+
if (!allowed) {
|
|
72
|
+
log.verbose(`Skipping migration ${this.constructor.name} due to rules`);
|
|
73
|
+
throw new MigrationRuleError("Migration skipped for rule enforcement");
|
|
74
|
+
}
|
|
75
|
+
return [qr, qrOrAdapter, log];
|
|
76
|
+
}.bind(this);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
export function migration(flavour, rules) {
|
|
80
|
+
function innerMigration(flavour, rules) {
|
|
81
|
+
return function (original) {
|
|
82
|
+
const current = Metadata["innerGet"](Symbol.for(PersistenceKeys.MIGRATION), flavour) ||
|
|
83
|
+
[];
|
|
84
|
+
Metadata.set(PersistenceKeys.MIGRATION, flavour, [
|
|
85
|
+
...current,
|
|
86
|
+
{
|
|
87
|
+
class: original,
|
|
88
|
+
},
|
|
89
|
+
]);
|
|
90
|
+
return metadata(PersistenceKeys.MIGRATION, {
|
|
91
|
+
flavour: flavour,
|
|
92
|
+
rules: rules,
|
|
93
|
+
})(original);
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
return Decoration.for(PersistenceKeys.MIGRATION)
|
|
97
|
+
.define({
|
|
98
|
+
decorator: innerMigration,
|
|
99
|
+
args: [flavour, rules],
|
|
100
|
+
})
|
|
101
|
+
.apply();
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=migrations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../../src/persistence/migrations.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { BulkCrudOperationKeys, OperationKeys } from "@decaf-ts/db-decorators";
|
|
1
|
+
import { BulkCrudOperationKeys, Context, OperationKeys, RepositoryFlags } from "@decaf-ts/db-decorators";
|
|
2
2
|
import { Adapter } from "./Adapter";
|
|
3
3
|
import { Observable } from "../interfaces/index";
|
|
4
|
+
import { Logger } from "@decaf-ts/logging";
|
|
4
5
|
/**
|
|
5
6
|
* @description Type representing possible ID formats for database events
|
|
6
7
|
* @summary A union type that defines the possible formats for event identifiers in the persistence layer.
|
|
@@ -26,3 +27,8 @@ export interface AdapterDispatch extends Observable {
|
|
|
26
27
|
close(): Promise<void>;
|
|
27
28
|
updateObservers(table: string, event: OperationKeys | BulkCrudOperationKeys | string, id: EventIds): Promise<void>;
|
|
28
29
|
}
|
|
30
|
+
export interface Migration<QUERYRUNNER, A extends Adapter<CONF, CONN, QUERY, FLAGS, CONTEXT>, CONF, CONN, QUERY, FLAGS extends RepositoryFlags = RepositoryFlags, CONTEXT extends Context<FLAGS> = Context<FLAGS>> {
|
|
31
|
+
transaction: boolean;
|
|
32
|
+
up(qr: QUERYRUNNER, adapter?: A, log?: Logger): Promise<void>;
|
|
33
|
+
down(qr: QUERYRUNNER, adapter?: A, log?: Logger): Promise<void>;
|
|
34
|
+
}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { Adapter } from "../persistence";
|
|
2
|
-
import {
|
|
2
|
+
import { Model } from "@decaf-ts/decorator-validation";
|
|
3
|
+
import { Constructor } from "@decaf-ts/decoration";
|
|
4
|
+
import { LoggedClass } from "@decaf-ts/logging";
|
|
3
5
|
/**
|
|
4
6
|
* @description Handles pagination for database queries
|
|
5
7
|
* @summary Provides functionality for navigating through paginated query results
|
|
@@ -56,7 +58,7 @@ import { Constructor, Model } from "@decaf-ts/decorator-validation";
|
|
|
56
58
|
* Adapter-->>Paginator: return results
|
|
57
59
|
* Paginator-->>Client: return page results
|
|
58
60
|
*/
|
|
59
|
-
export declare abstract class Paginator<M extends Model, R = M[], Q = any> {
|
|
61
|
+
export declare abstract class Paginator<M extends Model, R = M[], Q = any> extends LoggedClass {
|
|
60
62
|
protected readonly adapter: Adapter<any, any, Q, any, any>;
|
|
61
63
|
protected readonly query: Q;
|
|
62
64
|
readonly size: number;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { PagingError } from "./errors.js";
|
|
2
|
+
import { LoggedClass } from "@decaf-ts/logging";
|
|
2
3
|
/**
|
|
3
4
|
* @description Handles pagination for database queries
|
|
4
5
|
* @summary Provides functionality for navigating through paginated query results
|
|
@@ -55,7 +56,7 @@ import { PagingError } from "./errors.js";
|
|
|
55
56
|
* Adapter-->>Paginator: return results
|
|
56
57
|
* Paginator-->>Client: return page results
|
|
57
58
|
*/
|
|
58
|
-
export class Paginator {
|
|
59
|
+
export class Paginator extends LoggedClass {
|
|
59
60
|
get current() {
|
|
60
61
|
return this._currentPage;
|
|
61
62
|
}
|
|
@@ -71,6 +72,7 @@ export class Paginator {
|
|
|
71
72
|
return this._statement;
|
|
72
73
|
}
|
|
73
74
|
constructor(adapter, query, size, clazz) {
|
|
75
|
+
super();
|
|
74
76
|
this.adapter = adapter;
|
|
75
77
|
this.query = query;
|
|
76
78
|
this.size = size;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Paginator.js","sourceRoot":"","sources":["../../../src/query/Paginator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,oBAAiB;AAIvC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuDG;AACH,MAAM,OAAgB,
|
|
1
|
+
{"version":3,"file":"Paginator.js","sourceRoot":"","sources":["../../../src/query/Paginator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,oBAAiB;AAIvC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuDG;AACH,MAAM,OAAgB,SAIpB,SAAQ,WAAW;IAQnB,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED,IAAc,SAAS;QACrB,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjE,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED,YACqB,OAAuC,EACvC,KAAQ,EAClB,IAAY,EACF,KAAqB;QAExC,KAAK,EAAE,CAAC;QALW,YAAO,GAAP,OAAO,CAAgC;QACvC,UAAK,GAAL,KAAK,CAAG;QAClB,SAAI,GAAJ,IAAI,CAAQ;QACF,UAAK,GAAL,KAAK,CAAgB;IAG1C,CAAC;IAID,KAAK,CAAC,IAAI;QACR,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;IACrC,CAAC;IAES,YAAY,CAAC,IAAY;QACjC,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;YACrC,MAAM,IAAI,WAAW,CACnB,sDAAsD,CACvD,CAAC;QACJ,IAAI,OAAO,IAAI,CAAC,WAAW,KAAK,WAAW,IAAI,IAAI,GAAG,IAAI,CAAC,WAAW;YACpE,MAAM,IAAI,WAAW,CACnB,QAAQ,IAAI,CAAC,WAAW,qCAAqC,IAAI,EAAE,CACpE,CAAC;QACJ,OAAO,IAAI,CAAC;IACd,CAAC;CAGF"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Model } from "@decaf-ts/decorator-validation";
|
|
2
2
|
import type { Executor, RawExecutor } from "../interfaces";
|
|
3
3
|
import type { FromSelector, GroupBySelector, OrderBySelector, SelectSelector } from "./selectors";
|
|
4
4
|
import { Condition } from "./Condition";
|
|
@@ -8,6 +8,7 @@ import { Paginator } from "./Paginator";
|
|
|
8
8
|
import { Adapter } from "../persistence";
|
|
9
9
|
import { Logger } from "@decaf-ts/logging";
|
|
10
10
|
import { LoggedClass } from "@decaf-ts/logging";
|
|
11
|
+
import { Constructor } from "@decaf-ts/decoration";
|
|
11
12
|
/**
|
|
12
13
|
* @description Base class for database query statements
|
|
13
14
|
* @summary Provides a foundation for building and executing database queries
|
|
@@ -10,7 +10,7 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
10
10
|
var _a, _b, _c, _d;
|
|
11
11
|
import { Model } from "@decaf-ts/decorator-validation";
|
|
12
12
|
import { Condition } from "./Condition.js";
|
|
13
|
-
import {
|
|
13
|
+
import { InternalError } from "@decaf-ts/db-decorators";
|
|
14
14
|
import { final } from "./../utils/decorators.js";
|
|
15
15
|
import { QueryError } from "./errors.js";
|
|
16
16
|
import { LoggedClass } from "@decaf-ts/logging";
|
|
@@ -135,7 +135,7 @@ export class Statement extends LoggedClass {
|
|
|
135
135
|
const results = await this.adapter.raw(rawInput);
|
|
136
136
|
if (!this.selectSelector)
|
|
137
137
|
return results;
|
|
138
|
-
const pkAttr =
|
|
138
|
+
const pkAttr = Model.pk(this.fromSelector);
|
|
139
139
|
const processor = function recordProcessor(r) {
|
|
140
140
|
const id = r[pkAttr];
|
|
141
141
|
return this.adapter.revert(r, this.fromSelector, pkAttr, id);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Statement.js","sourceRoot":"","sources":["../../../src/query/Statement.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"Statement.js","sourceRoot":"","sources":["../../../src/query/Statement.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { GroupBySelector, LimitSelector, OffsetSelector, OrderBySelector, SelectSelector } from "./selectors";
|
|
2
2
|
import { Executor } from "../interfaces";
|
|
3
|
-
import {
|
|
3
|
+
import { Model } from "@decaf-ts/decorator-validation";
|
|
4
4
|
import { Condition } from "./Condition";
|
|
5
5
|
import { Paginatable } from "../interfaces/Paginatable";
|
|
6
|
+
import { Constructor } from "@decaf-ts/decoration";
|
|
6
7
|
/**
|
|
7
8
|
* @summary GroupBy Option interface
|
|
8
9
|
* @description Exposes the GROUP BY method and remaining options
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import { Constructor } from "@decaf-ts/decoration";
|
|
1
2
|
import { OrderDirection } from "../repository";
|
|
2
|
-
import {
|
|
3
|
+
import { Model } from "@decaf-ts/decorator-validation";
|
|
3
4
|
/**
|
|
4
5
|
* @description Type for selecting the data source in a query
|
|
5
6
|
* @summary Defines the type for specifying the table or model to query from
|
|
@@ -4,8 +4,9 @@ import { RamContext } from "./RamContext";
|
|
|
4
4
|
import { Dispatch } from "../persistence/Dispatch";
|
|
5
5
|
import { Adapter, Sequence } from "../persistence";
|
|
6
6
|
import { SequenceOptions } from "../interfaces";
|
|
7
|
-
import {
|
|
7
|
+
import { Model } from "@decaf-ts/decorator-validation";
|
|
8
8
|
import { BaseError, OperationKeys } from "@decaf-ts/db-decorators";
|
|
9
|
+
import { Constructor } from "@decaf-ts/decoration";
|
|
9
10
|
/**
|
|
10
11
|
* @description In-memory adapter for data persistence
|
|
11
12
|
* @summary The RamAdapter provides an in-memory implementation of the persistence layer.
|
|
@@ -3,11 +3,12 @@ import { RamContext } from "./RamContext.js";
|
|
|
3
3
|
import { Repository } from "./../repository/Repository.js";
|
|
4
4
|
import { Adapter, PersistenceKeys, Sequence } from "./../persistence/index.js";
|
|
5
5
|
import { Lock } from "@decaf-ts/transactional-decorators";
|
|
6
|
-
import {
|
|
7
|
-
import { BaseError, ConflictError,
|
|
6
|
+
import { hashObj, Model } from "@decaf-ts/decorator-validation";
|
|
7
|
+
import { BaseError, ConflictError, InternalError, NotFoundError, onCreate, onCreateUpdate, DBKeys, } from "@decaf-ts/db-decorators";
|
|
8
8
|
import { RamSequence } from "./RamSequence.js";
|
|
9
9
|
import { createdByOnRamCreateUpdate } from "./handlers.js";
|
|
10
10
|
import { RamFlavour } from "./constants.js";
|
|
11
|
+
import { Decoration, Metadata, propMetadata, } from "@decaf-ts/decoration";
|
|
11
12
|
/**
|
|
12
13
|
* @description In-memory adapter for data persistence
|
|
13
14
|
* @summary The RamAdapter provides an in-memory implementation of the persistence layer.
|
|
@@ -344,7 +345,8 @@ export class RamAdapter extends Adapter {
|
|
|
344
345
|
const collection = this.tableFor(from);
|
|
345
346
|
if (!collection)
|
|
346
347
|
throw new InternalError(`Table ${from} not found in RamAdapter`);
|
|
347
|
-
const
|
|
348
|
+
const id = Model.pk(from);
|
|
349
|
+
const props = Metadata.get(from, Metadata.key(DBKeys.ID, id));
|
|
348
350
|
let result = Array.from(collection.entries()).map(([pk, r]) => this.revert(r, from, id, Sequence.parseValue(props.type, pk)));
|
|
349
351
|
result = where ? result.filter(where) : result;
|
|
350
352
|
if (sort)
|
|
@@ -446,8 +448,8 @@ export class RamAdapter extends Adapter {
|
|
|
446
448
|
*/
|
|
447
449
|
static decoration() {
|
|
448
450
|
super.decoration();
|
|
449
|
-
const createdByKey =
|
|
450
|
-
const updatedByKey =
|
|
451
|
+
const createdByKey = PersistenceKeys.CREATED_BY;
|
|
452
|
+
const updatedByKey = PersistenceKeys.UPDATED_BY;
|
|
451
453
|
Decoration.flavouredAs(RamFlavour)
|
|
452
454
|
.for(createdByKey)
|
|
453
455
|
.define(onCreate(createdByOnRamCreateUpdate), propMetadata(createdByKey, {}))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RamAdapter.js","sourceRoot":"","sources":["../../../src/ram/RamAdapter.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,YAAY,EAAE,0BAAuB;AAC9C,OAAO,EAAE,UAAU,EAAE,wBAAqB;AAC1C,OAAO,EAAE,UAAU,EAAE,sCAAiC;AAEtD,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,kCAAuB;AAEpE,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC1D,OAAO,
|
|
1
|
+
{"version":3,"file":"RamAdapter.js","sourceRoot":"","sources":["../../../src/ram/RamAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { RawRamQuery } from "./types";
|
|
2
2
|
import { Paginator } from "../query";
|
|
3
|
-
import {
|
|
3
|
+
import { Model } from "@decaf-ts/decorator-validation";
|
|
4
4
|
import { Adapter } from "../persistence";
|
|
5
|
+
import { Constructor } from "@decaf-ts/decoration";
|
|
5
6
|
/**
|
|
6
7
|
* @description RAM-specific paginator implementation
|
|
7
8
|
* @summary Extends the base Paginator class to provide pagination functionality for RAM adapter queries.
|
|
@@ -55,7 +55,7 @@ export class RamPaginator extends Paginator {
|
|
|
55
55
|
const statement = this.prepare(this.statement);
|
|
56
56
|
if (!this._recordCount || !this._totalPages) {
|
|
57
57
|
this._totalPages = this._recordCount = 0;
|
|
58
|
-
const results = await this.adapter.raw({ ...statement, limit: undefined }) || [];
|
|
58
|
+
const results = (await this.adapter.raw({ ...statement, limit: undefined })) || [];
|
|
59
59
|
this._recordCount = results.length;
|
|
60
60
|
if (this._recordCount > 0) {
|
|
61
61
|
const size = statement?.limit || this.size;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RamPaginator.js","sourceRoot":"","sources":["../../../src/ram/RamPaginator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,4BAAiB;
|
|
1
|
+
{"version":3,"file":"RamPaginator.js","sourceRoot":"","sources":["../../../src/ram/RamPaginator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,4BAAiB;AAKrC;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,OAAO,YAAiC,SAAQ,SAIrD;IACC,YACE,OAA+C,EAC/C,KAAqB,EACrB,IAAY,EACZ,KAAqB;QAErB,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IACrC,CAAC;IAED;;;;;;OAMG;IACO,OAAO,CAAC,YAA4B;QAC5C,MAAM,KAAK,GAAqB,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC;QAChE,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC;QACxB,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,IAAI,CAAC,OAAe,CAAC;QACzB,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC/C,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YAC5C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;YACzC,MAAM,OAAO,GACX,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,GAAG,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YACrE,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;YACnC,IAAI,IAAI,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC;gBAC1B,MAAM,IAAI,GAAG,SAAS,EAAE,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC;gBAC3C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;YACzD,CAAC;QACH,CAAC;QAED,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAC/B,SAAS,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;QACxC,MAAM,OAAO,GAAU,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACzD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,OAAO,OAAO,CAAC;IACjB,CAAC;CACF"}
|
|
@@ -2,7 +2,7 @@ import { GroupOperator, Operator, QueryError, } from "./../query/index.js";
|
|
|
2
2
|
import { RamPaginator } from "./RamPaginator.js";
|
|
3
3
|
import { InternalError } from "@decaf-ts/db-decorators";
|
|
4
4
|
import { Statement } from "./../query/Statement.js";
|
|
5
|
-
import {
|
|
5
|
+
import { Metadata } from "@decaf-ts/decoration";
|
|
6
6
|
/**
|
|
7
7
|
* @description RAM-specific query statement builder
|
|
8
8
|
* @summary Extends the base Statement class to provide query building functionality for the RAM adapter.
|
|
@@ -46,10 +46,10 @@ export class RamStatement extends Statement {
|
|
|
46
46
|
throw new InternalError("orderBySelector not set. Should be impossible");
|
|
47
47
|
const selector = this.orderBySelector;
|
|
48
48
|
const [key, direction] = selector;
|
|
49
|
-
const type =
|
|
49
|
+
const { designType: type } = Metadata.getPropDesignTypes(el1.constructor, key);
|
|
50
50
|
if (!type)
|
|
51
51
|
throw new QueryError(`type not compatible with sorting: ${type}`);
|
|
52
|
-
switch (type) {
|
|
52
|
+
switch (type.name) {
|
|
53
53
|
case "string":
|
|
54
54
|
case "String":
|
|
55
55
|
return ((direction === "asc" ? 1 : -1) *
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RamStatement.js","sourceRoot":"","sources":["../../../src/ram/RamStatement.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,aAAa,EACb,QAAQ,EAER,UAAU,GACX,4BAAiB;AAGlB,OAAO,EAAE,YAAY,EAAE,0BAAuB;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,gCAA2B;
|
|
1
|
+
{"version":3,"file":"RamStatement.js","sourceRoot":"","sources":["../../../src/ram/RamStatement.ts"],"names":[],"mappings":"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"}
|
package/lib/esm/ram/types.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Model } from "@decaf-ts/decorator-validation";
|
|
2
2
|
import { Repository } from "../repository";
|
|
3
3
|
import { Context, RepositoryFlags } from "@decaf-ts/db-decorators";
|
|
4
4
|
import { RamAdapter } from "./RamAdapter";
|
|
5
|
+
import { Constructor } from "@decaf-ts/decoration";
|
|
5
6
|
/**
|
|
6
7
|
* @description In-memory storage structure for the RAM adapter
|
|
7
8
|
* @summary A nested Map structure that stores all entities by their table name and primary key.
|
|
@@ -2,7 +2,7 @@ import { BulkCrudOperationKeys, Context, IRepository, OperationKeys, Repository
|
|
|
2
2
|
import { Observable } from "../interfaces/Observable";
|
|
3
3
|
import { type Observer } from "../interfaces/Observer";
|
|
4
4
|
import { Adapter } from "../persistence/Adapter";
|
|
5
|
-
import {
|
|
5
|
+
import { Model } from "@decaf-ts/decorator-validation";
|
|
6
6
|
import { OrderDirection } from "./constants";
|
|
7
7
|
import { SequenceOptions } from "../interfaces/SequenceOptions";
|
|
8
8
|
import { Queriable } from "../interfaces/Queriable";
|
|
@@ -13,6 +13,7 @@ import { SelectSelector } from "../query/selectors";
|
|
|
13
13
|
import { Logger } from "@decaf-ts/logging";
|
|
14
14
|
import { ObserverHandler } from "../persistence/ObserverHandler";
|
|
15
15
|
import { EventIds, InferredAdapterConfig, type ObserverFilter } from "../persistence";
|
|
16
|
+
import { Constructor } from "@decaf-ts/decoration";
|
|
16
17
|
/**
|
|
17
18
|
* @description Type alias for Repository class with simplified generic parameters.
|
|
18
19
|
* @summary Provides a more concise way to reference the Repository class with its generic parameters.
|
|
@@ -7,18 +7,17 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
7
7
|
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
8
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
9
|
};
|
|
10
|
-
import { Context,
|
|
10
|
+
import { Context, DefaultSeparator, enforceDBDecorators, InternalError, ValidationError, OperationKeys, Repository as Rep, wrapMethodWithContext, DBKeys, } from "@decaf-ts/db-decorators";
|
|
11
11
|
import { Adapter } from "./../persistence/Adapter.js";
|
|
12
12
|
import { Model } from "@decaf-ts/decorator-validation";
|
|
13
13
|
import { PersistenceKeys } from "./../persistence/constants.js";
|
|
14
14
|
import { OrderDirection } from "./constants.js";
|
|
15
|
-
import { Reflection } from "@decaf-ts/reflection";
|
|
16
15
|
import { Sequence } from "./../persistence/Sequence.js";
|
|
17
16
|
import { Condition } from "./../query/Condition.js";
|
|
18
17
|
import { getColumnName, getTableName } from "./../identity/utils.js";
|
|
19
|
-
import { uses } from "./../persistence/decorators.js";
|
|
20
18
|
import { ObserverHandler } from "./../persistence/ObserverHandler.js";
|
|
21
19
|
import { final } from "./../utils/index.js";
|
|
20
|
+
import { DecorationKeys, DefaultFlavour, Metadata, uses, } from "@decaf-ts/decoration";
|
|
22
21
|
/**
|
|
23
22
|
* @description Core repository implementation for database operations on models on a table by table way.
|
|
24
23
|
* @summary Provides CRUD operations, querying capabilities, and observer pattern implementation for model persistence.
|
|
@@ -123,10 +122,21 @@ export class Repository extends Rep {
|
|
|
123
122
|
if (clazz) {
|
|
124
123
|
Repository.register(clazz, this, this.adapter.alias);
|
|
125
124
|
if (adapter) {
|
|
126
|
-
const flavour =
|
|
127
|
-
if (
|
|
128
|
-
|
|
129
|
-
|
|
125
|
+
// const flavour = Metadata.flavourOf(clazz);
|
|
126
|
+
// if (
|
|
127
|
+
// flavour &&
|
|
128
|
+
// flavour !== DefaultFlavour &&
|
|
129
|
+
// flavour !== adapter.flavour
|
|
130
|
+
// ) {
|
|
131
|
+
// this.log.warn(
|
|
132
|
+
// `Incompatible flavours detected between adapter (${adapter.flavour}) and model (${flavour})`
|
|
133
|
+
// );
|
|
134
|
+
// // throw new InternalError("Incompatible flavours");
|
|
135
|
+
// }
|
|
136
|
+
const flavour = Metadata.get(clazz, DecorationKeys.FLAVOUR);
|
|
137
|
+
if (flavour === DefaultFlavour) {
|
|
138
|
+
uses(adapter.flavour)(clazz);
|
|
139
|
+
}
|
|
130
140
|
}
|
|
131
141
|
}
|
|
132
142
|
[this.createAll, this.readAll, this.updateAll, this.deleteAll].forEach((m) => {
|
|
@@ -590,8 +600,8 @@ export class Repository extends Rep {
|
|
|
590
600
|
.for(this.updateObservers)
|
|
591
601
|
.verbose(`Updating ${this.observerHandler.count()} observers for ${this}`);
|
|
592
602
|
await this.observerHandler.updateObservers(this.log, table, event, Array.isArray(id)
|
|
593
|
-
? id.map((i) => Sequence.parseValue(this.pkProps
|
|
594
|
-
: Sequence.parseValue(this.pkProps
|
|
603
|
+
? id.map((i) => Sequence.parseValue(this.pkProps?.type, i))
|
|
604
|
+
: Sequence.parseValue(this.pkProps?.type, id), ...args);
|
|
595
605
|
}
|
|
596
606
|
/**
|
|
597
607
|
* @description Alias for updateObservers.
|
|
@@ -618,9 +628,7 @@ export class Repository extends Rep {
|
|
|
618
628
|
*/
|
|
619
629
|
static forModel(model, alias, ...args) {
|
|
620
630
|
let repo;
|
|
621
|
-
const _alias = alias ||
|
|
622
|
-
Reflect.getMetadata(Adapter.key(PersistenceKeys.ADAPTER), model) ||
|
|
623
|
-
Adapter.currentFlavour;
|
|
631
|
+
const _alias = alias || Metadata.flavourOf(model) || Adapter.currentFlavour;
|
|
624
632
|
try {
|
|
625
633
|
repo = this.get(model, _alias);
|
|
626
634
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
@@ -631,9 +639,8 @@ export class Repository extends Rep {
|
|
|
631
639
|
if (repo instanceof Repository)
|
|
632
640
|
return repo;
|
|
633
641
|
const flavour = alias ||
|
|
634
|
-
|
|
635
|
-
(repo &&
|
|
636
|
-
Reflect.getMetadata(Adapter.key(PersistenceKeys.ADAPTER), repo)) ||
|
|
642
|
+
Metadata.flavourOf(model) ||
|
|
643
|
+
(repo && Metadata.get(repo, PersistenceKeys.ADAPTER)) ||
|
|
637
644
|
Adapter.currentFlavour;
|
|
638
645
|
const adapter = flavour
|
|
639
646
|
? Adapter.get(flavour)
|
|
@@ -730,8 +737,9 @@ export class Repository extends Rep {
|
|
|
730
737
|
* @throws {InternalError} If no sequence options are defined for the model.
|
|
731
738
|
*/
|
|
732
739
|
static getSequenceOptions(model) {
|
|
733
|
-
const
|
|
734
|
-
const
|
|
740
|
+
const pkName = Model.pk(model.constructor);
|
|
741
|
+
const key = Metadata.key(DBKeys.ID, pkName);
|
|
742
|
+
const metadata = Metadata.get(model.constructor, key);
|
|
735
743
|
if (!metadata)
|
|
736
744
|
throw new InternalError("No sequence options defined for model. did you use the @pk decorator?");
|
|
737
745
|
return metadata;
|
|
@@ -744,17 +752,10 @@ export class Repository extends Rep {
|
|
|
744
752
|
* @return {Record<string, Record<string, IndexMetadata>>} A nested record of property names to index metadata.
|
|
745
753
|
*/
|
|
746
754
|
static indexes(model) {
|
|
747
|
-
const indexDecorators =
|
|
748
|
-
return Object.
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
for (const dec of decs) {
|
|
752
|
-
const { key, props } = dec;
|
|
753
|
-
accum[k] = accum[k] || {};
|
|
754
|
-
accum[k][key] = props;
|
|
755
|
-
}
|
|
756
|
-
}
|
|
757
|
-
return accum;
|
|
755
|
+
const indexDecorators = Metadata.get(model instanceof Model ? model.constructor : model, PersistenceKeys.INDEX);
|
|
756
|
+
return Object.keys(indexDecorators || {}).reduce((acum, t) => {
|
|
757
|
+
acum[t] = { [PersistenceKeys.INDEX]: indexDecorators[t] };
|
|
758
|
+
return acum;
|
|
758
759
|
}, {});
|
|
759
760
|
}
|
|
760
761
|
/**
|
|
@@ -765,18 +766,7 @@ export class Repository extends Rep {
|
|
|
765
766
|
* @return {string[]} An array of property names that are relations.
|
|
766
767
|
*/
|
|
767
768
|
static relations(model) {
|
|
768
|
-
|
|
769
|
-
let prototype = model instanceof Model
|
|
770
|
-
? Object.getPrototypeOf(model)
|
|
771
|
-
: model.prototype;
|
|
772
|
-
while (prototype != null) {
|
|
773
|
-
const props = prototype[PersistenceKeys.RELATIONS];
|
|
774
|
-
if (props) {
|
|
775
|
-
result.push(...props);
|
|
776
|
-
}
|
|
777
|
-
prototype = Object.getPrototypeOf(prototype);
|
|
778
|
-
}
|
|
779
|
-
return result;
|
|
769
|
+
return (Metadata.relations(model instanceof Model ? model.constructor : model) || []);
|
|
780
770
|
}
|
|
781
771
|
/**
|
|
782
772
|
* @description Gets the table name for a model.
|