@eggjs/background-task 4.0.0-beta.34 → 4.0.0-beta.36

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.
@@ -1,12 +1,16 @@
1
- import type { EggLogger, EggAppConfig } from 'egg';
2
- import type { EggObjectLifecycle } from '@eggjs/tegg-types';
3
- export declare class BackgroundTaskHelper implements EggObjectLifecycle {
4
- logger: EggLogger;
5
- timeout: number;
6
- config: EggAppConfig;
7
- private backgroundTasks;
8
- init(): Promise<void>;
9
- run(fn: () => Promise<void>): void;
10
- doPreDestroy(): Promise<void>;
11
- private sleep;
1
+ import { EggObjectLifecycle } from "@eggjs/tegg-types";
2
+ import { EggAppConfig, EggLogger } from "egg";
3
+
4
+ //#region src/BackgroundTaskHelper.d.ts
5
+ declare class BackgroundTaskHelper implements EggObjectLifecycle {
6
+ logger: EggLogger;
7
+ timeout: number;
8
+ config: EggAppConfig;
9
+ private backgroundTasks;
10
+ init(): Promise<void>;
11
+ run(fn: () => Promise<void>): void;
12
+ doPreDestroy(): Promise<void>;
13
+ private sleep;
12
14
  }
15
+ //#endregion
16
+ export { BackgroundTaskHelper };
@@ -1,114 +1,78 @@
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;
1
+ import { __decorateMetadata } from "./_virtual/_@oxc-project_runtime@0.103.0/helpers/decorateMetadata.js";
2
+ import { __decorate } from "./_virtual/_@oxc-project_runtime@0.103.0/helpers/decorate.js";
3
+ import assert from "node:assert";
4
+ import { ContextProto, Inject } from "@eggjs/core-decorator";
5
+ import { ContextHandler, EggContextLifecycleUtil } from "@eggjs/tegg-runtime";
6
+ import { AccessLevel } from "@eggjs/tegg-types";
7
+
8
+ //#region src/BackgroundTaskHelper.ts
9
+ let BackgroundTaskHelper = class BackgroundTaskHelper$1 {
10
+ logger;
11
+ timeout = 5e3;
12
+ config;
13
+ backgroundTasks = [];
14
+ async init() {
15
+ const ctx = ContextHandler.getContext();
16
+ assert(ctx, "background task helper must be init in context");
17
+ EggContextLifecycleUtil.registerObjectLifecycle(ctx, { preDestroy: async () => {
18
+ await this.doPreDestroy();
19
+ } });
20
+ if (this.config.backgroundTask?.timeout) this.timeout = this.config.backgroundTask.timeout;
21
+ }
22
+ run(fn) {
23
+ const backgroundTask = new Promise((resolve) => {
24
+ try {
25
+ fn().then(resolve).catch((e) => {
26
+ e.message = "[BackgroundTaskHelper] background throw error:" + e.message;
27
+ this.logger.error(e);
28
+ resolve();
29
+ });
30
+ } catch (e) {
31
+ e.message = "[BackgroundTaskHelper] create background throw error:" + e.message;
32
+ this.logger.error(e);
33
+ resolve();
34
+ }
35
+ });
36
+ this.backgroundTasks.push(backgroundTask);
37
+ }
38
+ async doPreDestroy() {
39
+ if (!this.backgroundTasks.length) return;
40
+ const backgroundTasks = this.backgroundTasks.slice();
41
+ if (this.timeout <= 0 || this.timeout === Infinity) await Promise.all(backgroundTasks);
42
+ else {
43
+ const { promise: timeout, resolve } = this.sleep();
44
+ await Promise.race([timeout, Promise.all(backgroundTasks)]);
45
+ resolve();
46
+ }
47
+ if (this.backgroundTasks.length !== backgroundTasks.length) {
48
+ this.backgroundTasks = this.backgroundTasks.slice(backgroundTasks.length);
49
+ return this.doPreDestroy();
50
+ }
51
+ }
52
+ sleep() {
53
+ let timer;
54
+ let promiseResolve;
55
+ const now = Date.now();
56
+ const p = new Promise((r) => {
57
+ promiseResolve = r;
58
+ timer = setTimeout(() => {
59
+ this.logger.error(`[BackgroundTaskHelper] task is timeout actual is ${Date.now() - now} expect is ${this.timeout}`);
60
+ r();
61
+ }, this.timeout);
62
+ });
63
+ function resolve() {
64
+ clearTimeout(timer);
65
+ promiseResolve();
66
+ }
67
+ return {
68
+ promise: p,
69
+ resolve
70
+ };
71
+ }
6
72
  };
7
- var __metadata = (this && this.__metadata) || function (k, v) {
8
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
- };
10
- import assert from 'node:assert';
11
- import { ContextProto, Inject } from '@eggjs/core-decorator';
12
- import { AccessLevel } from '@eggjs/tegg-types';
13
- import { ContextHandler, EggContextLifecycleUtil } from '@eggjs/tegg-runtime';
14
- let BackgroundTaskHelper = class BackgroundTaskHelper {
15
- logger;
16
- // default timeout for async task
17
- timeout = 5000;
18
- config;
19
- backgroundTasks = [];
20
- async init() {
21
- const ctx = ContextHandler.getContext();
22
- assert(ctx, 'background task helper must be init in context');
23
- EggContextLifecycleUtil.registerObjectLifecycle(ctx, {
24
- preDestroy: async () => {
25
- await this.doPreDestroy();
26
- },
27
- });
28
- if (this.config.backgroundTask?.timeout) {
29
- this.timeout = this.config.backgroundTask.timeout;
30
- }
31
- }
32
- run(fn) {
33
- const backgroundTask = new Promise((resolve) => {
34
- try {
35
- fn()
36
- // fn is resolve, resolve the task
37
- .then(resolve)
38
- .catch((e) => {
39
- e.message = '[BackgroundTaskHelper] background throw error:' + e.message;
40
- this.logger.error(e);
41
- // fn is rejected, resolve the task
42
- resolve();
43
- });
44
- }
45
- catch (e) {
46
- e.message = '[BackgroundTaskHelper] create background throw error:' + e.message;
47
- this.logger.error(e);
48
- // create task failed, resolve the task
49
- resolve();
50
- }
51
- });
52
- this.backgroundTasks.push(backgroundTask);
53
- }
54
- async doPreDestroy() {
55
- // quick quit
56
- if (!this.backgroundTasks.length)
57
- return;
58
- const backgroundTasks = this.backgroundTasks.slice();
59
- if (this.timeout <= 0 || this.timeout === Infinity) {
60
- await Promise.all(backgroundTasks);
61
- }
62
- else {
63
- const { promise: timeout, resolve } = this.sleep();
64
- await Promise.race([
65
- // not block the pre destroy process too long
66
- timeout,
67
- // ensure all background task are done before destroy the context
68
- Promise.all(backgroundTasks),
69
- ]);
70
- // always resolve the sleep promise
71
- resolve();
72
- }
73
- if (this.backgroundTasks.length !== backgroundTasks.length) {
74
- this.backgroundTasks = this.backgroundTasks.slice(backgroundTasks.length);
75
- return this.doPreDestroy();
76
- }
77
- }
78
- sleep() {
79
- let timer;
80
- let promiseResolve;
81
- const now = Date.now();
82
- const p = new Promise((r) => {
83
- promiseResolve = r;
84
- timer = setTimeout(() => {
85
- this.logger.error(`[BackgroundTaskHelper] task is timeout actual is ${Date.now() - now} expect is ${this.timeout}`);
86
- r();
87
- }, this.timeout);
88
- });
89
- function resolve() {
90
- // clear timeout and resolve the promise
91
- clearTimeout(timer);
92
- promiseResolve();
93
- }
94
- return {
95
- promise: p,
96
- resolve,
97
- };
98
- }
99
- };
100
- __decorate([
101
- Inject(),
102
- __metadata("design:type", Function)
103
- ], BackgroundTaskHelper.prototype, "logger", void 0);
104
- __decorate([
105
- Inject(),
106
- __metadata("design:type", Object)
107
- ], BackgroundTaskHelper.prototype, "config", void 0);
108
- BackgroundTaskHelper = __decorate([
109
- ContextProto({
110
- accessLevel: AccessLevel.PUBLIC,
111
- })
112
- ], BackgroundTaskHelper);
113
- export { BackgroundTaskHelper };
114
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmFja2dyb3VuZFRhc2tIZWxwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvQmFja2dyb3VuZFRhc2tIZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxNQUFNLE1BQU0sYUFBYSxDQUFDO0FBR2pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRWhELE9BQU8sRUFBRSxjQUFjLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUt2RSxJQUFNLG9CQUFvQixHQUExQixNQUFNLG9CQUFvQjtJQUUvQixNQUFNLENBQVk7SUFFbEIsaUNBQWlDO0lBQ2pDLE9BQU8sR0FBRyxJQUFJLENBQUM7SUFHZixNQUFNLENBQWU7SUFFYixlQUFlLEdBQXlCLEVBQUUsQ0FBQztJQUVuRCxLQUFLLENBQUMsSUFBSTtRQUNSLE1BQU0sR0FBRyxHQUFHLGNBQWMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUN4QyxNQUFNLENBQUMsR0FBRyxFQUFFLGdEQUFnRCxDQUFDLENBQUM7UUFDOUQsdUJBQXVCLENBQUMsdUJBQXVCLENBQUMsR0FBRyxFQUFFO1lBQ25ELFVBQVUsRUFBRSxLQUFLLElBQUksRUFBRTtnQkFDckIsTUFBTSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDNUIsQ0FBQztTQUNGLENBQUMsQ0FBQztRQUNILElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsT0FBTyxFQUFFLENBQUM7WUFDeEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUM7UUFDcEQsQ0FBQztJQUNILENBQUM7SUFFRCxHQUFHLENBQUMsRUFBdUI7UUFDekIsTUFBTSxjQUFjLEdBQUcsSUFBSSxPQUFPLENBQU8sQ0FBQyxP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
73
+ __decorate([Inject(), __decorateMetadata("design:type", Object)], BackgroundTaskHelper.prototype, "logger", void 0);
74
+ __decorate([Inject(), __decorateMetadata("design:type", Object)], BackgroundTaskHelper.prototype, "config", void 0);
75
+ BackgroundTaskHelper = __decorate([ContextProto({ accessLevel: AccessLevel.PUBLIC })], BackgroundTaskHelper);
76
+
77
+ //#endregion
78
+ export { BackgroundTaskHelper };
@@ -0,0 +1,10 @@
1
+ //#region \0@oxc-project+runtime@0.103.0/helpers/decorate.js
2
+ function __decorate(decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ 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;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ }
8
+
9
+ //#endregion
10
+ export { __decorate };
@@ -0,0 +1,7 @@
1
+ //#region \0@oxc-project+runtime@0.103.0/helpers/decorateMetadata.js
2
+ function __decorateMetadata(k, v) {
3
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
4
+ }
5
+
6
+ //#endregion
7
+ export { __decorateMetadata };
package/dist/index.d.ts CHANGED
@@ -1 +1,2 @@
1
- export * from './BackgroundTaskHelper.ts';
1
+ import { BackgroundTaskHelper } from "./BackgroundTaskHelper.js";
2
+ export { BackgroundTaskHelper };
package/dist/index.js CHANGED
@@ -1,2 +1,3 @@
1
- export * from "./BackgroundTaskHelper.js";
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYywyQkFBMkIsQ0FBQyJ9
1
+ import { BackgroundTaskHelper } from "./BackgroundTaskHelper.js";
2
+
3
+ export { BackgroundTaskHelper };
package/package.json CHANGED
@@ -1,61 +1,57 @@
1
1
  {
2
2
  "name": "@eggjs/background-task",
3
+ "version": "4.0.0-beta.36",
3
4
  "description": "background task util for tegg",
4
- "version": "4.0.0-beta.34",
5
5
  "keywords": [
6
- "egg",
7
- "typescript",
8
- "background",
9
6
  "async",
10
- "tegg"
11
- ],
12
- "type": "module",
13
- "exports": {
14
- ".": "./dist/index.js",
15
- "./package.json": "./package.json"
16
- },
17
- "files": [
18
- "dist"
7
+ "background",
8
+ "egg",
9
+ "tegg",
10
+ "typescript"
19
11
  ],
20
12
  "homepage": "https://github.com/eggjs/egg/tree/next/tegg/core/background-task",
21
13
  "bugs": {
22
14
  "url": "https://github.com/eggjs/egg/issues"
23
15
  },
16
+ "license": "MIT",
17
+ "author": "killagu <killa123@126.com>",
24
18
  "repository": {
25
19
  "type": "git",
26
- "url": "git@github.com:eggjs/egg.git",
20
+ "url": "git+https://github.com/eggjs/egg.git",
27
21
  "directory": "tegg/core/background-task"
28
22
  },
29
- "engines": {
30
- "node": ">=22.18.0"
23
+ "files": [
24
+ "dist"
25
+ ],
26
+ "type": "module",
27
+ "main": "./dist/index.js",
28
+ "module": "./dist/index.js",
29
+ "types": "./dist/index.d.ts",
30
+ "exports": {
31
+ ".": "./dist/index.js",
32
+ "./package.json": "./package.json"
31
33
  },
32
- "author": "killagu <killa123@126.com>",
33
- "license": "MIT",
34
- "dependencies": {
35
- "@eggjs/core-decorator": "4.0.0-beta.34",
36
- "@eggjs/tegg-types": "4.0.0-beta.34",
37
- "@eggjs/tegg-runtime": "4.0.0-beta.34"
34
+ "publishConfig": {
35
+ "access": "public"
38
36
  },
39
- "peerDependencies": {
40
- "egg": "4.1.0-beta.34"
37
+ "dependencies": {
38
+ "@eggjs/tegg-types": "4.0.0-beta.36",
39
+ "@eggjs/core-decorator": "4.0.0-beta.36",
40
+ "@eggjs/tegg-runtime": "4.0.0-beta.36"
41
41
  },
42
42
  "devDependencies": {
43
- "@types/node": "^24.9.1",
44
- "tsdown": "0.15.11",
43
+ "@types/node": "^24.10.2",
45
44
  "typescript": "^5.9.3",
46
- "unplugin-unused": "^0.5.4",
47
- "egg": "4.1.0-beta.34",
48
- "@eggjs/tegg-common-util": "4.0.0-beta.34"
45
+ "@eggjs/tegg-common-util": "4.0.0-beta.36",
46
+ "egg": "4.1.0-beta.36"
49
47
  },
50
- "publishConfig": {
51
- "access": "public"
48
+ "peerDependencies": {
49
+ "egg": "4.1.0-beta.36"
50
+ },
51
+ "engines": {
52
+ "node": ">=22.18.0"
52
53
  },
53
- "main": "./dist/index.js",
54
- "module": "./dist/index.js",
55
- "types": "./dist/index.d.ts",
56
54
  "scripts": {
57
- "clean": "rimraf dist *.tsbuildinfo",
58
- "build": "tsdown && npm run clean && tsc -p tsconfig.build.json",
59
- "typecheck": "tsc --noEmit"
55
+ "typecheck": "tsgo --noEmit"
60
56
  }
61
57
  }