Generated-output differences

quicktype output changed between the PR base and tested PR merge revisions.
← Back to the pull request
43test cases
47files differ
47modified
0new
0deleted
1,138changed lines
+992 −146insertions / deletions
Base e56674b6c5c346cfb20dd74c868cb507aeed1b0c · PR merge 8d9595c1ff749305cd21df90e52df224be6651bb · Head 523f3397b7f15802f1e508d1ab0529b00961737e · raw patch
Test case

test/inputs/json/misc/00ec5.json

1 generated file · +19 −1
Mtypescript-effect-schemadefault / TopLevel.ts+19 −1
@@ -1,5 +1,23 @@
11 import * as S from "effect/Schema";
22
3+const objectSchema = <A>() =>
4+ S.declare(
5+ (input): input is Record<string, A> =>
6+ typeof input === "object" && input !== null && !Array.isArray(input)
7+ );
8+const mapSchema = <A, I, R>(value: S.Schema<A, I, R>) => {
9+ const entries = S.transform(objectSchema<unknown>(), S.Array(S.Tuple(S.String, value)), {
10+ strict: false,
11+ decode: Object.entries,
12+ encode: Object.fromEntries
13+ });
14+ return S.transform(entries, objectSchema<A>(), {
15+ strict: false,
16+ decode: Object.fromEntries,
17+ encode: Object.entries
18+ });
19+};
20+
321
422 export const Type = S.Literal(
523 "string",
@@ -56,7 +74,7 @@ export class Property extends S.Class<Property>("Property")({
5674 }) {}
5775
5876 export class Provider extends S.Class<Provider>("Provider")({
59- "properties": S.Record({ key: S.String, value: Property}),
77+ "properties": mapSchema(Property),
6078 }) {}
6179
6280 export class Definitions extends S.Class<Definitions>("Definitions")({
Test case

test/inputs/json/misc/033b1.json

1 generated file · +19 −1
Mtypescript-effect-schemadefault / TopLevel.ts+19 −1
@@ -1,8 +1,26 @@
11 import * as S from "effect/Schema";
22
3+const objectSchema = <A>() =>
4+ S.declare(
5+ (input): input is Record<string, A> =>
6+ typeof input === "object" && input !== null && !Array.isArray(input)
7+ );
8+const mapSchema = <A, I, R>(value: S.Schema<A, I, R>) => {
9+ const entries = S.transform(objectSchema<unknown>(), S.Array(S.Tuple(S.String, value)), {
10+ strict: false,
11+ decode: Object.entries,
12+ encode: Object.fromEntries
13+ });
14+ return S.transform(entries, objectSchema<A>(), {
15+ strict: false,
16+ decode: Object.fromEntries,
17+ encode: Object.entries
18+ });
19+};
20+
321
422 export class TopLevel extends S.Class<TopLevel>("TopLevel")({
523 "base": S.String,
624 "date": S.String.pipe(S.pattern(/^\d{4}-\d{2}-\d{2}$/)),
7- "rates": S.Record({ key: S.String, value: S.Number}),
25+ "rates": mapSchema(S.Number),
826 }) {}
Test case

test/inputs/json/misc/09f54.json

1 generated file · +19 −1
Mtypescript-effect-schemadefault / TopLevel.ts+19 −1
@@ -1,5 +1,23 @@
11 import * as S from "effect/Schema";
22
3+const objectSchema = <A>() =>
4+ S.declare(
5+ (input): input is Record<string, A> =>
6+ typeof input === "object" && input !== null && !Array.isArray(input)
7+ );
8+const mapSchema = <A, I, R>(value: S.Schema<A, I, R>) => {
9+ const entries = S.transform(objectSchema<unknown>(), S.Array(S.Tuple(S.String, value)), {
10+ strict: false,
11+ decode: Object.entries,
12+ encode: Object.fromEntries
13+ });
14+ return S.transform(entries, objectSchema<A>(), {
15+ strict: false,
16+ decode: Object.fromEntries,
17+ encode: Object.entries
18+ });
19+};
20+
321
422 export class Description extends S.Class<Description>("Description")({
523 "base_period": S.String,
@@ -14,6 +32,6 @@ export class Datum extends S.Class<Datum>("Datum")({
1432 }) {}
1533
1634 export class TopLevel extends S.Class<TopLevel>("TopLevel")({
17- "data": S.Record({ key: S.String, value: Datum}),
35+ "data": mapSchema(Datum),
1836 "description": Description,
1937 }) {}
Test case

test/inputs/json/misc/167d6.json

1 generated file · +19 −1
Mtypescript-effect-schemadefault / TopLevel.ts+19 −1
@@ -1,8 +1,26 @@
11 import * as S from "effect/Schema";
22
3+const objectSchema = <A>() =>
4+ S.declare(
5+ (input): input is Record<string, A> =>
6+ typeof input === "object" && input !== null && !Array.isArray(input)
7+ );
8+const mapSchema = <A, I, R>(value: S.Schema<A, I, R>) => {
9+ const entries = S.transform(objectSchema<unknown>(), S.Array(S.Tuple(S.String, value)), {
10+ strict: false,
11+ decode: Object.entries,
12+ encode: Object.fromEntries
13+ });
14+ return S.transform(entries, objectSchema<A>(), {
15+ strict: false,
16+ decode: Object.fromEntries,
17+ encode: Object.entries
18+ });
19+};
20+
321
422 export class TopLevel extends S.Class<TopLevel>("TopLevel")({
523 "base": S.String,
624 "date": S.String.pipe(S.pattern(/^\d{4}-\d{2}-\d{2}$/)),
7- "rates": S.Record({ key: S.String, value: S.Number}),
25+ "rates": mapSchema(S.Number),
826 }) {}
Test case

test/inputs/json/misc/43eaf.json

1 generated file · +19 −1
Mtypescript-effect-schemadefault / TopLevel.ts+19 −1
@@ -1,8 +1,26 @@
11 import * as S from "effect/Schema";
22
3+const objectSchema = <A>() =>
4+ S.declare(
5+ (input): input is Record<string, A> =>
6+ typeof input === "object" && input !== null && !Array.isArray(input)
7+ );
8+const mapSchema = <A, I, R>(value: S.Schema<A, I, R>) => {
9+ const entries = S.transform(objectSchema<unknown>(), S.Array(S.Tuple(S.String, value)), {
10+ strict: false,
11+ decode: Object.entries,
12+ encode: Object.fromEntries
13+ });
14+ return S.transform(entries, objectSchema<A>(), {
15+ strict: false,
16+ decode: Object.fromEntries,
17+ encode: Object.entries
18+ });
19+};
20+
321
422 export class TopLevel extends S.Class<TopLevel>("TopLevel")({
523 "base": S.String,
624 "date": S.String.pipe(S.pattern(/^\d{4}-\d{2}-\d{2}$/)),
7- "rates": S.Record({ key: S.String, value: S.Number}),
25+ "rates": mapSchema(S.Number),
826 }) {}
Test case

test/inputs/json/misc/5f3a1.json

1 generated file · +19 −1
Mtypescript-effect-schemadefault / TopLevel.ts+19 −1
@@ -1,8 +1,26 @@
11 import * as S from "effect/Schema";
22
3+const objectSchema = <A>() =>
4+ S.declare(
5+ (input): input is Record<string, A> =>
6+ typeof input === "object" && input !== null && !Array.isArray(input)
7+ );
8+const mapSchema = <A, I, R>(value: S.Schema<A, I, R>) => {
9+ const entries = S.transform(objectSchema<unknown>(), S.Array(S.Tuple(S.String, value)), {
10+ strict: false,
11+ decode: Object.entries,
12+ encode: Object.fromEntries
13+ });
14+ return S.transform(entries, objectSchema<A>(), {
15+ strict: false,
16+ decode: Object.fromEntries,
17+ encode: Object.entries
18+ });
19+};
20+
321
422 export class TopLevel extends S.Class<TopLevel>("TopLevel")({
523 "base": S.String,
624 "date": S.String.pipe(S.pattern(/^\d{4}-\d{2}-\d{2}$/)),
7- "rates": S.Record({ key: S.String, value: S.Number}),
25+ "rates": mapSchema(S.Number),
826 }) {}
Test case

test/inputs/json/misc/6260a.json

1 generated file · +19 −1
Mtypescript-effect-schemadefault / TopLevel.ts+19 −1
@@ -1,8 +1,26 @@
11 import * as S from "effect/Schema";
22
3+const objectSchema = <A>() =>
4+ S.declare(
5+ (input): input is Record<string, A> =>
6+ typeof input === "object" && input !== null && !Array.isArray(input)
7+ );
8+const mapSchema = <A, I, R>(value: S.Schema<A, I, R>) => {
9+ const entries = S.transform(objectSchema<unknown>(), S.Array(S.Tuple(S.String, value)), {
10+ strict: false,
11+ decode: Object.entries,
12+ encode: Object.fromEntries
13+ });
14+ return S.transform(entries, objectSchema<A>(), {
15+ strict: false,
16+ decode: Object.fromEntries,
17+ encode: Object.entries
18+ });
19+};
20+
321
422 export class TopLevel extends S.Class<TopLevel>("TopLevel")({
523 "base": S.String,
624 "date": S.String.pipe(S.pattern(/^\d{4}-\d{2}-\d{2}$/)),
7- "rates": S.Record({ key: S.String, value: S.Number}),
25+ "rates": mapSchema(S.Number),
826 }) {}
Test case

test/inputs/json/misc/70c77.json

1 generated file · +19 −1
Mtypescript-effect-schemadefault / TopLevel.ts+19 −1
@@ -1,8 +1,26 @@
11 import * as S from "effect/Schema";
22
3+const objectSchema = <A>() =>
4+ S.declare(
5+ (input): input is Record<string, A> =>
6+ typeof input === "object" && input !== null && !Array.isArray(input)
7+ );
8+const mapSchema = <A, I, R>(value: S.Schema<A, I, R>) => {
9+ const entries = S.transform(objectSchema<unknown>(), S.Array(S.Tuple(S.String, value)), {
10+ strict: false,
11+ decode: Object.entries,
12+ encode: Object.fromEntries
13+ });
14+ return S.transform(entries, objectSchema<A>(), {
15+ strict: false,
16+ decode: Object.fromEntries,
17+ encode: Object.entries
18+ });
19+};
20+
321
422 export class TopLevel extends S.Class<TopLevel>("TopLevel")({
523 "base": S.String,
624 "date": S.String.pipe(S.pattern(/^\d{4}-\d{2}-\d{2}$/)),
7- "rates": S.Record({ key: S.String, value: S.Number}),
25+ "rates": mapSchema(S.Number),
826 }) {}
Test case

test/inputs/json/misc/75912.json

1 generated file · +19 −1
Mtypescript-effect-schemadefault / TopLevel.ts+19 −1
@@ -1,8 +1,26 @@
11 import * as S from "effect/Schema";
22
3+const objectSchema = <A>() =>
4+ S.declare(
5+ (input): input is Record<string, A> =>
6+ typeof input === "object" && input !== null && !Array.isArray(input)
7+ );
8+const mapSchema = <A, I, R>(value: S.Schema<A, I, R>) => {
9+ const entries = S.transform(objectSchema<unknown>(), S.Array(S.Tuple(S.String, value)), {
10+ strict: false,
11+ decode: Object.entries,
12+ encode: Object.fromEntries
13+ });
14+ return S.transform(entries, objectSchema<A>(), {
15+ strict: false,
16+ decode: Object.fromEntries,
17+ encode: Object.entries
18+ });
19+};
20+
321
422 export class TopLevel extends S.Class<TopLevel>("TopLevel")({
523 "base": S.String,
624 "date": S.String.pipe(S.pattern(/^\d{4}-\d{2}-\d{2}$/)),
7- "rates": S.Record({ key: S.String, value: S.Number}),
25+ "rates": mapSchema(S.Number),
826 }) {}
Test case

test/inputs/json/misc/76ae1.json

1 generated file · +19 −1
Mtypescript-effect-schemadefault / TopLevel.ts+19 −1
@@ -1,5 +1,23 @@
11 import * as S from "effect/Schema";
22
3+const objectSchema = <A>() =>
4+ S.declare(
5+ (input): input is Record<string, A> =>
6+ typeof input === "object" && input !== null && !Array.isArray(input)
7+ );
8+const mapSchema = <A, I, R>(value: S.Schema<A, I, R>) => {
9+ const entries = S.transform(objectSchema<unknown>(), S.Array(S.Tuple(S.String, value)), {
10+ strict: false,
11+ decode: Object.entries,
12+ encode: Object.fromEntries
13+ });
14+ return S.transform(entries, objectSchema<A>(), {
15+ strict: false,
16+ decode: Object.fromEntries,
17+ encode: Object.entries
18+ });
19+};
20+
321
422 export const FormatEnum = S.Literal(
523 "string",
@@ -80,7 +98,7 @@ export class Property extends S.Class<Property>("Property")({
8098 }) {}
8199
82100 export class Article extends S.Class<Article>("Article")({
83- "properties": S.Record({ key: S.String, value: Property}),
101+ "properties": mapSchema(Property),
84102 }) {}
85103
86104 export class Definitions extends S.Class<Definitions>("Definitions")({
Test case

test/inputs/json/misc/7d397.json

1 generated file · +19 −1
Mtypescript-effect-schemadefault / TopLevel.ts+19 −1
@@ -1,5 +1,23 @@
11 import * as S from "effect/Schema";
22
3+const objectSchema = <A>() =>
4+ S.declare(
5+ (input): input is Record<string, A> =>
6+ typeof input === "object" && input !== null && !Array.isArray(input)
7+ );
8+const mapSchema = <A, I, R>(value: S.Schema<A, I, R>) => {
9+ const entries = S.transform(objectSchema<unknown>(), S.Array(S.Tuple(S.String, value)), {
10+ strict: false,
11+ decode: Object.entries,
12+ encode: Object.fromEntries
13+ });
14+ return S.transform(entries, objectSchema<A>(), {
15+ strict: false,
16+ decode: Object.fromEntries,
17+ encode: Object.entries
18+ });
19+};
20+
321
422 export const Type = S.Literal(
523 "string",
@@ -67,7 +85,7 @@ export class Property extends S.Class<Property>("Property")({
6785 }) {}
6886
6987 export class List extends S.Class<List>("List")({
70- "properties": S.Record({ key: S.String, value: Property}),
88+ "properties": mapSchema(Property),
7189 }) {}
7290
7391 export class Definitions extends S.Class<Definitions>("Definitions")({
Test case

test/inputs/json/misc/7f568.json

1 generated file · +19 −1
Mtypescript-effect-schemadefault / TopLevel.ts+19 −1
@@ -1,5 +1,23 @@
11 import * as S from "effect/Schema";
22
3+const objectSchema = <A>() =>
4+ S.declare(
5+ (input): input is Record<string, A> =>
6+ typeof input === "object" && input !== null && !Array.isArray(input)
7+ );
8+const mapSchema = <A, I, R>(value: S.Schema<A, I, R>) => {
9+ const entries = S.transform(objectSchema<unknown>(), S.Array(S.Tuple(S.String, value)), {
10+ strict: false,
11+ decode: Object.entries,
12+ encode: Object.fromEntries
13+ });
14+ return S.transform(entries, objectSchema<A>(), {
15+ strict: false,
16+ decode: Object.fromEntries,
17+ encode: Object.entries
18+ });
19+};
20+
321
422 export const Language = S.Literal(
523 "Markdown",
@@ -26,7 +44,7 @@ export class TopLevelElement extends S.Class<TopLevelElement>("TopLevelElement")
2644 "commits_url": S.String,
2745 "created_at": S.String.pipe(S.pattern(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})$/)),
2846 "description": S.NullOr(S.String),
29- "files": S.Record({ key: S.String, value: File}),
47+ "files": mapSchema(File),
3048 "forks_url": S.String,
3149 "git_pull_url": S.String,
3250 "git_push_url": S.String,
Test case

test/inputs/json/misc/9617f.json

1 generated file · +19 −1
Mtypescript-effect-schemadefault / TopLevel.ts+19 −1
@@ -1,8 +1,26 @@
11 import * as S from "effect/Schema";
22
3+const objectSchema = <A>() =>
4+ S.declare(
5+ (input): input is Record<string, A> =>
6+ typeof input === "object" && input !== null && !Array.isArray(input)
7+ );
8+const mapSchema = <A, I, R>(value: S.Schema<A, I, R>) => {
9+ const entries = S.transform(objectSchema<unknown>(), S.Array(S.Tuple(S.String, value)), {
10+ strict: false,
11+ decode: Object.entries,
12+ encode: Object.fromEntries
13+ });
14+ return S.transform(entries, objectSchema<A>(), {
15+ strict: false,
16+ decode: Object.fromEntries,
17+ encode: Object.entries
18+ });
19+};
20+
321
422 export class TopLevel extends S.Class<TopLevel>("TopLevel")({
523 "base": S.String,
624 "date": S.String.pipe(S.pattern(/^\d{4}-\d{2}-\d{2}$/)),
7- "rates": S.Record({ key: S.String, value: S.Number}),
25+ "rates": mapSchema(S.Number),
826 }) {}
Test case

test/inputs/json/misc/a9691.json

1 generated file · +19 −1
Mtypescript-effect-schemadefault / TopLevel.ts+19 −1
@@ -1,8 +1,26 @@
11 import * as S from "effect/Schema";
22
3+const objectSchema = <A>() =>
4+ S.declare(
5+ (input): input is Record<string, A> =>
6+ typeof input === "object" && input !== null && !Array.isArray(input)
7+ );
8+const mapSchema = <A, I, R>(value: S.Schema<A, I, R>) => {
9+ const entries = S.transform(objectSchema<unknown>(), S.Array(S.Tuple(S.String, value)), {
10+ strict: false,
11+ decode: Object.entries,
12+ encode: Object.fromEntries
13+ });
14+ return S.transform(entries, objectSchema<A>(), {
15+ strict: false,
16+ decode: Object.fromEntries,
17+ encode: Object.entries
18+ });
19+};
20+
321
422 export class TopLevel extends S.Class<TopLevel>("TopLevel")({
523 "base": S.String,
624 "date": S.String.pipe(S.pattern(/^\d{4}-\d{2}-\d{2}$/)),
7- "rates": S.Record({ key: S.String, value: S.Number}),
25+ "rates": mapSchema(S.Number),
826 }) {}
Test case

test/inputs/json/misc/ac944.json

1 generated file · +19 −1
Mtypescript-effect-schemadefault / TopLevel.ts+19 −1
@@ -1,8 +1,26 @@
11 import * as S from "effect/Schema";
22
3+const objectSchema = <A>() =>
4+ S.declare(
5+ (input): input is Record<string, A> =>
6+ typeof input === "object" && input !== null && !Array.isArray(input)
7+ );
8+const mapSchema = <A, I, R>(value: S.Schema<A, I, R>) => {
9+ const entries = S.transform(objectSchema<unknown>(), S.Array(S.Tuple(S.String, value)), {
10+ strict: false,
11+ decode: Object.entries,
12+ encode: Object.fromEntries
13+ });
14+ return S.transform(entries, objectSchema<A>(), {
15+ strict: false,
16+ decode: Object.fromEntries,
17+ encode: Object.entries
18+ });
19+};
20+
321
422 export class TopLevel extends S.Class<TopLevel>("TopLevel")({
523 "base": S.String,
624 "date": S.String.pipe(S.pattern(/^\d{4}-\d{2}-\d{2}$/)),
7- "rates": S.Record({ key: S.String, value: S.Number}),
25+ "rates": mapSchema(S.Number),
826 }) {}
Test case

test/inputs/json/misc/c0356.json

1 generated file · +19 −1
Mtypescript-effect-schemadefault / TopLevel.ts+19 −1
@@ -1,5 +1,23 @@
11 import * as S from "effect/Schema";
22
3+const objectSchema = <A>() =>
4+ S.declare(
5+ (input): input is Record<string, A> =>
6+ typeof input === "object" && input !== null && !Array.isArray(input)
7+ );
8+const mapSchema = <A, I, R>(value: S.Schema<A, I, R>) => {
9+ const entries = S.transform(objectSchema<unknown>(), S.Array(S.Tuple(S.String, value)), {
10+ strict: false,
11+ decode: Object.entries,
12+ encode: Object.fromEntries
13+ });
14+ return S.transform(entries, objectSchema<A>(), {
15+ strict: false,
16+ decode: Object.fromEntries,
17+ encode: Object.entries
18+ });
19+};
20+
321
422 export class Description extends S.Class<Description>("Description")({
523 "base_period": S.String,
@@ -13,6 +31,6 @@ export class Datum extends S.Class<Datum>("Datum")({
1331 }) {}
1432
1533 export class TopLevel extends S.Class<TopLevel>("TopLevel")({
16- "data": S.Record({ key: S.String, value: Datum}),
34+ "data": mapSchema(Datum),
1735 "description": Description,
1836 }) {}
Test case

test/inputs/json/misc/cb81e.json

1 generated file · +19 −1
Mtypescript-effect-schemadefault / TopLevel.ts+19 −1
@@ -1,5 +1,23 @@
11 import * as S from "effect/Schema";
22
3+const objectSchema = <A>() =>
4+ S.declare(
5+ (input): input is Record<string, A> =>
6+ typeof input === "object" && input !== null && !Array.isArray(input)
7+ );
8+const mapSchema = <A, I, R>(value: S.Schema<A, I, R>) => {
9+ const entries = S.transform(objectSchema<unknown>(), S.Array(S.Tuple(S.String, value)), {
10+ strict: false,
11+ decode: Object.entries,
12+ encode: Object.fromEntries
13+ });
14+ return S.transform(entries, objectSchema<A>(), {
15+ strict: false,
16+ decode: Object.fromEntries,
17+ encode: Object.entries
18+ });
19+};
20+
321
422 export class Description extends S.Class<Description>("Description")({
523 "base_period": S.String,
@@ -9,6 +27,6 @@ export class Description extends S.Class<Description>("Description")({
927 }) {}
1028
1129 export class TopLevel extends S.Class<TopLevel>("TopLevel")({
12- "data": S.Record({ key: S.String, value: S.String}),
30+ "data": mapSchema(S.String),
1331 "description": Description,
1432 }) {}
Test case

test/inputs/json/misc/cd463.json

1 generated file · +19 −1
Mtypescript-effect-schemadefault / TopLevel.ts+19 −1
@@ -1,8 +1,26 @@
11 import * as S from "effect/Schema";
22
3+const objectSchema = <A>() =>
4+ S.declare(
5+ (input): input is Record<string, A> =>
6+ typeof input === "object" && input !== null && !Array.isArray(input)
7+ );
8+const mapSchema = <A, I, R>(value: S.Schema<A, I, R>) => {
9+ const entries = S.transform(objectSchema<unknown>(), S.Array(S.Tuple(S.String, value)), {
10+ strict: false,
11+ decode: Object.entries,
12+ encode: Object.fromEntries
13+ });
14+ return S.transform(entries, objectSchema<A>(), {
15+ strict: false,
16+ decode: Object.fromEntries,
17+ encode: Object.entries
18+ });
19+};
20+
321
422 export class TopLevel extends S.Class<TopLevel>("TopLevel")({
523 "base": S.String,
624 "date": S.String.pipe(S.pattern(/^\d{4}-\d{2}-\d{2}$/)),
7- "rates": S.Record({ key: S.String, value: S.Number}),
25+ "rates": mapSchema(S.Number),
826 }) {}
Test case

test/inputs/json/misc/cfbce.json

1 generated file · +19 −1
Mtypescript-effect-schemadefault / TopLevel.ts+19 −1
@@ -1,8 +1,26 @@
11 import * as S from "effect/Schema";
22
3+const objectSchema = <A>() =>
4+ S.declare(
5+ (input): input is Record<string, A> =>
6+ typeof input === "object" && input !== null && !Array.isArray(input)
7+ );
8+const mapSchema = <A, I, R>(value: S.Schema<A, I, R>) => {
9+ const entries = S.transform(objectSchema<unknown>(), S.Array(S.Tuple(S.String, value)), {
10+ strict: false,
11+ decode: Object.entries,
12+ encode: Object.fromEntries
13+ });
14+ return S.transform(entries, objectSchema<A>(), {
15+ strict: false,
16+ decode: Object.fromEntries,
17+ encode: Object.entries
18+ });
19+};
20+
321
422 export class TopLevel extends S.Class<TopLevel>("TopLevel")({
523 "base": S.String,
624 "date": S.String.pipe(S.pattern(/^\d{4}-\d{2}-\d{2}$/)),
7- "rates": S.Record({ key: S.String, value: S.Number}),
25+ "rates": mapSchema(S.Number),
826 }) {}
Test case

test/inputs/json/misc/e324e.json

1 generated file · +19 −1
Mtypescript-effect-schemadefault / TopLevel.ts+19 −1
@@ -1,5 +1,23 @@
11 import * as S from "effect/Schema";
22
3+const objectSchema = <A>() =>
4+ S.declare(
5+ (input): input is Record<string, A> =>
6+ typeof input === "object" && input !== null && !Array.isArray(input)
7+ );
8+const mapSchema = <A, I, R>(value: S.Schema<A, I, R>) => {
9+ const entries = S.transform(objectSchema<unknown>(), S.Array(S.Tuple(S.String, value)), {
10+ strict: false,
11+ decode: Object.entries,
12+ encode: Object.fromEntries
13+ });
14+ return S.transform(entries, objectSchema<A>(), {
15+ strict: false,
16+ decode: Object.fromEntries,
17+ encode: Object.entries
18+ });
19+};
20+
321
422 export const Type = S.Literal(
523 "string",
@@ -61,7 +79,7 @@ export class Property extends S.Class<Property>("Property")({
6179 }) {}
6280
6381 export class Rate extends S.Class<Rate>("Rate")({
64- "properties": S.Record({ key: S.String, value: Property}),
82+ "properties": mapSchema(Property),
6583 }) {}
6684
6785 export class Definitions extends S.Class<Definitions>("Definitions")({
Test case

test/inputs/json/misc/ed095.json

1 generated file · +19 −1
Mtypescript-effect-schemadefault / TopLevel.ts+19 −1
@@ -1,4 +1,22 @@
11 import * as S from "effect/Schema";
22
3-export const TopLevel = S.Record({ key: S.String, value: S.String});
3+const objectSchema = <A>() =>
4+ S.declare(
5+ (input): input is Record<string, A> =>
6+ typeof input === "object" && input !== null && !Array.isArray(input)
7+ );
8+const mapSchema = <A, I, R>(value: S.Schema<A, I, R>) => {
9+ const entries = S.transform(objectSchema<unknown>(), S.Array(S.Tuple(S.String, value)), {
10+ strict: false,
11+ decode: Object.entries,
12+ encode: Object.fromEntries
13+ });
14+ return S.transform(entries, objectSchema<A>(), {
15+ strict: false,
16+ decode: Object.fromEntries,
17+ encode: Object.entries
18+ });
19+};
20+
21+export const TopLevel = mapSchema(S.String);
422 export type TopLevel = S.Schema.Type<typeof TopLevel>;
Test case

test/inputs/json/misc/fd329.json

1 generated file · +19 −1
Mtypescript-effect-schemadefault / TopLevel.ts+19 −1
@@ -1,5 +1,23 @@
11 import * as S from "effect/Schema";
22
3+const objectSchema = <A>() =>
4+ S.declare(
5+ (input): input is Record<string, A> =>
6+ typeof input === "object" && input !== null && !Array.isArray(input)
7+ );
8+const mapSchema = <A, I, R>(value: S.Schema<A, I, R>) => {
9+ const entries = S.transform(objectSchema<unknown>(), S.Array(S.Tuple(S.String, value)), {
10+ strict: false,
11+ decode: Object.entries,
12+ encode: Object.fromEntries
13+ });
14+ return S.transform(entries, objectSchema<A>(), {
15+ strict: false,
16+ decode: Object.fromEntries,
17+ encode: Object.entries
18+ });
19+};
20+
321
422 export class Description extends S.Class<Description>("Description")({
523 "base_period": S.String,
@@ -14,6 +32,6 @@ export class Datum extends S.Class<Datum>("Datum")({
1432 }) {}
1533
1634 export class TopLevel extends S.Class<TopLevel>("TopLevel")({
17- "data": S.Record({ key: S.String, value: Datum}),
35+ "data": mapSchema(Datum),
1836 "description": Description,
1937 }) {}
Test case

test/inputs/json/priority/bug2037.json

1 generated file · +21 −3
Mtypescript-effect-schemadefault / TopLevel.ts+21 −3
@@ -1,17 +1,35 @@
11 import * as S from "effect/Schema";
22
3+const objectSchema = <A>() =>
4+ S.declare(
5+ (input): input is Record<string, A> =>
6+ typeof input === "object" && input !== null && !Array.isArray(input)
7+ );
8+const mapSchema = <A, I, R>(value: S.Schema<A, I, R>) => {
9+ const entries = S.transform(objectSchema<unknown>(), S.Array(S.Tuple(S.String, value)), {
10+ strict: false,
11+ decode: Object.entries,
12+ encode: Object.fromEntries
13+ });
14+ return S.transform(entries, objectSchema<A>(), {
15+ strict: false,
16+ decode: Object.fromEntries,
17+ encode: Object.entries
18+ });
19+};
20+
321
422 export class Reward extends S.Class<Reward>("Reward")(S.Struct({}).pipe(S.filter(value => typeof value === "object" && value !== null && !Array.isArray(value)))
523 ) {}
624
725 export class Objective extends S.Class<Objective>("Objective")({
8- "rewards": S.Record({ key: S.String, value: Reward}),
26+ "rewards": mapSchema(Reward),
927 }) {}
1028
1129 export class MissionSpec extends S.Class<MissionSpec>("MissionSpec")({
12- "objectives": S.Record({ key: S.String, value: Objective}),
30+ "objectives": mapSchema(Objective),
1331 }) {}
1432
1533 export class TopLevel extends S.Class<TopLevel>("TopLevel")({
16- "mission_specs": S.Record({ key: S.String, value: MissionSpec}),
34+ "mission_specs": mapSchema(MissionSpec),
1735 }) {}
Test case

test/inputs/json/priority/bug855-short.json

1 generated file · +19 −1
Mtypescript-effect-schemadefault / TopLevel.ts+19 −1
@@ -1,5 +1,23 @@
11 import * as S from "effect/Schema";
22
3+const objectSchema = <A>() =>
4+ S.declare(
5+ (input): input is Record<string, A> =>
6+ typeof input === "object" && input !== null && !Array.isArray(input)
7+ );
8+const mapSchema = <A, I, R>(value: S.Schema<A, I, R>) => {
9+ const entries = S.transform(objectSchema<unknown>(), S.Array(S.Tuple(S.String, value)), {
10+ strict: false,
11+ decode: Object.entries,
12+ encode: Object.fromEntries
13+ });
14+ return S.transform(entries, objectSchema<A>(), {
15+ strict: false,
16+ decode: Object.fromEntries,
17+ encode: Object.entries
18+ });
19+};
20+
321
422 export class TopLevelValue extends S.Class<TopLevelValue>("TopLevelValue")({
523 "channel_id": S.String.pipe(S.pattern(/^-?\d+$/)),
@@ -9,5 +27,5 @@ export class TopLevelValue extends S.Class<TopLevelValue>("TopLevelValue")({
927 "id": S.Int,
1028 }) {}
1129
12-export const TopLevel = S.Record({ key: S.String, value: TopLevelValue});
30+export const TopLevel = mapSchema(TopLevelValue);
1331 export type TopLevel = S.Schema.Type<typeof TopLevel>;
Test case

test/inputs/json/priority/coin-pairs.json

1 generated file · +19 −1
Mtypescript-effect-schemadefault / TopLevel.ts+19 −1
@@ -1,5 +1,23 @@
11 import * as S from "effect/Schema";
22
3+const objectSchema = <A>() =>
4+ S.declare(
5+ (input): input is Record<string, A> =>
6+ typeof input === "object" && input !== null && !Array.isArray(input)
7+ );
8+const mapSchema = <A, I, R>(value: S.Schema<A, I, R>) => {
9+ const entries = S.transform(objectSchema<unknown>(), S.Array(S.Tuple(S.String, value)), {
10+ strict: false,
11+ decode: Object.entries,
12+ encode: Object.fromEntries
13+ });
14+ return S.transform(entries, objectSchema<A>(), {
15+ strict: false,
16+ decode: Object.fromEntries,
17+ encode: Object.entries
18+ });
19+};
20+
321
422 export class Pair extends S.Class<Pair>("Pair")({
523 "decimal_places": S.Int,
@@ -13,6 +31,6 @@ export class Pair extends S.Class<Pair>("Pair")({
1331 }) {}
1432
1533 export class TopLevel extends S.Class<TopLevel>("TopLevel")({
16- "pairs": S.Record({ key: S.String, value: Pair}),
34+ "pairs": mapSchema(Pair),
1735 "server_time": S.Int,
1836 }) {}
Test case

test/inputs/json/priority/combinations1.json

2 generated files · +54 −18
Mtypescript-effect-schemadefault / TopLevel.ts+27 −9
@@ -1,5 +1,23 @@
11 import * as S from "effect/Schema";
22
3+const objectSchema = <A>() =>
4+ S.declare(
5+ (input): input is Record<string, A> =>
6+ typeof input === "object" && input !== null && !Array.isArray(input)
7+ );
8+const mapSchema = <A, I, R>(value: S.Schema<A, I, R>) => {
9+ const entries = S.transform(objectSchema<unknown>(), S.Array(S.Tuple(S.String, value)), {
10+ strict: false,
11+ decode: Object.entries,
12+ encode: Object.fromEntries
13+ });
14+ return S.transform(entries, objectSchema<A>(), {
15+ strict: false,
16+ decode: Object.fromEntries,
17+ encode: Object.entries
18+ });
19+};
20+
321
422 export class Interacinar extends S.Class<Interacinar>("Interacinar")({
523 "assapan": S.Number,
@@ -293,18 +311,18 @@ export class TopLevel extends S.Class<TopLevel>("TopLevel")({
293311 "citrated": S.Int,
294312 "clinodome": S.Array(S.Union(S.Number, S.String)),
295313 "coadjust": S.Array(S.Union(S.Number, CoadjustClass)),
296- "consilience": S.Array(S.Union(S.Number, S.Record({ key: S.String, value: S.Int}))),
297- "constructor": S.Array(S.Union(S.Boolean, S.Record({ key: S.String, value: S.NullOr(S.Int)}))),
298- "continuative": S.Array(S.Union(S.Record({ key: S.String, value: S.Int}), S.String)),
314+ "consilience": S.Array(S.Union(S.Number, mapSchema(S.Int))),
315+ "constructor": S.Array(S.Union(S.Boolean, mapSchema(S.NullOr(S.Int)))),
316+ "continuative": S.Array(S.Union(mapSchema(S.Int), S.String)),
299317 "credulity": S.Array(S.Union(S.Int, S.String, CredulityClass)),
300- "creviced": S.Array(S.Union(S.Boolean, S.Record({ key: S.String, value: S.Int}), S.String)),
318+ "creviced": S.Array(S.Union(S.Boolean, mapSchema(S.Int), S.String)),
301319 "cubiculum": S.Array(S.Array(S.NullOr(S.Int))),
302320 "deruralize": S.Array(S.Union(S.Array(S.Null), S.Boolean, DeruralizeClass)),
303321 "diaereses": S.Array(S.Union(S.Array(S.Int), S.Boolean, DiaereseClass)),
304322 "dissolution": S.Array(S.NullOr(S.Array(S.Null))),
305323 "downstroke": S.Array(S.Union(S.Array(S.Null), S.Boolean, S.String)),
306324 "electrotautomerism": S.Array(S.NullOr(S.Number)),
307- "eleutheromania": S.Array(S.Union(S.Number, S.Record({ key: S.String, value: S.Int}), S.String)),
325+ "eleutheromania": S.Array(S.Union(S.Number, mapSchema(S.Int), S.String)),
308326 "encrust": Encrust,
309327 "entomoid": S.Array(S.Union(S.Int, CimeliaClass)),
310328 "epipaleolithic": S.Array(S.Union(S.Array(S.Int), S.Number)),
@@ -314,10 +332,10 @@ export class TopLevel extends S.Class<TopLevel>("TopLevel")({
314332 "flagmaking": S.Array(S.Union(S.Boolean, S.Number, FlagmakingClass)),
315333 "fluorometer": S.Array(S.Union(S.Int, S.String, S.Null)),
316334 "fulsome": S.Array(S.NullOr(S.Int)),
317- "fuzzy": S.Array(S.Union(S.Int, S.Record({ key: S.String, value: S.NullOr(S.Int)}))),
335+ "fuzzy": S.Array(S.Union(S.Int, mapSchema(S.NullOr(S.Int)))),
318336 "gardenwards": S.Array(S.Union(S.Array(S.Int), S.Boolean, S.String)),
319- "generalissimo": S.Array(S.Union(S.Boolean, S.Record({ key: S.String, value: S.Int}), S.Null)),
320- "habeas": S.Array(S.NullOr(S.Record({ key: S.String, value: S.Int}))),
337+ "generalissimo": S.Array(S.Union(S.Boolean, mapSchema(S.Int), S.Null)),
338+ "habeas": S.Array(S.NullOr(mapSchema(S.Int))),
321339 "hemicrystalline": S.Array(S.Union(S.String, CimeliaClass)),
322340 "hemocoele": S.Array(S.Union(S.Array(S.Int), HemocoeleClass)),
323341 "hoister": S.Array(S.Union(S.String, CimeliaClass, S.Null)),
@@ -328,5 +346,5 @@ export class TopLevel extends S.Class<TopLevel>("TopLevel")({
328346 "intentiveness": S.Array(S.Union(S.Number, S.String, CimeliaClass)),
329347 "interacinar": Interacinar,
330348 "intercorrelation": S.Array(S.NullOr(S.Array(S.Int))),
331- "jacutinga": S.Array(S.Union(S.Array(S.Int), S.Record({ key: S.String, value: S.NullOr(S.Int)}))),
349+ "jacutinga": S.Array(S.Union(S.Array(S.Int), mapSchema(S.NullOr(S.Int)))),
332350 }) {}
Mtypescript-effect-schemajust-schema-true--8c4ca457bcba / TopLevel.ts+27 −9
@@ -1,5 +1,23 @@
11 import * as S from "effect/Schema";
22
3+const objectSchema = <A>() =>
4+ S.declare(
5+ (input): input is Record<string, A> =>
6+ typeof input === "object" && input !== null && !Array.isArray(input)
7+ );
8+const mapSchema = <A, I, R>(value: S.Schema<A, I, R>) => {
9+ const entries = S.transform(objectSchema<unknown>(), S.Array(S.Tuple(S.String, value)), {
10+ strict: false,
11+ decode: Object.entries,
12+ encode: Object.fromEntries
13+ });
14+ return S.transform(entries, objectSchema<A>(), {
15+ strict: false,
16+ decode: Object.fromEntries,
17+ encode: Object.entries
18+ });
19+};
20+
321
422 export class Interacinar extends S.Class<Interacinar>("Interacinar")({
523 "assapan": S.Number,
@@ -293,18 +311,18 @@ export class TopLevel extends S.Class<TopLevel>("TopLevel")({
293311 "citrated": S.Int,
294312 "clinodome": S.Array(S.Union(S.Number, S.String)),
295313 "coadjust": S.Array(S.Union(S.Number, CoadjustClass)),
296- "consilience": S.Array(S.Union(S.Number, S.Record({ key: S.String, value: S.Int}))),
297- "constructor": S.Array(S.Union(S.Boolean, S.Record({ key: S.String, value: S.NullOr(S.Int)}))),
298- "continuative": S.Array(S.Union(S.Record({ key: S.String, value: S.Int}), S.String)),
314+ "consilience": S.Array(S.Union(S.Number, mapSchema(S.Int))),
315+ "constructor": S.Array(S.Union(S.Boolean, mapSchema(S.NullOr(S.Int)))),
316+ "continuative": S.Array(S.Union(mapSchema(S.Int), S.String)),
299317 "credulity": S.Array(S.Union(S.Int, S.String, CredulityClass)),
300- "creviced": S.Array(S.Union(S.Boolean, S.Record({ key: S.String, value: S.Int}), S.String)),
318+ "creviced": S.Array(S.Union(S.Boolean, mapSchema(S.Int), S.String)),
301319 "cubiculum": S.Array(S.Array(S.NullOr(S.Int))),
302320 "deruralize": S.Array(S.Union(S.Array(S.Null), S.Boolean, DeruralizeClass)),
303321 "diaereses": S.Array(S.Union(S.Array(S.Int), S.Boolean, DiaereseClass)),
304322 "dissolution": S.Array(S.NullOr(S.Array(S.Null))),
305323 "downstroke": S.Array(S.Union(S.Array(S.Null), S.Boolean, S.String)),
306324 "electrotautomerism": S.Array(S.NullOr(S.Number)),
307- "eleutheromania": S.Array(S.Union(S.Number, S.Record({ key: S.String, value: S.Int}), S.String)),
325+ "eleutheromania": S.Array(S.Union(S.Number, mapSchema(S.Int), S.String)),
308326 "encrust": Encrust,
309327 "entomoid": S.Array(S.Union(S.Int, CimeliaClass)),
310328 "epipaleolithic": S.Array(S.Union(S.Array(S.Int), S.Number)),
@@ -314,10 +332,10 @@ export class TopLevel extends S.Class<TopLevel>("TopLevel")({
314332 "flagmaking": S.Array(S.Union(S.Boolean, S.Number, FlagmakingClass)),
315333 "fluorometer": S.Array(S.Union(S.Int, S.String, S.Null)),
316334 "fulsome": S.Array(S.NullOr(S.Int)),
317- "fuzzy": S.Array(S.Union(S.Int, S.Record({ key: S.String, value: S.NullOr(S.Int)}))),
335+ "fuzzy": S.Array(S.Union(S.Int, mapSchema(S.NullOr(S.Int)))),
318336 "gardenwards": S.Array(S.Union(S.Array(S.Int), S.Boolean, S.String)),
319- "generalissimo": S.Array(S.Union(S.Boolean, S.Record({ key: S.String, value: S.Int}), S.Null)),
320- "habeas": S.Array(S.NullOr(S.Record({ key: S.String, value: S.Int}))),
337+ "generalissimo": S.Array(S.Union(S.Boolean, mapSchema(S.Int), S.Null)),
338+ "habeas": S.Array(S.NullOr(mapSchema(S.Int))),
321339 "hemicrystalline": S.Array(S.Union(S.String, CimeliaClass)),
322340 "hemocoele": S.Array(S.Union(S.Array(S.Int), HemocoeleClass)),
323341 "hoister": S.Array(S.Union(S.String, CimeliaClass, S.Null)),
@@ -328,5 +346,5 @@ export class TopLevel extends S.Class<TopLevel>("TopLevel")({
328346 "intentiveness": S.Array(S.Union(S.Number, S.String, CimeliaClass)),
329347 "interacinar": Interacinar,
330348 "intercorrelation": S.Array(S.NullOr(S.Array(S.Int))),
331- "jacutinga": S.Array(S.Union(S.Array(S.Int), S.Record({ key: S.String, value: S.NullOr(S.Int)}))),
349+ "jacutinga": S.Array(S.Union(S.Array(S.Int), mapSchema(S.NullOr(S.Int)))),
332350 }) {}
Test case

test/inputs/json/priority/combinations2.json

2 generated files · +60 −24
Mtypescript-effect-schemadefault / TopLevel.ts+30 −12
@@ -1,5 +1,23 @@
11 import * as S from "effect/Schema";
22
3+const objectSchema = <A>() =>
4+ S.declare(
5+ (input): input is Record<string, A> =>
6+ typeof input === "object" && input !== null && !Array.isArray(input)
7+ );
8+const mapSchema = <A, I, R>(value: S.Schema<A, I, R>) => {
9+ const entries = S.transform(objectSchema<unknown>(), S.Array(S.Tuple(S.String, value)), {
10+ strict: false,
11+ decode: Object.entries,
12+ encode: Object.fromEntries
13+ });
14+ return S.transform(entries, objectSchema<A>(), {
15+ strict: false,
16+ decode: Object.fromEntries,
17+ encode: Object.entries
18+ });
19+};
20+
321
422 export class OskarClass extends S.Class<OskarClass>("OskarClass")({
523 "Acrobates": S.Null,
@@ -233,8 +251,8 @@ export class AlleviateClass extends S.Class<AlleviateClass>("AlleviateClass")({
233251
234252 export class TopLevel extends S.Class<TopLevel>("TopLevel")({
235253 "Abranchiata": S.Array(S.Union(S.Array(S.Int), S.Int, S.Null)),
236- "academe": S.Array(S.Union(S.Array(S.Int), S.Int, S.Record({ key: S.String, value: S.Int}))),
237- "acquirable": S.Array(S.Union(S.Array(S.NullOr(S.Int)), S.Record({ key: S.String, value: S.Int}))),
254+ "academe": S.Array(S.Union(S.Array(S.Int), S.Int, mapSchema(S.Int))),
255+ "acquirable": S.Array(S.Union(S.Array(S.NullOr(S.Int)), mapSchema(S.Int))),
238256 "aerometry": S.Array(S.Union(S.Boolean, S.Number)),
239257 "alexin": S.Array(S.Union(S.Array(S.Int), S.Boolean)),
240258 "alleviate": S.Array(S.Union(S.Array(S.NullOr(S.Int)), AlleviateClass)),
@@ -243,38 +261,38 @@ export class TopLevel extends S.Class<TopLevel>("TopLevel")({
243261 "amphithyron": S.Array(S.NullOr(Amphithyron)),
244262 "Andriana": S.Array(S.NullOr(S.String)),
245263 "ankee": S.Array(S.Union(S.Array(S.Int), S.Int, AnkeeClass)),
246- "annihilator": S.Array(S.NullOr(S.Record({ key: S.String, value: S.NullOr(S.Int)}))),
264+ "annihilator": S.Array(S.NullOr(mapSchema(S.NullOr(S.Int)))),
247265 "annulose": S.Null,
248266 "Ansarie": S.Array(S.Union(S.Array(S.Int), AnsarieClass, S.Null)),
249267 "aphasia": S.Array(S.Union(S.Array(S.Int), S.Int)),
250268 "asprawl": S.Array(S.Union(S.Number, S.String)),
251269 "attractive": S.Array(S.NullOr(S.Boolean)),
252- "barksome": S.Record({ key: S.String, value: S.Int}),
270+ "barksome": mapSchema(S.Int),
253271 "bedesman": S.Array(S.Union(S.Boolean, S.Number, S.String)),
254272 "belard": S.Array(S.Union(S.Array(S.Int), S.Number, Rebecca)),
255- "bocking": S.Array(S.Union(S.Array(S.Int), S.Boolean, S.Record({ key: S.String, value: S.Int}))),
256- "brawlingly": S.Array(S.Union(S.Array(S.Null), S.Record({ key: S.String, value: S.NullOr(S.Int)}))),
273+ "bocking": S.Array(S.Union(S.Array(S.Int), S.Boolean, mapSchema(S.Int))),
274+ "brawlingly": S.Array(S.Union(S.Array(S.Null), mapSchema(S.NullOr(S.Int)))),
257275 "brookie": S.Array(S.Union(S.Array(S.Int), Rebecca)),
258276 "bumboatman": S.Array(S.Union(S.Array(S.Null), S.String, S.Null)),
259277 "bystreet": S.Array(S.Null),
260278 "calaverite": S.Array(S.Union(S.Array(S.Int), S.String)),
261- "catallactic": S.Array(S.Union(S.Array(S.Null), S.Boolean, S.Record({ key: S.String, value: S.Int}))),
262- "cemental": S.Array(S.Union(S.Array(S.Int), S.Number, S.Record({ key: S.String, value: S.Int}))),
279+ "catallactic": S.Array(S.Union(S.Array(S.Null), S.Boolean, mapSchema(S.Int))),
280+ "cemental": S.Array(S.Union(S.Array(S.Int), S.Number, mapSchema(S.Int))),
263281 "Chytridiaceae": S.Array(S.Union(S.Boolean, ChytridiaceaeClass, S.Null)),
264282 "Discordia": S.Array(S.Union(S.Array(S.Int), DiscordiaClass)),
265283 "Endomyces": S.Array(S.Union(S.Int, S.String)),
266284 "Epinephelidae": S.Array(S.Union(S.Boolean, S.Int, S.String)),
267- "Eupatorium": S.Array(S.Union(S.Array(S.Null), S.Record({ key: S.String, value: S.Int}))),
285+ "Eupatorium": S.Array(S.Union(S.Array(S.Null), mapSchema(S.Int))),
268286 "Gryphosaurus": S.Array(S.Union(S.Array(S.Int), S.String, GryphosaurusClass)),
269- "Koryak": S.Array(S.Union(S.Record({ key: S.String, value: S.NullOr(S.Int)}), S.String)),
287+ "Koryak": S.Array(S.Union(mapSchema(S.NullOr(S.Int)), S.String)),
270288 "Lavinia": S.Array(S.Union(S.String, LaviniaClass)),
271289 "Oskar": S.Array(S.Union(S.Array(S.Int), OskarClass)),
272290 "Rebecca": S.Array(S.Union(S.Int, S.String, Rebecca)),
273291 "Rhomboganoidei": S.Array(S.Union(S.Array(S.Int), S.String, Rebecca)),
274292 "Rigsmal": S.Boolean,
275293 "Ruellia": S.Array(S.Union(S.Boolean, S.String, Rebecca)),
276- "School": S.Array(S.Union(S.Int, S.Record({ key: S.String, value: S.Int}), S.Null)),
294+ "School": S.Array(S.Union(S.Int, mapSchema(S.Int), S.Null)),
277295 "Shakespearolater": S.Array(S.Union(S.Array(S.Int), S.Number, S.String)),
278296 "Svan": S.Array(S.Number),
279- "Wayao": S.Record({ key: S.String, value: S.Number}),
297+ "Wayao": mapSchema(S.Number),
280298 }) {}
Mtypescript-effect-schemajust-schema-true--8c4ca457bcba / TopLevel.ts+30 −12
@@ -1,5 +1,23 @@
11 import * as S from "effect/Schema";
22
3+const objectSchema = <A>() =>
4+ S.declare(
5+ (input): input is Record<string, A> =>
6+ typeof input === "object" && input !== null && !Array.isArray(input)
7+ );
8+const mapSchema = <A, I, R>(value: S.Schema<A, I, R>) => {
9+ const entries = S.transform(objectSchema<unknown>(), S.Array(S.Tuple(S.String, value)), {
10+ strict: false,
11+ decode: Object.entries,
12+ encode: Object.fromEntries
13+ });
14+ return S.transform(entries, objectSchema<A>(), {
15+ strict: false,
16+ decode: Object.fromEntries,
17+ encode: Object.entries
18+ });
19+};
20+
321
422 export class OskarClass extends S.Class<OskarClass>("OskarClass")({
523 "Acrobates": S.Null,
@@ -233,8 +251,8 @@ export class AlleviateClass extends S.Class<AlleviateClass>("AlleviateClass")({
233251
234252 export class TopLevel extends S.Class<TopLevel>("TopLevel")({
235253 "Abranchiata": S.Array(S.Union(S.Array(S.Int), S.Int, S.Null)),
236- "academe": S.Array(S.Union(S.Array(S.Int), S.Int, S.Record({ key: S.String, value: S.Int}))),
237- "acquirable": S.Array(S.Union(S.Array(S.NullOr(S.Int)), S.Record({ key: S.String, value: S.Int}))),
254+ "academe": S.Array(S.Union(S.Array(S.Int), S.Int, mapSchema(S.Int))),
255+ "acquirable": S.Array(S.Union(S.Array(S.NullOr(S.Int)), mapSchema(S.Int))),
238256 "aerometry": S.Array(S.Union(S.Boolean, S.Number)),
239257 "alexin": S.Array(S.Union(S.Array(S.Int), S.Boolean)),
240258 "alleviate": S.Array(S.Union(S.Array(S.NullOr(S.Int)), AlleviateClass)),
@@ -243,38 +261,38 @@ export class TopLevel extends S.Class<TopLevel>("TopLevel")({
243261 "amphithyron": S.Array(S.NullOr(Amphithyron)),
244262 "Andriana": S.Array(S.NullOr(S.String)),
245263 "ankee": S.Array(S.Union(S.Array(S.Int), S.Int, AnkeeClass)),
246- "annihilator": S.Array(S.NullOr(S.Record({ key: S.String, value: S.NullOr(S.Int)}))),
264+ "annihilator": S.Array(S.NullOr(mapSchema(S.NullOr(S.Int)))),
247265 "annulose": S.Null,
248266 "Ansarie": S.Array(S.Union(S.Array(S.Int), AnsarieClass, S.Null)),
249267 "aphasia": S.Array(S.Union(S.Array(S.Int), S.Int)),
250268 "asprawl": S.Array(S.Union(S.Number, S.String)),
251269 "attractive": S.Array(S.NullOr(S.Boolean)),
252- "barksome": S.Record({ key: S.String, value: S.Int}),
270+ "barksome": mapSchema(S.Int),
253271 "bedesman": S.Array(S.Union(S.Boolean, S.Number, S.String)),
254272 "belard": S.Array(S.Union(S.Array(S.Int), S.Number, Rebecca)),
255- "bocking": S.Array(S.Union(S.Array(S.Int), S.Boolean, S.Record({ key: S.String, value: S.Int}))),
256- "brawlingly": S.Array(S.Union(S.Array(S.Null), S.Record({ key: S.String, value: S.NullOr(S.Int)}))),
273+ "bocking": S.Array(S.Union(S.Array(S.Int), S.Boolean, mapSchema(S.Int))),
274+ "brawlingly": S.Array(S.Union(S.Array(S.Null), mapSchema(S.NullOr(S.Int)))),
257275 "brookie": S.Array(S.Union(S.Array(S.Int), Rebecca)),
258276 "bumboatman": S.Array(S.Union(S.Array(S.Null), S.String, S.Null)),
259277 "bystreet": S.Array(S.Null),
260278 "calaverite": S.Array(S.Union(S.Array(S.Int), S.String)),
261- "catallactic": S.Array(S.Union(S.Array(S.Null), S.Boolean, S.Record({ key: S.String, value: S.Int}))),
262- "cemental": S.Array(S.Union(S.Array(S.Int), S.Number, S.Record({ key: S.String, value: S.Int}))),
279+ "catallactic": S.Array(S.Union(S.Array(S.Null), S.Boolean, mapSchema(S.Int))),
280+ "cemental": S.Array(S.Union(S.Array(S.Int), S.Number, mapSchema(S.Int))),
263281 "Chytridiaceae": S.Array(S.Union(S.Boolean, ChytridiaceaeClass, S.Null)),
264282 "Discordia": S.Array(S.Union(S.Array(S.Int), DiscordiaClass)),
265283 "Endomyces": S.Array(S.Union(S.Int, S.String)),
266284 "Epinephelidae": S.Array(S.Union(S.Boolean, S.Int, S.String)),
267- "Eupatorium": S.Array(S.Union(S.Array(S.Null), S.Record({ key: S.String, value: S.Int}))),
285+ "Eupatorium": S.Array(S.Union(S.Array(S.Null), mapSchema(S.Int))),
268286 "Gryphosaurus": S.Array(S.Union(S.Array(S.Int), S.String, GryphosaurusClass)),
269- "Koryak": S.Array(S.Union(S.Record({ key: S.String, value: S.NullOr(S.Int)}), S.String)),
287+ "Koryak": S.Array(S.Union(mapSchema(S.NullOr(S.Int)), S.String)),
270288 "Lavinia": S.Array(S.Union(S.String, LaviniaClass)),
271289 "Oskar": S.Array(S.Union(S.Array(S.Int), OskarClass)),
272290 "Rebecca": S.Array(S.Union(S.Int, S.String, Rebecca)),
273291 "Rhomboganoidei": S.Array(S.Union(S.Array(S.Int), S.String, Rebecca)),
274292 "Rigsmal": S.Boolean,
275293 "Ruellia": S.Array(S.Union(S.Boolean, S.String, Rebecca)),
276- "School": S.Array(S.Union(S.Int, S.Record({ key: S.String, value: S.Int}), S.Null)),
294+ "School": S.Array(S.Union(S.Int, mapSchema(S.Int), S.Null)),
277295 "Shakespearolater": S.Array(S.Union(S.Array(S.Int), S.Number, S.String)),
278296 "Svan": S.Array(S.Number),
279- "Wayao": S.Record({ key: S.String, value: S.Number}),
297+ "Wayao": mapSchema(S.Number),
280298 }) {}
Test case

test/inputs/json/priority/combinations3.json

2 generated files · +50 −14
Mtypescript-effect-schemadefault / TopLevel.ts+25 −7
@@ -1,5 +1,23 @@
11 import * as S from "effect/Schema";
22
3+const objectSchema = <A>() =>
4+ S.declare(
5+ (input): input is Record<string, A> =>
6+ typeof input === "object" && input !== null && !Array.isArray(input)
7+ );
8+const mapSchema = <A, I, R>(value: S.Schema<A, I, R>) => {
9+ const entries = S.transform(objectSchema<unknown>(), S.Array(S.Tuple(S.String, value)), {
10+ strict: false,
11+ decode: Object.entries,
12+ encode: Object.fromEntries
13+ });
14+ return S.transform(entries, objectSchema<A>(), {
15+ strict: false,
16+ decode: Object.fromEntries,
17+ encode: Object.entries
18+ });
19+};
20+
321
422 export class PrefreshmanClass extends S.Class<PrefreshmanClass>("PrefreshmanClass")({
523 "azorubine": S.Null,
@@ -340,7 +358,7 @@ export class JurorClass extends S.Class<JurorClass>("JurorClass")({
340358
341359 export class TopLevel extends S.Class<TopLevel>("TopLevel")({
342360 "juror": S.Array(S.Union(S.Boolean, JurorClass)),
343- "kongoni": S.Array(S.Union(S.Array(S.Int), S.Record({ key: S.String, value: S.Int}))),
361+ "kongoni": S.Array(S.Union(S.Array(S.Int), mapSchema(S.Int))),
344362 "ladronism": S.Array(S.Union(S.Number, S.String, LadronismClass)),
345363 "landlubberly": S.Array(S.Union(S.Boolean, S.Int, LandlubberlyClass)),
346364 "listener": S.Array(S.Union(S.Array(S.Null), S.Int)),
@@ -361,24 +379,24 @@ export class TopLevel extends S.Class<TopLevel>("TopLevel")({
361379 "nonvaluation": S.Array(S.Union(S.Array(S.Null), S.Boolean, S.Number)),
362380 "occupationalist": S.Array(S.Union(S.Array(S.Null), OccupationalistClass, S.Null)),
363381 "outrival": S.Array(S.Union(S.Number, OutrivalClass, S.Null)),
364- "paleographically": S.Array(S.Union(S.Number, S.Record({ key: S.String, value: S.NullOr(S.Int)}))),
365- "pamphletwise": S.Array(S.Union(S.Int, S.Record({ key: S.String, value: S.Int}), S.String)),
382+ "paleographically": S.Array(S.Union(S.Number, mapSchema(S.NullOr(S.Int)))),
383+ "pamphletwise": S.Array(S.Union(S.Int, mapSchema(S.Int), S.String)),
366384 "pediatrics": S.Array(S.Union(S.Boolean, S.Number, S.Null)),
367385 "perceptive": S.Array(S.Boolean),
368386 "piaculum": S.Array(S.Union(S.Number, PiaculumClass)),
369387 "piccadilly": S.Array(S.Union(S.Number, S.String, S.Null)),
370388 "piffler": S.Array(S.Union(S.Array(S.Null), MonaziteClass)),
371389 "pithful": S.Array(S.Union(S.Boolean, S.Int, S.Null)),
372- "placuntitis": S.Array(S.Union(S.Int, S.Record({ key: S.String, value: S.Int}))),
373- "plectopterous": S.Array(S.Union(S.Number, S.Record({ key: S.String, value: S.Int}))),
390+ "placuntitis": S.Array(S.Union(S.Int, mapSchema(S.Int))),
391+ "plectopterous": S.Array(S.Union(S.Number, mapSchema(S.Int))),
374392 "pneumocele": S.Array(S.NullOr(Pneumocele)),
375393 "poliorcetic": S.Array(S.Union(S.Boolean, MonaziteClass)),
376- "poormaster": S.Array(S.Union(S.Array(S.Int), S.Record({ key: S.String, value: S.Int}), S.Null)),
394+ "poormaster": S.Array(S.Union(S.Array(S.Int), mapSchema(S.Int), S.Null)),
377395 "potwhisky": S.Array(S.Union(S.Int, PotwhiskyClass, S.Null)),
378396 "practicalizer": S.Array(S.Union(S.Array(S.Null), S.String, MonaziteClass)),
379397 "prefreshman": S.Array(S.Union(S.Array(S.Null), S.String, PrefreshmanClass)),
380398 "prehensility": S.Array(S.Union(S.Array(S.Null), S.Boolean, MonaziteClass)),
381399 "prevoidance": S.Array(S.Union(S.Array(S.Int), S.Int, MonaziteClass)),
382- "probant": S.Array(S.Record({ key: S.String, value: S.NullOr(S.Int)})),
400+ "probant": S.Array(mapSchema(S.NullOr(S.Int))),
383401 "protext": S.Array(S.Union(S.Array(S.Int), S.Boolean, MonaziteClass)),
384402 }) {}
Mtypescript-effect-schemajust-schema-true--8c4ca457bcba / TopLevel.ts+25 −7
@@ -1,5 +1,23 @@
11 import * as S from "effect/Schema";
22
3+const objectSchema = <A>() =>
4+ S.declare(
5+ (input): input is Record<string, A> =>
6+ typeof input === "object" && input !== null && !Array.isArray(input)
7+ );
8+const mapSchema = <A, I, R>(value: S.Schema<A, I, R>) => {
9+ const entries = S.transform(objectSchema<unknown>(), S.Array(S.Tuple(S.String, value)), {
10+ strict: false,
11+ decode: Object.entries,
12+ encode: Object.fromEntries
13+ });
14+ return S.transform(entries, objectSchema<A>(), {
15+ strict: false,
16+ decode: Object.fromEntries,
17+ encode: Object.entries
18+ });
19+};
20+
321
422 export class PrefreshmanClass extends S.Class<PrefreshmanClass>("PrefreshmanClass")({
523 "azorubine": S.Null,
@@ -340,7 +358,7 @@ export class JurorClass extends S.Class<JurorClass>("JurorClass")({
340358
341359 export class TopLevel extends S.Class<TopLevel>("TopLevel")({
342360 "juror": S.Array(S.Union(S.Boolean, JurorClass)),
343- "kongoni": S.Array(S.Union(S.Array(S.Int), S.Record({ key: S.String, value: S.Int}))),
361+ "kongoni": S.Array(S.Union(S.Array(S.Int), mapSchema(S.Int))),
344362 "ladronism": S.Array(S.Union(S.Number, S.String, LadronismClass)),
345363 "landlubberly": S.Array(S.Union(S.Boolean, S.Int, LandlubberlyClass)),
346364 "listener": S.Array(S.Union(S.Array(S.Null), S.Int)),
@@ -361,24 +379,24 @@ export class TopLevel extends S.Class<TopLevel>("TopLevel")({
361379 "nonvaluation": S.Array(S.Union(S.Array(S.Null), S.Boolean, S.Number)),
362380 "occupationalist": S.Array(S.Union(S.Array(S.Null), OccupationalistClass, S.Null)),
363381 "outrival": S.Array(S.Union(S.Number, OutrivalClass, S.Null)),
364- "paleographically": S.Array(S.Union(S.Number, S.Record({ key: S.String, value: S.NullOr(S.Int)}))),
365- "pamphletwise": S.Array(S.Union(S.Int, S.Record({ key: S.String, value: S.Int}), S.String)),
382+ "paleographically": S.Array(S.Union(S.Number, mapSchema(S.NullOr(S.Int)))),
383+ "pamphletwise": S.Array(S.Union(S.Int, mapSchema(S.Int), S.String)),
366384 "pediatrics": S.Array(S.Union(S.Boolean, S.Number, S.Null)),
367385 "perceptive": S.Array(S.Boolean),
368386 "piaculum": S.Array(S.Union(S.Number, PiaculumClass)),
369387 "piccadilly": S.Array(S.Union(S.Number, S.String, S.Null)),
370388 "piffler": S.Array(S.Union(S.Array(S.Null), MonaziteClass)),
371389 "pithful": S.Array(S.Union(S.Boolean, S.Int, S.Null)),
372- "placuntitis": S.Array(S.Union(S.Int, S.Record({ key: S.String, value: S.Int}))),
373- "plectopterous": S.Array(S.Union(S.Number, S.Record({ key: S.String, value: S.Int}))),
390+ "placuntitis": S.Array(S.Union(S.Int, mapSchema(S.Int))),
391+ "plectopterous": S.Array(S.Union(S.Number, mapSchema(S.Int))),
374392 "pneumocele": S.Array(S.NullOr(Pneumocele)),
375393 "poliorcetic": S.Array(S.Union(S.Boolean, MonaziteClass)),
376- "poormaster": S.Array(S.Union(S.Array(S.Int), S.Record({ key: S.String, value: S.Int}), S.Null)),
394+ "poormaster": S.Array(S.Union(S.Array(S.Int), mapSchema(S.Int), S.Null)),
377395 "potwhisky": S.Array(S.Union(S.Int, PotwhiskyClass, S.Null)),
378396 "practicalizer": S.Array(S.Union(S.Array(S.Null), S.String, MonaziteClass)),
379397 "prefreshman": S.Array(S.Union(S.Array(S.Null), S.String, PrefreshmanClass)),
380398 "prehensility": S.Array(S.Union(S.Array(S.Null), S.Boolean, MonaziteClass)),
381399 "prevoidance": S.Array(S.Union(S.Array(S.Int), S.Int, MonaziteClass)),
382- "probant": S.Array(S.Record({ key: S.String, value: S.NullOr(S.Int)})),
400+ "probant": S.Array(mapSchema(S.NullOr(S.Int))),
383401 "protext": S.Array(S.Union(S.Array(S.Int), S.Boolean, MonaziteClass)),
384402 }) {}
Test case

test/inputs/json/priority/combinations4.json

2 generated files · +58 −22
Mtypescript-effect-schemadefault / TopLevel.ts+29 −11
@@ -1,5 +1,23 @@
11 import * as S from "effect/Schema";
22
3+const objectSchema = <A>() =>
4+ S.declare(
5+ (input): input is Record<string, A> =>
6+ typeof input === "object" && input !== null && !Array.isArray(input)
7+ );
8+const mapSchema = <A, I, R>(value: S.Schema<A, I, R>) => {
9+ const entries = S.transform(objectSchema<unknown>(), S.Array(S.Tuple(S.String, value)), {
10+ strict: false,
11+ decode: Object.entries,
12+ encode: Object.fromEntries
13+ });
14+ return S.transform(entries, objectSchema<A>(), {
15+ strict: false,
16+ decode: Object.fromEntries,
17+ encode: Object.entries
18+ });
19+};
20+
321
422 export class WrothyClass extends S.Class<WrothyClass>("WrothyClass")({
523 "Aeschynanthus": S.Null,
@@ -389,7 +407,7 @@ export class TopLevel extends S.Class<TopLevel>("TopLevel")({
389407 "pulpitism": S.Array(S.Union(S.Array(S.Int), S.Number, PulpitismClass)),
390408 "pyodermia": S.Array(S.Union(S.Int, PyodermiaClass)),
391409 "quebrachine": S.Array(S.Union(S.Boolean, QuebrachineClass, S.Null)),
392- "querier": S.Array(S.Union(S.Boolean, S.Record({ key: S.String, value: S.Int}))),
410+ "querier": S.Array(S.Union(S.Boolean, mapSchema(S.Int))),
393411 "rebarbative": S.Array(S.Union(S.Array(S.Int), S.Boolean, S.Number)),
394412 "reimagine": S.Array(Reimagine),
395413 "ressaut": Ressaut,
@@ -398,10 +416,10 @@ export class TopLevel extends S.Class<TopLevel>("TopLevel")({
398416 "rewrite": S.Array(S.Union(S.Array(S.Null), S.Number, RewriteClass)),
399417 "saccoderm": S.Array(S.Union(S.Array(S.Int), S.String, S.Null)),
400418 "santir": S.Array(S.Union(S.Number, SantirClass)),
401- "saprophilous": S.Array(S.Union(S.Record({ key: S.String, value: S.Int}), S.String, S.Null)),
419+ "saprophilous": S.Array(S.Union(mapSchema(S.Int), S.String, S.Null)),
402420 "saxten": S.Array(S.Union(S.String, SaxtenClass)),
403421 "scatty": S.Array(S.NullOr(Scatty)),
404- "scoffer": S.Array(S.Union(S.Array(S.Null), S.Record({ key: S.String, value: S.Int}), S.Null)),
422+ "scoffer": S.Array(S.Union(S.Array(S.Null), mapSchema(S.Int), S.Null)),
405423 "scrampum": S.Array(S.Union(S.Array(S.Int), S.Boolean, S.Null)),
406424 "semantic": S.Number,
407425 "serpentinic": S.Array(S.Union(S.Array(S.Int), S.Number)),
@@ -409,7 +427,7 @@ export class TopLevel extends S.Class<TopLevel>("TopLevel")({
409427 "sistering": S.Array(S.Union(S.Array(S.Null), S.Int, SisteringClass)),
410428 "staghunting": S.Array(Staghunting),
411429 "stagmometer": S.Array(S.Union(S.Array(S.NullOr(S.Int)), S.String)),
412- "stimulability": S.Array(S.Union(S.Boolean, S.Int, S.Record({ key: S.String, value: S.Int}))),
430+ "stimulability": S.Array(S.Union(S.Boolean, S.Int, mapSchema(S.Int))),
413431 "strangleable": S.Array(S.Union(S.Array(S.Null), S.Number)),
414432 "strenuosity": S.Array(S.Union(S.Array(S.Null), StrenuosityClass)),
415433 "tabaxir": S.Array(S.Union(S.Boolean, S.Number)),
@@ -419,22 +437,22 @@ export class TopLevel extends S.Class<TopLevel>("TopLevel")({
419437 "tortricine": S.Array(S.Union(S.Array(S.NullOr(S.Int)), QuebrachineClass)),
420438 "truantcy": S.Array(S.Union(S.Boolean, TruantcyClass)),
421439 "turgesce": S.Array(S.String),
422- "unbeginning": S.Array(S.Union(S.Array(S.Null), S.Record({ key: S.String, value: S.Int}), S.String)),
440+ "unbeginning": S.Array(S.Union(S.Array(S.Null), mapSchema(S.Int), S.String)),
423441 "underdunged": S.Array(S.Number),
424- "undesirability": S.Array(S.Union(S.Array(S.Int), S.Record({ key: S.String, value: S.Int}), S.String)),
425- "unerasing": S.Array(S.Union(S.Array(S.Null), S.Int, S.Record({ key: S.String, value: S.Int}))),
442+ "undesirability": S.Array(S.Union(S.Array(S.Int), mapSchema(S.Int), S.String)),
443+ "unerasing": S.Array(S.Union(S.Array(S.Null), S.Int, mapSchema(S.Int))),
426444 "unguentarium": S.Array(S.Union(S.Array(S.Null), S.Int, S.Null)),
427445 "unimpeachably": S.Array(S.Union(S.Boolean, UnimpeachablyClass)),
428- "unmortgaged": S.Array(S.Union(S.Number, S.Record({ key: S.String, value: S.Int}), S.Null)),
446+ "unmortgaged": S.Array(S.Union(S.Number, mapSchema(S.Int), S.Null)),
429447 "unobstructed": S.Array(S.Union(S.Int, QuebrachineClass, S.Null)),
430448 "unreceptivity": S.Array(S.Union(S.Array(S.Null), S.Int, S.String)),
431449 "unsatisfactoriness": S.Array(S.Union(S.Array(S.Int), S.Boolean, S.Int)),
432450 "unsecurity": S.Array(S.Int),
433451 "unstressed": S.Array(S.Union(S.Boolean, S.String, UnstressedClass)),
434- "untasked": S.Array(S.Union(S.Array(S.Null), S.Number, S.Record({ key: S.String, value: S.Int}))),
435- "unvarying": S.Array(S.Union(S.Boolean, S.Number, S.Record({ key: S.String, value: S.Int}))),
452+ "untasked": S.Array(S.Union(S.Array(S.Null), S.Number, mapSchema(S.Int))),
453+ "unvarying": S.Array(S.Union(S.Boolean, S.Number, mapSchema(S.Int))),
436454 "vehemently": S.Array(S.Union(S.Array(S.Null), S.Boolean, S.Null)),
437- "warriorship": S.Record({ key: S.String, value: S.Boolean}),
455+ "warriorship": mapSchema(S.Boolean),
438456 "whitepot": S.Array(S.Union(S.Number, QuebrachineClass)),
439457 "wrothy": S.Array(S.Union(S.Array(S.Null), WrothyClass)),
440458 }) {}
Mtypescript-effect-schemajust-schema-true--8c4ca457bcba / TopLevel.ts+29 −11
@@ -1,5 +1,23 @@
11 import * as S from "effect/Schema";
22
3+const objectSchema = <A>() =>
4+ S.declare(
5+ (input): input is Record<string, A> =>
6+ typeof input === "object" && input !== null && !Array.isArray(input)
7+ );
8+const mapSchema = <A, I, R>(value: S.Schema<A, I, R>) => {
9+ const entries = S.transform(objectSchema<unknown>(), S.Array(S.Tuple(S.String, value)), {
10+ strict: false,
11+ decode: Object.entries,
12+ encode: Object.fromEntries
13+ });
14+ return S.transform(entries, objectSchema<A>(), {
15+ strict: false,
16+ decode: Object.fromEntries,
17+ encode: Object.entries
18+ });
19+};
20+
321
422 export class WrothyClass extends S.Class<WrothyClass>("WrothyClass")({
523 "Aeschynanthus": S.Null,
@@ -389,7 +407,7 @@ export class TopLevel extends S.Class<TopLevel>("TopLevel")({
389407 "pulpitism": S.Array(S.Union(S.Array(S.Int), S.Number, PulpitismClass)),
390408 "pyodermia": S.Array(S.Union(S.Int, PyodermiaClass)),
391409 "quebrachine": S.Array(S.Union(S.Boolean, QuebrachineClass, S.Null)),
392- "querier": S.Array(S.Union(S.Boolean, S.Record({ key: S.String, value: S.Int}))),
410+ "querier": S.Array(S.Union(S.Boolean, mapSchema(S.Int))),
393411 "rebarbative": S.Array(S.Union(S.Array(S.Int), S.Boolean, S.Number)),
394412 "reimagine": S.Array(Reimagine),
395413 "ressaut": Ressaut,
@@ -398,10 +416,10 @@ export class TopLevel extends S.Class<TopLevel>("TopLevel")({
398416 "rewrite": S.Array(S.Union(S.Array(S.Null), S.Number, RewriteClass)),
399417 "saccoderm": S.Array(S.Union(S.Array(S.Int), S.String, S.Null)),
400418 "santir": S.Array(S.Union(S.Number, SantirClass)),
401- "saprophilous": S.Array(S.Union(S.Record({ key: S.String, value: S.Int}), S.String, S.Null)),
419+ "saprophilous": S.Array(S.Union(mapSchema(S.Int), S.String, S.Null)),
402420 "saxten": S.Array(S.Union(S.String, SaxtenClass)),
403421 "scatty": S.Array(S.NullOr(Scatty)),
404- "scoffer": S.Array(S.Union(S.Array(S.Null), S.Record({ key: S.String, value: S.Int}), S.Null)),
422+ "scoffer": S.Array(S.Union(S.Array(S.Null), mapSchema(S.Int), S.Null)),
405423 "scrampum": S.Array(S.Union(S.Array(S.Int), S.Boolean, S.Null)),
406424 "semantic": S.Number,
407425 "serpentinic": S.Array(S.Union(S.Array(S.Int), S.Number)),
@@ -409,7 +427,7 @@ export class TopLevel extends S.Class<TopLevel>("TopLevel")({
409427 "sistering": S.Array(S.Union(S.Array(S.Null), S.Int, SisteringClass)),
410428 "staghunting": S.Array(Staghunting),
411429 "stagmometer": S.Array(S.Union(S.Array(S.NullOr(S.Int)), S.String)),
412- "stimulability": S.Array(S.Union(S.Boolean, S.Int, S.Record({ key: S.String, value: S.Int}))),
430+ "stimulability": S.Array(S.Union(S.Boolean, S.Int, mapSchema(S.Int))),
413431 "strangleable": S.Array(S.Union(S.Array(S.Null), S.Number)),
414432 "strenuosity": S.Array(S.Union(S.Array(S.Null), StrenuosityClass)),
415433 "tabaxir": S.Array(S.Union(S.Boolean, S.Number)),
@@ -419,22 +437,22 @@ export class TopLevel extends S.Class<TopLevel>("TopLevel")({
419437 "tortricine": S.Array(S.Union(S.Array(S.NullOr(S.Int)), QuebrachineClass)),
420438 "truantcy": S.Array(S.Union(S.Boolean, TruantcyClass)),
421439 "turgesce": S.Array(S.String),
422- "unbeginning": S.Array(S.Union(S.Array(S.Null), S.Record({ key: S.String, value: S.Int}), S.String)),
440+ "unbeginning": S.Array(S.Union(S.Array(S.Null), mapSchema(S.Int), S.String)),
423441 "underdunged": S.Array(S.Number),
424- "undesirability": S.Array(S.Union(S.Array(S.Int), S.Record({ key: S.String, value: S.Int}), S.String)),
425- "unerasing": S.Array(S.Union(S.Array(S.Null), S.Int, S.Record({ key: S.String, value: S.Int}))),
442+ "undesirability": S.Array(S.Union(S.Array(S.Int), mapSchema(S.Int), S.String)),
443+ "unerasing": S.Array(S.Union(S.Array(S.Null), S.Int, mapSchema(S.Int))),
426444 "unguentarium": S.Array(S.Union(S.Array(S.Null), S.Int, S.Null)),
427445 "unimpeachably": S.Array(S.Union(S.Boolean, UnimpeachablyClass)),
428- "unmortgaged": S.Array(S.Union(S.Number, S.Record({ key: S.String, value: S.Int}), S.Null)),
446+ "unmortgaged": S.Array(S.Union(S.Number, mapSchema(S.Int), S.Null)),
429447 "unobstructed": S.Array(S.Union(S.Int, QuebrachineClass, S.Null)),
430448 "unreceptivity": S.Array(S.Union(S.Array(S.Null), S.Int, S.String)),
431449 "unsatisfactoriness": S.Array(S.Union(S.Array(S.Int), S.Boolean, S.Int)),
432450 "unsecurity": S.Array(S.Int),
433451 "unstressed": S.Array(S.Union(S.Boolean, S.String, UnstressedClass)),
434- "untasked": S.Array(S.Union(S.Array(S.Null), S.Number, S.Record({ key: S.String, value: S.Int}))),
435- "unvarying": S.Array(S.Union(S.Boolean, S.Number, S.Record({ key: S.String, value: S.Int}))),
452+ "untasked": S.Array(S.Union(S.Array(S.Null), S.Number, mapSchema(S.Int))),
453+ "unvarying": S.Array(S.Union(S.Boolean, S.Number, mapSchema(S.Int))),
436454 "vehemently": S.Array(S.Union(S.Array(S.Null), S.Boolean, S.Null)),
437- "warriorship": S.Record({ key: S.String, value: S.Boolean}),
455+ "warriorship": mapSchema(S.Boolean),
438456 "whitepot": S.Array(S.Union(S.Number, QuebrachineClass)),
439457 "wrothy": S.Array(S.Union(S.Array(S.Null), WrothyClass)),
440458 }) {}
Test case

test/inputs/json/priority/nbl-stats.json

1 generated file · +30 −12
Mtypescript-effect-schemadefault / TopLevel.ts+30 −12
@@ -1,5 +1,23 @@
11 import * as S from "effect/Schema";
22
3+const objectSchema = <A>() =>
4+ S.declare(
5+ (input): input is Record<string, A> =>
6+ typeof input === "object" && input !== null && !Array.isArray(input)
7+ );
8+const mapSchema = <A, I, R>(value: S.Schema<A, I, R>) => {
9+ const entries = S.transform(objectSchema<unknown>(), S.Array(S.Tuple(S.String, value)), {
10+ strict: false,
11+ decode: Object.entries,
12+ encode: Object.fromEntries
13+ });
14+ return S.transform(entries, objectSchema<A>(), {
15+ strict: false,
16+ decode: Object.fromEntries,
17+ encode: Object.entries
18+ });
19+};
20+
321
422 export const LeaddatumEnum = S.Literal(
523 "",
@@ -222,11 +240,11 @@ export class Pbp extends S.Class<Pbp>("Pbp")({
222240 }) {}
223241
224242 export class Totallds extends S.Class<Totallds>("Totallds")({
225- "sAssists": S.Record({ key: S.String, value: Scorer}),
226- "sBlocks": S.Record({ key: S.String, value: Scorer}),
227- "sPoints": S.Record({ key: S.String, value: Scorer}),
228- "sReboundsTotal": S.Record({ key: S.String, value: Scorer}),
229- "sSteals": S.Record({ key: S.String, value: Scorer}),
243+ "sAssists": mapSchema(Scorer),
244+ "sBlocks": mapSchema(Scorer),
245+ "sPoints": mapSchema(Scorer),
246+ "sReboundsTotal": mapSchema(Scorer),
247+ "sSteals": mapSchema(Scorer),
230248 }) {}
231249
232250 export class Team extends S.Class<Team>("Team")({
@@ -266,9 +284,9 @@ export class TopLevel extends S.Class<TopLevel>("TopLevel")({
266284 "periodLengthREGULAR": S.Int,
267285 "periodType": PerType,
268286 "periodsMax": S.Int,
269- "scorers": S.Record({ key: S.String, value: S.Array(Scorer)}),
287+ "scorers": mapSchema(S.Array(Scorer)),
270288 "timeline": S.Array(S.Any),
271- "tm": S.Record({ key: S.String, value: S.suspend(() => Tm)}),
289+ "tm": mapSchema(S.suspend(() => Tm)),
272290 "totalTimeAdded": S.Int,
273291 "totallds": Totallds,
274292 }) {}
@@ -278,11 +296,11 @@ export class SBlocks extends S.Class<SBlocks>("SBlocks")({
278296 }) {}
279297
280298 export class Lds extends S.Class<Lds>("Lds")({
281- "sAssists": S.Record({ key: S.String, value: Scorer}),
299+ "sAssists": mapSchema(Scorer),
282300 "sBlocks": SBlocks,
283- "sPoints": S.Record({ key: S.String, value: Scorer}),
284- "sReboundsTotal": S.Record({ key: S.String, value: Scorer}),
285- "sSteals": S.Record({ key: S.String, value: Scorer}),
301+ "sPoints": mapSchema(Scorer),
302+ "sReboundsTotal": mapSchema(Scorer),
303+ "sSteals": mapSchema(Scorer),
286304 }) {}
287305
288306 export class Tm extends S.Class<Tm>("Tm")({
@@ -298,7 +316,7 @@ export class Tm extends S.Class<Tm>("Tm")({
298316 "p2_score": S.Int,
299317 "p3_score": S.Int,
300318 "p4_score": S.Int,
301- "pl": S.Record({ key: S.String, value: Pl}),
319+ "pl": mapSchema(Pl),
302320 "score": S.Int,
303321 "scoring": S.Array(Scorer),
304322 "shortName": S.String,
Test case

test/inputs/json/priority/nested-objects.json

1 generated file · +20 −2
Mtypescript-effect-schemadefault / TopLevel.ts+20 −2
@@ -1,7 +1,25 @@
11 import * as S from "effect/Schema";
22
3+const objectSchema = <A>() =>
4+ S.declare(
5+ (input): input is Record<string, A> =>
6+ typeof input === "object" && input !== null && !Array.isArray(input)
7+ );
8+const mapSchema = <A, I, R>(value: S.Schema<A, I, R>) => {
9+ const entries = S.transform(objectSchema<unknown>(), S.Array(S.Tuple(S.String, value)), {
10+ strict: false,
11+ decode: Object.entries,
12+ encode: Object.fromEntries
13+ });
14+ return S.transform(entries, objectSchema<A>(), {
15+ strict: false,
16+ decode: Object.fromEntries,
17+ encode: Object.entries
18+ });
19+};
20+
321
422 export class TopLevel extends S.Class<TopLevel>("TopLevel")({
5- "a": S.Record({ key: S.String, value: S.Int}),
6- "b": S.Record({ key: S.String, value: S.Int}),
23+ "a": mapSchema(S.Int),
24+ "b": mapSchema(S.Int),
725 }) {}
Test case

test/inputs/json/priority/number-map.json

1 generated file · +19 −1
Mtypescript-effect-schemadefault / TopLevel.ts+19 −1
@@ -1,6 +1,24 @@
11 import * as S from "effect/Schema";
22
3+const objectSchema = <A>() =>
4+ S.declare(
5+ (input): input is Record<string, A> =>
6+ typeof input === "object" && input !== null && !Array.isArray(input)
7+ );
8+const mapSchema = <A, I, R>(value: S.Schema<A, I, R>) => {
9+ const entries = S.transform(objectSchema<unknown>(), S.Array(S.Tuple(S.String, value)), {
10+ strict: false,
11+ decode: Object.entries,
12+ encode: Object.fromEntries
13+ });
14+ return S.transform(entries, objectSchema<A>(), {
15+ strict: false,
16+ decode: Object.fromEntries,
17+ encode: Object.entries
18+ });
19+};
20+
321
422 export class TopLevel extends S.Class<TopLevel>("TopLevel")({
5- "foo": S.Record({ key: S.String, value: S.Number}),
23+ "foo": mapSchema(S.Number),
624 }) {}
Test case

test/inputs/json/samples/kitchen-sink.json

1 generated file · +20 −2
Mtypescript-effect-schemadefault / TopLevel.ts+20 −2
@@ -1,5 +1,23 @@
11 import * as S from "effect/Schema";
22
3+const objectSchema = <A>() =>
4+ S.declare(
5+ (input): input is Record<string, A> =>
6+ typeof input === "object" && input !== null && !Array.isArray(input)
7+ );
8+const mapSchema = <A, I, R>(value: S.Schema<A, I, R>) => {
9+ const entries = S.transform(objectSchema<unknown>(), S.Array(S.Tuple(S.String, value)), {
10+ strict: false,
11+ decode: Object.entries,
12+ encode: Object.fromEntries
13+ });
14+ return S.transform(entries, objectSchema<A>(), {
15+ strict: false,
16+ decode: Object.fromEntries,
17+ encode: Object.entries
18+ });
19+};
20+
321
422 export class PurplePerson extends S.Class<PurplePerson>("PurplePerson")({
523 "intOrString": S.Int,
@@ -22,10 +40,10 @@ export class TopLevel extends S.Class<TopLevel>("TopLevel")({
2240 "differentThings": S.Array(S.Union(S.Int, S.NumberFromString.pipe(S.int()), DifferentThingClass)),
2341 "doubleValue": S.Number,
2442 "intValue": S.Int,
25- "mapValue": S.Record({ key: S.String, value: S.NullOr(S.Int)}),
43+ "mapValue": mapSchema(S.NullOr(S.Int)),
2644 "name with spaces": S.Null,
2745 "nullValue": S.Null,
28- "nullableMapValue": S.Record({ key: S.String, value: S.NullOr(S.Int)}),
46+ "nullableMapValue": mapSchema(S.NullOr(S.Int)),
2947 "people": S.Array(PersonElement),
3048 "person": PurplePerson,
3149 "stringValue": S.String,
Test case

test/inputs/json/samples/us-avg-temperatures.json

1 generated file · +19 −1
Mtypescript-effect-schemadefault / TopLevel.ts+19 −1
@@ -1,5 +1,23 @@
11 import * as S from "effect/Schema";
22
3+const objectSchema = <A>() =>
4+ S.declare(
5+ (input): input is Record<string, A> =>
6+ typeof input === "object" && input !== null && !Array.isArray(input)
7+ );
8+const mapSchema = <A, I, R>(value: S.Schema<A, I, R>) => {
9+ const entries = S.transform(objectSchema<unknown>(), S.Array(S.Tuple(S.String, value)), {
10+ strict: false,
11+ decode: Object.entries,
12+ encode: Object.fromEntries
13+ });
14+ return S.transform(entries, objectSchema<A>(), {
15+ strict: false,
16+ decode: Object.fromEntries,
17+ encode: Object.entries
18+ });
19+};
20+
321
422 export class Description extends S.Class<Description>("Description")({
523 "base_period": S.String,
@@ -14,6 +32,6 @@ export class Datum extends S.Class<Datum>("Datum")({
1432 }) {}
1533
1634 export class TopLevel extends S.Class<TopLevel>("TopLevel")({
17- "data": S.Record({ key: S.String, value: Datum}),
35+ "data": mapSchema(Datum),
1836 "description": Description,
1937 }) {}
Test case

test/inputs/schema/any.schema

1 generated file · +19 −1
Mschema-typescript-effect-schemadefault / TopLevel.ts+19 −1
@@ -1,7 +1,25 @@
11 import * as S from "effect/Schema";
22
3+const objectSchema = <A>() =>
4+ S.declare(
5+ (input): input is Record<string, A> =>
6+ typeof input === "object" && input !== null && !Array.isArray(input)
7+ );
8+const mapSchema = <A, I, R>(value: S.Schema<A, I, R>) => {
9+ const entries = S.transform(objectSchema<unknown>(), S.Array(S.Tuple(S.String, value)), {
10+ strict: false,
11+ decode: Object.entries,
12+ encode: Object.fromEntries
13+ });
14+ return S.transform(entries, objectSchema<A>(), {
15+ strict: false,
16+ decode: Object.fromEntries,
17+ encode: Object.entries
18+ });
19+};
20+
321
422 export class TopLevel extends S.Class<TopLevel>("TopLevel")({
523 "foo": S.Any,
6- "values": S.Record({ key: S.String, value: S.Any}),
24+ "values": mapSchema(S.Any),
725 }) {}
Test case

test/inputs/schema/class-map-union.schema

1 generated file · +19 −1
Mschema-typescript-effect-schemadefault / TopLevel.ts+19 −1
@@ -1,10 +1,28 @@
11 import * as S from "effect/Schema";
22
3+const objectSchema = <A>() =>
4+ S.declare(
5+ (input): input is Record<string, A> =>
6+ typeof input === "object" && input !== null && !Array.isArray(input)
7+ );
8+const mapSchema = <A, I, R>(value: S.Schema<A, I, R>) => {
9+ const entries = S.transform(objectSchema<unknown>(), S.Array(S.Tuple(S.String, value)), {
10+ strict: false,
11+ decode: Object.entries,
12+ encode: Object.fromEntries
13+ });
14+ return S.transform(entries, objectSchema<A>(), {
15+ strict: false,
16+ decode: Object.fromEntries,
17+ encode: Object.entries
18+ });
19+};
20+
321
422 export class UnionClass extends S.Class<UnionClass>("UnionClass")({
523 "quux": S.optional(S.Int),
624 }) {}
725
826 export class TopLevel extends S.Class<TopLevel>("TopLevel")({
9- "union": S.optional(S.Record({ key: S.String, value: S.Union(S.Boolean, S.Number, S.String, UnionClass)})),
27+ "union": S.optional(mapSchema(S.Union(S.Boolean, S.Number, S.String, UnionClass))),
1028 }) {}
Test case

test/inputs/schema/class-with-additional.schema

1 generated file · +19 −1
Mschema-typescript-effect-schemadefault / TopLevel.ts+19 −1
@@ -1,6 +1,24 @@
11 import * as S from "effect/Schema";
22
3+const objectSchema = <A>() =>
4+ S.declare(
5+ (input): input is Record<string, A> =>
6+ typeof input === "object" && input !== null && !Array.isArray(input)
7+ );
8+const mapSchema = <A, I, R>(value: S.Schema<A, I, R>) => {
9+ const entries = S.transform(objectSchema<unknown>(), S.Array(S.Tuple(S.String, value)), {
10+ strict: false,
11+ decode: Object.entries,
12+ encode: Object.fromEntries
13+ });
14+ return S.transform(entries, objectSchema<A>(), {
15+ strict: false,
16+ decode: Object.fromEntries,
17+ encode: Object.entries
18+ });
19+};
20+
321
422 export class TopLevel extends S.Class<TopLevel>("TopLevel")({
5- "map": S.optional(S.Record({ key: S.String, value: S.Union(S.Boolean, S.Number)})),
23+ "map": S.optional(mapSchema(S.Union(S.Boolean, S.Number))),
624 }) {}
Test case

test/inputs/schema/direct-union.schema

1 generated file · +21 −3
Mschema-typescript-effect-schemadefault / TopLevel.ts+21 −3
@@ -1,11 +1,29 @@
11 import * as S from "effect/Schema";
22
3+const objectSchema = <A>() =>
4+ S.declare(
5+ (input): input is Record<string, A> =>
6+ typeof input === "object" && input !== null && !Array.isArray(input)
7+ );
8+const mapSchema = <A, I, R>(value: S.Schema<A, I, R>) => {
9+ const entries = S.transform(objectSchema<unknown>(), S.Array(S.Tuple(S.String, value)), {
10+ strict: false,
11+ decode: Object.entries,
12+ encode: Object.fromEntries
13+ });
14+ return S.transform(entries, objectSchema<A>(), {
15+ strict: false,
16+ decode: Object.fromEntries,
17+ encode: Object.entries
18+ });
19+};
20+
321
422 export class Thing extends S.Class<Thing>("Thing")({
5- "optional": S.optional(S.Union(S.Array(S.Any), S.Boolean, S.Number, S.Int, S.Record({ key: S.String, value: S.Any}), S.String, S.Null)),
6- "required": S.Union(S.Array(S.Any), S.Boolean, S.Number, S.Int, S.Record({ key: S.String, value: S.Any}), S.String, S.Null),
23+ "optional": S.optional(S.Union(S.Array(S.Any), S.Boolean, S.Number, S.Int, mapSchema(S.Any), S.String, S.Null)),
24+ "required": S.Union(S.Array(S.Any), S.Boolean, S.Number, S.Int, mapSchema(S.Any), S.String, S.Null),
725 }) {}
826
927 export class TopLevel extends S.Class<TopLevel>("TopLevel")({
10- "stuff": S.Record({ key: S.String, value: Thing}),
28+ "stuff": mapSchema(Thing),
1129 }) {}
Test case

test/inputs/schema/empty-object.schema

1 generated file · +19 −1
Mschema-typescript-effect-schemadefault / TopLevel.ts+19 −1
@@ -1,4 +1,22 @@
11 import * as S from "effect/Schema";
22
3-export const TopLevel = S.Record({ key: S.String, value: S.Any});
3+const objectSchema = <A>() =>
4+ S.declare(
5+ (input): input is Record<string, A> =>
6+ typeof input === "object" && input !== null && !Array.isArray(input)
7+ );
8+const mapSchema = <A, I, R>(value: S.Schema<A, I, R>) => {
9+ const entries = S.transform(objectSchema<unknown>(), S.Array(S.Tuple(S.String, value)), {
10+ strict: false,
11+ decode: Object.entries,
12+ encode: Object.fromEntries
13+ });
14+ return S.transform(entries, objectSchema<A>(), {
15+ strict: false,
16+ decode: Object.fromEntries,
17+ encode: Object.entries
18+ });
19+};
20+
21+export const TopLevel = mapSchema(S.Any);
422 export type TopLevel = S.Schema.Type<typeof TopLevel>;
Test case

test/inputs/schema/go-schema-pattern-properties.schema

1 generated file · +19 −1
Mschema-typescript-effect-schemadefault / TopLevel.ts+19 −1
@@ -1,6 +1,24 @@
11 import * as S from "effect/Schema";
22
3+const objectSchema = <A>() =>
4+ S.declare(
5+ (input): input is Record<string, A> =>
6+ typeof input === "object" && input !== null && !Array.isArray(input)
7+ );
8+const mapSchema = <A, I, R>(value: S.Schema<A, I, R>) => {
9+ const entries = S.transform(objectSchema<unknown>(), S.Array(S.Tuple(S.String, value)), {
10+ strict: false,
11+ decode: Object.entries,
12+ encode: Object.fromEntries
13+ });
14+ return S.transform(entries, objectSchema<A>(), {
15+ strict: false,
16+ decode: Object.fromEntries,
17+ encode: Object.entries
18+ });
19+};
20+
321
422 export class TopLevel extends S.Class<TopLevel>("TopLevel")({
5- "map": S.Record({ key: S.String, value: S.Int}),
23+ "map": mapSchema(S.Int),
624 }) {}
Test case

test/inputs/schema/recursive-union-flattening.schema

1 generated file · +21 −3
Mschema-typescript-effect-schemadefault / TopLevel.ts+21 −3
@@ -1,13 +1,31 @@
11 import * as S from "effect/Schema";
22
3+const objectSchema = <A>() =>
4+ S.declare(
5+ (input): input is Record<string, A> =>
6+ typeof input === "object" && input !== null && !Array.isArray(input)
7+ );
8+const mapSchema = <A, I, R>(value: S.Schema<A, I, R>) => {
9+ const entries = S.transform(objectSchema<unknown>(), S.Array(S.Tuple(S.String, value)), {
10+ strict: false,
11+ decode: Object.entries,
12+ encode: Object.fromEntries
13+ });
14+ return S.transform(entries, objectSchema<A>(), {
15+ strict: false,
16+ decode: Object.fromEntries,
17+ encode: Object.entries
18+ });
19+};
20+
321
422 export class XClass extends S.Class<XClass>("XClass")({
5- "x": S.optional(S.Union(S.Array(S.Union(S.Array(S.Any), S.Boolean, S.Number, S.String, S.suspend(() => XClass), S.Null)), S.Boolean, S.Number, S.Record({ key: S.String, value: S.Any}), S.String, S.Null)),
23+ "x": S.optional(S.Union(S.Array(S.Union(S.Array(S.Any), S.Boolean, S.Number, S.String, S.suspend(() => XClass), S.Null)), S.Boolean, S.Number, mapSchema(S.Any), S.String, S.Null)),
624 }) {}
725
826 export class TopLevelClass extends S.Class<TopLevelClass>("TopLevelClass")({
9- "x": S.optional(S.Union(S.Array(S.Union(S.Array(S.Any), S.Boolean, S.Number, S.String, XClass, S.Null)), S.Boolean, S.Number, S.Record({ key: S.String, value: S.Any}), S.String, S.Null)),
27+ "x": S.optional(S.Union(S.Array(S.Union(S.Array(S.Any), S.Boolean, S.Number, S.String, XClass, S.Null)), S.Boolean, S.Number, mapSchema(S.Any), S.String, S.Null)),
1028 }) {}
1129
12-export const TopLevel = S.Union(S.Array(S.Union(S.Array(S.Any), S.Boolean, S.Number, S.String, TopLevelClass, S.Null)), S.Boolean, S.Number, S.Int, S.Record({ key: S.String, value: S.Any}), S.String, S.Null);
30+export const TopLevel = S.Union(S.Array(S.Union(S.Array(S.Any), S.Boolean, S.Number, S.String, TopLevelClass, S.Null)), S.Boolean, S.Number, S.Int, mapSchema(S.Any), S.String, S.Null);
1331 export type TopLevel = S.Schema.Type<typeof TopLevel>;
Test case

test/inputs/schema/unevaluated-properties.schema

1 generated file · +19 −1
Mschema-typescript-effect-schemadefault / TopLevel.ts+19 −1
@@ -1,5 +1,23 @@
11 import * as S from "effect/Schema";
22
3+const objectSchema = <A>() =>
4+ S.declare(
5+ (input): input is Record<string, A> =>
6+ typeof input === "object" && input !== null && !Array.isArray(input)
7+ );
8+const mapSchema = <A, I, R>(value: S.Schema<A, I, R>) => {
9+ const entries = S.transform(objectSchema<unknown>(), S.Array(S.Tuple(S.String, value)), {
10+ strict: false,
11+ decode: Object.entries,
12+ encode: Object.fromEntries
13+ });
14+ return S.transform(entries, objectSchema<A>(), {
15+ strict: false,
16+ decode: Object.fromEntries,
17+ encode: Object.entries
18+ });
19+};
20+
321
422 export class Item extends S.Class<Item>("Item")({
523 "key": S.String,
@@ -12,7 +30,7 @@ export class ClosedClass extends S.Class<ClosedClass>("ClosedClass")(S.Struct({}
1230 export class Config extends S.Class<Config>("Config")({
1331 "closed": S.optional(S.Union(S.Array(S.Any), S.Boolean, S.Number, S.Int, S.String, ClosedClass, S.Null)),
1432 "name": S.optional(S.String),
15- "settings": S.optional(S.Record({ key: S.String, value: S.Array(Item)})),
33+ "settings": S.optional(mapSchema(S.Array(Item))),
1634 }) {}
1735
1836 export class TopLevel extends S.Class<TopLevel>("TopLevel")({
Test case

test/inputs/schema/vega-lite.schema

1 generated file · +29 −11
Mschema-typescript-effect-schemadefault / TopLevel.ts+29 −11
@@ -1,5 +1,23 @@
11 import * as S from "effect/Schema";
22
3+const objectSchema = <A>() =>
4+ S.declare(
5+ (input): input is Record<string, A> =>
6+ typeof input === "object" && input !== null && !Array.isArray(input)
7+ );
8+const mapSchema = <A, I, R>(value: S.Schema<A, I, R>) => {
9+ const entries = S.transform(objectSchema<unknown>(), S.Array(S.Tuple(S.String, value)), {
10+ strict: false,
11+ decode: Object.entries,
12+ encode: Object.fromEntries
13+ });
14+ return S.transform(entries, objectSchema<A>(), {
15+ strict: false,
16+ decode: Object.fromEntries,
17+ encode: Object.entries
18+ });
19+};
20+
321 // Determines how size calculation should be performed, one of `"content"` or `"padding"`.
422 // The default setting (`"content"`) interprets the width and height settings as the data
523 // rectangle (plotting) dimensions, to which padding is then added. In contrast, the
@@ -642,7 +660,7 @@ export class Projection extends S.Class<Projection>("Projection")({
642660 "fraction": S.optional(S.Number),
643661 "lobes": S.optional(S.Number),
644662 "parallel": S.optional(S.Number),
645- "precision": S.optional(S.Record({ key: S.String, value: S.Union(S.Number, S.String)})),
663+ "precision": S.optional(mapSchema(S.Union(S.Number, S.String))),
646664 "radius": S.optional(S.Number),
647665 "ratio": S.optional(S.Number),
648666 "rotate": S.optional(S.Array(S.Number)),
@@ -789,7 +807,7 @@ export class Header extends S.Class<Header>("Header")({
789807 }) {}
790808
791809 export class SelectionDef extends S.Class<SelectionDef>("SelectionDef")({
792- "bind": S.optional(S.Union(BindEnum, S.Record({ key: S.String, value: S.suspend(() => VgBinding)}))),
810+ "bind": S.optional(S.Union(BindEnum, mapSchema(S.suspend(() => VgBinding)))),
793811 "empty": S.optional(Empty),
794812 "encodings": S.optional(S.Array(SingleDefChannel)),
795813 "fields": S.optional(S.Array(S.String)),
@@ -989,7 +1007,7 @@ export class EncodingWithFacet extends S.Class<EncodingWithFacet>("EncodingWithF
9891007 }) {}
9901008
9911009 export class DataFormat extends S.Class<DataFormat>("DataFormat")({
992- "parse": S.optional(S.Union(ParseEnum, S.Record({ key: S.String, value: S.Any}))),
1010+ "parse": S.optional(S.Union(ParseEnum, mapSchema(S.Any))),
9931011 "type": S.optional(DataFormatType),
9941012 "property": S.optional(S.String),
9951013 "feature": S.optional(S.String),
@@ -999,7 +1017,7 @@ export class DataFormat extends S.Class<DataFormat>("DataFormat")({
9991017 export class Data extends S.Class<Data>("Data")({
10001018 "format": S.optional(DataFormat),
10011019 "url": S.optional(S.String),
1002- "values": S.optional(S.Union(S.Array(S.Union(S.Boolean, S.Number, S.Record({ key: S.String, value: S.Any}), S.String)), S.Record({ key: S.String, value: S.Any}), S.String)),
1020+ "values": S.optional(S.Union(S.Array(S.Union(S.Boolean, S.Number, mapSchema(S.Any), S.String)), mapSchema(S.Any), S.String)),
10031021 "name": S.optional(S.String),
10041022 }) {}
10051023
@@ -1139,7 +1157,7 @@ export class VgBinding extends S.Class<VgBinding>("VgBinding")({
11391157 }) {}
11401158
11411159 export class SingleSelectionConfig extends S.Class<SingleSelectionConfig>("SingleSelectionConfig")({
1142- "bind": S.optional(S.Record({ key: S.String, value: VgBinding})),
1160+ "bind": S.optional(mapSchema(VgBinding)),
11431161 "empty": S.optional(Empty),
11441162 "encodings": S.optional(S.Array(SingleDefChannel)),
11451163 "fields": S.optional(S.Array(S.String)),
@@ -1237,7 +1255,7 @@ export class ProjectionConfig extends S.Class<ProjectionConfig>("ProjectionConfi
12371255 "fraction": S.optional(S.Number),
12381256 "lobes": S.optional(S.Number),
12391257 "parallel": S.optional(S.Number),
1240- "precision": S.optional(S.Record({ key: S.String, value: S.Union(S.Number, S.String)})),
1258+ "precision": S.optional(mapSchema(S.Union(S.Number, S.String))),
12411259 "radius": S.optional(S.Number),
12421260 "ratio": S.optional(S.Number),
12431261 "rotate": S.optional(S.Array(S.Number)),
@@ -1474,14 +1492,14 @@ export class Config extends S.Class<Config>("Config")({
14741492 "padding": S.optional(S.Union(S.Number, PaddingClass)),
14751493 "point": S.optional(MarkConfig),
14761494 "projection": S.optional(ProjectionConfig),
1477- "range": S.optional(S.Record({ key: S.String, value: S.Union(S.Array(S.Union(S.Number, S.String)), VgScheme)})),
1495+ "range": S.optional(mapSchema(S.Union(S.Array(S.Union(S.Number, S.String)), VgScheme))),
14781496 "rect": S.optional(MarkConfig),
14791497 "rule": S.optional(MarkConfig),
14801498 "scale": S.optional(ScaleConfig),
14811499 "selection": S.optional(SelectionConfig),
14821500 "square": S.optional(MarkConfig),
14831501 "stack": S.optional(StackOffset),
1484- "style": S.optional(S.Record({ key: S.String, value: VgMarkConfig})),
1502+ "style": S.optional(mapSchema(VgMarkConfig)),
14851503 "text": S.optional(TextConfig),
14861504 "tick": S.optional(TickConfig),
14871505 "timeFormat": S.optional(S.String),
@@ -1524,7 +1542,7 @@ export class TopLevel extends S.Class<TopLevel>("TopLevel")({
15241542 "name": S.optional(S.String),
15251543 "padding": S.optional(S.Union(S.Number, PaddingClass)),
15261544 "projection": S.optional(Projection),
1527- "selection": S.optional(S.Record({ key: S.String, value: SelectionDef})),
1545+ "selection": S.optional(mapSchema(SelectionDef)),
15281546 "title": S.optional(S.Union(S.String, TitleParams)),
15291547 "transform": S.optional(S.Array(Transform)),
15301548 "width": S.optional(S.Number),
@@ -1550,7 +1568,7 @@ export class Spec extends S.Class<Spec>("Spec")({
15501568 "encoding": S.optional(Encoding),
15511569 "mark": S.optional(S.Union(Mark, MarkDef)),
15521570 "projection": S.optional(Projection),
1553- "selection": S.optional(S.Record({ key: S.String, value: SelectionDef})),
1571+ "selection": S.optional(mapSchema(SelectionDef)),
15541572 "facet": S.optional(FacetMapping),
15551573 "spec": S.optional(S.suspend(() => Spec)),
15561574 "repeat": S.optional(Repeat),
@@ -1571,5 +1589,5 @@ export class LayerSpec extends S.Class<LayerSpec>("LayerSpec")({
15711589 "encoding": S.optional(Encoding),
15721590 "mark": S.optional(S.Union(Mark, MarkDef)),
15731591 "projection": S.optional(Projection),
1574- "selection": S.optional(S.Record({ key: S.String, value: SelectionDef})),
1592+ "selection": S.optional(mapSchema(SelectionDef)),
15751593 }) {}
No generated files match these filters.