Commit Graph

1538 Commits

Author SHA1 Message Date
dependabot[bot] 69e92f2664 build(deps-dev): bump @wdio/local-runner from 7.16.14 to 7.16.16 in /web
Bumps [@wdio/local-runner](https://github.com/webdriverio/webdriverio) from 7.16.14 to 7.16.16.
- [Release notes](https://github.com/webdriverio/webdriverio/releases)
- [Changelog](https://github.com/webdriverio/webdriverio/blob/main/CHANGELOG.md)
- [Commits](https://github.com/webdriverio/webdriverio/compare/v7.16.14...v7.16.16)

---
updated-dependencies:
- dependency-name: "@wdio/local-runner"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-03-01 22:40:39 +02:00
dependabot[bot] 093e68d967 build(deps-dev): bump @typescript-eslint/parser in /web
Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 5.9.1 to 5.13.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v5.13.0/packages/parser)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/parser"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-03-01 22:40:26 +02:00
Chris Midgley cf7b6b2515
web: Don't include query parameters in downloaded SWF name (#6368)
* fix: don't include query parameters in downloaded SWF name

* refactor: store swfUrl as URL
2022-02-28 22:27:56 +02:00
elliot 2b162e8532
web: Add `isPlaying` property to `RufflePlayer` (#6294) 2022-02-28 21:28:19 +02:00
relrelb fa459f7547 core: Require `serde` feature
Enable it unconditionally as a preparation for depending on `serde_json`,
which will need `serde::Serialize`.
2022-02-27 23:19:46 +02:00
Chris Midgley 453b0f1fe3 desktop: swap out tinyfiledialogs for rfd 2022-02-23 22:45:26 +02:00
relrelb 2ca62ecf4b web: Remove tests on Node.js 14
There seems to be no good reason for testing on Node.js other than
the current LTS. Moreover, npm@6 has a wontfix issue when upgrading
to 8.4 on Windows, which requires a complex workaround: https://github.com/npm/cli/issues/4341#issuecomment-1040608101.

So avoid it by simply not supporting it.
2022-02-18 17:01:09 +02:00
dependabot[bot] a3288fa20c build(deps): bump serde from 1.0.133 to 1.0.136
Bumps [serde](https://github.com/serde-rs/serde) from 1.0.133 to 1.0.136.
- [Release notes](https://github.com/serde-rs/serde/releases)
- [Commits](https://github.com/serde-rs/serde/compare/v1.0.133...v1.0.136)

---
updated-dependencies:
- dependency-name: serde
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-13 18:10:43 +02:00
dependabot[bot] e2778add2c build(deps): bump follow-redirects from 1.14.7 to 1.14.8 in /web
Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.14.7 to 1.14.8.
- [Release notes](https://github.com/follow-redirects/follow-redirects/releases)
- [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.14.7...v1.14.8)

---
updated-dependencies:
- dependency-name: follow-redirects
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-13 16:56:15 +01:00
dependabot[bot] bd9dbf84da build(deps-dev): bump @types/chrome from 0.0.177 to 0.0.178 in /web
Bumps [@types/chrome](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/chrome) from 0.0.177 to 0.0.178.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/chrome)

---
updated-dependencies:
- dependency-name: "@types/chrome"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-11 11:09:30 +02:00
dependabot[bot] 9c6ac9ccee build(deps-dev): bump @wdio/static-server-service in /web
Bumps [@wdio/static-server-service](https://github.com/webdriverio/webdriverio) from 7.16.13 to 7.16.14.
- [Release notes](https://github.com/webdriverio/webdriverio/releases)
- [Changelog](https://github.com/webdriverio/webdriverio/blob/main/CHANGELOG.md)
- [Commits](https://github.com/webdriverio/webdriverio/compare/v7.16.13...v7.16.14)

---
updated-dependencies:
- dependency-name: "@wdio/static-server-service"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-11 10:35:22 +02:00
dependabot[bot] 1b17d36204 build(deps-dev): bump @typescript-eslint/eslint-plugin in /web
Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 5.9.1 to 5.11.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v5.11.0/packages/eslint-plugin)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/eslint-plugin"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-11 10:35:09 +02:00
dependabot[bot] a23836b782 build(deps-dev): bump sign-addon from 3.10.0 to 3.11.0 in /web
Bumps [sign-addon](https://github.com/mozilla/sign-addon) from 3.10.0 to 3.11.0.
- [Release notes](https://github.com/mozilla/sign-addon/releases)
- [Commits](https://github.com/mozilla/sign-addon/compare/3.10.0...3.11.0)

---
updated-dependencies:
- dependency-name: sign-addon
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-11 01:02:08 +02:00
dependabot[bot] cb4f7fc634 build(deps-dev): bump webpack-cli from 4.9.1 to 4.9.2 in /web
Bumps [webpack-cli](https://github.com/webpack/webpack-cli) from 4.9.1 to 4.9.2.
- [Release notes](https://github.com/webpack/webpack-cli/releases)
- [Changelog](https://github.com/webpack/webpack-cli/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack/webpack-cli/compare/webpack-cli@4.9.1...webpack-cli@4.9.2)

---
updated-dependencies:
- dependency-name: webpack-cli
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-11 01:01:28 +02:00
dependabot[bot] 9da9669a49 build(deps-dev): bump ts-node from 10.4.0 to 10.5.0 in /web
Bumps [ts-node](https://github.com/TypeStrong/ts-node) from 10.4.0 to 10.5.0.
- [Release notes](https://github.com/TypeStrong/ts-node/releases)
- [Commits](https://github.com/TypeStrong/ts-node/compare/v10.4.0...v10.5.0)

---
updated-dependencies:
- dependency-name: ts-node
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-11 01:01:18 +02:00
dependabot[bot] 6f2b2433cc build(deps-dev): bump @wdio/mocha-framework in /web
Bumps [@wdio/mocha-framework](https://github.com/webdriverio/webdriverio) from 7.16.13 to 7.16.14.
- [Release notes](https://github.com/webdriverio/webdriverio/releases)
- [Changelog](https://github.com/webdriverio/webdriverio/blob/main/CHANGELOG.md)
- [Commits](https://github.com/webdriverio/webdriverio/compare/v7.16.13...v7.16.14)

---
updated-dependencies:
- dependency-name: "@wdio/mocha-framework"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-11 01:01:06 +02:00
dependabot[bot] 02000f8e92 build(deps-dev): bump eslint from 8.6.0 to 8.8.0 in /web
Bumps [eslint](https://github.com/eslint/eslint) from 8.6.0 to 8.8.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v8.6.0...v8.8.0)

---
updated-dependencies:
- dependency-name: eslint
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-11 01:00:52 +02:00
dependabot[bot] 6cd3055a1f build(deps-dev): bump stylelint-config-standard in /web
Bumps [stylelint-config-standard](https://github.com/stylelint/stylelint-config-standard) from 24.0.0 to 25.0.0.
- [Release notes](https://github.com/stylelint/stylelint-config-standard/releases)
- [Changelog](https://github.com/stylelint/stylelint-config-standard/blob/main/CHANGELOG.md)
- [Commits](https://github.com/stylelint/stylelint-config-standard/compare/24.0.0...25.0.0)

---
updated-dependencies:
- dependency-name: stylelint-config-standard
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-11 01:00:32 +02:00
dependabot[bot] af59af115f build(deps-dev): bump chromedriver from 96.0.0 to 98.0.0 in /web
Bumps [chromedriver](https://github.com/giggio/node-chromedriver) from 96.0.0 to 98.0.0.
- [Release notes](https://github.com/giggio/node-chromedriver/releases)
- [Commits](https://github.com/giggio/node-chromedriver/compare/96.0.0...98.0.0)

---
updated-dependencies:
- dependency-name: chromedriver
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-10 22:17:01 +02:00
dependabot[bot] 0152a6aa34 build(deps-dev): bump typescript from 4.5.4 to 4.5.5 in /web
Bumps [typescript](https://github.com/Microsoft/TypeScript) from 4.5.4 to 4.5.5.
- [Release notes](https://github.com/Microsoft/TypeScript/releases)
- [Commits](https://github.com/Microsoft/TypeScript/compare/v4.5.4...v4.5.5)

---
updated-dependencies:
- dependency-name: typescript
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-02 09:01:19 +02:00
dependabot[bot] 85ce9ebdcb build(deps-dev): bump mocha from 9.1.3 to 9.2.0 in /web
Bumps [mocha](https://github.com/mochajs/mocha) from 9.1.3 to 9.2.0.
- [Release notes](https://github.com/mochajs/mocha/releases)
- [Changelog](https://github.com/mochajs/mocha/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mochajs/mocha/compare/v9.1.3...v9.2.0)

---
updated-dependencies:
- dependency-name: mocha
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-02 00:08:58 +02:00
dependabot[bot] 390d69e1f7 build(deps-dev): bump webpack from 5.65.0 to 5.68.0 in /web
Bumps [webpack](https://github.com/webpack/webpack) from 5.65.0 to 5.68.0.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v5.65.0...v5.68.0)

---
updated-dependencies:
- dependency-name: webpack
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-01 23:05:16 +02:00
dependabot[bot] 0c715c369f build(deps-dev): bump sign-addon from 3.9.0 to 3.10.0 in /web
Bumps [sign-addon](https://github.com/mozilla/sign-addon) from 3.9.0 to 3.10.0.
- [Release notes](https://github.com/mozilla/sign-addon/releases)
- [Commits](https://github.com/mozilla/sign-addon/compare/3.9.0...3.10.0)

---
updated-dependencies:
- dependency-name: sign-addon
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-01 23:05:01 +02:00
dependabot[bot] e77a57d190 build(deps-dev): bump @wdio/local-runner from 7.16.13 to 7.16.14 in /web
Bumps [@wdio/local-runner](https://github.com/webdriverio/webdriverio) from 7.16.13 to 7.16.14.
- [Release notes](https://github.com/webdriverio/webdriverio/releases)
- [Changelog](https://github.com/webdriverio/webdriverio/blob/main/CHANGELOG.md)
- [Commits](https://github.com/webdriverio/webdriverio/compare/v7.16.13...v7.16.14)

---
updated-dependencies:
- dependency-name: "@wdio/local-runner"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-01 23:04:33 +02:00
dependabot[bot] 15ef91f905 build(deps-dev): bump webpack-dev-server from 4.7.2 to 4.7.3 in /web
Bumps [webpack-dev-server](https://github.com/webpack/webpack-dev-server) from 4.7.2 to 4.7.3.
- [Release notes](https://github.com/webpack/webpack-dev-server/releases)
- [Changelog](https://github.com/webpack/webpack-dev-server/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack/webpack-dev-server/compare/v4.7.2...v4.7.3)

---
updated-dependencies:
- dependency-name: webpack-dev-server
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-01 23:04:11 +02:00
dependabot[bot] 3c0f08fb7d build(deps-dev): bump @types/mocha from 9.0.0 to 9.1.0 in /web
Bumps [@types/mocha](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/mocha) from 9.0.0 to 9.1.0.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/mocha)

---
updated-dependencies:
- dependency-name: "@types/mocha"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-01 23:03:57 +02:00
dependabot[bot] 33ac55402a build(deps-dev): bump @types/chrome from 0.0.174 to 0.0.177 in /web
Bumps [@types/chrome](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/chrome) from 0.0.174 to 0.0.177.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/chrome)

---
updated-dependencies:
- dependency-name: "@types/chrome"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-01 23:03:41 +02:00
dependabot[bot] 3531abb293 build(deps-dev): bump stylelint from 14.2.0 to 14.3.0 in /web
Bumps [stylelint](https://github.com/stylelint/stylelint) from 14.2.0 to 14.3.0.
- [Release notes](https://github.com/stylelint/stylelint/releases)
- [Changelog](https://github.com/stylelint/stylelint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/stylelint/stylelint/compare/14.2.0...14.3.0)

---
updated-dependencies:
- dependency-name: stylelint
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-01 23:03:25 +02:00
dependabot[bot] f5e1a197d1 build(deps-dev): bump chai from 4.3.4 to 4.3.6 in /web
Bumps [chai](https://github.com/chaijs/chai) from 4.3.4 to 4.3.6.
- [Release notes](https://github.com/chaijs/chai/releases)
- [Changelog](https://github.com/chaijs/chai/blob/4.x.x/History.md)
- [Commits](https://github.com/chaijs/chai/compare/v4.3.4...v4.3.6)

---
updated-dependencies:
- dependency-name: chai
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-01 23:03:08 +02:00
Mike Welsh 55da3cd7d0 chore: Add .cargo/config.toml for workspace-level lint config
Currently it is not directly possible to configure lints for the
entire workspace via TOML, which forced us to repeat `#![allow]`
blocks in each crate.

embark pointed out this workaround to configure lints at the
workspace level via RUSTFLAGS:

https://github.com/EmbarkStudios/rust-ecosystem/issues/22#issuecomment-947011395

Remove the common `#![allow]` blocks and switch to this method for
global lint config.

Temporarily allow `needless_borrow` lint, buggy pending this fix:
https://github.com/rust-lang/rust-clippy/pull/8355
2022-01-29 14:22:44 -08:00
Toad06 c14569e3d4 web: Add `refresh` method to `navigator.plugins` 2022-01-26 18:53:33 -08:00
Daniel Jacobs c0880225ff selfhosted: Use absolute URLs for links in README 2022-01-26 18:51:06 -08:00
nosamu f23c03129a
extension: URL-encode the SWF URL for the player page
When the user clicks the "Open in a new tab" button, the extension's internal `player.html` page opens, with a URL parameter `?url=[the SWF URL]`. Right now, this URL parameter is not properly encoded. This causes a problem when we get to https://github.com/ruffle-rs/ruffle/blob/master/web/packages/extension/src/player.ts#L14:
> `const swfUrl = url.searchParams.get("url");` 
Because the value "url" parameter was not properly encoded, any `&` character in the SWF URL would be interpreted as the start of a *new* parameter, instead of being part of the actual SWF URL. So anything after the first `&` symbol in the SWF URL would be chopped off.
On Itch.io Flash pages such as https://rarykos.itch.io/hug-me-im-cold, the SWF URL contains several important parameters - if they are not included, the server returns 403 Forbidden (it's a type of hotlinking protection). So when the user clicked the "Open in a new tab" button on Itch.io pages, the SWF would refuse to load in the player.
This PR fixes the problem - Itch.io SWFs load when opened in a new tab after my change is applied.
2022-01-24 19:01:11 -08:00
relrelb 809e91d029 demo: Serve on default port
The switch to 8081 seems like a leftover from #5250.
Return to the default 8080.
2022-01-24 13:29:42 -08:00
relrelb 059c1a3417 web: Add a comment about `ignorePatterns` 2022-01-16 11:07:00 -08:00
relrelb 2f1cb9f655 web: Disallow non-const TypeScript enums
They generate unnecessary code.
2022-01-16 11:07:00 -08:00
relrelb 479719f425 web: De-duplicate TypeScript ESLint rules
Pull them to the root config, using the `overrides` feature:
https://eslint.org/docs/user-guide/configuring/configuration-files#configuration-based-on-glob-patterns
2022-01-16 11:07:00 -08:00
relrelb 5bf8b46ab5 web: Integrate Prettier into Stylelint 2022-01-16 11:07:00 -08:00
relrelb 94d82aa060 web: Convert more files from JSON to YAML 2022-01-16 11:07:00 -08:00
relrelb d0eb6adbc0 web: Fix `publicPath` when loaded from a CDN
CDNs allow omitting the filename:

* https://unpkg.com/@ruffle-rs/ruffle
* https://cdn.jsdelivr.net/npm/@ruffle-rs/ruffle

That caused `currentScriptURL` to be determined incorrectly:

```js
new URL(".", "https://unpkg.com/@ruffle-rs/ruffle").href
// "https://unpkg.com/@ruffle-rs/"
```

If the filename is omitted, append a slash to prevent the last
component from being dropped:

```js
new URL(".", "https://unpkg.com/@ruffle-rs/ruffle/").href
// "https://unpkg.com/@ruffle-rs/ruffle/"
```
2022-01-15 14:49:19 -08:00
TÖRÖK Attila 483028707f web: Add custom profiles to separate the build cache for the two wasm modules 2022-01-13 12:28:00 -08:00
relrelb 5f033743f0 web: Mark packages as private
This prevents accidental publication of packages that shouldn't
be published. Some packages were already marked as such, so it's a
bit more consistent.
2022-01-12 21:24:19 -08:00
relrelb 7cffddca97 extension: Fix typo
We actually append the build number (the `BUILD_ID` environment variable,
which originates from `github.run_number` in the CI), not the build date.
2022-01-12 21:24:19 -08:00
relrelb 38549fdbdf web: Publish NPM package
Publish nightly releases as part of the CI, so Ruffle can be easily
integrated into a website using a CDN (such as jsDelivr). It would
also be easier for websites to keep up-to-date, as NPM auto-updates
the `latest` tag to refer to the latest release.

A dedicated `package.json` is used for the published NPM package,
because `ruffle-selfhosted` depends on the private `ruffle-core`
package, which shouldn't be published.

Also, the `version` field must monotonically increase. So Webpack
auto-fills it to be `0.1.0-nightly.YYYY.MM.DD`. This format satisfies
a couple of needs:
* Newer nightly releases should take precedence over older ones.
* Stable releases (e.g. `1.0.0`) should take precedence over nightly
ones.
2022-01-12 21:24:19 -08:00
relrelb 3f8f117fd3 web: Convert .eslintrc files from JSON to YAML
YAML is shorter, more modern, readable, and flexible than JSON.
In other words, YAML >>> JSON.

Auto-converted using [`yq`](https://github.com/kislyuk/yq).
2022-01-12 20:10:00 -08:00
Mike Welsh 70bb5fa3f2 extension: Change unsafe-eval to wasm-eval in CSP
`unsafe-eval` was needed in the extension Content Security
Policy to Wasm compilation in Chrome.

This CSP setting causes the extension to get flagged in the
Mozilla Add-On Marketplace, which discourages the use of
`unsafe-eval`.

However, Chrome has a `wasm-eval` CSP setting which also allows
extensions to compile Wasm without requiring `unsafe-eval`.
Inject this into the extension manifest when building the Chrome
extension.

Eventually this may change to `wasm-unsafe-eval` as drafted by
the CSP spec and be required by all browsers.
2022-01-12 11:29:36 -08:00
TÖRÖK Attila db6731be2c web: Detect and log whether WebAssembly extensions are actually used 2022-01-12 11:29:16 -08:00
TÖRÖK Attila 44e59a0012 web,ci: Only build the vanilla module by default, use it as stand-in for the other
And enable the module that really uses WebAssembly extensions for the
releases by running the new "npm run build:dual-wasm" command, which
sets the ENABLE_WASM_EXTENSIONS=true environment variable.
2022-01-12 11:29:16 -08:00
TÖRÖK Attila ab69c12649 web: Build two WASM modules, with/without extensions, load the appropriate one 2022-01-12 11:29:16 -08:00
relrelb 7f4f40621b web: Migrate to npm workspaces
`lerna` is a bit stale, and as such it currently has some outdated
dependencies which Dependabot warns on.
Fortunately, npm 7 supports monorepos natively, via "workspaces". So
simply replace `lerna` with this feature. The migration is pretty
neat and requires a very little invervention.

Because Node.js 14 comes with npm 6 by default, upgrade it manually
as shown in https://github.com/bahmutov/npm-install/issues/103#issuecomment-931226602.
2022-01-11 13:17:48 -08:00