@wix/services-manager 0.2.17 → 0.2.19
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/build/core-services/signals/service.d.ts +7 -12
- package/build/core-services/signals/service.js +15 -6
- package/build/services-manager.d.ts +2 -7
- package/build/services-manager.js +9 -37
- package/build/types.d.ts +6 -10
- package/cjs/build/core-services/signals/service.d.ts +7 -12
- package/cjs/build/core-services/signals/service.js +14 -5
- package/cjs/build/services-manager.d.ts +2 -7
- package/cjs/build/services-manager.js +9 -39
- package/cjs/build/types.d.ts +6 -10
- package/package.json +4 -14
- package/build/core-services/signals/definition.d.ts +0 -3
- package/build/core-services/signals/definition.js +0 -1
- package/build/core-services/signals/registry.d.ts +0 -27
- package/build/core-services/signals/registry.js +0 -115
- package/build/core-services/signals/transfer-helpers.d.ts +0 -2
- package/build/core-services/signals/transfer-helpers.js +0 -64
- package/build/helpers.d.ts +0 -4
- package/build/helpers.js +0 -9
- package/build/remote-helpers.d.ts +0 -54
- package/build/remote-helpers.js +0 -243
- package/build/transfer-handlers/init-handlers.d.ts +0 -2
- package/build/transfer-handlers/init-handlers.js +0 -79
- package/cjs/build/core-services/signals/definition.d.ts +0 -3
- package/cjs/build/core-services/signals/definition.js +0 -5
- package/cjs/build/core-services/signals/registry.d.ts +0 -27
- package/cjs/build/core-services/signals/registry.js +0 -121
- package/cjs/build/core-services/signals/transfer-helpers.d.ts +0 -2
- package/cjs/build/core-services/signals/transfer-helpers.js +0 -101
- package/cjs/build/helpers.d.ts +0 -4
- package/cjs/build/helpers.js +0 -16
- package/cjs/build/remote-helpers.d.ts +0 -54
- package/cjs/build/remote-helpers.js +0 -283
- package/cjs/build/transfer-handlers/init-handlers.d.ts +0 -2
- package/cjs/build/transfer-handlers/init-handlers.js +0 -115
- package/remote-helpers/package.json +0 -3
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import type { ServicesManager, PromisifiedServiceAPI, ServiceDefinition, ThreadMode } from './types.js';
|
|
2
|
-
import { GetService, NamedSignals } from '@wix/services-definitions';
|
|
3
|
-
import * as Comlink from 'comlink';
|
|
4
|
-
export type RemoteServicesManager = ServicesManager<ThreadMode.REMOTE> & {
|
|
5
|
-
getServiceProxy: GetService<ThreadMode.REMOTE>;
|
|
6
|
-
syncSignal: (signalId: string, value: any, revision: string) => void;
|
|
7
|
-
exchangeServicesAndSignals: (serviceSignalsArr: {
|
|
8
|
-
serviceId: string;
|
|
9
|
-
signals: NamedSignals;
|
|
10
|
-
}[]) => {
|
|
11
|
-
serviceId: string;
|
|
12
|
-
signals: any;
|
|
13
|
-
}[];
|
|
14
|
-
awaitConnectionFromMain: () => Promise<boolean>;
|
|
15
|
-
enableContext: (context: 'global' | 'module') => RemoteServicesManager;
|
|
16
|
-
};
|
|
17
|
-
export type ProxyServiceManager = Comlink.Remote<RemoteServicesManager>;
|
|
18
|
-
export declare function createServiceProxy<T extends ServiceDefinition<any, any>>(definition: T, remoteServiceManager: ProxyServiceManager | Promise<ProxyServiceManager>, localServicesManager: ServicesManager): PromisifiedServiceAPI<T>;
|
|
19
|
-
export declare enum SERVICE_MANAGER_MESSAGES {
|
|
20
|
-
INIT_PORT = "WIX_MESSAGE.SERVICE_MANAGER.INIT_PORT",
|
|
21
|
-
SIGNAL = "WIX_MESSAGE.SERVICE_MANAGER.SIGNAL",
|
|
22
|
-
REMOTE_READY = "WIX_MESSAGE.SERVICE_MANAGER.REMOTE_READY",
|
|
23
|
-
READY_FOR_CONNECTION = "WIX_MESSAGE.SERVICE_MANAGER.READY_FOR_CONNECTION"
|
|
24
|
-
}
|
|
25
|
-
export declare function connectRemoteIframe(manager: ServicesManager<any>, target: Window, options?: {
|
|
26
|
-
retryOptions?: ConnectRemoteParams['retryOptions'];
|
|
27
|
-
remoteServices?: ConnectRemoteParams['remoteServices'];
|
|
28
|
-
awaitInitialConnection?: ConnectRemoteParams['awaitInitialConnection'];
|
|
29
|
-
}): Promise<ProxyServiceManager>;
|
|
30
|
-
export declare function connectRemoteWorker(manager: ServicesManager<any>, target: Worker, options?: {
|
|
31
|
-
retryOptions?: ConnectRemoteParams['retryOptions'];
|
|
32
|
-
remoteServices?: ConnectRemoteParams['remoteServices'];
|
|
33
|
-
awaitInitialConnection?: ConnectRemoteParams['awaitInitialConnection'];
|
|
34
|
-
}): Promise<ProxyServiceManager>;
|
|
35
|
-
type ConnectRemoteParams = {
|
|
36
|
-
awaitInitialConnection?: boolean;
|
|
37
|
-
manager: ServicesManager<any>;
|
|
38
|
-
retryOptions?: {
|
|
39
|
-
timeout?: number;
|
|
40
|
-
interval?: number;
|
|
41
|
-
};
|
|
42
|
-
remoteServices?: ServiceDefinition<any, any>[];
|
|
43
|
-
} & ({
|
|
44
|
-
target: Window;
|
|
45
|
-
type: 'iframe';
|
|
46
|
-
} | {
|
|
47
|
-
target: Worker;
|
|
48
|
-
type: 'worker';
|
|
49
|
-
});
|
|
50
|
-
export declare function createRemoteServicesManager({ servicesManager, messageFrame, }: {
|
|
51
|
-
servicesManager: ServicesManager<any>;
|
|
52
|
-
messageFrame?: Window | Worker;
|
|
53
|
-
}): RemoteServicesManager;
|
|
54
|
-
export {};
|
|
@@ -1,283 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.SERVICE_MANAGER_MESSAGES = void 0;
|
|
37
|
-
exports.createServiceProxy = createServiceProxy;
|
|
38
|
-
exports.connectRemoteIframe = connectRemoteIframe;
|
|
39
|
-
exports.connectRemoteWorker = connectRemoteWorker;
|
|
40
|
-
exports.createRemoteServicesManager = createRemoteServicesManager;
|
|
41
|
-
const services_definitions_1 = require("@wix/services-definitions");
|
|
42
|
-
const Comlink = __importStar(require("comlink"));
|
|
43
|
-
const init_handlers_js_1 = require("./transfer-handlers/init-handlers.js");
|
|
44
|
-
function createServiceProxy(definition, remoteServiceManager, localServicesManager) {
|
|
45
|
-
return new Proxy({}, {
|
|
46
|
-
get(_, prop) {
|
|
47
|
-
if (prop === 'signals') {
|
|
48
|
-
return localServicesManager.getServiceSignals(definition);
|
|
49
|
-
}
|
|
50
|
-
return async (...args) => {
|
|
51
|
-
const remoteManager = remoteServiceManager instanceof Promise
|
|
52
|
-
? await remoteServiceManager
|
|
53
|
-
: remoteServiceManager;
|
|
54
|
-
let service = remoteManager.getServiceProxy(definition);
|
|
55
|
-
if (!service[prop]) {
|
|
56
|
-
service = await service;
|
|
57
|
-
}
|
|
58
|
-
return service[prop](...args);
|
|
59
|
-
};
|
|
60
|
-
},
|
|
61
|
-
});
|
|
62
|
-
}
|
|
63
|
-
var SERVICE_MANAGER_MESSAGES;
|
|
64
|
-
(function (SERVICE_MANAGER_MESSAGES) {
|
|
65
|
-
SERVICE_MANAGER_MESSAGES["INIT_PORT"] = "WIX_MESSAGE.SERVICE_MANAGER.INIT_PORT";
|
|
66
|
-
SERVICE_MANAGER_MESSAGES["SIGNAL"] = "WIX_MESSAGE.SERVICE_MANAGER.SIGNAL";
|
|
67
|
-
SERVICE_MANAGER_MESSAGES["REMOTE_READY"] = "WIX_MESSAGE.SERVICE_MANAGER.REMOTE_READY";
|
|
68
|
-
SERVICE_MANAGER_MESSAGES["READY_FOR_CONNECTION"] = "WIX_MESSAGE.SERVICE_MANAGER.READY_FOR_CONNECTION";
|
|
69
|
-
})(SERVICE_MANAGER_MESSAGES || (exports.SERVICE_MANAGER_MESSAGES = SERVICE_MANAGER_MESSAGES = {}));
|
|
70
|
-
// the main thread always connects to workers and iframes and not the other way around
|
|
71
|
-
async function connectRemoteIframe(manager, target, options) {
|
|
72
|
-
return connectRemote({
|
|
73
|
-
manager,
|
|
74
|
-
target,
|
|
75
|
-
type: 'iframe',
|
|
76
|
-
retryOptions: options?.retryOptions,
|
|
77
|
-
remoteServices: options?.remoteServices,
|
|
78
|
-
awaitInitialConnection: options?.awaitInitialConnection,
|
|
79
|
-
});
|
|
80
|
-
}
|
|
81
|
-
async function connectRemoteWorker(manager, target, options) {
|
|
82
|
-
return connectRemote({
|
|
83
|
-
manager,
|
|
84
|
-
target,
|
|
85
|
-
type: 'worker',
|
|
86
|
-
retryOptions: options?.retryOptions,
|
|
87
|
-
remoteServices: options?.remoteServices,
|
|
88
|
-
awaitInitialConnection: options?.awaitInitialConnection,
|
|
89
|
-
});
|
|
90
|
-
}
|
|
91
|
-
async function connectRemote({ manager, target, type,
|
|
92
|
-
// by default the connection attempt is only once
|
|
93
|
-
retryOptions: { timeout = 10000, interval = 11000 } = {}, remoteServices = [], awaitInitialConnection = false, }) {
|
|
94
|
-
if (interval < 5) {
|
|
95
|
-
console.warn('setting a low interval might cause a race condition on the response message');
|
|
96
|
-
}
|
|
97
|
-
const signalsRegistry = manager.getSignalsRegistry();
|
|
98
|
-
const onReadyFromRemote = (callback) => {
|
|
99
|
-
if (type === 'iframe') {
|
|
100
|
-
window.addEventListener('message', (event) => {
|
|
101
|
-
if (event.data?.type === SERVICE_MANAGER_MESSAGES.READY_FOR_CONNECTION &&
|
|
102
|
-
event.source === target) {
|
|
103
|
-
callback();
|
|
104
|
-
}
|
|
105
|
-
});
|
|
106
|
-
}
|
|
107
|
-
else {
|
|
108
|
-
target.onmessage = (event) => {
|
|
109
|
-
if (event.data?.type === SERVICE_MANAGER_MESSAGES.READY_FOR_CONNECTION) {
|
|
110
|
-
callback();
|
|
111
|
-
}
|
|
112
|
-
};
|
|
113
|
-
}
|
|
114
|
-
};
|
|
115
|
-
if (awaitInitialConnection && typeof window !== 'undefined') {
|
|
116
|
-
await new Promise((resolve) => {
|
|
117
|
-
onReadyFromRemote(resolve);
|
|
118
|
-
});
|
|
119
|
-
}
|
|
120
|
-
return new Promise((resolve, reject) => {
|
|
121
|
-
const triggerConnection = () => {
|
|
122
|
-
const remoteConnectionId = Math.random().toString(36).substring(7);
|
|
123
|
-
const { port1: remotePort, port2: localPort } = new MessageChannel();
|
|
124
|
-
const servicesToSignals = remoteServices.map((definition) => {
|
|
125
|
-
let signals = {};
|
|
126
|
-
try {
|
|
127
|
-
signals = manager.getService(definition)?.signals;
|
|
128
|
-
}
|
|
129
|
-
catch (e) {
|
|
130
|
-
// do nothing, service probably not present here
|
|
131
|
-
}
|
|
132
|
-
return {
|
|
133
|
-
serviceId: definition.toString(),
|
|
134
|
-
signals,
|
|
135
|
-
};
|
|
136
|
-
});
|
|
137
|
-
const message = {
|
|
138
|
-
type: SERVICE_MANAGER_MESSAGES.INIT_PORT,
|
|
139
|
-
remoteConnectionId,
|
|
140
|
-
port: remotePort,
|
|
141
|
-
};
|
|
142
|
-
if (type === 'iframe') {
|
|
143
|
-
target.postMessage(message, '*', [remotePort]);
|
|
144
|
-
}
|
|
145
|
-
else {
|
|
146
|
-
target.postMessage(message, [remotePort]);
|
|
147
|
-
}
|
|
148
|
-
localPort.onmessage = async (event) => {
|
|
149
|
-
if (event.data.type === SERVICE_MANAGER_MESSAGES.REMOTE_READY &&
|
|
150
|
-
event.data.remoteConnectionId === remoteConnectionId) {
|
|
151
|
-
clearTimeout(timeoutId);
|
|
152
|
-
clearInterval(intervalId);
|
|
153
|
-
const wrappedManager = Comlink.wrap(localPort);
|
|
154
|
-
const remoteServicesManager = createRemoteServicesManager({
|
|
155
|
-
servicesManager: manager,
|
|
156
|
-
});
|
|
157
|
-
Comlink.expose(remoteServicesManager, localPort);
|
|
158
|
-
// sync from main to remote manager when set is from main
|
|
159
|
-
signalsRegistry.addReplicator((id, value, revision) => {
|
|
160
|
-
wrappedManager.syncSignal(id, value, revision);
|
|
161
|
-
});
|
|
162
|
-
const remoteSignals = await wrappedManager.exchangeServicesAndSignals(servicesToSignals);
|
|
163
|
-
remoteSignals
|
|
164
|
-
.filter(({ signals }) => !!signals)
|
|
165
|
-
.forEach(({ serviceId, signals }) => {
|
|
166
|
-
signalsRegistry.setServiceSignals(serviceId, signals);
|
|
167
|
-
});
|
|
168
|
-
resolve(wrappedManager);
|
|
169
|
-
}
|
|
170
|
-
};
|
|
171
|
-
};
|
|
172
|
-
// first connection
|
|
173
|
-
triggerConnection();
|
|
174
|
-
// re-establish connection if remote frame is reloaded
|
|
175
|
-
onReadyFromRemote(() => triggerConnection());
|
|
176
|
-
// retries if defined in options
|
|
177
|
-
const intervalId = setInterval(triggerConnection, interval);
|
|
178
|
-
const timeoutId = setTimeout(() => {
|
|
179
|
-
clearInterval(intervalId);
|
|
180
|
-
reject(new Error('Connection timeout'));
|
|
181
|
-
}, timeout);
|
|
182
|
-
});
|
|
183
|
-
}
|
|
184
|
-
function createRemoteServicesManager({ servicesManager, messageFrame, }) {
|
|
185
|
-
let connectedResolver = (result) => { };
|
|
186
|
-
const connectedPromise = new Promise((resolve) => {
|
|
187
|
-
connectedResolver = resolve;
|
|
188
|
-
});
|
|
189
|
-
(0, init_handlers_js_1.initializeTransferHandlers)(servicesManager.getSignalsRegistry());
|
|
190
|
-
let remoteServiceManager = null;
|
|
191
|
-
const signalsRegistry = servicesManager.getSignalsRegistry();
|
|
192
|
-
const remoteManager = {
|
|
193
|
-
...servicesManager,
|
|
194
|
-
async awaitConnectionFromMain() {
|
|
195
|
-
const result = await connectedPromise;
|
|
196
|
-
return result === 'connected';
|
|
197
|
-
},
|
|
198
|
-
getService(definition, getService = remoteManager.getService, signals = {}) {
|
|
199
|
-
let result = null;
|
|
200
|
-
if (servicesManager.hasService(definition)) {
|
|
201
|
-
result = servicesManager.getService(definition, getService, signals || servicesManager.getServiceSignals(definition));
|
|
202
|
-
}
|
|
203
|
-
else {
|
|
204
|
-
result = createServiceProxy(definition,
|
|
205
|
-
// remoteServiceManager!,
|
|
206
|
-
(async () => {
|
|
207
|
-
await connectedPromise;
|
|
208
|
-
return remoteServiceManager;
|
|
209
|
-
})(), servicesManager);
|
|
210
|
-
servicesManager.addService(definition, () => result);
|
|
211
|
-
}
|
|
212
|
-
if (result) {
|
|
213
|
-
if (result.signals) {
|
|
214
|
-
signalsRegistry.setServiceSignals(definition.toString(), result.signals);
|
|
215
|
-
}
|
|
216
|
-
return result;
|
|
217
|
-
}
|
|
218
|
-
else {
|
|
219
|
-
throw new Error(`Service ${definition} is not provided`);
|
|
220
|
-
}
|
|
221
|
-
},
|
|
222
|
-
getServiceProxy(definition, getService = remoteManager.getService) {
|
|
223
|
-
const service = remoteManager.getService(definition, getService);
|
|
224
|
-
return service ? Comlink.proxy(service) : service;
|
|
225
|
-
},
|
|
226
|
-
syncSignal(signalId, value, revision) {
|
|
227
|
-
const signal = signalsRegistry.getSignalById(signalId);
|
|
228
|
-
if (signal) {
|
|
229
|
-
signal.syncSignal(value, revision);
|
|
230
|
-
}
|
|
231
|
-
else {
|
|
232
|
-
const newSignal = signalsRegistry.createSignal(value, signalId);
|
|
233
|
-
newSignal.set(value);
|
|
234
|
-
}
|
|
235
|
-
},
|
|
236
|
-
exchangeServicesAndSignals(serviceSignalArr) {
|
|
237
|
-
serviceSignalArr
|
|
238
|
-
.map(({ serviceId, signals }) => ({
|
|
239
|
-
serviceId,
|
|
240
|
-
signals,
|
|
241
|
-
}))
|
|
242
|
-
.filter(({ signals }) => !!signals)
|
|
243
|
-
.forEach(({ serviceId, signals }) => {
|
|
244
|
-
signalsRegistry.setServiceSignals(serviceId, signals);
|
|
245
|
-
});
|
|
246
|
-
connectedResolver('connected');
|
|
247
|
-
return serviceSignalArr
|
|
248
|
-
.map(({ serviceId }) => (0, services_definitions_1.defineService)(serviceId))
|
|
249
|
-
.map((definition) => ({
|
|
250
|
-
serviceId: definition.toString(),
|
|
251
|
-
signals: remoteManager.getService(definition).signals,
|
|
252
|
-
}));
|
|
253
|
-
},
|
|
254
|
-
enableContext(context) {
|
|
255
|
-
servicesManager.enableContext.bind(this)(context);
|
|
256
|
-
return this;
|
|
257
|
-
},
|
|
258
|
-
};
|
|
259
|
-
if (messageFrame) {
|
|
260
|
-
messageFrame.onmessage = (event) => {
|
|
261
|
-
if (event.data.type === SERVICE_MANAGER_MESSAGES.INIT_PORT) {
|
|
262
|
-
remoteServiceManager = Comlink.wrap(event.data.port);
|
|
263
|
-
Comlink.expose(remoteManager, event.data.port);
|
|
264
|
-
event.data.port.postMessage({
|
|
265
|
-
type: SERVICE_MANAGER_MESSAGES.REMOTE_READY,
|
|
266
|
-
remoteConnectionId: event.data.remoteConnectionId,
|
|
267
|
-
}, {});
|
|
268
|
-
// sync from remote to main when set is from remote
|
|
269
|
-
signalsRegistry.addReplicator((id, value, revision) => {
|
|
270
|
-
void remoteServiceManager.syncSignal(id, value, revision);
|
|
271
|
-
});
|
|
272
|
-
}
|
|
273
|
-
};
|
|
274
|
-
const message = { type: SERVICE_MANAGER_MESSAGES.READY_FOR_CONNECTION };
|
|
275
|
-
if (messageFrame.parent) {
|
|
276
|
-
messageFrame.parent.postMessage(message, '*');
|
|
277
|
-
}
|
|
278
|
-
else {
|
|
279
|
-
messageFrame.postMessage(message);
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
|
-
return remoteManager;
|
|
283
|
-
}
|
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.initializeTransferHandlers = initializeTransferHandlers;
|
|
37
|
-
const Comlink = __importStar(require("comlink"));
|
|
38
|
-
// import type { ServiceDefinition } from '../types.js';
|
|
39
|
-
// import { defineService } from '@wix/services-definitions';
|
|
40
|
-
const transfer_helpers_js_1 = require("../core-services/signals/transfer-helpers.js");
|
|
41
|
-
function isObjectOrFunction(obj) {
|
|
42
|
-
return (typeof obj === 'object' && obj !== null) || typeof obj === 'function';
|
|
43
|
-
}
|
|
44
|
-
function needsProxy(obj) {
|
|
45
|
-
if (!isObjectOrFunction(obj)) {
|
|
46
|
-
return false;
|
|
47
|
-
}
|
|
48
|
-
if (typeof obj === 'function') {
|
|
49
|
-
return true;
|
|
50
|
-
}
|
|
51
|
-
// Check if any property of the object needs a proxy
|
|
52
|
-
for (const key in obj) {
|
|
53
|
-
if (needsProxy(obj[key])) {
|
|
54
|
-
return true;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
return false;
|
|
58
|
-
}
|
|
59
|
-
const methodIdentifier = '3#p7C$:remote-helpers-method-identifier';
|
|
60
|
-
const stripMethods = (obj) => {
|
|
61
|
-
if (typeof obj === 'function') {
|
|
62
|
-
return methodIdentifier;
|
|
63
|
-
}
|
|
64
|
-
if (Array.isArray(obj)) {
|
|
65
|
-
const strippedArr = obj.map(stripMethods).filter(Boolean);
|
|
66
|
-
return strippedArr.length ? strippedArr : undefined;
|
|
67
|
-
}
|
|
68
|
-
if (isObjectOrFunction(obj)) {
|
|
69
|
-
return Object.entries(obj).reduce((entries, [key, value]) => {
|
|
70
|
-
entries[key] = stripMethods(value);
|
|
71
|
-
return entries;
|
|
72
|
-
}, {});
|
|
73
|
-
}
|
|
74
|
-
return obj;
|
|
75
|
-
};
|
|
76
|
-
const deepMerge = (target, source) => {
|
|
77
|
-
if (typeof target === 'undefined' || target === methodIdentifier) {
|
|
78
|
-
return source;
|
|
79
|
-
}
|
|
80
|
-
for (const key in target) {
|
|
81
|
-
target[key] = deepMerge(target[key] || {}, source[key]);
|
|
82
|
-
}
|
|
83
|
-
return target;
|
|
84
|
-
};
|
|
85
|
-
let isInitialized = false;
|
|
86
|
-
function initializeTransferHandlers(signalsRegistry) {
|
|
87
|
-
if (isInitialized) {
|
|
88
|
-
return;
|
|
89
|
-
}
|
|
90
|
-
isInitialized = true;
|
|
91
|
-
(0, transfer_helpers_js_1.createSignalsTransferHandler)(signalsRegistry);
|
|
92
|
-
Comlink.transferHandlers.set('FUNC', {
|
|
93
|
-
// @ts-expect-error
|
|
94
|
-
canHandle: needsProxy,
|
|
95
|
-
serialize: (obj) => {
|
|
96
|
-
const { port1, port2 } = new MessageChannel();
|
|
97
|
-
Comlink.expose(obj, port1);
|
|
98
|
-
return [{ stripped: stripMethods(obj), port: port2 }, [port2]];
|
|
99
|
-
},
|
|
100
|
-
deserialize: ({ stripped, port }) => deepMerge(stripped, Comlink.wrap(port)),
|
|
101
|
-
});
|
|
102
|
-
//
|
|
103
|
-
// Comlink.transferHandlers.set('ServiceDefinition', {
|
|
104
|
-
// // @ts-expect-error
|
|
105
|
-
// canHandle: (obj?: ServiceDefinition<any, any>) => {
|
|
106
|
-
// return !!obj?.isServiceDefinition;
|
|
107
|
-
// },
|
|
108
|
-
// serialize: (p: any) => {
|
|
109
|
-
// return [p.toString(), []];
|
|
110
|
-
// },
|
|
111
|
-
// deserialize: (definition: string) => {
|
|
112
|
-
// return defineService(definition);
|
|
113
|
-
// },
|
|
114
|
-
// });
|
|
115
|
-
}
|