You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

112 lines
2.8 KiB

/**
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
*
* @format
*/
"use strict";
var _CountingSet = _interopRequireDefault(require("./CountingSet"));
function _interopRequireDefault(obj) {
return obj && obj.__esModule ? obj : { default: obj };
}
const countLines = require("./countLines");
const getPreludeCode = require("./getPreludeCode");
const transformHelpers = require("./transformHelpers");
const defaults = require("metro-config/src/defaults/defaults");
async function getPrependedScripts(
config,
options,
resolverOptions,
bundler,
deltaBundler
) {
// Get all the polyfills from the relevant option params (the
// `getPolyfills()` method and the `polyfillModuleNames` variable).
const polyfillModuleNames = config.serializer
.getPolyfills({
platform: options.platform,
})
.concat(config.serializer.polyfillModuleNames);
const transformOptions = { ...options, type: "script" };
const dependencies = await deltaBundler.getDependencies(
[defaults.moduleSystem, ...polyfillModuleNames],
{
resolve: await transformHelpers.getResolveDependencyFn(
bundler,
options.platform,
resolverOptions
),
transform: await transformHelpers.getTransformFn(
[defaults.moduleSystem, ...polyfillModuleNames],
bundler,
deltaBundler,
config,
transformOptions,
resolverOptions
),
unstable_allowRequireContext:
config.transformer.unstable_allowRequireContext,
transformOptions,
onProgress: null,
experimentalImportBundleSupport:
config.transformer.experimentalImportBundleSupport,
shallow: false,
}
);
return [
_getPrelude({
dev: options.dev,
globalPrefix: config.transformer.globalPrefix,
requireCycleIgnorePatterns: config.resolver.requireCycleIgnorePatterns,
}),
...dependencies.values(),
];
}
function _getPrelude({ dev, globalPrefix, requireCycleIgnorePatterns }) {
const { compile } = require("metro-hermes-compiler");
const code = getPreludeCode({
isDev: dev,
globalPrefix,
requireCycleIgnorePatterns,
});
const name = "__prelude__";
return {
dependencies: new Map(),
getSource: () => Buffer.from(code),
inverseDependencies: new _CountingSet.default(),
path: name,
output: [
{
type: "js/script/virtual",
data: {
code,
lineCount: countLines(code),
map: [],
},
},
{
type: "bytecode/script/virtual",
data: {
bytecode: compile(code, {
sourceURL: "__prelude__.virtual.js",
}).bytecode,
},
},
],
};
}
module.exports = getPrependedScripts;