Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

🚀 Astro Next (0.21.0) #1406

Merged
merged 107 commits into from
Oct 29, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
107 commits
Select commit Hold shift + click to select a range
94f3674
make astro-root uids unique
FredKSchott Aug 5, 2021
ddca8c4
Move Astro to Vite
drwpow Aug 6, 2021
d8cd8a4
Update tests
Sep 10, 2021
ec6dbab
More test improvements
drwpow Sep 11, 2021
c3e7b7f
fred fixes
FredKSchott Sep 15, 2021
7296e0b
Update compiler, improve tests
drwpow Sep 11, 2021
6e5ede2
Fix runtime, improve code frame
drwpow Sep 15, 2021
1581095
Add Markdown support
Sep 17, 2021
f255500
Tycho fixes
Sep 17, 2021
e8bc289
Fred fixes part 2
FredKSchott Sep 20, 2021
4c1e9a2
Throw Error for WIP Features
Sep 21, 2021
7fb6e9d
Improve testing suite
drwpow Sep 21, 2021
1d2da11
Allow users to pass config to Vite
drwpow Sep 21, 2021
71e721c
Fix npm install (#1407)
drwpow Sep 21, 2021
aa82d48
Automate publish on merge (#1408)
drwpow Sep 21, 2021
3d6b11f
Add NPM_TOKEN to publish script (#1409)
drwpow Sep 21, 2021
d3b1d3c
Create .npmrc
drwpow Sep 21, 2021
2c6451f
Clean up astro deps (#1411)
drwpow Sep 21, 2021
2624077
Use new renderers (#1412)
drwpow Sep 21, 2021
81a472e
feat: update compiler (#1421)
natemoo-re Sep 23, 2021
17a0c5b
Try mocha/chai test runners (#1418)
drwpow Sep 23, 2021
d77dfe0
Fix CI release on merge to next (#1427)
drwpow Sep 24, 2021
d2bcbbc
Fix logger locale parsing (#1439)
retronav Sep 29, 2021
64eb61e
Apply changes from #1387
matthewp Sep 30, 2021
c766c6b
Add back in support for children (#1486)
matthewp Oct 5, 2021
935831c
Enables most slot tests (#1494)
matthewp Oct 5, 2021
1bd3cf8
Add hydration to Solid renderer (#1479) (#1495)
matthewp Oct 5, 2021
3cd5a7f
[next] support Astro.slots API (#1516)
matthewp Oct 8, 2021
8359032
[next] Support for custom elements (#1528)
matthewp Oct 12, 2021
e342273
[next] Fix Astro.fetchContent (#1480)
FredKSchott Oct 12, 2021
35741b6
Move hydration to the compiler (#1547)
matthewp Oct 13, 2021
72b66dd
Brings back astro-dynamic tests (#1548)
matthewp Oct 13, 2021
c269f7b
Implements top-level Astro + Astro.resolve (#1556)
matthewp Oct 14, 2021
a38460c
[next] Update renderers (#1509)
natemoo-re Oct 14, 2021
7749e18
Chore: Enable more tests with new compiler changes (#1558)
drwpow Oct 15, 2021
6210690
[Next] `fetch` support (#1563)
natemoo-re Oct 15, 2021
cd76229
Restructure (#1569)
drwpow Oct 16, 2021
34a2573
Upgrade to @astrojs/compiler 0.2.0 (#1584)
matthewp Oct 18, 2021
38e731a
Use Vite fork (#1585)
matthewp Oct 18, 2021
dd147c3
Update files config
matthewp Oct 19, 2021
f881a03
Markdown compilation (#1593)
matthewp Oct 19, 2021
2ac2559
Gets lit hydration working (#1595)
matthewp Oct 19, 2021
94a513a
Gets Astro.fetchContent compilation to work (#1596)
matthewp Oct 19, 2021
a1c594f
Update Vite to latest (#1597)
drwpow Oct 19, 2021
b695c8a
Add Prism syntax highlighting (#1598)
matthewp Oct 19, 2021
d1f4235
Scoped styles with markdown (#1599)
matthewp Oct 19, 2021
e1b5250
Bugfix: fix getStaticPaths() cache miss (#1602)
drwpow Oct 20, 2021
bbf93de
Fix build order (#1609)
drwpow Oct 20, 2021
560721c
[next] blog example fully working (#1610)
matthewp Oct 20, 2021
18222cf
Add environment variables docs (Closes #873) (#1587)
AsyncBanana Oct 20, 2021
90b9c6e
Remove numbered comments (#1611)
drwpow Oct 20, 2021
5da14ca
comment style fixes (#1614)
FredKSchott Oct 21, 2021
dfe2386
[next] Upgrade compiler (#1619)
matthewp Oct 21, 2021
2c36d0a
feat: add fragment support to vite-plugin-astro (#1600)
natemoo-re Oct 21, 2021
51e5a45
[next] fix `.tsx` handling (#1620)
natemoo-re Oct 21, 2021
d1a73e4
[next] Add CSS preprocessing (#1589)
drwpow Oct 21, 2021
dff6457
fix issues in blog-multiple-authors (#1621)
FredKSchott Oct 22, 2021
4b25d55
Move Sass to deps (#1622)
drwpow Oct 22, 2021
330620e
Update renderer API for Vite (#1623)
drwpow Oct 22, 2021
4c9d3cf
Fix changesets (#1628)
drwpow Oct 22, 2021
b0ef391
Remove cheerio scanning from build stats (#1629)
drwpow Oct 22, 2021
2c15795
Minor change to jsxTransformOptions, update Renderer API docs (#1630)
drwpow Oct 22, 2021
b0e407d
[next] docs example fully working (#1627)
matthewp Oct 22, 2021
d9caef6
Add `class:list` directive (#1612)
jonathantneal Oct 22, 2021
b5226e6
fix: `define:vars` scoping for styles (#1632)
natemoo-re Oct 22, 2021
4647c99
feat: fix Debug component (#1633)
natemoo-re Oct 22, 2021
09bc35e
[next] Fix `<Markdown>` component (#1631)
natemoo-re Oct 22, 2021
06562af
[next] Fix `<Code>` component (#1635)
natemoo-re Oct 22, 2021
8206421
Fixes solid (#1634)
matthewp Oct 22, 2021
7f95d70
Add support for markdown plugins (#1650)
matthewp Oct 25, 2021
190e03b
Fix broken next release (#1652)
matthewp Oct 25, 2021
303f32f
Prevent passing to Svelte components
matthewp Oct 25, 2021
1103cb1
Prevent passing class to Vue components
matthewp Oct 25, 2021
07f7860
Add CSS injection, fix portfolio example (#1648)
drwpow Oct 25, 2021
0430c0e
Fixes external HMR (#1654)
matthewp Oct 25, 2021
aa0590a
Upgrade compiler version (#1655)
matthewp Oct 25, 2021
dd40617
Resolve renderers relative to the projectRoot (#1659)
matthewp Oct 26, 2021
c85c7e2
Template fixes (#1656)
drwpow Oct 26, 2021
55c8453
fix: dedupe hashes for identical islands (#1660)
natemoo-re Oct 26, 2021
8f699e5
fix: scope `define:vars` to `:root` for `<style global>` (#1663)
natemoo-re Oct 26, 2021
b04d478
chore: update compiler to latest (#1664)
natemoo-re Oct 27, 2021
56f74e2
[next] fix island hydration inside of `<Markdown>` (#1665)
natemoo-re Oct 27, 2021
5477dc1
Bugfix: renderer-lit missing files on npm (#1669)
drwpow Oct 27, 2021
7f74388
Force Vite to rebuild dependencies (#1670)
drwpow Oct 27, 2021
bd2ac13
[next] Add `preact/compat` renderer (#1668)
natemoo-re Oct 27, 2021
62684db
Bugfix: plugin-astro-fetch tries to append node-fetch to node-fetch (…
drwpow Oct 27, 2021
8c4720d
Fix Vite race condition (#1674)
matthewp Oct 27, 2021
a07a598
Fix with-nanostore deps (#1675)
drwpow Oct 27, 2021
9f44a51
[next] Fix `resolveDependency` on Windows (#1666)
natemoo-re Oct 27, 2021
387bd1a
Update CONTRIBUTING.md (#1677)
drwpow Oct 27, 2021
77cd898
Prevent scanning a user's deps (#1678)
matthewp Oct 27, 2021
e50cfa7
Adding a changeset for the remark plugin
matthewp Oct 27, 2021
502c799
Config changes needed for stater template (#1680)
matthewp Oct 27, 2021
2da8ce2
Next bugs (#1681)
natemoo-re Oct 27, 2021
e16e115
[next] update compiler (#1683)
natemoo-re Oct 27, 2021
acd1391
Fix Astro HMR bottleneck (#1684)
drwpow Oct 28, 2021
ee7b5e4
Bugfix: JSX renderers can be declared in any order (#1686)
drwpow Oct 28, 2021
934d085
chore: update compiler (#1690)
natemoo-re Oct 28, 2021
577d912
Exclude lit-server from being optimized (#1691)
matthewp Oct 28, 2021
a7e62de
fix: exclude all renderer server entrypoints (#1692)
natemoo-re Oct 28, 2021
c9b33d2
chore: update compiler (#1705)
natemoo-re Oct 29, 2021
6becdc8
fix: do not crash when Markdown has no content (#1702)
natemoo-re Oct 29, 2021
cb733cf
feat: improve support for third-party React packages (#1701)
natemoo-re Oct 29, 2021
eb7c63b
Remove prism warning when no language is provided (#1703)
matthewp Oct 29, 2021
8833a89
retry deploy
Oct 29, 2021
2b290af
chore: enter prerelease mode under `next` (#1707)
natemoo-re Oct 29, 2021
9f4e73f
Updates to the changesets (#1708)
matthewp Oct 29, 2021
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
5 changes: 5 additions & 0 deletions .changeset/dull-bikes-doubt.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@astrojs/prism': minor
---

Adds typings for the main entrypoint
11 changes: 11 additions & 0 deletions .changeset/pink-trainers-learn.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
---
'astro': minor
---

Astro 0.21 Beta release! This introduces the new version of Astro that includes:

- A new, faster, Go-based compiler
- A runtime backed by Vite, with faster dev experience
- New features

See more at https://astro.build/blog/astro-021-preview/
40 changes: 40 additions & 0 deletions .changeset/pre.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
{
"mode": "pre",
"tag": "next",
"initialVersions": {
"docs": "0.0.7",
"@example/blog": "0.0.1",
"@example/blog-multiple-authors": "0.0.1",
"@example/docs": "0.0.1",
"@example/framework-lit": "0.0.1",
"@example/framework-multiple": "0.0.1",
"@example/framework-preact": "0.0.1",
"@example/framework-react": "0.0.1",
"@example/framework-solid": "0.0.1",
"@example/framework-svelte": "0.0.1",
"@example/framework-vue": "0.0.1",
"@example/minimal": "0.0.1",
"@example/portfolio": "0.0.1",
"@example/starter": "0.0.1",
"@example/with-markdown": "0.0.1",
"@example/with-markdown-plugins": "0.0.2",
"@example/with-nanostores": "0.0.1",
"@example/with-tailwindcss": "0.0.1",
"astro": "0.20.12",
"@astrojs/parser": "0.20.2",
"@astrojs/prism": "0.2.2",
"@astrojs/astro-test-builtins-dep": "0.0.1",
"@astrojs/test-custom-element-renderer": "0.0.1",
"create-astro": "0.6.6",
"@astrojs/markdown-remark": "0.3.1",
"@astrojs/renderer-lit": "0.1.2",
"@astrojs/renderer-preact": "0.2.2",
"@astrojs/renderer-react": "0.2.2",
"@astrojs/renderer-solid": "0.1.1",
"@astrojs/renderer-svelte": "0.1.2",
"@astrojs/renderer-vue": "0.1.9",
"astro-scripts": "0.0.1",
"www": "1.1.0"
},
"changesets": []
}
5 changes: 5 additions & 0 deletions .changeset/silly-apples-build.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@astrojs/markdown-remark': minor
---

Adds prism support within the Markdown plugin.
10 changes: 10 additions & 0 deletions .changeset/tiny-bulldogs-lie.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
---
'@astrojs/renderer-lit': minor
'@astrojs/renderer-preact': minor
'@astrojs/renderer-react': minor
'@astrojs/renderer-solid': minor
'@astrojs/renderer-svelte': minor
'@astrojs/renderer-vue': minor
---

Updates the renderers to confirm to the new renderer API.
1 change: 1 addition & 0 deletions .eslintignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,4 @@
!packages/astro/**/*.js
!packages/astro/**/*.ts
packages/astro/test/**/*.js
packages/astro/vendor/vite/**/*
4 changes: 2 additions & 2 deletions .eslintrc.cjs
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,13 @@ module.exports = {
'@typescript-eslint/explicit-module-boundary-types': 'off',
'@typescript-eslint/no-empty-function': 'off',
'@typescript-eslint/no-explicit-any': 'off',
'@typescript-eslint/no-non-null-assertion': 'off',
'@typescript-eslint/no-unused-vars': 'off',
'@typescript-eslint/no-use-before-define': 'off',
'@typescript-eslint/no-var-requires': 'off',
'no-console': 'warn',
'no-shadow': 'error',
'prefer-const': 'off',
'prefer-rest-params': 'off',
'require-jsdoc': 'off',
// 'require-jsdoc': 'error', // re-enable this to enforce JSDoc for all functions
},
};
71 changes: 37 additions & 34 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,13 @@ jobs:
matrix:
os: [ubuntu-latest]
node_version: [12, 14, 16]
include:
- os: windows-latest
node_version: 14
# TODO: uncomment this (Vite has trouble resolving imports on Windows)
# include:
# - os: windows-latest
# node_version: 14
fail-fast: false

env:
LANG: en-us
name: 'Test: node-${{ matrix.node_version }}, ${{ matrix.os }}'
steps:
- name: Checkout
Expand Down Expand Up @@ -72,33 +74,34 @@ jobs:
- name: Lint
run: yarn lint

smoke:
runs-on: ubuntu-latest
name: 'Smoke: node-14, ubuntu-latest'
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0

- name: Set node version to 14
uses: actions/setup-node@v2
with:
node-version: 14
cache: 'yarn'

- name: Debug
run: yarn versions

- name: Install dependencies
run: yarn install --frozen-lockfile --ignore-engines

- name: Build
run: yarn build:all

- name: "Smoke Test: Build 'docs'"
run: yarn build
working-directory: ./docs

- name: "Smoke Test: Build 'www'"
run: yarn build
working-directory: ./www
# NOTE: temporarily disabled until `next` branch can build docs again
# smoke:
# runs-on: ubuntu-latest
# name: 'Smoke: node-14, ubuntu-latest'
# steps:
# - uses: actions/checkout@v2
# with:
# fetch-depth: 0

# - name: Set node version to 14
# uses: actions/setup-node@v2
# with:
# node-version: 14
# cache: 'yarn'

# - name: Debug
# run: yarn versions

# - name: Install dependencies
# run: yarn install --frozen-lockfile --ignore-engines

# - name: Build
# run: yarn build:all

# - name: "Smoke Test: Build 'docs'"
# run: yarn build
# working-directory: ./docs

# - name: "Smoke Test: Build 'www'"
# run: yarn build
# working-directory: ./www
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,5 @@ package-lock.json

# do not commit .env files or any files that end with `.env`
*.env

!packages/astro/vendor/vite/dist
61 changes: 48 additions & 13 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,17 @@ We welcome contributions of any size and skill level. As an open source project,
> **Tip for new contributors:**
> Take a look at [https://github.com/firstcontributions/first-contributions](https://github.com/firstcontributions/first-contributions) for helpful information on contributing

## Prerequisite
## Quick Guide

### Prerequisite

```shell
node: "^12.20.0 || ^14.13.1 || >=16.0.0"
yarn: "^1.22.10"
# otherwise, your build will fail
```

## Setting up your local repo
### Setting up your local repo

Astro uses yarn workspaces, so you should **always run `yarn install` from the top-level project directory.** running `yarn install` in the top-level project root will install dependencies for `astro`, `www`, `docs`, and every package in the repo.

Expand All @@ -23,7 +25,7 @@ yarn install
yarn build:all
```

## Development
### Development

```shell
# starts a file-watching, live-reloading dev script for active development
Expand All @@ -32,17 +34,26 @@ yarn dev
yarn build
```

## Running tests
#### Debugging Vite

You can debug vite by prefixing any command with `DEBUG` like so:

```
DEBUG=vite:* astro dev # debug everything in Vite
DEBUG=vite:[name] astro dev # debug specific process, e.g. "vite:deps" or "vite:transform"
```

### Running tests

```shell
# run this in the top-level project root to run all tests
yarn test
# run only a few tests, great for working on a single feature
# (example - `yarn test rss` runs `astro-rss.test.js` tests)
yarn test $STRING_MATCH
# (example - `yarn test -g "RSS"` runs `astro-rss.test.js`)
yarn test -g "$STRING_MATCH"
```

## Other useful commands
### Other useful commands

```shell
# auto-format the entire project
Expand All @@ -56,15 +67,15 @@ yarn format
yarn lint
```

## Making a Pull Request
### Making a Pull Request

When making a pull request, be sure to add a changeset when something has changed with Astro. Non-packages (`examples/*`, `docs/*`, and `www/*`) do not need changesets.

```shell
yarn changeset
```

## Running benchmarks
### Running benchmarks

We have benchmarks to keep performance under control. You can run these by running (from the project root):

Expand All @@ -83,15 +94,39 @@ node test/benchmark/dev.bench.js --save

Which will update the build and dev benchmarks.

# Releasing Astro
## Code Structure

Server-side rendering (SSR) can be complicated. The Astro package (`packages/astro`) is structured in a way to help think about the different systems.

- `components/`: Built-in components to use in your project (e.g. `import Code from 'astro/components/Code.astro'`)
- `src/`: Astro source
- `@types/`: TypeScript types. These are centralized to cut down on circular dependencies
- `cli/`: Code that powers the `astro` CLI command
- `core/`: Code that executes **in the top-level scope** (in Node). Within, you’ll find code that powers the `astro build` and `astro dev` commands, as well as top-level SSR code.
- `runtime/`: Code that executes **in different scopes** (i.e. not in a pure Node context). You’ll have to think about code differently here.
- `client/`: Code that executes **in the browser.** Astro’s partial hydration code lives here, and only browser-compatible code can be used.
- `server/`: Code that executes **inside Vite’s SSR.** Though this is a Node environment inside, this will be executed independently from `core/` and may have to be structured differently.
- `vite-plugin-*/`: Any Vite plugins that Astro needs to run. For the most part, these also execute within Vite similar to `src/runtime/server/`, but it’s also helpful to think about them as independent modules. _Note: at the moment these are internal while they’re in development_

### Thinking about SSR

There are 3 contexts in which code executes:

- **Node.js**: this code lives in `src/core/`.
- **Inside Vite**: this code lives in `src/runtime/server/`.
- **In the browser**: this code lives in `src/runtime/client/`.

Understanding in which environment code runs, and at which stage in the process, can help clarify thinking about what Astro is doing. It also helps with debugging, for instance, if you’re working within `src/core/`, you know that your code isn’t executing within Vite, so you don’t have to debug Vite’s setup. But you will have to debug vite inside `runtime/server/`.

## Releasing Astro

_Note: Only priviledged contributors (L3+) can release new versions of Astro._

The repo is set up with automatic releases, using the changeset GitHub action & bot.

To release a new version of Astro, find the `Version Packages` PR, read it over, and merge it.

## Releasing PR preview snapshots
### Releasing PR preview snapshots

Our release tool `changeset` has a feature for releasing "snapshot" releases from a PR or custom branch. These are npm package publishes that live temporarily, so that you can give users a way to test a PR before merging. This can be a great way to get early user feedback while still in the PR review process.

Expand All @@ -112,7 +147,7 @@ git reset --hard

Full documentation: https://github.com/atlassian/changesets/blob/main/docs/snapshot-releases.md

## Releasing `astro@next` (aka "prerelease mode")
### Releasing `astro@next` (aka "prerelease mode")

Sometimes, the repo will enter into "prerelease mode". In prerelease mode, our normal release process will publish npm versions under the `next` dist-tag, instead of the default `latest` tag. We do this from time-to-time to test large features before sharing them with the larger Astro audience.

Expand Down Expand Up @@ -154,7 +189,7 @@ When in prerelease mode, the automatic PR release process will no longer release
1. Go to https://github.com/snowpackjs/astro/releases/new and create a new release. Copy the new changelog entry from https://github.com/snowpackjs/astro/blob/latest/packages/astro/CHANGELOG.md.
1. Post in Discord #announcements channel, if needed!

# Translations
## Translations

Help us translate [docs.astro.build](https://docs.astro.build/) into as many languages as possible! This can be a great way to get involved with open source development without having to code.

Expand Down
2 changes: 1 addition & 1 deletion docs/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
"broken-link-checker": "^0.7.8",
"npm-run-all": "^4.1.5",
"pa11y-ci": "^2.4.2",
"prettier": "^2.3.2",
"prettier": "^2.4.1",
"start-server-and-test": "^1.12.6"
},
"dependencies": {
Expand Down
1 change: 1 addition & 0 deletions docs/src/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ export const SIDEBAR = {
{ text: 'RSS', link: 'guides/rss' },
{ text: 'Supported Imports', link: 'guides/imports' },
{ text: 'Aliases', link: 'guides/aliases' },
{ text: 'Environment Variables', link: 'guides/environment-variables' },
{ text: 'Deploy to the web', link: 'guides/deploy' },
{ text: 'Publish to npm', link: 'guides/publish-to-npm' },

Expand Down
11 changes: 1 addition & 10 deletions docs/src/pages/guides/data-fetching.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,11 +32,10 @@ console.log(data);

## Using `fetch()` outside of Astro Components

If you want to use `fetch()` in a non-astro component, use the [`node-fetch`](https://github.com/node-fetch/node-fetch) library:
If you want to use `fetch()` in a non-astro component, it is also globally available:

```tsx
// Movies.tsx
import fetch from 'node-fetch';
import type { FunctionalComponent } from 'preact';
import { h } from 'preact';

Expand All @@ -55,11 +54,3 @@ const Movies: FunctionalComponent = () => {

export default Movies;
```

If you load a component using `node-fetch` [interactively](/core-concepts/component-hydration), with `client:load`, `client:visible`, etc., you'll need to either not use `node-fetch` or switch to an [isomorphic](https://en.wikipedia.org/wiki/Isomorphic_JavaScript) library that will run both at build time and on the client, as the [`node-fetch` README.md](https://github.com/node-fetch/node-fetch#motivation) recommends:

> Instead of implementing XMLHttpRequest in Node.js to run browser-specific [Fetch polyfill](https://github.com/github/fetch), why not go from native http to fetch API directly? Hence, node-fetch, minimal code for a window.fetch compatible API on Node.js runtime.
>
> See Jason Miller's [isomorphic-unfetch](https://www.npmjs.com/package/isomorphic-unfetch) or Leonardo Quixada's [cross-fetch](https://github.com/lquixada/cross-fetch) for isomorphic usage (exports node-fetch for server-side, whatwg-fetch for client-side).

> Quoted from https://github.com/node-fetch/node-fetch#motivation
Loading