type-plus 5.4.1 → 5.5.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 +1 -0
- package/cjs/functional/context.d.ts +12 -8
- package/cjs/functional/context.d.ts.map +1 -1
- package/cjs/functional/context.js +12 -9
- package/cjs/functional/context.js.map +1 -1
- package/cjs/functional/context.spec.js +35 -0
- package/cjs/functional/context.spec.js.map +1 -1
- package/cjs/promise/PromiseValue.d.ts +7 -0
- package/cjs/promise/PromiseValue.d.ts.map +1 -1
- package/cjs/promise/PromiseValue.spec.js +8 -0
- package/cjs/promise/PromiseValue.spec.js.map +1 -1
- package/cjs/promise/index.d.ts +1 -1
- package/cjs/promise/index.d.ts.map +1 -1
- package/esm/functional/context.d.ts +12 -8
- package/esm/functional/context.d.ts.map +1 -1
- package/esm/functional/context.js +11 -9
- package/esm/functional/context.js.map +1 -1
- package/esm/functional/context.spec.js +35 -0
- package/esm/functional/context.spec.js.map +1 -1
- package/esm/promise/PromiseValue.d.ts +7 -0
- package/esm/promise/PromiseValue.d.ts.map +1 -1
- package/esm/promise/PromiseValue.spec.js +9 -1
- package/esm/promise/PromiseValue.spec.js.map +1 -1
- package/esm/promise/index.d.ts +1 -1
- package/esm/promise/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/ts/functional/context.ts +22 -15
- package/ts/promise/PromiseValue.ts +7 -0
- package/ts/promise/index.ts +1 -1
package/README.md
CHANGED
|
@@ -370,6 +370,7 @@ JSONTypes.get<string>(someJson, 'a', 'b', 1, 'c') // miku
|
|
|
370
370
|
|
|
371
371
|
### Promise utilities
|
|
372
372
|
|
|
373
|
+
- `AwaitedProp<T, V>`: `Awaited` on specified props `P` in `T`.
|
|
373
374
|
- `isPromise<R>(subject: any)`: `isPromise()` type guard.
|
|
374
375
|
- `MaybePromise<T>`: Alias of `T | Promise<T>`.
|
|
375
376
|
- `PromiseValue<P>`: Gets the type within the Promise.
|
|
@@ -5,27 +5,31 @@ export type ContextBaseShape = Record<string | symbol, any>;
|
|
|
5
5
|
* @param context the current context.
|
|
6
6
|
* @return an additional context with new properties.
|
|
7
7
|
*/
|
|
8
|
-
export type ContextExtender<Current, Additional> = (context: Current) => Additional;
|
|
8
|
+
export type ContextExtender<Current, Additional> = ((context: Current) => Additional);
|
|
9
9
|
export type ContextBuilder<Init extends ContextBaseShape, Ctx extends ContextBaseShape> = {
|
|
10
10
|
/**
|
|
11
11
|
* Extends the context using an extender.
|
|
12
|
+
*
|
|
13
|
+
* @type Additional The additional context to be added by the `extender`.
|
|
14
|
+
* By default this is inferred by the `extender`.
|
|
15
|
+
* But you can also explicitly specify it,
|
|
16
|
+
* if the type is a superset of the actual return type of the `extender`.
|
|
12
17
|
* @param extender function that add new props to the context.
|
|
13
18
|
*
|
|
14
|
-
* The extender only need to return a new object with
|
|
19
|
+
* The extender only need to return a new object with additional properties.
|
|
20
|
+
* The builder will merge that with the current context.
|
|
15
21
|
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
22
|
+
* If the extender specify an existing property,
|
|
23
|
+
* it overrides the existing value.
|
|
18
24
|
*/
|
|
19
|
-
extend<
|
|
25
|
+
extend<Additional extends ContextBaseShape = ContextBaseShape>(extender: ContextExtender<Ctx, Additional>): ContextBuilder<Init, LeftJoin<Ctx, Additional>>;
|
|
20
26
|
/**
|
|
21
27
|
* Build and return the context.
|
|
22
28
|
*/
|
|
23
29
|
build(): Ctx;
|
|
24
30
|
};
|
|
25
31
|
/**
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
* The initializer and transformer
|
|
32
|
+
* Creates a context builder.
|
|
29
33
|
*
|
|
30
34
|
* @param init The initial context or an context initializer.
|
|
31
35
|
* @return the context builder where you can
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../ts/functional/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAElD,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,EAAE,GAAG,CAAC,CAAA;AAE3D;;;;GAIG;AACH,MAAM,MAAM,eAAe,CACzB,OAAO,EACP,UAAU,IACR,CAAC,OAAO,EAAE,OAAO,KAAK,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../ts/functional/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAElD,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,EAAE,GAAG,CAAC,CAAA;AAE3D;;;;GAIG;AACH,MAAM,MAAM,eAAe,CACzB,OAAO,EACP,UAAU,IACR,CAAC,CAAC,OAAO,EAAE,OAAO,KAAK,UAAU,CAAC,CAAA;AAEtC,MAAM,MAAM,cAAc,CACxB,IAAI,SAAS,gBAAgB,EAC7B,GAAG,SAAS,gBAAgB,IAC1B;IACF;;;;;;;;;;;;;;OAcG;IACH,MAAM,CACJ,UAAU,SAAS,gBAAgB,GAAG,gBAAgB,EACtD,QAAQ,EAAE,eAAe,CAAC,GAAG,EAAE,UAAU,CAAC,GACxC,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC;IACpD;;OAEG;IACH,KAAK,IAAI,GAAG,CAAA;CACb,CAAA;AAED;;;;;;;GAOG;AACH,wBAAgB,OAAO,CACrB,IAAI,SAAS,gBAAgB,EAC7B,GAAG,SAAS,gBAAgB,GAAG,IAAI,EACnC,IAAI,CAAC,EAAE,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,CAKvD"}
|
|
@@ -13,9 +13,7 @@ var __assign = (this && this.__assign) || function () {
|
|
|
13
13
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
14
|
exports.context = void 0;
|
|
15
15
|
/**
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
* The initializer and transformer
|
|
16
|
+
* Creates a context builder.
|
|
19
17
|
*
|
|
20
18
|
* @param init The initial context or an context initializer.
|
|
21
19
|
* @return the context builder where you can
|
|
@@ -25,19 +23,24 @@ exports.context = void 0;
|
|
|
25
23
|
function context(init) {
|
|
26
24
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
|
27
25
|
return typeof init === 'function'
|
|
28
|
-
? contextBuilder({}, [init])
|
|
26
|
+
? contextBuilder({}, [[init]])
|
|
29
27
|
: contextBuilder(init !== null && init !== void 0 ? init : {}, []);
|
|
30
28
|
}
|
|
31
29
|
exports.context = context;
|
|
32
|
-
|
|
30
|
+
/* eslint-disable */
|
|
31
|
+
function contextBuilder(init, extenders) {
|
|
33
32
|
return {
|
|
34
|
-
extend: function (
|
|
35
|
-
return contextBuilder(init,
|
|
33
|
+
extend: function (extender) {
|
|
34
|
+
return contextBuilder(init, extenders.concat([[extender]]));
|
|
36
35
|
},
|
|
37
36
|
build: function () {
|
|
38
|
-
|
|
39
|
-
|
|
37
|
+
return extenders.reduce(function (p, _a, i) {
|
|
38
|
+
var t = _a[0];
|
|
39
|
+
var v = typeof t === 'function' ? extenders[i][0] = t(p) : t;
|
|
40
|
+
return __assign(__assign({}, p), v);
|
|
41
|
+
}, init);
|
|
40
42
|
}
|
|
41
43
|
};
|
|
42
44
|
}
|
|
45
|
+
/* eslint-enable */
|
|
43
46
|
//# sourceMappingURL=context.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../ts/functional/context.ts"],"names":[],"mappings":";;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../ts/functional/context.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AA2CA;;;;;;;GAOG;AACH,SAAgB,OAAO,CAGrB,IAA0B;IAC1B,+DAA+D;IAC/D,OAAO,OAAO,IAAI,KAAK,UAAU;QAC/B,CAAC,CAAC,cAAc,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9B,CAAC,CAAC,cAAc,CAAC,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,EAAE,EAAE,EAAE,CAAQ,CAAA;AAC3C,CAAC;AARD,0BAQC;AAED,oBAAoB;AACpB,SAAS,cAAc,CAAC,IAAsB,EAAE,SAAmD;IACjG,OAAO;QACL,MAAM,YAAC,QAAmC;YACxC,OAAO,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;QAC7D,CAAC;QACD,KAAK;YACH,OAAO,SAAS,CAAC,MAAM,CAAC,UAAC,CAAC,EAAE,EAAG,EAAE,CAAC;oBAAL,CAAC,QAAA;gBAC5B,IAAM,CAAC,GAAG,OAAO,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;gBAC9D,6BAAY,CAAC,GAAK,CAAC,EAAE;YACvB,CAAC,EAAE,IAAI,CAAC,CAAA;QACV,CAAC;KACF,CAAA;AACH,CAAC;AACD,mBAAmB"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
var assertron_1 = require("assertron");
|
|
3
4
|
var index_js_1 = require("../index.js");
|
|
4
5
|
describe("".concat(index_js_1.context.name, "()"), function () {
|
|
5
6
|
it('allows no param', function () {
|
|
@@ -43,5 +44,39 @@ describe("".concat(index_js_1.context.name, "()"), function () {
|
|
|
43
44
|
index_js_1.isType.equal();
|
|
44
45
|
expect(r).toEqual({ a: 1, b: 2, c: 3 });
|
|
45
46
|
});
|
|
47
|
+
it('can specify additional type during extend', function () {
|
|
48
|
+
var r = (0, index_js_1.context)({ a: 1 })
|
|
49
|
+
.extend(function (ctx) { return ({ b: ctx.a + 1 }); })
|
|
50
|
+
.build();
|
|
51
|
+
index_js_1.isType.equal();
|
|
52
|
+
expect(r).toEqual({ a: 1, b: 2 });
|
|
53
|
+
});
|
|
54
|
+
it('invoke each extender only once', function () {
|
|
55
|
+
var o = new assertron_1.AssertOrder(4);
|
|
56
|
+
var c1 = (0, index_js_1.context)({ a: 1 })
|
|
57
|
+
.extend(function () {
|
|
58
|
+
o.once(1);
|
|
59
|
+
return ({ b: 2 });
|
|
60
|
+
})
|
|
61
|
+
.extend(function () {
|
|
62
|
+
o.once(2);
|
|
63
|
+
return ({ c: 3 });
|
|
64
|
+
});
|
|
65
|
+
var c2 = c1.extend(function () {
|
|
66
|
+
o.once(3);
|
|
67
|
+
return ({ d: 4 });
|
|
68
|
+
});
|
|
69
|
+
var c3 = c1.extend(function () {
|
|
70
|
+
o.once(4);
|
|
71
|
+
return ({ e: 5 });
|
|
72
|
+
});
|
|
73
|
+
var r2 = c2.build();
|
|
74
|
+
var r3 = c3.build();
|
|
75
|
+
var r1 = c1.build();
|
|
76
|
+
expect(r2).toEqual({ a: 1, b: 2, c: 3, d: 4 });
|
|
77
|
+
expect(r3).toEqual({ a: 1, b: 2, c: 3, e: 5 });
|
|
78
|
+
expect(r1).toEqual({ a: 1, b: 2, c: 3 });
|
|
79
|
+
o.end();
|
|
80
|
+
});
|
|
46
81
|
});
|
|
47
82
|
//# sourceMappingURL=context.spec.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.spec.js","sourceRoot":"","sources":["../../ts/functional/context.spec.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"context.spec.js","sourceRoot":"","sources":["../../ts/functional/context.spec.ts"],"names":[],"mappings":";;AAAA,uCAAuC;AACvC,wCAA6C;AAE7C,QAAQ,CAAC,UAAG,kBAAO,CAAC,IAAI,OAAI,EAAE;IAC5B,EAAE,CAAC,iBAAiB,EAAE;QACpB,IAAM,CAAC,GAAG,IAAA,kBAAO,GAAE,CAAC,KAAK,EAAE,CAAA;QAC3B,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IACvB,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,kCAAkC,EAAE;QACrC,IAAM,CAAC,GAAG,IAAA,kBAAO,EAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAA;QACnC,iBAAM,CAAC,KAAK,EAAiC,CAAA;QAC7C,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;IAC7B,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,wBAAwB,EAAE;QAC3B,IAAM,CAAC,GAAG,IAAA,kBAAO,EAAC,cAAM,OAAA,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAV,CAAU,CAAC,CAAC,KAAK,EAAE,CAAA;QAC3C,iBAAM,CAAC,KAAK,EAAiC,CAAA;QAC7C,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;IAC7B,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,oCAAoC,EAAE;QACvC,IAAM,CAAC,GAAG,IAAA,kBAAO,EAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;aACxB,MAAM,CAAC,UAAA,GAAG;YACT,iBAAM,CAAC,KAAK,EAAmC,CAAA;YAC/C,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;YAC7B,OAAO,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAA;QACzB,CAAC,CAAC;aACD,KAAK,EAAE,CAAA;QAEV,iBAAM,CAAC,KAAK,EAA4C,CAAA;QACxD,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;IACnC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,uDAAuD,EAAE;QAC1D,IAAM,CAAC,GAAG,IAAA,kBAAO,EAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;aACxB,MAAM,CAAC,UAAA,GAAG,IAAI,OAAA,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAlB,CAAkB,CAAC;aACjC,MAAM,CAAC,UAAA,GAAG,IAAI,OAAA,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAtB,CAAsB,CAAC;aACrC,KAAK,EAAE,CAAA;QAEV,iBAAM,CAAC,KAAK,EAAuD,CAAA;QACnE,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;IACzC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,sDAAsD,EAAE;QACzD,SAAS,GAAG,CAAC,GAAkB;YAC7B,OAAO,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAA;QACzB,CAAC;QACD,IAAM,CAAC,GAAG,IAAA,kBAAO,EAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAA;QAErD,iBAAM,CAAC,KAAK,EAAuD,CAAA;QACnE,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;IACzC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,2CAA2C,EAAE;QAC9C,IAAM,CAAC,GAAG,IAAA,kBAAO,EAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;aACxB,MAAM,CAA4B,UAAA,GAAG,IAAI,OAAA,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAlB,CAAkB,CAAC;aAC5D,KAAK,EAAE,CAAA;QAEV,iBAAM,CAAC,KAAK,EAAwD,CAAA;QACpE,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;IACnC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,gCAAgC,EAAE;QACnC,IAAM,CAAC,GAAG,IAAI,uBAAW,CAAC,CAAC,CAAC,CAAA;QAC5B,IAAM,EAAE,GAAG,IAAA,kBAAO,EAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;aACzB,MAAM,CAAC;YACN,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACT,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;QACnB,CAAC,CAAC;aACD,MAAM,CAAC;YACN,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACT,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;QACnB,CAAC,CAAC,CAAA;QAEJ,IAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC;YACnB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACT,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;QACnB,CAAC,CAAC,CAAA;QACF,IAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC;YACnB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACT,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;QACnB,CAAC,CAAC,CAAA;QAEF,IAAM,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAA;QACrB,IAAM,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAA;QACrB,IAAM,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAA;QAErB,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;QAC9C,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;QAC9C,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;QAExC,CAAC,CAAC,GAAG,EAAE,CAAA;IACT,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -1,6 +1,13 @@
|
|
|
1
|
+
import type { AnyRecord } from '../index.js';
|
|
1
2
|
/**
|
|
2
3
|
* Gets value type from Promise
|
|
3
4
|
* @deprecated Use `Awaited<T>` instead.
|
|
4
5
|
*/
|
|
5
6
|
export type PromiseValue<P extends Promise<any>> = P extends Promise<infer T> ? T : never;
|
|
7
|
+
/**
|
|
8
|
+
* Await on specific props V on type T
|
|
9
|
+
*/
|
|
10
|
+
export type AwaitedProp<T extends AnyRecord, K extends keyof T> = {
|
|
11
|
+
[k in keyof T]: k extends K ? Awaited<T[k]> : T[k];
|
|
12
|
+
};
|
|
6
13
|
//# sourceMappingURL=PromiseValue.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PromiseValue.d.ts","sourceRoot":"","sources":["../../ts/promise/PromiseValue.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA"}
|
|
1
|
+
{"version":3,"file":"PromiseValue.d.ts","sourceRoot":"","sources":["../../ts/promise/PromiseValue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAE5C;;;GAGG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;AAEzF;;GAEG;AACH,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,SAAS,EAAE,CAAC,SAAS,MAAM,CAAC,IAAI;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,CAAA"}
|
|
@@ -5,4 +5,12 @@ test('extract value from Promise', function () {
|
|
|
5
5
|
var y = '';
|
|
6
6
|
index_js_1.assertType.isString(y);
|
|
7
7
|
});
|
|
8
|
+
describe('AwaitedProp<T, V>', function () {
|
|
9
|
+
it('awaits one of the props', function () {
|
|
10
|
+
index_js_1.isType.equal();
|
|
11
|
+
});
|
|
12
|
+
it('awaits multiple props', function () {
|
|
13
|
+
index_js_1.isType.equal();
|
|
14
|
+
});
|
|
15
|
+
});
|
|
8
16
|
//# sourceMappingURL=PromiseValue.spec.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PromiseValue.spec.js","sourceRoot":"","sources":["../../ts/promise/PromiseValue.spec.ts"],"names":[],"mappings":";;AAAA,
|
|
1
|
+
{"version":3,"file":"PromiseValue.spec.js","sourceRoot":"","sources":["../../ts/promise/PromiseValue.spec.ts"],"names":[],"mappings":";;AAAA,wCAA2E;AAE3E,IAAI,CAAC,4BAA4B,EAAE;IACjC,IAAM,CAAC,GAAkC,EAAE,CAAA;IAC3C,qBAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;AACxB,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,mBAAmB,EAAE;IAC5B,EAAE,CAAC,yBAAyB,EAAE;QAG5B,iBAAM,CAAC,KAAK,EAAqC,CAAA;IACnD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,uBAAuB,EAAE;QAQ1B,iBAAM,CAAC,KAAK,EAKL,CAAA;IACT,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
package/cjs/promise/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export * from './isPromise.js';
|
|
2
2
|
export * from './mapSeries.js';
|
|
3
3
|
export * from './MaybePromise.js';
|
|
4
|
-
export type { PromiseValue } from './PromiseValue.js';
|
|
4
|
+
export type { PromiseValue, AwaitedProp } from './PromiseValue.js';
|
|
5
5
|
export type { PromiseValueMerge } from './PromiseValueMerge.js';
|
|
6
6
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../ts/promise/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA;AAC9B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,mBAAmB,CAAA;AACjC,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../ts/promise/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA;AAC9B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,mBAAmB,CAAA;AACjC,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAClE,YAAY,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA"}
|
|
@@ -5,27 +5,31 @@ export type ContextBaseShape = Record<string | symbol, any>;
|
|
|
5
5
|
* @param context the current context.
|
|
6
6
|
* @return an additional context with new properties.
|
|
7
7
|
*/
|
|
8
|
-
export type ContextExtender<Current, Additional> = (context: Current) => Additional;
|
|
8
|
+
export type ContextExtender<Current, Additional> = ((context: Current) => Additional);
|
|
9
9
|
export type ContextBuilder<Init extends ContextBaseShape, Ctx extends ContextBaseShape> = {
|
|
10
10
|
/**
|
|
11
11
|
* Extends the context using an extender.
|
|
12
|
+
*
|
|
13
|
+
* @type Additional The additional context to be added by the `extender`.
|
|
14
|
+
* By default this is inferred by the `extender`.
|
|
15
|
+
* But you can also explicitly specify it,
|
|
16
|
+
* if the type is a superset of the actual return type of the `extender`.
|
|
12
17
|
* @param extender function that add new props to the context.
|
|
13
18
|
*
|
|
14
|
-
* The extender only need to return a new object with
|
|
19
|
+
* The extender only need to return a new object with additional properties.
|
|
20
|
+
* The builder will merge that with the current context.
|
|
15
21
|
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
22
|
+
* If the extender specify an existing property,
|
|
23
|
+
* it overrides the existing value.
|
|
18
24
|
*/
|
|
19
|
-
extend<
|
|
25
|
+
extend<Additional extends ContextBaseShape = ContextBaseShape>(extender: ContextExtender<Ctx, Additional>): ContextBuilder<Init, LeftJoin<Ctx, Additional>>;
|
|
20
26
|
/**
|
|
21
27
|
* Build and return the context.
|
|
22
28
|
*/
|
|
23
29
|
build(): Ctx;
|
|
24
30
|
};
|
|
25
31
|
/**
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
* The initializer and transformer
|
|
32
|
+
* Creates a context builder.
|
|
29
33
|
*
|
|
30
34
|
* @param init The initial context or an context initializer.
|
|
31
35
|
* @return the context builder where you can
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../ts/functional/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAElD,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,EAAE,GAAG,CAAC,CAAA;AAE3D;;;;GAIG;AACH,MAAM,MAAM,eAAe,CACzB,OAAO,EACP,UAAU,IACR,CAAC,OAAO,EAAE,OAAO,KAAK,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../ts/functional/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAElD,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,EAAE,GAAG,CAAC,CAAA;AAE3D;;;;GAIG;AACH,MAAM,MAAM,eAAe,CACzB,OAAO,EACP,UAAU,IACR,CAAC,CAAC,OAAO,EAAE,OAAO,KAAK,UAAU,CAAC,CAAA;AAEtC,MAAM,MAAM,cAAc,CACxB,IAAI,SAAS,gBAAgB,EAC7B,GAAG,SAAS,gBAAgB,IAC1B;IACF;;;;;;;;;;;;;;OAcG;IACH,MAAM,CACJ,UAAU,SAAS,gBAAgB,GAAG,gBAAgB,EACtD,QAAQ,EAAE,eAAe,CAAC,GAAG,EAAE,UAAU,CAAC,GACxC,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC;IACpD;;OAEG;IACH,KAAK,IAAI,GAAG,CAAA;CACb,CAAA;AAED;;;;;;;GAOG;AACH,wBAAgB,OAAO,CACrB,IAAI,SAAS,gBAAgB,EAC7B,GAAG,SAAS,gBAAgB,GAAG,IAAI,EACnC,IAAI,CAAC,EAAE,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,CAKvD"}
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* The initializer and transformer
|
|
2
|
+
* Creates a context builder.
|
|
5
3
|
*
|
|
6
4
|
* @param init The initial context or an context initializer.
|
|
7
5
|
* @return the context builder where you can
|
|
@@ -11,18 +9,22 @@
|
|
|
11
9
|
export function context(init) {
|
|
12
10
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
|
13
11
|
return typeof init === 'function'
|
|
14
|
-
? contextBuilder({}, [init])
|
|
12
|
+
? contextBuilder({}, [[init]])
|
|
15
13
|
: contextBuilder(init ?? {}, []);
|
|
16
14
|
}
|
|
17
|
-
|
|
15
|
+
/* eslint-disable */
|
|
16
|
+
function contextBuilder(init, extenders) {
|
|
18
17
|
return {
|
|
19
|
-
extend(
|
|
20
|
-
return contextBuilder(init,
|
|
18
|
+
extend(extender) {
|
|
19
|
+
return contextBuilder(init, extenders.concat([[extender]]));
|
|
21
20
|
},
|
|
22
21
|
build() {
|
|
23
|
-
|
|
24
|
-
|
|
22
|
+
return extenders.reduce((p, [t], i) => {
|
|
23
|
+
const v = typeof t === 'function' ? extenders[i][0] = t(p) : t;
|
|
24
|
+
return { ...p, ...v };
|
|
25
|
+
}, init);
|
|
25
26
|
}
|
|
26
27
|
};
|
|
27
28
|
}
|
|
29
|
+
/* eslint-enable */
|
|
28
30
|
//# sourceMappingURL=context.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../ts/functional/context.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../ts/functional/context.ts"],"names":[],"mappings":"AA2CA;;;;;;;GAOG;AACH,MAAM,UAAU,OAAO,CAGrB,IAA0B;IAC1B,+DAA+D;IAC/D,OAAO,OAAO,IAAI,KAAK,UAAU;QAC/B,CAAC,CAAC,cAAc,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9B,CAAC,CAAC,cAAc,CAAC,IAAI,IAAI,EAAE,EAAE,EAAE,CAAQ,CAAA;AAC3C,CAAC;AAED,oBAAoB;AACpB,SAAS,cAAc,CAAC,IAAsB,EAAE,SAAmD;IACjG,OAAO;QACL,MAAM,CAAC,QAAmC;YACxC,OAAO,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;QAC7D,CAAC;QACD,KAAK;YACH,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBACpC,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;gBAC9D,OAAO,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAA;YACvB,CAAC,EAAE,IAAI,CAAC,CAAA;QACV,CAAC;KACF,CAAA;AACH,CAAC;AACD,mBAAmB"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { AssertOrder } from 'assertron';
|
|
1
2
|
import { context, isType } from '../index.js';
|
|
2
3
|
describe(`${context.name}()`, () => {
|
|
3
4
|
it('allows no param', () => {
|
|
@@ -41,5 +42,39 @@ describe(`${context.name}()`, () => {
|
|
|
41
42
|
isType.equal();
|
|
42
43
|
expect(r).toEqual({ a: 1, b: 2, c: 3 });
|
|
43
44
|
});
|
|
45
|
+
it('can specify additional type during extend', () => {
|
|
46
|
+
const r = context({ a: 1 })
|
|
47
|
+
.extend(ctx => ({ b: ctx.a + 1 }))
|
|
48
|
+
.build();
|
|
49
|
+
isType.equal();
|
|
50
|
+
expect(r).toEqual({ a: 1, b: 2 });
|
|
51
|
+
});
|
|
52
|
+
it('invoke each extender only once', () => {
|
|
53
|
+
const o = new AssertOrder(4);
|
|
54
|
+
const c1 = context({ a: 1 })
|
|
55
|
+
.extend(() => {
|
|
56
|
+
o.once(1);
|
|
57
|
+
return ({ b: 2 });
|
|
58
|
+
})
|
|
59
|
+
.extend(() => {
|
|
60
|
+
o.once(2);
|
|
61
|
+
return ({ c: 3 });
|
|
62
|
+
});
|
|
63
|
+
const c2 = c1.extend(() => {
|
|
64
|
+
o.once(3);
|
|
65
|
+
return ({ d: 4 });
|
|
66
|
+
});
|
|
67
|
+
const c3 = c1.extend(() => {
|
|
68
|
+
o.once(4);
|
|
69
|
+
return ({ e: 5 });
|
|
70
|
+
});
|
|
71
|
+
const r2 = c2.build();
|
|
72
|
+
const r3 = c3.build();
|
|
73
|
+
const r1 = c1.build();
|
|
74
|
+
expect(r2).toEqual({ a: 1, b: 2, c: 3, d: 4 });
|
|
75
|
+
expect(r3).toEqual({ a: 1, b: 2, c: 3, e: 5 });
|
|
76
|
+
expect(r1).toEqual({ a: 1, b: 2, c: 3 });
|
|
77
|
+
o.end();
|
|
78
|
+
});
|
|
44
79
|
});
|
|
45
80
|
//# sourceMappingURL=context.spec.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.spec.js","sourceRoot":"","sources":["../../ts/functional/context.spec.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"context.spec.js","sourceRoot":"","sources":["../../ts/functional/context.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,13 @@
|
|
|
1
|
+
import type { AnyRecord } from '../index.js';
|
|
1
2
|
/**
|
|
2
3
|
* Gets value type from Promise
|
|
3
4
|
* @deprecated Use `Awaited<T>` instead.
|
|
4
5
|
*/
|
|
5
6
|
export type PromiseValue<P extends Promise<any>> = P extends Promise<infer T> ? T : never;
|
|
7
|
+
/**
|
|
8
|
+
* Await on specific props V on type T
|
|
9
|
+
*/
|
|
10
|
+
export type AwaitedProp<T extends AnyRecord, K extends keyof T> = {
|
|
11
|
+
[k in keyof T]: k extends K ? Awaited<T[k]> : T[k];
|
|
12
|
+
};
|
|
6
13
|
//# sourceMappingURL=PromiseValue.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PromiseValue.d.ts","sourceRoot":"","sources":["../../ts/promise/PromiseValue.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA"}
|
|
1
|
+
{"version":3,"file":"PromiseValue.d.ts","sourceRoot":"","sources":["../../ts/promise/PromiseValue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAE5C;;;GAGG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;AAEzF;;GAEG;AACH,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,SAAS,EAAE,CAAC,SAAS,MAAM,CAAC,IAAI;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,CAAA"}
|
|
@@ -1,6 +1,14 @@
|
|
|
1
|
-
import { assertType } from '../index.js';
|
|
1
|
+
import { assertType, isType } from '../index.js';
|
|
2
2
|
test('extract value from Promise', () => {
|
|
3
3
|
const y = '';
|
|
4
4
|
assertType.isString(y);
|
|
5
5
|
});
|
|
6
|
+
describe('AwaitedProp<T, V>', () => {
|
|
7
|
+
it('awaits one of the props', () => {
|
|
8
|
+
isType.equal();
|
|
9
|
+
});
|
|
10
|
+
it('awaits multiple props', () => {
|
|
11
|
+
isType.equal();
|
|
12
|
+
});
|
|
13
|
+
});
|
|
6
14
|
//# sourceMappingURL=PromiseValue.spec.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PromiseValue.spec.js","sourceRoot":"","sources":["../../ts/promise/PromiseValue.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAgB,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"PromiseValue.spec.js","sourceRoot":"","sources":["../../ts/promise/PromiseValue.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAe,MAAM,EAAgB,MAAM,aAAa,CAAA;AAE3E,IAAI,CAAC,4BAA4B,EAAE,GAAG,EAAE;IACtC,MAAM,CAAC,GAAkC,EAAE,CAAA;IAC3C,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;AACxB,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;QAGjC,MAAM,CAAC,KAAK,EAAqC,CAAA;IACnD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE;QAQ/B,MAAM,CAAC,KAAK,EAKL,CAAA;IACT,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
package/esm/promise/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export * from './isPromise.js';
|
|
2
2
|
export * from './mapSeries.js';
|
|
3
3
|
export * from './MaybePromise.js';
|
|
4
|
-
export type { PromiseValue } from './PromiseValue.js';
|
|
4
|
+
export type { PromiseValue, AwaitedProp } from './PromiseValue.js';
|
|
5
5
|
export type { PromiseValueMerge } from './PromiseValueMerge.js';
|
|
6
6
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../ts/promise/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA;AAC9B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,mBAAmB,CAAA;AACjC,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../ts/promise/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA;AAC9B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,mBAAmB,CAAA;AACjC,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAClE,YAAY,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA"}
|
package/package.json
CHANGED
package/ts/functional/context.ts
CHANGED
|
@@ -10,7 +10,7 @@ export type ContextBaseShape = Record<string | symbol, any>
|
|
|
10
10
|
export type ContextExtender<
|
|
11
11
|
Current,
|
|
12
12
|
Additional
|
|
13
|
-
> = (context: Current) => Additional
|
|
13
|
+
> = ((context: Current) => Additional)
|
|
14
14
|
|
|
15
15
|
export type ContextBuilder<
|
|
16
16
|
Init extends ContextBaseShape,
|
|
@@ -18,17 +18,22 @@ export type ContextBuilder<
|
|
|
18
18
|
> = {
|
|
19
19
|
/**
|
|
20
20
|
* Extends the context using an extender.
|
|
21
|
+
*
|
|
22
|
+
* @type Additional The additional context to be added by the `extender`.
|
|
23
|
+
* By default this is inferred by the `extender`.
|
|
24
|
+
* But you can also explicitly specify it,
|
|
25
|
+
* if the type is a superset of the actual return type of the `extender`.
|
|
21
26
|
* @param extender function that add new props to the context.
|
|
22
27
|
*
|
|
23
|
-
* The extender only need to return a new object with
|
|
28
|
+
* The extender only need to return a new object with additional properties.
|
|
29
|
+
* The builder will merge that with the current context.
|
|
24
30
|
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
31
|
+
* If the extender specify an existing property,
|
|
32
|
+
* it overrides the existing value.
|
|
27
33
|
*/
|
|
28
34
|
extend<
|
|
29
|
-
Current extends ContextBaseShape = Ctx,
|
|
30
35
|
Additional extends ContextBaseShape = ContextBaseShape
|
|
31
|
-
>(extender: ContextExtender<
|
|
36
|
+
>(extender: ContextExtender<Ctx, Additional>)
|
|
32
37
|
: ContextBuilder<Init, LeftJoin<Ctx, Additional>>,
|
|
33
38
|
/**
|
|
34
39
|
* Build and return the context.
|
|
@@ -37,9 +42,7 @@ export type ContextBuilder<
|
|
|
37
42
|
}
|
|
38
43
|
|
|
39
44
|
/**
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
* The initializer and transformer
|
|
45
|
+
* Creates a context builder.
|
|
43
46
|
*
|
|
44
47
|
* @param init The initial context or an context initializer.
|
|
45
48
|
* @return the context builder where you can
|
|
@@ -52,18 +55,22 @@ export function context<
|
|
|
52
55
|
>(init?: Init | (() => Init)): ContextBuilder<Init, Ctx> {
|
|
53
56
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
|
54
57
|
return typeof init === 'function'
|
|
55
|
-
? contextBuilder({}, [init])
|
|
58
|
+
? contextBuilder({}, [[init]])
|
|
56
59
|
: contextBuilder(init ?? {}, []) as any
|
|
57
60
|
}
|
|
58
61
|
|
|
59
|
-
|
|
62
|
+
/* eslint-disable */
|
|
63
|
+
function contextBuilder(init: ContextBaseShape, extenders: Array<[ContextExtender<any, any> | any]>) {
|
|
60
64
|
return {
|
|
61
|
-
extend(
|
|
62
|
-
return contextBuilder(init,
|
|
65
|
+
extend(extender: ContextExtender<any, any>) {
|
|
66
|
+
return contextBuilder(init, extenders.concat([[extender]]))
|
|
63
67
|
},
|
|
64
68
|
build() {
|
|
65
|
-
|
|
66
|
-
|
|
69
|
+
return extenders.reduce((p, [t], i) => {
|
|
70
|
+
const v = typeof t === 'function' ? extenders[i][0] = t(p) : t
|
|
71
|
+
return { ...p, ...v }
|
|
72
|
+
}, init)
|
|
67
73
|
}
|
|
68
74
|
}
|
|
69
75
|
}
|
|
76
|
+
/* eslint-enable */
|
|
@@ -1,5 +1,12 @@
|
|
|
1
|
+
import type { AnyRecord } from '../index.js'
|
|
2
|
+
|
|
1
3
|
/**
|
|
2
4
|
* Gets value type from Promise
|
|
3
5
|
* @deprecated Use `Awaited<T>` instead.
|
|
4
6
|
*/
|
|
5
7
|
export type PromiseValue<P extends Promise<any>> = P extends Promise<infer T> ? T : never
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Await on specific props V on type T
|
|
11
|
+
*/
|
|
12
|
+
export type AwaitedProp<T extends AnyRecord, K extends keyof T> = { [k in keyof T]: k extends K ? Awaited<T[k]> : T[k] }
|
package/ts/promise/index.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export * from './isPromise.js'
|
|
2
2
|
export * from './mapSeries.js'
|
|
3
3
|
export * from './MaybePromise.js'
|
|
4
|
-
export type { PromiseValue } from './PromiseValue.js'
|
|
4
|
+
export type { PromiseValue, AwaitedProp } from './PromiseValue.js'
|
|
5
5
|
export type { PromiseValueMerge } from './PromiseValueMerge.js'
|