source: node_modules/web-streams-polyfill/README.md

main
Last change on this file was d24f17c, checked in by Aleksandar Panovski <apano77@…>, 15 months ago

Initial commit

  • Property mode set to 100644
File size: 6.6 KB
RevLine 
[d24f17c]1# web-streams-polyfill
2
3Web Streams, based on the WHATWG spec reference implementation.
4
5[![build status](https://api.travis-ci.com/MattiasBuelens/web-streams-polyfill.svg?branch=master)](https://travis-ci.com/MattiasBuelens/web-streams-polyfill)
6[![npm version](https://img.shields.io/npm/v/web-streams-polyfill.svg)](https://www.npmjs.com/package/web-streams-polyfill)
7[![license](https://img.shields.io/npm/l/web-streams-polyfill.svg)](https://github.com/MattiasBuelens/web-streams-polyfill/blob/master/LICENSE)
8[![Join the chat at https://gitter.im/web-streams-polyfill/Lobby](https://badges.gitter.im/web-streams-polyfill/Lobby.svg)](https://gitter.im/web-streams-polyfill/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
9
10## Links
11
12 - [Official spec][spec]
13 - [Reference implementation][ref-impl]
14
15## Usage
16
17This library comes in multiple variants:
18* `web-streams-polyfill`: a polyfill that replaces the native stream implementations.
19 Recommended for use in web apps supporting older browsers through a `<script>` tag.
20* `web-streams-polyfill/es6`: a polyfill targeting ES2015+ environments.
21 Recommended for use in web apps supporting modern browsers through a `<script>` tag.
22* `web-streams-polyfill/es2018`: a polyfill targeting ES2018+ environments.
23* `web-streams-polyfill/ponyfill`: a [ponyfill] that provides
24 the stream implementations without replacing any globals.
25 Recommended for use in legacy Node applications, or in web libraries supporting older browsers.
26* `web-streams-polyfill/ponyfill/es6`: a ponyfill targeting ES2015+ environments.
27 Recommended for use in Node 6+ applications, or in web libraries supporting modern browsers.
28* `web-streams-polyfill/ponyfill/es2018`: a ponyfill targeting ES2018+ environments.
29 Recommended for use in Node 10+ applications.
30
31Each variant also includes TypeScript type definitions, compatible with the DOM type definitions for streams included in TypeScript.
32
33Usage as a polyfill:
34```html
35<!-- option 1: hosted by unpkg CDN -->
36<script src="https://unpkg.com/web-streams-polyfill/dist/polyfill.min.js"></script>
37<!-- option 2: self hosted -->
38<script src="/path/to/web-streams-polyfill/dist/polyfill.min.js"></script>
39<script>
40var readable = new ReadableStream();
41</script>
42```
43Usage as a Node module:
44```js
45var streams = require("web-streams-polyfill/ponyfill");
46var readable = new streams.ReadableStream();
47```
48Usage as a ES2015 module:
49```js
50import { ReadableStream } from "web-streams-polyfill/ponyfill";
51const readable = new ReadableStream();
52```
53
54## Compatibility
55
56The `polyfill` and `ponyfill` variants work in any ES5-compatible environment that has a global `Promise`.
57If you need to support older browsers or Node versions that do not have a native `Promise` implementation
58(check the [support table][promise-support]), you must first include a `Promise` polyfill
59(e.g. [promise-polyfill][promise-polyfill]).
60
61The `polyfill/es6` and `ponyfill/es6` variants work in any ES2015-compatible environment.
62
63The `polyfill/es2018` and `ponyfill/es2018` variants work in any ES2018-compatible environment.
64
65[Async iterable support for `ReadableStream`][rs-asynciterator] is available in all variants, but requires an ES2018-compatible environment or a polyfill for `Symbol.asyncIterator`.
66
67[`WritableStreamDefaultController.signal`][ws-controller-signal] is available in all variants, but requires a global `AbortController` constructor. If necessary, consider using a polyfill such as [abortcontroller-polyfill].
68
69[Reading with a BYOB reader][mdn-byob-read] is available in all variants, but requires `ArrayBuffer.prototype.transfer()` or `structuredClone()` to exist in order to correctly transfer the given view's buffer. If not available, then the buffer won't be transferred during the read.
70
71## Compliance
72
73The polyfill implements [version `4dc123a` (13 Nov 2023)][spec-snapshot] of the streams specification.
74
75The polyfill is tested against the same [web platform tests][wpt] that are used by browsers to test their native implementations.
76The polyfill aims to pass all tests, although it allows some exceptions for practical reasons:
77* The `es2018` variant passes all of the tests.
78* The `es6` variant passes the same tests as the `es2018` variant, except for the [test for the prototype of `ReadableStream`'s async iterator][wpt-async-iterator-prototype].
79 Retrieving the correct `%AsyncIteratorPrototype%` requires using an async generator (`async function* () {}`), which is invalid syntax before ES2018.
80 Instead, the polyfill [creates its own version][stub-async-iterator-prototype] which is functionally equivalent to the real prototype.
81* The `es5` variant passes the same tests as the `es6` variant, except for various tests about specific characteristics of the constructors, properties and methods.
82 These test failures do not affect the run-time behavior of the polyfill.
83 For example:
84 * The `name` property of down-leveled constructors is incorrect.
85 * The `length` property of down-leveled constructors and methods with optional arguments is incorrect.
86 * Not all properties and methods are correctly marked as non-enumerable.
87 * Down-leveled class methods are not correctly marked as non-constructable.
88
89The type definitions are compatible with the built-in stream types of TypeScript 3.3.
90
91## Contributors
92
93Thanks to these people for their work on [the original polyfill][creatorrr-polyfill]:
94
95 - Diwank Singh Tomer ([creatorrr](https://github.com/creatorrr))
96 - Anders Riutta ([ariutta](https://github.com/ariutta))
97
98[spec]: https://streams.spec.whatwg.org
99[ref-impl]: https://github.com/whatwg/streams
100[ponyfill]: https://github.com/sindresorhus/ponyfill
101[promise-support]: https://kangax.github.io/compat-table/es6/#test-Promise
102[promise-polyfill]: https://www.npmjs.com/package/promise-polyfill
103[rs-asynciterator]: https://streams.spec.whatwg.org/#rs-asynciterator
104[ws-controller-signal]: https://streams.spec.whatwg.org/#ws-default-controller-signal
105[abortcontroller-polyfill]: https://www.npmjs.com/package/abortcontroller-polyfill
106[mdn-byob-read]: https://developer.mozilla.org/en-US/docs/Web/API/ReadableStreamBYOBReader/read
107[spec-snapshot]: https://streams.spec.whatwg.org/commit-snapshots/4dc123a6e7f7ba89a8c6a7975b021156f39cab52/
108[wpt]: https://github.com/web-platform-tests/wpt/tree/2a298b616b7c865917d7198a287310881cbfdd8d/streams
109[wpt-async-iterator-prototype]: https://github.com/web-platform-tests/wpt/blob/2a298b616b7c865917d7198a287310881cbfdd8d/streams/readable-streams/async-iterator.any.js#L24
110[stub-async-iterator-prototype]: https://github.com/MattiasBuelens/web-streams-polyfill/blob/v2.0.0/src/target/es5/stub/async-iterator-prototype.ts
111[creatorrr-polyfill]: https://github.com/creatorrr/web-streams-polyfill
Note: See TracBrowser for help on using the repository browser.