@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
|
@@ -1,7 +1,6 @@
|
|
|
1
|
+
import { isInputFromRef } from "./batch.js";
|
|
1
2
|
import { RpcError } from "@mionjs/core";
|
|
2
|
-
|
|
3
|
-
import { isMapFromRef } from "./routesFlow.js";
|
|
4
|
-
class MionSubRequest {
|
|
3
|
+
var MionSubRequest = class {
|
|
5
4
|
client;
|
|
6
5
|
pointer;
|
|
7
6
|
id;
|
|
@@ -12,39 +11,18 @@ class MionSubRequest {
|
|
|
12
11
|
serializedParams;
|
|
13
12
|
mappings = [];
|
|
14
13
|
constructor(parentProps, handlerId, argArray, client) {
|
|
15
|
-
this.client = client, this.pointer = [...parentProps], this.id = handlerId, this.params = argArray.map((arg, index) =>
|
|
14
|
+
this.client = client, this.pointer = [...parentProps], this.id = handlerId, this.params = argArray.map((arg, index) => isInputFromRef(arg) ? (arg.toRequestId = this.id, arg.paramIndex = index, this.mappings.push(arg), null) : arg);
|
|
16
15
|
}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
const typedEvent = new TypedEvent(this.id, this.client.handlersRegistry);
|
|
20
|
-
return this.client.prefill(this).catch((errors) => {
|
|
21
|
-
console.error("Prefill error:", findSubRequestError(this, errors));
|
|
22
|
-
}), typedEvent;
|
|
16
|
+
call(setup, apiMetadata) {
|
|
17
|
+
return this.client.useBundledApi(apiMetadata), this.client.execute(this, void 0, void 0, setup?.signal, setup?.timeout);
|
|
23
18
|
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
return this.client.handlersRegistry.clearHandlers(this.id), this.client.removePrefill(this);
|
|
19
|
+
typeErrors(apiMetadata) {
|
|
20
|
+
return this.client.useBundledApi(apiMetadata), this.client.typeErrors(this).catch((errors) => Promise.reject(findSubRequestError(this, errors)));
|
|
27
21
|
}
|
|
28
|
-
|
|
29
|
-
call(setup) {
|
|
30
|
-
const signal = setup?.signal, timeout = setup?.timeout;
|
|
31
|
-
return !setup || !setup.otherRoutes && !setup.middleFns ? this.client.execute(this, void 0, void 0, signal, timeout) : setup.otherRoutes && setup.otherRoutes.length > 0 ? this.executeWithOtherRoutes(setup.otherRoutes, setup.middleFns, signal, timeout) : this.client.execute(this, void 0, setup.middleFns, signal, timeout);
|
|
32
|
-
}
|
|
33
|
-
async executeWithOtherRoutes(otherRoutes, middleFns, signal, timeout) {
|
|
34
|
-
const allRoutes = [this, ...otherRoutes], [results, errors, mfR, mfE] = await this.client.execute(void 0, allRoutes, middleFns ?? {}, signal, timeout), emptyResults = allRoutes.map(() => {
|
|
35
|
-
}), emptyErrors = allRoutes.map(() => {
|
|
36
|
-
});
|
|
37
|
-
return [results ?? emptyResults, errors ?? emptyErrors, mfR, mfE];
|
|
38
|
-
}
|
|
39
|
-
/** Validates parameters and returns type errors */
|
|
40
|
-
typeErrors() {
|
|
41
|
-
return this.client.typeErrors(this).catch((errors) => Promise.reject(findSubRequestError(this, errors)));
|
|
42
|
-
}
|
|
43
|
-
}
|
|
22
|
+
};
|
|
44
23
|
function findSubRequestError(subRequest, errors) {
|
|
45
24
|
const specificError = errors.get(subRequest.id);
|
|
46
|
-
if (specificError)
|
|
47
|
-
return specificError;
|
|
25
|
+
if (specificError) return specificError;
|
|
48
26
|
const firstError = errors.values().next().value;
|
|
49
27
|
return firstError || new RpcError({
|
|
50
28
|
type: "unknown-error",
|
|
@@ -55,4 +33,5 @@ export {
|
|
|
55
33
|
MionSubRequest,
|
|
56
34
|
findSubRequestError
|
|
57
35
|
};
|
|
58
|
-
|
|
36
|
+
|
|
37
|
+
//# sourceMappingURL=subRequest.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subRequest.js","sources":["../../../src/subRequest.ts"],"sourcesContent":["/* ########\n * 2025 mion\n * Author: Ma-jerez\n * License: MIT\n * The software is provided \"as is\", without warranty of any kind.\n * ######## */\n\nimport {RpcError} from '@mionjs/core';\nimport type {RunTypeError} from '@mionjs/core';\nimport type {CallSetup,
|
|
1
|
+
{"version":3,"file":"subRequest.js","names":[],"sources":["../../../src/subRequest.ts"],"sourcesContent":["/* ########\n * 2025 mion\n * Author: Ma-jerez\n * License: MIT\n * The software is provided \"as is\", without warranty of any kind.\n * ######## */\n\nimport {RpcError} from '@mionjs/core';\nimport type {RunTypeError} from '@mionjs/core';\nimport type {CallSetup, RequestErrors, RouteSubRequest, SubRequest} from './types.ts';\nimport type {InjectedApiMetadata} from './types.ts';\n\nimport type {InputFromRef} from '@mionjs/core';\nimport type {MionClient} from './client.ts';\nimport {isInputFromRef} from './batch.ts';\n\nexport class MionSubRequest<S = any, E extends RpcError<string, any> = any> implements RouteSubRequest<any> {\n pointer: string[];\n id: string;\n isResolved: boolean = false;\n params: any[];\n resolvedValue?: S;\n error?: E;\n serializedParams?: any[];\n mappings: InputFromRef[] = [];\n\n constructor(\n parentProps: string[],\n handlerId: string,\n argArray: any[],\n readonly client: MionClient\n ) {\n this.pointer = [...parentProps];\n this.id = handlerId;\n this.params = argArray.map((arg, index) => {\n if (isInputFromRef(arg)) {\n arg.toRequestId = this.id;\n arg.paramIndex = index;\n this.mappings.push(arg);\n return null;\n }\n return arg;\n });\n }\n\n /** `apiMetadata` is filled by the build when routes are bundled, never by hand. */\n call(setup?: CallSetup, apiMetadata?: InjectedApiMetadata): Promise<any> {\n this.client.useBundledApi(apiMetadata);\n return this.client.execute(this as unknown as RouteSubRequest<any>, undefined, undefined, setup?.signal, setup?.timeout);\n }\n\n /** `apiMetadata` is filled by the build when routes are bundled, never by hand. */\n typeErrors(apiMetadata?: InjectedApiMetadata): Promise<RunTypeError[]> {\n this.client.useBundledApi(apiMetadata);\n return this.client\n .typeErrors(this as SubRequest<any>)\n .catch((errors: RequestErrors) => Promise.reject(findSubRequestError(this, errors)));\n }\n}\n\n/** Finds the most relevant error from the errors map for a given sub-request */\nexport function findSubRequestError(subRequest: SubRequest<any>, errors: RequestErrors): RpcError<string> {\n const specificError = errors.get(subRequest.id);\n if (specificError) return specificError;\n\n const firstError = errors.values().next().value;\n if (firstError) return firstError;\n\n return new RpcError({\n type: 'unknown-error',\n publicMessage: 'An unknown error occurred',\n });\n}\n"],"mappings":";;AAgBA,IAAa,iBAAb,MAA4G;AAAA,EAc/F;AAAA,EAbX;AAAA,EACA;AAAA,EACA,aAAsB;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAA2B,CAAC;AAAA,EAE5B,YACE,aACA,WACA,UACA,QACA;AADS,SAAA,SAAA,QAET,KAAK,UAAU,CAAC,GAAG,WAAW,GAC9B,KAAK,KAAK,WACV,KAAK,SAAS,SAAS,IAAA,CAAK,KAAK,UAC3B,eAAe,GAAG,KACpB,IAAI,cAAc,KAAK,IACvB,IAAI,aAAa,OACjB,KAAK,SAAS,KAAK,GAAG,GACf,QAEF,GACR;AAAA,EACH;AAAA,EAGA,KAAK,OAAmB,aAAiD;AACvE,gBAAK,OAAO,cAAc,WAAW,GAC9B,KAAK,OAAO,QAAQ,MAAyC,QAAW,QAAW,OAAO,QAAQ,OAAO,OAAO;AAAA,EACzH;AAAA,EAGA,WAAW,aAA4D;AACrE,gBAAK,OAAO,cAAc,WAAW,GAC9B,KAAK,OACT,WAAW,IAAuB,EAClC,MAAA,CAAO,WAA0B,QAAQ,OAAO,oBAAoB,MAAM,MAAM,CAAC,CAAC;AAAA,EACvF;AACF;AAGA,SAAgB,oBAAoB,YAA6B,QAAyC;AACxG,QAAM,gBAAgB,OAAO,IAAI,WAAW,EAAE;AAC9C,MAAI,cAAe,QAAO;AAE1B,QAAM,aAAa,OAAO,OAAO,EAAE,KAAK,EAAE;AAC1C,SAAI,cAEG,IAAI,SAAS;AAAA,IAClB,MAAM;AAAA,IACN,eAAe;AAAA,EACjB,CAAC;AACH"}
|
package/.dist/esm/src/types.d.ts
CHANGED
|
@@ -1,37 +1,32 @@
|
|
|
1
|
-
import { RpcError,
|
|
2
|
-
import {
|
|
1
|
+
import { HandlerType, RpcError, InputFromRef, Prettify, RunTypeError, ValidationError } from '@mionjs/core';
|
|
2
|
+
import { PublicHeadersMiddleware, PublicMiddleware, RemoteApi, PublicRoute } from '@mionjs/router';
|
|
3
|
+
import { InjectApiMetadata } from '@mionjs/run-types';
|
|
3
4
|
import { TypedEvent } from './lib/typedEvent.ts';
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
export type
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
{
|
|
11
|
-
[K in keyof MiddleFns]?: MiddleFnSuccess<MiddleFns[K]>;
|
|
12
|
-
} | undefined,
|
|
13
|
-
{
|
|
14
|
-
[K in keyof MiddleFns]?: MiddleFnError<MiddleFns[K]>;
|
|
15
|
-
} | undefined
|
|
5
|
+
import { MIDDLEWARE_HOOKS } from './constants.ts';
|
|
6
|
+
import { StorageEngine } from './lib/storage.ts';
|
|
7
|
+
export type Result<RouteSuccess, RouteError, RA = RemoteApi> = [
|
|
8
|
+
RouteSuccess | undefined,
|
|
9
|
+
RouteError | undefined,
|
|
10
|
+
ClientResponse<RA>
|
|
16
11
|
];
|
|
17
|
-
export type
|
|
18
|
-
[K in keyof Routes]: Routes[K] extends RouteSubRequest<
|
|
12
|
+
export type BatchResult<Routes extends RouteSubRequest<any>[]> = {
|
|
13
|
+
[K in keyof Routes]: Routes[K] extends RouteSubRequest<any> ? Awaited<ReturnType<Routes[K]['call']>> : never;
|
|
19
14
|
};
|
|
20
|
-
export type
|
|
21
|
-
|
|
22
|
-
};
|
|
23
|
-
export interface ClientOptions extends CoreRouterOptions {
|
|
15
|
+
export type ClientFetchOptions = Omit<RequestInit, 'method' | 'body' | 'signal'>;
|
|
16
|
+
export interface ClientOptions {
|
|
24
17
|
baseURL: string;
|
|
25
18
|
basePath: string;
|
|
26
19
|
suffix: string;
|
|
27
|
-
|
|
28
|
-
fetchOptions: RequestInit;
|
|
20
|
+
fetchOptions: ClientFetchOptions;
|
|
29
21
|
validateParams: boolean;
|
|
30
|
-
|
|
22
|
+
validateServerResponses: boolean;
|
|
23
|
+
sanitizeParams: boolean;
|
|
24
|
+
storageEngine: StorageEngine;
|
|
31
25
|
timeout?: number;
|
|
32
26
|
}
|
|
27
|
+
export type InjectedApiMetadata = InjectApiMetadata<RemoteApi, string>;
|
|
33
28
|
type PublicHandler = (...args: any[]) => Promise<any>;
|
|
34
|
-
type PublicMethod = PublicRoute |
|
|
29
|
+
type PublicMethod = PublicRoute | PublicMiddleware | PublicHeadersMiddleware;
|
|
35
30
|
type ExtractHandler<PM extends PublicMethod> = PM extends {
|
|
36
31
|
handler: infer H;
|
|
37
32
|
} ? H : never;
|
|
@@ -46,7 +41,7 @@ export type RequestBody = {
|
|
|
46
41
|
};
|
|
47
42
|
export type RouteParamsType<PM extends PublicMethod> = Parameters<ExtractHandler<PM>>;
|
|
48
43
|
export type RouteParamType<PM extends PublicMethod, Index extends number> = Parameters<ExtractHandler<PM>>[Index];
|
|
49
|
-
export type HeadersParamsType<PM extends
|
|
44
|
+
export type HeadersParamsType<PM extends PublicHeadersMiddleware> = Parameters<ExtractHandler<PM>>[0];
|
|
50
45
|
export type RouteReturnType<PM extends PublicMethod> = HandlerSuccessResponse<ExtractHandler<PM>>;
|
|
51
46
|
export type HandlerResponse<PH extends PublicHandler> = Awaited<ReturnType<PH>>;
|
|
52
47
|
export type HandlerSuccessResponse<PH extends PublicHandler> = Exclude<HandlerResponse<PH>, RpcError<string>>;
|
|
@@ -60,78 +55,95 @@ export type FailResponses<List extends SubRequest<any>[]> = {
|
|
|
60
55
|
[P in keyof List]: FailResponse<List[P]>;
|
|
61
56
|
};
|
|
62
57
|
export type RequestErrors = Map<string, RpcError<string>>;
|
|
63
|
-
export type
|
|
64
|
-
export type
|
|
65
|
-
export type
|
|
58
|
+
export type ErrorOfType<E extends RpcError<string, any>, T extends E['type']> = E extends any ? T extends E['type'] ? E : never : never;
|
|
59
|
+
export type ErrorHandler<E extends RpcError<string, any>> = (error: E, context: MiddlewareContext) => unknown;
|
|
60
|
+
export type ResponseHandler<S> = (result: S, context: MiddlewareContext) => unknown;
|
|
61
|
+
export interface MiddlewareContext extends CallContext {
|
|
62
|
+
retry(): boolean;
|
|
63
|
+
}
|
|
64
|
+
export type RequestHandler<P extends any[] = any[]> = (call: (...params: P) => void, context: CallContext) => void | Promise<void>;
|
|
65
|
+
export interface CallContext {
|
|
66
|
+
readonly route?: RouteSubRequest<any>;
|
|
67
|
+
readonly batchSubRequests?: RouteSubRequest<any>[];
|
|
68
|
+
readonly subRequestList: Readonly<Record<string, SubRequest<any>>>;
|
|
69
|
+
readonly options: ClientOptions;
|
|
70
|
+
readonly signal?: AbortSignal;
|
|
71
|
+
}
|
|
72
|
+
export interface ClientCallContext extends CallContext {
|
|
73
|
+
readonly path: string;
|
|
74
|
+
readonly requestId: string;
|
|
75
|
+
readonly subRequestList: Record<string, SubRequest<any>>;
|
|
76
|
+
readonly thrownErrorIds: Set<string>;
|
|
77
|
+
httpResponse: Response | undefined;
|
|
78
|
+
response: ClientResponse<RemoteApi>;
|
|
79
|
+
}
|
|
66
80
|
type Simplify<T> = T extends any ? T : never;
|
|
67
81
|
export type HandlerErrors<PH extends (...args: any[]) => Promise<any>> = Simplify<Extract<HandlerResponse<PH>, RpcError<string, any>> | ValidationError>;
|
|
68
|
-
export interface SubRequest<PH extends PublicHandler> {
|
|
82
|
+
export interface SubRequest<PH extends PublicHandler, Id extends string = string> {
|
|
69
83
|
pointer: string[];
|
|
70
|
-
id:
|
|
84
|
+
id: Id;
|
|
71
85
|
isResolved: boolean;
|
|
72
86
|
params: Parameters<PH>;
|
|
73
87
|
resolvedValue?: HandlerSuccessResponse<PH>;
|
|
74
88
|
error?: HandlerFailResponse<PH>;
|
|
75
89
|
serializedParams?: any[];
|
|
90
|
+
mappings?: InputFromRef[];
|
|
76
91
|
}
|
|
77
|
-
export interface CallSetup
|
|
78
|
-
middleFns?: H;
|
|
79
|
-
otherRoutes?: [...OtherRoutes];
|
|
92
|
+
export interface CallSetup {
|
|
80
93
|
signal?: AbortSignal;
|
|
81
94
|
timeout?: number;
|
|
82
95
|
}
|
|
83
|
-
export
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
signal?: AbortSignal;
|
|
87
|
-
timeout?: number;
|
|
88
|
-
}): Promise<WorkflowResult<Routes>>;
|
|
89
|
-
call<H extends Record<string, MiddlewareSubRequest<any>>>(setup: {
|
|
90
|
-
middleFns: H;
|
|
91
|
-
signal?: AbortSignal;
|
|
92
|
-
timeout?: number;
|
|
93
|
-
}): Promise<WorkflowResult<Routes, H>>;
|
|
96
|
+
export type ApiOf<Routes extends SubRequest<any>[]> = Routes[number] extends RouteSubRequest<any, any, infer RA> ? RA : never;
|
|
97
|
+
export interface BatchBuilder<Routes extends RouteSubRequest<any>[]> {
|
|
98
|
+
call(setup?: CallSetup, apiMetadata?: InjectApiMetadata<ApiOf<Routes>, Routes[number]['id']>): Promise<BatchResult<Routes>>;
|
|
94
99
|
}
|
|
95
|
-
export interface RouteSubRequest<PH extends PublicHandler> extends SubRequest<PH> {
|
|
96
|
-
typeErrors
|
|
97
|
-
call(setup?:
|
|
98
|
-
middleFns?: never;
|
|
99
|
-
otherRoutes?: never;
|
|
100
|
-
signal?: AbortSignal;
|
|
101
|
-
timeout?: number;
|
|
102
|
-
}): Promise<Result<HandlerSuccessResponse<PH>, Simplify<HandlerErrors<PH>>>>;
|
|
103
|
-
call<H extends Record<string, MiddlewareSubRequest<any>>>(setup: {
|
|
104
|
-
middleFns: H;
|
|
105
|
-
otherRoutes?: never;
|
|
106
|
-
signal?: AbortSignal;
|
|
107
|
-
timeout?: number;
|
|
108
|
-
}): Promise<Result<HandlerSuccessResponse<PH>, Simplify<HandlerErrors<PH>>, {
|
|
109
|
-
[K in keyof H]?: MiddleFnSuccess<H[K]>;
|
|
110
|
-
}, {
|
|
111
|
-
[K in keyof H]?: MiddleFnError<H[K]>;
|
|
112
|
-
}>>;
|
|
113
|
-
call<OtherRoutes extends RouteSubRequest<any>[], H extends Record<string, MiddlewareSubRequest<any>> = Record<string, never>>(setup: {
|
|
114
|
-
otherRoutes: [...OtherRoutes];
|
|
115
|
-
middleFns?: H;
|
|
116
|
-
signal?: AbortSignal;
|
|
117
|
-
timeout?: number;
|
|
118
|
-
}): Promise<WorkflowResult<any, H>>;
|
|
100
|
+
export interface RouteSubRequest<PH extends PublicHandler, Id extends string = string, RA extends RemoteApi = any> extends SubRequest<PH, Id> {
|
|
101
|
+
typeErrors(apiMetadata?: InjectApiMetadata<RA, Id>): Promise<RunTypeError[]>;
|
|
102
|
+
call(setup?: CallSetup, apiMetadata?: InjectApiMetadata<RA, Id>): Promise<Result<HandlerSuccessResponse<PH>, Simplify<HandlerErrors<PH>>, RA>>;
|
|
119
103
|
}
|
|
120
|
-
export
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
removePrefill: () => Promise<void>;
|
|
104
|
+
export type MiddlewareSubRequest<PH extends PublicHandler, Id extends string = string> = SubRequest<PH, Id>;
|
|
105
|
+
export type MiddlewareEvents<PH extends PublicHandler> = TypedEvent<HandlerSuccessResponse<PH>, Simplify<HandlerErrors<PH>>, Parameters<PH>>;
|
|
106
|
+
export interface ClientMiddleware<PH extends PublicHandler, Id extends string = string> extends Pick<MiddlewareEvents<PH>, (typeof MIDDLEWARE_HOOKS)[number]> {
|
|
124
107
|
}
|
|
125
|
-
export type
|
|
126
|
-
|
|
127
|
-
|
|
108
|
+
export type ClientMiddlewareOf<H extends (ctx: any, ...params: any[]) => any> = H extends (ctx: any, ...params: infer P) => infer R ? ClientMiddleware<(...params: P) => Promise<Awaited<R>>> : never;
|
|
109
|
+
type RouteLeaf = {
|
|
110
|
+
type: typeof HandlerType.route;
|
|
111
|
+
handler: PublicHandler;
|
|
112
|
+
};
|
|
113
|
+
type MiddlewareLeaf = {
|
|
114
|
+
type: typeof HandlerType.middleware | typeof HandlerType.headersMiddleware;
|
|
115
|
+
handler: PublicHandler;
|
|
116
|
+
};
|
|
117
|
+
type AnyLeaf = {
|
|
118
|
+
type: number;
|
|
119
|
+
};
|
|
120
|
+
export type NonClientRoute = MiddlewareLeaf;
|
|
121
|
+
export type ClientRoutes<RA, Prefix extends string = '', Root extends RemoteApi = RA extends RemoteApi ? RA : RemoteApi> = Prettify<{
|
|
122
|
+
[Property in keyof RA & string as RA[Property] extends NonClientRoute ? never : Property]: RA[Property] extends {
|
|
123
|
+
type: typeof HandlerType.route;
|
|
124
|
+
handler: infer H extends PublicHandler;
|
|
125
|
+
} ? (...params: Parameters<H>) => RouteSubRequest<H, `${Prefix}${Property & string}`, Root> : RA[Property] extends AnyLeaf ? never : ClientRoutes<RA[Property], `${Prefix}${Property & string}/`, Root>;
|
|
128
126
|
}>;
|
|
129
|
-
export type
|
|
130
|
-
[key: string]:
|
|
127
|
+
export type NonClientMiddleware = RouteLeaf | {
|
|
128
|
+
[key: string]: RouteLeaf;
|
|
131
129
|
};
|
|
132
|
-
export type
|
|
133
|
-
[Property in keyof RA as RA[Property] extends
|
|
130
|
+
export type ClientMiddlewares<RA, Prefix extends string = ''> = Prettify<{
|
|
131
|
+
[Property in keyof RA & string as RA[Property] extends NonClientMiddleware ? never : Property]: RA[Property] extends {
|
|
132
|
+
type: typeof HandlerType.middleware | typeof HandlerType.headersMiddleware;
|
|
133
|
+
handler: infer H extends PublicHandler;
|
|
134
|
+
} ? ClientMiddleware<H, `${Prefix}${Property & string}`> : RA[Property] extends AnyLeaf ? never : ClientMiddlewares<RA[Property], `${Prefix}${Property & string}/`>;
|
|
134
135
|
}>;
|
|
136
|
+
export type ClientResponse<RA> = (string extends keyof RA ? {
|
|
137
|
+
[key: string]: unknown;
|
|
138
|
+
} : ClientMiddlewareResponses<RA>) & {
|
|
139
|
+
'@thrownErrors'?: RpcError<string>[];
|
|
140
|
+
};
|
|
141
|
+
type ClientMiddlewareResponses<RA> = {
|
|
142
|
+
[Property in keyof RA & string as RA[Property] extends NonClientMiddleware ? never : Property]?: RA[Property] extends {
|
|
143
|
+
type: typeof HandlerType.middleware | typeof HandlerType.headersMiddleware;
|
|
144
|
+
handler: infer H extends PublicHandler;
|
|
145
|
+
} ? HandlerResponse<H> | ValidationError : RA[Property] extends AnyLeaf ? never : ClientMiddlewareResponses<RA[Property]>;
|
|
146
|
+
};
|
|
135
147
|
export type Cleaned<RMS extends RemoteApi> = {
|
|
136
148
|
[Property in keyof RMS as RMS[Property] extends never ? never : Property]: RMS[Property];
|
|
137
149
|
};
|
|
@@ -139,6 +151,5 @@ export type SuccessClientResponse<RS extends RouteSubRequest<any>, RHList extend
|
|
|
139
151
|
SuccessResponse<RS>,
|
|
140
152
|
...SuccessResponses<RHList>
|
|
141
153
|
];
|
|
142
|
-
export type PrefilledMiddleFnsCache = Map<string, SubRequest<any>>;
|
|
143
154
|
export {};
|
|
144
155
|
//# sourceMappingURL=types.d.ts.map
|
package/.dist/esm/src/types.js
CHANGED
package/LICENSE
CHANGED
package/README.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
<p align="center">
|
|
2
2
|
<picture>
|
|
3
|
-
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/MionKit/mion/
|
|
4
|
-
<source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/MionKit/mion/
|
|
5
|
-
<img alt='mion, a mikro kit for Typescript Serverless APIs' src='https://raw.githubusercontent.com/MionKit/mion/
|
|
3
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/MionKit/mion/main/assets/public/bannerx90-dark.png">
|
|
4
|
+
<source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/MionKit/mion/main/assets/public/bannerx90.png">
|
|
5
|
+
<img alt='mion, a mikro kit for Typescript Serverless APIs' src='https://raw.githubusercontent.com/MionKit/mion/main/assets/public/bannerx90.png'>
|
|
6
6
|
</picture>
|
|
7
7
|
</p>
|
|
8
8
|
<p align="center">
|
|
@@ -20,14 +20,14 @@ Modern client for mion APIs:
|
|
|
20
20
|
|
|
21
21
|
- Strongly typed apis with autocompletion ans static type checking.
|
|
22
22
|
- Fully typed list of remote methods with it's parameters and return values.
|
|
23
|
-
-
|
|
23
|
+
- Automatic Validation and JSON Round Trip out of the box.
|
|
24
24
|
- Local Validation (no need to make a server request to validate parameters)
|
|
25
|
-
-
|
|
25
|
+
- Middleware hooks that set their data before every request.
|
|
26
26
|
- No compilation needed
|
|
27
27
|
|
|
28
28
|
## Check Out The [Website And Documentation](http://mion.io) 📚
|
|
29
29
|
|
|
30
|
-
[](http://mion.io)
|
|
31
31
|
|
|
32
32
|
---
|
|
33
33
|
|
package/package.json
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mionjs/client",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.13.0",
|
|
4
4
|
"type": "module",
|
|
5
|
+
"sideEffects": false,
|
|
5
6
|
"description": "Browser client for mion Apps.",
|
|
6
7
|
"keywords": [
|
|
7
8
|
"typescript",
|
|
@@ -20,10 +21,24 @@
|
|
|
20
21
|
"license": "MIT",
|
|
21
22
|
"exports": {
|
|
22
23
|
".": {
|
|
23
|
-
"source": "./index.ts",
|
|
24
24
|
"types": "./.dist/esm/index.d.ts",
|
|
25
25
|
"require": "./.dist/cjs/index.cjs",
|
|
26
26
|
"default": "./.dist/esm/index.js"
|
|
27
|
+
},
|
|
28
|
+
"./middlewares": {
|
|
29
|
+
"types": "./.dist/esm/middlewares.d.ts",
|
|
30
|
+
"require": "./.dist/cjs/middlewares.cjs",
|
|
31
|
+
"default": "./.dist/esm/middlewares.js"
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
"imports": {
|
|
35
|
+
"#metadata-from-server": {
|
|
36
|
+
"require": "./.dist/cjs/src/lib/metadataFromServer.cjs",
|
|
37
|
+
"default": "./.dist/esm/src/lib/metadataFromServer.js"
|
|
38
|
+
},
|
|
39
|
+
"#bundled-api": {
|
|
40
|
+
"require": "./.dist/cjs/src/lib/bundledApi.cjs",
|
|
41
|
+
"default": "./.dist/esm/src/lib/bundledApi.js"
|
|
27
42
|
}
|
|
28
43
|
},
|
|
29
44
|
"directories": {
|
|
@@ -31,10 +46,8 @@
|
|
|
31
46
|
},
|
|
32
47
|
"files": [
|
|
33
48
|
".dist",
|
|
34
|
-
"
|
|
35
|
-
"
|
|
36
|
-
"!src/**/*.spec.ts",
|
|
37
|
-
"!src/**/*.test.ts"
|
|
49
|
+
"!.dist/**/*.tsbuildinfo",
|
|
50
|
+
"!.dist/**/*.d.ts.map"
|
|
38
51
|
],
|
|
39
52
|
"repository": {
|
|
40
53
|
"type": "git",
|
|
@@ -43,30 +56,29 @@
|
|
|
43
56
|
"publishConfig": {
|
|
44
57
|
"access": "public"
|
|
45
58
|
},
|
|
46
|
-
"scripts": {
|
|
47
|
-
"test": "vitest run && npm run test:e2e:ssr",
|
|
48
|
-
"test:e2e:ssr": "node --experimental-strip-types src/aotSSR.e2e.test.ts",
|
|
49
|
-
"dev": "vite build --watch",
|
|
50
|
-
"dev:test": "vitest watch",
|
|
51
|
-
"lint": "npx eslint src",
|
|
52
|
-
"format": "prettier --write src/**/*.ts",
|
|
53
|
-
"build": "vite build",
|
|
54
|
-
"clean": "rimraf .dist & rimraf .coverage",
|
|
55
|
-
"fresh-start": "npm run clean && rimraf node_modules",
|
|
56
|
-
"run-test-server": "ts-node --project test/tsconfig.json test/test-server.ts"
|
|
57
|
-
},
|
|
58
59
|
"bugs": {
|
|
59
60
|
"url": "https://github.com/MionKit/mion/issues"
|
|
60
61
|
},
|
|
61
|
-
"gitHead": "
|
|
62
|
+
"gitHead": "afd6e1d61525b4bf11bb84b3f85089038d70062d",
|
|
62
63
|
"devDependencies": {
|
|
63
|
-
"@mionjs/
|
|
64
|
-
"@mionjs/
|
|
65
|
-
"@mionjs/
|
|
66
|
-
"@mionjs/test-server": "0.
|
|
67
|
-
"jest-environment-jsdom": "^29.6.2"
|
|
64
|
+
"@mionjs/devtools": "0.13.0",
|
|
65
|
+
"@mionjs/platform-node": "0.13.0",
|
|
66
|
+
"@mionjs/router": "0.13.0",
|
|
67
|
+
"@mionjs/test-server": "0.13.0"
|
|
68
68
|
},
|
|
69
69
|
"dependencies": {
|
|
70
|
-
"@mionjs/core": "0.
|
|
70
|
+
"@mionjs/core": "0.13.0",
|
|
71
|
+
"@mionjs/run-types": "0.13.0"
|
|
72
|
+
},
|
|
73
|
+
"scripts": {
|
|
74
|
+
"test": "vitest run",
|
|
75
|
+
"dev": "vite build --watch",
|
|
76
|
+
"dev:test": "vitest watch",
|
|
77
|
+
"lint": "eslint src",
|
|
78
|
+
"typecheck:test": "tsc -p tsconfig.json --noEmit",
|
|
79
|
+
"format": "prettier --write src/**/*.ts",
|
|
80
|
+
"build": "vite build",
|
|
81
|
+
"clean": "rimraf .dist .coverage .mion .mion",
|
|
82
|
+
"fresh-start": "pnpm run clean && rimraf node_modules"
|
|
71
83
|
}
|
|
72
|
-
}
|
|
84
|
+
}
|
package/.dist/cjs/index.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
package/.dist/cjs/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../index.ts"],"names":[],"mappings":"AAOA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,oCAAoC,CAAC;AACnD,cAAc,yCAAyC,CAAC;AACxD,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,yBAAyB,CAAC;AACxC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,qBAAqB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/client.ts"],"names":[],"mappings":"AAQA,OAAO,EACH,aAAa,EACb,oBAAoB,EACpB,iBAAiB,EACjB,eAAe,EACf,UAAU,EAEV,YAAY,EACZ,eAAe,EAGlB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,gBAAgB,CAAC;AAI9C,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAC,gBAAgB,EAAC,MAAM,2BAA2B,CAAC;AAG3D,wBAAgB,UAAU,CAAC,EAAE,SAAS,SAAS,EAC3C,OAAO,EAAE,iBAAiB,GAC3B;IAAC,MAAM,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,YAAY,CAAC,EAAE,CAAC,CAAC;IAAC,SAAS,EAAE,eAAe,CAAC,EAAE,CAAC,CAAA;CAAC,CAahF;AAED,qBAAa,UAAU;IAeP,OAAO,CAAC,aAAa;IAbjC,QAAQ,CAAC,gBAAgB,mBAA0B;IAGnD,QAAQ,CAAC,uBAAuB,+BAAsC;IAGtE,OAAO,CAAC,eAAe,CAAuB;IAE9C,OAAO,CAAC,qBAAqB,CAAyB;IACtD,OAAO,KAAK,YAAY,GAEvB;gBAEmB,aAAa,EAAE,aAAa;IAGhD,KAAK,IAAI,IAAI;IAMb,OAAO,CAAC,aAAa;IASrB,OAAO,CACH,eAAe,CAAC,EAAE,eAAe,CAAC,GAAG,CAAC,EACtC,mBAAmB,CAAC,EAAE,eAAe,CAAC,GAAG,CAAC,EAAE,EAC5C,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,GAAG,CAAC,CAAC,EAC3D,MAAM,CAAC,EAAE,WAAW,EACpB,OAAO,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,GAAG,CAAC;YAID,cAAc;IAsC5B,OAAO,CAAC,WAAW;IAWnB,OAAO,CAAC,0BAA0B;IAUlC,OAAO,CAAC,yBAAyB;IAYjC,OAAO,CAAC,WAAW;IA2EnB,UAAU,CAAC,IAAI,SAAS,UAAU,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,UAAU,EAAE,IAAI,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAKxF,OAAO,CAAC,IAAI,SAAS,oBAAoB,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,UAAU,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAWrF,aAAa,CAAC,IAAI,SAAS,oBAAoB,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,UAAU,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAM3F,OAAO,IAAI,IAAI;CAIlB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/constants.ts"],"names":[],"mappings":"AAOA,OAAO,EAAC,aAAa,EAAC,MAAM,YAAY,CAAC;AAEzC,eAAO,MAAM,uBAAuB,EAAE,aAgBrC,CAAC;AAGF,eAAO,MAAM,kBAAkB,OAAO,CAAC;AAEvC,eAAO,MAAM,WAAW,gBAAgB,CAAC;AAGzC,eAAO,MAAM,eAAe,qBAAqB,CAAC;AAGlD,eAAO,MAAM,gBAAgB,sBAAwB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"clientMethodsMetadata.d.ts","sourceRoot":"","sources":["../../../../src/lib/clientMethodsMetadata.ts"],"names":[],"mappings":"AAQA,OAAO,EAAC,WAAW,EAAC,MAAM,cAAc,CAAC;AACzC,OAAO,EAAC,aAAa,EAAE,UAAU,EAAC,MAAM,aAAa,CAAC;AACtD,OAAO,KAAK,EACR,iBAAiB,EACjB,YAAY,EAIZ,gBAAgB,EACnB,MAAM,cAAc,CAAC;AAStB,KAAK,gBAAgB,GAAG,OAAO,WAAW,CAAC,eAAe,GAAG,OAAO,WAAW,CAAC,mBAAmB,CAAC;AAGpG,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,gBAAgB,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CASnH;AAsBD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,EAAE,UAAU,EAAE,gBAAgB,EAAE,OAAO,EAAE,aAAa,QAqB9H;AAGD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,aAAa,QASjF;AAGD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,aAAa,QA0C5D;AAGD,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,GAAG,CAAC,CAO7E;AAGD,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,aAAa,QA8BlF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fetchRemoteMethodsMetadata.d.ts","sourceRoot":"","sources":["../../../../src/lib/fetchRemoteMethodsMetadata.ts"],"names":[],"mappings":"AAQA,OAAO,EAAC,aAAa,EAAc,MAAM,aAAa,CAAC;AAKvD,wBAAsB,0BAA0B,CAC5C,SAAS,EAAE,MAAM,EAAE,EACnB,OAAO,EAAE,aAAa,EACtB,MAAM,CAAC,EAAE,WAAW,GACrB,OAAO,CAAC,IAAI,CAAC,CA0Bf"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"handlersRegistry.d.ts","sourceRoot":"","sources":["../../../../src/lib/handlersRegistry.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAC,YAAY,EAAE,cAAc,EAAC,MAAM,aAAa,CAAC;AAG9D,qBAAa,gBAAgB;IACzB,OAAO,CAAC,aAAa,CAA0D;IAC/E,OAAO,CAAC,eAAe,CAA+C;IAGtE,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,CAAC,GAAG,CAAC,GAAG,IAAI;IAUhF,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAStD,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;IAMzD,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,OAAO;IAYnE,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,CAAC,GAAG,CAAC,GAAG,IAAI;IAKtE,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAK1C,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAK7C,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,OAAO;IAS9D,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAMtC,QAAQ,IAAI,IAAI;IAMhB,aAAa,IAAI,MAAM,EAAE;IAOzB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE;CAI7C"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"serializer.d.ts","sourceRoot":"","sources":["../../../../src/lib/serializer.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAYjD,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,eAAe,CAAC;AAGrD,OAAO,EAAC,aAAa,EAAC,MAAM,aAAa,CAAC;AAG1C,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,UAAU,CAAC;AAGjD,MAAM,MAAM,WAAW,GAAG,iCAAiC,GAAG,0BAA0B,CAAC;AAGzF,MAAM,WAAW,iBAAiB;IAC9B,IAAI,EAAE,cAAc,CAAC;IACrB,WAAW,EAAE,WAAW,CAAC;CAC5B;AAKD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,iBAAiB,CAsBxF;AA8ED,wBAAsB,uBAAuB,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CAiB/G"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"storage.cjs","sources":["../../../../src/lib/storage.ts"],"sourcesContent":["/* ########\n * 2024 mion\n * Author: Ma-jerez\n * License: MIT\n * The software is provided \"as is\", without warranty of any kind.\n * ######## */\n\nconst STORAGE_GLOBAL_KEY = '__mion_storage__';\n\n/** In-memory Storage implementation for SSR/Node environments where localStorage is not available */\nexport class MemoryStorage {\n private data = new Map<string, string>();\n get length() {\n return this.data.size;\n }\n getItem(key: string): string | null {\n return this.data.get(key) ?? null;\n }\n setItem(key: string, value: string) {\n this.data.set(key, value);\n }\n removeItem(key: string) {\n this.data.delete(key);\n }\n clear() {\n this.data.clear();\n }\n key(index: number): string | null {\n return [...this.data.keys()][index] ?? null;\n }\n}\n\n/** Returns localStorage if available, otherwise a MemoryStorage instance.\n * Uses globalThis to ensure the same instance is shared across module boundaries. */\nexport function getStorage(): Storage | MemoryStorage {\n const existing = (globalThis as any)[STORAGE_GLOBAL_KEY];\n if (existing) return existing;\n let storage: Storage | MemoryStorage;\n try {\n if (typeof localStorage !== 'undefined') {\n localStorage.setItem('__mion_test__', '1');\n localStorage.removeItem('__mion_test__');\n storage = localStorage;\n } else {\n storage = new MemoryStorage();\n }\n } catch {\n storage = new MemoryStorage();\n }\n (globalThis as any)[STORAGE_GLOBAL_KEY] = storage;\n return storage;\n}\n\n/** Reset storage instance, useful for testing */\nexport function resetStorageInstance() {\n delete (globalThis as any)[STORAGE_GLOBAL_KEY];\n}\n"],"names":[],"mappings":"gFAOA,MAAM,mBAAqB,yBAGd,aAAa,CACd,SAAW,IACnB,IAAI,QAAM,CACN,OAAO,KAAK,KAAK,IACrB,CACA,QAAQ,IAAW,CACf,OAAO,KAAK,KAAK,IAAI,GAAG,GAAK,IACjC,CACA,QAAQ,IAAa,MAAa,CAC9B,KAAK,KAAK,IAAI,IAAK,KAAK,CAC5B,CACA,WAAW,IAAW,CAClB,KAAK,KAAK,OAAO,GAAG,CACxB,CACA,OAAK,CACD,KAAK,KAAK,MAAA,CACd,CACA,IAAI,MAAa,CACb,MAAO,CAAC,GAAG,KAAK,KAAK,MAAM,EAAE,KAAK,GAAK,IAC3C,CACH,UAIe,YAAU,CACtB,MAAM,SAAY,WAAmB,kBAAkB,EACvD,GAAI,SAAU,OAAO,SACrB,IAAI,QACJ,GAAI,CACI,OAAO,aAAiB,KACxB,aAAa,QAAQ,gBAAiB,GAAG,EACzC,aAAa,WAAW,eAAe,EACvC,QAAU,cAEV,QAAU,IAAI,aAEtB,MAAQ,CACJ,QAAU,IAAI,aAClB,CACC,kBAAmB,kBAAkB,EAAI,QACnC,OACX,UAGgB,sBAAoB,CAChC,OAAQ,WAAmB,kBAAkB,CACjD"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../../src/lib/storage.ts"],"names":[],"mappings":"AAUA,qBAAa,aAAa;IACtB,OAAO,CAAC,IAAI,CAA6B;IACzC,IAAI,MAAM,WAET;IACD,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAGnC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAGlC,UAAU,CAAC,GAAG,EAAE,MAAM;IAGtB,KAAK;IAGL,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;CAGpC;AAID,wBAAgB,UAAU,IAAI,OAAO,GAAG,aAAa,CAiBpD;AAGD,wBAAgB,oBAAoB,SAEnC"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const core=require("@mionjs/core");function resetClientCaches(){const cache=core.routesCache.getCache();for(const key in cache)delete cache[key];core.resetJitFnCaches(),core.resetJitFunctionsCache()}exports.resetClientCaches=resetClientCaches;
|
|
2
|
-
//# sourceMappingURL=testUtils.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"testUtils.cjs","sources":["../../../../src/lib/testUtils.ts"],"sourcesContent":["/* ########\n * 2024 mion\n * Author: Ma-jerez\n * License: MIT\n * The software is provided \"as is\", without warranty of any kind.\n * ######## */\n\nimport {resetJitFnCaches, resetJitFunctionsCache, routesCache} from '@mionjs/core';\n\n/** Resets all client caches. Only for testing — simulates app restart. */\nexport function resetClientCaches() {\n const cache = routesCache.getCache();\n for (const key in cache) delete cache[key];\n resetJitFnCaches();\n resetJitFunctionsCache();\n}\n"],"names":["routesCache","resetJitFnCaches","resetJitFunctionsCache"],"mappings":"4HAUgB,mBAAiB,CAC7B,MAAM,MAAQA,KAAAA,YAAY,SAAA,EAC1B,UAAW,OAAO,MAAO,OAAO,MAAM,GAAG,EACzCC,sBAAA,EACAC,4BAAA,CACJ"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"testUtils.d.ts","sourceRoot":"","sources":["../../../../src/lib/testUtils.ts"],"names":[],"mappings":"AAUA,wBAAgB,iBAAiB,SAKhC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"typedEvent.d.ts","sourceRoot":"","sources":["../../../../src/lib/typedEvent.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAe,cAAc,EAAC,MAAM,aAAa,CAAC;AAG9D,qBAAa,UAAU,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,SAAS,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,KAAK;IAEjE,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBADR,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,gBAAgB;IAI/C,SAAS,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC;IAMvD,UAAU,IAAI,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC;IAM9B,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,EAAE;QAAC,IAAI,EAAE,CAAC,CAAA;KAAC,CAAC,KAAK,IAAI,GAAG,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC;IAM7G,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC;IAM7D,YAAY,IAAI,MAAM;IAKtB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAK3C,iBAAiB,IAAI,OAAO;CAG/B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../../src/lib/validation.ts"],"names":[],"mappings":"AAQA,OAAO,EAAC,aAAa,EAAE,UAAU,EAAC,MAAM,aAAa,CAAC;AACtD,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,eAAe,CAAC;AAGrD,wBAAgB,mBAAmB,CAC/B,aAAa,EAAE,MAAM,EAAE,EACvB,GAAG,EAAE,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,EAChC,MAAM,EAAE,aAAa,EACrB,sBAAsB,UAAO,GAC9B,IAAI,CAYN;AAGD,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CAiBvG"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const core=require("@mionjs/core"),src_lib_fetchRemoteMethodsMetadata=require("./lib/fetchRemoteMethodsMetadata.cjs"),src_lib_clientMethodsMetadata=require("./lib/clientMethodsMetadata.cjs"),src_lib_validation=require("./lib/validation.cjs"),src_lib_serializer=require("./lib/serializer.cjs"),src_constants=require("./constants.cjs");class MionClientRequest{options;prefilledMiddleFnsCache;route;middleFns;workflowSubRequests;signal;path;requestId;subRequestList={};response;constructor(options,prefilledMiddleFnsCache,route,middleFns,workflowSubRequests,signal){if(this.options=options,this.prefilledMiddleFnsCache=prefilledMiddleFnsCache,this.route=route,this.middleFns=middleFns,this.workflowSubRequests=workflowSubRequests,this.signal=signal,workflowSubRequests&&workflowSubRequests.length>0){const routePaths=workflowSubRequests.map(sr=>core.getRoutePath(sr.pointer,this.options)),query=buildRoutesFlowQuery(routePaths,workflowSubRequests),flowPath=core.getRoutePath([src_constants.ROUTES_FLOW_KEY],this.options);this.path=`${flowPath}?data=${core.toBase64Url(JSON.stringify(query))}`,this.requestId="mion-routes-flow",workflowSubRequests.forEach(sr=>this.addSubRequest(sr))}else this.path=route?core.getRoutePath(route.pointer,this.options):"no-route",this.requestId=route?route.id:"no-route",route&&this.addSubRequest(route);middleFns&&middleFns.forEach(middleFn=>this.addSubRequest(middleFn))}async call(){if(this.signal?.aborted){const errors=new Map;return this.onError(this.signal.reason??new DOMException("This operation was aborted","AbortError"),"Request aborted",errors),Promise.reject(errors)}return this.makeCall(this.options.serializer)}async makeCall(originalSerializer,skipOptimistic){const errors=new Map,subRequestIds=Object.keys(this.subRequestList),isOptimistic=!subRequestIds.every(id=>core.routesCache.hasMetadata(id))&&!skipOptimistic;try{if(isOptimistic){this.options.serializer="optimistic",this.restorePrefilledMiddleFns();const allSubRequestIds=Object.keys(this.subRequestList);this.addSubRequest(src_lib_clientMethodsMetadata.createMetadataSubRequest(allSubRequestIds))}else if(this.options.serializer=originalSerializer,await src_lib_fetchRemoteMethodsMetadata.fetchRemoteMethodsMetadata(subRequestIds,this.options,this.signal),this.restorePrefilledMiddleFns(errors),errors.size||(src_lib_validation.validateSubRequests(subRequestIds,this,errors),errors.size))return Promise.reject(errors)}catch(error){return this.onError(error,"Error preparing request",errors),Promise.reject(errors)}try{let serialized;try{serialized=src_lib_serializer.serializeRequestBody(this)}catch(serializeError){if(isOptimistic)return delete this.subRequestList[core.MION_ROUTES.methodsMetadata],this.makeCall(originalSerializer,!0);throw serializeError}const headersFromParams=extractRequestHeaders(this),url=new URL(this.path,this.options.baseURL),fetchOptions=buildFetchOptions(url,serialized,headersFromParams,this.options,isOptimistic,this.isQueryRoute(),this.signal);this.response=await fetch(url,fetchOptions)}catch(error){return this.onError(error,"Error executing request",errors),Promise.reject(errors)}try{if(this.signal?.aborted)return this.onError(this.signal.reason,"Request aborted",errors),Promise.reject(errors);const deserialized=await src_lib_serializer.deserializeResponseBody(this.response,this.options);return this.handlePlatformError(deserialized,errors)?Promise.reject(errors):isOptimistic&&!this.signal?.aborted&&this.shouldRetryWithProperSerialization(deserialized)?this.retryWithProperSerialization(originalSerializer):(this.resolveSubRequests(deserialized,errors,isOptimistic?core.MION_ROUTES.methodsMetadata:void 0),errors.size?Promise.reject(errors):deserialized)}catch(error){return this.onError(error,"Error parsing response",errors),Promise.reject(errors)}}shouldRetryWithProperSerialization(deserialized){return Object.values(deserialized).some(value=>core.isRpcError(value)&&(value.type==="serialization-error"||value.type==="validation-error"||value.type==="parsing-json-request-error"))}async retryWithProperSerialization(originalSerializer){return delete this.subRequestList[core.MION_ROUTES.methodsMetadata],Object.values(this.subRequestList).forEach(sr=>{sr.isResolved=!1,sr.resolvedValue=void 0,sr.error=void 0}),this.makeCall(originalSerializer)}async validateParams(subReqList){subReqList&&subReqList.forEach(subRequest=>this.addSubRequest(subRequest));const errors=new Map;try{const subRequestIds=Object.keys(this.subRequestList);return await src_lib_fetchRemoteMethodsMetadata.fetchRemoteMethodsMetadata(subRequestIds,this.options),src_lib_validation.validateSubRequests(subRequestIds,this,errors,!1),Object.values(this.subRequestList).map(subRequest=>subRequest.error?.errorData||[]).flat()}catch(error){return this.onError(error,"Error preparing request",errors),Promise.reject(errors)}}async prefill(subReqList){subReqList&&subReqList.forEach(subRequest=>this.addSubRequest(subRequest));const errors=new Map;try{const subRequestIds=Object.keys(this.subRequestList);return await src_lib_fetchRemoteMethodsMetadata.fetchRemoteMethodsMetadata(subRequestIds,this.options),src_lib_validation.validateSubRequests(subRequestIds,this,errors,!1),errors.size||(src_lib_serializer.serializeRequestBody(this),this.storePrefilledMiddleFns(errors),errors.size)?Promise.reject(errors):void 0}catch(error){return this.onError(error,"Error preparing request",errors),Promise.reject(errors)}}async removePrefill(subRequests){subRequests&&subRequests.forEach(subRequest=>this.addSubRequest(subRequest)),this.removePrefilledMiddleFns()}addSubRequest(subRequest){if(subRequest.isResolved)throw new Error(`SubRequest ${subRequest.id} is already resolved`);this.subRequestList[subRequest.id]=subRequest}handlePlatformError(deserialized,errors){if(!(core.MION_ROUTES.platformError in deserialized))return!1;const platformError=deserialized[core.MION_ROUTES.platformError];return Object.entries(this.subRequestList).forEach(([id,methodMeta])=>{methodMeta.isResolved=!0,methodMeta.error=platformError,errors.set(id,platformError)}),!0}resolveSubRequests(deserialized,errors,skipId){Object.entries(this.subRequestList).forEach(([id,methodMeta])=>{if(id===skipId)return;const resp=this.getResponseValueFromBodyOrHeader(id,deserialized,this.response.headers);methodMeta.isResolved=!0,core.isRpcError(resp)?(methodMeta.error=resp,errors.set(id,resp)):methodMeta.resolvedValue=resp}),Object.entries(deserialized).forEach(([id,value])=>{!(id in this.subRequestList)&&core.isRpcError(value)&&errors.set(id,value)})}onError(error,stageMessage,errors){const reason=this.signal?.aborted?this.signal.reason:void 0;if(reason instanceof DOMException){if(reason.name==="TimeoutError"){errors.set(this.requestId,new core.RpcError({type:"request-timeout",publicMessage:"Request timed out",originalError:error instanceof Error?error:void 0}));return}if(reason.name==="AbortError"){errors.set(this.requestId,new core.RpcError({type:"request-aborted",publicMessage:"Request was aborted",originalError:error instanceof Error?error:void 0}));return}}if(core.isRpcError(error)){errors.set(this.requestId,error);return}const message=error?.message?`${stageMessage}: ${error.message}`:`${stageMessage}: Unknown Error`;errors.set(this.requestId,new core.RpcError({type:error?.name||"unknown-error",publicMessage:message,originalError:error instanceof Error?error:void 0}))}getResponseValueFromBodyOrHeader(id,respBody,headers){const headersSubset=reconstructHeadersSubsetFromResponse(id,headers);return headersSubset||respBody[id]}restorePrefilledMiddleFns(errors){if(this.workflowSubRequests&&this.workflowSubRequests.length>0){this.restorePrefilledMiddleFnsForWorkflow(errors);return}const methodMeta=core.routesCache.getMetadata(this.requestId);if(!methodMeta){errors&&errors.set(this.requestId,new core.RpcError({type:"route-metadata-not-found",publicMessage:`Metadata for Route '${this.requestId} not found.'.`}));return}(methodMeta.middleFnIds?.filter(id=>!!id&&this.requestId!==id)||[]).forEach(id=>{if(this.subRequestList[id])return;const cacheKey=this.getPrefilledMiddleFnCacheKey(id),cachedSubRequest=this.prefilledMiddleFnsCache.get(cacheKey);if(cachedSubRequest){const clonedSubRequest={...cachedSubRequest,isResolved:!1,resolvedValue:void 0,error:void 0};this.addSubRequest(clonedSubRequest)}})}restorePrefilledMiddleFnsForWorkflow(errors){const workflowRouteIds=new Set(this.workflowSubRequests.map(sr=>sr.id));for(const routeSubRequest of this.workflowSubRequests){const methodMeta=core.routesCache.getMetadata(routeSubRequest.id);if(!methodMeta){errors&&errors.set(routeSubRequest.id,new core.RpcError({type:"route-metadata-not-found",publicMessage:`Metadata for Route '${routeSubRequest.id}' not found.`}));continue}(methodMeta.middleFnIds?.filter(id=>!!id&&!workflowRouteIds.has(id))||[]).forEach(id=>{if(this.subRequestList[id])return;const cacheKey=this.getPrefilledMiddleFnCacheKey(id),cachedSubRequest=this.prefilledMiddleFnsCache.get(cacheKey);if(cachedSubRequest){const clonedSubRequest={...cachedSubRequest,isResolved:!1,resolvedValue:void 0,error:void 0};this.addSubRequest(clonedSubRequest)}})}}storePrefilledMiddleFns(errors){Object.keys(this.subRequestList).forEach(id=>{const subRequest=this.subRequestList[id],methodMeta=core.routesCache.getMetadata(id);if(!methodMeta)throw new Error(`Remote method ${id} not found.`);if(methodMeta.type===core.HandlerType.route){errors.set(id,new core.RpcError({type:"routes-cant-be-prefilled",publicMessage:`Remote method ${id} is a route and can't be prefilled.`}));return}const cacheKey=this.getPrefilledMiddleFnCacheKey(id);this.prefilledMiddleFnsCache.set(cacheKey,subRequest)})}removePrefilledMiddleFns(){Object.keys(this.subRequestList).forEach(id=>{const cacheKey=this.getPrefilledMiddleFnCacheKey(id);this.prefilledMiddleFnsCache.delete(cacheKey)})}isQueryRoute(){return this.workflowSubRequests?!1:core.routesCache.getMetadata(this.requestId)?.options?.isMutation===!1}getPrefilledMiddleFnCacheKey(id){return`${this.options.baseURL}:${id}`}}function buildFetchOptions(url,serialized,headersFromParams,options,isOptimistic,isQuery,signal){if(!isOptimistic&&isQuery&&serialized.contentType.includes("json")){const encoded=core.toBase64Url(serialized.body),testUrl=new URL(url.pathname+url.search,url.origin);if(testUrl.searchParams.set("data",encoded),testUrl.toString().length<=src_constants.MAX_GET_URL_LENGTH)return url.searchParams.set("data",encoded),{...options.fetchOptions,method:"GET",headers:{...options.fetchOptions.headers,...headersFromParams},body:void 0,signal}}return{...options.fetchOptions,method:"POST",headers:{...options.fetchOptions.headers,...headersFromParams,"Content-Type":serialized.contentType},body:serialized.body,signal}}function extractRequestHeaders(req){const headers={},subRequestIds=Object.keys(req.subRequestList);for(let i=0;i<subRequestIds.length;i++){const id=subRequestIds[i],subRequest=req.subRequestList[id];if(!subRequest)continue;const method=core.routesCache.getMetadata(id);if(!method||method.type!==core.HandlerType.headersMiddleFn||!method.headersParam)continue;const params=subRequest.params,extracted=extractHeadersFromParams(params);Object.assign(headers,extracted)}return headers}function extractHeadersFromParams(params){if(!params||params.length===0)throw new core.RpcError({type:"missing-headers-param",publicMessage:"HeadersFn requires a HeadersSubset parameter."});const firstParam=params[0];if(firstParam instanceof core.HeadersSubset||firstParam&&typeof firstParam=="object"&&"headers"in firstParam&&typeof firstParam.headers=="object")return firstParam.headers;throw new core.RpcError({type:"invalid-headers-param",publicMessage:"HeadersFn first parameter must be a HeadersSubset instance or object with headers property."})}function reconstructHeadersSubsetFromResponse(methodId,responseHeaders){const method=core.routesCache.getMetadata(methodId);if(!method?.headersReturn?.headerNames||method.headersReturn.headerNames.length===0)return;const headerNames=method.headersReturn.headerNames,headersMap={};for(const name of headerNames){const value=responseHeaders.get(name);value!=null&&(headersMap[name]=value)}if(Object.keys(headersMap).length>0)return new core.HeadersSubset(headersMap)}function buildRoutesFlowQuery(routePaths,workflowSubRequests){const allMappings=[];for(const sr of workflowSubRequests){const mappings=sr.mappings;if(Array.isArray(mappings)&&mappings.length>0)for(const ref of mappings)allMappings.push({fromId:ref.fromRequestId,toId:ref.toRequestId,bodyHash:ref.bodyHash,paramIndex:ref.paramIndex})}return{routes:routePaths,mappings:allMappings.length>0?allMappings:void 0}}exports.MionClientRequest=MionClientRequest;
|
|
2
|
-
//# sourceMappingURL=request.cjs.map
|