vona-module-a-startup 5.1.15 → 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/.metadata/index.d.ts.map +1 -1
- 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/.metadata/index.ts +19 -22
- package/src/service/startup.ts +43 -15
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/.metadata/index.ts"],"names":[],"mappings":"AACA,qBAAqB;AACrB,cAAc,uBAAuB,CAAC;AAEtC,OAAO,oBAAoB,CAAC;AAC5B,OAAO,QAAQ,oBAAoB,CAAC;IAEhC,UAAiB,cAAc;QAC7B,mBAAmB,EAAE,KAAK,CAAC;KAC5B;CAGJ;AACD,OAAO,QAAQ,uBAAuB,CAAC;IAE/B,UAAiB,cAAc;KAG9B;IAEC,UAAiB,cAAc;QAC7B,IAAI,aAAa,IAAI,2BAA2B,CAAC;QACjD,IAAI,UAAU,IAAI,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/.metadata/index.ts"],"names":[],"mappings":"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"}
|
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":";;;;;;;;;;AAsBO,IAAMA,cAAc,GAApB,MAAMA,cAAe,SAAQC,QAAQ,CAAA;EAC1C,MAAMC,QAAQA,GAAA;AACZ;AACA,IAAA,IAAI,IAAI,CAACC,GAAG,CAACC,IAAI,CAACC,KAAK,IAAIC,OAAO,CAACC,GAAG,CAACC,aAAa,KAAK,MAAM,EAAE;MAC/D,IAAI,CAACL,GAAG,CAACM,MAAM,CAACC,MAAM,CAACC,MAAM,CAACC,OAAO,GAAG,IAAI;AAC9C,IAAA;AACA;AACA,IAAA,MAAM,IAAI,CAACC,eAAe,EAAE;AAE5B;AACA,IAAA,KAAK,MAAMC,OAAO,IAAI,IAAI,CAACC,SAAS,EAAE;AACpC,MAAA,MAAMC,cAAc,GAAGF,OAAO,CAACG,WAAW,CAACC,OAAO;MAClD,IAAI,CAACF,cAAc,EAAEG,QAAQ,IAAIH,cAAc,EAAEI,KAAK,KAAK,IAAI,EAAE;AAC/D;AACA;QACA,MAAMC,KAAK,GACT,IAAI,CAAClB,GAAG,CAACC,IAAI,CAACC,KAAK,IACnBC,OAAO,CAACC,GAAG,CAACC,aAAa,KAAK,MAAM,IACpCM,OAAO,CAACQ,IAAI,KAAK,wBAAwB;AAC3C,QAAA,MAAMC,GAAG,GAAGA,MAAM,IAAI,CAACC,UAAU,CAACV,OAAO,CAACQ,IAAI,EAAE,IAAI,EAAED,KAAK,GAAG;AAAEA,UAAAA,KAAK,EAAE;SAAM,GAAGI,SAAS,CAAC;AAC1F,QAAA,IAAI,IAAI,CAACtB,GAAG,CAACC,IAAI,CAACG,GAAG,CAACmB,gBAAgB,IAAIZ,OAAO,CAACQ,IAAI,KAAK,wBAAwB,EAAE;UACnF,MAAMK,aAAa,GAAG,IAAI,CAACxB,GAAG,CAACM,MAAM,CAACmB,QAAQ,CAACD,aAAa;AAC5D,UAAA,IAAI,OAAOA,aAAa,KAAK,QAAQ,EAAE;AACrC,YAAA,MAAM,IAAIE,SAAS,CAAC,yDAAyD,CAAC;AAChF,UAAA;AACA,UAAA,MAAMC,MAAM,GAAG,IAAI,CAAC3B,GAAG,CAACM,MAAM,CAACmB,QAAQ,CAACG,OAAO,CAACJ,aAAa,CAAC;UAC9D,MAAMK,iCAAiC,CAAC,IAAI,CAAC7B,GAAG,EAAEwB,aAAa,EAAEG,MAAM,EAAEP,GAAG,CAAC;AAC/E,QAAA,CAAC,MAAM;UACL,MAAMA,GAAG,EAAE;AACb,QAAA;AACF,MAAA;AACF,IAAA;AACF,EAAA;EAEA,MAAMU,QAAQA,GAAA;AACZ;AACA,IAAA,KAAK,MAAMnB,OAAO,IAAI,IAAI,CAACC,SAAS,EAAE;AACpC,MAAA,MAAMC,cAAc,GAAGF,OAAO,CAACG,WAAW,CAACC,OAAO;MAClD,IAAI,CAACF,cAAc,EAAEG,QAAQ,IAAIH,cAAc,EAAEI,KAAK,KAAK,IAAI,EAAE;QAC/D,MAAM,IAAI,CAACI,UAAU,CAACV,OAAO,CAACQ,IAAI,EAAE,IAAI,CAAC;AAC3C,MAAA;AACF,IAAA;AAEA;AACA,IAAA,IAAI,IAAI,CAACnB,GAAG,CAACC,IAAI,CAAC8B,MAAM,IAAI,IAAI,CAAC/B,GAAG,CAACC,IAAI,CAACC,KAAK,EAAE;AAC/C,MAAA,MAAM,IAAI,CAAC8B,wBAAwB,CAAC,EAAE,EAAE,IAAI,CAAC;AAC/C,IAAA,CAAC,MAAM;AACL;AACA,MAAA,KAAK,MAAMC,GAAG,IAAI,IAAI,CAACjC,GAAG,CAACM,MAAM,CAACU,QAAQ,CAACkB,SAAS,EAAE;QACpD,MAAMC,YAAY,GAAGF,GAA4B;AACjD,QAAA,MAAMG,kBAAkB,GAAG,IAAI,CAACpC,GAAG,CAACM,MAAM,CAACU,QAAQ,CAACkB,SAAS,CAACC,YAAY,CAAC;QAC3E,IAAIC,kBAAkB,KAAK,KAAK,EAAE;AAClC;AACA,QAAA,MAAMC,IAAI,GAAG,IAAI,CAACrC,GAAG,CAACM,MAAM,CAACC,MAAM,CAACC,MAAM,CAACC,OAAO;AAClD,QAAA,MAAM,IAAI,CAACuB,wBAAwB,CAACG,YAAY,EAAEE,IAAI,CAAC;AACzD,MAAA;AACF,IAAA;AAEA;IACA,IAAI,IAAI,CAACrC,GAAG,CAACC,IAAI,CAAC8B,MAAM,IAAK,IAAI,CAAC/B,GAAG,CAACC,IAAI,CAACC,KAAK,IAAIC,OAAO,CAACC,GAAG,CAACC,aAAa,KAAK,MAAO,EAAE;AACzF,MAAA,MAAM,IAAI,CAACiC,mBAAmB,EAAE;AAClC,IAAA;AACF,EAAA;EAEQ,MAAMA,mBAAmBA,GAAA;IAC/B,MAAMH,YAAY,GAAG,EAAE;IACvB,MAAM,IAAI,CAACI,IAAI,CAACC,QAAQ,CAACC,MAAM,CAC7B,YAAW;AACT,MAAA,MAAM,IAAI,CAACC,MAAM,CAACC,OAAO,CAACC,OAAO,CAACD,OAAO,CAACE,cAAc,CAACV,YAAY,CAAC;AACxE,IAAA,CAAC,EACD;AAAEW,MAAAA,MAAM,EAAE;AAAEC,QAAAA,KAAK,EAAE;OAAG;AAAEZ,MAAAA;AAAY,KAAE,CACvC;AACH,EAAA;AAEQ,EAAA,MAAMH,wBAAwBA,CAACG,YAAmC,EAAEE,IAAa,EAAA;AACvF,IAAA,MAAMW,GAAG,GAAG,IAAI,CAACN,MAAM,CAAC1B,QAAQ,CAAC4B,OAAO,CAAC5B,QAAQ,CAACiC,sBAAsB,CAACd,YAAY,EAAE;AACrFjB,MAAAA,KAAK,EAAE,IAAI,CAAClB,GAAG,CAACC,IAAI,CAACC,KAAK,IAAIC,OAAO,CAACC,GAAG,CAACC,aAAa,KAAK;AAC7D,KAAA,CAAC;AACF,IAAA,IAAIgC,IAAI,EAAE;AACR,MAAA,MAAMW,GAAG;AACX,IAAA;AACF,EAAA;AAEA,EAAA,MAAM3B,UAAUA,CACd6B,WAAmB,EACnBf,YAA2C,EAC3CpB,OAAiC,EAAA;AAEjC,IAAA,MAAMJ,OAAO,GAAG,IAAI,CAAC4B,IAAI,CAACY,KAAK,CAACxC,OAAO,CAACyC,YAAY,CAACF,WAAW,CAAC;AACjE,IAAA,MAAMrC,cAAc,GAAGF,OAAO,CAACG,WAAW,CAACC,OAAmC;AAC9E;AACA,IAAA,IAAI,CAACF,cAAc,CAACwC,QAAQ,EAAE;MAC5B,OAAO,MAAM,IAAI,CAACC,gBAAgB,CAAC3C,OAAO,EAAEwB,YAAY,EAAEpB,OAAO,CAAC;AACpE,IAAA;AACA;AACA,IAAA,OAAO,MAAM,IAAI,CAACwC,KAAK,CAACC,OAAO,CAACC,WAAW,CACzC,CAAA,QAAA,EAAWP,WAAW,CAAA,CAAE,EACxB,YAAW;MACT,OAAO,MAAM,IAAI,CAACQ,eAAe,CAAC/C,OAAO,EAAEwB,YAAY,EAAEpB,OAAO,CAAC;AACnE,IAAA,CAAC,EACD;AACEoB,MAAAA;AACD,KAAA,CACF;AACH,EAAA;AAEA,EAAA,MAAMuB,eAAeA,CACnB/C,OAAuC,EACvCwB,YAA2C,EAC3CpB,OAAiC,EAAA;AAEjC;AACA,IAAA,IAAI,CAACA,OAAO,EAAEG,KAAK,IAAI,CAAC,IAAI,CAAClB,GAAG,CAACC,IAAI,CAAC8B,MAAM,EAAE;AAC5C,MAAA,MAAMlB,cAAc,GAAGF,OAAO,CAACG,WAAW,CAACC,OAAmC;MAC9E,MAAM4C,QAAQ,GACZ,CAAA,gBAAA,EAAmBhD,OAAO,CAACQ,IAAI,CAAA,EAAG,CAACyC,KAAK,CAACzB,YAAY,CAAC,GAAG,CAAA,CAAA,EAAI,IAAI,CAAC0B,GAAG,CAAC7C,QAAQ,CAAC8C,EAAE,CAAA,CAAE,GAAG,EAAE,CAAA,CAAW;MACrG,MAAMT,QAAQ,GACZ,OAAOxC,cAAc,CAACwC,QAAQ,KAAK,QAAQ,GACvCxC,cAAc,CAACwC,QAAQ,GACvB,IAAI,CAACE,KAAK,CAACjD,MAAM,CAACK,OAAO,CAAC0C,QAAQ;AACxC,MAAA,MAAMU,IAAI,GAAG,MAAM,IAAI,CAACR,KAAK,CAACS,UAAU,CAACC,eAAe,CAACC,MAAM,CAAC,IAAI,EAAEP,QAAQ,EAAE;AAC9EQ,QAAAA,GAAG,EAAEd;AACN,OAAA,CAAC;AACF,MAAA,IAAIU,IAAI,EAAE;AACZ,IAAA;AACA;IACA,MAAM,IAAI,CAACT,gBAAgB,CAAC3C,OAAO,EAAEwB,YAAY,EAAEpB,OAAO,CAAC;AAC7D,EAAA;AAEA,EAAA,MAAMuC,gBAAgBA,CACpB3C,OAAuC,EACvCwB,YAA2C,EAC3CpB,OAAiC,EAAA;IAEjC,IAAI,CAACqD,OAAO,CAACC,KAAK,CAChB,CAAA,OAAA,EAAU1D,OAAO,CAACG,WAAW,EAAEC,OAAO,EAAEC,QAAQ,GAAG,WAAW,GAAG,EAAE,CAAA,EAAA,EAAKL,OAAO,CAACQ,IAAI,CAAA,OAAA,EAAUhB,OAAO,CAACmE,GAAG,CAAA,CAAE,CAC5G;AACD,IAAA,MAAMzD,cAAc,GAAGF,OAAO,CAACG,WAAW,CAACC,OAAmC;AAC9E;IACA,OAAO,MAAM,IAAI,CAACwB,IAAI,CAACC,QAAQ,CAACC,MAAM,CACpC,YAAW;AACT,MAAA,MAAMF,IAAI,GAAGgC,IAAI,CACf,IAAI,CAAChC,IAAI,CAACiC,QAAQ,CAAC7D,OAAO,CAACG,WAAW,CAAC2D,YAAmB,CAAC,CAC5D;AACD,MAAA,MAAMlC,IAAI,CAACmC,OAAO,CAAC3D,OAAO,CAAC;AAC7B,IAAA,CAAC,EACD;AACE+B,MAAAA,MAAM,EAAE;AAAEC,QAAAA,KAAK,EAAE;OAAG;MACpBZ,YAAY;MACZwC,WAAW,EAAE9D,cAAc,CAAC8D;AAC7B,KAAA,CACF;AACH,EAAA;AAEA,EAAA,MAAMC,kBAAkBA,CAACzC,YAAmC,EAAEpB,OAAiC,EAAA;AAC7F;AACA,IAAA,KAAK,MAAMJ,OAAO,IAAI,IAAI,CAACC,SAAS,EAAE;AACpC,MAAA,MAAMC,cAAc,GAAGF,OAAO,CAACG,WAAW,CAACC,OAAO;MAClD,IAAIF,cAAc,EAAEG,QAAQ,IAAIH,cAAc,EAAEI,KAAK,KAAK,IAAI,EAAE;QAC9D,MAAM,IAAI,CAACI,UAAU,CAACV,OAAO,CAACQ,IAAI,EAAEgB,YAAY,EAAEpB,OAAO,CAAC;AAC5D,MAAA;AACF,IAAA;AACA;IACA,IAAI,CAACf,GAAG,CAACC,IAAI,CAAC4E,iBAAiB,CAAC1C,YAAY,CAAC,GAAG,IAAI;AACpD;AACA,IAAA,KAAK,MAAMxB,OAAO,IAAI,IAAI,CAACC,SAAS,EAAE;AACpC,MAAA,MAAMC,cAAc,GAAGF,OAAO,CAACG,WAAW,CAACC,OAAO;MAClD,IAAIF,cAAc,EAAEG,QAAQ,IAAIH,cAAc,EAAEI,KAAK,KAAK,IAAI,EAAE;QAC9D,MAAM,IAAI,CAACI,UAAU,CAACV,OAAO,CAACQ,IAAI,EAAEgB,YAAY,EAAEpB,OAAO,CAAC;AAC5D,MAAA;AACF,IAAA;AACF,EAAA;EAEA,IAAYH,SAASA,GAAA;IACnB,OAAO,IAAI,CAAC2B,IAAI,CAACY,KAAK,CAACxC,OAAO,CAACmE,sBAAsB,EAAE;AACzD,EAAA;EAEQ,MAAMpE,eAAeA,GAAA;IAC3B,IAAI,CAAC,IAAI,CAACV,GAAG,CAACC,IAAI,CAAC8B,MAAM,EAAE;AAC3BgD,IAAAA,wBAAwB,CAAC,IAAI,CAAC/E,GAAG,CAAC;AAClC;AACA,IAAA,MAAM,IAAI,CAAC0C,MAAM,CAACsC,KAAK,CAACpC,OAAO,CAACoC,KAAK,CAACC,YAAY,EAAE;AACpD;AACA,IAAA,MAAMC,GAAG,CAACC,MAAM,CAAC,IAAI,CAACnF,GAAG,CAACM,MAAM,CAACC,MAAM,CAAC6E,SAAS,CAAC;AAClD;IACA,MAAMF,GAAG,CAACC,MAAM,CAACE,0BAA0B,CAAC,IAAI,CAACrF,GAAG,CAAC,CAAC;AACxD,EAAA;;AA1LWH,cAAc,GAAAyF,UAAA,CAAA,CAD1BC,OAAO,EAAE,EAAAC,QAAA,CAAA;EAAAC,MAAA,EAAA;AAAA,CAAA,CAAA,CACG,EAAA5F,cAAc,CA2L1B;;ACvMM,IAAM6F,yBAAyB,GAA/B,MAAMA,yBAA0B,SAAQC,qBAG9C,CAAA;AAHYD,yBAAyB,GAAAJ,UAAA,CAAA,CALrCM,UAAU,CAAC;AACVC,EAAAA,eAAe,EAAE,IAAI;AACrBC,EAAAA,4BAA4B,EAAE,IAAI;AAClCnE,EAAAA,MAAM,EAAE;CACT,CAAC,EAAA6D,QAAA,CAAA;EAAAC,MAAA,EAAA;AAAA,CAAA,CAAA,CACW,EAAAC,yBAAyB,CAGlC;;ACNG,IAAMK,UAAU,GAAhB,MAAMA,UAAW,SAAQjG,QAAQ,CAAA;EACtC,MAAMkG,MAAMA,CAACC,YAAuC,EAAA;IAClD,IAAI,CAACjG,GAAG,CAACuC,IAAI,CAAC2D,MAAM,CAACF,MAAM,EAAE;AAC/B,EAAA;;AAHWD,UAAU,GAAAT,UAAA,CAAA,CADtBa,GAAG,EAAE,EAAAX,QAAA,CAAA;EAAAC,MAAA,EAAA;AAAA,CAAA,CAAA,CACO,EAAAM,UAAU,CAItB;;ACJM,IAAMK,WAAW,GAAjB,MAAMA,WAAY,SAAQC,eAGhC,CAAA;AAHYD,WAAW,GAAAd,UAAA,CAAA,CADvBgB,IAAI,EAAE,EAAAd,QAAA,CAAA;EAAAC,MAAA,EAAA;AAAA,CAAA,CAAA,CACM,EAAAW,WAAW,CAGpB;;ACRE,SAAU9F,MAAMA,CAACiG,IAAqB,EAAA;EAC1C,OAAO;AACL5F,IAAAA,OAAO,EAAE;MACP0C,QAAQ,EAAE,EAAE,GAAG;AAChB;GACF;AACH;;ACRO,MAAMmD,cAAc,GAAG,WAAW;;ACMnC,MAAOC,MAAO,SAAQC,UAAU,CAAA;EACpC,MAAM3G,QAAQA,GAAA;AACZ,IAAA,MAAM,IAAI,CAACC,GAAG,CAACuD,KAAK,CAACiD,cAAc,CAAC,CAAC5D,OAAO,CAACjC,OAAO,CAACZ,QAAQ,EAAE;AACjE,EAAA;EAEA,MAAM+B,QAAQA,GAAA;AACZ,IAAA,MAAM,IAAI,CAAC9B,GAAG,CAACuD,KAAK,CAACiD,cAAc,CAAC,CAAC5D,OAAO,CAACjC,OAAO,CAACmB,QAAQ,EAAE;AACjE,EAAA;AACD;;AC4HM,IAAM6E,mBAAmB,GAAzB,MAAMA,mBAAoB,SAAQC,aAAa,CAAA;AAAzCD,mBAAmB,GAAArB,UAAA,CAAA,CAD/BuB,KAAK,EAAE,EAAArB,QAAA,CAAA;EAAAC,MAAA,EAAA;AAAA,CAAA,CAAA,CACK,EAAAkB,mBAAmB,CAAyB;AA4BzD;;AClKM,SAAUG,OAAOA,CAAC/F,OAAkC,EAAA;AACxD,EAAA,OAAOgG,mBAAmB,CAAC,SAAS,EAAEhG,OAAO,CAAC;AAChD;;"}
|
|
@@ -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/.metadata/index.ts
CHANGED
|
@@ -4,15 +4,15 @@ export * from '../service/startup.ts';
|
|
|
4
4
|
|
|
5
5
|
import 'vona-module-a-bean';
|
|
6
6
|
declare module 'vona-module-a-bean' {
|
|
7
|
-
|
|
7
|
+
|
|
8
8
|
export interface IServiceRecord {
|
|
9
9
|
'a-startup:startup': never;
|
|
10
10
|
}
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
|
|
13
13
|
}
|
|
14
14
|
declare module 'vona-module-a-startup' {
|
|
15
|
-
|
|
15
|
+
|
|
16
16
|
export interface ServiceStartup {
|
|
17
17
|
/** @internal */
|
|
18
18
|
get scope(): ScopeModuleAStartup;
|
|
@@ -21,8 +21,7 @@ declare module 'vona-module-a-startup' {
|
|
|
21
21
|
export interface ServiceStartup {
|
|
22
22
|
get $beanFullName(): 'a-startup.service.startup';
|
|
23
23
|
get $onionName(): 'a-startup:startup';
|
|
24
|
-
|
|
25
|
-
}
|
|
24
|
+
}
|
|
26
25
|
}
|
|
27
26
|
/** service: end */
|
|
28
27
|
/** service: begin */
|
|
@@ -45,15 +44,15 @@ export * from '../bean/cacheRedis.startupDebounce.ts';
|
|
|
45
44
|
|
|
46
45
|
import { type IDecoratorCacheRedisOptions } from 'vona-module-a-cache';
|
|
47
46
|
declare module 'vona-module-a-cache' {
|
|
48
|
-
|
|
47
|
+
|
|
49
48
|
export interface ICacheRedisRecord {
|
|
50
49
|
'a-startup:startupDebounce': IDecoratorCacheRedisOptions;
|
|
51
50
|
}
|
|
52
51
|
|
|
53
|
-
|
|
52
|
+
|
|
54
53
|
}
|
|
55
54
|
declare module 'vona-module-a-startup' {
|
|
56
|
-
|
|
55
|
+
|
|
57
56
|
export interface CacheRedisStartupDebounce {
|
|
58
57
|
/** @internal */
|
|
59
58
|
get scope(): ScopeModuleAStartup;
|
|
@@ -63,7 +62,7 @@ declare module 'vona-module-a-startup' {
|
|
|
63
62
|
get $beanFullName(): 'a-startup.cacheRedis.startupDebounce';
|
|
64
63
|
get $onionName(): 'a-startup:startupDebounce';
|
|
65
64
|
get $onionOptions(): IDecoratorCacheRedisOptions;
|
|
66
|
-
}
|
|
65
|
+
}
|
|
67
66
|
}
|
|
68
67
|
/** cacheRedis: end */
|
|
69
68
|
/** cacheRedis: begin */
|
|
@@ -77,15 +76,15 @@ export * from '../bean/hmr.startup.ts';
|
|
|
77
76
|
|
|
78
77
|
import 'vona';
|
|
79
78
|
declare module 'vona' {
|
|
80
|
-
|
|
79
|
+
|
|
81
80
|
export interface IHmrRecord {
|
|
82
81
|
'a-startup:startup': never;
|
|
83
82
|
}
|
|
84
83
|
|
|
85
|
-
|
|
84
|
+
|
|
86
85
|
}
|
|
87
86
|
declare module 'vona-module-a-startup' {
|
|
88
|
-
|
|
87
|
+
|
|
89
88
|
export interface HmrStartup {
|
|
90
89
|
/** @internal */
|
|
91
90
|
get scope(): ScopeModuleAStartup;
|
|
@@ -94,8 +93,7 @@ declare module 'vona-module-a-startup' {
|
|
|
94
93
|
export interface HmrStartup {
|
|
95
94
|
get $beanFullName(): 'a-startup.hmr.startup';
|
|
96
95
|
get $onionName(): 'a-startup:startup';
|
|
97
|
-
|
|
98
|
-
}
|
|
96
|
+
}
|
|
99
97
|
}
|
|
100
98
|
/** hmr: end */
|
|
101
99
|
/** meta: begin */
|
|
@@ -103,15 +101,15 @@ export * from '../bean/meta.redlock.ts';
|
|
|
103
101
|
|
|
104
102
|
import 'vona-module-a-meta';
|
|
105
103
|
declare module 'vona-module-a-meta' {
|
|
106
|
-
|
|
104
|
+
|
|
107
105
|
export interface IMetaRecord {
|
|
108
106
|
'a-startup:redlock': never;
|
|
109
107
|
}
|
|
110
108
|
|
|
111
|
-
|
|
109
|
+
|
|
112
110
|
}
|
|
113
111
|
declare module 'vona-module-a-startup' {
|
|
114
|
-
|
|
112
|
+
|
|
115
113
|
export interface MetaRedlock {
|
|
116
114
|
/** @internal */
|
|
117
115
|
get scope(): ScopeModuleAStartup;
|
|
@@ -120,8 +118,7 @@ declare module 'vona-module-a-startup' {
|
|
|
120
118
|
export interface MetaRedlock {
|
|
121
119
|
get $beanFullName(): 'a-startup.meta.redlock';
|
|
122
120
|
get $onionName(): 'a-startup:redlock';
|
|
123
|
-
|
|
124
|
-
}
|
|
121
|
+
}
|
|
125
122
|
}
|
|
126
123
|
/** meta: end */
|
|
127
124
|
/** meta redlock: begin */
|
|
@@ -158,13 +155,13 @@ declare module 'vona' {
|
|
|
158
155
|
export interface IBeanScopeContainer {
|
|
159
156
|
startup: ScopeModuleAStartup;
|
|
160
157
|
}
|
|
161
|
-
|
|
158
|
+
|
|
162
159
|
export interface IBeanScopeConfig {
|
|
163
160
|
'a-startup': ReturnType<typeof config>;
|
|
164
161
|
}
|
|
165
162
|
|
|
166
|
-
|
|
167
163
|
|
|
168
|
-
|
|
164
|
+
|
|
165
|
+
|
|
169
166
|
}
|
|
170
167
|
/** scope: end */
|
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
|