diff --git a/desktop/package.json b/desktop/package.json index b92050137..6da0301ed 100644 --- a/desktop/package.json +++ b/desktop/package.json @@ -218,6 +218,7 @@ "scripts": { "build": "cross-env NODE_ENV=production ./ts-node scripts/build-release.ts $@", "build-plugin": "./ts-node scripts/build-plugin.ts", + "bundle-all-plugins": "./ts-node scripts/bundle-all-plugins.ts", "build:dev": "cross-env NODE_ENV=development ./ts-node scripts/build-release.ts $@", "build:eslint": "cd eslint-plugin-flipper && yarn build", "build:themes": "lessc --js themes/light.less static/themes/light.css && lessc --js themes/dark.less static/themes/dark.css", diff --git a/desktop/scripts/bundle-all-plugins.ts b/desktop/scripts/bundle-all-plugins.ts new file mode 100644 index 000000000..c1a3c66f7 --- /dev/null +++ b/desktop/scripts/bundle-all-plugins.ts @@ -0,0 +1,55 @@ +/** + * 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} from './paths'; +import path from 'path'; +import {runBuild} from 'flipper-pkg-lib'; +import {getWorkspaces} from './workspaces'; + +async function bundleAllPlugins() { + const plugins = await getWorkspaces().then((workspaces) => + workspaces.packages.filter((x) => x.isPlugin), + ); + const errors = new Map(); + for (const plugin of plugins) { + const relativeDir = path.relative(pluginsDir, plugin.dir); + console.log(`Bundling "${relativeDir}"`); + console.time(`Finished bundling "${relativeDir}"`); + try { + await runBuild(plugin.dir, false); + } catch (err) { + console.log(`Failed to bundle "${relativeDir}": ${err.message}`); + errors.set(relativeDir, err); + } finally { + console.timeEnd(`Finished bundling "${relativeDir}"`); + } + } + if (errors.size) { + console.error('---'); + for (const [plugin, error] of errors) { + console.error(`Failed to bundle ${plugin}`); + console.error(error); + console.error('---'); + } + throw new Error( + `Failed to bundle ${errors.size} plugins: ${[...errors.keys()].join( + ', ', + )}`, + ); + } +} + +bundleAllPlugins() + .then(() => { + process.exit(0); + }) + .catch((err: any) => { + console.error(err); + process.exit(1); + });