Skip to content

Commit

Permalink
Refactoring
Browse files Browse the repository at this point in the history
  • Loading branch information
bigslycat committed Oct 17, 2018
1 parent 020b702 commit 53c33ec
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 35 deletions.
31 changes: 13 additions & 18 deletions packages/honeycombs/src/Honeycomb.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,7 @@ import { StoreObservable } from './StoreObservable';
// eslint-disable-next-line no-unused-vars
import { StateSubject } from './StateSubject';
import { Store, type StoreLike } from './Store';
import {
Queue,
type PayloadHandler,
type PayloadPromiseHandler,
type PayloadObservableHandler,
type PromiseSetter,
type ObservableSetter,
} from './Queue';
import { Queue } from './Queue';
import { Bee } from './Bee';

export type ActionsSpec<S> = {
Expand Down Expand Up @@ -62,11 +55,11 @@ class Honeycomb<S> extends StoreObservable<S>
};
}

bee<P>(handler: PayloadHandler<S, P>): Bee<S, P> {
bee<P>(handler: P => (S => S) | S): Bee<S, P> {
return this.case(handler);
}

case<P>(handler: PayloadHandler<S, P>): Bee<S, P> {
case<P>(handler: P => (S => S) | S): Bee<S, P> {
const createCaseEmitters = this.#createCaseEmitters;
const { queue, store, caseSubject, next } = createCaseEmitters();
return new Bee(store, caseSubject, queue.case(handler, next));
Expand All @@ -80,21 +73,23 @@ class Honeycomb<S> extends StoreObservable<S>
return this.case(payload => payload);
}

willBee<P>(handler: PayloadPromiseHandler<S, P>): Bee<S, P> {
willBee<P>(handler: P => Promise<(S => S) | S>): Bee<S, P> {
return this.fromPromise(handler);
}

fromPromise<P>(handler: PayloadPromiseHandler<S, P>): Bee<S, P> {
fromPromise<P>(handler: P => Promise<(S => S) | S>): Bee<S, P> {
const createCaseEmitters = this.#createCaseEmitters;
const { queue, store, caseSubject, next, error } = createCaseEmitters();
return new Bee(store, caseSubject, queue.fromPromise(handler, next, error));
}

willBees<P>(handler: PayloadObservableHandler<S, P>): Bee<S, P> {
willBees<P>(handler: P => ObservableInterface<(S => S) | S>): Bee<S, P> {
return this.fromObservable(handler);
}

fromObservable<P>(handler: PayloadObservableHandler<S, P>): Bee<S, P> {
fromObservable<P>(
handler: P => ObservableInterface<(S => S) | S>,
): Bee<S, P> {
const createCaseEmitters = this.#createCaseEmitters;
const { queue, store, caseSubject, next, error } = createCaseEmitters();
return new Bee(
Expand All @@ -104,11 +99,11 @@ class Honeycomb<S> extends StoreObservable<S>
);
}

awaitBee<P>(handler: PromiseSetter<S, P>): Bee<S, P> {
awaitBee<P>(handler: (S, P) => Promise<S>): Bee<S, P> {
return this.awaitPromise(handler);
}

awaitPromise<P>(handler: PromiseSetter<S, P>): Bee<S, P> {
awaitPromise<P>(handler: (S, P) => Promise<S>): Bee<S, P> {
const createCaseEmitters = this.#createCaseEmitters;
const { queue, store, caseSubject, next, error } = createCaseEmitters();
return new Bee(
Expand All @@ -118,11 +113,11 @@ class Honeycomb<S> extends StoreObservable<S>
);
}

awaitBees<P>(handler: ObservableSetter<S, P>): Bee<S, P> {
awaitBees<P>(handler: (S, P) => ObservableInterface<S>): Bee<S, P> {
return this.awaitObservable(handler);
}

awaitObservable<P>(handler: ObservableSetter<S, P>): Bee<S, P> {
awaitObservable<P>(handler: (S, P) => ObservableInterface<S>): Bee<S, P> {
const createCaseEmitters = this.#createCaseEmitters;
const { queue, store, caseSubject, next, error } = createCaseEmitters();
return new Bee(
Expand Down
24 changes: 7 additions & 17 deletions packages/honeycombs/src/Queue.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,6 @@ import { Store } from './Store';

export type Task<S> = S => ObservableInterface<S> | Promise<S> | S;

type Res<S> = (S => S) | S;

export type PayloadHandler<S, P> = P => Res<S>;
export type PayloadPromiseHandler<S, P> = P => Promise<Res<S>>;
export type PayloadObservableHandler<S, P> = P => ObservableInterface<Res<S>>;
export type PromiseSetter<S, P> = (S, P) => Promise<S>;
export type ObservableSetter<S, P> = (S, P) => ObservableInterface<S>;

type AddTask<S> = (Res<S>) => void;

export type Runner<P> = (payload: P) => void;

const getState = <S>(store: Store<S>): S => store.getState();
Expand All @@ -38,22 +28,22 @@ export class Queue<S> {
.then(this.getStore);
}

createParallelRunner(next: S => void): AddTask<S> {
return (newState: Res<S>) =>
createParallelRunner(next: S => void): ((S => S) | S) => void {
return (newState: (S => S) | S) =>
this.run((prevState: S) =>
next(typeof newState == 'function' ? newState(prevState) : newState),
);
}

case<P>(handler: PayloadHandler<S, P>, next: S => void) {
case<P>(handler: P => (S => S) | S, next: S => void) {
const run = this.createParallelRunner(next);
return (payload: P) => {
Promise.resolve(handler(payload)).then(run);
};
}

fromPromise<P>(
handler: PayloadPromiseHandler<S, P>,
handler: P => Promise<(S => S) | S>,
next: S => void,
error: Error => void,
) {
Expand All @@ -64,7 +54,7 @@ export class Queue<S> {
}

fromObservable<P>(
handler: PayloadObservableHandler<S, P>,
handler: P => ObservableInterface<(S => S) | S>,
next: S => void,
error: Error => void,
) {
Expand All @@ -79,7 +69,7 @@ export class Queue<S> {
}

awaitPromise<P>(
handler: PromiseSetter<S, P>,
handler: (S, P) => Promise<S>,
next: S => void,
error: Error => void,
) {
Expand All @@ -88,7 +78,7 @@ export class Queue<S> {
}

awaitObservable<P>(
handler: ObservableSetter<S, P>,
handler: (S, P) => ObservableInterface<S>,
next: S => void,
error: Error => void,
) {
Expand Down

0 comments on commit 53c33ec

Please sign in to comment.