Repository files navigation

Table of Contents

Introducing pipes/convert

The pipesjs/convert module provides various functions to convert web streams to other similar data structures like highland streams, Observables, Rx streams etc. and vice versa.

For more about Web Streams, refer to the spec.


About

The convert module provides various functions to convert web streams to other similar data structures like highland streams, Observables, Rx streams etc. and vice versa. Here's more about Web Streams from the spec itself:

Large swathes of the web platform are built on streaming data: that is, data that is created, processed, and consumed in an incremental fashion, without ever reading all of it into memory. The Streams Standard provides a common set of APIs for creating and interfacing with such streaming data, embodied in readable streams, writable streams, and transform streams.

The spec is still evolving but has reached a fairly stable stage with a reference implementation as well. The API has almost been finalized and Streams are coming to the web very soon!

At it's core, the API exposes three major components:

  • ReadableStream encapsulates a source producing values and emits them.
  • TransformStream are essentially { readable, writable} pairs that take a function which can be used to transform the values flowing through it.
  • WritableStream encapsulates a sink that receives values and writes to it.

Streams are essentially data structures that handle sequential flow of values. You can split streams, merge them and connect them together in various ways. What's amazing is that, in most cases, they can handle backpressure automatically, so you don't have to mess with the underlying details.

For further information, the spec is quite informative and easy to read. Jake Archibald also wrote a great blog post on them.

Heads up: If you're coming from node land, web streams are quite a lot different from node streams and incompatible with each other.

Installing

For browsers

The library depends on @pipes/core, so make sure you include it in before including the library.

You can use either of the builds from the dist folder:

<scriptsrc="path/to/web-streams-polyfill.js"></script><scriptsrc="path/to/pipes.convert.js"></script>

And in your code, all the functions will be available on the window.Pipes.convert variable.

let{ toNodeStream, fromIterable }=window.Pipes.convert;

For browserify users

The library has a peer-dependency on @pipes/core, so to install it:

 npm install @pipes/core @pipes/convert

The library is split up into modules, so you can both require the whole library or only parts of it:

let{ fromIterable }=require("@pipes/convert");letfromIterable=require("@pipes/convert/fromIterable");letfromIterable=require("@pipes/convert/from/iterable");

For ES6 and Rollup users

If you want, you can directly import the es6 modules like so:

importpipesConvertfrom"@pipes/convert/src";import{fromIterable}from"@pipes/convert/src";importfromIterablefrom"@pipes/convert/src/fromIterable";importfromIterablefrom"@pipes/convert/src/from/iterable";

API Reference

The convert library consists of the following functions:

Set up code for examples

// SetupletcreateReadable=data=>newReadableStream({start(controller){this.data=data||[1,2,3];// Kickstart streamcontroller.enqueue(this.data.pop());},pull(controller){if(!this.data.length)returncontroller.close()controller.enqueue(this.data.pop());}}),createWritable=()=>newWritableStream({write(chunk){console.log(chunk);}});

fromIterable

This function takes an iterable and returns a readable stream that queues the iterated values sequentially.

Parameters

  • iterableIterable<T>

Examples

letinput=[1,2,3,4,5],// input = function* gen() { yield* input; },// input = input.join("");letwritable,res=[];// Create test streamswritable=createTestWritable(c=>res.push(c));// Connect the streamsconnect(fromIterable(input),writable);// res == input

Returns ReadableStream

fromObservable

This function takes any ReadableStream and returns an Observable that emits chunks to subscribers when they arrive.

Parameters

  • observableObservable

Examples

letinput=[1,2,3],output=[],observable,writable;// Create test streamswritable=createTestWritable(i=>output.push(i));// Test the promisereturnfromObservable(Observable.from(input)).pipeTo(writable);

Returns ReadableStream

fromPromise

This function takes any promise and returns a readable stream that queues the resolved value or errors on rejection.

Parameters

Examples

letinput=42;promise=newPromise(resolve=>resolve(input)),writable;// Create test streamswritable=createTestWritable(c=>assert.equal(c,input));connect(fromPromise(promise),writable);// 42

Returns ReadableStream

toObservable

This function takes any ReadableStream and returns an Observable that emits chunks to subscribers when they arrive.

Parameters

  • streamReadableStream

Examples

letinput=[1,2,3],output=[],readable;// Create test streamsreadable=createTestReadable(input);// Test the promisetoObservable(readable).subscribe({next(val){output.push(val);},complete(){assert.deepEqual(input,output);}});

Returns Observable

toPromise

This function takes any ReadableStream and returns a promise that resolves with an Array of the stream's contents when the stream closes.

Parameters

  • streamReadableStream

Examples

letinput=[1,2,3],output=[1,2,3],readable;// Create test streamsreadable=createTestReadable(input);// Test the promisetoPromise(readable).then(result=>{assert.deepEqual(result,output);done();});

Returns Promise<Array<T>>

About

The `pipesjs/convert` module provides various functions to convert `web streams` to other similar `data structures` like `highland` streams, `Observable`s, `Rx` streams etc. and vice versa.

Resources

