@typed/guard 0.1.0

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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2023-present The Contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,5 @@
1
+ # @typed/guard
2
+
3
+ > WIP
4
+
5
+ Docs: https://tylors.github.io/typed/docs/guard
@@ -0,0 +1,123 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.any = any;
7
+ exports.getGuard = exports.filterMap = exports.filter = exports.compose = exports.catchAllCause = exports.catchAll = void 0;
8
+ exports.liftPredicate = liftPredicate;
9
+ exports.tap = exports.provideServiceEffect = exports.provideService = exports.provide = exports.mapEffect = exports.map = void 0;
10
+ var Effect = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("effect/Effect"));
11
+ var _Function = /*#__PURE__*/require("effect/Function");
12
+ var Option = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("effect/Option"));
13
+ 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); }
14
+ 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 && Object.prototype.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; }
15
+ /**
16
+ * @since 1.0.0
17
+ */
18
+
19
+ /**
20
+ * @since 1.0.0
21
+ */
22
+ const getGuard = guard => "asGuard" in guard ? guard.asGuard() : guard;
23
+ /**
24
+ * @since 1.0.0
25
+ */
26
+ exports.getGuard = getGuard;
27
+ const compose = exports.compose = /*#__PURE__*/(0, _Function.dual)(2, function flatMap(input, output) {
28
+ const g1 = getGuard(input);
29
+ const g2 = getGuard(output);
30
+ return i => Effect.flatMap(g1(i), Option.match({
31
+ onNone: () => Effect.succeedNone,
32
+ onSome: g2
33
+ }));
34
+ });
35
+ /**
36
+ * @since 1.0.0
37
+ */
38
+ const mapEffect = exports.mapEffect = /*#__PURE__*/(0, _Function.dual)(2, function mapEffect(guard, f) {
39
+ return compose(guard, o => Effect.asSome(f(o)));
40
+ });
41
+ /**
42
+ * @since 1.0.0
43
+ */
44
+ const map = exports.map = /*#__PURE__*/(0, _Function.dual)(2, function map(guard, f) {
45
+ return mapEffect(guard, o => Effect.sync(() => f(o)));
46
+ });
47
+ /**
48
+ * @since 1.0.0
49
+ */
50
+ const tap = exports.tap = /*#__PURE__*/(0, _Function.dual)(2, function tap(guard, f) {
51
+ return compose(guard, o => Effect.as(f(o), Option.some(o)));
52
+ });
53
+ /**
54
+ * @since 1.0.0
55
+ */
56
+ const filterMap = exports.filterMap = /*#__PURE__*/(0, _Function.dual)(2, (guard, f) => {
57
+ const g = getGuard(guard);
58
+ return i => Effect.map(g(i), Option.filterMap(f));
59
+ });
60
+ /**
61
+ * @since 1.0.0
62
+ */
63
+ const filter = exports.filter = /*#__PURE__*/(0, _Function.dual)(2, (guard, predicate) => {
64
+ const g = getGuard(guard);
65
+ return i => Effect.map(g(i), Option.filter(predicate));
66
+ });
67
+ /**
68
+ * @since 1.0.0
69
+ */
70
+ function any(guards) {
71
+ const entries = Object.entries(guards);
72
+ return i => Effect.gen(function* (_) {
73
+ for (const [_tag, guard] of entries) {
74
+ const match = yield* _(getGuard(guard)(i));
75
+ if (Option.isSome(match)) {
76
+ return Option.some({
77
+ _tag,
78
+ value: match.value
79
+ });
80
+ }
81
+ }
82
+ return Option.none();
83
+ });
84
+ }
85
+ function liftPredicate(predicate) {
86
+ return a => Effect.sync(() => predicate(a) ? Option.some(a) : Option.none());
87
+ }
88
+ /**
89
+ * @since 1.0.0
90
+ */
91
+ const catchAllCause = exports.catchAllCause = /*#__PURE__*/(0, _Function.dual)(2, function catchAllCause(guard, f) {
92
+ const g = getGuard(guard);
93
+ return i => Effect.catchAllCause(g(i), a => Effect.asSome(f(a)));
94
+ });
95
+ /**
96
+ * @since 1.0.0
97
+ */
98
+ const catchAll = exports.catchAll = /*#__PURE__*/(0, _Function.dual)(2, function catchAll(guard, f) {
99
+ const g = getGuard(guard);
100
+ return i => Effect.catchAll(g(i), a => Effect.asSome(f(a)));
101
+ });
102
+ /**
103
+ * @since 1.0.0
104
+ */
105
+ const provide = exports.provide = /*#__PURE__*/(0, _Function.dual)(2, function provide(guard, provided) {
106
+ const g = getGuard(guard);
107
+ return i => Effect.provide(g(i), provided);
108
+ });
109
+ /**
110
+ * @since 1.0.0
111
+ */
112
+ const provideService = exports.provideService = /*#__PURE__*/(0, _Function.dual)(3, function provideService(guard, tag, service) {
113
+ const g = getGuard(guard);
114
+ return i => Effect.provideService(g(i), tag, service);
115
+ });
116
+ /**
117
+ * @since 1.0.0
118
+ */
119
+ const provideServiceEffect = exports.provideServiceEffect = /*#__PURE__*/(0, _Function.dual)(3, function provideServiceEffect(guard, tag, service) {
120
+ const g = getGuard(guard);
121
+ return i => Effect.provideServiceEffect(g(i), tag, service);
122
+ });
123
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["Effect","_interopRequireWildcard","require","_Function","Option","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","getGuard","guard","asGuard","exports","compose","dual","flatMap","input","output","g1","g2","match","onNone","succeedNone","onSome","mapEffect","f","o","asSome","map","sync","tap","as","some","filterMap","g","filter","predicate","any","guards","entries","gen","_","_tag","isSome","value","none","liftPredicate","catchAllCause","catchAll","provide","provided","provideService","tag","service","provideServiceEffect"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"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"}
@@ -0,0 +1,155 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+ import type { Cause, Context, Layer, Predicate, Runtime } from "effect";
5
+ import * as Effect from "effect/Effect";
6
+ import * as Option from "effect/Option";
7
+ /**
8
+ * @since 1.0.0
9
+ */
10
+ export type Guard<in I, out O, out E = never, out R = never> = (input: I) => Effect.Effect<Option.Option<O>, E, R>;
11
+ /**
12
+ * @since 1.0.0
13
+ */
14
+ export declare namespace Guard {
15
+ /**
16
+ * @since 1.0.0
17
+ */
18
+ type Input<T> = T extends Guard<infer I, infer _R, infer _E, infer _O> ? I : T extends AsGuard<infer I, infer _R, infer _E, infer _O> ? I : never;
19
+ /**
20
+ * @since 1.0.0
21
+ */
22
+ type Context<T> = T extends Guard<infer _I, infer _O, infer _E, infer R> ? R : T extends AsGuard<infer _I, infer _O, infer _E, infer R> ? R : never;
23
+ /**
24
+ * @since 1.0.0
25
+ */
26
+ type Error<T> = T extends Guard<infer _I, infer _O, infer E, infer _R> ? E : T extends AsGuard<infer _I, infer _O, infer E, infer _R> ? E : never;
27
+ /**
28
+ * @since 1.0.0
29
+ */
30
+ type Output<T> = T extends Guard<infer _I, infer O, infer _E, infer _R> ? O : T extends AsGuard<infer _I, infer O, infer _E, infer _R> ? O : never;
31
+ }
32
+ /**
33
+ * @since 1.0.0
34
+ */
35
+ export interface AsGuard<in I, out O, out E = never, out R = never> {
36
+ readonly asGuard: () => Guard<I, O, E, R>;
37
+ }
38
+ /**
39
+ * @since 1.0.0
40
+ */
41
+ export type GuardInput<I, O, E = never, R = never> = Guard<I, O, E, R> | AsGuard<I, O, E, R>;
42
+ /**
43
+ * @since 1.0.0
44
+ */
45
+ export declare const getGuard: <I, O, E = never, R = never>(guard: GuardInput<I, O, E, R>) => Guard<I, O, E, R>;
46
+ /**
47
+ * @since 1.0.0
48
+ */
49
+ export declare const compose: {
50
+ <O, B, E2, R2>(output: GuardInput<O, B, E2, R2>): <I, R, E>(input: GuardInput<I, O, E, R>) => Guard<I, B, E | E2, R | R2>;
51
+ <I, O, E, R, B, E2, R2>(input: GuardInput<I, O, E, R>, output: GuardInput<O, B, E2, R2>): Guard<I, B, E | E2, R | R2>;
52
+ };
53
+ /**
54
+ * @since 1.0.0
55
+ */
56
+ export declare const mapEffect: {
57
+ <O, B, E2, R2>(f: (o: O) => Effect.Effect<B, E2, R2>): <I, R, E>(guard: GuardInput<I, O, E, R>) => Guard<I, B, E | E2, R | R2>;
58
+ <I, O, E, R, B, E2, R2>(guard: GuardInput<I, O, E, R>, f: (o: O) => Effect.Effect<B, E2, R2>): Guard<I, B, E | E2, R | R2>;
59
+ };
60
+ /**
61
+ * @since 1.0.0
62
+ */
63
+ export declare const map: {
64
+ <O, B>(f: (o: O) => B): <I, R, E>(guard: GuardInput<I, O, E, R>) => Guard<I, B, E, R>;
65
+ <I, O, E, R, B>(guard: GuardInput<I, O, E, R>, f: (o: O) => B): Guard<I, B, E, R>;
66
+ };
67
+ /**
68
+ * @since 1.0.0
69
+ */
70
+ export declare const tap: {
71
+ <O, B, E2, R2>(f: (o: O) => Effect.Effect<B, E2, R2>): <I, R, E>(guard: GuardInput<I, O, E, R>) => Guard<I, O, E | E2, R | R2>;
72
+ <I, O, E, R, B, E2, R2>(guard: GuardInput<I, O, E, R>, f: (o: O) => Effect.Effect<B, E2, R2>): Guard<I, O, E | E2, R | R2>;
73
+ };
74
+ /**
75
+ * @since 1.0.0
76
+ */
77
+ export declare const filterMap: {
78
+ <O, B>(f: (o: O) => Option.Option<B>): <I, R, E>(guard: GuardInput<I, O, E, R>) => Guard<I, B, E, R>;
79
+ <I, O, E, R, B>(guard: GuardInput<I, O, E, R>, f: (o: O) => Option.Option<B>): Guard<I, B, E, R>;
80
+ };
81
+ /**
82
+ * @since 1.0.0
83
+ */
84
+ export declare const filter: {
85
+ <O, O2 extends O>(predicate: (o: O) => o is O2): <I, R, E>(guard: GuardInput<I, O, E, R>) => Guard<I, O, E, R>;
86
+ <O>(predicate: (o: O) => boolean): <I, R, E>(guard: GuardInput<I, O, E, R>) => Guard<I, O, E, R>;
87
+ <I, O, E, R, O2 extends O>(guard: GuardInput<I, O, E, R>, predicate: (o: O) => o is O2): Guard<I, O, E, R>;
88
+ <I, O, E, R>(guard: GuardInput<I, O, E, R>, predicate: (o: O) => boolean): Guard<I, O, E, R>;
89
+ };
90
+ /**
91
+ * @since 1.0.0
92
+ */
93
+ export declare function any<const GS extends Readonly<Record<string, GuardInput<any, any, any, any>>>>(guards: GS): Guard<AnyInput<GS>, AnyOutput<GS>, Guard.Error<GS[keyof GS]>, Guard.Context<GS[keyof GS]>>;
94
+ /**
95
+ * @since 1.0.0
96
+ */
97
+ export type AnyInput<GS extends Readonly<Record<string, GuardInput<any, any, any, any>>>> = UnionToIntersection<Guard.Input<GS[keyof GS]>>;
98
+ type UnionToIntersection<T> = (T extends any ? (x: T) => any : never) extends (x: infer R) => any ? R : never;
99
+ /**
100
+ * @since 1.0.0
101
+ */
102
+ export type AnyOutput<GS extends Readonly<Record<string, GuardInput<any, any, any, any>>>> = [
103
+ {
104
+ [K in keyof GS]: {
105
+ readonly _tag: K;
106
+ readonly value: Guard.Output<GS[K]>;
107
+ };
108
+ }[keyof GS]
109
+ ] extends [infer R] ? R : never;
110
+ /**
111
+ * @since 1.0.0
112
+ */
113
+ export declare function liftPredicate<A, B extends A>(predicate: Predicate.Refinement<A, B>): Guard<A, B>;
114
+ export declare function liftPredicate<A>(predicate: Predicate.Predicate<A>): Guard<A, A>;
115
+ /**
116
+ * @since 1.0.0
117
+ */
118
+ export declare const catchAllCause: {
119
+ <E, O2, E2, R2>(f: (e: Cause.Cause<E>) => Effect.Effect<O2, E2, R2>): <I, O, R>(guard: GuardInput<I, O, E, R>) => Guard<I, O | O2, E2, R | R2>;
120
+ <I, O, E, R, O2, E2, R2>(guard: GuardInput<I, O, E, R>, f: (e: Cause.Cause<E>) => Effect.Effect<O2, E2, R2>): Guard<I, O | O2, E2, R | R2>;
121
+ };
122
+ /**
123
+ * @since 1.0.0
124
+ */
125
+ export declare const catchAll: {
126
+ <E, O2, E2, R2>(f: (e: E) => Effect.Effect<O2, E2, R2>): <I, O, R>(guard: GuardInput<I, O, E, R>) => Guard<I, O | O2, E2, R | R2>;
127
+ <I, O, E, R, O2, E2, R2>(guard: GuardInput<I, O, E, R>, f: (e: E) => Effect.Effect<O2, E2, R2>): Guard<I, O | O2, E2, R | R2>;
128
+ };
129
+ /**
130
+ * @since 1.0.0
131
+ */
132
+ export declare const provide: {
133
+ <R2>(provided: Context.Context<R2>): <I, O, E, R>(guard: GuardInput<I, O, E, R>) => Guard<I, O, E, Exclude<R, R2>>;
134
+ <R2>(provided: Runtime.Runtime<R2>): <I, O, E, R>(guard: GuardInput<I, O, E, R>) => Guard<I, O, E, Exclude<R, R2>>;
135
+ <R2, E2, R3>(provided: Layer.Layer<R2, E2, R3>): <I, O, E, R>(guard: GuardInput<I, O, E, R>) => Guard<I, O, E | E2, Exclude<R, R2> | R3>;
136
+ <I, O, E, R, R2>(guard: GuardInput<I, O, E, R>, provided: Context.Context<R2>): Guard<I, O, E, Exclude<R, R2>>;
137
+ <I, O, E, R, R2>(guard: GuardInput<I, O, E, R>, provided: Runtime.Runtime<R2>): Guard<I, O, E, Exclude<R, R2>>;
138
+ <I, O, E, R, R2, E2, R3>(guard: GuardInput<I, O, E, R>, provided: Layer.Layer<R2, E2, R3>): Guard<I, O, E | E2, Exclude<R, R2> | R3>;
139
+ };
140
+ /**
141
+ * @since 1.0.0
142
+ */
143
+ export declare const provideService: {
144
+ <Id, S>(tag: Context.Tag<Id, S>, service: S): <I, O, E, R>(guard: GuardInput<I, O, E, R>) => Guard<I, O, E, Exclude<R, Id>>;
145
+ <I, O, E, R, Id, S>(guard: GuardInput<I, O, E, R>, tag: Context.Tag<Id, S>, service: S): Guard<I, O, E, Exclude<R, Id>>;
146
+ };
147
+ /**
148
+ * @since 1.0.0
149
+ */
150
+ export declare const provideServiceEffect: {
151
+ <Id, S, E2, R2>(tag: Context.Tag<Id, S>, service: Effect.Effect<S, E2, R2>): <I, O, E, R>(guard: GuardInput<I, O, E, R>) => Guard<I, O, E | E2, Exclude<R, Id> | R2>;
152
+ <I, O, E, R, Id, S, E2, R2>(guard: GuardInput<I, O, E, R>, tag: Context.Tag<Id, S>, service: Effect.Effect<S, E2, R2>): Guard<I, O, E | E2, Exclude<R, Id> | R2>;
153
+ };
154
+ export {};
155
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,107 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+ import * as Effect from "effect/Effect";
5
+ import { dual } from "effect/Function";
6
+ import * as Option from "effect/Option";
7
+ /**
8
+ * @since 1.0.0
9
+ */
10
+ export const getGuard = (guard) => "asGuard" in guard ? guard.asGuard() : guard;
11
+ /**
12
+ * @since 1.0.0
13
+ */
14
+ export const compose = dual(2, function flatMap(input, output) {
15
+ const g1 = getGuard(input);
16
+ const g2 = getGuard(output);
17
+ return (i) => Effect.flatMap(g1(i), Option.match({
18
+ onNone: () => Effect.succeedNone,
19
+ onSome: g2
20
+ }));
21
+ });
22
+ /**
23
+ * @since 1.0.0
24
+ */
25
+ export const mapEffect = dual(2, function mapEffect(guard, f) {
26
+ return compose(guard, (o) => Effect.asSome(f(o)));
27
+ });
28
+ /**
29
+ * @since 1.0.0
30
+ */
31
+ export const map = dual(2, function map(guard, f) {
32
+ return mapEffect(guard, (o) => Effect.sync(() => f(o)));
33
+ });
34
+ /**
35
+ * @since 1.0.0
36
+ */
37
+ export const tap = dual(2, function tap(guard, f) {
38
+ return compose(guard, (o) => Effect.as(f(o), Option.some(o)));
39
+ });
40
+ /**
41
+ * @since 1.0.0
42
+ */
43
+ export const filterMap = dual(2, (guard, f) => {
44
+ const g = getGuard(guard);
45
+ return (i) => Effect.map(g(i), Option.filterMap(f));
46
+ });
47
+ /**
48
+ * @since 1.0.0
49
+ */
50
+ export const filter = dual(2, (guard, predicate) => {
51
+ const g = getGuard(guard);
52
+ return (i) => Effect.map(g(i), Option.filter(predicate));
53
+ });
54
+ /**
55
+ * @since 1.0.0
56
+ */
57
+ export function any(guards) {
58
+ const entries = Object.entries(guards);
59
+ return (i) => Effect.gen(function* (_) {
60
+ for (const [_tag, guard] of entries) {
61
+ const match = yield* _(getGuard(guard)(i));
62
+ if (Option.isSome(match)) {
63
+ return Option.some({ _tag, value: match.value });
64
+ }
65
+ }
66
+ return Option.none();
67
+ });
68
+ }
69
+ export function liftPredicate(predicate) {
70
+ return (a) => Effect.sync(() => (predicate(a) ? Option.some(a) : Option.none()));
71
+ }
72
+ /**
73
+ * @since 1.0.0
74
+ */
75
+ export const catchAllCause = dual(2, function catchAllCause(guard, f) {
76
+ const g = getGuard(guard);
77
+ return (i) => Effect.catchAllCause(g(i), (a) => Effect.asSome(f(a)));
78
+ });
79
+ /**
80
+ * @since 1.0.0
81
+ */
82
+ export const catchAll = dual(2, function catchAll(guard, f) {
83
+ const g = getGuard(guard);
84
+ return (i) => Effect.catchAll(g(i), (a) => Effect.asSome(f(a)));
85
+ });
86
+ /**
87
+ * @since 1.0.0
88
+ */
89
+ export const provide = dual(2, function provide(guard, provided) {
90
+ const g = getGuard(guard);
91
+ return (i) => Effect.provide(g(i), provided);
92
+ });
93
+ /**
94
+ * @since 1.0.0
95
+ */
96
+ export const provideService = dual(3, function provideService(guard, tag, service) {
97
+ const g = getGuard(guard);
98
+ return (i) => Effect.provideService(g(i), tag, service);
99
+ });
100
+ /**
101
+ * @since 1.0.0
102
+ */
103
+ export const provideServiceEffect = dual(3, function provideServiceEffect(guard, tag, service) {
104
+ const g = getGuard(guard);
105
+ return (i) => Effect.provideServiceEffect(g(i), tag, service);
106
+ });
107
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ {
2
+ "type": "module",
3
+ "sideEffects": []
4
+ }
package/package.json ADDED
@@ -0,0 +1,25 @@
1
+ {
2
+ "name": "@typed/guard",
3
+ "version": "0.1.0",
4
+ "description": "",
5
+ "license": "MIT",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "https://github.com/tylors/typed.git"
9
+ },
10
+ "sideEffects": [],
11
+ "author": "Typed contributors",
12
+ "dependencies": {},
13
+ "peerDependencies": {},
14
+ "main": "./dist/cjs/index.js",
15
+ "module": "./dist/esm/index.js",
16
+ "types": "./dist/dts/index.d.ts",
17
+ "exports": {
18
+ "./package.json": "./package.json",
19
+ ".": {
20
+ "types": "./dist/dts/index.d.ts",
21
+ "import": "./dist/esm/index.js",
22
+ "default": "./dist/cjs/index.js"
23
+ }
24
+ }
25
+ }
package/src/index.ts ADDED
@@ -0,0 +1,321 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+
5
+ import type { Cause, Context, Layer, Predicate, Runtime } from "effect"
6
+ import * as Effect from "effect/Effect"
7
+ import { dual } from "effect/Function"
8
+ import * as Option from "effect/Option"
9
+
10
+ /**
11
+ * @since 1.0.0
12
+ */
13
+ export type Guard<in I, out O, out E = never, out R = never> = (input: I) => Effect.Effect<Option.Option<O>, E, R>
14
+
15
+ /**
16
+ * @since 1.0.0
17
+ */
18
+ export namespace Guard {
19
+ /**
20
+ * @since 1.0.0
21
+ */
22
+ export type Input<T> = T extends Guard<infer I, infer _R, infer _E, infer _O> ? I :
23
+ T extends AsGuard<infer I, infer _R, infer _E, infer _O> ? I
24
+ : never
25
+
26
+ /**
27
+ * @since 1.0.0
28
+ */
29
+ export type Context<T> = T extends Guard<infer _I, infer _O, infer _E, infer R> ? R :
30
+ T extends AsGuard<infer _I, infer _O, infer _E, infer R> ? R
31
+ : never
32
+
33
+ /**
34
+ * @since 1.0.0
35
+ */
36
+ export type Error<T> = T extends Guard<infer _I, infer _O, infer E, infer _R> ? E
37
+ : T extends AsGuard<infer _I, infer _O, infer E, infer _R> ? E
38
+ : never
39
+
40
+ /**
41
+ * @since 1.0.0
42
+ */
43
+ export type Output<T> = T extends Guard<infer _I, infer O, infer _E, infer _R> ? O
44
+ : T extends AsGuard<infer _I, infer O, infer _E, infer _R> ? O
45
+ : never
46
+ }
47
+
48
+ /**
49
+ * @since 1.0.0
50
+ */
51
+ export interface AsGuard<in I, out O, out E = never, out R = never> {
52
+ readonly asGuard: () => Guard<I, O, E, R>
53
+ }
54
+
55
+ /**
56
+ * @since 1.0.0
57
+ */
58
+ export type GuardInput<I, O, E = never, R = never> = Guard<I, O, E, R> | AsGuard<I, O, E, R>
59
+
60
+ /**
61
+ * @since 1.0.0
62
+ */
63
+ export const getGuard = <I, O, E = never, R = never>(guard: GuardInput<I, O, E, R>): Guard<I, O, E, R> =>
64
+ "asGuard" in guard ? guard.asGuard() : guard
65
+
66
+ /**
67
+ * @since 1.0.0
68
+ */
69
+ export const compose: {
70
+ <O, B, E2, R2>(
71
+ output: GuardInput<O, B, E2, R2>
72
+ ): <I, R, E>(input: GuardInput<I, O, E, R>) => Guard<I, B, E | E2, R | R2>
73
+ <I, O, E, R, B, E2, R2>(input: GuardInput<I, O, E, R>, output: GuardInput<O, B, E2, R2>): Guard<I, B, E | E2, R | R2>
74
+ } = dual(2, function flatMap<I, O, E, R, B, E2, R2>(
75
+ input: GuardInput<I, O, E, R>,
76
+ output: GuardInput<O, B, E2, R2>
77
+ ): Guard<I, B, E | E2, R | R2> {
78
+ const g1 = getGuard(input)
79
+ const g2 = getGuard(output)
80
+ return (i) =>
81
+ Effect.flatMap(
82
+ g1(i),
83
+ Option.match({
84
+ onNone: () => Effect.succeedNone,
85
+ onSome: g2
86
+ })
87
+ )
88
+ })
89
+
90
+ /**
91
+ * @since 1.0.0
92
+ */
93
+ export const mapEffect: {
94
+ <O, B, E2, R2>(
95
+ f: (o: O) => Effect.Effect<B, E2, R2>
96
+ ): <I, R, E>(guard: GuardInput<I, O, E, R>) => Guard<I, B, E | E2, R | R2>
97
+ <I, O, E, R, B, E2, R2>(
98
+ guard: GuardInput<I, O, E, R>,
99
+ f: (o: O) => Effect.Effect<B, E2, R2>
100
+ ): Guard<I, B, E | E2, R | R2>
101
+ } = dual(2, function mapEffect<I, O, E, R, B, E2, R2>(
102
+ guard: GuardInput<I, O, E, R>,
103
+ f: (o: O) => Effect.Effect<B, E2, R2>
104
+ ): Guard<I, B, E | E2, R | R2> {
105
+ return compose(guard, (o) => Effect.asSome(f(o)))
106
+ })
107
+
108
+ /**
109
+ * @since 1.0.0
110
+ */
111
+ export const map: {
112
+ <O, B>(f: (o: O) => B): <I, R, E>(guard: GuardInput<I, O, E, R>) => Guard<I, B, E, R>
113
+ <I, O, E, R, B>(guard: GuardInput<I, O, E, R>, f: (o: O) => B): Guard<I, B, E, R>
114
+ } = dual(2, function map<I, O, E, R, B>(
115
+ guard: GuardInput<I, O, E, R>,
116
+ f: (o: O) => B
117
+ ): Guard<I, B, E, R> {
118
+ return mapEffect(guard, (o) => Effect.sync(() => f(o)))
119
+ })
120
+
121
+ /**
122
+ * @since 1.0.0
123
+ */
124
+ export const tap: {
125
+ <O, B, E2, R2>(
126
+ f: (o: O) => Effect.Effect<B, E2, R2>
127
+ ): <I, R, E>(guard: GuardInput<I, O, E, R>) => Guard<I, O, E | E2, R | R2>
128
+ <I, O, E, R, B, E2, R2>(
129
+ guard: GuardInput<I, O, E, R>,
130
+ f: (o: O) => Effect.Effect<B, E2, R2>
131
+ ): Guard<I, O, E | E2, R | R2>
132
+ } = dual(2, function tap<I, O, E, R, B, E2, R2>(
133
+ guard: GuardInput<I, O, E, R>,
134
+ f: (o: O) => Effect.Effect<B, E2, R2>
135
+ ): Guard<I, O, E | E2, R | R2> {
136
+ return compose(guard, (o) => Effect.as(f(o), Option.some(o)))
137
+ })
138
+
139
+ /**
140
+ * @since 1.0.0
141
+ */
142
+ export const filterMap: {
143
+ <O, B>(f: (o: O) => Option.Option<B>): <I, R, E>(guard: GuardInput<I, O, E, R>) => Guard<I, B, E, R>
144
+ <I, O, E, R, B>(guard: GuardInput<I, O, E, R>, f: (o: O) => Option.Option<B>): Guard<I, B, E, R>
145
+ } = dual(
146
+ 2,
147
+ <I, O, E, R, B>(guard: GuardInput<I, O, E, R>, f: (o: O) => Option.Option<B>): Guard<I, B, E, R> => {
148
+ const g = getGuard(guard)
149
+ return (i) => Effect.map(g(i), Option.filterMap(f))
150
+ }
151
+ )
152
+
153
+ /**
154
+ * @since 1.0.0
155
+ */
156
+ export const filter: {
157
+ <O, O2 extends O>(predicate: (o: O) => o is O2): <I, R, E>(guard: GuardInput<I, O, E, R>) => Guard<I, O, E, R>
158
+ <O>(predicate: (o: O) => boolean): <I, R, E>(guard: GuardInput<I, O, E, R>) => Guard<I, O, E, R>
159
+ <I, O, E, R, O2 extends O>(guard: GuardInput<I, O, E, R>, predicate: (o: O) => o is O2): Guard<I, O, E, R>
160
+ <I, O, E, R>(guard: GuardInput<I, O, E, R>, predicate: (o: O) => boolean): Guard<I, O, E, R>
161
+ } = dual(
162
+ 2,
163
+ <I, O, E, R>(guard: GuardInput<I, O, E, R>, predicate: (o: O) => boolean): Guard<I, O, E, R> => {
164
+ const g = getGuard(guard)
165
+ return (i) => Effect.map(g(i), Option.filter(predicate))
166
+ }
167
+ )
168
+
169
+ /**
170
+ * @since 1.0.0
171
+ */
172
+ export function any<const GS extends Readonly<Record<string, GuardInput<any, any, any, any>>>>(
173
+ guards: GS
174
+ ): Guard<AnyInput<GS>, AnyOutput<GS>, Guard.Error<GS[keyof GS]>, Guard.Context<GS[keyof GS]>> {
175
+ const entries = Object.entries(guards)
176
+ return (i: AnyInput<GS>) =>
177
+ Effect.gen(function*(_) {
178
+ for (const [_tag, guard] of entries) {
179
+ const match = yield* _(getGuard(guard)(i))
180
+ if (Option.isSome(match)) {
181
+ return Option.some({ _tag, value: match.value } as AnyOutput<GS>)
182
+ }
183
+ }
184
+ return Option.none()
185
+ })
186
+ }
187
+
188
+ /**
189
+ * @since 1.0.0
190
+ */
191
+ export type AnyInput<GS extends Readonly<Record<string, GuardInput<any, any, any, any>>>> = UnionToIntersection<
192
+ Guard.Input<GS[keyof GS]>
193
+ >
194
+
195
+ type UnionToIntersection<T> = (T extends any ? (x: T) => any : never) extends (x: infer R) => any ? R : never
196
+
197
+ /**
198
+ * @since 1.0.0
199
+ */
200
+ export type AnyOutput<GS extends Readonly<Record<string, GuardInput<any, any, any, any>>>> = [
201
+ {
202
+ [K in keyof GS]: { readonly _tag: K; readonly value: Guard.Output<GS[K]> }
203
+ }[keyof GS]
204
+ ] extends [infer R] ? R : never
205
+
206
+ /**
207
+ * @since 1.0.0
208
+ */
209
+ export function liftPredicate<A, B extends A>(predicate: Predicate.Refinement<A, B>): Guard<A, B>
210
+ export function liftPredicate<A>(predicate: Predicate.Predicate<A>): Guard<A, A>
211
+ export function liftPredicate<A>(predicate: Predicate.Predicate<A>): Guard<A, A> {
212
+ return (a) => Effect.sync(() => (predicate(a) ? Option.some(a) : Option.none()))
213
+ }
214
+
215
+ /**
216
+ * @since 1.0.0
217
+ */
218
+ export const catchAllCause: {
219
+ <E, O2, E2, R2>(
220
+ f: (e: Cause.Cause<E>) => Effect.Effect<O2, E2, R2>
221
+ ): <I, O, R>(guard: GuardInput<I, O, E, R>) => Guard<I, O | O2, E2, R | R2>
222
+ <I, O, E, R, O2, E2, R2>(
223
+ guard: GuardInput<I, O, E, R>,
224
+ f: (e: Cause.Cause<E>) => Effect.Effect<O2, E2, R2>
225
+ ): Guard<I, O | O2, E2, R | R2>
226
+ } = dual(2, function catchAllCause<I, O, E, R, O2, E2, R2>(
227
+ guard: GuardInput<I, O, E, R>,
228
+ f: (e: Cause.Cause<E>) => Effect.Effect<O2, E2, R2>
229
+ ): Guard<I, O | O2, E2, R | R2> {
230
+ const g = getGuard(guard)
231
+ return (i) => Effect.catchAllCause(g(i), (a) => Effect.asSome(f(a)))
232
+ })
233
+
234
+ /**
235
+ * @since 1.0.0
236
+ */
237
+ export const catchAll: {
238
+ <E, O2, E2, R2>(
239
+ f: (e: E) => Effect.Effect<O2, E2, R2>
240
+ ): <I, O, R>(guard: GuardInput<I, O, E, R>) => Guard<I, O | O2, E2, R | R2>
241
+ <I, O, E, R, O2, E2, R2>(
242
+ guard: GuardInput<I, O, E, R>,
243
+ f: (e: E) => Effect.Effect<O2, E2, R2>
244
+ ): Guard<I, O | O2, E2, R | R2>
245
+ } = dual(2, function catchAll<I, O, E, R, O2, E2, R2>(
246
+ guard: GuardInput<I, O, E, R>,
247
+ f: (e: E) => Effect.Effect<O2, E2, R2>
248
+ ): Guard<I, O | O2, E2, R | R2> {
249
+ const g = getGuard(guard)
250
+ return (i) => Effect.catchAll(g(i), (a) => Effect.asSome(f(a)))
251
+ })
252
+
253
+ /**
254
+ * @since 1.0.0
255
+ */
256
+ export const provide: {
257
+ <R2>(
258
+ provided: Context.Context<R2>
259
+ ): <I, O, E, R>(guard: GuardInput<I, O, E, R>) => Guard<I, O, E, Exclude<R, R2>>
260
+ <R2>(provided: Runtime.Runtime<R2>): <I, O, E, R>(guard: GuardInput<I, O, E, R>) => Guard<I, O, E, Exclude<R, R2>>
261
+ <R2, E2, R3>(
262
+ provided: Layer.Layer<R2, E2, R3>
263
+ ): <I, O, E, R>(guard: GuardInput<I, O, E, R>) => Guard<I, O, E | E2, Exclude<R, R2> | R3>
264
+
265
+ <I, O, E, R, R2>(guard: GuardInput<I, O, E, R>, provided: Context.Context<R2>): Guard<I, O, E, Exclude<R, R2>>
266
+ <I, O, E, R, R2>(guard: GuardInput<I, O, E, R>, provided: Runtime.Runtime<R2>): Guard<I, O, E, Exclude<R, R2>>
267
+ <I, O, E, R, R2, E2, R3>(
268
+ guard: GuardInput<I, O, E, R>,
269
+ provided: Layer.Layer<R2, E2, R3>
270
+ ): Guard<I, O, E | E2, Exclude<R, R2> | R3>
271
+ } = dual(2, function provide<I, O, E, R, R2>(
272
+ guard: GuardInput<I, O, E, R>,
273
+ provided: Context.Context<R2>
274
+ ): Guard<I, O, E, Exclude<R, R2>> {
275
+ const g = getGuard(guard)
276
+ return (i) => Effect.provide(g(i), provided)
277
+ })
278
+
279
+ /**
280
+ * @since 1.0.0
281
+ */
282
+ export const provideService: {
283
+ <Id, S>(
284
+ tag: Context.Tag<Id, S>,
285
+ service: S
286
+ ): <I, O, E, R>(guard: GuardInput<I, O, E, R>) => Guard<I, O, E, Exclude<R, Id>>
287
+ <I, O, E, R, Id, S>(
288
+ guard: GuardInput<I, O, E, R>,
289
+ tag: Context.Tag<Id, S>,
290
+ service: S
291
+ ): Guard<I, O, E, Exclude<R, Id>>
292
+ } = dual(3, function provideService<I, O, E, R, Id, S>(
293
+ guard: GuardInput<I, O, E, R>,
294
+ tag: Context.Tag<Id, S>,
295
+ service: S
296
+ ): Guard<I, O, E, Exclude<R, Id>> {
297
+ const g = getGuard(guard)
298
+ return (i) => Effect.provideService(g(i), tag, service)
299
+ })
300
+
301
+ /**
302
+ * @since 1.0.0
303
+ */
304
+ export const provideServiceEffect: {
305
+ <Id, S, E2, R2>(
306
+ tag: Context.Tag<Id, S>,
307
+ service: Effect.Effect<S, E2, R2>
308
+ ): <I, O, E, R>(guard: GuardInput<I, O, E, R>) => Guard<I, O, E | E2, Exclude<R, Id> | R2>
309
+ <I, O, E, R, Id, S, E2, R2>(
310
+ guard: GuardInput<I, O, E, R>,
311
+ tag: Context.Tag<Id, S>,
312
+ service: Effect.Effect<S, E2, R2>
313
+ ): Guard<I, O, E | E2, Exclude<R, Id> | R2>
314
+ } = dual(3, function provideServiceEffect<I, O, E, R, Id, S, E2, R2>(
315
+ guard: GuardInput<I, O, E, R>,
316
+ tag: Context.Tag<Id, S>,
317
+ service: Effect.Effect<S, E2, R2>
318
+ ): Guard<I, O, E | E2, Exclude<R, Id> | R2> {
319
+ const g = getGuard(guard)
320
+ return (i) => Effect.provideServiceEffect(g(i), tag, service)
321
+ })