@mionjs/client 0.8.8 → 0.13.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/cjs/index.cjs +1 -2
- package/.dist/cjs/index.d.ts +5 -2
- package/.dist/cjs/middlewares.cjs +1 -0
- package/.dist/cjs/middlewares.d.ts +3 -0
- package/.dist/cjs/src/batch.cjs +3 -0
- package/.dist/cjs/src/batch.cjs.map +1 -0
- package/.dist/cjs/src/batch.d.ts +7 -0
- package/.dist/cjs/src/callContext.cjs +3 -0
- package/.dist/cjs/src/callContext.cjs.map +1 -0
- package/.dist/cjs/src/callContext.d.ts +6 -0
- package/.dist/cjs/src/client.cjs +3 -2
- package/.dist/cjs/src/client.cjs.map +1 -1
- package/.dist/cjs/src/client.d.ts +8 -13
- package/.dist/cjs/src/constants.cjs +3 -2
- package/.dist/cjs/src/constants.cjs.map +1 -1
- package/.dist/cjs/src/constants.d.ts +7 -3
- package/.dist/cjs/src/dispatch.cjs +3 -0
- package/.dist/cjs/src/dispatch.cjs.map +1 -0
- package/.dist/cjs/src/dispatch.d.ts +8 -0
- package/.dist/cjs/src/lib/apiBuildVersion.cjs +3 -0
- package/.dist/cjs/src/lib/apiBuildVersion.cjs.map +1 -0
- package/.dist/cjs/src/lib/apiBuildVersion.d.ts +10 -0
- package/.dist/cjs/src/lib/apiVersionRecovery.cjs +3 -0
- package/.dist/cjs/src/lib/apiVersionRecovery.cjs.map +1 -0
- package/.dist/cjs/src/lib/apiVersionRecovery.d.ts +7 -0
- package/.dist/cjs/src/lib/bundledApi.cjs +3 -0
- package/.dist/cjs/src/lib/bundledApi.cjs.map +1 -0
- package/.dist/cjs/src/lib/bundledApi.d.ts +12 -0
- package/.dist/cjs/src/lib/clientMethodsMetadata.cjs +3 -2
- package/.dist/cjs/src/lib/clientMethodsMetadata.cjs.map +1 -1
- package/.dist/cjs/src/lib/clientMethodsMetadata.d.ts +10 -10
- package/.dist/cjs/src/lib/clientResponse.cjs +3 -0
- package/.dist/cjs/src/lib/clientResponse.cjs.map +1 -0
- package/.dist/cjs/src/lib/clientResponse.d.ts +9 -0
- package/.dist/cjs/src/lib/fetchRemoteMethodsMetadata.cjs +3 -2
- package/.dist/cjs/src/lib/fetchRemoteMethodsMetadata.cjs.map +1 -1
- package/.dist/cjs/src/lib/fetchRemoteMethodsMetadata.d.ts +1 -1
- package/.dist/cjs/src/lib/handlersRegistry.cjs +3 -2
- package/.dist/cjs/src/lib/handlersRegistry.cjs.map +1 -1
- package/.dist/cjs/src/lib/handlersRegistry.d.ts +18 -9
- package/.dist/cjs/src/lib/headers.cjs +3 -0
- package/.dist/cjs/src/lib/headers.cjs.map +1 -0
- package/.dist/cjs/src/lib/headers.d.ts +7 -0
- package/.dist/cjs/src/lib/metadataEviction.cjs +3 -0
- package/.dist/cjs/src/lib/metadataEviction.cjs.map +1 -0
- package/.dist/cjs/src/lib/metadataEviction.d.ts +9 -0
- package/.dist/cjs/src/lib/metadataFetcher.cjs +3 -0
- package/.dist/cjs/src/lib/metadataFetcher.cjs.map +1 -0
- package/.dist/cjs/src/lib/metadataFetcher.d.ts +29 -0
- package/.dist/cjs/src/lib/metadataFromServer.cjs +1 -0
- package/.dist/cjs/src/lib/metadataFromServer.d.ts +4 -0
- package/.dist/cjs/src/lib/metadataFromServerLoader.cjs +3 -0
- package/.dist/cjs/src/lib/metadataFromServerLoader.cjs.map +1 -0
- package/.dist/cjs/src/lib/metadataFromServerLoader.d.ts +6 -0
- package/.dist/cjs/src/lib/metadataStore.cjs +3 -0
- package/.dist/cjs/src/lib/metadataStore.cjs.map +1 -0
- package/.dist/cjs/src/lib/metadataStore.d.ts +23 -0
- package/.dist/cjs/src/lib/methods.cjs +3 -0
- package/.dist/cjs/src/lib/methods.cjs.map +1 -0
- package/.dist/cjs/src/lib/methods.d.ts +15 -0
- package/.dist/cjs/src/lib/persistentStorage.cjs +3 -0
- package/.dist/cjs/src/lib/persistentStorage.cjs.map +1 -0
- package/.dist/cjs/src/lib/persistentStorage.d.ts +3 -0
- package/.dist/cjs/src/lib/sanitize.cjs +3 -0
- package/.dist/cjs/src/lib/sanitize.cjs.map +1 -0
- package/.dist/cjs/src/lib/sanitize.d.ts +3 -0
- package/.dist/cjs/src/lib/serializer.cjs +3 -2
- package/.dist/cjs/src/lib/serializer.cjs.map +1 -1
- package/.dist/cjs/src/lib/serializer.d.ts +8 -6
- package/.dist/cjs/src/lib/storage.cjs +0 -2
- package/.dist/cjs/src/lib/storage.d.ts +17 -10
- package/.dist/cjs/src/lib/typedEvent.cjs +3 -2
- package/.dist/cjs/src/lib/typedEvent.cjs.map +1 -1
- package/.dist/cjs/src/lib/typedEvent.d.ts +12 -10
- package/.dist/cjs/src/lib/validation.cjs +3 -2
- package/.dist/cjs/src/lib/validation.cjs.map +1 -1
- package/.dist/cjs/src/lib/validation.d.ts +4 -3
- package/.dist/cjs/src/middlewares/fetchMetadata.cjs +3 -0
- package/.dist/cjs/src/middlewares/fetchMetadata.cjs.map +1 -0
- package/.dist/cjs/src/middlewares/fetchMetadata.d.ts +4 -0
- package/.dist/cjs/src/middlewares/syncRoutes.cjs +3 -0
- package/.dist/cjs/src/middlewares/syncRoutes.cjs.map +1 -0
- package/.dist/cjs/src/middlewares/syncRoutes.d.ts +4 -0
- package/.dist/cjs/src/subRequest.cjs +3 -2
- package/.dist/cjs/src/subRequest.cjs.map +1 -1
- package/.dist/cjs/src/subRequest.d.ts +6 -10
- package/.dist/cjs/src/types.cjs +0 -2
- package/.dist/cjs/src/types.d.ts +91 -80
- package/.dist/esm/index.d.ts +5 -2
- package/.dist/esm/index.js +47 -28
- package/.dist/esm/middlewares.d.ts +3 -0
- package/.dist/esm/middlewares.js +6 -0
- package/.dist/esm/src/batch.d.ts +7 -0
- package/.dist/esm/src/batch.js +50 -0
- package/.dist/esm/src/batch.js.map +1 -0
- package/.dist/esm/src/callContext.d.ts +6 -0
- package/.dist/esm/src/callContext.js +34 -0
- package/.dist/esm/src/callContext.js.map +1 -0
- package/.dist/esm/src/client.d.ts +8 -13
- package/.dist/esm/src/client.js +54 -108
- package/.dist/esm/src/client.js.map +1 -1
- package/.dist/esm/src/constants.d.ts +7 -3
- package/.dist/esm/src/constants.js +21 -17
- package/.dist/esm/src/constants.js.map +1 -1
- package/.dist/esm/src/dispatch.d.ts +8 -0
- package/.dist/esm/src/dispatch.js +390 -0
- package/.dist/esm/src/dispatch.js.map +1 -0
- package/.dist/esm/src/lib/apiBuildVersion.d.ts +10 -0
- package/.dist/esm/src/lib/apiBuildVersion.js +43 -0
- package/.dist/esm/src/lib/apiBuildVersion.js.map +1 -0
- package/.dist/esm/src/lib/apiVersionRecovery.d.ts +7 -0
- package/.dist/esm/src/lib/apiVersionRecovery.js +43 -0
- package/.dist/esm/src/lib/apiVersionRecovery.js.map +1 -0
- package/.dist/esm/src/lib/bundledApi.d.ts +12 -0
- package/.dist/esm/src/lib/bundledApi.js +52 -0
- package/.dist/esm/src/lib/bundledApi.js.map +1 -0
- package/.dist/esm/src/lib/clientMethodsMetadata.d.ts +10 -10
- package/.dist/esm/src/lib/clientMethodsMetadata.js +257 -101
- package/.dist/esm/src/lib/clientMethodsMetadata.js.map +1 -1
- package/.dist/esm/src/lib/clientResponse.d.ts +9 -0
- package/.dist/esm/src/lib/clientResponse.js +53 -0
- package/.dist/esm/src/lib/clientResponse.js.map +1 -0
- package/.dist/esm/src/lib/fetchRemoteMethodsMetadata.d.ts +1 -1
- package/.dist/esm/src/lib/fetchRemoteMethodsMetadata.js +20 -17
- package/.dist/esm/src/lib/fetchRemoteMethodsMetadata.js.map +1 -1
- package/.dist/esm/src/lib/handlersRegistry.d.ts +18 -9
- package/.dist/esm/src/lib/handlersRegistry.js +53 -38
- package/.dist/esm/src/lib/handlersRegistry.js.map +1 -1
- package/.dist/esm/src/lib/headers.d.ts +7 -0
- package/.dist/esm/src/lib/headers.js +47 -0
- package/.dist/esm/src/lib/headers.js.map +1 -0
- package/.dist/esm/src/lib/metadataEviction.d.ts +9 -0
- package/.dist/esm/src/lib/metadataEviction.js +33 -0
- package/.dist/esm/src/lib/metadataEviction.js.map +1 -0
- package/.dist/esm/src/lib/metadataFetcher.d.ts +29 -0
- package/.dist/esm/src/lib/metadataFetcher.js +24 -0
- package/.dist/esm/src/lib/metadataFetcher.js.map +1 -0
- package/.dist/esm/src/lib/metadataFromServer.d.ts +4 -0
- package/.dist/esm/src/lib/metadataFromServer.js +15 -0
- package/.dist/esm/src/lib/metadataFromServerLoader.d.ts +6 -0
- package/.dist/esm/src/lib/metadataFromServerLoader.js +27 -0
- package/.dist/esm/src/lib/metadataFromServerLoader.js.map +1 -0
- package/.dist/esm/src/lib/metadataStore.d.ts +23 -0
- package/.dist/esm/src/lib/metadataStore.js +152 -0
- package/.dist/esm/src/lib/metadataStore.js.map +1 -0
- package/.dist/esm/src/lib/methods.d.ts +15 -0
- package/.dist/esm/src/lib/methods.js +41 -0
- package/.dist/esm/src/lib/methods.js.map +1 -0
- package/.dist/esm/src/lib/persistentStorage.d.ts +3 -0
- package/.dist/esm/src/lib/persistentStorage.js +26 -0
- package/.dist/esm/src/lib/persistentStorage.js.map +1 -0
- package/.dist/esm/src/lib/sanitize.d.ts +3 -0
- package/.dist/esm/src/lib/sanitize.js +25 -0
- package/.dist/esm/src/lib/sanitize.js.map +1 -0
- package/.dist/esm/src/lib/serializer.d.ts +8 -6
- package/.dist/esm/src/lib/serializer.js +75 -110
- package/.dist/esm/src/lib/serializer.js.map +1 -1
- package/.dist/esm/src/lib/storage.d.ts +17 -10
- package/.dist/esm/src/lib/storage.js +0 -43
- package/.dist/esm/src/lib/typedEvent.d.ts +12 -10
- package/.dist/esm/src/lib/typedEvent.js +25 -20
- package/.dist/esm/src/lib/typedEvent.js.map +1 -1
- package/.dist/esm/src/lib/validation.d.ts +4 -3
- package/.dist/esm/src/lib/validation.js +38 -33
- package/.dist/esm/src/lib/validation.js.map +1 -1
- package/.dist/esm/src/middlewares/fetchMetadata.d.ts +4 -0
- package/.dist/esm/src/middlewares/fetchMetadata.js +85 -0
- package/.dist/esm/src/middlewares/fetchMetadata.js.map +1 -0
- package/.dist/esm/src/middlewares/syncRoutes.d.ts +4 -0
- package/.dist/esm/src/middlewares/syncRoutes.js +20 -0
- package/.dist/esm/src/middlewares/syncRoutes.js.map +1 -0
- package/.dist/esm/src/subRequest.d.ts +6 -10
- package/.dist/esm/src/subRequest.js +11 -32
- package/.dist/esm/src/subRequest.js.map +1 -1
- package/.dist/esm/src/types.d.ts +91 -80
- package/.dist/esm/src/types.js +0 -2
- package/LICENSE +1 -1
- package/README.md +6 -6
- package/package.json +38 -26
- package/.dist/cjs/index.cjs.map +0 -1
- package/.dist/cjs/index.d.ts.map +0 -1
- package/.dist/cjs/src/client.d.ts.map +0 -1
- package/.dist/cjs/src/constants.d.ts.map +0 -1
- package/.dist/cjs/src/lib/clientMethodsMetadata.d.ts.map +0 -1
- package/.dist/cjs/src/lib/fetchRemoteMethodsMetadata.d.ts.map +0 -1
- package/.dist/cjs/src/lib/handlersRegistry.d.ts.map +0 -1
- package/.dist/cjs/src/lib/serializer.d.ts.map +0 -1
- package/.dist/cjs/src/lib/storage.cjs.map +0 -1
- package/.dist/cjs/src/lib/storage.d.ts.map +0 -1
- package/.dist/cjs/src/lib/testUtils.cjs +0 -2
- package/.dist/cjs/src/lib/testUtils.cjs.map +0 -1
- package/.dist/cjs/src/lib/testUtils.d.ts +0 -2
- package/.dist/cjs/src/lib/testUtils.d.ts.map +0 -1
- package/.dist/cjs/src/lib/typedEvent.d.ts.map +0 -1
- package/.dist/cjs/src/lib/validation.d.ts.map +0 -1
- package/.dist/cjs/src/request.cjs +0 -2
- package/.dist/cjs/src/request.cjs.map +0 -1
- package/.dist/cjs/src/request.d.ts +0 -37
- package/.dist/cjs/src/request.d.ts.map +0 -1
- package/.dist/cjs/src/routesFlow.cjs +0 -2
- package/.dist/cjs/src/routesFlow.cjs.map +0 -1
- package/.dist/cjs/src/routesFlow.d.ts +0 -7
- package/.dist/cjs/src/routesFlow.d.ts.map +0 -1
- package/.dist/cjs/src/subRequest.d.ts.map +0 -1
- package/.dist/cjs/src/types.cjs.map +0 -1
- package/.dist/cjs/src/types.d.ts.map +0 -1
- package/.dist/esm/index.d.ts.map +0 -1
- package/.dist/esm/index.js.map +0 -1
- package/.dist/esm/src/client.d.ts.map +0 -1
- package/.dist/esm/src/constants.d.ts.map +0 -1
- package/.dist/esm/src/lib/clientMethodsMetadata.d.ts.map +0 -1
- package/.dist/esm/src/lib/fetchRemoteMethodsMetadata.d.ts.map +0 -1
- package/.dist/esm/src/lib/handlersRegistry.d.ts.map +0 -1
- package/.dist/esm/src/lib/serializer.d.ts.map +0 -1
- package/.dist/esm/src/lib/storage.d.ts.map +0 -1
- package/.dist/esm/src/lib/storage.js.map +0 -1
- package/.dist/esm/src/lib/testUtils.d.ts +0 -2
- package/.dist/esm/src/lib/testUtils.d.ts.map +0 -1
- package/.dist/esm/src/lib/testUtils.js +0 -11
- package/.dist/esm/src/lib/testUtils.js.map +0 -1
- package/.dist/esm/src/lib/typedEvent.d.ts.map +0 -1
- package/.dist/esm/src/lib/validation.d.ts.map +0 -1
- package/.dist/esm/src/request.d.ts +0 -37
- package/.dist/esm/src/request.d.ts.map +0 -1
- package/.dist/esm/src/request.js +0 -334
- package/.dist/esm/src/request.js.map +0 -1
- package/.dist/esm/src/routesFlow.d.ts +0 -7
- package/.dist/esm/src/routesFlow.d.ts.map +0 -1
- package/.dist/esm/src/routesFlow.js +0 -60
- package/.dist/esm/src/routesFlow.js.map +0 -1
- package/.dist/esm/src/subRequest.d.ts.map +0 -1
- package/.dist/esm/src/types.d.ts.map +0 -1
- package/.dist/esm/src/types.js.map +0 -1
- package/index.ts +0 -19
- package/src/client.ts +0 -290
- package/src/constants.ts +0 -37
- package/src/lib/clientMethodsMetadata.ts +0 -187
- package/src/lib/fetchRemoteMethodsMetadata.ts +0 -44
- package/src/lib/handlersRegistry.ts +0 -101
- package/src/lib/serializer.ts +0 -245
- package/src/lib/storage.ts +0 -57
- package/src/lib/testUtils.ts +0 -16
- package/src/lib/typedEvent.ts +0 -57
- package/src/lib/validation.ts +0 -72
- package/src/request.ts +0 -563
- package/src/routesFlow.ts +0 -101
- package/src/subRequest.ts +0 -111
- package/src/types.ts +0 -237
package/.dist/esm/src/client.js
CHANGED
|
@@ -1,28 +1,32 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { DEFAULT_CLIENT_OPTIONS, MIDDLEWARE_HOOKS } from "./constants.js";
|
|
2
|
+
import { createCallContext } from "./callContext.js";
|
|
3
|
+
import { setApiBuildVersion } from "./lib/apiBuildVersion.js";
|
|
4
|
+
import { MIDDLEWARE_TARGET } from "./lib/metadataFetcher.js";
|
|
5
|
+
import { dispatchCall, dispatchTypeErrors } from "./dispatch.js";
|
|
4
6
|
import { HandlersRegistry } from "./lib/handlersRegistry.js";
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
import { TypedEvent } from "./lib/typedEvent.js";
|
|
8
|
+
import { MionSubRequest } from "./subRequest.js";
|
|
9
|
+
import { getRouterItemId } from "@mionjs/core";
|
|
10
|
+
import { registerBundledApi } from "#bundled-api";
|
|
11
|
+
var apiBundled = !1;
|
|
12
|
+
function setApiBundled() {
|
|
13
|
+
apiBundled = !0;
|
|
14
|
+
}
|
|
15
|
+
function initClient(options, buildVersion) {
|
|
16
|
+
setApiBuildVersion(buildVersion);
|
|
17
|
+
const client = new MionClient({
|
|
18
|
+
...DEFAULT_CLIENT_OPTIONS,
|
|
10
19
|
...options
|
|
11
|
-
}
|
|
20
|
+
});
|
|
12
21
|
return {
|
|
13
22
|
client,
|
|
14
|
-
routes:
|
|
15
|
-
|
|
23
|
+
routes: new MethodProxy([], client, !1).proxy,
|
|
24
|
+
middlewares: new MethodProxy([], client, !0).proxy
|
|
16
25
|
};
|
|
17
26
|
}
|
|
18
|
-
|
|
27
|
+
var MionClient = class {
|
|
19
28
|
clientOptions;
|
|
20
|
-
/** Shared registry for persistent middleFn error handlers */
|
|
21
29
|
handlersRegistry = new HandlersRegistry();
|
|
22
|
-
/** In-memory cache for prefilled middleFn subrequests (keyed by baseURL:middleFnId) */
|
|
23
|
-
prefilledMiddleFnsCache = /* @__PURE__ */ new Map();
|
|
24
|
-
/** Tracks in-flight prefill operations to avoid race conditions */
|
|
25
|
-
pendingPrefills = [];
|
|
26
30
|
globalAbortController = new AbortController();
|
|
27
31
|
get globalSignal() {
|
|
28
32
|
return this.globalAbortController.signal;
|
|
@@ -30,130 +34,72 @@ class MionClient {
|
|
|
30
34
|
constructor(clientOptions) {
|
|
31
35
|
this.clientOptions = clientOptions;
|
|
32
36
|
}
|
|
33
|
-
|
|
37
|
+
get isApiBundled() {
|
|
38
|
+
return apiBundled;
|
|
39
|
+
}
|
|
40
|
+
useBundledApi(apiMetadata) {
|
|
41
|
+
apiMetadata !== void 0 && registerBundledApi(apiMetadata);
|
|
42
|
+
}
|
|
34
43
|
abort() {
|
|
35
44
|
this.globalAbortController.abort(), this.globalAbortController = new AbortController();
|
|
36
45
|
}
|
|
37
|
-
/** Composes a single AbortSignal from global, per-request, and timeout signals */
|
|
38
46
|
composeSignal(signal, timeout) {
|
|
39
47
|
const signals = [this.globalSignal];
|
|
40
48
|
signal && signals.push(signal);
|
|
41
49
|
const effectiveTimeout = timeout ?? this.clientOptions.timeout;
|
|
42
50
|
return effectiveTimeout !== void 0 && signals.push(AbortSignal.timeout(effectiveTimeout)), AbortSignal.any(signals);
|
|
43
51
|
}
|
|
44
|
-
|
|
45
|
-
execute(routeSubRequest, workflowSubRequests, middleFnsRecord, signal, timeout) {
|
|
46
|
-
return this.executeRequest(routeSubRequest, workflowSubRequests, middleFnsRecord, signal, timeout);
|
|
47
|
-
}
|
|
48
|
-
async executeRequest(routeSubRequest, workflowSubRequests, middleFnsRecord, signal, timeout) {
|
|
52
|
+
async execute(routeSubRequest, batchSubRequests, batchId, signal, timeout) {
|
|
49
53
|
const composedSignal = this.composeSignal(signal, timeout);
|
|
50
|
-
this.
|
|
51
|
-
const middleFnSubRequests = middleFnsRecord ? Object.values(middleFnsRecord) : [], request = new MionClientRequest(this.clientOptions, this.prefilledMiddleFnsCache, routeSubRequest, middleFnSubRequests, workflowSubRequests, composedSignal);
|
|
52
|
-
try {
|
|
53
|
-
await request.call();
|
|
54
|
-
const routeIds = this.getRouteIds(routeSubRequest, workflowSubRequests), allMiddleFns = this.getAllMiddleFnsFromRequest(request, routeIds);
|
|
55
|
-
return this.processMiddleFnsResponses(allMiddleFns, void 0), this.buildResult(routeSubRequest, workflowSubRequests, middleFnsRecord || allMiddleFns, void 0);
|
|
56
|
-
} catch (errors) {
|
|
57
|
-
const routeIds = this.getRouteIds(routeSubRequest, workflowSubRequests), allMiddleFns = this.getAllMiddleFnsFromRequest(request, routeIds);
|
|
58
|
-
return this.processMiddleFnsResponses(allMiddleFns, errors), this.buildResult(routeSubRequest, workflowSubRequests, middleFnsRecord || allMiddleFns, errors);
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
/** Get route IDs from single route or routesFlow routes */
|
|
62
|
-
getRouteIds(routeSubRequest, workflowSubRequests) {
|
|
63
|
-
const routeIds = /* @__PURE__ */ new Set();
|
|
64
|
-
return routeSubRequest && routeIds.add(routeSubRequest.id), workflowSubRequests && workflowSubRequests.forEach((sr) => routeIds.add(sr.id)), routeIds;
|
|
65
|
-
}
|
|
66
|
-
/** Get all middleFns from the request's subRequestList, excluding the route(s) */
|
|
67
|
-
getAllMiddleFnsFromRequest(request, excludedIds) {
|
|
68
|
-
return Object.entries(request.subRequestList).filter(([id]) => !excludedIds.has(id)).map(([, subRequest]) => subRequest);
|
|
69
|
-
}
|
|
70
|
-
/** Process all middleFn responses - call success or error handlers for each middleFn individually */
|
|
71
|
-
processMiddleFnsResponses(middleFnSubRequests, errors) {
|
|
72
|
-
for (const middleFn of middleFnSubRequests) {
|
|
73
|
-
const middleFnError = errors?.get(middleFn.id);
|
|
74
|
-
middleFnError ? this.handlersRegistry.executeHandler(middleFn.id, middleFnError) : middleFn.resolvedValue !== void 0 && this.handlersRegistry.executeSuccessHandler(middleFn.id, middleFn.resolvedValue);
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
/** Build the result 4-tuple from the request results. middleFns can be a named record or an array of subrequests */
|
|
78
|
-
buildResult(routeSubRequest, workflowSubRequests, middleFns, errors) {
|
|
79
|
-
const middleFnsResults = {}, middleFnsErrors = {}, processedIds = /* @__PURE__ */ new Set();
|
|
80
|
-
let routeResultPart, routeErrorPart;
|
|
81
|
-
if (routeSubRequest) {
|
|
82
|
-
processedIds.add(routeSubRequest.id);
|
|
83
|
-
const routeError = errors?.get(routeSubRequest.id) || (errors ? findSubRequestError(routeSubRequest, errors) : void 0);
|
|
84
|
-
routeResultPart = routeError ? void 0 : routeSubRequest.resolvedValue, routeErrorPart = routeError;
|
|
85
|
-
} else if (workflowSubRequests) {
|
|
86
|
-
const routeResults = [], routeErrors = [];
|
|
87
|
-
for (const routeSubRequest2 of workflowSubRequests) {
|
|
88
|
-
processedIds.add(routeSubRequest2.id);
|
|
89
|
-
const routeError = errors?.get(routeSubRequest2.id);
|
|
90
|
-
routeError ? (routeResults.push(void 0), routeErrors.push(routeError)) : (routeResults.push(routeSubRequest2.resolvedValue), routeErrors.push(void 0));
|
|
91
|
-
}
|
|
92
|
-
const hasAnyResult = routeResults.some((r) => r !== void 0), hasAnyError = routeErrors.some((e) => e !== void 0);
|
|
93
|
-
routeResultPart = hasAnyResult ? routeResults : void 0, routeErrorPart = hasAnyError ? routeErrors : void 0;
|
|
94
|
-
}
|
|
95
|
-
if (Array.isArray(middleFns))
|
|
96
|
-
for (const middleFn of middleFns) {
|
|
97
|
-
processedIds.add(middleFn.id);
|
|
98
|
-
const middleFnError = errors?.get(middleFn.id);
|
|
99
|
-
middleFnError ? middleFnsErrors[middleFn.id] = middleFnError : middleFn.resolvedValue !== void 0 && (middleFnsResults[middleFn.id] = middleFn.resolvedValue);
|
|
100
|
-
}
|
|
101
|
-
else
|
|
102
|
-
for (const [name, middleFn] of Object.entries(middleFns)) {
|
|
103
|
-
processedIds.add(middleFn.id);
|
|
104
|
-
const middleFnError = errors?.get(middleFn.id);
|
|
105
|
-
middleFnError ? middleFnsErrors[name] = middleFnError : middleFn.resolvedValue !== void 0 && (middleFnsResults[name] = middleFn.resolvedValue);
|
|
106
|
-
}
|
|
107
|
-
if (errors)
|
|
108
|
-
for (const [id, error] of errors)
|
|
109
|
-
processedIds.has(id) || (middleFnsErrors[id] = error);
|
|
110
|
-
return [routeResultPart, routeErrorPart, middleFnsResults, middleFnsErrors];
|
|
54
|
+
return dispatchCall(createCallContext(this.clientOptions, routeSubRequest, batchSubRequests, batchId, composedSignal), this.handlersRegistry);
|
|
111
55
|
}
|
|
112
56
|
typeErrors(...subRequest) {
|
|
113
|
-
return
|
|
114
|
-
}
|
|
115
|
-
prefill(...subRequest) {
|
|
116
|
-
const promise = new MionClientRequest(this.clientOptions, this.prefilledMiddleFnsCache).prefill(subRequest);
|
|
117
|
-
return this.pendingPrefills.push(promise), promise.finally(() => {
|
|
118
|
-
const index = this.pendingPrefills.indexOf(promise);
|
|
119
|
-
index >= 0 && this.pendingPrefills.splice(index, 1);
|
|
120
|
-
}), promise;
|
|
121
|
-
}
|
|
122
|
-
removePrefill(...subRequest) {
|
|
123
|
-
return new MionClientRequest(this.clientOptions, this.prefilledMiddleFnsCache).removePrefill(subRequest);
|
|
57
|
+
return dispatchTypeErrors(this.clientOptions, subRequest, this.handlersRegistry);
|
|
124
58
|
}
|
|
125
|
-
/** Clear all error handlers from the registry and abort in-flight requests */
|
|
126
59
|
destroy() {
|
|
127
60
|
this.abort(), this.handlersRegistry.clearAll();
|
|
128
61
|
}
|
|
129
|
-
}
|
|
130
|
-
class MethodProxy {
|
|
62
|
+
}, middlewareHooks = new Set(MIDDLEWARE_HOOKS), MethodProxy = class MethodProxy2 {
|
|
131
63
|
parentProps;
|
|
132
64
|
client;
|
|
133
|
-
|
|
65
|
+
isMiddleware;
|
|
134
66
|
propsProxies = {};
|
|
67
|
+
events;
|
|
135
68
|
handler = {
|
|
136
69
|
apply: (_target, _thisArg, argArray) => {
|
|
137
70
|
const handlerId = getRouterItemId(this.parentProps);
|
|
138
71
|
return new MionSubRequest(this.parentProps, handlerId, argArray, this.client);
|
|
139
72
|
},
|
|
140
73
|
get: (_target, prop) => {
|
|
74
|
+
if (this.isMiddleware && prop === MIDDLEWARE_TARGET) return {
|
|
75
|
+
id: getRouterItemId(this.parentProps),
|
|
76
|
+
registry: this.client.handlersRegistry
|
|
77
|
+
};
|
|
78
|
+
if (this.isMiddleware && middlewareHooks.has(prop)) return this.getEvents()[prop].bind(this.events);
|
|
141
79
|
const existing = this.propsProxies[prop];
|
|
142
|
-
if (existing)
|
|
143
|
-
|
|
144
|
-
const newMethodProxy = new MethodProxy([...this.parentProps, prop], this.client, this.clientOptions);
|
|
80
|
+
if (existing) return existing.proxy;
|
|
81
|
+
const newMethodProxy = new MethodProxy2([...this.parentProps, prop], this.client, this.isMiddleware);
|
|
145
82
|
return this.propsProxies[prop] = newMethodProxy, newMethodProxy.proxy;
|
|
146
83
|
}
|
|
147
84
|
};
|
|
148
85
|
proxy;
|
|
149
|
-
constructor(parentProps, client,
|
|
150
|
-
this.parentProps = parentProps, this.client = client, this.
|
|
86
|
+
constructor(parentProps, client, isMiddleware) {
|
|
87
|
+
this.parentProps = parentProps, this.client = client, this.isMiddleware = isMiddleware;
|
|
151
88
|
const target = () => null;
|
|
152
89
|
this.proxy = new Proxy(target, this.handler);
|
|
153
90
|
}
|
|
154
|
-
|
|
91
|
+
getEvents() {
|
|
92
|
+
if (!this.events) {
|
|
93
|
+
const createSubRequest = (params) => this.handler.apply(null, null, params);
|
|
94
|
+
this.events = new TypedEvent(getRouterItemId(this.parentProps), this.client.handlersRegistry, createSubRequest);
|
|
95
|
+
}
|
|
96
|
+
return this.events;
|
|
97
|
+
}
|
|
98
|
+
};
|
|
155
99
|
export {
|
|
156
100
|
MionClient,
|
|
157
|
-
initClient
|
|
101
|
+
initClient,
|
|
102
|
+
setApiBundled
|
|
158
103
|
};
|
|
159
|
-
|
|
104
|
+
|
|
105
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sources":["../../../src/client.ts"],"sourcesContent":["/* ########\n * 2023 mion\n * Author: Ma-jerez\n * License: MIT\n * The software is provided \"as is\", without warranty of any kind.\n * ######## */\n\nimport {DEFAULT_PREFILL_OPTIONS} from './constants.ts';\nimport {\n ClientOptions,\n MiddlewareSubRequest,\n InitClientOptions,\n RouteSubRequest,\n SubRequest,\n RequestErrors,\n ClientRoutes,\n ClientMiddleFns,\n Result,\n WorkflowResult,\n} from './types.ts';\nimport type {RemoteApi} from '@mionjs/router';\nimport {registerErrorDeserializers} from '@mionjs/core';\nimport {getRouterItemId} from '@mionjs/core';\nimport {MionClientRequest} from './request.ts';\nimport type {RunTypeError} from '@mionjs/core';\nimport {HandlersRegistry} from './lib/handlersRegistry.ts';\nimport {MionSubRequest, findSubRequestError} from './subRequest.ts';\n\nexport function initClient<RM extends RemoteApi>(\n options: InitClientOptions\n): {client: MionClient; routes: ClientRoutes<RM>; middleFns: ClientMiddleFns<RM>} {\n registerErrorDeserializers();\n const clientOptions = {\n ...DEFAULT_PREFILL_OPTIONS,\n ...options,\n };\n const client = new MionClient(clientOptions);\n const rootProxy = new MethodProxy([], client, clientOptions);\n return {\n client,\n routes: rootProxy.proxy as ClientRoutes<RM>,\n middleFns: rootProxy.proxy as ClientMiddleFns<RM>,\n };\n}\n\nexport class MionClient {\n /** Shared registry for persistent middleFn error handlers */\n readonly handlersRegistry = new HandlersRegistry();\n\n /** In-memory cache for prefilled middleFn subrequests (keyed by baseURL:middleFnId) */\n readonly prefilledMiddleFnsCache = new Map<string, SubRequest<any>>();\n\n /** Tracks in-flight prefill operations to avoid race conditions */\n private pendingPrefills: Promise<void>[] = [];\n\n private globalAbortController = new AbortController();\n private get globalSignal(): AbortSignal {\n return this.globalAbortController.signal;\n }\n\n constructor(private clientOptions: ClientOptions) {}\n\n /** Aborts all in-flight requests. New requests after this call work normally. */\n abort(): void {\n this.globalAbortController.abort();\n this.globalAbortController = new AbortController();\n }\n\n /** Composes a single AbortSignal from global, per-request, and timeout signals */\n private composeSignal(signal?: AbortSignal, timeout?: number): AbortSignal {\n const signals: AbortSignal[] = [this.globalSignal];\n if (signal) signals.push(signal);\n const effectiveTimeout = timeout ?? this.clientOptions.timeout;\n if (effectiveTimeout !== undefined) signals.push(AbortSignal.timeout(effectiveTimeout));\n return AbortSignal.any(signals);\n }\n\n /** Executes a route call with optional workflow routes and middleFns */\n execute(\n routeSubRequest?: RouteSubRequest<any>,\n workflowSubRequests?: RouteSubRequest<any>[],\n middleFnsRecord?: Record<string, MiddlewareSubRequest<any>>,\n signal?: AbortSignal,\n timeout?: number\n ): Promise<any> {\n return this.executeRequest(routeSubRequest, workflowSubRequests, middleFnsRecord, signal, timeout);\n }\n\n private async executeRequest<Routes extends RouteSubRequest<any>[], H extends Record<string, MiddlewareSubRequest<any>>>(\n routeSubRequest: RouteSubRequest<any> | undefined,\n workflowSubRequests: Routes | undefined,\n middleFnsRecord: H | undefined,\n signal?: AbortSignal,\n timeout?: number\n ): Promise<any> {\n // Capture the signal before any async work so abort() during prefill await is respected\n const composedSignal = this.composeSignal(signal, timeout);\n\n // Wait for any in-flight prefill operations to complete before executing the request\n if (this.pendingPrefills.length > 0) await Promise.allSettled([...this.pendingPrefills]);\n\n const middleFnSubRequests = middleFnsRecord ? Object.values(middleFnsRecord) : [];\n const request = new MionClientRequest(\n this.clientOptions,\n this.prefilledMiddleFnsCache,\n routeSubRequest,\n middleFnSubRequests,\n workflowSubRequests,\n composedSignal\n );\n\n try {\n await request.call();\n const routeIds = this.getRouteIds(routeSubRequest, workflowSubRequests);\n const allMiddleFns = this.getAllMiddleFnsFromRequest(request, routeIds);\n this.processMiddleFnsResponses(allMiddleFns, undefined);\n return this.buildResult(routeSubRequest, workflowSubRequests, middleFnsRecord || allMiddleFns, undefined);\n } catch (errors: any) {\n const routeIds = this.getRouteIds(routeSubRequest, workflowSubRequests);\n const allMiddleFns = this.getAllMiddleFnsFromRequest(request, routeIds);\n this.processMiddleFnsResponses(allMiddleFns, errors);\n return this.buildResult(routeSubRequest, workflowSubRequests, middleFnsRecord || allMiddleFns, errors);\n }\n }\n\n /** Get route IDs from single route or routesFlow routes */\n private getRouteIds(\n routeSubRequest: RouteSubRequest<any> | undefined,\n workflowSubRequests: RouteSubRequest<any>[] | undefined\n ): Set<string> {\n const routeIds = new Set<string>();\n if (routeSubRequest) routeIds.add(routeSubRequest.id);\n if (workflowSubRequests) workflowSubRequests.forEach((sr) => routeIds.add(sr.id));\n return routeIds;\n }\n\n /** Get all middleFns from the request's subRequestList, excluding the route(s) */\n private getAllMiddleFnsFromRequest(\n request: MionClientRequest<any, any>,\n excludedIds: Set<string>\n ): MiddlewareSubRequest<any>[] {\n return Object.entries(request.subRequestList)\n .filter(([id]) => !excludedIds.has(id))\n .map(([, subRequest]) => subRequest as MiddlewareSubRequest<any>);\n }\n\n /** Process all middleFn responses - call success or error handlers for each middleFn individually */\n private processMiddleFnsResponses(middleFnSubRequests: MiddlewareSubRequest<any>[], errors: RequestErrors | undefined): void {\n for (const middleFn of middleFnSubRequests) {\n const middleFnError = errors?.get(middleFn.id);\n if (middleFnError) {\n this.handlersRegistry.executeHandler(middleFn.id, middleFnError);\n } else if (middleFn.resolvedValue !== undefined) {\n this.handlersRegistry.executeSuccessHandler(middleFn.id, middleFn.resolvedValue);\n }\n }\n }\n\n /** Build the result 4-tuple from the request results. middleFns can be a named record or an array of subrequests */\n private buildResult<Routes extends RouteSubRequest<any>[], H extends Record<string, MiddlewareSubRequest<any>>>(\n routeSubRequest: RouteSubRequest<any> | undefined,\n workflowSubRequests: Routes | undefined,\n middleFns: H | MiddlewareSubRequest<any>[],\n errors: RequestErrors | undefined\n ): WorkflowResult<Routes, H> | Result<any, any> {\n const middleFnsResults = {} as Record<string, any>;\n const middleFnsErrors = {} as Record<string, any>;\n const processedIds = new Set<string>();\n\n let routeResultPart: any;\n let routeErrorPart: any;\n\n if (routeSubRequest) {\n processedIds.add(routeSubRequest.id);\n const routeError =\n errors?.get(routeSubRequest.id) || (errors ? findSubRequestError(routeSubRequest, errors) : undefined);\n routeResultPart = routeError ? undefined : routeSubRequest.resolvedValue;\n routeErrorPart = routeError;\n } else if (workflowSubRequests) {\n const routeResults: (any | undefined)[] = [];\n const routeErrors: (any | undefined)[] = [];\n for (const routeSubRequest of workflowSubRequests) {\n processedIds.add(routeSubRequest.id);\n const routeError = errors?.get(routeSubRequest.id);\n if (routeError) {\n routeResults.push(undefined);\n routeErrors.push(routeError);\n } else {\n routeResults.push(routeSubRequest.resolvedValue);\n routeErrors.push(undefined);\n }\n }\n const hasAnyResult = routeResults.some((r) => r !== undefined);\n const hasAnyError = routeErrors.some((e) => e !== undefined);\n routeResultPart = hasAnyResult ? routeResults : undefined;\n routeErrorPart = hasAnyError ? routeErrors : undefined;\n }\n\n // middleFns can be a named record (from callWithMiddleFns/routesFlow) or an array (from executeCall)\n if (Array.isArray(middleFns)) {\n // Array of subrequests - use IDs as keys\n for (const middleFn of middleFns) {\n processedIds.add(middleFn.id);\n const middleFnError = errors?.get(middleFn.id);\n if (middleFnError) {\n middleFnsErrors[middleFn.id] = middleFnError;\n } else if (middleFn.resolvedValue !== undefined) {\n middleFnsResults[middleFn.id] = middleFn.resolvedValue;\n }\n }\n } else {\n // Named record - use names as keys\n for (const [name, middleFn] of Object.entries(middleFns)) {\n processedIds.add(middleFn.id);\n const middleFnError = errors?.get(middleFn.id);\n if (middleFnError) {\n middleFnsErrors[name] = middleFnError;\n } else if (middleFn.resolvedValue !== undefined) {\n middleFnsResults[name] = middleFn.resolvedValue;\n }\n }\n }\n\n if (errors) {\n for (const [id, error] of errors) {\n if (!processedIds.has(id)) {\n middleFnsErrors[id] = error;\n }\n }\n }\n\n return [routeResultPart, routeErrorPart, middleFnsResults, middleFnsErrors] as any;\n }\n\n typeErrors<List extends SubRequest<any>[]>(...subRequest: List): Promise<RunTypeError[]> {\n const request = new MionClientRequest(this.clientOptions, this.prefilledMiddleFnsCache);\n return request.validateParams(subRequest);\n }\n\n prefill<List extends MiddlewareSubRequest<any>[]>(...subRequest: List): Promise<void> {\n const request = new MionClientRequest(this.clientOptions, this.prefilledMiddleFnsCache);\n const promise = request.prefill(subRequest);\n this.pendingPrefills.push(promise);\n promise.finally(() => {\n const index = this.pendingPrefills.indexOf(promise);\n if (index >= 0) this.pendingPrefills.splice(index, 1);\n });\n return promise;\n }\n\n removePrefill<List extends MiddlewareSubRequest<any>[]>(...subRequest: List): Promise<void> {\n const request = new MionClientRequest(this.clientOptions, this.prefilledMiddleFnsCache);\n return request.removePrefill(subRequest);\n }\n\n /** Clear all error handlers from the registry and abort in-flight requests */\n destroy(): void {\n this.abort();\n this.handlersRegistry.clearAll();\n }\n}\n\nclass MethodProxy {\n propsProxies: Record<string, MethodProxy> = {};\n handler = {\n apply: (_target: any, _thisArg: any, argArray?: any): RouteSubRequest<any> & MiddlewareSubRequest<any> => {\n const handlerId = getRouterItemId(this.parentProps);\n return new MionSubRequest(this.parentProps, handlerId, argArray, this.client);\n },\n\n get: (_target: any, prop: string): typeof Proxy => {\n const existing = this.propsProxies[prop];\n if (existing) return existing.proxy;\n const newMethodProxy = new MethodProxy([...this.parentProps, prop], this.client, this.clientOptions);\n this.propsProxies[prop] = newMethodProxy;\n return newMethodProxy.proxy;\n },\n };\n\n proxy: typeof Proxy;\n\n constructor(\n public parentProps: string[],\n private client: MionClient,\n private clientOptions: ClientOptions\n ) {\n const target = () => null;\n this.proxy = new Proxy(target, this.handler);\n }\n}\n"],"names":["routeSubRequest"],"mappings":";;;;;AA4BM,SAAU,WACZ,SAA0B;AAE1B,6BAAA;AACA,QAAM,gBAAgB;AAAA,IAClB,GAAG;AAAA,IACH,GAAG;AAAA,EAAA,GAED,SAAS,IAAI,WAAW,aAAa,GACrC,YAAY,IAAI,YAAY,CAAA,GAAI,QAAQ,aAAa;AAC3D,SAAO;AAAA,IACH;AAAA,IACA,QAAQ,UAAU;AAAA,IAClB,WAAW,UAAU;AAAA,EAAA;AAE7B;MAEa,WAAU;AAAA,EAeC;AAAA;AAAA,EAbX,mBAAmB,IAAI,iBAAA;AAAA;AAAA,EAGvB,8CAA8B,IAAA;AAAA;AAAA,EAG/B,kBAAmC,CAAA;AAAA,EAEnC,wBAAwB,IAAI,gBAAA;AAAA,EACpC,IAAY,eAAY;AACpB,WAAO,KAAK,sBAAsB;AAAA,EACtC;AAAA,EAEA,YAAoB,eAA4B;AAA5B,SAAA,gBAAA;AAAA,EAA+B;AAAA;AAAA,EAGnD,QAAK;AACD,SAAK,sBAAsB,MAAA,GAC3B,KAAK,wBAAwB,IAAI,gBAAA;AAAA,EACrC;AAAA;AAAA,EAGQ,cAAc,QAAsB,SAAgB;AACxD,UAAM,UAAyB,CAAC,KAAK,YAAY;AACjD,IAAI,UAAQ,QAAQ,KAAK,MAAM;AAC/B,UAAM,mBAAmB,WAAW,KAAK,cAAc;AACvD,WAAI,qBAAqB,UAAW,QAAQ,KAAK,YAAY,QAAQ,gBAAgB,CAAC,GAC/E,YAAY,IAAI,OAAO;AAAA,EAClC;AAAA;AAAA,EAGA,QACI,iBACA,qBACA,iBACA,QACA,SAAgB;AAEhB,WAAO,KAAK,eAAe,iBAAiB,qBAAqB,iBAAiB,QAAQ,OAAO;AAAA,EACrG;AAAA,EAEQ,MAAM,eACV,iBACA,qBACA,iBACA,QACA,SAAgB;AAGhB,UAAM,iBAAiB,KAAK,cAAc,QAAQ,OAAO;AAGzD,IAAI,KAAK,gBAAgB,SAAS,KAAG,MAAM,QAAQ,WAAW,CAAC,GAAG,KAAK,eAAe,CAAC;AAEvF,UAAM,sBAAsB,kBAAkB,OAAO,OAAO,eAAe,IAAI,CAAA,GACzE,UAAU,IAAI,kBAChB,KAAK,eACL,KAAK,yBACL,iBACA,qBACA,qBACA,cAAc;AAGlB,QAAI;AACA,YAAM,QAAQ,KAAA;AACd,YAAM,WAAW,KAAK,YAAY,iBAAiB,mBAAmB,GAChE,eAAe,KAAK,2BAA2B,SAAS,QAAQ;AACtE,kBAAK,0BAA0B,cAAc,MAAS,GAC/C,KAAK,YAAY,iBAAiB,qBAAqB,mBAAmB,cAAc,MAAS;AAAA,IAC5G,SAAS,QAAa;AAClB,YAAM,WAAW,KAAK,YAAY,iBAAiB,mBAAmB,GAChE,eAAe,KAAK,2BAA2B,SAAS,QAAQ;AACtE,kBAAK,0BAA0B,cAAc,MAAM,GAC5C,KAAK,YAAY,iBAAiB,qBAAqB,mBAAmB,cAAc,MAAM;AAAA,IACzG;AAAA,EACJ;AAAA;AAAA,EAGQ,YACJ,iBACA,qBAAuD;AAEvD,UAAM,+BAAe,IAAA;AACrB,WAAI,mBAAiB,SAAS,IAAI,gBAAgB,EAAE,GAChD,uBAAqB,oBAAoB,QAAQ,CAAC,OAAO,SAAS,IAAI,GAAG,EAAE,CAAC,GACzE;AAAA,EACX;AAAA;AAAA,EAGQ,2BACJ,SACA,aAAwB;AAExB,WAAO,OAAO,QAAQ,QAAQ,cAAc,EACvC,OAAO,CAAC,CAAC,EAAE,MAAM,CAAC,YAAY,IAAI,EAAE,CAAC,EACrC,IAAI,CAAC,CAAA,EAAG,UAAU,MAAM,UAAuC;AAAA,EACxE;AAAA;AAAA,EAGQ,0BAA0B,qBAAkD,QAAiC;AACjH,eAAW,YAAY,qBAAqB;AACxC,YAAM,gBAAgB,QAAQ,IAAI,SAAS,EAAE;AAC7C,MAAI,gBACA,KAAK,iBAAiB,eAAe,SAAS,IAAI,aAAa,IACxD,SAAS,kBAAkB,UAClC,KAAK,iBAAiB,sBAAsB,SAAS,IAAI,SAAS,aAAa;AAAA,IAEvF;AAAA,EACJ;AAAA;AAAA,EAGQ,YACJ,iBACA,qBACA,WACA,QAAiC;AAEjC,UAAM,mBAAmB,CAAA,GACnB,kBAAkB,CAAA,GAClB,mCAAmB,IAAA;AAEzB,QAAI,iBACA;AAEJ,QAAI,iBAAiB;AACjB,mBAAa,IAAI,gBAAgB,EAAE;AACnC,YAAM,aACF,QAAQ,IAAI,gBAAgB,EAAE,MAAM,SAAS,oBAAoB,iBAAiB,MAAM,IAAI;AAChG,wBAAkB,aAAa,SAAY,gBAAgB,eAC3D,iBAAiB;AAAA,IACrB,WAAW,qBAAqB;AAC5B,YAAM,eAAoC,CAAA,GACpC,cAAmC,CAAA;AACzC,iBAAWA,oBAAmB,qBAAqB;AAC/C,qBAAa,IAAIA,iBAAgB,EAAE;AACnC,cAAM,aAAa,QAAQ,IAAIA,iBAAgB,EAAE;AACjD,QAAI,cACA,aAAa,KAAK,MAAS,GAC3B,YAAY,KAAK,UAAU,MAE3B,aAAa,KAAKA,iBAAgB,aAAa,GAC/C,YAAY,KAAK,MAAS;AAAA,MAElC;AACA,YAAM,eAAe,aAAa,KAAK,CAAC,MAAM,MAAM,MAAS,GACvD,cAAc,YAAY,KAAK,CAAC,MAAM,MAAM,MAAS;AAC3D,wBAAkB,eAAe,eAAe,QAChD,iBAAiB,cAAc,cAAc;AAAA,IACjD;AAGA,QAAI,MAAM,QAAQ,SAAS;AAEvB,iBAAW,YAAY,WAAW;AAC9B,qBAAa,IAAI,SAAS,EAAE;AAC5B,cAAM,gBAAgB,QAAQ,IAAI,SAAS,EAAE;AAC7C,QAAI,gBACA,gBAAgB,SAAS,EAAE,IAAI,gBACxB,SAAS,kBAAkB,WAClC,iBAAiB,SAAS,EAAE,IAAI,SAAS;AAAA,MAEjD;AAAA;AAGA,iBAAW,CAAC,MAAM,QAAQ,KAAK,OAAO,QAAQ,SAAS,GAAG;AACtD,qBAAa,IAAI,SAAS,EAAE;AAC5B,cAAM,gBAAgB,QAAQ,IAAI,SAAS,EAAE;AAC7C,QAAI,gBACA,gBAAgB,IAAI,IAAI,gBACjB,SAAS,kBAAkB,WAClC,iBAAiB,IAAI,IAAI,SAAS;AAAA,MAE1C;AAGJ,QAAI;AACA,iBAAW,CAAC,IAAI,KAAK,KAAK;AACtB,QAAK,aAAa,IAAI,EAAE,MACpB,gBAAgB,EAAE,IAAI;AAKlC,WAAO,CAAC,iBAAiB,gBAAgB,kBAAkB,eAAe;AAAA,EAC9E;AAAA,EAEA,cAA8C,YAAgB;AAE1D,WADgB,IAAI,kBAAkB,KAAK,eAAe,KAAK,uBAAuB,EACvE,eAAe,UAAU;AAAA,EAC5C;AAAA,EAEA,WAAqD,YAAgB;AAEjE,UAAM,UADU,IAAI,kBAAkB,KAAK,eAAe,KAAK,uBAAuB,EAC9D,QAAQ,UAAU;AAC1C,gBAAK,gBAAgB,KAAK,OAAO,GACjC,QAAQ,QAAQ,MAAK;AACjB,YAAM,QAAQ,KAAK,gBAAgB,QAAQ,OAAO;AAClD,MAAI,SAAS,KAAG,KAAK,gBAAgB,OAAO,OAAO,CAAC;AAAA,IACxD,CAAC,GACM;AAAA,EACX;AAAA,EAEA,iBAA2D,YAAgB;AAEvE,WADgB,IAAI,kBAAkB,KAAK,eAAe,KAAK,uBAAuB,EACvE,cAAc,UAAU;AAAA,EAC3C;AAAA;AAAA,EAGA,UAAO;AACH,SAAK,MAAA,GACL,KAAK,iBAAiB,SAAA;AAAA,EAC1B;AACH;AAED,MAAM,YAAW;AAAA,EAoBF;AAAA,EACC;AAAA,EACA;AAAA,EArBZ,eAA4C,CAAA;AAAA,EAC5C,UAAU;AAAA,IACN,OAAO,CAAC,SAAc,UAAe,aAAoE;AACrG,YAAM,YAAY,gBAAgB,KAAK,WAAW;AAClD,aAAO,IAAI,eAAe,KAAK,aAAa,WAAW,UAAU,KAAK,MAAM;AAAA,IAChF;AAAA,IAEA,KAAK,CAAC,SAAc,SAA8B;AAC9C,YAAM,WAAW,KAAK,aAAa,IAAI;AACvC,UAAI;AAAU,eAAO,SAAS;AAC9B,YAAM,iBAAiB,IAAI,YAAY,CAAC,GAAG,KAAK,aAAa,IAAI,GAAG,KAAK,QAAQ,KAAK,aAAa;AACnG,kBAAK,aAAa,IAAI,IAAI,gBACnB,eAAe;AAAA,IAC1B;AAAA,EAAA;AAAA,EAGJ;AAAA,EAEA,YACW,aACC,QACA,eAA4B;AAF7B,SAAA,cAAA,aACC,KAAA,SAAA,QACA,KAAA,gBAAA;AAER,UAAM,SAAS,MAAM;AACrB,SAAK,QAAQ,IAAI,MAAM,QAAQ,KAAK,OAAO;AAAA,EAC/C;AACH;"}
|
|
1
|
+
{"version":3,"file":"client.js","names":[],"sources":["../../../src/client.ts"],"sourcesContent":["/* ########\n * 2023 mion\n * Author: Ma-jerez\n * License: MIT\n * The software is provided \"as is\", without warranty of any kind.\n * ######## */\n\nimport {DEFAULT_CLIENT_OPTIONS, MIDDLEWARE_HOOKS} from './constants.ts';\nimport {\n ClientOptions,\n InjectedApiMetadata,\n MiddlewareSubRequest,\n InitClientOptions,\n RouteSubRequest,\n SubRequest,\n ClientRoutes,\n ClientMiddlewares,\n} from './types.ts';\nimport type {RemoteApi} from '@mionjs/router';\nimport type {InjectBuildVersion} from '@mionjs/run-types';\nimport {getRouterItemId} from '@mionjs/core';\nimport {createCallContext} from './callContext.ts';\nimport {dispatchCall, dispatchTypeErrors} from './dispatch.ts';\nimport type {RunTypeError} from '@mionjs/core';\nimport {HandlersRegistry} from './lib/handlersRegistry.ts';\nimport {TypedEvent} from './lib/typedEvent.ts';\nimport {MionSubRequest} from './subRequest.ts';\nimport {setApiBuildVersion} from './lib/apiBuildVersion.ts';\nimport {registerBundledApi} from '#bundled-api';\nimport {MIDDLEWARE_TARGET, type MiddlewareTarget} from './lib/metadataFetcher.ts';\n\nlet apiBundled = false;\n\n/** Called by generated code, never by hand: bundling the API is a build option. */\nexport function setApiBundled(): void {\n apiBundled = true;\n}\n\n/** A bundled route needs nothing from the server; `buildVersion` is build-filled, never by hand. */\nexport function initClient<RM extends RemoteApi>(\n options: InitClientOptions,\n buildVersion?: InjectBuildVersion<RM>\n): {client: MionClient; routes: ClientRoutes<RM>; middlewares: ClientMiddlewares<RM>} {\n setApiBuildVersion(buildVersion);\n const clientOptions = {...DEFAULT_CLIENT_OPTIONS, ...options};\n const client = new MionClient(clientOptions);\n return {\n client,\n routes: new MethodProxy([], client, false).proxy as ClientRoutes<RM>,\n middlewares: new MethodProxy([], client, true).proxy as ClientMiddlewares<RM>,\n };\n}\n\nexport class MionClient {\n readonly handlersRegistry = new HandlersRegistry();\n\n private globalAbortController = new AbortController();\n private get globalSignal(): AbortSignal {\n return this.globalAbortController.signal;\n }\n\n constructor(private clientOptions: ClientOptions) {}\n\n /** False means the build did not bundle the API: every route is fetched. */\n get isApiBundled(): boolean {\n return apiBundled;\n }\n\n /** Registers the metadata and compiled functions a dispatch point received from the build. */\n useBundledApi(apiMetadata: InjectedApiMetadata | undefined): void {\n if (apiMetadata !== undefined) registerBundledApi(apiMetadata);\n }\n\n /** Aborts all in-flight requests. New requests after this call work normally. */\n abort(): void {\n this.globalAbortController.abort();\n this.globalAbortController = new AbortController();\n }\n\n private composeSignal(signal?: AbortSignal, timeout?: number): AbortSignal {\n const signals: AbortSignal[] = [this.globalSignal];\n if (signal) signals.push(signal);\n const effectiveTimeout = timeout ?? this.clientOptions.timeout;\n if (effectiveTimeout !== undefined) signals.push(AbortSignal.timeout(effectiveTimeout));\n return AbortSignal.any(signals);\n }\n\n async execute(\n routeSubRequest?: RouteSubRequest<any>,\n batchSubRequests?: RouteSubRequest<any>[],\n batchId?: string,\n signal?: AbortSignal,\n timeout?: number\n ): Promise<any> {\n // Before any await, so an abort() while onRequest runs is respected\n const composedSignal = this.composeSignal(signal, timeout);\n const context = createCallContext(this.clientOptions, routeSubRequest, batchSubRequests, batchId, composedSignal);\n return dispatchCall(context, this.handlersRegistry);\n }\n\n typeErrors<List extends SubRequest<any>[]>(...subRequest: List): Promise<RunTypeError[]> {\n return dispatchTypeErrors(this.clientOptions, subRequest, this.handlersRegistry);\n }\n\n destroy(): void {\n this.abort();\n this.handlersRegistry.clearAll();\n }\n}\n\nconst middlewareHooks = new Set<string>(MIDDLEWARE_HOOKS);\n\nclass MethodProxy {\n propsProxies: Record<string, MethodProxy> = {};\n private events?: TypedEvent<any, any>;\n handler = {\n apply: (_target: any, _thisArg: any, argArray?: any): RouteSubRequest<any> & MiddlewareSubRequest<any> => {\n const handlerId = getRouterItemId(this.parentProps);\n return new MionSubRequest(this.parentProps, handlerId, argArray, this.client);\n },\n\n // On the middlewares tree hook names win, so no middleware can be named after one\n get: (_target: any, prop: string): any => {\n if (this.isMiddleware && prop === (MIDDLEWARE_TARGET as unknown)) {\n return {id: getRouterItemId(this.parentProps), registry: this.client.handlersRegistry} satisfies MiddlewareTarget;\n }\n if (this.isMiddleware && middlewareHooks.has(prop)) return this.getEvents()[prop].bind(this.events);\n const existing = this.propsProxies[prop];\n if (existing) return existing.proxy;\n const newMethodProxy = new MethodProxy([...this.parentProps, prop], this.client, this.isMiddleware);\n this.propsProxies[prop] = newMethodProxy;\n return newMethodProxy.proxy;\n },\n };\n\n proxy: typeof Proxy;\n\n constructor(\n public parentProps: string[],\n private client: MionClient,\n private isMiddleware: boolean\n ) {\n const target = () => null;\n this.proxy = new Proxy(target, this.handler);\n }\n\n private getEvents(): TypedEvent<any, any> {\n if (!this.events) {\n const createSubRequest = (params: any[]) => this.handler.apply(null, null, params);\n this.events = new TypedEvent(getRouterItemId(this.parentProps), this.client.handlersRegistry, createSubRequest);\n }\n return this.events;\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
import { ClientOptions } from './types.ts';
|
|
2
|
-
|
|
2
|
+
import { StorageEngine } from './lib/storage.ts';
|
|
3
|
+
export declare const DEFAULT_STORAGE_ENGINE: StorageEngine;
|
|
4
|
+
export declare const DEFAULT_CLIENT_OPTIONS: ClientOptions;
|
|
5
|
+
export declare const MIDDLEWARE_HOOKS: readonly ["onRequest", "offRequest", "onResponse", "offResponse", "onError", "offError"];
|
|
3
6
|
export declare const MAX_GET_URL_LENGTH = 4096;
|
|
4
7
|
export declare const STORAGE_KEY = "mion:client";
|
|
5
|
-
export declare const
|
|
6
|
-
export declare const
|
|
8
|
+
export declare const METADATA_CACHE_MAX_BYTES: number;
|
|
9
|
+
export declare const METADATA_CACHE_EVICTION_ROUNDS = 5;
|
|
10
|
+
export declare const CLIENT_REQUEST_ERROR_ID = "mion-client-request";
|
|
7
11
|
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -1,25 +1,29 @@
|
|
|
1
|
-
|
|
1
|
+
var DEFAULT_STORAGE_ENGINE = "indexeddb", DEFAULT_CLIENT_OPTIONS = {
|
|
2
2
|
baseURL: "",
|
|
3
|
-
fetchOptions: {
|
|
4
|
-
method: "PUT",
|
|
5
|
-
headers: { "Content-Type": "application/json" }
|
|
6
|
-
},
|
|
7
|
-
/** Prefix for all routes, i.e: api/v1 */
|
|
3
|
+
fetchOptions: { headers: { "Content-Type": "application/json" } },
|
|
8
4
|
basePath: "",
|
|
9
|
-
/** Suffix for all routes, i.e: .json */
|
|
10
5
|
suffix: "",
|
|
11
|
-
/** Enables automatic parameter validation */
|
|
12
6
|
validateParams: !0,
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
7
|
+
validateServerResponses: !1,
|
|
8
|
+
sanitizeParams: !0,
|
|
9
|
+
storageEngine: DEFAULT_STORAGE_ENGINE
|
|
10
|
+
}, MIDDLEWARE_HOOKS = [
|
|
11
|
+
"onRequest",
|
|
12
|
+
"offRequest",
|
|
13
|
+
"onResponse",
|
|
14
|
+
"offResponse",
|
|
15
|
+
"onError",
|
|
16
|
+
"offError"
|
|
17
|
+
], MAX_GET_URL_LENGTH = 4096, STORAGE_KEY = "mion:client", METADATA_CACHE_MAX_BYTES = 8 * 1024 * 1024, METADATA_CACHE_EVICTION_ROUNDS = 5, CLIENT_REQUEST_ERROR_ID = "mion-client-request";
|
|
18
18
|
export {
|
|
19
|
-
|
|
19
|
+
CLIENT_REQUEST_ERROR_ID,
|
|
20
|
+
DEFAULT_CLIENT_OPTIONS,
|
|
21
|
+
DEFAULT_STORAGE_ENGINE,
|
|
20
22
|
MAX_GET_URL_LENGTH,
|
|
21
|
-
|
|
22
|
-
|
|
23
|
+
METADATA_CACHE_EVICTION_ROUNDS,
|
|
24
|
+
METADATA_CACHE_MAX_BYTES,
|
|
25
|
+
MIDDLEWARE_HOOKS,
|
|
23
26
|
STORAGE_KEY
|
|
24
27
|
};
|
|
25
|
-
|
|
28
|
+
|
|
29
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sources":["../../../src/constants.ts"],"sourcesContent":["/* ########\n * 2022 mion\n * Author: Ma-jerez\n * License: MIT\n * The software is provided \"as is\", without warranty of any kind.\n * ######## */\n\nimport {ClientOptions} from './types.ts';\n\nexport const
|
|
1
|
+
{"version":3,"file":"constants.js","names":[],"sources":["../../../src/constants.ts"],"sourcesContent":["/* ########\n * 2022 mion\n * Author: Ma-jerez\n * License: MIT\n * The software is provided \"as is\", without warranty of any kind.\n * ######## */\n\nimport {ClientOptions} from './types.ts';\nimport type {StorageEngine} from './lib/storage.ts';\n\n/** The engine the client uses when an app does not name one. */\nexport const DEFAULT_STORAGE_ENGINE: StorageEngine = 'indexeddb';\n\nexport const DEFAULT_CLIENT_OPTIONS: ClientOptions = {\n baseURL: '',\n fetchOptions: {\n headers: {'Content-Type': 'application/json'},\n },\n /** Prefix for all routes, i.e: api/v1 */\n basePath: '',\n /** Suffix for all routes, i.e: .json */\n suffix: '',\n validateParams: true,\n validateServerResponses: false,\n sanitizeParams: true,\n /** Where the client keeps what it learned about the remote methods */\n storageEngine: DEFAULT_STORAGE_ENGINE,\n};\n\n/** The hook names a middleware function answers; a sub request carries none of them */\nexport const MIDDLEWARE_HOOKS = ['onRequest', 'offRequest', 'onResponse', 'offResponse', 'onError', 'offError'] as const;\n\n/** Maximum safe URL length for GET requests with ?data= query param */\nexport const MAX_GET_URL_LENGTH = 4096;\n\nexport const STORAGE_KEY = 'mion:client';\n\n/** What one server's metadata cache may hold before it drops its oldest entries; well under what a browser grants. */\nexport const METADATA_CACHE_MAX_BYTES = 8 * 1024 * 1024;\n\n/** How many times a refused write may drop more old entries and retry before the app is told. */\nexport const METADATA_CACHE_EVICTION_ROUNDS = 5;\n\n/** Key for request-scoped client errors (transport, platform, framework); deliberately NOT a route or\n * middleware id, so they can never land in a subrequest's slot. */\nexport const CLIENT_REQUEST_ERROR_ID = 'mion-client-request';\n"],"mappings":"AAWA,IAAa,yBAAwC,aAExC,yBAAwC;AAAA,EACnD,SAAS;AAAA,EACT,cAAc,EACZ,SAAS,EAAC,gBAAgB,mBAAkB,EAC9C;AAAA,EAEA,UAAU;AAAA,EAEV,QAAQ;AAAA,EACR,gBAAgB;AAAA,EAChB,yBAAyB;AAAA,EACzB,gBAAgB;AAAA,EAEhB,eAAe;AACjB,GAGa,mBAAmB;AAAA,EAAC;AAAA,EAAa;AAAA,EAAc;AAAA,EAAc;AAAA,EAAe;AAAA,EAAW;AAAU,GAGjG,qBAAqB,MAErB,cAAc,eAGd,2BAA2B,IAAI,OAAO,MAGtC,iCAAiC,GAIjC,0BAA0B"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { BatchResult, ClientCallContext, ClientOptions, RequestErrors, Result, SubRequest } from './types.ts';
|
|
2
|
+
import { HandlersRegistry } from './lib/handlersRegistry.ts';
|
|
3
|
+
import { RunTypeError } from '@mionjs/core';
|
|
4
|
+
export declare function dispatchCall(context: ClientCallContext, handlersRegistry: HandlersRegistry): Promise<BatchResult<any> | Result<any, any>>;
|
|
5
|
+
export declare function dispatchTypeErrors(options: ClientOptions, subRequests: SubRequest<any>[], handlersRegistry?: HandlersRegistry): Promise<RunTypeError[]>;
|
|
6
|
+
export declare function isMiddlewareInScope(middlewarePointer: string[], routePointer: string[]): boolean;
|
|
7
|
+
export declare function routeSucceeded(context: ClientCallContext, routeId: string, errors: RequestErrors | undefined): boolean;
|
|
8
|
+
//# sourceMappingURL=dispatch.d.ts.map
|