Contributing

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Table of Contents

Introducing pipes/convert

The pipesjs/convert module provides various functions to convert web streams to other similar data structures like highland streams, Observables, Rx streams etc. and vice versa.

For more about Web Streams, refer to the spec.


About

The convert module provides various functions to convert web streams to other similar data structures like highland streams, Observables, Rx streams etc. and vice versa. Here's more about Web Streams from the spec itself:

Large swathes of the web platform are built on streaming data: that is, data that is created, processed, and consumed in an incremental fashion, without ever reading all of it into memory. The Streams Standard provides a common set of APIs for creating and interfacing with such streaming data, embodied in readable streams, writable streams, and transform streams.

The spec is still evolving but has reached a fairly stable stage with a reference implementation as well. The API has almost been finalized and Streams are coming to the web very soon!

At it's core, the API exposes three major components:

  • ReadableStream encapsulates a source producing values and emits them.
  • TransformStream are essentially { readable, writable} pairs that take a function which can be used to transform the values flowing through it.
  • WritableStream encapsulates a sink that receives values and writes to it.

Streams are essentially data structures that handle sequential flow of values. You can split streams, merge them and connect them together in various ways. What's amazing is that, in most cases, they can handle backpressure automatically, so you don't have to mess with the underlying details.

For further information, the spec is quite informative and easy to read. Jake Archibald also wrote a great blog post on them.

Heads up: If you're coming from node land, web streams are quite a lot different from node streams and incompatible with each other.

Installing

For browsers

The library depends on @pipes/core, so make sure you include it in before including the library.

You can use either of the builds from the dist folder:

<scriptsrc="path/to/web-streams-polyfill.js"></script><scriptsrc="path/to/pipes.convert.js"></script>

And in your code, all the functions will be available on the window.Pipes.convert variable.

let{ toNodeStream, fromIterable }=window.Pipes.convert;

For browserify users

The library has a peer-dependency on @pipes/core, so to install it:

 npm install @pipes/core @pipes/convert

The library is split up into modules, so you can both require the whole library or only parts of it:

let{ fromIterable }=require("@pipes/convert");letfromIterable=require("@pipes/convert/fromIterable");letfromIterable=require("@pipes/convert/from/iterable");

For ES6 and Rollup users

If you want, you can directly import the es6 modules like so:

importpipesConvertfrom"@pipes/convert/src";import{fromIterable}from"@pipes/convert/src";importfromIterablefrom"@pipes/convert/src/fromIterable";importfromIterablefrom"@pipes/convert/src/from/iterable";

API Reference

The convert library consists of the following functions:

Set up code for examples

// SetupletcreateReadable=data=>newReadableStream({start(controller){this.data=data||[1,2,3];// Kickstart streamcontroller.enqueue(this.data.pop());},pull(controller){if(!this.data.length)returncontroller.close()controller.enqueue(this.data.pop());}}),createWritable=()=>newWritableStream({write(chunk){console.log(chunk);}});

fromIterable

This function takes an iterable and returns a readable stream that queues the iterated values sequentially.

Parameters

  • iterableIterable<T>

Examples

letinput=[1,2,3,4,5],// input = function* gen() { yield* input; },// input = input.join("");letwritable,res=[];// Create test streamswritable=createTestWritable(c=>res.push(c));// Connect the streamsconnect(fromIterable(input),writable);// res == input

Returns ReadableStream

fromObservable

This function takes any ReadableStream and returns an Observable that emits chunks to subscribers when they arrive.

Parameters

  • observableObservable

Examples

letinput=[1,2,3],output=[],observable,writable;// Create test streamswritable=createTestWritable(i=>output.push(i));// Test the promisereturnfromObservable(Observable.from(input)).pipeTo(writable);

Returns ReadableStream

fromPromise

This function takes any promise and returns a readable stream that queues the resolved value or errors on rejection.

Parameters

Examples

letinput=42;promise=newPromise(resolve=>resolve(input)),writable;// Create test streamswritable=createTestWritable(c=>assert.equal(c,input));connect(fromPromise(promise),writable);// 42

Returns ReadableStream

toObservable

This function takes any ReadableStream and returns an Observable that emits chunks to subscribers when they arrive.

Parameters

  • streamReadableStream

Examples

letinput=[1,2,3],output=[],readable;// Create test streamsreadable=createTestReadable(input);// Test the promisetoObservable(readable).subscribe({next(val){output.push(val);},complete(){assert.deepEqual(input,output);}});

Returns Observable

toPromise

This function takes any ReadableStream and returns a promise that resolves with an Array of the stream's contents when the stream closes.

Parameters

  • streamReadableStream

Examples

letinput=[1,2,3],output=[1,2,3],readable;// Create test streamsreadable=createTestReadable(input);// Test the promisetoPromise(readable).then(result=>{assert.deepEqual(result,output);done();});

Returns Promise<Array<T>>

About

The `pipesjs/convert` module provides various functions to convert `web streams` to other similar `data structures` like `highland` streams, `Observable`s, `Rx` streams etc. and vice versa.

Resources

