vona-module-a-startup 5.1.16 → 5.1.18
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/index.js +37 -14
- package/dist/index.js.map +1 -1
- package/dist/service/startup.d.ts +1 -0
- package/dist/service/startup.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/service/startup.ts +43 -15
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { BeanInfo, BeanBase, cast, getRuntimePathPhysicalRoot, BeanSimple, BeanScopeBase, createBeanDecorator } from 'vona';
|
|
1
|
+
import { BeanInfo, BeanBase, withIsolatedTestDatabaseDiscovery, cast, assertIsolatedTestConfig, getRuntimePathPhysicalRoot, BeanSimple, BeanScopeBase, createBeanDecorator } from 'vona';
|
|
2
2
|
import { __decorate } from 'tslib';
|
|
3
3
|
import { isNil } from '@cabloy/utils';
|
|
4
4
|
import fse from 'fs-extra';
|
|
@@ -10,13 +10,32 @@ import { BeanRedlockBase } from 'vona-module-a-redlock';
|
|
|
10
10
|
|
|
11
11
|
let ServiceStartup = class ServiceStartup extends BeanBase {
|
|
12
12
|
async appStart() {
|
|
13
|
+
// db:reset is a one-shot data preparation command, not a development server.
|
|
14
|
+
if (this.app.meta.isDev && process.env.VONA_DB_RESET === 'true') {
|
|
15
|
+
this.app.config.server.listen.disable = true;
|
|
16
|
+
}
|
|
13
17
|
// clear keys
|
|
14
18
|
await this._clearResources();
|
|
15
19
|
// run startups: not after
|
|
16
20
|
for (const startup of this._startups) {
|
|
17
21
|
const startupOptions = startup.beanOptions.options;
|
|
18
22
|
if (!startupOptions?.instance && startupOptions?.after !== true) {
|
|
19
|
-
|
|
23
|
+
// A previous dev startup may have left databaseInit's debounce key in Redis.
|
|
24
|
+
// Only the explicit reset must bypass that key to guarantee recreation.
|
|
25
|
+
const force = this.app.meta.isDev && process.env.VONA_DB_RESET === 'true' && startup.name === 'a-version:databaseInit';
|
|
26
|
+
const run = () => this.runStartup(startup.name, null, force ? {
|
|
27
|
+
force: true
|
|
28
|
+
} : undefined);
|
|
29
|
+
if (this.app.meta.env.VONA_TEST_RUN_ID && startup.name === 'a-version:databaseInit') {
|
|
30
|
+
const defaultClient = this.app.config.database.defaultClient;
|
|
31
|
+
if (typeof defaultClient !== 'string') {
|
|
32
|
+
throw new TypeError('Isolated test requires a static default database client');
|
|
33
|
+
}
|
|
34
|
+
const client = this.app.config.database.clients[defaultClient];
|
|
35
|
+
await withIsolatedTestDatabaseDiscovery(this.app, defaultClient, client, run);
|
|
36
|
+
} else {
|
|
37
|
+
await run();
|
|
38
|
+
}
|
|
20
39
|
}
|
|
21
40
|
}
|
|
22
41
|
}
|
|
@@ -42,22 +61,25 @@ let ServiceStartup = class ServiceStartup extends BeanBase {
|
|
|
42
61
|
await this._appReadyInstanceStartup(instanceName, wait);
|
|
43
62
|
}
|
|
44
63
|
}
|
|
45
|
-
//
|
|
46
|
-
if (this.app.meta.isTest) {
|
|
47
|
-
|
|
48
|
-
await this.bean.executor.newCtx(async () => {
|
|
49
|
-
await this.$scope.version.service.version.__instanceSeed(instanceName);
|
|
50
|
-
}, {
|
|
51
|
-
dbInfo: {
|
|
52
|
-
level: 1
|
|
53
|
-
},
|
|
54
|
-
instanceName
|
|
55
|
-
});
|
|
64
|
+
// Seed test runs and explicit development resets only, after instance initialization.
|
|
65
|
+
if (this.app.meta.isTest || this.app.meta.isDev && process.env.VONA_DB_RESET === 'true') {
|
|
66
|
+
await this.seedDefaultInstance();
|
|
56
67
|
}
|
|
57
68
|
}
|
|
69
|
+
async seedDefaultInstance() {
|
|
70
|
+
const instanceName = '';
|
|
71
|
+
await this.bean.executor.newCtx(async () => {
|
|
72
|
+
await this.$scope.version.service.version.__instanceSeed(instanceName);
|
|
73
|
+
}, {
|
|
74
|
+
dbInfo: {
|
|
75
|
+
level: 1
|
|
76
|
+
},
|
|
77
|
+
instanceName
|
|
78
|
+
});
|
|
79
|
+
}
|
|
58
80
|
async _appReadyInstanceStartup(instanceName, wait) {
|
|
59
81
|
const res = this.$scope.instance.service.instance.instanceStartupIsolate(instanceName, {
|
|
60
|
-
force:
|
|
82
|
+
force: this.app.meta.isDev && process.env.VONA_DB_RESET === 'true'
|
|
61
83
|
});
|
|
62
84
|
if (wait) {
|
|
63
85
|
await res;
|
|
@@ -129,6 +151,7 @@ let ServiceStartup = class ServiceStartup extends BeanBase {
|
|
|
129
151
|
}
|
|
130
152
|
async _clearResources() {
|
|
131
153
|
if (!this.app.meta.isTest) return;
|
|
154
|
+
assertIsolatedTestConfig(this.app);
|
|
132
155
|
// redis
|
|
133
156
|
await this.$scope.redis.service.redis.clearAllData();
|
|
134
157
|
// .app/public
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/service/startup.ts","../src/bean/cacheRedis.startupDebounce.ts","../src/bean/hmr.startup.ts","../src/bean/meta.redlock.ts","../src/config/config.ts","../src/.metadata/this.ts","../src/monkey.ts","../src/.metadata/index.ts","../src/lib/startup.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null],"names":["ServiceStartup","BeanBase","appStart","_clearResources","startup","_startups","startupOptions","beanOptions","options","instance","after","
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/service/startup.ts","../src/bean/cacheRedis.startupDebounce.ts","../src/bean/hmr.startup.ts","../src/bean/meta.redlock.ts","../src/config/config.ts","../src/.metadata/this.ts","../src/monkey.ts","../src/.metadata/index.ts","../src/lib/startup.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null],"names":["ServiceStartup","BeanBase","appStart","app","meta","isDev","process","env","VONA_DB_RESET","config","server","listen","disable","_clearResources","startup","_startups","startupOptions","beanOptions","options","instance","after","force","name","run","runStartup","undefined","VONA_TEST_RUN_ID","defaultClient","database","TypeError","client","clients","withIsolatedTestDatabaseDiscovery","appReady","isTest","_appReadyInstanceStartup","key","instances","instanceName","configInstanceBase","wait","seedDefaultInstance","bean","executor","newCtx","$scope","version","service","__instanceSeed","dbInfo","level","res","instanceStartupIsolate","startupName","onion","onionsNormal","debounce","_runStartupInner","scope","redlock","lockIsolate","_runStartupLock","cacheKey","isNil","ctx","id","flag","cacheRedis","startupDebounce","getset","ttl","$logger","silly","pid","cast","_getBean","beanFullName","execute","transaction","runStartupInstance","appReadyInstances","getOnionsEnabledCached","assertIsolatedTestConfig","redis","clearAllData","fse","remove","publicDir","getRuntimePathPhysicalRoot","__decorate","Service","__z_BeanInfo","module","CacheRedisStartupDebounce","ServiceCacheRedisBase","CacheRedis","disableInstance","disableTransactionCompensate","HmrStartup","reload","_beanOptions","worker","Hmr","MetaRedlock","BeanRedlockBase","Meta","_app","__ThisModule__","Monkey","BeanSimple","ScopeModuleAStartup","BeanScopeBase","Scope","Startup","createBeanDecorator"],"mappings":"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"}
|
|
@@ -5,6 +5,7 @@ import type { IInstanceStartupOptions, IStartupRecord } from '../types/startup.t
|
|
|
5
5
|
export declare class ServiceStartup extends BeanBase {
|
|
6
6
|
appStart(): Promise<void>;
|
|
7
7
|
appReady(): Promise<void>;
|
|
8
|
+
private seedDefaultInstance;
|
|
8
9
|
private _appReadyInstanceStartup;
|
|
9
10
|
runStartup(startupName: string, instanceName?: keyof IInstanceRecord | null, options?: IInstanceStartupOptions): Promise<void>;
|
|
10
11
|
_runStartupLock<T extends keyof IStartupRecord>(startup: IOnionSlice<IStartupRecord, T>, instanceName?: keyof IInstanceRecord | null, options?: IInstanceStartupOptions): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"startup.d.ts","sourceRoot":"","sources":["../../src/service/startup.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,MAAM,CAAC;AAC5C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAIvD,OAAO,
|
|
1
|
+
{"version":3,"file":"startup.d.ts","sourceRoot":"","sources":["../../src/service/startup.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,MAAM,CAAC;AAC5C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAIvD,OAAO,EAEL,QAAQ,EAIT,MAAM,MAAM,CAAC;AAGd,OAAO,KAAK,EAEV,uBAAuB,EAEvB,cAAc,EACf,MAAM,qBAAqB,CAAC;AAE7B,qBACa,cAAe,SAAQ,QAAQ;IACpC,QAAQ;IAiCR,QAAQ;YA8BA,mBAAmB;YAUnB,wBAAwB;IAShC,UAAU,CACd,WAAW,EAAE,MAAM,EACnB,YAAY,CAAC,EAAE,MAAM,eAAe,GAAG,IAAI,EAC3C,OAAO,CAAC,EAAE,uBAAuB;IAoB7B,eAAe,CAAC,CAAC,SAAS,MAAM,cAAc,EAClD,OAAO,EAAE,WAAW,CAAC,cAAc,EAAE,CAAC,CAAC,EACvC,YAAY,CAAC,EAAE,MAAM,eAAe,GAAG,IAAI,EAC3C,OAAO,CAAC,EAAE,uBAAuB;IAoB7B,gBAAgB,CAAC,CAAC,SAAS,MAAM,cAAc,EACnD,OAAO,EAAE,WAAW,CAAC,cAAc,EAAE,CAAC,CAAC,EACvC,YAAY,CAAC,EAAE,MAAM,eAAe,GAAG,IAAI,EAC3C,OAAO,CAAC,EAAE,uBAAuB;IAsB7B,kBAAkB,CAAC,YAAY,EAAE,MAAM,eAAe,EAAE,OAAO,CAAC,EAAE,uBAAuB;IAmB/F,OAAO,KAAK,SAAS,GAEpB;YAEa,eAAe;CAU9B"}
|
package/package.json
CHANGED
package/src/service/startup.ts
CHANGED
|
@@ -3,7 +3,13 @@ import type { IOnionSlice } from 'vona-module-a-onion';
|
|
|
3
3
|
|
|
4
4
|
import { isNil } from '@cabloy/utils';
|
|
5
5
|
import fse from 'fs-extra';
|
|
6
|
-
import {
|
|
6
|
+
import {
|
|
7
|
+
assertIsolatedTestConfig,
|
|
8
|
+
BeanBase,
|
|
9
|
+
cast,
|
|
10
|
+
getRuntimePathPhysicalRoot,
|
|
11
|
+
withIsolatedTestDatabaseDiscovery,
|
|
12
|
+
} from 'vona';
|
|
7
13
|
import { Service } from 'vona-module-a-bean';
|
|
8
14
|
|
|
9
15
|
import type {
|
|
@@ -16,6 +22,10 @@ import type {
|
|
|
16
22
|
@Service()
|
|
17
23
|
export class ServiceStartup extends BeanBase {
|
|
18
24
|
async appStart() {
|
|
25
|
+
// db:reset is a one-shot data preparation command, not a development server.
|
|
26
|
+
if (this.app.meta.isDev && process.env.VONA_DB_RESET === 'true') {
|
|
27
|
+
this.app.config.server.listen.disable = true;
|
|
28
|
+
}
|
|
19
29
|
// clear keys
|
|
20
30
|
await this._clearResources();
|
|
21
31
|
|
|
@@ -23,7 +33,23 @@ export class ServiceStartup extends BeanBase {
|
|
|
23
33
|
for (const startup of this._startups) {
|
|
24
34
|
const startupOptions = startup.beanOptions.options;
|
|
25
35
|
if (!startupOptions?.instance && startupOptions?.after !== true) {
|
|
26
|
-
|
|
36
|
+
// A previous dev startup may have left databaseInit's debounce key in Redis.
|
|
37
|
+
// Only the explicit reset must bypass that key to guarantee recreation.
|
|
38
|
+
const force =
|
|
39
|
+
this.app.meta.isDev &&
|
|
40
|
+
process.env.VONA_DB_RESET === 'true' &&
|
|
41
|
+
startup.name === 'a-version:databaseInit';
|
|
42
|
+
const run = () => this.runStartup(startup.name, null, force ? { force: true } : undefined);
|
|
43
|
+
if (this.app.meta.env.VONA_TEST_RUN_ID && startup.name === 'a-version:databaseInit') {
|
|
44
|
+
const defaultClient = this.app.config.database.defaultClient;
|
|
45
|
+
if (typeof defaultClient !== 'string') {
|
|
46
|
+
throw new TypeError('Isolated test requires a static default database client');
|
|
47
|
+
}
|
|
48
|
+
const client = this.app.config.database.clients[defaultClient];
|
|
49
|
+
await withIsolatedTestDatabaseDiscovery(this.app, defaultClient, client, run);
|
|
50
|
+
} else {
|
|
51
|
+
await run();
|
|
52
|
+
}
|
|
27
53
|
}
|
|
28
54
|
}
|
|
29
55
|
}
|
|
@@ -52,24 +78,25 @@ export class ServiceStartup extends BeanBase {
|
|
|
52
78
|
}
|
|
53
79
|
}
|
|
54
80
|
|
|
55
|
-
//
|
|
56
|
-
if (this.app.meta.isTest) {
|
|
57
|
-
|
|
58
|
-
await this.bean.executor.newCtx(
|
|
59
|
-
async () => {
|
|
60
|
-
await this.$scope.version.service.version.__instanceSeed(instanceName);
|
|
61
|
-
},
|
|
62
|
-
{
|
|
63
|
-
dbInfo: { level: 1 },
|
|
64
|
-
instanceName,
|
|
65
|
-
},
|
|
66
|
-
);
|
|
81
|
+
// Seed test runs and explicit development resets only, after instance initialization.
|
|
82
|
+
if (this.app.meta.isTest || (this.app.meta.isDev && process.env.VONA_DB_RESET === 'true')) {
|
|
83
|
+
await this.seedDefaultInstance();
|
|
67
84
|
}
|
|
68
85
|
}
|
|
69
86
|
|
|
87
|
+
private async seedDefaultInstance() {
|
|
88
|
+
const instanceName = '';
|
|
89
|
+
await this.bean.executor.newCtx(
|
|
90
|
+
async () => {
|
|
91
|
+
await this.$scope.version.service.version.__instanceSeed(instanceName);
|
|
92
|
+
},
|
|
93
|
+
{ dbInfo: { level: 1 }, instanceName },
|
|
94
|
+
);
|
|
95
|
+
}
|
|
96
|
+
|
|
70
97
|
private async _appReadyInstanceStartup(instanceName: keyof IInstanceRecord, wait: boolean) {
|
|
71
98
|
const res = this.$scope.instance.service.instance.instanceStartupIsolate(instanceName, {
|
|
72
|
-
force:
|
|
99
|
+
force: this.app.meta.isDev && process.env.VONA_DB_RESET === 'true',
|
|
73
100
|
});
|
|
74
101
|
if (wait) {
|
|
75
102
|
await res;
|
|
@@ -172,6 +199,7 @@ export class ServiceStartup extends BeanBase {
|
|
|
172
199
|
|
|
173
200
|
private async _clearResources() {
|
|
174
201
|
if (!this.app.meta.isTest) return;
|
|
202
|
+
assertIsolatedTestConfig(this.app);
|
|
175
203
|
// redis
|
|
176
204
|
await this.$scope.redis.service.redis.clearAllData();
|
|
177
205
|
// .app/public
|