@venizia/ignis-kernel 0.2.0-20 → 0.2.0-22
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/cjs/base/applications/artifact-index.d.ts +5 -2
- package/dist/cjs/base/applications/artifact-index.d.ts.map +1 -1
- package/dist/cjs/base/applications/artifact-index.js +18 -5
- package/dist/cjs/base/applications/artifact-index.js.map +1 -1
- package/dist/cjs/base/applications/common/types/artifacts.d.ts +8 -2
- package/dist/cjs/base/applications/common/types/artifacts.d.ts.map +1 -1
- package/dist/cjs/base/controllers/factory/controller.d.ts +9 -2
- package/dist/cjs/base/controllers/factory/controller.d.ts.map +1 -1
- package/dist/cjs/base/controllers/factory/crud/readable.d.ts +5 -0
- package/dist/cjs/base/controllers/factory/crud/readable.d.ts.map +1 -1
- package/dist/cjs/base/controllers/factory/crud/readable.js +44 -7
- package/dist/cjs/base/controllers/factory/crud/readable.js.map +1 -1
- package/dist/cjs/base/controllers/rest/base.d.ts +12 -3
- package/dist/cjs/base/controllers/rest/base.d.ts.map +1 -1
- package/dist/cjs/base/controllers/rest/base.js +11 -6
- package/dist/cjs/base/controllers/rest/base.js.map +1 -1
- package/dist/esm/base/applications/artifact-index.d.ts +5 -2
- package/dist/esm/base/applications/artifact-index.d.ts.map +1 -1
- package/dist/esm/base/applications/artifact-index.js +18 -5
- package/dist/esm/base/applications/artifact-index.js.map +1 -1
- package/dist/esm/base/applications/common/types/artifacts.d.ts +8 -2
- package/dist/esm/base/applications/common/types/artifacts.d.ts.map +1 -1
- package/dist/esm/base/controllers/factory/controller.d.ts +9 -2
- package/dist/esm/base/controllers/factory/controller.d.ts.map +1 -1
- package/dist/esm/base/controllers/factory/crud/readable.d.ts +5 -0
- package/dist/esm/base/controllers/factory/crud/readable.d.ts.map +1 -1
- package/dist/esm/base/controllers/factory/crud/readable.js +44 -7
- package/dist/esm/base/controllers/factory/crud/readable.js.map +1 -1
- package/dist/esm/base/controllers/rest/base.d.ts +12 -3
- package/dist/esm/base/controllers/rest/base.d.ts.map +1 -1
- package/dist/esm/base/controllers/rest/base.js +8 -4
- package/dist/esm/base/controllers/rest/base.js.map +1 -1
- package/package.json +2 -2
|
@@ -10,10 +10,13 @@ export declare class ArtifactIndexHelper extends BaseHelper {
|
|
|
10
10
|
input: TArtifactIndexInput;
|
|
11
11
|
application: unknown;
|
|
12
12
|
}): Promise<Required<IArtifactIndex>>;
|
|
13
|
-
/** One index, or arrays nested to any depth, as a flat list in input order. */
|
|
13
|
+
/** One index, or arrays nested to any depth, as a flat list in input order; a conditional entry contributes its subtree only when its `when` answers true. */
|
|
14
14
|
flatten(opts: {
|
|
15
15
|
input: TArtifactIndexInput;
|
|
16
|
-
|
|
16
|
+
application: unknown;
|
|
17
|
+
}): Promise<IArtifactIndex[]>;
|
|
18
|
+
/** Positional on purpose: a type predicate narrows its own parameter, and an options object would narrow the wrapper instead of `input`. */
|
|
19
|
+
private isConditional;
|
|
17
20
|
/** The classes of one kind across every index, minus those whose `when` says no, sorted by `order` (stable). The `when` conditions run concurrently: each reads config and environment, never another artifact. */
|
|
18
21
|
select<Field extends keyof IArtifactIndex>(opts: {
|
|
19
22
|
indexes: IArtifactIndex[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"artifact-index.d.ts","sourceRoot":"","sources":["../../../../src/base/applications/artifact-index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"artifact-index.d.ts","sourceRoot":"","sources":["../../../../src/base/applications/artifact-index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,EAA6B,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAG/F,+NAA+N;AAC/N,qBAAa,mBAAoB,SAAQ,UAAU;IACjD,MAAM,CAAC,QAAQ,CAAC,mBAAmB,2BAA2B;IAE9D,OAAO;IAIP,MAAM,CAAC,WAAW,IAAI,mBAAmB;IAOzC,yHAAyH;IACnH,OAAO,CAAC,IAAI,EAAE;QAClB,KAAK,EAAE,mBAAmB,CAAC;QAC3B,WAAW,EAAE,OAAO,CAAC;KACtB,GAAG,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IAiCrC,8JAA8J;IACxJ,OAAO,CAAC,IAAI,EAAE;QAClB,KAAK,EAAE,mBAAmB,CAAC;QAC3B,WAAW,EAAE,OAAO,CAAC;KACtB,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAsB7B,4IAA4I;IAC5I,OAAO,CAAC,aAAa;IAMrB,mNAAmN;IAC7M,MAAM,CAAC,KAAK,SAAS,MAAM,cAAc,EAAE,IAAI,EAAE;QACrD,OAAO,EAAE,cAAc,EAAE,CAAC;QAC1B,KAAK,EAAE,KAAK,CAAC;QACb,WAAW,EAAE,OAAO,CAAC;KACtB,GAAG,OAAO,CAAC,WAAW,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;YA0B3C,UAAU;CAYzB"}
|
|
@@ -20,7 +20,7 @@ class ArtifactIndexHelper extends core_1.BaseHelper {
|
|
|
20
20
|
/** Every kind of the input, each already filtered by `when` and sorted by `order`, keyed the way `IArtifactIndex` is. */
|
|
21
21
|
async resolve(opts) {
|
|
22
22
|
const { input, application } = opts;
|
|
23
|
-
const indexes = this.flatten({ input });
|
|
23
|
+
const indexes = await this.flatten({ input, application });
|
|
24
24
|
const dataSources = await this.select({
|
|
25
25
|
indexes,
|
|
26
26
|
field: common_1.ArtifactIndexFields.DATA_SOURCES,
|
|
@@ -48,14 +48,27 @@ class ArtifactIndexHelper extends core_1.BaseHelper {
|
|
|
48
48
|
});
|
|
49
49
|
return { dataSources, components, repositories, services, controllers };
|
|
50
50
|
}
|
|
51
|
-
/** One index, or arrays nested to any depth, as a flat list in input order. */
|
|
52
|
-
flatten(opts) {
|
|
53
|
-
const { input } = opts;
|
|
51
|
+
/** One index, or arrays nested to any depth, as a flat list in input order; a conditional entry contributes its subtree only when its `when` answers true. */
|
|
52
|
+
async flatten(opts) {
|
|
53
|
+
const { input, application } = opts;
|
|
54
54
|
if (Array.isArray(input)) {
|
|
55
|
-
|
|
55
|
+
const nested = await Promise.all(input.map(entry => this.flatten({ input: entry, application })));
|
|
56
|
+
return nested.flat();
|
|
57
|
+
}
|
|
58
|
+
if (this.isConditional(input)) {
|
|
59
|
+
const isSelected = await input.when({ application });
|
|
60
|
+
if (!isSelected) {
|
|
61
|
+
this.logger.debug('Skipped by condition | conditional index entry');
|
|
62
|
+
return [];
|
|
63
|
+
}
|
|
64
|
+
return this.flatten({ input: input.index, application });
|
|
56
65
|
}
|
|
57
66
|
return [input];
|
|
58
67
|
}
|
|
68
|
+
/** Positional on purpose: a type predicate narrows its own parameter, and an options object would narrow the wrapper instead of `input`. */
|
|
69
|
+
isConditional(entry) {
|
|
70
|
+
return 'when' in entry && 'index' in entry;
|
|
71
|
+
}
|
|
59
72
|
/** The classes of one kind across every index, minus those whose `when` says no, sorted by `order` (stable). The `when` conditions run concurrently: each reads config and environment, never another artifact. */
|
|
60
73
|
async select(opts) {
|
|
61
74
|
const { indexes, field, application } = opts;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"artifact-index.js","sourceRoot":"","sources":["../../../../src/base/applications/artifact-index.ts"],"names":[],"mappings":";;;AAAA,mDAAuD;AACvD,+DAA2D;AAE3D,sDAAyD;AAEzD,qCAA+C;AAE/C,+NAA+N;AAC/N,MAAa,mBAAoB,SAAQ,iBAAU;aACjC,wBAAmB,GAAG,uBAAuB,CAAC;IAE9D;QACE,KAAK,CAAC,EAAE,KAAK,EAAE,mBAAmB,CAAC,IAAI,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,CAAC,WAAW;QAChB,OAAO,gCAAc,CAAC,OAAO,CAAC;YAC5B,GAAG,EAAE,mBAAmB,CAAC,mBAAmB;YAC5C,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,mBAAmB,EAAE;SACxC,CAAC,CAAC;IACL,CAAC;IAED,yHAAyH;IACzH,KAAK,CAAC,OAAO,CAAC,IAGb;QACC,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;QACpC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"artifact-index.js","sourceRoot":"","sources":["../../../../src/base/applications/artifact-index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { TArtifactCondition } from '../../../../helpers/inversion/common/types';
|
|
1
2
|
import type { TClass } from '@venizia/ignis-helpers/common';
|
|
2
3
|
import type { BaseComponent } from '../../../components';
|
|
3
4
|
import type { IDataSource } from '../../../datasources';
|
|
@@ -11,6 +12,11 @@ export interface IArtifactIndex {
|
|
|
11
12
|
services?: ReadonlyArray<TClass<IService>>;
|
|
12
13
|
controllers?: ReadonlyArray<TClass<unknown>>;
|
|
13
14
|
}
|
|
14
|
-
/**
|
|
15
|
-
export
|
|
15
|
+
/** An index (or nested indexes) registered only when `when` answers true - the run-mode gate: a worker keeps its controllers out of the container instead of mounting routes no security step guards. Extends the never-typed kind fields so code that destructures kinds from a non-array input still compiles against the union. */
|
|
16
|
+
export interface IConditionalArtifactIndex extends Partial<Record<keyof IArtifactIndex, never>> {
|
|
17
|
+
when: TArtifactCondition;
|
|
18
|
+
index: TArtifactIndexInput;
|
|
19
|
+
}
|
|
20
|
+
/** One index, a conditional entry, or any nesting of arrays of them - a library exports one, an application composes several. */
|
|
21
|
+
export type TArtifactIndexInput = IArtifactIndex | IConditionalArtifactIndex | TArtifactIndexInput[];
|
|
16
22
|
//# sourceMappingURL=artifacts.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"artifacts.d.ts","sourceRoot":"","sources":["../../../../../../src/base/applications/common/types/artifacts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAElD,sIAAsI;AACtI,MAAM,WAAW,cAAc;IAC7B,WAAW,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;IACjD,UAAU,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC;IAClD,YAAY,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;IAClD,QAAQ,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC3C,WAAW,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;CAC9C;AAED
|
|
1
|
+
{"version":3,"file":"artifacts.d.ts","sourceRoot":"","sources":["../../../../../../src/base/applications/common/types/artifacts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAElD,sIAAsI;AACtI,MAAM,WAAW,cAAc;IAC7B,WAAW,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;IACjD,UAAU,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC;IAClD,YAAY,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;IAClD,QAAQ,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC3C,WAAW,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;CAC9C;AAED,sUAAsU;AACtU,MAAM,WAAW,yBAA0B,SAAQ,OAAO,CAAC,MAAM,CAAC,MAAM,cAAc,EAAE,KAAK,CAAC,CAAC;IAC7F,IAAI,EAAE,kBAAkB,CAAC;IACzB,KAAK,EAAE,mBAAmB,CAAC;CAC5B;AAED,iIAAiI;AACjI,MAAM,MAAM,mBAAmB,GAC7B,cAAc,GAAG,yBAAyB,GAAG,mBAAmB,EAAE,CAAC"}
|
|
@@ -27,6 +27,9 @@ export declare class ControllerFactory extends BaseHelper {
|
|
|
27
27
|
deleteBy(opts: {
|
|
28
28
|
context: import("../common").TRouteContext<RouteEnv>;
|
|
29
29
|
}): Promise<import("../common").TJsonResponse<unknown, 400> | import("../common").TJsonResponse<unknown, 200>>;
|
|
30
|
+
getBaseWhere(_opts: {
|
|
31
|
+
context: import("../common").TRouteContext<RouteEnv>;
|
|
32
|
+
}): Promise<import("../../repositories").TWhere<TDataObject> | undefined>;
|
|
30
33
|
count(opts: {
|
|
31
34
|
context: import("../common").TRouteContext<RouteEnv>;
|
|
32
35
|
}): Promise<import("../common").TJsonResponse<unknown, 200>>;
|
|
@@ -73,9 +76,13 @@ export declare class ControllerFactory extends BaseHelper {
|
|
|
73
76
|
};
|
|
74
77
|
setListHeaders(opts: {
|
|
75
78
|
context: import("../common").TRouteContext<RouteEnv>;
|
|
76
|
-
range: import("../../repositories").TDataRange;
|
|
77
79
|
count: number;
|
|
78
|
-
}
|
|
80
|
+
} & ({
|
|
81
|
+
range: import("../../repositories").TDataRange;
|
|
82
|
+
} | {
|
|
83
|
+
offset: number;
|
|
84
|
+
total: number;
|
|
85
|
+
})): void;
|
|
79
86
|
toHonoHandler<ResponseType = unknown>(opts: {
|
|
80
87
|
handler: import("../common").TRouteHandler<ResponseType, RouteEnv>;
|
|
81
88
|
}): import("hono").Handler<RouteEnv, string, import("hono").Input, (Response | Promise<Response>) | (import("@hono/zod-openapi").RouteConfigToTypedResponse<import("@hono/zod-openapi").RouteConfig> | Promise<import("@hono/zod-openapi").RouteConfigToTypedResponse<import("@hono/zod-openapi").RouteConfig>>)>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../../../../src/base/controllers/factory/controller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEpD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,UAAU,EAAY,MAAM,6BAA6B,CAAC;AAEnE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACxC,OAAO,KAAK,EACV,sBAAsB,EACtB,mBAAmB,EACnB,iBAAiB,EACjB,oBAAoB,EACrB,MAAM,WAAW,CAAC;AAInB,6EAA6E;AAC7E,qBAAa,iBAAkB,SAAQ,UAAU;;IAK/C,MAAM,CAAC,oBAAoB,CACzB,OAAO,SAAS,cAAc,CAAC,gBAAgB,CAAC,GAAG,cAAc,CAAC,gBAAgB,CAAC,EACnF,MAAM,SAAS,mBAAmB,GAAG,mBAAmB,EACxD,QAAQ,SAAS,GAAG,GAAG,GAAG,EAC1B,WAAW,SAAS,MAAM,GAAG,EAAE,EAC/B,QAAQ,SAAS,MAAM,GAAG,GAAG,EAC7B,mBAAmB,SAAS,MAAM,GAAG,EAAE,EACvC,WAAW,SAAS,MAAM,GAAG,iBAAiB,CAAC,OAAO,CAAC,EACvD,cAAc,SAAS,MAAM,GAAG,oBAAoB,CAAC,OAAO,CAAC,EAC7D,OAAO,EAAE,sBAAsB,CAAC,OAAO,EAAE,MAAM,CAAC;yBAuCtB,kBAAkB,CAAC,WAAW,EAAE,cAAc,CAAC;YAUvE,iGAAiG;uBAC7E,cAAc,CAAC,IAAI,CAAC
|
|
1
|
+
{"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../../../../src/base/controllers/factory/controller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEpD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,UAAU,EAAY,MAAM,6BAA6B,CAAC;AAEnE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACxC,OAAO,KAAK,EACV,sBAAsB,EACtB,mBAAmB,EACnB,iBAAiB,EACjB,oBAAoB,EACrB,MAAM,WAAW,CAAC;AAInB,6EAA6E;AAC7E,qBAAa,iBAAkB,SAAQ,UAAU;;IAK/C,MAAM,CAAC,oBAAoB,CACzB,OAAO,SAAS,cAAc,CAAC,gBAAgB,CAAC,GAAG,cAAc,CAAC,gBAAgB,CAAC,EACnF,MAAM,SAAS,mBAAmB,GAAG,mBAAmB,EACxD,QAAQ,SAAS,GAAG,GAAG,GAAG,EAC1B,WAAW,SAAS,MAAM,GAAG,EAAE,EAC/B,QAAQ,SAAS,MAAM,GAAG,GAAG,EAC7B,mBAAmB,SAAS,MAAM,GAAG,EAAE,EACvC,WAAW,SAAS,MAAM,GAAG,iBAAiB,CAAC,OAAO,CAAC,EACvD,cAAc,SAAS,MAAM,GAAG,oBAAoB,CAAC,OAAO,CAAC,EAC7D,OAAO,EAAE,sBAAsB,CAAC,OAAO,EAAE,MAAM,CAAC;yBAuCtB,kBAAkB,CAAC,WAAW,EAAE,cAAc,CAAC;YAUvE,iGAAiG;uBAC7E,cAAc,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAAxC,CAAH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkFF"}
|
|
@@ -1,10 +1,15 @@
|
|
|
1
1
|
import type { AbstractEntity } from '../../../models';
|
|
2
|
+
import type { TWhere } from '@venizia/ignis-filter';
|
|
2
3
|
import type { TAnyObjectSchema } from '../../../../utilities/schema.utility';
|
|
3
4
|
import type { Env, Schema } from 'hono';
|
|
4
5
|
import type { TEntityDataObject, TEntityPersistObject, TRouteContext } from '../../common';
|
|
5
6
|
import { AbstractCrudController } from './abstract';
|
|
6
7
|
/** Read tier: count / find / findById / findOne. Read-only controllers can extend this directly. */
|
|
7
8
|
export declare abstract class ReadableCrudController<TEntity extends AbstractEntity<TAnyObjectSchema> = AbstractEntity<TAnyObjectSchema>, RouteEnv extends Env = Env, RouteSchema extends Schema = {}, BasePath extends string = '/', ConfigurableOptions extends object = {}, TDataObject extends object = TEntityDataObject<TEntity>, TPersistObject extends object = TEntityPersistObject<TEntity>> extends AbstractCrudController<TEntity, RouteEnv, RouteSchema, BasePath, ConfigurableOptions, TDataObject, TPersistObject> {
|
|
9
|
+
/** Narrows EVERY read of this controller - override it to scope rows to a tenant, an owner or a status. Public because a generated controller's declaration cannot carry a protected member (TS4094). */
|
|
10
|
+
getBaseWhere(_opts: {
|
|
11
|
+
context: TRouteContext<RouteEnv>;
|
|
12
|
+
}): Promise<TWhere<TDataObject> | undefined>;
|
|
8
13
|
/** GET /count */
|
|
9
14
|
count(opts: {
|
|
10
15
|
context: TRouteContext<RouteEnv>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"readable.d.ts","sourceRoot":"","sources":["../../../../../../src/base/controllers/factory/crud/readable.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAU,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"readable.d.ts","sourceRoot":"","sources":["../../../../../../src/base/controllers/factory/crud/readable.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAU,MAAM,eAAe,CAAC;AAC5D,OAAO,KAAK,EAAW,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAEnE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACxC,OAAO,KAAK,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC3F,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAyBpD,oGAAoG;AACpG,8BAAsB,sBAAsB,CAC1C,OAAO,SAAS,cAAc,CAAC,gBAAgB,CAAC,GAAG,cAAc,CAAC,gBAAgB,CAAC,EACnF,QAAQ,SAAS,GAAG,GAAG,GAAG,EAC1B,WAAW,SAAS,MAAM,GAAG,EAAE,EAC/B,QAAQ,SAAS,MAAM,GAAG,GAAG,EAC7B,mBAAmB,SAAS,MAAM,GAAG,EAAE,EACvC,WAAW,SAAS,MAAM,GAAG,iBAAiB,CAAC,OAAO,CAAC,EACvD,cAAc,SAAS,MAAM,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAC7D,SAAQ,sBAAsB,CAC9B,OAAO,EACP,QAAQ,EACR,WAAW,EACX,QAAQ,EACR,mBAAmB,EACnB,WAAW,EACX,cAAc,CACf;IACC,yMAAyM;IACnM,YAAY,CAAC,KAAK,EAAE;QACxB,OAAO,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC;KAClC,GAAG,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,SAAS,CAAC;IAI5C,iBAAiB;IACX,KAAK,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAA;KAAE;IAetD,0DAA0D;IACpD,IAAI,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAA;KAAE;IA6BrD,eAAe;IACT,QAAQ,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAA;KAAE;IA+BzD,oBAAoB;IACd,OAAO,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAA;KAAE;CAuBzD"}
|
|
@@ -4,16 +4,37 @@ exports.ReadableCrudController = void 0;
|
|
|
4
4
|
const common_1 = require("@venizia/ignis-helpers/common");
|
|
5
5
|
const abstract_1 = require("./abstract");
|
|
6
6
|
const common_2 = require("../../common");
|
|
7
|
+
/** The one combination point of a base where and a request where; without a request side there is no `and` wrapper. */
|
|
8
|
+
const withBaseWhere = (opts) => {
|
|
9
|
+
const { baseWhere, where } = opts;
|
|
10
|
+
if (!where) {
|
|
11
|
+
return baseWhere;
|
|
12
|
+
}
|
|
13
|
+
// `Pick` resolves the one key: a literal cannot be checked against `TWhere` over an unresolved type parameter.
|
|
14
|
+
const scoped = { and: [baseWhere, where] };
|
|
15
|
+
return scoped;
|
|
16
|
+
};
|
|
17
|
+
/** `id` is the primary key every entity family reads by; built at the default `TWhere` for the same unresolved-parameter reason. */
|
|
18
|
+
const whereById = (opts) => {
|
|
19
|
+
const where = { id: opts.id };
|
|
20
|
+
return where;
|
|
21
|
+
};
|
|
7
22
|
/** Read tier: count / find / findById / findOne. Read-only controllers can extend this directly. */
|
|
8
23
|
class ReadableCrudController extends abstract_1.AbstractCrudController {
|
|
24
|
+
/** Narrows EVERY read of this controller - override it to scope rows to a tenant, an owner or a status. Public because a generated controller's declaration cannot carry a protected member (TS4094). */
|
|
25
|
+
async getBaseWhere(_opts) {
|
|
26
|
+
return undefined;
|
|
27
|
+
}
|
|
9
28
|
/** GET /count */
|
|
10
29
|
async count(opts) {
|
|
11
30
|
const { context } = opts;
|
|
12
31
|
const { where } = context.req.valid('query');
|
|
32
|
+
const baseWhere = await this.getBaseWhere({ context });
|
|
33
|
+
const scopedWhere = baseWhere ? withBaseWhere({ baseWhere, where }) : where;
|
|
13
34
|
const rs = await this.measure({
|
|
14
35
|
scope: 'count',
|
|
15
|
-
args: { where },
|
|
16
|
-
task: () => this.repository.count({ where }),
|
|
36
|
+
args: { where: scopedWhere },
|
|
37
|
+
task: () => this.repository.count({ where: scopedWhere }),
|
|
17
38
|
});
|
|
18
39
|
return context.json(rs, common_1.HTTP.ResultCodes.RS_2.Ok);
|
|
19
40
|
}
|
|
@@ -21,12 +42,16 @@ class ReadableCrudController extends abstract_1.AbstractCrudController {
|
|
|
21
42
|
async find(opts) {
|
|
22
43
|
const { context } = opts;
|
|
23
44
|
const { filter = {} } = context.req.valid('query');
|
|
45
|
+
const baseWhere = await this.getBaseWhere({ context });
|
|
46
|
+
const scopedFilter = baseWhere
|
|
47
|
+
? { ...filter, where: withBaseWhere({ baseWhere, where: filter.where }) }
|
|
48
|
+
: filter;
|
|
24
49
|
const rs = await this.measure({
|
|
25
50
|
scope: 'find',
|
|
26
|
-
args:
|
|
51
|
+
args: scopedFilter,
|
|
27
52
|
task: async () => {
|
|
28
53
|
const { data, range } = await this.repository.find({
|
|
29
|
-
filter,
|
|
54
|
+
filter: scopedFilter,
|
|
30
55
|
options: { shouldQueryRange: true },
|
|
31
56
|
});
|
|
32
57
|
return this.respond({
|
|
@@ -44,11 +69,19 @@ class ReadableCrudController extends abstract_1.AbstractCrudController {
|
|
|
44
69
|
const { context } = opts;
|
|
45
70
|
const { id } = context.req.valid('param');
|
|
46
71
|
const { filter } = context.req.valid('query');
|
|
72
|
+
const baseWhere = await this.getBaseWhere({ context });
|
|
73
|
+
// `repository.findById` takes no where, so a scoped read goes through `findOne` - the same
|
|
74
|
+
// substrate every family's findById delegates to - and answers null on an out-of-scope id.
|
|
75
|
+
const scopedWhere = baseWhere
|
|
76
|
+
? withBaseWhere({ baseWhere, where: whereById({ id }) })
|
|
77
|
+
: undefined;
|
|
47
78
|
const rs = await this.measure({
|
|
48
79
|
scope: 'findById',
|
|
49
80
|
args: filter,
|
|
50
81
|
task: async () => {
|
|
51
|
-
const record =
|
|
82
|
+
const record = scopedWhere
|
|
83
|
+
? await this.repository.findOne({ filter: { ...filter, where: scopedWhere } })
|
|
84
|
+
: await this.repository.findById({ id, filter });
|
|
52
85
|
return this.respond({
|
|
53
86
|
context,
|
|
54
87
|
format: common_2.ResponseFormats.OBJECT,
|
|
@@ -62,11 +95,15 @@ class ReadableCrudController extends abstract_1.AbstractCrudController {
|
|
|
62
95
|
async findOne(opts) {
|
|
63
96
|
const { context } = opts;
|
|
64
97
|
const { filter = {} } = context.req.valid('query');
|
|
98
|
+
const baseWhere = await this.getBaseWhere({ context });
|
|
99
|
+
const scopedFilter = baseWhere
|
|
100
|
+
? { ...filter, where: withBaseWhere({ baseWhere, where: filter.where }) }
|
|
101
|
+
: filter;
|
|
65
102
|
const rs = await this.measure({
|
|
66
103
|
scope: 'findOne',
|
|
67
|
-
args:
|
|
104
|
+
args: scopedFilter,
|
|
68
105
|
task: async () => {
|
|
69
|
-
const record = await this.repository.findOne({ filter });
|
|
106
|
+
const record = await this.repository.findOne({ filter: scopedFilter });
|
|
70
107
|
return this.respond({
|
|
71
108
|
context,
|
|
72
109
|
format: common_2.ResponseFormats.OBJECT,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"readable.js","sourceRoot":"","sources":["../../../../../../src/base/controllers/factory/crud/readable.ts"],"names":[],"mappings":";;;AAGA,0DAAqD;AAGrD,yCAAoD;AACpD,yCAA+C;AAE/C,oGAAoG;AACpG,MAAsB,sBAQpB,SAAQ,iCAQT;IACC,iBAAiB;IACjB,KAAK,CAAC,KAAK,CAAC,IAA0C;QACpD,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QACzB,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAiC,OAAO,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"readable.js","sourceRoot":"","sources":["../../../../../../src/base/controllers/factory/crud/readable.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,11 @@ import type { Env, Schema } from 'hono';
|
|
|
5
5
|
import type { TResponseFormat } from '../common/constants';
|
|
6
6
|
import type { IAuthRouteConfig, IBindRouteOptions, IDefineRouteOptions, TRouteContext, TRouteHandler } from '../common/types';
|
|
7
7
|
import { AbstractRestController } from './abstract';
|
|
8
|
+
/** `Content-Range` of a page: inclusive `end`, and `records * /<total>` (no space) when the page is empty. Exported so a route that writes the header itself uses the one formatter. */
|
|
9
|
+
export declare const toContentRange: (opts: {
|
|
10
|
+
range: TDataRange;
|
|
11
|
+
count: number;
|
|
12
|
+
}) => string;
|
|
8
13
|
/** Recommended base class for REST controllers with concrete bindRoute and defineRoute implementations. */
|
|
9
14
|
export declare abstract class BaseRestController<RouteEnv extends Env = Env, RouteSchema extends Schema = {}, BasePath extends string = '/', ConfigurableOptions extends object = {}, Definitions extends Record<string, IAuthRouteConfig> = Record<string, IAuthRouteConfig>> extends AbstractRestController<RouteEnv, RouteSchema, BasePath, ConfigurableOptions, Definitions> {
|
|
10
15
|
/** Runs a handler task under performance measurement (fixed logger/level/description). */
|
|
@@ -37,12 +42,16 @@ export declare abstract class BaseRestController<RouteEnv extends Env = Env, Rou
|
|
|
37
42
|
count: number;
|
|
38
43
|
data?: TNullable<R>;
|
|
39
44
|
};
|
|
40
|
-
/** The list headers without the body, for a list whose body is not a `{ count, data }` envelope: `Content-Range`, `X-Response-Count` = rows in THIS response, `X-Response-Format: array`. */
|
|
45
|
+
/** The list headers without the body, for a list whose body is not a `{ count, data }` envelope: `Content-Range`, `X-Response-Count` = rows in THIS response, `X-Response-Format: array`. Pass a `range`, or `offset` + `total` for an engine that reports those (a search page): the range is derived with the same inclusive-end rule. */
|
|
41
46
|
setListHeaders(opts: {
|
|
42
47
|
context: TRouteContext<RouteEnv>;
|
|
43
|
-
range: TDataRange;
|
|
44
48
|
count: number;
|
|
45
|
-
}
|
|
49
|
+
} & ({
|
|
50
|
+
range: TDataRange;
|
|
51
|
+
} | {
|
|
52
|
+
offset: number;
|
|
53
|
+
total: number;
|
|
54
|
+
})): void;
|
|
46
55
|
/** TRouteHandler's TRouteContext is a lightweight custom shape (different `json`/`req.valid` signatures) built on Hono's real Context, not a subtype of the RouteHandler `.openapi()` expects - genuinely different handler types bridged here. */
|
|
47
56
|
toHonoHandler<ResponseType = unknown>(opts: {
|
|
48
57
|
handler: TRouteHandler<ResponseType, RouteEnv>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../../../src/base/controllers/rest/base.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../../../src/base/controllers/rest/base.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +1,18 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.BaseRestController = void 0;
|
|
3
|
+
exports.BaseRestController = exports.toContentRange = void 0;
|
|
4
|
+
const types_1 = require("../../repositories/common/types");
|
|
4
5
|
const common_1 = require("@venizia/ignis-helpers/common");
|
|
5
6
|
const core_1 = require("@venizia/ignis-helpers/core");
|
|
6
7
|
const constants_1 = require("../common/constants");
|
|
7
8
|
const abstract_1 = require("./abstract");
|
|
8
|
-
/** `Content-Range` of a page: inclusive `end`, and `records * /<total>` (no space) when the page is empty. */
|
|
9
|
+
/** `Content-Range` of a page: inclusive `end`, and `records * /<total>` (no space) when the page is empty. Exported so a route that writes the header itself uses the one formatter. */
|
|
9
10
|
const toContentRange = (opts) => {
|
|
10
11
|
const { range, count } = opts;
|
|
11
12
|
const { start, end, total } = range;
|
|
12
13
|
return count > 0 ? `records ${start}-${end}/${total}` : `records */${total}`;
|
|
13
14
|
};
|
|
15
|
+
exports.toContentRange = toContentRange;
|
|
14
16
|
/** Recommended base class for REST controllers with concrete bindRoute and defineRoute implementations. */
|
|
15
17
|
class BaseRestController extends abstract_1.AbstractRestController {
|
|
16
18
|
/** Runs a handler task under performance measurement (fixed logger/level/description). */
|
|
@@ -39,15 +41,18 @@ class BaseRestController extends abstract_1.AbstractRestController {
|
|
|
39
41
|
respond(opts) {
|
|
40
42
|
const { context, format, payload, range } = opts;
|
|
41
43
|
if (range) {
|
|
42
|
-
context.header(common_1.HTTP.Headers.CONTENT_RANGE, toContentRange({ range, count: payload.count }));
|
|
44
|
+
context.header(common_1.HTTP.Headers.CONTENT_RANGE, (0, exports.toContentRange)({ range, count: payload.count }));
|
|
43
45
|
}
|
|
44
46
|
context.header(common_1.HTTP.Headers.RESPONSE_FORMAT, format);
|
|
45
47
|
return this.normalizeCountData({ context, payload });
|
|
46
48
|
}
|
|
47
|
-
/** The list headers without the body, for a list whose body is not a `{ count, data }` envelope: `Content-Range`, `X-Response-Count` = rows in THIS response, `X-Response-Format: array`. */
|
|
49
|
+
/** The list headers without the body, for a list whose body is not a `{ count, data }` envelope: `Content-Range`, `X-Response-Count` = rows in THIS response, `X-Response-Format: array`. Pass a `range`, or `offset` + `total` for an engine that reports those (a search page): the range is derived with the same inclusive-end rule. */
|
|
48
50
|
setListHeaders(opts) {
|
|
49
|
-
const { context,
|
|
50
|
-
|
|
51
|
+
const { context, count } = opts;
|
|
52
|
+
const range = 'range' in opts
|
|
53
|
+
? opts.range
|
|
54
|
+
: (0, types_1.buildDataRange)({ offset: opts.offset, dataLength: count, total: opts.total });
|
|
55
|
+
context.header(common_1.HTTP.Headers.CONTENT_RANGE, (0, exports.toContentRange)({ range, count }));
|
|
51
56
|
context.header(common_1.HTTP.Headers.RESPONSE_COUNT_DATA, count.toString());
|
|
52
57
|
context.header(common_1.HTTP.Headers.RESPONSE_FORMAT, constants_1.ResponseFormats.ARRAY);
|
|
53
58
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../../../../src/base/controllers/rest/base.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../../../../src/base/controllers/rest/base.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,10 +10,13 @@ export declare class ArtifactIndexHelper extends BaseHelper {
|
|
|
10
10
|
input: TArtifactIndexInput;
|
|
11
11
|
application: unknown;
|
|
12
12
|
}): Promise<Required<IArtifactIndex>>;
|
|
13
|
-
/** One index, or arrays nested to any depth, as a flat list in input order. */
|
|
13
|
+
/** One index, or arrays nested to any depth, as a flat list in input order; a conditional entry contributes its subtree only when its `when` answers true. */
|
|
14
14
|
flatten(opts: {
|
|
15
15
|
input: TArtifactIndexInput;
|
|
16
|
-
|
|
16
|
+
application: unknown;
|
|
17
|
+
}): Promise<IArtifactIndex[]>;
|
|
18
|
+
/** Positional on purpose: a type predicate narrows its own parameter, and an options object would narrow the wrapper instead of `input`. */
|
|
19
|
+
private isConditional;
|
|
17
20
|
/** The classes of one kind across every index, minus those whose `when` says no, sorted by `order` (stable). The `when` conditions run concurrently: each reads config and environment, never another artifact. */
|
|
18
21
|
select<Field extends keyof IArtifactIndex>(opts: {
|
|
19
22
|
indexes: IArtifactIndex[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"artifact-index.d.ts","sourceRoot":"","sources":["../../../../src/base/applications/artifact-index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"artifact-index.d.ts","sourceRoot":"","sources":["../../../../src/base/applications/artifact-index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,EAA6B,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAG/F,+NAA+N;AAC/N,qBAAa,mBAAoB,SAAQ,UAAU;IACjD,MAAM,CAAC,QAAQ,CAAC,mBAAmB,2BAA2B;IAE9D,OAAO;IAIP,MAAM,CAAC,WAAW,IAAI,mBAAmB;IAOzC,yHAAyH;IACnH,OAAO,CAAC,IAAI,EAAE;QAClB,KAAK,EAAE,mBAAmB,CAAC;QAC3B,WAAW,EAAE,OAAO,CAAC;KACtB,GAAG,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IAiCrC,8JAA8J;IACxJ,OAAO,CAAC,IAAI,EAAE;QAClB,KAAK,EAAE,mBAAmB,CAAC;QAC3B,WAAW,EAAE,OAAO,CAAC;KACtB,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAsB7B,4IAA4I;IAC5I,OAAO,CAAC,aAAa;IAMrB,mNAAmN;IAC7M,MAAM,CAAC,KAAK,SAAS,MAAM,cAAc,EAAE,IAAI,EAAE;QACrD,OAAO,EAAE,cAAc,EAAE,CAAC;QAC1B,KAAK,EAAE,KAAK,CAAC;QACb,WAAW,EAAE,OAAO,CAAC;KACtB,GAAG,OAAO,CAAC,WAAW,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;YA0B3C,UAAU;CAYzB"}
|
|
@@ -17,7 +17,7 @@ export class ArtifactIndexHelper extends BaseHelper {
|
|
|
17
17
|
/** Every kind of the input, each already filtered by `when` and sorted by `order`, keyed the way `IArtifactIndex` is. */
|
|
18
18
|
async resolve(opts) {
|
|
19
19
|
const { input, application } = opts;
|
|
20
|
-
const indexes = this.flatten({ input });
|
|
20
|
+
const indexes = await this.flatten({ input, application });
|
|
21
21
|
const dataSources = await this.select({
|
|
22
22
|
indexes,
|
|
23
23
|
field: ArtifactIndexFields.DATA_SOURCES,
|
|
@@ -45,14 +45,27 @@ export class ArtifactIndexHelper extends BaseHelper {
|
|
|
45
45
|
});
|
|
46
46
|
return { dataSources, components, repositories, services, controllers };
|
|
47
47
|
}
|
|
48
|
-
/** One index, or arrays nested to any depth, as a flat list in input order. */
|
|
49
|
-
flatten(opts) {
|
|
50
|
-
const { input } = opts;
|
|
48
|
+
/** One index, or arrays nested to any depth, as a flat list in input order; a conditional entry contributes its subtree only when its `when` answers true. */
|
|
49
|
+
async flatten(opts) {
|
|
50
|
+
const { input, application } = opts;
|
|
51
51
|
if (Array.isArray(input)) {
|
|
52
|
-
|
|
52
|
+
const nested = await Promise.all(input.map(entry => this.flatten({ input: entry, application })));
|
|
53
|
+
return nested.flat();
|
|
54
|
+
}
|
|
55
|
+
if (this.isConditional(input)) {
|
|
56
|
+
const isSelected = await input.when({ application });
|
|
57
|
+
if (!isSelected) {
|
|
58
|
+
this.logger.debug('Skipped by condition | conditional index entry');
|
|
59
|
+
return [];
|
|
60
|
+
}
|
|
61
|
+
return this.flatten({ input: input.index, application });
|
|
53
62
|
}
|
|
54
63
|
return [input];
|
|
55
64
|
}
|
|
65
|
+
/** Positional on purpose: a type predicate narrows its own parameter, and an options object would narrow the wrapper instead of `input`. */
|
|
66
|
+
isConditional(entry) {
|
|
67
|
+
return 'when' in entry && 'index' in entry;
|
|
68
|
+
}
|
|
56
69
|
/** The classes of one kind across every index, minus those whose `when` says no, sorted by `order` (stable). The `when` conditions run concurrently: each reads config and environment, never another artifact. */
|
|
57
70
|
async select(opts) {
|
|
58
71
|
const { indexes, field, application } = opts;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"artifact-index.js","sourceRoot":"","sources":["../../../../src/base/applications/artifact-index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAE3D,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAEzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAE/C,+NAA+N;AAC/N,MAAM,OAAO,mBAAoB,SAAQ,UAAU;aACjC,wBAAmB,GAAG,uBAAuB,CAAC;IAE9D;QACE,KAAK,CAAC,EAAE,KAAK,EAAE,mBAAmB,CAAC,IAAI,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,CAAC,WAAW;QAChB,OAAO,cAAc,CAAC,OAAO,CAAC;YAC5B,GAAG,EAAE,mBAAmB,CAAC,mBAAmB;YAC5C,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,mBAAmB,EAAE;SACxC,CAAC,CAAC;IACL,CAAC;IAED,yHAAyH;IACzH,KAAK,CAAC,OAAO,CAAC,IAGb;QACC,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;QACpC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"artifact-index.js","sourceRoot":"","sources":["../../../../src/base/applications/artifact-index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { TArtifactCondition } from '../../../../helpers/inversion/common/types/index.js';
|
|
1
2
|
import type { TClass } from '@venizia/ignis-helpers/common';
|
|
2
3
|
import type { BaseComponent } from '../../../components/index.js';
|
|
3
4
|
import type { IDataSource } from '../../../datasources/index.js';
|
|
@@ -11,6 +12,11 @@ export interface IArtifactIndex {
|
|
|
11
12
|
services?: ReadonlyArray<TClass<IService>>;
|
|
12
13
|
controllers?: ReadonlyArray<TClass<unknown>>;
|
|
13
14
|
}
|
|
14
|
-
/**
|
|
15
|
-
export
|
|
15
|
+
/** An index (or nested indexes) registered only when `when` answers true - the run-mode gate: a worker keeps its controllers out of the container instead of mounting routes no security step guards. Extends the never-typed kind fields so code that destructures kinds from a non-array input still compiles against the union. */
|
|
16
|
+
export interface IConditionalArtifactIndex extends Partial<Record<keyof IArtifactIndex, never>> {
|
|
17
|
+
when: TArtifactCondition;
|
|
18
|
+
index: TArtifactIndexInput;
|
|
19
|
+
}
|
|
20
|
+
/** One index, a conditional entry, or any nesting of arrays of them - a library exports one, an application composes several. */
|
|
21
|
+
export type TArtifactIndexInput = IArtifactIndex | IConditionalArtifactIndex | TArtifactIndexInput[];
|
|
16
22
|
//# sourceMappingURL=artifacts.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"artifacts.d.ts","sourceRoot":"","sources":["../../../../../../src/base/applications/common/types/artifacts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAElD,sIAAsI;AACtI,MAAM,WAAW,cAAc;IAC7B,WAAW,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;IACjD,UAAU,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC;IAClD,YAAY,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;IAClD,QAAQ,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC3C,WAAW,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;CAC9C;AAED
|
|
1
|
+
{"version":3,"file":"artifacts.d.ts","sourceRoot":"","sources":["../../../../../../src/base/applications/common/types/artifacts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAElD,sIAAsI;AACtI,MAAM,WAAW,cAAc;IAC7B,WAAW,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;IACjD,UAAU,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC;IAClD,YAAY,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;IAClD,QAAQ,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC3C,WAAW,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;CAC9C;AAED,sUAAsU;AACtU,MAAM,WAAW,yBAA0B,SAAQ,OAAO,CAAC,MAAM,CAAC,MAAM,cAAc,EAAE,KAAK,CAAC,CAAC;IAC7F,IAAI,EAAE,kBAAkB,CAAC;IACzB,KAAK,EAAE,mBAAmB,CAAC;CAC5B;AAED,iIAAiI;AACjI,MAAM,MAAM,mBAAmB,GAC7B,cAAc,GAAG,yBAAyB,GAAG,mBAAmB,EAAE,CAAC"}
|
|
@@ -27,6 +27,9 @@ export declare class ControllerFactory extends BaseHelper {
|
|
|
27
27
|
deleteBy(opts: {
|
|
28
28
|
context: import("../index.js").TRouteContext<RouteEnv>;
|
|
29
29
|
}): Promise<import("../index.js").TJsonResponse<unknown, 400> | import("../index.js").TJsonResponse<unknown, 200>>;
|
|
30
|
+
getBaseWhere(_opts: {
|
|
31
|
+
context: import("../index.js").TRouteContext<RouteEnv>;
|
|
32
|
+
}): Promise<import("@venizia/ignis-filter").TWhere<TDataObject> | undefined>;
|
|
30
33
|
count(opts: {
|
|
31
34
|
context: import("../index.js").TRouteContext<RouteEnv>;
|
|
32
35
|
}): Promise<import("../index.js").TJsonResponse<unknown, 200>>;
|
|
@@ -73,9 +76,13 @@ export declare class ControllerFactory extends BaseHelper {
|
|
|
73
76
|
};
|
|
74
77
|
setListHeaders(opts: {
|
|
75
78
|
context: import("../index.js").TRouteContext<RouteEnv>;
|
|
76
|
-
range: import("../../repositories/index.js").TDataRange;
|
|
77
79
|
count: number;
|
|
78
|
-
}
|
|
80
|
+
} & ({
|
|
81
|
+
range: import("../../repositories/index.js").TDataRange;
|
|
82
|
+
} | {
|
|
83
|
+
offset: number;
|
|
84
|
+
total: number;
|
|
85
|
+
})): void;
|
|
79
86
|
toHonoHandler<ResponseType = unknown>(opts: {
|
|
80
87
|
handler: import("../index.js").TRouteHandler<ResponseType, RouteEnv>;
|
|
81
88
|
}): import("hono").Handler<RouteEnv, string, import("hono").Input, (Response | Promise<Response>) | (import("@hono/zod-openapi").RouteConfigToTypedResponse<import("@hono/zod-openapi").RouteConfig> | Promise<import("@hono/zod-openapi").RouteConfigToTypedResponse<import("@hono/zod-openapi").RouteConfig>>)>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../../../../src/base/controllers/factory/controller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEpD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,UAAU,EAAY,MAAM,6BAA6B,CAAC;AAEnE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACxC,OAAO,KAAK,EACV,sBAAsB,EACtB,mBAAmB,EACnB,iBAAiB,EACjB,oBAAoB,EACrB,MAAM,WAAW,CAAC;AAInB,6EAA6E;AAC7E,qBAAa,iBAAkB,SAAQ,UAAU;;IAK/C,MAAM,CAAC,oBAAoB,CACzB,OAAO,SAAS,cAAc,CAAC,gBAAgB,CAAC,GAAG,cAAc,CAAC,gBAAgB,CAAC,EACnF,MAAM,SAAS,mBAAmB,GAAG,mBAAmB,EACxD,QAAQ,SAAS,GAAG,GAAG,GAAG,EAC1B,WAAW,SAAS,MAAM,GAAG,EAAE,EAC/B,QAAQ,SAAS,MAAM,GAAG,GAAG,EAC7B,mBAAmB,SAAS,MAAM,GAAG,EAAE,EACvC,WAAW,SAAS,MAAM,GAAG,iBAAiB,CAAC,OAAO,CAAC,EACvD,cAAc,SAAS,MAAM,GAAG,oBAAoB,CAAC,OAAO,CAAC,EAC7D,OAAO,EAAE,sBAAsB,CAAC,OAAO,EAAE,MAAM,CAAC;yBAuCtB,kBAAkB,CAAC,WAAW,EAAE,cAAc,CAAC;YAUvE,iGAAiG;uBAC7E,cAAc,CAAC,IAAI,CAAC
|
|
1
|
+
{"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../../../../src/base/controllers/factory/controller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEpD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,UAAU,EAAY,MAAM,6BAA6B,CAAC;AAEnE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACxC,OAAO,KAAK,EACV,sBAAsB,EACtB,mBAAmB,EACnB,iBAAiB,EACjB,oBAAoB,EACrB,MAAM,WAAW,CAAC;AAInB,6EAA6E;AAC7E,qBAAa,iBAAkB,SAAQ,UAAU;;IAK/C,MAAM,CAAC,oBAAoB,CACzB,OAAO,SAAS,cAAc,CAAC,gBAAgB,CAAC,GAAG,cAAc,CAAC,gBAAgB,CAAC,EACnF,MAAM,SAAS,mBAAmB,GAAG,mBAAmB,EACxD,QAAQ,SAAS,GAAG,GAAG,GAAG,EAC1B,WAAW,SAAS,MAAM,GAAG,EAAE,EAC/B,QAAQ,SAAS,MAAM,GAAG,GAAG,EAC7B,mBAAmB,SAAS,MAAM,GAAG,EAAE,EACvC,WAAW,SAAS,MAAM,GAAG,iBAAiB,CAAC,OAAO,CAAC,EACvD,cAAc,SAAS,MAAM,GAAG,oBAAoB,CAAC,OAAO,CAAC,EAC7D,OAAO,EAAE,sBAAsB,CAAC,OAAO,EAAE,MAAM,CAAC;yBAuCtB,kBAAkB,CAAC,WAAW,EAAE,cAAc,CAAC;YAUvE,iGAAiG;uBAC7E,cAAc,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAAxC,CAAH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkFF"}
|
|
@@ -1,10 +1,15 @@
|
|
|
1
1
|
import type { AbstractEntity } from '../../../models/index.js';
|
|
2
|
+
import type { TWhere } from '@venizia/ignis-filter';
|
|
2
3
|
import type { TAnyObjectSchema } from '../../../../utilities/schema.utility.js';
|
|
3
4
|
import type { Env, Schema } from 'hono';
|
|
4
5
|
import type { TEntityDataObject, TEntityPersistObject, TRouteContext } from '../../common/index.js';
|
|
5
6
|
import { AbstractCrudController } from './abstract.js';
|
|
6
7
|
/** Read tier: count / find / findById / findOne. Read-only controllers can extend this directly. */
|
|
7
8
|
export declare abstract class ReadableCrudController<TEntity extends AbstractEntity<TAnyObjectSchema> = AbstractEntity<TAnyObjectSchema>, RouteEnv extends Env = Env, RouteSchema extends Schema = {}, BasePath extends string = '/', ConfigurableOptions extends object = {}, TDataObject extends object = TEntityDataObject<TEntity>, TPersistObject extends object = TEntityPersistObject<TEntity>> extends AbstractCrudController<TEntity, RouteEnv, RouteSchema, BasePath, ConfigurableOptions, TDataObject, TPersistObject> {
|
|
9
|
+
/** Narrows EVERY read of this controller - override it to scope rows to a tenant, an owner or a status. Public because a generated controller's declaration cannot carry a protected member (TS4094). */
|
|
10
|
+
getBaseWhere(_opts: {
|
|
11
|
+
context: TRouteContext<RouteEnv>;
|
|
12
|
+
}): Promise<TWhere<TDataObject> | undefined>;
|
|
8
13
|
/** GET /count */
|
|
9
14
|
count(opts: {
|
|
10
15
|
context: TRouteContext<RouteEnv>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"readable.d.ts","sourceRoot":"","sources":["../../../../../../src/base/controllers/factory/crud/readable.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAU,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"readable.d.ts","sourceRoot":"","sources":["../../../../../../src/base/controllers/factory/crud/readable.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAU,MAAM,eAAe,CAAC;AAC5D,OAAO,KAAK,EAAW,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAEnE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACxC,OAAO,KAAK,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC3F,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAyBpD,oGAAoG;AACpG,8BAAsB,sBAAsB,CAC1C,OAAO,SAAS,cAAc,CAAC,gBAAgB,CAAC,GAAG,cAAc,CAAC,gBAAgB,CAAC,EACnF,QAAQ,SAAS,GAAG,GAAG,GAAG,EAC1B,WAAW,SAAS,MAAM,GAAG,EAAE,EAC/B,QAAQ,SAAS,MAAM,GAAG,GAAG,EAC7B,mBAAmB,SAAS,MAAM,GAAG,EAAE,EACvC,WAAW,SAAS,MAAM,GAAG,iBAAiB,CAAC,OAAO,CAAC,EACvD,cAAc,SAAS,MAAM,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAC7D,SAAQ,sBAAsB,CAC9B,OAAO,EACP,QAAQ,EACR,WAAW,EACX,QAAQ,EACR,mBAAmB,EACnB,WAAW,EACX,cAAc,CACf;IACC,yMAAyM;IACnM,YAAY,CAAC,KAAK,EAAE;QACxB,OAAO,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC;KAClC,GAAG,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,SAAS,CAAC;IAI5C,iBAAiB;IACX,KAAK,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAA;KAAE;IAetD,0DAA0D;IACpD,IAAI,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAA;KAAE;IA6BrD,eAAe;IACT,QAAQ,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAA;KAAE;IA+BzD,oBAAoB;IACd,OAAO,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAA;KAAE;CAuBzD"}
|
|
@@ -1,16 +1,37 @@
|
|
|
1
1
|
import { HTTP } from '@venizia/ignis-helpers/common';
|
|
2
2
|
import { AbstractCrudController } from './abstract.js';
|
|
3
3
|
import { ResponseFormats } from '../../common/index.js';
|
|
4
|
+
/** The one combination point of a base where and a request where; without a request side there is no `and` wrapper. */
|
|
5
|
+
const withBaseWhere = (opts) => {
|
|
6
|
+
const { baseWhere, where } = opts;
|
|
7
|
+
if (!where) {
|
|
8
|
+
return baseWhere;
|
|
9
|
+
}
|
|
10
|
+
// `Pick` resolves the one key: a literal cannot be checked against `TWhere` over an unresolved type parameter.
|
|
11
|
+
const scoped = { and: [baseWhere, where] };
|
|
12
|
+
return scoped;
|
|
13
|
+
};
|
|
14
|
+
/** `id` is the primary key every entity family reads by; built at the default `TWhere` for the same unresolved-parameter reason. */
|
|
15
|
+
const whereById = (opts) => {
|
|
16
|
+
const where = { id: opts.id };
|
|
17
|
+
return where;
|
|
18
|
+
};
|
|
4
19
|
/** Read tier: count / find / findById / findOne. Read-only controllers can extend this directly. */
|
|
5
20
|
export class ReadableCrudController extends AbstractCrudController {
|
|
21
|
+
/** Narrows EVERY read of this controller - override it to scope rows to a tenant, an owner or a status. Public because a generated controller's declaration cannot carry a protected member (TS4094). */
|
|
22
|
+
async getBaseWhere(_opts) {
|
|
23
|
+
return undefined;
|
|
24
|
+
}
|
|
6
25
|
/** GET /count */
|
|
7
26
|
async count(opts) {
|
|
8
27
|
const { context } = opts;
|
|
9
28
|
const { where } = context.req.valid('query');
|
|
29
|
+
const baseWhere = await this.getBaseWhere({ context });
|
|
30
|
+
const scopedWhere = baseWhere ? withBaseWhere({ baseWhere, where }) : where;
|
|
10
31
|
const rs = await this.measure({
|
|
11
32
|
scope: 'count',
|
|
12
|
-
args: { where },
|
|
13
|
-
task: () => this.repository.count({ where }),
|
|
33
|
+
args: { where: scopedWhere },
|
|
34
|
+
task: () => this.repository.count({ where: scopedWhere }),
|
|
14
35
|
});
|
|
15
36
|
return context.json(rs, HTTP.ResultCodes.RS_2.Ok);
|
|
16
37
|
}
|
|
@@ -18,12 +39,16 @@ export class ReadableCrudController extends AbstractCrudController {
|
|
|
18
39
|
async find(opts) {
|
|
19
40
|
const { context } = opts;
|
|
20
41
|
const { filter = {} } = context.req.valid('query');
|
|
42
|
+
const baseWhere = await this.getBaseWhere({ context });
|
|
43
|
+
const scopedFilter = baseWhere
|
|
44
|
+
? { ...filter, where: withBaseWhere({ baseWhere, where: filter.where }) }
|
|
45
|
+
: filter;
|
|
21
46
|
const rs = await this.measure({
|
|
22
47
|
scope: 'find',
|
|
23
|
-
args:
|
|
48
|
+
args: scopedFilter,
|
|
24
49
|
task: async () => {
|
|
25
50
|
const { data, range } = await this.repository.find({
|
|
26
|
-
filter,
|
|
51
|
+
filter: scopedFilter,
|
|
27
52
|
options: { shouldQueryRange: true },
|
|
28
53
|
});
|
|
29
54
|
return this.respond({
|
|
@@ -41,11 +66,19 @@ export class ReadableCrudController extends AbstractCrudController {
|
|
|
41
66
|
const { context } = opts;
|
|
42
67
|
const { id } = context.req.valid('param');
|
|
43
68
|
const { filter } = context.req.valid('query');
|
|
69
|
+
const baseWhere = await this.getBaseWhere({ context });
|
|
70
|
+
// `repository.findById` takes no where, so a scoped read goes through `findOne` - the same
|
|
71
|
+
// substrate every family's findById delegates to - and answers null on an out-of-scope id.
|
|
72
|
+
const scopedWhere = baseWhere
|
|
73
|
+
? withBaseWhere({ baseWhere, where: whereById({ id }) })
|
|
74
|
+
: undefined;
|
|
44
75
|
const rs = await this.measure({
|
|
45
76
|
scope: 'findById',
|
|
46
77
|
args: filter,
|
|
47
78
|
task: async () => {
|
|
48
|
-
const record =
|
|
79
|
+
const record = scopedWhere
|
|
80
|
+
? await this.repository.findOne({ filter: { ...filter, where: scopedWhere } })
|
|
81
|
+
: await this.repository.findById({ id, filter });
|
|
49
82
|
return this.respond({
|
|
50
83
|
context,
|
|
51
84
|
format: ResponseFormats.OBJECT,
|
|
@@ -59,11 +92,15 @@ export class ReadableCrudController extends AbstractCrudController {
|
|
|
59
92
|
async findOne(opts) {
|
|
60
93
|
const { context } = opts;
|
|
61
94
|
const { filter = {} } = context.req.valid('query');
|
|
95
|
+
const baseWhere = await this.getBaseWhere({ context });
|
|
96
|
+
const scopedFilter = baseWhere
|
|
97
|
+
? { ...filter, where: withBaseWhere({ baseWhere, where: filter.where }) }
|
|
98
|
+
: filter;
|
|
62
99
|
const rs = await this.measure({
|
|
63
100
|
scope: 'findOne',
|
|
64
|
-
args:
|
|
101
|
+
args: scopedFilter,
|
|
65
102
|
task: async () => {
|
|
66
|
-
const record = await this.repository.findOne({ filter });
|
|
103
|
+
const record = await this.repository.findOne({ filter: scopedFilter });
|
|
67
104
|
return this.respond({
|
|
68
105
|
context,
|
|
69
106
|
format: ResponseFormats.OBJECT,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"readable.js","sourceRoot":"","sources":["../../../../../../src/base/controllers/factory/crud/readable.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,IAAI,EAAE,MAAM,+BAA+B,CAAC;AAGrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,oGAAoG;AACpG,MAAM,OAAgB,sBAQpB,SAAQ,sBAQT;IACC,iBAAiB;IACjB,KAAK,CAAC,KAAK,CAAC,IAA0C;QACpD,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QACzB,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAiC,OAAO,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"readable.js","sourceRoot":"","sources":["../../../../../../src/base/controllers/factory/crud/readable.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,11 @@ import type { Env, Schema } from 'hono';
|
|
|
5
5
|
import type { TResponseFormat } from '../common/constants.js';
|
|
6
6
|
import type { IAuthRouteConfig, IBindRouteOptions, IDefineRouteOptions, TRouteContext, TRouteHandler } from '../common/types/index.js';
|
|
7
7
|
import { AbstractRestController } from './abstract.js';
|
|
8
|
+
/** `Content-Range` of a page: inclusive `end`, and `records * /<total>` (no space) when the page is empty. Exported so a route that writes the header itself uses the one formatter. */
|
|
9
|
+
export declare const toContentRange: (opts: {
|
|
10
|
+
range: TDataRange;
|
|
11
|
+
count: number;
|
|
12
|
+
}) => string;
|
|
8
13
|
/** Recommended base class for REST controllers with concrete bindRoute and defineRoute implementations. */
|
|
9
14
|
export declare abstract class BaseRestController<RouteEnv extends Env = Env, RouteSchema extends Schema = {}, BasePath extends string = '/', ConfigurableOptions extends object = {}, Definitions extends Record<string, IAuthRouteConfig> = Record<string, IAuthRouteConfig>> extends AbstractRestController<RouteEnv, RouteSchema, BasePath, ConfigurableOptions, Definitions> {
|
|
10
15
|
/** Runs a handler task under performance measurement (fixed logger/level/description). */
|
|
@@ -37,12 +42,16 @@ export declare abstract class BaseRestController<RouteEnv extends Env = Env, Rou
|
|
|
37
42
|
count: number;
|
|
38
43
|
data?: TNullable<R>;
|
|
39
44
|
};
|
|
40
|
-
/** The list headers without the body, for a list whose body is not a `{ count, data }` envelope: `Content-Range`, `X-Response-Count` = rows in THIS response, `X-Response-Format: array`. */
|
|
45
|
+
/** The list headers without the body, for a list whose body is not a `{ count, data }` envelope: `Content-Range`, `X-Response-Count` = rows in THIS response, `X-Response-Format: array`. Pass a `range`, or `offset` + `total` for an engine that reports those (a search page): the range is derived with the same inclusive-end rule. */
|
|
41
46
|
setListHeaders(opts: {
|
|
42
47
|
context: TRouteContext<RouteEnv>;
|
|
43
|
-
range: TDataRange;
|
|
44
48
|
count: number;
|
|
45
|
-
}
|
|
49
|
+
} & ({
|
|
50
|
+
range: TDataRange;
|
|
51
|
+
} | {
|
|
52
|
+
offset: number;
|
|
53
|
+
total: number;
|
|
54
|
+
})): void;
|
|
46
55
|
/** TRouteHandler's TRouteContext is a lightweight custom shape (different `json`/`req.valid` signatures) built on Hono's real Context, not a subtype of the RouteHandler `.openapi()` expects - genuinely different handler types bridged here. */
|
|
47
56
|
toHonoHandler<ResponseType = unknown>(opts: {
|
|
48
57
|
handler: TRouteHandler<ResponseType, RouteEnv>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../../../src/base/controllers/rest/base.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../../../src/base/controllers/rest/base.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
+
import { buildDataRange } from '../../repositories/common/types/index.js';
|
|
1
2
|
import { HTTP } from '@venizia/ignis-helpers/common';
|
|
2
3
|
import { executeWithPerformanceMeasure, toBoolean } from '@venizia/ignis-helpers/core';
|
|
3
4
|
import { ResponseFormats } from '../common/constants.js';
|
|
4
5
|
import { AbstractRestController } from './abstract.js';
|
|
5
|
-
/** `Content-Range` of a page: inclusive `end`, and `records * /<total>` (no space) when the page is empty. */
|
|
6
|
-
const toContentRange = (opts) => {
|
|
6
|
+
/** `Content-Range` of a page: inclusive `end`, and `records * /<total>` (no space) when the page is empty. Exported so a route that writes the header itself uses the one formatter. */
|
|
7
|
+
export const toContentRange = (opts) => {
|
|
7
8
|
const { range, count } = opts;
|
|
8
9
|
const { start, end, total } = range;
|
|
9
10
|
return count > 0 ? `records ${start}-${end}/${total}` : `records */${total}`;
|
|
@@ -41,9 +42,12 @@ export class BaseRestController extends AbstractRestController {
|
|
|
41
42
|
context.header(HTTP.Headers.RESPONSE_FORMAT, format);
|
|
42
43
|
return this.normalizeCountData({ context, payload });
|
|
43
44
|
}
|
|
44
|
-
/** The list headers without the body, for a list whose body is not a `{ count, data }` envelope: `Content-Range`, `X-Response-Count` = rows in THIS response, `X-Response-Format: array`. */
|
|
45
|
+
/** The list headers without the body, for a list whose body is not a `{ count, data }` envelope: `Content-Range`, `X-Response-Count` = rows in THIS response, `X-Response-Format: array`. Pass a `range`, or `offset` + `total` for an engine that reports those (a search page): the range is derived with the same inclusive-end rule. */
|
|
45
46
|
setListHeaders(opts) {
|
|
46
|
-
const { context,
|
|
47
|
+
const { context, count } = opts;
|
|
48
|
+
const range = 'range' in opts
|
|
49
|
+
? opts.range
|
|
50
|
+
: buildDataRange({ offset: opts.offset, dataLength: count, total: opts.total });
|
|
47
51
|
context.header(HTTP.Headers.CONTENT_RANGE, toContentRange({ range, count }));
|
|
48
52
|
context.header(HTTP.Headers.RESPONSE_COUNT_DATA, count.toString());
|
|
49
53
|
context.header(HTTP.Headers.RESPONSE_FORMAT, ResponseFormats.ARRAY);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../../../../src/base/controllers/rest/base.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../../../../src/base/controllers/rest/base.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@venizia/ignis-kernel",
|
|
3
|
-
"version": "0.2.0-
|
|
3
|
+
"version": "0.2.0-22",
|
|
4
4
|
"description": "Browser-pure kernel of the IGNIS framework: dependency injection, lifecycle, REST controllers, repository and datasource abstractions, and the authentication and authorization seams. No node builtin and no server-only peer, so the same kernel serves a Bun server and a browser Worker.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"authentication",
|
|
@@ -80,7 +80,7 @@
|
|
|
80
80
|
},
|
|
81
81
|
"dependencies": {
|
|
82
82
|
"@venizia/ignis-filter": "^0.2.0-7",
|
|
83
|
-
"@venizia/ignis-helpers": "^0.2.0-
|
|
83
|
+
"@venizia/ignis-helpers": "^0.2.0-16",
|
|
84
84
|
"@venizia/ignis-inversion": "^0.2.0-5",
|
|
85
85
|
"lodash": "^4.18.1",
|
|
86
86
|
"reflect-metadata": "^0.2.2",
|