zova-core 5.1.47 → 5.1.48

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.
@@ -5,6 +5,7 @@ export declare class AppModule extends BeanSimple {
5
5
  private modules;
6
6
  private mainInstances;
7
7
  private monkeyInstances;
8
+ private _ensureModulesMeta;
8
9
  get<K extends TypeBeanScopeRecordKeys>(moduleName: K, forceLoad?: boolean): IModule | undefined;
9
10
  get(moduleName: string, forceLoad?: boolean): IModule | undefined;
10
11
  get(moduleName: IModuleInfo, forceLoad?: boolean): IModule | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../src/core/component/module.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAMhE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAUlE,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAItD,qBAAa,SAAU,SAAQ,UAAU;IACvC,OAAO,CAAC,OAAO,CAAmD;IAClE,OAAO,CAAC,aAAa,CAAmC;IACxD,OAAO,CAAC,eAAe,CAAsE;IAS7F,GAAG,CAAC,CAAC,SAAS,uBAAuB,EAAE,UAAU,EAAE,CAAC,EAAE,SAAS,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS;IAC/F,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS;IACjE,GAAG,CAAC,UAAU,EAAE,WAAW,EAAE,SAAS,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS;IAsBhE,GAAG,CAAC,CAAC,SAAS,uBAAuB,EAAE,UAAU,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IACvE,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IACzC,GAAG,CAAC,UAAU,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAoBpD,MAAM,CAAC,CAAC,SAAS,uBAAuB,EAAE,UAAU,EAAE,CAAC,GAAG,OAAO;IACjE,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IACnC,MAAM,CAAC,UAAU,EAAE,WAAW,GAAG,OAAO;YAK1B,oBAAoB;YAcpB,QAAQ;YA8BR,aAAa;YAsBb,kBAAkB;IAIhC,OAAO,CAAC,mBAAmB;CA0G5B"}
1
+ {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../src/core/component/module.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAMhE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAWlE,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAItD,qBAAa,SAAU,SAAQ,UAAU;IACvC,OAAO,CAAC,OAAO,CAAmD;IAClE,OAAO,CAAC,aAAa,CAAmC;IACxD,OAAO,CAAC,eAAe,CAAsE;IAE7F,OAAO,CAAC,kBAAkB;IAe1B,GAAG,CAAC,CAAC,SAAS,uBAAuB,EAAE,UAAU,EAAE,CAAC,EAAE,SAAS,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS;IAC/F,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS;IACjE,GAAG,CAAC,UAAU,EAAE,WAAW,EAAE,SAAS,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS;IAuBhE,GAAG,CAAC,CAAC,SAAS,uBAAuB,EAAE,UAAU,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IACvE,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IACzC,GAAG,CAAC,UAAU,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAqBpD,MAAM,CAAC,CAAC,SAAS,uBAAuB,EAAE,UAAU,EAAE,CAAC,GAAG,OAAO;IACjE,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IACnC,MAAM,CAAC,UAAU,EAAE,WAAW,GAAG,OAAO;YAK1B,oBAAoB;YAepB,QAAQ;YA8BR,aAAa;YAsBb,kBAAkB;IAIhC,OAAO,CAAC,mBAAmB;CA8G5B"}
@@ -3,10 +3,12 @@ import type { TypeBeanScopeRecordKeys } from '../../bean/type.ts';
3
3
  import type { PluginZovaModulesMeta } from '../../types/index.ts';
4
4
  import { BeanSimple } from '../../bean/beanSimple.ts';
5
5
  export declare class SysModule extends BeanSimple {
6
- modulesMeta: PluginZovaModulesMeta;
6
+ modulesMeta: PluginZovaModulesMeta | undefined;
7
7
  private modules;
8
8
  private mainInstances;
9
9
  private monkeyInstances;
10
+ getModulesMeta(): PluginZovaModulesMeta | undefined;
11
+ private _ensureModulesMeta;
10
12
  get<K extends TypeBeanScopeRecordKeys>(moduleName: K): IModule | undefined;
11
13
  get(moduleName: string): IModule | undefined;
12
14
  get(moduleName: IModuleInfo): IModule | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../src/core/sys/module.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAMhE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,KAAK,EAKV,qBAAqB,EAEtB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAKtD,qBAAa,SAAU,SAAQ,UAAU;IAChC,WAAW,EAAE,qBAAqB,CAAC;IAC1C,OAAO,CAAC,OAAO,CAAgD;IAC/D,OAAO,CAAC,aAAa,CAAsC;IAC3D,OAAO,CAAC,eAAe,CAAqD;IAmB5E,GAAG,CAAC,CAAC,SAAS,uBAAuB,EAAE,UAAU,EAAE,CAAC,GAAG,OAAO,GAAG,SAAS;IAC1E,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS;IAC5C,GAAG,CAAC,UAAU,EAAE,WAAW,GAAG,OAAO,GAAG,SAAS;IAkB3C,GAAG,CAAC,CAAC,SAAS,uBAAuB,EAAE,UAAU,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IACvE,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IACzC,GAAG,CAAC,UAAU,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAoBpD,MAAM,CAAC,CAAC,SAAS,uBAAuB,EAAE,UAAU,EAAE,CAAC,GAAG,OAAO;IACjE,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IACnC,MAAM,CAAC,UAAU,EAAE,WAAW,GAAG,OAAO;YAW1B,kCAAkC;IAoBnC,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE;YAwBhC,oBAAoB;YAgBpB,iBAAiB;YAwCjB,aAAa;YA2Bb,kBAAkB;IAOhC,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,kBAAkB;YAUZ,eAAe;CAqG9B"}
1
+ {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../src/core/sys/module.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAMhE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,KAAK,EAKV,qBAAqB,EAEtB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAKtD,qBAAa,SAAU,SAAQ,UAAU;IAChC,WAAW,EAAE,qBAAqB,GAAG,SAAS,CAAC;IACtD,OAAO,CAAC,OAAO,CAAgD;IAC/D,OAAO,CAAC,aAAa,CAAsC;IAC3D,OAAO,CAAC,eAAe,CAAqD;IAmBrE,cAAc,IAAI,qBAAqB,GAAG,SAAS;IAI1D,OAAO,CAAC,kBAAkB;IAQ1B,GAAG,CAAC,CAAC,SAAS,uBAAuB,EAAE,UAAU,EAAE,CAAC,GAAG,OAAO,GAAG,SAAS;IAC1E,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS;IAC5C,GAAG,CAAC,UAAU,EAAE,WAAW,GAAG,OAAO,GAAG,SAAS;IAmB3C,GAAG,CAAC,CAAC,SAAS,uBAAuB,EAAE,UAAU,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IACvE,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IACzC,GAAG,CAAC,UAAU,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAqBpD,MAAM,CAAC,CAAC,SAAS,uBAAuB,EAAE,UAAU,EAAE,CAAC,GAAG,OAAO;IACjE,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IACnC,MAAM,CAAC,UAAU,EAAE,WAAW,GAAG,OAAO;YAa1B,kCAAkC;IAqBnC,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE;YAyBhC,oBAAoB;YAiBpB,iBAAiB;YAyCjB,aAAa;YA2Bb,kBAAkB;IAOhC,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,kBAAkB;YAUZ,eAAe;CAyG9B"}
@@ -1 +1 @@
1
- {"version":3,"file":"sys.d.ts","sourceRoot":"","sources":["../../../src/core/sys/sys.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElD,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAK5D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,OAAO,EAAc,OAAO,EAAE,MAAM,WAAW,CAAC;AAEhD,QAAA,MAAM,0BAA0B,eAAuC,CAAC;AACxE,QAAA,MAAM,cAAc,eAA2B,CAAC;AAEhD,qBAAa,OAAO;IAClB,OAAO,CAAC,CAAC,0BAA0B,CAAC,CAA4B;IAChE,OAAO,CAAC,CAAC,cAAc,CAAC,CAAU;IAClC,IAAI,EAAE,aAAa,CAAC;IACpB,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,UAAU,CAAC;IACnB,cAAc,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IACpC,GAAG,EAAE,aAAa,CAAC;IACnB,QAAQ,EAAE,YAAY,CAAC;;YAsBT,gBAAgB;IAqC9B,OAAO,CAAC,UAAU;IAiBX,KAAK;YAeE,cAAc;IAS5B,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,mBAAmB;IAQ3B,OAAO,CAAC,kBAAkB;CAM3B;AAcD,eAAO,MAAM,GAAG,SAAgB,CAAC"}
1
+ {"version":3,"file":"sys.d.ts","sourceRoot":"","sources":["../../../src/core/sys/sys.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElD,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAK5D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,OAAO,EAAc,OAAO,EAAE,MAAM,WAAW,CAAC;AAEhD,QAAA,MAAM,0BAA0B,eAAuC,CAAC;AACxE,QAAA,MAAM,cAAc,eAA2B,CAAC;AAEhD,qBAAa,OAAO;IAClB,OAAO,CAAC,CAAC,0BAA0B,CAAC,CAA4B;IAChE,OAAO,CAAC,CAAC,cAAc,CAAC,CAAU;IAClC,IAAI,EAAE,aAAa,CAAC;IACpB,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,UAAU,CAAC;IACnB,cAAc,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IACpC,GAAG,EAAE,aAAa,CAAC;IACnB,QAAQ,EAAE,YAAY,CAAC;;YAsBT,gBAAgB;IAqC9B,OAAO,CAAC,UAAU;IAkBX,KAAK;YAeE,cAAc;IAS5B,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,mBAAmB;IAQ3B,OAAO,CAAC,kBAAkB;CAM3B;AAcD,eAAO,MAAM,GAAG,SAAgB,CAAC"}
package/dist/index.js CHANGED
@@ -2919,7 +2919,18 @@ class SysModule extends BeanSimple {
2919
2919
  dispose() {
2920
2920
  this.modulesMeta = undefined;
2921
2921
  }
2922
+ getModulesMeta() {
2923
+ return this.modulesMeta;
2924
+ }
2925
+ _ensureModulesMeta() {
2926
+ const modulesMeta = this.modulesMeta;
2927
+ if (!modulesMeta) {
2928
+ throw new Error('module registry has been disposed');
2929
+ }
2930
+ return modulesMeta;
2931
+ }
2922
2932
  get(moduleName) {
2933
+ if (!this.modulesMeta) return undefined;
2923
2934
  // module info
2924
2935
  if (!moduleName) return undefined;
2925
2936
  const moduleInfo = typeof moduleName === 'string' ? ModuleInfo.parseInfo(moduleName) : moduleName;
@@ -2943,8 +2954,9 @@ class SysModule extends BeanSimple {
2943
2954
  // should not try check get directly
2944
2955
  // const module = this.getOnly(relativeName);
2945
2956
  // if (module) return module;
2957
+ const modulesMeta = this._ensureModulesMeta();
2946
2958
  // module
2947
- const moduleRepo = this.modulesMeta.modules[relativeName];
2959
+ const moduleRepo = modulesMeta.modules[relativeName];
2948
2960
  if (!moduleRepo) throw new Error(`module not exists: ${relativeName}`);
2949
2961
  // install
2950
2962
  await this._install(relativeName, moduleRepo);
@@ -2952,17 +2964,20 @@ class SysModule extends BeanSimple {
2952
2964
  return moduleRepo;
2953
2965
  }
2954
2966
  exists(moduleName) {
2967
+ const modulesMeta = this.modulesMeta;
2968
+ if (!modulesMeta) return false;
2955
2969
  // module info
2956
2970
  if (!moduleName) return false;
2957
2971
  const moduleInfo = typeof moduleName === 'string' ? ModuleInfo.parseInfo(moduleName) : moduleName;
2958
2972
  if (!moduleInfo) throw new Error(`invalid module name: ${moduleName}`);
2959
- const moduleRepo = this.modulesMeta.modules[moduleInfo.relativeName];
2973
+ const moduleRepo = modulesMeta.modules[moduleInfo.relativeName];
2960
2974
  return !!moduleRepo;
2961
2975
  }
2962
2976
  async _loadAllMonkeysAndSyncsAndPreloads() {
2977
+ const modulesMeta = this._ensureModulesMeta();
2963
2978
  const moduleNames = [];
2964
- for (const moduleName of this.modulesMeta.moduleNames) {
2965
- const module = this.modulesMeta.modules[moduleName];
2979
+ for (const moduleName of modulesMeta.moduleNames) {
2980
+ const module = modulesMeta.modules[moduleName];
2966
2981
  const info = module.info;
2967
2982
  const shouldLoad = process.env.SERVER || info.capabilities?.monkey || info.capabilities?.sync || info.capabilities?.preload;
2968
2983
  if (shouldLoad) {
@@ -2976,10 +2991,11 @@ class SysModule extends BeanSimple {
2976
2991
  }
2977
2992
  async loadModules(moduleNames) {
2978
2993
  if (moduleNames.length === 0) return;
2994
+ const modulesMeta = this._ensureModulesMeta();
2979
2995
  const promises = [];
2980
2996
  const moduleNamesLoading = [];
2981
2997
  for (const moduleName of moduleNames) {
2982
- const module = this.modulesMeta.modules[moduleName];
2998
+ const module = modulesMeta.modules[moduleName];
2983
2999
  if (!module) throw new Error(`module not found: ${moduleName}`);
2984
3000
  const moduleResource = module.resource;
2985
3001
  if (typeof moduleResource === 'function') {
@@ -2994,25 +3010,27 @@ class SysModule extends BeanSimple {
2994
3010
  const modulesResource = await Promise.all(promises);
2995
3011
  for (let i = 0; i < modulesResource.length; i++) {
2996
3012
  const moduleName = moduleNamesLoading[i];
2997
- this.modulesMeta.modules[moduleName].resource = modulesResource[i];
3013
+ modulesMeta.modules[moduleName].resource = modulesResource[i];
2998
3014
  }
2999
3015
  }
3000
3016
  async _requireAllSpecifics(capabilityName) {
3001
- const moduleNames = this.modulesMeta.moduleNames.filter(moduleName => {
3002
- const module = this.modulesMeta.modules[moduleName];
3017
+ const modulesMeta = this._ensureModulesMeta();
3018
+ const moduleNames = modulesMeta.moduleNames.filter(moduleName => {
3019
+ const module = modulesMeta.modules[moduleName];
3003
3020
  return module.info.capabilities?.[capabilityName];
3004
3021
  });
3005
3022
  if (moduleNames.length > 0) {
3006
3023
  this.sys.meta.logger.child('module', 'default').debug(`modules ${capabilityName}: ${moduleNames.join(',')}`);
3007
3024
  }
3008
3025
  for (const moduleName of moduleNames) {
3009
- const module = this.modulesMeta.modules[moduleName];
3026
+ const module = modulesMeta.modules[moduleName];
3010
3027
  await this._install(moduleName, module);
3011
3028
  }
3012
3029
  }
3013
3030
  async _requireAllOthers() {
3014
- for (const moduleName of this.modulesMeta.moduleNames) {
3015
- const module = this.modulesMeta.modules[moduleName];
3031
+ const modulesMeta = this._ensureModulesMeta();
3032
+ for (const moduleName of modulesMeta.moduleNames) {
3033
+ const module = modulesMeta.modules[moduleName];
3016
3034
  const info = module.info;
3017
3035
  const shouldInstall = !info.capabilities?.monkey && !info.capabilities?.sync && !info.capabilities?.preload;
3018
3036
  if (shouldInstall) {
@@ -3098,6 +3116,8 @@ class SysModule extends BeanSimple {
3098
3116
 
3099
3117
  /** @internal */
3100
3118
  async _monkeyModule(order, monkeyName, moduleTarget, ...monkeyData) {
3119
+ const modulesMeta = this.modulesMeta;
3120
+ if (!modulesMeta) return;
3101
3121
  // self: main
3102
3122
  if (moduleTarget) {
3103
3123
  const mainInstance = this.mainInstances[moduleTarget.info.relativeName];
@@ -3106,8 +3126,8 @@ class SysModule extends BeanSimple {
3106
3126
  }
3107
3127
  }
3108
3128
  // module monkey
3109
- await forEach(this.modulesMeta.moduleNames, order, async key => {
3110
- const moduleMonkey = this.modulesMeta.modules[key];
3129
+ await forEach(modulesMeta.moduleNames, order, async key => {
3130
+ const moduleMonkey = modulesMeta.modules[key];
3111
3131
  if (moduleMonkey.info.capabilities?.monkey) {
3112
3132
  const monkeyInstance = this.monkeyInstances[key];
3113
3133
  if (monkeyInstance && monkeyInstance[monkeyName]) {
@@ -3136,6 +3156,8 @@ class SysModule extends BeanSimple {
3136
3156
 
3137
3157
  /** @internal */
3138
3158
  _monkeyModuleSync(order, monkeyName, moduleTarget, ...monkeyData) {
3159
+ const modulesMeta = this.modulesMeta;
3160
+ if (!modulesMeta) return;
3139
3161
  // self: main
3140
3162
  if (moduleTarget) {
3141
3163
  const mainInstance = this.mainInstances[moduleTarget.info.relativeName];
@@ -3144,8 +3166,8 @@ class SysModule extends BeanSimple {
3144
3166
  }
3145
3167
  }
3146
3168
  // module monkey
3147
- forEachSync(this.modulesMeta.moduleNames, order, key => {
3148
- const moduleMonkey = this.modulesMeta.modules[key];
3169
+ forEachSync(modulesMeta.moduleNames, order, key => {
3170
+ const moduleMonkey = modulesMeta.modules[key];
3149
3171
  if (moduleMonkey.info.capabilities?.monkey) {
3150
3172
  const monkeyInstance = this.monkeyInstances[key];
3151
3173
  if (monkeyInstance && monkeyInstance[monkeyName]) {
@@ -3312,11 +3334,12 @@ class ZovaSys {
3312
3334
  viteHot.on('vite:beforeFullReload', hook);
3313
3335
  }
3314
3336
  if (process.env.CLIENT && typeof window !== 'undefined') {
3315
- const hook = () => {
3337
+ const hook = event => {
3338
+ if (event.persisted) return;
3316
3339
  this.close();
3317
- window.removeEventListener('beforeunload', hook);
3340
+ window.removeEventListener('pagehide', hook);
3318
3341
  };
3319
- window.addEventListener('beforeunload', hook);
3342
+ window.addEventListener('pagehide', hook);
3320
3343
  }
3321
3344
  }
3322
3345
  close() {
@@ -3867,6 +3890,14 @@ class AppModule extends BeanSimple {
3867
3890
  this.mainInstances = {};
3868
3891
  this.monkeyInstances = {};
3869
3892
  }
3893
+ _ensureModulesMeta() {
3894
+ const modulesMeta = this.sys.meta.module.getModulesMeta();
3895
+ if (!modulesMeta) {
3896
+ throw new Error('module registry has been disposed');
3897
+ }
3898
+ return modulesMeta;
3899
+ }
3900
+
3870
3901
  /** @internal */
3871
3902
  async initialize() {
3872
3903
  await this._requireAllSpecifics('preload');
@@ -3874,6 +3905,7 @@ class AppModule extends BeanSimple {
3874
3905
  await this._requireAllSpecifics('sync');
3875
3906
  }
3876
3907
  get(moduleName, forceLoad) {
3908
+ if (!this.sys.meta.module.getModulesMeta()) return undefined;
3877
3909
  // module info
3878
3910
  if (!moduleName) return undefined;
3879
3911
  const moduleInfo = typeof moduleName === 'string' ? ModuleInfo.parseInfo(moduleName) : moduleName;
@@ -3901,8 +3933,9 @@ class AppModule extends BeanSimple {
3901
3933
  // should not try check get directly
3902
3934
  // const module = this.getOnly(relativeName);
3903
3935
  // if (module) return module;
3936
+ const modulesMeta = this._ensureModulesMeta();
3904
3937
  // module
3905
- const moduleRepo = this.sys.meta.module.modulesMeta.modules[relativeName];
3938
+ const moduleRepo = modulesMeta.modules[relativeName];
3906
3939
  if (!moduleRepo) throw new Error(`module not exists: ${relativeName}`);
3907
3940
  // install
3908
3941
  await this._install(relativeName, moduleRepo);
@@ -3913,15 +3946,16 @@ class AppModule extends BeanSimple {
3913
3946
  return this.sys.meta.module.exists(moduleName);
3914
3947
  }
3915
3948
  async _requireAllSpecifics(capabilityName) {
3916
- const moduleNames = this.sys.meta.module.modulesMeta.moduleNames.filter(moduleName => {
3917
- const module = this.sys.meta.module.modulesMeta.modules[moduleName];
3949
+ const modulesMeta = this._ensureModulesMeta();
3950
+ const moduleNames = modulesMeta.moduleNames.filter(moduleName => {
3951
+ const module = modulesMeta.modules[moduleName];
3918
3952
  return module.info.capabilities?.[capabilityName];
3919
3953
  });
3920
3954
  // if (moduleNames.length > 0) {
3921
3955
  // this.sys.meta.logger.child('module', 'default').debug(`app modules: ${capabilityName}: ${moduleNames.join(',')}`);
3922
3956
  // }
3923
3957
  for (const moduleName of moduleNames) {
3924
- const module = this.sys.meta.module.modulesMeta.modules[moduleName];
3958
+ const module = modulesMeta.modules[moduleName];
3925
3959
  await this._install(moduleName, module);
3926
3960
  }
3927
3961
  }
@@ -3976,6 +4010,8 @@ class AppModule extends BeanSimple {
3976
4010
 
3977
4011
  /** @internal */
3978
4012
  async _monkeyModule(order, monkeyName, moduleTarget, ...monkeyData) {
4013
+ const modulesMeta = this.sys.meta.module.getModulesMeta();
4014
+ if (!modulesMeta) return;
3979
4015
  // self: main
3980
4016
  if (moduleTarget) {
3981
4017
  const mainInstance = this.mainInstances[moduleTarget.info.relativeName];
@@ -3987,8 +4023,8 @@ class AppModule extends BeanSimple {
3987
4023
  }
3988
4024
  }
3989
4025
  // module monkey
3990
- await forEach(this.sys.meta.module.modulesMeta.moduleNames, order, async key => {
3991
- const moduleMonkey = this.sys.meta.module.modulesMeta.modules[key];
4026
+ await forEach(modulesMeta.moduleNames, order, async key => {
4027
+ const moduleMonkey = modulesMeta.modules[key];
3992
4028
  if (moduleMonkey.info.capabilities?.monkey) {
3993
4029
  const monkeyInstance = this.monkeyInstances[key];
3994
4030
  if (monkeyInstance && monkeyInstance[monkeyName]) {
@@ -4021,6 +4057,8 @@ class AppModule extends BeanSimple {
4021
4057
 
4022
4058
  /** @internal */
4023
4059
  _monkeyModuleSync(order, monkeyName, moduleTarget, ...monkeyData) {
4060
+ const modulesMeta = this.sys.meta.module.getModulesMeta();
4061
+ if (!modulesMeta) return;
4024
4062
  // self: main
4025
4063
  if (moduleTarget) {
4026
4064
  const mainInstance = this.mainInstances[moduleTarget.info.relativeName];
@@ -4032,8 +4070,8 @@ class AppModule extends BeanSimple {
4032
4070
  }
4033
4071
  }
4034
4072
  // module monkey
4035
- forEachSync(this.sys.meta.module.modulesMeta.moduleNames, order, key => {
4036
- const moduleMonkey = this.sys.meta.module.modulesMeta.modules[key];
4073
+ forEachSync(modulesMeta.moduleNames, order, key => {
4074
+ const moduleMonkey = modulesMeta.modules[key];
4037
4075
  if (moduleMonkey.info.capabilities?.monkey) {
4038
4076
  const monkeyInstance = this.monkeyInstances[key];
4039
4077
  if (monkeyInstance && monkeyInstance[monkeyName]) {