@venizia/ignis-boot 0.0.6-1 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/base/base-artifact-booter.d.ts.map +1 -1
- package/dist/cjs/base/base-artifact-booter.js +6 -2
- package/dist/cjs/base/base-artifact-booter.js.map +1 -1
- package/dist/cjs/boot.mixin.d.ts +10 -9
- package/dist/cjs/boot.mixin.d.ts.map +1 -1
- package/dist/cjs/boot.mixin.js +13 -7
- package/dist/cjs/boot.mixin.js.map +1 -1
- package/dist/cjs/bootstrapper.d.ts.map +1 -1
- package/dist/cjs/bootstrapper.js +35 -8
- package/dist/cjs/bootstrapper.js.map +1 -1
- package/dist/cjs/common/types.d.ts +8 -0
- package/dist/cjs/common/types.d.ts.map +1 -1
- package/dist/cjs/utilities/boot.utility.d.ts +1 -6
- package/dist/cjs/utilities/boot.utility.d.ts.map +1 -1
- package/dist/cjs/utilities/boot.utility.js +8 -10
- package/dist/cjs/utilities/boot.utility.js.map +1 -1
- package/dist/esm/base/base-artifact-booter.d.ts.map +1 -1
- package/dist/esm/base/base-artifact-booter.js +6 -2
- package/dist/esm/base/base-artifact-booter.js.map +1 -1
- package/dist/esm/boot.mixin.d.ts +10 -9
- package/dist/esm/boot.mixin.d.ts.map +1 -1
- package/dist/esm/boot.mixin.js +8 -2
- package/dist/esm/boot.mixin.js.map +1 -1
- package/dist/esm/bootstrapper.d.ts.map +1 -1
- package/dist/esm/bootstrapper.js +35 -8
- package/dist/esm/bootstrapper.js.map +1 -1
- package/dist/esm/common/types.d.ts +8 -0
- package/dist/esm/common/types.d.ts.map +1 -1
- package/dist/esm/utilities/boot.utility.d.ts +1 -6
- package/dist/esm/utilities/boot.utility.d.ts.map +1 -1
- package/dist/esm/utilities/boot.utility.js +7 -8
- package/dist/esm/utilities/boot.utility.js.map +1 -1
- package/package.json +7 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-artifact-booter.d.ts","sourceRoot":"","sources":["../../../src/base/base-artifact-booter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAE3E,OAAO,EAAE,UAAU,EAAY,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAElD,8BAAsB,kBAAmB,SAAQ,UAAW,YAAW,OAAO;IAC5E,SAAS,CAAC,IAAI,EAAE,MAAM,CAAM;IAC5B,SAAS,CAAC,eAAe,EAAE,gBAAgB,CAAM;IACjD,SAAS,CAAC,eAAe,EAAE,MAAM,EAAE,CAAM;IACzC,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAM;IAE5C,SAAS,CAAC,QAAQ,CAAC,cAAc,IAAI,MAAM,EAAE;IAC7C,SAAS,CAAC,QAAQ,CAAC,oBAAoB,IAAI,MAAM,EAAE;IACnD,SAAS,CAAC,QAAQ,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;gBAE5B,IAAI,EAAE,cAAc;IAOhC,SAAS,CAAC,UAAU,IAAI,MAAM;IA+BxB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"base-artifact-booter.d.ts","sourceRoot":"","sources":["../../../src/base/base-artifact-booter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAE3E,OAAO,EAAE,UAAU,EAAY,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAElD,8BAAsB,kBAAmB,SAAQ,UAAW,YAAW,OAAO;IAC5E,SAAS,CAAC,IAAI,EAAE,MAAM,CAAM;IAC5B,SAAS,CAAC,eAAe,EAAE,gBAAgB,CAAM;IACjD,SAAS,CAAC,eAAe,EAAE,MAAM,EAAE,CAAM;IACzC,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAM;IAE5C,SAAS,CAAC,QAAQ,CAAC,cAAc,IAAI,MAAM,EAAE;IAC7C,SAAS,CAAC,QAAQ,CAAC,oBAAoB,IAAI,MAAM,EAAE;IACnD,SAAS,CAAC,QAAQ,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;gBAE5B,IAAI,EAAE,cAAc;IAOhC,SAAS,CAAC,UAAU,IAAI,MAAM;IA+BxB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAc1B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAsBzB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAiB5B"}
|
|
@@ -40,12 +40,14 @@ class BaseArtifactBooter extends ignis_helpers_1.BaseHelper {
|
|
|
40
40
|
}
|
|
41
41
|
}
|
|
42
42
|
async configure() {
|
|
43
|
+
// No trailing `...this.artifactOptions` spread: a key that EXISTS but holds undefined - the
|
|
44
|
+
// shape `dirs: process.env.APP_DIRS?.split(',')` produces - would overwrite the default that
|
|
45
|
+
// was just computed, and getPattern() would throw "No directories specified".
|
|
43
46
|
this.artifactOptions = {
|
|
44
47
|
dirs: this.artifactOptions?.dirs ?? this.getDefaultDirs(),
|
|
45
48
|
extensions: this.artifactOptions?.extensions ?? this.getDefaultExtensions(),
|
|
46
49
|
isNested: this.artifactOptions?.isNested ?? true,
|
|
47
50
|
glob: this.artifactOptions?.glob,
|
|
48
|
-
...this.artifactOptions,
|
|
49
51
|
};
|
|
50
52
|
this.logger.for(this.configure.name).debug(`Configured: %j`, this.artifactOptions);
|
|
51
53
|
}
|
|
@@ -61,6 +63,7 @@ class BaseArtifactBooter extends ignis_helpers_1.BaseHelper {
|
|
|
61
63
|
catch (error) {
|
|
62
64
|
throw (0, ignis_helpers_1.getError)({
|
|
63
65
|
message: `[discover] Failed to discover files using pattern: ${pattern} | Error: ${error?.message}`,
|
|
66
|
+
cause: error,
|
|
64
67
|
});
|
|
65
68
|
}
|
|
66
69
|
}
|
|
@@ -71,12 +74,13 @@ class BaseArtifactBooter extends ignis_helpers_1.BaseHelper {
|
|
|
71
74
|
}
|
|
72
75
|
try {
|
|
73
76
|
this.loadedClasses = [];
|
|
74
|
-
this.loadedClasses = await (0, utilities_1.loadClasses)({ files: this.discoveredFiles
|
|
77
|
+
this.loadedClasses = await (0, utilities_1.loadClasses)({ files: this.discoveredFiles });
|
|
75
78
|
await this.bind();
|
|
76
79
|
}
|
|
77
80
|
catch (error) {
|
|
78
81
|
throw (0, ignis_helpers_1.getError)({
|
|
79
82
|
message: `[load] Failed to load classes from discovered files | Error: ${error?.message}`,
|
|
83
|
+
cause: error,
|
|
80
84
|
});
|
|
81
85
|
}
|
|
82
86
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-artifact-booter.js","sourceRoot":"","sources":["../../../src/base/base-artifact-booter.ts"],"names":[],"mappings":";;;AACA,2CAAyD;AACzD,0DAA8D;AAG9D,MAAsB,kBAAmB,SAAQ,0BAAU;IAUzD,YAAY,IAAoB;QAC9B,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QAVrB,SAAI,GAAW,EAAE,CAAC;QAClB,oBAAe,GAAqB,EAAE,CAAC;QACvC,oBAAe,GAAa,EAAE,CAAC;QAC/B,kBAAa,GAAkB,EAAE,CAAC;QAS1C,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;QAC5C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IACxB,CAAC;IAES,UAAU;QAClB,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;QACnC,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;YACvC,MAAM,IAAA,wBAAQ,EAAC;gBACb,OAAO,EAAE,8DAA8D;aACxE,CAAC,CAAC;QACL,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC;YAC7C,MAAM,IAAA,wBAAQ,EAAC;gBACb,OAAO,EAAE,IAAI,IAAI,CAAC,KAAK,mEAAmE;aAC3F,CAAC,CAAC;QACL,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACjD,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU;aACzC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aAC9C,IAAI,CAAC,GAAG,CAAC,CAAC;QAEb,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,8CAA8C;QAE/G,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvF,OAAO,IAAI,IAAI,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC;QACzC,CAAC;aAAM,CAAC;YACN,OAAO,GAAG,IAAI,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;QACrC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,SAAS;QACb,IAAI,CAAC,eAAe,GAAG;YACrB,IAAI,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,IAAI,IAAI,CAAC,cAAc,EAAE;YACzD,UAAU,EAAE,IAAI,CAAC,eAAe,EAAE,UAAU,IAAI,IAAI,CAAC,oBAAoB,EAAE;YAC3E,QAAQ,EAAE,IAAI,CAAC,eAAe,EAAE,QAAQ,IAAI,IAAI;YAChD,IAAI,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI;
|
|
1
|
+
{"version":3,"file":"base-artifact-booter.js","sourceRoot":"","sources":["../../../src/base/base-artifact-booter.ts"],"names":[],"mappings":"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"}
|
package/dist/cjs/boot.mixin.d.ts
CHANGED
|
@@ -1,39 +1,41 @@
|
|
|
1
|
-
import { IBootOptions, IBootReport } from '
|
|
1
|
+
import { IBootOptions, IBootReport } from './common/types';
|
|
2
2
|
import { TMixinTarget } from '@venizia/ignis-helpers';
|
|
3
3
|
import { Container } from '@venizia/ignis-inversion';
|
|
4
4
|
export declare const BootMixin: <T extends TMixinTarget<Container>>(baseClass: T) => {
|
|
5
5
|
new (...args: any[]): {
|
|
6
6
|
bootOptions?: IBootOptions | undefined;
|
|
7
|
+
projectRoot?: string;
|
|
7
8
|
boot(): Promise<IBootReport>;
|
|
9
|
+
instantiate: <T_1>(cls: import("@venizia/ignis-inversion").TClass<T_1>) => T_1;
|
|
8
10
|
getMetadataRegistry: () => import("@venizia/ignis-inversion").MetadataRegistry;
|
|
9
11
|
bind: <T_1>(opts: {
|
|
10
|
-
key:
|
|
12
|
+
key: import("@venizia/ignis-inversion").TBindingKey;
|
|
11
13
|
}) => import("@venizia/ignis-inversion").Binding<T_1>;
|
|
12
14
|
isBound: (opts: {
|
|
13
|
-
key:
|
|
15
|
+
key: import("@venizia/ignis-inversion").TBindingKey;
|
|
14
16
|
}) => boolean;
|
|
15
17
|
getBinding: <T_1>(opts: {
|
|
16
|
-
key:
|
|
18
|
+
key: import("@venizia/ignis-inversion").TBindingKey | {
|
|
17
19
|
namespace: string;
|
|
18
20
|
key: string;
|
|
19
21
|
};
|
|
20
22
|
}) => import("@venizia/ignis-inversion").TNullable<import("@venizia/ignis-inversion").Binding<T_1>>;
|
|
21
23
|
unbind: (opts: {
|
|
22
|
-
key:
|
|
24
|
+
key: import("@venizia/ignis-inversion").TBindingKey;
|
|
23
25
|
}) => boolean;
|
|
24
26
|
set: <T_1>(opts: {
|
|
25
27
|
binding: import("@venizia/ignis-inversion").Binding<T_1>;
|
|
26
28
|
}) => void;
|
|
27
29
|
get: {
|
|
28
30
|
<T_1>(opts: {
|
|
29
|
-
key:
|
|
31
|
+
key: import("@venizia/ignis-inversion").TBindingKey | {
|
|
30
32
|
namespace: string;
|
|
31
33
|
key: string;
|
|
32
34
|
};
|
|
33
35
|
isOptional?: false;
|
|
34
36
|
}): T_1;
|
|
35
37
|
<T_1>(opts: {
|
|
36
|
-
key:
|
|
38
|
+
key: import("@venizia/ignis-inversion").TBindingKey | {
|
|
37
39
|
namespace: string;
|
|
38
40
|
key: string;
|
|
39
41
|
};
|
|
@@ -42,7 +44,7 @@ export declare const BootMixin: <T extends TMixinTarget<Container>>(baseClass: T
|
|
|
42
44
|
};
|
|
43
45
|
gets: <T_1 extends unknown[]>(opts: {
|
|
44
46
|
bindings: { [K in keyof T_1]: {
|
|
45
|
-
key:
|
|
47
|
+
key: import("@venizia/ignis-inversion").TBindingKey | {
|
|
46
48
|
namespace: string;
|
|
47
49
|
key: string;
|
|
48
50
|
};
|
|
@@ -50,7 +52,6 @@ export declare const BootMixin: <T extends TMixinTarget<Container>>(baseClass: T
|
|
|
50
52
|
}; };
|
|
51
53
|
}) => { [K in keyof T_1]: T_1[K] | undefined; };
|
|
52
54
|
resolve: <T_1>(cls: import("@venizia/ignis-inversion").TClass<T_1>) => T_1;
|
|
53
|
-
instantiate: <T_1>(cls: import("@venizia/ignis-inversion").TClass<T_1>) => T_1;
|
|
54
55
|
findByTag: <T_1 = any>(opts: {
|
|
55
56
|
tag: string;
|
|
56
57
|
exclude?: Array<string> | Set<string>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"boot.mixin.d.ts","sourceRoot":"","sources":["../../src/boot.mixin.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"boot.mixin.d.ts","sourceRoot":"","sources":["../../src/boot.mixin.ts"],"names":[],"mappings":"AAKA,OAAO,EAAwB,YAAY,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAiB,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAEpE,eAAO,MAAM,SAAS,GAAI,CAAC,SAAS,YAAY,CAAC,SAAS,CAAC,EAAE,WAAW,CAAC;kBAEhD,GAAG,EAAE;sBAaZ,YAAY,GAAG,SAAS;sBACxB,MAAM;gBAEZ,OAAO,CAAC,WAAW,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;0BAH5B,CAAC;;;;;;;0BAI+C,CAAC;;;;;;;;;0BAUpC,CAAC;;;;;;mBAAsM,CAAC;;;;;;;KADxN,CAAC"}
|
package/dist/cjs/boot.mixin.js
CHANGED
|
@@ -1,20 +1,26 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.BootMixin = void 0;
|
|
4
|
-
|
|
4
|
+
// Never '@venizia/ignis-boot' here: importing the package from inside itself resolves through its
|
|
5
|
+
// own dist, so the source depends on a build of itself - a stale or half-written dist then breaks
|
|
6
|
+
// the very code that produces it.
|
|
7
|
+
const booters_1 = require("./booters");
|
|
8
|
+
const bootstrapper_1 = require("./bootstrapper");
|
|
5
9
|
const ignis_inversion_1 = require("@venizia/ignis-inversion");
|
|
6
10
|
const BootMixin = (baseClass) => {
|
|
7
11
|
class Mixed extends baseClass {
|
|
8
12
|
constructor(...args) {
|
|
9
13
|
super(...args);
|
|
10
|
-
this.bind({ key:
|
|
11
|
-
this.bind({ key: 'booter.DatasourceBooter' }).toClass(
|
|
12
|
-
this.bind({ key: 'booter.RepositoryBooter' }).toClass(
|
|
13
|
-
this.bind({ key: 'booter.ServiceBooter' }).toClass(
|
|
14
|
-
this.bind({ key: 'booter.ControllerBooter' }).toClass(
|
|
15
|
-
this.bind({ key: 'bootstrapper' }).toClass(
|
|
14
|
+
this.bind({ key: '@app/instance' }).toProvider(() => this);
|
|
15
|
+
this.bind({ key: 'booter.DatasourceBooter' }).toClass(booters_1.DatasourceBooter).setTags('booter');
|
|
16
|
+
this.bind({ key: 'booter.RepositoryBooter' }).toClass(booters_1.RepositoryBooter).setTags('booter');
|
|
17
|
+
this.bind({ key: 'booter.ServiceBooter' }).toClass(booters_1.ServiceBooter).setTags('booter');
|
|
18
|
+
this.bind({ key: 'booter.ControllerBooter' }).toClass(booters_1.ControllerBooter).setTags('booter');
|
|
19
|
+
this.bind({ key: 'bootstrapper' }).toClass(bootstrapper_1.Bootstrapper).setScope(ignis_inversion_1.BindingScopes.SINGLETON);
|
|
16
20
|
}
|
|
17
21
|
boot() {
|
|
22
|
+
this.bind({ key: '@app/boot-options' }).toValue(this.bootOptions ?? {});
|
|
23
|
+
this.bind({ key: '@app/project_root' }).toValue(this.projectRoot ?? process.cwd());
|
|
18
24
|
const bootstrapper = this.get({ key: 'bootstrapper' });
|
|
19
25
|
return bootstrapper.boot({});
|
|
20
26
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"boot.mixin.js","sourceRoot":"","sources":["../../src/boot.mixin.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"boot.mixin.js","sourceRoot":"","sources":["../../src/boot.mixin.ts"],"names":[],"mappings":";;;AAAA,kGAAkG;AAClG,kGAAkG;AAClG,kCAAkC;AAClC,uCAAgG;AAChG,iDAA8C;AAG9C,8DAAoE;AAE7D,MAAM,SAAS,GAAG,CAAoC,SAAY,EAAE,EAAE;IAC3E,MAAM,KAAM,SAAQ,SAAS;QAC3B,YAAY,GAAG,IAAW;YACxB,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;YAEf,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,eAAe,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;YAE3D,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,yBAAyB,EAAE,CAAC,CAAC,OAAO,CAAC,0BAAgB,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC1F,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,yBAAyB,EAAE,CAAC,CAAC,OAAO,CAAC,0BAAgB,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC1F,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,sBAAsB,EAAE,CAAC,CAAC,OAAO,CAAC,uBAAa,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACpF,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,yBAAyB,EAAE,CAAC,CAAC,OAAO,CAAC,0BAAgB,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAE1F,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,cAAc,EAAE,CAAC,CAAC,OAAO,CAAC,2BAAY,CAAC,CAAC,QAAQ,CAAC,+BAAa,CAAC,SAAS,CAAC,CAAC;QAC7F,CAAC;QAKD,IAAI;YACF,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,mBAAmB,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;YACxE,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,mBAAmB,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;YAEnF,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAe,EAAE,GAAG,EAAE,cAAc,EAAE,CAAC,CAAC;YACrE,OAAO,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC/B,CAAC;KACF;IAED,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AA5BW,QAAA,SAAS,aA4BpB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrapper.d.ts","sourceRoot":"","sources":["../../src/bootstrapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,YAAY,EAEZ,qBAAqB,EACrB,WAAW,EACX,aAAa,EAEd,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,UAAU,EAAY,MAAM,wBAAwB,CAAC;AAG9D,qBAAa,YAAa,SAAQ,UAAW,YAAW,aAAa;IAKrB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAJ1E,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,iBAAiB,CAAkC;IAC3D,OAAO,CAAC,eAAe,CAAkC;gBAEM,WAAW,EAAE,YAAY;IAIlF,IAAI,CAAC,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"bootstrapper.d.ts","sourceRoot":"","sources":["../../src/bootstrapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,YAAY,EAEZ,qBAAqB,EACrB,WAAW,EACX,aAAa,EAEd,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,UAAU,EAAY,MAAM,wBAAwB,CAAC;AAG9D,qBAAa,YAAa,SAAQ,UAAW,YAAW,aAAa;IAKrB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAJ1E,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,iBAAiB,CAAkC;IAC3D,OAAO,CAAC,eAAe,CAAkC;gBAEM,WAAW,EAAE,YAAY;IAIlF,IAAI,CAAC,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,WAAW,CAAC;YAgB/C,eAAe;YA4Bf,QAAQ;IAuDtB,OAAO,CAAC,cAAc;CAiBvB"}
|
package/dist/cjs/bootstrapper.js
CHANGED
|
@@ -27,24 +27,40 @@ let Bootstrapper = Bootstrapper_1 = class Bootstrapper extends ignis_helpers_1.B
|
|
|
27
27
|
}
|
|
28
28
|
async boot(opts) {
|
|
29
29
|
const { phases = types_1.BOOT_PHASES, booters } = opts;
|
|
30
|
-
|
|
30
|
+
const startedAt = performance.now();
|
|
31
|
+
await this.discoverBooters({ booterNames: booters });
|
|
31
32
|
this.logger
|
|
32
33
|
.for(this.boot.name)
|
|
33
34
|
.debug(`Starting boot | Number of booters: %d`, this.booters.length);
|
|
34
35
|
for (const phase of phases) {
|
|
35
|
-
await this.runPhase({ phase
|
|
36
|
+
await this.runPhase({ phase });
|
|
36
37
|
}
|
|
37
|
-
return this.generateReport();
|
|
38
|
+
return this.generateReport({ phases, totalDurationMs: performance.now() - startedAt });
|
|
38
39
|
}
|
|
39
|
-
async discoverBooters() {
|
|
40
|
+
async discoverBooters(opts) {
|
|
41
|
+
const { booterNames } = opts;
|
|
42
|
+
// Reset first: pushing onto the previous run's list would register every artifact again -
|
|
43
|
+
// duplicate controllers, duplicate repository bindings - on a second boot().
|
|
44
|
+
this.booters = [];
|
|
45
|
+
this.phaseStartTimings.clear();
|
|
46
|
+
this.phaseEndTimings.clear();
|
|
47
|
+
const wanted = booterNames?.length ? new Set(booterNames) : undefined;
|
|
40
48
|
const booterBindings = this.application.findByTag({ tag: 'booter' });
|
|
41
49
|
for (const binding of booterBindings) {
|
|
42
|
-
|
|
50
|
+
const booter = binding.getValue(this.application);
|
|
51
|
+
// An ignored filter is worse than no filter: the caller believes it scoped the boot.
|
|
52
|
+
if (wanted && !wanted.has(booter.constructor.name)) {
|
|
53
|
+
this.logger
|
|
54
|
+
.for(this.discoverBooters.name)
|
|
55
|
+
.debug(`SKIP booter not in filter | Booter: %s`, booter.constructor.name);
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
this.booters.push(booter);
|
|
43
59
|
this.logger.for(this.discoverBooters.name).debug(`Discovered booter: %s`, binding.key);
|
|
44
60
|
}
|
|
45
61
|
}
|
|
46
62
|
async runPhase(opts) {
|
|
47
|
-
const { phase } = opts;
|
|
63
|
+
const { phase } = opts;
|
|
48
64
|
this.phaseStartTimings.set(phase, performance.now());
|
|
49
65
|
this.logger.for(this.runPhase.name).debug(`Starting phase: %s`, phase.toUpperCase());
|
|
50
66
|
for (const booter of this.booters) {
|
|
@@ -69,8 +85,11 @@ let Bootstrapper = Bootstrapper_1 = class Bootstrapper extends ignis_helpers_1.B
|
|
|
69
85
|
}
|
|
70
86
|
catch (error) {
|
|
71
87
|
const errorMessage = error?.message || String(error);
|
|
88
|
+
// Without the cause, a boot failure reaches the operator as a bare message: the stack of the
|
|
89
|
+
// booter that actually threw - the real diagnosis - is gone.
|
|
72
90
|
throw (0, ignis_helpers_1.getError)({
|
|
73
91
|
message: `[Bootstrapper][runPhase] Error during phase '${phase}' on booter '${booter.constructor.name}': ${errorMessage}`,
|
|
92
|
+
cause: error,
|
|
74
93
|
});
|
|
75
94
|
}
|
|
76
95
|
}
|
|
@@ -82,8 +101,16 @@ let Bootstrapper = Bootstrapper_1 = class Bootstrapper extends ignis_helpers_1.B
|
|
|
82
101
|
.for(this.runPhase.name)
|
|
83
102
|
.debug(`Completed phase: %s | Took: %d ms`, phase.toUpperCase(), duration);
|
|
84
103
|
}
|
|
85
|
-
generateReport() {
|
|
86
|
-
const
|
|
104
|
+
generateReport(opts) {
|
|
105
|
+
const { phases, totalDurationMs } = opts;
|
|
106
|
+
const report = {
|
|
107
|
+
booters: this.booters.map(booter => booter.constructor.name),
|
|
108
|
+
phases: phases.map(phase => ({
|
|
109
|
+
phase,
|
|
110
|
+
durationMs: (this.phaseEndTimings.get(phase) ?? 0) - (this.phaseStartTimings.get(phase) ?? 0),
|
|
111
|
+
})),
|
|
112
|
+
totalDurationMs,
|
|
113
|
+
};
|
|
87
114
|
this.logger.for(this.generateReport.name).debug(`Boot report: %j`, report);
|
|
88
115
|
return report;
|
|
89
116
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrapper.js","sourceRoot":"","sources":["../../src/bootstrapper.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAQwB;AACxB,0DAA8D;AAC9D,8DAAkD;AAElD,IAAa,YAAY,oBAAzB,MAAa,YAAa,SAAQ,0BAAU;IAK1C,YAA8C,WAA0C;QACtF,KAAK,CAAC,EAAE,KAAK,EAAE,cAAY,CAAC,IAAI,EAAE,CAAC,CAAC;QADyB,gBAAW,GAAX,WAAW,CAAc;QAJhF,YAAO,GAAc,EAAE,CAAC;QACxB,sBAAiB,GAAwB,IAAI,GAAG,EAAE,CAAC;QACnD,oBAAe,GAAwB,IAAI,GAAG,EAAE,CAAC;IAIzD,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,IAA2B;QACpC,MAAM,EAAE,MAAM,GAAG,mBAAW,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"bootstrapper.js","sourceRoot":"","sources":["../../src/bootstrapper.ts"],"names":[],"mappings":"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"}
|
|
@@ -39,6 +39,14 @@ export interface IBootExecutionOptions {
|
|
|
39
39
|
export interface IBootstrapper {
|
|
40
40
|
boot(opts: IBootExecutionOptions): Promise<IBootReport>;
|
|
41
41
|
}
|
|
42
|
+
export interface IBootPhaseReport {
|
|
43
|
+
phase: TBootPhase;
|
|
44
|
+
durationMs: number;
|
|
45
|
+
}
|
|
42
46
|
export interface IBootReport {
|
|
47
|
+
/** Class names of the booters that actually ran, in execution order. */
|
|
48
|
+
booters: string[];
|
|
49
|
+
phases: IBootPhaseReport[];
|
|
50
|
+
totalDurationMs: number;
|
|
43
51
|
}
|
|
44
52
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/common/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,YAAY,CAAC,EAAE,gBAAgB,CAAC;IAChC,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,CAAC,YAAY,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAAC;CACtD;AAED,MAAM,MAAM,UAAU,GAAG,WAAW,CAAC,OAAO,UAAU,CAAC,CAAC;AAExD,eAAO,MAAM,WAAW,EAAE,UAAU,EAAsC,CAAC;AAE3E,MAAM,WAAW,YAAa,SAAQ,SAAS;IAC7C,cAAc,IAAI,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,gBAAgB,CAAC;CACnC;AAED,MAAM,WAAW,OAAO;IACtB,SAAS,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC;IAClC,QAAQ,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,EAAE,UAAU,EAAE,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;CACzD;AAED,MAAM,WAAW,WAAW;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/common/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,YAAY,CAAC,EAAE,gBAAgB,CAAC;IAChC,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,CAAC,YAAY,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAAC;CACtD;AAED,MAAM,MAAM,UAAU,GAAG,WAAW,CAAC,OAAO,UAAU,CAAC,CAAC;AAExD,eAAO,MAAM,WAAW,EAAE,UAAU,EAAsC,CAAC;AAE3E,MAAM,WAAW,YAAa,SAAQ,SAAS;IAC7C,cAAc,IAAI,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,gBAAgB,CAAC;CACnC;AAED,MAAM,WAAW,OAAO;IACtB,SAAS,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC;IAClC,QAAQ,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,EAAE,UAAU,EAAE,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;CACzD;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,UAAU,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,wEAAwE;IACxE,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;CACzB"}
|
|
@@ -1,14 +1,9 @@
|
|
|
1
|
-
import { AnyType
|
|
2
|
-
/** Check if a value is a class constructor. */
|
|
3
|
-
export declare const isClass: <T>(target: AnyType) => target is TClass<T>;
|
|
4
|
-
/** Discover files matching a glob pattern. */
|
|
1
|
+
import { AnyType } from '@venizia/ignis-helpers';
|
|
5
2
|
export declare const discoverFiles: (opts: {
|
|
6
3
|
pattern: string;
|
|
7
4
|
root: string;
|
|
8
5
|
}) => Promise<string[]>;
|
|
9
|
-
/** Load classes from discovered files via dynamic import. */
|
|
10
6
|
export declare const loadClasses: (opts: {
|
|
11
7
|
files: string[];
|
|
12
|
-
root: string;
|
|
13
8
|
}) => Promise<AnyType[]>;
|
|
14
9
|
//# sourceMappingURL=boot.utility.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"boot.utility.d.ts","sourceRoot":"","sources":["../../../src/utilities/boot.utility.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"boot.utility.d.ts","sourceRoot":"","sources":["../../../src/utilities/boot.utility.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAA6B,MAAM,wBAAwB,CAAC;AAG5E,eAAO,MAAM,aAAa,EAAE,CAAC,IAAI,EAAE;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd,KAAK,OAAO,CAAC,MAAM,EAAE,CAarB,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,CAAC,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,KAAK,OAAO,CAAC,OAAO,EAAE,CA2BzE,CAAC"}
|
|
@@ -1,14 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.loadClasses = exports.discoverFiles =
|
|
3
|
+
exports.loadClasses = exports.discoverFiles = void 0;
|
|
4
4
|
const ignis_helpers_1 = require("@venizia/ignis-helpers");
|
|
5
5
|
const glob_1 = require("glob");
|
|
6
|
-
/** Check if a value is a class constructor. */
|
|
7
|
-
const isClass = (target) => {
|
|
8
|
-
return typeof target === 'function' && target.prototype !== undefined;
|
|
9
|
-
};
|
|
10
|
-
exports.isClass = isClass;
|
|
11
|
-
/** Discover files matching a glob pattern. */
|
|
12
6
|
const discoverFiles = async (opts) => {
|
|
13
7
|
const { pattern, root } = opts;
|
|
14
8
|
try {
|
|
@@ -19,19 +13,20 @@ const discoverFiles = async (opts) => {
|
|
|
19
13
|
const errorMessage = error.message ?? 'Unknown error';
|
|
20
14
|
throw (0, ignis_helpers_1.getError)({
|
|
21
15
|
message: `Failed to discover files with pattern: ${pattern} | Error: ${errorMessage}`,
|
|
16
|
+
cause: error,
|
|
22
17
|
});
|
|
23
18
|
}
|
|
24
19
|
};
|
|
25
20
|
exports.discoverFiles = discoverFiles;
|
|
26
|
-
/** Load classes from discovered files via dynamic import. */
|
|
27
21
|
const loadClasses = async (opts) => {
|
|
28
22
|
const { files } = opts;
|
|
29
23
|
const classes = [];
|
|
30
24
|
for (const file of files) {
|
|
31
25
|
try {
|
|
32
26
|
const module = await import(file);
|
|
33
|
-
|
|
34
|
-
|
|
27
|
+
const modules = Object.values(module);
|
|
28
|
+
for (const exported of modules) {
|
|
29
|
+
if (!(0, ignis_helpers_1.isClass)(exported)) {
|
|
35
30
|
continue;
|
|
36
31
|
}
|
|
37
32
|
classes.push(exported);
|
|
@@ -39,8 +34,11 @@ const loadClasses = async (opts) => {
|
|
|
39
34
|
}
|
|
40
35
|
catch (error) {
|
|
41
36
|
const errorMessage = error.message ?? 'Unknown error';
|
|
37
|
+
// Without the cause, a boot failure reaches the operator as a bare message: the stack of the
|
|
38
|
+
// module that actually threw - the real diagnosis - is gone.
|
|
42
39
|
throw (0, ignis_helpers_1.getError)({
|
|
43
40
|
message: `Failed to load file: ${file} | Error: ${errorMessage}`,
|
|
41
|
+
cause: error,
|
|
44
42
|
});
|
|
45
43
|
}
|
|
46
44
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"boot.utility.js","sourceRoot":"","sources":["../../../src/utilities/boot.utility.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"boot.utility.js","sourceRoot":"","sources":["../../../src/utilities/boot.utility.ts"],"names":[],"mappings":";;;AAAA,0DAA4E;AAC5E,+BAA4B;AAErB,MAAM,aAAa,GAGA,KAAK,EAAC,IAAI,EAAC,EAAE;IACrC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;IAE/B,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,MAAM,IAAA,WAAI,EAAC,OAAO,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QACtE,OAAO,UAAU,CAAC;IACpB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,YAAY,GAAI,KAAe,CAAC,OAAO,IAAI,eAAe,CAAC;QACjE,MAAM,IAAA,wBAAQ,EAAC;YACb,OAAO,EAAE,0CAA0C,OAAO,aAAa,YAAY,EAAE;YACrF,KAAK,EAAE,KAAK;SACb,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC;AAhBW,QAAA,aAAa,iBAgBxB;AAEK,MAAM,WAAW,GAAsD,KAAK,EAAC,IAAI,EAAC,EAAE;IACzF,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;IACvB,MAAM,OAAO,GAAsB,EAAE,CAAC;IAEtC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;YAClC,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACtC,KAAK,MAAM,QAAQ,IAAI,OAAO,EAAE,CAAC;gBAC/B,IAAI,CAAC,IAAA,uBAAO,EAAC,QAAQ,CAAC,EAAE,CAAC;oBACvB,SAAS;gBACX,CAAC;gBAED,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,YAAY,GAAI,KAAe,CAAC,OAAO,IAAI,eAAe,CAAC;YACjE,6FAA6F;YAC7F,6DAA6D;YAC7D,MAAM,IAAA,wBAAQ,EAAC;gBACb,OAAO,EAAE,wBAAwB,IAAI,aAAa,YAAY,EAAE;gBAChE,KAAK,EAAE,KAAK;aACb,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AA3BW,QAAA,WAAW,eA2BtB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-artifact-booter.d.ts","sourceRoot":"","sources":["../../../src/base/base-artifact-booter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAE3E,OAAO,EAAE,UAAU,EAAY,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAElD,8BAAsB,kBAAmB,SAAQ,UAAW,YAAW,OAAO;IAC5E,SAAS,CAAC,IAAI,EAAE,MAAM,CAAM;IAC5B,SAAS,CAAC,eAAe,EAAE,gBAAgB,CAAM;IACjD,SAAS,CAAC,eAAe,EAAE,MAAM,EAAE,CAAM;IACzC,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAM;IAE5C,SAAS,CAAC,QAAQ,CAAC,cAAc,IAAI,MAAM,EAAE;IAC7C,SAAS,CAAC,QAAQ,CAAC,oBAAoB,IAAI,MAAM,EAAE;IACnD,SAAS,CAAC,QAAQ,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;gBAE5B,IAAI,EAAE,cAAc;IAOhC,SAAS,CAAC,UAAU,IAAI,MAAM;IA+BxB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"base-artifact-booter.d.ts","sourceRoot":"","sources":["../../../src/base/base-artifact-booter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAE3E,OAAO,EAAE,UAAU,EAAY,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAElD,8BAAsB,kBAAmB,SAAQ,UAAW,YAAW,OAAO;IAC5E,SAAS,CAAC,IAAI,EAAE,MAAM,CAAM;IAC5B,SAAS,CAAC,eAAe,EAAE,gBAAgB,CAAM;IACjD,SAAS,CAAC,eAAe,EAAE,MAAM,EAAE,CAAM;IACzC,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAM;IAE5C,SAAS,CAAC,QAAQ,CAAC,cAAc,IAAI,MAAM,EAAE;IAC7C,SAAS,CAAC,QAAQ,CAAC,oBAAoB,IAAI,MAAM,EAAE;IACnD,SAAS,CAAC,QAAQ,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;gBAE5B,IAAI,EAAE,cAAc;IAOhC,SAAS,CAAC,UAAU,IAAI,MAAM;IA+BxB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAc1B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAsBzB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAiB5B"}
|
|
@@ -37,12 +37,14 @@ export class BaseArtifactBooter extends BaseHelper {
|
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
39
|
async configure() {
|
|
40
|
+
// No trailing `...this.artifactOptions` spread: a key that EXISTS but holds undefined - the
|
|
41
|
+
// shape `dirs: process.env.APP_DIRS?.split(',')` produces - would overwrite the default that
|
|
42
|
+
// was just computed, and getPattern() would throw "No directories specified".
|
|
40
43
|
this.artifactOptions = {
|
|
41
44
|
dirs: this.artifactOptions?.dirs ?? this.getDefaultDirs(),
|
|
42
45
|
extensions: this.artifactOptions?.extensions ?? this.getDefaultExtensions(),
|
|
43
46
|
isNested: this.artifactOptions?.isNested ?? true,
|
|
44
47
|
glob: this.artifactOptions?.glob,
|
|
45
|
-
...this.artifactOptions,
|
|
46
48
|
};
|
|
47
49
|
this.logger.for(this.configure.name).debug(`Configured: %j`, this.artifactOptions);
|
|
48
50
|
}
|
|
@@ -58,6 +60,7 @@ export class BaseArtifactBooter extends BaseHelper {
|
|
|
58
60
|
catch (error) {
|
|
59
61
|
throw getError({
|
|
60
62
|
message: `[discover] Failed to discover files using pattern: ${pattern} | Error: ${error?.message}`,
|
|
63
|
+
cause: error,
|
|
61
64
|
});
|
|
62
65
|
}
|
|
63
66
|
}
|
|
@@ -68,12 +71,13 @@ export class BaseArtifactBooter extends BaseHelper {
|
|
|
68
71
|
}
|
|
69
72
|
try {
|
|
70
73
|
this.loadedClasses = [];
|
|
71
|
-
this.loadedClasses = await loadClasses({ files: this.discoveredFiles
|
|
74
|
+
this.loadedClasses = await loadClasses({ files: this.discoveredFiles });
|
|
72
75
|
await this.bind();
|
|
73
76
|
}
|
|
74
77
|
catch (error) {
|
|
75
78
|
throw getError({
|
|
76
79
|
message: `[load] Failed to load classes from discovered files | Error: ${error?.message}`,
|
|
80
|
+
cause: error,
|
|
77
81
|
});
|
|
78
82
|
}
|
|
79
83
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-artifact-booter.js","sourceRoot":"","sources":["../../../src/base/base-artifact-booter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAG9D,MAAM,OAAgB,kBAAmB,SAAQ,UAAU;IAUzD,YAAY,IAAoB;QAC9B,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QAVrB,SAAI,GAAW,EAAE,CAAC;QAClB,oBAAe,GAAqB,EAAE,CAAC;QACvC,oBAAe,GAAa,EAAE,CAAC;QAC/B,kBAAa,GAAkB,EAAE,CAAC;QAS1C,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;QAC5C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IACxB,CAAC;IAES,UAAU;QAClB,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;QACnC,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;YACvC,MAAM,QAAQ,CAAC;gBACb,OAAO,EAAE,8DAA8D;aACxE,CAAC,CAAC;QACL,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC;YAC7C,MAAM,QAAQ,CAAC;gBACb,OAAO,EAAE,IAAI,IAAI,CAAC,KAAK,mEAAmE;aAC3F,CAAC,CAAC;QACL,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACjD,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU;aACzC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aAC9C,IAAI,CAAC,GAAG,CAAC,CAAC;QAEb,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,8CAA8C;QAE/G,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvF,OAAO,IAAI,IAAI,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC;QACzC,CAAC;aAAM,CAAC;YACN,OAAO,GAAG,IAAI,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;QACrC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,SAAS;QACb,IAAI,CAAC,eAAe,GAAG;YACrB,IAAI,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,IAAI,IAAI,CAAC,cAAc,EAAE;YACzD,UAAU,EAAE,IAAI,CAAC,eAAe,EAAE,UAAU,IAAI,IAAI,CAAC,oBAAoB,EAAE;YAC3E,QAAQ,EAAE,IAAI,CAAC,eAAe,EAAE,QAAQ,IAAI,IAAI;YAChD,IAAI,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI;
|
|
1
|
+
{"version":3,"file":"base-artifact-booter.js","sourceRoot":"","sources":["../../../src/base/base-artifact-booter.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/boot.mixin.d.ts
CHANGED
|
@@ -1,39 +1,41 @@
|
|
|
1
|
-
import { IBootOptions, IBootReport } from '
|
|
1
|
+
import { IBootOptions, IBootReport } from './common/types';
|
|
2
2
|
import { TMixinTarget } from '@venizia/ignis-helpers';
|
|
3
3
|
import { Container } from '@venizia/ignis-inversion';
|
|
4
4
|
export declare const BootMixin: <T extends TMixinTarget<Container>>(baseClass: T) => {
|
|
5
5
|
new (...args: any[]): {
|
|
6
6
|
bootOptions?: IBootOptions | undefined;
|
|
7
|
+
projectRoot?: string;
|
|
7
8
|
boot(): Promise<IBootReport>;
|
|
9
|
+
instantiate: <T_1>(cls: import("@venizia/ignis-inversion").TClass<T_1>) => T_1;
|
|
8
10
|
getMetadataRegistry: () => import("@venizia/ignis-inversion").MetadataRegistry;
|
|
9
11
|
bind: <T_1>(opts: {
|
|
10
|
-
key:
|
|
12
|
+
key: import("@venizia/ignis-inversion").TBindingKey;
|
|
11
13
|
}) => import("@venizia/ignis-inversion").Binding<T_1>;
|
|
12
14
|
isBound: (opts: {
|
|
13
|
-
key:
|
|
15
|
+
key: import("@venizia/ignis-inversion").TBindingKey;
|
|
14
16
|
}) => boolean;
|
|
15
17
|
getBinding: <T_1>(opts: {
|
|
16
|
-
key:
|
|
18
|
+
key: import("@venizia/ignis-inversion").TBindingKey | {
|
|
17
19
|
namespace: string;
|
|
18
20
|
key: string;
|
|
19
21
|
};
|
|
20
22
|
}) => import("@venizia/ignis-inversion").TNullable<import("@venizia/ignis-inversion").Binding<T_1>>;
|
|
21
23
|
unbind: (opts: {
|
|
22
|
-
key:
|
|
24
|
+
key: import("@venizia/ignis-inversion").TBindingKey;
|
|
23
25
|
}) => boolean;
|
|
24
26
|
set: <T_1>(opts: {
|
|
25
27
|
binding: import("@venizia/ignis-inversion").Binding<T_1>;
|
|
26
28
|
}) => void;
|
|
27
29
|
get: {
|
|
28
30
|
<T_1>(opts: {
|
|
29
|
-
key:
|
|
31
|
+
key: import("@venizia/ignis-inversion").TBindingKey | {
|
|
30
32
|
namespace: string;
|
|
31
33
|
key: string;
|
|
32
34
|
};
|
|
33
35
|
isOptional?: false;
|
|
34
36
|
}): T_1;
|
|
35
37
|
<T_1>(opts: {
|
|
36
|
-
key:
|
|
38
|
+
key: import("@venizia/ignis-inversion").TBindingKey | {
|
|
37
39
|
namespace: string;
|
|
38
40
|
key: string;
|
|
39
41
|
};
|
|
@@ -42,7 +44,7 @@ export declare const BootMixin: <T extends TMixinTarget<Container>>(baseClass: T
|
|
|
42
44
|
};
|
|
43
45
|
gets: <T_1 extends unknown[]>(opts: {
|
|
44
46
|
bindings: { [K in keyof T_1]: {
|
|
45
|
-
key:
|
|
47
|
+
key: import("@venizia/ignis-inversion").TBindingKey | {
|
|
46
48
|
namespace: string;
|
|
47
49
|
key: string;
|
|
48
50
|
};
|
|
@@ -50,7 +52,6 @@ export declare const BootMixin: <T extends TMixinTarget<Container>>(baseClass: T
|
|
|
50
52
|
}; };
|
|
51
53
|
}) => { [K in keyof T_1]: T_1[K] | undefined; };
|
|
52
54
|
resolve: <T_1>(cls: import("@venizia/ignis-inversion").TClass<T_1>) => T_1;
|
|
53
|
-
instantiate: <T_1>(cls: import("@venizia/ignis-inversion").TClass<T_1>) => T_1;
|
|
54
55
|
findByTag: <T_1 = any>(opts: {
|
|
55
56
|
tag: string;
|
|
56
57
|
exclude?: Array<string> | Set<string>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"boot.mixin.d.ts","sourceRoot":"","sources":["../../src/boot.mixin.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"boot.mixin.d.ts","sourceRoot":"","sources":["../../src/boot.mixin.ts"],"names":[],"mappings":"AAKA,OAAO,EAAwB,YAAY,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAiB,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAEpE,eAAO,MAAM,SAAS,GAAI,CAAC,SAAS,YAAY,CAAC,SAAS,CAAC,EAAE,WAAW,CAAC;kBAEhD,GAAG,EAAE;sBAaZ,YAAY,GAAG,SAAS;sBACxB,MAAM;gBAEZ,OAAO,CAAC,WAAW,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;0BAH5B,CAAC;;;;;;;0BAI+C,CAAC;;;;;;;;;0BAUpC,CAAC;;;;;;mBAAsM,CAAC;;;;;;;KADxN,CAAC"}
|
package/dist/esm/boot.mixin.js
CHANGED
|
@@ -1,10 +1,14 @@
|
|
|
1
|
-
|
|
1
|
+
// Never '@venizia/ignis-boot' here: importing the package from inside itself resolves through its
|
|
2
|
+
// own dist, so the source depends on a build of itself - a stale or half-written dist then breaks
|
|
3
|
+
// the very code that produces it.
|
|
4
|
+
import { ControllerBooter, DatasourceBooter, RepositoryBooter, ServiceBooter } from './booters';
|
|
5
|
+
import { Bootstrapper } from './bootstrapper';
|
|
2
6
|
import { BindingScopes } from '@venizia/ignis-inversion';
|
|
3
7
|
export const BootMixin = (baseClass) => {
|
|
4
8
|
class Mixed extends baseClass {
|
|
5
9
|
constructor(...args) {
|
|
6
10
|
super(...args);
|
|
7
|
-
this.bind({ key:
|
|
11
|
+
this.bind({ key: '@app/instance' }).toProvider(() => this);
|
|
8
12
|
this.bind({ key: 'booter.DatasourceBooter' }).toClass(DatasourceBooter).setTags('booter');
|
|
9
13
|
this.bind({ key: 'booter.RepositoryBooter' }).toClass(RepositoryBooter).setTags('booter');
|
|
10
14
|
this.bind({ key: 'booter.ServiceBooter' }).toClass(ServiceBooter).setTags('booter');
|
|
@@ -12,6 +16,8 @@ export const BootMixin = (baseClass) => {
|
|
|
12
16
|
this.bind({ key: 'bootstrapper' }).toClass(Bootstrapper).setScope(BindingScopes.SINGLETON);
|
|
13
17
|
}
|
|
14
18
|
boot() {
|
|
19
|
+
this.bind({ key: '@app/boot-options' }).toValue(this.bootOptions ?? {});
|
|
20
|
+
this.bind({ key: '@app/project_root' }).toValue(this.projectRoot ?? process.cwd());
|
|
15
21
|
const bootstrapper = this.get({ key: 'bootstrapper' });
|
|
16
22
|
return bootstrapper.boot({});
|
|
17
23
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"boot.mixin.js","sourceRoot":"","sources":["../../src/boot.mixin.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"boot.mixin.js","sourceRoot":"","sources":["../../src/boot.mixin.ts"],"names":[],"mappings":"AAAA,kGAAkG;AAClG,kGAAkG;AAClG,kCAAkC;AAClC,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAChG,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG9C,OAAO,EAAE,aAAa,EAAa,MAAM,0BAA0B,CAAC;AAEpE,MAAM,CAAC,MAAM,SAAS,GAAG,CAAoC,SAAY,EAAE,EAAE;IAC3E,MAAM,KAAM,SAAQ,SAAS;QAC3B,YAAY,GAAG,IAAW;YACxB,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;YAEf,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,eAAe,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;YAE3D,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,yBAAyB,EAAE,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC1F,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,yBAAyB,EAAE,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC1F,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,sBAAsB,EAAE,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACpF,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,yBAAyB,EAAE,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAE1F,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,cAAc,EAAE,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QAC7F,CAAC;QAKD,IAAI;YACF,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,mBAAmB,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;YACxE,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,mBAAmB,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;YAEnF,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAe,EAAE,GAAG,EAAE,cAAc,EAAE,CAAC,CAAC;YACrE,OAAO,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC/B,CAAC;KACF;IAED,OAAO,KAAK,CAAC;AACf,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrapper.d.ts","sourceRoot":"","sources":["../../src/bootstrapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,YAAY,EAEZ,qBAAqB,EACrB,WAAW,EACX,aAAa,EAEd,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,UAAU,EAAY,MAAM,wBAAwB,CAAC;AAG9D,qBAAa,YAAa,SAAQ,UAAW,YAAW,aAAa;IAKrB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAJ1E,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,iBAAiB,CAAkC;IAC3D,OAAO,CAAC,eAAe,CAAkC;gBAEM,WAAW,EAAE,YAAY;IAIlF,IAAI,CAAC,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"bootstrapper.d.ts","sourceRoot":"","sources":["../../src/bootstrapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,YAAY,EAEZ,qBAAqB,EACrB,WAAW,EACX,aAAa,EAEd,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,UAAU,EAAY,MAAM,wBAAwB,CAAC;AAG9D,qBAAa,YAAa,SAAQ,UAAW,YAAW,aAAa;IAKrB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAJ1E,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,iBAAiB,CAAkC;IAC3D,OAAO,CAAC,eAAe,CAAkC;gBAEM,WAAW,EAAE,YAAY;IAIlF,IAAI,CAAC,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,WAAW,CAAC;YAgB/C,eAAe;YA4Bf,QAAQ;IAuDtB,OAAO,CAAC,cAAc;CAiBvB"}
|
package/dist/esm/bootstrapper.js
CHANGED
|
@@ -24,24 +24,40 @@ let Bootstrapper = Bootstrapper_1 = class Bootstrapper extends BaseHelper {
|
|
|
24
24
|
}
|
|
25
25
|
async boot(opts) {
|
|
26
26
|
const { phases = BOOT_PHASES, booters } = opts;
|
|
27
|
-
|
|
27
|
+
const startedAt = performance.now();
|
|
28
|
+
await this.discoverBooters({ booterNames: booters });
|
|
28
29
|
this.logger
|
|
29
30
|
.for(this.boot.name)
|
|
30
31
|
.debug(`Starting boot | Number of booters: %d`, this.booters.length);
|
|
31
32
|
for (const phase of phases) {
|
|
32
|
-
await this.runPhase({ phase
|
|
33
|
+
await this.runPhase({ phase });
|
|
33
34
|
}
|
|
34
|
-
return this.generateReport();
|
|
35
|
+
return this.generateReport({ phases, totalDurationMs: performance.now() - startedAt });
|
|
35
36
|
}
|
|
36
|
-
async discoverBooters() {
|
|
37
|
+
async discoverBooters(opts) {
|
|
38
|
+
const { booterNames } = opts;
|
|
39
|
+
// Reset first: pushing onto the previous run's list would register every artifact again -
|
|
40
|
+
// duplicate controllers, duplicate repository bindings - on a second boot().
|
|
41
|
+
this.booters = [];
|
|
42
|
+
this.phaseStartTimings.clear();
|
|
43
|
+
this.phaseEndTimings.clear();
|
|
44
|
+
const wanted = booterNames?.length ? new Set(booterNames) : undefined;
|
|
37
45
|
const booterBindings = this.application.findByTag({ tag: 'booter' });
|
|
38
46
|
for (const binding of booterBindings) {
|
|
39
|
-
|
|
47
|
+
const booter = binding.getValue(this.application);
|
|
48
|
+
// An ignored filter is worse than no filter: the caller believes it scoped the boot.
|
|
49
|
+
if (wanted && !wanted.has(booter.constructor.name)) {
|
|
50
|
+
this.logger
|
|
51
|
+
.for(this.discoverBooters.name)
|
|
52
|
+
.debug(`SKIP booter not in filter | Booter: %s`, booter.constructor.name);
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
this.booters.push(booter);
|
|
40
56
|
this.logger.for(this.discoverBooters.name).debug(`Discovered booter: %s`, binding.key);
|
|
41
57
|
}
|
|
42
58
|
}
|
|
43
59
|
async runPhase(opts) {
|
|
44
|
-
const { phase } = opts;
|
|
60
|
+
const { phase } = opts;
|
|
45
61
|
this.phaseStartTimings.set(phase, performance.now());
|
|
46
62
|
this.logger.for(this.runPhase.name).debug(`Starting phase: %s`, phase.toUpperCase());
|
|
47
63
|
for (const booter of this.booters) {
|
|
@@ -66,8 +82,11 @@ let Bootstrapper = Bootstrapper_1 = class Bootstrapper extends BaseHelper {
|
|
|
66
82
|
}
|
|
67
83
|
catch (error) {
|
|
68
84
|
const errorMessage = error?.message || String(error);
|
|
85
|
+
// Without the cause, a boot failure reaches the operator as a bare message: the stack of the
|
|
86
|
+
// booter that actually threw - the real diagnosis - is gone.
|
|
69
87
|
throw getError({
|
|
70
88
|
message: `[Bootstrapper][runPhase] Error during phase '${phase}' on booter '${booter.constructor.name}': ${errorMessage}`,
|
|
89
|
+
cause: error,
|
|
71
90
|
});
|
|
72
91
|
}
|
|
73
92
|
}
|
|
@@ -79,8 +98,16 @@ let Bootstrapper = Bootstrapper_1 = class Bootstrapper extends BaseHelper {
|
|
|
79
98
|
.for(this.runPhase.name)
|
|
80
99
|
.debug(`Completed phase: %s | Took: %d ms`, phase.toUpperCase(), duration);
|
|
81
100
|
}
|
|
82
|
-
generateReport() {
|
|
83
|
-
const
|
|
101
|
+
generateReport(opts) {
|
|
102
|
+
const { phases, totalDurationMs } = opts;
|
|
103
|
+
const report = {
|
|
104
|
+
booters: this.booters.map(booter => booter.constructor.name),
|
|
105
|
+
phases: phases.map(phase => ({
|
|
106
|
+
phase,
|
|
107
|
+
durationMs: (this.phaseEndTimings.get(phase) ?? 0) - (this.phaseStartTimings.get(phase) ?? 0),
|
|
108
|
+
})),
|
|
109
|
+
totalDurationMs,
|
|
110
|
+
};
|
|
84
111
|
this.logger.for(this.generateReport.name).debug(`Boot report: %j`, report);
|
|
85
112
|
return report;
|
|
86
113
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrapper.js","sourceRoot":"","sources":["../../src/bootstrapper.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,OAAO,EACL,WAAW,GAOZ,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAElD,IAAa,YAAY,oBAAzB,MAAa,YAAa,SAAQ,UAAU;IAK1C,YAA8C,WAA0C;QACtF,KAAK,CAAC,EAAE,KAAK,EAAE,cAAY,CAAC,IAAI,EAAE,CAAC,CAAC;QADyB,gBAAW,GAAX,WAAW,CAAc;QAJhF,YAAO,GAAc,EAAE,CAAC;QACxB,sBAAiB,GAAwB,IAAI,GAAG,EAAE,CAAC;QACnD,oBAAe,GAAwB,IAAI,GAAG,EAAE,CAAC;IAIzD,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,IAA2B;QACpC,MAAM,EAAE,MAAM,GAAG,WAAW,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"bootstrapper.js","sourceRoot":"","sources":["../../src/bootstrapper.ts"],"names":[],"mappings":"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"}
|
|
@@ -39,6 +39,14 @@ export interface IBootExecutionOptions {
|
|
|
39
39
|
export interface IBootstrapper {
|
|
40
40
|
boot(opts: IBootExecutionOptions): Promise<IBootReport>;
|
|
41
41
|
}
|
|
42
|
+
export interface IBootPhaseReport {
|
|
43
|
+
phase: TBootPhase;
|
|
44
|
+
durationMs: number;
|
|
45
|
+
}
|
|
42
46
|
export interface IBootReport {
|
|
47
|
+
/** Class names of the booters that actually ran, in execution order. */
|
|
48
|
+
booters: string[];
|
|
49
|
+
phases: IBootPhaseReport[];
|
|
50
|
+
totalDurationMs: number;
|
|
43
51
|
}
|
|
44
52
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/common/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,YAAY,CAAC,EAAE,gBAAgB,CAAC;IAChC,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,CAAC,YAAY,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAAC;CACtD;AAED,MAAM,MAAM,UAAU,GAAG,WAAW,CAAC,OAAO,UAAU,CAAC,CAAC;AAExD,eAAO,MAAM,WAAW,EAAE,UAAU,EAAsC,CAAC;AAE3E,MAAM,WAAW,YAAa,SAAQ,SAAS;IAC7C,cAAc,IAAI,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,gBAAgB,CAAC;CACnC;AAED,MAAM,WAAW,OAAO;IACtB,SAAS,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC;IAClC,QAAQ,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,EAAE,UAAU,EAAE,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;CACzD;AAED,MAAM,WAAW,WAAW;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/common/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,YAAY,CAAC,EAAE,gBAAgB,CAAC;IAChC,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,CAAC,YAAY,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAAC;CACtD;AAED,MAAM,MAAM,UAAU,GAAG,WAAW,CAAC,OAAO,UAAU,CAAC,CAAC;AAExD,eAAO,MAAM,WAAW,EAAE,UAAU,EAAsC,CAAC;AAE3E,MAAM,WAAW,YAAa,SAAQ,SAAS;IAC7C,cAAc,IAAI,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,gBAAgB,CAAC;CACnC;AAED,MAAM,WAAW,OAAO;IACtB,SAAS,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC;IAClC,QAAQ,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,EAAE,UAAU,EAAE,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;CACzD;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,UAAU,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,wEAAwE;IACxE,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;CACzB"}
|
|
@@ -1,14 +1,9 @@
|
|
|
1
|
-
import { AnyType
|
|
2
|
-
/** Check if a value is a class constructor. */
|
|
3
|
-
export declare const isClass: <T>(target: AnyType) => target is TClass<T>;
|
|
4
|
-
/** Discover files matching a glob pattern. */
|
|
1
|
+
import { AnyType } from '@venizia/ignis-helpers';
|
|
5
2
|
export declare const discoverFiles: (opts: {
|
|
6
3
|
pattern: string;
|
|
7
4
|
root: string;
|
|
8
5
|
}) => Promise<string[]>;
|
|
9
|
-
/** Load classes from discovered files via dynamic import. */
|
|
10
6
|
export declare const loadClasses: (opts: {
|
|
11
7
|
files: string[];
|
|
12
|
-
root: string;
|
|
13
8
|
}) => Promise<AnyType[]>;
|
|
14
9
|
//# sourceMappingURL=boot.utility.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"boot.utility.d.ts","sourceRoot":"","sources":["../../../src/utilities/boot.utility.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"boot.utility.d.ts","sourceRoot":"","sources":["../../../src/utilities/boot.utility.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAA6B,MAAM,wBAAwB,CAAC;AAG5E,eAAO,MAAM,aAAa,EAAE,CAAC,IAAI,EAAE;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd,KAAK,OAAO,CAAC,MAAM,EAAE,CAarB,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,CAAC,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,KAAK,OAAO,CAAC,OAAO,EAAE,CA2BzE,CAAC"}
|
|
@@ -1,10 +1,5 @@
|
|
|
1
|
-
import { getError } from '@venizia/ignis-helpers';
|
|
1
|
+
import { getError, isClass } from '@venizia/ignis-helpers';
|
|
2
2
|
import { glob } from 'glob';
|
|
3
|
-
/** Check if a value is a class constructor. */
|
|
4
|
-
export const isClass = (target) => {
|
|
5
|
-
return typeof target === 'function' && target.prototype !== undefined;
|
|
6
|
-
};
|
|
7
|
-
/** Discover files matching a glob pattern. */
|
|
8
3
|
export const discoverFiles = async (opts) => {
|
|
9
4
|
const { pattern, root } = opts;
|
|
10
5
|
try {
|
|
@@ -15,17 +10,18 @@ export const discoverFiles = async (opts) => {
|
|
|
15
10
|
const errorMessage = error.message ?? 'Unknown error';
|
|
16
11
|
throw getError({
|
|
17
12
|
message: `Failed to discover files with pattern: ${pattern} | Error: ${errorMessage}`,
|
|
13
|
+
cause: error,
|
|
18
14
|
});
|
|
19
15
|
}
|
|
20
16
|
};
|
|
21
|
-
/** Load classes from discovered files via dynamic import. */
|
|
22
17
|
export const loadClasses = async (opts) => {
|
|
23
18
|
const { files } = opts;
|
|
24
19
|
const classes = [];
|
|
25
20
|
for (const file of files) {
|
|
26
21
|
try {
|
|
27
22
|
const module = await import(file);
|
|
28
|
-
|
|
23
|
+
const modules = Object.values(module);
|
|
24
|
+
for (const exported of modules) {
|
|
29
25
|
if (!isClass(exported)) {
|
|
30
26
|
continue;
|
|
31
27
|
}
|
|
@@ -34,8 +30,11 @@ export const loadClasses = async (opts) => {
|
|
|
34
30
|
}
|
|
35
31
|
catch (error) {
|
|
36
32
|
const errorMessage = error.message ?? 'Unknown error';
|
|
33
|
+
// Without the cause, a boot failure reaches the operator as a bare message: the stack of the
|
|
34
|
+
// module that actually threw - the real diagnosis - is gone.
|
|
37
35
|
throw getError({
|
|
38
36
|
message: `Failed to load file: ${file} | Error: ${errorMessage}`,
|
|
37
|
+
cause: error,
|
|
39
38
|
});
|
|
40
39
|
}
|
|
41
40
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"boot.utility.js","sourceRoot":"","sources":["../../../src/utilities/boot.utility.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,QAAQ,EAAU,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"boot.utility.js","sourceRoot":"","sources":["../../../src/utilities/boot.utility.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,QAAQ,EAAE,OAAO,EAAU,MAAM,wBAAwB,CAAC;AAC5E,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,MAAM,CAAC,MAAM,aAAa,GAGA,KAAK,EAAC,IAAI,EAAC,EAAE;IACrC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;IAE/B,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QACtE,OAAO,UAAU,CAAC;IACpB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,YAAY,GAAI,KAAe,CAAC,OAAO,IAAI,eAAe,CAAC;QACjE,MAAM,QAAQ,CAAC;YACb,OAAO,EAAE,0CAA0C,OAAO,aAAa,YAAY,EAAE;YACrF,KAAK,EAAE,KAAK;SACb,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAsD,KAAK,EAAC,IAAI,EAAC,EAAE;IACzF,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;IACvB,MAAM,OAAO,GAAsB,EAAE,CAAC;IAEtC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;YAClC,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACtC,KAAK,MAAM,QAAQ,IAAI,OAAO,EAAE,CAAC;gBAC/B,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACvB,SAAS;gBACX,CAAC;gBAED,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,YAAY,GAAI,KAAe,CAAC,OAAO,IAAI,eAAe,CAAC;YACjE,6FAA6F;YAC7F,6DAA6D;YAC7D,MAAM,QAAQ,CAAC;gBACb,OAAO,EAAE,wBAAwB,IAAI,aAAa,YAAY,EAAE;gBAChE,KAAK,EAAE,KAAK;aACb,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@venizia/ignis-boot",
|
|
3
|
-
"version": "0.0
|
|
3
|
+
"version": "0.1.0",
|
|
4
4
|
"description": "Convention-based auto-discovery and bootstrapping system for TypeScript applications. Three-phase lifecycle (configure, discover, load) using glob-based file matching and Template Method pattern. Auto-registers controllers, services, repositories, and datasources into the IoC container by file naming conventions. Inspired by LoopBack 4 boot system. Extensible via custom booters for any artifact type.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"artifact-discovery",
|
|
@@ -98,8 +98,8 @@
|
|
|
98
98
|
"test:watch": "NODE_ENV=test bun test --watch --env-file=.env.test dist/cjs/__tests__/{**/**,**}/*.test.js"
|
|
99
99
|
},
|
|
100
100
|
"dependencies": {
|
|
101
|
-
"@venizia/ignis-helpers": "^0.0
|
|
102
|
-
"@venizia/ignis-inversion": "^0.
|
|
101
|
+
"@venizia/ignis-helpers": "^0.1.0",
|
|
102
|
+
"@venizia/ignis-inversion": "^0.1.0",
|
|
103
103
|
"glob": "^13.0.6",
|
|
104
104
|
"lodash": "^4.18.1",
|
|
105
105
|
"reflect-metadata": "^0.2.2"
|
|
@@ -107,10 +107,10 @@
|
|
|
107
107
|
"devDependencies": {
|
|
108
108
|
"@types/bun": "^1.3.14",
|
|
109
109
|
"@types/lodash": "^4.17.23",
|
|
110
|
-
"@venizia/dev-configs": "^0.
|
|
111
|
-
"eslint": "^10.
|
|
112
|
-
"prettier": "^3.
|
|
113
|
-
"tsc-alias": "^1.
|
|
110
|
+
"@venizia/dev-configs": "^0.1.0",
|
|
111
|
+
"eslint": "^10.7.0",
|
|
112
|
+
"prettier": "^3.9.5",
|
|
113
|
+
"tsc-alias": "^1.9.0",
|
|
114
114
|
"typescript": "^6.0.3"
|
|
115
115
|
}
|
|
116
116
|
}
|