effect-app 4.0.0-beta.17 → 4.0.0-beta.19
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/dist/Schema/ext.d.ts +26 -25
- package/dist/Schema/ext.d.ts.map +1 -1
- package/dist/Schema/ext.js +13 -20
- package/package.json +1 -1
- package/src/Schema/ext.ts +46 -38
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# @effect-app/prelude
|
|
2
2
|
|
|
3
|
+
## 4.0.0-beta.19
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- ffc10a4: Migrate `Schema/ext` context helpers to Effect v4 by implementing `provide` and `contextFromServices` with proper service subtraction across decoding and encoding requirements.
|
|
8
|
+
|
|
9
|
+
## 4.0.0-beta.18
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- e9dbbdd: Tighten schema helper generics in `Schema/ext.ts` so default-related helpers accept properly named schema type parameters instead of bare `S.Top` inputs.
|
|
14
|
+
|
|
3
15
|
## 4.0.0-beta.17
|
|
4
16
|
|
|
5
17
|
### Patch Changes
|
package/dist/Schema/ext.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { Effect, Schema, type SchemaAST, SchemaIssue,
|
|
1
|
+
import { Effect, Schema, type SchemaAST, SchemaIssue, ServiceMap } from "effect";
|
|
2
2
|
import * as S from "effect/Schema";
|
|
3
3
|
import { type NonEmptyReadonlyArray } from "../Array.js";
|
|
4
4
|
import { type AST } from "./schema.js";
|
|
5
|
+
type ProvidedCodec<Self extends S.Top, R> = S.Codec<Self["Type"], Self["Encoded"], Exclude<Self["DecodingServices"], R>, Exclude<Self["EncodingServices"], R>>;
|
|
5
6
|
export declare const withDefaultConstructor: <A>(makeDefault: () => NoInfer<A>) => <Self extends S.Top>(self: Self) => S.withConstructorDefault<Self & S.WithoutConstructorDefault>;
|
|
6
7
|
/**
|
|
7
8
|
* Like the default Schema `Date` but from String with `withDefault` => now
|
|
@@ -35,46 +36,46 @@ export declare const Literal: <Literals extends NonEmptyReadonlyArray<AST.Litera
|
|
|
35
36
|
/**
|
|
36
37
|
* Like the default Schema `Array` but with `withDefault` => []
|
|
37
38
|
*/
|
|
38
|
-
export declare function Array<
|
|
39
|
-
withDefault: Schema.withConstructorDefault<Schema.$Array<
|
|
39
|
+
export declare function Array<ValueSchema extends S.Top>(value: ValueSchema): Schema.$Array<ValueSchema> & {
|
|
40
|
+
withDefault: Schema.withConstructorDefault<Schema.$Array<ValueSchema> & Schema.WithoutConstructorDefault>;
|
|
40
41
|
};
|
|
41
42
|
/**
|
|
42
43
|
* Like the default Schema `Map` but with `withDefault` => []
|
|
43
44
|
*/
|
|
44
|
-
declare function Map_<
|
|
45
|
-
key:
|
|
46
|
-
value:
|
|
47
|
-
}): Schema.$ReadonlyMap<
|
|
48
|
-
withDefault: Schema.withConstructorDefault<Schema.$ReadonlyMap<
|
|
45
|
+
declare function Map_<KeySchema extends S.Top, ValueSchema extends S.Top>(input: {
|
|
46
|
+
key: KeySchema;
|
|
47
|
+
value: ValueSchema;
|
|
48
|
+
}): Schema.$ReadonlyMap<KeySchema, ValueSchema> & {
|
|
49
|
+
withDefault: Schema.withConstructorDefault<Schema.$ReadonlyMap<KeySchema, ValueSchema> & Schema.WithoutConstructorDefault>;
|
|
49
50
|
};
|
|
50
51
|
export { Map_ as Map };
|
|
51
52
|
/**
|
|
52
53
|
* Like the default Schema `ReadonlySet` but with `withDefault` => new Set()
|
|
53
54
|
*/
|
|
54
|
-
export declare const ReadonlySet: <
|
|
55
|
-
withDefault: Schema.withConstructorDefault<Schema.$ReadonlySet<
|
|
55
|
+
export declare const ReadonlySet: <ValueSchema extends S.Top>(value: ValueSchema) => Schema.$ReadonlySet<ValueSchema> & {
|
|
56
|
+
withDefault: Schema.withConstructorDefault<Schema.$ReadonlySet<ValueSchema> & Schema.WithoutConstructorDefault>;
|
|
56
57
|
};
|
|
57
58
|
/**
|
|
58
59
|
* Like the default Schema `ReadonlyMap` but with `withDefault` => new Map()
|
|
59
60
|
*/
|
|
60
|
-
export declare const ReadonlyMap: <
|
|
61
|
-
readonly key:
|
|
62
|
-
readonly value:
|
|
63
|
-
}) => Schema.$ReadonlyMap<
|
|
64
|
-
withDefault: Schema.withConstructorDefault<Schema.$ReadonlyMap<
|
|
61
|
+
export declare const ReadonlyMap: <KeySchema extends S.Top, ValueSchema extends S.Top>(pair: {
|
|
62
|
+
readonly key: KeySchema;
|
|
63
|
+
readonly value: ValueSchema;
|
|
64
|
+
}) => Schema.$ReadonlyMap<KeySchema, ValueSchema> & {
|
|
65
|
+
withDefault: Schema.withConstructorDefault<Schema.$ReadonlyMap<KeySchema, ValueSchema> & Schema.WithoutConstructorDefault>;
|
|
65
66
|
};
|
|
66
67
|
/**
|
|
67
68
|
* Like the default Schema `NullOr` but with `withDefault` => null
|
|
68
69
|
*/
|
|
69
|
-
export declare const NullOr: <
|
|
70
|
-
withDefault: Schema.withConstructorDefault<Schema.NullOr<
|
|
70
|
+
export declare const NullOr: <Schema extends S.Top>(self: Schema) => Schema.NullOr<Schema> & {
|
|
71
|
+
withDefault: Schema.withConstructorDefault<Schema.NullOr<Schema> & Schema.WithoutConstructorDefault>;
|
|
71
72
|
};
|
|
72
|
-
export declare const defaultDate:
|
|
73
|
-
export declare const defaultBool:
|
|
74
|
-
export declare const defaultNullable:
|
|
75
|
-
export declare const defaultArray:
|
|
76
|
-
export declare const defaultMap:
|
|
77
|
-
export declare const defaultSet:
|
|
73
|
+
export declare const defaultDate: <Schema extends S.Top>(schema: Schema) => Schema.withConstructorDefault<Schema & Schema.WithoutConstructorDefault>;
|
|
74
|
+
export declare const defaultBool: <Schema extends S.Top>(schema: Schema) => Schema.withConstructorDefault<Schema & Schema.WithoutConstructorDefault>;
|
|
75
|
+
export declare const defaultNullable: <Schema extends S.Top>(schema: Schema) => Schema.withConstructorDefault<Schema & Schema.WithoutConstructorDefault>;
|
|
76
|
+
export declare const defaultArray: <Schema extends S.Top>(schema: Schema) => Schema.withConstructorDefault<Schema & Schema.WithoutConstructorDefault>;
|
|
77
|
+
export declare const defaultMap: <Schema extends S.Top>(schema: Schema) => Schema.withConstructorDefault<Schema & Schema.WithoutConstructorDefault>;
|
|
78
|
+
export declare const defaultSet: <Schema extends S.Top>(schema: Schema) => Schema.withConstructorDefault<Schema & Schema.WithoutConstructorDefault>;
|
|
78
79
|
export declare const withDefaultMake: <Self extends S.Top>(s: Self) => WithDefaults<Self> & Self;
|
|
79
80
|
export type WithDefaults<Self extends S.Top> = (i: Self["Encoded"], options?: SchemaAST.ParseOptions) => Self["Type"];
|
|
80
81
|
export declare const inputDate: Schema.Union<readonly [Schema.Date, Schema.Date]> & {
|
|
@@ -92,6 +93,6 @@ export declare function makeExactOptional<NER extends S.Struct.Fields>(t: NER):
|
|
|
92
93
|
export declare const transformTo: <To extends S.Top, From extends S.Top>(from: From, to: To, decode: (fromA: From["Type"], options: SchemaAST.ParseOptions) => To["Encoded"]) => Schema.decodeTo<To, From, never, never>;
|
|
93
94
|
/** A version of transformOrFail which is only a one way mapping of From->To */
|
|
94
95
|
export declare const transformToOrFail: <To extends S.Top, From extends S.Top, RD>(from: From, to: To, decode: (fromA: From["Type"], options: SchemaAST.ParseOptions) => Effect.Effect<To["Encoded"], SchemaIssue.Issue, RD>) => Schema.decodeTo<To, From, never, never>;
|
|
95
|
-
export declare const provide: <Self extends S.Top, R>(self: Self, context: ServiceMap.ServiceMap<R>) =>
|
|
96
|
-
export declare const contextFromServices: <Self extends S.Top, Tags extends
|
|
96
|
+
export declare const provide: <Self extends S.Top, R>(self: Self, context: ServiceMap.ServiceMap<R>) => ProvidedCodec<Self, R>;
|
|
97
|
+
export declare const contextFromServices: <Self extends S.Top, Tags extends ReadonlyArray<ServiceMap.Key<any, any>>>(self: Self, ...services: Tags) => Effect.Effect<ProvidedCodec<Self, ServiceMap.Service.Identifier<Tags[number]>>, never, ServiceMap.Service.Identifier<Tags[number]>>;
|
|
97
98
|
//# sourceMappingURL=ext.d.ts.map
|
package/dist/Schema/ext.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ext.d.ts","sourceRoot":"","sources":["../../src/Schema/ext.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAgB,MAAM,EAAE,KAAK,SAAS,EAAgB,WAAW,
|
|
1
|
+
{"version":3,"file":"ext.d.ts","sourceRoot":"","sources":["../../src/Schema/ext.ts"],"names":[],"mappings":"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"}
|
package/dist/Schema/ext.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
2
|
/* eslint-disable @typescript-eslint/no-unsafe-return */
|
|
3
|
-
import { Effect, Option, pipe, Schema, SchemaGetter, SchemaIssue,
|
|
3
|
+
import { Effect, Option, pipe, Schema, SchemaGetter, SchemaIssue, SchemaTransformation, ServiceMap } from "effect";
|
|
4
4
|
import * as S from "effect/Schema";
|
|
5
5
|
import { extendM, typedKeysOf } from "../utils.js";
|
|
6
6
|
// TODO: v4 migration — withConstructorDefault signature changed, propertySignature removed
|
|
@@ -69,12 +69,12 @@ export const ReadonlyMap = (pair) => pipe(S.ReadonlyMap(pair.key, pair.value), (
|
|
|
69
69
|
* Like the default Schema `NullOr` but with `withDefault` => null
|
|
70
70
|
*/
|
|
71
71
|
export const NullOr = (self) => pipe(S.NullOr(self), (s) => Object.assign(s, { withDefault: s.pipe(withDefaultConstructor(() => null)) }));
|
|
72
|
-
export const defaultDate = (
|
|
73
|
-
export const defaultBool = (
|
|
74
|
-
export const defaultNullable = (
|
|
75
|
-
export const defaultArray = (
|
|
76
|
-
export const defaultMap = (
|
|
77
|
-
export const defaultSet = (
|
|
72
|
+
export const defaultDate = (schema) => schema.pipe(withDefaultConstructor(() => new global.Date()));
|
|
73
|
+
export const defaultBool = (schema) => schema.pipe(withDefaultConstructor(() => false));
|
|
74
|
+
export const defaultNullable = (schema) => schema.pipe(withDefaultConstructor(() => null));
|
|
75
|
+
export const defaultArray = (schema) => schema.pipe(withDefaultConstructor(() => []));
|
|
76
|
+
export const defaultMap = (schema) => schema.pipe(withDefaultConstructor(() => new Map()));
|
|
77
|
+
export const defaultSet = (schema) => schema.pipe(withDefaultConstructor(() => new Set()));
|
|
78
78
|
export const withDefaultMake = (s) => {
|
|
79
79
|
const a = Object.assign(S.decodeSync(s), s);
|
|
80
80
|
Object.setPrototypeOf(a, s);
|
|
@@ -118,19 +118,12 @@ export const transformToOrFail = (from, to, decode) => from.pipe(S.decodeTo(to,
|
|
|
118
118
|
decode: decode,
|
|
119
119
|
encode: (i) => Effect.fail(new SchemaIssue.Forbidden(Option.some(i), { message: "One way schema transformation, encoding is not allowed" }))
|
|
120
120
|
})));
|
|
121
|
-
// TODO: v4 migration — S.declare API changed (no [self] + decode/encode pattern)
|
|
122
|
-
// Need to find v4 equivalent for contextual schema wrapping
|
|
123
121
|
export const provide = (self, context) => {
|
|
124
122
|
const prov = Effect.provide(context);
|
|
125
|
-
return S
|
|
126
|
-
.declare((_u) => true) // placeholder — needs proper v4 declare
|
|
127
|
-
.pipe(S.decodeTo(self, SchemaTransformation.transformOrFail({
|
|
128
|
-
decode: (n) => prov(SchemaParser.decodeUnknownEffect(self)(n)),
|
|
129
|
-
encode: (n) => prov(SchemaParser.encodeUnknownEffect(self)(n))
|
|
130
|
-
})));
|
|
123
|
+
return self.pipe(S.middlewareDecoding((effect) => prov(effect)), S.middlewareEncoding((effect) => prov(effect)));
|
|
131
124
|
};
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
};
|
|
136
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
125
|
+
export const contextFromServices = (self, ...services) => Effect.gen(function* () {
|
|
126
|
+
const context = ServiceMap.pick(...services)(yield* Effect.services());
|
|
127
|
+
return provide(self, context);
|
|
128
|
+
});
|
|
129
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL1NjaGVtYS9leHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELHdEQUF3RDtBQUN4RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFrQixZQUFZLEVBQUUsV0FBVyxFQUFFLG9CQUFvQixFQUFFLFVBQVUsRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUNsSSxPQUFPLEtBQUssQ0FBQyxNQUFNLGVBQWUsQ0FBQTtBQUVsQyxPQUFPLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQVVsRCwyRkFBMkY7QUFDM0YscUdBQXFHO0FBQ3JHLHVHQUF1RztBQUN2Ryw0R0FBNEc7QUFDNUcsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsQ0FDcEMsV0FBNkIsRUFDN0IsRUFBRSxDQUNKLENBQXFCLElBQVUsRUFBZ0UsRUFBRTtJQUUvRixPQUFPLENBQUMsQ0FBQyxzQkFBc0IsQ0FDN0IsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQStCLENBQUMsQ0FDOUQsQ0FBQyxJQUFnQixDQUFDLENBQUE7QUFDckIsQ0FBQyxDQUFBO0FBRUQsdUVBQXVFO0FBQ3ZFLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUNyQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUU7SUFDN0IsTUFBTSxFQUFFLFlBQVksQ0FBQyxJQUFJLEVBQUU7SUFDM0IsTUFBTSxFQUFFLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztDQUN2RCxDQUFDLENBQ0gsQ0FBQTtBQUVEOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENB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
|
package/package.json
CHANGED
package/src/Schema/ext.ts
CHANGED
|
@@ -1,11 +1,18 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
2
|
/* eslint-disable @typescript-eslint/no-unsafe-return */
|
|
3
|
-
import { Effect, Option, pipe, Schema, type SchemaAST, SchemaGetter, SchemaIssue,
|
|
3
|
+
import { Effect, Option, pipe, Schema, type SchemaAST, SchemaGetter, SchemaIssue, SchemaTransformation, ServiceMap } from "effect"
|
|
4
4
|
import * as S from "effect/Schema"
|
|
5
5
|
import { type NonEmptyReadonlyArray } from "../Array.js"
|
|
6
6
|
import { extendM, typedKeysOf } from "../utils.js"
|
|
7
7
|
import { type AST } from "./schema.js"
|
|
8
8
|
|
|
9
|
+
type ProvidedCodec<Self extends S.Top, R> = S.Codec<
|
|
10
|
+
Self["Type"],
|
|
11
|
+
Self["Encoded"],
|
|
12
|
+
Exclude<Self["DecodingServices"], R>,
|
|
13
|
+
Exclude<Self["EncodingServices"], R>
|
|
14
|
+
>
|
|
15
|
+
|
|
9
16
|
// TODO: v4 migration — withConstructorDefault signature changed, propertySignature removed
|
|
10
17
|
// Constraint relaxed from `Self extends S.Top & S.WithoutConstructorDefault` to `Self extends S.Top`
|
|
11
18
|
// because `.pipe()` widens the schema type to `Top` which doesn't satisfy `WithoutConstructorDefault`.
|
|
@@ -69,7 +76,7 @@ export const Literal = <Literals extends NonEmptyReadonlyArray<AST.LiteralValue>
|
|
|
69
76
|
/**
|
|
70
77
|
* Like the default Schema `Array` but with `withDefault` => []
|
|
71
78
|
*/
|
|
72
|
-
export function Array<
|
|
79
|
+
export function Array<ValueSchema extends S.Top>(value: ValueSchema) {
|
|
73
80
|
return pipe(
|
|
74
81
|
S.Array(value),
|
|
75
82
|
(s) => Object.assign(s, { withDefault: s.pipe(withDefaultConstructor(() => [])) })
|
|
@@ -79,7 +86,7 @@ export function Array<Value extends S.Top>(value: Value) {
|
|
|
79
86
|
/**
|
|
80
87
|
* Like the default Schema `Map` but with `withDefault` => []
|
|
81
88
|
*/
|
|
82
|
-
function Map_<
|
|
89
|
+
function Map_<KeySchema extends S.Top, ValueSchema extends S.Top>(input: { key: KeySchema; value: ValueSchema }) {
|
|
83
90
|
return pipe(
|
|
84
91
|
S.ReadonlyMap(input.key, input.value),
|
|
85
92
|
(s) => Object.assign(s, { withDefault: s.pipe(withDefaultConstructor(() => new global.Map())) })
|
|
@@ -91,18 +98,19 @@ export { Map_ as Map }
|
|
|
91
98
|
/**
|
|
92
99
|
* Like the default Schema `ReadonlySet` but with `withDefault` => new Set()
|
|
93
100
|
*/
|
|
94
|
-
export const ReadonlySet = <
|
|
101
|
+
export const ReadonlySet = <ValueSchema extends S.Top>(value: ValueSchema) =>
|
|
95
102
|
pipe(
|
|
96
103
|
S.ReadonlySet(value),
|
|
97
|
-
(s) =>
|
|
104
|
+
(s) =>
|
|
105
|
+
Object.assign(s, { withDefault: s.pipe(withDefaultConstructor(() => new Set<S.Schema.Type<ValueSchema>>())) })
|
|
98
106
|
)
|
|
99
107
|
|
|
100
108
|
/**
|
|
101
109
|
* Like the default Schema `ReadonlyMap` but with `withDefault` => new Map()
|
|
102
110
|
*/
|
|
103
|
-
export const ReadonlyMap = <
|
|
104
|
-
readonly key:
|
|
105
|
-
readonly value:
|
|
111
|
+
export const ReadonlyMap = <KeySchema extends S.Top, ValueSchema extends S.Top>(pair: {
|
|
112
|
+
readonly key: KeySchema
|
|
113
|
+
readonly value: ValueSchema
|
|
106
114
|
}) =>
|
|
107
115
|
pipe(
|
|
108
116
|
S.ReadonlyMap(pair.key, pair.value),
|
|
@@ -112,25 +120,24 @@ export const ReadonlyMap = <K extends S.Top, V extends S.Top>(pair: {
|
|
|
112
120
|
/**
|
|
113
121
|
* Like the default Schema `NullOr` but with `withDefault` => null
|
|
114
122
|
*/
|
|
115
|
-
export const NullOr = <
|
|
123
|
+
export const NullOr = <Schema extends S.Top>(self: Schema) =>
|
|
116
124
|
pipe(
|
|
117
125
|
S.NullOr(self),
|
|
118
126
|
(s) => Object.assign(s, { withDefault: s.pipe(withDefaultConstructor(() => null)) })
|
|
119
127
|
)
|
|
120
128
|
|
|
121
|
-
export const defaultDate =
|
|
129
|
+
export const defaultDate = <Schema extends S.Top>(schema: Schema) =>
|
|
130
|
+
schema.pipe(withDefaultConstructor(() => new global.Date()))
|
|
122
131
|
|
|
123
|
-
export const defaultBool =
|
|
132
|
+
export const defaultBool = <Schema extends S.Top>(schema: Schema) => schema.pipe(withDefaultConstructor(() => false))
|
|
124
133
|
|
|
125
|
-
export const defaultNullable = (
|
|
126
|
-
s: S.Top
|
|
127
|
-
) => s.pipe(withDefaultConstructor(() => null))
|
|
134
|
+
export const defaultNullable = <Schema extends S.Top>(schema: Schema) => schema.pipe(withDefaultConstructor(() => null))
|
|
128
135
|
|
|
129
|
-
export const defaultArray =
|
|
136
|
+
export const defaultArray = <Schema extends S.Top>(schema: Schema) => schema.pipe(withDefaultConstructor(() => []))
|
|
130
137
|
|
|
131
|
-
export const defaultMap =
|
|
138
|
+
export const defaultMap = <Schema extends S.Top>(schema: Schema) => schema.pipe(withDefaultConstructor(() => new Map()))
|
|
132
139
|
|
|
133
|
-
export const defaultSet =
|
|
140
|
+
export const defaultSet = <Schema extends S.Top>(schema: Schema) => schema.pipe(withDefaultConstructor(() => new Set()))
|
|
134
141
|
|
|
135
142
|
export const withDefaultMake = <Self extends S.Top>(s: Self) => {
|
|
136
143
|
const a = Object.assign(S.decodeSync(s as any) as WithDefaults<Self>, s)
|
|
@@ -240,29 +247,30 @@ export const transformToOrFail = <To extends S.Top, From extends S.Top, RD>(
|
|
|
240
247
|
)
|
|
241
248
|
)
|
|
242
249
|
|
|
243
|
-
// TODO: v4 migration — S.declare API changed (no [self] + decode/encode pattern)
|
|
244
|
-
// Need to find v4 equivalent for contextual schema wrapping
|
|
245
250
|
export const provide = <Self extends S.Top, R>(
|
|
246
251
|
self: Self,
|
|
247
252
|
context: ServiceMap.ServiceMap<R>
|
|
248
|
-
):
|
|
253
|
+
): ProvidedCodec<Self, R> => {
|
|
249
254
|
const prov = Effect.provide(context)
|
|
250
|
-
return
|
|
251
|
-
.
|
|
252
|
-
.
|
|
253
|
-
|
|
254
|
-
self,
|
|
255
|
-
SchemaTransformation.transformOrFail({
|
|
256
|
-
decode: (n: any) => prov(SchemaParser.decodeUnknownEffect(self)(n)),
|
|
257
|
-
encode: (n: any) => prov(SchemaParser.encodeUnknownEffect(self)(n))
|
|
258
|
-
}) as any
|
|
259
|
-
) as any
|
|
260
|
-
)
|
|
261
|
-
}
|
|
262
|
-
// TODO: v4 migration — ServiceMap.pick and S.declare pattern removed
|
|
263
|
-
export const contextFromServices = <Self extends S.Top, Tags extends readonly any[]>(
|
|
264
|
-
_self: Self,
|
|
265
|
-
..._services: Tags
|
|
266
|
-
): any => {
|
|
267
|
-
throw new Error("contextFromServices: not yet migrated to v4")
|
|
255
|
+
return self.pipe(
|
|
256
|
+
S.middlewareDecoding((effect) => prov(effect)),
|
|
257
|
+
S.middlewareEncoding((effect) => prov(effect))
|
|
258
|
+
) as ProvidedCodec<Self, R>
|
|
268
259
|
}
|
|
260
|
+
export const contextFromServices = <
|
|
261
|
+
Self extends S.Top,
|
|
262
|
+
Tags extends ReadonlyArray<ServiceMap.Key<any, any>>
|
|
263
|
+
>(
|
|
264
|
+
self: Self,
|
|
265
|
+
...services: Tags
|
|
266
|
+
): Effect.Effect<
|
|
267
|
+
ProvidedCodec<Self, ServiceMap.Service.Identifier<Tags[number]>>,
|
|
268
|
+
never,
|
|
269
|
+
ServiceMap.Service.Identifier<Tags[number]>
|
|
270
|
+
> =>
|
|
271
|
+
Effect.gen(function*() {
|
|
272
|
+
const context: ServiceMap.ServiceMap<ServiceMap.Service.Identifier<Tags[number]>> = ServiceMap.pick(...services)(
|
|
273
|
+
yield* Effect.services<ServiceMap.Service.Identifier<Tags[number]>>()
|
|
274
|
+
)
|
|
275
|
+
return provide(self, context)
|
|
276
|
+
})
|