rx-hyper

0.0.14 • Public • Published

RxHyper

RxJS wrappers for holepunch tools

https://docs.holepunch.to/



!! Alpha Stage !!

At this moment, the library is very volatile and subject to drastic changes.



Current support status

  • [x] Hypercore
  • [x] Corestore
  • [ ] Hyperbee
  • [ ] Hyperdrive
  • [ ] Hyperswarm
  • [ ] HyperDHT
  • [ ] Autobase
  • [ ] Protomux
  • [ ] SecretStream

Planned to extend

  • [ ] RxObjectCore
    • Core that deals with only json objects.
  • [ ] RxCascadeCore extends RxObjectCore
    • Take all existing chunk objects and combine them into one object
    • Options to go top bottom or bottom top

API Documentation

Installation

You import your own dependencies. This library is peer-to-peer centric without a server in mind. So the downloading and installing of dependencies is up to the developer.

import rxjs from "rxjs";
import b4a from "b4a";
import cenc from "compact-encoding";
import rxjsOperators from "rxjs/operators";
import * as Awilix from "awilix";
import Hypercore from "hypercore";
import Corestore from "corestore";
import RAM from "random-access-memory";

import {RxCore, RxCorestore} from "rx-hyper";
// Install dependencies for the tool you want to use
// If you only use RxCore then just RxCore.install
await RxCorestore.install({
    dependencies: {
        rxjs: { get() { return rxjs; }},
        ["rxjs/operators"]: { get() { return rxjsOperators }},
        awilix: { get() { return Awilix }},
        hypercore: { get() { return Hypercore; }},
        b4a: { get() { return b4a; }},
        ["compact-encoding"]: { get() { return cenc; }},
        // Only needed if you use corestore
        corestore: { get() { return Corestore; }},
        // Optional if you supply storage to each create function.
        ["random-access-memory"]: { get() { return RAM; }, optional: true },
    },
    // Which dependency should be used for default storage.
    // Should be a random-access-storage.
    defaultStorage: "random-access-memory",
    // How to make the file from the default imported dependency
    makeFile: (RAM, buff, config) => new RAM(buff, config)
});
// or let the library download them from CDN
await RxCore.install();

Use

const core$ = RxCore.create({valueEncoding: "json"});
const [core1$, core2$] = RxCore.create(2);
const [core3$, remoteCore$] = RxCore.create([{valueEncoding: "utf8"}, {key: someRemoteCoreKey}]);

const corestore$ = RxCorestore.create();

// The completion of observable does not close the core.
// This isn't very good RxJS but serves as an example of capability.
corestore$
    .get$({name: "someCore", valueEncoding: "utf8"})
    .pipe(rx.switchMap((core) => core.ready$))
    .subscribe(
        async rxCore => {
            rxCore.onAppend$.subscribe(
                () => console.log("Core appended")
            );
            
            rx.concat(
                // Has a factory that passes the dependencies 
                // and other RxCore functions.
                // Expects the function to return an Observable.
                rxCore.append$(({rx}) => {
                    return rx.of("hello", "world")
                }),
                // Or do it classically.
                rxCore.append$(["hello", "world"])
            ).subscribe(
                appendResult => {
                     // Do stuff with result.
                }
            );
        }
    );

Test it

npm test

Distributed under the MIT license. See LICENSE for more information.

Readme

Keywords

none

Package Sidebar

Install

npm i rx-hyper

Weekly Downloads

0

Version

0.0.14

License

MIT

Unpacked Size

72.9 kB

Total Files

16

Last publish

Collaborators

  • zacharygriffee