UNPKG

@lightningjs/renderer

Version:
69 lines 2.64 kB
import { CoreExtension } from '../../exports/core-api.js'; /** * Type guard that checks if a Class extends CoreExtension. * * @param Class * @returns */ export function classExtendsCoreExtension(Class) { return Class.prototype instanceof CoreExtension; } export async function loadCoreExtension(coreExtensionModule, stage) { let module; try { console.log('Loading core extension', coreExtensionModule); module = (await import(coreExtensionModule /* @vite-ignore */)); } catch (e) { console.error(`The core extension module at '${coreExtensionModule}' could not be loaded.`); console.error(e); return; } if (!module.default) { console.error(`The core extension module at '${coreExtensionModule}' does not have a default export.`); return; } const ExtensionClass = module.default; if (classExtendsCoreExtension(ExtensionClass)) { const coreExtension = new ExtensionClass(); try { await coreExtension.run(stage); } catch (e) { console.error(`The core extension at '${coreExtensionModule}' threw an error.`); console.error(e); } } else { console.error(`The core extension at '${coreExtensionModule}' does not extend CoreExtension.`); } } export function santizeCustomDataMap(d) { const validTypes = { boolean: true, string: true, number: true }; const keys = Object.keys(d); for (let i = 0; i < keys.length; i++) { const key = keys[i]; if (!key) { continue; } const value = d[key]; const valueType = typeof value; // Typescript doesn't understand the above const valueType ¯\_(ツ)_/¯ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore-next-line if (valueType === 'string' && value.length > 2048) { console.warn(`Custom Data value for ${key} is too long, it will be truncated to 2048 characters`); // same here, see above comment, this can only be a string at this point // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore-next-line // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call d[key] = value.substring(0, 2048); } if (!validTypes[valueType]) { console.warn(`Custom Data value for ${key} is not a boolean, string, or number, it will be ignored`); delete d[key]; } } return d; } //# sourceMappingURL=utils.js.map