Commit Graph

42 Commits

Author SHA1 Message Date
Andrey Goncharov
9597e672a1 Provide @emotion/css to plugins
Summary: Changelog: Provide `emotion/css` to plugins

Reviewed By: antonk52

Differential Revision: D40057817

fbshipit-source-id: 1e931eb8527d62dd4312556a6d493fdf3e17b45a
2022-10-04 05:07:36 -07:00
Aero Wang
b596c9c797 Fix electron error during build for desktop plugins (#4145)
Summary:
Related GH issue: https://github.com/facebook/flipper/issues/4139

Context:
The current direction is that all plugins should be able to run in browser envs. Opening external windows, deeplinks and etc. should be abstracted away in getFlipperLib().
For plugin developers, it could be challenging to upgrade the existing plugins that rely on electron being present. We should not failing the build process for them because their plugins depend on electron.

Allow desktop plugin to build

Relevant ticket: https://github.com/facebook/flipper/issues/4139

Pull Request resolved: https://github.com/facebook/flipper/pull/4145

Reviewed By: mweststrate

Differential Revision: D39887902

Pulled By: mweststrate

fbshipit-source-id: 4132912b5a2b598c7897d434647cffed6980de19
2022-09-29 09:09:44 -07:00
Andrey Goncharov
982193df48 Fix plugin source maps in dev mode
Summary:
Start bundling source maps together with the source code itself in the dev mode. Therefore it is no longer required to add a link to the external source map file in dev mode.
In prod mode we still ship them separately.

Reviewed By: mweststrate

Differential Revision: D39775064

fbshipit-source-id: 6c56df7a3fce084c07a8618a63dbd8ae4741348c
2022-09-26 06:54:03 -07:00
Andrey Goncharov
dd7ba2d6fc Fix fb-stubs replacement for plugin bundling
Reviewed By: nikoant

Differential Revision: D39765543

fbshipit-source-id: 14cbf8a9bdf35031e636bbbde3dbc955faedb66b
2022-09-23 05:50:28 -07:00
Andrey Goncharov
fd811db12b Rebuild all plugins if a shared lib changed
Summary: Some plugins import from shared directories. These directories are not plugins themselves, therefore the current plugin root searching mechanism does nto work for them. To support plugin reloading for this scenario, we start re-building all plugins if we fail to find a plugin root.

Reviewed By: lblasa

Differential Revision: D39693820

fbshipit-source-id: 33dd7de4121bd5665a39b0ea96adce4603dc7df0
2022-09-22 04:17:24 -07:00
Andrey Goncharov
7c66a83328 Add source map copying for plugins
Reviewed By: nikoant

Differential Revision: D39576201

fbshipit-source-id: cd6b11bdb0a4c89e2f84d1c4772f08acc4b86418
2022-09-16 07:22:09 -07:00
Andrey Goncharov
c69d102ca1 Track plugin changes and notify frontend
Summary: Watch source plugin folders and notify frontend that any of them changed. In subsequent diffs, we will start reloading plugins that changed.

Reviewed By: lblasa

Differential Revision: D39539443

fbshipit-source-id: 726916c0bce336a2c0179558526bcb1b74e35b93
2022-09-15 10:02:19 -07:00
Andrey Goncharov
094c5bdfdd Provide external modules to plugins
Summary: esbuild references external modules via `require`. We wrap `require` to point the references to built-in modules to global variables

Reviewed By: lblasa

Differential Revision: D39311893

fbshipit-source-id: a99480161c082f4095d78c22271f114532f32c16
2022-09-15 10:02:19 -07:00
Andrey Goncharov
94df830dfb Migrate plugin bundling to esbuild
Summary: With esbuild bundling all plugins takes a couple of seconds instead of 3-5 minutes with metro. As a result, we can stop including plugins into Flipper's bundle for development and always bundle them separately. It reduces complexity of our build pipeline and makes the dev build work more like our prod build. It also allows us to stop bundling flipper-server code and just compile it instead.

Reviewed By: lblasa

Differential Revision: D39262048

fbshipit-source-id: c4da0f2ea2807015d98e0d070349c39b2118e189
2022-09-15 10:02:19 -07:00
Andrey Goncharov
9449f61adb Add server add-on babel transform
Reviewed By: antonk52

Differential Revision: D34393126

fbshipit-source-id: d910392d9ac7e7a44e2e9ede690a6bed77f018c7
2022-02-28 03:50:34 -08:00
Andrey Goncharov
5cdb7c952e Update build scripts to support bundling server add-ons
Summary: Summary

Reviewed By: nikoant

Differential Revision: D34170565

fbshipit-source-id: be9904809bf33e85536a4c6ead0e753ef05209ff
2022-02-28 03:50:34 -08:00
Anton Kastritskiy
48d43c7367 rename from ts to tsx in pkg and pkg-lib
Summary: mass rename files

Reviewed By: passy

Differential Revision: D33890034

fbshipit-source-id: 1c654a4f7f5b83eaa56a8c11df863003e8d7bed7
2022-01-31 06:22:56 -08:00
Andres Suarez
79023ee190 Update copyright headers from Facebook to Meta
Reviewed By: bhamodi

Differential Revision: D33331422

fbshipit-source-id: 016e8dcc0c0c7f1fc353a348b54fda0d5e2ddc01
2021-12-27 14:31:45 -08:00
Pascal Hartig
0e1f8e45ec Refactor out strip source map fn
Summary: Remove the duplicate function and centralise it as nikoant suggested.

Reviewed By: fabiomassimo

Differential Revision: D29548480

fbshipit-source-id: 3e931cc88198415017c557c6b7c81cb35c3f22c9
2021-07-05 06:37:09 -07:00
Anton Nikolaev
56f502af07 Exclude docs from package checksum computation
Summary: We don't need to re-publish plugin package when only docs are changed, so excluding "docs" from checksum computation

Differential Revision: D29508239

fbshipit-source-id: dfae89432f68b784caf07ae24ba7711f76c649b4
2021-07-01 02:59:09 -07:00
Pascal Hartig
77612a3f7b Strip source map URL from bundled plugins
Summary: Sandcastle embedded the box ID in the source map URL which caused it to invalidate the caches. It shouldn't be there to begin with but the Metro option doesn't work as it's documented.

Reviewed By: nikoant

Differential Revision: D29456824

fbshipit-source-id: 5d8c5f29e2b344d046c802693e4da68fda92b8db
2021-06-29 07:48:05 -07:00
Pascal Hartig
8df81d2dc0 Generate source maps for releases
Summary:
Allows for optional generation of source maps while building plugins.

Caveat: This will leave a broken `//# sourceMappingURL` comment at the bottom. If you set it to `null`, as the documentation suggests, you will instead get an inlined source map in addition to the written one.

Reviewed By: nikoant

Differential Revision: D29265385

fbshipit-source-id: 1e21e49d2516ecc5909b086e7797736b298b86ab
2021-06-21 11:11:38 -07:00
Anton Nikolaev
c0c9363a1f Ignore flipper version when computing plugin checksum
Summary: To be able to save min required Flipper version into the package.json, we need to ignore it when computing hashsum. Otherwise hashsum of plugin will depend on the current Flipper version and so bumping Flipper will change hashsums of all plugins.

Reviewed By: passy

Differential Revision: D28342965

fbshipit-source-id: 289ec7e673bce1f2b1cbb402b56c5b1b31fd84da
2021-05-12 07:49:13 -07:00
Pascal Hartig
f1b8aeffd7 Disable mangling and compression
Summary:
This is not doing much in terms of size. We're talking 780 bytes after
PACK compression but we're losing a lot of information in our errors
(before have symbolication).

We may reenable this at some point but I think it might be safe to leave it to this.

Reviewed By: nikoant

Differential Revision: D27887636

fbshipit-source-id: 15affeac588db667914320cbd098f7041b8b9c09
2021-04-20 11:34:43 -07:00
Anton Nikolaev
c065760d15 Stable babel transformation cache key
Summary:
This diff makes babel transformation cache key stable. With the previous approach it was changed on each CI build so it was not possible to persist cache between builds. Now it is computed from the transformation package content after each build. Because of that it is equal for every CI build while Babel transformations unchanged and so we could use same cache on different Sandcastle agents.

In addition to that, it makes it possible to specify directory for Metro cache so we can save/restore it in CI builds.

Reviewed By: mweststrate

Differential Revision: D26877989

fbshipit-source-id: 7cb04a177f86e61986585e5a74d9c7396ddddc18
2021-03-10 08:09:02 -08:00
Anton Nikolaev
baeb8ba5be Performance improvements for "build-plugin" task
Summary:
Few improvements for "build-plugin" task which together with Sandcastle command changes (D26872427) helps to build all plugins in CI ~30% faster if most of them has not changed (which is usually the case):
1) compute package checksum in the same script to not call additional yarn scripts for each plugin
2) avoid packaging plugin if it's checksum has not changed since last release

