@wix/editor-platform-contexts 1.63.0 → 1.65.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.js +9 -6
- package/dist/cjs/index.js.map +1 -1
- package/dist/esm/index.js +9 -6
- package/dist/esm/index.js.map +1 -1
- package/dist/types/index.d.ts +28 -19
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +3 -3
package/dist/cjs/index.js
CHANGED
|
@@ -217,11 +217,11 @@ class EnvironmentContext {
|
|
|
217
217
|
|
|
218
218
|
const APPLICATION_CONTEXT_KEY = "__APPLICATION_CONTEXT_KEY";
|
|
219
219
|
class ApplicationContext {
|
|
220
|
-
constructor(
|
|
221
|
-
this.
|
|
220
|
+
constructor(context, environment) {
|
|
221
|
+
this.context = context;
|
|
222
222
|
this.environment = environment;
|
|
223
223
|
this.events = new ApplicationBoundEvents(
|
|
224
|
-
|
|
224
|
+
context.appDefinitionId ? context.appDefinitionId : null,
|
|
225
225
|
this.environment.getEvents(),
|
|
226
226
|
this.environment.getPrivateAPI()
|
|
227
227
|
);
|
|
@@ -253,11 +253,14 @@ class ApplicationContext {
|
|
|
253
253
|
return globalThis[APPLICATION_CONTEXT_KEY];
|
|
254
254
|
}
|
|
255
255
|
events;
|
|
256
|
+
getContext() {
|
|
257
|
+
return this.context;
|
|
258
|
+
}
|
|
256
259
|
getAppDefinitionId() {
|
|
257
|
-
return this.
|
|
260
|
+
return this.context.appDefinitionId;
|
|
258
261
|
}
|
|
259
|
-
|
|
260
|
-
return this.
|
|
262
|
+
getManifestContextId() {
|
|
263
|
+
return this.context.manifestContextId;
|
|
261
264
|
}
|
|
262
265
|
getEvents() {
|
|
263
266
|
return this.events;
|
package/dist/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/errors.ts","../../src/ApplicationBoundEvents/transformEventPayload.ts","../../src/ApplicationBoundEvents/ApplicationBoundEvents.ts","../../src/contexts/ContextInjectionStatus.ts","../../src/contexts/EnvironmentContext.ts","../../src/contexts/ApplicationContext.ts"],"sourcesContent":["import {\n BaseError,\n createErrorBuilder,\n} from '@wix/public-editor-platform-errors';\n\nexport enum EditorPlatformContextErrorCode {\n IncorrectEnvironment = 'IncorrectEnvironment',\n}\n\nclass EditorPlatformContextError extends BaseError<EditorPlatformContextErrorCode> {\n state: Partial<{\n url: string;\n appDefinitionId: string;\n }> = {};\n\n constructor(message: string, code: EditorPlatformContextErrorCode) {\n super(message, code, 'EP Context Error');\n }\n\n withUrl(url: string) {\n this.state = { ...this.state, url };\n return this;\n }\n\n withAppDefinitionId(appDefinitionId: string) {\n this.state = { ...this.state, appDefinitionId };\n return this;\n }\n}\n\nexport const createEditorPlatformContextError = createErrorBuilder<\n EditorPlatformContextErrorCode,\n EditorPlatformContextError\n>(EditorPlatformContextError);\n","import type { ComponentRef } from '@wix/public-editor-platform-interfaces';\nimport { AllowedEvents, AppEventPayload, PrivateAPIFixMe } from './types';\nimport { IElement } from '@wix/public-editor-platform-interfaces';\n\n// TODO: remove events shape and remove payload transformations\nexport async function transformEventPayload<T extends AllowedEvents>(\n eventPayload: Record<string, string>,\n privateAPI: PrivateAPIFixMe,\n): Promise<AppEventPayload<T>> {\n if (!eventPayload?.type) {\n return eventPayload as AppEventPayload<T>;\n }\n\n switch (eventPayload.type) {\n case 'componentSelectionChanged':\n const componentRefs = (eventPayload.componentRefs ||\n []) as unknown as ComponentRef[];\n\n const components = (await Promise.all(\n componentRefs.map((ref) => {\n return privateAPI.components.getComponent(ref);\n }),\n )) as IElement[];\n\n return {\n type: eventPayload.type,\n components,\n } as AppEventPayload<T>;\n\n default:\n return eventPayload as AppEventPayload<T>;\n }\n}\n","import {\n PlatformAppEvent,\n PlatformAppEventEmitter,\n IPlatformAppEvent,\n} from '@wix/public-editor-platform-events';\nimport { AllowedEvents, AppEventPayload, PrivateAPIFixMe } from './types';\nimport { transformEventPayload } from './transformEventPayload';\n\nexport type OmitEventMeta<T> = T extends { meta: any } ? Omit<T, 'meta'> : T;\n\n/**\n * TODO: should not be in this package\n */\nexport class ApplicationBoundEvents {\n private events: PlatformAppEventEmitter;\n public subscribe;\n public commit;\n public startTransaction;\n public silent;\n\n constructor(\n private appDefinitionId: string,\n events: PlatformAppEventEmitter,\n private privateAPI: PrivateAPIFixMe,\n ) {\n this.events = events;\n this.subscribe = events.subscribe.bind(events);\n this.commit = events.commit.bind(events);\n this.startTransaction = events.startTransaction.bind(events);\n this.silent = events.silent.bind(events);\n }\n\n public notify(event: OmitEventMeta<IPlatformAppEvent>) {\n this.events.notify({\n type: event.type,\n payload: event.payload,\n meta: {\n appDefinitionId: this.appDefinitionId,\n },\n } as IPlatformAppEvent);\n }\n\n notifyCustomEvent(type: string, payload: Record<string, string>) {\n this.notify({\n type: PlatformAppEvent.CustomEvent,\n payload: {\n ...payload,\n type,\n },\n });\n }\n\n /**\n * TODO: we should use same interface for all events\n * (subscribe vs addEventListener)\n */\n public addEventListener<EventType extends AllowedEvents>(\n eventType: EventType,\n fn: (payload: AppEventPayload<EventType>) => void,\n ) {\n return this.events.subscribe(async (event) => {\n const isAppMatch =\n event.meta?.appDefinitionId === this.appDefinitionId ||\n event.meta?.appDefinitionId === null;\n\n const transformPayload = () =>\n transformEventPayload<EventType>(event.payload, this.privateAPI);\n\n // as an exception to skip autocomplete\n if ((eventType as string) === '*') {\n fn(await transformPayload());\n /**\n * We need to check for app match here to not listen app's own events\n */\n } else if (event.type === PlatformAppEvent.CustomEvent) {\n if (eventType === event.payload?.type && !isAppMatch) {\n fn(await transformPayload());\n }\n } else if (event.type === PlatformAppEvent.HostEvent) {\n if (eventType === event.payload?.type && isAppMatch) {\n fn(await transformPayload());\n }\n }\n });\n }\n}\n","import {\n createEditorPlatformContextError,\n EditorPlatformContextErrorCode,\n} from '../errors';\n\nconst WAIT_INJECTED_TIMEOUT = 200;\nconst WAIT_INJECTED_RETRY_COUNT = 50;\n\nexport class ContextInjectionStatus {\n injectionUUID: string;\n injectionUUID_Deprecated: string;\n\n constructor(uuid: string) {\n this.injectionUUID_Deprecated = `__${uuid}_CONTEXT_INJECTION_STATUS_KEY`;\n this.injectionUUID = `__${uuid}_CONTEXT_INJECTION_STATUS_KEY#0.1`;\n\n const promise = this.#getGlobalInjectionPromise();\n\n if (!promise) {\n this.#createGlobalInjectionPromise();\n }\n }\n\n #getGlobalInjectionPromise() {\n // @ts-expect-error xxx\n const ref = globalThis[this.injectionUUID];\n return ref?.promise;\n }\n\n #createGlobalInjectionPromise() {\n let _resolve;\n\n const promise = new Promise<void>((resolve) => {\n _resolve = resolve;\n });\n\n // @ts-expect-error xxx\n globalThis[this.injectionUUID] = {\n promise,\n resolve: _resolve,\n };\n\n /**\n * as soon as new latest-version promise is created\n * override existing deprecated promise and resolve it\n * as soon as latest is resolved\n */\n // @ts-expect-error xxx\n globalThis[this.injectionUUID_Deprecated] = new Promise((resolve) => {\n promise.then(resolve);\n });\n }\n\n resolveInjected() {\n // @ts-expect-error xxx\n globalThis[this.injectionUUID]?.resolve();\n }\n\n waitInjected() {\n return new Promise<void>((resolve, reject) => {\n let injected = false;\n let timeoutId: ReturnType<typeof setTimeout>;\n let retryCount = 0;\n\n const timeout = () => {\n if (injected) {\n return;\n }\n\n timeoutId = setTimeout(() => {\n retryCount++;\n\n if (retryCount < WAIT_INJECTED_RETRY_COUNT) {\n /**\n * just log that we are re-trying to connect (each 2 sec+-)\n */\n if (retryCount % 10 === 0) {\n console.log(\n createEditorPlatformContextError(\n EditorPlatformContextErrorCode.IncorrectEnvironment,\n 'contexts are not resolved, still re-trying',\n ).withMessage(`try number ${retryCount}`).message,\n );\n }\n\n timeout();\n\n return;\n }\n\n if (!injected) {\n const error = createEditorPlatformContextError(\n EditorPlatformContextErrorCode.IncorrectEnvironment,\n 'contexts are not resolved, threw by timeout',\n );\n\n reject(error);\n }\n }, WAIT_INJECTED_TIMEOUT);\n };\n\n timeout();\n\n this.#getGlobalInjectionPromise()?.then(() => {\n injected = true;\n clearTimeout(timeoutId);\n resolve();\n });\n });\n }\n}\n","import { PlatformAppEventEmitter } from '@wix/public-editor-platform-events';\nimport { WithPromiseFunctions } from '@wix/editor-platform-transport';\nimport {\n createEditorPlatformContextError,\n EditorPlatformContextErrorCode,\n} from '../errors';\nimport { ContextInjectionStatus } from './ContextInjectionStatus';\n\nexport type IPrivateAPIFixMe = any; // TODO: replace with the real type\n\nexport const ENVIRONMENT_CONTEXT_KEY = '__ENVIRONMENT_CONTEXT_KEY';\n\ndeclare global {\n // eslint-disable-next-line no-var\n var __ENVIRONMENT_CONTEXT_KEY: EnvironmentContext;\n}\n\nexport enum PlatformEnvironment {\n Worker = 'Worker',\n Frame = 'Frame',\n // TODO - rename to MainThread\n ComponentPanel = 'ComponentPanel',\n}\n\nexport interface IEnvironmentContext {\n environment: PlatformEnvironment;\n privateApi: WithPromiseFunctions<IPrivateAPIFixMe>;\n events: PlatformAppEventEmitter;\n /**\n * Probably, we need to rename this prop\n */\n applicationAPIs?: Record<string, any>;\n}\n\nexport class EnvironmentContext {\n private static status = new ContextInjectionStatus('environment');\n\n static async inject(context: IEnvironmentContext) {\n if (globalThis[ENVIRONMENT_CONTEXT_KEY]) {\n throw createEditorPlatformContextError(\n EditorPlatformContextErrorCode.IncorrectEnvironment,\n 'Environment context already exists and should not be overridden',\n );\n }\n\n globalThis[ENVIRONMENT_CONTEXT_KEY] = new EnvironmentContext(context);\n this.status.resolveInjected();\n }\n\n static async getInstance(): Promise<EnvironmentContext> {\n await this.status.waitInjected();\n return globalThis[ENVIRONMENT_CONTEXT_KEY];\n }\n\n constructor(private environmentContext: IEnvironmentContext) {}\n\n getPrivateAPI() {\n return this.environmentContext.privateApi;\n }\n\n getEvents() {\n return this.environmentContext.events;\n }\n\n getApplicationAPIs() {\n return this.environmentContext.applicationAPIs ?? {};\n }\n\n getEnvironment() {\n return this.environmentContext.environment;\n }\n}\n","import {\n createEditorPlatformContextError,\n EditorPlatformContextErrorCode,\n} from '../errors';\n\nimport { ApplicationBoundEvents } from '../ApplicationBoundEvents';\nimport { EnvironmentContext, PlatformEnvironment } from './EnvironmentContext';\nimport { ContextInjectionStatus } from './ContextInjectionStatus';\n\nexport const APPLICATION_CONTEXT_KEY = '__APPLICATION_CONTEXT_KEY';\ndeclare global {\n // eslint-disable-next-line no-var\n var __APPLICATION_CONTEXT_KEY: ApplicationContext<IApplicationContext>;\n}\n\nexport type IEditorApplicationContext = {\n appDefinitionId: string;\n};\n\nexport type IAddonContext = {\n appDefinitionId: string;\n appDefinitionName: string;\n data: {\n toolPanelConfig: {\n url: string;\n width: string;\n height: string;\n initialPosition: {\n x: string;\n y: string;\n };\n };\n };\n};\n\nexport type IApplicationContext = IEditorApplicationContext | IAddonContext;\n\nexport class ApplicationContext<TContext extends IApplicationContext> {\n private static status = new ContextInjectionStatus('application');\n\n /**\n * TODO: use generics for context type\n * - application\n * - editor\n */\n static async inject<TContext extends IApplicationContext>(context: TContext) {\n // const environment = await EnvironmentContext.getInstance();\n\n // if (environment.getEnvironment() !== PlatformEnvironment.Frame) {\n // throw createEditorPlatformContextError(\n // EditorPlatformContextErrorCode.IncorrectEnvironment,\n // 'Application context can be injected only in frame environment',\n // );\n // }\n\n if (globalThis[APPLICATION_CONTEXT_KEY]) {\n throw createEditorPlatformContextError(\n EditorPlatformContextErrorCode.IncorrectEnvironment,\n 'Application context already exists and should not be overridden',\n );\n }\n\n globalThis[APPLICATION_CONTEXT_KEY] = new ApplicationContext(\n context,\n await EnvironmentContext.getInstance(),\n );\n\n this.status.resolveInjected();\n }\n\n static async getInstance<TContext extends IApplicationContext>() {\n if (typeof __APPLICATION_CONTEXT_KEY !== 'undefined') {\n /**\n * NOTE it is taken not from global\n * __APPLICATION_CONTEXT_KEY is the variable which set during\n * application bundle execution using new Function() approach\n */\n return __APPLICATION_CONTEXT_KEY as ApplicationContext<TContext>;\n }\n\n await this.status.waitInjected();\n\n return globalThis[APPLICATION_CONTEXT_KEY] as ApplicationContext<TContext>;\n\n // const environment = await EnvironmentContext.getInstance();\n\n // if (environment.getEnvironment() === PlatformEnvironment.Frame) {\n // await this.status.waitInjected();\n // return globalThis[\n // APPLICATION_CONTEXT_KEY\n // ] as ApplicationContext<TContext>;\n // } else {\n // /**\n // * NOTE it is taken not from global\n // * __APPLICATION_CONTEXT_KEY is the variable which set during\n // * application bundle execution using new Function() approach\n // */\n // return __APPLICATION_CONTEXT_KEY as ApplicationContext<TContext>;\n // }\n }\n\n private events: ApplicationBoundEvents;\n\n constructor(\n private applicationContext: TContext,\n private environment: EnvironmentContext,\n ) {\n this.events = new ApplicationBoundEvents(\n this.applicationContext.appDefinitionId,\n this.environment.getEvents(),\n this.environment.getPrivateAPI(),\n );\n }\n\n getAppDefinitionId() {\n return this.applicationContext.appDefinitionId;\n }\n\n getBindings() {\n return this.applicationContext;\n }\n\n getEvents() {\n return this.events;\n }\n\n getEnvironmentContext() {\n return this.environment;\n }\n\n getPrivateAPI() {\n return this.environment.getPrivateAPI();\n }\n\n getPrivateApplicationAPI() {\n const appDefinitionId = this.getAppDefinitionId();\n\n if (!appDefinitionId) {\n throw createEditorPlatformContextError(\n EditorPlatformContextErrorCode.IncorrectEnvironment,\n 'appDefinitionId is not available',\n );\n }\n\n return this.environment.getApplicationAPIs()[appDefinitionId];\n }\n}\n"],"names":["EditorPlatformContextErrorCode","BaseError","createErrorBuilder","PlatformAppEvent","PlatformEnvironment"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/errors.ts","../../src/ApplicationBoundEvents/transformEventPayload.ts","../../src/ApplicationBoundEvents/ApplicationBoundEvents.ts","../../src/contexts/ContextInjectionStatus.ts","../../src/contexts/EnvironmentContext.ts","../../src/contexts/ApplicationContext.ts"],"sourcesContent":["import {\n BaseError,\n createErrorBuilder,\n} from '@wix/public-editor-platform-errors';\n\nexport enum EditorPlatformContextErrorCode {\n IncorrectEnvironment = 'IncorrectEnvironment',\n}\n\nclass EditorPlatformContextError extends BaseError<EditorPlatformContextErrorCode> {\n state: Partial<{\n url: string;\n appDefinitionId: string;\n }> = {};\n\n constructor(message: string, code: EditorPlatformContextErrorCode) {\n super(message, code, 'EP Context Error');\n }\n\n withUrl(url: string) {\n this.state = { ...this.state, url };\n return this;\n }\n\n withAppDefinitionId(appDefinitionId: string) {\n this.state = { ...this.state, appDefinitionId };\n return this;\n }\n}\n\nexport const createEditorPlatformContextError = createErrorBuilder<\n EditorPlatformContextErrorCode,\n EditorPlatformContextError\n>(EditorPlatformContextError);\n","import type { ComponentRef } from '@wix/public-editor-platform-interfaces';\nimport { AllowedEvents, AppEventPayload, PrivateAPIFixMe } from './types';\nimport { IElement } from '@wix/public-editor-platform-interfaces';\n\n// TODO: remove events shape and remove payload transformations\nexport async function transformEventPayload<T extends AllowedEvents>(\n eventPayload: Record<string, string>,\n privateAPI: PrivateAPIFixMe,\n): Promise<AppEventPayload<T>> {\n if (!eventPayload?.type) {\n return eventPayload as AppEventPayload<T>;\n }\n\n switch (eventPayload.type) {\n case 'componentSelectionChanged':\n const componentRefs = (eventPayload.componentRefs ||\n []) as unknown as ComponentRef[];\n\n const components = (await Promise.all(\n componentRefs.map((ref) => {\n return privateAPI.components.getComponent(ref);\n }),\n )) as IElement[];\n\n return {\n type: eventPayload.type,\n components,\n } as AppEventPayload<T>;\n\n default:\n return eventPayload as AppEventPayload<T>;\n }\n}\n","import {\n PlatformAppEvent,\n PlatformAppEventEmitter,\n IPlatformAppEvent,\n} from '@wix/public-editor-platform-events';\nimport { AllowedEvents, AppEventPayload, PrivateAPIFixMe } from './types';\nimport { transformEventPayload } from './transformEventPayload';\n\nexport type OmitEventMeta<T> = T extends { meta: any } ? Omit<T, 'meta'> : T;\n\n/**\n * TODO: should not be in this package\n */\nexport class ApplicationBoundEvents {\n private events: PlatformAppEventEmitter;\n public subscribe;\n public commit;\n public startTransaction;\n public silent;\n\n constructor(\n private appDefinitionId: string | null,\n events: PlatformAppEventEmitter,\n private privateAPI: PrivateAPIFixMe,\n ) {\n this.events = events;\n this.subscribe = events.subscribe.bind(events);\n this.commit = events.commit.bind(events);\n this.startTransaction = events.startTransaction.bind(events);\n this.silent = events.silent.bind(events);\n }\n\n public notify(event: OmitEventMeta<IPlatformAppEvent>) {\n this.events.notify({\n type: event.type,\n payload: event.payload,\n meta: {\n appDefinitionId: this.appDefinitionId,\n },\n } as IPlatformAppEvent);\n }\n\n notifyCustomEvent(type: string, payload: Record<string, string>) {\n this.notify({\n type: PlatformAppEvent.CustomEvent,\n payload: {\n ...payload,\n type,\n },\n });\n }\n\n /**\n * TODO: we should use same interface for all events\n * (subscribe vs addEventListener)\n */\n public addEventListener<EventType extends AllowedEvents>(\n eventType: EventType,\n fn: (payload: AppEventPayload<EventType>) => void,\n ) {\n return this.events.subscribe(async (event) => {\n const isAppMatch =\n event.meta?.appDefinitionId === this.appDefinitionId ||\n event.meta?.appDefinitionId === null;\n\n const transformPayload = () =>\n transformEventPayload<EventType>(event.payload, this.privateAPI);\n\n // as an exception to skip autocomplete\n if ((eventType as string) === '*') {\n fn(await transformPayload());\n /**\n * We need to check for app match here to not listen app's own events\n */\n } else if (event.type === PlatformAppEvent.CustomEvent) {\n if (eventType === event.payload?.type && !isAppMatch) {\n fn(await transformPayload());\n }\n } else if (event.type === PlatformAppEvent.HostEvent) {\n if (eventType === event.payload?.type && isAppMatch) {\n fn(await transformPayload());\n }\n }\n });\n }\n}\n","import {\n createEditorPlatformContextError,\n EditorPlatformContextErrorCode,\n} from '../errors';\n\nconst WAIT_INJECTED_TIMEOUT = 200;\nconst WAIT_INJECTED_RETRY_COUNT = 50;\n\nexport class ContextInjectionStatus {\n injectionUUID: string;\n injectionUUID_Deprecated: string;\n\n constructor(uuid: string) {\n this.injectionUUID_Deprecated = `__${uuid}_CONTEXT_INJECTION_STATUS_KEY`;\n this.injectionUUID = `__${uuid}_CONTEXT_INJECTION_STATUS_KEY#0.1`;\n\n const promise = this.#getGlobalInjectionPromise();\n\n if (!promise) {\n this.#createGlobalInjectionPromise();\n }\n }\n\n #getGlobalInjectionPromise() {\n // @ts-expect-error xxx\n const ref = globalThis[this.injectionUUID];\n return ref?.promise;\n }\n\n #createGlobalInjectionPromise() {\n let _resolve;\n\n const promise = new Promise<void>((resolve) => {\n _resolve = resolve;\n });\n\n // @ts-expect-error xxx\n globalThis[this.injectionUUID] = {\n promise,\n resolve: _resolve,\n };\n\n /**\n * as soon as new latest-version promise is created\n * override existing deprecated promise and resolve it\n * as soon as latest is resolved\n */\n // @ts-expect-error xxx\n globalThis[this.injectionUUID_Deprecated] = new Promise((resolve) => {\n promise.then(resolve);\n });\n }\n\n resolveInjected() {\n // @ts-expect-error xxx\n globalThis[this.injectionUUID]?.resolve();\n }\n\n waitInjected() {\n return new Promise<void>((resolve, reject) => {\n let injected = false;\n let timeoutId: ReturnType<typeof setTimeout>;\n let retryCount = 0;\n\n const timeout = () => {\n if (injected) {\n return;\n }\n\n timeoutId = setTimeout(() => {\n retryCount++;\n\n if (retryCount < WAIT_INJECTED_RETRY_COUNT) {\n /**\n * just log that we are re-trying to connect (each 2 sec+-)\n */\n if (retryCount % 10 === 0) {\n console.log(\n createEditorPlatformContextError(\n EditorPlatformContextErrorCode.IncorrectEnvironment,\n 'contexts are not resolved, still re-trying',\n ).withMessage(`try number ${retryCount}`).message,\n );\n }\n\n timeout();\n\n return;\n }\n\n if (!injected) {\n const error = createEditorPlatformContextError(\n EditorPlatformContextErrorCode.IncorrectEnvironment,\n 'contexts are not resolved, threw by timeout',\n );\n\n reject(error);\n }\n }, WAIT_INJECTED_TIMEOUT);\n };\n\n timeout();\n\n this.#getGlobalInjectionPromise()?.then(() => {\n injected = true;\n clearTimeout(timeoutId);\n resolve();\n });\n });\n }\n}\n","import { PlatformAppEventEmitter } from '@wix/public-editor-platform-events';\nimport { WithPromiseFunctions } from '@wix/editor-platform-transport';\nimport {\n createEditorPlatformContextError,\n EditorPlatformContextErrorCode,\n} from '../errors';\nimport { ContextInjectionStatus } from './ContextInjectionStatus';\n\nexport type IPrivateAPIFixMe = any; // TODO: replace with the real type\n\nexport const ENVIRONMENT_CONTEXT_KEY = '__ENVIRONMENT_CONTEXT_KEY';\n\ndeclare global {\n // eslint-disable-next-line no-var\n var __ENVIRONMENT_CONTEXT_KEY: EnvironmentContext;\n}\n\nexport enum PlatformEnvironment {\n Worker = 'Worker',\n Frame = 'Frame',\n // TODO - rename to MainThread\n ComponentPanel = 'ComponentPanel',\n}\n\nexport interface IEnvironmentContext {\n environment: PlatformEnvironment;\n privateApi: WithPromiseFunctions<IPrivateAPIFixMe>;\n events: PlatformAppEventEmitter;\n /**\n * Probably, we need to rename this prop\n */\n applicationAPIs?: Record<string, any>;\n}\n\nexport class EnvironmentContext {\n private static status = new ContextInjectionStatus('environment');\n\n static async inject(context: IEnvironmentContext) {\n if (globalThis[ENVIRONMENT_CONTEXT_KEY]) {\n throw createEditorPlatformContextError(\n EditorPlatformContextErrorCode.IncorrectEnvironment,\n 'Environment context already exists and should not be overridden',\n );\n }\n\n globalThis[ENVIRONMENT_CONTEXT_KEY] = new EnvironmentContext(context);\n this.status.resolveInjected();\n }\n\n static async getInstance(): Promise<EnvironmentContext> {\n await this.status.waitInjected();\n return globalThis[ENVIRONMENT_CONTEXT_KEY];\n }\n\n constructor(private environmentContext: IEnvironmentContext) {}\n\n getPrivateAPI() {\n return this.environmentContext.privateApi;\n }\n\n getEvents() {\n return this.environmentContext.events;\n }\n\n getApplicationAPIs() {\n return this.environmentContext.applicationAPIs ?? {};\n }\n\n getEnvironment() {\n return this.environmentContext.environment;\n }\n}\n","import {\n createEditorPlatformContextError,\n EditorPlatformContextErrorCode,\n} from '../errors';\n\nimport { ApplicationBoundEvents } from '../ApplicationBoundEvents';\nimport { EnvironmentContext } from './EnvironmentContext';\nimport { ContextInjectionStatus } from './ContextInjectionStatus';\n\nexport const APPLICATION_CONTEXT_KEY = '__APPLICATION_CONTEXT_KEY';\ndeclare global {\n // eslint-disable-next-line no-var\n var __APPLICATION_CONTEXT_KEY: ApplicationContext;\n}\n\n/**\n * renamed: IApplicationContext\n * there is no sense to split context by application type or running context\n * - addon\n * - application\n * - builder component\n * - panel or whatever\n * sdk context should be a union of all available options\n */\nexport interface IPlatformSDKContext {\n manifestContextId?: string | null;\n appDefinitionId?: string | null;\n /**\n * TODO: get rid of data prop, use root props\n */\n data?: {\n toolPanelConfig: {\n url: string;\n width: string;\n height: string;\n initialPosition: {\n x: string;\n y: string;\n };\n };\n };\n}\n\nexport class ApplicationContext {\n private static status = new ContextInjectionStatus('application');\n\n /**\n * TODO: use generics for context type\n * - application\n * - editor\n */\n static async inject(context: IPlatformSDKContext) {\n // const environment = await EnvironmentContext.getInstance();\n\n // if (environment.getEnvironment() !== PlatformEnvironment.Frame) {\n // throw createEditorPlatformContextError(\n // EditorPlatformContextErrorCode.IncorrectEnvironment,\n // 'Application context can be injected only in frame environment',\n // );\n // }\n\n if (globalThis[APPLICATION_CONTEXT_KEY]) {\n throw createEditorPlatformContextError(\n EditorPlatformContextErrorCode.IncorrectEnvironment,\n 'Application context already exists and should not be overridden',\n );\n }\n\n globalThis[APPLICATION_CONTEXT_KEY] = new ApplicationContext(\n context,\n await EnvironmentContext.getInstance(),\n );\n\n this.status.resolveInjected();\n }\n\n static async getInstance() {\n if (typeof __APPLICATION_CONTEXT_KEY !== 'undefined') {\n /**\n * NOTE it is taken not from global\n * __APPLICATION_CONTEXT_KEY is the variable which set during\n * application bundle execution using new Function() approach\n */\n return __APPLICATION_CONTEXT_KEY as ApplicationContext;\n }\n\n await this.status.waitInjected();\n\n return globalThis[APPLICATION_CONTEXT_KEY] as ApplicationContext;\n\n // const environment = await EnvironmentContext.getInstance();\n\n // if (environment.getEnvironment() === PlatformEnvironment.Frame) {\n // await this.status.waitInjected();\n // return globalThis[\n // APPLICATION_CONTEXT_KEY\n // ] as ApplicationContext<TContext>;\n // } else {\n // /**\n // * NOTE it is taken not from global\n // * __APPLICATION_CONTEXT_KEY is the variable which set during\n // * application bundle execution using new Function() approach\n // */\n // return __APPLICATION_CONTEXT_KEY as ApplicationContext<TContext>;\n // }\n }\n\n private events: ApplicationBoundEvents;\n\n constructor(\n private context: IPlatformSDKContext,\n private environment: EnvironmentContext,\n ) {\n this.events = new ApplicationBoundEvents(\n context.appDefinitionId ? context.appDefinitionId : null,\n this.environment.getEvents(),\n this.environment.getPrivateAPI(),\n );\n }\n\n getContext() {\n return this.context;\n }\n\n getAppDefinitionId() {\n return this.context.appDefinitionId;\n }\n\n getManifestContextId() {\n return this.context.manifestContextId;\n }\n\n getEvents() {\n return this.events;\n }\n\n getEnvironmentContext() {\n return this.environment;\n }\n\n getPrivateAPI() {\n return this.environment.getPrivateAPI();\n }\n\n getPrivateApplicationAPI() {\n const appDefinitionId = this.getAppDefinitionId();\n\n if (!appDefinitionId) {\n throw createEditorPlatformContextError(\n EditorPlatformContextErrorCode.IncorrectEnvironment,\n 'appDefinitionId is not available',\n );\n }\n\n return this.environment.getApplicationAPIs()[appDefinitionId];\n }\n}\n"],"names":["EditorPlatformContextErrorCode","BaseError","createErrorBuilder","PlatformAppEvent","PlatformEnvironment"],"mappings":"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"}
|
package/dist/esm/index.js
CHANGED
|
@@ -215,11 +215,11 @@ class EnvironmentContext {
|
|
|
215
215
|
|
|
216
216
|
const APPLICATION_CONTEXT_KEY = "__APPLICATION_CONTEXT_KEY";
|
|
217
217
|
class ApplicationContext {
|
|
218
|
-
constructor(
|
|
219
|
-
this.
|
|
218
|
+
constructor(context, environment) {
|
|
219
|
+
this.context = context;
|
|
220
220
|
this.environment = environment;
|
|
221
221
|
this.events = new ApplicationBoundEvents(
|
|
222
|
-
|
|
222
|
+
context.appDefinitionId ? context.appDefinitionId : null,
|
|
223
223
|
this.environment.getEvents(),
|
|
224
224
|
this.environment.getPrivateAPI()
|
|
225
225
|
);
|
|
@@ -251,11 +251,14 @@ class ApplicationContext {
|
|
|
251
251
|
return globalThis[APPLICATION_CONTEXT_KEY];
|
|
252
252
|
}
|
|
253
253
|
events;
|
|
254
|
+
getContext() {
|
|
255
|
+
return this.context;
|
|
256
|
+
}
|
|
254
257
|
getAppDefinitionId() {
|
|
255
|
-
return this.
|
|
258
|
+
return this.context.appDefinitionId;
|
|
256
259
|
}
|
|
257
|
-
|
|
258
|
-
return this.
|
|
260
|
+
getManifestContextId() {
|
|
261
|
+
return this.context.manifestContextId;
|
|
259
262
|
}
|
|
260
263
|
getEvents() {
|
|
261
264
|
return this.events;
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/errors.ts","../../src/ApplicationBoundEvents/transformEventPayload.ts","../../src/ApplicationBoundEvents/ApplicationBoundEvents.ts","../../src/contexts/ContextInjectionStatus.ts","../../src/contexts/EnvironmentContext.ts","../../src/contexts/ApplicationContext.ts"],"sourcesContent":["import {\n BaseError,\n createErrorBuilder,\n} from '@wix/public-editor-platform-errors';\n\nexport enum EditorPlatformContextErrorCode {\n IncorrectEnvironment = 'IncorrectEnvironment',\n}\n\nclass EditorPlatformContextError extends BaseError<EditorPlatformContextErrorCode> {\n state: Partial<{\n url: string;\n appDefinitionId: string;\n }> = {};\n\n constructor(message: string, code: EditorPlatformContextErrorCode) {\n super(message, code, 'EP Context Error');\n }\n\n withUrl(url: string) {\n this.state = { ...this.state, url };\n return this;\n }\n\n withAppDefinitionId(appDefinitionId: string) {\n this.state = { ...this.state, appDefinitionId };\n return this;\n }\n}\n\nexport const createEditorPlatformContextError = createErrorBuilder<\n EditorPlatformContextErrorCode,\n EditorPlatformContextError\n>(EditorPlatformContextError);\n","import type { ComponentRef } from '@wix/public-editor-platform-interfaces';\nimport { AllowedEvents, AppEventPayload, PrivateAPIFixMe } from './types';\nimport { IElement } from '@wix/public-editor-platform-interfaces';\n\n// TODO: remove events shape and remove payload transformations\nexport async function transformEventPayload<T extends AllowedEvents>(\n eventPayload: Record<string, string>,\n privateAPI: PrivateAPIFixMe,\n): Promise<AppEventPayload<T>> {\n if (!eventPayload?.type) {\n return eventPayload as AppEventPayload<T>;\n }\n\n switch (eventPayload.type) {\n case 'componentSelectionChanged':\n const componentRefs = (eventPayload.componentRefs ||\n []) as unknown as ComponentRef[];\n\n const components = (await Promise.all(\n componentRefs.map((ref) => {\n return privateAPI.components.getComponent(ref);\n }),\n )) as IElement[];\n\n return {\n type: eventPayload.type,\n components,\n } as AppEventPayload<T>;\n\n default:\n return eventPayload as AppEventPayload<T>;\n }\n}\n","import {\n PlatformAppEvent,\n PlatformAppEventEmitter,\n IPlatformAppEvent,\n} from '@wix/public-editor-platform-events';\nimport { AllowedEvents, AppEventPayload, PrivateAPIFixMe } from './types';\nimport { transformEventPayload } from './transformEventPayload';\n\nexport type OmitEventMeta<T> = T extends { meta: any } ? Omit<T, 'meta'> : T;\n\n/**\n * TODO: should not be in this package\n */\nexport class ApplicationBoundEvents {\n private events: PlatformAppEventEmitter;\n public subscribe;\n public commit;\n public startTransaction;\n public silent;\n\n constructor(\n private appDefinitionId: string,\n events: PlatformAppEventEmitter,\n private privateAPI: PrivateAPIFixMe,\n ) {\n this.events = events;\n this.subscribe = events.subscribe.bind(events);\n this.commit = events.commit.bind(events);\n this.startTransaction = events.startTransaction.bind(events);\n this.silent = events.silent.bind(events);\n }\n\n public notify(event: OmitEventMeta<IPlatformAppEvent>) {\n this.events.notify({\n type: event.type,\n payload: event.payload,\n meta: {\n appDefinitionId: this.appDefinitionId,\n },\n } as IPlatformAppEvent);\n }\n\n notifyCustomEvent(type: string, payload: Record<string, string>) {\n this.notify({\n type: PlatformAppEvent.CustomEvent,\n payload: {\n ...payload,\n type,\n },\n });\n }\n\n /**\n * TODO: we should use same interface for all events\n * (subscribe vs addEventListener)\n */\n public addEventListener<EventType extends AllowedEvents>(\n eventType: EventType,\n fn: (payload: AppEventPayload<EventType>) => void,\n ) {\n return this.events.subscribe(async (event) => {\n const isAppMatch =\n event.meta?.appDefinitionId === this.appDefinitionId ||\n event.meta?.appDefinitionId === null;\n\n const transformPayload = () =>\n transformEventPayload<EventType>(event.payload, this.privateAPI);\n\n // as an exception to skip autocomplete\n if ((eventType as string) === '*') {\n fn(await transformPayload());\n /**\n * We need to check for app match here to not listen app's own events\n */\n } else if (event.type === PlatformAppEvent.CustomEvent) {\n if (eventType === event.payload?.type && !isAppMatch) {\n fn(await transformPayload());\n }\n } else if (event.type === PlatformAppEvent.HostEvent) {\n if (eventType === event.payload?.type && isAppMatch) {\n fn(await transformPayload());\n }\n }\n });\n }\n}\n","import {\n createEditorPlatformContextError,\n EditorPlatformContextErrorCode,\n} from '../errors';\n\nconst WAIT_INJECTED_TIMEOUT = 200;\nconst WAIT_INJECTED_RETRY_COUNT = 50;\n\nexport class ContextInjectionStatus {\n injectionUUID: string;\n injectionUUID_Deprecated: string;\n\n constructor(uuid: string) {\n this.injectionUUID_Deprecated = `__${uuid}_CONTEXT_INJECTION_STATUS_KEY`;\n this.injectionUUID = `__${uuid}_CONTEXT_INJECTION_STATUS_KEY#0.1`;\n\n const promise = this.#getGlobalInjectionPromise();\n\n if (!promise) {\n this.#createGlobalInjectionPromise();\n }\n }\n\n #getGlobalInjectionPromise() {\n // @ts-expect-error xxx\n const ref = globalThis[this.injectionUUID];\n return ref?.promise;\n }\n\n #createGlobalInjectionPromise() {\n let _resolve;\n\n const promise = new Promise<void>((resolve) => {\n _resolve = resolve;\n });\n\n // @ts-expect-error xxx\n globalThis[this.injectionUUID] = {\n promise,\n resolve: _resolve,\n };\n\n /**\n * as soon as new latest-version promise is created\n * override existing deprecated promise and resolve it\n * as soon as latest is resolved\n */\n // @ts-expect-error xxx\n globalThis[this.injectionUUID_Deprecated] = new Promise((resolve) => {\n promise.then(resolve);\n });\n }\n\n resolveInjected() {\n // @ts-expect-error xxx\n globalThis[this.injectionUUID]?.resolve();\n }\n\n waitInjected() {\n return new Promise<void>((resolve, reject) => {\n let injected = false;\n let timeoutId: ReturnType<typeof setTimeout>;\n let retryCount = 0;\n\n const timeout = () => {\n if (injected) {\n return;\n }\n\n timeoutId = setTimeout(() => {\n retryCount++;\n\n if (retryCount < WAIT_INJECTED_RETRY_COUNT) {\n /**\n * just log that we are re-trying to connect (each 2 sec+-)\n */\n if (retryCount % 10 === 0) {\n console.log(\n createEditorPlatformContextError(\n EditorPlatformContextErrorCode.IncorrectEnvironment,\n 'contexts are not resolved, still re-trying',\n ).withMessage(`try number ${retryCount}`).message,\n );\n }\n\n timeout();\n\n return;\n }\n\n if (!injected) {\n const error = createEditorPlatformContextError(\n EditorPlatformContextErrorCode.IncorrectEnvironment,\n 'contexts are not resolved, threw by timeout',\n );\n\n reject(error);\n }\n }, WAIT_INJECTED_TIMEOUT);\n };\n\n timeout();\n\n this.#getGlobalInjectionPromise()?.then(() => {\n injected = true;\n clearTimeout(timeoutId);\n resolve();\n });\n });\n }\n}\n","import { PlatformAppEventEmitter } from '@wix/public-editor-platform-events';\nimport { WithPromiseFunctions } from '@wix/editor-platform-transport';\nimport {\n createEditorPlatformContextError,\n EditorPlatformContextErrorCode,\n} from '../errors';\nimport { ContextInjectionStatus } from './ContextInjectionStatus';\n\nexport type IPrivateAPIFixMe = any; // TODO: replace with the real type\n\nexport const ENVIRONMENT_CONTEXT_KEY = '__ENVIRONMENT_CONTEXT_KEY';\n\ndeclare global {\n // eslint-disable-next-line no-var\n var __ENVIRONMENT_CONTEXT_KEY: EnvironmentContext;\n}\n\nexport enum PlatformEnvironment {\n Worker = 'Worker',\n Frame = 'Frame',\n // TODO - rename to MainThread\n ComponentPanel = 'ComponentPanel',\n}\n\nexport interface IEnvironmentContext {\n environment: PlatformEnvironment;\n privateApi: WithPromiseFunctions<IPrivateAPIFixMe>;\n events: PlatformAppEventEmitter;\n /**\n * Probably, we need to rename this prop\n */\n applicationAPIs?: Record<string, any>;\n}\n\nexport class EnvironmentContext {\n private static status = new ContextInjectionStatus('environment');\n\n static async inject(context: IEnvironmentContext) {\n if (globalThis[ENVIRONMENT_CONTEXT_KEY]) {\n throw createEditorPlatformContextError(\n EditorPlatformContextErrorCode.IncorrectEnvironment,\n 'Environment context already exists and should not be overridden',\n );\n }\n\n globalThis[ENVIRONMENT_CONTEXT_KEY] = new EnvironmentContext(context);\n this.status.resolveInjected();\n }\n\n static async getInstance(): Promise<EnvironmentContext> {\n await this.status.waitInjected();\n return globalThis[ENVIRONMENT_CONTEXT_KEY];\n }\n\n constructor(private environmentContext: IEnvironmentContext) {}\n\n getPrivateAPI() {\n return this.environmentContext.privateApi;\n }\n\n getEvents() {\n return this.environmentContext.events;\n }\n\n getApplicationAPIs() {\n return this.environmentContext.applicationAPIs ?? {};\n }\n\n getEnvironment() {\n return this.environmentContext.environment;\n }\n}\n","import {\n createEditorPlatformContextError,\n EditorPlatformContextErrorCode,\n} from '../errors';\n\nimport { ApplicationBoundEvents } from '../ApplicationBoundEvents';\nimport { EnvironmentContext, PlatformEnvironment } from './EnvironmentContext';\nimport { ContextInjectionStatus } from './ContextInjectionStatus';\n\nexport const APPLICATION_CONTEXT_KEY = '__APPLICATION_CONTEXT_KEY';\ndeclare global {\n // eslint-disable-next-line no-var\n var __APPLICATION_CONTEXT_KEY: ApplicationContext<IApplicationContext>;\n}\n\nexport type IEditorApplicationContext = {\n appDefinitionId: string;\n};\n\nexport type IAddonContext = {\n appDefinitionId: string;\n appDefinitionName: string;\n data: {\n toolPanelConfig: {\n url: string;\n width: string;\n height: string;\n initialPosition: {\n x: string;\n y: string;\n };\n };\n };\n};\n\nexport type IApplicationContext = IEditorApplicationContext | IAddonContext;\n\nexport class ApplicationContext<TContext extends IApplicationContext> {\n private static status = new ContextInjectionStatus('application');\n\n /**\n * TODO: use generics for context type\n * - application\n * - editor\n */\n static async inject<TContext extends IApplicationContext>(context: TContext) {\n // const environment = await EnvironmentContext.getInstance();\n\n // if (environment.getEnvironment() !== PlatformEnvironment.Frame) {\n // throw createEditorPlatformContextError(\n // EditorPlatformContextErrorCode.IncorrectEnvironment,\n // 'Application context can be injected only in frame environment',\n // );\n // }\n\n if (globalThis[APPLICATION_CONTEXT_KEY]) {\n throw createEditorPlatformContextError(\n EditorPlatformContextErrorCode.IncorrectEnvironment,\n 'Application context already exists and should not be overridden',\n );\n }\n\n globalThis[APPLICATION_CONTEXT_KEY] = new ApplicationContext(\n context,\n await EnvironmentContext.getInstance(),\n );\n\n this.status.resolveInjected();\n }\n\n static async getInstance<TContext extends IApplicationContext>() {\n if (typeof __APPLICATION_CONTEXT_KEY !== 'undefined') {\n /**\n * NOTE it is taken not from global\n * __APPLICATION_CONTEXT_KEY is the variable which set during\n * application bundle execution using new Function() approach\n */\n return __APPLICATION_CONTEXT_KEY as ApplicationContext<TContext>;\n }\n\n await this.status.waitInjected();\n\n return globalThis[APPLICATION_CONTEXT_KEY] as ApplicationContext<TContext>;\n\n // const environment = await EnvironmentContext.getInstance();\n\n // if (environment.getEnvironment() === PlatformEnvironment.Frame) {\n // await this.status.waitInjected();\n // return globalThis[\n // APPLICATION_CONTEXT_KEY\n // ] as ApplicationContext<TContext>;\n // } else {\n // /**\n // * NOTE it is taken not from global\n // * __APPLICATION_CONTEXT_KEY is the variable which set during\n // * application bundle execution using new Function() approach\n // */\n // return __APPLICATION_CONTEXT_KEY as ApplicationContext<TContext>;\n // }\n }\n\n private events: ApplicationBoundEvents;\n\n constructor(\n private applicationContext: TContext,\n private environment: EnvironmentContext,\n ) {\n this.events = new ApplicationBoundEvents(\n this.applicationContext.appDefinitionId,\n this.environment.getEvents(),\n this.environment.getPrivateAPI(),\n );\n }\n\n getAppDefinitionId() {\n return this.applicationContext.appDefinitionId;\n }\n\n getBindings() {\n return this.applicationContext;\n }\n\n getEvents() {\n return this.events;\n }\n\n getEnvironmentContext() {\n return this.environment;\n }\n\n getPrivateAPI() {\n return this.environment.getPrivateAPI();\n }\n\n getPrivateApplicationAPI() {\n const appDefinitionId = this.getAppDefinitionId();\n\n if (!appDefinitionId) {\n throw createEditorPlatformContextError(\n EditorPlatformContextErrorCode.IncorrectEnvironment,\n 'appDefinitionId is not available',\n );\n }\n\n return this.environment.getApplicationAPIs()[appDefinitionId];\n }\n}\n"],"names":["EditorPlatformContextErrorCode","PlatformEnvironment"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/errors.ts","../../src/ApplicationBoundEvents/transformEventPayload.ts","../../src/ApplicationBoundEvents/ApplicationBoundEvents.ts","../../src/contexts/ContextInjectionStatus.ts","../../src/contexts/EnvironmentContext.ts","../../src/contexts/ApplicationContext.ts"],"sourcesContent":["import {\n BaseError,\n createErrorBuilder,\n} from '@wix/public-editor-platform-errors';\n\nexport enum EditorPlatformContextErrorCode {\n IncorrectEnvironment = 'IncorrectEnvironment',\n}\n\nclass EditorPlatformContextError extends BaseError<EditorPlatformContextErrorCode> {\n state: Partial<{\n url: string;\n appDefinitionId: string;\n }> = {};\n\n constructor(message: string, code: EditorPlatformContextErrorCode) {\n super(message, code, 'EP Context Error');\n }\n\n withUrl(url: string) {\n this.state = { ...this.state, url };\n return this;\n }\n\n withAppDefinitionId(appDefinitionId: string) {\n this.state = { ...this.state, appDefinitionId };\n return this;\n }\n}\n\nexport const createEditorPlatformContextError = createErrorBuilder<\n EditorPlatformContextErrorCode,\n EditorPlatformContextError\n>(EditorPlatformContextError);\n","import type { ComponentRef } from '@wix/public-editor-platform-interfaces';\nimport { AllowedEvents, AppEventPayload, PrivateAPIFixMe } from './types';\nimport { IElement } from '@wix/public-editor-platform-interfaces';\n\n// TODO: remove events shape and remove payload transformations\nexport async function transformEventPayload<T extends AllowedEvents>(\n eventPayload: Record<string, string>,\n privateAPI: PrivateAPIFixMe,\n): Promise<AppEventPayload<T>> {\n if (!eventPayload?.type) {\n return eventPayload as AppEventPayload<T>;\n }\n\n switch (eventPayload.type) {\n case 'componentSelectionChanged':\n const componentRefs = (eventPayload.componentRefs ||\n []) as unknown as ComponentRef[];\n\n const components = (await Promise.all(\n componentRefs.map((ref) => {\n return privateAPI.components.getComponent(ref);\n }),\n )) as IElement[];\n\n return {\n type: eventPayload.type,\n components,\n } as AppEventPayload<T>;\n\n default:\n return eventPayload as AppEventPayload<T>;\n }\n}\n","import {\n PlatformAppEvent,\n PlatformAppEventEmitter,\n IPlatformAppEvent,\n} from '@wix/public-editor-platform-events';\nimport { AllowedEvents, AppEventPayload, PrivateAPIFixMe } from './types';\nimport { transformEventPayload } from './transformEventPayload';\n\nexport type OmitEventMeta<T> = T extends { meta: any } ? Omit<T, 'meta'> : T;\n\n/**\n * TODO: should not be in this package\n */\nexport class ApplicationBoundEvents {\n private events: PlatformAppEventEmitter;\n public subscribe;\n public commit;\n public startTransaction;\n public silent;\n\n constructor(\n private appDefinitionId: string | null,\n events: PlatformAppEventEmitter,\n private privateAPI: PrivateAPIFixMe,\n ) {\n this.events = events;\n this.subscribe = events.subscribe.bind(events);\n this.commit = events.commit.bind(events);\n this.startTransaction = events.startTransaction.bind(events);\n this.silent = events.silent.bind(events);\n }\n\n public notify(event: OmitEventMeta<IPlatformAppEvent>) {\n this.events.notify({\n type: event.type,\n payload: event.payload,\n meta: {\n appDefinitionId: this.appDefinitionId,\n },\n } as IPlatformAppEvent);\n }\n\n notifyCustomEvent(type: string, payload: Record<string, string>) {\n this.notify({\n type: PlatformAppEvent.CustomEvent,\n payload: {\n ...payload,\n type,\n },\n });\n }\n\n /**\n * TODO: we should use same interface for all events\n * (subscribe vs addEventListener)\n */\n public addEventListener<EventType extends AllowedEvents>(\n eventType: EventType,\n fn: (payload: AppEventPayload<EventType>) => void,\n ) {\n return this.events.subscribe(async (event) => {\n const isAppMatch =\n event.meta?.appDefinitionId === this.appDefinitionId ||\n event.meta?.appDefinitionId === null;\n\n const transformPayload = () =>\n transformEventPayload<EventType>(event.payload, this.privateAPI);\n\n // as an exception to skip autocomplete\n if ((eventType as string) === '*') {\n fn(await transformPayload());\n /**\n * We need to check for app match here to not listen app's own events\n */\n } else if (event.type === PlatformAppEvent.CustomEvent) {\n if (eventType === event.payload?.type && !isAppMatch) {\n fn(await transformPayload());\n }\n } else if (event.type === PlatformAppEvent.HostEvent) {\n if (eventType === event.payload?.type && isAppMatch) {\n fn(await transformPayload());\n }\n }\n });\n }\n}\n","import {\n createEditorPlatformContextError,\n EditorPlatformContextErrorCode,\n} from '../errors';\n\nconst WAIT_INJECTED_TIMEOUT = 200;\nconst WAIT_INJECTED_RETRY_COUNT = 50;\n\nexport class ContextInjectionStatus {\n injectionUUID: string;\n injectionUUID_Deprecated: string;\n\n constructor(uuid: string) {\n this.injectionUUID_Deprecated = `__${uuid}_CONTEXT_INJECTION_STATUS_KEY`;\n this.injectionUUID = `__${uuid}_CONTEXT_INJECTION_STATUS_KEY#0.1`;\n\n const promise = this.#getGlobalInjectionPromise();\n\n if (!promise) {\n this.#createGlobalInjectionPromise();\n }\n }\n\n #getGlobalInjectionPromise() {\n // @ts-expect-error xxx\n const ref = globalThis[this.injectionUUID];\n return ref?.promise;\n }\n\n #createGlobalInjectionPromise() {\n let _resolve;\n\n const promise = new Promise<void>((resolve) => {\n _resolve = resolve;\n });\n\n // @ts-expect-error xxx\n globalThis[this.injectionUUID] = {\n promise,\n resolve: _resolve,\n };\n\n /**\n * as soon as new latest-version promise is created\n * override existing deprecated promise and resolve it\n * as soon as latest is resolved\n */\n // @ts-expect-error xxx\n globalThis[this.injectionUUID_Deprecated] = new Promise((resolve) => {\n promise.then(resolve);\n });\n }\n\n resolveInjected() {\n // @ts-expect-error xxx\n globalThis[this.injectionUUID]?.resolve();\n }\n\n waitInjected() {\n return new Promise<void>((resolve, reject) => {\n let injected = false;\n let timeoutId: ReturnType<typeof setTimeout>;\n let retryCount = 0;\n\n const timeout = () => {\n if (injected) {\n return;\n }\n\n timeoutId = setTimeout(() => {\n retryCount++;\n\n if (retryCount < WAIT_INJECTED_RETRY_COUNT) {\n /**\n * just log that we are re-trying to connect (each 2 sec+-)\n */\n if (retryCount % 10 === 0) {\n console.log(\n createEditorPlatformContextError(\n EditorPlatformContextErrorCode.IncorrectEnvironment,\n 'contexts are not resolved, still re-trying',\n ).withMessage(`try number ${retryCount}`).message,\n );\n }\n\n timeout();\n\n return;\n }\n\n if (!injected) {\n const error = createEditorPlatformContextError(\n EditorPlatformContextErrorCode.IncorrectEnvironment,\n 'contexts are not resolved, threw by timeout',\n );\n\n reject(error);\n }\n }, WAIT_INJECTED_TIMEOUT);\n };\n\n timeout();\n\n this.#getGlobalInjectionPromise()?.then(() => {\n injected = true;\n clearTimeout(timeoutId);\n resolve();\n });\n });\n }\n}\n","import { PlatformAppEventEmitter } from '@wix/public-editor-platform-events';\nimport { WithPromiseFunctions } from '@wix/editor-platform-transport';\nimport {\n createEditorPlatformContextError,\n EditorPlatformContextErrorCode,\n} from '../errors';\nimport { ContextInjectionStatus } from './ContextInjectionStatus';\n\nexport type IPrivateAPIFixMe = any; // TODO: replace with the real type\n\nexport const ENVIRONMENT_CONTEXT_KEY = '__ENVIRONMENT_CONTEXT_KEY';\n\ndeclare global {\n // eslint-disable-next-line no-var\n var __ENVIRONMENT_CONTEXT_KEY: EnvironmentContext;\n}\n\nexport enum PlatformEnvironment {\n Worker = 'Worker',\n Frame = 'Frame',\n // TODO - rename to MainThread\n ComponentPanel = 'ComponentPanel',\n}\n\nexport interface IEnvironmentContext {\n environment: PlatformEnvironment;\n privateApi: WithPromiseFunctions<IPrivateAPIFixMe>;\n events: PlatformAppEventEmitter;\n /**\n * Probably, we need to rename this prop\n */\n applicationAPIs?: Record<string, any>;\n}\n\nexport class EnvironmentContext {\n private static status = new ContextInjectionStatus('environment');\n\n static async inject(context: IEnvironmentContext) {\n if (globalThis[ENVIRONMENT_CONTEXT_KEY]) {\n throw createEditorPlatformContextError(\n EditorPlatformContextErrorCode.IncorrectEnvironment,\n 'Environment context already exists and should not be overridden',\n );\n }\n\n globalThis[ENVIRONMENT_CONTEXT_KEY] = new EnvironmentContext(context);\n this.status.resolveInjected();\n }\n\n static async getInstance(): Promise<EnvironmentContext> {\n await this.status.waitInjected();\n return globalThis[ENVIRONMENT_CONTEXT_KEY];\n }\n\n constructor(private environmentContext: IEnvironmentContext) {}\n\n getPrivateAPI() {\n return this.environmentContext.privateApi;\n }\n\n getEvents() {\n return this.environmentContext.events;\n }\n\n getApplicationAPIs() {\n return this.environmentContext.applicationAPIs ?? {};\n }\n\n getEnvironment() {\n return this.environmentContext.environment;\n }\n}\n","import {\n createEditorPlatformContextError,\n EditorPlatformContextErrorCode,\n} from '../errors';\n\nimport { ApplicationBoundEvents } from '../ApplicationBoundEvents';\nimport { EnvironmentContext } from './EnvironmentContext';\nimport { ContextInjectionStatus } from './ContextInjectionStatus';\n\nexport const APPLICATION_CONTEXT_KEY = '__APPLICATION_CONTEXT_KEY';\ndeclare global {\n // eslint-disable-next-line no-var\n var __APPLICATION_CONTEXT_KEY: ApplicationContext;\n}\n\n/**\n * renamed: IApplicationContext\n * there is no sense to split context by application type or running context\n * - addon\n * - application\n * - builder component\n * - panel or whatever\n * sdk context should be a union of all available options\n */\nexport interface IPlatformSDKContext {\n manifestContextId?: string | null;\n appDefinitionId?: string | null;\n /**\n * TODO: get rid of data prop, use root props\n */\n data?: {\n toolPanelConfig: {\n url: string;\n width: string;\n height: string;\n initialPosition: {\n x: string;\n y: string;\n };\n };\n };\n}\n\nexport class ApplicationContext {\n private static status = new ContextInjectionStatus('application');\n\n /**\n * TODO: use generics for context type\n * - application\n * - editor\n */\n static async inject(context: IPlatformSDKContext) {\n // const environment = await EnvironmentContext.getInstance();\n\n // if (environment.getEnvironment() !== PlatformEnvironment.Frame) {\n // throw createEditorPlatformContextError(\n // EditorPlatformContextErrorCode.IncorrectEnvironment,\n // 'Application context can be injected only in frame environment',\n // );\n // }\n\n if (globalThis[APPLICATION_CONTEXT_KEY]) {\n throw createEditorPlatformContextError(\n EditorPlatformContextErrorCode.IncorrectEnvironment,\n 'Application context already exists and should not be overridden',\n );\n }\n\n globalThis[APPLICATION_CONTEXT_KEY] = new ApplicationContext(\n context,\n await EnvironmentContext.getInstance(),\n );\n\n this.status.resolveInjected();\n }\n\n static async getInstance() {\n if (typeof __APPLICATION_CONTEXT_KEY !== 'undefined') {\n /**\n * NOTE it is taken not from global\n * __APPLICATION_CONTEXT_KEY is the variable which set during\n * application bundle execution using new Function() approach\n */\n return __APPLICATION_CONTEXT_KEY as ApplicationContext;\n }\n\n await this.status.waitInjected();\n\n return globalThis[APPLICATION_CONTEXT_KEY] as ApplicationContext;\n\n // const environment = await EnvironmentContext.getInstance();\n\n // if (environment.getEnvironment() === PlatformEnvironment.Frame) {\n // await this.status.waitInjected();\n // return globalThis[\n // APPLICATION_CONTEXT_KEY\n // ] as ApplicationContext<TContext>;\n // } else {\n // /**\n // * NOTE it is taken not from global\n // * __APPLICATION_CONTEXT_KEY is the variable which set during\n // * application bundle execution using new Function() approach\n // */\n // return __APPLICATION_CONTEXT_KEY as ApplicationContext<TContext>;\n // }\n }\n\n private events: ApplicationBoundEvents;\n\n constructor(\n private context: IPlatformSDKContext,\n private environment: EnvironmentContext,\n ) {\n this.events = new ApplicationBoundEvents(\n context.appDefinitionId ? context.appDefinitionId : null,\n this.environment.getEvents(),\n this.environment.getPrivateAPI(),\n );\n }\n\n getContext() {\n return this.context;\n }\n\n getAppDefinitionId() {\n return this.context.appDefinitionId;\n }\n\n getManifestContextId() {\n return this.context.manifestContextId;\n }\n\n getEvents() {\n return this.events;\n }\n\n getEnvironmentContext() {\n return this.environment;\n }\n\n getPrivateAPI() {\n return this.environment.getPrivateAPI();\n }\n\n getPrivateApplicationAPI() {\n const appDefinitionId = this.getAppDefinitionId();\n\n if (!appDefinitionId) {\n throw createEditorPlatformContextError(\n EditorPlatformContextErrorCode.IncorrectEnvironment,\n 'appDefinitionId is not available',\n );\n }\n\n return this.environment.getApplicationAPIs()[appDefinitionId];\n }\n}\n"],"names":["EditorPlatformContextErrorCode","PlatformEnvironment"],"mappings":"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"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -25,7 +25,7 @@ declare class ApplicationBoundEvents {
|
|
|
25
25
|
commit: () => void;
|
|
26
26
|
startTransaction: () => void;
|
|
27
27
|
silent: (isSilent?: boolean) => void;
|
|
28
|
-
constructor(appDefinitionId: string, events: PlatformAppEventEmitter, privateAPI: PrivateAPIFixMe);
|
|
28
|
+
constructor(appDefinitionId: string | null, events: PlatformAppEventEmitter, privateAPI: PrivateAPIFixMe);
|
|
29
29
|
notify(event: OmitEventMeta<IPlatformAppEvent>): void;
|
|
30
30
|
notifyCustomEvent(type: string, payload: Record<string, string>): void;
|
|
31
31
|
/**
|
|
@@ -68,15 +68,24 @@ declare class EnvironmentContext {
|
|
|
68
68
|
|
|
69
69
|
declare const APPLICATION_CONTEXT_KEY = "__APPLICATION_CONTEXT_KEY";
|
|
70
70
|
declare global {
|
|
71
|
-
var __APPLICATION_CONTEXT_KEY: ApplicationContext
|
|
71
|
+
var __APPLICATION_CONTEXT_KEY: ApplicationContext;
|
|
72
72
|
}
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
73
|
+
/**
|
|
74
|
+
* renamed: IApplicationContext
|
|
75
|
+
* there is no sense to split context by application type or running context
|
|
76
|
+
* - addon
|
|
77
|
+
* - application
|
|
78
|
+
* - builder component
|
|
79
|
+
* - panel or whatever
|
|
80
|
+
* sdk context should be a union of all available options
|
|
81
|
+
*/
|
|
82
|
+
interface IPlatformSDKContext {
|
|
83
|
+
manifestContextId?: string | null;
|
|
84
|
+
appDefinitionId?: string | null;
|
|
85
|
+
/**
|
|
86
|
+
* TODO: get rid of data prop, use root props
|
|
87
|
+
*/
|
|
88
|
+
data?: {
|
|
80
89
|
toolPanelConfig: {
|
|
81
90
|
url: string;
|
|
82
91
|
width: string;
|
|
@@ -87,10 +96,9 @@ type IAddonContext = {
|
|
|
87
96
|
};
|
|
88
97
|
};
|
|
89
98
|
};
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
private applicationContext;
|
|
99
|
+
}
|
|
100
|
+
declare class ApplicationContext {
|
|
101
|
+
private context;
|
|
94
102
|
private environment;
|
|
95
103
|
private static status;
|
|
96
104
|
/**
|
|
@@ -98,12 +106,13 @@ declare class ApplicationContext<TContext extends IApplicationContext> {
|
|
|
98
106
|
* - application
|
|
99
107
|
* - editor
|
|
100
108
|
*/
|
|
101
|
-
static inject
|
|
102
|
-
static getInstance
|
|
109
|
+
static inject(context: IPlatformSDKContext): Promise<void>;
|
|
110
|
+
static getInstance(): Promise<ApplicationContext>;
|
|
103
111
|
private events;
|
|
104
|
-
constructor(
|
|
105
|
-
|
|
106
|
-
|
|
112
|
+
constructor(context: IPlatformSDKContext, environment: EnvironmentContext);
|
|
113
|
+
getContext(): IPlatformSDKContext;
|
|
114
|
+
getAppDefinitionId(): string | null | undefined;
|
|
115
|
+
getManifestContextId(): string | null | undefined;
|
|
107
116
|
getEvents(): ApplicationBoundEvents;
|
|
108
117
|
getEnvironmentContext(): EnvironmentContext;
|
|
109
118
|
getPrivateAPI(): _wix_editor_platform_transport.WithPromiseFunctions<any>;
|
|
@@ -111,5 +120,5 @@ declare class ApplicationContext<TContext extends IApplicationContext> {
|
|
|
111
120
|
}
|
|
112
121
|
|
|
113
122
|
export { APPLICATION_CONTEXT_KEY, ApplicationBoundEvents, ApplicationContext, ENVIRONMENT_CONTEXT_KEY, EnvironmentContext, PlatformEnvironment };
|
|
114
|
-
export type { AllowedEvents, AppEventPayload,
|
|
123
|
+
export type { AllowedEvents, AppEventPayload, IEnvironmentContext, IPlatformSDKContext, IPrivateAPIFixMe, OmitEventMeta, PrivateAPIFixMe };
|
|
115
124
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sources":["../../src/ApplicationBoundEvents/types.ts","../../src/ApplicationBoundEvents/ApplicationBoundEvents.ts","../../src/contexts/EnvironmentContext.ts","../../src/contexts/ApplicationContext.ts"],"sourcesContent":["import { IElement } from '@wix/public-editor-platform-interfaces';\n\nexport type PrivateAPIFixMe = any;\n\ntype EventsToAutocomplete = 'componentSelectionChanged';\nexport type AllowedEvents =\n | Omit<string, EventsToAutocomplete>\n | EventsToAutocomplete;\n\nexport type AppEventPayload<EventType extends AllowedEvents> =\n EventType extends 'componentSelectionChanged'\n ? {\n type: EventType;\n components: IElement[];\n }\n : Record<string, string>;\n","import {\n PlatformAppEvent,\n PlatformAppEventEmitter,\n IPlatformAppEvent,\n} from '@wix/public-editor-platform-events';\nimport { AllowedEvents, AppEventPayload, PrivateAPIFixMe } from './types';\nimport { transformEventPayload } from './transformEventPayload';\n\nexport type OmitEventMeta<T> = T extends { meta: any } ? Omit<T, 'meta'> : T;\n\n/**\n * TODO: should not be in this package\n */\nexport class ApplicationBoundEvents {\n private events: PlatformAppEventEmitter;\n public subscribe;\n public commit;\n public startTransaction;\n public silent;\n\n constructor(\n private appDefinitionId: string,\n events: PlatformAppEventEmitter,\n private privateAPI: PrivateAPIFixMe,\n ) {\n this.events = events;\n this.subscribe = events.subscribe.bind(events);\n this.commit = events.commit.bind(events);\n this.startTransaction = events.startTransaction.bind(events);\n this.silent = events.silent.bind(events);\n }\n\n public notify(event: OmitEventMeta<IPlatformAppEvent>) {\n this.events.notify({\n type: event.type,\n payload: event.payload,\n meta: {\n appDefinitionId: this.appDefinitionId,\n },\n } as IPlatformAppEvent);\n }\n\n notifyCustomEvent(type: string, payload: Record<string, string>) {\n this.notify({\n type: PlatformAppEvent.CustomEvent,\n payload: {\n ...payload,\n type,\n },\n });\n }\n\n /**\n * TODO: we should use same interface for all events\n * (subscribe vs addEventListener)\n */\n public addEventListener<EventType extends AllowedEvents>(\n eventType: EventType,\n fn: (payload: AppEventPayload<EventType>) => void,\n ) {\n return this.events.subscribe(async (event) => {\n const isAppMatch =\n event.meta?.appDefinitionId === this.appDefinitionId ||\n event.meta?.appDefinitionId === null;\n\n const transformPayload = () =>\n transformEventPayload<EventType>(event.payload, this.privateAPI);\n\n // as an exception to skip autocomplete\n if ((eventType as string) === '*') {\n fn(await transformPayload());\n /**\n * We need to check for app match here to not listen app's own events\n */\n } else if (event.type === PlatformAppEvent.CustomEvent) {\n if (eventType === event.payload?.type && !isAppMatch) {\n fn(await transformPayload());\n }\n } else if (event.type === PlatformAppEvent.HostEvent) {\n if (eventType === event.payload?.type && isAppMatch) {\n fn(await transformPayload());\n }\n }\n });\n }\n}\n","import { PlatformAppEventEmitter } from '@wix/public-editor-platform-events';\nimport { WithPromiseFunctions } from '@wix/editor-platform-transport';\nimport {\n createEditorPlatformContextError,\n EditorPlatformContextErrorCode,\n} from '../errors';\nimport { ContextInjectionStatus } from './ContextInjectionStatus';\n\nexport type IPrivateAPIFixMe = any; // TODO: replace with the real type\n\nexport const ENVIRONMENT_CONTEXT_KEY = '__ENVIRONMENT_CONTEXT_KEY';\n\ndeclare global {\n // eslint-disable-next-line no-var\n var __ENVIRONMENT_CONTEXT_KEY: EnvironmentContext;\n}\n\nexport enum PlatformEnvironment {\n Worker = 'Worker',\n Frame = 'Frame',\n // TODO - rename to MainThread\n ComponentPanel = 'ComponentPanel',\n}\n\nexport interface IEnvironmentContext {\n environment: PlatformEnvironment;\n privateApi: WithPromiseFunctions<IPrivateAPIFixMe>;\n events: PlatformAppEventEmitter;\n /**\n * Probably, we need to rename this prop\n */\n applicationAPIs?: Record<string, any>;\n}\n\nexport class EnvironmentContext {\n private static status = new ContextInjectionStatus('environment');\n\n static async inject(context: IEnvironmentContext) {\n if (globalThis[ENVIRONMENT_CONTEXT_KEY]) {\n throw createEditorPlatformContextError(\n EditorPlatformContextErrorCode.IncorrectEnvironment,\n 'Environment context already exists and should not be overridden',\n );\n }\n\n globalThis[ENVIRONMENT_CONTEXT_KEY] = new EnvironmentContext(context);\n this.status.resolveInjected();\n }\n\n static async getInstance(): Promise<EnvironmentContext> {\n await this.status.waitInjected();\n return globalThis[ENVIRONMENT_CONTEXT_KEY];\n }\n\n constructor(private environmentContext: IEnvironmentContext) {}\n\n getPrivateAPI() {\n return this.environmentContext.privateApi;\n }\n\n getEvents() {\n return this.environmentContext.events;\n }\n\n getApplicationAPIs() {\n return this.environmentContext.applicationAPIs ?? {};\n }\n\n getEnvironment() {\n return this.environmentContext.environment;\n }\n}\n","import {\n createEditorPlatformContextError,\n EditorPlatformContextErrorCode,\n} from '../errors';\n\nimport { ApplicationBoundEvents } from '../ApplicationBoundEvents';\nimport { EnvironmentContext, PlatformEnvironment } from './EnvironmentContext';\nimport { ContextInjectionStatus } from './ContextInjectionStatus';\n\nexport const APPLICATION_CONTEXT_KEY = '__APPLICATION_CONTEXT_KEY';\ndeclare global {\n // eslint-disable-next-line no-var\n var __APPLICATION_CONTEXT_KEY: ApplicationContext<IApplicationContext>;\n}\n\nexport type IEditorApplicationContext = {\n appDefinitionId: string;\n};\n\nexport type IAddonContext = {\n appDefinitionId: string;\n appDefinitionName: string;\n data: {\n toolPanelConfig: {\n url: string;\n width: string;\n height: string;\n initialPosition: {\n x: string;\n y: string;\n };\n };\n };\n};\n\nexport type IApplicationContext = IEditorApplicationContext | IAddonContext;\n\nexport class ApplicationContext<TContext extends IApplicationContext> {\n private static status = new ContextInjectionStatus('application');\n\n /**\n * TODO: use generics for context type\n * - application\n * - editor\n */\n static async inject<TContext extends IApplicationContext>(context: TContext) {\n // const environment = await EnvironmentContext.getInstance();\n\n // if (environment.getEnvironment() !== PlatformEnvironment.Frame) {\n // throw createEditorPlatformContextError(\n // EditorPlatformContextErrorCode.IncorrectEnvironment,\n // 'Application context can be injected only in frame environment',\n // );\n // }\n\n if (globalThis[APPLICATION_CONTEXT_KEY]) {\n throw createEditorPlatformContextError(\n EditorPlatformContextErrorCode.IncorrectEnvironment,\n 'Application context already exists and should not be overridden',\n );\n }\n\n globalThis[APPLICATION_CONTEXT_KEY] = new ApplicationContext(\n context,\n await EnvironmentContext.getInstance(),\n );\n\n this.status.resolveInjected();\n }\n\n static async getInstance<TContext extends IApplicationContext>() {\n if (typeof __APPLICATION_CONTEXT_KEY !== 'undefined') {\n /**\n * NOTE it is taken not from global\n * __APPLICATION_CONTEXT_KEY is the variable which set during\n * application bundle execution using new Function() approach\n */\n return __APPLICATION_CONTEXT_KEY as ApplicationContext<TContext>;\n }\n\n await this.status.waitInjected();\n\n return globalThis[APPLICATION_CONTEXT_KEY] as ApplicationContext<TContext>;\n\n // const environment = await EnvironmentContext.getInstance();\n\n // if (environment.getEnvironment() === PlatformEnvironment.Frame) {\n // await this.status.waitInjected();\n // return globalThis[\n // APPLICATION_CONTEXT_KEY\n // ] as ApplicationContext<TContext>;\n // } else {\n // /**\n // * NOTE it is taken not from global\n // * __APPLICATION_CONTEXT_KEY is the variable which set during\n // * application bundle execution using new Function() approach\n // */\n // return __APPLICATION_CONTEXT_KEY as ApplicationContext<TContext>;\n // }\n }\n\n private events: ApplicationBoundEvents;\n\n constructor(\n private applicationContext: TContext,\n private environment: EnvironmentContext,\n ) {\n this.events = new ApplicationBoundEvents(\n this.applicationContext.appDefinitionId,\n this.environment.getEvents(),\n this.environment.getPrivateAPI(),\n );\n }\n\n getAppDefinitionId() {\n return this.applicationContext.appDefinitionId;\n }\n\n getBindings() {\n return this.applicationContext;\n }\n\n getEvents() {\n return this.events;\n }\n\n getEnvironmentContext() {\n return this.environment;\n }\n\n getPrivateAPI() {\n return this.environment.getPrivateAPI();\n }\n\n getPrivateApplicationAPI() {\n const appDefinitionId = this.getAppDefinitionId();\n\n if (!appDefinitionId) {\n throw createEditorPlatformContextError(\n EditorPlatformContextErrorCode.IncorrectEnvironment,\n 'appDefinitionId is not available',\n );\n }\n\n return this.environment.getApplicationAPIs()[appDefinitionId];\n }\n}\n"],"names":[],"mappings":";;;;;AACO;AACP;AACO;AACA;AACP;AACA;AACA;;ACLO;AACP;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBO;AACA;AACP;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7BO;AACP;AACA;AACA;AACO;AACP;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACA;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sources":["../../src/ApplicationBoundEvents/types.ts","../../src/ApplicationBoundEvents/ApplicationBoundEvents.ts","../../src/contexts/EnvironmentContext.ts","../../src/contexts/ApplicationContext.ts"],"sourcesContent":["import { IElement } from '@wix/public-editor-platform-interfaces';\n\nexport type PrivateAPIFixMe = any;\n\ntype EventsToAutocomplete = 'componentSelectionChanged';\nexport type AllowedEvents =\n | Omit<string, EventsToAutocomplete>\n | EventsToAutocomplete;\n\nexport type AppEventPayload<EventType extends AllowedEvents> =\n EventType extends 'componentSelectionChanged'\n ? {\n type: EventType;\n components: IElement[];\n }\n : Record<string, string>;\n","import {\n PlatformAppEvent,\n PlatformAppEventEmitter,\n IPlatformAppEvent,\n} from '@wix/public-editor-platform-events';\nimport { AllowedEvents, AppEventPayload, PrivateAPIFixMe } from './types';\nimport { transformEventPayload } from './transformEventPayload';\n\nexport type OmitEventMeta<T> = T extends { meta: any } ? Omit<T, 'meta'> : T;\n\n/**\n * TODO: should not be in this package\n */\nexport class ApplicationBoundEvents {\n private events: PlatformAppEventEmitter;\n public subscribe;\n public commit;\n public startTransaction;\n public silent;\n\n constructor(\n private appDefinitionId: string | null,\n events: PlatformAppEventEmitter,\n private privateAPI: PrivateAPIFixMe,\n ) {\n this.events = events;\n this.subscribe = events.subscribe.bind(events);\n this.commit = events.commit.bind(events);\n this.startTransaction = events.startTransaction.bind(events);\n this.silent = events.silent.bind(events);\n }\n\n public notify(event: OmitEventMeta<IPlatformAppEvent>) {\n this.events.notify({\n type: event.type,\n payload: event.payload,\n meta: {\n appDefinitionId: this.appDefinitionId,\n },\n } as IPlatformAppEvent);\n }\n\n notifyCustomEvent(type: string, payload: Record<string, string>) {\n this.notify({\n type: PlatformAppEvent.CustomEvent,\n payload: {\n ...payload,\n type,\n },\n });\n }\n\n /**\n * TODO: we should use same interface for all events\n * (subscribe vs addEventListener)\n */\n public addEventListener<EventType extends AllowedEvents>(\n eventType: EventType,\n fn: (payload: AppEventPayload<EventType>) => void,\n ) {\n return this.events.subscribe(async (event) => {\n const isAppMatch =\n event.meta?.appDefinitionId === this.appDefinitionId ||\n event.meta?.appDefinitionId === null;\n\n const transformPayload = () =>\n transformEventPayload<EventType>(event.payload, this.privateAPI);\n\n // as an exception to skip autocomplete\n if ((eventType as string) === '*') {\n fn(await transformPayload());\n /**\n * We need to check for app match here to not listen app's own events\n */\n } else if (event.type === PlatformAppEvent.CustomEvent) {\n if (eventType === event.payload?.type && !isAppMatch) {\n fn(await transformPayload());\n }\n } else if (event.type === PlatformAppEvent.HostEvent) {\n if (eventType === event.payload?.type && isAppMatch) {\n fn(await transformPayload());\n }\n }\n });\n }\n}\n","import { PlatformAppEventEmitter } from '@wix/public-editor-platform-events';\nimport { WithPromiseFunctions } from '@wix/editor-platform-transport';\nimport {\n createEditorPlatformContextError,\n EditorPlatformContextErrorCode,\n} from '../errors';\nimport { ContextInjectionStatus } from './ContextInjectionStatus';\n\nexport type IPrivateAPIFixMe = any; // TODO: replace with the real type\n\nexport const ENVIRONMENT_CONTEXT_KEY = '__ENVIRONMENT_CONTEXT_KEY';\n\ndeclare global {\n // eslint-disable-next-line no-var\n var __ENVIRONMENT_CONTEXT_KEY: EnvironmentContext;\n}\n\nexport enum PlatformEnvironment {\n Worker = 'Worker',\n Frame = 'Frame',\n // TODO - rename to MainThread\n ComponentPanel = 'ComponentPanel',\n}\n\nexport interface IEnvironmentContext {\n environment: PlatformEnvironment;\n privateApi: WithPromiseFunctions<IPrivateAPIFixMe>;\n events: PlatformAppEventEmitter;\n /**\n * Probably, we need to rename this prop\n */\n applicationAPIs?: Record<string, any>;\n}\n\nexport class EnvironmentContext {\n private static status = new ContextInjectionStatus('environment');\n\n static async inject(context: IEnvironmentContext) {\n if (globalThis[ENVIRONMENT_CONTEXT_KEY]) {\n throw createEditorPlatformContextError(\n EditorPlatformContextErrorCode.IncorrectEnvironment,\n 'Environment context already exists and should not be overridden',\n );\n }\n\n globalThis[ENVIRONMENT_CONTEXT_KEY] = new EnvironmentContext(context);\n this.status.resolveInjected();\n }\n\n static async getInstance(): Promise<EnvironmentContext> {\n await this.status.waitInjected();\n return globalThis[ENVIRONMENT_CONTEXT_KEY];\n }\n\n constructor(private environmentContext: IEnvironmentContext) {}\n\n getPrivateAPI() {\n return this.environmentContext.privateApi;\n }\n\n getEvents() {\n return this.environmentContext.events;\n }\n\n getApplicationAPIs() {\n return this.environmentContext.applicationAPIs ?? {};\n }\n\n getEnvironment() {\n return this.environmentContext.environment;\n }\n}\n","import {\n createEditorPlatformContextError,\n EditorPlatformContextErrorCode,\n} from '../errors';\n\nimport { ApplicationBoundEvents } from '../ApplicationBoundEvents';\nimport { EnvironmentContext } from './EnvironmentContext';\nimport { ContextInjectionStatus } from './ContextInjectionStatus';\n\nexport const APPLICATION_CONTEXT_KEY = '__APPLICATION_CONTEXT_KEY';\ndeclare global {\n // eslint-disable-next-line no-var\n var __APPLICATION_CONTEXT_KEY: ApplicationContext;\n}\n\n/**\n * renamed: IApplicationContext\n * there is no sense to split context by application type or running context\n * - addon\n * - application\n * - builder component\n * - panel or whatever\n * sdk context should be a union of all available options\n */\nexport interface IPlatformSDKContext {\n manifestContextId?: string | null;\n appDefinitionId?: string | null;\n /**\n * TODO: get rid of data prop, use root props\n */\n data?: {\n toolPanelConfig: {\n url: string;\n width: string;\n height: string;\n initialPosition: {\n x: string;\n y: string;\n };\n };\n };\n}\n\nexport class ApplicationContext {\n private static status = new ContextInjectionStatus('application');\n\n /**\n * TODO: use generics for context type\n * - application\n * - editor\n */\n static async inject(context: IPlatformSDKContext) {\n // const environment = await EnvironmentContext.getInstance();\n\n // if (environment.getEnvironment() !== PlatformEnvironment.Frame) {\n // throw createEditorPlatformContextError(\n // EditorPlatformContextErrorCode.IncorrectEnvironment,\n // 'Application context can be injected only in frame environment',\n // );\n // }\n\n if (globalThis[APPLICATION_CONTEXT_KEY]) {\n throw createEditorPlatformContextError(\n EditorPlatformContextErrorCode.IncorrectEnvironment,\n 'Application context already exists and should not be overridden',\n );\n }\n\n globalThis[APPLICATION_CONTEXT_KEY] = new ApplicationContext(\n context,\n await EnvironmentContext.getInstance(),\n );\n\n this.status.resolveInjected();\n }\n\n static async getInstance() {\n if (typeof __APPLICATION_CONTEXT_KEY !== 'undefined') {\n /**\n * NOTE it is taken not from global\n * __APPLICATION_CONTEXT_KEY is the variable which set during\n * application bundle execution using new Function() approach\n */\n return __APPLICATION_CONTEXT_KEY as ApplicationContext;\n }\n\n await this.status.waitInjected();\n\n return globalThis[APPLICATION_CONTEXT_KEY] as ApplicationContext;\n\n // const environment = await EnvironmentContext.getInstance();\n\n // if (environment.getEnvironment() === PlatformEnvironment.Frame) {\n // await this.status.waitInjected();\n // return globalThis[\n // APPLICATION_CONTEXT_KEY\n // ] as ApplicationContext<TContext>;\n // } else {\n // /**\n // * NOTE it is taken not from global\n // * __APPLICATION_CONTEXT_KEY is the variable which set during\n // * application bundle execution using new Function() approach\n // */\n // return __APPLICATION_CONTEXT_KEY as ApplicationContext<TContext>;\n // }\n }\n\n private events: ApplicationBoundEvents;\n\n constructor(\n private context: IPlatformSDKContext,\n private environment: EnvironmentContext,\n ) {\n this.events = new ApplicationBoundEvents(\n context.appDefinitionId ? context.appDefinitionId : null,\n this.environment.getEvents(),\n this.environment.getPrivateAPI(),\n );\n }\n\n getContext() {\n return this.context;\n }\n\n getAppDefinitionId() {\n return this.context.appDefinitionId;\n }\n\n getManifestContextId() {\n return this.context.manifestContextId;\n }\n\n getEvents() {\n return this.events;\n }\n\n getEnvironmentContext() {\n return this.environment;\n }\n\n getPrivateAPI() {\n return this.environment.getPrivateAPI();\n }\n\n getPrivateApplicationAPI() {\n const appDefinitionId = this.getAppDefinitionId();\n\n if (!appDefinitionId) {\n throw createEditorPlatformContextError(\n EditorPlatformContextErrorCode.IncorrectEnvironment,\n 'appDefinitionId is not available',\n );\n }\n\n return this.environment.getApplicationAPIs()[appDefinitionId];\n }\n}\n"],"names":[],"mappings":";;;;;AACO;AACP;AACO;AACA;AACP;AACA;AACA;;ACLO;AACP;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBO;AACA;AACP;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7BO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wix/editor-platform-contexts",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.65.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "dist/cjs/index.js",
|
|
6
6
|
"module": "dist/esm/index.js",
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
},
|
|
26
26
|
"license": "UNLICENSED",
|
|
27
27
|
"devDependencies": {
|
|
28
|
-
"esbuild": "^0.25.
|
|
28
|
+
"esbuild": "^0.25.4",
|
|
29
29
|
"eslint": "^8.57.1",
|
|
30
30
|
"prettier": "^3.5.3",
|
|
31
31
|
"rollup": "^3.29.5",
|
|
@@ -61,5 +61,5 @@
|
|
|
61
61
|
]
|
|
62
62
|
}
|
|
63
63
|
},
|
|
64
|
-
"falconPackageHash": "
|
|
64
|
+
"falconPackageHash": "313db238dda1cd52e9e5c300fb773841937a61d1fbbb22146c36a45c"
|
|
65
65
|
}
|