@wix/services-manager 0.2.0 → 0.2.3
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 +2 -0
- package/build/helpers.js +2 -0
- package/build/remote-helpers.d.ts +1 -1
- package/build/remote-helpers.js +27 -18
- package/build/services-manager.d.ts +1 -1
- package/build/services-manager.js +18 -1
- package/build/types.d.ts +1 -0
- package/cjs/build/helpers.d.ts +2 -0
- package/cjs/build/helpers.js +4 -1
- package/cjs/build/remote-helpers.d.ts +1 -1
- package/cjs/build/remote-helpers.js +27 -18
- package/cjs/build/services-manager.d.ts +1 -1
- package/cjs/build/services-manager.js +18 -1
- package/cjs/build/types.d.ts +1 -0
- package/package.json +2 -2
package/build/helpers.d.ts
CHANGED
package/build/helpers.js
CHANGED
|
@@ -14,7 +14,7 @@ export type RemoteServicesManager = ServicesManager<ThreadMode.REMOTE> & {
|
|
|
14
14
|
awaitConnectionFromMain: () => Promise<boolean>;
|
|
15
15
|
};
|
|
16
16
|
export type ProxyServiceManager = Comlink.Remote<RemoteServicesManager>;
|
|
17
|
-
export declare function createServiceProxy<T extends ServiceDefinition<any, any>>(definition: T, remoteServiceManager: ProxyServiceManager, localServicesManager: ServicesManager): PromisifiedServiceAPI<T>;
|
|
17
|
+
export declare function createServiceProxy<T extends ServiceDefinition<any, any>>(definition: T, remoteServiceManager: ProxyServiceManager, localServicesManager: ServicesManager, awaiter?: Promise<any>): PromisifiedServiceAPI<T>;
|
|
18
18
|
export declare enum SERVICE_MANAGER_MESSAGES {
|
|
19
19
|
INIT_PORT = "WIX_MESSAGE.SERVICE_MANAGER.INIT_PORT",
|
|
20
20
|
SIGNAL = "WIX_MESSAGE.SERVICE_MANAGER.SIGNAL",
|
package/build/remote-helpers.js
CHANGED
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
import { defineService, } from '@wix/services-definitions';
|
|
2
2
|
import * as Comlink from 'comlink';
|
|
3
3
|
import { initializeTransferHandlers } from './transfer-handlers/init-handlers.js';
|
|
4
|
-
export function createServiceProxy(definition, remoteServiceManager, localServicesManager) {
|
|
4
|
+
export function createServiceProxy(definition, remoteServiceManager, localServicesManager, awaiter) {
|
|
5
5
|
return new Proxy({}, {
|
|
6
6
|
get(_, prop) {
|
|
7
7
|
if (prop === 'signals') {
|
|
8
8
|
return localServicesManager.getServiceSignals(definition);
|
|
9
9
|
}
|
|
10
10
|
return async (...args) => {
|
|
11
|
+
if (awaiter) {
|
|
12
|
+
await awaiter;
|
|
13
|
+
}
|
|
11
14
|
let service = remoteServiceManager.getServiceProxy(definition);
|
|
12
15
|
if (!service[prop]) {
|
|
13
16
|
service = await service;
|
|
@@ -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) => {
|
|
@@ -124,7 +129,11 @@ retryOptions: { timeout = 10000, interval = 11000 } = {}, remoteServices = [], a
|
|
|
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,7 @@ 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, remoteServiceManager, servicesManager);
|
|
164
|
+
result = createServiceProxy(definition, remoteServiceManager, servicesManager, connectedPromise);
|
|
156
165
|
servicesManager.addService(definition, () => result);
|
|
157
166
|
}
|
|
158
167
|
if (result) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ServiceBinding, ServiceDefinition, ServiceFactory, ServiceFactoryConfig, ServicesManager, ThreadMode } from './types.js';
|
|
2
2
|
import { createSignalsRegistry, SignalsRegistry } from './core-services/signals/registry.js';
|
|
3
3
|
export { createSignalsRegistry, SignalsRegistry };
|
|
4
|
-
export declare function createServicesManager<M extends ThreadMode = ThreadMode.MAIN>(servicesBindings
|
|
4
|
+
export declare function createServicesManager<M extends ThreadMode = ThreadMode.MAIN>(servicesBindings?: ServicesRegistrar, { signalsRegistry, }?: {
|
|
5
5
|
signalsRegistry?: SignalsRegistry;
|
|
6
6
|
auth?: any;
|
|
7
7
|
}): ServicesManager<M>;
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import { SignalsServiceDefinition } from './core-services/signals/definition.js';
|
|
2
2
|
import { SignalsServiceFactory } from './core-services/signals/service.js';
|
|
3
3
|
import { createSignalsRegistry, SignalsRegistry, } from './core-services/signals/registry.js';
|
|
4
|
+
import { wixContext } from '@wix/sdk-context';
|
|
4
5
|
export { createSignalsRegistry, SignalsRegistry };
|
|
5
6
|
export function createServicesManager(servicesBindings, {
|
|
6
7
|
// in case we decide to keep multiple services manager in the same thread, we can use one signals registry for all of them
|
|
7
8
|
signalsRegistry = createSignalsRegistry(), } = {}) {
|
|
8
9
|
const coreRegisteredServices = createServicesMap().addService(SignalsServiceDefinition, SignalsServiceFactory, { signalsRegistry });
|
|
9
10
|
const bindingsByDefinition = new Map([
|
|
10
|
-
...servicesBindings.registeredServices,
|
|
11
|
+
...(servicesBindings ? servicesBindings.registeredServices : []),
|
|
11
12
|
...coreRegisteredServices.registeredServices,
|
|
12
13
|
].map((service) => [service.definition.toString(), service]));
|
|
13
14
|
const initializedServices = new Map();
|
|
@@ -51,6 +52,22 @@ signalsRegistry = createSignalsRegistry(), } = {}) {
|
|
|
51
52
|
throw new Error(`Service ${definition.toString()} is already provided`);
|
|
52
53
|
}
|
|
53
54
|
},
|
|
55
|
+
enableContext(context) {
|
|
56
|
+
if (context === 'global') {
|
|
57
|
+
if (globalThis.__wix_context__) {
|
|
58
|
+
globalThis.__wix_context__.getService = manager.getService;
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
globalThis.__wix_context__ = {
|
|
62
|
+
getService: manager.getService,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
wixContext.getService = manager.getService;
|
|
68
|
+
}
|
|
69
|
+
return this;
|
|
70
|
+
},
|
|
54
71
|
};
|
|
55
72
|
bindingsByDefinition.forEach(({ definition, impl, config }) => {
|
|
56
73
|
initializedServices.set(definition, impl({
|
package/build/types.d.ts
CHANGED
|
@@ -8,4 +8,5 @@ export type ServicesManager<M extends ThreadMode = ThreadMode.MAIN> = {
|
|
|
8
8
|
addService<T extends ServiceDefinition<any, any>, Impl extends ServiceFactory<T, any, ThreadMode.MAIN>>(definition: T, impl: Impl, config: ServiceFactoryConfig<Impl, ThreadMode.MAIN>): void;
|
|
9
9
|
addService<T extends ServiceDefinition<any, any>, Impl extends ServiceFactory<T, any, ThreadMode.REMOTE>>(definition: T, impl: Impl): void;
|
|
10
10
|
getSignalsRegistry(): SignalsRegistry;
|
|
11
|
+
enableContext(context: 'global' | 'module'): ServicesManager<M>;
|
|
11
12
|
};
|
package/cjs/build/helpers.d.ts
CHANGED
package/cjs/build/helpers.js
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.implementService = exports.defineService = void 0;
|
|
3
|
+
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;
|
|
@@ -14,7 +14,7 @@ export type RemoteServicesManager = ServicesManager<ThreadMode.REMOTE> & {
|
|
|
14
14
|
awaitConnectionFromMain: () => Promise<boolean>;
|
|
15
15
|
};
|
|
16
16
|
export type ProxyServiceManager = Comlink.Remote<RemoteServicesManager>;
|
|
17
|
-
export declare function createServiceProxy<T extends ServiceDefinition<any, any>>(definition: T, remoteServiceManager: ProxyServiceManager, localServicesManager: ServicesManager): PromisifiedServiceAPI<T>;
|
|
17
|
+
export declare function createServiceProxy<T extends ServiceDefinition<any, any>>(definition: T, remoteServiceManager: ProxyServiceManager, localServicesManager: ServicesManager, awaiter?: Promise<any>): PromisifiedServiceAPI<T>;
|
|
18
18
|
export declare enum SERVICE_MANAGER_MESSAGES {
|
|
19
19
|
INIT_PORT = "WIX_MESSAGE.SERVICE_MANAGER.INIT_PORT",
|
|
20
20
|
SIGNAL = "WIX_MESSAGE.SERVICE_MANAGER.SIGNAL",
|
|
@@ -41,13 +41,16 @@ exports.createRemoteServicesManager = createRemoteServicesManager;
|
|
|
41
41
|
const services_definitions_1 = require("@wix/services-definitions");
|
|
42
42
|
const Comlink = __importStar(require("comlink"));
|
|
43
43
|
const init_handlers_js_1 = require("./transfer-handlers/init-handlers.js");
|
|
44
|
-
function createServiceProxy(definition, remoteServiceManager, localServicesManager) {
|
|
44
|
+
function createServiceProxy(definition, remoteServiceManager, localServicesManager, awaiter) {
|
|
45
45
|
return new Proxy({}, {
|
|
46
46
|
get(_, prop) {
|
|
47
47
|
if (prop === 'signals') {
|
|
48
48
|
return localServicesManager.getServiceSignals(definition);
|
|
49
49
|
}
|
|
50
50
|
return async (...args) => {
|
|
51
|
+
if (awaiter) {
|
|
52
|
+
await awaiter;
|
|
53
|
+
}
|
|
51
54
|
let service = remoteServiceManager.getServiceProxy(definition);
|
|
52
55
|
if (!service[prop]) {
|
|
53
56
|
service = await service;
|
|
@@ -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) => {
|
|
@@ -164,7 +169,11 @@ retryOptions: { timeout = 10000, interval = 11000 } = {}, remoteServices = [], a
|
|
|
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,7 @@ function createRemoteServicesManager({ servicesManager, messageFrame, }) {
|
|
|
192
201
|
result = servicesManager.getService(definition, getService, signals || servicesManager.getServiceSignals(definition));
|
|
193
202
|
}
|
|
194
203
|
else {
|
|
195
|
-
result = createServiceProxy(definition, remoteServiceManager, servicesManager);
|
|
204
|
+
result = createServiceProxy(definition, remoteServiceManager, servicesManager, connectedPromise);
|
|
196
205
|
servicesManager.addService(definition, () => result);
|
|
197
206
|
}
|
|
198
207
|
if (result) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ServiceBinding, ServiceDefinition, ServiceFactory, ServiceFactoryConfig, ServicesManager, ThreadMode } from './types.js';
|
|
2
2
|
import { createSignalsRegistry, SignalsRegistry } from './core-services/signals/registry.js';
|
|
3
3
|
export { createSignalsRegistry, SignalsRegistry };
|
|
4
|
-
export declare function createServicesManager<M extends ThreadMode = ThreadMode.MAIN>(servicesBindings
|
|
4
|
+
export declare function createServicesManager<M extends ThreadMode = ThreadMode.MAIN>(servicesBindings?: ServicesRegistrar, { signalsRegistry, }?: {
|
|
5
5
|
signalsRegistry?: SignalsRegistry;
|
|
6
6
|
auth?: any;
|
|
7
7
|
}): ServicesManager<M>;
|
|
@@ -8,12 +8,13 @@ const service_js_1 = require("./core-services/signals/service.js");
|
|
|
8
8
|
const registry_js_1 = require("./core-services/signals/registry.js");
|
|
9
9
|
Object.defineProperty(exports, "createSignalsRegistry", { enumerable: true, get: function () { return registry_js_1.createSignalsRegistry; } });
|
|
10
10
|
Object.defineProperty(exports, "SignalsRegistry", { enumerable: true, get: function () { return registry_js_1.SignalsRegistry; } });
|
|
11
|
+
const sdk_context_1 = require("@wix/sdk-context");
|
|
11
12
|
function createServicesManager(servicesBindings, {
|
|
12
13
|
// in case we decide to keep multiple services manager in the same thread, we can use one signals registry for all of them
|
|
13
14
|
signalsRegistry = (0, registry_js_1.createSignalsRegistry)(), } = {}) {
|
|
14
15
|
const coreRegisteredServices = createServicesMap().addService(definition_js_1.SignalsServiceDefinition, service_js_1.SignalsServiceFactory, { signalsRegistry });
|
|
15
16
|
const bindingsByDefinition = new Map([
|
|
16
|
-
...servicesBindings.registeredServices,
|
|
17
|
+
...(servicesBindings ? servicesBindings.registeredServices : []),
|
|
17
18
|
...coreRegisteredServices.registeredServices,
|
|
18
19
|
].map((service) => [service.definition.toString(), service]));
|
|
19
20
|
const initializedServices = new Map();
|
|
@@ -57,6 +58,22 @@ signalsRegistry = (0, registry_js_1.createSignalsRegistry)(), } = {}) {
|
|
|
57
58
|
throw new Error(`Service ${definition.toString()} is already provided`);
|
|
58
59
|
}
|
|
59
60
|
},
|
|
61
|
+
enableContext(context) {
|
|
62
|
+
if (context === 'global') {
|
|
63
|
+
if (globalThis.__wix_context__) {
|
|
64
|
+
globalThis.__wix_context__.getService = manager.getService;
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
globalThis.__wix_context__ = {
|
|
68
|
+
getService: manager.getService,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
sdk_context_1.wixContext.getService = manager.getService;
|
|
74
|
+
}
|
|
75
|
+
return this;
|
|
76
|
+
},
|
|
60
77
|
};
|
|
61
78
|
bindingsByDefinition.forEach(({ definition, impl, config }) => {
|
|
62
79
|
initializedServices.set(definition, impl({
|
package/cjs/build/types.d.ts
CHANGED
|
@@ -8,4 +8,5 @@ export type ServicesManager<M extends ThreadMode = ThreadMode.MAIN> = {
|
|
|
8
8
|
addService<T extends ServiceDefinition<any, any>, Impl extends ServiceFactory<T, any, ThreadMode.MAIN>>(definition: T, impl: Impl, config: ServiceFactoryConfig<Impl, ThreadMode.MAIN>): void;
|
|
9
9
|
addService<T extends ServiceDefinition<any, any>, Impl extends ServiceFactory<T, any, ThreadMode.REMOTE>>(definition: T, impl: Impl): void;
|
|
10
10
|
getSignalsRegistry(): SignalsRegistry;
|
|
11
|
+
enableContext(context: 'global' | 'module'): ServicesManager<M>;
|
|
11
12
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wix/services-manager",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.3",
|
|
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": "eed0598aa64a95e9a1df2cc92a6d52fb261b4b13956db5a9deaec5b9"
|
|
94
94
|
}
|