UNPKG

@snap/camera-kit

Version:
73 lines 4.21 kB
import { __awaiter } from "tslib"; import { Injectable } from "@snap/ts-inject"; import lensCoreWasm from "../../lensCoreWasmVersions"; import { configurationToken } from "../../configuration"; import { defaultFetchHandlerFactory } from "../../handlers/defaultFetchHandler"; import { getLogger } from "../../logger/logger"; import { createLensCore } from "../lensCore"; import { loadScript } from "../../common/loadScript"; import { HandlerChainBuilder } from "../../handlers/HandlerChainBuilder"; import { createCustomLensCoreHandler } from "../../handlers/customLensCoreHandler"; import { createRequestStateEmittingHandler, requestStateEventTargetFactory, } from "../../handlers/requestStateEmittingHandler"; import { getTrustedTypesHandler } from "../../trusted-types/trustedTypesHandler"; import { getRequiredBootstrapURLs } from "./bootstrapURLs"; const logger = getLogger("lensCoreFactory"); const findMatch = (regex, strings) => strings.find((s) => regex.test(s)); export const LENS_CORE_JS_REQUEST_TYPE = "lens_core_js"; export const LENS_CORE_WASM_REQUEST_TYPE = "lens_core_wasm"; export const lensCoreFactory = Injectable("lensCore", [defaultFetchHandlerFactory.token, configurationToken, requestStateEventTargetFactory.token], (handler, { lensCoreOverrideUrls, wasmEndpointOverride, trustedTypesPolicyName }, requestStateEventTarget) => __awaiter(void 0, void 0, void 0, function* () { var _a, _b; let lensCoreJS; let lensCoreWASM; const customBuild = !!(lensCoreOverrideUrls || wasmEndpointOverride); let lensCoreHandlerChainBuilder = new HandlerChainBuilder(handler); if (customBuild) { lensCoreHandlerChainBuilder = lensCoreHandlerChainBuilder.map(createCustomLensCoreHandler()); } const lensCoreHandler = lensCoreHandlerChainBuilder.map(createRequestStateEmittingHandler(requestStateEventTarget)).handler; const trustedTypesHandler = getTrustedTypesHandler(trustedTypesPolicyName); if (lensCoreOverrideUrls) { lensCoreJS = trustedTypesHandler.trustUrl(lensCoreOverrideUrls.js); lensCoreWASM = lensCoreOverrideUrls.wasm; } else { const endpointOverride = wasmEndpointOverride !== null && wasmEndpointOverride !== void 0 ? wasmEndpointOverride : undefined; const assetURLs = yield getRequiredBootstrapURLs(endpointOverride); lensCoreJS = (_a = findMatch(/\.js/, assetURLs)) !== null && _a !== void 0 ? _a : ""; lensCoreWASM = (_b = findMatch(/\.wasm/, assetURLs)) !== null && _b !== void 0 ? _b : ""; if (!lensCoreJS || !lensCoreWASM) { throw new Error(`Cannot fetch required LensCore assets. Either the JS or WASM filename is missing from ` + `this list: ${assetURLs}.`); } const glueScript = yield lensCoreHandler([ lensCoreJS, { requestType: LENS_CORE_JS_REQUEST_TYPE, customBuild: `${customBuild}` }, ]); lensCoreJS = trustedTypesHandler.trustUrl(URL.createObjectURL(yield glueScript.blob())); } const scriptElement = yield loadScript(lensCoreJS); const lensCore = yield new Promise((resolve, reject) => { let initialModule; const moduleInit = globalThis.createLensesModule((initialModule = { mainScriptUrlOrBlob: lensCoreJS.toString(), instantiateWasm: (importObject, receiveInstance) => { WebAssembly.instantiateStreaming(lensCoreHandler([ lensCoreWASM, { requestType: LENS_CORE_WASM_REQUEST_TYPE, customBuild: `${customBuild}` }, ]), importObject) .then(function ({ instance, module }) { receiveInstance(instance, module); initialModule.compiledModule = module; resolve(moduleInit); }) .catch(reject); }, })); }); scriptElement.remove(); if (lensCoreWasm.version != `${lensCore.getCoreVersion()}`) { logger.warn(`Loaded LensCore version (${lensCore.getCoreVersion()}) differs from expected one (${lensCoreWasm.version})`); } return createLensCore(lensCore); })); //# sourceMappingURL=lensCoreFactory.js.map