Reviewed By: mweststrate

Differential Revision: D26872253

fbshipit-source-id: 968102d32a1550ea7503f1169f0ef2863296383f
2021-03-10 08:09:02 -08:00
Anton Nikolaev
31763b7499 Resolve dev and peer dependencies for metro watcher
Summary: I've noticed that some plugins cannot be packaged after switching to Sandy and using "antd" as peer dependency. This change should fix this issue.

Reviewed By: mweststrate

Differential Revision: D25177510

fbshipit-source-id: cfb740a757c9eb83cf0e5165abed3f9c9f5591fa
2020-11-26 01:47:08 -08:00
Anton Nikolaev
39e02f5852 Fix flipper-pkg
Summary: flipper-pkg is broken because of metro package name change. This change should fix it.

Reviewed By: priteshrnandgaonkar

Differential Revision: D24591217

fbshipit-source-id: 2036c43bc0c2bb052e56740a03dc248e7daa8cfc
2020-10-28 06:28:27 -07:00
Anton Nikolaev
187fd25fc8 Fix loading of Sandy plugins packaged by flipper-pkg
Summary:
Flipper cannot load Sandy plugins packaged by flipper-pkg, because the latter only expose default export, but Sandy API is using named exports instead ("Component" and "plugin").

This change fixes this by exposing both default and named exports from plugin package.

