From ebfd04532841fcd994eda00f893af6200958d315 Mon Sep 17 00:00:00 2001 From: Anton Nikolaev Date: Fri, 17 Apr 2020 05:15:55 -0700 Subject: [PATCH] Fix symlinks resolution for plugin dependencies Summary: Moved getWatchFolders script to flipper-pkg and used it from other packages. Script helps to resolve all the folders with package dependencies including symlinked folders in case if plugin is a part of yarn workspaces. Reviewed By: mweststrate Differential Revision: D21068373 fbshipit-source-id: 8691837fdb1aef333dab4c13d8758262838d36ee --- desktop/babel-transformer/package.json | 1 - desktop/babel-transformer/tsconfig.json | 3 +- desktop/package.json | 25 ++++++----- desktop/pkg/src/index.ts | 1 + .../src/utils}/getWatchFolders.ts | 0 desktop/pkg/src/utils/runBuild.ts | 45 ++++++++++--------- desktop/pkg/tsconfig.json | 3 +- desktop/scripts/build-utils.ts | 2 +- desktop/scripts/get-app-watch-folders.ts | 2 +- desktop/static/compilePlugins.ts | 2 +- desktop/static/getPluginFolders.ts | 6 +++ desktop/static/package.json | 1 + 12 files changed, 51 insertions(+), 40 deletions(-) rename desktop/{static => pkg/src/utils}/getWatchFolders.ts (100%) diff --git a/desktop/babel-transformer/package.json b/desktop/babel-transformer/package.json index f0f82accf..32e03c1e2 100644 --- a/desktop/babel-transformer/package.json +++ b/desktop/babel-transformer/package.json @@ -26,7 +26,6 @@ "@types/fs-extra": "^8.1.0", "@types/node": "^13.7.5", "fs-extra": "^8.1.0", - "metro": "^0.59.0", "tslib": "^1" }, "devDependencies": { diff --git a/desktop/babel-transformer/tsconfig.json b/desktop/babel-transformer/tsconfig.json index 2a2b1f404..4a4fce283 100644 --- a/desktop/babel-transformer/tsconfig.json +++ b/desktop/babel-transformer/tsconfig.json @@ -3,7 +3,8 @@ "compilerOptions": { "outDir": "lib", "rootDir": "src", - "allowJs": true + "allowJs": true, + "esModuleInterop": true }, "include": ["src"], "exclude": ["node_modules", "**/__tests__/*"] diff --git a/desktop/package.json b/desktop/package.json index 69559978f..746e4393b 100644 --- a/desktop/package.json +++ b/desktop/package.json @@ -82,9 +82,8 @@ "@types/react-dom": "16.9.4", "acorn": "7.1.1", "minimist": "1.2.3", - "metro/temp": "0.9.0", - "metro/ws": "1.1.5", - "metro/**/ws": "1.1.5", + "**/metro/**/temp": "0.9.0", + "**/metro/**/ws": "1.1.5", "ws": "7.2.3", "kind-of": "6.0.3" }, @@ -169,6 +168,7 @@ "eslint-plugin-prettier": "^3.1.2", "eslint-plugin-react": "^7.16.0", "eslint-plugin-relay": "^1.4.1", + "flipper-pkg": "0.37.0", "flow-bin": "^0.122.0", "fs-extra": "^8.1.0", "glob": "^7.1.2", @@ -194,31 +194,32 @@ }, "scripts": { "preinstall": "node scripts/prepare-watchman-config.js && yarn config set ignore-engines", - "postinstall": "patch-package && ./ts-node scripts/yarn-install-fb-plugins.ts && ./ts-node scripts/generate-plugin-entry-points.ts", + "postinstall": "patch-package && ./ts-node scripts/yarn-install-fb-plugins.ts && yarn build:pkg && ./ts-node scripts/generate-plugin-entry-points.ts", "rm-dist": "rimraf ../dist", "rm-modules": "rimraf **/*/node_modules node_modules", "rm-temp": "rimraf $TMPDIR/jest* $TMPDIR/react-native-packager*", "rm-bundle": "rimraf static/main.bundle.* **/lib **/*.tsbuildinfo", "rm-watches": "watchman watch-del-all", "rm-metro-cache": "rimraf $TMPDIR/metro-cache*", - "reset": "yarn rm-dist && yarn rm-temp && yarn rm-metro-cache && yarn cache clean && yarn rm-bundle && yarn rm-watches && yarn rm-modules", - "predev-server": "yarn build:babel-transformer", + "reset": "yarn rm-dist && yarn rm-temp && yarn rm-metro-cache && yarn cache clean && yarn rm-bundle && yarn rm-modules", + "predev-server": "yarn build:pkg", "dev-server": "cross-env NODE_ENV=development ./ts-node scripts/start-dev-server.ts", "start": "yarn dev-server --inspect=9229", "start:break": "yarn dev-server --inspect-brk=9229", "start:no-embedded-plugins": "yarn start --no-embedded-plugins", "build:babel-transformer": "cd babel-transformer && yarn build", - "prebuild": "yarn build:babel-transformer && yarn rm-dist", + "build:pkg": "cd pkg && yarn build", + "prebuild": "yarn build:pkg && yarn rm-dist", "build": "cross-env NODE_ENV=production ./ts-node scripts/build-release.ts $@", "build:dev": "cross-env NODE_ENV=development ./ts-node scripts/build-release.ts $@", - "prebuild-headless": "yarn build:babel-transformer", + "prebuild-headless": "yarn build:pkg", "build-headless": "cross-env NODE_ENV=production ./ts-node scripts/build-headless.ts $@", "open-dist": "open ../dist/mac/Flipper.app --args --launcher=false --inspect=9229", "fix": "eslint . --fix --ext .js,.ts,.tsx", - "test": "yarn build:babel-transformer && jest --env=jest-environment-jsdom-sixteen --testPathPattern=\"node\\.(js|ts|tsx)$\" --no-cache", - "test:debug": "yarn build:babel-transformer && node --inspect node_modules/.bin/jest --runInBand --env=jest-environment-jsdom-sixteen", - "test-electron": "yarn build:babel-transformer && jest --env=jest-environment-jsdom-sixteen --testPathPattern=\"electron\\.(js|ts|tsx)$\" --testEnvironment=@jest-runner/electron/environment --runner=@jest-runner/electron --no-cache", - "test-with-device": "yarn build:babel-transformer && USE_ELECTRON_STUBS=1 jest --env=jest-environment-jsdom-sixteen --testPathPattern=\"device\\.(js|ts|tsx)$\" --detectOpenHandles --no-cache", + "test": "yarn build:pkg && jest --env=jest-environment-jsdom-sixteen --testPathPattern=\"node\\.(js|ts|tsx)$\" --no-cache", + "test:debug": "yarn build:pkg && node --inspect node_modules/.bin/jest --runInBand --env=jest-environment-jsdom-sixteen", + "test-electron": "yarn build:pkg && jest --env=jest-environment-jsdom-sixteen --testPathPattern=\"electron\\.(js|ts|tsx)$\" --testEnvironment=@jest-runner/electron/environment --runner=@jest-runner/electron --no-cache", + "test-with-device": "yarn build:pkg && USE_ELECTRON_STUBS=1 jest --env=jest-environment-jsdom-sixteen --testPathPattern=\"device\\.(js|ts|tsx)$\" --detectOpenHandles --no-cache", "lint:tsc": "tsc --noemit", "lint:eslint": "eslint . --ext .js,.ts,.tsx", "lint:flow": "flow check", diff --git a/desktop/pkg/src/index.ts b/desktop/pkg/src/index.ts index e9121d070..e00be6139 100644 --- a/desktop/pkg/src/index.ts +++ b/desktop/pkg/src/index.ts @@ -10,3 +10,4 @@ export {run} from '@oclif/command'; export const PKG = 'flipper-pkg'; export {default as runBuild} from './utils/runBuild'; +export {default as getWatchFolders} from './utils/getWatchFolders'; diff --git a/desktop/static/getWatchFolders.ts b/desktop/pkg/src/utils/getWatchFolders.ts similarity index 100% rename from desktop/static/getWatchFolders.ts rename to desktop/pkg/src/utils/getWatchFolders.ts diff --git a/desktop/pkg/src/utils/runBuild.ts b/desktop/pkg/src/utils/runBuild.ts index dac3abe11..e4b3e35f1 100644 --- a/desktop/pkg/src/utils/runBuild.ts +++ b/desktop/pkg/src/utils/runBuild.ts @@ -8,7 +8,7 @@ */ import Metro from 'metro'; -import * as path from 'path'; +import getWatchFolders from './getWatchFolders'; function hash(string: string) { let hash = 0; @@ -41,27 +41,28 @@ export default async function runBuild( entry: string, out: string, ) { - await Metro.runBuild( - { - reporter: {update: () => {}}, - projectRoot: inputDirectory, - watchFolders: [inputDirectory, path.resolve(__dirname, '..', '..')], - serializer: { - getRunModuleStatement: (moduleID: string) => - `module.exports = global.__r(${moduleID}).default;`, - createModuleIdFactory, - }, - transformer: { - babelTransformerPath: require.resolve('flipper-babel-transformer'), - }, + const baseConfig = await Metro.loadConfig(); + const config = Object.assign({}, baseConfig, { + reporter: {update: () => {}}, + projectRoot: inputDirectory, + watchFolders: [inputDirectory, ...(await getWatchFolders(inputDirectory))], + serializer: { + ...baseConfig.serializer, + getRunModuleStatement: (moduleID: string) => + `module.exports = global.__r(${moduleID}).default;`, + createModuleIdFactory, }, - { - dev: false, - minify: false, - resetCache: true, - sourceMap: true, - entry, - out, + transformer: { + ...baseConfig.transformer, + babelTransformerPath: require.resolve('flipper-babel-transformer'), }, - ); + }); + await Metro.runBuild(config, { + dev: false, + minify: false, + resetCache: false, + sourceMap: true, + entry, + out, + }); } diff --git a/desktop/pkg/tsconfig.json b/desktop/pkg/tsconfig.json index 2a2b1f404..4a4fce283 100644 --- a/desktop/pkg/tsconfig.json +++ b/desktop/pkg/tsconfig.json @@ -3,7 +3,8 @@ "compilerOptions": { "outDir": "lib", "rootDir": "src", - "allowJs": true + "allowJs": true, + "esModuleInterop": true }, "include": ["src"], "exclude": ["node_modules", "**/__tests__/*"] diff --git a/desktop/scripts/build-utils.ts b/desktop/scripts/build-utils.ts index 7233efb81..7634e4033 100644 --- a/desktop/scripts/build-utils.ts +++ b/desktop/scripts/build-utils.ts @@ -12,7 +12,7 @@ import tmp from 'tmp'; import path from 'path'; import fs from 'fs-extra'; import {spawn} from 'promisify-child-process'; -import getWatchFolders from '../static/getWatchFolders'; +import {getWatchFolders} from 'flipper-pkg'; import getAppWatchFolders from './get-app-watch-folders'; import getPlugins from '../static/getPlugins'; import { diff --git a/desktop/scripts/get-app-watch-folders.ts b/desktop/scripts/get-app-watch-folders.ts index 996afbabd..89c023eff 100644 --- a/desktop/scripts/get-app-watch-folders.ts +++ b/desktop/scripts/get-app-watch-folders.ts @@ -9,7 +9,7 @@ import fs from 'fs-extra'; import path from 'path'; -import getWatchFolders from '../static/getWatchFolders'; +import {getWatchFolders} from 'flipper-pkg'; import {appDir, pluginsDir} from './paths'; /** diff --git a/desktop/static/compilePlugins.ts b/desktop/static/compilePlugins.ts index faee602f3..ecfdf1d40 100644 --- a/desktop/static/compilePlugins.ts +++ b/desktop/static/compilePlugins.ts @@ -14,7 +14,7 @@ import util from 'util'; import recursiveReaddir from 'recursive-readdir'; import pMap from 'p-map'; import {homedir} from 'os'; -import getWatchFolders from './getWatchFolders'; +import {getWatchFolders} from 'flipper-pkg'; import {default as getPlugins, PluginManifest, PluginInfo} from './getPlugins'; import startWatchPlugins from './startWatchPlugins'; diff --git a/desktop/static/getPluginFolders.ts b/desktop/static/getPluginFolders.ts index 8d33fad33..bc3b64524 100644 --- a/desktop/static/getPluginFolders.ts +++ b/desktop/static/getPluginFolders.ts @@ -19,6 +19,12 @@ export default async function getPluginFolders( if (includeThirdparty) { pluginFolders.push(path.join(homedir(), '.flipper', 'thirdparty')); } + if (process.env.FLIPPER_NO_EMBEDDED_PLUGINS === 'true') { + console.log( + '🥫 Skipping embedded plugins because "--no-embedded-plugins" flag provided', + ); + return pluginFolders; + } const flipperConfigPath = path.join(homedir(), '.flipper', 'config.json'); if (await fs.pathExists(flipperConfigPath)) { const config = await fs.readJson(flipperConfigPath); diff --git a/desktop/static/package.json b/desktop/static/package.json index 5a2431f0f..13607d236 100644 --- a/desktop/static/package.json +++ b/desktop/static/package.json @@ -11,6 +11,7 @@ "fix-path": "^3.0.0", "fs-extra": "^8.1.0", "flipper-babel-transformer": "0.37.0", + "flipper-pkg": "0.37.0", "mem": "^6.0.0", "metro": "^0.59.0", "mkdirp": "^1.0.0",