chainflow 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +56 -28
- package/dist/core/inputNode.d.ts +2 -2
- package/dist/core/inputNode.js +32 -12
- package/dist/core/inputNode.js.map +1 -1
- package/dist/core/sourceNode.d.ts +2 -2
- package/dist/core/utils/link.d.ts +2 -2
- package/dist/core/utils/link.js +3 -3
- package/dist/core/utils/link.js.map +1 -1
- package/dist/core/utils/source.d.ts +1 -0
- package/dist/core/utils/source.js +1 -0
- package/dist/core/utils/source.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<h1 align="center" style="border-bottom: none;">🌊hainflow</h1>
|
|
2
|
-
<h3 align="center">
|
|
2
|
+
<h3 align="center">A library to create dynamic and composable API call workflows.</h3>
|
|
3
3
|
|
|
4
4
|
## Not Released Yet
|
|
5
5
|
|
|
@@ -7,9 +7,12 @@ Hi! If you are here, you're a bit early. I'm still setting up some stuff for the
|
|
|
7
7
|
|
|
8
8
|
## Use Cases
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
Create multiple sets of API call workflows with this library that can be used to:
|
|
11
|
+
|
|
12
|
+
1. Insert demo data via your app's APIs (instead of SQL/db scripts)
|
|
11
13
|
2. Simulate frontend interactions with backend APIs
|
|
12
|
-
3.
|
|
14
|
+
3. UI-agnostic end-to-end testing of backend APIs
|
|
15
|
+
4. Test edge cases on backend endpoints with input variations
|
|
13
16
|
|
|
14
17
|
## Basic Usage
|
|
15
18
|
|
|
@@ -199,29 +202,51 @@ createNotification.set(({ body: { msg } }) => {
|
|
|
199
202
|
});
|
|
200
203
|
```
|
|
201
204
|
|
|
202
|
-
### `
|
|
205
|
+
### `linkMerge`
|
|
206
|
+
|
|
207
|
+
Link multiple response values to a single request node with an optional callback to merge the values into a single input value.
|
|
203
208
|
|
|
204
|
-
|
|
209
|
+
For the second argument, you can either pass an array of SourceNodes:
|
|
210
|
+
|
|
211
|
+
```typescript
|
|
212
|
+
const mergeValues = ([name, favAnimal]: [string, string]) =>
|
|
213
|
+
`${name} likes ${favAnimal}.`;
|
|
214
|
+
|
|
215
|
+
createNotification.set(({ body: { msg } }) => {
|
|
216
|
+
linkMerge(
|
|
217
|
+
msg, // the request node
|
|
218
|
+
// specify which source nodes to take values from
|
|
219
|
+
[getUser.resp.body.name, favAnimal: getFavAnimal.resp.body.favAnimal],
|
|
220
|
+
// callback that takes the source values as its argument
|
|
221
|
+
// and returns a single output value for the request node
|
|
222
|
+
// callback parameter should look like an array of source values
|
|
223
|
+
mergeValues,
|
|
224
|
+
);
|
|
225
|
+
});
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
or you can pass an object with SourceNodes as the values:
|
|
205
229
|
|
|
206
230
|
```typescript
|
|
207
231
|
const mergeValues = ({ userName, favAnimal }: { userName: string; favAnimal: string }) =>
|
|
208
232
|
`${userName} likes ${favAnimal}.`;
|
|
209
233
|
|
|
210
234
|
createNotification.set(({ body: { msg } }) => {
|
|
211
|
-
|
|
212
|
-
msg,
|
|
213
|
-
// specify
|
|
235
|
+
linkMerge(
|
|
236
|
+
msg,
|
|
237
|
+
// specify source nodes and assigns them to a key
|
|
214
238
|
{
|
|
215
239
|
userName: getUser.resp.body.name,
|
|
216
240
|
favAnimal: getFavAnimal.resp.body.favAnimal,
|
|
217
241
|
},
|
|
218
|
-
// callback
|
|
219
|
-
// and returns a single output value for the request node
|
|
242
|
+
// callback parameter should look like { key: sourceValue }
|
|
220
243
|
mergeValues,
|
|
221
244
|
);
|
|
222
245
|
});
|
|
223
246
|
```
|
|
224
247
|
|
|
248
|
+
Note that the merging link created by this method will only be used if ALL the source nodes specified are available i.e. if `getUser.resp.body.name` does not have a value, this link will not be used at all.
|
|
249
|
+
|
|
225
250
|
### Call Options
|
|
226
251
|
|
|
227
252
|
You can declare manual values for an endpoint call in the chainflow itself, should you need to do so, by passing in a Call Options object as a second argument in the `call` method.
|
|
@@ -341,12 +366,15 @@ Instead of direct links between endpoints, you can use a central store to keep v
|
|
|
341
366
|
```typescript
|
|
342
367
|
import { store } from 'chainflow';
|
|
343
368
|
|
|
344
|
-
const createUser = origin
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
369
|
+
const createUser = origin
|
|
370
|
+
.post('/user')
|
|
371
|
+
.body({
|
|
372
|
+
name: 'Tom',
|
|
373
|
+
})
|
|
374
|
+
.store((resp) => ({
|
|
375
|
+
// this endpoint will store `id` from a response to `userId` in the store
|
|
376
|
+
userId: resp.body.id,
|
|
377
|
+
}));
|
|
350
378
|
|
|
351
379
|
const addRole = origin.post('/role').body({
|
|
352
380
|
// this endpoint will take `userId` from the store, if available
|
|
@@ -364,22 +392,21 @@ This is usually useful when you have endpoints that could take a value from any
|
|
|
364
392
|
Say we have 2 endpoints, `login` and `createGroup`. We want to login as a user once, then proceed to proceed 3 groups as that same user without having to login 3 times.
|
|
365
393
|
|
|
366
394
|
```typescript
|
|
367
|
-
const createGroup = origin
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
})
|
|
395
|
+
const createGroup = origin
|
|
396
|
+
.post('/group')
|
|
397
|
+
.headers({
|
|
398
|
+
Authorization: login.resp.body.authToken,
|
|
399
|
+
})
|
|
400
|
+
.body({
|
|
401
|
+
groupName: seed.groupName,
|
|
402
|
+
});
|
|
372
403
|
|
|
373
404
|
// loggedInFlow will contain a response from the `login` endpoint
|
|
374
|
-
const loggedInFlow = chainflow()
|
|
375
|
-
.call(login)
|
|
376
|
-
.run();
|
|
405
|
+
const loggedInFlow = chainflow().call(login).run();
|
|
377
406
|
|
|
378
407
|
// createGroupFlow will take the response that
|
|
379
408
|
// loggedInFlow received and carry on from there
|
|
380
|
-
const createGroupFlow = chainflow()
|
|
381
|
-
.call(createGroup)
|
|
382
|
-
.continuesFrom(loggedInFlow);
|
|
409
|
+
const createGroupFlow = chainflow().call(createGroup).continuesFrom(loggedInFlow);
|
|
383
410
|
|
|
384
411
|
const groupNames = ['RapGPT', 'Averageexpedition', 'Shaky Osmosis'];
|
|
385
412
|
for (const groupName in groupNames) {
|
|
@@ -411,4 +438,5 @@ Run specific test files:
|
|
|
411
438
|
|
|
412
439
|
### Trivia
|
|
413
440
|
|
|
414
|
-
|
|
441
|
+
- You probably noticed that I enjoy using the Builder pattern for its clarity.
|
|
442
|
+
- I'm praying the wave 🌊 emoji remains sufficiently shaped like a "C" to avoid confusion. Please let me know if there is some system where it does not!
|
package/dist/core/inputNode.d.ts
CHANGED
|
@@ -25,9 +25,9 @@ export declare class InputNode {
|
|
|
25
25
|
/** Sets a source node for this input node. */
|
|
26
26
|
[setSource](source: SourceNode, callback?: (val: any) => any): void;
|
|
27
27
|
/** Sets multiple source nodes to be combined into a single value for this input node */
|
|
28
|
-
[setSources](sources: {
|
|
28
|
+
[setSources](sources: SourceNode[] | {
|
|
29
29
|
[key: string]: SourceNode;
|
|
30
|
-
}, callback
|
|
30
|
+
}, callback?: (val: any) => any): void;
|
|
31
31
|
/** Sets the pool of values for this input node. */
|
|
32
32
|
[setValuePool](valuePool: any[]): void;
|
|
33
33
|
/** Retrieve value of a node. */
|
package/dist/core/inputNode.js
CHANGED
|
@@ -101,18 +101,35 @@ class InputNode {
|
|
|
101
101
|
/** Sets multiple source nodes to be combined into a single value for this input node */
|
|
102
102
|
[symbols_1.setSources](sources, callback) {
|
|
103
103
|
const hashes = new Set();
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
hash
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
104
|
+
let accessInfo;
|
|
105
|
+
let isArray = false;
|
|
106
|
+
if (Array.isArray(sources)) {
|
|
107
|
+
isArray = true;
|
|
108
|
+
accessInfo = sources.map((source) => {
|
|
109
|
+
const hash = source[symbols_1.nodeHash];
|
|
110
|
+
hashes.add(hash);
|
|
111
|
+
return {
|
|
112
|
+
path: source[symbols_1.nodePath],
|
|
113
|
+
undefinedAllowed: source[symbols_1.undefinedAllowed],
|
|
114
|
+
hash,
|
|
115
|
+
};
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
accessInfo = Object.entries(sources).map(([key, source]) => {
|
|
120
|
+
const hash = source[symbols_1.nodeHash];
|
|
121
|
+
hashes.add(hash);
|
|
122
|
+
return {
|
|
123
|
+
path: source[symbols_1.nodePath],
|
|
124
|
+
undefinedAllowed: source[symbols_1.undefinedAllowed],
|
|
125
|
+
hash,
|
|
126
|
+
key,
|
|
127
|
+
};
|
|
128
|
+
});
|
|
129
|
+
}
|
|
114
130
|
__classPrivateFieldGet(this, _InputNode_sources, "f")[new Array(...hashes).sort().join('|')] = {
|
|
115
131
|
accessInfo,
|
|
132
|
+
isArray,
|
|
116
133
|
callback,
|
|
117
134
|
};
|
|
118
135
|
}
|
|
@@ -207,13 +224,16 @@ _InputNode_matchSourceHash = function _InputNode_matchSourceHash(sourceValues, u
|
|
|
207
224
|
// get value from a linked source
|
|
208
225
|
return __classPrivateFieldGet(this, _InputNode_instances, "m", _InputNode_accessSource).call(this, sourceObject, path, undefinedAllowed);
|
|
209
226
|
}, _InputNode_getMultiSourceNodeValues = function _InputNode_getMultiSourceNodeValues(sources, sourceValues) {
|
|
210
|
-
|
|
227
|
+
let sourceVals;
|
|
228
|
+
sources.isArray ? (sourceVals = []) : (sourceVals = {});
|
|
211
229
|
for (const info of sources.accessInfo) {
|
|
212
230
|
const sourceVal = __classPrivateFieldGet(this, _InputNode_instances, "m", _InputNode_getSingleSourceNodeValue).call(this, info.hash, info.path, sourceValues);
|
|
213
231
|
// if one value is unavailable, stop constructing multi-source value
|
|
214
232
|
if (sourceVal === undefined)
|
|
215
233
|
return undefined;
|
|
216
|
-
|
|
234
|
+
sources.isArray
|
|
235
|
+
? sourceVals.push(sourceVal)
|
|
236
|
+
: (sourceVals[info.key] = sourceVal);
|
|
217
237
|
}
|
|
218
238
|
return sourceVals;
|
|
219
239
|
}, _InputNode_selectValue = function _InputNode_selectValue() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inputNode.js","sourceRoot":"","sources":["../../src/core/inputNode.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AACA,6CASyB;AAEzB,+DAA+D;AAC/D,IAAY,iBAEX;AAFD,WAAY,iBAAiB;IAC3B,+DAAO,CAAA;AACT,CAAC,EAFW,iBAAiB,iCAAjB,iBAAiB,QAE5B;AAED,IAAY,SAOX;AAPD,WAAY,SAAS;IACnB,mDAAS,CAAA;IACT,mDAAS,CAAA;IACT,iDAAQ,CAAA;IACR,6CAAM,CAAA;IACN,qEAAkB,CAAA;IAClB,+CAAO,CAAA;AACT,CAAC,EAPW,SAAS,yBAAT,SAAS,QAOpB;
|
|
1
|
+
{"version":3,"file":"inputNode.js","sourceRoot":"","sources":["../../src/core/inputNode.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,7 +8,7 @@ export interface SourceNode {
|
|
|
8
8
|
[nodePath]: string[];
|
|
9
9
|
[undefinedAllowed]?: boolean;
|
|
10
10
|
[nodeValueIdentifier]: NodeValue;
|
|
11
|
-
[key: string]:
|
|
11
|
+
[key: string]: SourceNode;
|
|
12
12
|
}
|
|
13
13
|
/** An intermediate object used to contain information on the SourceNode being built. */
|
|
14
14
|
interface RawSourceNode {
|
|
@@ -18,7 +18,7 @@ interface RawSourceNode {
|
|
|
18
18
|
}
|
|
19
19
|
/** Generates proxies recursively to handle nested property access of a source signature. */
|
|
20
20
|
export declare const SourceNodeHandler: {
|
|
21
|
-
get(obj: RawSourceNode, prop: any):
|
|
21
|
+
get(obj: RawSourceNode, prop: any): unknown;
|
|
22
22
|
set(obj: RawSourceNode, prop: any, val: any): any;
|
|
23
23
|
};
|
|
24
24
|
export {};
|
|
@@ -13,9 +13,9 @@ export declare const link: (dest: InputNode, source: SourceNode, callback?: ((va
|
|
|
13
13
|
* @param sources an array of source nodes that will be passed into the callback.
|
|
14
14
|
* @param callback a function to merge the sources into a single source for the dest.
|
|
15
15
|
*/
|
|
16
|
-
export declare const
|
|
16
|
+
export declare const linkMerge: (dest: InputNode, sources: SourceNode[] | {
|
|
17
17
|
[key: string]: SourceNode;
|
|
18
|
-
}, callback
|
|
18
|
+
}, callback?: ((val: any) => any) | undefined) => void;
|
|
19
19
|
/**
|
|
20
20
|
* Modifier function that allows a SourceNode to return `undefined` values to an input node.
|
|
21
21
|
* Note that doing so will make it such that this SourceNode will ALWAYS be used to retrieve
|
package/dist/core/utils/link.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.allowUndefined = exports.
|
|
3
|
+
exports.allowUndefined = exports.linkMerge = exports.link = void 0;
|
|
4
4
|
const symbols_1 = require("./symbols");
|
|
5
5
|
/**
|
|
6
6
|
* Link a Source node to a Input node.
|
|
@@ -18,10 +18,10 @@ exports.link = link;
|
|
|
18
18
|
* @param sources an array of source nodes that will be passed into the callback.
|
|
19
19
|
* @param callback a function to merge the sources into a single source for the dest.
|
|
20
20
|
*/
|
|
21
|
-
const
|
|
21
|
+
const linkMerge = (dest, sources, callback) => {
|
|
22
22
|
dest[symbols_1.setSources](sources, callback);
|
|
23
23
|
};
|
|
24
|
-
exports.
|
|
24
|
+
exports.linkMerge = linkMerge;
|
|
25
25
|
/**
|
|
26
26
|
* Modifier function that allows a SourceNode to return `undefined` values to an input node.
|
|
27
27
|
* Note that doing so will make it such that this SourceNode will ALWAYS be used to retrieve
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"link.js","sourceRoot":"","sources":["../../../src/core/utils/link.ts"],"names":[],"mappings":";;;AACA,uCAAoE;AAGpE;;;;;GAKG;AACI,MAAM,IAAI,GAAG,CAAC,IAAe,EAAE,MAAkB,EAAE,QAA4B,EAAE,EAAE;IACxF,IAAI,CAAC,mBAAS,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AACpC,CAAC,CAAC;AAFW,QAAA,IAAI,QAEf;AAEF;;;;;GAKG;AACI,MAAM,
|
|
1
|
+
{"version":3,"file":"link.js","sourceRoot":"","sources":["../../../src/core/utils/link.ts"],"names":[],"mappings":";;;AACA,uCAAoE;AAGpE;;;;;GAKG;AACI,MAAM,IAAI,GAAG,CAAC,IAAe,EAAE,MAAkB,EAAE,QAA4B,EAAE,EAAE;IACxF,IAAI,CAAC,mBAAS,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AACpC,CAAC,CAAC;AAFW,QAAA,IAAI,QAEf;AAEF;;;;;GAKG;AACI,MAAM,SAAS,GAAG,CACvB,IAAe,EACf,OAAqD,EACrD,QAA4B,EAC5B,EAAE;IACF,IAAI,CAAC,oBAAU,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AACtC,CAAC,CAAC;AANW,QAAA,SAAS,aAMpB;AAEF;;;;GAIG;AACI,MAAM,cAAc,GAAG,CAAC,MAAkB,EAAE,EAAE;IACnD,MAAM,CAAC,0BAAgB,CAAC,GAAG,IAAI,CAAC;IAChC,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAHW,QAAA,cAAc,kBAGzB"}
|
|
@@ -6,6 +6,7 @@ export declare const source: (source: SourceNode, callback?: ((val: any) => any)
|
|
|
6
6
|
source: SourceNode;
|
|
7
7
|
callback: ((val: any) => any) | undefined;
|
|
8
8
|
};
|
|
9
|
+
/** @experimental - evaluating if this is important enough to retain */
|
|
9
10
|
export declare const sources: (sources: SourceNode[], callback?: ((val: any) => any) | undefined) => {
|
|
10
11
|
[nodeValueIdentifier]: NodeValue;
|
|
11
12
|
sources: SourceNode[];
|
|
@@ -9,6 +9,7 @@ const source = (source, callback) => ({
|
|
|
9
9
|
callback,
|
|
10
10
|
});
|
|
11
11
|
exports.source = source;
|
|
12
|
+
/** @experimental - evaluating if this is important enough to retain */
|
|
12
13
|
const sources = (sources, callback) => ({
|
|
13
14
|
[symbols_1.nodeValueIdentifier]: inputNode_1.NodeValue.Sources,
|
|
14
15
|
sources,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"source.js","sourceRoot":"","sources":["../../../src/core/utils/source.ts"],"names":[],"mappings":";;;AAAA,4CAAyC;AAEzC,uCAAgD;AAEzC,MAAM,MAAM,GAAG,CAAC,MAAkB,EAAE,QAA4B,EAAE,EAAE,CAAC,CAAC;IAC3E,CAAC,6BAAmB,CAAC,EAAE,qBAAS,CAAC,kBAAkB;IACnD,MAAM;IACN,QAAQ;CACT,CAAC,CAAC;AAJU,QAAA,MAAM,UAIhB;
|
|
1
|
+
{"version":3,"file":"source.js","sourceRoot":"","sources":["../../../src/core/utils/source.ts"],"names":[],"mappings":";;;AAAA,4CAAyC;AAEzC,uCAAgD;AAEzC,MAAM,MAAM,GAAG,CAAC,MAAkB,EAAE,QAA4B,EAAE,EAAE,CAAC,CAAC;IAC3E,CAAC,6BAAmB,CAAC,EAAE,qBAAS,CAAC,kBAAkB;IACnD,MAAM;IACN,QAAQ;CACT,CAAC,CAAC;AAJU,QAAA,MAAM,UAIhB;AAEH,uEAAuE;AAChE,MAAM,OAAO,GAAG,CAAC,OAAqB,EAAE,QAA4B,EAAE,EAAE,CAAC,CAAC;IAC/E,CAAC,6BAAmB,CAAC,EAAE,qBAAS,CAAC,OAAO;IACxC,OAAO;IACP,QAAQ;CACT,CAAC,CAAC;AAJU,QAAA,OAAO,WAIjB"}
|