effect-app 4.0.0-beta.20 → 4.0.0-beta.21
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 +7 -0
- package/dist/Operations.d.ts +55 -19
- package/dist/Operations.d.ts.map +1 -1
- package/dist/Schema.d.ts +12 -46
- package/dist/Schema.d.ts.map +1 -1
- package/dist/Schema.js +5 -53
- package/dist/http/Request.d.ts.map +1 -1
- package/dist/http/Request.js +5 -5
- package/package.json +2 -2
- package/src/Schema.ts +24 -91
- package/src/http/Request.ts +7 -4
- package/test/schema.test.ts +10 -10
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# @effect-app/prelude
|
|
2
2
|
|
|
3
|
+
## 4.0.0-beta.21
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 0d349e7: Align effect-app tagged union helpers with Effect v4 by delegating to the native tagged union utilities, exposing v4-style `cases` and `guards`, and preserving the local `tags` helper.
|
|
8
|
+
- 75c72ee: update effect to 4.0.0-beta.36, adapt to Option<A> revert from A | undefined
|
|
9
|
+
|
|
3
10
|
## 4.0.0-beta.20
|
|
4
11
|
|
|
5
12
|
### Patch Changes
|
package/dist/Operations.d.ts
CHANGED
|
@@ -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" | "
|
|
3
|
+
export declare const OperationId: S.WithDefaults<S.brand<S.String, "NonEmptyString" | "NonEmptyString64k" | "NonEmptyString2k" | "NonEmptyString255" | "NonEmptyString50" | "NonEmptyString64" | "NonEmptyString80" | "NonEmptyString100" | "StringId"> & {
|
|
4
4
|
make: () => S.StringId;
|
|
5
|
-
withDefault: S.withConstructorDefault<S.brand<S.String, "NonEmptyString" | "
|
|
6
|
-
}> & S.brand<S.String, "NonEmptyString" | "
|
|
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"> & {
|
|
7
7
|
make: () => S.StringId;
|
|
8
|
-
withDefault: S.withConstructorDefault<S.brand<S.String, "NonEmptyString" | "
|
|
8
|
+
withDefault: S.withConstructorDefault<S.brand<S.String, "NonEmptyString" | "NonEmptyString64k" | "NonEmptyString2k" | "NonEmptyString255" | "NonEmptyString50" | "NonEmptyString64" | "NonEmptyString80" | "NonEmptyString100" | "StringId"> & 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,45 +20,81 @@ 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" | "
|
|
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>;
|
|
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" | "
|
|
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>;
|
|
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
|
-
|
|
36
|
-
isAnyOf: S.IsAny<OperationSuccess | OperationFailure>;
|
|
37
|
-
tagMap: {
|
|
35
|
+
readonly cases: {
|
|
38
36
|
OperationSuccess: typeof OperationSuccess;
|
|
39
37
|
OperationFailure: typeof OperationFailure;
|
|
40
38
|
};
|
|
41
|
-
|
|
39
|
+
readonly isAnyOf: <const Keys>(keys: readonly Keys[]) => (value: OperationSuccess | OperationFailure) => value is Extract<OperationSuccess, {
|
|
40
|
+
_tag: Keys;
|
|
41
|
+
}> | Extract<OperationFailure, {
|
|
42
|
+
_tag: Keys;
|
|
43
|
+
}>;
|
|
44
|
+
readonly guards: {
|
|
45
|
+
OperationSuccess: (u: unknown) => u is OperationSuccess;
|
|
46
|
+
OperationFailure: (u: unknown) => u is OperationFailure;
|
|
47
|
+
};
|
|
48
|
+
readonly match: {
|
|
49
|
+
<Cases extends {
|
|
50
|
+
OperationSuccess: (value: OperationSuccess) => any;
|
|
51
|
+
OperationFailure: (value: OperationFailure) => any;
|
|
52
|
+
}>(value: OperationSuccess | OperationFailure, cases: Cases): Cases[keyof Cases] extends (value: any) => infer R ? import("effect/Unify").Unify<R> : never;
|
|
53
|
+
<Cases extends {
|
|
54
|
+
OperationSuccess: (value: OperationSuccess) => any;
|
|
55
|
+
OperationFailure: (value: OperationFailure) => any;
|
|
56
|
+
}>(cases: Cases): (value: OperationSuccess | OperationFailure) => Cases[keyof Cases] extends (value: any) => infer R ? import("effect/Unify").Unify<R> : never;
|
|
57
|
+
};
|
|
58
|
+
} & {
|
|
59
|
+
readonly tags: S.Literals<["OperationSuccess", "OperationFailure"]>;
|
|
42
60
|
};
|
|
43
61
|
export type OperationResult = S.Schema.Type<typeof OperationResult>;
|
|
44
62
|
declare const Operation_base: S.EnhancedClass<Operation, S.Struct<{
|
|
45
|
-
id: S.WithDefaults<S.brand<S.String, "NonEmptyString" | "
|
|
63
|
+
id: S.WithDefaults<S.brand<S.String, "NonEmptyString" | "NonEmptyString64k" | "NonEmptyString2k" | "NonEmptyString255" | "NonEmptyString50" | "NonEmptyString64" | "NonEmptyString80" | "NonEmptyString100" | "StringId"> & {
|
|
46
64
|
make: () => S.StringId;
|
|
47
|
-
withDefault: S.withConstructorDefault<S.brand<S.String, "NonEmptyString" | "
|
|
48
|
-
}> & S.brand<S.String, "NonEmptyString" | "
|
|
65
|
+
withDefault: S.withConstructorDefault<S.brand<S.String, "NonEmptyString" | "NonEmptyString64k" | "NonEmptyString2k" | "NonEmptyString255" | "NonEmptyString50" | "NonEmptyString64" | "NonEmptyString80" | "NonEmptyString100" | "StringId"> & S.WithoutConstructorDefault>;
|
|
66
|
+
}> & S.brand<S.String, "NonEmptyString" | "NonEmptyString64k" | "NonEmptyString2k" | "NonEmptyString255" | "NonEmptyString50" | "NonEmptyString64" | "NonEmptyString80" | "NonEmptyString100" | "StringId"> & {
|
|
49
67
|
make: () => S.StringId;
|
|
50
|
-
withDefault: S.withConstructorDefault<S.brand<S.String, "NonEmptyString" | "
|
|
68
|
+
withDefault: S.withConstructorDefault<S.brand<S.String, "NonEmptyString" | "NonEmptyString64k" | "NonEmptyString2k" | "NonEmptyString255" | "NonEmptyString50" | "NonEmptyString64" | "NonEmptyString80" | "NonEmptyString100" | "StringId"> & S.WithoutConstructorDefault>;
|
|
51
69
|
};
|
|
52
|
-
title: S.WithDefaults<S.brand<S.String, "NonEmptyString" | "
|
|
70
|
+
title: S.WithDefaults<S.brand<S.String, "NonEmptyString" | "NonEmptyString64k" | "NonEmptyString2k">> & S.brand<S.String, "NonEmptyString" | "NonEmptyString64k" | "NonEmptyString2k">;
|
|
53
71
|
progress: S.optional<typeof OperationProgress>;
|
|
54
72
|
result: S.optional<S.Union<[typeof OperationSuccess, typeof OperationFailure]> & {
|
|
55
|
-
|
|
56
|
-
isAnyOf: S.IsAny<OperationSuccess | OperationFailure>;
|
|
57
|
-
tagMap: {
|
|
73
|
+
readonly cases: {
|
|
58
74
|
OperationSuccess: typeof OperationSuccess;
|
|
59
75
|
OperationFailure: typeof OperationFailure;
|
|
60
76
|
};
|
|
61
|
-
|
|
77
|
+
readonly isAnyOf: <const Keys>(keys: readonly Keys[]) => (value: OperationSuccess | OperationFailure) => value is Extract<OperationSuccess, {
|
|
78
|
+
_tag: Keys;
|
|
79
|
+
}> | Extract<OperationFailure, {
|
|
80
|
+
_tag: Keys;
|
|
81
|
+
}>;
|
|
82
|
+
readonly guards: {
|
|
83
|
+
OperationSuccess: (u: unknown) => u is OperationSuccess;
|
|
84
|
+
OperationFailure: (u: unknown) => u is OperationFailure;
|
|
85
|
+
};
|
|
86
|
+
readonly match: {
|
|
87
|
+
<Cases extends {
|
|
88
|
+
OperationSuccess: (value: OperationSuccess) => any;
|
|
89
|
+
OperationFailure: (value: OperationFailure) => any;
|
|
90
|
+
}>(value: OperationSuccess | OperationFailure, cases: Cases): Cases[keyof Cases] extends (value: any) => infer R ? import("effect/Unify").Unify<R> : never;
|
|
91
|
+
<Cases extends {
|
|
92
|
+
OperationSuccess: (value: OperationSuccess) => any;
|
|
93
|
+
OperationFailure: (value: OperationFailure) => any;
|
|
94
|
+
}>(cases: Cases): (value: OperationSuccess | OperationFailure) => Cases[keyof Cases] extends (value: any) => infer R ? import("effect/Unify").Unify<R> : never;
|
|
95
|
+
};
|
|
96
|
+
} & {
|
|
97
|
+
readonly tags: S.Literals<["OperationSuccess", "OperationFailure"]>;
|
|
62
98
|
}>;
|
|
63
99
|
createdAt: S.withConstructorDefault<S.decodeTo<import("effect/Schema").Date, S.String, never, never> & S.WithoutConstructorDefault>;
|
|
64
100
|
updatedAt: S.withConstructorDefault<import("effect/Schema").NullOr<S.decodeTo<import("effect/Schema").Date, S.String, never, never> & {
|
package/dist/Operations.d.ts.map
CHANGED
|
@@ -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
|
|
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
|
@@ -30,59 +30,25 @@ export declare const Email: import("./Schema/ext.js").WithDefaults<S.refine<Emai
|
|
|
30
30
|
export type Email = EmailType;
|
|
31
31
|
export declare const PhoneNumber: import("./Schema/ext.js").WithDefaults<import("./Schema/ext.js").WithDefaults<S.refine<PhoneNumberT, S.String>> & S.refine<PhoneNumberT, S.String>> & import("./Schema/ext.js").WithDefaults<S.refine<PhoneNumberT, S.String>> & S.refine<PhoneNumberT, S.String>;
|
|
32
32
|
export type PhoneNumber = PhoneNumberType;
|
|
33
|
-
export declare const makeIs: <A extends {
|
|
34
|
-
_tag: string;
|
|
35
|
-
}, I, RD, RE>(schema: S.Codec<A, I, RD, RE>) => Is<A>;
|
|
36
|
-
export declare const makeIsAnyOf: <A extends {
|
|
37
|
-
_tag: string;
|
|
38
|
-
}, I, RD, RE>(schema: S.Codec<A, I, RD, RE>) => IsAny<A>;
|
|
39
|
-
export type ExtractUnion<A extends {
|
|
40
|
-
_tag: string;
|
|
41
|
-
}, Tags extends A["_tag"]> = Extract<A, Record<"_tag", Tags>>;
|
|
42
|
-
export type Is<A extends {
|
|
43
|
-
_tag: string;
|
|
44
|
-
}> = {
|
|
45
|
-
[K in A as K["_tag"]]: (a: A) => a is K;
|
|
46
|
-
};
|
|
47
|
-
export type ElemType<A> = A extends Array<infer E> ? E : never;
|
|
48
|
-
export interface IsAny<A extends {
|
|
49
|
-
_tag: string;
|
|
50
|
-
}> {
|
|
51
|
-
<Keys extends A["_tag"][]>(...keys: Keys): (a: A) => a is ExtractUnion<A, ElemType<Keys>>;
|
|
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
|
-
};
|
|
60
|
-
export declare const taggedUnionMap: <Members extends readonly (S.Top & {
|
|
61
|
-
fields: {
|
|
62
|
-
_tag: S.tag<string>;
|
|
63
|
-
};
|
|
64
|
-
})[]>(self: Members) => TaggedUnionMap<Members>;
|
|
65
33
|
export declare const tags: <Members extends NonEmptyReadonlyArray<(S.Top & {
|
|
66
34
|
fields: {
|
|
67
35
|
_tag: S.tag<string>;
|
|
68
36
|
};
|
|
69
37
|
})>>(self: Members) => S.Literals<{ [Index in keyof Members]: S.Schema.Type<Members[Index]["fields"]["_tag"]>; }>;
|
|
70
|
-
|
|
71
|
-
readonly
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
isAnyOf: IsAny<A>;
|
|
75
|
-
};
|
|
76
|
-
export declare const TaggedUnion: <Members extends NonEmptyReadonlyArray<S.Codec<{
|
|
77
|
-
readonly _tag: string;
|
|
78
|
-
}, any, any, any> & {
|
|
38
|
+
type TaggedUnionMembers = NonEmptyReadonlyArray<S.Top & {
|
|
39
|
+
readonly Type: {
|
|
40
|
+
readonly _tag: string;
|
|
41
|
+
};
|
|
79
42
|
fields: {
|
|
80
43
|
_tag: S.tag<string>;
|
|
81
44
|
};
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
45
|
+
}>;
|
|
46
|
+
type TaggedUnionTags<Members extends TaggedUnionMembers> = S.Literals<{
|
|
47
|
+
[Index in keyof Members]: S.Schema.Type<Members[Index]["fields"]["_tag"]>;
|
|
48
|
+
}>;
|
|
49
|
+
type TaggedUnionWithTags<Members extends TaggedUnionMembers> = S.toTaggedUnion<"_tag", Members> & {
|
|
50
|
+
readonly tags: TaggedUnionTags<Members>;
|
|
87
51
|
};
|
|
52
|
+
export declare const ExtendTaggedUnion: <Members extends TaggedUnionMembers>(schema: S.Union<Members>) => TaggedUnionWithTags<Members>;
|
|
53
|
+
export declare const TaggedUnion: <Members extends TaggedUnionMembers>(...a: Members) => TaggedUnionWithTags<Members>;
|
|
88
54
|
//# sourceMappingURL=Schema.d.ts.map
|
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,
|
|
1
|
+
{"version":3,"file":"Schema.d.ts","sourceRoot":"","sources":["../src/Schema.ts"],"names":[],"mappings":"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"}
|
package/dist/Schema.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { SchemaAST } from "effect";
|
|
2
2
|
import * as S from "effect/Schema";
|
|
3
3
|
import { fakerArb } from "./faker.js";
|
|
4
4
|
import { Email as EmailT } from "./Schema/email.js";
|
|
@@ -38,62 +38,14 @@ export const PhoneNumber = PhoneNumberT
|
|
|
38
38
|
// eslint-disable-next-line @typescript-eslint/unbound-method
|
|
39
39
|
fakerArb((faker) => faker.phone.number)(fc).map(makePhoneNumber)
|
|
40
40
|
}), withDefaultMake);
|
|
41
|
-
export const makeIs = (schema) => {
|
|
42
|
-
// In v4, transformations are stored as encoding on nodes, not as wrapper nodes.
|
|
43
|
-
// Union member ASTs are directly Objects (TypeLiteral equivalent).
|
|
44
|
-
if (SchemaAST.isUnion(schema.ast)) {
|
|
45
|
-
return schema.ast.types.reduce((acc, t) => {
|
|
46
|
-
if (!SchemaAST.isObjects(t))
|
|
47
|
-
return acc;
|
|
48
|
-
const tag = Array.findFirst(t.propertySignatures, (_) => {
|
|
49
|
-
if (_.name === "_tag" && SchemaAST.isLiteral(_.type)) {
|
|
50
|
-
return Option.some(_.type);
|
|
51
|
-
}
|
|
52
|
-
return Option.none();
|
|
53
|
-
});
|
|
54
|
-
const ast = Option.getOrUndefined(tag);
|
|
55
|
-
if (!ast) {
|
|
56
|
-
return acc;
|
|
57
|
-
}
|
|
58
|
-
return {
|
|
59
|
-
...acc,
|
|
60
|
-
[String(ast.literal)]: (x) => x._tag === ast.literal
|
|
61
|
-
};
|
|
62
|
-
}, {});
|
|
63
|
-
}
|
|
64
|
-
throw new Error("Unsupported");
|
|
65
|
-
};
|
|
66
|
-
export const makeIsAnyOf = (schema) => {
|
|
67
|
-
if (SchemaAST.isUnion(schema.ast)) {
|
|
68
|
-
return (...keys) => (a) => keys.includes(a._tag);
|
|
69
|
-
}
|
|
70
|
-
throw new Error("Unsupported");
|
|
71
|
-
};
|
|
72
41
|
const getTagLiteral = (schema) => {
|
|
73
42
|
if (!SchemaAST.isLiteral(schema.ast)) {
|
|
74
43
|
throw new Error("Unsupported _tag schema: expected a literal AST");
|
|
75
44
|
}
|
|
76
45
|
return schema.ast.literal;
|
|
77
46
|
};
|
|
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
47
|
export const tags = (self) => S.Literals(self.map((key) => getTagLiteral(key.fields._tag)));
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
}));
|
|
92
|
-
export const TaggedUnion = (...a) => pipe(S.Union(a), (_) => extendM(_, (_) => ({
|
|
93
|
-
// is: S.is(_), // only works with never DecodingServices
|
|
94
|
-
isA: makeIs(_),
|
|
95
|
-
isAnyOf: makeIsAnyOf(_),
|
|
96
|
-
tagMap: taggedUnionMap(a),
|
|
97
|
-
tags: tags(a)
|
|
98
|
-
})));
|
|
99
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2NoZW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1NjaGVtYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFlLE1BQU0sUUFBUSxDQUFBO0FBQ3BFLE9BQU8sS0FBSyxDQUFDLE1BQU0sZUFBZSxDQUFBO0FBRWxDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFDckMsT0FBTyxFQUFFLEtBQUssSUFBSSxNQUFNLEVBQTJCLE1BQU0sbUJBQW1CLENBQUE7QUFDNUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQ2pELE9BQU8sRUFBRSxXQUFXLElBQUksWUFBWSxFQUF1QyxNQUFNLHlCQUF5QixDQUFBO0FBRTFHLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFFcEMsY0FBYyxlQUFlLENBQUE7QUFDN0IsOENBQThDO0FBQzlDLE9BQU8sRUFBRSxnQkFBZ0IsSUFBSSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFFL0QsY0FBYyxtQkFBbUIsQ0FBQTtBQUNqQyxPQUFPLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBRXRELE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFDdEQsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDOUcsT0FBTyxFQUFFLEdBQUcsRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUV6RCxjQUFjLG1CQUFtQixDQUFBO0FBQ2pDLGNBQWMsaUJBQWlCLENBQUE7QUFDL0IsY0FBYyx5QkFBeUIsQ0FB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
|
|
48
|
+
const extendTaggedUnionWithTags = (schema) => extendM(schema.pipe(S.toTaggedUnion("_tag")), () => ({ tags: tags(schema.members) }));
|
|
49
|
+
export const ExtendTaggedUnion = (schema) => extendTaggedUnionWithTags(schema);
|
|
50
|
+
export const TaggedUnion = (...a) => extendTaggedUnionWithTags(S.Union(a));
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2NoZW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1NjaGVtYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFlLE1BQU0sUUFBUSxDQUFBO0FBQy9DLE9BQU8sS0FBSyxDQUFDLE1BQU0sZUFBZSxDQUFBO0FBRWxDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFDckMsT0FBTyxFQUFFLEtBQUssSUFBSSxNQUFNLEVBQTJCLE1BQU0sbUJBQW1CLENBQUE7QUFDNUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQ2pELE9BQU8sRUFBRSxXQUFXLElBQUksWUFBWSxFQUF1QyxNQUFNLHlCQUF5QixDQUFBO0FBQzFHLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFFcEMsY0FBYyxlQUFlLENBQUE7QUFDN0IsOENBQThDO0FBQzlDLE9BQU8sRUFBRSxnQkFBZ0IsSUFBSSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFFL0QsY0FBYyxtQkFBbUIsQ0FBQTtBQUNqQyxPQUFPLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBRXRELE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFDdEQsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDOUcsT0FBTyxFQUFFLEdBQUcsRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUV6RCxjQUFjLG1CQUFtQixDQUFBO0FBQ2pDLGNBQWMsaUJBQWlCLENBQUE7QUFDL0IsY0FBYyx5QkFBeUIsQ0FBQTtBQUN2QyxjQUFjLHFCQUFxQixDQUFBO0FBQ25D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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Request.d.ts","sourceRoot":"","sources":["../../src/http/Request.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Request.d.ts","sourceRoot":"","sources":["../../src/http/Request.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAA;AACjF,OAAO,KAAK,MAAM,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,UAAU,EAAE,eAAe,EAAkC,MAAM,mBAAmB,CAAA;AAE/F,MAAM,WAAW,gBAAgB,CAAC,CAAC,CAAE,SAAQ,IAAI,CAAC,kBAAkB,EAAE,SAAS,GAAG,QAAQ,GAAG,eAAe,CAAC;IAC3G,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAA;CACjB;AAKD,eAAO,MAAM,oBAAoB,GAC/B,UAAU,kBAAkB,qFAOzB,CAAA;AAEL,eAAO,MAAM,UAAU,GAAI,QAAQ,UAAU,CAAC,UAAU,qGAmBlD,CAAA"}
|
package/dist/http/Request.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Option } from "effect";
|
|
1
2
|
import * as Effect from "../Effect.js";
|
|
2
3
|
import { HttpClient, HttpClientError, HttpClientRequest, HttpHeaders } from "./internal/lib.js";
|
|
3
4
|
// TODO: consider rebuilding the text/json helpers to use a cached effect
|
|
@@ -10,14 +11,13 @@ export const responseWithJsonBody = (response) => Effect.map(response.json, (bod
|
|
|
10
11
|
}));
|
|
11
12
|
export const demandJson = (client) => HttpClient
|
|
12
13
|
.mapRequest(client, (_) => HttpClientRequest.acceptJson(_))
|
|
13
|
-
.pipe(HttpClient.transform((r, request) => Effect.tap(r, (response) =>
|
|
14
|
-
.get(response.headers, "Content-Type")
|
|
15
|
-
?.startsWith("application/json")
|
|
14
|
+
.pipe(HttpClient.transform((r, request) => Effect.tap(r, (response) => Option
|
|
15
|
+
.exists(HttpHeaders.get(response.headers, "Content-Type"), (_) => _.startsWith("application/json"))
|
|
16
16
|
? Effect.void
|
|
17
17
|
: Effect.fail(new HttpClientError.DecodeError({
|
|
18
18
|
request,
|
|
19
19
|
response,
|
|
20
20
|
description: "not json response: "
|
|
21
|
-
+ HttpHeaders.get(response.headers, "Content-Type")
|
|
21
|
+
+ Option.getOrElse(HttpHeaders.get(response.headers, "Content-Type"), () => "<missing>")
|
|
22
22
|
})))));
|
|
23
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVxdWVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9odHRwL1JlcXVlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUUvQixPQUFPLEtBQUssTUFBTSxNQUFNLGNBQWMsQ0FBQTtBQUN0QyxPQUFPLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQU0vRix5RUFBeUU7QUFDekUsMEZBQTBGO0FBRTFGLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLENBQ2xDLFFBQTRCLEVBQzVCLEVBQUUsQ0FDRixNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQTZCLEVBQUUsQ0FBQyxDQUFDO0lBQzlELElBQUk7SUFDSixPQUFPLEVBQUUsUUFBUSxDQUFDLE9BQU87SUFDekIsTUFBTSxFQUFFLFFBQVEsQ0FBQyxNQUFNO0lBQ3ZCLGFBQWEsRUFBRSxRQUFRLENBQUMsYUFBYTtDQUN0QyxDQUFDLENBQUMsQ0FBQTtBQUVMLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxDQUFDLE1BQTZCLEVBQUUsRUFBRSxDQUMxRCxVQUFVO0tBQ1AsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQzFELElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQ3hDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FDekIsTUFBTTtLQUNELE1BQU0sQ0FDTCxXQUFXLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsY0FBYyxDQUFDLEVBQ2pELENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLGtCQUFrQixDQUFDLENBQ3hDO0lBQ0gsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJO0lBQ2IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ1gsSUFBSSxlQUFlLENBQUMsV0FBVyxDQUFDO1FBQzlCLE9BQU87UUFDUCxRQUFRO1FBQ1IsV0FBVyxFQUFFLHFCQUFxQjtjQUM5QixNQUFNLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxjQUFjLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUM7S0FDM0YsQ0FBQyxDQUNILENBQUMsQ0FDUCxDQUFDLENBQUEifQ==
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "effect-app",
|
|
3
|
-
"version": "4.0.0-beta.
|
|
3
|
+
"version": "4.0.0-beta.21",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"dependencies": {
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"@effect-app/eslint-shared-config": "0.5.7-beta.2"
|
|
26
26
|
},
|
|
27
27
|
"peerDependencies": {
|
|
28
|
-
"effect": "^4.0.0-beta.
|
|
28
|
+
"effect": "^4.0.0-beta.36"
|
|
29
29
|
},
|
|
30
30
|
"typesVersions": {
|
|
31
31
|
"*": {
|
package/src/Schema.ts
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { SchemaAST, type Tracer } from "effect"
|
|
2
2
|
import * as S from "effect/Schema"
|
|
3
3
|
import type { NonEmptyReadonlyArray } from "./Array.js"
|
|
4
4
|
import { fakerArb } from "./faker.js"
|
|
5
5
|
import { Email as EmailT, type Email as EmailType } from "./Schema/email.js"
|
|
6
6
|
import { withDefaultMake } from "./Schema/ext.js"
|
|
7
7
|
import { PhoneNumber as PhoneNumberT, type PhoneNumber as PhoneNumberType } from "./Schema/phoneNumber.js"
|
|
8
|
-
import type { AST } from "./Schema/schema.js"
|
|
9
8
|
import { extendM } from "./utils.js"
|
|
10
9
|
|
|
11
10
|
export * from "effect/Schema"
|
|
@@ -66,51 +65,6 @@ export const PhoneNumber = PhoneNumberT
|
|
|
66
65
|
|
|
67
66
|
export type PhoneNumber = PhoneNumberType
|
|
68
67
|
|
|
69
|
-
export const makeIs = <A extends { _tag: string }, I, RD, RE>(
|
|
70
|
-
schema: S.Codec<A, I, RD, RE>
|
|
71
|
-
) => {
|
|
72
|
-
// In v4, transformations are stored as encoding on nodes, not as wrapper nodes.
|
|
73
|
-
// Union member ASTs are directly Objects (TypeLiteral equivalent).
|
|
74
|
-
if (SchemaAST.isUnion(schema.ast)) {
|
|
75
|
-
return schema.ast.types.reduce((acc, t: AST.AST) => {
|
|
76
|
-
if (!SchemaAST.isObjects(t)) return acc
|
|
77
|
-
const tag = Array.findFirst(t.propertySignatures, (_: any) => {
|
|
78
|
-
if (_.name === "_tag" && SchemaAST.isLiteral(_.type)) {
|
|
79
|
-
return Option.some(_.type)
|
|
80
|
-
}
|
|
81
|
-
return Option.none()
|
|
82
|
-
})
|
|
83
|
-
const ast = Option.getOrUndefined(tag)
|
|
84
|
-
if (!ast) {
|
|
85
|
-
return acc
|
|
86
|
-
}
|
|
87
|
-
return {
|
|
88
|
-
...acc,
|
|
89
|
-
[String((ast as SchemaAST.Literal).literal)]: (x: { _tag: string }) =>
|
|
90
|
-
x._tag === (ast as SchemaAST.Literal).literal
|
|
91
|
-
}
|
|
92
|
-
}, {} as Is<A>)
|
|
93
|
-
}
|
|
94
|
-
throw new Error("Unsupported")
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
export const makeIsAnyOf = <A extends { _tag: string }, I, RD, RE>(
|
|
98
|
-
schema: S.Codec<A, I, RD, RE>
|
|
99
|
-
): IsAny<A> => {
|
|
100
|
-
if (SchemaAST.isUnion(schema.ast)) {
|
|
101
|
-
return <Keys extends A["_tag"][]>(...keys: Keys) => (a: A): a is ExtractUnion<A, ElemType<Keys>> =>
|
|
102
|
-
keys.includes(a._tag)
|
|
103
|
-
}
|
|
104
|
-
throw new Error("Unsupported")
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
export type ExtractUnion<A extends { _tag: string }, Tags extends A["_tag"]> = Extract<A, Record<"_tag", Tags>>
|
|
108
|
-
export type Is<A extends { _tag: string }> = { [K in A as K["_tag"]]: (a: A) => a is K }
|
|
109
|
-
export type ElemType<A> = A extends Array<infer E> ? E : never
|
|
110
|
-
export interface IsAny<A extends { _tag: string }> {
|
|
111
|
-
<Keys extends A["_tag"][]>(...keys: Keys): (a: A) => a is ExtractUnion<A, ElemType<Keys>>
|
|
112
|
-
}
|
|
113
|
-
|
|
114
68
|
const getTagLiteral = <Tag extends string>(schema: S.tag<Tag>): Tag => {
|
|
115
69
|
if (!SchemaAST.isLiteral(schema.ast)) {
|
|
116
70
|
throw new Error("Unsupported _tag schema: expected a literal AST")
|
|
@@ -118,24 +72,6 @@ const getTagLiteral = <Tag extends string>(schema: S.tag<Tag>): Tag => {
|
|
|
118
72
|
return schema.ast.literal as Tag
|
|
119
73
|
}
|
|
120
74
|
|
|
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
|
-
|
|
125
|
-
export const taggedUnionMap = <
|
|
126
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
127
|
-
Members extends readonly (S.Top & { fields: { _tag: S.tag<string> } })[]
|
|
128
|
-
>(
|
|
129
|
-
self: Members
|
|
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
|
-
}
|
|
138
|
-
|
|
139
75
|
export const tags = <
|
|
140
76
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
141
77
|
Members extends NonEmptyReadonlyArray<(S.Top & { fields: { _tag: S.tag<string> } })>
|
|
@@ -152,31 +88,28 @@ export const tags = <
|
|
|
152
88
|
}
|
|
153
89
|
>
|
|
154
90
|
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
91
|
+
type TaggedUnionMembers = NonEmptyReadonlyArray<
|
|
92
|
+
S.Top & { readonly Type: { readonly _tag: string }; fields: { _tag: S.tag<string> } }
|
|
93
|
+
>
|
|
94
|
+
|
|
95
|
+
type TaggedUnionTags<Members extends TaggedUnionMembers> = S.Literals<
|
|
96
|
+
{
|
|
97
|
+
[Index in keyof Members]: S.Schema.Type<Members[Index]["fields"]["_tag"]>
|
|
98
|
+
}
|
|
99
|
+
>
|
|
100
|
+
|
|
101
|
+
type TaggedUnionWithTags<Members extends TaggedUnionMembers> = S.toTaggedUnion<"_tag", Members> & {
|
|
102
|
+
readonly tags: TaggedUnionTags<Members>
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
const extendTaggedUnionWithTags = <Members extends TaggedUnionMembers>(
|
|
106
|
+
schema: S.Union<Members>
|
|
107
|
+
): TaggedUnionWithTags<Members> => extendM(schema.pipe(S.toTaggedUnion("_tag")), () => ({ tags: tags(schema.members) }))
|
|
108
|
+
|
|
109
|
+
export const ExtendTaggedUnion = <Members extends TaggedUnionMembers>(
|
|
110
|
+
schema: S.Union<Members>
|
|
111
|
+
): TaggedUnionWithTags<Members> => extendTaggedUnionWithTags(schema)
|
|
166
112
|
|
|
167
113
|
export const TaggedUnion = <
|
|
168
|
-
Members extends
|
|
169
|
-
|
|
170
|
-
>
|
|
171
|
-
>(...a: Members) =>
|
|
172
|
-
pipe(
|
|
173
|
-
S.Union(a),
|
|
174
|
-
(_) =>
|
|
175
|
-
extendM(_, (_) => ({
|
|
176
|
-
// is: S.is(_), // only works with never DecodingServices
|
|
177
|
-
isA: makeIs(_),
|
|
178
|
-
isAnyOf: makeIsAnyOf(_),
|
|
179
|
-
tagMap: taggedUnionMap(a),
|
|
180
|
-
tags: tags(a)
|
|
181
|
-
}))
|
|
182
|
-
)
|
|
114
|
+
Members extends TaggedUnionMembers
|
|
115
|
+
>(...a: Members): TaggedUnionWithTags<Members> => extendTaggedUnionWithTags(S.Union(a))
|
package/src/http/Request.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Option } from "effect"
|
|
1
2
|
import type { HttpClientResponse } from "effect/unstable/http/HttpClientResponse"
|
|
2
3
|
import * as Effect from "../Effect.js"
|
|
3
4
|
import { HttpClient, HttpClientError, HttpClientRequest, HttpHeaders } from "./internal/lib.js"
|
|
@@ -24,16 +25,18 @@ export const demandJson = (client: HttpClient.HttpClient) =>
|
|
|
24
25
|
.mapRequest(client, (_) => HttpClientRequest.acceptJson(_))
|
|
25
26
|
.pipe(HttpClient.transform((r, request) =>
|
|
26
27
|
Effect.tap(r, (response) =>
|
|
27
|
-
|
|
28
|
-
.
|
|
29
|
-
|
|
28
|
+
Option
|
|
29
|
+
.exists(
|
|
30
|
+
HttpHeaders.get(response.headers, "Content-Type"),
|
|
31
|
+
(_) => _.startsWith("application/json")
|
|
32
|
+
)
|
|
30
33
|
? Effect.void
|
|
31
34
|
: Effect.fail(
|
|
32
35
|
new HttpClientError.DecodeError({
|
|
33
36
|
request,
|
|
34
37
|
response,
|
|
35
38
|
description: "not json response: "
|
|
36
|
-
+ HttpHeaders.get(response.headers, "Content-Type")
|
|
39
|
+
+ Option.getOrElse(HttpHeaders.get(response.headers, "Content-Type"), () => "<missing>")
|
|
37
40
|
})
|
|
38
41
|
))
|
|
39
42
|
))
|
package/test/schema.test.ts
CHANGED
|
@@ -30,10 +30,10 @@ test("tagged union derives tag map and tags from v4 literal ast", () => {
|
|
|
30
30
|
S.TaggedStruct("B", { b: S.Number }),
|
|
31
31
|
S.TaggedStruct("C", { c: S.Boolean })
|
|
32
32
|
)
|
|
33
|
-
const caseA = schema.
|
|
34
|
-
const caseB = schema.
|
|
35
|
-
const caseC = schema.
|
|
36
|
-
const isAOrB = schema.isAnyOf("A", "B")
|
|
33
|
+
const caseA = schema.cases["A"]
|
|
34
|
+
const caseB = schema.cases["B"]
|
|
35
|
+
const caseC = schema.cases["C"]
|
|
36
|
+
const isAOrB = schema.isAnyOf(["A", "B"])
|
|
37
37
|
|
|
38
38
|
expect(caseA.fields._tag.ast.literal).toBe("A")
|
|
39
39
|
expect(caseB.fields._tag.ast.literal).toBe("B")
|
|
@@ -43,12 +43,12 @@ test("tagged union derives tag map and tags from v4 literal ast", () => {
|
|
|
43
43
|
expect(S.decodeSync(schema.tags)("C")).toBe("C")
|
|
44
44
|
expect(() => S.decodeUnknownSync(schema.tags)("D")).toThrow()
|
|
45
45
|
|
|
46
|
-
expect(schema.
|
|
47
|
-
expect(schema.
|
|
48
|
-
expect(schema.
|
|
49
|
-
expect(schema.
|
|
50
|
-
expect(schema.
|
|
51
|
-
expect(schema.
|
|
46
|
+
expect(schema.guards.A({ _tag: "A", a: "ok" })).toBe(true)
|
|
47
|
+
expect(schema.guards.A({ _tag: "B", b: 1 })).toBe(false)
|
|
48
|
+
expect(schema.guards.B({ _tag: "B", b: 1 })).toBe(true)
|
|
49
|
+
expect(schema.guards.B({ _tag: "A", a: "ok" })).toBe(false)
|
|
50
|
+
expect(schema.guards.C({ _tag: "C", c: true })).toBe(true)
|
|
51
|
+
expect(schema.guards.C({ _tag: "A", a: "ok" })).toBe(false)
|
|
52
52
|
|
|
53
53
|
expect(isAOrB({ _tag: "A", a: "ok" })).toBe(true)
|
|
54
54
|
expect(isAOrB({ _tag: "B", b: 1 })).toBe(true)
|