Contributing

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Table of Contents

Introducing pipes/convert

The pipesjs/convert module provides various functions to convert web streams to other similar data structures like highland streams, Observables, Rx streams etc. and vice versa.

For more about Web Streams, refer to the spec.


About

The convert module provides various functions to convert web streams to other similar data structures like highland streams, Observables, Rx streams etc. and vice versa. Here's more about Web Streams from the spec itself:

Large swathes of the web platform are built on streaming data: that is, data that is created, processed, and consumed in an incremental fashion, without ever reading all of it into memory. The Streams Standard provides a common set of APIs for creating and interfacing with such streaming data, embodied in readable streams, writable streams, and transform streams.

The spec is still evolving but has reached a fairly stable stage with a reference implementation as well. The API has almost been finalized and Streams are coming to the web very soon!

At it's core, the API exposes three major components:

  • ReadableStream encapsulates a source producing values and emits them.
  • TransformStream are essentially { readable, writable} pairs that take a function which can be used to transform the values flowing through it.
  • WritableStream encapsulates a sink that receives values and writes to it.

Streams are essentially data structures that handle sequential flow of values. You can split streams, merge them and connect them together in various ways. What's amazing is that, in most cases, they can handle backpressure automatically, so you don't have to mess with the underlying details.

For further information, the spec is quite informative and easy to read. Jake Archibald also wrote a great blog post on them.

Heads up: If you're coming from node land, web streams are quite a lot different from node streams and incompatible with each other.

Installing

For browsers

The library depends on @pipes/core, so make sure you include it in before including the library.

You can use either of the builds from the dist folder:

<scriptsrc="path/to/web-streams-polyfill.js"></script><scriptsrc="path/to/pipes.convert.js"></script>

And in your code, all the functions will be available on the window.Pipes.convert variable.

let{ toNodeStream, fromIterable }=window.Pipes.convert;

For browserify users

The library has a peer-dependency on @pipes/core, so to install it:

 npm install @pipes/core @pipes/convert

The library is split up into modules, so you can both require the whole library or only parts of it:

let{ fromIterable }=require("@pipes/convert");letfromIterable=require("@pipes/convert/fromIterable");letfromIterable=require("@pipes/convert/from/iterable");

For ES6 and Rollup users

If you want, you can directly import the es6 modules like so:

importpipesConvertfrom"@pipes/convert/src";import{fromIterable}from"@pipes/convert/src";importfromIterablefrom"@pipes/convert/src/fromIterable";importfromIterablefrom"@pipes/convert/src/from/iterable";

API Reference

The convert library consists of the following functions:

Set up code for examples

// SetupletcreateReadable=data=>newReadableStream({start(controller){this.data=data||[1,2,3];// Kickstart streamcontroller.enqueue(this.data.pop());},pull(controller){if(!this.data.length)returncontroller.close()controller.enqueue(this.data.pop());}}),createWritable=()=>newWritableStream({write(chunk){console.log(chunk);}});

fromIterable

This function takes an iterable and returns a readable stream that queues the iterated values sequentially.

Parameters

  • iterableIterable<T>

Examples

letinput=[1,2,3,4,5],// input = function* gen() { yield* input; },// input = input.join("");letwritable,res=[];// Create test streamswritable=createTestWritable(c=>res.push(c));// Connect the streamsconnect(fromIterable(input),writable);// res == input

Returns ReadableStream

fromObservable

This function takes any ReadableStream and returns an Observable that emits chunks to subscribers when they arrive.

Parameters

  • observableObservable

Examples

letinput=[1,2,3],output=[],observable,writable;// Create test streamswritable=createTestWritable(i=>output.push(i));// Test the promisereturnfromObservable(Observable.from(input)).pipeTo(writable);

Returns ReadableStream

fromPromise

This function takes any promise and returns a readable stream that queues the resolved value or errors on rejection.

Parameters

Examples

letinput=42;promise=newPromise(resolve=>resolve(input)),writable;// Create test streamswritable=createTestWritable(c=>assert.equal(c,input));connect(fromPromise(promise),writable);// 42

Returns ReadableStream

toObservable

This function takes any ReadableStream and returns an Observable that emits chunks to subscribers when they arrive.

Parameters

  • streamReadableStream

Examples

letinput=[1,2,3],output=[],readable;// Create test streamsreadable=createTestReadable(input);// Test the promisetoObservable(readable).subscribe({next(val){output.push(val);},complete(){assert.deepEqual(input,output);}});

Returns Observable

toPromise

This function takes any ReadableStream and returns a promise that resolves with an Array of the stream's contents when the stream closes.

Parameters

  • streamReadableStream

Examples

letinput=[1,2,3],output=[1,2,3],readable;// Create test streamsreadable=createTestReadable(input);// Test the promisetoPromise(readable).then(result=>{assert.deepEqual(result,output);done();});

Returns Promise<Array<T>>

About

The `pipesjs/convert` module provides various functions to convert `web streams` to other similar `data structures` like `highland` streams, `Observable`s, `Rx` streams etc. and vice versa.

Resources

