1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.fetchThenEvalAsync = void 0;
4/**
5 * Copyright © 2022 650 Industries.
6 *
7 * This source code is licensed under the MIT license found in the
8 * LICENSE file in the root directory of this source tree.
9 */
10// Basically `__webpack_require__.l`.
11function fetchThenEvalAsync(url, { scriptType, nonce, crossOrigin, } = {}) {
12    if (typeof document === 'undefined') {
13        return require('./fetchThenEvalJs').fetchThenEvalAsync(url);
14    }
15    return new Promise((resolve, reject) => {
16        const script = document.createElement('script');
17        if (scriptType)
18            script.type = scriptType;
19        if (nonce)
20            script.setAttribute('nonce', nonce);
21        // script.setAttribute('data-expo-metro', ...);
22        script.src = url;
23        if (crossOrigin && script.src.indexOf(window.location.origin + '/') !== 0) {
24            script.crossOrigin = crossOrigin;
25        }
26        script.onload = () => {
27            script.parentNode && script.parentNode.removeChild(script);
28            resolve();
29        };
30        // Create a new error object to preserve the original stack trace.
31        const error = new AsyncRequireError();
32        // Server error or network error.
33        script.onerror = (ev) => {
34            let event;
35            if (typeof ev === 'string') {
36                event = {
37                    type: 'error',
38                    target: {
39                        // @ts-expect-error
40                        src: event,
41                    },
42                };
43            }
44            else {
45                event = ev;
46            }
47            const errorType = event && (event.type === 'load' ? 'missing' : event.type);
48            // @ts-expect-error
49            const realSrc = event?.target?.src;
50            error.message = 'Loading module ' + url + ' failed.\n(' + errorType + ': ' + realSrc + ')';
51            error.type = errorType;
52            error.request = realSrc;
53            script.parentNode && script.parentNode.removeChild(script);
54            reject(error);
55        };
56        document.head.appendChild(script);
57    });
58}
59exports.fetchThenEvalAsync = fetchThenEvalAsync;
60class AsyncRequireError extends Error {
61    name = 'AsyncRequireError';
62    type;
63    request;
64}
65//# sourceMappingURL=fetchThenEval.web.js.map