Add source map copying for plugins

Reviewed By: nikoant

Differential Revision: D39576201

fbshipit-source-id: cd6b11bdb0a4c89e2f84d1c4772f08acc4b86418
This commit is contained in:
Andrey Goncharov
2022-09-16 07:22:09 -07:00
committed by Facebook GitHub Bot
parent 9fc9d6f9b5
commit 7c66a83328
2 changed files with 48 additions and 3 deletions

View File

@@ -18,9 +18,17 @@ interface RunBuildConfig {
out: string; out: string;
dev: boolean; dev: boolean;
node?: boolean; node?: boolean;
sourceMapPath?: string;
} }
async function runBuild({pluginDir, entry, out, dev, node}: RunBuildConfig) { async function runBuild({
pluginDir,
entry,
out,
dev,
node,
sourceMapPath,
}: RunBuildConfig) {
await build({ await build({
entryPoints: [path.join(pluginDir, entry)], entryPoints: [path.join(pluginDir, entry)],
bundle: true, bundle: true,
@@ -45,9 +53,28 @@ async function runBuild({pluginDir, entry, out, dev, node}: RunBuildConfig) {
sourcemap: 'external', sourcemap: 'external',
minify: !dev, minify: !dev,
}); });
const sourceMapUrl = `${out}.map`;
if (
sourceMapPath &&
path.resolve(sourceMapPath) !== path.resolve(sourceMapUrl)
) {
console.info(`Moving plugin sourcemap to ${sourceMapPath}`);
await fs.ensureDir(path.dirname(sourceMapPath));
await fs.move(sourceMapUrl, sourceMapPath, {overwrite: true});
}
} }
export default async function bundlePlugin(pluginDir: string, dev: boolean) { type Options = {
sourceMapPath?: string;
sourceMapPathServerAddOn?: string;
};
export default async function bundlePlugin(
pluginDir: string,
dev: boolean,
options?: Options,
) {
const stat = await fs.lstat(pluginDir); const stat = await fs.lstat(pluginDir);
if (!stat.isDirectory()) { if (!stat.isDirectory()) {
throw new Error(`Plugin source ${pluginDir} is not a directory.`); throw new Error(`Plugin source ${pluginDir} is not a directory.`);
@@ -75,6 +102,7 @@ export default async function bundlePlugin(pluginDir: string, dev: boolean) {
entry: plugin.source, entry: plugin.source,
out: plugin.entry, out: plugin.entry,
dev, dev,
sourceMapPath: options?.sourceMapPath,
}); });
if ( if (
@@ -89,6 +117,7 @@ export default async function bundlePlugin(pluginDir: string, dev: boolean) {
out: plugin.serverAddOnEntry, out: plugin.serverAddOnEntry,
dev, dev,
node: true, node: true,
sourceMapPath: options?.sourceMapPathServerAddOn,
}); });
} }

View File

@@ -54,6 +54,17 @@ const argv = yargs
type: 'string', type: 'string',
alias: 'ou', alias: 'ou',
}, },
'output-sourcemap': {
description: 'File path for the sourcemap to be written. Optional.',
type: 'string',
alias: 'os',
},
'output-sourcemap-server-addon': {
description:
'File path for the server add-on sourcemap to be written. Optional.',
type: 'string',
alias: 'os',
},
}) })
.help() .help()
.parse(process.argv.slice(1)); .parse(process.argv.slice(1));
@@ -65,9 +76,14 @@ async function buildPlugin() {
const outputFileArg = argv.output; const outputFileArg = argv.output;
const outputUnpackedArg = argv['output-unpacked']; const outputUnpackedArg = argv['output-unpacked'];
const minFlipperVersion = argv['min-flipper-version']; const minFlipperVersion = argv['min-flipper-version'];
const outputSourcemapArg = argv['output-sourcemap'];
const outputSourcemapServerAddOnArg = argv['output-sourcemap-server-addon'];
const packageJsonPath = path.join(pluginDir, 'package.json'); const packageJsonPath = path.join(pluginDir, 'package.json');
const packageJsonOverridePath = path.join(pluginDir, 'fb', 'package.json'); const packageJsonOverridePath = path.join(pluginDir, 'fb', 'package.json');
await runBuild(pluginDir, false); await runBuild(pluginDir, false, {
sourceMapPath: outputSourcemapArg,
sourceMapPathServerAddOn: outputSourcemapServerAddOnArg,
});
const checksum = await computePackageChecksum(pluginDir); const checksum = await computePackageChecksum(pluginDir);
if (previousChecksum !== checksum && argv.version) { if (previousChecksum !== checksum && argv.version) {
console.log(`Plugin changed. Packaging new version ${argv.version}...`); console.log(`Plugin changed. Packaging new version ${argv.version}...`);