@snap/camera-kit
Version:
Camera Kit Web
71 lines • 3.98 kB
JavaScript
import { __awaiter } from "tslib";
import lensCoreWasm from "../../lensCoreWasmVersions";
import { configurationToken } from "../../configuration";
import { Injectable } from "../../dependency-injection/Injectable";
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 { 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 }, 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;
if (lensCoreOverrideUrls) {
lensCoreJS = 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}` },
]).then((r) => r.blob());
lensCoreJS = URL.createObjectURL(glueScript);
}
const scriptElement = yield loadScript(lensCoreJS);
const lensCore = yield new Promise((resolve, reject) => {
let initialModule;
const moduleInit = globalThis.createLensesModule((initialModule = {
mainScriptUrlOrBlob: lensCoreJS,
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