effect-app 4.0.0-beta.51 → 4.0.0-beta.53
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/Operations.d.ts +3 -3
- package/dist/Schema/ext.d.ts +125 -44
- package/dist/Schema/ext.d.ts.map +1 -1
- package/dist/Schema/ext.js +120 -16
- package/dist/Schema.d.ts +1 -1
- package/dist/Schema.d.ts.map +1 -1
- package/dist/Schema.js +2 -2
- package/package.json +1 -1
- package/src/Schema/ext.ts +161 -19
- package/src/Schema.ts +1 -1
- package/test/schema.test.ts +115 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# @effect-app/prelude
|
|
2
2
|
|
|
3
|
+
## 4.0.0-beta.53
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- ee9694e: fix type issue?
|
|
8
|
+
|
|
9
|
+
## 4.0.0-beta.52
|
|
10
|
+
|
|
11
|
+
### Minor Changes
|
|
12
|
+
|
|
13
|
+
- 6252808: Add `ReadonlySetFromArray` and `ReadonlyMapFromArray` schema transformations that decode from annotated arrays to Set/Map. Update `ReadonlySet` and `ReadonlyMap` to use these internally.
|
|
14
|
+
|
|
3
15
|
## 4.0.0-beta.51
|
|
4
16
|
|
|
5
17
|
## 4.0.0-beta.50
|
package/dist/Operations.d.ts
CHANGED
|
@@ -96,9 +96,9 @@ declare const Operation_base: S.EnhancedClass<Operation, S.Struct<{
|
|
|
96
96
|
} & {
|
|
97
97
|
readonly tags: S.Literals<["OperationSuccess", "OperationFailure"]>;
|
|
98
98
|
}>;
|
|
99
|
-
createdAt: S.withConstructorDefault<S.
|
|
100
|
-
updatedAt: S.withConstructorDefault<import("effect/Schema").NullOr<S.
|
|
101
|
-
withDefault: S.withConstructorDefault<S.
|
|
99
|
+
createdAt: S.withConstructorDefault<S.DateFromString & S.WithoutConstructorDefault>;
|
|
100
|
+
updatedAt: S.withConstructorDefault<import("effect/Schema").NullOr<S.DateFromString & {
|
|
101
|
+
withDefault: S.withConstructorDefault<S.DateFromString & S.WithoutConstructorDefault>;
|
|
102
102
|
}> & S.WithoutConstructorDefault>;
|
|
103
103
|
}>, {}>;
|
|
104
104
|
export declare class Operation extends Operation_base {
|
package/dist/Schema/ext.d.ts
CHANGED
|
@@ -1,100 +1,180 @@
|
|
|
1
|
-
import { Effect,
|
|
1
|
+
import { Effect, type SchemaAST, SchemaIssue, SchemaTransformation, 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
5
|
type ProvidedCodec<Self extends S.Top, R> = S.Codec<Self["Type"], Self["Encoded"], Exclude<Self["DecodingServices"], R>, Exclude<Self["EncodingServices"], R>>;
|
|
6
6
|
export declare const withDefaultConstructor: <A>(makeDefault: () => NoInfer<A>) => <Self extends S.Top>(self: Self) => S.withConstructorDefault<Self & S.WithoutConstructorDefault>;
|
|
7
|
+
/**
|
|
8
|
+
* Formats a `Date` as an ISO 8601 string, returning `"Invalid Date"` for
|
|
9
|
+
* invalid dates instead of throwing.
|
|
10
|
+
*
|
|
11
|
+
* When to use:
|
|
12
|
+
* - You want a safe `toISOString()` that never throws.
|
|
13
|
+
*
|
|
14
|
+
* Behavior:
|
|
15
|
+
* - Returns `date.toISOString()` on success.
|
|
16
|
+
* - Returns `"Invalid Date"` if `toISOString()` throws (e.g. for
|
|
17
|
+
* `new Date(NaN)`).
|
|
18
|
+
* - Pure function; does not mutate input.
|
|
19
|
+
*
|
|
20
|
+
* **Example** (Safe date formatting)
|
|
21
|
+
*
|
|
22
|
+
* ```ts
|
|
23
|
+
* import { Formatter } from "effect"
|
|
24
|
+
*
|
|
25
|
+
* console.log(Formatter.formatDate(new Date("2024-01-15T10:30:00Z")))
|
|
26
|
+
* // 2024-01-15T10:30:00.000Z
|
|
27
|
+
*
|
|
28
|
+
* console.log(Formatter.formatDate(new Date("invalid")))
|
|
29
|
+
* // Invalid Date
|
|
30
|
+
* ```
|
|
31
|
+
*
|
|
32
|
+
* See also: {@link format}
|
|
33
|
+
*
|
|
34
|
+
* @internal
|
|
35
|
+
*/
|
|
36
|
+
export declare function formatDate(date: Date): string;
|
|
37
|
+
/**
|
|
38
|
+
* Decodes a `string` into a `Date` and encodes a `Date` back to a `string`.
|
|
39
|
+
*
|
|
40
|
+
* When to use this:
|
|
41
|
+
* - Parsing ISO 8601 date strings from APIs or user input.
|
|
42
|
+
*
|
|
43
|
+
* Behavior:
|
|
44
|
+
* - Decode: creates a `Date` from the string (like `new Date(s)`).
|
|
45
|
+
* - Encode: converts the `Date` to an ISO string (like `date.toISOString()`),
|
|
46
|
+
* returning `"Invalid Date"` for invalid dates.
|
|
47
|
+
*
|
|
48
|
+
* **Example** (Date from string)
|
|
49
|
+
*
|
|
50
|
+
* ```ts
|
|
51
|
+
* import { Schema, SchemaTransformation } from "effect"
|
|
52
|
+
*
|
|
53
|
+
* const schema = Schema.String.pipe(
|
|
54
|
+
* Schema.decodeTo(Schema.Date, SchemaTransformation.dateFromString)
|
|
55
|
+
* )
|
|
56
|
+
* ```
|
|
57
|
+
*
|
|
58
|
+
* See also:
|
|
59
|
+
* - {@link numberFromString}
|
|
60
|
+
* - {@link dateTimeUtcFromString}
|
|
61
|
+
*
|
|
62
|
+
* @category Coercions
|
|
63
|
+
* @since 4.0.0
|
|
64
|
+
*/
|
|
65
|
+
export declare const dateFromString: SchemaTransformation.Transformation<globalThis.Date, string>;
|
|
66
|
+
/**
|
|
67
|
+
* Schema type for {@link DateFromString}.
|
|
68
|
+
*
|
|
69
|
+
* @category Schemas
|
|
70
|
+
* @since 4.0.0
|
|
71
|
+
*/
|
|
72
|
+
export interface DateFromString extends S.decodeTo<S.Date, S.String> {
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* A transformation schema that parses an ISO 8601 string into a `Date`.
|
|
76
|
+
*
|
|
77
|
+
* Decoding:
|
|
78
|
+
* - A `string` is decoded as a `Date`.
|
|
79
|
+
*
|
|
80
|
+
* Encoding:
|
|
81
|
+
* - A `Date` is encoded as a `string`.
|
|
82
|
+
*
|
|
83
|
+
* @since 4.0.0
|
|
84
|
+
*/
|
|
85
|
+
export declare const DateFromString: DateFromString;
|
|
7
86
|
/**
|
|
8
87
|
* Like the default Schema `Date` but from String with `withDefault` => now
|
|
9
88
|
*/
|
|
10
|
-
export declare const Date:
|
|
11
|
-
withDefault:
|
|
89
|
+
export declare const Date: DateFromString & {
|
|
90
|
+
withDefault: S.withConstructorDefault<DateFromString & S.WithoutConstructorDefault>;
|
|
12
91
|
};
|
|
13
92
|
/**
|
|
14
93
|
* Like the default Schema `DateValid` but from String with `withDefault` => now
|
|
15
94
|
*/
|
|
16
|
-
export declare const DateValid:
|
|
17
|
-
withDefault:
|
|
95
|
+
export declare const DateValid: DateFromString & {
|
|
96
|
+
withDefault: S.withConstructorDefault<DateFromString & S.WithoutConstructorDefault>;
|
|
18
97
|
} & {
|
|
19
|
-
withDefault:
|
|
98
|
+
withDefault: S.withConstructorDefault<DateFromString & S.WithoutConstructorDefault>;
|
|
20
99
|
};
|
|
21
100
|
/**
|
|
22
101
|
* Like the default Schema `Boolean` but with `withDefault` => false
|
|
23
102
|
*/
|
|
24
|
-
export declare const Boolean:
|
|
25
|
-
withDefault:
|
|
103
|
+
export declare const Boolean: S.Boolean & {
|
|
104
|
+
withDefault: S.withConstructorDefault<S.Boolean & S.WithoutConstructorDefault>;
|
|
26
105
|
};
|
|
27
106
|
/**
|
|
28
107
|
* You probably want to use `Finite` instead of this.
|
|
29
108
|
* Like the default Schema `Number` but with `withDefault` => 0
|
|
30
109
|
*/
|
|
31
|
-
export declare const Number:
|
|
32
|
-
withDefault:
|
|
110
|
+
export declare const Number: S.Number & {
|
|
111
|
+
withDefault: S.withConstructorDefault<S.Number & S.WithoutConstructorDefault>;
|
|
33
112
|
};
|
|
34
113
|
/**
|
|
35
114
|
* Like the default Schema `Finite` but with `withDefault` => 0
|
|
36
115
|
*/
|
|
37
|
-
export declare const Finite:
|
|
38
|
-
withDefault:
|
|
116
|
+
export declare const Finite: S.Finite & {
|
|
117
|
+
withDefault: S.withConstructorDefault<S.Finite & S.WithoutConstructorDefault>;
|
|
39
118
|
};
|
|
40
119
|
/**
|
|
41
120
|
* Like the default Schema `Literal` but with `withDefault` => literals[0]
|
|
42
121
|
*/
|
|
43
|
-
export declare const Literal: <Literals extends NonEmptyReadonlyArray<AST.LiteralValue>>(...literals: Literals) =>
|
|
44
|
-
changeDefault: <A extends Literals[number]>(a: A) =>
|
|
122
|
+
export declare const Literal: <Literals extends NonEmptyReadonlyArray<AST.LiteralValue>>(...literals: Literals) => S.Literals<Literals> & {
|
|
123
|
+
changeDefault: <A extends Literals[number]>(a: A) => S.Literals<Literals> & {
|
|
45
124
|
Default: A;
|
|
46
|
-
withDefault:
|
|
125
|
+
withDefault: S.withConstructorDefault<S.Literals<Literals> & S.WithoutConstructorDefault>;
|
|
47
126
|
};
|
|
48
127
|
Default: (typeof literals)[0];
|
|
49
|
-
withDefault:
|
|
128
|
+
withDefault: S.withConstructorDefault<S.Literals<Literals> & S.WithoutConstructorDefault>;
|
|
50
129
|
};
|
|
51
130
|
/**
|
|
52
131
|
* Like the default Schema `Array` but with `withDefault` => []
|
|
53
132
|
*/
|
|
54
|
-
export declare function Array<ValueSchema extends S.Top>(value: ValueSchema):
|
|
55
|
-
withDefault:
|
|
133
|
+
export declare function Array<ValueSchema extends S.Top>(value: ValueSchema): S.$Array<ValueSchema> & {
|
|
134
|
+
withDefault: S.withConstructorDefault<S.$Array<ValueSchema> & S.WithoutConstructorDefault>;
|
|
56
135
|
};
|
|
57
136
|
/**
|
|
58
|
-
*
|
|
137
|
+
* An annotated `S.Array` of unique items that decodes to a `ReadonlySet`.
|
|
59
138
|
*/
|
|
60
|
-
declare
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
139
|
+
export declare const ReadonlySetFromArray: <ValueSchema extends S.Top>(value: ValueSchema) => S.Codec<ReadonlySet<ValueSchema["Type"]>, readonly ValueSchema["Encoded"][], ValueSchema["DecodingServices"], ValueSchema["EncodingServices"]>;
|
|
140
|
+
/**
|
|
141
|
+
* An annotated `S.Array` of key-value tuples that decodes to a `ReadonlyMap`.
|
|
142
|
+
*/
|
|
143
|
+
export declare const ReadonlyMapFromArray: <KeySchema extends S.Top, ValueSchema extends S.Top>(pair: {
|
|
144
|
+
readonly key: KeySchema;
|
|
145
|
+
readonly value: ValueSchema;
|
|
146
|
+
}) => S.Codec<ReadonlyMap<KeySchema["Type"], S.Schema.Type<ValueSchema>>, readonly (readonly [KeySchema["Encoded"], ValueSchema["Encoded"]])[], KeySchema["DecodingServices"] | ValueSchema["DecodingServices"], KeySchema["EncodingServices"] | ValueSchema["EncodingServices"]>;
|
|
67
147
|
/**
|
|
68
|
-
* Like the default Schema `ReadonlySet` but with `withDefault` => new Set()
|
|
148
|
+
* Like the default Schema `ReadonlySet` but from Array with `withDefault` => new Set()
|
|
69
149
|
*/
|
|
70
|
-
export declare const ReadonlySet: <ValueSchema extends S.Top>(value: ValueSchema) =>
|
|
71
|
-
withDefault:
|
|
150
|
+
export declare const ReadonlySet: <ValueSchema extends S.Top>(value: ValueSchema) => S.Codec<ReadonlySet<ValueSchema["Type"]>, readonly ValueSchema["Encoded"][], ValueSchema["DecodingServices"], ValueSchema["EncodingServices"]> & {
|
|
151
|
+
withDefault: S.withConstructorDefault<S.Codec<ReadonlySet<ValueSchema["Type"]>, readonly ValueSchema["Encoded"][], ValueSchema["DecodingServices"], ValueSchema["EncodingServices"]> & S.WithoutConstructorDefault>;
|
|
72
152
|
};
|
|
73
153
|
/**
|
|
74
|
-
* Like the default Schema `ReadonlyMap` but with `withDefault` => new Map()
|
|
154
|
+
* Like the default Schema `ReadonlyMap` but from Array with `withDefault` => new Map()
|
|
75
155
|
*/
|
|
76
156
|
export declare const ReadonlyMap: <KeySchema extends S.Top, ValueSchema extends S.Top>(pair: {
|
|
77
157
|
readonly key: KeySchema;
|
|
78
158
|
readonly value: ValueSchema;
|
|
79
|
-
}) =>
|
|
80
|
-
withDefault:
|
|
159
|
+
}) => S.Codec<ReadonlyMap<KeySchema["Type"], S.Schema.Type<ValueSchema>>, readonly (readonly [KeySchema["Encoded"], ValueSchema["Encoded"]])[], KeySchema["DecodingServices"] | ValueSchema["DecodingServices"], KeySchema["EncodingServices"] | ValueSchema["EncodingServices"]> & {
|
|
160
|
+
withDefault: S.withConstructorDefault<S.Codec<ReadonlyMap<KeySchema["Type"], S.Schema.Type<ValueSchema>>, readonly (readonly [KeySchema["Encoded"], ValueSchema["Encoded"]])[], KeySchema["DecodingServices"] | ValueSchema["DecodingServices"], KeySchema["EncodingServices"] | ValueSchema["EncodingServices"]> & S.WithoutConstructorDefault>;
|
|
81
161
|
};
|
|
82
162
|
/**
|
|
83
163
|
* Like the default Schema `NullOr` but with `withDefault` => null
|
|
84
164
|
*/
|
|
85
|
-
export declare const NullOr: <Schema extends S.Top>(self: Schema) =>
|
|
86
|
-
withDefault:
|
|
165
|
+
export declare const NullOr: <Schema extends S.Top>(self: Schema) => S.NullOr<Schema> & {
|
|
166
|
+
withDefault: S.withConstructorDefault<S.NullOr<Schema> & S.WithoutConstructorDefault>;
|
|
87
167
|
};
|
|
88
|
-
export declare const defaultDate: <Schema extends S.Top>(schema: Schema) =>
|
|
89
|
-
export declare const defaultBool: <Schema extends S.Top>(schema: Schema) =>
|
|
90
|
-
export declare const defaultNullable: <Schema extends S.Top>(schema: Schema) =>
|
|
91
|
-
export declare const defaultArray: <Schema extends S.Top>(schema: Schema) =>
|
|
92
|
-
export declare const defaultMap: <Schema extends S.Top>(schema: Schema) =>
|
|
93
|
-
export declare const defaultSet: <Schema extends S.Top>(schema: Schema) =>
|
|
168
|
+
export declare const defaultDate: <Schema extends S.Top>(schema: Schema) => S.withConstructorDefault<Schema & S.WithoutConstructorDefault>;
|
|
169
|
+
export declare const defaultBool: <Schema extends S.Top>(schema: Schema) => S.withConstructorDefault<Schema & S.WithoutConstructorDefault>;
|
|
170
|
+
export declare const defaultNullable: <Schema extends S.Top>(schema: Schema) => S.withConstructorDefault<Schema & S.WithoutConstructorDefault>;
|
|
171
|
+
export declare const defaultArray: <Schema extends S.Top>(schema: Schema) => S.withConstructorDefault<Schema & S.WithoutConstructorDefault>;
|
|
172
|
+
export declare const defaultMap: <Schema extends S.Top>(schema: Schema) => S.withConstructorDefault<Schema & S.WithoutConstructorDefault>;
|
|
173
|
+
export declare const defaultSet: <Schema extends S.Top>(schema: Schema) => S.withConstructorDefault<Schema & S.WithoutConstructorDefault>;
|
|
94
174
|
export declare const withDefaultMake: <Self extends S.Top>(s: Self) => WithDefaults<Self> & Self;
|
|
95
175
|
export type WithDefaults<Self extends S.Top> = (i: Self["Encoded"], options?: SchemaAST.ParseOptions) => Self["Type"];
|
|
96
|
-
export declare const inputDate:
|
|
97
|
-
withDefault:
|
|
176
|
+
export declare const inputDate: S.Codec<Date, string | Date, never, never> & {
|
|
177
|
+
withDefault: S.withConstructorDefault<S.Codec<Date, string | Date, never, never> & S.WithoutConstructorDefault>;
|
|
98
178
|
};
|
|
99
179
|
export interface UnionBrand {
|
|
100
180
|
}
|
|
@@ -105,9 +185,10 @@ export declare function makeExactOptional<NER extends S.Struct.Fields>(t: NER):
|
|
|
105
185
|
[K in keyof NER]: NER[K] extends S.Top ? ReturnType<typeof S.optionalKey<NER[K] & S.Top>> : any;
|
|
106
186
|
};
|
|
107
187
|
/** A version of transform which is only a one way mapping of From->To */
|
|
108
|
-
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"]) =>
|
|
188
|
+
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"]) => S.decodeTo<To, From, never, never>;
|
|
109
189
|
/** A version of transformOrFail which is only a one way mapping of From->To */
|
|
110
|
-
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>) =>
|
|
190
|
+
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>) => S.decodeTo<To, From, RD, never>;
|
|
111
191
|
export declare const provide: <Self extends S.Top, R>(self: Self, context: ServiceMap.ServiceMap<R>) => ProvidedCodec<Self, R>;
|
|
112
192
|
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]>>;
|
|
193
|
+
export {};
|
|
113
194
|
//# 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,
|
|
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,
|
|
3
|
+
import { Effect, Option, pipe, SchemaGetter, SchemaIssue, SchemaTransformation, ServiceMap } from "effect";
|
|
4
4
|
import * as S from "effect/Schema";
|
|
5
5
|
import { isDateValid } from "effect/Schema";
|
|
6
6
|
import { extendM, typedKeysOf } from "../utils.js";
|
|
@@ -12,10 +12,93 @@ export const withDefaultConstructor = (makeDefault) => (self) => {
|
|
|
12
12
|
return S.withConstructorDefault(() => Option.some(makeDefault()))(self);
|
|
13
13
|
};
|
|
14
14
|
// TODO: v4 migration - Date is no longer by default encoded to string.
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
15
|
+
/*
|
|
16
|
+
in v4, there's the notion of `toCodecJson`, as a declaration and as a schema transformer.
|
|
17
|
+
this means that Date, Map/Set, etc, remain the same type Encoded as Decoded, but when transformed to and from JSON, will go through
|
|
18
|
+
the toCodecJson transformation, which for e.g Date will be the dateFromString transformation.
|
|
19
|
+
|
|
20
|
+
While this is a cool feature, our stack (especially the Store/Repository api) is based on having an Encoded shape representing the JSON shape, so we revert back to that for now.
|
|
21
|
+
*/
|
|
22
|
+
/**
|
|
23
|
+
* Formats a `Date` as an ISO 8601 string, returning `"Invalid Date"` for
|
|
24
|
+
* invalid dates instead of throwing.
|
|
25
|
+
*
|
|
26
|
+
* When to use:
|
|
27
|
+
* - You want a safe `toISOString()` that never throws.
|
|
28
|
+
*
|
|
29
|
+
* Behavior:
|
|
30
|
+
* - Returns `date.toISOString()` on success.
|
|
31
|
+
* - Returns `"Invalid Date"` if `toISOString()` throws (e.g. for
|
|
32
|
+
* `new Date(NaN)`).
|
|
33
|
+
* - Pure function; does not mutate input.
|
|
34
|
+
*
|
|
35
|
+
* **Example** (Safe date formatting)
|
|
36
|
+
*
|
|
37
|
+
* ```ts
|
|
38
|
+
* import { Formatter } from "effect"
|
|
39
|
+
*
|
|
40
|
+
* console.log(Formatter.formatDate(new Date("2024-01-15T10:30:00Z")))
|
|
41
|
+
* // 2024-01-15T10:30:00.000Z
|
|
42
|
+
*
|
|
43
|
+
* console.log(Formatter.formatDate(new Date("invalid")))
|
|
44
|
+
* // Invalid Date
|
|
45
|
+
* ```
|
|
46
|
+
*
|
|
47
|
+
* See also: {@link format}
|
|
48
|
+
*
|
|
49
|
+
* @internal
|
|
50
|
+
*/
|
|
51
|
+
export function formatDate(date) {
|
|
52
|
+
try {
|
|
53
|
+
return date.toISOString();
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
return "Invalid Date";
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Decodes a `string` into a `Date` and encodes a `Date` back to a `string`.
|
|
61
|
+
*
|
|
62
|
+
* When to use this:
|
|
63
|
+
* - Parsing ISO 8601 date strings from APIs or user input.
|
|
64
|
+
*
|
|
65
|
+
* Behavior:
|
|
66
|
+
* - Decode: creates a `Date` from the string (like `new Date(s)`).
|
|
67
|
+
* - Encode: converts the `Date` to an ISO string (like `date.toISOString()`),
|
|
68
|
+
* returning `"Invalid Date"` for invalid dates.
|
|
69
|
+
*
|
|
70
|
+
* **Example** (Date from string)
|
|
71
|
+
*
|
|
72
|
+
* ```ts
|
|
73
|
+
* import { Schema, SchemaTransformation } from "effect"
|
|
74
|
+
*
|
|
75
|
+
* const schema = Schema.String.pipe(
|
|
76
|
+
* Schema.decodeTo(Schema.Date, SchemaTransformation.dateFromString)
|
|
77
|
+
* )
|
|
78
|
+
* ```
|
|
79
|
+
*
|
|
80
|
+
* See also:
|
|
81
|
+
* - {@link numberFromString}
|
|
82
|
+
* - {@link dateTimeUtcFromString}
|
|
83
|
+
*
|
|
84
|
+
* @category Coercions
|
|
85
|
+
* @since 4.0.0
|
|
86
|
+
*/
|
|
87
|
+
export const dateFromString = new SchemaTransformation
|
|
88
|
+
.Transformation(SchemaGetter.Date(), SchemaGetter.transform(formatDate));
|
|
89
|
+
const DateString = S.String.annotate({ expected: "a string in ISO 8601 format that will be decoded as a Date" });
|
|
90
|
+
/**
|
|
91
|
+
* A transformation schema that parses an ISO 8601 string into a `Date`.
|
|
92
|
+
*
|
|
93
|
+
* Decoding:
|
|
94
|
+
* - A `string` is decoded as a `Date`.
|
|
95
|
+
*
|
|
96
|
+
* Encoding:
|
|
97
|
+
* - A `Date` is encoded as a `string`.
|
|
98
|
+
*
|
|
99
|
+
* @since 4.0.0
|
|
100
|
+
*/
|
|
101
|
+
export const DateFromString = DateString.pipe(S.decodeTo(S.Date, dateFromString));
|
|
19
102
|
/**
|
|
20
103
|
* Like the default Schema `Date` but from String with `withDefault` => now
|
|
21
104
|
*/
|
|
@@ -63,20 +146,41 @@ export function Array(value) {
|
|
|
63
146
|
return pipe(S.Array(value), (s) => Object.assign(s, { withDefault: s.pipe(withDefaultConstructor(() => [])) }));
|
|
64
147
|
}
|
|
65
148
|
/**
|
|
66
|
-
*
|
|
149
|
+
* An annotated `S.Array` of unique items that decodes to a `ReadonlySet`.
|
|
67
150
|
*/
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
151
|
+
export const ReadonlySetFromArray = (value) => {
|
|
152
|
+
const from = S
|
|
153
|
+
.Array(value)
|
|
154
|
+
.annotate({ expected: "an array of unique items that will be decoded as a ReadonlySet" });
|
|
155
|
+
const to = S.instanceOf(Set);
|
|
156
|
+
const schema = from.pipe(S.decodeTo(to, SchemaTransformation.transform({
|
|
157
|
+
decode: (arr) => new Set(arr),
|
|
158
|
+
encode: (set) => [...set]
|
|
159
|
+
})));
|
|
160
|
+
return S.revealCodec(schema);
|
|
161
|
+
};
|
|
162
|
+
/**
|
|
163
|
+
* An annotated `S.Array` of key-value tuples that decodes to a `ReadonlyMap`.
|
|
164
|
+
*/
|
|
165
|
+
export const ReadonlyMapFromArray = (pair) => {
|
|
166
|
+
const from = S
|
|
167
|
+
.Array(S.Tuple([pair.key, pair.value]))
|
|
168
|
+
.annotate({ expected: "an array of key-value tuples that will be decoded as a ReadonlyMap" });
|
|
169
|
+
const to = S.instanceOf(Map);
|
|
170
|
+
const schema = from.pipe(S.decodeTo(to, SchemaTransformation.transform({
|
|
171
|
+
decode: (arr) => new Map(arr),
|
|
172
|
+
encode: (map) => [...map.entries()] // fu
|
|
173
|
+
})));
|
|
174
|
+
return S.revealCodec(schema);
|
|
175
|
+
};
|
|
72
176
|
/**
|
|
73
|
-
* Like the default Schema `ReadonlySet` but with `withDefault` => new Set()
|
|
177
|
+
* Like the default Schema `ReadonlySet` but from Array with `withDefault` => new Set()
|
|
74
178
|
*/
|
|
75
|
-
export const ReadonlySet = (value) => pipe(
|
|
179
|
+
export const ReadonlySet = (value) => pipe(ReadonlySetFromArray(value), (s) => Object.assign(s, { withDefault: s.pipe(withDefaultConstructor(() => new Set())) }));
|
|
76
180
|
/**
|
|
77
|
-
* Like the default Schema `ReadonlyMap` but with `withDefault` => new Map()
|
|
181
|
+
* Like the default Schema `ReadonlyMap` but from Array with `withDefault` => new Map()
|
|
78
182
|
*/
|
|
79
|
-
export const ReadonlyMap = (pair) => pipe(
|
|
183
|
+
export const ReadonlyMap = (pair) => pipe(ReadonlyMapFromArray(pair), (s) => Object.assign(s, { withDefault: s.pipe(withDefaultConstructor(() => new Map())) }));
|
|
80
184
|
/**
|
|
81
185
|
* Like the default Schema `NullOr` but with `withDefault` => null
|
|
82
186
|
*/
|
|
@@ -127,7 +231,7 @@ export const transformTo = (from, to, decode) => from.pipe(S.decodeTo(to, Schema
|
|
|
127
231
|
})));
|
|
128
232
|
/** A version of transformOrFail which is only a one way mapping of From->To */
|
|
129
233
|
export const transformToOrFail = (from, to, decode) => from.pipe(S.decodeTo(to, SchemaTransformation.transformOrFail({
|
|
130
|
-
decode
|
|
234
|
+
decode,
|
|
131
235
|
encode: (i) => Effect.fail(new SchemaIssue.Forbidden(Option.some(i), { message: "One way schema transformation, encoding is not allowed" }))
|
|
132
236
|
})));
|
|
133
237
|
export const provide = (self, context) => {
|
|
@@ -138,4 +242,4 @@ export const contextFromServices = (self, ...services) => Effect.gen(function* (
|
|
|
138
242
|
const context = ServiceMap.pick(...services)(yield* Effect.services());
|
|
139
243
|
return provide(self, context);
|
|
140
244
|
});
|
|
141
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL1NjaGVtYS9leHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELHdEQUF3RDtBQUN4RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFrQixZQUFZLEVBQUUsV0FBVyxFQUFFLG9CQUFvQixFQUFFLFVBQVUsRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUNsSSxPQUFPLEtBQUssQ0FBQyxNQUFNLGVBQWUsQ0FBQTtBQUNsQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBRTNDLE9BQU8sRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBVWxELDJGQUEyRjtBQUMzRixxR0FBcUc7QUFDckcsdUdBQXVHO0FBQ3ZHLDRHQUE0RztBQUM1RyxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxDQUNwQyxXQUE2QixFQUM3QixFQUFFLENBQ0osQ0FBcUIsSUFBVSxFQUFnRSxFQUFFO0lBRS9GLE9BQU8sQ0FBQyxDQUFDLHNCQUFzQixDQUM3QixHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBK0IsQ0FBQyxDQUM5RCxDQUFDLElBQWdCLENBQUMsQ0FBQTtBQUNyQixDQUFDLENBQUE7QUFFRCx1RUFBdUU7QUFDdkUsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQ3JDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRTtJQUM3QixNQUFNLEVBQUUsWUFBWSxDQUFDLElBQUksRUFBRTtJQUMzQixNQUFNLEVBQUUsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0NBQ3ZELENBQUMsQ0FDSCxDQUFBO0FBRUQ7O0dBRUc7QUFDSCxN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
|
|
245
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL1NjaGVtYS9leHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELHdEQUF3RDtBQUN4RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQWtCLFlBQVksRUFBRSxXQUFXLEVBQUUsb0JBQW9CLEVBQUUsVUFBVSxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBQzFILE9BQU8sS0FBSyxDQUFDLE1BQU0sZUFBZSxDQUFBO0FBQ2xDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFFM0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFVbEQsMkZBQTJGO0FBQzNGLHFHQUFxRztBQUNyRyx1R0FBdUc7QUFDdkcsNEdBQTRHO0FBQzVHLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLENBQ3BDLFdBQTZCLEVBQzdCLEVBQUUsQ0FDSixDQUFxQixJQUFVLEVBQWdFLEVBQUU7SUFFL0YsT0FBTyxDQUFDLENBQUMsc0JBQXNCLENBQzdCLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUErQixDQUFDLENBQzlELENBQUMsSUFBZ0IsQ0FBQyxDQUFBO0FBQ3JCLENBQUMsQ0FBQTtBQUVELHVFQUF1RTtBQUN2RTs7Ozs7O0VBTUU7QUFFRjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTRCRztBQUNILE1BQU0sVUFBVSxVQUFVLENBQUMsSUFBVTtJQUNuQyxJQUFJLENBQUM7UUFDSCxPQUFPLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQTtJQUMzQixDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxjQUFjLENBQUE7SUFDdkIsQ0FBQztBQUNILENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkJHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sY0FB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
|
package/dist/Schema.d.ts
CHANGED
|
@@ -7,7 +7,7 @@ export * from "effect/Schema";
|
|
|
7
7
|
export * from "./Schema/Class.js";
|
|
8
8
|
export { Class, TaggedClass } from "./Schema/Class.js";
|
|
9
9
|
export { fromBrand, nominal } from "./Schema/brand.js";
|
|
10
|
-
export { Array, Boolean, Date, DateValid, Finite, Literal,
|
|
10
|
+
export { Array, Boolean, Date, DateValid, Finite, Literal, NullOr, Number, ReadonlyMap, ReadonlySet } from "./Schema/ext.js";
|
|
11
11
|
export { Int, NonNegativeInt } from "./Schema/numbers.js";
|
|
12
12
|
export * from "./Schema/email.js";
|
|
13
13
|
export * from "./Schema/ext.js";
|
package/dist/Schema.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Schema.d.ts","sourceRoot":"","sources":["../src/Schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/C,OAAO,KAAK,CAAC,MAAM,eAAe,CAAA;AAClC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAEvD,OAAO,EAAE,KAAK,IAAI,MAAM,EAAE,KAAK,KAAK,IAAI,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAE5E,OAAO,EAAE,WAAW,IAAI,YAAY,EAAE,KAAK,WAAW,IAAI,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAG1G,cAAc,eAAe,CAAA;AAE7B,cAAc,mBAAmB,CAAA;AACjC,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAEtD,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"Schema.d.ts","sourceRoot":"","sources":["../src/Schema.ts"],"names":[],"mappings":"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"}
|
package/dist/Schema.js
CHANGED
|
@@ -9,7 +9,7 @@ export * from "effect/Schema";
|
|
|
9
9
|
export * from "./Schema/Class.js";
|
|
10
10
|
export { Class, TaggedClass } from "./Schema/Class.js";
|
|
11
11
|
export { fromBrand, nominal } from "./Schema/brand.js";
|
|
12
|
-
export { Array, Boolean, Date, DateValid, Finite, Literal,
|
|
12
|
+
export { Array, Boolean, Date, DateValid, Finite, Literal, NullOr, Number, ReadonlyMap, ReadonlySet } from "./Schema/ext.js";
|
|
13
13
|
export { Int, NonNegativeInt } from "./Schema/numbers.js";
|
|
14
14
|
export * from "./Schema/email.js";
|
|
15
15
|
export * from "./Schema/ext.js";
|
|
@@ -74,4 +74,4 @@ export const tags = (self) => S.Literals(self.map(getTagFromAST));
|
|
|
74
74
|
const extendTaggedUnionWithTags = (schema) => extendM(schema.pipe(S.toTaggedUnion("_tag")), () => ({ tags: tags(schema.members) }));
|
|
75
75
|
export const ExtendTaggedUnion = (schema) => extendTaggedUnionWithTags(schema);
|
|
76
76
|
export const TaggedUnion = (...a) => extendTaggedUnionWithTags(S.Union(a));
|
|
77
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
77
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2NoZW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1NjaGVtYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFlLE1BQU0sUUFBUSxDQUFBO0FBQy9DLE9BQU8sS0FBSyxDQUFDLE1BQU0sZUFBZSxDQUFBO0FBRWxDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFDckMsT0FBTyxFQUFFLEtBQUssSUFBSSxNQUFNLEVBQTJCLE1BQU0sbUJBQW1CLENBQUE7QUFDNUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQ2pELE9BQU8sRUFBRSxXQUFXLElBQUksWUFBWSxFQUF1QyxNQUFNLHlCQUF5QixDQUFBO0FBQzFHLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFFcEMsY0FBYyxlQUFlLENBQUE7QUFFN0IsY0FBYyxtQkFBbUIsQ0FBQTtBQUNqQyxPQUFPLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBRXRELE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFDdEQsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQzVILE9BQU8sRUFBRSxHQUFHLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFFekQsY0FBYyxtQkFBbUIsQ0FBQTtBQUNqQyxjQUFjLGlCQUFpQixDQUFBO0FBQy9CLGNBQWMseUJBQXlCLENBQUE7QUFDdkMsY0FBYyxxQkFBcUIsQ0FBQTtBQUNuQyxjQUFjLHlCQUF5QixDQUFBO0FBQ3ZDLGNBQWMsb0JBQW9CLENBQUE7QUFDbEMsY0FBYywrQkFB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
|
package/package.json
CHANGED
package/src/Schema/ext.ts
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,
|
|
3
|
+
import { Effect, Option, pipe, type SchemaAST, SchemaGetter, SchemaIssue, SchemaTransformation, ServiceMap } from "effect"
|
|
4
4
|
import * as S from "effect/Schema"
|
|
5
5
|
import { isDateValid } from "effect/Schema"
|
|
6
6
|
import { type NonEmptyReadonlyArray } from "../Array.js"
|
|
@@ -29,13 +29,108 @@ export const withDefaultConstructor = <A>(
|
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
// TODO: v4 migration - Date is no longer by default encoded to string.
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
32
|
+
/*
|
|
33
|
+
in v4, there's the notion of `toCodecJson`, as a declaration and as a schema transformer.
|
|
34
|
+
this means that Date, Map/Set, etc, remain the same type Encoded as Decoded, but when transformed to and from JSON, will go through
|
|
35
|
+
the toCodecJson transformation, which for e.g Date will be the dateFromString transformation.
|
|
36
|
+
|
|
37
|
+
While this is a cool feature, our stack (especially the Store/Repository api) is based on having an Encoded shape representing the JSON shape, so we revert back to that for now.
|
|
38
|
+
*/
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Formats a `Date` as an ISO 8601 string, returning `"Invalid Date"` for
|
|
42
|
+
* invalid dates instead of throwing.
|
|
43
|
+
*
|
|
44
|
+
* When to use:
|
|
45
|
+
* - You want a safe `toISOString()` that never throws.
|
|
46
|
+
*
|
|
47
|
+
* Behavior:
|
|
48
|
+
* - Returns `date.toISOString()` on success.
|
|
49
|
+
* - Returns `"Invalid Date"` if `toISOString()` throws (e.g. for
|
|
50
|
+
* `new Date(NaN)`).
|
|
51
|
+
* - Pure function; does not mutate input.
|
|
52
|
+
*
|
|
53
|
+
* **Example** (Safe date formatting)
|
|
54
|
+
*
|
|
55
|
+
* ```ts
|
|
56
|
+
* import { Formatter } from "effect"
|
|
57
|
+
*
|
|
58
|
+
* console.log(Formatter.formatDate(new Date("2024-01-15T10:30:00Z")))
|
|
59
|
+
* // 2024-01-15T10:30:00.000Z
|
|
60
|
+
*
|
|
61
|
+
* console.log(Formatter.formatDate(new Date("invalid")))
|
|
62
|
+
* // Invalid Date
|
|
63
|
+
* ```
|
|
64
|
+
*
|
|
65
|
+
* See also: {@link format}
|
|
66
|
+
*
|
|
67
|
+
* @internal
|
|
68
|
+
*/
|
|
69
|
+
export function formatDate(date: Date): string {
|
|
70
|
+
try {
|
|
71
|
+
return date.toISOString()
|
|
72
|
+
} catch {
|
|
73
|
+
return "Invalid Date"
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Decodes a `string` into a `Date` and encodes a `Date` back to a `string`.
|
|
79
|
+
*
|
|
80
|
+
* When to use this:
|
|
81
|
+
* - Parsing ISO 8601 date strings from APIs or user input.
|
|
82
|
+
*
|
|
83
|
+
* Behavior:
|
|
84
|
+
* - Decode: creates a `Date` from the string (like `new Date(s)`).
|
|
85
|
+
* - Encode: converts the `Date` to an ISO string (like `date.toISOString()`),
|
|
86
|
+
* returning `"Invalid Date"` for invalid dates.
|
|
87
|
+
*
|
|
88
|
+
* **Example** (Date from string)
|
|
89
|
+
*
|
|
90
|
+
* ```ts
|
|
91
|
+
* import { Schema, SchemaTransformation } from "effect"
|
|
92
|
+
*
|
|
93
|
+
* const schema = Schema.String.pipe(
|
|
94
|
+
* Schema.decodeTo(Schema.Date, SchemaTransformation.dateFromString)
|
|
95
|
+
* )
|
|
96
|
+
* ```
|
|
97
|
+
*
|
|
98
|
+
* See also:
|
|
99
|
+
* - {@link numberFromString}
|
|
100
|
+
* - {@link dateTimeUtcFromString}
|
|
101
|
+
*
|
|
102
|
+
* @category Coercions
|
|
103
|
+
* @since 4.0.0
|
|
104
|
+
*/
|
|
105
|
+
export const dateFromString: SchemaTransformation.Transformation<globalThis.Date, string> = new SchemaTransformation
|
|
106
|
+
.Transformation(
|
|
107
|
+
SchemaGetter.Date(),
|
|
108
|
+
SchemaGetter.transform(formatDate)
|
|
37
109
|
)
|
|
38
110
|
|
|
111
|
+
const DateString = S.String.annotate({ expected: "a string in ISO 8601 format that will be decoded as a Date" })
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Schema type for {@link DateFromString}.
|
|
115
|
+
*
|
|
116
|
+
* @category Schemas
|
|
117
|
+
* @since 4.0.0
|
|
118
|
+
*/
|
|
119
|
+
export interface DateFromString extends S.decodeTo<S.Date, S.String> {}
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* A transformation schema that parses an ISO 8601 string into a `Date`.
|
|
123
|
+
*
|
|
124
|
+
* Decoding:
|
|
125
|
+
* - A `string` is decoded as a `Date`.
|
|
126
|
+
*
|
|
127
|
+
* Encoding:
|
|
128
|
+
* - A `Date` is encoded as a `string`.
|
|
129
|
+
*
|
|
130
|
+
* @since 4.0.0
|
|
131
|
+
*/
|
|
132
|
+
export const DateFromString: DateFromString = DateString.pipe(S.decodeTo(S.Date, dateFromString))
|
|
133
|
+
|
|
39
134
|
/**
|
|
40
135
|
* Like the default Schema `Date` but from String with `withDefault` => now
|
|
41
136
|
*/
|
|
@@ -98,36 +193,83 @@ export function Array<ValueSchema extends S.Top>(value: ValueSchema) {
|
|
|
98
193
|
}
|
|
99
194
|
|
|
100
195
|
/**
|
|
101
|
-
*
|
|
196
|
+
* An annotated `S.Array` of unique items that decodes to a `ReadonlySet`.
|
|
102
197
|
*/
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
198
|
+
export const ReadonlySetFromArray = <ValueSchema extends S.Top>(value: ValueSchema): S.Codec<
|
|
199
|
+
ReadonlySet<ValueSchema["Type"]>,
|
|
200
|
+
readonly ValueSchema["Encoded"][],
|
|
201
|
+
ValueSchema["DecodingServices"],
|
|
202
|
+
ValueSchema["EncodingServices"]
|
|
203
|
+
> => {
|
|
204
|
+
const from = S
|
|
205
|
+
.Array(value)
|
|
206
|
+
.annotate({ expected: "an array of unique items that will be decoded as a ReadonlySet" })
|
|
207
|
+
const to = S.instanceOf(Set) as S.instanceOf<ReadonlySet<S.Schema.Type<ValueSchema>>>
|
|
208
|
+
const schema = from.pipe(
|
|
209
|
+
S.decodeTo(
|
|
210
|
+
to,
|
|
211
|
+
SchemaTransformation.transform({
|
|
212
|
+
decode: (arr) => new Set(arr) as ReadonlySet<S.Schema.Type<ValueSchema>>,
|
|
213
|
+
encode: (set) => [...set]
|
|
214
|
+
})
|
|
215
|
+
)
|
|
107
216
|
)
|
|
217
|
+
return S.revealCodec(schema)
|
|
108
218
|
}
|
|
109
219
|
|
|
110
|
-
|
|
220
|
+
/**
|
|
221
|
+
* An annotated `S.Array` of key-value tuples that decodes to a `ReadonlyMap`.
|
|
222
|
+
*/
|
|
223
|
+
export const ReadonlyMapFromArray = <KeySchema extends S.Top, ValueSchema extends S.Top>(pair: {
|
|
224
|
+
readonly key: KeySchema
|
|
225
|
+
readonly value: ValueSchema
|
|
226
|
+
}): S.Codec<
|
|
227
|
+
ReadonlyMap<KeySchema["Type"], S.Schema.Type<ValueSchema>>,
|
|
228
|
+
readonly (readonly [KeySchema["Encoded"], ValueSchema["Encoded"]])[],
|
|
229
|
+
KeySchema["DecodingServices"] | ValueSchema["DecodingServices"],
|
|
230
|
+
KeySchema["EncodingServices"] | ValueSchema["EncodingServices"]
|
|
231
|
+
> => {
|
|
232
|
+
const from = S
|
|
233
|
+
.Array(S.Tuple([pair.key, pair.value]))
|
|
234
|
+
.annotate({ expected: "an array of key-value tuples that will be decoded as a ReadonlyMap" })
|
|
235
|
+
const to = S.instanceOf(Map) as S.instanceOf<
|
|
236
|
+
ReadonlyMap<S.Schema.Type<KeySchema>, S.Schema.Type<ValueSchema>>
|
|
237
|
+
>
|
|
238
|
+
const schema = from.pipe(
|
|
239
|
+
S.decodeTo(
|
|
240
|
+
to,
|
|
241
|
+
SchemaTransformation.transform({
|
|
242
|
+
decode: (
|
|
243
|
+
arr
|
|
244
|
+
) => new Map(arr) as ReadonlyMap<S.Schema.Type<KeySchema>, S.Schema.Type<ValueSchema>>,
|
|
245
|
+
encode: (
|
|
246
|
+
map
|
|
247
|
+
) => [...map.entries()] as any // fu
|
|
248
|
+
})
|
|
249
|
+
)
|
|
250
|
+
)
|
|
251
|
+
return S.revealCodec(schema)
|
|
252
|
+
}
|
|
111
253
|
|
|
112
254
|
/**
|
|
113
|
-
* Like the default Schema `ReadonlySet` but with `withDefault` => new Set()
|
|
255
|
+
* Like the default Schema `ReadonlySet` but from Array with `withDefault` => new Set()
|
|
114
256
|
*/
|
|
115
257
|
export const ReadonlySet = <ValueSchema extends S.Top>(value: ValueSchema) =>
|
|
116
258
|
pipe(
|
|
117
|
-
|
|
259
|
+
ReadonlySetFromArray(value),
|
|
118
260
|
(s) =>
|
|
119
261
|
Object.assign(s, { withDefault: s.pipe(withDefaultConstructor(() => new Set<S.Schema.Type<ValueSchema>>())) })
|
|
120
262
|
)
|
|
121
263
|
|
|
122
264
|
/**
|
|
123
|
-
* Like the default Schema `ReadonlyMap` but with `withDefault` => new Map()
|
|
265
|
+
* Like the default Schema `ReadonlyMap` but from Array with `withDefault` => new Map()
|
|
124
266
|
*/
|
|
125
267
|
export const ReadonlyMap = <KeySchema extends S.Top, ValueSchema extends S.Top>(pair: {
|
|
126
268
|
readonly key: KeySchema
|
|
127
269
|
readonly value: ValueSchema
|
|
128
270
|
}) =>
|
|
129
271
|
pipe(
|
|
130
|
-
|
|
272
|
+
ReadonlyMapFromArray(pair),
|
|
131
273
|
(s) => Object.assign(s, { withDefault: s.pipe(withDefaultConstructor(() => new Map())) })
|
|
132
274
|
)
|
|
133
275
|
|
|
@@ -232,7 +374,7 @@ export const transformTo = <To extends S.Top, From extends S.Top>(
|
|
|
232
374
|
{ message: "One way schema transformation, encoding is not allowed" }
|
|
233
375
|
)
|
|
234
376
|
)
|
|
235
|
-
})
|
|
377
|
+
})
|
|
236
378
|
)
|
|
237
379
|
)
|
|
238
380
|
|
|
@@ -249,7 +391,7 @@ export const transformToOrFail = <To extends S.Top, From extends S.Top, RD>(
|
|
|
249
391
|
S.decodeTo(
|
|
250
392
|
to,
|
|
251
393
|
SchemaTransformation.transformOrFail({
|
|
252
|
-
decode
|
|
394
|
+
decode,
|
|
253
395
|
encode: (i: any) =>
|
|
254
396
|
Effect.fail(
|
|
255
397
|
new SchemaIssue.Forbidden(
|
|
@@ -257,7 +399,7 @@ export const transformToOrFail = <To extends S.Top, From extends S.Top, RD>(
|
|
|
257
399
|
{ message: "One way schema transformation, encoding is not allowed" }
|
|
258
400
|
)
|
|
259
401
|
)
|
|
260
|
-
})
|
|
402
|
+
})
|
|
261
403
|
)
|
|
262
404
|
)
|
|
263
405
|
|
package/src/Schema.ts
CHANGED
|
@@ -13,7 +13,7 @@ export * from "./Schema/Class.js"
|
|
|
13
13
|
export { Class, TaggedClass } from "./Schema/Class.js"
|
|
14
14
|
|
|
15
15
|
export { fromBrand, nominal } from "./Schema/brand.js"
|
|
16
|
-
export { Array, Boolean, Date, DateValid, Finite, Literal,
|
|
16
|
+
export { Array, Boolean, Date, DateValid, Finite, Literal, NullOr, Number, ReadonlyMap, ReadonlySet } from "./Schema/ext.js"
|
|
17
17
|
export { Int, NonNegativeInt } from "./Schema/numbers.js"
|
|
18
18
|
|
|
19
19
|
export * from "./Schema/email.js"
|
package/test/schema.test.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// import { generateFromArbitrary } from "@effect-app/infra/test"
|
|
2
2
|
import { Array, S } from "effect-app"
|
|
3
|
-
import { expect, expectTypeOf, test } from "vitest"
|
|
3
|
+
import { describe, expect, expectTypeOf, test } from "vitest"
|
|
4
4
|
|
|
5
5
|
const A = S.Struct({ a: S.NonEmptyString255, email: S.NullOr(S.Email) })
|
|
6
6
|
test("works", () => {
|
|
@@ -200,3 +200,117 @@ test("TaggedUnion with TaggedClass members", () => {
|
|
|
200
200
|
expect(schema.guards.Foo(new Bar({ count: 3 }))).toBe(false)
|
|
201
201
|
expect(schema.guards.Bar(new Bar({ count: 3 }))).toBe(true)
|
|
202
202
|
})
|
|
203
|
+
|
|
204
|
+
describe("ReadonlySetFromArray", () => {
|
|
205
|
+
test("decodes an array of strings to a Set", () => {
|
|
206
|
+
const schema = S.ReadonlySetFromArray(S.String)
|
|
207
|
+
const decoded = S.decodeUnknownSync(schema)(["a", "b", "c"])
|
|
208
|
+
expect(decoded).toEqual(new Set(["a", "b", "c"]))
|
|
209
|
+
})
|
|
210
|
+
|
|
211
|
+
test("encodes a Set back to an array", () => {
|
|
212
|
+
const schema = S.ReadonlySetFromArray(S.String)
|
|
213
|
+
const encoded = S.encodeSync(schema)(new Set(["a", "b"]))
|
|
214
|
+
expect(encoded).toEqual(["a", "b"])
|
|
215
|
+
})
|
|
216
|
+
|
|
217
|
+
test("decodes with NumberFromString as value", () => {
|
|
218
|
+
const schema = S.ReadonlySetFromArray(S.NumberFromString)
|
|
219
|
+
const decoded = S.decodeUnknownSync(schema)(["1", "2", "3"])
|
|
220
|
+
expect(decoded).toEqual(new Set([1, 2, 3]))
|
|
221
|
+
expectTypeOf(decoded).toEqualTypeOf<ReadonlySet<number>>()
|
|
222
|
+
})
|
|
223
|
+
|
|
224
|
+
test("encodes with NumberFromString as value", () => {
|
|
225
|
+
const schema = S.ReadonlySetFromArray(S.NumberFromString)
|
|
226
|
+
const encoded = S.encodeSync(schema)(new Set([1, 2, 3]))
|
|
227
|
+
expect(encoded).toEqual(["1", "2", "3"])
|
|
228
|
+
})
|
|
229
|
+
|
|
230
|
+
test("rejects invalid input", () => {
|
|
231
|
+
const schema = S.ReadonlySetFromArray(S.NumberFromString)
|
|
232
|
+
expect(() => S.decodeUnknownSync(schema)([1, 2])).toThrow()
|
|
233
|
+
})
|
|
234
|
+
})
|
|
235
|
+
|
|
236
|
+
describe("ReadonlyMapFromArray", () => {
|
|
237
|
+
test("decodes an array of tuples to a Map", () => {
|
|
238
|
+
const schema = S.ReadonlyMap({ key: S.String, value: S.Finite })
|
|
239
|
+
const decoded = S.decodeUnknownSync(schema)([["a", 1], ["b", 2]])
|
|
240
|
+
expect(decoded).toEqual(new Map([["a", 1], ["b", 2]]))
|
|
241
|
+
})
|
|
242
|
+
|
|
243
|
+
test("encodes a Map back to an array of tuples", () => {
|
|
244
|
+
const schema = S.ReadonlyMapFromArray({ key: S.String, value: S.Finite })
|
|
245
|
+
const encoded = S.encodeSync(schema)(new Map([["a", 1], ["b", 2]]))
|
|
246
|
+
expect(encoded).toEqual([["a", 1], ["b", 2]])
|
|
247
|
+
})
|
|
248
|
+
|
|
249
|
+
test("decodes with NumberFromString as key", () => {
|
|
250
|
+
const schema = S.ReadonlyMapFromArray({ key: S.NumberFromString, value: S.String })
|
|
251
|
+
const decoded = S.decodeUnknownSync(schema)([["1", "one"], ["2", "two"]])
|
|
252
|
+
expect(decoded).toEqual(new Map([[1, "one"], [2, "two"]]))
|
|
253
|
+
expectTypeOf(decoded).toEqualTypeOf<ReadonlyMap<number, string>>()
|
|
254
|
+
})
|
|
255
|
+
|
|
256
|
+
test("encodes with NumberFromString as key", () => {
|
|
257
|
+
const schema = S.ReadonlyMapFromArray({ key: S.NumberFromString, value: S.String })
|
|
258
|
+
const encoded = S.encodeSync(schema)(new Map([[1, "one"], [2, "two"]]))
|
|
259
|
+
expect(encoded).toEqual([["1", "one"], ["2", "two"]])
|
|
260
|
+
})
|
|
261
|
+
|
|
262
|
+
test("decodes with NumberFromString as value", () => {
|
|
263
|
+
const schema = S.ReadonlyMapFromArray({ key: S.String, value: S.NumberFromString })
|
|
264
|
+
const decoded = S.decodeUnknownSync(schema)([["a", "10"], ["b", "20"]])
|
|
265
|
+
expect(decoded).toEqual(new Map([["a", 10], ["b", 20]]))
|
|
266
|
+
expectTypeOf(decoded).toEqualTypeOf<ReadonlyMap<string, number>>()
|
|
267
|
+
})
|
|
268
|
+
|
|
269
|
+
test("encodes with NumberFromString as value", () => {
|
|
270
|
+
const schema = S.ReadonlyMapFromArray({ key: S.String, value: S.NumberFromString })
|
|
271
|
+
const encoded = S.encodeSync(schema)(new Map([["a", 10], ["b", 20]]))
|
|
272
|
+
expect(encoded).toEqual([["a", "10"], ["b", "20"]])
|
|
273
|
+
})
|
|
274
|
+
|
|
275
|
+
test("decodes with NumberFromString as both key and value", () => {
|
|
276
|
+
const schema = S.ReadonlyMapFromArray({ key: S.NumberFromString, value: S.NumberFromString })
|
|
277
|
+
const decoded = S.decodeUnknownSync(schema)([["1", "10"], ["2", "20"]])
|
|
278
|
+
expect(decoded).toEqual(new Map([[1, 10], [2, 20]]))
|
|
279
|
+
expectTypeOf(decoded).toEqualTypeOf<ReadonlyMap<number, number>>()
|
|
280
|
+
})
|
|
281
|
+
|
|
282
|
+
test("rejects invalid input", () => {
|
|
283
|
+
const schema = S.ReadonlyMapFromArray({ key: S.NumberFromString, value: S.String })
|
|
284
|
+
expect(() => S.decodeUnknownSync(schema)([[1, "val"]])).toThrow()
|
|
285
|
+
})
|
|
286
|
+
})
|
|
287
|
+
|
|
288
|
+
describe("ReadonlySet (with withDefault)", () => {
|
|
289
|
+
test("makeUnsafe provides withDefault", () => {
|
|
290
|
+
const schema = S.ReadonlySet(S.NumberFromString)
|
|
291
|
+
const struct = S.Struct({ items: schema.withDefault })
|
|
292
|
+
const made = struct.makeUnsafe({})
|
|
293
|
+
expect(made.items).toEqual(new Set())
|
|
294
|
+
})
|
|
295
|
+
|
|
296
|
+
test("decodes array with NumberFromString values", () => {
|
|
297
|
+
const schema = S.ReadonlySet(S.NumberFromString)
|
|
298
|
+
const decoded = S.decodeUnknownSync(schema)(["1", "2"])
|
|
299
|
+
expect(decoded).toEqual(new Set([1, 2]))
|
|
300
|
+
})
|
|
301
|
+
})
|
|
302
|
+
|
|
303
|
+
describe("ReadonlyMap (with withDefault)", () => {
|
|
304
|
+
test("makeUnsafe provides withDefault", () => {
|
|
305
|
+
const schema = S.ReadonlyMap({ key: S.NumberFromString, value: S.String })
|
|
306
|
+
const struct = S.Struct({ items: schema.withDefault })
|
|
307
|
+
const made = struct.makeUnsafe({})
|
|
308
|
+
expect(made.items).toEqual(new Map())
|
|
309
|
+
})
|
|
310
|
+
|
|
311
|
+
test("decodes array of tuples with NumberFromString keys", () => {
|
|
312
|
+
const schema = S.ReadonlyMap({ key: S.NumberFromString, value: S.String })
|
|
313
|
+
const decoded = S.decodeUnknownSync(schema)([["1", "one"]])
|
|
314
|
+
expect(decoded).toEqual(new Map([[1, "one"]]))
|
|
315
|
+
})
|
|
316
|
+
})
|