effect-app 2.19.2 → 2.19.4
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/CHANGELOG.md +12 -0
- package/_cjs/Array.cjs +1 -43
- package/_cjs/Array.cjs.map +1 -1
- package/dist/Array.d.ts +3 -41
- package/dist/Array.d.ts.map +1 -1
- package/dist/Array.js +3 -39
- package/dist/Chunk.d.ts +1 -1
- package/dist/Chunk.d.ts.map +1 -1
- package/dist/Context.d.ts +1 -1
- package/dist/NonEmptySetBase.d.ts +1 -1
- package/package.json +1 -1
- package/src/Array.ts +6 -51
package/CHANGELOG.md
CHANGED
package/_cjs/Array.cjs
CHANGED
|
@@ -8,7 +8,6 @@ var _exportNames = {
|
|
|
8
8
|
isArray: true,
|
|
9
9
|
NEAFromArray: true,
|
|
10
10
|
NEROArrayFromArray: true,
|
|
11
|
-
sortByO: true,
|
|
12
11
|
groupByT: true,
|
|
13
12
|
randomElement: true,
|
|
14
13
|
filterWith: true,
|
|
@@ -24,7 +23,6 @@ exports.filterWith = filterWith;
|
|
|
24
23
|
exports.forEachEffectNA = forEachEffectNA;
|
|
25
24
|
exports.isArray = exports.groupByT = void 0;
|
|
26
25
|
exports.randomElement = randomElement;
|
|
27
|
-
exports.sortByO = sortByO;
|
|
28
26
|
exports.toNonEmptyArray = void 0;
|
|
29
27
|
var _effect = require("effect");
|
|
30
28
|
var Array = _interopRequireWildcard(require("effect/Array"));
|
|
@@ -44,44 +42,14 @@ var _Function = require("./Function.cjs");
|
|
|
44
42
|
var Option = _interopRequireWildcard(require("./Option.cjs"));
|
|
45
43
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
46
44
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
47
|
-
|
|
48
|
-
* @tsplus getter ReadonlyArray toNonEmpty
|
|
49
|
-
* @tsplus getter Array toNonEmpty
|
|
50
|
-
* @tsplus getter effect/data/ReadonlyArray toNonEmpty
|
|
51
|
-
*/
|
|
52
|
-
const toNonEmptyArray = a => a.length ? Option.some(a) : Option.none();
|
|
53
|
-
exports.toNonEmptyArray = toNonEmptyArray;
|
|
45
|
+
const toNonEmptyArray = exports.toNonEmptyArray = Option.liftPredicate(Array.isNonEmptyReadonlyArray);
|
|
54
46
|
const isArray = exports.isArray = Array.isArray;
|
|
55
|
-
/**
|
|
56
|
-
* @tsplus static effect/data/ReadonlyArray/NonEmptyArray.Ops fromArray
|
|
57
|
-
*/
|
|
58
47
|
function NEAFromArray(ar) {
|
|
59
48
|
return ar.length ? Option.some(ar) : Option.none();
|
|
60
49
|
}
|
|
61
|
-
/**
|
|
62
|
-
* @tsplus static effect/data/ReadonlyArray/NonEmptyArray.Ops fromArray
|
|
63
|
-
*/
|
|
64
50
|
function NEROArrayFromArray(ar) {
|
|
65
51
|
return ar.length ? Option.some(ar) : Option.none();
|
|
66
52
|
}
|
|
67
|
-
/**
|
|
68
|
-
* @tsplus pipeable Array sortByO
|
|
69
|
-
* @tsplus pipeable ReadonlyArray sortByO
|
|
70
|
-
* @tsplus pipeable NonEmptyArray sortByO
|
|
71
|
-
* @tsplus pipeable NonEmptyArrayReadonlyArray sortByO
|
|
72
|
-
*/
|
|
73
|
-
function sortByO(ords) {
|
|
74
|
-
return Option.match(ords, {
|
|
75
|
-
onNone: () => _Function.identity,
|
|
76
|
-
onSome: _ => Array.sortBy(..._)
|
|
77
|
-
});
|
|
78
|
-
}
|
|
79
|
-
/**
|
|
80
|
-
* @tsplus fluent ReadonlyArray groupByT
|
|
81
|
-
* @tsplus fluent Array groupByT
|
|
82
|
-
* @tsplus fluent NonEmptyArray groupByT
|
|
83
|
-
* @tsplus fluent NonEmptyArrayReadonlyArray groupByT
|
|
84
|
-
*/
|
|
85
53
|
const groupByT = exports.groupByT = (0, _Function.dual)(2, (as, f) => {
|
|
86
54
|
const r = {};
|
|
87
55
|
for (const a of as) {
|
|
@@ -98,9 +66,6 @@ const groupByT = exports.groupByT = (0, _Function.dual)(2, (as, f) => {
|
|
|
98
66
|
function randomElement(a) {
|
|
99
67
|
return a[Math.floor(Math.random() * a.length)];
|
|
100
68
|
}
|
|
101
|
-
/**
|
|
102
|
-
* @tsplus fluent ReadonlyArray filterWith
|
|
103
|
-
*/
|
|
104
69
|
function filterWith(self, predicates) {
|
|
105
70
|
return self.filter(_ => predicates.every(f => f(_)));
|
|
106
71
|
}
|
|
@@ -115,17 +80,10 @@ function* _chunk_(items_, size) {
|
|
|
115
80
|
}
|
|
116
81
|
/**
|
|
117
82
|
* Split the `items` array into multiple, smaller chunks of the given `size`.
|
|
118
|
-
* @tsplus fluent Array chunk
|
|
119
|
-
* @tsplus fluent ReadonlyArray chunk
|
|
120
|
-
* @tsplus fluent effect/data/Chunk chunk
|
|
121
|
-
* @tsplus fluent Iterable chunk
|
|
122
83
|
*/
|
|
123
84
|
function chunk_(items_, size) {
|
|
124
85
|
return _effect.Chunk.fromIterable(_chunk_(items_, size));
|
|
125
86
|
}
|
|
126
|
-
/**
|
|
127
|
-
* @tsplus fluent effect/data/ReadonlyArray/NonEmptyReadonlyArray forEachEffect
|
|
128
|
-
*/
|
|
129
87
|
function forEachEffectNA(as, f) {
|
|
130
88
|
return _effect.Effect.map(T.forEach(as, f), _ => Option.getOrNull(toNonEmptyArray(_)));
|
|
131
89
|
}
|
package/_cjs/Array.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Array.cjs","names":["_effect","require","Array","_interopRequireWildcard","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","T","_Function","Option","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","n","__proto__","a","getOwnPropertyDescriptor","u","i","set","toNonEmptyArray","
|
|
1
|
+
{"version":3,"file":"Array.cjs","names":["_effect","require","Array","_interopRequireWildcard","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","T","_Function","Option","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","n","__proto__","a","getOwnPropertyDescriptor","u","i","set","toNonEmptyArray","liftPredicate","isNonEmptyReadonlyArray","isArray","NEAFromArray","ar","length","some","none","NEROArrayFromArray","groupByT","dual","as","f","k","push","entries","map","items","tuple","randomElement","Math","floor","random","filterWith","self","predicates","filter","_","every","_chunk_","items_","size","splice","chunk_","Chunk","fromIterable","forEachEffectNA","Effect","getOrNull"],"sources":["../src/Array.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
package/dist/Array.d.ts
CHANGED
|
@@ -1,48 +1,17 @@
|
|
|
1
|
-
import type { Order } from "effect";
|
|
2
1
|
import { Chunk, Effect } from "effect";
|
|
3
|
-
import type { NonEmptyReadonlyArray } from "effect/Array";
|
|
2
|
+
import type { NonEmptyArray, NonEmptyReadonlyArray } from "effect/Array";
|
|
4
3
|
import type { Predicate } from "./Function.js";
|
|
5
4
|
import * as Option from "./Option.js";
|
|
6
|
-
|
|
7
|
-
* @tsplus getter ReadonlyArray toNonEmpty
|
|
8
|
-
* @tsplus getter Array toNonEmpty
|
|
9
|
-
* @tsplus getter effect/data/ReadonlyArray toNonEmpty
|
|
10
|
-
*/
|
|
11
|
-
export declare const toNonEmptyArray: <A>(a: ReadonlyArray<A>) => Option.Option<NonEmptyReadonlyArray<A>>;
|
|
5
|
+
export declare const toNonEmptyArray: <A>(a: readonly A[]) => Option.Option<readonly [A, ...A[]]>;
|
|
12
6
|
export declare const isArray: {
|
|
13
7
|
(self: unknown): self is ReadonlyArray<unknown>;
|
|
14
8
|
<T>(self: T): self is Extract<T, ReadonlyArray<any>>;
|
|
15
9
|
};
|
|
16
|
-
/**
|
|
17
|
-
* @tsplus static effect/data/ReadonlyArray/NonEmptyArray.Ops fromArray
|
|
18
|
-
*/
|
|
19
10
|
export declare function NEAFromArray<T>(ar: Array<T>): Option.None<[T, ...T[]]> | Option.Some<[T, ...T[]]>;
|
|
20
|
-
/**
|
|
21
|
-
* @tsplus static effect/data/ReadonlyArray/NonEmptyArray.Ops fromArray
|
|
22
|
-
*/
|
|
23
11
|
export declare function NEROArrayFromArray<T>(ar: ReadonlyArray<T>): Option.None<readonly [T, ...T[]]> | Option.Some<readonly [T, ...T[]]>;
|
|
24
|
-
|
|
25
|
-
* @tsplus pipeable Array sortByO
|
|
26
|
-
* @tsplus pipeable ReadonlyArray sortByO
|
|
27
|
-
* @tsplus pipeable NonEmptyArray sortByO
|
|
28
|
-
* @tsplus pipeable NonEmptyArrayReadonlyArray sortByO
|
|
29
|
-
*/
|
|
30
|
-
export declare function sortByO<A>(ords: Option.Option<NonEmptyReadonlyArray<Order.Order<A>>>): (a: ReadonlyArray<A>) => ReadonlyArray<A>;
|
|
31
|
-
/**
|
|
32
|
-
* @tsplus fluent ReadonlyArray groupByT
|
|
33
|
-
* @tsplus fluent Array groupByT
|
|
34
|
-
* @tsplus fluent NonEmptyArray groupByT
|
|
35
|
-
* @tsplus fluent NonEmptyArrayReadonlyArray groupByT
|
|
36
|
-
*/
|
|
37
|
-
export declare const groupByT: (<A, Key extends PropertyKey>(f: (a: NoInfer<A>) => Key) => (as: ReadonlyArray<A>) => ReadonlyArray<readonly [Key, NonEmptyReadonlyArray<A>]>) & (<A, Key extends PropertyKey>(as: ReadonlyArray<A>, f: (a: A) => Key) => ReadonlyArray<readonly [Key, NonEmptyReadonlyArray<A>]>);
|
|
38
|
-
/**
|
|
39
|
-
* @tsplus fluent ReadonlyArray randomElement 2
|
|
40
|
-
*/
|
|
12
|
+
export declare const groupByT: (<A, Key extends PropertyKey>(f: (a: NoInfer<A>) => Key) => (as: ReadonlyArray<A>) => Array<readonly [Key, NonEmptyArray<A>]>) & (<A, Key extends PropertyKey>(as: ReadonlyArray<A>, f: (a: A) => Key) => Array<readonly [Key, NonEmptyArray<A>]>);
|
|
41
13
|
export declare function randomElement<A>(a: NonEmptyReadonlyArray<A>): A;
|
|
42
14
|
export declare function randomElement<A>(a: ReadonlyArray<A>): A | undefined;
|
|
43
|
-
/**
|
|
44
|
-
* @tsplus fluent ReadonlyArray filterWith
|
|
45
|
-
*/
|
|
46
15
|
export declare function filterWith<A>(self: ReadonlyArray<A>, predicates: ReadonlyArray<Predicate<A>>): A[];
|
|
47
16
|
/**
|
|
48
17
|
* Split the `items` array into multiple, smaller chunks of the given `size`.
|
|
@@ -50,15 +19,8 @@ export declare function filterWith<A>(self: ReadonlyArray<A>, predicates: Readon
|
|
|
50
19
|
export declare function _chunk_<T>(items_: Iterable<T>, size: number): Generator<T[], void, unknown>;
|
|
51
20
|
/**
|
|
52
21
|
* Split the `items` array into multiple, smaller chunks of the given `size`.
|
|
53
|
-
* @tsplus fluent Array chunk
|
|
54
|
-
* @tsplus fluent ReadonlyArray chunk
|
|
55
|
-
* @tsplus fluent effect/data/Chunk chunk
|
|
56
|
-
* @tsplus fluent Iterable chunk
|
|
57
22
|
*/
|
|
58
23
|
export declare function chunk_<T>(items_: Iterable<T>, size: number): Chunk.Chunk<T[]>;
|
|
59
|
-
/**
|
|
60
|
-
* @tsplus fluent effect/data/ReadonlyArray/NonEmptyReadonlyArray forEachEffect
|
|
61
|
-
*/
|
|
62
24
|
export declare function forEachEffectNA<A, R, E, B>(as: NonEmptyReadonlyArray<A>, f: (a: A) => Effect.Effect<B, E, R>): Effect.Effect<readonly [B, ...B[]] | null, E, R>;
|
|
63
25
|
export * from "effect/Array";
|
|
64
26
|
//# sourceMappingURL=Array.d.ts.map
|
package/dist/Array.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Array.d.ts","sourceRoot":"","sources":["../src/Array.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"Array.d.ts","sourceRoot":"","sources":["../src/Array.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AACtC,OAAO,KAAK,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AAGxE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAE9C,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AAErC,eAAO,MAAM,eAAe,6DAAsD,CAAA;AAElF,eAAO,MAAM,OAAO,EAAE;IAEpB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,aAAa,CAAC,OAAO,CAAC,CAAA;IAC/C,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,IAAI,OAAO,CAAC,CAAC,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC,CAAA;CACrC,CAAA;AAEjB,wBAAgB,YAAY,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,uDAE3C;AAED,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC,yEAEzD;AAED,eAAO,MAAM,QAAQ,IAClB,CAAC,EAAE,GAAG,SAAS,WAAW,KACtB,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,GAAG,KACtB,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,MACrE,CAAC,EAAE,GAAG,SAAS,WAAW,MACrB,aAAa,CAAC,CAAC,CAAC,KACjB,CAAC,CAAC,EAAE,CAAC,KAAK,GAAG,KACb,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAgB5C,CAAA;AAEF,wBAAgB,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;AAChE,wBAAgB,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,SAAS,CAAA;AAKpE,wBAAgB,UAAU,CAAC,CAAC,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAE5F;AAED;;GAEG;AACH,wBAAiB,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,iCAM5D;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,oBAE1D;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,qBAAqB,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,oDAE5G;AAED,cAAc,cAAc,CAAA"}
|
package/dist/Array.js
CHANGED
|
@@ -1,42 +1,16 @@
|
|
|
1
1
|
import { Chunk, Effect } from "effect";
|
|
2
2
|
import * as Array from "effect/Array";
|
|
3
3
|
import * as T from "effect/Effect";
|
|
4
|
-
import { dual,
|
|
4
|
+
import { dual, tuple } from "./Function.js";
|
|
5
5
|
import * as Option from "./Option.js";
|
|
6
|
-
|
|
7
|
-
* @tsplus getter ReadonlyArray toNonEmpty
|
|
8
|
-
* @tsplus getter Array toNonEmpty
|
|
9
|
-
* @tsplus getter effect/data/ReadonlyArray toNonEmpty
|
|
10
|
-
*/
|
|
11
|
-
export const toNonEmptyArray = (a) => a.length ? Option.some(a) : Option.none();
|
|
6
|
+
export const toNonEmptyArray = Option.liftPredicate(Array.isNonEmptyReadonlyArray);
|
|
12
7
|
export const isArray = Array.isArray;
|
|
13
|
-
/**
|
|
14
|
-
* @tsplus static effect/data/ReadonlyArray/NonEmptyArray.Ops fromArray
|
|
15
|
-
*/
|
|
16
8
|
export function NEAFromArray(ar) {
|
|
17
9
|
return ar.length ? Option.some(ar) : Option.none();
|
|
18
10
|
}
|
|
19
|
-
/**
|
|
20
|
-
* @tsplus static effect/data/ReadonlyArray/NonEmptyArray.Ops fromArray
|
|
21
|
-
*/
|
|
22
11
|
export function NEROArrayFromArray(ar) {
|
|
23
12
|
return ar.length ? Option.some(ar) : Option.none();
|
|
24
13
|
}
|
|
25
|
-
/**
|
|
26
|
-
* @tsplus pipeable Array sortByO
|
|
27
|
-
* @tsplus pipeable ReadonlyArray sortByO
|
|
28
|
-
* @tsplus pipeable NonEmptyArray sortByO
|
|
29
|
-
* @tsplus pipeable NonEmptyArrayReadonlyArray sortByO
|
|
30
|
-
*/
|
|
31
|
-
export function sortByO(ords) {
|
|
32
|
-
return Option.match(ords, { onNone: () => identity, onSome: (_) => Array.sortBy(..._) });
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* @tsplus fluent ReadonlyArray groupByT
|
|
36
|
-
* @tsplus fluent Array groupByT
|
|
37
|
-
* @tsplus fluent NonEmptyArray groupByT
|
|
38
|
-
* @tsplus fluent NonEmptyArrayReadonlyArray groupByT
|
|
39
|
-
*/
|
|
40
14
|
export const groupByT = dual(2, (as, f) => {
|
|
41
15
|
const r = {};
|
|
42
16
|
for (const a of as) {
|
|
@@ -54,9 +28,6 @@ export const groupByT = dual(2, (as, f) => {
|
|
|
54
28
|
export function randomElement(a) {
|
|
55
29
|
return a[Math.floor(Math.random() * a.length)];
|
|
56
30
|
}
|
|
57
|
-
/**
|
|
58
|
-
* @tsplus fluent ReadonlyArray filterWith
|
|
59
|
-
*/
|
|
60
31
|
export function filterWith(self, predicates) {
|
|
61
32
|
return self.filter((_) => predicates.every((f) => f(_)));
|
|
62
33
|
}
|
|
@@ -71,19 +42,12 @@ export function* _chunk_(items_, size) {
|
|
|
71
42
|
}
|
|
72
43
|
/**
|
|
73
44
|
* Split the `items` array into multiple, smaller chunks of the given `size`.
|
|
74
|
-
* @tsplus fluent Array chunk
|
|
75
|
-
* @tsplus fluent ReadonlyArray chunk
|
|
76
|
-
* @tsplus fluent effect/data/Chunk chunk
|
|
77
|
-
* @tsplus fluent Iterable chunk
|
|
78
45
|
*/
|
|
79
46
|
export function chunk_(items_, size) {
|
|
80
47
|
return Chunk.fromIterable(_chunk_(items_, size));
|
|
81
48
|
}
|
|
82
|
-
/**
|
|
83
|
-
* @tsplus fluent effect/data/ReadonlyArray/NonEmptyReadonlyArray forEachEffect
|
|
84
|
-
*/
|
|
85
49
|
export function forEachEffectNA(as, f) {
|
|
86
50
|
return Effect.map(T.forEach(as, f), (_) => Option.getOrNull(toNonEmptyArray(_)));
|
|
87
51
|
}
|
|
88
52
|
export * from "effect/Array";
|
|
89
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXJyYXkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvQXJyYXkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxRQUFRLENBQUE7QUFFdEMsT0FBTyxLQUFLLEtBQUssTUFBTSxjQUFjLENBQUE7QUFDckMsT0FBTyxLQUFLLENBQUMsTUFBTSxlQUFlLENBQUE7QUFFbEMsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDM0MsT0FBTyxLQUFLLE1BQU0sTUFBTSxhQUFhLENBQUE7QUFFckMsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLHVCQUF1QixDQUFDLENBQUE7QUFFbEYsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUloQixLQUFLLENBQUMsT0FBTyxDQUFBO0FBRWpCLE1BQU0sVUFBVSxZQUFZLENBQUksRUFBWTtJQUMxQyxPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBc0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUE7QUFDeEUsQ0FBQztBQUVELE1BQU0sVUFBVSxrQkFBa0IsQ0FBSSxFQUFvQjtJQUN4RCxPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBOEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUE7QUFDaEYsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBUTFCLENBQUMsRUFBRSxDQUNILEVBQW9CLEVBQ3BCLENBQWdCLEVBQ3lCLEVBQUU7SUFDM0MsTUFBTSxDQUFDLEdBQXFDLEVBQVMsQ0FBQTtJQUNyRCxLQUFLLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO1FBQ25CLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNkLGlEQUFpRDtRQUNqRCxJQUFJLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN4QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ2QsQ0FBQzthQUFNLENBQUM7WUFDTixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNaLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBbUIsRUFBRSxLQUF5QixDQUFDLENBQUMsQ0FBQTtBQUNyRyxDQUFDLENBQUMsQ0FBQTtBQUlGLE1BQU0sVUFBVSxhQUFhLENBQUksQ0FBbUI7SUFDbEQsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7QUFDaEQsQ0FBQztBQUVELE1BQU0sVUFBVSxVQUFVLENBQUksSUFBc0IsRUFBRSxVQUF1QztJQUMzRixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFDMUQsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQUksTUFBbUIsRUFBRSxJQUFZO0lBQzNELE1BQU0sS0FBSyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQTtJQUV6QixPQUFPLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNwQixNQUFNLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFBO0lBQzdCLENBQUM7QUFDSCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsTUFBTSxDQUFJLE1BQW1CLEVBQUUsSUFBWTtJQUN6RCxPQUFPLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFBO0FBQ2xELENBQUM7QUFFRCxNQUFNLFVBQVUsZUFBZSxDQUFhLEVBQTRCLEVBQUUsQ0FBbUM7SUFDM0csT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFDbEYsQ0FBQztBQUVELGNBQWMsY0FBYyxDQUFBIn0=
|
package/dist/Chunk.d.ts
CHANGED
|
@@ -14,7 +14,7 @@ export declare const fromIterable: <A>(self: Iterable<A>) => Chunk.Chunk<A>;
|
|
|
14
14
|
/**
|
|
15
15
|
* @tsplus fluent effect/data/Chunk groupByT
|
|
16
16
|
*/
|
|
17
|
-
export declare function groupByTChunk_<A, Key extends PropertyKey>(c: Chunk.Chunk<A>, f: (a: A) => Key): Chunk.Chunk<readonly [Key,
|
|
17
|
+
export declare function groupByTChunk_<A, Key extends PropertyKey>(c: Chunk.Chunk<A>, f: (a: A) => Key): Chunk.Chunk<readonly [Key, [A, ...A[]]]>;
|
|
18
18
|
/**
|
|
19
19
|
* Returns the first element that satisfies the predicate.
|
|
20
20
|
*
|
package/dist/Chunk.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Chunk.d.ts","sourceRoot":"","sources":["../src/Chunk.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,SAAS,EAAE,KAAK,UAAU,EAAE,MAAM,eAAe,CAAA;AACrE,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AAErC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAErC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAE7C,cAAc,cAAc,CAAA;AAE5B;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,0CAAqB,CAAA;AAE9C;;GAEG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,GAAG,SAAS,WAAW,EAAE,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,GAAG,
|
|
1
|
+
{"version":3,"file":"Chunk.d.ts","sourceRoot":"","sources":["../src/Chunk.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,SAAS,EAAE,KAAK,UAAU,EAAE,MAAM,eAAe,CAAA;AACrE,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AAErC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAErC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAE7C,cAAc,cAAc,CAAA;AAE5B;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,0CAAqB,CAAA;AAE9C;;GAEG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,GAAG,SAAS,WAAW,EAAE,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,GAAG,4CAE7F;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,CAAC,EAC/B,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,QAEjB,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,yCAW3B;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAEjD;AAED;;;;;GAKG;AACH,wBAAgB,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,UACzB,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAU9C;AAED;;;;;;;GAOG;AACH,wBAAgB,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,UACnC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAG,OAAO,CAQvC;AAED;;GAEG;AACH,eAAO,MAAM,cAAc;;;;;CAAkB,CAAA;AAE7C;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE;IAC5B,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;IACtF,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;CACnD,CAAA;AAEnB;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE;IAC3B,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;IACtF,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;CACpD,CAAA"}
|
package/dist/Context.d.ts
CHANGED
|
@@ -35,7 +35,7 @@ export declare function TagId<const Key extends string>(key: Key): <Id, ServiceI
|
|
|
35
35
|
toLayer: <E, R>(eff: Effect.Effect<Omit<Id, keyof Context.TagClassShape<any, any>>, E, R>) => Layer.Layer<Id, E, R>;
|
|
36
36
|
toLayerScoped: <E, R_1>(eff: Effect.Effect<Omit<Id, keyof Context.TagClassShape<any, any>>, E, R_1>) => Layer.Layer<Id, E, Exclude<R_1, Scope.Scope>>;
|
|
37
37
|
of: (service: Omit<Id, keyof Context.TagClassShape<any, any>>) => Id;
|
|
38
|
-
} & Context.Tag<Id, Id> & (ServiceImpl extends Record<PropertyKey, any> ? { [k in keyof ServiceImpl as ServiceImpl[k] extends (...args: infer Args) => infer Ret ? ((...args: Readonly<Args>) => Ret) extends ServiceImpl[k] ? k : never : k]: ServiceImpl[k] extends (...args: infer Args) => Effect.Effect<infer A, infer E, infer R_2> ? (...args: Readonly<Args>) => Effect.Effect<A, E,
|
|
38
|
+
} & Context.Tag<Id, Id> & (ServiceImpl extends Record<PropertyKey, any> ? { [k in keyof ServiceImpl as ServiceImpl[k] extends (...args: infer Args) => infer Ret ? ((...args: Readonly<Args>) => Ret) extends ServiceImpl[k] ? k : never : k]: ServiceImpl[k] extends (...args: infer Args) => Effect.Effect<infer A, infer E, infer R_2> ? (...args: Readonly<Args>) => Effect.Effect<A, E, Id | R_2> : ServiceImpl[k] extends (...args: infer Args) => infer A ? (...args: Readonly<Args>) => Effect.Effect<A, never, Id> : ServiceImpl[k] extends Effect.Effect<infer A, infer E, infer R_2> ? Effect.Effect<A, E, Id | R_2> : Effect.Effect<ServiceImpl[k], never, Id>; } : {}) & {
|
|
39
39
|
use: <X>(body: (_: ServiceImpl) => X) => X extends Effect.Effect<infer A_1, infer E_1, infer R_3> ? Effect.Effect<A_1, E_1, R_3 | Id> : Effect.Effect<X, never, Id>;
|
|
40
40
|
};
|
|
41
41
|
export declare const TagMakeId: <ServiceImpl, R, E, const Key extends string>(key: Key, make: Effect.Effect<ServiceImpl, E, R>) => <Id>() => (abstract new (service: ServiceImpl) => Readonly<ServiceImpl> & Context.TagClassShape<Key, ServiceImpl>) & {
|
|
@@ -28,7 +28,7 @@ declare class Wrapper<A> {
|
|
|
28
28
|
map: <A_1>(f: (x: A_1) => A_1) => (set: NonEmptySet<A_1>) => NonEmptySet<A_1>;
|
|
29
29
|
map_: <A_1>(set: NonEmptySet<A_1>, f: (x: A_1) => A_1) => NonEmptySet<A_1>;
|
|
30
30
|
filterMap: (f: (a: A) => Option.Option<A>) => (fa: Set<A>) => Option.None<NonEmptySet<A>> | Option.Some<NonEmptySet<A>>;
|
|
31
|
-
filterMap_: <A_1>(fa: Set<A_1>, f: (a: A_1) => Option.Option<
|
|
31
|
+
filterMap_: <A_1>(fa: Set<A_1>, f: (a: A_1) => Option.Option<A>) => Option.None<NonEmptySet<A>> | Option.Some<NonEmptySet<A>>;
|
|
32
32
|
};
|
|
33
33
|
}
|
|
34
34
|
export interface NonEmptySetSchemaExtensions<A> extends ReturnType<Wrapper<A>["wrapped"]> {
|
package/package.json
CHANGED
package/src/Array.ts
CHANGED
|
@@ -1,19 +1,12 @@
|
|
|
1
|
-
import type { Order } from "effect"
|
|
2
1
|
import { Chunk, Effect } from "effect"
|
|
3
2
|
import type { NonEmptyArray, NonEmptyReadonlyArray } from "effect/Array"
|
|
4
3
|
import * as Array from "effect/Array"
|
|
5
4
|
import * as T from "effect/Effect"
|
|
6
5
|
import type { Predicate } from "./Function.js"
|
|
7
|
-
import { dual,
|
|
6
|
+
import { dual, tuple } from "./Function.js"
|
|
8
7
|
import * as Option from "./Option.js"
|
|
9
8
|
|
|
10
|
-
|
|
11
|
-
* @tsplus getter ReadonlyArray toNonEmpty
|
|
12
|
-
* @tsplus getter Array toNonEmpty
|
|
13
|
-
* @tsplus getter effect/data/ReadonlyArray toNonEmpty
|
|
14
|
-
*/
|
|
15
|
-
export const toNonEmptyArray = <A>(a: ReadonlyArray<A>): Option.Option<NonEmptyReadonlyArray<A>> =>
|
|
16
|
-
a.length ? Option.some(a as NonEmptyReadonlyArray<A>) : Option.none()
|
|
9
|
+
export const toNonEmptyArray = Option.liftPredicate(Array.isNonEmptyReadonlyArray)
|
|
17
10
|
|
|
18
11
|
export const isArray: {
|
|
19
12
|
// uses ReadonlyArray here because otherwise the second overload don't work when ROA is involved.
|
|
@@ -21,50 +14,26 @@ export const isArray: {
|
|
|
21
14
|
<T>(self: T): self is Extract<T, ReadonlyArray<any>>
|
|
22
15
|
} = Array.isArray
|
|
23
16
|
|
|
24
|
-
/**
|
|
25
|
-
* @tsplus static effect/data/ReadonlyArray/NonEmptyArray.Ops fromArray
|
|
26
|
-
*/
|
|
27
17
|
export function NEAFromArray<T>(ar: Array<T>) {
|
|
28
18
|
return ar.length ? Option.some(ar as NonEmptyArray<T>) : Option.none()
|
|
29
19
|
}
|
|
30
20
|
|
|
31
|
-
/**
|
|
32
|
-
* @tsplus static effect/data/ReadonlyArray/NonEmptyArray.Ops fromArray
|
|
33
|
-
*/
|
|
34
21
|
export function NEROArrayFromArray<T>(ar: ReadonlyArray<T>) {
|
|
35
22
|
return ar.length ? Option.some(ar as NonEmptyReadonlyArray<T>) : Option.none()
|
|
36
23
|
}
|
|
37
24
|
|
|
38
|
-
/**
|
|
39
|
-
* @tsplus pipeable Array sortByO
|
|
40
|
-
* @tsplus pipeable ReadonlyArray sortByO
|
|
41
|
-
* @tsplus pipeable NonEmptyArray sortByO
|
|
42
|
-
* @tsplus pipeable NonEmptyArrayReadonlyArray sortByO
|
|
43
|
-
*/
|
|
44
|
-
export function sortByO<A>(
|
|
45
|
-
ords: Option.Option<NonEmptyReadonlyArray<Order.Order<A>>>
|
|
46
|
-
): (a: ReadonlyArray<A>) => ReadonlyArray<A> {
|
|
47
|
-
return Option.match(ords, { onNone: () => identity, onSome: (_) => Array.sortBy(..._) })
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* @tsplus fluent ReadonlyArray groupByT
|
|
52
|
-
* @tsplus fluent Array groupByT
|
|
53
|
-
* @tsplus fluent NonEmptyArray groupByT
|
|
54
|
-
* @tsplus fluent NonEmptyArrayReadonlyArray groupByT
|
|
55
|
-
*/
|
|
56
25
|
export const groupByT = dual<
|
|
57
26
|
<A, Key extends PropertyKey>(
|
|
58
27
|
f: (a: NoInfer<A>) => Key
|
|
59
|
-
) => (as: ReadonlyArray<A>) =>
|
|
28
|
+
) => (as: ReadonlyArray<A>) => Array<readonly [Key, NonEmptyArray<A>]>,
|
|
60
29
|
<A, Key extends PropertyKey>(
|
|
61
30
|
as: ReadonlyArray<A>,
|
|
62
31
|
f: (a: A) => Key
|
|
63
|
-
) =>
|
|
32
|
+
) => Array<readonly [Key, NonEmptyArray<A>]>
|
|
64
33
|
>(2, <A, Key extends PropertyKey>(
|
|
65
34
|
as: ReadonlyArray<A>,
|
|
66
35
|
f: (a: A) => Key
|
|
67
|
-
):
|
|
36
|
+
): Array<readonly [Key, NonEmptyArray<A>]> => {
|
|
68
37
|
const r: Record<Key, Array<A> & { 0: A }> = {} as any
|
|
69
38
|
for (const a of as) {
|
|
70
39
|
const k = f(a)
|
|
@@ -75,22 +44,15 @@ export const groupByT = dual<
|
|
|
75
44
|
r[k] = [a]
|
|
76
45
|
}
|
|
77
46
|
}
|
|
78
|
-
return Object.entries(r).map(([k, items]) => tuple(k as unknown as Key, items as
|
|
47
|
+
return Object.entries(r).map(([k, items]) => tuple(k as unknown as Key, items as NonEmptyArray<A>))
|
|
79
48
|
})
|
|
80
49
|
|
|
81
|
-
// A getter would be nice, but we need it fluent to manage the priority vs nonEmpty etc
|
|
82
|
-
/**
|
|
83
|
-
* @tsplus fluent ReadonlyArray randomElement 2
|
|
84
|
-
*/
|
|
85
50
|
export function randomElement<A>(a: NonEmptyReadonlyArray<A>): A
|
|
86
51
|
export function randomElement<A>(a: ReadonlyArray<A>): A | undefined
|
|
87
52
|
export function randomElement<A>(a: ReadonlyArray<A>): A | undefined {
|
|
88
53
|
return a[Math.floor(Math.random() * a.length)]
|
|
89
54
|
}
|
|
90
55
|
|
|
91
|
-
/**
|
|
92
|
-
* @tsplus fluent ReadonlyArray filterWith
|
|
93
|
-
*/
|
|
94
56
|
export function filterWith<A>(self: ReadonlyArray<A>, predicates: ReadonlyArray<Predicate<A>>) {
|
|
95
57
|
return self.filter((_) => predicates.every((f) => f(_)))
|
|
96
58
|
}
|
|
@@ -108,18 +70,11 @@ export function* _chunk_<T>(items_: Iterable<T>, size: number) {
|
|
|
108
70
|
|
|
109
71
|
/**
|
|
110
72
|
* Split the `items` array into multiple, smaller chunks of the given `size`.
|
|
111
|
-
* @tsplus fluent Array chunk
|
|
112
|
-
* @tsplus fluent ReadonlyArray chunk
|
|
113
|
-
* @tsplus fluent effect/data/Chunk chunk
|
|
114
|
-
* @tsplus fluent Iterable chunk
|
|
115
73
|
*/
|
|
116
74
|
export function chunk_<T>(items_: Iterable<T>, size: number) {
|
|
117
75
|
return Chunk.fromIterable(_chunk_(items_, size))
|
|
118
76
|
}
|
|
119
77
|
|
|
120
|
-
/**
|
|
121
|
-
* @tsplus fluent effect/data/ReadonlyArray/NonEmptyReadonlyArray forEachEffect
|
|
122
|
-
*/
|
|
123
78
|
export function forEachEffectNA<A, R, E, B>(as: NonEmptyReadonlyArray<A>, f: (a: A) => Effect.Effect<B, E, R>) {
|
|
124
79
|
return Effect.map(T.forEach(as, f), (_) => Option.getOrNull(toNonEmptyArray(_)))
|
|
125
80
|
}
|