blob: 8a72f1cd77c9e4f6cef2e6aec07c04fca694a85b [file] [log] [blame]
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import { createWasmInstantiator } from "./instantiate_wasm.js";
import { resolveUrlWithSegments } from "./utils.js";
export const loadSkwasm = async (deps, config, browserEnvironment, baseUrl) => {
const fileStem = (browserEnvironment.crossOriginIsolated && !config.forceSingleThreadedSkwasm) ? "skwasm" : "skwasm_st";
const rawSkwasmUrl = resolveUrlWithSegments(baseUrl, `${fileStem}.js`)
let skwasmUrl = rawSkwasmUrl;
if (deps.flutterTT.policy) {
skwasmUrl = deps.flutterTT.policy.createScriptURL(skwasmUrl);
}
const wasmInstantiator = createWasmInstantiator(resolveUrlWithSegments(baseUrl, `${fileStem}.wasm`));
const skwasm = await import(skwasmUrl);
return await skwasm.default({
instantiateWasm: wasmInstantiator,
// When hosted via a CDN or some other url that is not the same
// origin as the main script of the page, we will fail to create
// a web worker with the bootstrapping script. This workaround will
// make sure that the worker JS can be loaded regardless of where
// it is hosted.
mainScriptUrlOrBlob: new Blob(
[`import '${skwasmUrl}'`],
{ 'type': 'application/javascript' },
),
});
}