Contributing

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Table of Contents

Introducing pipes/convert

The pipesjs/convert module provides various functions to convert web streams to other similar data structures like highland streams, Observables, Rx streams etc. and vice versa.

For more about Web Streams, refer to the spec.


About

The convert module provides various functions to convert web streams to other similar data structures like highland streams, Observables, Rx streams etc. and vice versa. Here's more about Web Streams from the spec itself:

Large swathes of the web platform are built on streaming data: that is, data that is created, processed, and consumed in an incremental fashion, without ever reading all of it into memory. The Streams Standard provides a common set of APIs for creating and interfacing with such streaming data, embodied in readable streams, writable streams, and transform streams.

The spec is still evolving but has reached a fairly stable stage with a reference implementation as well. The API has almost been finalized and Streams are coming to the web very soon!

At it's core, the API exposes three major components:

  • ReadableStream encapsulates a source producing values and emits them.
  • TransformStream are essentially { readable, writable} pairs that take a function which can be used to transform the values flowing through it.
  • WritableStream encapsulates a sink that receives values and writes to it.

Streams are essentially data structures that handle sequential flow of values. You can split streams, merge them and connect them together in various ways. What's amazing is that, in most cases, they can handle backpressure automatically, so you don't have to mess with the underlying details.

For further information, the spec is quite informative and easy to read. Jake Archibald also wrote a great blog post on them.

Heads up: If you're coming from node land, web streams are quite a lot different from node streams and incompatible with each other.

Installing

For browsers

The library depends on @pipes/core, so make sure you include it in before including the library.

You can use either of the builds from the dist folder:

<scriptsrc="path/to/web-streams-polyfill.js"></script><scriptsrc="path/to/pipes.convert.js"></script>

And in your code, all the functions will be available on the window.Pipes.convert variable.

let{ toNodeStream, fromIterable }=window.Pipes.convert;

For browserify users

The library has a peer-dependency on @pipes/core, so to install it:

 npm install @pipes/core @pipes/convert

The library is split up into modules, so you can both require the whole library or only parts of it:

let{ fromIterable }=require("@pipes/convert");letfromIterable=require("@pipes/convert/fromIterable");letfromIterable=require("@pipes/convert/from/iterable");

For ES6 and Rollup users

If you want, you can directly import the es6 modules like so:

importpipesConvertfrom"@pipes/convert/src";import{fromIterable}from"@pipes/convert/src";importfromIterablefrom"@pipes/convert/src/fromIterable";importfromIterablefrom"@pipes/convert/src/from/iterable";

API Reference

The convert library consists of the following functions:

Set up code for examples

// SetupletcreateReadable=data=>newReadableStream({start(controller){this.data=data||[1,2,3];// Kickstart streamcontroller.enqueue(this.data.pop());},pull(controller){if(!this.data.length)returncontroller.close()controller.enqueue(this.data.pop());}}),createWritable=()=>newWritableStream({write(chunk){console.log(chunk);}});

fromIterable

This function takes an iterable and returns a readable stream that queues the iterated values sequentially.

Parameters

  • iterableIterable<T>

Examples

letinput=[1,2,3,4,5],// input = function* gen() { yield* input; },// input = input.join("");letwritable,res=[];// Create test streamswritable=createTestWritable(c=>res.push(c));// Connect the streamsconnect(fromIterable(input),writable);// res == input

Returns ReadableStream

fromObservable

This function takes any ReadableStream and returns an Observable that emits chunks to subscribers when they arrive.

Parameters

  • observableObservable

Examples

letinput=[1,2,3],output=[],observable,writable;// Create test streamswritable=createTestWritable(i=>output.push(i));// Test the promisereturnfromObservable(Observable.from(input)).pipeTo(writable);

Returns ReadableStream

fromPromise

This function takes any promise and returns a readable stream that queues the resolved value or errors on rejection.

Parameters

Examples

letinput=42;promise=newPromise(resolve=>resolve(input)),writable;// Create test streamswritable=createTestWritable(c=>assert.equal(c,input));connect(fromPromise(promise),writable);// 42

Returns ReadableStream

toObservable

This function takes any ReadableStream and returns an Observable that emits chunks to subscribers when they arrive.

Parameters

  • streamReadableStream

Examples

letinput=[1,2,3],output=[],readable;// Create test streamsreadable=createTestReadable(input);// Test the promisetoObservable(readable).subscribe({next(val){output.push(val);},complete(){assert.deepEqual(input,output);}});

Returns Observable

toPromise

This function takes any ReadableStream and returns a promise that resolves with an Array of the stream's contents when the stream closes.

Parameters

  • streamReadableStream

Examples

letinput=[1,2,3],output=[1,2,3],readable;// Create test streamsreadable=createTestReadable(input);// Test the promisetoPromise(readable).then(result=>{assert.deepEqual(result,output);done();});

Returns Promise<Array<T>>

About

The `pipesjs/convert` module provides various functions to convert `web streams` to other similar `data structures` like `highland` streams, `Observable`s, `Rx` streams etc. and vice versa.

Resources

