vona-module-a-worker 5.0.8 → 5.0.10

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.
@@ -0,0 +1,94 @@
1
+ import type { BeanScopeUtil, TypeModuleConfig } from 'vona';
2
+ import type { IDecoratorBroadcastOptions } from 'vona-module-a-broadcast';
3
+ import type { IDecoratorCacheRedisOptions } from 'vona-module-a-cache';
4
+ /** bean: end */
5
+ /** bean: begin */
6
+ import type { BeanWorker } from '../bean/bean.worker.ts';
7
+ /** broadcast: end */
8
+ /** broadcast: begin */
9
+ import type { BroadcastExitAll } from '../bean/broadcast.exitAll.ts';
10
+ import type { BroadcastReloadAll } from '../bean/broadcast.reloadAll.ts';
11
+ /** cacheRedis: end */
12
+ /** cacheRedis: begin */
13
+ import type { CacheRedisWorkerAlive } from '../bean/cacheRedis.workerAlive.ts';
14
+ import type { config } from '../config/config.ts';
15
+ /** monkey: end */
16
+ /** scope: begin */
17
+ import { BeanScopeBase } from 'vona';
18
+ /** bean: begin */
19
+ import 'vona';
20
+ import 'vona';
21
+ import 'vona';
22
+ export * from '../bean/bean.worker.ts';
23
+ declare module 'vona' {
24
+ }
25
+ declare module 'vona-module-a-worker' {
26
+ interface BeanWorker {
27
+ }
28
+ }
29
+ declare module 'vona' {
30
+ interface IBeanRecordGlobal {
31
+ worker: BeanWorker;
32
+ }
33
+ }
34
+ /** bean: end */
35
+ /** broadcast: begin */
36
+ export * from '../bean/broadcast.exitAll.ts';
37
+ export * from '../bean/broadcast.reloadAll.ts';
38
+ declare module 'vona-module-a-broadcast' {
39
+ interface IBroadcastRecord {
40
+ 'a-worker:exitAll': IDecoratorBroadcastOptions;
41
+ 'a-worker:reloadAll': IDecoratorBroadcastOptions;
42
+ }
43
+ }
44
+ declare module 'vona-module-a-worker' {
45
+ interface BroadcastExitAll {
46
+ }
47
+ interface BroadcastReloadAll {
48
+ }
49
+ }
50
+ export interface IModuleBroadcast {
51
+ exitAll: BroadcastExitAll;
52
+ reloadAll: BroadcastReloadAll;
53
+ }
54
+ /** broadcast: end */
55
+ /** cacheRedis: begin */
56
+ export * from '../bean/cacheRedis.workerAlive.ts';
57
+ declare module 'vona-module-a-cache' {
58
+ interface ICacheRedisRecord {
59
+ 'a-worker:workerAlive': IDecoratorCacheRedisOptions;
60
+ }
61
+ }
62
+ declare module 'vona-module-a-worker' {
63
+ interface CacheRedisWorkerAlive {
64
+ }
65
+ }
66
+ export interface IModuleCacheRedis {
67
+ workerAlive: CacheRedisWorkerAlive;
68
+ }
69
+ /** cacheRedis: end */
70
+ /** config: begin */
71
+ export * from '../config/config.ts';
72
+ /** config: end */
73
+ /** monkey: begin */
74
+ export * from '../monkey.ts';
75
+ export declare class ScopeModuleAWorker extends BeanScopeBase {
76
+ }
77
+ export interface ScopeModuleAWorker {
78
+ util: BeanScopeUtil;
79
+ config: TypeModuleConfig<typeof config>;
80
+ broadcast: IModuleBroadcast;
81
+ cacheRedis: IModuleCacheRedis;
82
+ }
83
+ declare module 'vona' {
84
+ interface IBeanScopeRecord {
85
+ 'a-worker': ScopeModuleAWorker;
86
+ }
87
+ interface IBeanScopeContainer {
88
+ worker: ScopeModuleAWorker;
89
+ }
90
+ interface IBeanScopeConfig {
91
+ 'a-worker': ReturnType<typeof config>;
92
+ }
93
+ }
94
+ /** scope: end */
@@ -0,0 +1,35 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ /** monkey: end */
8
+ /** scope: begin */
9
+ import { BeanScopeBase } from 'vona';
10
+ import { Scope } from 'vona-module-a-bean';
11
+ /** bean: begin */
12
+ import 'vona';
13
+ import 'vona';
14
+ import 'vona';
15
+ export * from "../bean/bean.worker.js";
16
+ /** bean: end */
17
+ /** broadcast: begin */
18
+ export * from "../bean/broadcast.exitAll.js";
19
+ export * from "../bean/broadcast.reloadAll.js";
20
+ /** broadcast: end */
21
+ /** cacheRedis: begin */
22
+ export * from "../bean/cacheRedis.workerAlive.js";
23
+ /** cacheRedis: end */
24
+ /** config: begin */
25
+ export * from "../config/config.js";
26
+ /** config: end */
27
+ /** monkey: begin */
28
+ export * from "../monkey.js";
29
+ let ScopeModuleAWorker = class ScopeModuleAWorker extends BeanScopeBase {
30
+ };
31
+ ScopeModuleAWorker = __decorate([
32
+ Scope()
33
+ ], ScopeModuleAWorker);
34
+ export { ScopeModuleAWorker };
35
+ /** scope: end */
@@ -0,0 +1,2 @@
1
+ export declare const __ThisModule__ = "a-worker";
2
+ export { ScopeModuleAWorker as ScopeModule } from './index.ts';
@@ -0,0 +1,2 @@
1
+ export const __ThisModule__ = 'a-worker';
2
+ export { ScopeModuleAWorker as ScopeModule } from "./index.js";
@@ -0,0 +1,11 @@
1
+ import { BeanBase } from 'vona';
2
+ export declare class BeanWorker extends BeanBase {
3
+ get id(): string;
4
+ setAlive(id?: string): Promise<void>;
5
+ delAlive(id?: string): Promise<void>;
6
+ getAlive(id?: string): Promise<boolean | null | undefined>;
7
+ exit(code?: number | string | null | undefined): Promise<void>;
8
+ exitAll(code?: number | string | null | undefined): Promise<void>;
9
+ reload(): Promise<void>;
10
+ reloadAll(): Promise<void>;
11
+ }
@@ -0,0 +1,60 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import cluster from 'node:cluster';
8
+ import { isNil } from '@cabloy/utils';
9
+ import { BeanBase, closeApp, uuidv4 } from 'vona';
10
+ import { Bean } from 'vona-module-a-bean';
11
+ const SymbolWorkerId = Symbol('SymbolWorkerId');
12
+ let BeanWorker = class BeanWorker extends BeanBase {
13
+ get id() {
14
+ if (this.app[SymbolWorkerId] === undefined) {
15
+ this.app[SymbolWorkerId] = uuidv4();
16
+ }
17
+ return this.app[SymbolWorkerId];
18
+ }
19
+ async setAlive(id) {
20
+ const aliveTimeout = this.scope.config.worker.alive.timeout;
21
+ const aliveTimeoutMore = this.scope.config.worker.alive.timeoutMore;
22
+ await this.scope.cacheRedis.workerAlive.set(true, id ?? this.id, { ttl: aliveTimeout + aliveTimeoutMore });
23
+ }
24
+ async delAlive(id) {
25
+ await this.scope.cacheRedis.workerAlive.del(id ?? this.id);
26
+ }
27
+ async getAlive(id) {
28
+ if (isNil(id) || id === this.id)
29
+ return true;
30
+ return await this.scope.cacheRedis.workerAlive.get(id ?? this.id);
31
+ }
32
+ async exit(code) {
33
+ await this.app.meta.close();
34
+ process.exit(code);
35
+ }
36
+ async exitAll(code) {
37
+ this.scope.broadcast.exitAll.emit({ code });
38
+ }
39
+ async reload() {
40
+ if (!cluster.worker) {
41
+ return;
42
+ // maybe throw uncaughtException
43
+ // throw new Error('Only take affect in cluster');
44
+ }
45
+ await closeApp(false);
46
+ cluster.worker.send('reload-worker');
47
+ }
48
+ async reloadAll() {
49
+ if (!cluster.worker) {
50
+ return;
51
+ // maybe throw uncaughtException
52
+ // throw new Error('Only take affect in cluster');
53
+ }
54
+ this.scope.broadcast.reloadAll.emit();
55
+ }
56
+ };
57
+ BeanWorker = __decorate([
58
+ Bean()
59
+ ], BeanWorker);
60
+ export { BeanWorker };
@@ -0,0 +1,8 @@
1
+ import type { IBroadcastExecute } from 'vona-module-a-broadcast';
2
+ import { BeanBroadcastBase } from 'vona-module-a-broadcast';
3
+ export interface TypeBroadcastExitAllJobData {
4
+ code?: number | string | null | undefined;
5
+ }
6
+ export declare class BroadcastExitAll extends BeanBroadcastBase<TypeBroadcastExitAllJobData> implements IBroadcastExecute<TypeBroadcastExitAllJobData> {
7
+ execute(data: TypeBroadcastExitAllJobData, _isEmitter?: boolean): Promise<void>;
8
+ }
@@ -0,0 +1,16 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { BeanBroadcastBase, Broadcast } from 'vona-module-a-broadcast';
8
+ let BroadcastExitAll = class BroadcastExitAll extends BeanBroadcastBase {
9
+ async execute(data, _isEmitter) {
10
+ await this.bean.worker.exit(data.code);
11
+ }
12
+ };
13
+ BroadcastExitAll = __decorate([
14
+ Broadcast()
15
+ ], BroadcastExitAll);
16
+ export { BroadcastExitAll };
@@ -0,0 +1,6 @@
1
+ import type { IBroadcastExecute } from 'vona-module-a-broadcast';
2
+ import { BeanBroadcastBase } from 'vona-module-a-broadcast';
3
+ export type TypeBroadcastReloadAllJobData = unknown;
4
+ export declare class BroadcastReloadAll extends BeanBroadcastBase<TypeBroadcastReloadAllJobData> implements IBroadcastExecute<TypeBroadcastReloadAllJobData> {
5
+ execute(_data: TypeBroadcastReloadAllJobData, _isEmitter?: boolean): Promise<void>;
6
+ }
@@ -0,0 +1,16 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { BeanBroadcastBase, Broadcast } from 'vona-module-a-broadcast';
8
+ let BroadcastReloadAll = class BroadcastReloadAll extends BeanBroadcastBase {
9
+ async execute(_data, _isEmitter) {
10
+ await this.bean.worker.reload();
11
+ }
12
+ };
13
+ BroadcastReloadAll = __decorate([
14
+ Broadcast()
15
+ ], BroadcastReloadAll);
16
+ export { BroadcastReloadAll };
@@ -0,0 +1,5 @@
1
+ import { BeanCacheRedisBase } from 'vona-module-a-cache';
2
+ export type TCacheRedisWorkerAliveKey = string;
3
+ export type TCacheRedisWorkerAliveData = boolean;
4
+ export declare class CacheRedisWorkerAlive extends BeanCacheRedisBase<TCacheRedisWorkerAliveKey, TCacheRedisWorkerAliveData> {
5
+ }
@@ -0,0 +1,13 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { BeanCacheRedisBase, CacheRedis } from 'vona-module-a-cache';
8
+ let CacheRedisWorkerAlive = class CacheRedisWorkerAlive extends BeanCacheRedisBase {
9
+ };
10
+ CacheRedisWorkerAlive = __decorate([
11
+ CacheRedis()
12
+ ], CacheRedisWorkerAlive);
13
+ export { CacheRedisWorkerAlive };
@@ -0,0 +1,9 @@
1
+ import type { VonaApplication } from 'vona';
2
+ export declare function config(app: VonaApplication): {
3
+ worker: {
4
+ alive: {
5
+ timeout: number;
6
+ timeoutMore: number;
7
+ };
8
+ };
9
+ };
@@ -0,0 +1,10 @@
1
+ export function config(app) {
2
+ return {
3
+ worker: {
4
+ alive: {
5
+ timeout: app.meta.isProd ? 3000 : 1000,
6
+ timeoutMore: app.meta.isProd ? 3000 : 1000,
7
+ },
8
+ },
9
+ };
10
+ }
@@ -0,0 +1 @@
1
+ export * from './.metadata/index.ts';
package/dist/index.js ADDED
@@ -0,0 +1 @@
1
+ export * from "./.metadata/index.js";
@@ -0,0 +1,10 @@
1
+ import type { IModule } from '@cabloy/module-info';
2
+ import type { IMonkeyAppClosed, IMonkeyModule } from 'vona';
3
+ import { BeanSimple } from 'vona';
4
+ export declare class Monkey extends BeanSimple implements IMonkeyModule, IMonkeyAppClosed {
5
+ _intervalAlive: any;
6
+ moduleLoading(_module: IModule): Promise<void>;
7
+ moduleLoaded(module: IModule): Promise<void>;
8
+ configLoaded(_module: IModule, _config: any): Promise<void>;
9
+ appClosed(): Promise<void>;
10
+ }
package/dist/monkey.js ADDED
@@ -0,0 +1,26 @@
1
+ import { BeanSimple } from 'vona';
2
+ import { __ThisModule__ } from "./.metadata/this.js";
3
+ export class Monkey extends BeanSimple {
4
+ _intervalAlive = null;
5
+ async moduleLoading(_module) { }
6
+ async moduleLoaded(module) {
7
+ if (module.info.relativeName !== __ThisModule__)
8
+ return;
9
+ const scope = this.bean.scope(__ThisModule__);
10
+ const aliveTimeout = scope.config.worker.alive.timeout;
11
+ // interval
12
+ this._intervalAlive = setInterval(async () => {
13
+ await this.app.bean.worker.setAlive();
14
+ }, aliveTimeout);
15
+ // alive
16
+ await this.app.bean.worker.setAlive();
17
+ }
18
+ async configLoaded(_module, _config) { }
19
+ async appClosed() {
20
+ await this.bean.worker.delAlive();
21
+ if (this._intervalAlive) {
22
+ clearInterval(this._intervalAlive);
23
+ }
24
+ this._intervalAlive = null;
25
+ }
26
+ }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "vona-module-a-worker",
3
3
  "type": "module",
4
- "version": "5.0.8",
4
+ "version": "5.0.10",
5
5
  "title": "a-worker",
6
6
  "vonaModule": {
7
7
  "dependencies": {},
@@ -28,8 +28,12 @@
28
28
  "dist",
29
29
  "static"
30
30
  ],
31
+ "devDependencies": {
32
+ "clean-package": "^2.2.0",
33
+ "rimraf": "^6.0.1"
34
+ },
31
35
  "scripts": {
32
- "clean": "rimraf dist tsconfig.tsbuildinfo",
33
- "tsc:publish": "npm run clean && tsc"
36
+ "clean": "rimraf dist tsconfig.build.tsbuildinfo",
37
+ "tsc:publish": "npm run clean && tsc -p tsconfig.build.json"
34
38
  }
35
39
  }