1.4.2 • Published 2 years ago

@bell-crow/pipe-core v1.4.2

Weekly downloads
-
License
ISC
Repository
github
Last release
2 years ago

pipe-core

tag license npm version Build Status Coverage Status

What is pipe-core?

process data like a pipeline

How to use?

the test case code

import { createPipeCore } from '@bell-crow/pipe-core';

const _value = { name: 'pipe-core', age: 1, location: () => 'Asia', nick: { pipe: 1, core: 2 }, city: 1, 2, 3 };

const customStartFunction = { getName (value: typeof _value) { return value.name; }, getDoubleAge (value: typeof _value) { return value.age * 2; }, getLocation (value: typeof _value) { return value.location(); }, getNick (value: typeof _value) { return value.nick; }, getCity (value: typeof _value) { return value.city; }, getValue (value: typeof _value) { return value; } };

const valueCore = createPipeCore(_value, customStartFunction);

test('test createPipeCore case', async () => { await valueCore .pipeStart() .getDoubleAge(doubleAge => { expect(doubleAge).toBe(2); return doubleAge / 2; }) .pipe(divideAge => { expect(divideAge).toBe(1); }) .getName(name => { expect(name).toBe('pipe-core'); return 'changed-pipe-core'; }) .pipe(changedName => { expect(changedName).toEqual('changed-pipe-core'); }) .getCity(city => { expect(city).toEqual(1, 2, 3); return city.reverse(); }) .pipe<Array>((changedCity, update) => { expect(changedCity).toEqual(3, 2, 1); update({ city: 3, 2, 1 }); }) .getCity(city => { return city; }) .pipe<Array>(city => { expect(city).toEqual(3, 2, 1); }) .getLocation(location => { expect(location).toBe('Asia'); }) .pipe((val, update) => { expect(val).toBeUndefined(); update({ location: () => 'Europe' }); }) .getNick(nick => { return { pipe: nick.core, core: nick.pipe }; }) .pipe<typeof _value'nick'>((nick, update) => { expect(nick).toEqual({ pipe: 2, core: 1 }); update({ nick: { pipe: 2, core: 1 } }); }) .pipeEnd() .then(val => { const { location, ...otherVal } = val; expect(location()).toBe('Europe'); expect(otherVal).toEqual({ name: 'pipe-core', age: 1, nick: { pipe: 2, core: 1 }, city: 3, 2, 1 }); }); });

## Have any explain about the usage?
> `createPipe` is a function to create one 'pipe' value. The `pipeStart` is the pipe start and the `pipeEnd` is the pipe end.
> ```typescript
> await value
>   .pipeStart()
>   /* some process */
>   .pipeEnd();
> ```
> The first parameter is the value. The second parameter is one piece of the pipe to process this value.
> ```typescript
> createPipe({
>   name: 'crow',
>   age: 3
> }, {
>   getValue(value) {
>     return { ...value }
>   },
>   getName(value) {
>     return value.name;
>   },
>   getAge(value) {
>     return value.age;
>   }
> });
> ```
> The created pipe is one `pipeline`. We can do some process based on one piece of the pipe called `process function`.
> Every `process function` could provide two parameters. The first is the `real-time value`. The second is one function can `update the value`.
> The `process function` could provide a function called `pipe`. It would receive the return value of the `process function`. And the first `pipe`'s return value would be the parameter of the secord `pipe` function. The `pipe` also supports function to update value.
> ```typescript
> await value
>   .pipeStart() // start the pipe
>   .getValue(value => {
>       console.log(`value is ${JSON.stringify(value)}`);
>       return value.name;
>   })
>   .pipe<string>(name => console.log(`value.name is ${name}`))
>   .getValue((_, update) => {
>       // update the value, the update is synchronous
>       const value = { name: 'bell-crow', age: 1 };
>       update(value as typeof _);
>       console.log(`change value: ${JSON.stringify(value)}`);
>   })
>   .getValue(value => console.log(`changed value is ${JSON.stringify(value)}`))
>   .pipeEnd()
> ```


## TODO

* `support for React state`
1.2.0

2 years ago

1.4.2

2 years ago

1.4.1

2 years ago

1.4.0

2 years ago

1.3.1

2 years ago

1.3.0

2 years ago

1.4.0-beta.1

2 years ago

1.4.2-beta.1

2 years ago

1.1.1

2 years ago

1.1.0

2 years ago

1.0.3

2 years ago

1.0.2

2 years ago

1.0.1

2 years ago

1.0.0

2 years ago

0.0.1-beta.1

2 years ago

0.0.1

2 years ago