jiuyiUniapp/service/node_modules/metro-babel-transformer/src/index.js

47 lines
1.2 KiB
JavaScript
Raw Normal View History

2025-02-13 09:59:20 +08:00
"use strict";
const { parseSync, transformFromAstSync } = require("@babel/core");
const nullthrows = require("nullthrows");
function transform({ filename, options, plugins, src }) {
const OLD_BABEL_ENV = process.env.BABEL_ENV;
process.env.BABEL_ENV = options.dev
? "development"
: process.env.BABEL_ENV || "production";
try {
const babelConfig = {
caller: {
name: "metro",
bundler: "metro",
platform: options.platform,
},
ast: true,
babelrc: options.enableBabelRCLookup,
code: false,
cwd: options.projectRoot,
highlightCode: true,
filename,
plugins,
sourceType: "module",
cloneInputAst: false,
};
const sourceAst = options.hermesParser
? require("hermes-parser").parse(src, {
babel: true,
sourceType: babelConfig.sourceType,
})
: parseSync(src, babelConfig);
const transformResult = transformFromAstSync(sourceAst, src, babelConfig);
return {
ast: nullthrows(transformResult.ast),
metadata: transformResult.metadata,
};
} finally {
if (OLD_BABEL_ENV) {
process.env.BABEL_ENV = OLD_BABEL_ENV;
}
}
}
module.exports = {
transform,
};