Contributing

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Table of Contents

Introducing pipes/convert

The pipesjs/convert module provides various functions to convert web streams to other similar data structures like highland streams, Observables, Rx streams etc. and vice versa.

For more about Web Streams, refer to the spec.


About

The convert module provides various functions to convert web streams to other similar data structures like highland streams, Observables, Rx streams etc. and vice versa. Here's more about Web Streams from the spec itself:

Large swathes of the web platform are built on streaming data: that is, data that is created, processed, and consumed in an incremental fashion, without ever reading all of it into memory. The Streams Standard provides a common set of APIs for creating and interfacing with such streaming data, embodied in readable streams, writable streams, and transform streams.

The spec is still evolving but has reached a fairly stable stage with a reference implementation as well. The API has almost been finalized and Streams are coming to the web very soon!

At it's core, the API exposes three major components:

  • ReadableStream encapsulates a source producing values and emits them.
  • TransformStream are essentially { readable, writable} pairs that take a function which can be used to transform the values flowing through it.
  • WritableStream encapsulates a sink that receives values and writes to it.

Streams are essentially data structures that handle sequential flow of values. You can split streams, merge them and connect them together in various ways. What's amazing is that, in most cases, they can handle backpressure automatically, so you don't have to mess with the underlying details.

For further information, the spec is quite informative and easy to read. Jake Archibald also wrote a great blog post on them.

Heads up: If you're coming from node land, web streams are quite a lot different from node streams and incompatible with each other.

Installing

For browsers

The library depends on @pipes/core, so make sure you include it in before including the library.

You can use either of the builds from the dist folder:

<scriptsrc="path/to/web-streams-polyfill.js"></script><scriptsrc="path/to/pipes.convert.js"></script>

And in your code, all the functions will be available on the window.Pipes.convert variable.

let{ toNodeStream, fromIterable }=window.Pipes.convert;

For browserify users

The library has a peer-dependency on @pipes/core, so to install it:

 npm install @pipes/core @pipes/convert

The library is split up into modules, so you can both require the whole library or only parts of it:

let{ fromIterable }=require("@pipes/convert");letfromIterable=require("@pipes/convert/fromIterable");letfromIterable=require("@pipes/convert/from/iterable");

For ES6 and Rollup users

If you want, you can directly import the es6 modules like so:

importpipesConvertfrom"@pipes/convert/src";import{fromIterable}from"@pipes/convert/src";importfromIterablefrom"@pipes/convert/src/fromIterable";importfromIterablefrom"@pipes/convert/src/from/iterable";

API Reference

The convert library consists of the following functions:

Set up code for examples

// SetupletcreateReadable=data=>newReadableStream({start(controller){this.data=data||[1,2,3];// Kickstart streamcontroller.enqueue(this.data.pop());},pull(controller){if(!this.data.length)returncontroller.close()controller.enqueue(this.data.pop());}}),createWritable=()=>newWritableStream({write(chunk){console.log(chunk);}});

fromIterable

This function takes an iterable and returns a readable stream that queues the iterated values sequentially.

Parameters

  • iterableIterable<T>

Examples

letinput=[1,2,3,4,5],// input = function* gen() { yield* input; },// input = input.join("");letwritable,res=[];// Create test streamswritable=createTestWritable(c=>res.push(c));// Connect the streamsconnect(fromIterable(input),writable);// res == input

Returns ReadableStream

fromObservable

This function takes any ReadableStream and returns an Observable that emits chunks to subscribers when they arrive.

Parameters

  • observableObservable

Examples

letinput=[1,2,3],output=[],observable,writable;// Create test streamswritable=createTestWritable(i=>output.push(i));// Test the promisereturnfromObservable(Observable.from(input)).pipeTo(writable);

Returns ReadableStream

fromPromise

This function takes any promise and returns a readable stream that queues the resolved value or errors on rejection.

Parameters

Examples

letinput=42;promise=newPromise(resolve=>resolve(input)),writable;// Create test streamswritable=createTestWritable(c=>assert.equal(c,input));connect(fromPromise(promise),writable);// 42

Returns ReadableStream

toObservable

This function takes any ReadableStream and returns an Observable that emits chunks to subscribers when they arrive.

Parameters

  • streamReadableStream

Examples

letinput=[1,2,3],output=[],readable;// Create test streamsreadable=createTestReadable(input);// Test the promisetoObservable(readable).subscribe({next(val){output.push(val);},complete(){assert.deepEqual(input,output);}});

Returns Observable

toPromise

This function takes any ReadableStream and returns a promise that resolves with an Array of the stream's contents when the stream closes.

Parameters

  • streamReadableStream

Examples

letinput=[1,2,3],output=[1,2,3],readable;// Create test streamsreadable=createTestReadable(input);// Test the promisetoPromise(readable).then(result=>{assert.deepEqual(result,output);done();});

Returns Promise<Array<T>>

About

The `pipesjs/convert` module provides various functions to convert `web streams` to other similar `data structures` like `highland` streams, `Observable`s, `Rx` streams etc. and vice versa.

Resources

