@wix/services-manager 0.2.1 → 0.2.4
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/helpers.d.ts +3 -0
- package/build/helpers.js +8 -0
- package/build/remote-helpers.d.ts +2 -1
- package/build/remote-helpers.js +37 -19
- package/build/services-manager.d.ts +1 -1
- package/build/services-manager.js +10 -10
- package/cjs/build/helpers.d.ts +3 -0
- package/cjs/build/helpers.js +11 -1
- package/cjs/build/remote-helpers.d.ts +2 -1
- package/cjs/build/remote-helpers.js +37 -19
- package/cjs/build/services-manager.d.ts +1 -1
- package/cjs/build/services-manager.js +10 -10
- package/package.json +2 -2
package/build/helpers.d.ts
CHANGED
|
@@ -1 +1,4 @@
|
|
|
1
|
+
import { GetService, ThreadMode } from '@wix/services-definitions';
|
|
1
2
|
export { defineService, implementService } from '@wix/services-definitions';
|
|
3
|
+
export declare const resolveServiceGetterFromContext: <M extends ThreadMode = ThreadMode.REMOTE>() => GetService<M>;
|
|
4
|
+
export declare const resolveSignalsReadyFromContext: () => Promise<void>;
|
package/build/helpers.js
CHANGED
|
@@ -1 +1,9 @@
|
|
|
1
|
+
import { wixContext } from '@wix/sdk-context';
|
|
1
2
|
export { defineService, implementService } from '@wix/services-definitions';
|
|
3
|
+
export const resolveServiceGetterFromContext = () => wixContext?.getService || globalThis?.__wix_context__?.getService;
|
|
4
|
+
export const resolveSignalsReadyFromContext = () => {
|
|
5
|
+
const awaitRemoteSignals = wixContext?.awaitRemoteSignals ||
|
|
6
|
+
globalThis?.__wix_context__?.awaitRemoteSignals ||
|
|
7
|
+
(() => Promise.resolve());
|
|
8
|
+
return awaitRemoteSignals();
|
|
9
|
+
};
|
|
@@ -12,9 +12,10 @@ export type RemoteServicesManager = ServicesManager<ThreadMode.REMOTE> & {
|
|
|
12
12
|
signals: any;
|
|
13
13
|
}[];
|
|
14
14
|
awaitConnectionFromMain: () => Promise<boolean>;
|
|
15
|
+
enableContext: (context: 'global' | 'module') => RemoteServicesManager;
|
|
15
16
|
};
|
|
16
17
|
export type ProxyServiceManager = Comlink.Remote<RemoteServicesManager>;
|
|
17
|
-
export declare function createServiceProxy<T extends ServiceDefinition<any, any>>(definition: T, remoteServiceManager: ProxyServiceManager
|
|
18
|
+
export declare function createServiceProxy<T extends ServiceDefinition<any, any>>(definition: T, remoteServiceManager: ProxyServiceManager | Promise<ProxyServiceManager>, localServicesManager: ServicesManager): PromisifiedServiceAPI<T>;
|
|
18
19
|
export declare enum SERVICE_MANAGER_MESSAGES {
|
|
19
20
|
INIT_PORT = "WIX_MESSAGE.SERVICE_MANAGER.INIT_PORT",
|
|
20
21
|
SIGNAL = "WIX_MESSAGE.SERVICE_MANAGER.SIGNAL",
|
package/build/remote-helpers.js
CHANGED
|
@@ -8,7 +8,10 @@ export function createServiceProxy(definition, remoteServiceManager, localServic
|
|
|
8
8
|
return localServicesManager.getServiceSignals(definition);
|
|
9
9
|
}
|
|
10
10
|
return async (...args) => {
|
|
11
|
-
|
|
11
|
+
const remoteManager = remoteServiceManager instanceof Promise
|
|
12
|
+
? await remoteServiceManager
|
|
13
|
+
: remoteServiceManager;
|
|
14
|
+
let service = remoteManager.getServiceProxy(definition);
|
|
12
15
|
if (!service[prop]) {
|
|
13
16
|
service = await service;
|
|
14
17
|
}
|
|
@@ -52,24 +55,26 @@ retryOptions: { timeout = 10000, interval = 11000 } = {}, remoteServices = [], a
|
|
|
52
55
|
console.warn('setting a low interval might cause a race condition on the response message');
|
|
53
56
|
}
|
|
54
57
|
const signalsRegistry = manager.getSignalsRegistry();
|
|
58
|
+
const onReadyFromRemote = (callback) => {
|
|
59
|
+
if (type === 'iframe') {
|
|
60
|
+
window.addEventListener('message', (event) => {
|
|
61
|
+
if (event.data?.type === SERVICE_MANAGER_MESSAGES.READY_FOR_CONNECTION &&
|
|
62
|
+
event.source === target) {
|
|
63
|
+
callback();
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
target.onmessage = (event) => {
|
|
69
|
+
if (event.data?.type === SERVICE_MANAGER_MESSAGES.READY_FOR_CONNECTION) {
|
|
70
|
+
callback();
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
};
|
|
55
75
|
if (awaitInitialConnection && typeof window !== 'undefined') {
|
|
56
76
|
await new Promise((resolve) => {
|
|
57
|
-
|
|
58
|
-
window.addEventListener('message', (event) => {
|
|
59
|
-
if (event.data?.type ===
|
|
60
|
-
SERVICE_MANAGER_MESSAGES.READY_FOR_CONNECTION &&
|
|
61
|
-
event.source === target) {
|
|
62
|
-
resolve();
|
|
63
|
-
}
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
|
-
else {
|
|
67
|
-
target.onmessage = (event) => {
|
|
68
|
-
if (event.data?.type === SERVICE_MANAGER_MESSAGES.READY_FOR_CONNECTION) {
|
|
69
|
-
resolve();
|
|
70
|
-
}
|
|
71
|
-
};
|
|
72
|
-
}
|
|
77
|
+
onReadyFromRemote(resolve);
|
|
73
78
|
});
|
|
74
79
|
}
|
|
75
80
|
return new Promise((resolve, reject) => {
|
|
@@ -109,6 +114,7 @@ retryOptions: { timeout = 10000, interval = 11000 } = {}, remoteServices = [], a
|
|
|
109
114
|
const remoteServicesManager = createRemoteServicesManager({
|
|
110
115
|
servicesManager: manager,
|
|
111
116
|
});
|
|
117
|
+
Comlink.expose(remoteServicesManager, localPort);
|
|
112
118
|
// sync from main to remote manager when set is from main
|
|
113
119
|
signalsRegistry.addReplicator((id, value, revision) => {
|
|
114
120
|
wrappedManager.syncSignal(id, value, revision);
|
|
@@ -119,12 +125,15 @@ retryOptions: { timeout = 10000, interval = 11000 } = {}, remoteServices = [], a
|
|
|
119
125
|
.forEach(({ serviceId, signals }) => {
|
|
120
126
|
signalsRegistry.setServiceSignals(serviceId, signals);
|
|
121
127
|
});
|
|
122
|
-
Comlink.expose(remoteServicesManager, localPort);
|
|
123
128
|
resolve(wrappedManager);
|
|
124
129
|
}
|
|
125
130
|
};
|
|
126
131
|
};
|
|
132
|
+
// first connection
|
|
127
133
|
triggerConnection();
|
|
134
|
+
// re-establish connection if remote frame is reloaded
|
|
135
|
+
onReadyFromRemote(() => triggerConnection());
|
|
136
|
+
// retries if defined in options
|
|
128
137
|
const intervalId = setInterval(triggerConnection, interval);
|
|
129
138
|
const timeoutId = setTimeout(() => {
|
|
130
139
|
clearInterval(intervalId);
|
|
@@ -152,7 +161,12 @@ export function createRemoteServicesManager({ servicesManager, messageFrame, })
|
|
|
152
161
|
result = servicesManager.getService(definition, getService, signals || servicesManager.getServiceSignals(definition));
|
|
153
162
|
}
|
|
154
163
|
else {
|
|
155
|
-
result = createServiceProxy(definition,
|
|
164
|
+
result = createServiceProxy(definition,
|
|
165
|
+
// remoteServiceManager!,
|
|
166
|
+
(async () => {
|
|
167
|
+
await connectedPromise;
|
|
168
|
+
return remoteServiceManager;
|
|
169
|
+
})(), servicesManager);
|
|
156
170
|
servicesManager.addService(definition, () => result);
|
|
157
171
|
}
|
|
158
172
|
if (result) {
|
|
@@ -197,6 +211,10 @@ export function createRemoteServicesManager({ servicesManager, messageFrame, })
|
|
|
197
211
|
signals: remoteManager.getService(definition).signals,
|
|
198
212
|
}));
|
|
199
213
|
},
|
|
214
|
+
enableContext(context) {
|
|
215
|
+
servicesManager.enableContext.bind(this)(context);
|
|
216
|
+
return this;
|
|
217
|
+
},
|
|
200
218
|
};
|
|
201
219
|
if (messageFrame) {
|
|
202
220
|
messageFrame.onmessage = (event) => {
|
|
@@ -7,6 +7,6 @@ export declare function createServicesManager<M extends ThreadMode = ThreadMode.
|
|
|
7
7
|
}): ServicesManager<M>;
|
|
8
8
|
export type ServicesRegistrar = {
|
|
9
9
|
registeredServices: ServiceBinding<any, any>[];
|
|
10
|
-
addService<T extends ServiceDefinition<any, any
|
|
10
|
+
addService<T extends ServiceDefinition<any, any> = any, Impl extends ServiceFactory<T, any, M> = any, M extends ThreadMode = any>(definition: T, impl: Impl, config?: ServiceFactoryConfig<Impl, M>): ServicesRegistrar;
|
|
11
11
|
};
|
|
12
12
|
export declare function createServicesMap(registeredServices?: ServiceBinding<any, any>[]): ServicesRegistrar;
|
|
@@ -53,19 +53,19 @@ signalsRegistry = createSignalsRegistry(), } = {}) {
|
|
|
53
53
|
}
|
|
54
54
|
},
|
|
55
55
|
enableContext(context) {
|
|
56
|
+
let resolvedContext = wixContext;
|
|
56
57
|
if (context === 'global') {
|
|
57
|
-
if (globalThis.__wix_context__) {
|
|
58
|
-
globalThis.__wix_context__
|
|
58
|
+
if (!globalThis.__wix_context__) {
|
|
59
|
+
globalThis.__wix_context__ = {};
|
|
59
60
|
}
|
|
60
|
-
|
|
61
|
-
globalThis.__wix_context__ = {
|
|
62
|
-
getService: manager.getService,
|
|
63
|
-
};
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
else {
|
|
67
|
-
wixContext.getService = manager.getService;
|
|
61
|
+
resolvedContext = globalThis.__wix_context__;
|
|
68
62
|
}
|
|
63
|
+
resolvedContext.getService = this.getService;
|
|
64
|
+
resolvedContext.awaitRemoteSignals = async () =>
|
|
65
|
+
// remote services manager
|
|
66
|
+
this.awaitConnectionFromMain
|
|
67
|
+
? this.awaitConnectionFromMain()
|
|
68
|
+
: true;
|
|
69
69
|
return this;
|
|
70
70
|
},
|
|
71
71
|
};
|
package/cjs/build/helpers.d.ts
CHANGED
|
@@ -1 +1,4 @@
|
|
|
1
|
+
import { GetService, ThreadMode } from '@wix/services-definitions';
|
|
1
2
|
export { defineService, implementService } from '@wix/services-definitions';
|
|
3
|
+
export declare const resolveServiceGetterFromContext: <M extends ThreadMode = ThreadMode.REMOTE>() => GetService<M>;
|
|
4
|
+
export declare const resolveSignalsReadyFromContext: () => Promise<void>;
|
package/cjs/build/helpers.js
CHANGED
|
@@ -1,6 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.implementService = exports.defineService = void 0;
|
|
3
|
+
exports.resolveSignalsReadyFromContext = exports.resolveServiceGetterFromContext = exports.implementService = exports.defineService = void 0;
|
|
4
|
+
const sdk_context_1 = require("@wix/sdk-context");
|
|
4
5
|
var services_definitions_1 = require("@wix/services-definitions");
|
|
5
6
|
Object.defineProperty(exports, "defineService", { enumerable: true, get: function () { return services_definitions_1.defineService; } });
|
|
6
7
|
Object.defineProperty(exports, "implementService", { enumerable: true, get: function () { return services_definitions_1.implementService; } });
|
|
8
|
+
const resolveServiceGetterFromContext = () => sdk_context_1.wixContext?.getService || globalThis?.__wix_context__?.getService;
|
|
9
|
+
exports.resolveServiceGetterFromContext = resolveServiceGetterFromContext;
|
|
10
|
+
const resolveSignalsReadyFromContext = () => {
|
|
11
|
+
const awaitRemoteSignals = sdk_context_1.wixContext?.awaitRemoteSignals ||
|
|
12
|
+
globalThis?.__wix_context__?.awaitRemoteSignals ||
|
|
13
|
+
(() => Promise.resolve());
|
|
14
|
+
return awaitRemoteSignals();
|
|
15
|
+
};
|
|
16
|
+
exports.resolveSignalsReadyFromContext = resolveSignalsReadyFromContext;
|
|
@@ -12,9 +12,10 @@ export type RemoteServicesManager = ServicesManager<ThreadMode.REMOTE> & {
|
|
|
12
12
|
signals: any;
|
|
13
13
|
}[];
|
|
14
14
|
awaitConnectionFromMain: () => Promise<boolean>;
|
|
15
|
+
enableContext: (context: 'global' | 'module') => RemoteServicesManager;
|
|
15
16
|
};
|
|
16
17
|
export type ProxyServiceManager = Comlink.Remote<RemoteServicesManager>;
|
|
17
|
-
export declare function createServiceProxy<T extends ServiceDefinition<any, any>>(definition: T, remoteServiceManager: ProxyServiceManager
|
|
18
|
+
export declare function createServiceProxy<T extends ServiceDefinition<any, any>>(definition: T, remoteServiceManager: ProxyServiceManager | Promise<ProxyServiceManager>, localServicesManager: ServicesManager): PromisifiedServiceAPI<T>;
|
|
18
19
|
export declare enum SERVICE_MANAGER_MESSAGES {
|
|
19
20
|
INIT_PORT = "WIX_MESSAGE.SERVICE_MANAGER.INIT_PORT",
|
|
20
21
|
SIGNAL = "WIX_MESSAGE.SERVICE_MANAGER.SIGNAL",
|
|
@@ -48,7 +48,10 @@ function createServiceProxy(definition, remoteServiceManager, localServicesManag
|
|
|
48
48
|
return localServicesManager.getServiceSignals(definition);
|
|
49
49
|
}
|
|
50
50
|
return async (...args) => {
|
|
51
|
-
|
|
51
|
+
const remoteManager = remoteServiceManager instanceof Promise
|
|
52
|
+
? await remoteServiceManager
|
|
53
|
+
: remoteServiceManager;
|
|
54
|
+
let service = remoteManager.getServiceProxy(definition);
|
|
52
55
|
if (!service[prop]) {
|
|
53
56
|
service = await service;
|
|
54
57
|
}
|
|
@@ -92,24 +95,26 @@ retryOptions: { timeout = 10000, interval = 11000 } = {}, remoteServices = [], a
|
|
|
92
95
|
console.warn('setting a low interval might cause a race condition on the response message');
|
|
93
96
|
}
|
|
94
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
|
+
};
|
|
95
115
|
if (awaitInitialConnection && typeof window !== 'undefined') {
|
|
96
116
|
await new Promise((resolve) => {
|
|
97
|
-
|
|
98
|
-
window.addEventListener('message', (event) => {
|
|
99
|
-
if (event.data?.type ===
|
|
100
|
-
SERVICE_MANAGER_MESSAGES.READY_FOR_CONNECTION &&
|
|
101
|
-
event.source === target) {
|
|
102
|
-
resolve();
|
|
103
|
-
}
|
|
104
|
-
});
|
|
105
|
-
}
|
|
106
|
-
else {
|
|
107
|
-
target.onmessage = (event) => {
|
|
108
|
-
if (event.data?.type === SERVICE_MANAGER_MESSAGES.READY_FOR_CONNECTION) {
|
|
109
|
-
resolve();
|
|
110
|
-
}
|
|
111
|
-
};
|
|
112
|
-
}
|
|
117
|
+
onReadyFromRemote(resolve);
|
|
113
118
|
});
|
|
114
119
|
}
|
|
115
120
|
return new Promise((resolve, reject) => {
|
|
@@ -149,6 +154,7 @@ retryOptions: { timeout = 10000, interval = 11000 } = {}, remoteServices = [], a
|
|
|
149
154
|
const remoteServicesManager = createRemoteServicesManager({
|
|
150
155
|
servicesManager: manager,
|
|
151
156
|
});
|
|
157
|
+
Comlink.expose(remoteServicesManager, localPort);
|
|
152
158
|
// sync from main to remote manager when set is from main
|
|
153
159
|
signalsRegistry.addReplicator((id, value, revision) => {
|
|
154
160
|
wrappedManager.syncSignal(id, value, revision);
|
|
@@ -159,12 +165,15 @@ retryOptions: { timeout = 10000, interval = 11000 } = {}, remoteServices = [], a
|
|
|
159
165
|
.forEach(({ serviceId, signals }) => {
|
|
160
166
|
signalsRegistry.setServiceSignals(serviceId, signals);
|
|
161
167
|
});
|
|
162
|
-
Comlink.expose(remoteServicesManager, localPort);
|
|
163
168
|
resolve(wrappedManager);
|
|
164
169
|
}
|
|
165
170
|
};
|
|
166
171
|
};
|
|
172
|
+
// first connection
|
|
167
173
|
triggerConnection();
|
|
174
|
+
// re-establish connection if remote frame is reloaded
|
|
175
|
+
onReadyFromRemote(() => triggerConnection());
|
|
176
|
+
// retries if defined in options
|
|
168
177
|
const intervalId = setInterval(triggerConnection, interval);
|
|
169
178
|
const timeoutId = setTimeout(() => {
|
|
170
179
|
clearInterval(intervalId);
|
|
@@ -192,7 +201,12 @@ function createRemoteServicesManager({ servicesManager, messageFrame, }) {
|
|
|
192
201
|
result = servicesManager.getService(definition, getService, signals || servicesManager.getServiceSignals(definition));
|
|
193
202
|
}
|
|
194
203
|
else {
|
|
195
|
-
result = createServiceProxy(definition,
|
|
204
|
+
result = createServiceProxy(definition,
|
|
205
|
+
// remoteServiceManager!,
|
|
206
|
+
(async () => {
|
|
207
|
+
await connectedPromise;
|
|
208
|
+
return remoteServiceManager;
|
|
209
|
+
})(), servicesManager);
|
|
196
210
|
servicesManager.addService(definition, () => result);
|
|
197
211
|
}
|
|
198
212
|
if (result) {
|
|
@@ -237,6 +251,10 @@ function createRemoteServicesManager({ servicesManager, messageFrame, }) {
|
|
|
237
251
|
signals: remoteManager.getService(definition).signals,
|
|
238
252
|
}));
|
|
239
253
|
},
|
|
254
|
+
enableContext(context) {
|
|
255
|
+
servicesManager.enableContext.bind(this)(context);
|
|
256
|
+
return this;
|
|
257
|
+
},
|
|
240
258
|
};
|
|
241
259
|
if (messageFrame) {
|
|
242
260
|
messageFrame.onmessage = (event) => {
|
|
@@ -7,6 +7,6 @@ export declare function createServicesManager<M extends ThreadMode = ThreadMode.
|
|
|
7
7
|
}): ServicesManager<M>;
|
|
8
8
|
export type ServicesRegistrar = {
|
|
9
9
|
registeredServices: ServiceBinding<any, any>[];
|
|
10
|
-
addService<T extends ServiceDefinition<any, any
|
|
10
|
+
addService<T extends ServiceDefinition<any, any> = any, Impl extends ServiceFactory<T, any, M> = any, M extends ThreadMode = any>(definition: T, impl: Impl, config?: ServiceFactoryConfig<Impl, M>): ServicesRegistrar;
|
|
11
11
|
};
|
|
12
12
|
export declare function createServicesMap(registeredServices?: ServiceBinding<any, any>[]): ServicesRegistrar;
|
|
@@ -59,19 +59,19 @@ signalsRegistry = (0, registry_js_1.createSignalsRegistry)(), } = {}) {
|
|
|
59
59
|
}
|
|
60
60
|
},
|
|
61
61
|
enableContext(context) {
|
|
62
|
+
let resolvedContext = sdk_context_1.wixContext;
|
|
62
63
|
if (context === 'global') {
|
|
63
|
-
if (globalThis.__wix_context__) {
|
|
64
|
-
globalThis.__wix_context__
|
|
64
|
+
if (!globalThis.__wix_context__) {
|
|
65
|
+
globalThis.__wix_context__ = {};
|
|
65
66
|
}
|
|
66
|
-
|
|
67
|
-
globalThis.__wix_context__ = {
|
|
68
|
-
getService: manager.getService,
|
|
69
|
-
};
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
else {
|
|
73
|
-
sdk_context_1.wixContext.getService = manager.getService;
|
|
67
|
+
resolvedContext = globalThis.__wix_context__;
|
|
74
68
|
}
|
|
69
|
+
resolvedContext.getService = this.getService;
|
|
70
|
+
resolvedContext.awaitRemoteSignals = async () =>
|
|
71
|
+
// remote services manager
|
|
72
|
+
this.awaitConnectionFromMain
|
|
73
|
+
? this.awaitConnectionFromMain()
|
|
74
|
+
: true;
|
|
75
75
|
return this;
|
|
76
76
|
},
|
|
77
77
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wix/services-manager",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.4",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./cjs/build/services-manager.js",
|
|
6
6
|
"exports": {
|
|
@@ -90,5 +90,5 @@
|
|
|
90
90
|
]
|
|
91
91
|
}
|
|
92
92
|
},
|
|
93
|
-
"falconPackageHash": "
|
|
93
|
+
"falconPackageHash": "db3a2d98d49707022d917c5b3cf20b5969b0a32671ac878a22b5a096"
|
|
94
94
|
}
|