Files
flipper/desktop/scripts/build-plugin.ts
Anton Nikolaev 666032fa46 "yarn build-plugin" command added
Summary: Added "build-plugin" command. Can be used like this: `yarn build-plugin fresco` which produces package to 'sonar/dist/plugins/fresco.tgz'

Reviewed By: mweststrate

Differential Revision: D22160253

fbshipit-source-id: 48b202984b0f515bf253b595be1f59953a9ce411
2020-06-22 08:15:56 -07:00

55 lines
1.6 KiB
TypeScript

/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @format
*/
import {pluginsDir, rootDir, distDir} from './paths';
import path from 'path';
import fs from 'fs-extra';
import {execSync} from 'child_process';
(async function buildPlugin() {
const pluginDirArg = process.argv[2];
const pluginDir = await resolveAbsolutePluginDir(pluginDirArg);
if (path.relative(pluginsDir, pluginDir).includes('..')) {
throw new Error(
`Plugin dir ${pluginDir} is not inside plugins directory ${pluginsDir}`,
);
}
const outputFile = path.join(
distDir,
'plugins',
path.relative(pluginsDir, pluginDir) + '.tgz',
);
await fs.ensureDir(path.dirname(outputFile));
await fs.remove(outputFile);
const bundleCmd = `yarn flipper-pkg bundle "${pluginDir}" --production`;
const packCmd = `yarn pack --cwd "${pluginDir}" --filename ${outputFile}`;
execSync(bundleCmd, {cwd: rootDir, stdio: 'inherit'});
execSync(packCmd, {cwd: rootDir, stdio: 'inherit'});
})();
async function resolveAbsolutePluginDir(dir: string): Promise<string> {
if (path.isAbsolute(dir)) {
return dir;
}
const resolvedFromPluginDir = path.resolve(pluginsDir, dir);
if (await fs.pathExists(resolvedFromPluginDir)) {
return resolvedFromPluginDir;
}
const resolvedFromCwd = path.resolve(process.cwd(), dir);
if (await fs.pathExists(resolvedFromCwd)) {
return resolvedFromCwd;
}
throw new Error(
`Cannot resolve plugin dir path. Paths checked: ${[
resolvedFromPluginDir,
resolvedFromCwd,
]}`,
);
}