@antelopejs/interface-core 0.0.8 → 0.0.9
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/errors.d.ts +8 -0
- package/dist/errors.js +13 -1
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/modules.js +2 -0
- package/dist/modules.js.map +1 -1
- package/dist/proxies.d.ts +13 -0
- package/dist/proxies.js +52 -10
- package/dist/proxies.js.map +1 -1
- package/dist/tests/module-ownership-context.test.d.ts +1 -0
- package/dist/tests/module-ownership-context.test.js +197 -0
- package/dist/tests/module-ownership-context.test.js.map +1 -0
- package/docs/2.proxies.md +18 -1
- package/package.json +1 -1
package/dist/errors.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export declare const MISSING_PROVIDER_CODE = "ERR_NO_PROVIDER";
|
|
2
|
+
export declare const MODULE_CONTEXT_INVALIDATED_CODE = "ERR_MODULE_CONTEXT_INVALIDATED";
|
|
2
3
|
/**
|
|
3
4
|
* Error emitted when a proxy is used without an attached provider in test
|
|
4
5
|
* stub mode.
|
|
@@ -11,6 +12,13 @@ export declare class MissingProviderError extends Error {
|
|
|
11
12
|
readonly code = "ERR_NO_PROVIDER";
|
|
12
13
|
constructor(detail?: string);
|
|
13
14
|
}
|
|
15
|
+
/**
|
|
16
|
+
* Error emitted when work inherited ownership from a destroyed module.
|
|
17
|
+
*/
|
|
18
|
+
export declare class ModuleContextInvalidatedError extends Error {
|
|
19
|
+
readonly code = "ERR_MODULE_CONTEXT_INVALIDATED";
|
|
20
|
+
constructor(module: string);
|
|
21
|
+
}
|
|
14
22
|
/**
|
|
15
23
|
* Type guard for {@link MissingProviderError}.
|
|
16
24
|
*
|
package/dist/errors.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.MissingProviderError = exports.MISSING_PROVIDER_CODE = void 0;
|
|
3
|
+
exports.ModuleContextInvalidatedError = exports.MissingProviderError = exports.MODULE_CONTEXT_INVALIDATED_CODE = exports.MISSING_PROVIDER_CODE = void 0;
|
|
4
4
|
exports.isMissingProviderError = isMissingProviderError;
|
|
5
5
|
exports.MISSING_PROVIDER_CODE = "ERR_NO_PROVIDER";
|
|
6
|
+
exports.MODULE_CONTEXT_INVALIDATED_CODE = "ERR_MODULE_CONTEXT_INVALIDATED";
|
|
6
7
|
const MISSING_PROVIDER_MESSAGE = "Interface function called without implementation in test environment. " +
|
|
7
8
|
"Ensure the required module is loaded in your test config.";
|
|
8
9
|
/**
|
|
@@ -21,6 +22,17 @@ class MissingProviderError extends Error {
|
|
|
21
22
|
}
|
|
22
23
|
}
|
|
23
24
|
exports.MissingProviderError = MissingProviderError;
|
|
25
|
+
/**
|
|
26
|
+
* Error emitted when work inherited ownership from a destroyed module.
|
|
27
|
+
*/
|
|
28
|
+
class ModuleContextInvalidatedError extends Error {
|
|
29
|
+
code = exports.MODULE_CONTEXT_INVALIDATED_CODE;
|
|
30
|
+
constructor(module) {
|
|
31
|
+
super(`Module context has been invalidated: ${module}`);
|
|
32
|
+
this.name = "ModuleContextInvalidatedError";
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
exports.ModuleContextInvalidatedError = ModuleContextInvalidatedError;
|
|
24
36
|
/**
|
|
25
37
|
* Whether the value is an error, including one built in another realm.
|
|
26
38
|
*
|
package/dist/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":";;;AAyDA,wDAOC;AAhEY,QAAA,qBAAqB,GAAG,iBAAiB,CAAC;AAC1C,QAAA,+BAA+B,GAAG,gCAAgC,CAAC;AAEhF,MAAM,wBAAwB,GAC5B,wEAAwE;IACxE,2DAA2D,CAAC;AAE9D;;;;;;;GAOG;AACH,MAAa,oBAAqB,SAAQ,KAAK;IAC7B,IAAI,GAAG,6BAAqB,CAAC;IAE7C,YAAmB,MAAe;QAChC,KAAK,CAAC,MAAM,IAAI,wBAAwB,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACrC,CAAC;CACF;AAPD,oDAOC;AAED;;GAEG;AACH,MAAa,6BAA8B,SAAQ,KAAK;IACtC,IAAI,GAAG,uCAA+B,CAAC;IAEvD,YAAmB,MAAc;QAC/B,KAAK,CAAC,wCAAwC,MAAM,EAAE,CAAC,CAAC;QACxD,IAAI,CAAC,IAAI,GAAG,+BAA+B,CAAC;IAC9C,CAAC;CACF;AAPD,sEAOC;AAED;;;;;;;GAOG;AACH,SAAS,OAAO,CAAC,KAAc;IAC7B,OAAO,CACL,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,gBAAgB;QAC1D,KAAK,YAAY,KAAK,CACvB,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,SAAgB,sBAAsB,CACpC,KAAc;IAEd,OAAO,CACL,OAAO,CAAC,KAAK,CAAC;QACb,KAA8B,CAAC,IAAI,KAAK,6BAAqB,CAC/D,CAAC;AACJ,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import "reflect-metadata";
|
|
|
2
2
|
import type { Class } from "./decorators";
|
|
3
3
|
import { EventProxy, RegisteringProxy } from "./proxies";
|
|
4
4
|
export * from "./errors";
|
|
5
|
-
export { AsyncProxy, EventProxy, GetResponsibleModule, RegisteringProxy, } from "./proxies";
|
|
5
|
+
export { AsyncProxy, EventProxy, GetResponsibleModule, RegisteringProxy, RunWithResponsibleModule, } from "./proxies";
|
|
6
6
|
/**
|
|
7
7
|
* Gets metadata for a target object using the specified metadata class.
|
|
8
8
|
*
|
package/dist/index.js
CHANGED
|
@@ -14,7 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.RegisteringProxy = exports.GetResponsibleModule = exports.EventProxy = exports.AsyncProxy = void 0;
|
|
17
|
+
exports.RunWithResponsibleModule = exports.RegisteringProxy = exports.GetResponsibleModule = exports.EventProxy = exports.AsyncProxy = void 0;
|
|
18
18
|
exports.GetMetadata = GetMetadata;
|
|
19
19
|
exports.InterfaceFunction = InterfaceFunction;
|
|
20
20
|
exports.ImplementInterface = ImplementInterface;
|
|
@@ -30,6 +30,7 @@ Object.defineProperty(exports, "AsyncProxy", { enumerable: true, get: function (
|
|
|
30
30
|
Object.defineProperty(exports, "EventProxy", { enumerable: true, get: function () { return proxies_2.EventProxy; } });
|
|
31
31
|
Object.defineProperty(exports, "GetResponsibleModule", { enumerable: true, get: function () { return proxies_2.GetResponsibleModule; } });
|
|
32
32
|
Object.defineProperty(exports, "RegisteringProxy", { enumerable: true, get: function () { return proxies_2.RegisteringProxy; } });
|
|
33
|
+
Object.defineProperty(exports, "RunWithResponsibleModule", { enumerable: true, get: function () { return proxies_2.RunWithResponsibleModule; } });
|
|
33
34
|
internal_1.internal.asyncContextReporter = (trace) => {
|
|
34
35
|
const lastSite = trace[trace.length - 1];
|
|
35
36
|
if (lastSite?.getFileName() !== "node:internal/timers") {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AA8CA,kCAuBC;AAYD,8CAQC;AAgED,gDAmBC;AAeD,sDAOC;AAWD,oDAUC;AAvND,4BAA0B;AAE1B,yCAAsC;AACtC,uCAAoC;AACpC,uCAKmB;AAEnB,2CAAyB;AACzB,qCAMmB;AALjB,qGAAA,UAAU,OAAA;AACV,qGAAA,UAAU,OAAA;AACV,+GAAA,oBAAoB,OAAA;AACpB,2GAAA,gBAAgB,OAAA;AAChB,mHAAA,wBAAwB,OAAA;AAG1B,mBAAQ,CAAC,oBAAoB,GAAG,CAAC,KAAwB,EAAE,EAAE;IAC3D,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACzC,IAAI,QAAQ,EAAE,WAAW,EAAE,KAAK,sBAAsB,EAAE,CAAC;QACvD,OAAO;IACT,CAAC;IACD,MAAM,QAAQ,GAAG,KAAK;SACnB,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,UAAU,CAAC,gBAAgB,CAAC,CAAC;SACnE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;SAC9B,IAAI,CAAC,UAAU,CAAC,CAAC;IACpB,iBAAO,CAAC,KAAK,CACX,kGAAkG;QAChG,QAAQ,CACX,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;;;;;;GAUG;AACH,SAAgB,WAAW,CAGzB,MAAS,EAAE,IAAqC,EAAE,OAAO,GAAG,IAAI;IAChE,IAAI,IAAI,GAAG,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAM,CAAC;IACzD,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC;QACxB,MAAM,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAC5C,IAAI,OAAO,IAAI,KAAK,EAAE,CAAC;YACrB,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YAC9C,IAAI,SAAS,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;gBAC5D,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACvB,CAAC;iBAAM,CAAC;gBACN,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAgB,EAAE,CAAC;oBACpE,IAAI,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,EAAE,CAAC;wBACnB,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;oBAC1B,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAID;;;;;;;GAOG;AACH,SAAgB,iBAAiB;IAI/B,MAAM,KAAK,GAAG,IAAI,oBAAU,EAAQ,CAAC;IACrC,MAAM,IAAI,GAAG,CAAC,GAAG,IAAmB,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;IAC7D,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACnB,OAAO,IAAI,CAAC;AACd,CAAC;AAoBD,SAAS,SAAS,CAAC,IAAyB,EAAE,IAAyB;IACrE,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;YAChB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;YACtB,IAAI,GAAG,YAAY,0BAAgB,EAAE,CAAC;gBACpC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;gBACnC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC;YACzC,CAAC;iBAAM,IAAI,OAAO,GAAG,KAAK,UAAU,IAAI,GAAG,CAAC,KAAK,YAAY,oBAAU,EAAE,CAAC;gBAC3D,GAAG,CAAC,KAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YAC5C,CAAC;iBAAM,IAAI,GAAG,YAAY,oBAAU,EAAE,CAAC;gBACrC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YACxB,CAAC;iBAAM,IAAI,CAAC,CAAC,GAAG,YAAY,oBAAU,CAAC,EAAE,CAAC;gBACxC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AA4BD,SAAgB,kBAAkB,CAIhC,WAA2B,EAC3B,cAAgC;IAIhC,IAAI,WAAW,YAAY,OAAO,IAAI,cAAc,YAAY,OAAO,EAAE,CAAC;QACxE,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE;YACtE,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACtB,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,cAAc,EAAE,IAAU,EAAE,CAAC;QAC3D,CAAC,CAAC,CAAC;IACL,CAAC;IACD,MAAM,IAAI,GAAG,WAAW,CAAC;IACzB,MAAM,IAAI,GAAG,cAAqC,CAAC;IACnD,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACtB,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,cAAc,EAAE,IAAU,EAAE,CAAC;AAC3D,CAAC;AAOD;;;;;;;GAOG;AACH,SAAgB,qBAAqB,CACnC,WAAmB;IAEnB,MAAM,MAAM,GAAG,IAAA,8BAAoB,GAAE,CAAC;IACtC,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,IAAI,mBAAQ,CAAC,oBAAoB,CAAC;QAAE,OAAO,EAAE,CAAC;IACrE,MAAM,WAAW,GAAG,mBAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC1D,OAAO,WAAW,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;AACxC,CAAC;AAED;;;;;;;;GAQG;AACH,SAAgB,oBAAoB,CAClC,WAAmB,EACnB,YAAoB;IAEpB,MAAM,MAAM,GAAG,IAAA,8BAAoB,GAAE,CAAC;IACtC,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,IAAI,mBAAQ,CAAC,oBAAoB,CAAC;QAAE,OAAO;IAClE,MAAM,WAAW,GAAG,mBAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC1D,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAC1C,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,KAAK,YAAY,CAC/C,CAAC;AACJ,CAAC"}
|
package/dist/modules.js
CHANGED
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.ReloadModule = exports.DestroyModule = exports.StopModule = exports.StartModule = exports.LoadModule = exports.GetModuleInfo = exports.ListModules = exports.Events = void 0;
|
|
4
4
|
const _1 = require(".");
|
|
5
5
|
const internal_1 = require("./internal");
|
|
6
|
+
const proxies_1 = require("./proxies");
|
|
6
7
|
/**
|
|
7
8
|
* Contains events related to module lifecycle management.
|
|
8
9
|
*
|
|
@@ -50,6 +51,7 @@ var Events;
|
|
|
50
51
|
})(Events || (exports.Events = Events = {}));
|
|
51
52
|
// Using the Events namespace from modules.ts instead of the lowercase events
|
|
52
53
|
Events.ModuleDestroyed.register((module) => {
|
|
54
|
+
(0, proxies_1.InvalidateResponsibleModule)(module);
|
|
53
55
|
if (internal_1.internal.knownAsync.has(module)) {
|
|
54
56
|
for (const proxy of internal_1.internal.knownAsync.get(module) ?? []) {
|
|
55
57
|
proxy.detach();
|
package/dist/modules.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"modules.js","sourceRoot":"","sources":["../src/modules.ts"],"names":[],"mappings":";;;AAAA,wBAAkD;AAClD,yCAAsC;
|
|
1
|
+
{"version":3,"file":"modules.js","sourceRoot":"","sources":["../src/modules.ts"],"names":[],"mappings":";;;AAAA,wBAAkD;AAClD,yCAAsC;AACtC,uCAAwD;AAExD;;;;;GAKG;AACH,IAAiB,MAAM,CAwCtB;AAxCD,WAAiB,MAAM;IACrB;;;;;;;OAOG;IACU,wBAAiB,GAAG,IAAI,aAAU,EAA4B,CAAC;IAE5E;;;;;;;OAOG;IACU,oBAAa,GAAG,IAAI,aAAU,EAA4B,CAAC;IAExE;;;;;;;OAOG;IACU,oBAAa,GAAG,IAAI,aAAU,EAA4B,CAAC;IAExE;;;;;;;OAOG;IACU,sBAAe,GAAG,IAAI,aAAU,EAA4B,CAAC;AAC5E,CAAC,EAxCgB,MAAM,sBAAN,MAAM,QAwCtB;AAED,6EAA6E;AAC7E,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,EAAE;IACzC,IAAA,qCAA2B,EAAC,MAAM,CAAC,CAAC;IACpC,IAAI,mBAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QACpC,KAAK,MAAM,KAAK,IAAI,mBAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;YAC1D,KAAK,CAAC,MAAM,EAAE,CAAC;QACjB,CAAC;QACD,mBAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC;IACD,IAAI,mBAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QACxC,KAAK,MAAM,KAAK,IAAI,mBAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;YAC9D,KAAK,CAAC,MAAM,EAAE,CAAC;QACjB,CAAC;QACD,mBAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACzC,CAAC;IACD,KAAK,MAAM,CAAC,EAAE,OAAO,CAAC,IAAI,mBAAQ,CAAC,cAAc,EAAE,CAAC;QAClD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,mBAAQ,CAAC,WAAW,EAAE,CAAC;QACzC,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACjC,CAAC;AACH,CAAC,CAAC,CAAC;AAuDH;;;;;;;GAOG;AACU,QAAA,WAAW,GAAG,IAAA,oBAAiB,GAAkB,CAAC;AAE/D;;;;;;;;GAQG;AACU,QAAA,aAAa,GACxB,IAAA,oBAAiB,GAAkC,CAAC;AAEtD;;;;;;;;;GASG;AACU,QAAA,UAAU,GACrB,IAAA,oBAAiB,GAMd,CAAC;AAEN;;;;;;;;GAQG;AACU,QAAA,WAAW,GAAG,IAAA,oBAAiB,GAA4B,CAAC;AAEzE;;;;;;;;GAQG;AACU,QAAA,UAAU,GAAG,IAAA,oBAAiB,GAA4B,CAAC;AAExE;;;;;;;;GAQG;AACU,QAAA,aAAa,GAAG,IAAA,oBAAiB,GAA4B,CAAC;AAE3E;;;;;;;;;GASG;AACU,QAAA,YAAY,GAAG,IAAA,oBAAiB,GAA4B,CAAC"}
|
package/dist/proxies.d.ts
CHANGED
|
@@ -1,4 +1,17 @@
|
|
|
1
1
|
type Func<A extends any[] = any[], R = any> = (...args: A) => R;
|
|
2
|
+
/** @internal */
|
|
3
|
+
export declare function InvalidateResponsibleModule(module: string): void;
|
|
4
|
+
/**
|
|
5
|
+
* Runs work with an explicit responsible module.
|
|
6
|
+
*
|
|
7
|
+
* The module remains available to nested synchronous and asynchronous work.
|
|
8
|
+
* Calls outside this context continue to use stack-based module resolution.
|
|
9
|
+
*
|
|
10
|
+
* @param module Module ID responsible for the work
|
|
11
|
+
* @param callback Work to run in the module context
|
|
12
|
+
* @returns The callback result
|
|
13
|
+
*/
|
|
14
|
+
export declare function RunWithResponsibleModule<T>(module: string, callback: () => T): T;
|
|
2
15
|
/**
|
|
3
16
|
* Proxy for an asynchronous function.
|
|
4
17
|
*
|
package/dist/proxies.js
CHANGED
|
@@ -1,10 +1,51 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.EventProxy = exports.RegisteringProxy = exports.AsyncProxy = void 0;
|
|
4
|
+
exports.InvalidateResponsibleModule = InvalidateResponsibleModule;
|
|
5
|
+
exports.RunWithResponsibleModule = RunWithResponsibleModule;
|
|
4
6
|
exports.GetResponsibleModule = GetResponsibleModule;
|
|
7
|
+
const node_async_hooks_1 = require("node:async_hooks");
|
|
5
8
|
const errors_1 = require("./errors");
|
|
6
9
|
const internal_1 = require("./internal");
|
|
7
10
|
const responsible_module_1 = require("./responsible-module");
|
|
11
|
+
const responsibleModuleContext = new node_async_hooks_1.AsyncLocalStorage();
|
|
12
|
+
const activeResponsibleModuleTokens = new Map();
|
|
13
|
+
function getResponsibleModuleToken(module) {
|
|
14
|
+
const activeToken = activeResponsibleModuleTokens.get(module);
|
|
15
|
+
if (activeToken) {
|
|
16
|
+
return activeToken;
|
|
17
|
+
}
|
|
18
|
+
const token = Symbol(module);
|
|
19
|
+
activeResponsibleModuleTokens.set(module, token);
|
|
20
|
+
return token;
|
|
21
|
+
}
|
|
22
|
+
function assertActiveContext(context) {
|
|
23
|
+
if (activeResponsibleModuleTokens.get(context.module) !== context.token) {
|
|
24
|
+
throw new errors_1.ModuleContextInvalidatedError(context.module);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/** @internal */
|
|
28
|
+
function InvalidateResponsibleModule(module) {
|
|
29
|
+
activeResponsibleModuleTokens.delete(module);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Runs work with an explicit responsible module.
|
|
33
|
+
*
|
|
34
|
+
* The module remains available to nested synchronous and asynchronous work.
|
|
35
|
+
* Calls outside this context continue to use stack-based module resolution.
|
|
36
|
+
*
|
|
37
|
+
* @param module Module ID responsible for the work
|
|
38
|
+
* @param callback Work to run in the module context
|
|
39
|
+
* @returns The callback result
|
|
40
|
+
*/
|
|
41
|
+
function RunWithResponsibleModule(module, callback) {
|
|
42
|
+
const inheritedContext = responsibleModuleContext.getStore();
|
|
43
|
+
if (inheritedContext) {
|
|
44
|
+
assertActiveContext(inheritedContext);
|
|
45
|
+
}
|
|
46
|
+
const context = { module, token: getResponsibleModuleToken(module) };
|
|
47
|
+
return responsibleModuleContext.run(context, callback);
|
|
48
|
+
}
|
|
8
49
|
/**
|
|
9
50
|
* Proxy for an asynchronous function.
|
|
10
51
|
*
|
|
@@ -24,12 +65,10 @@ class AsyncProxy {
|
|
|
24
65
|
* @param manualDetach Don't detach automatically when module is unloaded
|
|
25
66
|
*/
|
|
26
67
|
onCall(callback, manualDetach) {
|
|
68
|
+
const caller = manualDetach ? undefined : GetResponsibleModule();
|
|
27
69
|
this.callback = callback;
|
|
28
|
-
if (
|
|
29
|
-
|
|
30
|
-
if (caller) {
|
|
31
|
-
internal_1.internal.addAsyncProxy(caller, this);
|
|
32
|
-
}
|
|
70
|
+
if (caller) {
|
|
71
|
+
internal_1.internal.addAsyncProxy(caller, this);
|
|
33
72
|
}
|
|
34
73
|
if (this.queue.length > 0) {
|
|
35
74
|
this.queue.forEach(({ args, resolve, reject }) => {
|
|
@@ -89,12 +128,10 @@ class RegisteringProxy {
|
|
|
89
128
|
* @param manualDetach Don't detach automatically
|
|
90
129
|
*/
|
|
91
130
|
onRegister(callback, manualDetach) {
|
|
131
|
+
const caller = manualDetach ? undefined : GetResponsibleModule();
|
|
92
132
|
this.registerCallback = callback;
|
|
93
|
-
if (
|
|
94
|
-
|
|
95
|
-
if (caller) {
|
|
96
|
-
internal_1.internal.addRegisteringProxy(caller, this);
|
|
97
|
-
}
|
|
133
|
+
if (caller) {
|
|
134
|
+
internal_1.internal.addRegisteringProxy(caller, this);
|
|
98
135
|
}
|
|
99
136
|
for (const [id, { args }] of this.registered) {
|
|
100
137
|
try {
|
|
@@ -248,6 +285,11 @@ function captureCallStack(startFrame = 0) {
|
|
|
248
285
|
* @returns The module ID or undefined if no module is found
|
|
249
286
|
*/
|
|
250
287
|
function GetResponsibleModule(startFrame = 0) {
|
|
288
|
+
const explicitContext = responsibleModuleContext.getStore();
|
|
289
|
+
if (explicitContext) {
|
|
290
|
+
assertActiveContext(explicitContext);
|
|
291
|
+
return explicitContext.module;
|
|
292
|
+
}
|
|
251
293
|
const trace = captureCallStack(startFrame);
|
|
252
294
|
const responsible = (0, responsible_module_1.findResponsibleFile)(trace);
|
|
253
295
|
if (responsible.module) {
|
package/dist/proxies.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proxies.js","sourceRoot":"","sources":["../src/proxies.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"proxies.js","sourceRoot":"","sources":["../src/proxies.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const chai_1 = require("chai");
|
|
4
|
+
const __1 = require("..");
|
|
5
|
+
const errors_1 = require("../errors");
|
|
6
|
+
const internal_1 = require("../internal");
|
|
7
|
+
const modules_1 = require("../modules");
|
|
8
|
+
function runDetached(module, callback) {
|
|
9
|
+
return new Promise((resolve) => {
|
|
10
|
+
(0, __1.RunWithResponsibleModule)(module, () => {
|
|
11
|
+
setImmediate(() => {
|
|
12
|
+
try {
|
|
13
|
+
callback();
|
|
14
|
+
resolve(undefined);
|
|
15
|
+
}
|
|
16
|
+
catch (error) {
|
|
17
|
+
resolve(error);
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
describe("explicit module ownership", () => {
|
|
24
|
+
let testStubMode;
|
|
25
|
+
beforeEach(() => {
|
|
26
|
+
testStubMode = internal_1.internal.testStubMode;
|
|
27
|
+
internal_1.internal.knownAsync.clear();
|
|
28
|
+
internal_1.internal.knownRegisters.clear();
|
|
29
|
+
});
|
|
30
|
+
afterEach(() => {
|
|
31
|
+
internal_1.internal.testStubMode = testStubMode;
|
|
32
|
+
});
|
|
33
|
+
it("resolves without capturing a stack", () => {
|
|
34
|
+
const captureStackTrace = Error.captureStackTrace;
|
|
35
|
+
let captures = 0;
|
|
36
|
+
Error.captureStackTrace = (...args) => {
|
|
37
|
+
captures += 1;
|
|
38
|
+
captureStackTrace(...args);
|
|
39
|
+
};
|
|
40
|
+
try {
|
|
41
|
+
(0, chai_1.expect)((0, __1.RunWithResponsibleModule)("module-a", () => (0, __1.GetResponsibleModule)())).to.equal("module-a");
|
|
42
|
+
(0, chai_1.expect)(captures).to.equal(0);
|
|
43
|
+
}
|
|
44
|
+
finally {
|
|
45
|
+
Error.captureStackTrace = captureStackTrace;
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
it("retains stack resolution outside an explicit context", () => {
|
|
49
|
+
const captureStackTrace = Error.captureStackTrace;
|
|
50
|
+
let captures = 0;
|
|
51
|
+
Error.captureStackTrace = (...args) => {
|
|
52
|
+
captures += 1;
|
|
53
|
+
captureStackTrace(...args);
|
|
54
|
+
};
|
|
55
|
+
try {
|
|
56
|
+
(0, __1.GetResponsibleModule)();
|
|
57
|
+
(0, chai_1.expect)(captures).to.equal(1);
|
|
58
|
+
}
|
|
59
|
+
finally {
|
|
60
|
+
Error.captureStackTrace = captureStackTrace;
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
it("restores nested ownership", () => {
|
|
64
|
+
(0, __1.RunWithResponsibleModule)("outer", () => {
|
|
65
|
+
(0, chai_1.expect)((0, __1.GetResponsibleModule)()).to.equal("outer");
|
|
66
|
+
(0, __1.RunWithResponsibleModule)("inner", () => {
|
|
67
|
+
(0, chai_1.expect)((0, __1.GetResponsibleModule)()).to.equal("inner");
|
|
68
|
+
});
|
|
69
|
+
(0, chai_1.expect)((0, __1.GetResponsibleModule)()).to.equal("outer");
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
it("preserves ownership across asynchronous work", async () => {
|
|
73
|
+
await (0, __1.RunWithResponsibleModule)("async-module", async () => {
|
|
74
|
+
await Promise.resolve();
|
|
75
|
+
(0, chai_1.expect)((0, __1.GetResponsibleModule)()).to.equal("async-module");
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
it("does not let detached work register after module destruction", async () => {
|
|
79
|
+
const events = new __1.EventProxy();
|
|
80
|
+
let calls = 0;
|
|
81
|
+
const registration = runDetached("detached-module", () => {
|
|
82
|
+
events.register(() => {
|
|
83
|
+
calls += 1;
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
modules_1.Events.ModuleDestroyed.emit("detached-module");
|
|
87
|
+
const error = await registration;
|
|
88
|
+
events.emit();
|
|
89
|
+
(0, chai_1.expect)(error).to.be.instanceOf(__1.ModuleContextInvalidatedError);
|
|
90
|
+
(0, chai_1.expect)(calls).to.equal(0);
|
|
91
|
+
});
|
|
92
|
+
it("keeps old work invalid after reloading the same module", async () => {
|
|
93
|
+
const events = new __1.EventProxy();
|
|
94
|
+
const calls = [];
|
|
95
|
+
const oldRegistration = runDetached("reload-module", () => {
|
|
96
|
+
(0, __1.RunWithResponsibleModule)("reload-module", () => {
|
|
97
|
+
events.register(() => calls.push("old"));
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
modules_1.Events.ModuleDestroyed.emit("reload-module");
|
|
101
|
+
(0, __1.RunWithResponsibleModule)("reload-module", () => {
|
|
102
|
+
events.register(() => calls.push("new"));
|
|
103
|
+
});
|
|
104
|
+
const oldError = await oldRegistration;
|
|
105
|
+
events.emit("event");
|
|
106
|
+
(0, chai_1.expect)(oldError).to.be.instanceOf(__1.ModuleContextInvalidatedError);
|
|
107
|
+
(0, chai_1.expect)(calls).to.deep.equal(["new"]);
|
|
108
|
+
});
|
|
109
|
+
it("invalidates concurrent work from the destroyed generation", async () => {
|
|
110
|
+
const events = new __1.EventProxy();
|
|
111
|
+
const first = runDetached("concurrent-module", () => events.register(() => undefined));
|
|
112
|
+
const second = runDetached("concurrent-module", () => events.register(() => undefined));
|
|
113
|
+
modules_1.Events.ModuleDestroyed.emit("concurrent-module");
|
|
114
|
+
(0, chai_1.expect)(await first).to.be.instanceOf(__1.ModuleContextInvalidatedError);
|
|
115
|
+
(0, chai_1.expect)(await second).to.be.instanceOf(__1.ModuleContextInvalidatedError);
|
|
116
|
+
});
|
|
117
|
+
it("invalidates only the destroyed nested context", async () => {
|
|
118
|
+
const calls = [];
|
|
119
|
+
const events = new __1.EventProxy();
|
|
120
|
+
let inner;
|
|
121
|
+
const outer = (0, __1.RunWithResponsibleModule)("outer-module", () => {
|
|
122
|
+
inner = runDetached("inner-module", () => events.register(() => calls.push("inner")));
|
|
123
|
+
return runDetached("outer-module", () => events.register(() => calls.push("outer")));
|
|
124
|
+
});
|
|
125
|
+
modules_1.Events.ModuleDestroyed.emit("outer-module");
|
|
126
|
+
(0, chai_1.expect)(await outer).to.be.instanceOf(__1.ModuleContextInvalidatedError);
|
|
127
|
+
(0, chai_1.expect)(await inner).to.equal(undefined);
|
|
128
|
+
events.emit();
|
|
129
|
+
(0, chai_1.expect)(calls).to.deep.equal(["inner"]);
|
|
130
|
+
});
|
|
131
|
+
it("does not let stale providers replace a reloaded provider", async () => {
|
|
132
|
+
const proxy = new __1.AsyncProxy();
|
|
133
|
+
const staleAttachment = runDetached("provider-module", () => proxy.onCall(() => "stale"));
|
|
134
|
+
modules_1.Events.ModuleDestroyed.emit("provider-module");
|
|
135
|
+
(0, __1.RunWithResponsibleModule)("provider-module", () => proxy.onCall(() => "reloaded"));
|
|
136
|
+
(0, chai_1.expect)(await staleAttachment).to.be.instanceOf(__1.ModuleContextInvalidatedError);
|
|
137
|
+
(0, chai_1.expect)(await proxy.call()).to.equal("reloaded");
|
|
138
|
+
});
|
|
139
|
+
it("restores ownership when nested work throws", () => {
|
|
140
|
+
(0, __1.RunWithResponsibleModule)("outer", () => {
|
|
141
|
+
(0, chai_1.expect)(() => (0, __1.RunWithResponsibleModule)("inner", () => {
|
|
142
|
+
throw new Error("boom");
|
|
143
|
+
})).to.throw("boom");
|
|
144
|
+
(0, chai_1.expect)((0, __1.GetResponsibleModule)()).to.equal("outer");
|
|
145
|
+
});
|
|
146
|
+
});
|
|
147
|
+
it("detaches an async provider during module destruction", async () => {
|
|
148
|
+
const proxy = new __1.AsyncProxy();
|
|
149
|
+
(0, __1.RunWithResponsibleModule)("provider", () => proxy.onCall(() => "ready"));
|
|
150
|
+
(0, chai_1.expect)(await proxy.call()).to.equal("ready");
|
|
151
|
+
modules_1.Events.ModuleDestroyed.emit("provider");
|
|
152
|
+
internal_1.internal.testStubMode = true;
|
|
153
|
+
let rejection;
|
|
154
|
+
try {
|
|
155
|
+
await proxy.call();
|
|
156
|
+
}
|
|
157
|
+
catch (error) {
|
|
158
|
+
rejection = error;
|
|
159
|
+
}
|
|
160
|
+
(0, chai_1.expect)(rejection).to.be.instanceOf(errors_1.MissingProviderError);
|
|
161
|
+
});
|
|
162
|
+
it("cleans handlers and preserves replay attribution", () => {
|
|
163
|
+
const registrations = new __1.RegisteringProxy();
|
|
164
|
+
const events = new __1.EventProxy();
|
|
165
|
+
const registered = [];
|
|
166
|
+
const unregistered = [];
|
|
167
|
+
let eventCalls = 0;
|
|
168
|
+
(0, __1.RunWithResponsibleModule)("consumer", () => {
|
|
169
|
+
registrations.register("entry");
|
|
170
|
+
events.register(() => {
|
|
171
|
+
eventCalls += 1;
|
|
172
|
+
});
|
|
173
|
+
});
|
|
174
|
+
(0, __1.RunWithResponsibleModule)("provider", () => {
|
|
175
|
+
registrations.onRegister((id) => registered.push(id));
|
|
176
|
+
registrations.onUnregister((id) => unregistered.push(id));
|
|
177
|
+
});
|
|
178
|
+
(0, chai_1.expect)(registered).to.deep.equal(["entry"]);
|
|
179
|
+
modules_1.Events.ModuleDestroyed.emit("consumer");
|
|
180
|
+
events.emit();
|
|
181
|
+
(0, chai_1.expect)(eventCalls).to.equal(0);
|
|
182
|
+
(0, chai_1.expect)(registered).to.deep.equal(["entry"]);
|
|
183
|
+
(0, chai_1.expect)(unregistered).to.deep.equal(["entry"]);
|
|
184
|
+
});
|
|
185
|
+
it("detaches registering providers during hot reload", () => {
|
|
186
|
+
const proxy = new __1.RegisteringProxy();
|
|
187
|
+
const registrations = [];
|
|
188
|
+
(0, __1.RunWithResponsibleModule)("provider", () => proxy.onRegister(() => undefined));
|
|
189
|
+
modules_1.Events.ModuleDestroyed.emit("provider");
|
|
190
|
+
internal_1.internal.testStubMode = true;
|
|
191
|
+
(0, chai_1.expect)(() => proxy.register("entry")).to.throw();
|
|
192
|
+
(0, __1.RunWithResponsibleModule)("provider", () => proxy.onRegister((id) => registrations.push(id)));
|
|
193
|
+
(0, __1.RunWithResponsibleModule)("consumer", () => proxy.register("reloaded"));
|
|
194
|
+
(0, chai_1.expect)(registrations).to.deep.equal(["reloaded"]);
|
|
195
|
+
});
|
|
196
|
+
});
|
|
197
|
+
//# sourceMappingURL=module-ownership-context.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"module-ownership-context.test.js","sourceRoot":"","sources":["../../src/tests/module-ownership-context.test.ts"],"names":[],"mappings":"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"}
|
package/docs/2.proxies.md
CHANGED
|
@@ -218,7 +218,24 @@ import { GetResponsibleModule } from "@antelopejs/interface-core";
|
|
|
218
218
|
const moduleId = GetResponsibleModule();
|
|
219
219
|
```
|
|
220
220
|
|
|
221
|
-
> **Warning:** Calling `GetResponsibleModule` from within an async context (such as `setTimeout` or `setInterval`) breaks hot reloading. The system logs an error when this is detected.
|
|
221
|
+
> **Warning:** Calling `GetResponsibleModule` from within an async context (such as `setTimeout` or `setInterval`) without explicit ownership breaks hot reloading. The system logs an error when this is detected.
|
|
222
|
+
|
|
223
|
+
## `RunWithResponsibleModule`
|
|
224
|
+
|
|
225
|
+
`RunWithResponsibleModule` sets the responsible module explicitly for synchronous and asynchronous work. Proxy registrations made in the callback use this module directly instead of capturing and walking a stack. Nested contexts restore their parent when they complete, including when a callback throws.
|
|
226
|
+
|
|
227
|
+
```ts
|
|
228
|
+
import { RunWithResponsibleModule } from "@antelopejs/interface-core";
|
|
229
|
+
|
|
230
|
+
await RunWithResponsibleModule("my-module", async () => {
|
|
231
|
+
proxy.onCall(myHandler);
|
|
232
|
+
await initializeModule();
|
|
233
|
+
});
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
The module loader should wrap known module-owned entry points, including module evaluation and lifecycle hooks. Existing callers need no migration: outside an explicit context, `GetResponsibleModule` retains stack-based resolution as a backward-compatible fallback. Automatic proxy detachment and registration cleanup use the resolved module in both paths.
|
|
237
|
+
|
|
238
|
+
Ownership contexts are scoped to a loaded module generation. `ModuleDestroyed` invalidates that generation before cleanup, so detached asynchronous work cannot add stale providers or handlers afterward. Such work receives a `ModuleContextInvalidatedError`. A later invocation for the same module ID creates a fresh generation without reactivating older contexts.
|
|
222
239
|
|
|
223
240
|
## Next steps
|
|
224
241
|
|