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 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
@@ -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.decodeTo<import("effect/Schema").Date, S.String, never, never> & S.WithoutConstructorDefault>;
100
- updatedAt: S.withConstructorDefault<import("effect/Schema").NullOr<S.decodeTo<import("effect/Schema").Date, S.String, never, never> & {
101
- withDefault: S.withConstructorDefault<S.decodeTo<import("effect/Schema").Date, S.String, never, never> & S.WithoutConstructorDefault>;
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 {
@@ -1,100 +1,180 @@
1
- import { Effect, Schema, type SchemaAST, SchemaIssue, ServiceMap } from "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: Schema.decodeTo<Schema.Date, Schema.String, never, never> & {
11
- withDefault: Schema.withConstructorDefault<Schema.decodeTo<Schema.Date, Schema.String, never, never> & Schema.WithoutConstructorDefault>;
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: Schema.decodeTo<Schema.Date, Schema.String, never, never> & {
17
- withDefault: Schema.withConstructorDefault<Schema.decodeTo<Schema.Date, Schema.String, never, never> & Schema.WithoutConstructorDefault>;
95
+ export declare const DateValid: DateFromString & {
96
+ withDefault: S.withConstructorDefault<DateFromString & S.WithoutConstructorDefault>;
18
97
  } & {
19
- withDefault: Schema.withConstructorDefault<Schema.decodeTo<Schema.Date, Schema.String, never, never> & Schema.WithoutConstructorDefault>;
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: Schema.Boolean & {
25
- withDefault: Schema.withConstructorDefault<Schema.Boolean & Schema.WithoutConstructorDefault>;
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: Schema.Number & {
32
- withDefault: Schema.withConstructorDefault<Schema.Number & Schema.WithoutConstructorDefault>;
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: Schema.Finite & {
38
- withDefault: Schema.withConstructorDefault<Schema.Finite & Schema.WithoutConstructorDefault>;
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) => Schema.Literals<Literals> & {
44
- changeDefault: <A extends Literals[number]>(a: A) => Schema.Literals<Literals> & {
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: Schema.withConstructorDefault<Schema.Literals<Literals> & Schema.WithoutConstructorDefault>;
125
+ withDefault: S.withConstructorDefault<S.Literals<Literals> & S.WithoutConstructorDefault>;
47
126
  };
48
127
  Default: (typeof literals)[0];
49
- withDefault: Schema.withConstructorDefault<Schema.Literals<Literals> & Schema.WithoutConstructorDefault>;
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): Schema.$Array<ValueSchema> & {
55
- withDefault: Schema.withConstructorDefault<Schema.$Array<ValueSchema> & Schema.WithoutConstructorDefault>;
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
- * Like the default Schema `Map` but with `withDefault` => []
137
+ * An annotated `S.Array` of unique items that decodes to a `ReadonlySet`.
59
138
  */
60
- declare function Map_<KeySchema extends S.Top, ValueSchema extends S.Top>(input: {
61
- key: KeySchema;
62
- value: ValueSchema;
63
- }): Schema.$ReadonlyMap<KeySchema, ValueSchema> & {
64
- withDefault: Schema.withConstructorDefault<Schema.$ReadonlyMap<KeySchema, ValueSchema> & Schema.WithoutConstructorDefault>;
65
- };
66
- export { Map_ as Map };
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) => Schema.$ReadonlySet<ValueSchema> & {
71
- withDefault: Schema.withConstructorDefault<Schema.$ReadonlySet<ValueSchema> & Schema.WithoutConstructorDefault>;
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
- }) => Schema.$ReadonlyMap<KeySchema, ValueSchema> & {
80
- withDefault: Schema.withConstructorDefault<Schema.$ReadonlyMap<KeySchema, ValueSchema> & Schema.WithoutConstructorDefault>;
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) => Schema.NullOr<Schema> & {
86
- withDefault: Schema.withConstructorDefault<Schema.NullOr<Schema> & Schema.WithoutConstructorDefault>;
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) => Schema.withConstructorDefault<Schema & Schema.WithoutConstructorDefault>;
89
- export declare const defaultBool: <Schema extends S.Top>(schema: Schema) => Schema.withConstructorDefault<Schema & Schema.WithoutConstructorDefault>;
90
- export declare const defaultNullable: <Schema extends S.Top>(schema: Schema) => Schema.withConstructorDefault<Schema & Schema.WithoutConstructorDefault>;
91
- export declare const defaultArray: <Schema extends S.Top>(schema: Schema) => Schema.withConstructorDefault<Schema & Schema.WithoutConstructorDefault>;
92
- export declare const defaultMap: <Schema extends S.Top>(schema: Schema) => Schema.withConstructorDefault<Schema & Schema.WithoutConstructorDefault>;
93
- export declare const defaultSet: <Schema extends S.Top>(schema: Schema) => Schema.withConstructorDefault<Schema & Schema.WithoutConstructorDefault>;
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: Schema.Codec<Date, string | Date, never, never> & {
97
- withDefault: Schema.withConstructorDefault<Schema.Codec<Date, string | Date, never, never> & Schema.WithoutConstructorDefault>;
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"]) => Schema.decodeTo<To, From, never, never>;
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>) => Schema.decodeTo<To, From, never, never>;
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
@@ -1 +1 @@
1
- {"version":3,"file":"ext.d.ts","sourceRoot":"","sources":["../../src/Schema/ext.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ext.d.ts","sourceRoot":"","sources":["../../src/Schema/ext.ts"],"names":[],"mappings":"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"}
@@ -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, SchemaTransformation, ServiceMap } from "effect";
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
- const DateFromString = Schema.Date.pipe(Schema.encodeTo(Schema.String, {
16
- decode: SchemaGetter.Date(),
17
- encode: SchemaGetter.transform((_) => _.toISOString())
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
- * Like the default Schema `Map` but with `withDefault` => []
149
+ * An annotated `S.Array` of unique items that decodes to a `ReadonlySet`.
67
150
  */
68
- function Map_(input) {
69
- return pipe(S.ReadonlyMap(input.key, input.value), (s) => Object.assign(s, { withDefault: s.pipe(withDefaultConstructor(() => new global.Map())) }));
70
- }
71
- export { Map_ as Map };
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(S.ReadonlySet(value), (s) => Object.assign(s, { withDefault: s.pipe(withDefaultConstructor(() => new Set())) }));
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(S.ReadonlyMap(pair.key, pair.value), (s) => Object.assign(s, { withDefault: s.pipe(withDefaultConstructor(() => new Map())) }));
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: 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL1NjaGVtYS9leHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELHdEQUF3RDtBQUN4RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFrQixZQUFZLEVBQUUsV0FBVyxFQUFFLG9CQUFvQixFQUFFLFVBQVUsRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUNsSSxPQUFPLEtBQUssQ0FBQyxNQUFNLGVBQWUsQ0FBQTtBQUNsQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBRTNDLE9BQU8sRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBVWxELDJGQUEyRjtBQUMzRixxR0FBcUc7QUFDckcsdUdBQXVHO0FBQ3ZHLDRHQUE0RztBQUM1RyxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxDQUNwQyxXQUE2QixFQUM3QixFQUFFLENBQ0osQ0FBcUIsSUFBVSxFQUFnRSxFQUFFO0lBRS9GLE9BQU8sQ0FBQyxDQUFDLHNCQUFzQixDQUM3QixHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBK0IsQ0FBQyxDQUM5RCxDQUFDLElBQWdCLENBQUMsQ0FBQTtBQUNyQixDQUFDLENBQUE7QUFFRCx1RUFBdUU7QUFDdkUsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQ3JDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRTtJQUM3QixNQUFNLEVBQUUsWUFBWSxDQUFDLElBQUksRUFBRTtJQUMzQixNQUFNLEVBQUUsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0NBQ3ZELENBQUMsQ0FDSCxDQUFBO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUU7SUFDaEQsV0FBVyxFQUFFLGNBQWMsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztDQUNsRixDQUFDLENBQUE7QUFFRjs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsRUFBRTtJQUNoRSxXQUFXLEVBQUUsY0FBYyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0NBQ2xGLENBQUMsQ0FBQTtBQUVGOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRTtJQUM5QyxXQUFXLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7Q0FDakUsQ0FBQyxDQUFBO0FBRUY7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQTtBQUU5Rzs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUE7QUFFOUc7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsQ0FBMkQsR0FBRyxRQUFrQixFQUFFLEVBQUUsQ0FDekcsSUFBSSxDQUNGLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQ3BCLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDSixNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRTtJQUNmLGFBQWEsRUFBRSxDQUE2QixDQUFJLEVBQUUsRUFBRTtRQUNsRCxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUN6QyxPQUFPLEVBQUUsQ0FBQztZQUNWLFdBQVcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3JELENBQUMsQ0FBQSxDQUFDLHdDQUF3QztJQUM3QyxDQUFDO0lBQ0QsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQXVCO0lBQzFDLFdBQVcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQy9ELENBQUMsQ0FDTCxDQUFBO0FBRUg7O0dBRUc7QUFDSCxNQUFNLFVBQVUsS0FBSyxDQUE0QixLQUFrQjtJQUNqRSxPQUFPLElBQUksQ0FDVCxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUNkLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUNuRixDQUFBO0FBQ0gsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBUyxJQUFJLENBQXFELEtBQTZDO0lBQzdHLE9BQU8sSUFBSSxDQUNULENBQUMsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQ3JDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQ2pHLENBQUE7QUFDSCxDQUFDO0FBRUQsT0FBTyxFQUFFLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQTtBQUV0Qjs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxDQUE0QixLQUFrQixFQUFFLEVBQUUsQ0FDM0UsSUFBSSxDQUNGLENBQUMsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQ3BCLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDSixNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksR0FBRyxFQUE4QixDQUFDLENBQUMsRUFBRSxDQUFDLENBQ2pILENBQUE7QUFFSDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxDQUFxRCxJQUcvRSxFQUFFLEVBQUUsQ0FDSCxJQUFJLENBQ0YsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsRUFDbkMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUMxRixDQUFBO0FBRUg7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsQ0FBdUIsSUFBWSxFQUFFLEVBQUUsQ0FDM0QsSUFBSSxDQUNGLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQ2QsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQ3JGLENBQUE7QUFFSCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsQ0FBdUIsTUFBYyxFQUFFLEVBQUUsQ0FDbEUsTUFBTSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUE7QUFFOUQsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLENBQXVCLE1BQWMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO0FBRXJILE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxDQUF1QixNQUFjLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtBQUV4SCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsQ0FBdUIsTUFBYyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7QUFFbkgsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLENBQXVCLE1BQWMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQTtBQUV4SCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsQ0FBdUIsTUFBYyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFBO0FBRXhILE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxDQUFxQixDQUFPLEVBQUUsRUFBRTtJQUM3RCxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBUSxDQUF1QixFQUFFLENBQUMsQ0FBQyxDQUFBO0lBQ3hFLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO0lBQzNCLE9BQU8sQ0FBQyxDQUFBO0lBRVIsd0NBQXdDO0FBQzFDLENBQUMsQ0FBQTtBQU9ELCtEQUErRDtBQUMvRCxrREFBa0Q7QUFDbEQseUVBQXlFO0FBQ3pFLElBQUk7QUFFSiwrQ0FBK0M7QUFDL0MsaUVBQWlFO0FBQ2pFLDZCQUE2QjtBQUM3QixRQUFRO0FBQ1IsY0FBYztBQUNkLDRCQUE0QjtBQUM1QixvSEFBb0g7QUFDcEgsWUFBWTtBQUVaLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQzlCLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFDaEQsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUN0RixDQUFBO0FBSUQsNEZBQTRGO0FBQzVGLDZEQUE2RDtBQUM3RCxNQUFNLFVBQVUsWUFBWSxDQUMxQixDQUFNO0lBSU4sT0FBTyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFO1FBQ3pDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQVEsQ0FBQyxDQUFBO1FBQ3JDLE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQyxFQUFFLEVBQVMsQ0FBQyxDQUFBO0FBQ2YsQ0FBQztBQUVELE1BQU0sVUFBVSxpQkFBaUIsQ0FDL0IsQ0FBTTtJQUlOLE9BQU8sV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRTtRQUN6QyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFRLENBQUMsQ0FBQTtRQUN4QyxPQUFPLElBQUksQ0FBQTtJQUNiLENBQUMsRUFBRSxFQUFTLENBQUMsQ0FBQTtBQUNmLENBQUM7QUFFRCx5RUFBeUU7QUFDekUsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLENBQ3pCLElBQVUsRUFDVixFQUFNLEVBQ04sTUFHa0IsRUFDbEIsRUFBRSxDQUNGLElBQUksQ0FBQyxJQUFJLENBQ1AsQ0FBQyxDQUFDLFFBQVEsQ0FDUixFQUFFLEVBQ0Ysb0JBQW9CLENBQUMsZUFBZSxDQUFDO0lBQ25DLE1BQU0sRUFBRSxDQUFDLEtBQVUsRUFBRSxPQUFZLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMvRSxNQUFNLEVBQUUsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUNqQixNQUFNLENBQUMsSUFBSSxDQUNULElBQUksV0FBVyxDQUFDLFNBQVMsQ0FDdkIsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFDZCxFQUFFLE9BQU8sRUFBRSx3REFBd0QsRUFBRSxDQUN0RSxDQUNGO0NBQ0osQ0FBUSxDQUNWLENBQ0YsQ0FBQTtBQUVILCtFQUErRTtBQUMvRSxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxDQUMvQixJQUFVLEVBQ1YsRUFBTSxFQUNOLE1BR3dELEVBQ3hELEVBQUUsQ0FDRixJQUFJLENBQUMsSUFBSSxDQUNQLENBQUMsQ0FBQyxRQUFRLENBQ1IsRUFBRSxFQUNGLG9CQUFvQixDQUFDLGVBQWUsQ0FBQztJQUNuQyxNQUFNLEVBQUUsTUFBYTtJQUNyQixNQUFNLEVBQUUsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUNqQixNQUFNLENBQUMsSUFBSSxDQUNULElBQUksV0FBVyxDQUFDLFNBQVMsQ0FDdkIsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFDZCxFQUFFLE9BQU8sRUFBRSx3REFBd0QsRUFBRSxDQUN0RSxDQUNGO0NBQ0osQ0FBUSxDQUNWLENBQ0YsQ0FBQTtBQUVILE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxDQUNyQixJQUFVLEVBQ1YsT0FBaUMsRUFDVCxFQUFFO0lBQzFCLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDcEMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUNkLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQzlDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQ3JCLENBQUE7QUFDN0IsQ0FBQyxDQUFBO0FBQ0QsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsQ0FJakMsSUFBVSxFQUNWLEdBQUcsUUFBYyxFQUtqQixFQUFFLENBQ0YsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7SUFDbEIsTUFBTSxPQUFPLEdBQXVFLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FDOUcsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBK0MsQ0FDdEUsQ0FBQTtJQUNELE9BQU8sT0FBTyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQTtBQUMvQixDQUFDLENBQUMsQ0FBQSJ9
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, Map, NullOr, Number, ReadonlyMap, ReadonlySet } from "./Schema/ext.js";
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";
@@ -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,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AACjI,OAAO,EAAE,GAAG,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAEzD,cAAc,mBAAmB,CAAA;AACjC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,yBAAyB,CAAA;AACvC,cAAc,qBAAqB,CAAA;AACnC,cAAc,yBAAyB,CAAA;AACvC,cAAc,oBAAoB,CAAA;AAClC,cAAc,+BAA+B,CAAA;AAC7C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,qBAAqB,CAAA;AACnC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAEpD,OAAO,KAAK,WAAW,MAAM,oBAAoB,CAAA;AACjD,OAAO,KAAK,YAAY,MAAM,qBAAqB,CAAA;AAEnD,OAAO,EAAE,IAAI,IAAI,KAAK,EAAE,MAAM,eAAe,CAAA;AAE7C,eAAO,MAAM,MAAM,eAAW,CAAA;AAC9B,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,CAAA;AAElC,MAAM,WAAW,gBAAgB;IAC/B,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAA;CACvB;AAKD,eAAO,MAAM,KAAK,iGAOf,CAAA;AAEH,MAAM,MAAM,KAAK,GAAG,SAAS,CAAA;AAE7B,eAAO,MAAM,WAAW,mQAQrB,CAAA;AAEH,MAAM,MAAM,WAAW,GAAG,eAAe,CAAA;AAqCzC,eAAO,MAAM,IAAI,GACf,OAAO,SAAS,qBAAqB,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC,CAAC,EAE7F,MAAM,OAAO,KAMR,CAAC,CAAC,QAAQ,CACb,GACG,KAAK,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,GACzD,CACF,CAAA;AAEH,KAAK,kBAAkB,GAAG,qBAAqB,CAC7C,CAAC,CAAC,GAAG,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CACrD,CAAA;AAED,KAAK,eAAe,CAAC,OAAO,SAAS,kBAAkB,IAAI,CAAC,CAAC,QAAQ,CACnE;KACG,KAAK,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;CACzD,CACF,CAAA;AAED,KAAK,mBAAmB,CAAC,OAAO,SAAS,kBAAkB,IAAI,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAChG,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC,OAAO,CAAC,CAAA;CACxC,CAAA;AAMD,eAAO,MAAM,iBAAiB,GAAI,OAAO,SAAS,kBAAkB,EAClE,QAAQ,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KACvB,mBAAmB,CAAC,OAAO,CAAsC,CAAA;AAEpE,eAAO,MAAM,WAAW,GACtB,OAAO,SAAS,kBAAkB,EAClC,GAAG,GAAG,OAAO,KAAG,mBAAmB,CAAC,OAAO,CAA0C,CAAA"}
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, Map, NullOr, Number, ReadonlyMap, ReadonlySet } from "./Schema/ext.js";
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2NoZW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1NjaGVtYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFlLE1BQU0sUUFBUSxDQUFBO0FBQy9DLE9BQU8sS0FBSyxDQUFDLE1BQU0sZUFBZSxDQUFBO0FBRWxDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFDckMsT0FBTyxFQUFFLEtBQUssSUFBSSxNQUFNLEVBQTJCLE1BQU0sbUJBQW1CLENBQUE7QUFDNUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQ2pELE9BQU8sRUFBRSxXQUFXLElBQUksWUFBWSxFQUF1QyxNQUFNLHlCQUF5QixDQUFBO0FBQzFHLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFFcEMsY0FBYyxlQUFlLENBQUE7QUFFN0IsY0FBYyxtQkFBbUIsQ0FBQTtBQUNqQyxPQUFPLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBRXRELE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFDdEQsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUNqSSxPQUFPLEVBQUUsR0FBRyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBRXpELGNBQWMsbUJBQW1CLENBQUE7QUFDakMsY0FBYyxpQkFBaUIsQ0FBQTtBQUMvQixjQUFjLHlCQUF5QixDQUFBO0FBQ3ZDLGNBQWMscUJBQXFCLENBQUE7QUFDbkMsY0FBYyx5QkFBeUIsQ0FBQTtBQUN2QyxjQUFjLG9CQUFvQixDQUFBO0FBQ2xD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
77
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2NoZW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1NjaGVtYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFlLE1BQU0sUUFBUSxDQUFBO0FBQy9DLE9BQU8sS0FBSyxDQUFDLE1BQU0sZUFBZSxDQUFBO0FBRWxDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFDckMsT0FBTyxFQUFFLEtBQUssSUFBSSxNQUFNLEVBQTJCLE1BQU0sbUJBQW1CLENBQUE7QUFDNUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQ2pELE9BQU8sRUFBRSxXQUFXLElBQUksWUFBWSxFQUF1QyxNQUFNLHlCQUF5QixDQUFBO0FBQzFHLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFFcEMsY0FBYyxlQUFlLENBQUE7QUFFN0IsY0FBYyxtQkFBbUIsQ0FBQTtBQUNqQyxPQUFPLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBRXRELE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFDdEQsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQzVILE9BQU8sRUFBRSxHQUFHLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFFekQsY0FBYyxtQkFBbUIsQ0FBQTtBQUNqQyxjQUFjLGlCQUFpQixDQUFBO0FBQy9CLGNBQWMseUJBQXlCLENBQUE7QUFDdkMsY0FBYyxxQkFBcUIsQ0FBQTtBQUNuQyxjQUFjLHlCQUF5QixDQUFBO0FBQ3ZDLGNBQWMsb0JBQW9CLENBQUE7QUFDbEMsY0FBYywrQkFB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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "effect-app",
3
- "version": "4.0.0-beta.51",
3
+ "version": "4.0.0-beta.53",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "dependencies": {
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, Schema, type SchemaAST, SchemaGetter, SchemaIssue, SchemaTransformation, ServiceMap } from "effect"
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
- const DateFromString = Schema.Date.pipe(
33
- Schema.encodeTo(Schema.String, {
34
- decode: SchemaGetter.Date(),
35
- encode: SchemaGetter.transform((_) => _.toISOString())
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
- * Like the default Schema `Map` but with `withDefault` => []
196
+ * An annotated `S.Array` of unique items that decodes to a `ReadonlySet`.
102
197
  */
103
- function Map_<KeySchema extends S.Top, ValueSchema extends S.Top>(input: { key: KeySchema; value: ValueSchema }) {
104
- return pipe(
105
- S.ReadonlyMap(input.key, input.value),
106
- (s) => Object.assign(s, { withDefault: s.pipe(withDefaultConstructor(() => new global.Map())) })
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
- export { Map_ as Map }
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
- S.ReadonlySet(value),
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
- S.ReadonlyMap(pair.key, pair.value),
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
- }) as any
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: decode as any,
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
- }) as any
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, Map, NullOr, Number, ReadonlyMap, ReadonlySet } from "./Schema/ext.js"
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"
@@ -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
+ })