Contributing

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Table of Contents

Introducing pipes/convert

The pipesjs/convert module provides various functions to convert web streams to other similar data structures like highland streams, Observables, Rx streams etc. and vice versa.

For more about Web Streams, refer to the spec.


About

The convert module provides various functions to convert web streams to other similar data structures like highland streams, Observables, Rx streams etc. and vice versa. Here's more about Web Streams from the spec itself:

Large swathes of the web platform are built on streaming data: that is, data that is created, processed, and consumed in an incremental fashion, without ever reading all of it into memory. The Streams Standard provides a common set of APIs for creating and interfacing with such streaming data, embodied in readable streams, writable streams, and transform streams.

The spec is still evolving but has reached a fairly stable stage with a reference implementation as well. The API has almost been finalized and Streams are coming to the web very soon!

At it's core, the API exposes three major components:

  • ReadableStream encapsulates a source producing values and emits them.
  • TransformStream are essentially { readable, writable} pairs that take a function which can be used to transform the values flowing through it.
  • WritableStream encapsulates a sink that receives values and writes to it.

Streams are essentially data structures that handle sequential flow of values. You can split streams, merge them and connect them together in various ways. What's amazing is that, in most cases, they can handle backpressure automatically, so you don't have to mess with the underlying details.

For further information, the spec is quite informative and easy to read. Jake Archibald also wrote a great blog post on them.

Heads up: If you're coming from node land, web streams are quite a lot different from node streams and incompatible with each other.

Installing

For browsers

The library depends on @pipes/core, so make sure you include it in before including the library.

You can use either of the builds from the dist folder:

<scriptsrc="path/to/web-streams-polyfill.js"></script><scriptsrc="path/to/pipes.convert.js"></script>

And in your code, all the functions will be available on the window.Pipes.convert variable.

let{ toNodeStream, fromIterable }=window.Pipes.convert;

For browserify users

The library has a peer-dependency on @pipes/core, so to install it:

 npm install @pipes/core @pipes/convert

The library is split up into modules, so you can both require the whole library or only parts of it:

let{ fromIterable }=require("@pipes/convert");letfromIterable=require("@pipes/convert/fromIterable");letfromIterable=require("@pipes/convert/from/iterable");

For ES6 and Rollup users

If you want, you can directly import the es6 modules like so:

importpipesConvertfrom"@pipes/convert/src";import{fromIterable}from"@pipes/convert/src";importfromIterablefrom"@pipes/convert/src/fromIterable";importfromIterablefrom"@pipes/convert/src/from/iterable";

API Reference

The convert library consists of the following functions:

Set up code for examples

// SetupletcreateReadable=data=>newReadableStream({start(controller){this.data=data||[1,2,3];// Kickstart streamcontroller.enqueue(this.data.pop());},pull(controller){if(!this.data.length)returncontroller.close()controller.enqueue(this.data.pop());}}),createWritable=()=>newWritableStream({write(chunk){console.log(chunk);}});

fromIterable

This function takes an iterable and returns a readable stream that queues the iterated values sequentially.

Parameters

  • iterableIterable<T>

Examples

letinput=[1,2,3,4,5],// input = function* gen() { yield* input; },// input = input.join("");letwritable,res=[];// Create test streamswritable=createTestWritable(c=>res.push(c));// Connect the streamsconnect(fromIterable(input),writable);// res == input

Returns ReadableStream

fromObservable

This function takes any ReadableStream and returns an Observable that emits chunks to subscribers when they arrive.

Parameters

  • observableObservable

Examples

letinput=[1,2,3],output=[],observable,writable;// Create test streamswritable=createTestWritable(i=>output.push(i));// Test the promisereturnfromObservable(Observable.from(input)).pipeTo(writable);

Returns ReadableStream

fromPromise

This function takes any promise and returns a readable stream that queues the resolved value or errors on rejection.

Parameters

Examples

letinput=42;promise=newPromise(resolve=>resolve(input)),writable;// Create test streamswritable=createTestWritable(c=>assert.equal(c,input));connect(fromPromise(promise),writable);// 42

Returns ReadableStream

toObservable

This function takes any ReadableStream and returns an Observable that emits chunks to subscribers when they arrive.

Parameters

  • streamReadableStream

Examples

letinput=[1,2,3],output=[],readable;// Create test streamsreadable=createTestReadable(input);// Test the promisetoObservable(readable).subscribe({next(val){output.push(val);},complete(){assert.deepEqual(input,output);}});

Returns Observable

toPromise

This function takes any ReadableStream and returns a promise that resolves with an Array of the stream's contents when the stream closes.

Parameters

  • streamReadableStream

Examples

letinput=[1,2,3],output=[1,2,3],readable;// Create test streamsreadable=createTestReadable(input);// Test the promisetoPromise(readable).then(result=>{assert.deepEqual(result,output);done();});

Returns Promise<Array<T>>

About

The `pipesjs/convert` module provides various functions to convert `web streams` to other similar `data structures` like `highland` streams, `Observable`s, `Rx` streams etc. and vice versa.

Resources

