Murderlon 11 months ago
parent
commit
233dc8d6ab

+ 41 - 42
.github/CONTRIBUTING.md

@@ -20,7 +20,6 @@ corepack enable
 ```
 
 [Corepack]: https://nodejs.org/api/corepack.html
-
 [Yarn]: https://yarnpkg.com/
 
 ## Development
@@ -79,28 +78,28 @@ throughout this section.
 The following steps describe the actions that take place when a user
 Authenticates and Uploads from Dropbox through Companion:
 
-* The visitor to a website with Uppy clicks `Connect to Dropbox`.
-* Uppy sends a request to Companion, which in turn sends an OAuth request to
+- The visitor to a website with Uppy clicks `Connect to Dropbox`.
+- Uppy sends a request to Companion, which in turn sends an OAuth request to
   Dropbox (Requires that OAuth credentials from Dropbox have been added to
   Companion).
-* Dropbox asks the visitor to log in, and whether the Website should be allowed
+- Dropbox asks the visitor to log in, and whether the Website should be allowed
   to access your files
-* If the visitor agrees, Companion will receive a token from Dropbox, with which
+- If the visitor agrees, Companion will receive a token from Dropbox, with which
   we can temporarily download files.
-* Companion encrypts the token with a secret key and sends the encrypted token
+- Companion encrypts the token with a secret key and sends the encrypted token
   to Uppy (client)
-* Every time the visitor clicks on a folder in Uppy, it asks Companion for the
+- Every time the visitor clicks on a folder in Uppy, it asks Companion for the
   new list of files, with this question, the token (still encrypted by
   Companion) is sent along.
-* Companion decrypts the token, requests the list of files from Dropbox and
+- Companion decrypts the token, requests the list of files from Dropbox and
   sends it to Uppy.
-* When a file is selected for upload, Companion receives the token again
+- When a file is selected for upload, Companion receives the token again
   according to this procedure, decrypts it again, and thereby downloads the file
   from Dropbox.
-* As the bytes arrive, Companion uploads the bytes to the final destination
+- As the bytes arrive, Companion uploads the bytes to the final destination
   (depending on the configuration: Apache, a Tus server, S3 bucket, etc).
-* Companion reports progress to Uppy, as if it were a local upload.
-* Completed!
+- Companion reports progress to Uppy, as if it were a local upload.
+- Completed!
 
 ### Instagram integration
 
@@ -159,11 +158,11 @@ Now you should be able to test the Instagram integration.
 
 ### Requiring files
 
-* If we are `require()`ing a file from the same subpackage, we can freely use
+- If we are `require()`ing a file from the same subpackage, we can freely use
   relative imports as long as the required file is under the `src` directory
   (for example to import `@uppy/dashboard/src/utils/hi.js` from
   `@uppy/dashboard/src/index.js`, use `require('./utils/hi.js')`).
-* But if we want to `require()` some file from another subpackage - we should
+- But if we want to `require()` some file from another subpackage - we should
   use global @uppy requires, and they should always be in the form of
   `@uppy/:packageName/(lib instead of src)/(same path).js`
 
@@ -231,25 +230,25 @@ cancelled later), for example using their iOS app.
 Releases are managed by GitHub Actions, here’s an overview of the process to
 release a new Uppy version:
 
-* Run `yarn release` on your local machine.
-* Follow the instructions and select what packages to release. **Warning:**
+- Run `yarn release` on your local machine.
+- Follow the instructions and select what packages to release. **Warning:**
   skipping packages results in those changes being “lost”, meaning they won’t be
   picked up in the changelog automatically next release. Always try to release
   all.
-* Before committing, check if the generated files look good.
-* When asked to edit the next CHANGELOG, only include changes related to the
+- Before committing, check if the generated files look good.
+- When asked to edit the next CHANGELOG, only include changes related to the
   package(s) you selected for release.
-* Push to the Transloadit repository using the command given by the tool. Do not
+- Push to the Transloadit repository using the command given by the tool. Do not
   open a PR yourself, the GitHub Actions will create one and assign you to it.
-* Wait for all the GitHub Actions checks to pass. If one fails, try to figure
+- Wait for all the GitHub Actions checks to pass. If one fails, try to figure
   out why. Do not go ahead without consulting the rest of the team.
-* Review the PR thoroughly, and if everything looks good to you, approve the PR.
+- Review the PR thoroughly, and if everything looks good to you, approve the PR.
   Do not merge it manually!
-* After the PR is automatically merged, the demos on transloadit.com should also
+- After the PR is automatically merged, the demos on transloadit.com should also
   be updated. Check that some things work locally:
-  * the demos in the demo section work (try one that uses an import robot, and
+  - the demos in the demo section work (try one that uses an import robot, and
     one that you need to upload to)
-  * the demos on the homepage work and can import from Google Drive, Instagram,
+  - the demos on the homepage work and can import from Google Drive, Instagram,
     Dropbox, etc.
 
 If you don’t have access to the transloadit.com source code ping @arturi or
@@ -395,9 +394,9 @@ queries to add any styles to the tablet or desktop breakpoints.
 
 ### Selector, rule ordering
 
-* All selectors are sorted alphabetically and by type.
-* HTML elements go above classes and IDs in a file.
-* Rules are sorted alphabetically.
+- All selectors are sorted alphabetically and by type.
+- HTML elements go above classes and IDs in a file.
+- Rules are sorted alphabetically.
 
 ```scss
 /* BAD */
@@ -438,11 +437,11 @@ said integration with the Uppy team. After discussing the integration, you can
 get started on it. First off, you need to construct the basic components for
 your integration. The following components are the current standard:
 
