@vived/host 5.2.0 → 5.2.2
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/Apps/UCs/Mounters/MounterUC.js +1 -0
- package/dist/cjs/Apps/UCs/Mounters/MounterUC.js.map +1 -1
- package/dist/cjs/Apps/UCs/Mounters/SandboxMounterUC.js +1 -0
- package/dist/cjs/Apps/UCs/Mounters/SandboxMounterUC.js.map +1 -1
- package/dist/cjs/AssetPlugin/Entities/AssetPluginEntity.js +8 -1
- package/dist/cjs/AssetPlugin/Entities/AssetPluginEntity.js.map +1 -1
- package/dist/cjs/AssetPlugin/Factories/AssetPluginFeatureFactory.js +16 -3
- package/dist/cjs/AssetPlugin/Factories/AssetPluginFeatureFactory.js.map +1 -1
- package/dist/esm/Apps/UCs/Mounters/MounterUC.js +1 -0
- package/dist/esm/Apps/UCs/Mounters/MounterUC.js.map +1 -1
- package/dist/esm/Apps/UCs/Mounters/SandboxMounterUC.js +1 -0
- package/dist/esm/Apps/UCs/Mounters/SandboxMounterUC.js.map +1 -1
- package/dist/esm/AssetPlugin/Entities/AssetPluginEntity.js +8 -1
- package/dist/esm/AssetPlugin/Entities/AssetPluginEntity.js.map +1 -1
- package/dist/esm/AssetPlugin/Factories/AssetPluginFeatureFactory.js +18 -5
- package/dist/esm/AssetPlugin/Factories/AssetPluginFeatureFactory.js.map +1 -1
- package/dist/types/AssetPlugin/Factories/AssetPluginFeatureFactory.d.ts +1 -0
- package/dist/types/AssetPlugin/Factories/AssetPluginFeatureFactory.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MounterUC.js","sourceRoot":"","sources":["../../../../../src/Apps/UCs/Mounters/MounterUC.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n AppObject,\n AppObjectRepo,\n AppObjectUC,\n Version,\n VIVEDApp_3\n} from \"@vived/core\";\nimport { HostDispatchEntity } from \"../../../Dispatcher/Entities/HostDispatchEntity\";\nimport { HostHandlerEntity } from \"../../../Handler/Entities/HostHandler\";\nimport { GetAppFromAPIUC } from \"../../../VivedAPI/UCs/GetAppFromAPIUC\";\nimport { AppEntity, AppState } from \"../../Entities/AppEntity\";\nimport { formAppIDWithVersion } from \"../formAppIDWithVersion\";\n\n/**\n * Abstract base class for app mounting use cases.\n *\n * The MounterUC is responsible for loading, initializing, and managing app\n * lifecycle. It handles script loading, version management, and communication\n * setup between the host and app.\n *\n * @extends AppObjectUC from @vived/core\n */\nexport abstract class MounterUC extends AppObjectUC {\n static type = \"MounterUC\";\n\n /**\n * Mounts a specific version of the app.\n *\n * @param majorVersion - The major version number\n * @param minorVersion - The minor version number\n * @returns A promise that resolves when the app is mounted\n */\n abstract mount(majorVersion: number, minorVersion: number): Promise<void>;\n\n /**\n * Mounts the latest available version of the app.\n *\n * @returns A promise that resolves when the app is mounted\n */\n abstract mountLatestVersion(): Promise<void>;\n\n /**\n * Unmounts the app, removing it from the runtime environment.\n */\n abstract unmount(): void;\n\n /**\n * Loads a script into the document.\n *\n * @param scriptURL - URL of the script to load\n * @param appIDWithVersion - Versioned ID of the app\n * @returns A promise that resolves when the script is loaded\n */\n abstract loadScriptIntoDocument(\n scriptURL: string,\n appIDWithVersion: string\n ): Promise<void>; // Exposed for testing purposes\n\n /**\n * Gets the app interface for a specific version.\n *\n * @param version - The version to get the interface for\n * @returns The app interface or undefined if not found\n */\n abstract getAppInterface(version: Version): VIVEDApp_3 | undefined; // Exposed for test purposes\n\n /**\n * Retrieves the MounterUC component from an app object.\n *\n * @param appObject - The app object to get the component from\n * @returns The MounterUC component or undefined if not found\n */\n static get(appObject: AppObject) {\n return appObject.getComponent<MounterUC>(MounterUC.type);\n }\n\n /**\n * Retrieves the MounterUC component by app object ID.\n *\n * @param id - The ID of the app object\n * @param appObjects - The app object repository\n * @returns The MounterUC component or undefined if not found\n */\n static getById(id: string, appObjects: AppObjectRepo) {\n const ao = appObjects.get(id);\n return ao?.getComponent<MounterUC>(MounterUC.type);\n }\n}\n\n/**\n * Factory function to create a new MounterUC instance.\n *\n * @param appObject - The app object to attach the mounter to\n * @returns A new MounterUC instance\n */\nexport function makeMounterUC(appObject: AppObject): MounterUC {\n return new MounterUCImp(appObject);\n}\n\n/**\n * Concrete implementation of the MounterUC abstract class.\n *\n * This implementation provides the standard mounting behavior for loading\n * and initializing apps, handling script loading, and managing app lifecycle.\n */\nclass MounterUCImp extends MounterUC {\n /**\n * Gets the use case for retrieving apps from the API.\n */\n private get getAppFromAPI() {\n return this.getCachedSingleton<GetAppFromAPIUC>(GetAppFromAPIUC.type);\n }\n\n /**\n * Gets the app entity representing the app being mounted.\n */\n private get app() {\n return this.getCachedLocalComponent<AppEntity>(AppEntity.type);\n }\n\n /**\n * Gets the host handler entity for receiving messages from apps.\n */\n private get hostHandler() {\n return this.getCachedLocalComponent<HostHandlerEntity>(\n HostHandlerEntity.type\n );\n }\n\n /**\n * Gets the host dispatcher entity for sending messages to apps.\n */\n private get hostDispatcher() {\n return this.getCachedLocalComponent<HostDispatchEntity>(\n HostDispatchEntity.type\n );\n }\n\n /**\n * Helper method to find a specific version of the app.\n *\n * @param major - Major version number\n * @param minor - Minor version number\n * @returns The Version object or undefined if not found\n */\n private getAppVersion(major: number, minor: number): Version | undefined {\n if (!this.app) {\n return;\n }\n\n let appVersion = Version.GetLatestWithMajorMinor(\n this.app.versions,\n major,\n minor\n );\n\n if (!appVersion) {\n appVersion = Version.GetLatestWithMajor(this.app.versions, major);\n }\n\n if (!appVersion) {\n this.error(\n `Unable to find version ${major}.${minor}.X for App ${this.app.name}`\n );\n }\n\n return appVersion;\n }\n\n /**\n * Tracks script elements added to the document to enable cleanup.\n */\n private scriptElements: HTMLScriptElement[] = [];\n\n /**\n * Mounts the latest available version of the app.\n *\n * @returns A promise that resolves when the app is mounted\n */\n mountLatestVersion(): Promise<void> {\n if (!this.app) {\n this.error(\"Missing Components\");\n return Promise.reject();\n }\n\n const version = this.app.latestVersion;\n if (!version) {\n this.error(\"No Version\");\n return Promise.reject();\n }\n\n return this.mount(version.major, version.minor);\n }\n\n /**\n * Unmounts the app, removing it from the runtime environment.\n *\n * This removes script elements, cleans up global references,\n * and resets app state.\n */\n unmount = () => {\n if (!this.app) return;\n if (!this.app.mountedVersion) return;\n\n const versionID = formAppIDWithVersion(this.app, this.app.mountedVersion);\n (window as any)[versionID] = undefined;\n delete (window as any)[versionID];\n\n this.scriptElements.forEach((element) => {\n element.remove();\n });\n this.scriptElements = [];\n\n this.app.styles = [];\n this.app.appAssetFolderURL = undefined;\n this.app.mountedVersion = undefined;\n this.app.state = AppState.INIT;\n };\n\n /**\n * Mounts a specific version of the app.\n *\n * This method fetches the app from the API, loads scripts,\n * establishes communication with the app, and waits for the\n * app to be ready.\n *\n * @param majorVersion - The major version number\n * @param minorVersion - The minor version number\n * @returns A promise that resolves when the app is mounted\n */\n mount = (majorVersion: number, minorVersion: number): Promise<void> => {\n const fetchApp = this.getAppFromAPI;\n if (!fetchApp) {\n this.error(\"No Fetch App UC\");\n return Promise.reject();\n }\n\n const app = this.app;\n if (!app) {\n this.error(\"No App\");\n return Promise.reject();\n }\n\n const hostHandler = this.hostHandler;\n if (!hostHandler) {\n this.error(\"No Host Handler\");\n return Promise.reject();\n }\n\n const hostDispatcher = this.hostDispatcher;\n if (!hostDispatcher) {\n this.error(\"No Host Dispatcher\");\n return Promise.reject();\n }\n\n const version = this.getAppVersion(majorVersion, minorVersion);\n if (!version) {\n return Promise.reject(\n new Error(\n `Unable to find version ${majorVersion}.${minorVersion}.X for App ${app.name}`\n )\n );\n }\n\n this.log(\n `Initializing App ${app.name} [${app.id}] version ${version.displayString}`\n );\n\n if (app.mountedVersion) {\n if (Version.AreEqual(app.mountedVersion, version)) {\n return Promise.resolve();\n } else {\n this.unmount();\n }\n }\n\n app.state = AppState.LOADING;\n\n return new Promise<void>((resolve, reject) => {\n fetchApp\n .getApp(this.appObject.id, version.baseVersionString)\n .then((appDTO) => {\n app.appAssetFolderURL = appDTO.assetFolderURL;\n const { scripts, styles } = this.parseEndpoints(appDTO.entrypoints);\n app.styles = styles;\n return this.loadScripts(scripts, version);\n })\n .then((appInterface) => {\n const appHandler = appInterface.mount(hostHandler.handler);\n hostDispatcher.registerAppHandler(appHandler);\n return this.waitForAppIsReady(app, version);\n })\n .then(() => {\n app.mountedVersion = version;\n resolve();\n })\n .catch((e) => {\n app.state = AppState.ERROR;\n reject(e);\n });\n });\n };\n\n /**\n * Loads app scripts and retrieves the app interface.\n *\n * @param scripts - Array of script URLs to load\n * @param version - The app version\n * @returns A promise that resolves with the app interface\n */\n private loadScripts = (\n scripts: string[],\n version: Version\n ): Promise<VIVEDApp_3> => {\n const app = this.app;\n if (!app) {\n this.error(\"No app entity\");\n return Promise.reject();\n }\n\n let appInterface = this.getAppInterface(version);\n const versionID = formAppIDWithVersion(app, version);\n\n if (appInterface) {\n return Promise.resolve(appInterface);\n }\n\n return new Promise<VIVEDApp_3>((resolve, reject) => {\n const loaders = scripts.map((entryPoint) => {\n return this.loadScriptIntoDocument(entryPoint, versionID);\n });\n Promise.all(loaders)\n .then(() => {\n appInterface = this.getAppInterface(version);\n\n if (!appInterface) {\n reject(\n \"App is undefined for ID: \" +\n app.id +\n \". Make sure ID is correct in the 3 files in the app project.\"\n );\n } else {\n resolve(appInterface);\n }\n })\n .catch((e) => {\n reject(e);\n });\n });\n };\n\n /**\n * Loads a script into the document.\n *\n * @param scriptURL - URL of the script to load\n * @param appIDWithVersion - Versioned ID of the app\n * @returns A promise that resolves when the script is loaded\n */\n loadScriptIntoDocument = (\n scriptURL: string,\n appIDWithVersion: string\n ): Promise<void> => {\n return new Promise<void>((resolve, reject) => {\n const aScript = document.createElement(\"script\");\n\n aScript.onload = function onLoad() {\n resolve();\n };\n\n aScript.onerror = function onError(e) {\n reject(new Error(`Failed to add script to document`));\n };\n\n aScript.type = \"text/javascript\";\n aScript.src = scriptURL;\n aScript.className = appIDWithVersion;\n this.scriptElements.push(aScript);\n\n document.head.appendChild(aScript);\n });\n };\n\n /**\n * Gets the app interface for a specific version.\n *\n * @param version - The version to get the interface for\n * @returns The app interface or undefined if not found\n */\n getAppInterface = (version: Version): VIVEDApp_3 | undefined => {\n if (!this.app) return;\n\n const versionID = formAppIDWithVersion(this.app, version);\n\n let appInterface = (window as any)[versionID] as VIVEDApp_3;\n\n if (!appInterface) {\n appInterface = (window as any)[this.app.id] as VIVEDApp_3; // Old way of identifying apps\n }\n\n return appInterface;\n };\n\n /**\n * Parses app entrypoints into scripts and styles.\n *\n * @param endpoints - Array of endpoint URLs\n * @returns Object with separate arrays for scripts and styles\n */\n private parseEndpoints(endpoints: string[]): {\n scripts: string[];\n styles: string[];\n } {\n const scripts: string[] = [];\n const styles: string[] = [];\n\n endpoints.forEach((endpoint) => {\n if (endpoint.includes(\".js\")) {\n scripts.push(endpoint);\n } else if (endpoint.includes(\".css\")) {\n styles.push(endpoint);\n } else {\n this.warn(\"Unknown endpoint: \" + endpoint);\n }\n });\n\n return {\n scripts,\n styles\n };\n }\n\n /**\n * Waits for an app to report it's ready.\n *\n * This method handles special cases for apps that don't properly\n * report their ready state, as well as the normal case where\n * apps transition to the READY state.\n *\n * @param app - The app entity\n * @param appVersion - The app version\n * @returns A promise that resolves when the app is ready\n */\n waitForAppIsReady(app: AppEntity, appVersion: Version): Promise<void> {\n // Edge cases here\n if (\n app.id === \"app4e48fbaa815a4857821bf7569b003751\" &&\n appVersion.major === 1 &&\n appVersion.minor === 0\n ) {\n // Mark board app has a problem with version 1.0\n app.state = AppState.READY;\n return Promise.resolve();\n }\n\n if (\n app.id === \"appe860b51f49414e20ae7995dff4d9b152\" &&\n appVersion.major === 1 &&\n appVersion.minor <= 2\n ) {\n // Older versions of the text app do not report when ready\n app.state = AppState.READY;\n return Promise.resolve();\n }\n\n if (\n app.id === \"app41df8a36f628451d9f633f8a9bdf3edb\" &&\n appVersion.major === 1 &&\n appVersion.minor <= 1\n ) {\n // Older versions of the YouTube app do not report when ready\n app.state = AppState.READY;\n return Promise.resolve();\n }\n\n if (app.id === \"app448f8f293fbb493a9e233f113ce8b56a\") {\n // Asset Plugin\n app.state = AppState.READY;\n return Promise.resolve();\n }\n\n // Allows testing to not get hung up waiting for this\n if (app.id === \"APP_FOR_JEST_TEST\") {\n // Older versions of the YouTube app do not report when ready\n app.state = AppState.READY;\n return Promise.resolve();\n }\n\n return new Promise<void>((resolve) => {\n const appObserver = () => {\n if (app.state === AppState.READY) {\n app.removeChangeObserver(appObserver);\n resolve();\n }\n };\n app.addChangeObserver(appObserver);\n });\n }\n\n /**\n * Creates a new MounterUCImp instance.\n *\n * @param appObject - The app object to attach to\n */\n constructor(appObject: AppObject) {\n super(appObject, MounterUC.type);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"MounterUC.js","sourceRoot":"","sources":["../../../../../src/Apps/UCs/Mounters/MounterUC.ts"],"names":[],"mappings":"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","sourcesContent":["import {\r\n AppObject,\r\n AppObjectRepo,\r\n AppObjectUC,\r\n Version,\r\n VIVEDApp_3\r\n} from \"@vived/core\";\r\nimport { HostDispatchEntity } from \"../../../Dispatcher/Entities/HostDispatchEntity\";\r\nimport { HostHandlerEntity } from \"../../../Handler/Entities/HostHandler\";\r\nimport { GetAppFromAPIUC } from \"../../../VivedAPI/UCs/GetAppFromAPIUC\";\r\nimport { AppEntity, AppState } from \"../../Entities/AppEntity\";\r\nimport { formAppIDWithVersion } from \"../formAppIDWithVersion\";\r\n\r\n/**\r\n * Abstract base class for app mounting use cases.\r\n *\r\n * The MounterUC is responsible for loading, initializing, and managing app\r\n * lifecycle. It handles script loading, version management, and communication\r\n * setup between the host and app.\r\n *\r\n * @extends AppObjectUC from @vived/core\r\n */\r\nexport abstract class MounterUC extends AppObjectUC {\r\n static type = \"MounterUC\";\r\n\r\n /**\r\n * Mounts a specific version of the app.\r\n *\r\n * @param majorVersion - The major version number\r\n * @param minorVersion - The minor version number\r\n * @returns A promise that resolves when the app is mounted\r\n */\r\n abstract mount(majorVersion: number, minorVersion: number): Promise<void>;\r\n\r\n /**\r\n * Mounts the latest available version of the app.\r\n *\r\n * @returns A promise that resolves when the app is mounted\r\n */\r\n abstract mountLatestVersion(): Promise<void>;\r\n\r\n /**\r\n * Unmounts the app, removing it from the runtime environment.\r\n */\r\n abstract unmount(): void;\r\n\r\n /**\r\n * Loads a script into the document.\r\n *\r\n * @param scriptURL - URL of the script to load\r\n * @param appIDWithVersion - Versioned ID of the app\r\n * @returns A promise that resolves when the script is loaded\r\n */\r\n abstract loadScriptIntoDocument(\r\n scriptURL: string,\r\n appIDWithVersion: string\r\n ): Promise<void>; // Exposed for testing purposes\r\n\r\n /**\r\n * Gets the app interface for a specific version.\r\n *\r\n * @param version - The version to get the interface for\r\n * @returns The app interface or undefined if not found\r\n */\r\n abstract getAppInterface(version: Version): VIVEDApp_3 | undefined; // Exposed for test purposes\r\n\r\n /**\r\n * Retrieves the MounterUC component from an app object.\r\n *\r\n * @param appObject - The app object to get the component from\r\n * @returns The MounterUC component or undefined if not found\r\n */\r\n static get(appObject: AppObject) {\r\n return appObject.getComponent<MounterUC>(MounterUC.type);\r\n }\r\n\r\n /**\r\n * Retrieves the MounterUC component by app object ID.\r\n *\r\n * @param id - The ID of the app object\r\n * @param appObjects - The app object repository\r\n * @returns The MounterUC component or undefined if not found\r\n */\r\n static getById(id: string, appObjects: AppObjectRepo) {\r\n const ao = appObjects.get(id);\r\n return ao?.getComponent<MounterUC>(MounterUC.type);\r\n }\r\n}\r\n\r\n/**\r\n * Factory function to create a new MounterUC instance.\r\n *\r\n * @param appObject - The app object to attach the mounter to\r\n * @returns A new MounterUC instance\r\n */\r\nexport function makeMounterUC(appObject: AppObject): MounterUC {\r\n return new MounterUCImp(appObject);\r\n}\r\n\r\n/**\r\n * Concrete implementation of the MounterUC abstract class.\r\n *\r\n * This implementation provides the standard mounting behavior for loading\r\n * and initializing apps, handling script loading, and managing app lifecycle.\r\n */\r\nclass MounterUCImp extends MounterUC {\r\n /**\r\n * Gets the use case for retrieving apps from the API.\r\n */\r\n private get getAppFromAPI() {\r\n return this.getCachedSingleton<GetAppFromAPIUC>(GetAppFromAPIUC.type);\r\n }\r\n\r\n /**\r\n * Gets the app entity representing the app being mounted.\r\n */\r\n private get app() {\r\n return this.getCachedLocalComponent<AppEntity>(AppEntity.type);\r\n }\r\n\r\n /**\r\n * Gets the host handler entity for receiving messages from apps.\r\n */\r\n private get hostHandler() {\r\n return this.getCachedLocalComponent<HostHandlerEntity>(\r\n HostHandlerEntity.type\r\n );\r\n }\r\n\r\n /**\r\n * Gets the host dispatcher entity for sending messages to apps.\r\n */\r\n private get hostDispatcher() {\r\n return this.getCachedLocalComponent<HostDispatchEntity>(\r\n HostDispatchEntity.type\r\n );\r\n }\r\n\r\n /**\r\n * Helper method to find a specific version of the app.\r\n *\r\n * @param major - Major version number\r\n * @param minor - Minor version number\r\n * @returns The Version object or undefined if not found\r\n */\r\n private getAppVersion(major: number, minor: number): Version | undefined {\r\n if (!this.app) {\r\n return;\r\n }\r\n\r\n let appVersion = Version.GetLatestWithMajorMinor(\r\n this.app.versions,\r\n major,\r\n minor\r\n );\r\n\r\n if (!appVersion) {\r\n appVersion = Version.GetLatestWithMajor(this.app.versions, major);\r\n }\r\n\r\n if (!appVersion) {\r\n this.error(\r\n `Unable to find version ${major}.${minor}.X for App ${this.app.name}`\r\n );\r\n }\r\n\r\n return appVersion;\r\n }\r\n\r\n /**\r\n * Tracks script elements added to the document to enable cleanup.\r\n */\r\n private scriptElements: HTMLScriptElement[] = [];\r\n\r\n /**\r\n * Mounts the latest available version of the app.\r\n *\r\n * @returns A promise that resolves when the app is mounted\r\n */\r\n mountLatestVersion(): Promise<void> {\r\n if (!this.app) {\r\n this.error(\"Missing Components\");\r\n return Promise.reject();\r\n }\r\n\r\n const version = this.app.latestVersion;\r\n if (!version) {\r\n this.error(\"No Version\");\r\n return Promise.reject();\r\n }\r\n\r\n return this.mount(version.major, version.minor);\r\n }\r\n\r\n /**\r\n * Unmounts the app, removing it from the runtime environment.\r\n *\r\n * This removes script elements, cleans up global references,\r\n * and resets app state.\r\n */\r\n unmount = () => {\r\n if (!this.app) return;\r\n if (!this.app.mountedVersion) return;\r\n\r\n const versionID = formAppIDWithVersion(this.app, this.app.mountedVersion);\r\n (window as any)[versionID] = undefined;\r\n delete (window as any)[versionID];\r\n\r\n this.scriptElements.forEach((element) => {\r\n element.remove();\r\n });\r\n this.scriptElements = [];\r\n\r\n this.app.styles = [];\r\n this.app.appAssetFolderURL = undefined;\r\n this.app.mountedVersion = undefined;\r\n this.app.state = AppState.INIT;\r\n };\r\n\r\n /**\r\n * Mounts a specific version of the app.\r\n *\r\n * This method fetches the app from the API, loads scripts,\r\n * establishes communication with the app, and waits for the\r\n * app to be ready.\r\n *\r\n * @param majorVersion - The major version number\r\n * @param minorVersion - The minor version number\r\n * @returns A promise that resolves when the app is mounted\r\n */\r\n mount = (majorVersion: number, minorVersion: number): Promise<void> => {\r\n const fetchApp = this.getAppFromAPI;\r\n if (!fetchApp) {\r\n this.error(\"No Fetch App UC\");\r\n return Promise.reject();\r\n }\r\n\r\n const app = this.app;\r\n if (!app) {\r\n this.error(\"No App\");\r\n return Promise.reject();\r\n }\r\n\r\n const hostHandler = this.hostHandler;\r\n if (!hostHandler) {\r\n this.error(\"No Host Handler\");\r\n return Promise.reject();\r\n }\r\n\r\n const hostDispatcher = this.hostDispatcher;\r\n if (!hostDispatcher) {\r\n this.error(\"No Host Dispatcher\");\r\n return Promise.reject();\r\n }\r\n\r\n const version = this.getAppVersion(majorVersion, minorVersion);\r\n if (!version) {\r\n return Promise.reject(\r\n new Error(\r\n `Unable to find version ${majorVersion}.${minorVersion}.X for App ${app.name}`\r\n )\r\n );\r\n }\r\n\r\n this.log(\r\n `Initializing App ${app.name} [${app.id}] version ${version.displayString}`\r\n );\r\n\r\n if (app.mountedVersion) {\r\n if (Version.AreEqual(app.mountedVersion, version)) {\r\n return Promise.resolve();\r\n } else {\r\n this.unmount();\r\n }\r\n }\r\n\r\n app.state = AppState.LOADING;\r\n\r\n return new Promise<void>((resolve, reject) => {\r\n fetchApp\r\n .getApp(this.appObject.id, version.baseVersionString)\r\n .then((appDTO) => {\r\n app.appAssetFolderURL = appDTO.assetFolderURL;\r\n const { scripts, styles } = this.parseEndpoints(appDTO.entrypoints);\r\n app.styles = styles;\r\n return this.loadScripts(scripts, version);\r\n })\r\n .then((appInterface) => {\r\n const appHandler = appInterface.mount(hostHandler.handler);\r\n hostDispatcher.registerAppHandler(appHandler);\r\n return this.waitForAppIsReady(app, version);\r\n })\r\n .then(() => {\r\n app.mountedVersion = version;\r\n resolve();\r\n })\r\n .catch((e) => {\r\n app.state = AppState.ERROR;\r\n reject(e);\r\n });\r\n });\r\n };\r\n\r\n /**\r\n * Loads app scripts and retrieves the app interface.\r\n *\r\n * @param scripts - Array of script URLs to load\r\n * @param version - The app version\r\n * @returns A promise that resolves with the app interface\r\n */\r\n private loadScripts = (\r\n scripts: string[],\r\n version: Version\r\n ): Promise<VIVEDApp_3> => {\r\n const app = this.app;\r\n if (!app) {\r\n this.error(\"No app entity\");\r\n return Promise.reject();\r\n }\r\n\r\n let appInterface = this.getAppInterface(version);\r\n const versionID = formAppIDWithVersion(app, version);\r\n\r\n if (appInterface) {\r\n return Promise.resolve(appInterface);\r\n }\r\n\r\n return new Promise<VIVEDApp_3>((resolve, reject) => {\r\n const loaders = scripts.map((entryPoint) => {\r\n return this.loadScriptIntoDocument(entryPoint, versionID);\r\n });\r\n Promise.all(loaders)\r\n .then(() => {\r\n appInterface = this.getAppInterface(version);\r\n\r\n if (!appInterface) {\r\n reject(\r\n \"App is undefined for ID: \" +\r\n app.id +\r\n \". Make sure ID is correct in the 3 files in the app project.\"\r\n );\r\n } else {\r\n resolve(appInterface);\r\n }\r\n })\r\n .catch((e) => {\r\n reject(e);\r\n });\r\n });\r\n };\r\n\r\n /**\r\n * Loads a script into the document.\r\n *\r\n * @param scriptURL - URL of the script to load\r\n * @param appIDWithVersion - Versioned ID of the app\r\n * @returns A promise that resolves when the script is loaded\r\n */\r\n loadScriptIntoDocument = (\r\n scriptURL: string,\r\n appIDWithVersion: string\r\n ): Promise<void> => {\r\n return new Promise<void>((resolve, reject) => {\r\n const aScript = document.createElement(\"script\");\r\n\r\n aScript.onload = function onLoad() {\r\n resolve();\r\n };\r\n\r\n aScript.onerror = function onError(e) {\r\n reject(new Error(`Failed to add script to document`));\r\n };\r\n\r\n aScript.type = \"text/javascript\";\r\n aScript.src = scriptURL;\r\n aScript.className = appIDWithVersion;\r\n this.scriptElements.push(aScript);\r\n\r\n document.head.appendChild(aScript);\r\n });\r\n };\r\n\r\n /**\r\n * Gets the app interface for a specific version.\r\n *\r\n * @param version - The version to get the interface for\r\n * @returns The app interface or undefined if not found\r\n */\r\n getAppInterface = (version: Version): VIVEDApp_3 | undefined => {\r\n if (!this.app) return;\r\n\r\n const versionID = formAppIDWithVersion(this.app, version);\r\n\r\n let appInterface = (window as any)[versionID] as VIVEDApp_3;\r\n\r\n if (!appInterface) {\r\n appInterface = (window as any)[this.app.id] as VIVEDApp_3; // Old way of identifying apps\r\n }\r\n\r\n return appInterface;\r\n };\r\n\r\n /**\r\n * Parses app entrypoints into scripts and styles.\r\n *\r\n * @param endpoints - Array of endpoint URLs\r\n * @returns Object with separate arrays for scripts and styles\r\n */\r\n private parseEndpoints(endpoints: string[]): {\r\n scripts: string[];\r\n styles: string[];\r\n } {\r\n const scripts: string[] = [];\r\n const styles: string[] = [];\r\n\r\n endpoints.forEach((endpoint) => {\r\n if (endpoint.includes(\".js\")) {\r\n scripts.push(endpoint);\r\n } else if (endpoint.includes(\".css\")) {\r\n styles.push(endpoint);\r\n } else {\r\n this.warn(\"Unknown endpoint: \" + endpoint);\r\n }\r\n });\r\n\r\n return {\r\n scripts,\r\n styles\r\n };\r\n }\r\n\r\n /**\r\n * Waits for an app to report it's ready.\r\n *\r\n * This method handles special cases for apps that don't properly\r\n * report their ready state, as well as the normal case where\r\n * apps transition to the READY state.\r\n *\r\n * @param app - The app entity\r\n * @param appVersion - The app version\r\n * @returns A promise that resolves when the app is ready\r\n */\r\n waitForAppIsReady(app: AppEntity, appVersion: Version): Promise<void> {\r\n // Edge cases here\r\n if (\r\n app.id === \"app4e48fbaa815a4857821bf7569b003751\" &&\r\n appVersion.major === 1 &&\r\n appVersion.minor === 0\r\n ) {\r\n // Mark board app has a problem with version 1.0\r\n app.state = AppState.READY;\r\n return Promise.resolve();\r\n }\r\n\r\n if (\r\n app.id === \"appe860b51f49414e20ae7995dff4d9b152\" &&\r\n appVersion.major === 1 &&\r\n appVersion.minor <= 2\r\n ) {\r\n // Older versions of the text app do not report when ready\r\n app.state = AppState.READY;\r\n return Promise.resolve();\r\n }\r\n\r\n if (\r\n app.id === \"app41df8a36f628451d9f633f8a9bdf3edb\" &&\r\n appVersion.major === 1 &&\r\n appVersion.minor <= 1\r\n ) {\r\n // Older versions of the YouTube app do not report when ready\r\n app.state = AppState.READY;\r\n return Promise.resolve();\r\n }\r\n\r\n if (app.id === \"app448f8f293fbb493a9e233f113ce8b56a\") {\r\n // Asset Plugin\r\n app.state = AppState.READY;\r\n return Promise.resolve();\r\n }\r\n\r\n // Allows testing to not get hung up waiting for this\r\n if (app.id === \"APP_FOR_JEST_TEST\") {\r\n // Older versions of the YouTube app do not report when ready\r\n app.state = AppState.READY;\r\n return Promise.resolve();\r\n }\r\n\r\n return new Promise<void>((resolve) => {\r\n const appObserver = () => {\r\n if (app.state === AppState.READY) {\r\n app.removeChangeObserver(appObserver);\r\n resolve();\r\n }\r\n };\r\n app.addChangeObserver(appObserver);\r\n appObserver();\r\n });\r\n }\r\n\r\n /**\r\n * Creates a new MounterUCImp instance.\r\n *\r\n * @param appObject - The app object to attach to\r\n */\r\n constructor(appObject: AppObject) {\r\n super(appObject, MounterUC.type);\r\n }\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SandboxMounterUC.js","sourceRoot":"","sources":["../../../../../src/Apps/UCs/Mounters/SandboxMounterUC.ts"],"names":[],"mappings":"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","sourcesContent":["import { AppObject, Version, VIVEDApp_3 } from \"@vived/core\";\nimport {\n AppSandboxEntity,\n SandboxState\n} from \"../../../AppSandbox/Entities/AppSandboxEntity\";\nimport { HostDispatchEntity } from \"../../../Dispatcher/Entities/HostDispatchEntity\";\nimport { HostHandlerEntity } from \"../../../Handler/Entities/HostHandler\";\nimport { AppEntity, AppState } from \"../../Entities/AppEntity\";\nimport { MounterUC } from \"./MounterUC\";\n\n/**\n * Factory function to create a sandbox mounter for apps.\n *\n * The sandbox mounter is designed to mount apps in a sandboxed environment,\n * providing isolation and security for app execution.\n *\n * @param appObject - The app object to attach the mounter to\n * @returns A new SandboxMounterUC instance\n */\nexport function makeSandboxMounter(appObject: AppObject): MounterUC {\n return new SandboxMounterUC(appObject);\n}\n\n/**\n * Implementation of MounterUC for mounting apps in a sandbox environment.\n *\n * The SandboxMounterUC is responsible for safely loading and initializing apps\n * in a sandboxed context, handling app lifecycle events, and managing the\n * communication between the host and app.\n */\nclass SandboxMounterUC extends MounterUC {\n /**\n * Gets the app entity representing the app being mounted\n */\n private get appEntity() {\n return this.getCachedLocalComponent<AppEntity>(AppEntity.type);\n }\n\n /**\n * Gets the host dispatcher entity for sending messages to apps\n */\n private get hostDispatcher() {\n return this.getCachedLocalComponent<HostDispatchEntity>(\n HostDispatchEntity.type\n );\n }\n\n /**\n * Gets the host handler entity for receiving messages from apps\n */\n private get hostHandler() {\n return this.getCachedLocalComponent<HostHandlerEntity>(\n HostHandlerEntity.type\n );\n }\n\n /**\n * Gets the sandbox entity that manages the sandbox state\n */\n private get sandbox() {\n return this.getCachedSingleton<AppSandboxEntity>(AppSandboxEntity.type);\n }\n\n /**\n * Mounts the latest version of the app.\n *\n * @returns A promise that resolves when the app is mounted or rejects if an error occurs\n */\n mountLatestVersion = (): Promise<void> => {\n if (!this.appEntity) {\n this.error(\"Missing Components\");\n return Promise.reject();\n }\n\n const version = this.appEntity.latestVersion;\n if (!version) {\n this.error(\"No Version\");\n return Promise.reject();\n }\n\n return this.mount(version.major, version.minor);\n };\n\n /**\n * Mounts a specific version of the app.\n *\n * @param majorVersion - The major version number\n * @param minorVersion - The minor version number\n * @returns A promise that resolves when the app is mounted or rejects if an error occurs\n */\n mount = (majorVersion: number, minorVersion: number): Promise<void> => {\n if (\n !this.appEntity ||\n !this.hostDispatcher ||\n !this.hostHandler ||\n !this.sandbox\n ) {\n this.error(\"Missing Components\");\n return Promise.reject();\n }\n\n const version = this.getAppVersion(majorVersion, minorVersion);\n if (!version) {\n this.error(\"No Version\");\n return Promise.reject();\n }\n\n const appInterface = this.getAppInterface(version);\n if (!appInterface) {\n this.error(\"No App Interface\");\n return Promise.reject();\n }\n\n const appHandler = appInterface.mount(this.hostHandler.handler);\n this.hostDispatcher.registerAppHandler(appHandler);\n\n const app = this.appEntity;\n const sandbox = this.sandbox;\n\n return new Promise((resolve) => {\n const waitForReady = () => {\n if (app.state === AppState.READY) {\n sandbox.state = SandboxState.MOUNTED;\n app.removeChangeObserver(waitForReady);\n resolve();\n }\n };\n\n app.addChangeObserver(waitForReady);\n });\n };\n\n /**\n * Helper method to find a specific version of the app.\n *\n * @param major - Major version number\n * @param minor - Minor version number\n * @returns The Version object or undefined if not found\n */\n private getAppVersion(major: number, minor: number): Version | undefined {\n if (!this.appEntity) {\n return;\n }\n\n let appVersion = Version.GetLatestWithMajorMinor(\n this.appEntity.versions,\n major,\n minor\n );\n\n if (!appVersion) {\n appVersion = Version.GetLatestWithMajor(this.appEntity.versions, major);\n }\n\n if (!appVersion) {\n this.error(\n `Unable to find version ${major}.${minor}.X for App ${this.appEntity.name}`\n );\n }\n\n return appVersion;\n }\n\n /**\n * Unmounts the app from the sandbox.\n */\n unmount = (): void => {\n if (!this.sandbox || !this.hostDispatcher) {\n this.error(\"Missing Components\");\n return;\n }\n\n this.hostDispatcher.clearAppHandler();\n\n this.sandbox.state = SandboxState.UNMOUNTED;\n };\n\n /**\n * Loads a script into the document.\n * This is a placeholder implementation for sandbox mounting.\n *\n * @param scriptURL - URL of the script to load\n * @param appIDWithVersion - Versioned ID of the app\n * @returns A promise that resolves when the script is loaded\n */\n loadScriptIntoDocument(\n scriptURL: string,\n appIDWithVersion: string\n ): Promise<void> {\n // Unused during dev\n return Promise.resolve();\n }\n\n /**\n * Gets the app interface for a specific version.\n *\n * @param version - The version to get the interface for\n * @returns The app interface or undefined if not found\n */\n getAppInterface(version: Version): VIVEDApp_3 | undefined {\n const modifiedVersion = version.baseVersionString.split(\".\").join(\"_\");\n const idWithVersion = `${this.appObject.id}-${modifiedVersion}`;\n const appInterface = (window as any)[idWithVersion] as VIVEDApp_3;\n if (!appInterface) {\n this.appObjects.submitFatal(\n \"LocalMounterUC\",\n \"Unable to find App Interface\"\n );\n return;\n }\n\n return appInterface;\n }\n\n /**\n * Creates a new SandboxMounterUC instance.\n *\n * @param appObject - The app object to attach to\n */\n constructor(appObject: AppObject) {\n super(appObject, MounterUC.type);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"SandboxMounterUC.js","sourceRoot":"","sources":["../../../../../src/Apps/UCs/Mounters/SandboxMounterUC.ts"],"names":[],"mappings":";;AAmBA,gDAEC;AArBD,sCAA6D;AAC7D,oFAGuD;AACvD,wFAAqF;AACrF,uEAA0E;AAC1E,wDAA+D;AAC/D,2CAAwC;AAExC;;;;;;;;GAQG;AACH,SAAgB,kBAAkB,CAAC,SAAoB;IACrD,OAAO,IAAI,gBAAgB,CAAC,SAAS,CAAC,CAAC;AACzC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,gBAAiB,SAAQ,qBAAS;IACtC;;OAEG;IACH,IAAY,SAAS;QACnB,OAAO,IAAI,CAAC,uBAAuB,CAAY,qBAAS,CAAC,IAAI,CAAC,CAAC;IACjE,CAAC;IAED;;OAEG;IACH,IAAY,cAAc;QACxB,OAAO,IAAI,CAAC,uBAAuB,CACjC,uCAAkB,CAAC,IAAI,CACxB,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,IAAY,WAAW;QACrB,OAAO,IAAI,CAAC,uBAAuB,CACjC,+BAAiB,CAAC,IAAI,CACvB,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,IAAY,OAAO;QACjB,OAAO,IAAI,CAAC,kBAAkB,CAAmB,mCAAgB,CAAC,IAAI,CAAC,CAAC;IAC1E,CAAC;IAwED;;;;;;OAMG;IACK,aAAa,CAAC,KAAa,EAAE,KAAa;QAChD,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,OAAO;QACT,CAAC;QAED,IAAI,UAAU,GAAG,cAAO,CAAC,uBAAuB,CAC9C,IAAI,CAAC,SAAS,CAAC,QAAQ,EACvB,KAAK,EACL,KAAK,CACN,CAAC;QAEF,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,UAAU,GAAG,cAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC1E,CAAC;QAED,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,IAAI,CAAC,KAAK,CACR,0BAA0B,KAAK,IAAI,KAAK,cAAc,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAC5E,CAAC;QACJ,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;IAgBD;;;;;;;OAOG;IACH,sBAAsB,CACpB,SAAiB,EACjB,gBAAwB;QAExB,oBAAoB;QACpB,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAED;;;;;OAKG;IACH,eAAe,CAAC,OAAgB;QAC9B,MAAM,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACvE,MAAM,aAAa,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,eAAe,EAAE,CAAC;QAChE,MAAM,YAAY,GAAI,MAAc,CAAC,aAAa,CAAe,CAAC;QAClE,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,IAAI,CAAC,UAAU,CAAC,WAAW,CACzB,gBAAgB,EAChB,8BAA8B,CAC/B,CAAC;YACF,OAAO;QACT,CAAC;QAED,OAAO,YAAY,CAAC;IACtB,CAAC;IAED;;;;OAIG;IACH,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,qBAAS,CAAC,IAAI,CAAC,CAAC;QA9JnC;;;;WAIG;QACH,uBAAkB,GAAG,GAAkB,EAAE;YACvC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;gBACpB,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;gBACjC,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC;YAC1B,CAAC;YAED,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC;YAC7C,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;gBACzB,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC;YAC1B,CAAC;YAED,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QAClD,CAAC,CAAC;QAEF;;;;;;WAMG;QACH,UAAK,GAAG,CAAC,YAAoB,EAAE,YAAoB,EAAiB,EAAE;YACpE,IACE,CAAC,IAAI,CAAC,SAAS;gBACf,CAAC,IAAI,CAAC,cAAc;gBACpB,CAAC,IAAI,CAAC,WAAW;gBACjB,CAAC,IAAI,CAAC,OAAO,EACb,CAAC;gBACD,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;gBACjC,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC;YAC1B,CAAC;YAED,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;YAC/D,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;gBACzB,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC;YAC1B,CAAC;YAED,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YACnD,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;gBAC/B,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC;YAC1B,CAAC;YAED,MAAM,UAAU,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAChE,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;YAEnD,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC;YAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;YAE7B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;gBAC7B,MAAM,YAAY,GAAG,GAAG,EAAE;oBACxB,IAAI,GAAG,CAAC,KAAK,KAAK,oBAAQ,CAAC,KAAK,EAAE,CAAC;wBACjC,OAAO,CAAC,KAAK,GAAG,+BAAY,CAAC,OAAO,CAAC;wBACrC,GAAG,CAAC,oBAAoB,CAAC,YAAY,CAAC,CAAC;wBACvC,OAAO,EAAE,CAAC;oBACZ,CAAC;gBACH,CAAC,CAAC;gBAEF,GAAG,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;gBACpC,YAAY,EAAE,CAAC;YACjB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QAiCF;;WAEG;QACH,YAAO,GAAG,GAAS,EAAE;YACnB,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;gBAC1C,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;gBACjC,OAAO;YACT,CAAC;YAED,IAAI,CAAC,cAAc,CAAC,eAAe,EAAE,CAAC;YAEtC,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,+BAAY,CAAC,SAAS,CAAC;QAC9C,CAAC,CAAC;IA8CF,CAAC;CACF","sourcesContent":["import { AppObject, Version, VIVEDApp_3 } from \"@vived/core\";\r\nimport {\r\n AppSandboxEntity,\r\n SandboxState\r\n} from \"../../../AppSandbox/Entities/AppSandboxEntity\";\r\nimport { HostDispatchEntity } from \"../../../Dispatcher/Entities/HostDispatchEntity\";\r\nimport { HostHandlerEntity } from \"../../../Handler/Entities/HostHandler\";\r\nimport { AppEntity, AppState } from \"../../Entities/AppEntity\";\r\nimport { MounterUC } from \"./MounterUC\";\r\n\r\n/**\r\n * Factory function to create a sandbox mounter for apps.\r\n *\r\n * The sandbox mounter is designed to mount apps in a sandboxed environment,\r\n * providing isolation and security for app execution.\r\n *\r\n * @param appObject - The app object to attach the mounter to\r\n * @returns A new SandboxMounterUC instance\r\n */\r\nexport function makeSandboxMounter(appObject: AppObject): MounterUC {\r\n return new SandboxMounterUC(appObject);\r\n}\r\n\r\n/**\r\n * Implementation of MounterUC for mounting apps in a sandbox environment.\r\n *\r\n * The SandboxMounterUC is responsible for safely loading and initializing apps\r\n * in a sandboxed context, handling app lifecycle events, and managing the\r\n * communication between the host and app.\r\n */\r\nclass SandboxMounterUC extends MounterUC {\r\n /**\r\n * Gets the app entity representing the app being mounted\r\n */\r\n private get appEntity() {\r\n return this.getCachedLocalComponent<AppEntity>(AppEntity.type);\r\n }\r\n\r\n /**\r\n * Gets the host dispatcher entity for sending messages to apps\r\n */\r\n private get hostDispatcher() {\r\n return this.getCachedLocalComponent<HostDispatchEntity>(\r\n HostDispatchEntity.type\r\n );\r\n }\r\n\r\n /**\r\n * Gets the host handler entity for receiving messages from apps\r\n */\r\n private get hostHandler() {\r\n return this.getCachedLocalComponent<HostHandlerEntity>(\r\n HostHandlerEntity.type\r\n );\r\n }\r\n\r\n /**\r\n * Gets the sandbox entity that manages the sandbox state\r\n */\r\n private get sandbox() {\r\n return this.getCachedSingleton<AppSandboxEntity>(AppSandboxEntity.type);\r\n }\r\n\r\n /**\r\n * Mounts the latest version of the app.\r\n *\r\n * @returns A promise that resolves when the app is mounted or rejects if an error occurs\r\n */\r\n mountLatestVersion = (): Promise<void> => {\r\n if (!this.appEntity) {\r\n this.error(\"Missing Components\");\r\n return Promise.reject();\r\n }\r\n\r\n const version = this.appEntity.latestVersion;\r\n if (!version) {\r\n this.error(\"No Version\");\r\n return Promise.reject();\r\n }\r\n\r\n return this.mount(version.major, version.minor);\r\n };\r\n\r\n /**\r\n * Mounts a specific version of the app.\r\n *\r\n * @param majorVersion - The major version number\r\n * @param minorVersion - The minor version number\r\n * @returns A promise that resolves when the app is mounted or rejects if an error occurs\r\n */\r\n mount = (majorVersion: number, minorVersion: number): Promise<void> => {\r\n if (\r\n !this.appEntity ||\r\n !this.hostDispatcher ||\r\n !this.hostHandler ||\r\n !this.sandbox\r\n ) {\r\n this.error(\"Missing Components\");\r\n return Promise.reject();\r\n }\r\n\r\n const version = this.getAppVersion(majorVersion, minorVersion);\r\n if (!version) {\r\n this.error(\"No Version\");\r\n return Promise.reject();\r\n }\r\n\r\n const appInterface = this.getAppInterface(version);\r\n if (!appInterface) {\r\n this.error(\"No App Interface\");\r\n return Promise.reject();\r\n }\r\n\r\n const appHandler = appInterface.mount(this.hostHandler.handler);\r\n this.hostDispatcher.registerAppHandler(appHandler);\r\n\r\n const app = this.appEntity;\r\n const sandbox = this.sandbox;\r\n\r\n return new Promise((resolve) => {\r\n const waitForReady = () => {\r\n if (app.state === AppState.READY) {\r\n sandbox.state = SandboxState.MOUNTED;\r\n app.removeChangeObserver(waitForReady);\r\n resolve();\r\n }\r\n };\r\n\r\n app.addChangeObserver(waitForReady);\r\n waitForReady();\r\n });\r\n };\r\n\r\n /**\r\n * Helper method to find a specific version of the app.\r\n *\r\n * @param major - Major version number\r\n * @param minor - Minor version number\r\n * @returns The Version object or undefined if not found\r\n */\r\n private getAppVersion(major: number, minor: number): Version | undefined {\r\n if (!this.appEntity) {\r\n return;\r\n }\r\n\r\n let appVersion = Version.GetLatestWithMajorMinor(\r\n this.appEntity.versions,\r\n major,\r\n minor\r\n );\r\n\r\n if (!appVersion) {\r\n appVersion = Version.GetLatestWithMajor(this.appEntity.versions, major);\r\n }\r\n\r\n if (!appVersion) {\r\n this.error(\r\n `Unable to find version ${major}.${minor}.X for App ${this.appEntity.name}`\r\n );\r\n }\r\n\r\n return appVersion;\r\n }\r\n\r\n /**\r\n * Unmounts the app from the sandbox.\r\n */\r\n unmount = (): void => {\r\n if (!this.sandbox || !this.hostDispatcher) {\r\n this.error(\"Missing Components\");\r\n return;\r\n }\r\n\r\n this.hostDispatcher.clearAppHandler();\r\n\r\n this.sandbox.state = SandboxState.UNMOUNTED;\r\n };\r\n\r\n /**\r\n * Loads a script into the document.\r\n * This is a placeholder implementation for sandbox mounting.\r\n *\r\n * @param scriptURL - URL of the script to load\r\n * @param appIDWithVersion - Versioned ID of the app\r\n * @returns A promise that resolves when the script is loaded\r\n */\r\n loadScriptIntoDocument(\r\n scriptURL: string,\r\n appIDWithVersion: string\r\n ): Promise<void> {\r\n // Unused during dev\r\n return Promise.resolve();\r\n }\r\n\r\n /**\r\n * Gets the app interface for a specific version.\r\n *\r\n * @param version - The version to get the interface for\r\n * @returns The app interface or undefined if not found\r\n */\r\n getAppInterface(version: Version): VIVEDApp_3 | undefined {\r\n const modifiedVersion = version.baseVersionString.split(\".\").join(\"_\");\r\n const idWithVersion = `${this.appObject.id}-${modifiedVersion}`;\r\n const appInterface = (window as any)[idWithVersion] as VIVEDApp_3;\r\n if (!appInterface) {\r\n this.appObjects.submitFatal(\r\n \"LocalMounterUC\",\r\n \"Unable to find App Interface\"\r\n );\r\n return;\r\n }\r\n\r\n return appInterface;\r\n }\r\n\r\n /**\r\n * Creates a new SandboxMounterUC instance.\r\n *\r\n * @param appObject - The app object to attach to\r\n */\r\n constructor(appObject: AppObject) {\r\n super(appObject, MounterUC.type);\r\n }\r\n}\r\n"]}
|
|
@@ -15,6 +15,13 @@ function makeAssetPluginEntity(appObject) {
|
|
|
15
15
|
return new AssetPluginEntityImp(appObject);
|
|
16
16
|
}
|
|
17
17
|
class AssetPluginEntityImp extends AssetPluginEntity {
|
|
18
|
+
get version() {
|
|
19
|
+
return this._version;
|
|
20
|
+
}
|
|
21
|
+
set version(val) {
|
|
22
|
+
this._version = val;
|
|
23
|
+
this._app.versions.push(val);
|
|
24
|
+
}
|
|
18
25
|
get app() {
|
|
19
26
|
return this._app;
|
|
20
27
|
}
|
|
@@ -26,7 +33,7 @@ class AssetPluginEntityImp extends AssetPluginEntity {
|
|
|
26
33
|
}
|
|
27
34
|
constructor(appObject) {
|
|
28
35
|
super(appObject, AssetPluginEntity.type);
|
|
29
|
-
this.
|
|
36
|
+
this._version = new core_1.Version(0, 0, 0, core_1.VersionStage.RELEASED);
|
|
30
37
|
this.memoizedShowApp = new core_1.MemoizedBoolean(false, this.notifyOnChange);
|
|
31
38
|
this.callback = (modelId, dataId) => {
|
|
32
39
|
this.warn("Callback has not been injected");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AssetPluginEntity.js","sourceRoot":"","sources":["../../../../src/AssetPlugin/Entities/AssetPluginEntity.ts"],"names":[],"mappings":";;;AA6BA,sDAEC;AA/BD,sCAQqB;AACrB,qCAAsD;AAEtD,MAAsB,iBAAkB,SAAQ,sBAAe;IAG7D,MAAM,CAAC,GAAG,CAAC,UAAyB;QAClC,OAAO,IAAA,4BAAqB,EAC1B,iBAAiB,CAAC,IAAI,EACtB,UAAU,CACX,CAAC;IACJ,CAAC;;AARH,8CAgBC;AAfQ,sBAAI,GAAG,mBAAmB,CAAC;AAiBpC,SAAgB,qBAAqB,CAAC,SAAoB;IACxD,OAAO,IAAI,oBAAoB,CAAC,SAAS,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,oBAAqB,SAAQ,iBAAiB;
|
|
1
|
+
{"version":3,"file":"AssetPluginEntity.js","sourceRoot":"","sources":["../../../../src/AssetPlugin/Entities/AssetPluginEntity.ts"],"names":[],"mappings":";;;AA6BA,sDAEC;AA/BD,sCAQqB;AACrB,qCAAsD;AAEtD,MAAsB,iBAAkB,SAAQ,sBAAe;IAG7D,MAAM,CAAC,GAAG,CAAC,UAAyB;QAClC,OAAO,IAAA,4BAAqB,EAC1B,iBAAiB,CAAC,IAAI,EACtB,UAAU,CACX,CAAC;IACJ,CAAC;;AARH,8CAgBC;AAfQ,sBAAI,GAAG,mBAAmB,CAAC;AAiBpC,SAAgB,qBAAqB,CAAC,SAAoB;IACxD,OAAO,IAAI,oBAAoB,CAAC,SAAS,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,oBAAqB,SAAQ,iBAAiB;IAElD,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IACD,IAAI,OAAO,CAAC,GAAY;QACtB,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC;QACpB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;IAKD,IAAI,GAAG;QACL,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAGD,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;IAClC,CAAC;IACD,IAAI,IAAI,CAAC,GAAY;QACnB,IAAI,CAAC,eAAe,CAAC,GAAG,GAAG,GAAG,CAAC;IACjC,CAAC;IAMD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC;QA7BnC,aAAQ,GAAY,IAAI,cAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,mBAAY,CAAC,QAAQ,CAAC,CAAC;QAgBhE,oBAAe,GAAG,IAAI,sBAAe,CAAC,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QAQ1E,aAAQ,GAAG,CAAC,OAAe,EAAE,MAAc,EAAQ,EAAE;YACnD,IAAI,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAC9C,CAAC,CAAC;QAKA,IAAI,CAAC,IAAI,GAAG,IAAA,oBAAa,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAEjD,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;CACF","sourcesContent":["import {\n AppObject,\n AppObjectEntity,\n AppObjectRepo,\n getSingletonComponent,\n MemoizedBoolean,\n Version,\n VersionStage\n} from \"@vived/core\";\nimport { AppEntity, makeAppEntity } from \"../../Apps\";\n\nexport abstract class AssetPluginEntity extends AppObjectEntity {\n static type = \"AssetPluginEntity\";\n\n static get(appObjects: AppObjectRepo) {\n return getSingletonComponent<AssetPluginEntity>(\n AssetPluginEntity.type,\n appObjects\n );\n }\n\n abstract container: HTMLElement | undefined;\n abstract get app(): AppEntity;\n abstract get show(): boolean;\n abstract set show(val: boolean);\n abstract version: Version;\n abstract callback: (modelId: string, dataId: string) => void;\n}\n\nexport function makeAssetPluginEntity(appObject: AppObject): AssetPluginEntity {\n return new AssetPluginEntityImp(appObject);\n}\n\nclass AssetPluginEntityImp extends AssetPluginEntity {\n private _version: Version = new Version(0, 0, 0, VersionStage.RELEASED);\n get version(): Version {\n return this._version;\n }\n set version(val: Version) {\n this._version = val;\n this._app.versions.push(val);\n }\n\n container: HTMLElement | undefined;\n\n private _app: AppEntity;\n get app(): AppEntity {\n return this._app;\n }\n\n private memoizedShowApp = new MemoizedBoolean(false, this.notifyOnChange);\n get show() {\n return this.memoizedShowApp.val;\n }\n set show(val: boolean) {\n this.memoizedShowApp.val = val;\n }\n\n callback = (modelId: string, dataId: string): void => {\n this.warn(\"Callback has not been injected\");\n };\n\n constructor(appObject: AppObject) {\n super(appObject, AssetPluginEntity.type);\n\n this._app = makeAppEntity(this.appObject);\n this._app.addChangeObserver(this.notifyOnChange);\n\n this.appObjects.registerSingleton(this);\n }\n}\n"]}
|
|
@@ -9,6 +9,8 @@ const Handler_1 = require("../../Handler");
|
|
|
9
9
|
const Entities_1 = require("../Entities");
|
|
10
10
|
const PM_1 = require("../PM");
|
|
11
11
|
const UCs_1 = require("../UCs");
|
|
12
|
+
const assetPluginAppID = "app448f8f293fbb493a9e233f113ce8b56a";
|
|
13
|
+
const assetPluginVersion = "1.2.0";
|
|
12
14
|
/**
|
|
13
15
|
* Factory responsible for setting up the AssetPlugin domain components.
|
|
14
16
|
* This factory initializes all entities, use cases, and presentation models
|
|
@@ -25,7 +27,7 @@ class AssetPluginFeatureFactory extends core_1.DomainFactory {
|
|
|
25
27
|
*/
|
|
26
28
|
setupEntities() {
|
|
27
29
|
// Initialize entities
|
|
28
|
-
(0, Entities_1.makeAssetPluginEntity)(this.appObject);
|
|
30
|
+
this.assetPlugin = (0, Entities_1.makeAssetPluginEntity)(this.appObject);
|
|
29
31
|
(0, Handler_1.makeHostHandlerEntity)(this.appObject);
|
|
30
32
|
(0, Dispatcher_1.makeHostDispatchEntity)(this.appObject);
|
|
31
33
|
}
|
|
@@ -56,12 +58,23 @@ class AssetPluginFeatureFactory extends core_1.DomainFactory {
|
|
|
56
58
|
* Performs any final setup operations after all components are initialized
|
|
57
59
|
*/
|
|
58
60
|
finalSetup() {
|
|
59
|
-
|
|
61
|
+
if (!this.assetPlugin) {
|
|
62
|
+
this.error("AssetPlugin entity not initialized");
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
this.assetPlugin.version = core_1.Version.FromString(assetPluginVersion);
|
|
66
|
+
const repo = Apps_1.AppRepoEntity.get(this.appObjects);
|
|
67
|
+
if (repo) {
|
|
68
|
+
repo.add(this.assetPlugin.app);
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
this.error("Unable to find app repo. Make sure it is setup before setting up the Asset Plugin");
|
|
72
|
+
}
|
|
60
73
|
}
|
|
61
74
|
}
|
|
62
75
|
exports.AssetPluginFeatureFactory = AssetPluginFeatureFactory;
|
|
63
76
|
function makeAssetPluginFeatureFactory(appObjects) {
|
|
64
|
-
const ao = appObjects.getOrCreate(
|
|
77
|
+
const ao = appObjects.getOrCreate(assetPluginAppID);
|
|
65
78
|
return new AssetPluginFeatureFactory(ao);
|
|
66
79
|
}
|
|
67
80
|
//# sourceMappingURL=AssetPluginFeatureFactory.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AssetPluginFeatureFactory.js","sourceRoot":"","sources":["../../../../src/AssetPlugin/Factories/AssetPluginFeatureFactory.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"AssetPluginFeatureFactory.js","sourceRoot":"","sources":["../../../../src/AssetPlugin/Factories/AssetPluginFeatureFactory.ts"],"names":[],"mappings":";;;AA+FA,sEAKC;AApGD,sCAA+E;AAC/E,qCAA0D;AAC1D,iDAK0B;AAC1B,2CAKuB;AACvB,0CAAuE;AACvE,8BAA0C;AAC1C,gCAA2D;AAE3D,MAAM,gBAAgB,GAAG,qCAAqC,CAAC;AAC/D,MAAM,kBAAkB,GAAG,OAAO,CAAC;AAEnC;;;;GAIG;AACH,MAAa,yBAA0B,SAAQ,oBAAa;IAM1D,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,CAAC,CAAC;QANnB,+BAA+B;QACtB,gBAAW,GAAG,2BAA2B,CAAC;IAMnD,CAAC;IAED;;OAEG;IACH,aAAa;QACX,sBAAsB;QACtB,IAAI,CAAC,WAAW,GAAG,IAAA,gCAAqB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzD,IAAA,+BAAqB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtC,IAAA,mCAAsB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,uBAAuB;QACvB,IAAA,oBAAa,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC9B,IAAA,uCAAiC,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAElD,oBAAoB;QACpB,IAAA,8CAAiC,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAClD,IAAA,kCAAqB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtC,IAAA,qCAAwB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAEzC,iBAAiB;QACjB,IAAA,sCAA4B,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7C,IAAA,gDAAsC,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACvD,IAAA,sCAA4B,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC/C,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,mCAAmC;QACnC,IAAA,sBAAiB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,UAAU;QACR,IAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACxB,IAAI,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;YACjD,OAAO;QACR,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,OAAO,GAAG,cAAO,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC;QAElE,MAAM,IAAI,GAAG,oBAAa,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAChD,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACjC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,KAAK,CACR,mFAAmF,CACpF,CAAC;QACJ,CAAC;IACD,CAAC;CACF;AAnED,8DAmEC;AAED,SAAgB,6BAA6B,CAC3C,UAAyB;IAEzB,MAAM,EAAE,GAAG,UAAU,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;IACpD,OAAO,IAAI,yBAAyB,CAAC,EAAE,CAAC,CAAC;AAC3C,CAAC","sourcesContent":["import { AppObject, AppObjectRepo, DomainFactory, Version } from \"@vived/core\";\r\nimport { AppRepoEntity, makeMounterUC } from \"../../Apps\";\r\nimport {\r\n\tmakeDispatchDisposeAppUC,\r\n\tmakeDispatchStartBrowseChannelsUC,\r\n\tmakeDispatchStopAppUC,\r\n\tmakeHostDispatchEntity\r\n} from \"../../Dispatcher\";\r\nimport {\r\n\tmakeCloseAssetSystemPluginUC,\r\n\tmakeGetAssetFolderURLHandler,\r\n\tmakeHostHandlerEntity,\r\n\tmakeRegisterExternalStyleSheetsHandler\r\n} from \"../../Handler\";\r\nimport { AssetPluginEntity, makeAssetPluginEntity } from \"../Entities\";\r\nimport { makeAssetPluginPM } from \"../PM\";\r\nimport { makeSandboxAssetPluginContainerUC } from \"../UCs\";\r\n\r\nconst assetPluginAppID = \"app448f8f293fbb493a9e233f113ce8b56a\";\r\nconst assetPluginVersion = \"1.2.0\";\r\n\r\n/**\r\n * Factory responsible for setting up the AssetPlugin domain components.\r\n * This factory initializes all entities, use cases, and presentation models\r\n * required for the AssetPlugin functionality.\r\n */\r\nexport class AssetPluginFeatureFactory extends DomainFactory {\r\n // Unique name for this factory\r\n readonly factoryName = \"AssetPluginFeatureFactory\";\r\n\r\n\tprivate assetPlugin?: AssetPluginEntity\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject);\r\n }\r\n\r\n /**\r\n * Sets up all entities required for the AssetPlugin system\r\n */\r\n setupEntities(): void {\r\n // Initialize entities\r\n this.assetPlugin = makeAssetPluginEntity(this.appObject);\r\n makeHostHandlerEntity(this.appObject);\r\n makeHostDispatchEntity(this.appObject);\r\n }\r\n\r\n /**\r\n * Sets up all use cases for the AssetPlugin system\r\n */\r\n setupUCs(): void {\r\n // Initialize use cases\r\n makeMounterUC(this.appObject);\r\n makeSandboxAssetPluginContainerUC(this.appObject);\r\n\r\n // Setup dispatchers\r\n makeDispatchStartBrowseChannelsUC(this.appObject);\r\n makeDispatchStopAppUC(this.appObject);\r\n makeDispatchDisposeAppUC(this.appObject);\r\n\r\n // Setup handlers\r\n makeGetAssetFolderURLHandler(this.appObject);\r\n makeRegisterExternalStyleSheetsHandler(this.appObject);\r\n makeCloseAssetSystemPluginUC(this.appObject);\r\n }\r\n\r\n /**\r\n * Sets up all presentation managers for the AssetPlugin system\r\n */\r\n setupPMs(): void {\r\n // Initialize presentation managers\r\n makeAssetPluginPM(this.appObject);\r\n }\r\n\r\n /**\r\n * Performs any final setup operations after all components are initialized\r\n */\r\n finalSetup(): void {\r\n if(!this.assetPlugin) {\r\n\t\t\tthis.error(\"AssetPlugin entity not initialized\");\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.assetPlugin.version = Version.FromString(assetPluginVersion);\r\n\r\n\t\tconst repo = AppRepoEntity.get(this.appObjects);\r\n if (repo) {\r\n repo.add(this.assetPlugin.app);\r\n } else {\r\n this.error(\r\n \"Unable to find app repo. Make sure it is setup before setting up the Asset Plugin\"\r\n );\r\n }\r\n }\r\n}\r\n\r\nexport function makeAssetPluginFeatureFactory(\r\n appObjects: AppObjectRepo\r\n): AssetPluginFeatureFactory {\r\n const ao = appObjects.getOrCreate(assetPluginAppID);\r\n return new AssetPluginFeatureFactory(ao);\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MounterUC.js","sourceRoot":"","sources":["../../../../../src/Apps/UCs/Mounters/MounterUC.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n AppObject,\n AppObjectRepo,\n AppObjectUC,\n Version,\n VIVEDApp_3\n} from \"@vived/core\";\nimport { HostDispatchEntity } from \"../../../Dispatcher/Entities/HostDispatchEntity\";\nimport { HostHandlerEntity } from \"../../../Handler/Entities/HostHandler\";\nimport { GetAppFromAPIUC } from \"../../../VivedAPI/UCs/GetAppFromAPIUC\";\nimport { AppEntity, AppState } from \"../../Entities/AppEntity\";\nimport { formAppIDWithVersion } from \"../formAppIDWithVersion\";\n\n/**\n * Abstract base class for app mounting use cases.\n *\n * The MounterUC is responsible for loading, initializing, and managing app\n * lifecycle. It handles script loading, version management, and communication\n * setup between the host and app.\n *\n * @extends AppObjectUC from @vived/core\n */\nexport abstract class MounterUC extends AppObjectUC {\n static type = \"MounterUC\";\n\n /**\n * Mounts a specific version of the app.\n *\n * @param majorVersion - The major version number\n * @param minorVersion - The minor version number\n * @returns A promise that resolves when the app is mounted\n */\n abstract mount(majorVersion: number, minorVersion: number): Promise<void>;\n\n /**\n * Mounts the latest available version of the app.\n *\n * @returns A promise that resolves when the app is mounted\n */\n abstract mountLatestVersion(): Promise<void>;\n\n /**\n * Unmounts the app, removing it from the runtime environment.\n */\n abstract unmount(): void;\n\n /**\n * Loads a script into the document.\n *\n * @param scriptURL - URL of the script to load\n * @param appIDWithVersion - Versioned ID of the app\n * @returns A promise that resolves when the script is loaded\n */\n abstract loadScriptIntoDocument(\n scriptURL: string,\n appIDWithVersion: string\n ): Promise<void>; // Exposed for testing purposes\n\n /**\n * Gets the app interface for a specific version.\n *\n * @param version - The version to get the interface for\n * @returns The app interface or undefined if not found\n */\n abstract getAppInterface(version: Version): VIVEDApp_3 | undefined; // Exposed for test purposes\n\n /**\n * Retrieves the MounterUC component from an app object.\n *\n * @param appObject - The app object to get the component from\n * @returns The MounterUC component or undefined if not found\n */\n static get(appObject: AppObject) {\n return appObject.getComponent<MounterUC>(MounterUC.type);\n }\n\n /**\n * Retrieves the MounterUC component by app object ID.\n *\n * @param id - The ID of the app object\n * @param appObjects - The app object repository\n * @returns The MounterUC component or undefined if not found\n */\n static getById(id: string, appObjects: AppObjectRepo) {\n const ao = appObjects.get(id);\n return ao?.getComponent<MounterUC>(MounterUC.type);\n }\n}\n\n/**\n * Factory function to create a new MounterUC instance.\n *\n * @param appObject - The app object to attach the mounter to\n * @returns A new MounterUC instance\n */\nexport function makeMounterUC(appObject: AppObject): MounterUC {\n return new MounterUCImp(appObject);\n}\n\n/**\n * Concrete implementation of the MounterUC abstract class.\n *\n * This implementation provides the standard mounting behavior for loading\n * and initializing apps, handling script loading, and managing app lifecycle.\n */\nclass MounterUCImp extends MounterUC {\n /**\n * Gets the use case for retrieving apps from the API.\n */\n private get getAppFromAPI() {\n return this.getCachedSingleton<GetAppFromAPIUC>(GetAppFromAPIUC.type);\n }\n\n /**\n * Gets the app entity representing the app being mounted.\n */\n private get app() {\n return this.getCachedLocalComponent<AppEntity>(AppEntity.type);\n }\n\n /**\n * Gets the host handler entity for receiving messages from apps.\n */\n private get hostHandler() {\n return this.getCachedLocalComponent<HostHandlerEntity>(\n HostHandlerEntity.type\n );\n }\n\n /**\n * Gets the host dispatcher entity for sending messages to apps.\n */\n private get hostDispatcher() {\n return this.getCachedLocalComponent<HostDispatchEntity>(\n HostDispatchEntity.type\n );\n }\n\n /**\n * Helper method to find a specific version of the app.\n *\n * @param major - Major version number\n * @param minor - Minor version number\n * @returns The Version object or undefined if not found\n */\n private getAppVersion(major: number, minor: number): Version | undefined {\n if (!this.app) {\n return;\n }\n\n let appVersion = Version.GetLatestWithMajorMinor(\n this.app.versions,\n major,\n minor\n );\n\n if (!appVersion) {\n appVersion = Version.GetLatestWithMajor(this.app.versions, major);\n }\n\n if (!appVersion) {\n this.error(\n `Unable to find version ${major}.${minor}.X for App ${this.app.name}`\n );\n }\n\n return appVersion;\n }\n\n /**\n * Tracks script elements added to the document to enable cleanup.\n */\n private scriptElements: HTMLScriptElement[] = [];\n\n /**\n * Mounts the latest available version of the app.\n *\n * @returns A promise that resolves when the app is mounted\n */\n mountLatestVersion(): Promise<void> {\n if (!this.app) {\n this.error(\"Missing Components\");\n return Promise.reject();\n }\n\n const version = this.app.latestVersion;\n if (!version) {\n this.error(\"No Version\");\n return Promise.reject();\n }\n\n return this.mount(version.major, version.minor);\n }\n\n /**\n * Unmounts the app, removing it from the runtime environment.\n *\n * This removes script elements, cleans up global references,\n * and resets app state.\n */\n unmount = () => {\n if (!this.app) return;\n if (!this.app.mountedVersion) return;\n\n const versionID = formAppIDWithVersion(this.app, this.app.mountedVersion);\n (window as any)[versionID] = undefined;\n delete (window as any)[versionID];\n\n this.scriptElements.forEach((element) => {\n element.remove();\n });\n this.scriptElements = [];\n\n this.app.styles = [];\n this.app.appAssetFolderURL = undefined;\n this.app.mountedVersion = undefined;\n this.app.state = AppState.INIT;\n };\n\n /**\n * Mounts a specific version of the app.\n *\n * This method fetches the app from the API, loads scripts,\n * establishes communication with the app, and waits for the\n * app to be ready.\n *\n * @param majorVersion - The major version number\n * @param minorVersion - The minor version number\n * @returns A promise that resolves when the app is mounted\n */\n mount = (majorVersion: number, minorVersion: number): Promise<void> => {\n const fetchApp = this.getAppFromAPI;\n if (!fetchApp) {\n this.error(\"No Fetch App UC\");\n return Promise.reject();\n }\n\n const app = this.app;\n if (!app) {\n this.error(\"No App\");\n return Promise.reject();\n }\n\n const hostHandler = this.hostHandler;\n if (!hostHandler) {\n this.error(\"No Host Handler\");\n return Promise.reject();\n }\n\n const hostDispatcher = this.hostDispatcher;\n if (!hostDispatcher) {\n this.error(\"No Host Dispatcher\");\n return Promise.reject();\n }\n\n const version = this.getAppVersion(majorVersion, minorVersion);\n if (!version) {\n return Promise.reject(\n new Error(\n `Unable to find version ${majorVersion}.${minorVersion}.X for App ${app.name}`\n )\n );\n }\n\n this.log(\n `Initializing App ${app.name} [${app.id}] version ${version.displayString}`\n );\n\n if (app.mountedVersion) {\n if (Version.AreEqual(app.mountedVersion, version)) {\n return Promise.resolve();\n } else {\n this.unmount();\n }\n }\n\n app.state = AppState.LOADING;\n\n return new Promise<void>((resolve, reject) => {\n fetchApp\n .getApp(this.appObject.id, version.baseVersionString)\n .then((appDTO) => {\n app.appAssetFolderURL = appDTO.assetFolderURL;\n const { scripts, styles } = this.parseEndpoints(appDTO.entrypoints);\n app.styles = styles;\n return this.loadScripts(scripts, version);\n })\n .then((appInterface) => {\n const appHandler = appInterface.mount(hostHandler.handler);\n hostDispatcher.registerAppHandler(appHandler);\n return this.waitForAppIsReady(app, version);\n })\n .then(() => {\n app.mountedVersion = version;\n resolve();\n })\n .catch((e) => {\n app.state = AppState.ERROR;\n reject(e);\n });\n });\n };\n\n /**\n * Loads app scripts and retrieves the app interface.\n *\n * @param scripts - Array of script URLs to load\n * @param version - The app version\n * @returns A promise that resolves with the app interface\n */\n private loadScripts = (\n scripts: string[],\n version: Version\n ): Promise<VIVEDApp_3> => {\n const app = this.app;\n if (!app) {\n this.error(\"No app entity\");\n return Promise.reject();\n }\n\n let appInterface = this.getAppInterface(version);\n const versionID = formAppIDWithVersion(app, version);\n\n if (appInterface) {\n return Promise.resolve(appInterface);\n }\n\n return new Promise<VIVEDApp_3>((resolve, reject) => {\n const loaders = scripts.map((entryPoint) => {\n return this.loadScriptIntoDocument(entryPoint, versionID);\n });\n Promise.all(loaders)\n .then(() => {\n appInterface = this.getAppInterface(version);\n\n if (!appInterface) {\n reject(\n \"App is undefined for ID: \" +\n app.id +\n \". Make sure ID is correct in the 3 files in the app project.\"\n );\n } else {\n resolve(appInterface);\n }\n })\n .catch((e) => {\n reject(e);\n });\n });\n };\n\n /**\n * Loads a script into the document.\n *\n * @param scriptURL - URL of the script to load\n * @param appIDWithVersion - Versioned ID of the app\n * @returns A promise that resolves when the script is loaded\n */\n loadScriptIntoDocument = (\n scriptURL: string,\n appIDWithVersion: string\n ): Promise<void> => {\n return new Promise<void>((resolve, reject) => {\n const aScript = document.createElement(\"script\");\n\n aScript.onload = function onLoad() {\n resolve();\n };\n\n aScript.onerror = function onError(e) {\n reject(new Error(`Failed to add script to document`));\n };\n\n aScript.type = \"text/javascript\";\n aScript.src = scriptURL;\n aScript.className = appIDWithVersion;\n this.scriptElements.push(aScript);\n\n document.head.appendChild(aScript);\n });\n };\n\n /**\n * Gets the app interface for a specific version.\n *\n * @param version - The version to get the interface for\n * @returns The app interface or undefined if not found\n */\n getAppInterface = (version: Version): VIVEDApp_3 | undefined => {\n if (!this.app) return;\n\n const versionID = formAppIDWithVersion(this.app, version);\n\n let appInterface = (window as any)[versionID] as VIVEDApp_3;\n\n if (!appInterface) {\n appInterface = (window as any)[this.app.id] as VIVEDApp_3; // Old way of identifying apps\n }\n\n return appInterface;\n };\n\n /**\n * Parses app entrypoints into scripts and styles.\n *\n * @param endpoints - Array of endpoint URLs\n * @returns Object with separate arrays for scripts and styles\n */\n private parseEndpoints(endpoints: string[]): {\n scripts: string[];\n styles: string[];\n } {\n const scripts: string[] = [];\n const styles: string[] = [];\n\n endpoints.forEach((endpoint) => {\n if (endpoint.includes(\".js\")) {\n scripts.push(endpoint);\n } else if (endpoint.includes(\".css\")) {\n styles.push(endpoint);\n } else {\n this.warn(\"Unknown endpoint: \" + endpoint);\n }\n });\n\n return {\n scripts,\n styles\n };\n }\n\n /**\n * Waits for an app to report it's ready.\n *\n * This method handles special cases for apps that don't properly\n * report their ready state, as well as the normal case where\n * apps transition to the READY state.\n *\n * @param app - The app entity\n * @param appVersion - The app version\n * @returns A promise that resolves when the app is ready\n */\n waitForAppIsReady(app: AppEntity, appVersion: Version): Promise<void> {\n // Edge cases here\n if (\n app.id === \"app4e48fbaa815a4857821bf7569b003751\" &&\n appVersion.major === 1 &&\n appVersion.minor === 0\n ) {\n // Mark board app has a problem with version 1.0\n app.state = AppState.READY;\n return Promise.resolve();\n }\n\n if (\n app.id === \"appe860b51f49414e20ae7995dff4d9b152\" &&\n appVersion.major === 1 &&\n appVersion.minor <= 2\n ) {\n // Older versions of the text app do not report when ready\n app.state = AppState.READY;\n return Promise.resolve();\n }\n\n if (\n app.id === \"app41df8a36f628451d9f633f8a9bdf3edb\" &&\n appVersion.major === 1 &&\n appVersion.minor <= 1\n ) {\n // Older versions of the YouTube app do not report when ready\n app.state = AppState.READY;\n return Promise.resolve();\n }\n\n if (app.id === \"app448f8f293fbb493a9e233f113ce8b56a\") {\n // Asset Plugin\n app.state = AppState.READY;\n return Promise.resolve();\n }\n\n // Allows testing to not get hung up waiting for this\n if (app.id === \"APP_FOR_JEST_TEST\") {\n // Older versions of the YouTube app do not report when ready\n app.state = AppState.READY;\n return Promise.resolve();\n }\n\n return new Promise<void>((resolve) => {\n const appObserver = () => {\n if (app.state === AppState.READY) {\n app.removeChangeObserver(appObserver);\n resolve();\n }\n };\n app.addChangeObserver(appObserver);\n });\n }\n\n /**\n * Creates a new MounterUCImp instance.\n *\n * @param appObject - The app object to attach to\n */\n constructor(appObject: AppObject) {\n super(appObject, MounterUC.type);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"MounterUC.js","sourceRoot":"","sources":["../../../../../src/Apps/UCs/Mounters/MounterUC.ts"],"names":[],"mappings":"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","sourcesContent":["import {\r\n AppObject,\r\n AppObjectRepo,\r\n AppObjectUC,\r\n Version,\r\n VIVEDApp_3\r\n} from \"@vived/core\";\r\nimport { HostDispatchEntity } from \"../../../Dispatcher/Entities/HostDispatchEntity\";\r\nimport { HostHandlerEntity } from \"../../../Handler/Entities/HostHandler\";\r\nimport { GetAppFromAPIUC } from \"../../../VivedAPI/UCs/GetAppFromAPIUC\";\r\nimport { AppEntity, AppState } from \"../../Entities/AppEntity\";\r\nimport { formAppIDWithVersion } from \"../formAppIDWithVersion\";\r\n\r\n/**\r\n * Abstract base class for app mounting use cases.\r\n *\r\n * The MounterUC is responsible for loading, initializing, and managing app\r\n * lifecycle. It handles script loading, version management, and communication\r\n * setup between the host and app.\r\n *\r\n * @extends AppObjectUC from @vived/core\r\n */\r\nexport abstract class MounterUC extends AppObjectUC {\r\n static type = \"MounterUC\";\r\n\r\n /**\r\n * Mounts a specific version of the app.\r\n *\r\n * @param majorVersion - The major version number\r\n * @param minorVersion - The minor version number\r\n * @returns A promise that resolves when the app is mounted\r\n */\r\n abstract mount(majorVersion: number, minorVersion: number): Promise<void>;\r\n\r\n /**\r\n * Mounts the latest available version of the app.\r\n *\r\n * @returns A promise that resolves when the app is mounted\r\n */\r\n abstract mountLatestVersion(): Promise<void>;\r\n\r\n /**\r\n * Unmounts the app, removing it from the runtime environment.\r\n */\r\n abstract unmount(): void;\r\n\r\n /**\r\n * Loads a script into the document.\r\n *\r\n * @param scriptURL - URL of the script to load\r\n * @param appIDWithVersion - Versioned ID of the app\r\n * @returns A promise that resolves when the script is loaded\r\n */\r\n abstract loadScriptIntoDocument(\r\n scriptURL: string,\r\n appIDWithVersion: string\r\n ): Promise<void>; // Exposed for testing purposes\r\n\r\n /**\r\n * Gets the app interface for a specific version.\r\n *\r\n * @param version - The version to get the interface for\r\n * @returns The app interface or undefined if not found\r\n */\r\n abstract getAppInterface(version: Version): VIVEDApp_3 | undefined; // Exposed for test purposes\r\n\r\n /**\r\n * Retrieves the MounterUC component from an app object.\r\n *\r\n * @param appObject - The app object to get the component from\r\n * @returns The MounterUC component or undefined if not found\r\n */\r\n static get(appObject: AppObject) {\r\n return appObject.getComponent<MounterUC>(MounterUC.type);\r\n }\r\n\r\n /**\r\n * Retrieves the MounterUC component by app object ID.\r\n *\r\n * @param id - The ID of the app object\r\n * @param appObjects - The app object repository\r\n * @returns The MounterUC component or undefined if not found\r\n */\r\n static getById(id: string, appObjects: AppObjectRepo) {\r\n const ao = appObjects.get(id);\r\n return ao?.getComponent<MounterUC>(MounterUC.type);\r\n }\r\n}\r\n\r\n/**\r\n * Factory function to create a new MounterUC instance.\r\n *\r\n * @param appObject - The app object to attach the mounter to\r\n * @returns A new MounterUC instance\r\n */\r\nexport function makeMounterUC(appObject: AppObject): MounterUC {\r\n return new MounterUCImp(appObject);\r\n}\r\n\r\n/**\r\n * Concrete implementation of the MounterUC abstract class.\r\n *\r\n * This implementation provides the standard mounting behavior for loading\r\n * and initializing apps, handling script loading, and managing app lifecycle.\r\n */\r\nclass MounterUCImp extends MounterUC {\r\n /**\r\n * Gets the use case for retrieving apps from the API.\r\n */\r\n private get getAppFromAPI() {\r\n return this.getCachedSingleton<GetAppFromAPIUC>(GetAppFromAPIUC.type);\r\n }\r\n\r\n /**\r\n * Gets the app entity representing the app being mounted.\r\n */\r\n private get app() {\r\n return this.getCachedLocalComponent<AppEntity>(AppEntity.type);\r\n }\r\n\r\n /**\r\n * Gets the host handler entity for receiving messages from apps.\r\n */\r\n private get hostHandler() {\r\n return this.getCachedLocalComponent<HostHandlerEntity>(\r\n HostHandlerEntity.type\r\n );\r\n }\r\n\r\n /**\r\n * Gets the host dispatcher entity for sending messages to apps.\r\n */\r\n private get hostDispatcher() {\r\n return this.getCachedLocalComponent<HostDispatchEntity>(\r\n HostDispatchEntity.type\r\n );\r\n }\r\n\r\n /**\r\n * Helper method to find a specific version of the app.\r\n *\r\n * @param major - Major version number\r\n * @param minor - Minor version number\r\n * @returns The Version object or undefined if not found\r\n */\r\n private getAppVersion(major: number, minor: number): Version | undefined {\r\n if (!this.app) {\r\n return;\r\n }\r\n\r\n let appVersion = Version.GetLatestWithMajorMinor(\r\n this.app.versions,\r\n major,\r\n minor\r\n );\r\n\r\n if (!appVersion) {\r\n appVersion = Version.GetLatestWithMajor(this.app.versions, major);\r\n }\r\n\r\n if (!appVersion) {\r\n this.error(\r\n `Unable to find version ${major}.${minor}.X for App ${this.app.name}`\r\n );\r\n }\r\n\r\n return appVersion;\r\n }\r\n\r\n /**\r\n * Tracks script elements added to the document to enable cleanup.\r\n */\r\n private scriptElements: HTMLScriptElement[] = [];\r\n\r\n /**\r\n * Mounts the latest available version of the app.\r\n *\r\n * @returns A promise that resolves when the app is mounted\r\n */\r\n mountLatestVersion(): Promise<void> {\r\n if (!this.app) {\r\n this.error(\"Missing Components\");\r\n return Promise.reject();\r\n }\r\n\r\n const version = this.app.latestVersion;\r\n if (!version) {\r\n this.error(\"No Version\");\r\n return Promise.reject();\r\n }\r\n\r\n return this.mount(version.major, version.minor);\r\n }\r\n\r\n /**\r\n * Unmounts the app, removing it from the runtime environment.\r\n *\r\n * This removes script elements, cleans up global references,\r\n * and resets app state.\r\n */\r\n unmount = () => {\r\n if (!this.app) return;\r\n if (!this.app.mountedVersion) return;\r\n\r\n const versionID = formAppIDWithVersion(this.app, this.app.mountedVersion);\r\n (window as any)[versionID] = undefined;\r\n delete (window as any)[versionID];\r\n\r\n this.scriptElements.forEach((element) => {\r\n element.remove();\r\n });\r\n this.scriptElements = [];\r\n\r\n this.app.styles = [];\r\n this.app.appAssetFolderURL = undefined;\r\n this.app.mountedVersion = undefined;\r\n this.app.state = AppState.INIT;\r\n };\r\n\r\n /**\r\n * Mounts a specific version of the app.\r\n *\r\n * This method fetches the app from the API, loads scripts,\r\n * establishes communication with the app, and waits for the\r\n * app to be ready.\r\n *\r\n * @param majorVersion - The major version number\r\n * @param minorVersion - The minor version number\r\n * @returns A promise that resolves when the app is mounted\r\n */\r\n mount = (majorVersion: number, minorVersion: number): Promise<void> => {\r\n const fetchApp = this.getAppFromAPI;\r\n if (!fetchApp) {\r\n this.error(\"No Fetch App UC\");\r\n return Promise.reject();\r\n }\r\n\r\n const app = this.app;\r\n if (!app) {\r\n this.error(\"No App\");\r\n return Promise.reject();\r\n }\r\n\r\n const hostHandler = this.hostHandler;\r\n if (!hostHandler) {\r\n this.error(\"No Host Handler\");\r\n return Promise.reject();\r\n }\r\n\r\n const hostDispatcher = this.hostDispatcher;\r\n if (!hostDispatcher) {\r\n this.error(\"No Host Dispatcher\");\r\n return Promise.reject();\r\n }\r\n\r\n const version = this.getAppVersion(majorVersion, minorVersion);\r\n if (!version) {\r\n return Promise.reject(\r\n new Error(\r\n `Unable to find version ${majorVersion}.${minorVersion}.X for App ${app.name}`\r\n )\r\n );\r\n }\r\n\r\n this.log(\r\n `Initializing App ${app.name} [${app.id}] version ${version.displayString}`\r\n );\r\n\r\n if (app.mountedVersion) {\r\n if (Version.AreEqual(app.mountedVersion, version)) {\r\n return Promise.resolve();\r\n } else {\r\n this.unmount();\r\n }\r\n }\r\n\r\n app.state = AppState.LOADING;\r\n\r\n return new Promise<void>((resolve, reject) => {\r\n fetchApp\r\n .getApp(this.appObject.id, version.baseVersionString)\r\n .then((appDTO) => {\r\n app.appAssetFolderURL = appDTO.assetFolderURL;\r\n const { scripts, styles } = this.parseEndpoints(appDTO.entrypoints);\r\n app.styles = styles;\r\n return this.loadScripts(scripts, version);\r\n })\r\n .then((appInterface) => {\r\n const appHandler = appInterface.mount(hostHandler.handler);\r\n hostDispatcher.registerAppHandler(appHandler);\r\n return this.waitForAppIsReady(app, version);\r\n })\r\n .then(() => {\r\n app.mountedVersion = version;\r\n resolve();\r\n })\r\n .catch((e) => {\r\n app.state = AppState.ERROR;\r\n reject(e);\r\n });\r\n });\r\n };\r\n\r\n /**\r\n * Loads app scripts and retrieves the app interface.\r\n *\r\n * @param scripts - Array of script URLs to load\r\n * @param version - The app version\r\n * @returns A promise that resolves with the app interface\r\n */\r\n private loadScripts = (\r\n scripts: string[],\r\n version: Version\r\n ): Promise<VIVEDApp_3> => {\r\n const app = this.app;\r\n if (!app) {\r\n this.error(\"No app entity\");\r\n return Promise.reject();\r\n }\r\n\r\n let appInterface = this.getAppInterface(version);\r\n const versionID = formAppIDWithVersion(app, version);\r\n\r\n if (appInterface) {\r\n return Promise.resolve(appInterface);\r\n }\r\n\r\n return new Promise<VIVEDApp_3>((resolve, reject) => {\r\n const loaders = scripts.map((entryPoint) => {\r\n return this.loadScriptIntoDocument(entryPoint, versionID);\r\n });\r\n Promise.all(loaders)\r\n .then(() => {\r\n appInterface = this.getAppInterface(version);\r\n\r\n if (!appInterface) {\r\n reject(\r\n \"App is undefined for ID: \" +\r\n app.id +\r\n \". Make sure ID is correct in the 3 files in the app project.\"\r\n );\r\n } else {\r\n resolve(appInterface);\r\n }\r\n })\r\n .catch((e) => {\r\n reject(e);\r\n });\r\n });\r\n };\r\n\r\n /**\r\n * Loads a script into the document.\r\n *\r\n * @param scriptURL - URL of the script to load\r\n * @param appIDWithVersion - Versioned ID of the app\r\n * @returns A promise that resolves when the script is loaded\r\n */\r\n loadScriptIntoDocument = (\r\n scriptURL: string,\r\n appIDWithVersion: string\r\n ): Promise<void> => {\r\n return new Promise<void>((resolve, reject) => {\r\n const aScript = document.createElement(\"script\");\r\n\r\n aScript.onload = function onLoad() {\r\n resolve();\r\n };\r\n\r\n aScript.onerror = function onError(e) {\r\n reject(new Error(`Failed to add script to document`));\r\n };\r\n\r\n aScript.type = \"text/javascript\";\r\n aScript.src = scriptURL;\r\n aScript.className = appIDWithVersion;\r\n this.scriptElements.push(aScript);\r\n\r\n document.head.appendChild(aScript);\r\n });\r\n };\r\n\r\n /**\r\n * Gets the app interface for a specific version.\r\n *\r\n * @param version - The version to get the interface for\r\n * @returns The app interface or undefined if not found\r\n */\r\n getAppInterface = (version: Version): VIVEDApp_3 | undefined => {\r\n if (!this.app) return;\r\n\r\n const versionID = formAppIDWithVersion(this.app, version);\r\n\r\n let appInterface = (window as any)[versionID] as VIVEDApp_3;\r\n\r\n if (!appInterface) {\r\n appInterface = (window as any)[this.app.id] as VIVEDApp_3; // Old way of identifying apps\r\n }\r\n\r\n return appInterface;\r\n };\r\n\r\n /**\r\n * Parses app entrypoints into scripts and styles.\r\n *\r\n * @param endpoints - Array of endpoint URLs\r\n * @returns Object with separate arrays for scripts and styles\r\n */\r\n private parseEndpoints(endpoints: string[]): {\r\n scripts: string[];\r\n styles: string[];\r\n } {\r\n const scripts: string[] = [];\r\n const styles: string[] = [];\r\n\r\n endpoints.forEach((endpoint) => {\r\n if (endpoint.includes(\".js\")) {\r\n scripts.push(endpoint);\r\n } else if (endpoint.includes(\".css\")) {\r\n styles.push(endpoint);\r\n } else {\r\n this.warn(\"Unknown endpoint: \" + endpoint);\r\n }\r\n });\r\n\r\n return {\r\n scripts,\r\n styles\r\n };\r\n }\r\n\r\n /**\r\n * Waits for an app to report it's ready.\r\n *\r\n * This method handles special cases for apps that don't properly\r\n * report their ready state, as well as the normal case where\r\n * apps transition to the READY state.\r\n *\r\n * @param app - The app entity\r\n * @param appVersion - The app version\r\n * @returns A promise that resolves when the app is ready\r\n */\r\n waitForAppIsReady(app: AppEntity, appVersion: Version): Promise<void> {\r\n // Edge cases here\r\n if (\r\n app.id === \"app4e48fbaa815a4857821bf7569b003751\" &&\r\n appVersion.major === 1 &&\r\n appVersion.minor === 0\r\n ) {\r\n // Mark board app has a problem with version 1.0\r\n app.state = AppState.READY;\r\n return Promise.resolve();\r\n }\r\n\r\n if (\r\n app.id === \"appe860b51f49414e20ae7995dff4d9b152\" &&\r\n appVersion.major === 1 &&\r\n appVersion.minor <= 2\r\n ) {\r\n // Older versions of the text app do not report when ready\r\n app.state = AppState.READY;\r\n return Promise.resolve();\r\n }\r\n\r\n if (\r\n app.id === \"app41df8a36f628451d9f633f8a9bdf3edb\" &&\r\n appVersion.major === 1 &&\r\n appVersion.minor <= 1\r\n ) {\r\n // Older versions of the YouTube app do not report when ready\r\n app.state = AppState.READY;\r\n return Promise.resolve();\r\n }\r\n\r\n if (app.id === \"app448f8f293fbb493a9e233f113ce8b56a\") {\r\n // Asset Plugin\r\n app.state = AppState.READY;\r\n return Promise.resolve();\r\n }\r\n\r\n // Allows testing to not get hung up waiting for this\r\n if (app.id === \"APP_FOR_JEST_TEST\") {\r\n // Older versions of the YouTube app do not report when ready\r\n app.state = AppState.READY;\r\n return Promise.resolve();\r\n }\r\n\r\n return new Promise<void>((resolve) => {\r\n const appObserver = () => {\r\n if (app.state === AppState.READY) {\r\n app.removeChangeObserver(appObserver);\r\n resolve();\r\n }\r\n };\r\n app.addChangeObserver(appObserver);\r\n appObserver();\r\n });\r\n }\r\n\r\n /**\r\n * Creates a new MounterUCImp instance.\r\n *\r\n * @param appObject - The app object to attach to\r\n */\r\n constructor(appObject: AppObject) {\r\n super(appObject, MounterUC.type);\r\n }\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SandboxMounterUC.js","sourceRoot":"","sources":["../../../../../src/Apps/UCs/Mounters/SandboxMounterUC.ts"],"names":[],"mappings":"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","sourcesContent":["import { AppObject, Version, VIVEDApp_3 } from \"@vived/core\";\nimport {\n AppSandboxEntity,\n SandboxState\n} from \"../../../AppSandbox/Entities/AppSandboxEntity\";\nimport { HostDispatchEntity } from \"../../../Dispatcher/Entities/HostDispatchEntity\";\nimport { HostHandlerEntity } from \"../../../Handler/Entities/HostHandler\";\nimport { AppEntity, AppState } from \"../../Entities/AppEntity\";\nimport { MounterUC } from \"./MounterUC\";\n\n/**\n * Factory function to create a sandbox mounter for apps.\n *\n * The sandbox mounter is designed to mount apps in a sandboxed environment,\n * providing isolation and security for app execution.\n *\n * @param appObject - The app object to attach the mounter to\n * @returns A new SandboxMounterUC instance\n */\nexport function makeSandboxMounter(appObject: AppObject): MounterUC {\n return new SandboxMounterUC(appObject);\n}\n\n/**\n * Implementation of MounterUC for mounting apps in a sandbox environment.\n *\n * The SandboxMounterUC is responsible for safely loading and initializing apps\n * in a sandboxed context, handling app lifecycle events, and managing the\n * communication between the host and app.\n */\nclass SandboxMounterUC extends MounterUC {\n /**\n * Gets the app entity representing the app being mounted\n */\n private get appEntity() {\n return this.getCachedLocalComponent<AppEntity>(AppEntity.type);\n }\n\n /**\n * Gets the host dispatcher entity for sending messages to apps\n */\n private get hostDispatcher() {\n return this.getCachedLocalComponent<HostDispatchEntity>(\n HostDispatchEntity.type\n );\n }\n\n /**\n * Gets the host handler entity for receiving messages from apps\n */\n private get hostHandler() {\n return this.getCachedLocalComponent<HostHandlerEntity>(\n HostHandlerEntity.type\n );\n }\n\n /**\n * Gets the sandbox entity that manages the sandbox state\n */\n private get sandbox() {\n return this.getCachedSingleton<AppSandboxEntity>(AppSandboxEntity.type);\n }\n\n /**\n * Mounts the latest version of the app.\n *\n * @returns A promise that resolves when the app is mounted or rejects if an error occurs\n */\n mountLatestVersion = (): Promise<void> => {\n if (!this.appEntity) {\n this.error(\"Missing Components\");\n return Promise.reject();\n }\n\n const version = this.appEntity.latestVersion;\n if (!version) {\n this.error(\"No Version\");\n return Promise.reject();\n }\n\n return this.mount(version.major, version.minor);\n };\n\n /**\n * Mounts a specific version of the app.\n *\n * @param majorVersion - The major version number\n * @param minorVersion - The minor version number\n * @returns A promise that resolves when the app is mounted or rejects if an error occurs\n */\n mount = (majorVersion: number, minorVersion: number): Promise<void> => {\n if (\n !this.appEntity ||\n !this.hostDispatcher ||\n !this.hostHandler ||\n !this.sandbox\n ) {\n this.error(\"Missing Components\");\n return Promise.reject();\n }\n\n const version = this.getAppVersion(majorVersion, minorVersion);\n if (!version) {\n this.error(\"No Version\");\n return Promise.reject();\n }\n\n const appInterface = this.getAppInterface(version);\n if (!appInterface) {\n this.error(\"No App Interface\");\n return Promise.reject();\n }\n\n const appHandler = appInterface.mount(this.hostHandler.handler);\n this.hostDispatcher.registerAppHandler(appHandler);\n\n const app = this.appEntity;\n const sandbox = this.sandbox;\n\n return new Promise((resolve) => {\n const waitForReady = () => {\n if (app.state === AppState.READY) {\n sandbox.state = SandboxState.MOUNTED;\n app.removeChangeObserver(waitForReady);\n resolve();\n }\n };\n\n app.addChangeObserver(waitForReady);\n });\n };\n\n /**\n * Helper method to find a specific version of the app.\n *\n * @param major - Major version number\n * @param minor - Minor version number\n * @returns The Version object or undefined if not found\n */\n private getAppVersion(major: number, minor: number): Version | undefined {\n if (!this.appEntity) {\n return;\n }\n\n let appVersion = Version.GetLatestWithMajorMinor(\n this.appEntity.versions,\n major,\n minor\n );\n\n if (!appVersion) {\n appVersion = Version.GetLatestWithMajor(this.appEntity.versions, major);\n }\n\n if (!appVersion) {\n this.error(\n `Unable to find version ${major}.${minor}.X for App ${this.appEntity.name}`\n );\n }\n\n return appVersion;\n }\n\n /**\n * Unmounts the app from the sandbox.\n */\n unmount = (): void => {\n if (!this.sandbox || !this.hostDispatcher) {\n this.error(\"Missing Components\");\n return;\n }\n\n this.hostDispatcher.clearAppHandler();\n\n this.sandbox.state = SandboxState.UNMOUNTED;\n };\n\n /**\n * Loads a script into the document.\n * This is a placeholder implementation for sandbox mounting.\n *\n * @param scriptURL - URL of the script to load\n * @param appIDWithVersion - Versioned ID of the app\n * @returns A promise that resolves when the script is loaded\n */\n loadScriptIntoDocument(\n scriptURL: string,\n appIDWithVersion: string\n ): Promise<void> {\n // Unused during dev\n return Promise.resolve();\n }\n\n /**\n * Gets the app interface for a specific version.\n *\n * @param version - The version to get the interface for\n * @returns The app interface or undefined if not found\n */\n getAppInterface(version: Version): VIVEDApp_3 | undefined {\n const modifiedVersion = version.baseVersionString.split(\".\").join(\"_\");\n const idWithVersion = `${this.appObject.id}-${modifiedVersion}`;\n const appInterface = (window as any)[idWithVersion] as VIVEDApp_3;\n if (!appInterface) {\n this.appObjects.submitFatal(\n \"LocalMounterUC\",\n \"Unable to find App Interface\"\n );\n return;\n }\n\n return appInterface;\n }\n\n /**\n * Creates a new SandboxMounterUC instance.\n *\n * @param appObject - The app object to attach to\n */\n constructor(appObject: AppObject) {\n super(appObject, MounterUC.type);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"SandboxMounterUC.js","sourceRoot":"","sources":["../../../../../src/Apps/UCs/Mounters/SandboxMounterUC.ts"],"names":[],"mappings":"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","sourcesContent":["import { AppObject, Version, VIVEDApp_3 } from \"@vived/core\";\r\nimport {\r\n AppSandboxEntity,\r\n SandboxState\r\n} from \"../../../AppSandbox/Entities/AppSandboxEntity\";\r\nimport { HostDispatchEntity } from \"../../../Dispatcher/Entities/HostDispatchEntity\";\r\nimport { HostHandlerEntity } from \"../../../Handler/Entities/HostHandler\";\r\nimport { AppEntity, AppState } from \"../../Entities/AppEntity\";\r\nimport { MounterUC } from \"./MounterUC\";\r\n\r\n/**\r\n * Factory function to create a sandbox mounter for apps.\r\n *\r\n * The sandbox mounter is designed to mount apps in a sandboxed environment,\r\n * providing isolation and security for app execution.\r\n *\r\n * @param appObject - The app object to attach the mounter to\r\n * @returns A new SandboxMounterUC instance\r\n */\r\nexport function makeSandboxMounter(appObject: AppObject): MounterUC {\r\n return new SandboxMounterUC(appObject);\r\n}\r\n\r\n/**\r\n * Implementation of MounterUC for mounting apps in a sandbox environment.\r\n *\r\n * The SandboxMounterUC is responsible for safely loading and initializing apps\r\n * in a sandboxed context, handling app lifecycle events, and managing the\r\n * communication between the host and app.\r\n */\r\nclass SandboxMounterUC extends MounterUC {\r\n /**\r\n * Gets the app entity representing the app being mounted\r\n */\r\n private get appEntity() {\r\n return this.getCachedLocalComponent<AppEntity>(AppEntity.type);\r\n }\r\n\r\n /**\r\n * Gets the host dispatcher entity for sending messages to apps\r\n */\r\n private get hostDispatcher() {\r\n return this.getCachedLocalComponent<HostDispatchEntity>(\r\n HostDispatchEntity.type\r\n );\r\n }\r\n\r\n /**\r\n * Gets the host handler entity for receiving messages from apps\r\n */\r\n private get hostHandler() {\r\n return this.getCachedLocalComponent<HostHandlerEntity>(\r\n HostHandlerEntity.type\r\n );\r\n }\r\n\r\n /**\r\n * Gets the sandbox entity that manages the sandbox state\r\n */\r\n private get sandbox() {\r\n return this.getCachedSingleton<AppSandboxEntity>(AppSandboxEntity.type);\r\n }\r\n\r\n /**\r\n * Mounts the latest version of the app.\r\n *\r\n * @returns A promise that resolves when the app is mounted or rejects if an error occurs\r\n */\r\n mountLatestVersion = (): Promise<void> => {\r\n if (!this.appEntity) {\r\n this.error(\"Missing Components\");\r\n return Promise.reject();\r\n }\r\n\r\n const version = this.appEntity.latestVersion;\r\n if (!version) {\r\n this.error(\"No Version\");\r\n return Promise.reject();\r\n }\r\n\r\n return this.mount(version.major, version.minor);\r\n };\r\n\r\n /**\r\n * Mounts a specific version of the app.\r\n *\r\n * @param majorVersion - The major version number\r\n * @param minorVersion - The minor version number\r\n * @returns A promise that resolves when the app is mounted or rejects if an error occurs\r\n */\r\n mount = (majorVersion: number, minorVersion: number): Promise<void> => {\r\n if (\r\n !this.appEntity ||\r\n !this.hostDispatcher ||\r\n !this.hostHandler ||\r\n !this.sandbox\r\n ) {\r\n this.error(\"Missing Components\");\r\n return Promise.reject();\r\n }\r\n\r\n const version = this.getAppVersion(majorVersion, minorVersion);\r\n if (!version) {\r\n this.error(\"No Version\");\r\n return Promise.reject();\r\n }\r\n\r\n const appInterface = this.getAppInterface(version);\r\n if (!appInterface) {\r\n this.error(\"No App Interface\");\r\n return Promise.reject();\r\n }\r\n\r\n const appHandler = appInterface.mount(this.hostHandler.handler);\r\n this.hostDispatcher.registerAppHandler(appHandler);\r\n\r\n const app = this.appEntity;\r\n const sandbox = this.sandbox;\r\n\r\n return new Promise((resolve) => {\r\n const waitForReady = () => {\r\n if (app.state === AppState.READY) {\r\n sandbox.state = SandboxState.MOUNTED;\r\n app.removeChangeObserver(waitForReady);\r\n resolve();\r\n }\r\n };\r\n\r\n app.addChangeObserver(waitForReady);\r\n waitForReady();\r\n });\r\n };\r\n\r\n /**\r\n * Helper method to find a specific version of the app.\r\n *\r\n * @param major - Major version number\r\n * @param minor - Minor version number\r\n * @returns The Version object or undefined if not found\r\n */\r\n private getAppVersion(major: number, minor: number): Version | undefined {\r\n if (!this.appEntity) {\r\n return;\r\n }\r\n\r\n let appVersion = Version.GetLatestWithMajorMinor(\r\n this.appEntity.versions,\r\n major,\r\n minor\r\n );\r\n\r\n if (!appVersion) {\r\n appVersion = Version.GetLatestWithMajor(this.appEntity.versions, major);\r\n }\r\n\r\n if (!appVersion) {\r\n this.error(\r\n `Unable to find version ${major}.${minor}.X for App ${this.appEntity.name}`\r\n );\r\n }\r\n\r\n return appVersion;\r\n }\r\n\r\n /**\r\n * Unmounts the app from the sandbox.\r\n */\r\n unmount = (): void => {\r\n if (!this.sandbox || !this.hostDispatcher) {\r\n this.error(\"Missing Components\");\r\n return;\r\n }\r\n\r\n this.hostDispatcher.clearAppHandler();\r\n\r\n this.sandbox.state = SandboxState.UNMOUNTED;\r\n };\r\n\r\n /**\r\n * Loads a script into the document.\r\n * This is a placeholder implementation for sandbox mounting.\r\n *\r\n * @param scriptURL - URL of the script to load\r\n * @param appIDWithVersion - Versioned ID of the app\r\n * @returns A promise that resolves when the script is loaded\r\n */\r\n loadScriptIntoDocument(\r\n scriptURL: string,\r\n appIDWithVersion: string\r\n ): Promise<void> {\r\n // Unused during dev\r\n return Promise.resolve();\r\n }\r\n\r\n /**\r\n * Gets the app interface for a specific version.\r\n *\r\n * @param version - The version to get the interface for\r\n * @returns The app interface or undefined if not found\r\n */\r\n getAppInterface(version: Version): VIVEDApp_3 | undefined {\r\n const modifiedVersion = version.baseVersionString.split(\".\").join(\"_\");\r\n const idWithVersion = `${this.appObject.id}-${modifiedVersion}`;\r\n const appInterface = (window as any)[idWithVersion] as VIVEDApp_3;\r\n if (!appInterface) {\r\n this.appObjects.submitFatal(\r\n \"LocalMounterUC\",\r\n \"Unable to find App Interface\"\r\n );\r\n return;\r\n }\r\n\r\n return appInterface;\r\n }\r\n\r\n /**\r\n * Creates a new SandboxMounterUC instance.\r\n *\r\n * @param appObject - The app object to attach to\r\n */\r\n constructor(appObject: AppObject) {\r\n super(appObject, MounterUC.type);\r\n }\r\n}\r\n"]}
|
|
@@ -10,6 +10,13 @@ export function makeAssetPluginEntity(appObject) {
|
|
|
10
10
|
return new AssetPluginEntityImp(appObject);
|
|
11
11
|
}
|
|
12
12
|
class AssetPluginEntityImp extends AssetPluginEntity {
|
|
13
|
+
get version() {
|
|
14
|
+
return this._version;
|
|
15
|
+
}
|
|
16
|
+
set version(val) {
|
|
17
|
+
this._version = val;
|
|
18
|
+
this._app.versions.push(val);
|
|
19
|
+
}
|
|
13
20
|
get app() {
|
|
14
21
|
return this._app;
|
|
15
22
|
}
|
|
@@ -21,7 +28,7 @@ class AssetPluginEntityImp extends AssetPluginEntity {
|
|
|
21
28
|
}
|
|
22
29
|
constructor(appObject) {
|
|
23
30
|
super(appObject, AssetPluginEntity.type);
|
|
24
|
-
this.
|
|
31
|
+
this._version = new Version(0, 0, 0, VersionStage.RELEASED);
|
|
25
32
|
this.memoizedShowApp = new MemoizedBoolean(false, this.notifyOnChange);
|
|
26
33
|
this.callback = (modelId, dataId) => {
|
|
27
34
|
this.warn("Callback has not been injected");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AssetPluginEntity.js","sourceRoot":"","sources":["../../../../src/AssetPlugin/Entities/AssetPluginEntity.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,eAAe,EAEf,qBAAqB,EACrB,eAAe,EACf,OAAO,EACP,YAAY,EACb,MAAM,aAAa,CAAC;AACrB,OAAO,EAAa,aAAa,EAAE,MAAM,YAAY,CAAC;AAEtD,MAAM,OAAgB,iBAAkB,SAAQ,eAAe;IAG7D,MAAM,CAAC,GAAG,CAAC,UAAyB;QAClC,OAAO,qBAAqB,CAC1B,iBAAiB,CAAC,IAAI,EACtB,UAAU,CACX,CAAC;IACJ,CAAC;;AAPM,sBAAI,GAAG,mBAAmB,CAAC;AAiBpC,MAAM,UAAU,qBAAqB,CAAC,SAAoB;IACxD,OAAO,IAAI,oBAAoB,CAAC,SAAS,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,oBAAqB,SAAQ,iBAAiB;
|
|
1
|
+
{"version":3,"file":"AssetPluginEntity.js","sourceRoot":"","sources":["../../../../src/AssetPlugin/Entities/AssetPluginEntity.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,eAAe,EAEf,qBAAqB,EACrB,eAAe,EACf,OAAO,EACP,YAAY,EACb,MAAM,aAAa,CAAC;AACrB,OAAO,EAAa,aAAa,EAAE,MAAM,YAAY,CAAC;AAEtD,MAAM,OAAgB,iBAAkB,SAAQ,eAAe;IAG7D,MAAM,CAAC,GAAG,CAAC,UAAyB;QAClC,OAAO,qBAAqB,CAC1B,iBAAiB,CAAC,IAAI,EACtB,UAAU,CACX,CAAC;IACJ,CAAC;;AAPM,sBAAI,GAAG,mBAAmB,CAAC;AAiBpC,MAAM,UAAU,qBAAqB,CAAC,SAAoB;IACxD,OAAO,IAAI,oBAAoB,CAAC,SAAS,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,oBAAqB,SAAQ,iBAAiB;IAElD,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IACD,IAAI,OAAO,CAAC,GAAY;QACtB,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC;QACpB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;IAKD,IAAI,GAAG;QACL,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAGD,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;IAClC,CAAC;IACD,IAAI,IAAI,CAAC,GAAY;QACnB,IAAI,CAAC,eAAe,CAAC,GAAG,GAAG,GAAG,CAAC;IACjC,CAAC;IAMD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC;QA7BnC,aAAQ,GAAY,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;QAgBhE,oBAAe,GAAG,IAAI,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QAQ1E,aAAQ,GAAG,CAAC,OAAe,EAAE,MAAc,EAAQ,EAAE;YACnD,IAAI,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAC9C,CAAC,CAAC;QAKA,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAEjD,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;CACF","sourcesContent":["import {\n AppObject,\n AppObjectEntity,\n AppObjectRepo,\n getSingletonComponent,\n MemoizedBoolean,\n Version,\n VersionStage\n} from \"@vived/core\";\nimport { AppEntity, makeAppEntity } from \"../../Apps\";\n\nexport abstract class AssetPluginEntity extends AppObjectEntity {\n static type = \"AssetPluginEntity\";\n\n static get(appObjects: AppObjectRepo) {\n return getSingletonComponent<AssetPluginEntity>(\n AssetPluginEntity.type,\n appObjects\n );\n }\n\n abstract container: HTMLElement | undefined;\n abstract get app(): AppEntity;\n abstract get show(): boolean;\n abstract set show(val: boolean);\n abstract version: Version;\n abstract callback: (modelId: string, dataId: string) => void;\n}\n\nexport function makeAssetPluginEntity(appObject: AppObject): AssetPluginEntity {\n return new AssetPluginEntityImp(appObject);\n}\n\nclass AssetPluginEntityImp extends AssetPluginEntity {\n private _version: Version = new Version(0, 0, 0, VersionStage.RELEASED);\n get version(): Version {\n return this._version;\n }\n set version(val: Version) {\n this._version = val;\n this._app.versions.push(val);\n }\n\n container: HTMLElement | undefined;\n\n private _app: AppEntity;\n get app(): AppEntity {\n return this._app;\n }\n\n private memoizedShowApp = new MemoizedBoolean(false, this.notifyOnChange);\n get show() {\n return this.memoizedShowApp.val;\n }\n set show(val: boolean) {\n this.memoizedShowApp.val = val;\n }\n\n callback = (modelId: string, dataId: string): void => {\n this.warn(\"Callback has not been injected\");\n };\n\n constructor(appObject: AppObject) {\n super(appObject, AssetPluginEntity.type);\n\n this._app = makeAppEntity(this.appObject);\n this._app.addChangeObserver(this.notifyOnChange);\n\n this.appObjects.registerSingleton(this);\n }\n}\n"]}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
-
import { DomainFactory } from "@vived/core";
|
|
2
|
-
import { makeMounterUC } from "../../Apps";
|
|
1
|
+
import { DomainFactory, Version } from "@vived/core";
|
|
2
|
+
import { AppRepoEntity, makeMounterUC } from "../../Apps";
|
|
3
3
|
import { makeDispatchDisposeAppUC, makeDispatchStartBrowseChannelsUC, makeDispatchStopAppUC, makeHostDispatchEntity } from "../../Dispatcher";
|
|
4
4
|
import { makeCloseAssetSystemPluginUC, makeGetAssetFolderURLHandler, makeHostHandlerEntity, makeRegisterExternalStyleSheetsHandler } from "../../Handler";
|
|
5
5
|
import { makeAssetPluginEntity } from "../Entities";
|
|
6
6
|
import { makeAssetPluginPM } from "../PM";
|
|
7
7
|
import { makeSandboxAssetPluginContainerUC } from "../UCs";
|
|
8
|
+
const assetPluginAppID = "app448f8f293fbb493a9e233f113ce8b56a";
|
|
9
|
+
const assetPluginVersion = "1.2.0";
|
|
8
10
|
/**
|
|
9
11
|
* Factory responsible for setting up the AssetPlugin domain components.
|
|
10
12
|
* This factory initializes all entities, use cases, and presentation models
|
|
@@ -21,7 +23,7 @@ export class AssetPluginFeatureFactory extends DomainFactory {
|
|
|
21
23
|
*/
|
|
22
24
|
setupEntities() {
|
|
23
25
|
// Initialize entities
|
|
24
|
-
makeAssetPluginEntity(this.appObject);
|
|
26
|
+
this.assetPlugin = makeAssetPluginEntity(this.appObject);
|
|
25
27
|
makeHostHandlerEntity(this.appObject);
|
|
26
28
|
makeHostDispatchEntity(this.appObject);
|
|
27
29
|
}
|
|
@@ -52,11 +54,22 @@ export class AssetPluginFeatureFactory extends DomainFactory {
|
|
|
52
54
|
* Performs any final setup operations after all components are initialized
|
|
53
55
|
*/
|
|
54
56
|
finalSetup() {
|
|
55
|
-
|
|
57
|
+
if (!this.assetPlugin) {
|
|
58
|
+
this.error("AssetPlugin entity not initialized");
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
this.assetPlugin.version = Version.FromString(assetPluginVersion);
|
|
62
|
+
const repo = AppRepoEntity.get(this.appObjects);
|
|
63
|
+
if (repo) {
|
|
64
|
+
repo.add(this.assetPlugin.app);
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
this.error("Unable to find app repo. Make sure it is setup before setting up the Asset Plugin");
|
|
68
|
+
}
|
|
56
69
|
}
|
|
57
70
|
}
|
|
58
71
|
export function makeAssetPluginFeatureFactory(appObjects) {
|
|
59
|
-
const ao = appObjects.getOrCreate(
|
|
72
|
+
const ao = appObjects.getOrCreate(assetPluginAppID);
|
|
60
73
|
return new AssetPluginFeatureFactory(ao);
|
|
61
74
|
}
|
|
62
75
|
//# sourceMappingURL=AssetPluginFeatureFactory.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AssetPluginFeatureFactory.js","sourceRoot":"","sources":["../../../../src/AssetPlugin/Factories/AssetPluginFeatureFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,aAAa,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"AssetPluginFeatureFactory.js","sourceRoot":"","sources":["../../../../src/AssetPlugin/Factories/AssetPluginFeatureFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,aAAa,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EACN,wBAAwB,EACxB,iCAAiC,EACjC,qBAAqB,EACrB,sBAAsB,EACtB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACN,4BAA4B,EAC5B,4BAA4B,EAC5B,qBAAqB,EACrB,sCAAsC,EACtC,MAAM,eAAe,CAAC;AACvB,OAAO,EAAqB,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,iCAAiC,EAAE,MAAM,QAAQ,CAAC;AAE3D,MAAM,gBAAgB,GAAG,qCAAqC,CAAC;AAC/D,MAAM,kBAAkB,GAAG,OAAO,CAAC;AAEnC;;;;GAIG;AACH,MAAM,OAAO,yBAA0B,SAAQ,aAAa;IAM1D,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,CAAC,CAAC;QANnB,+BAA+B;QACtB,gBAAW,GAAG,2BAA2B,CAAC;IAMnD,CAAC;IAED;;OAEG;IACH,aAAa;QACX,sBAAsB;QACtB,IAAI,CAAC,WAAW,GAAG,qBAAqB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzD,qBAAqB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtC,sBAAsB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,uBAAuB;QACvB,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC9B,iCAAiC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAElD,oBAAoB;QACpB,iCAAiC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAClD,qBAAqB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtC,wBAAwB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAEzC,iBAAiB;QACjB,4BAA4B,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7C,sCAAsC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACvD,4BAA4B,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC/C,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,mCAAmC;QACnC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,UAAU;QACR,IAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACxB,IAAI,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;YACjD,OAAO;QACR,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC;QAElE,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAChD,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACjC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,KAAK,CACR,mFAAmF,CACpF,CAAC;QACJ,CAAC;IACD,CAAC;CACF;AAED,MAAM,UAAU,6BAA6B,CAC3C,UAAyB;IAEzB,MAAM,EAAE,GAAG,UAAU,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;IACpD,OAAO,IAAI,yBAAyB,CAAC,EAAE,CAAC,CAAC;AAC3C,CAAC","sourcesContent":["import { AppObject, AppObjectRepo, DomainFactory, Version } from \"@vived/core\";\r\nimport { AppRepoEntity, makeMounterUC } from \"../../Apps\";\r\nimport {\r\n\tmakeDispatchDisposeAppUC,\r\n\tmakeDispatchStartBrowseChannelsUC,\r\n\tmakeDispatchStopAppUC,\r\n\tmakeHostDispatchEntity\r\n} from \"../../Dispatcher\";\r\nimport {\r\n\tmakeCloseAssetSystemPluginUC,\r\n\tmakeGetAssetFolderURLHandler,\r\n\tmakeHostHandlerEntity,\r\n\tmakeRegisterExternalStyleSheetsHandler\r\n} from \"../../Handler\";\r\nimport { AssetPluginEntity, makeAssetPluginEntity } from \"../Entities\";\r\nimport { makeAssetPluginPM } from \"../PM\";\r\nimport { makeSandboxAssetPluginContainerUC } from \"../UCs\";\r\n\r\nconst assetPluginAppID = \"app448f8f293fbb493a9e233f113ce8b56a\";\r\nconst assetPluginVersion = \"1.2.0\";\r\n\r\n/**\r\n * Factory responsible for setting up the AssetPlugin domain components.\r\n * This factory initializes all entities, use cases, and presentation models\r\n * required for the AssetPlugin functionality.\r\n */\r\nexport class AssetPluginFeatureFactory extends DomainFactory {\r\n // Unique name for this factory\r\n readonly factoryName = \"AssetPluginFeatureFactory\";\r\n\r\n\tprivate assetPlugin?: AssetPluginEntity\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject);\r\n }\r\n\r\n /**\r\n * Sets up all entities required for the AssetPlugin system\r\n */\r\n setupEntities(): void {\r\n // Initialize entities\r\n this.assetPlugin = makeAssetPluginEntity(this.appObject);\r\n makeHostHandlerEntity(this.appObject);\r\n makeHostDispatchEntity(this.appObject);\r\n }\r\n\r\n /**\r\n * Sets up all use cases for the AssetPlugin system\r\n */\r\n setupUCs(): void {\r\n // Initialize use cases\r\n makeMounterUC(this.appObject);\r\n makeSandboxAssetPluginContainerUC(this.appObject);\r\n\r\n // Setup dispatchers\r\n makeDispatchStartBrowseChannelsUC(this.appObject);\r\n makeDispatchStopAppUC(this.appObject);\r\n makeDispatchDisposeAppUC(this.appObject);\r\n\r\n // Setup handlers\r\n makeGetAssetFolderURLHandler(this.appObject);\r\n makeRegisterExternalStyleSheetsHandler(this.appObject);\r\n makeCloseAssetSystemPluginUC(this.appObject);\r\n }\r\n\r\n /**\r\n * Sets up all presentation managers for the AssetPlugin system\r\n */\r\n setupPMs(): void {\r\n // Initialize presentation managers\r\n makeAssetPluginPM(this.appObject);\r\n }\r\n\r\n /**\r\n * Performs any final setup operations after all components are initialized\r\n */\r\n finalSetup(): void {\r\n if(!this.assetPlugin) {\r\n\t\t\tthis.error(\"AssetPlugin entity not initialized\");\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.assetPlugin.version = Version.FromString(assetPluginVersion);\r\n\r\n\t\tconst repo = AppRepoEntity.get(this.appObjects);\r\n if (repo) {\r\n repo.add(this.assetPlugin.app);\r\n } else {\r\n this.error(\r\n \"Unable to find app repo. Make sure it is setup before setting up the Asset Plugin\"\r\n );\r\n }\r\n }\r\n}\r\n\r\nexport function makeAssetPluginFeatureFactory(\r\n appObjects: AppObjectRepo\r\n): AssetPluginFeatureFactory {\r\n const ao = appObjects.getOrCreate(assetPluginAppID);\r\n return new AssetPluginFeatureFactory(ao);\r\n}\r\n"]}
|
|
@@ -6,6 +6,7 @@ import { AppObject, AppObjectRepo, DomainFactory } from "@vived/core";
|
|
|
6
6
|
*/
|
|
7
7
|
export declare class AssetPluginFeatureFactory extends DomainFactory {
|
|
8
8
|
readonly factoryName = "AssetPluginFeatureFactory";
|
|
9
|
+
private assetPlugin?;
|
|
9
10
|
constructor(appObject: AppObject);
|
|
10
11
|
/**
|
|
11
12
|
* Sets up all entities required for the AssetPlugin system
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AssetPluginFeatureFactory.d.ts","sourceRoot":"","sources":["../../../../src/AssetPlugin/Factories/AssetPluginFeatureFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"AssetPluginFeatureFactory.d.ts","sourceRoot":"","sources":["../../../../src/AssetPlugin/Factories/AssetPluginFeatureFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,aAAa,EAAW,MAAM,aAAa,CAAC;AAqB/E;;;;GAIG;AACH,qBAAa,yBAA0B,SAAQ,aAAa;IAE1D,QAAQ,CAAC,WAAW,+BAA+B;IAEpD,OAAO,CAAC,WAAW,CAAC,CAAmB;gBAE1B,SAAS,EAAE,SAAS;IAIhC;;OAEG;IACH,aAAa,IAAI,IAAI;IAOrB;;OAEG;IACH,QAAQ,IAAI,IAAI;IAgBhB;;OAEG;IACH,QAAQ,IAAI,IAAI;IAKhB;;OAEG;IACH,UAAU,IAAI,IAAI;CAiBnB;AAED,wBAAgB,6BAA6B,CAC3C,UAAU,EAAE,aAAa,GACxB,yBAAyB,CAG3B"}
|