@dynamic-labs/message-transport 0.0.0-exp20240808.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/CHANGELOG.md +3746 -0
- package/LICENSE +21 -0
- package/README.md +3 -0
- package/_virtual/_tslib.cjs +49 -0
- package/_virtual/_tslib.js +44 -0
- package/package.json +33 -0
- package/src/index.cjs +32 -0
- package/src/index.d.ts +8 -0
- package/src/index.js +13 -0
- package/src/messageTransport/decorators/applyDefaultMessageOrigin/applyDefaultMessageOrigin.cjs +12 -0
- package/src/messageTransport/decorators/applyDefaultMessageOrigin/applyDefaultMessageOrigin.d.ts +15 -0
- package/src/messageTransport/decorators/applyDefaultMessageOrigin/applyDefaultMessageOrigin.js +8 -0
- package/src/messageTransport/decorators/applyDefaultMessageOrigin/index.d.ts +1 -0
- package/src/messageTransport/decorators/index.d.ts +3 -0
- package/src/messageTransport/decorators/makeWaitForInitEvent/index.d.ts +1 -0
- package/src/messageTransport/decorators/makeWaitForInitEvent/makeWaitForInitEvent.cjs +35 -0
- package/src/messageTransport/decorators/makeWaitForInitEvent/makeWaitForInitEvent.d.ts +25 -0
- package/src/messageTransport/decorators/makeWaitForInitEvent/makeWaitForInitEvent.js +31 -0
- package/src/messageTransport/decorators/makeWaitForUnblock/index.d.ts +1 -0
- package/src/messageTransport/decorators/makeWaitForUnblock/makeWaitForUnblock.cjs +53 -0
- package/src/messageTransport/decorators/makeWaitForUnblock/makeWaitForUnblock.d.ts +23 -0
- package/src/messageTransport/decorators/makeWaitForUnblock/makeWaitForUnblock.js +49 -0
- package/src/messageTransport/index.d.ts +2 -0
- package/src/messageTransport/messageTransport.cjs +16 -0
- package/src/messageTransport/messageTransport.d.ts +44 -0
- package/src/messageTransport/messageTransport.js +12 -0
- package/src/messageTypes/AuthModuleMessages.d.ts +8 -0
- package/src/messageTypes/ConsoleMessages.d.ts +11 -0
- package/src/messageTypes/EmbeddedWalletsModuleMessages.d.ts +8 -0
- package/src/messageTypes/EthMessages.d.ts +13 -0
- package/src/messageTypes/ExternalAuthMessages.d.ts +16 -0
- package/src/messageTypes/FetchMessages.d.ts +8 -0
- package/src/messageTypes/NetworksModuleMessages.d.ts +5 -0
- package/src/messageTypes/OtpMessages.d.ts +17 -0
- package/src/messageTypes/PasskeyMessages.d.ts +32 -0
- package/src/messageTypes/PlatformServiceMessages.d.ts +17 -0
- package/src/messageTypes/SdkModuleMessages.cjs +9 -0
- package/src/messageTypes/SdkModuleMessages.d.ts +25 -0
- package/src/messageTypes/SdkModuleMessages.js +5 -0
- package/src/messageTypes/SocialAuthModuleMessages.d.ts +17 -0
- package/src/messageTypes/SolanaMessages.d.ts +42 -0
- package/src/messageTypes/UserInterfaceModuleMessages.d.ts +8 -0
- package/src/messageTypes/WalletsModuleMessages.d.ts +30 -0
- package/src/messageTypes/WebViewVisibilityMessages.d.ts +3 -0
- package/src/messageTypes/index.d.ts +16 -0
- package/src/requestChannel/index.d.ts +1 -0
- package/src/requestChannel/requestChannel.cjs +121 -0
- package/src/requestChannel/requestChannel.d.ts +55 -0
- package/src/requestChannel/requestChannel.js +115 -0
- package/src/store/createEventEmitterForMessages/createEventEmitterForMessages.cjs +24 -0
- package/src/store/createEventEmitterForMessages/createEventEmitterForMessages.d.ts +22 -0
- package/src/store/createEventEmitterForMessages/createEventEmitterForMessages.js +16 -0
- package/src/store/createEventEmitterForMessages/index.d.ts +1 -0
- package/src/store/index.d.ts +3 -0
- package/src/store/store.cjs +59 -0
- package/src/store/store.d.ts +8 -0
- package/src/store/store.js +51 -0
- package/src/store/storeSetter/index.d.ts +1 -0
- package/src/store/storeSetter/storeSetter.cjs +23 -0
- package/src/store/storeSetter/storeSetter.d.ts +8 -0
- package/src/store/storeSetter/storeSetter.js +19 -0
- package/src/store/types.d.ts +53 -0
- package/src/utils/isSerializedError/index.d.ts +1 -0
- package/src/utils/isSerializedError/isSerializedError.cjs +14 -0
- package/src/utils/isSerializedError/isSerializedError.d.ts +2 -0
- package/src/utils/isSerializedError/isSerializedError.js +10 -0
- package/src/utils/parseErrorFromTransport/index.d.ts +1 -0
- package/src/utils/parseErrorFromTransport/parseErrorFromTransport.cjs +54 -0
- package/src/utils/parseErrorFromTransport/parseErrorFromTransport.d.ts +11 -0
- package/src/utils/parseErrorFromTransport/parseErrorFromTransport.js +50 -0
- package/src/utils/parseMessageTransportData/index.d.ts +1 -0
- package/src/utils/parseMessageTransportData/parseMessageTransportData.cjs +27 -0
- package/src/utils/parseMessageTransportData/parseMessageTransportData.d.ts +2 -0
- package/src/utils/parseMessageTransportData/parseMessageTransportData.js +23 -0
- package/src/utils/serializeErrorForTransport/index.d.ts +1 -0
- package/src/utils/serializeErrorForTransport/serializeErrorForTransport.cjs +33 -0
- package/src/utils/serializeErrorForTransport/serializeErrorForTransport.d.ts +19 -0
- package/src/utils/serializeErrorForTransport/serializeErrorForTransport.js +29 -0
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
5
|
+
|
|
6
|
+
var EventEmitter = require('eventemitter3');
|
|
7
|
+
var reactivity = require('@vue/reactivity');
|
|
8
|
+
var requestChannel = require('../requestChannel/requestChannel.cjs');
|
|
9
|
+
|
|
10
|
+
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
11
|
+
|
|
12
|
+
var EventEmitter__default = /*#__PURE__*/_interopDefaultLegacy(EventEmitter);
|
|
13
|
+
|
|
14
|
+
const createStore = ({ initialState, key, messageTransport, }) => {
|
|
15
|
+
// We don't know what these types are yet, so any will do
|
|
16
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
17
|
+
const requestChannel$1 = requestChannel.createRequestChannel(messageTransport);
|
|
18
|
+
/**
|
|
19
|
+
* The event emitter for this store getter.
|
|
20
|
+
*
|
|
21
|
+
* Not to be confused with the events that come from the messageTransport:
|
|
22
|
+
* - The messageTransport is a tool for sending/receiving messages to/from a webview.
|
|
23
|
+
* - This event emitter allows raising events exclusively for change events of this store's variables,
|
|
24
|
+
* and will only be used by the modules that are reading from the store, most likely to be forwarded
|
|
25
|
+
* for clients to have access to.
|
|
26
|
+
*/
|
|
27
|
+
const eventEmitter = new EventEmitter__default["default"]();
|
|
28
|
+
const state = reactivity.reactive(Object.assign({}, initialState));
|
|
29
|
+
const getters = {};
|
|
30
|
+
for (const variable in state) {
|
|
31
|
+
// Add the state getter
|
|
32
|
+
Object.defineProperty(getters, variable, {
|
|
33
|
+
get: () => state[variable],
|
|
34
|
+
});
|
|
35
|
+
// We need to add a listener for each of this store's variables.
|
|
36
|
+
// That listener will listen for messageTransport "value changed" events,
|
|
37
|
+
// which we will use to update the store's values and raise events.
|
|
38
|
+
const messageName = `${key}__${variable}Changed`;
|
|
39
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
40
|
+
requestChannel$1.handle(messageName, (newValue) => {
|
|
41
|
+
const eventName = `${variable}Changed`;
|
|
42
|
+
// We emit with the same event name for simplicity, but keep in mind
|
|
43
|
+
// the eventEmitter events are different from the messageTransport message we are handling.
|
|
44
|
+
// Read above for elaboration.
|
|
45
|
+
//
|
|
46
|
+
// There are some limitation on what we can achieve with typescript in this file,
|
|
47
|
+
// but all this is encapsulated in this function and it works like a charm for whoever calls it.
|
|
48
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
49
|
+
eventEmitter.emit(eventName, newValue);
|
|
50
|
+
state[variable] = newValue;
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
return {
|
|
54
|
+
eventEmitter,
|
|
55
|
+
getters,
|
|
56
|
+
};
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
exports.createStore = createStore;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { MessageTransportWithDefaultOrigin } from '../messageTransport';
|
|
2
|
+
import { Store } from './types';
|
|
3
|
+
export type CreateStoreProps<T extends Record<string, unknown>, U extends string> = {
|
|
4
|
+
messageTransport: MessageTransportWithDefaultOrigin;
|
|
5
|
+
key: U;
|
|
6
|
+
initialState: T;
|
|
7
|
+
};
|
|
8
|
+
export declare const createStore: <T extends Record<string, unknown> = never, U extends string = never>({ initialState, key, messageTransport, }: CreateStoreProps<T, U>) => Store<T>;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
import EventEmitter from 'eventemitter3';
|
|
3
|
+
import { reactive } from '@vue/reactivity';
|
|
4
|
+
import { createRequestChannel } from '../requestChannel/requestChannel.js';
|
|
5
|
+
|
|
6
|
+
const createStore = ({ initialState, key, messageTransport, }) => {
|
|
7
|
+
// We don't know what these types are yet, so any will do
|
|
8
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
9
|
+
const requestChannel = createRequestChannel(messageTransport);
|
|
10
|
+
/**
|
|
11
|
+
* The event emitter for this store getter.
|
|
12
|
+
*
|
|
13
|
+
* Not to be confused with the events that come from the messageTransport:
|
|
14
|
+
* - The messageTransport is a tool for sending/receiving messages to/from a webview.
|
|
15
|
+
* - This event emitter allows raising events exclusively for change events of this store's variables,
|
|
16
|
+
* and will only be used by the modules that are reading from the store, most likely to be forwarded
|
|
17
|
+
* for clients to have access to.
|
|
18
|
+
*/
|
|
19
|
+
const eventEmitter = new EventEmitter();
|
|
20
|
+
const state = reactive(Object.assign({}, initialState));
|
|
21
|
+
const getters = {};
|
|
22
|
+
for (const variable in state) {
|
|
23
|
+
// Add the state getter
|
|
24
|
+
Object.defineProperty(getters, variable, {
|
|
25
|
+
get: () => state[variable],
|
|
26
|
+
});
|
|
27
|
+
// We need to add a listener for each of this store's variables.
|
|
28
|
+
// That listener will listen for messageTransport "value changed" events,
|
|
29
|
+
// which we will use to update the store's values and raise events.
|
|
30
|
+
const messageName = `${key}__${variable}Changed`;
|
|
31
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
32
|
+
requestChannel.handle(messageName, (newValue) => {
|
|
33
|
+
const eventName = `${variable}Changed`;
|
|
34
|
+
// We emit with the same event name for simplicity, but keep in mind
|
|
35
|
+
// the eventEmitter events are different from the messageTransport message we are handling.
|
|
36
|
+
// Read above for elaboration.
|
|
37
|
+
//
|
|
38
|
+
// There are some limitation on what we can achieve with typescript in this file,
|
|
39
|
+
// but all this is encapsulated in this function and it works like a charm for whoever calls it.
|
|
40
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
41
|
+
eventEmitter.emit(eventName, newValue);
|
|
42
|
+
state[variable] = newValue;
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
return {
|
|
46
|
+
eventEmitter,
|
|
47
|
+
getters,
|
|
48
|
+
};
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
export { createStore };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './storeSetter';
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
5
|
+
|
|
6
|
+
var requestChannel = require('../../requestChannel/requestChannel.cjs');
|
|
7
|
+
|
|
8
|
+
const createStoreSetter = ({ key, messageTransport, }) => {
|
|
9
|
+
// We don't know what these types are yet, so any will do
|
|
10
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
11
|
+
const requestChannel$1 = requestChannel.createRequestChannel(messageTransport);
|
|
12
|
+
return {
|
|
13
|
+
set: (newValues) => {
|
|
14
|
+
const entries = Object.entries(newValues);
|
|
15
|
+
for (const [variable, newValue] of entries) {
|
|
16
|
+
const messageName = `${key}__${variable}Changed`;
|
|
17
|
+
requestChannel$1.emit(messageName, newValue);
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
exports.createStoreSetter = createStoreSetter;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { MessageTransportWithDefaultOrigin } from '../../messageTransport';
|
|
2
|
+
import { StoreSetter } from '../types';
|
|
3
|
+
type CreateStoreSetterProps<U extends string> = {
|
|
4
|
+
messageTransport: MessageTransportWithDefaultOrigin;
|
|
5
|
+
key: U;
|
|
6
|
+
};
|
|
7
|
+
export declare const createStoreSetter: <T extends Record<string, unknown> = never, U extends string = never>({ key, messageTransport, }: CreateStoreSetterProps<U>) => StoreSetter<T>;
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
import { createRequestChannel } from '../../requestChannel/requestChannel.js';
|
|
3
|
+
|
|
4
|
+
const createStoreSetter = ({ key, messageTransport, }) => {
|
|
5
|
+
// We don't know what these types are yet, so any will do
|
|
6
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
7
|
+
const requestChannel = createRequestChannel(messageTransport);
|
|
8
|
+
return {
|
|
9
|
+
set: (newValues) => {
|
|
10
|
+
const entries = Object.entries(newValues);
|
|
11
|
+
for (const [variable, newValue] of entries) {
|
|
12
|
+
const messageName = `${key}__${variable}Changed`;
|
|
13
|
+
requestChannel.emit(messageName, newValue);
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
export { createStoreSetter };
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import EventEmitter from 'eventemitter3';
|
|
2
|
+
export type StoreKeys = 'auth' | 'sdk' | 'wallets' | 'embeddedWallets' | 'platform' | 'networks';
|
|
3
|
+
/**
|
|
4
|
+
* Readonly getters for the store values
|
|
5
|
+
*/
|
|
6
|
+
export type StoreStateGetters<T extends Record<string, unknown>> = {
|
|
7
|
+
readonly [K in keyof T]: T[K];
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* The type of a getter that allows reading and listening to values from a store
|
|
11
|
+
*/
|
|
12
|
+
export type Store<T extends Record<string, unknown>> = {
|
|
13
|
+
getters: StoreStateGetters<T>;
|
|
14
|
+
eventEmitter: EventEmitter<StoreStateEvents<T>>;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* The type of a setter that allows setting values of all stores connected to the same
|
|
18
|
+
* messageTransport
|
|
19
|
+
*/
|
|
20
|
+
export type StoreSetter<T extends Record<string, unknown>> = {
|
|
21
|
+
set: (values: Partial<T>) => void;
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* Defines how state change messages, to be sent across messageTransport, are named.
|
|
25
|
+
* These messages are not made public. They are only used to communicate state changes across the webview.
|
|
26
|
+
*/
|
|
27
|
+
export type StoreStateChangeMessage<T extends Record<string, unknown>, K extends Extract<keyof T, string>, U extends string> = `${U}__${K}Changed`;
|
|
28
|
+
/**
|
|
29
|
+
* Defines how state change events are named.
|
|
30
|
+
* These events are emitted by the store, and are made public for client consumption.
|
|
31
|
+
*
|
|
32
|
+
* Do not confuse these with StoreStateChangeMessage, which are only for internal communication.
|
|
33
|
+
*/
|
|
34
|
+
export type StoreStateChangeEvent<T extends Record<string, unknown>, K extends Extract<keyof T, string>> = `${K}Changed`;
|
|
35
|
+
/**
|
|
36
|
+
* Generates the event types for a StoreState
|
|
37
|
+
*/
|
|
38
|
+
export type StoreStateEvents<T extends Record<string, unknown>> = {
|
|
39
|
+
[K in Extract<keyof T, string> as StoreStateChangeEvent<T, K>]: (value: T[K]) => void;
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Generates the event listener methods for a StoreState.
|
|
43
|
+
* The methods still return the original type of the eventemitter3 class.
|
|
44
|
+
* Use StoreEventListeners instead, which hides these return types.
|
|
45
|
+
*/
|
|
46
|
+
type RawStoreEventListeners<T extends Record<string, unknown>> = Pick<EventEmitter<StoreStateEvents<T>>, 'on' | 'off' | 'once'>;
|
|
47
|
+
/**
|
|
48
|
+
* The event listener methods for a StoreState
|
|
49
|
+
*/
|
|
50
|
+
export type StoreEventListeners<T extends Record<string, unknown>> = {
|
|
51
|
+
[M in keyof RawStoreEventListeners<T>]: (...args: Parameters<RawStoreEventListeners<T>[M]>) => void;
|
|
52
|
+
};
|
|
53
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { isSerializedError } from './isSerializedError';
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
5
|
+
|
|
6
|
+
const isSerializedError = (serializedError) => {
|
|
7
|
+
if (typeof serializedError !== 'object' || serializedError === null) {
|
|
8
|
+
return false;
|
|
9
|
+
}
|
|
10
|
+
const { message, stack } = serializedError;
|
|
11
|
+
return typeof message === 'string' && typeof stack === 'string';
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
exports.isSerializedError = isSerializedError;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
const isSerializedError = (serializedError) => {
|
|
3
|
+
if (typeof serializedError !== 'object' || serializedError === null) {
|
|
4
|
+
return false;
|
|
5
|
+
}
|
|
6
|
+
const { message, stack } = serializedError;
|
|
7
|
+
return typeof message === 'string' && typeof stack === 'string';
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
export { isSerializedError };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { parseErrorFromTransport } from './parseErrorFromTransport';
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
5
|
+
|
|
6
|
+
var _tslib = require('../../../_virtual/_tslib.cjs');
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Parses a serialized error object back into an Error instance.
|
|
10
|
+
* This function will recreate an Error or a specific subclass of Error
|
|
11
|
+
* based on the name property if it matches known error types.
|
|
12
|
+
* Additional properties are added back to the reconstructed error object.
|
|
13
|
+
*
|
|
14
|
+
* @param {SerializedError} serializedError - The serialized error object to parse.
|
|
15
|
+
* @returns {Error} - The reconstructed Error instance.
|
|
16
|
+
*/
|
|
17
|
+
const parseErrorFromTransport = (serializedError) => {
|
|
18
|
+
const { message, name, stack } = serializedError, otherProps = _tslib.__rest(serializedError, ["message", "name", "stack"]);
|
|
19
|
+
let error;
|
|
20
|
+
// Determine the type of the error based on the 'name' property and instantiate accordingly
|
|
21
|
+
switch (name) {
|
|
22
|
+
case 'TypeError':
|
|
23
|
+
error = new TypeError(message);
|
|
24
|
+
break;
|
|
25
|
+
case 'ReferenceError':
|
|
26
|
+
error = new ReferenceError(message);
|
|
27
|
+
break;
|
|
28
|
+
case 'SyntaxError':
|
|
29
|
+
error = new SyntaxError(message);
|
|
30
|
+
break;
|
|
31
|
+
case 'RangeError':
|
|
32
|
+
error = new RangeError(message);
|
|
33
|
+
break;
|
|
34
|
+
case 'EvalError':
|
|
35
|
+
error = new EvalError(message);
|
|
36
|
+
break;
|
|
37
|
+
case 'URIError':
|
|
38
|
+
error = new URIError(message);
|
|
39
|
+
break;
|
|
40
|
+
default:
|
|
41
|
+
// Default to a generic Error if the specific type isn't recognized
|
|
42
|
+
error = new Error(message);
|
|
43
|
+
error.name = name || 'Error'; // Ensure the name is set, defaulting to 'Error' if not provided
|
|
44
|
+
}
|
|
45
|
+
// Reattach the stack trace and any other enumerable properties
|
|
46
|
+
if (stack) {
|
|
47
|
+
error.stack = [message, stack].join('\n');
|
|
48
|
+
}
|
|
49
|
+
// Reattach other custom properties that may have been serialized
|
|
50
|
+
Object.assign(error, otherProps);
|
|
51
|
+
return error;
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
exports.parseErrorFromTransport = parseErrorFromTransport;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { SerializedError } from '../serializeErrorForTransport';
|
|
2
|
+
/**
|
|
3
|
+
* Parses a serialized error object back into an Error instance.
|
|
4
|
+
* This function will recreate an Error or a specific subclass of Error
|
|
5
|
+
* based on the name property if it matches known error types.
|
|
6
|
+
* Additional properties are added back to the reconstructed error object.
|
|
7
|
+
*
|
|
8
|
+
* @param {SerializedError} serializedError - The serialized error object to parse.
|
|
9
|
+
* @returns {Error} - The reconstructed Error instance.
|
|
10
|
+
*/
|
|
11
|
+
export declare const parseErrorFromTransport: (serializedError: SerializedError) => Error;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
import { __rest } from '../../../_virtual/_tslib.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Parses a serialized error object back into an Error instance.
|
|
6
|
+
* This function will recreate an Error or a specific subclass of Error
|
|
7
|
+
* based on the name property if it matches known error types.
|
|
8
|
+
* Additional properties are added back to the reconstructed error object.
|
|
9
|
+
*
|
|
10
|
+
* @param {SerializedError} serializedError - The serialized error object to parse.
|
|
11
|
+
* @returns {Error} - The reconstructed Error instance.
|
|
12
|
+
*/
|
|
13
|
+
const parseErrorFromTransport = (serializedError) => {
|
|
14
|
+
const { message, name, stack } = serializedError, otherProps = __rest(serializedError, ["message", "name", "stack"]);
|
|
15
|
+
let error;
|
|
16
|
+
// Determine the type of the error based on the 'name' property and instantiate accordingly
|
|
17
|
+
switch (name) {
|
|
18
|
+
case 'TypeError':
|
|
19
|
+
error = new TypeError(message);
|
|
20
|
+
break;
|
|
21
|
+
case 'ReferenceError':
|
|
22
|
+
error = new ReferenceError(message);
|
|
23
|
+
break;
|
|
24
|
+
case 'SyntaxError':
|
|
25
|
+
error = new SyntaxError(message);
|
|
26
|
+
break;
|
|
27
|
+
case 'RangeError':
|
|
28
|
+
error = new RangeError(message);
|
|
29
|
+
break;
|
|
30
|
+
case 'EvalError':
|
|
31
|
+
error = new EvalError(message);
|
|
32
|
+
break;
|
|
33
|
+
case 'URIError':
|
|
34
|
+
error = new URIError(message);
|
|
35
|
+
break;
|
|
36
|
+
default:
|
|
37
|
+
// Default to a generic Error if the specific type isn't recognized
|
|
38
|
+
error = new Error(message);
|
|
39
|
+
error.name = name || 'Error'; // Ensure the name is set, defaulting to 'Error' if not provided
|
|
40
|
+
}
|
|
41
|
+
// Reattach the stack trace and any other enumerable properties
|
|
42
|
+
if (stack) {
|
|
43
|
+
error.stack = [message, stack].join('\n');
|
|
44
|
+
}
|
|
45
|
+
// Reattach other custom properties that may have been serialized
|
|
46
|
+
Object.assign(error, otherProps);
|
|
47
|
+
return error;
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
export { parseErrorFromTransport };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './parseMessageTransportData';
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
5
|
+
|
|
6
|
+
const parseMessageTransportData = (
|
|
7
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
8
|
+
parsedData) => {
|
|
9
|
+
if (!parsedData || typeof parsedData !== 'object') {
|
|
10
|
+
return undefined;
|
|
11
|
+
}
|
|
12
|
+
const message = {
|
|
13
|
+
args: parsedData.args,
|
|
14
|
+
messageSessionId: parsedData.messageSessionId,
|
|
15
|
+
origin: parsedData.origin,
|
|
16
|
+
type: parsedData.type,
|
|
17
|
+
};
|
|
18
|
+
if (!Array.isArray(message.args) ||
|
|
19
|
+
typeof message.messageSessionId !== 'string' ||
|
|
20
|
+
typeof message.origin !== 'string' ||
|
|
21
|
+
typeof message.type !== 'string') {
|
|
22
|
+
return undefined;
|
|
23
|
+
}
|
|
24
|
+
return message;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
exports.parseMessageTransportData = parseMessageTransportData;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
const parseMessageTransportData = (
|
|
3
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
4
|
+
parsedData) => {
|
|
5
|
+
if (!parsedData || typeof parsedData !== 'object') {
|
|
6
|
+
return undefined;
|
|
7
|
+
}
|
|
8
|
+
const message = {
|
|
9
|
+
args: parsedData.args,
|
|
10
|
+
messageSessionId: parsedData.messageSessionId,
|
|
11
|
+
origin: parsedData.origin,
|
|
12
|
+
type: parsedData.type,
|
|
13
|
+
};
|
|
14
|
+
if (!Array.isArray(message.args) ||
|
|
15
|
+
typeof message.messageSessionId !== 'string' ||
|
|
16
|
+
typeof message.origin !== 'string' ||
|
|
17
|
+
typeof message.type !== 'string') {
|
|
18
|
+
return undefined;
|
|
19
|
+
}
|
|
20
|
+
return message;
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
export { parseMessageTransportData };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { serializeErrorForTransport, type SerializedError, } from './serializeErrorForTransport';
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Serializes an error to a JSON object to be sent by transport.
|
|
8
|
+
* This function checks if the input is an instance of Error to capture
|
|
9
|
+
* standard properties like message, name, and stack. It also attempts to
|
|
10
|
+
* serialize any enumerable properties that are present on error-like objects.
|
|
11
|
+
*
|
|
12
|
+
* @param {unknown} err - The error or error-like object to serialize.
|
|
13
|
+
* @returns {SerializedError} - The serialized error object.
|
|
14
|
+
*/
|
|
15
|
+
const serializeErrorForTransport = (err) => {
|
|
16
|
+
if (err instanceof Error) {
|
|
17
|
+
return Object.assign({
|
|
18
|
+
// @ts-expect-error message is a standard property of Error
|
|
19
|
+
message: err.message,
|
|
20
|
+
// @ts-expect-error name is a standard property of Error
|
|
21
|
+
name: err.name, stack: err.stack }, err);
|
|
22
|
+
}
|
|
23
|
+
else if (typeof err === 'object' && err !== null) {
|
|
24
|
+
const plainObject = {};
|
|
25
|
+
for (const [key, value] of Object.entries(err)) {
|
|
26
|
+
plainObject[key] = value;
|
|
27
|
+
}
|
|
28
|
+
return plainObject;
|
|
29
|
+
}
|
|
30
|
+
return { message: String(err) };
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
exports.serializeErrorForTransport = serializeErrorForTransport;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Defines the shape of a serialized error object.
|
|
3
|
+
*/
|
|
4
|
+
export type SerializedError = {
|
|
5
|
+
message?: string;
|
|
6
|
+
name?: string;
|
|
7
|
+
stack?: string;
|
|
8
|
+
[key: string]: unknown;
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Serializes an error to a JSON object to be sent by transport.
|
|
12
|
+
* This function checks if the input is an instance of Error to capture
|
|
13
|
+
* standard properties like message, name, and stack. It also attempts to
|
|
14
|
+
* serialize any enumerable properties that are present on error-like objects.
|
|
15
|
+
*
|
|
16
|
+
* @param {unknown} err - The error or error-like object to serialize.
|
|
17
|
+
* @returns {SerializedError} - The serialized error object.
|
|
18
|
+
*/
|
|
19
|
+
export declare const serializeErrorForTransport: (err: unknown) => SerializedError;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
/**
|
|
3
|
+
* Serializes an error to a JSON object to be sent by transport.
|
|
4
|
+
* This function checks if the input is an instance of Error to capture
|
|
5
|
+
* standard properties like message, name, and stack. It also attempts to
|
|
6
|
+
* serialize any enumerable properties that are present on error-like objects.
|
|
7
|
+
*
|
|
8
|
+
* @param {unknown} err - The error or error-like object to serialize.
|
|
9
|
+
* @returns {SerializedError} - The serialized error object.
|
|
10
|
+
*/
|
|
11
|
+
const serializeErrorForTransport = (err) => {
|
|
12
|
+
if (err instanceof Error) {
|
|
13
|
+
return Object.assign({
|
|
14
|
+
// @ts-expect-error message is a standard property of Error
|
|
15
|
+
message: err.message,
|
|
16
|
+
// @ts-expect-error name is a standard property of Error
|
|
17
|
+
name: err.name, stack: err.stack }, err);
|
|
18
|
+
}
|
|
19
|
+
else if (typeof err === 'object' && err !== null) {
|
|
20
|
+
const plainObject = {};
|
|
21
|
+
for (const [key, value] of Object.entries(err)) {
|
|
22
|
+
plainObject[key] = value;
|
|
23
|
+
}
|
|
24
|
+
return plainObject;
|
|
25
|
+
}
|
|
26
|
+
return { message: String(err) };
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
export { serializeErrorForTransport };
|