Contributing

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Table of Contents

Introducing pipes/convert

The pipesjs/convert module provides various functions to convert web streams to other similar data structures like highland streams, Observables, Rx streams etc. and vice versa.

For more about Web Streams, refer to the spec.


About

The convert module provides various functions to convert web streams to other similar data structures like highland streams, Observables, Rx streams etc. and vice versa. Here's more about Web Streams from the spec itself:

Large swathes of the web platform are built on streaming data: that is, data that is created, processed, and consumed in an incremental fashion, without ever reading all of it into memory. The Streams Standard provides a common set of APIs for creating and interfacing with such streaming data, embodied in readable streams, writable streams, and transform streams.

The spec is still evolving but has reached a fairly stable stage with a reference implementation as well. The API has almost been finalized and Streams are coming to the web very soon!

At it's core, the API exposes three major components:

  • ReadableStream encapsulates a source producing values and emits them.
  • TransformStream are essentially { readable, writable} pairs that take a function which can be used to transform the values flowing through it.
  • WritableStream encapsulates a sink that receives values and writes to it.

Streams are essentially data structures that handle sequential flow of values. You can split streams, merge them and connect them together in various ways. What's amazing is that, in most cases, they can handle backpressure automatically, so you don't have to mess with the underlying details.

For further information, the spec is quite informative and easy to read. Jake Archibald also wrote a great blog post on them.

Heads up: If you're coming from node land, web streams are quite a lot different from node streams and incompatible with each other.

Installing

For browsers

The library depends on @pipes/core, so make sure you include it in before including the library.

You can use either of the builds from the dist folder:

<scriptsrc="path/to/web-streams-polyfill.js"></script><scriptsrc="path/to/pipes.convert.js"></script>

And in your code, all the functions will be available on the window.Pipes.convert variable.

let{ toNodeStream, fromIterable }=window.Pipes.convert;

For browserify users

The library has a peer-dependency on @pipes/core, so to install it:

 npm install @pipes/core @pipes/convert

The library is split up into modules, so you can both require the whole library or only parts of it:

let{ fromIterable }=require("@pipes/convert");letfromIterable=require("@pipes/convert/fromIterable");letfromIterable=require("@pipes/convert/from/iterable");

For ES6 and Rollup users

If you want, you can directly import the es6 modules like so:

importpipesConvertfrom"@pipes/convert/src";import{fromIterable}from"@pipes/convert/src";importfromIterablefrom"@pipes/convert/src/fromIterable";importfromIterablefrom"@pipes/convert/src/from/iterable";

API Reference

The convert library consists of the following functions:

Set up code for examples

// SetupletcreateReadable=data=>newReadableStream({start(controller){this.data=data||[1,2,3];// Kickstart streamcontroller.enqueue(this.data.pop());},pull(controller){if(!this.data.length)returncontroller.close()controller.enqueue(this.data.pop());}}),createWritable=()=>newWritableStream({write(chunk){console.log(chunk);}});

fromIterable

This function takes an iterable and returns a readable stream that queues the iterated values sequentially.

Parameters

  • iterableIterable<T>

Examples

letinput=[1,2,3,4,5],// input = function* gen() { yield* input; },// input = input.join("");letwritable,res=[];// Create test streamswritable=createTestWritable(c=>res.push(c));// Connect the streamsconnect(fromIterable(input),writable);// res == input

Returns ReadableStream

fromObservable

This function takes any ReadableStream and returns an Observable that emits chunks to subscribers when they arrive.

Parameters

  • observableObservable

Examples

letinput=[1,2,3],output=[],observable,writable;// Create test streamswritable=createTestWritable(i=>output.push(i));// Test the promisereturnfromObservable(Observable.from(input)).pipeTo(writable);

Returns ReadableStream

fromPromise

This function takes any promise and returns a readable stream that queues the resolved value or errors on rejection.

Parameters

Examples

letinput=42;promise=newPromise(resolve=>resolve(input)),writable;// Create test streamswritable=createTestWritable(c=>assert.equal(c,input));connect(fromPromise(promise),writable);// 42

Returns ReadableStream

toObservable

This function takes any ReadableStream and returns an Observable that emits chunks to subscribers when they arrive.

Parameters

  • streamReadableStream

Examples

letinput=[1,2,3],output=[],readable;// Create test streamsreadable=createTestReadable(input);// Test the promisetoObservable(readable).subscribe({next(val){output.push(val);},complete(){assert.deepEqual(input,output);}});

Returns Observable

toPromise

This function takes any ReadableStream and returns a promise that resolves with an Array of the stream's contents when the stream closes.

Parameters

  • streamReadableStream

Examples

letinput=[1,2,3],output=[1,2,3],readable;// Create test streamsreadable=createTestReadable(input);// Test the promisetoPromise(readable).then(result=>{assert.deepEqual(result,output);done();});

Returns Promise<Array<T>>

About

The `pipesjs/convert` module provides various functions to convert `web streams` to other similar `data structures` like `highland` streams, `Observable`s, `Rx` streams etc. and vice versa.

Resources

Contributing

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Table of Contents

