@antelopejs/interface-core 0.1.0 → 0.2.0
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/caller-binding.d.ts +11 -0
- package/dist/caller-binding.js +97 -0
- package/dist/caller-binding.js.map +1 -0
- package/dist/config.d.ts +15 -1
- package/dist/config.js.map +1 -1
- package/dist/errors.d.ts +1 -1
- package/dist/errors.js +1 -1
- package/dist/errors.js.map +1 -1
- package/dist/internal.d.ts +8 -10
- package/dist/internal.js +1 -2
- package/dist/internal.js.map +1 -1
- package/dist/modules.d.ts +7 -0
- package/dist/modules.js +14 -2
- package/dist/modules.js.map +1 -1
- package/dist/proxies.d.ts +17 -16
- package/dist/proxies.js +86 -174
- package/dist/proxies.js.map +1 -1
- package/dist/tests/caller-context.test.js +139 -0
- package/dist/tests/caller-context.test.js.map +1 -0
- package/dist/tests/generation-cleanup.test.js +0 -2
- package/dist/tests/generation-cleanup.test.js.map +1 -1
- package/dist/tests/provider-context.test.js +0 -8
- package/dist/tests/provider-context.test.js.map +1 -1
- package/dist/tests/queue-and-cleanup.test.js +20 -5
- package/dist/tests/queue-and-cleanup.test.js.map +1 -1
- package/dist/tests/release-owner.test.d.ts +1 -0
- package/dist/tests/release-owner.test.js +34 -0
- package/dist/tests/release-owner.test.js.map +1 -0
- package/dist/tests/responsible-module.test.js +2 -2
- package/dist/tests/responsible-module.test.js.map +1 -1
- package/dist/tests/runtime-protocol.test.js +8 -11
- package/dist/tests/runtime-protocol.test.js.map +1 -1
- package/dist/tests/single-provider.test.d.ts +1 -0
- package/dist/tests/single-provider.test.js +55 -0
- package/dist/tests/single-provider.test.js.map +1 -0
- package/docs/2.proxies.md +20 -7
- package/docs/5.modules.md +1 -3
- package/docs/7.configuration.md +10 -7
- package/package.json +2 -2
- package/dist/tests/provider-routing.test.js +0 -78
- package/dist/tests/provider-routing.test.js.map +0 -1
- /package/dist/tests/{provider-routing.test.d.ts → caller-context.test.d.ts} +0 -0
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Binds the functions a caller hands to an interface proxy to the caller's
|
|
3
|
+
* module context, so they run as the caller's work whoever invokes them.
|
|
4
|
+
*
|
|
5
|
+
* Functions, and functions held in plain objects and arrays, are bound; plain
|
|
6
|
+
* data, class instances and proxies cross unchanged. A value is bound once per
|
|
7
|
+
* context, and a value that is already bound keeps its original context.
|
|
8
|
+
*/
|
|
9
|
+
export declare function bindCallerArguments<T extends unknown[]>(args: T): T;
|
|
10
|
+
/** Binds a single caller function to the caller's module context. */
|
|
11
|
+
export declare function bindCallerFunction<T extends (...args: any[]) => unknown>(callback: T): T;
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.bindCallerArguments = bindCallerArguments;
|
|
4
|
+
exports.bindCallerFunction = bindCallerFunction;
|
|
5
|
+
const node_util_1 = require("node:util");
|
|
6
|
+
const internal_1 = require("./internal");
|
|
7
|
+
const bindingsBySource = new WeakMap();
|
|
8
|
+
const boundValues = new WeakSet();
|
|
9
|
+
function hasPlainPrototype(value) {
|
|
10
|
+
if (Array.isArray(value)) {
|
|
11
|
+
return true;
|
|
12
|
+
}
|
|
13
|
+
const prototype = Object.getPrototypeOf(value);
|
|
14
|
+
return prototype === Object.prototype || prototype === null;
|
|
15
|
+
}
|
|
16
|
+
function isBindableContainer(value) {
|
|
17
|
+
return (typeof value === "object" &&
|
|
18
|
+
value !== null &&
|
|
19
|
+
!node_util_1.types.isProxy(value) &&
|
|
20
|
+
hasPlainPrototype(value));
|
|
21
|
+
}
|
|
22
|
+
function holdsFunction(value, visited) {
|
|
23
|
+
if (typeof value === "function") {
|
|
24
|
+
return true;
|
|
25
|
+
}
|
|
26
|
+
if (!isBindableContainer(value) || visited.has(value)) {
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
visited.add(value);
|
|
30
|
+
return Object.values(value).some((member) => holdsFunction(member, visited));
|
|
31
|
+
}
|
|
32
|
+
function needsBinding(value) {
|
|
33
|
+
if (typeof value === "function") {
|
|
34
|
+
return !boundValues.has(value);
|
|
35
|
+
}
|
|
36
|
+
return (isBindableContainer(value) &&
|
|
37
|
+
!boundValues.has(value) &&
|
|
38
|
+
holdsFunction(value, new Set()));
|
|
39
|
+
}
|
|
40
|
+
function createFunctionBinding(target, context) {
|
|
41
|
+
return new Proxy(target, {
|
|
42
|
+
apply: (callable, thisArg, argumentsList) => (0, internal_1.runWithCapturedModuleContext)(context, () => callable.apply(thisArg, argumentsList)),
|
|
43
|
+
construct: (callable, argumentsList, newTarget) => (0, internal_1.runWithCapturedModuleContext)(context, () => Reflect.construct(callable, argumentsList, newTarget)),
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
function createContainerBinding(target, context) {
|
|
47
|
+
return new Proxy(target, {
|
|
48
|
+
get: (container, property) => {
|
|
49
|
+
const member = container[property];
|
|
50
|
+
const descriptor = Reflect.getOwnPropertyDescriptor(container, property);
|
|
51
|
+
const isFixed = descriptor !== undefined &&
|
|
52
|
+
!descriptor.configurable &&
|
|
53
|
+
"value" in descriptor &&
|
|
54
|
+
!descriptor.writable;
|
|
55
|
+
return isFixed ? member : bindValue(member, context);
|
|
56
|
+
},
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
function bindValue(value, context) {
|
|
60
|
+
if (!needsBinding(value)) {
|
|
61
|
+
return value;
|
|
62
|
+
}
|
|
63
|
+
const cached = bindingsBySource.get(value)?.get(context);
|
|
64
|
+
if (cached) {
|
|
65
|
+
return cached;
|
|
66
|
+
}
|
|
67
|
+
const bound = typeof value === "function"
|
|
68
|
+
? createFunctionBinding(value, context)
|
|
69
|
+
: createContainerBinding(value, context);
|
|
70
|
+
const contexts = bindingsBySource.get(value) ??
|
|
71
|
+
new WeakMap();
|
|
72
|
+
contexts.set(context, bound);
|
|
73
|
+
bindingsBySource.set(value, contexts);
|
|
74
|
+
boundValues.add(bound);
|
|
75
|
+
return bound;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Binds the functions a caller hands to an interface proxy to the caller's
|
|
79
|
+
* module context, so they run as the caller's work whoever invokes them.
|
|
80
|
+
*
|
|
81
|
+
* Functions, and functions held in plain objects and arrays, are bound; plain
|
|
82
|
+
* data, class instances and proxies cross unchanged. A value is bound once per
|
|
83
|
+
* context, and a value that is already bound keeps its original context.
|
|
84
|
+
*/
|
|
85
|
+
function bindCallerArguments(args) {
|
|
86
|
+
const context = (0, internal_1.captureModuleContext)();
|
|
87
|
+
if (!context) {
|
|
88
|
+
return args;
|
|
89
|
+
}
|
|
90
|
+
return args.map((argument) => bindValue(argument, context));
|
|
91
|
+
}
|
|
92
|
+
/** Binds a single caller function to the caller's module context. */
|
|
93
|
+
function bindCallerFunction(callback) {
|
|
94
|
+
const context = (0, internal_1.captureModuleContext)();
|
|
95
|
+
return context ? bindValue(callback, context) : callback;
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=caller-binding.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"caller-binding.js","sourceRoot":"","sources":["../src/caller-binding.ts"],"names":[],"mappings":";;AAqHA,kDAMC;AAGD,gDAKC;AAnID,yCAA+C;AAE/C,yCAAgF;AAOhF,MAAM,gBAAgB,GAAG,IAAI,OAAO,EAGjC,CAAC;AACJ,MAAM,WAAW,GAAG,IAAI,OAAO,EAAiB,CAAC;AAEjD,SAAS,iBAAiB,CAAC,KAA2B;IACpD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,SAAS,GAAG,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAC/C,OAAO,SAAS,KAAK,MAAM,CAAC,SAAS,IAAI,SAAS,KAAK,IAAI,CAAC;AAC9D,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAc;IACzC,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,CAAC,iBAAS,CAAC,OAAO,CAAC,KAAK,CAAC;QACzB,iBAAiB,CAAC,KAAK,CAAC,CACzB,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,KAAc,EAAE,OAAoB;IACzD,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;QAChC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QACtD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACnB,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAC/E,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;QAChC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,KAAiB,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,CACL,mBAAmB,CAAC,KAAK,CAAC;QAC1B,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;QACvB,aAAa,CAAC,KAAK,EAAE,IAAI,GAAG,EAAE,CAAC,CAChC,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAC5B,MAAgB,EAChB,OAAwB;IAExB,OAAO,IAAI,KAAK,CAAC,MAAM,EAAE;QACvB,KAAK,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,aAAwB,EAAE,EAAE,CACrD,IAAA,uCAA4B,EAAC,OAAO,EAAE,GAAG,EAAE,CACzC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,aAAa,CAAC,CACvC;QACH,SAAS,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,EAAE,CAChD,IAAA,uCAA4B,EAAC,OAAO,EAAE,GAAG,EAAE,CACzC,OAAO,CAAC,SAAS,CAAC,QAAQ,EAAE,aAAa,EAAE,SAAS,CAAC,CACtD;KACJ,CAAC,CAAC;AACL,CAAC;AAED,SAAS,sBAAsB,CAC7B,MAAsB,EACtB,OAAwB;IAExB,OAAO,IAAI,KAAK,CAAC,MAAM,EAAE;QACvB,GAAG,EAAE,CAAC,SAAuC,EAAE,QAAQ,EAAE,EAAE;YACzD,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;YACnC,MAAM,UAAU,GAAG,OAAO,CAAC,wBAAwB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YACzE,MAAM,OAAO,GACX,UAAU,KAAK,SAAS;gBACxB,CAAC,UAAU,CAAC,YAAY;gBACxB,OAAO,IAAI,UAAU;gBACrB,CAAC,UAAU,CAAC,QAAQ,CAAC;YACvB,OAAO,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACvD,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,SAAS,SAAS,CAAC,KAAc,EAAE,OAAwB;IACzD,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,MAAM,GAAG,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;IACzD,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,MAAM,KAAK,GACT,OAAO,KAAK,KAAK,UAAU;QACzB,CAAC,CAAC,qBAAqB,CAAC,KAAiB,EAAE,OAAO,CAAC;QACnD,CAAC,CAAC,sBAAsB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC7C,MAAM,QAAQ,GACZ,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC;QAC3B,IAAI,OAAO,EAAkC,CAAC;IAChD,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC7B,gBAAgB,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACtC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACvB,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;GAOG;AACH,SAAgB,mBAAmB,CAAsB,IAAO;IAC9D,MAAM,OAAO,GAAG,IAAA,+BAAoB,GAAE,CAAC;IACvC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAM,CAAC;AACnE,CAAC;AAED,qEAAqE;AACrE,SAAgB,kBAAkB,CAChC,QAAW;IAEX,MAAM,OAAO,GAAG,IAAA,+BAAoB,GAAE,CAAC;IACvC,OAAO,OAAO,CAAC,CAAC,CAAE,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAO,CAAC,CAAC,CAAC,QAAQ,CAAC;AAClE,CAAC"}
|
package/dist/config.d.ts
CHANGED
|
@@ -73,9 +73,16 @@ export interface AntelopeConfig {
|
|
|
73
73
|
environments?: Record<string, Partial<AntelopeConfig>>;
|
|
74
74
|
test?: AntelopeTestConfig;
|
|
75
75
|
}
|
|
76
|
+
/**
|
|
77
|
+
* Binds an interface a module uses, directly or through the interfaces it uses,
|
|
78
|
+
* to one provider module. The first entry for an interface pins it; further
|
|
79
|
+
* entries are connections reached by `id`. An entry for a standalone interface
|
|
80
|
+
* may omit `source`: it then declares a connection to the self-hosted interface,
|
|
81
|
+
* built on that connection's other bindings.
|
|
82
|
+
*/
|
|
76
83
|
export interface ImportOverride {
|
|
77
84
|
interface: string;
|
|
78
|
-
source
|
|
85
|
+
source?: string;
|
|
79
86
|
id?: string;
|
|
80
87
|
}
|
|
81
88
|
export interface AntelopeModuleConfig {
|
|
@@ -84,6 +91,13 @@ export interface AntelopeModuleConfig {
|
|
|
84
91
|
config?: unknown;
|
|
85
92
|
importOverrides?: ImportOverride[] | Record<string, string>;
|
|
86
93
|
disabledExports?: string[];
|
|
94
|
+
/**
|
|
95
|
+
* Priority of this module as the default provider of the interfaces it
|
|
96
|
+
* implements, keyed by interface name. The provider with the highest priority
|
|
97
|
+
* is chosen where nothing pins the interface; unlisted interfaces have
|
|
98
|
+
* priority 0.
|
|
99
|
+
*/
|
|
100
|
+
exportPriority?: Record<string, number>;
|
|
87
101
|
}
|
|
88
102
|
export interface AntelopeLogging {
|
|
89
103
|
enabled?: boolean;
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";AAAA,sBAAsB;;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";AAAA,sBAAsB;;AAuJtB,oCAEC;AAFD,SAAgB,YAAY,CAAC,KAAkB;IAC7C,OAAO,KAAK,CAAC;AACf,CAAC"}
|
package/dist/errors.d.ts
CHANGED
|
@@ -19,7 +19,7 @@ export declare class AmbiguousProviderError extends Error {
|
|
|
19
19
|
readonly code = "ERR_AMBIGUOUS_PROVIDER";
|
|
20
20
|
constructor(proxyIdentity: string, providers: string[]);
|
|
21
21
|
}
|
|
22
|
-
/** Error emitted when an unattached proxy
|
|
22
|
+
/** Error emitted when an unattached async proxy has too many pending calls. */
|
|
23
23
|
export declare class ProviderQueueFullError extends Error {
|
|
24
24
|
readonly code = "ERR_PROVIDER_QUEUE_FULL";
|
|
25
25
|
constructor(proxyIdentity: string, limit: number);
|
package/dist/errors.js
CHANGED
|
@@ -33,7 +33,7 @@ class AmbiguousProviderError extends Error {
|
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
35
|
exports.AmbiguousProviderError = AmbiguousProviderError;
|
|
36
|
-
/** Error emitted when an unattached proxy
|
|
36
|
+
/** Error emitted when an unattached async proxy has too many pending calls. */
|
|
37
37
|
class ProviderQueueFullError extends Error {
|
|
38
38
|
code = exports.PROVIDER_QUEUE_FULL_CODE;
|
|
39
39
|
constructor(proxyIdentity, limit) {
|
package/dist/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":";;;AAmFA,wDAOC;AA1FY,QAAA,qBAAqB,GAAG,iBAAiB,CAAC;AAC1C,QAAA,uBAAuB,GAAG,wBAAwB,CAAC;AACnD,QAAA,wBAAwB,GAAG,yBAAyB,CAAC;AACrD,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,6EAA6E;AAC7E,MAAa,sBAAuB,SAAQ,KAAK;IAC/B,IAAI,GAAG,+BAAuB,CAAC;IAE/C,YAAmB,aAAqB,EAAE,SAAmB;QAC3D,KAAK,CACH,mBAAmB,aAAa,4BAA4B,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,gFAAgF,CACjK,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;IACvC,CAAC;CACF;AATD,wDASC;AAED
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":";;;AAmFA,wDAOC;AA1FY,QAAA,qBAAqB,GAAG,iBAAiB,CAAC;AAC1C,QAAA,uBAAuB,GAAG,wBAAwB,CAAC;AACnD,QAAA,wBAAwB,GAAG,yBAAyB,CAAC;AACrD,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,6EAA6E;AAC7E,MAAa,sBAAuB,SAAQ,KAAK;IAC/B,IAAI,GAAG,+BAAuB,CAAC;IAE/C,YAAmB,aAAqB,EAAE,SAAmB;QAC3D,KAAK,CACH,mBAAmB,aAAa,4BAA4B,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,gFAAgF,CACjK,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;IACvC,CAAC;CACF;AATD,wDASC;AAED,+EAA+E;AAC/E,MAAa,sBAAuB,SAAQ,KAAK;IAC/B,IAAI,GAAG,gCAAwB,CAAC;IAEhD,YAAmB,aAAqB,EAAE,KAAa;QACrD,KAAK,CACH,mBAAmB,aAAa,QAAQ,KAAK,yCAAyC,CACvF,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;IACvC,CAAC;CACF;AATD,wDASC;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/internal.d.ts
CHANGED
|
@@ -1,15 +1,18 @@
|
|
|
1
1
|
import { AsyncLocalStorage } from "node:async_hooks";
|
|
2
|
-
export declare const RUNTIME_PROTOCOL_VERSION =
|
|
2
|
+
export declare const RUNTIME_PROTOCOL_VERSION = 4;
|
|
3
3
|
export declare const RUNTIME_SYMBOL: unique symbol;
|
|
4
4
|
/** Provider connection metadata visible to an interface consumer. */
|
|
5
5
|
export interface InterfaceConnection {
|
|
6
6
|
/** Optional connection alias. */
|
|
7
7
|
id?: string;
|
|
8
|
-
/**
|
|
8
|
+
/** Path to `require()` for the interface instance this connection is bound to. */
|
|
9
9
|
path: string;
|
|
10
|
-
/**
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
/**
|
|
11
|
+
* Module ID of the provider represented by this connection; absent for a
|
|
12
|
+
* connection to a self-hosted interface.
|
|
13
|
+
*/
|
|
14
|
+
provider?: string;
|
|
15
|
+
/** Whether this connection is the one a plain import of the interface reaches. */
|
|
13
16
|
selected: boolean;
|
|
14
17
|
}
|
|
15
18
|
/** Module identity and provider routes propagated through asynchronous work. */
|
|
@@ -32,10 +35,6 @@ export interface ProxyBrand {
|
|
|
32
35
|
kind: "async" | "registering" | "event";
|
|
33
36
|
identity: string;
|
|
34
37
|
}
|
|
35
|
-
export interface RuntimeProxyState {
|
|
36
|
-
kind: ProxyBrand["kind"];
|
|
37
|
-
value: unknown;
|
|
38
|
-
}
|
|
39
38
|
export interface RuntimeCleanup {
|
|
40
39
|
cleanup(): void;
|
|
41
40
|
unregisterModule?(module: string): void;
|
|
@@ -71,7 +70,6 @@ export interface InterfaceRuntime {
|
|
|
71
70
|
interfaceConnections: Record<string, Record<string, InterfaceConnection[]>>;
|
|
72
71
|
executionContext: AsyncLocalStorage<ActiveModuleExecutionContext>;
|
|
73
72
|
activeOwnerTokens: Map<string, symbol>;
|
|
74
|
-
proxyStates: Map<string, RuntimeProxyState>;
|
|
75
73
|
nextProxyIdentity: number;
|
|
76
74
|
nextLeaseGeneration: number;
|
|
77
75
|
maxPendingOperations: number;
|
package/dist/internal.js
CHANGED
|
@@ -9,7 +9,7 @@ exports.getModuleContext = getModuleContext;
|
|
|
9
9
|
exports.invalidateModuleContext = invalidateModuleContext;
|
|
10
10
|
const node_async_hooks_1 = require("node:async_hooks");
|
|
11
11
|
const errors_1 = require("./errors");
|
|
12
|
-
exports.RUNTIME_PROTOCOL_VERSION =
|
|
12
|
+
exports.RUNTIME_PROTOCOL_VERSION = 4;
|
|
13
13
|
exports.RUNTIME_SYMBOL = Symbol.for("@antelopejs/interface-core/runtime");
|
|
14
14
|
function addToMapSet(map, key, value) {
|
|
15
15
|
const values = map.get(key) ?? new Set();
|
|
@@ -28,7 +28,6 @@ function createRuntime() {
|
|
|
28
28
|
interfaceConnections: Object.create(null),
|
|
29
29
|
executionContext: new node_async_hooks_1.AsyncLocalStorage(),
|
|
30
30
|
activeOwnerTokens: new Map(),
|
|
31
|
-
proxyStates: new Map(),
|
|
32
31
|
nextProxyIdentity: 1,
|
|
33
32
|
nextLeaseGeneration: 1,
|
|
34
33
|
maxPendingOperations: 1_000,
|
package/dist/internal.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"internal.js","sourceRoot":"","sources":["../src/internal.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"internal.js","sourceRoot":"","sources":["../src/internal.ts"],"names":[],"mappings":"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"}
|
package/dist/modules.d.ts
CHANGED
|
@@ -49,6 +49,13 @@ export declare namespace Events {
|
|
|
49
49
|
*/
|
|
50
50
|
const ModuleDestroyed: EventProxy<(module: string) => void>;
|
|
51
51
|
}
|
|
52
|
+
/**
|
|
53
|
+
* Releases everything an owner that is not a module generation attached or
|
|
54
|
+
* registered, and invalidates its context, as a module's destruction does.
|
|
55
|
+
*
|
|
56
|
+
* @internal Used by the core to retire an interface instance's own owner.
|
|
57
|
+
*/
|
|
58
|
+
export declare function ReleaseOwner(owner: string): void;
|
|
52
59
|
/**
|
|
53
60
|
* Configuration for defining a module to be loaded into the system.
|
|
54
61
|
*
|
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
|
exports.RunWithModuleContext = RunWithModuleContext;
|
|
5
5
|
exports.GetModuleContext = GetModuleContext;
|
|
6
|
+
exports.ReleaseOwner = ReleaseOwner;
|
|
6
7
|
const proxies_1 = require("./proxies");
|
|
7
8
|
const internal_1 = require("./internal");
|
|
8
9
|
/** Runs work with module ownership and an optional provider route across awaits. */
|
|
@@ -121,8 +122,7 @@ function releaseOwnerRegistrations(module, owner) {
|
|
|
121
122
|
}
|
|
122
123
|
}
|
|
123
124
|
}
|
|
124
|
-
|
|
125
|
-
const owner = getDestroyedOwner(module);
|
|
125
|
+
function releaseOwner(module, owner) {
|
|
126
126
|
try {
|
|
127
127
|
releaseOwnerRegistrations(module, owner);
|
|
128
128
|
}
|
|
@@ -130,7 +130,19 @@ Events.ModuleDestroyed.register((module) => {
|
|
|
130
130
|
// Only now: nothing else may claim to act for this generation.
|
|
131
131
|
(0, internal_1.invalidateModuleContext)(owner);
|
|
132
132
|
}
|
|
133
|
+
}
|
|
134
|
+
Events.ModuleDestroyed.register((module) => {
|
|
135
|
+
releaseOwner(module, getDestroyedOwner(module));
|
|
133
136
|
});
|
|
137
|
+
/**
|
|
138
|
+
* Releases everything an owner that is not a module generation attached or
|
|
139
|
+
* registered, and invalidates its context, as a module's destruction does.
|
|
140
|
+
*
|
|
141
|
+
* @internal Used by the core to retire an interface instance's own owner.
|
|
142
|
+
*/
|
|
143
|
+
function ReleaseOwner(owner) {
|
|
144
|
+
releaseOwner(owner, owner);
|
|
145
|
+
}
|
|
134
146
|
/**
|
|
135
147
|
* List all loaded modules.
|
|
136
148
|
*
|
package/dist/modules.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"modules.js","sourceRoot":"","sources":["../src/modules.ts"],"names":[],"mappings":";;;AAYA,oDAKC;AAGD,4CAEC;
|
|
1
|
+
{"version":3,"file":"modules.js","sourceRoot":"","sources":["../src/modules.ts"],"names":[],"mappings":"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"}
|
package/dist/proxies.d.ts
CHANGED
|
@@ -5,51 +5,53 @@ type RID<T> = T extends (id: infer P, ...args: any[]) => void ? P : never;
|
|
|
5
5
|
type RArgs<T> = T extends (id: any, ...args: infer P) => void ? P : never;
|
|
6
6
|
type ProxyKind = ProxyBrand["kind"];
|
|
7
7
|
declare const PROXY_BRAND: unique symbol;
|
|
8
|
+
/** The handle of one provider attachment, used to detach exactly that attachment. */
|
|
8
9
|
export interface AttachmentLease {
|
|
9
10
|
generation: number;
|
|
10
11
|
owner: string;
|
|
11
|
-
provider: string;
|
|
12
12
|
}
|
|
13
13
|
/** Returns whether a value implements this runtime's stable proxy protocol. */
|
|
14
14
|
export declare function IsInterfaceProxy(value: unknown, kind?: ProxyKind): boolean;
|
|
15
|
-
/** Returns the
|
|
15
|
+
/** Returns the identity a proxy was declared with, for diagnostics. */
|
|
16
16
|
export declare function GetInterfaceProxyIdentity(value: unknown): string | undefined;
|
|
17
17
|
/** @internal */
|
|
18
18
|
export declare function InvalidateResponsibleModule(module: string): void;
|
|
19
19
|
/** Runs work with explicit module ownership across asynchronous boundaries. */
|
|
20
20
|
export declare function RunWithResponsibleModule<T>(module: string, callback: () => T): T;
|
|
21
|
-
/** Proxy for an asynchronous interface function. */
|
|
21
|
+
/** Proxy for an asynchronous interface function, served by a single provider. */
|
|
22
22
|
export declare class AsyncProxy<T extends Func = Func, R = Awaited<ReturnType<T>>> {
|
|
23
23
|
readonly [PROXY_BRAND]: ProxyBrand;
|
|
24
|
-
private
|
|
24
|
+
private attachment?;
|
|
25
|
+
private queue;
|
|
25
26
|
constructor(identity?: string);
|
|
26
|
-
/** Attaches
|
|
27
|
+
/** Attaches the provider callback, replacing any previous one, and replays queued calls. */
|
|
27
28
|
onCall(callback: T, manualDetach?: boolean): AttachmentLease;
|
|
28
|
-
/** Detaches
|
|
29
|
+
/** Detaches the leased attachment, or the current one when called without a lease. */
|
|
29
30
|
detach(lease?: AttachmentLease): void;
|
|
30
|
-
/** Calls the provider
|
|
31
|
+
/** Calls the provider, or queues the call until a provider attaches. */
|
|
31
32
|
call(...args: Parameters<T>): Promise<R>;
|
|
32
33
|
private invoke;
|
|
33
34
|
private replayQueue;
|
|
34
35
|
}
|
|
35
36
|
/** Creates an interface function backed by an asynchronous proxy. */
|
|
36
37
|
export declare function InterfaceFunction<T extends Func = Func, R = Awaited<ReturnType<T>>>(identity?: string): (...args: Parameters<T>) => Promise<R>;
|
|
37
|
-
/** Proxy for
|
|
38
|
+
/** Proxy for register and unregister handlers, served by a single provider. */
|
|
38
39
|
export declare class RegisteringProxy<T extends RegisterFunction = RegisterFunction> {
|
|
39
40
|
readonly [PROXY_BRAND]: ProxyBrand;
|
|
40
|
-
private
|
|
41
|
+
private handlers;
|
|
42
|
+
private readonly registered;
|
|
41
43
|
constructor(identity?: string);
|
|
42
44
|
/** Attaches a register callback. */
|
|
43
45
|
onRegister(callback: T, manualDetach?: boolean): AttachmentLease;
|
|
44
|
-
/** Attaches an unregister callback
|
|
46
|
+
/** Attaches an unregister callback, sharing the register callback's owner when it is the caller's. */
|
|
45
47
|
onUnregister(callback: (id: RID<T>) => void): AttachmentLease;
|
|
46
48
|
/** Atomically attaches both registration handlers. */
|
|
47
49
|
onHandlers(register: T, unregister: (id: RID<T>) => void, manualDetach?: boolean): AttachmentLease;
|
|
48
|
-
/** Detaches
|
|
50
|
+
/** Detaches the leased handlers, or both handlers when called without a lease. */
|
|
49
51
|
detach(lease?: AttachmentLease): void;
|
|
50
|
-
/** Registers an entry with the
|
|
52
|
+
/** Registers an entry with the provider and keeps it for replay on (re)attach. */
|
|
51
53
|
register(id: RID<T>, ...args: RArgs<T>): void;
|
|
52
|
-
/** Unregisters an entry from the provider
|
|
54
|
+
/** Unregisters an entry from the provider. */
|
|
53
55
|
unregister(id: RID<T>): void;
|
|
54
56
|
/** Unregisters every entry owned by a destroyed module. */
|
|
55
57
|
unregisterModule(module: string): void;
|
|
@@ -59,15 +61,14 @@ export declare class RegisteringProxy<T extends RegisterFunction = RegisterFunct
|
|
|
59
61
|
private attachRegister;
|
|
60
62
|
private attachUnregister;
|
|
61
63
|
private trackAttachment;
|
|
62
|
-
private createLease;
|
|
63
64
|
private createAttachment;
|
|
64
65
|
private replayRegistrations;
|
|
65
66
|
}
|
|
66
67
|
type EventFunction = (...args: any[]) => void;
|
|
67
|
-
/** Module-aware event handler collection. */
|
|
68
|
+
/** Module-aware event handler collection; each handler runs in its registrant's context. */
|
|
68
69
|
export declare class EventProxy<T extends EventFunction = EventFunction> {
|
|
69
70
|
readonly [PROXY_BRAND]: ProxyBrand;
|
|
70
|
-
private
|
|
71
|
+
private registered;
|
|
71
72
|
constructor(identity?: string);
|
|
72
73
|
/** Emits to every handler, reporting failures without aborting later handlers. */
|
|
73
74
|
emit(...args: Parameters<T>): void;
|