Reviewed By: passy

Differential Revision: D23815769

fbshipit-source-id: 1dd273b2e7b98bd01148506037066c41ffd19eb8
2020-09-21 09:45:41 -07:00
Rakha Kanz Kautsar
573bf8a940 Fix scoped symlink module resolution (#1482)
Summary:
Fixes https://github.com/facebook/flipper/issues/1481

## Changelog

Fix symlinked scoped module resolving to outer directory

Pull Request resolved: https://github.com/facebook/flipper/pull/1482

Test Plan:
Added one more case to the existing test case for `getWatchFolders.ts`

```
❯ yarn run test:debug getWatchFolders
yarn run v1.22.4
$ yarn build:pkg && node --inspect node_modules/.bin/jest --runInBand getWatchFolders
$ cd pkg && yarn build
$ tsc -b
Debugger listening on ws://127.0.0.1:9229/41e16e0b-8a44-42fe-93ac-9dd9d06e418d
For help, see: https://nodejs.org/en/docs/inspector
 PASS  pkg-lib/src/__tests__/getWatchFolders.node.ts
  getWatchFolders
    ✓ getWatchFolders correctly resolves symlinked packages (12 ms)

Test Suites: 1 passed, 1 total
Tests:       1 passed, 1 total
Snapshots:   1 passed, 1 total
Time:        2.358 s
Ran all test suites matching /getWatchFolders/i.
{emoji:2728}  Done in 8.60s.
```

Reviewed By: mweststrate

Differential Revision: D23293357

Pulled By: nikoant

fbshipit-source-id: de2a506693727489238c6f6ec62d07526f8f0c69
2020-08-24 06:14:36 -07:00
Anton Nikolaev
e545a50045 Rolled back removing inline source map for plugins build
Summary: After some testing I found file source map does not work as expected when prod version of Flipper is used to debug plugin. So returning back inline source maps. Note that this only affects debug builds, for production builds no source maps will be produced anyway.

Reviewed By: passy

Differential Revision: D22161927

fbshipit-source-id: 068b9da09da4dcb6c31aff4e5a15bd6438f686b3
2020-06-23 03:55:41 -07:00
Anton Nikolaev
f436f192eb Fix getWatchFolder script to resolve workspaces transitive dependencies (#1289)
Summary:
Pull Request resolved: https://github.com/facebook/flipper/pull/1289

getWatchFolder script updated to resolve symlinked transitive dependencies. Before this change the script only resolved 1st direct symlinked dependencies.

Reviewed By: mweststrate

Differential Revision: D22161469

fbshipit-source-id: c30802a413259021aaca99c08743dc762ed877eb
2020-06-23 03:55:41 -07:00
Anton Nikolaev
b69996ca50 Remove inlined source maps from debug builds
Summary: Disabled producing inline source maps for debug builds. Source maps are already writte to "map" files, so this does not make sense to also inline them to the js bundle. Passing "sourceMapUrl" parameter to Metro fixed this.

Reviewed By: mweststrate

Differential Revision: D22159501

fbshipit-source-id: f06225cd43f44a7f93afcc32bb0501323b35d0c3
2020-06-22 06:11:29 -07:00
Anton Nikolaev
c359d666c5 Use default Metro implementation of source module ID mappings for "flipper-pkg bundle"
Summary: Use default Metro implementation of source module ID mappings for "flipper-pkg bundle". The problem with the custom implementation we used before is that it is not deterministic, i.e. produced bundles are different on different machines. We need deterministic bundles to reliably detect if the version changed from the last deployment to Marketplace.

Reviewed By: mweststrate

Differential Revision: D22158794

fbshipit-source-id: ae4b4b05e020489c0900423107a938a5b670e7d8
2020-06-22 02:40:59 -07:00
Anton Nikolaev
21ab8dc25c "flipper-pkg" option for creating production bundle
Summary:
Development bundle: NODE_ENV=development, disabled minification, enabled source maps.

Production bundle: NODE_ENV=production, enabled minification, disabled source maps.

Changelog: Added "--production" option for "flipper-pkg bundle" command to produce minified plugin packages without source maps.

Reviewed By: mweststrate

Differential Revision: D22158791

fbshipit-source-id: 0f9ac84ca39ac3fb86f0c0b0a3c1be866445a305
2020-06-22 02:40:59 -07:00
Anton Nikolaev
ecfdeb2276 Make external typings re-usable across all the workspaces
Summary: Our external typings were only effective for the main "app" package. In this diff I've made them effective for all other workspaces too, and also cleaned up typescript configs.

Reviewed By: passy

Differential Revision: D21927361

fbshipit-source-id: ceb8009255583d969d79cc11b20dfe8b686f2fb3
2020-06-08 08:57:06 -07:00
Anton Nikolaev
339b786fb5 Added new package "flipper-plugin-lib" which contains re-usable code related to plugin installation
Summary: No functional changes, just refactoring for easier implementation of plugin updates installation

Reviewed By: passy

Differential Revision: D21902525

fbshipit-source-id: fbfa221a89b879b0d08127676b27df65ef63307d
2020-06-05 06:16:19 -07:00
Pascal Hartig
d7035b7e7d Whitelist cjs extension for metro
Summary: This is required for the new release of promisify-child-process.

Reviewed By: mweststrate

Differential Revision: D21543812

fbshipit-source-id: dc254ea51381696b9927f7c62dd36e10ef00fcac
2020-05-13 10:22:02 -07:00
Anton Nikolaev
1cf3c30b7c "migrate" command for flipper-pkg tool
Summary: "migrate" command for easy migration of existing Flipper plugins to the specification version 2.

Reviewed By: passy

Differential Revision: D21253913

fbshipit-source-id: 9edb170fbaa10e9c3f670d5d68e69f4f6106c151
2020-04-28 05:01:06 -07:00
Anton Nikolaev
21c574ac80 "lint" command for flipper-pkg tool
Summary:
Implemented json schema for flipper plugin package.json and used it for validation in "flipper-pkg lint" command.

Nice thing about json schema is that it not only allows to validate json, but also can be referenced using "$schema" property in json so IDEs like VSCode can find it and use for code completion, validation and to show properties documentation. I'm going to deploy the schema as a part of documentation website so it can be referenced as https://fbflipper.com/schemas/plugin-package/v2.json.

Also the "$schema" field can be used instead of "specVersion" to determine the specification according to which the plugin is defined. E.g., if specification version 3 would be created, it will be described in schema https://fbflipper.com/schemas/plugin-package/v3.json, etc.

Reviewed By: passy

Differential Revision: D21228294

fbshipit-source-id: f21351e584ef936a7d6b314436448489691f83a6
2020-04-27 17:34:11 -07:00
Anton Nikolaev
ec07272c78 Linter checks for extraneous dependencies
Summary: Added eslint rule "no-extraneous-imports" which disallow using modules which are not listed as dependencies in the corresponding package.json. Fixed a bunch of reported errors after the rule applied.

Reviewed By: passy

Differential Revision: D21186848

fbshipit-source-id: 0af9ac4b3fffdfd0ab7c23ae4ff12a3f5989d5e9
2020-04-23 05:33:20 -07:00
Pascal Hartig
9c18a98f89 Enable build minification
Summary: This shaves another ~6MB of the zipped build. Less than I would have thought, but I haven't looked at the alternative options so far at all.

Reviewed By: nikoant

Differential Revision: D21131772

fbshipit-source-id: 641515d6f36fdeeffa5be81d64c2c1043a9e4e34
2020-04-21 02:10:49 -07:00
Anton Nikolaev
2cf9eeb224 Fix the tests failing on Windows (#1036)
Summary:
Pull Request resolved: https://github.com/facebook/flipper/pull/1036

Fixed the tests failing on Windows

Reviewed By: passy

Differential Revision: D21144338

fbshipit-source-id: 3b76a5d42a764a2eec89e26ee0ca94bd739e46bd
2020-04-21 01:42:51 -07:00
Anton Nikolaev
3ff2d3bf99 Add "id" field to Flipper plugin manifest
Summary:
Added "id" field to Flipper plugin manifest which is used to match native and desktop plugin parts. Before that, "name" field was used both as npm package name and as plugin id.

The problem is that currently there are a lot of plugins which has invalid values in "name", e.g. not starting with "flipper-package-", or containing upper cased letters.

Simple renaming of "name" field can be very problematic, so we need a new field to avoid any breaking changes and keep historical analytics data which is also bound to plugin id.

Reviewed By: mweststrate

Differential Revision: D21129689

fbshipit-source-id: efd143c82a6a802cc0b5438fd3f509bd99aded0e
2020-04-20 11:14:36 -07:00
Anton Nikolaev
8a7470556e Re-use pkg-lib for runtime plugin compilation
Summary: Re-use the same function for plugin building both at publishing time by "flipper-pkg" and in runtime by Flipper itself.

Reviewed By: jknoxville

Differential Revision: D21129685

fbshipit-source-id: b7bff6737310352d28a14223128f127ac4d2eebf
2020-04-20 06:59:38 -07:00
Anton Nikolaev
ca2d04a5da Versioning for plugin format
Summary:
Added versioning for plugin format.

The first version is where "main" points to source code entry and plugins are bundled by Flipper in run-time on loading them.

The second version is where "main" points to the already existing bundle and Flipper just loads it without bundling. The plugins of version 2 must be bundled using "flipper-pkg" tool before publishing.

Changelog: Support new packaging format for plugins.

Reviewed By: mweststrate

Differential Revision: D21074173

fbshipit-source-id: 7b70250e48e5bd5d359c96149fb5b14e67783c4d
2020-04-20 06:03:16 -07:00
Anton Nikolaev
21b79af5f2 Split package "flipper-pkg" into two: lib and cli
Summary: "flipper-pkg" added ~2MB to Flipper disttributive size, because of heavy dependencies which are only required for CLI functionality. See size warning in diff D21068373 in this stack where I added pkg as dependency to flipper. Here I'm splitting it into library and CLI packages, so Flipper app will only reference the library.

Reviewed By: passy

Differential Revision: D21087336

fbshipit-source-id: d9d62f1e75a835d1c0fa78ff1addb0d9a761a9c7
2020-04-17 10:01:31 -07:00