Introducing pipes/convert

The pipesjs/convert module provides various functions to convert web streams to other similar data structures like highland streams, Observables, Rx streams etc. and vice versa.

For more about Web Streams, refer to the spec.


About

The convert module provides various functions to convert web streams to other similar data structures like highland streams, Observables, Rx streams etc. and vice versa. Here's more about Web Streams from the spec itself:

Large swathes of the web platform are built on streaming data: that is, data that is created, processed, and consumed in an incremental fashion, without ever reading all of it into memory. The Streams Standard provides a common set of APIs for creating and interfacing with such streaming data, embodied in readable streams, writable streams, and transform streams.

The spec is still evolving but has reached a fairly stable stage with a reference implementation as well. The API has almost been finalized and Streams are coming to the web very soon!

At it's core, the API exposes three major components:

  • ReadableStream encapsulates a source producing values and emits them.
  • TransformStream are essentially { readable, writable} pairs that take a function which can be used to transform the values flowing through it.
  • WritableStream encapsulates a sink that receives values and writes to it.

Streams are essentially data structures that handle sequential flow of values. You can split streams, merge them and connect them together in various ways. What's amazing is that, in most cases, they can handle backpressure automatically, so you don't have to mess with the underlying details.

For further information, the spec is quite informative and easy to read. Jake Archibald also wrote a great blog post on them.

Heads up: If you're coming from node land, web streams are quite a lot different from node streams and incompatible with each other.

Installing

For browsers

The library depends on @pipes/core, so make sure you include it in before including the library.

You can use either of the builds from the dist folder:

<scriptsrc="path/to/web-streams-polyfill.js"></script><scriptsrc="path/to/pipes.convert.js"></script>

And in your code, all the functions will be available on the window.Pipes.convert variable.

let{ toNodeStream, fromIterable }=window.Pipes.convert;

For browserify users

The library has a peer-dependency on @pipes/core, so to install it:

 npm install @pipes/core @pipes/convert

The library is split up into modules, so you can both require the whole library or only parts of it:

let{ fromIterable }=require("@pipes/convert");letfromIterable=require("@pipes/convert/fromIterable");letfromIterable=require("@pipes/convert/from/iterable");

For ES6 and Rollup users

If you want, you can directly import the es6 modules like so:

importpipesConvertfrom"@pipes/convert/src";import{fromIterable}from"@pipes/convert/src";importfromIterablefrom"@pipes/convert/src/fromIterable";importfromIterablefrom"@pipes/convert/src/from/iterable";

API Reference

The convert library consists of the following functions:

Set up code for examples

// SetupletcreateReadable=data=>newReadableStream({start(controller){this.data=data||[1,2,3];// Kickstart streamcontroller.enqueue(this.data.pop());},pull(controller){if(!this.data.length)returncontroller.close()controller.enqueue(this.data.pop());}}),createWritable=()=>newWritableStream({write(chunk){console.log(chunk);}});

fromIterable

This function takes an iterable and returns a readable stream that queues the iterated values sequentially.

Parameters

  • iterableIterable<T>

Examples

letinput=[1,2,3,4,5],// input = function* gen() { yield* input; },// input = input.join("");letwritable,res=[];// Create test streamswritable=createTestWritable(c=>res.push(c));// Connect the streamsconnect(fromIterable(input),writable);// res == input

Returns ReadableStream

fromObservable

This function takes any ReadableStream and returns an Observable that emits chunks to subscribers when they arrive.

Parameters

  • observableObservable

Examples

letinput=[1,2,3],output=[],observable,writable;// Create test streamswritable=createTestWritable(i=>output.push(i));// Test the promisereturnfromObservable(Observable.from(input)).pipeTo(writable);

Returns ReadableStream

fromPromise

This function takes any promise and returns a readable stream that queues the resolved value or errors on rejection.

Parameters

Examples

letinput=42;promise=newPromise(resolve=>resolve(input)),writable;// Create test streamswritable=createTestWritable(c=>assert.equal(c,input));connect(fromPromise(promise),writable);// 42

Returns ReadableStream

toObservable

This function takes any ReadableStream and returns an Observable that emits chunks to subscribers when they arrive.

Parameters

  • streamReadableStream

Examples

letinput=[1,2,3],output=[],readable;// Create test streamsreadable=createTestReadable(input);// Test the promisetoObservable(readable).subscribe({next(val){output.push(val);},complete(){assert.deepEqual(input,output);}});

Returns Observable

toPromise

This function takes any ReadableStream and returns a promise that resolves with an Array of the stream's contents when the stream closes.

Parameters

  • streamReadableStream

Examples

letinput=[1,2,3],output=[1,2,3],readable;// Create test streamsreadable=createTestReadable(input);// Test the promisetoPromise(readable).then(result=>{assert.deepEqual(result,output);done();});

Returns Promise<Array<T>>

About

The `pipesjs/convert` module provides various functions to convert `web streams` to other similar `data structures` like `highland` streams, `Observable`s, `Rx` streams etc. and vice versa.

Resources

Contributing

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages