effect-app 4.0.0-beta.16 → 4.0.0-beta.17

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,11 @@
1
1
  # @effect-app/prelude
2
2
 
3
+ ## 4.0.0-beta.17
4
+
5
+ ### Patch Changes
6
+
7
+ - c8a6a3f: fix TaggedUnion
8
+
3
9
  ## 4.0.0-beta.16
4
10
 
5
11
  ### Patch Changes
@@ -1,11 +1,11 @@
1
1
  import * as S from "./Schema.js";
2
2
  export type OperationId = S.StringId;
3
- export declare const OperationId: S.WithDefaults<S.brand<S.String, "NonEmptyString" | "NonEmptyString64k" | "NonEmptyString2k" | "NonEmptyString255" | "NonEmptyString50" | "NonEmptyString64" | "NonEmptyString80" | "NonEmptyString100" | "StringId"> & {
3
+ export declare const OperationId: S.WithDefaults<S.brand<S.String, "NonEmptyString" | "StringId" | "NonEmptyString50" | "NonEmptyString64" | "NonEmptyString80" | "NonEmptyString100" | "NonEmptyString255" | "NonEmptyString2k" | "NonEmptyString64k"> & {
4
4
  make: () => S.StringId;
5
- withDefault: S.withConstructorDefault<S.brand<S.String, "NonEmptyString" | "NonEmptyString64k" | "NonEmptyString2k" | "NonEmptyString255" | "NonEmptyString50" | "NonEmptyString64" | "NonEmptyString80" | "NonEmptyString100" | "StringId"> & S.WithoutConstructorDefault>;
6
- }> & S.brand<S.String, "NonEmptyString" | "NonEmptyString64k" | "NonEmptyString2k" | "NonEmptyString255" | "NonEmptyString50" | "NonEmptyString64" | "NonEmptyString80" | "NonEmptyString100" | "StringId"> & {
5
+ withDefault: S.withConstructorDefault<S.brand<S.String, "NonEmptyString" | "StringId" | "NonEmptyString50" | "NonEmptyString64" | "NonEmptyString80" | "NonEmptyString100" | "NonEmptyString255" | "NonEmptyString2k" | "NonEmptyString64k"> & S.WithoutConstructorDefault>;
6
+ }> & S.brand<S.String, "NonEmptyString" | "StringId" | "NonEmptyString50" | "NonEmptyString64" | "NonEmptyString80" | "NonEmptyString100" | "NonEmptyString255" | "NonEmptyString2k" | "NonEmptyString64k"> & {
7
7
  make: () => S.StringId;
8
- withDefault: S.withConstructorDefault<S.brand<S.String, "NonEmptyString" | "NonEmptyString64k" | "NonEmptyString2k" | "NonEmptyString255" | "NonEmptyString50" | "NonEmptyString64" | "NonEmptyString80" | "NonEmptyString100" | "StringId"> & S.WithoutConstructorDefault>;
8
+ withDefault: S.withConstructorDefault<S.brand<S.String, "NonEmptyString" | "StringId" | "NonEmptyString50" | "NonEmptyString64" | "NonEmptyString80" | "NonEmptyString100" | "NonEmptyString255" | "NonEmptyString2k" | "NonEmptyString64k"> & S.WithoutConstructorDefault>;
9
9
  };
10
10
  declare const OperationProgress_base: S.EnhancedClass<OperationProgress, S.Struct<{
11
11
  completed: S.WithDefaults<S.brand<import("effect/Schema").Int, "NonNegativeInt" | "Int" | "NonNegativeNumber">> & S.brand<import("effect/Schema").Int, "NonNegativeInt" | "Int" | "NonNegativeNumber"> & {
@@ -20,49 +20,45 @@ export declare class OperationProgress extends OperationProgress_base {
20
20
  declare const OperationSuccess_base: S.EnhancedTaggedClass<OperationSuccess, "OperationSuccess", {
21
21
  readonly _tag: S.tag<"OperationSuccess">;
22
22
  } & {
23
- message: S.withConstructorDefault<import("effect/Schema").NullOr<S.WithDefaults<S.brand<S.String, "NonEmptyString" | "NonEmptyString64k" | "NonEmptyString2k">> & S.brand<S.String, "NonEmptyString" | "NonEmptyString64k" | "NonEmptyString2k">> & S.WithoutConstructorDefault>;
23
+ message: S.withConstructorDefault<import("effect/Schema").NullOr<S.WithDefaults<S.brand<S.String, "NonEmptyString" | "NonEmptyString2k" | "NonEmptyString64k">> & S.brand<S.String, "NonEmptyString" | "NonEmptyString2k" | "NonEmptyString64k">> & S.WithoutConstructorDefault>;
24
24
  }, OperationSuccess.Encoded>;
25
25
  export declare class OperationSuccess extends OperationSuccess_base {
26
26
  }
27
27
  declare const OperationFailure_base: S.EnhancedTaggedClass<OperationFailure, "OperationFailure", {
28
28
  readonly _tag: S.tag<"OperationFailure">;
29
29
  } & {
30
- message: S.withConstructorDefault<import("effect/Schema").NullOr<S.WithDefaults<S.brand<S.String, "NonEmptyString" | "NonEmptyString64k" | "NonEmptyString2k">> & S.brand<S.String, "NonEmptyString" | "NonEmptyString64k" | "NonEmptyString2k">> & S.WithoutConstructorDefault>;
30
+ message: S.withConstructorDefault<import("effect/Schema").NullOr<S.WithDefaults<S.brand<S.String, "NonEmptyString" | "NonEmptyString2k" | "NonEmptyString64k">> & S.brand<S.String, "NonEmptyString" | "NonEmptyString2k" | "NonEmptyString64k">> & S.WithoutConstructorDefault>;
31
31
  }, OperationFailure.Encoded>;
32
32
  export declare class OperationFailure extends OperationFailure_base {
33
33
  }
34
34
  export declare const OperationResult: S.Union<[typeof OperationSuccess, typeof OperationFailure]> & {
35
- is: <I>(input: I) => input is any;
36
- isA: S.Is<{
37
- _tag: string;
38
- }>;
39
- isAnyOf: S.IsAny<{
40
- _tag: string;
41
- }>;
42
- tagMap: any;
43
- tags: any;
35
+ isA: S.Is<OperationSuccess | OperationFailure>;
36
+ isAnyOf: S.IsAny<OperationSuccess | OperationFailure>;
37
+ tagMap: {
38
+ OperationSuccess: typeof OperationSuccess;
39
+ OperationFailure: typeof OperationFailure;
40
+ };
41
+ tags: S.Literals<["OperationSuccess", "OperationFailure"]>;
44
42
  };
45
43
  export type OperationResult = S.Schema.Type<typeof OperationResult>;
46
44
  declare const Operation_base: S.EnhancedClass<Operation, S.Struct<{
47
- id: S.WithDefaults<S.brand<S.String, "NonEmptyString" | "NonEmptyString64k" | "NonEmptyString2k" | "NonEmptyString255" | "NonEmptyString50" | "NonEmptyString64" | "NonEmptyString80" | "NonEmptyString100" | "StringId"> & {
45
+ id: S.WithDefaults<S.brand<S.String, "NonEmptyString" | "StringId" | "NonEmptyString50" | "NonEmptyString64" | "NonEmptyString80" | "NonEmptyString100" | "NonEmptyString255" | "NonEmptyString2k" | "NonEmptyString64k"> & {
48
46
  make: () => S.StringId;
49
- withDefault: S.withConstructorDefault<S.brand<S.String, "NonEmptyString" | "NonEmptyString64k" | "NonEmptyString2k" | "NonEmptyString255" | "NonEmptyString50" | "NonEmptyString64" | "NonEmptyString80" | "NonEmptyString100" | "StringId"> & S.WithoutConstructorDefault>;
50
- }> & S.brand<S.String, "NonEmptyString" | "NonEmptyString64k" | "NonEmptyString2k" | "NonEmptyString255" | "NonEmptyString50" | "NonEmptyString64" | "NonEmptyString80" | "NonEmptyString100" | "StringId"> & {
47
+ withDefault: S.withConstructorDefault<S.brand<S.String, "NonEmptyString" | "StringId" | "NonEmptyString50" | "NonEmptyString64" | "NonEmptyString80" | "NonEmptyString100" | "NonEmptyString255" | "NonEmptyString2k" | "NonEmptyString64k"> & S.WithoutConstructorDefault>;
48
+ }> & S.brand<S.String, "NonEmptyString" | "StringId" | "NonEmptyString50" | "NonEmptyString64" | "NonEmptyString80" | "NonEmptyString100" | "NonEmptyString255" | "NonEmptyString2k" | "NonEmptyString64k"> & {
51
49
  make: () => S.StringId;
52
- withDefault: S.withConstructorDefault<S.brand<S.String, "NonEmptyString" | "NonEmptyString64k" | "NonEmptyString2k" | "NonEmptyString255" | "NonEmptyString50" | "NonEmptyString64" | "NonEmptyString80" | "NonEmptyString100" | "StringId"> & S.WithoutConstructorDefault>;
50
+ withDefault: S.withConstructorDefault<S.brand<S.String, "NonEmptyString" | "StringId" | "NonEmptyString50" | "NonEmptyString64" | "NonEmptyString80" | "NonEmptyString100" | "NonEmptyString255" | "NonEmptyString2k" | "NonEmptyString64k"> & S.WithoutConstructorDefault>;
53
51
  };
54
- title: S.WithDefaults<S.brand<S.String, "NonEmptyString" | "NonEmptyString64k" | "NonEmptyString2k">> & S.brand<S.String, "NonEmptyString" | "NonEmptyString64k" | "NonEmptyString2k">;
52
+ title: S.WithDefaults<S.brand<S.String, "NonEmptyString" | "NonEmptyString2k" | "NonEmptyString64k">> & S.brand<S.String, "NonEmptyString" | "NonEmptyString2k" | "NonEmptyString64k">;
55
53
  progress: S.optional<typeof OperationProgress>;
56
54
  result: S.optional<S.Union<[typeof OperationSuccess, typeof OperationFailure]> & {
57
- is: <I>(input: I) => input is any;
58
- isA: S.Is<{
59
- _tag: string;
60
- }>;
61
- isAnyOf: S.IsAny<{
62
- _tag: string;
63
- }>;
64
- tagMap: any;
65
- tags: any;
55
+ isA: S.Is<OperationSuccess | OperationFailure>;
56
+ isAnyOf: S.IsAny<OperationSuccess | OperationFailure>;
57
+ tagMap: {
58
+ OperationSuccess: typeof OperationSuccess;
59
+ OperationFailure: typeof OperationFailure;
60
+ };
61
+ tags: S.Literals<["OperationSuccess", "OperationFailure"]>;
66
62
  }>;
67
63
  createdAt: S.withConstructorDefault<S.decodeTo<import("effect/Schema").Date, S.String, never, never> & S.WithoutConstructorDefault>;
68
64
  updatedAt: S.withConstructorDefault<import("effect/Schema").NullOr<S.decodeTo<import("effect/Schema").Date, S.String, never, never> & {
@@ -1 +1 @@
1
- {"version":3,"file":"Operations.d.ts","sourceRoot":"","sources":["../src/Operations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,aAAa,CAAA;AAEhC,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,QAAQ,CAAA;AACpC,eAAO,MAAM,WAAW;;;;;;CAAa,CAAA;;;;;;;;;AAErC,qBAAa,iBAAkB,SAAQ,sBAMrC;CAAG;;;;;;AAEL,qBAAa,gBACX,SAAQ,qBAEN;CACF;;;;;;AAEF,qBAAa,gBACX,SAAQ,qBAEN;CACF;AAEF,eAAO,MAAM,eAAe;;;;;;;;;;CAAoD,CAAA;AAChF,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,eAAe,CAAC,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEnE,qBAAa,SAAU,SAAQ,cAO7B;CAAG;AAKL,yBAAiB,iBAAiB,CAAC;IACjC,UAAiB,OAAQ,SAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,iBAAiB,CAAC,QAAQ,CAAC,CAAC;KAAG;CACzF;AACD,yBAAiB,gBAAgB,CAAC;IAChC,UAAiB,OAAQ,SAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,gBAAgB,CAAC,QAAQ,CAAC,CAAC;KAAG;CACxF;AACD,yBAAiB,gBAAgB,CAAC;IAChC,UAAiB,OAAQ,SAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,gBAAgB,CAAC,QAAQ,CAAC,CAAC;KAAG;CACxF;AACD,yBAAiB,SAAS,CAAC;IACzB,UAAiB,OAAQ,SAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,SAAS,CAAC,QAAQ,CAAC,CAAC;KAAG;CACjF"}
1
+ {"version":3,"file":"Operations.d.ts","sourceRoot":"","sources":["../src/Operations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,aAAa,CAAA;AAEhC,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,QAAQ,CAAA;AACpC,eAAO,MAAM,WAAW;;;;;;CAAa,CAAA;;;;;;;;;AAErC,qBAAa,iBAAkB,SAAQ,sBAMrC;CAAG;;;;;;AAEL,qBAAa,gBACX,SAAQ,qBAEN;CACF;;;;;;AAEF,qBAAa,gBACX,SAAQ,qBAEN;CACF;AAEF,eAAO,MAAM,eAAe;;;;;;;;CAAoD,CAAA;AAChF,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,eAAe,CAAC,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;AAEnE,qBAAa,SAAU,SAAQ,cAO7B;CAAG;AAKL,yBAAiB,iBAAiB,CAAC;IACjC,UAAiB,OAAQ,SAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,iBAAiB,CAAC,QAAQ,CAAC,CAAC;KAAG;CACzF;AACD,yBAAiB,gBAAgB,CAAC;IAChC,UAAiB,OAAQ,SAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,gBAAgB,CAAC,QAAQ,CAAC,CAAC;KAAG;CACxF;AACD,yBAAiB,gBAAgB,CAAC;IAChC,UAAiB,OAAQ,SAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,gBAAgB,CAAC,QAAQ,CAAC,CAAC;KAAG;CACxF;AACD,yBAAiB,SAAS,CAAC;IACzB,UAAiB,OAAQ,SAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,SAAS,CAAC,QAAQ,CAAC,CAAC;KAAG;CACjF"}
package/dist/Schema.d.ts CHANGED
@@ -32,10 +32,10 @@ export declare const PhoneNumber: import("./Schema/ext.js").WithDefaults<import(
32
32
  export type PhoneNumber = PhoneNumberType;
33
33
  export declare const makeIs: <A extends {
34
34
  _tag: string;
35
- }, I, R>(schema: S.Codec<A, I, R>) => Is<A>;
35
+ }, I, RD, RE>(schema: S.Codec<A, I, RD, RE>) => Is<A>;
36
36
  export declare const makeIsAnyOf: <A extends {
37
37
  _tag: string;
38
- }, I, R>(schema: S.Codec<A, I, R>) => IsAny<A>;
38
+ }, I, RD, RE>(schema: S.Codec<A, I, RD, RE>) => IsAny<A>;
39
39
  export type ExtractUnion<A extends {
40
40
  _tag: string;
41
41
  }, Tags extends A["_tag"]> = Extract<A, Record<"_tag", Tags>>;
@@ -50,40 +50,39 @@ export interface IsAny<A extends {
50
50
  }> {
51
51
  <Keys extends A["_tag"][]>(...keys: Keys): (a: A) => a is ExtractUnion<A, ElemType<Keys>>;
52
52
  }
53
+ type TaggedUnionMap<Members extends readonly (S.Top & {
54
+ fields: {
55
+ _tag: S.tag<string>;
56
+ };
57
+ })[]> = {
58
+ [Key in Members[number] as Key["fields"]["_tag"]["Type"]]: Key;
59
+ };
53
60
  export declare const taggedUnionMap: <Members extends readonly (S.Top & {
54
61
  fields: {
55
62
  _tag: S.tag<string>;
56
63
  };
57
- })[]>(self: Members) => any;
64
+ })[]>(self: Members) => TaggedUnionMap<Members>;
58
65
  export declare const tags: <Members extends NonEmptyReadonlyArray<(S.Top & {
59
66
  fields: {
60
67
  _tag: S.tag<string>;
61
68
  };
62
- })>>(self: Members) => any;
69
+ })>>(self: Members) => S.Literals<{ [Index in keyof Members]: S.Schema.Type<Members[Index]["fields"]["_tag"]>; }>;
63
70
  export declare const ExtendTaggedUnion: <A extends {
64
- _tag: string;
71
+ readonly _tag: string;
65
72
  }, I, R>(schema: S.Codec<A, I, R>) => S.Codec<A, I, R, never> & {
66
- is: <I_1>(input: I_1) => input is any;
67
- isA: Is<{
68
- _tag: string;
69
- }>;
70
- isAnyOf: IsAny<{
71
- _tag: string;
72
- }>;
73
+ isA: Is<A>;
74
+ isAnyOf: IsAny<A>;
73
75
  };
74
- export declare const TaggedUnion: <Members extends readonly (S.Top & {
76
+ export declare const TaggedUnion: <Members extends NonEmptyReadonlyArray<S.Codec<{
77
+ readonly _tag: string;
78
+ }, any, any, any> & {
75
79
  fields: {
76
- _tag: S.tag<any>;
80
+ _tag: S.tag<string>;
77
81
  };
78
- })[]>(...a: Members) => S.Union<Members> & {
79
- is: <I>(input: I) => input is any;
80
- isA: Is<{
81
- _tag: string;
82
- }>;
83
- isAnyOf: IsAny<{
84
- _tag: string;
85
- }>;
86
- tagMap: any;
87
- tags: any;
82
+ }>>(...a: Members) => S.Union<Members> & {
83
+ isA: Is<{ [K in keyof Members]: Members[K]["Type"]; }[number]>;
84
+ isAnyOf: IsAny<{ [K in keyof Members]: Members[K]["Type"]; }[number]>;
85
+ tagMap: TaggedUnionMap<Members>;
86
+ tags: S.Literals<{ [Index in keyof Members]: S.Schema.Type<Members[Index]["fields"]["_tag"]>; }>;
88
87
  };
89
88
  //# sourceMappingURL=Schema.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Schema.d.ts","sourceRoot":"","sources":["../src/Schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Schema.d.ts","sourceRoot":"","sources":["../src/Schema.ts"],"names":[],"mappings":"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"}
package/dist/Schema.js CHANGED
@@ -69,31 +69,31 @@ export const makeIsAnyOf = (schema) => {
69
69
  }
70
70
  throw new Error("Unsupported");
71
71
  };
72
- export const taggedUnionMap = (self) => self.reduce((acc, key) => {
73
- // TODO: v4 migration — PropertySignatureDeclaration removed, need v4 AST traversal
74
- const ast = key.fields._tag.ast;
75
- const tag = (ast.type ?? ast).literal; // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access
76
- acc[tag] = key;
77
- return acc;
78
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
79
- }, {});
80
- export const tags = (self) => S.Literals(self.map((key) => {
81
- // TODO: v4 migration — PropertySignatureDeclaration removed, need v4 AST traversal
82
- const ast = key.fields._tag.ast;
83
- const tag = (ast.type ?? ast).literal;
84
- return tag;
85
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
86
- }));
72
+ const getTagLiteral = (schema) => {
73
+ if (!SchemaAST.isLiteral(schema.ast)) {
74
+ throw new Error("Unsupported _tag schema: expected a literal AST");
75
+ }
76
+ return schema.ast.literal;
77
+ };
78
+ export const taggedUnionMap = (self) => {
79
+ const out = {};
80
+ for (const key of self) {
81
+ const tag = getTagLiteral(key.fields._tag);
82
+ out[tag] = key;
83
+ }
84
+ return out;
85
+ };
86
+ export const tags = (self) => S.Literals(self.map((key) => getTagLiteral(key.fields._tag)));
87
87
  export const ExtendTaggedUnion = (schema) => extendM(schema, (_) => ({
88
- is: S.is(schema),
88
+ // is: S.is(schema), // only works with never DecodingServices
89
89
  isA: makeIs(_),
90
90
  isAnyOf: makeIsAnyOf(_) /*, map: taggedUnionMap(a) */
91
91
  }));
92
92
  export const TaggedUnion = (...a) => pipe(S.Union(a), (_) => extendM(_, (_) => ({
93
- is: S.is(_),
93
+ // is: S.is(_), // only works with never DecodingServices
94
94
  isA: makeIs(_),
95
95
  isAnyOf: makeIsAnyOf(_),
96
96
  tagMap: taggedUnionMap(a),
97
97
  tags: tags(a)
98
98
  })));
99
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2NoZW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1NjaGVtYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFlLE1BQU0sUUFBUSxDQUFBO0FBQ3BFLE9BQU8sS0FBSyxDQUFDLE1BQU0sZUFBZSxDQUFBO0FBRWxDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFDckMsT0FBTyxFQUFFLEtBQUssSUFBSSxNQUFNLEVBQTJCLE1BQU0sbUJBQW1CLENBQUE7QUFDNUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQ2pELE9BQU8sRUFBRSxXQUFXLElBQUksWUFBWSxFQUF1QyxNQUFNLHlCQUF5QixDQUFBO0FBRTFHLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFFcEMsY0FBYyxlQUFlLENBQUE7QUFDN0IsOENBQThDO0FBQzlDLE9BQU8sRUFBRSxnQkFBZ0IsSUFBSSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFFL0QsY0FBYyxtQkFBbUIsQ0FBQTtBQUNqQyxPQUFPLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBRXRELE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFDdEQsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDOUcsT0FBTyxFQUFFLEdBQUcsRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUV6RCxjQUFjLG1CQUFtQixDQUFBO0FBQ2pDLGNBQWMsaUJBQWlCLENBQUE7QUFDL0IsY0FBYyx5QkFBeUIsQ0FB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
99
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2NoZW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1NjaGVtYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFlLE1BQU0sUUFBUSxDQUFBO0FBQ3BFLE9BQU8sS0FBSyxDQUFDLE1BQU0sZUFBZSxDQUFBO0FBRWxDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFDckMsT0FBTyxFQUFFLEtBQUssSUFBSSxNQUFNLEVBQTJCLE1BQU0sbUJBQW1CLENBQUE7QUFDNUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQ2pELE9BQU8sRUFBRSxXQUFXLElBQUksWUFBWSxFQUF1QyxNQUFNLHlCQUF5QixDQUFBO0FBRTFHLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFFcEMsY0FBYyxlQUFlLENBQUE7QUFDN0IsOENBQThDO0FBQzlDLE9BQU8sRUFBRSxnQkFBZ0IsSUFBSSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFFL0QsY0FBYyxtQkFBbUIsQ0FBQTtBQUNqQyxPQUFPLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBRXRELE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFDdEQsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDOUcsT0FBTyxFQUFFLEdBQUcsRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUV6RCxjQUFjLG1CQUFtQixDQUFBO0FBQ2pDLGNBQWMsaUJBQWlCLENBQUE7QUFDL0IsY0FBYyx5QkFBeUIsQ0FB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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.16",
3
+ "version": "4.0.0-beta.17",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "dependencies": {
package/src/Schema.ts CHANGED
@@ -66,8 +66,8 @@ export const PhoneNumber = PhoneNumberT
66
66
 
67
67
  export type PhoneNumber = PhoneNumberType
68
68
 
69
- export const makeIs = <A extends { _tag: string }, I, R>(
70
- schema: S.Codec<A, I, R>
69
+ export const makeIs = <A extends { _tag: string }, I, RD, RE>(
70
+ schema: S.Codec<A, I, RD, RE>
71
71
  ) => {
72
72
  // In v4, transformations are stored as encoding on nodes, not as wrapper nodes.
73
73
  // Union member ASTs are directly Objects (TypeLiteral equivalent).
@@ -94,8 +94,8 @@ export const makeIs = <A extends { _tag: string }, I, R>(
94
94
  throw new Error("Unsupported")
95
95
  }
96
96
 
97
- export const makeIsAnyOf = <A extends { _tag: string }, I, R>(
98
- schema: S.Codec<A, I, R>
97
+ export const makeIsAnyOf = <A extends { _tag: string }, I, RD, RE>(
98
+ schema: S.Codec<A, I, RD, RE>
99
99
  ): IsAny<A> => {
100
100
  if (SchemaAST.isUnion(schema.ast)) {
101
101
  return <Keys extends A["_tag"][]>(...keys: Keys) => (a: A): a is ExtractUnion<A, ElemType<Keys>> =>
@@ -111,20 +111,30 @@ export interface IsAny<A extends { _tag: string }> {
111
111
  <Keys extends A["_tag"][]>(...keys: Keys): (a: A) => a is ExtractUnion<A, ElemType<Keys>>
112
112
  }
113
113
 
114
+ const getTagLiteral = <Tag extends string>(schema: S.tag<Tag>): Tag => {
115
+ if (!SchemaAST.isLiteral(schema.ast)) {
116
+ throw new Error("Unsupported _tag schema: expected a literal AST")
117
+ }
118
+ return schema.ast.literal as Tag
119
+ }
120
+
121
+ type TaggedUnionMap<Members extends readonly (S.Top & { fields: { _tag: S.tag<string> } })[]> = {
122
+ [Key in Members[number] as Key["fields"]["_tag"]["Type"]]: Key
123
+ }
124
+
114
125
  export const taggedUnionMap = <
115
126
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
116
127
  Members extends readonly (S.Top & { fields: { _tag: S.tag<string> } })[]
117
128
  >(
118
129
  self: Members
119
- ) =>
120
- self.reduce((acc, key) => {
121
- // TODO: v4 migration PropertySignatureDeclaration removed, need v4 AST traversal
122
- const ast = key.fields._tag.ast as any
123
- const tag = ((ast.type ?? ast) as SchemaAST.Literal).literal as string // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access
124
- acc[tag] = key as any
125
- return acc
126
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
127
- }, {} as any)
130
+ ) => {
131
+ const out = {} as TaggedUnionMap<Members>
132
+ for (const key of self) {
133
+ const tag = getTagLiteral(key.fields._tag) as keyof TaggedUnionMap<Members>
134
+ out[tag] = key as TaggedUnionMap<Members>[typeof tag]
135
+ }
136
+ return out
137
+ }
128
138
 
129
139
  export const tags = <
130
140
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -132,38 +142,41 @@ export const tags = <
132
142
  >(
133
143
  self: Members
134
144
  ) =>
135
- S.Literals(self.map((key) => {
136
- // TODO: v4 migration — PropertySignatureDeclaration removed, need v4 AST traversal
137
- const ast = key.fields._tag.ast as any
138
- const tag = ((ast.type ?? ast) as SchemaAST.Literal).literal
139
- return tag
140
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
141
- })) as any
142
-
143
- export const ExtendTaggedUnion = <A extends { _tag: string }, I, R>(
145
+ S.Literals(
146
+ self.map((key) => getTagLiteral(key.fields._tag)) as {
147
+ [Index in keyof Members]: S.Schema.Type<Members[Index]["fields"]["_tag"]>
148
+ }
149
+ ) as S.Literals<
150
+ {
151
+ [Index in keyof Members]: S.Schema.Type<Members[Index]["fields"]["_tag"]>
152
+ }
153
+ >
154
+
155
+ export const ExtendTaggedUnion = <A extends { readonly _tag: string }, I, R>(
144
156
  schema: S.Codec<A, I, R>
145
157
  ) =>
146
158
  extendM(
147
159
  schema,
148
160
  (_) => ({
149
- is: S.is(schema as any),
150
- isA: makeIs(_ as any),
151
- isAnyOf: makeIsAnyOf(_ as any) /*, map: taggedUnionMap(a) */
161
+ // is: S.is(schema), // only works with never DecodingServices
162
+ isA: makeIs(_),
163
+ isAnyOf: makeIsAnyOf(_) /*, map: taggedUnionMap(a) */
152
164
  })
153
165
  )
154
166
 
155
167
  export const TaggedUnion = <
156
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
157
- Members extends readonly (S.Top & { fields: { _tag: S.tag<any> } })[]
168
+ Members extends NonEmptyReadonlyArray<
169
+ S.Codec<{ readonly _tag: string }, any, any, any> & { fields: { _tag: S.tag<string> } }
170
+ >
158
171
  >(...a: Members) =>
159
172
  pipe(
160
173
  S.Union(a),
161
174
  (_) =>
162
175
  extendM(_, (_) => ({
163
- is: S.is(_ as any),
164
- isA: makeIs(_ as any),
165
- isAnyOf: makeIsAnyOf(_ as any),
176
+ // is: S.is(_), // only works with never DecodingServices
177
+ isA: makeIs(_),
178
+ isAnyOf: makeIsAnyOf(_),
166
179
  tagMap: taggedUnionMap(a),
167
- tags: tags(a as any)
180
+ tags: tags(a)
168
181
  }))
169
182
  )
@@ -1,6 +1,6 @@
1
1
  // import { generateFromArbitrary } from "@effect-app/infra/test"
2
2
  import { Array, S } from "effect-app"
3
- import { test } from "vitest"
3
+ import { expect, test } from "vitest"
4
4
 
5
5
  const A = S.Struct({ a: S.NonEmptyString255, email: S.NullOr(S.Email) })
6
6
  test("works", () => {
@@ -23,3 +23,34 @@ test("literal default works", () => {
23
23
  const s2 = S.Struct({ l: l2.withDefault })
24
24
  expect(s2.makeUnsafe({}).l).toBe("b")
25
25
  })
26
+
27
+ test("tagged union derives tag map and tags from v4 literal ast", () => {
28
+ const schema = S.TaggedUnion(
29
+ S.TaggedStruct("A", { a: S.String }),
30
+ S.TaggedStruct("B", { b: S.Number }),
31
+ S.TaggedStruct("C", { c: S.Boolean })
32
+ )
33
+ const caseA = schema.tagMap["A"]
34
+ const caseB = schema.tagMap["B"]
35
+ const caseC = schema.tagMap["C"]
36
+ const isAOrB = schema.isAnyOf("A", "B")
37
+
38
+ expect(caseA.fields._tag.ast.literal).toBe("A")
39
+ expect(caseB.fields._tag.ast.literal).toBe("B")
40
+ expect(caseC.fields._tag.ast.literal).toBe("C")
41
+ expect(S.decodeSync(schema.tags)("A")).toBe("A")
42
+ expect(S.decodeSync(schema.tags)("B")).toBe("B")
43
+ expect(S.decodeSync(schema.tags)("C")).toBe("C")
44
+ expect(() => S.decodeUnknownSync(schema.tags)("D")).toThrow()
45
+
46
+ expect(schema.isA.A({ _tag: "A", a: "ok" })).toBe(true)
47
+ expect(schema.isA.A({ _tag: "B", b: 1 })).toBe(false)
48
+ expect(schema.isA.B({ _tag: "B", b: 1 })).toBe(true)
49
+ expect(schema.isA.B({ _tag: "A", a: "ok" })).toBe(false)
50
+ expect(schema.isA.C({ _tag: "C", c: true })).toBe(true)
51
+ expect(schema.isA.C({ _tag: "A", a: "ok" })).toBe(false)
52
+
53
+ expect(isAOrB({ _tag: "A", a: "ok" })).toBe(true)
54
+ expect(isAOrB({ _tag: "B", b: 1 })).toBe(true)
55
+ expect(isAOrB({ _tag: "C", c: true })).toBe(false)
56
+ })