-* `Dashboard`: Inline Dashboard (`inline: true`)
-* `DashboardModal`: Dashboard as a modal
-* `DragDrop`
-* `ProgressBar`
-* `StatusBar`
+- `Dashboard`: Inline Dashboard (`inline: true`)
+- `DashboardModal`: Dashboard as a modal
+- `DragDrop`
+- `ProgressBar`
+- `StatusBar`
 
 All these components should function as references to the normal component.
 Depending on how the framework you’re using handles references to the DOM, your
@@ -457,10 +456,10 @@ through the code of those integrations, as they lay out a pretty good structure.
 After the basic components have been built, here are a few more important tasks
 to get done:
 
-* Add TypeScript support in some capacity (if possible)
-* Write documentation
-* Add an example
-* Configuring the build system
+- Add TypeScript support in some capacity (if possible)
+- Write documentation
+- Add an example
+- Configuring the build system
 
 ### Common issues
 
@@ -509,12 +508,12 @@ Generally, documentation for integrations can be broken down into a few pieces
 that apply to every component, and then documentation for each component. The
 structure should look something like this:
 
-* Installation
-* Initializing Uppy (may vary depending on how the framework handles reactivity)
-* Usage
-* _For each component_
-  * Loading CSS
-  * Props
+- Installation
+- Initializing Uppy (may vary depending on how the framework handles reactivity)
+- Usage
+- _For each component_
+  - Loading CSS
+  - Props
 
 It may be easier to copy the documentation of earlier integrations and change
 the parts that need to be changed rather than writing this from scratch.

+ 59 - 56
README.md

@@ -6,10 +6,10 @@ Uppy is a sleek, modular JavaScript file uploader that integrates seamlessly
 with any application. It’s fast, has a comprehensible API and lets you worry
 about more important problems than building a file uploader.
 
-* **Fetch** files from local disk, remote URLs, Google Drive, Dropbox, Box,
+- **Fetch** files from local disk, remote URLs, Google Drive, Dropbox, Box,
   Instagram or snap and record selfies with a camera
-* **Preview** and edit metadata with a nice interface
-* **Upload** to the final destination, optionally process/encode
+- **Preview** and edit metadata with a nice interface
+- **Upload** to the final destination, optionally process/encode
 
 <img src="https://github.com/transloadit/uppy/raw/main/assets/uppy-2-0-demo-aug-2021.gif">
 
@@ -55,22 +55,22 @@ and its plugins.
 
 ## Features
 
-* Lightweight, modular plugin-based architecture, light on dependencies :zap:
-* Resumable file uploads via the open [tus](https://tus.io/) standard, so large
+- Lightweight, modular plugin-based architecture, light on dependencies :zap:
+- Resumable file uploads via the open [tus](https://tus.io/) standard, so large
   uploads survive network hiccups
-* Supports picking files from: Webcam, Dropbox, Box, Google Drive, Instagram,
+- Supports picking files from: Webcam, Dropbox, Box, Google Drive, Instagram,
   bypassing the user’s device where possible, syncing between servers directly
   via [@uppy/companion](https://uppy.io/docs/companion)
-* Works great with file encoding and processing backends, such as
+- Works great with file encoding and processing backends, such as
   [Transloadit](https://transloadit.com), works great without (all you need is
   to roll your own Apache/Nginx/Node/FFmpeg/etc backend)
-* Sleek user interface :sparkles:
-* Optional file recovery (after a browser crash) with
+- Sleek user interface :sparkles:
+- Optional file recovery (after a browser crash) with
   [Golden Retriever](https://uppy.io/docs/golden-retriever/)
-* Speaks several languages (i18n) :earth\_africa:
-* Built with accessibility in mind
-* Free for the world, forever (as in beer 🍺, pizza 🍕, and liberty 🗽)
-* Cute as a puppy, also accepts cat pictures :dog:
+- Speaks several languages (i18n) :earth_africa:
+- Built with accessibility in mind
+- Free for the world, forever (as in beer 🍺, pizza 🍕, and liberty 🗽)
+- Cute as a puppy, also accepts cat pictures :dog:
 
 ## Installation
 
@@ -115,15 +115,15 @@ object.
 
 ## Documentation
 
-* [Uppy](https://uppy.io/docs/uppy/) — full list of options, methods and events
-* [Plugins](https://uppy.io/docs/plugins/) — list of Uppy plugins and their
+- [Uppy](https://uppy.io/docs/uppy/) — full list of options, methods and events
+- [Plugins](https://uppy.io/docs/plugins/) — list of Uppy plugins and their
   options
-* [Companion](https://uppy.io/docs/companion/) — setting up and running a
+- [Companion](https://uppy.io/docs/companion/) — setting up and running a
   Companion instance, which adds support for Instagram, Dropbox, Box, Google
   Drive and remote URLs
-* [React](https://uppy.io/docs/react/) — components to integrate Uppy UI plugins
+- [React](https://uppy.io/docs/react/) — components to integrate Uppy UI plugins
   with React apps
-* [Architecture & Writing a Plugin](https://uppy.io/docs/writing-plugins/) — how
+- [Architecture & Writing a Plugin](https://uppy.io/docs/writing-plugins/) — how
   to write a plugin for Uppy
 
 ## Plugins
@@ -132,35 +132,35 @@ object.
 
 ### UI Elements
 
-* [`Dashboard`](https://uppy.io/docs/dashboard/) — universal UI with previews,
+- [`Dashboard`](https://uppy.io/docs/dashboard/) — universal UI with previews,
   progress bars, metadata editor and all the cool stuff. Required for most UI
   plugins like Webcam and Instagram
-* [`Progress Bar`](https://uppy.io/docs/progress-bar/) — minimal progress bar
+- [`Progress Bar`](https://uppy.io/docs/progress-bar/) — minimal progress bar
   that fills itself when upload progresses
-* [`Status Bar`](https://uppy.io/docs/status-bar/) — more detailed progress,
+- [`Status Bar`](https://uppy.io/docs/status-bar/) — more detailed progress,
   pause/resume/cancel buttons, percentage, speed, uploaded/total sizes (included
   by default with `Dashboard`)
-* [`Informer`](https://uppy.io/docs/informer/) — send notifications like “smile”
+- [`Informer`](https://uppy.io/docs/informer/) — send notifications like “smile”
   before taking a selfie or “upload failed” when all is lost (also included by
   default with `Dashboard`)
 
 ### Sources
 
-* [`Drag & Drop`](https://uppy.io/docs/drag-drop/) — plain drag and drop area
-* [`File Input`](https://uppy.io/docs/file-input/) — even plainer “select files”
+- [`Drag & Drop`](https://uppy.io/docs/drag-drop/) — plain drag and drop area
+- [`File Input`](https://uppy.io/docs/file-input/) — even plainer “select files”
   button
-* [`Webcam`](https://uppy.io/docs/webcam/) — snap and record those selfies 📷
-* ⓒ [`Google Drive`](https://uppy.io/docs/google-drive/) — import files from
+- [`Webcam`](https://uppy.io/docs/webcam/) — snap and record those selfies 📷
+- ⓒ [`Google Drive`](https://uppy.io/docs/google-drive/) — import files from
   Google Drive
-* ⓒ [`Dropbox`](https://uppy.io/docs/dropbox/) — import files from Dropbox
-* ⓒ [`Box`](https://uppy.io/docs/box/) — import files from Box
-* ⓒ [`Instagram`](https://uppy.io/docs/instagram/) — import images and videos
+- ⓒ [`Dropbox`](https://uppy.io/docs/dropbox/) — import files from Dropbox
+- ⓒ [`Box`](https://uppy.io/docs/box/) — import files from Box
+- ⓒ [`Instagram`](https://uppy.io/docs/instagram/) — import images and videos
   from Instagram
-* ⓒ [`Facebook`](https://uppy.io/docs/facebook/) — import images and videos from
+- ⓒ [`Facebook`](https://uppy.io/docs/facebook/) — import images and videos from
   Facebook
-* ⓒ [`OneDrive`](https://uppy.io/docs/onedrive/) — import files from Microsoft
+- ⓒ [`OneDrive`](https://uppy.io/docs/onedrive/) — import files from Microsoft
   OneDrive
-* ⓒ [`Import From URL`](https://uppy.io/docs/url/) — import direct URLs from
+- ⓒ [`Import From URL`](https://uppy.io/docs/url/) — import direct URLs from
   anywhere on the web
 
 The ⓒ mark means that [`@uppy/companion`](https://uppy.io/docs/companion), a
@@ -168,37 +168,37 @@ server-side component, is needed for a plugin to work.
 
 ### Destinations
 
-* [`Tus`](https://uppy.io/docs/tus/) — resumable uploads via the open
+- [`Tus`](https://uppy.io/docs/tus/) — resumable uploads via the open
   [tus](http://tus.io) standard
-* [`XHR Upload`](https://uppy.io/docs/xhr-upload/) — regular uploads for any
+- [`XHR Upload`](https://uppy.io/docs/xhr-upload/) — regular uploads for any
   backend out there (like Apache, Nginx)
-* [`AWS S3`](https://uppy.io/docs/aws-s3/) — plain upload to AWS S3 or
+- [`AWS S3`](https://uppy.io/docs/aws-s3/) — plain upload to AWS S3 or
   compatible services
-* [`AWS S3 Multipart`](https://uppy.io/docs/aws-s3-multipart/) — S3-style
+- [`AWS S3 Multipart`](https://uppy.io/docs/aws-s3-multipart/) — S3-style
   “Multipart” upload to AWS or compatible services
 
 ### File Processing
 
-* [`Transloadit`](https://uppy.io/docs/transloadit/) — support for
+- [`Transloadit`](https://uppy.io/docs/transloadit/) — support for
   [Transloadit](http://transloadit.com)’s robust file uploading and encoding
   backend
 
 ### Miscellaneous
 
-* [`Golden Retriever`](https://uppy.io/docs/golden-retriever/) — restores files
+- [`Golden Retriever`](https://uppy.io/docs/golden-retriever/) — restores files
   after a browser crash, like it’s nothing
-* [`Thumbnail Generator`](https://uppy.io/docs/thumbnail-generator/) — generates
+- [`Thumbnail Generator`](https://uppy.io/docs/thumbnail-generator/) — generates
   image previews (included by default with `Dashboard`)
-* [`Form`](https://uppy.io/docs/form/) — collects metadata from `<form>` right
+- [`Form`](https://uppy.io/docs/form/) — collects metadata from `<form>` right
   before an Uppy upload, then optionally appends results back to the form
-* [`Redux`](https://uppy.io/docs/redux/) — for your emerging
+- [`Redux`](https://uppy.io/docs/redux/) — for your emerging
   [time traveling](https://github.com/gaearon/redux-devtools) needs
 
 ## React
 
-* [React](https://uppy.io/docs/react/) — components to integrate Uppy UI plugins
+- [React](https://uppy.io/docs/react/) — components to integrate Uppy UI plugins
   with React apps
-* [React Native](./examples/react-native-expo/) — basic Uppy component for React
+- [React Native](./examples/react-native-expo/) — basic Uppy component for React
   Native with Expo
 
 ## Browser Support
@@ -213,29 +213,29 @@ Having no JavaScript beats having a lot of it, so that’s a fair question!
 Running an uploading & encoding business for ten years though we found that in
 cases, the file input leaves some to be desired:
 
-* We received complaints about broken uploads and found that resumable uploads
+- We received complaints about broken uploads and found that resumable uploads
   are important, especially for big files and to be inclusive towards people on
   poorer connections (we also launched [tus.io](https://tus.io) to attack that
   problem). Uppy uploads can survive network outages and browser crashes or
   accidental navigate-aways.
-* Uppy supports editing meta information before uploading.
-* Uppy allows cropping images before uploading.
-* There’s the situation where people are using their mobile devices and want to
+- Uppy supports editing meta information before uploading.
+- Uppy allows cropping images before uploading.
+- There’s the situation where people are using their mobile devices and want to
   upload on the go, but they have their picture on Instagram, files in Dropbox
   or a plain file URL from anywhere on the open web. Uppy allows to pick files
   from those and push it to the destination without downloading it to your
   mobile device first.
-* Accurate upload progress reporting is an issue on many platforms.
-* Some file validation — size, type, number of files — can be done on the client
+- Accurate upload progress reporting is an issue on many platforms.
+- Some file validation — size, type, number of files — can be done on the client
   with Uppy.
-* Uppy integrates webcam support, in case your users want to upload a
+- Uppy integrates webcam support, in case your users want to upload a
   picture/video/audio that does not exist yet :)
-* A larger drag and drop surface can be pleasant to work with. Some people also
+- A larger drag and drop surface can be pleasant to work with. Some people also
   like that you can control the styling, language, etc.
-* Uppy is aware of encoding backends. Often after an upload, the server needs to
+- Uppy is aware of encoding backends. Often after an upload, the server needs to
   rotate, detect faces, optimize for iPad, or what have you. Uppy can track
   progress of this and report back to the user in different ways.
-* Sometimes you might want your uploads to happen while you continue to interact
+- Sometimes you might want your uploads to happen while you continue to interact
   on the same single page.
 
 Not all apps need all these features. An `<input type="file">` is fine in many
@@ -276,8 +276,8 @@ or via direct URLs (with more services coming).
 
 ## Contributions are welcome
 
-* Contributor’s guide in [`.github/CONTRIBUTING.md`](.github/CONTRIBUTING.md)
-* Changelog to track our release progress (we aim to roll out a release every
+- Contributor’s guide in [`.github/CONTRIBUTING.md`](.github/CONTRIBUTING.md)
+- Changelog to track our release progress (we aim to roll out a release every
   month): [`CHANGELOG.md`](CHANGELOG.md)
 
 ## Used by
@@ -562,7 +562,10 @@ Use Uppy in your project?
 
 ## Software
 
-We use Browserstack for manual testing <a href="https://www.browserstack.com" target="_blank"> <img align="left" width="117" alt="BrowserStack logo" src="https://i.ibb.co/HDRDHmx/Browserstack-logo-2x.png"> </a>
+We use Browserstack for manual testing
+<a href="https://www.browserstack.com" target="_blank">
+<img align="left" width="117" alt="BrowserStack logo" src="https://i.ibb.co/HDRDHmx/Browserstack-logo-2x.png">
+</a>
 
 ## License
 

+ 41 - 50
docs/companion.md

@@ -247,11 +247,11 @@ Redis so that any instance can serve the client’s requests. Note that sticky
 sessions are **not** needed with this setup. Here are the requirements for this
 setup:
 
-* The instances need to be connected to the same Redis server.
-* You need to set `COMPANION_SECRET` to the same value on both servers.
-* if you use the `companionKeysParams` feature (Transloadit), you also need
+- The instances need to be connected to the same Redis server.
+- You need to set `COMPANION_SECRET` to the same value on both servers.
+- if you use the `companionKeysParams` feature (Transloadit), you also need
   `COMPANION_PREAUTH_SECRET` to be the same on each instance.
-* All other configuration needs to be the same, except if you’re running many
+- All other configuration needs to be the same, except if you’re running many
   instances on the same machine, then `COMPANION_PORT` should be different for
   each instance.
 
@@ -479,9 +479,9 @@ The name of the bucket to store uploaded files in.
 It can be function that returns the name of the bucket as a `string` and takes
 the following arguments:
 
-* [`http.IncomingMessage`][], the HTTP request (will be `null` for remote
+- [`http.IncomingMessage`][], the HTTP request (will be `null` for remote
   uploads)
-* metadata provided by the user for the file (will be `undefined` for local
+- metadata provided by the user for the file (will be `undefined` for local
   uploads)
 
 ##### `s3.region` `COMPANION_AWS_REGION`
@@ -499,9 +499,9 @@ You can supply any
 [S3 option supported by the AWS SDK](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#constructor-property)
 in the `providerOptions.s3.awsClientOptions` object, _except for_ the below:
 
-* `accessKeyId`. Instead, use the `providerOptions.s3.key` property. This is to
+- `accessKeyId`. Instead, use the `providerOptions.s3.key` property. This is to
   make configuration names consistent between different Companion features.
-* `secretAccessKey`. Instead, use the `providerOptions.s3.secret` property. This
+- `secretAccessKey`. Instead, use the `providerOptions.s3.secret` property. This
   is to make configuration names consistent between different Companion
   features.
 
@@ -517,12 +517,12 @@ Get the key name for a file. The key is the file path to which the file will be
 uploaded in your bucket. This option should be a function receiving three
 arguments:
 
-* `req` [`http.IncomingMessage`][], the HTTP request, for _regular_ S3 uploads
+- `req` [`http.IncomingMessage`][], the HTTP request, for _regular_ S3 uploads
   using the `@uppy/aws-s3` plugin. This parameter is _not_ available for
   multipart uploads using the `@uppy/aws-s3` or `@uppy/aws-s3-multipart`
   plugins. This parameter is `null` for remote uploads.
-* `filename`, the original name of the uploaded file;
-* `metadata`, user-provided metadata for the file.
+- `filename`, the original name of the uploaded file;
+- `metadata`, user-provided metadata for the file.
 
 This function should return a string `key`. The `req` parameter can be used to
 upload to a user-specific folder in your bucket, for example:
@@ -638,7 +638,7 @@ Allowed CORS Origins (default `true`). Passed as the `origin` option in
 
 #### `COMPANION_CLIENT_ORIGINS_REGEX`
 
-Like COMPANION\_CLIENT\_ORIGINS, but allows a single regex instead.
+Like COMPANION_CLIENT_ORIGINS, but allows a single regex instead.
 `COMPANION_CLIENT_ORIGINS` will be ignored if this is used. This is a
 standalone-only option.
 
@@ -662,14 +662,14 @@ Set this to `false` to disable the
 The object returned by `companion.app()` also has a property `companionEmitter`
 which is an `EventEmitter` that emits the following events:
 
-* `upload-start` - When an upload starts, this event is emitted with an object
+- `upload-start` - When an upload starts, this event is emitted with an object
   containing the property `token`, which is a unique ID for the upload.
-* **token** - The event name is the token from `upload-start`. The event has an
+- **token** - The event name is the token from `upload-start`. The event has an
   object with the following properties:
-  * `action` - One of the following strings:
-    * `success` - When the upload succeeds.
-    * `error` - When the upload fails with an error.
-  * `payload` - the error or success payload.
+  - `action` - One of the following strings:
+    - `success` - When the upload succeeds.
+    - `error` - When the upload fails with an error.
+  - `payload` - the error or success payload.
 
 Example code for using the `EventEmitter` to handle a finished file upload:
 
@@ -711,28 +711,28 @@ throughout this section.
 The following steps describe the actions that take place when a user
 Authenticates and Uploads from Dropbox through Companion:
 
-* The visitor to a website with Uppy clicks `Connect to Dropbox`.
-* Uppy sends a request to Companion, which in turn sends an OAuth request to
+- The visitor to a website with Uppy clicks `Connect to Dropbox`.
+- Uppy sends a request to Companion, which in turn sends an OAuth request to
   Dropbox (Requires that OAuth credentials from Dropbox have been added to
   Companion).
-* Dropbox asks the visitor to log in, and whether the Website should be allowed
+- Dropbox asks the visitor to log in, and whether the Website should be allowed
   to access your files
-* If the visitor agrees, Companion will receive a token from Dropbox, with which
+- If the visitor agrees, Companion will receive a token from Dropbox, with which
   we can temporarily download files.
-* Companion encrypts the token with a secret key and sends the encrypted token
+- Companion encrypts the token with a secret key and sends the encrypted token
   to Uppy (client)
-* Every time the visitor clicks on a folder in Uppy, it asks Companion for the
+- Every time the visitor clicks on a folder in Uppy, it asks Companion for the
   new list of files, with this question, the token (still encrypted by
   Companion) is sent along.
-* Companion decrypts the token, requests the list of files from Dropbox and
+- Companion decrypts the token, requests the list of files from Dropbox and
   sends it to Uppy.
-* When a file is selected for upload, Companion receives the token again
+- When a file is selected for upload, Companion receives the token again
   according to this procedure, decrypts it again, and thereby downloads the file
   from Dropbox.
-* As the bytes arrive, Companion uploads the bytes to the final destination
+- As the bytes arrive, Companion uploads the bytes to the final destination
   (depending on the configuration: Apache, a Tus server, S3 bucket, etc).
-* Companion reports progress to Uppy, as if it were a local upload.
-* Completed!
+- Companion reports progress to Uppy, as if it were a local upload.
+- Completed!
 
 ### How to use provider redirect URIs?
 
@@ -805,9 +805,9 @@ with an `Error`):
    directory). See [example returned list data structure](#list-data). `token` -
    authorization token (retrieved from oauth process) to send along with your
    request
-   * `directory` - the id/name of the directory from which data is to be
+   - `directory` - the id/name of the directory from which data is to be
      retrieved. This may be ignored if it doesn’t apply to your provider
-   * `query` - expressjs query params object received by the server (in case
+   - `query` - expressjs query params object received by the server (in case
      some data you need in there).
 2. `async download ({ token, id, query })` - Downloads a particular file from
    the provider. Returns an object with a single property `{ stream }` - a
@@ -815,27 +815,27 @@ with an `Error`):
    which will be read from and uploaded to the destination. To prevent memory
    leaks, make sure you release your stream if you reject this method with an
    error.
-   * `token` - authorization token (retrieved from oauth process) to send along
+   - `token` - authorization token (retrieved from oauth process) to send along
      with your request.
-   * `id` - ID of the file being downloaded.
-   * `query` - expressjs query params object received by the server (in case
+   - `id` - ID of the file being downloaded.
+   - `query` - expressjs query params object received by the server (in case
      some data you need in there).
 3. `async size ({ token, id, query })` - Returns the byte size of the file that
    needs to be downloaded as a `Number`. If the size of the object is not known,
    `null` may be returned.
-   * `token` - authorization token (retrieved from oauth process) to send along
+   - `token` - authorization token (retrieved from oauth process) to send along
      with your request.
-   * `id` - ID of the file being downloaded.
-   * `query` - expressjs query params object received by the server (in case
+   - `id` - ID of the file being downloaded.
+   - `query` - expressjs query params object received by the server (in case
      some data you need in there).
 
 The class must also have:
 
-* A unique `static authProvider` string property - a lowercased value which
+- A unique `static authProvider` string property - a lowercased value which
   indicates name of the [`grant`](https://github.com/simov/grant) OAuth2
   provider to use (e.g `google` for Google). If your provider doesn’t use
   OAuth2, you can omit this property.
-* A `static` property `static version = 2`, which is the current version of the
+- A `static` property `static version = 2`, which is the current version of the
   Companion Provider API.
 
 See also
@@ -912,24 +912,15 @@ This would get the Companion instance running on `http://localhost:3020`. It
 uses [nodemon](https://github.com/remy/nodemon) so it will automatically restart
 when files are changed.
 
-[`http.incomingmessage`]: https://nodejs.org/api/http.html#class-httpincomingmessage
-
+[`http.incomingmessage`]:
+	https://nodejs.org/api/http.html#class-httpincomingmessage
 [box]: /docs/box
-
 [dropbox]: /docs/dropbox
-
 [facebook]: /docs/facebook
-
 [googledrive]: /docs/google-drive
-
 [instagram]: /docs/instagram
-
 [onedrive]: /docs/onedrive
-
 [unsplash]: /docs/unsplash
-
 [url]: /docs/url
-
 [zoom]: /docs/zoom
-
 [transloadit]: https://transloadit.com

+ 7 - 7
docs/guides/building-plugins.md

@@ -8,12 +8,12 @@ You can find already a few useful Uppy plugins out there, but there might come a
 time when you will want to build your own. Plugins can hook into the upload
 process or render a custom UI, typically to:
 
-* Render some custom UI element, such as [StatusBar](/docs/status-bar) or
+- Render some custom UI element, such as [StatusBar](/docs/status-bar) or
   [Dashboard](/docs/dashboard).
-* Do the actual uploading, such as [XHRUpload](/docs/xhr-upload) or
+- Do the actual uploading, such as [XHRUpload](/docs/xhr-upload) or
   [Tus](/docs/tus).
-* Do work before the upload, like compressing an image or calling external API.
-* Interact with a third-party service to process uploads correctly, such as
+- Do work before the upload, like compressing an image or calling external API.
+- Interact with a third-party service to process uploads correctly, such as
   [Transloadit](/docs/transloadit) or [AwsS3](/docs/aws-s3).
 
 See a [full example of a plugin](#example-of-a-custom-plugin) below.
@@ -220,9 +220,9 @@ encrypting a large file. In those situations, determinate progress is suitable.
 
 Here are the relevant events:
 
-* [`preprocess-progress`](/docs/uppy#preprocess-progress)
-* [`upload-progress`](/docs/uppy#upload-progress)
-* [`postprocess-progress`](/docs/uppy#postprocess-progress)
+- [`preprocess-progress`](/docs/uppy#preprocess-progress)
+- [`upload-progress`](/docs/uppy#upload-progress)
+- [`postprocess-progress`](/docs/uppy#postprocess-progress)
 
 ## JSX
 

+ 0 - 9
docs/guides/choosing-uploader.md

@@ -73,21 +73,12 @@ using the powers of Transloadit services.
 uploads using the HTTP `PUT` method.
 
 [s3-robot]: https://transloadit.com/services/file-exporting/s3-store/
-
 [transloadit-services]: https://transloadit.com/services/
-
 [transloadit-concepts]: https://transloadit.com/docs/getting-started/concepts/
-
 [`@uppy/transloadit`]: /docs/transloadit
-
 [`@uppy/tus`]: /docs/tus
-
 [`@uppy/aws-s3-multipart`]: /docs/aws-s3-multipart
-
 [`@uppy/aws-s3`]: /docs/aws-s3-multipart
-
 [`@uppy/xhr-upload`]: /docs/xhr-upload
-
 [tus]: https://tus.io/
-
 [tus-implementations]: https://tus.io/implementations.html

+ 6 - 6
docs/guides/custom-stores.md

@@ -7,12 +7,12 @@ same way as the other components in the application.
 
 Uppy comes with two state management solutions (stores):
 
-* `@uppy/store-default`, a basic object-based store.
-* `@uppy/store-redux`, a store that uses a key in a Redux store.
+- `@uppy/store-default`, a basic object-based store.
+- `@uppy/store-redux`, a store that uses a key in a Redux store.
 
 You can also use a third-party store:
 
-* [uppy-store-ngrx](https://github.com/rimlin/uppy-store-ngrx/), keeping Uppy
+- [uppy-store-ngrx](https://github.com/rimlin/uppy-store-ngrx/), keeping Uppy
   state in a key in an [Ngrx](https://github.com/ngrx/platform) store for use
   with Angular.
 
@@ -92,9 +92,9 @@ work well with this!
 
 An Uppy store is an object with three methods.
 
-* `getState()` - Return the current state object.
-* `setState(patch)` - Merge the object `patch` into the current state.
-* `subscribe(listener)` - Call `listener` whenever the state changes. `listener`
+- `getState()` - Return the current state object.
+- `setState(patch)` - Merge the object `patch` into the current state.
+- `subscribe(listener)` - Call `listener` whenever the state changes. `listener`
   is a function that should receive three parameters:
   `(prevState, nextState, patch)`
 

+ 12 - 15
docs/guides/migration-guides.md

@@ -10,9 +10,9 @@ the same features, but with a more ergonomic and minimal API.
 
 But, it didn’t come with its own set of new problems:
 
-* It tries to do the exact same, but it looks like a different product.
-* It’s confusing for users whether they want to use Robodog or Uppy directly.
-* Robodog is more ergonomic because it’s limited. When you hit such a limit, you
+- It tries to do the exact same, but it looks like a different product.
+- It’s confusing for users whether they want to use Robodog or Uppy directly.
+- Robodog is more ergonomic because it’s limited. When you hit such a limit, you
   need to refactor everything to Uppy with plugins.
 
 This has now led us to deprecating Robodog and embrace Uppy for its strong
@@ -238,8 +238,8 @@ To migrate: use exposed options only.
 
 ### Known issues
 
-* [`ERESOLVE could not resolve` on npm install](https://github.com/transloadit/uppy/issues/4057).
-* [@uppy/svelte reports a broken dependency with the Vite bundler](https://github.com/transloadit/uppy/issues/4069).
+- [`ERESOLVE could not resolve` on npm install](https://github.com/transloadit/uppy/issues/4057).
+- [@uppy/svelte reports a broken dependency with the Vite bundler](https://github.com/transloadit/uppy/issues/4069).
 
 ## Migrate from Companion 3.x to 4.x
 
@@ -319,11 +319,11 @@ bundle size is **25% smaller**! If you want your app to still support older
 browsers (such as IE11), you may need to add the following polyfills to your
 bundle:
 
-* [abortcontroller-polyfill](https://github.com/mo/abortcontroller-polyfill)
-* [core-js](https://github.com/zloirock/core-js)
-* [md-gum-polyfill](https://github.com/mozdevs/mediaDevices-getUserMedia-polyfill)
-* [resize-observer-polyfill](https://github.com/que-etc/resize-observer-polyfill)
-* [whatwg-fetch](https://github.com/github/fetch)
+- [abortcontroller-polyfill](https://github.com/mo/abortcontroller-polyfill)
+- [core-js](https://github.com/zloirock/core-js)
+- [md-gum-polyfill](https://github.com/mozdevs/mediaDevices-getUserMedia-polyfill)
+- [resize-observer-polyfill](https://github.com/que-etc/resize-observer-polyfill)
+- [whatwg-fetch](https://github.com/github/fetch)
 
 If you’re using a bundler, you need import these before Uppy:
 
@@ -589,7 +589,8 @@ obsolete too.
 
 ### That’s it!
 
-Uppy 1.0 will continue to receive bug fixes for three more months (until <time datetime="2021-12-01">1 December 2021</time>), security fixes for one more
+Uppy 1.0 will continue to receive bug fixes for three more months (until
+<time datetime="2021-12-01">1 December 2021</time>), security fixes for one more
 year (until <time datetime="2022-09-01">1 September 2022</time>), but no more
 new features after today. Exceptions are unlikely, but _can_ be made – to
 accommodate those with commercial support contracts, for example.
@@ -641,11 +642,7 @@ to:
 <!-- definitions -->
 
 [core]: /docs/uppy/
-
 [xhr]: /docs/xhr-upload/
-
 [dashboard]: /docs/dashboard/
-
 [aws-s3-multipart]: /docs/aws-s3-multipart/
-
 [tus]: /docs/tus/

+ 4 - 1
packages/@uppy/audio/README.md

@@ -2,7 +2,10 @@
 
 <img src="https://uppy.io/img/logo.svg" width="120" alt="Uppy logo: a smiling puppy above a pink upwards arrow" align="right">
 
-<a href="https://www.npmjs.com/package/@uppy/audio"><img src="https://img.shields.io/npm/v/@uppy/webcam.svg?style=flat-square"></a> <img src="https://github.com/transloadit/uppy/workflows/Tests/badge.svg" alt="CI status for Uppy tests"> <img src="https://github.com/transloadit/uppy/workflows/Companion/badge.svg" alt="CI status for Companion tests"> <img src="https://github.com/transloadit/uppy/workflows/End-to-end%20tests/badge.svg" alt="CI status for browser tests">
+<a href="https://www.npmjs.com/package/@uppy/audio"><img src="https://img.shields.io/npm/v/@uppy/webcam.svg?style=flat-square"></a>
+<img src="https://github.com/transloadit/uppy/workflows/Tests/badge.svg" alt="CI status for Uppy tests">
+<img src="https://github.com/transloadit/uppy/workflows/Companion/badge.svg" alt="CI status for Companion tests">
+<img src="https://github.com/transloadit/uppy/workflows/End-to-end%20tests/badge.svg" alt="CI status for browser tests">
 
 The Audio plugin for Uppy lets you record audio using a built-in or external
 microphone, or any other audio device, on desktop and mobile.

+ 4 - 1
packages/@uppy/compressor/README.md

@@ -2,7 +2,10 @@
 
 <img src="https://uppy.io/img/logo.svg" width="120" alt="Uppy logo: a smiling puppy above a pink upwards arrow" align="right">
 
-<a href="https://www.npmjs.com/package/@uppy/compressor"><img src="https://img.shields.io/npm/v/@uppy/compressor.svg?style=flat-square"></a> <img src="https://github.com/transloadit/uppy/workflows/Tests/badge.svg" alt="CI status for Uppy tests"> <img src="https://github.com/transloadit/uppy/workflows/Companion/badge.svg" alt="CI status for Companion tests"> <img src="https://github.com/transloadit/uppy/workflows/End-to-end%20tests/badge.svg" alt="CI status for browser tests">
+<a href="https://www.npmjs.com/package/@uppy/compressor"><img src="https://img.shields.io/npm/v/@uppy/compressor.svg?style=flat-square"></a>
+<img src="https://github.com/transloadit/uppy/workflows/Tests/badge.svg" alt="CI status for Uppy tests">
+<img src="https://github.com/transloadit/uppy/workflows/Companion/badge.svg" alt="CI status for Companion tests">
+<img src="https://github.com/transloadit/uppy/workflows/End-to-end%20tests/badge.svg" alt="CI status for browser tests">
 
 The Compressor plugin for Uppy optimizes images (JPEG, PNG, WEBP), saving on
 average up to 60% in size (roughly 18 MB for 10 images). It uses

+ 3 - 3
packages/@uppy/core/README.md

@@ -11,10 +11,10 @@ Uppy is a sleek, modular JavaScript file uploader that integrates seamlessly
 with any application. It’s fast, provides a comprehensible API and lets you
 worry about more important problems than building a file uploader.
 
-* **Fetch** files from local disk, remote urls, Google Drive, Dropbox,
+- **Fetch** files from local disk, remote urls, Google Drive, Dropbox,
   Instagram, or snap and record selfies with a camera;
-* **Preview** and edit metadata with a nice interface;
-* **Upload** to the final destination, optionally process/encode
+- **Preview** and edit metadata with a nice interface;
+- **Upload** to the final destination, optionally process/encode
 
 **[Read the docs](https://uppy.io/docs)** |
 **[Try Uppy](https://uppy.io/examples/dashboard/)**

+ 6 - 6
packages/@uppy/dashboard/README.md

@@ -9,13 +9,13 @@
 
 Dashboard is a universal UI plugin for Uppy:
 
-* Drag and Drop, paste, select from local disk / my device
-* UI for Webcam and remote sources: Google Drive, Dropbox, Instagram (all
+- Drag and Drop, paste, select from local disk / my device
+- UI for Webcam and remote sources: Google Drive, Dropbox, Instagram (all
   optional, added via plugins)
-* File previews and info
-* Metadata editor
-* Progress: total and for individual files
-* Ability to pause/resume or cancel (depending on uploader plugin) individual or
+- File previews and info
+- Metadata editor
+- Progress: total and for individual files
+- Ability to pause/resume or cancel (depending on uploader plugin) individual or
   all files
 
 **[Read the docs](https://uppy.io/docs/dashboard/)** |

+ 4 - 1
packages/@uppy/remote-sources/README.md

@@ -2,7 +2,10 @@
 
 <img src="https://uppy.io/img/logo.svg" width="120" alt="Uppy logo: a smiling puppy above a pink upwards arrow" align="right">
 
-<a href="https://www.npmjs.com/package/@uppy/remote-sources"><img src="https://img.shields.io/npm/v/@uppy/compressor.svg?style=flat-square"></a> <img src="https://github.com/transloadit/uppy/workflows/Tests/badge.svg" alt="CI status for Uppy tests"> <img src="https://github.com/transloadit/uppy/workflows/Companion/badge.svg" alt="CI status for Companion tests"> <img src="https://github.com/transloadit/uppy/workflows/End-to-end%20tests/badge.svg" alt="CI status for browser tests">
+<a href="https://www.npmjs.com/package/@uppy/remote-sources"><img src="https://img.shields.io/npm/v/@uppy/compressor.svg?style=flat-square"></a>
+<img src="https://github.com/transloadit/uppy/workflows/Tests/badge.svg" alt="CI status for Uppy tests">
+<img src="https://github.com/transloadit/uppy/workflows/Companion/badge.svg" alt="CI status for Companion tests">
+<img src="https://github.com/transloadit/uppy/workflows/End-to-end%20tests/badge.svg" alt="CI status for browser tests">
 
 ## Example
 

+ 0 - 1
packages/@uppy/tus/README.md

@@ -48,5 +48,4 @@ Documentation for this plugin can be found on the
 [The MIT License](./LICENSE).
 
 [tus.io]: https://tus.io
-
 [tus-js-client]: https://github.com/tus/tus-js-client

+ 3 - 3
packages/@uppy/utils/src/getDroppedFiles/README.md

@@ -1,8 +1,8 @@
 Influenced by:
 
-* <https://github.com/leonadler/drag-and-drop-across-browsers>
-* <https://github.com/silverwind/uppie/blob/HEAD/uppie.js>
-* <https://stackoverflow.com/a/50030399/3192470>
+- <https://github.com/leonadler/drag-and-drop-across-browsers>
+- <https://github.com/silverwind/uppie/blob/HEAD/uppie.js>
+- <https://stackoverflow.com/a/50030399/3192470>
 
 ### Why do we not use `getFilesAndDirectories()` api?
 

+ 4 - 4
private/remark-lint-uppy/README.md

@@ -5,8 +5,8 @@ remark-lint preset derived from
 
 Differences:
 
-* The `list-item-bullet-indent` rule is disabled.
-* The `list-item-indent` rule is disabled.
+- The `list-item-bullet-indent` rule is disabled.
+- The `list-item-indent` rule is disabled.
 
 The reason for the differences is that these “wrong” patterns are ubiquitous in
 our markdown files and we don’t want to do these huge changes after adding the
@@ -16,6 +16,6 @@ linter.
 
 [MIT][].
 
-[remark-preset-lint-recommended]: https://github.com/remarkjs/remark-lint/blob/master/packages/remark-preset-lint-recommended
-
+[remark-preset-lint-recommended]:
+  https://github.com/remarkjs/remark-lint/blob/master/packages/remark-preset-lint-recommended
 [MIT]: ./LICENSE